diff --git a/config/c-compiler.m4 b/config/c-compiler.m4 index 4ef0de65a8b08..ea8ea9705b479 100644 --- a/config/c-compiler.m4 +++ b/config/c-compiler.m4 @@ -488,15 +488,14 @@ AC_DEFUN([PGAC_SSE42_CRC32_INTRINSICS], AC_CACHE_CHECK([for _mm_crc32_u8 and _mm_crc32_u32 with CFLAGS=$1], [Ac_cachevar], [pgac_save_CFLAGS=$CFLAGS CFLAGS="$pgac_save_CFLAGS $1" -ac_save_c_werror_flag=$ac_c_werror_flag -ac_c_werror_flag=yes AC_TRY_LINK([#include ], [unsigned int crc = 0; crc = _mm_crc32_u8(crc, 0); - crc = _mm_crc32_u32(crc, 0);], + crc = _mm_crc32_u32(crc, 0); + /* return computed value, to prevent the above being optimized away */ + return crc == 0;], [Ac_cachevar=yes], [Ac_cachevar=no]) -ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="$pgac_save_CFLAGS"]) if test x"$Ac_cachevar" = x"yes"; then CFLAGS_SSE42="$1" diff --git a/config/config.guess b/config/config.guess index 1f5c50c0d1529..fddac4281a635 100755 --- a/config/config.guess +++ b/config/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2015 Free Software Foundation, Inc. -timestamp='2014-03-23' +timestamp='2015-07-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -24,12 +24,12 @@ timestamp='2014-03-23' # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # -# Originally written by Per Bothner. +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) + arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ @@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in os=netbsd ;; esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need @@ -207,13 +221,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` @@ -579,8 +593,9 @@ EOF else IBM_ARCH=powerpc fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi @@ -932,6 +947,9 @@ EOF crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -1020,7 +1038,7 @@ EOF echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} diff --git a/config/config.sub b/config/config.sub index d654d03cdcd22..ccc03ef656b49 100755 --- a/config/config.sub +++ b/config/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2015 Free Software Foundation, Inc. -timestamp='2014-05-01' +timestamp='2015-08-18' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ timestamp='2014-05-01' # of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -68,7 +68,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os @@ -255,12 +255,13 @@ case $basic_machine in | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ + | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ @@ -302,9 +303,10 @@ case $basic_machine in | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ + | riscv32 | riscv64 \ | rl78 | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ @@ -312,6 +314,7 @@ case $basic_machine in | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) @@ -326,6 +329,9 @@ case $basic_machine in c6x) basic_machine=tic6x-unknown ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none @@ -371,12 +377,13 @@ case $basic_machine in | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ @@ -423,12 +430,13 @@ case $basic_machine in | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ + | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ @@ -436,6 +444,7 @@ case $basic_machine in | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ + | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ @@ -512,6 +521,9 @@ case $basic_machine in basic_machine=i386-pc os=-aros ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -773,6 +785,9 @@ case $basic_machine in basic_machine=m68k-isi os=-sysv ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; m68knommu) basic_machine=m68k-unknown os=-linux @@ -828,6 +843,10 @@ case $basic_machine in basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -1360,7 +1379,7 @@ case $os in | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ + | -aos* | -aros* | -cloudabi* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ @@ -1373,7 +1392,7 @@ case $os in | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ diff --git a/config/test_quiet_include.h b/config/test_quiet_include.h index f4fa4d30dd774..732b23149e946 100644 --- a/config/test_quiet_include.h +++ b/config/test_quiet_include.h @@ -7,3 +7,12 @@ fun() { return 0; } + +/* + * "IBM XL C/C++ for AIX, V12.1" miscompiles, for 32-bit, some inline + * expansions of ginCompareItemPointers() "long long" arithmetic. To take + * advantage of inlining, build a 64-bit PostgreSQL. + */ +#if defined(__ILP32__) && defined(__IBMC__) +#error "known inlining bug" +#endif diff --git a/configure b/configure index d8f21563f6de5..2a22da9d3e157 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 9.5alpha1. +# Generated by GNU Autoconf 2.69 for PostgreSQL 9.5beta1. # # Report bugs to . # @@ -582,8 +582,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='PostgreSQL' PACKAGE_TARNAME='postgresql' -PACKAGE_VERSION='9.5alpha1' -PACKAGE_STRING='PostgreSQL 9.5alpha1' +PACKAGE_VERSION='9.5beta1' +PACKAGE_STRING='PostgreSQL 9.5beta1' PACKAGE_BUGREPORT='pgsql-bugs@postgresql.org' PACKAGE_URL='' @@ -627,6 +627,7 @@ ac_includes_default="\ ac_subst_vars='LTLIBOBJS vpath_build +PG_VERSION_NUM PROVE OSX XSLTPROC @@ -1394,7 +1395,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 9.5alpha1 to adapt to many kinds of systems. +\`configure' configures PostgreSQL 9.5beta1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1459,7 +1460,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of PostgreSQL 9.5alpha1:";; + short | recursive ) echo "Configuration of PostgreSQL 9.5beta1:";; esac cat <<\_ACEOF @@ -1609,7 +1610,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -PostgreSQL configure 9.5alpha1 +PostgreSQL configure 9.5beta1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2320,7 +2321,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 9.5alpha1, which was +It was created by PostgreSQL $as_me 9.5beta1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4875,6 +4876,41 @@ if test x"$pgac_cv_prog_cc_cflags__qnoansialias" = x"yes"; then CFLAGS="$CFLAGS -qnoansialias" fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -qlonglong" >&5 +$as_echo_n "checking whether $CC supports -qlonglong... " >&6; } +if ${pgac_cv_prog_cc_cflags__qlonglong+:} false; then : + $as_echo_n "(cached) " >&6 +else + pgac_save_CFLAGS=$CFLAGS +CFLAGS="$pgac_save_CFLAGS -qlonglong" +ac_save_c_werror_flag=$ac_c_werror_flag +ac_c_werror_flag=yes +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + pgac_cv_prog_cc_cflags__qlonglong=yes +else + pgac_cv_prog_cc_cflags__qlonglong=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_c_werror_flag=$ac_save_c_werror_flag +CFLAGS="$pgac_save_CFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_cc_cflags__qlonglong" >&5 +$as_echo "$pgac_cv_prog_cc_cflags__qlonglong" >&6; } +if test x"$pgac_cv_prog_cc_cflags__qlonglong" = x"yes"; then + CFLAGS="$CFLAGS -qlonglong" +fi + elif test "$PORTNAME" = "hpux"; then # On some versions of HP-UX, libm functions do not set errno by default. # Fix that by using +Olibmerrno if the compiler recognizes it. @@ -14260,8 +14296,6 @@ if ${pgac_cv_sse42_crc32_intrinsics_+:} false; then : else pgac_save_CFLAGS=$CFLAGS CFLAGS="$pgac_save_CFLAGS " -ac_save_c_werror_flag=$ac_c_werror_flag -ac_c_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -14271,6 +14305,8 @@ main () unsigned int crc = 0; crc = _mm_crc32_u8(crc, 0); crc = _mm_crc32_u32(crc, 0); + /* return computed value, to prevent the above being optimized away */ + return crc == 0; ; return 0; } @@ -14282,7 +14318,6 @@ else fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="$pgac_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_sse42_crc32_intrinsics_" >&5 @@ -14300,8 +14335,6 @@ if ${pgac_cv_sse42_crc32_intrinsics__msse4_2+:} false; then : else pgac_save_CFLAGS=$CFLAGS CFLAGS="$pgac_save_CFLAGS -msse4.2" -ac_save_c_werror_flag=$ac_c_werror_flag -ac_c_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -14311,6 +14344,8 @@ main () unsigned int crc = 0; crc = _mm_crc32_u8(crc, 0); crc = _mm_crc32_u32(crc, 0); + /* return computed value, to prevent the above being optimized away */ + return crc == 0; ; return 0; } @@ -14322,7 +14357,6 @@ else fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="$pgac_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_sse42_crc32_intrinsics__msse4_2" >&5 @@ -15549,6 +15583,7 @@ _ACEOF + # Begin output steps { $as_echo "$as_me:${as_lineno-$LINENO}: using compiler=$cc_string" >&5 @@ -16107,7 +16142,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 9.5alpha1, which was +This file was extended by PostgreSQL $as_me 9.5beta1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16177,7 +16212,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 9.5alpha1 +PostgreSQL config.status 9.5beta1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.in b/configure.in index 21ba3a52f9f3a..55ea5ed9ba057 100644 --- a/configure.in +++ b/configure.in @@ -17,7 +17,7 @@ dnl Read the Autoconf manual for details. dnl m4_pattern_forbid(^PGAC_)dnl to catch undefined macros -AC_INIT([PostgreSQL], [9.5alpha1], [pgsql-bugs@postgresql.org]) +AC_INIT([PostgreSQL], [9.5beta1], [pgsql-bugs@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 @@ -461,6 +461,7 @@ elif test "$ICC" = yes; then elif test "$PORTNAME" = "aix"; then # AIX's xlc has to have strict aliasing turned off too PGAC_PROG_CC_CFLAGS_OPT([-qnoansialias]) + PGAC_PROG_CC_CFLAGS_OPT([-qlonglong]) elif test "$PORTNAME" = "hpux"; then # On some versions of HP-UX, libm functions do not set errno by default. # Fix that by using +Olibmerrno if the compiler recognizes it. @@ -2128,6 +2129,7 @@ AC_DEFINE_UNQUOTED(PG_VERSION_STR, tr '.' ' ' | $AWK '{printf "%d%02d%02d", $1, $2, (NF >= 3) ? $3 : 0}'`"] AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number]) +AC_SUBST(PG_VERSION_NUM) # Begin output steps diff --git a/contrib/btree_gist/Makefile b/contrib/btree_gist/Makefile index 9b7d61dff712f..a4b2cc7ef54bd 100644 --- a/contrib/btree_gist/Makefile +++ b/contrib/btree_gist/Makefile @@ -11,7 +11,7 @@ OBJS = btree_gist.o btree_utils_num.o btree_utils_var.o btree_int2.o \ EXTENSION = btree_gist DATA = btree_gist--1.1.sql btree_gist--unpackaged--1.0.sql \ btree_gist--1.0--1.1.sql -PGFILEDESC = "btree_gist - B-tree equivalent GIST operator classes" +PGFILEDESC = "btree_gist - B-tree equivalent GiST operator classes" REGRESS = init int2 int4 int8 float4 float8 cash oid timestamp timestamptz \ time timetz date interval macaddr inet cidr text varchar char bytea \ diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c index c746c2319c3ff..ab22b271d339a 100644 --- a/contrib/btree_gist/btree_ts.c +++ b/contrib/btree_gist/btree_ts.c @@ -369,7 +369,7 @@ gbt_ts_penalty(PG_FUNCTION_ARGS) newdbl[2]; /* - * We are allways using "double" timestamps here. Precision should be good + * We are always using "double" timestamps here. Precision should be good * enough. */ orgdbl[0] = ((double) origentry->lower); diff --git a/contrib/btree_gist/btree_utils_var.c b/contrib/btree_gist/btree_utils_var.c index 8105a3b03507d..70b3794325b53 100644 --- a/contrib/btree_gist/btree_utils_var.c +++ b/contrib/btree_gist/btree_utils_var.c @@ -52,7 +52,7 @@ gbt_var_decompress(PG_FUNCTION_ARGS) PG_RETURN_POINTER(entry); } -/* Returns a better readable representaion of variable key ( sets pointer ) */ +/* Returns a better readable representation of variable key ( sets pointer ) */ GBT_VARKEY_R gbt_var_key_readable(const GBT_VARKEY *k) { diff --git a/contrib/cube/cube.c b/contrib/cube/cube.c index 113c66383ac36..a6be59ec93fbf 100644 --- a/contrib/cube/cube.c +++ b/contrib/cube/cube.c @@ -814,7 +814,7 @@ cube_inter(PG_FUNCTION_ARGS) Max(LL_COORD(b, i), UR_COORD(b, i)) ); } - /* continue on the higher dimemsions only present in 'a' */ + /* continue on the higher dimensions only present in 'a' */ for (; i < DIM(a); i++) { result->x[i] = Max(0, diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c index 499f24ff2872e..5ce8f90cd8ba3 100644 --- a/contrib/file_fdw/file_fdw.c +++ b/contrib/file_fdw/file_fdw.c @@ -563,7 +563,8 @@ fileGetForeignPlan(PlannerInfo *root, scan_relid, NIL, /* no expressions to evaluate */ best_path->fdw_private, - NIL /* no custom tlist */ ); + NIL, /* no custom tlist */ + NIL /* no remote quals */ ); } /* diff --git a/contrib/hstore_plperl/Makefile b/contrib/hstore_plperl/Makefile index 19a8ab4493c6a..8f7b171bcd611 100644 --- a/contrib/hstore_plperl/Makefile +++ b/contrib/hstore_plperl/Makefile @@ -23,13 +23,22 @@ include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif +# In configurations that forbid undefined symbols in libraries, link with each +# dependency. This does preclude pgxs builds. +ifeq ($(PORTNAME), aix) +rpathdir = $(pkglibdir):$(perl_archlibexp)/CORE +SHLIB_LINK += ../hstore/libhstore.exp $(perl_embed_ldflags) +endif ifeq ($(PORTNAME), win32) # these settings are the same as for plperl override CPPFLAGS += -DPLPERL_HAVE_UID_GID -Wno-comment -# This means we need an in-tree build on Windows, not a pgxs build SHLIB_LINK += ../hstore/libhstore.a $(wildcard ../../src/pl/plperl/libperl*.a) endif +ifeq ($(PORTNAME), cygwin) +SHLIB_LINK += -L../hstore -l hstore $(perl_embed_ldflags) +endif + # As with plperl we need to make sure that the CORE directory is included # last, probably because it sometimes contains some header files with names # that clash with some of ours, or with some that we include, notably on diff --git a/contrib/hstore_plpython/Makefile b/contrib/hstore_plpython/Makefile index 6ee434bafa804..2de00a2c43c9c 100644 --- a/contrib/hstore_plpython/Makefile +++ b/contrib/hstore_plpython/Makefile @@ -23,11 +23,21 @@ include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif +# In configurations that forbid undefined symbols in libraries, link with each +# dependency. This does preclude pgxs builds. +ifeq ($(PORTNAME), aix) +rpathdir = $(pkglibdir):$(python_libdir) +SHLIB_LINK += ../hstore/libhstore.exp $(python_libspec) $(python_additional_libs) $(wildcard ../../src/pl/plpython/libplpython*.exp) +endif ifeq ($(PORTNAME), win32) -# This means we need an in-tree build on Windows, not a pgxs build SHLIB_LINK += ../hstore/libhstore.a $(wildcard ../../src/pl/plpython/libpython*.a) $(wildcard ../../src/pl/plpython/libplpython*.a) endif +ifeq ($(PORTNAME), cygwin) +SHLIB_LINK += -L../hstore -lhstore -L../../src/pl/plpython \ + -lplpython$(python_majorversion) $(python_libspec) +endif + REGRESS_OPTS += --load-extension=hstore ifeq ($(python_majorversion),2) REGRESS_OPTS += --load-extension=plpythonu --load-extension=hstore_plpythonu diff --git a/contrib/intarray/_int_bool.c b/contrib/intarray/_int_bool.c index c3c39d194bc89..5d9e676660fd9 100644 --- a/contrib/intarray/_int_bool.c +++ b/contrib/intarray/_int_bool.c @@ -564,6 +564,9 @@ typedef struct static void infix(INFIX *in, bool first) { + /* since this function recurses, it could be driven to stack overflow. */ + check_stack_depth(); + if (in->curpol->type == VAL) { RESIZEBUF(in, 11); diff --git a/contrib/isn/.gitignore b/contrib/isn/.gitignore new file mode 100644 index 0000000000000..5dcb3ff972350 --- /dev/null +++ b/contrib/isn/.gitignore @@ -0,0 +1,4 @@ +# Generated subdirectories +/log/ +/results/ +/tmp_check/ diff --git a/contrib/isn/Makefile b/contrib/isn/Makefile index 75c07a8296d8f..96aaf35884478 100644 --- a/contrib/isn/Makefile +++ b/contrib/isn/Makefile @@ -6,6 +6,8 @@ EXTENSION = isn DATA = isn--1.0.sql isn--unpackaged--1.0.sql PGFILEDESC = "isn - data types for international product numbering standards" +REGRESS = isn + ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) diff --git a/contrib/isn/expected/isn.out b/contrib/isn/expected/isn.out new file mode 100644 index 0000000000000..140bc86656147 --- /dev/null +++ b/contrib/isn/expected/isn.out @@ -0,0 +1,222 @@ +-- +-- Test ISN extension +-- +CREATE EXTENSION isn; +-- +-- test valid conversions +-- +SELECT '9780123456786'::EAN13, -- old book + '9790123456785'::EAN13, -- music + '9791234567896'::EAN13, -- new book + '9771234567898'::EAN13, -- serial + '0123456789012'::EAN13, -- upc + '1234567890128'::EAN13; + ean13 | ean13 | ean13 | ean13 | ean13 | ean13 +-------------------+-------------------+-----------------+-------------------+-----------------+----------------- + 978-0-12-345678-6 | 979-0-1234-5678-5 | 979-123456789-6 | 977-1234-567-89-8 | 012-345678901-2 | 123-456789012-8 +(1 row) + +SELECT '9780123456786'::ISBN, + '123456789X'::ISBN, + '9780123456786'::ISBN13::ISBN, + '9780123456786'::EAN13::ISBN; + isbn | isbn | isbn | isbn +---------------+---------------+---------------+--------------- + 0-12-345678-9 | 1-234-56789-X | 0-12-345678-9 | 0-12-345678-9 +(1 row) + +SELECT -- new books, shown as ISBN13 even for ISBN... + '9791234567896'::ISBN, + '9791234567896'::ISBN13::ISBN, + '9791234567896'::EAN13::ISBN; + isbn | isbn | isbn +-----------------+-----------------+----------------- + 979-123456789-6 | 979-123456789-6 | 979-123456789-6 +(1 row) + +SELECT '9780123456786'::ISBN13, + '123456789X'::ISBN13, + '9791234567896'::ISBN13, + '9791234567896'::EAN13::ISBN13; + isbn13 | isbn13 | isbn13 | isbn13 +-------------------+-------------------+-----------------+----------------- + 978-0-12-345678-6 | 978-1-234-56789-7 | 979-123456789-6 | 979-123456789-6 +(1 row) + +SELECT '9790123456785'::ISMN, + '9790123456785'::EAN13::ISMN, + 'M123456785'::ISMN, + 'M-1234-5678-5'::ISMN; + ismn | ismn | ismn | ismn +---------------+---------------+---------------+--------------- + M-1234-5678-5 | M-1234-5678-5 | M-1234-5678-5 | M-1234-5678-5 +(1 row) + +SELECT '9790123456785'::ISMN13, + 'M123456785'::ISMN13, + 'M-1234-5678-5'::ISMN13; + ismn13 | ismn13 | ismn13 +-------------------+-------------------+------------------- + 979-0-1234-5678-5 | 979-0-1234-5678-5 | 979-0-1234-5678-5 +(1 row) + +SELECT '9771234567003'::ISSN, + '12345679'::ISSN; + issn | issn +-----------+----------- + 1234-5679 | 1234-5679 +(1 row) + +SELECT '9771234567003'::ISSN13, + '12345679'::ISSN13, + '9771234567898'::ISSN13, + '9771234567898'::EAN13::ISSN13; + issn13 | issn13 | issn13 | issn13 +-------------------+-------------------+-------------------+------------------- + 977-1234-567-00-3 | 977-1234-567-00-3 | 977-1234-567-89-8 | 977-1234-567-89-8 +(1 row) + +SELECT '0123456789012'::UPC, + '0123456789012'::EAN13::UPC; + upc | upc +--------------+-------------- + 123456789012 | 123456789012 +(1 row) + +-- +-- test invalid checksums +-- +SELECT '1234567890'::ISBN; +ERROR: invalid check digit for ISBN number: "1234567890", should be X +LINE 1: SELECT '1234567890'::ISBN; + ^ +SELECT 'M123456780'::ISMN; +ERROR: invalid check digit for ISMN number: "M123456780", should be 5 +LINE 1: SELECT 'M123456780'::ISMN; + ^ +SELECT '12345670'::ISSN; +ERROR: invalid check digit for ISSN number: "12345670", should be 9 +LINE 1: SELECT '12345670'::ISSN; + ^ +SELECT '9780123456780'::ISBN; +ERROR: invalid check digit for ISBN number: "9780123456780", should be 6 +LINE 1: SELECT '9780123456780'::ISBN; + ^ +SELECT '9791234567890'::ISBN13; +ERROR: invalid check digit for ISBN number: "9791234567890", should be 6 +LINE 1: SELECT '9791234567890'::ISBN13; + ^ +SELECT '0123456789010'::UPC; +ERROR: invalid check digit for UPC number: "0123456789010", should be 2 +LINE 1: SELECT '0123456789010'::UPC; + ^ +SELECT '1234567890120'::EAN13; +ERROR: invalid check digit for EAN13 number: "1234567890120", should be 8 +LINE 1: SELECT '1234567890120'::EAN13; + ^ +-- +-- test invalid conversions +-- +SELECT '9790123456785'::ISBN; -- not a book +ERROR: cannot cast ISMN to ISBN for number: "9790123456785" +LINE 1: SELECT '9790123456785'::ISBN; + ^ +SELECT '9771234567898'::ISBN; -- not a book +ERROR: cannot cast ISSN to ISBN for number: "9771234567898" +LINE 1: SELECT '9771234567898'::ISBN; + ^ +SELECT '0123456789012'::ISBN; -- not a book +ERROR: cannot cast UPC to ISBN for number: "0123456789012" +LINE 1: SELECT '0123456789012'::ISBN; + ^ +SELECT '9790123456785'::ISBN13; -- not a book +ERROR: cannot cast ISMN to ISBN for number: "9790123456785" +LINE 1: SELECT '9790123456785'::ISBN13; + ^ +SELECT '9771234567898'::ISBN13; -- not a book +ERROR: cannot cast ISSN to ISBN for number: "9771234567898" +LINE 1: SELECT '9771234567898'::ISBN13; + ^ +SELECT '0123456789012'::ISBN13; -- not a book +ERROR: cannot cast UPC to ISBN for number: "0123456789012" +LINE 1: SELECT '0123456789012'::ISBN13; + ^ +SELECT '9780123456786'::ISMN; -- not music +ERROR: cannot cast ISBN to ISMN for number: "9780123456786" +LINE 1: SELECT '9780123456786'::ISMN; + ^ +SELECT '9771234567898'::ISMN; -- not music +ERROR: cannot cast ISSN to ISMN for number: "9771234567898" +LINE 1: SELECT '9771234567898'::ISMN; + ^ +SELECT '9791234567896'::ISMN; -- not music +ERROR: cannot cast ISBN to ISMN for number: "9791234567896" +LINE 1: SELECT '9791234567896'::ISMN; + ^ +SELECT '0123456789012'::ISMN; -- not music +ERROR: cannot cast UPC to ISMN for number: "0123456789012" +LINE 1: SELECT '0123456789012'::ISMN; + ^ +SELECT '9780123456786'::ISSN; -- not serial +ERROR: cannot cast ISBN to ISSN for number: "9780123456786" +LINE 1: SELECT '9780123456786'::ISSN; + ^ +SELECT '9790123456785'::ISSN; -- not serial +ERROR: cannot cast ISMN to ISSN for number: "9790123456785" +LINE 1: SELECT '9790123456785'::ISSN; + ^ +SELECT '9791234567896'::ISSN; -- not serial +ERROR: cannot cast ISBN to ISSN for number: "9791234567896" +LINE 1: SELECT '9791234567896'::ISSN; + ^ +SELECT '0123456789012'::ISSN; -- not serial +ERROR: cannot cast UPC to ISSN for number: "0123456789012" +LINE 1: SELECT '0123456789012'::ISSN; + ^ +SELECT '9780123456786'::UPC; -- not a product +ERROR: cannot cast ISBN to UPC for number: "9780123456786" +LINE 1: SELECT '9780123456786'::UPC; + ^ +SELECT '9771234567898'::UPC; -- not a product +ERROR: cannot cast ISSN to UPC for number: "9771234567898" +LINE 1: SELECT '9771234567898'::UPC; + ^ +SELECT '9790123456785'::UPC; -- not a product +ERROR: cannot cast ISMN to UPC for number: "9790123456785" +LINE 1: SELECT '9790123456785'::UPC; + ^ +SELECT '9791234567896'::UPC; -- not a product +ERROR: cannot cast ISBN to UPC for number: "9791234567896" +LINE 1: SELECT '9791234567896'::UPC; + ^ +SELECT 'postgresql...'::EAN13; +ERROR: invalid input syntax for EAN13 number: "postgresql..." +LINE 1: SELECT 'postgresql...'::EAN13; + ^ +SELECT 'postgresql...'::ISBN; +ERROR: invalid input syntax for ISBN number: "postgresql..." +LINE 1: SELECT 'postgresql...'::ISBN; + ^ +SELECT 9780123456786::EAN13; +ERROR: cannot cast type bigint to ean13 +LINE 1: SELECT 9780123456786::EAN13; + ^ +SELECT 9780123456786::ISBN; +ERROR: cannot cast type bigint to isbn +LINE 1: SELECT 9780123456786::ISBN; + ^ +-- +-- test some comparisons, must yield true +-- +SELECT '12345679'::ISSN = '9771234567003'::EAN13 AS "ok", + 'M-1234-5678-5'::ISMN = '9790123456785'::EAN13 AS "ok", + '9791234567896'::EAN13 != '123456789X'::ISBN AS "nope"; + ok | ok | nope +----+----+------ + t | t | t +(1 row) + +-- +-- cleanup +-- +DROP EXTENSION isn; diff --git a/contrib/isn/isn.c b/contrib/isn/isn.c index 40398245f6d0e..9f53e1a1fbf60 100644 --- a/contrib/isn/isn.c +++ b/contrib/isn/isn.c @@ -443,16 +443,23 @@ ean2ISBN(char *isn) char *aux; unsigned check; - /* the number should come in this format: 978-0-000-00000-0 */ - /* Strip the first part and calculate the new check digit */ - hyphenate(isn, isn + 4, NULL, NULL); - check = weight_checkdig(isn, 10); - aux = strchr(isn, '\0'); - while (!isdigit((unsigned char) *--aux)); - if (check == 10) - *aux = 'X'; - else - *aux = check + '0'; + /* + * The number should come in this format: 978-0-000-00000-0 + * or may be an ISBN-13 number, 979-..., which does not have a short + * representation. Do the short output version if possible. + */ + if (strncmp("978-", isn, 4) == 0) + { + /* Strip the first part and calculate the new check digit */ + hyphenate(isn, isn + 4, NULL, NULL); + check = weight_checkdig(isn, 10); + aux = strchr(isn, '\0'); + while (!isdigit((unsigned char) *--aux)); + if (check == 10) + *aux = 'X'; + else + *aux = check + '0'; + } } static inline void diff --git a/contrib/isn/sql/isn.sql b/contrib/isn/sql/isn.sql new file mode 100644 index 0000000000000..5ef6d8aa3bee2 --- /dev/null +++ b/contrib/isn/sql/isn.sql @@ -0,0 +1,104 @@ +-- +-- Test ISN extension +-- + +CREATE EXTENSION isn; + +-- +-- test valid conversions +-- +SELECT '9780123456786'::EAN13, -- old book + '9790123456785'::EAN13, -- music + '9791234567896'::EAN13, -- new book + '9771234567898'::EAN13, -- serial + '0123456789012'::EAN13, -- upc + '1234567890128'::EAN13; + +SELECT '9780123456786'::ISBN, + '123456789X'::ISBN, + '9780123456786'::ISBN13::ISBN, + '9780123456786'::EAN13::ISBN; + +SELECT -- new books, shown as ISBN13 even for ISBN... + '9791234567896'::ISBN, + '9791234567896'::ISBN13::ISBN, + '9791234567896'::EAN13::ISBN; + +SELECT '9780123456786'::ISBN13, + '123456789X'::ISBN13, + '9791234567896'::ISBN13, + '9791234567896'::EAN13::ISBN13; + +SELECT '9790123456785'::ISMN, + '9790123456785'::EAN13::ISMN, + 'M123456785'::ISMN, + 'M-1234-5678-5'::ISMN; + +SELECT '9790123456785'::ISMN13, + 'M123456785'::ISMN13, + 'M-1234-5678-5'::ISMN13; + +SELECT '9771234567003'::ISSN, + '12345679'::ISSN; + +SELECT '9771234567003'::ISSN13, + '12345679'::ISSN13, + '9771234567898'::ISSN13, + '9771234567898'::EAN13::ISSN13; + +SELECT '0123456789012'::UPC, + '0123456789012'::EAN13::UPC; + +-- +-- test invalid checksums +-- +SELECT '1234567890'::ISBN; +SELECT 'M123456780'::ISMN; +SELECT '12345670'::ISSN; +SELECT '9780123456780'::ISBN; +SELECT '9791234567890'::ISBN13; +SELECT '0123456789010'::UPC; +SELECT '1234567890120'::EAN13; + +-- +-- test invalid conversions +-- +SELECT '9790123456785'::ISBN; -- not a book +SELECT '9771234567898'::ISBN; -- not a book +SELECT '0123456789012'::ISBN; -- not a book + +SELECT '9790123456785'::ISBN13; -- not a book +SELECT '9771234567898'::ISBN13; -- not a book +SELECT '0123456789012'::ISBN13; -- not a book + +SELECT '9780123456786'::ISMN; -- not music +SELECT '9771234567898'::ISMN; -- not music +SELECT '9791234567896'::ISMN; -- not music +SELECT '0123456789012'::ISMN; -- not music + +SELECT '9780123456786'::ISSN; -- not serial +SELECT '9790123456785'::ISSN; -- not serial +SELECT '9791234567896'::ISSN; -- not serial +SELECT '0123456789012'::ISSN; -- not serial + +SELECT '9780123456786'::UPC; -- not a product +SELECT '9771234567898'::UPC; -- not a product +SELECT '9790123456785'::UPC; -- not a product +SELECT '9791234567896'::UPC; -- not a product + +SELECT 'postgresql...'::EAN13; +SELECT 'postgresql...'::ISBN; +SELECT 9780123456786::EAN13; +SELECT 9780123456786::ISBN; + +-- +-- test some comparisons, must yield true +-- +SELECT '12345679'::ISSN = '9771234567003'::EAN13 AS "ok", + 'M-1234-5678-5'::ISMN = '9790123456785'::EAN13 AS "ok", + '9791234567896'::EAN13 != '123456789X'::ISBN AS "nope"; + +-- +-- cleanup +-- +DROP EXTENSION isn; diff --git a/contrib/ltree/ltxtquery_io.c b/contrib/ltree/ltxtquery_io.c index ddc63d7b66b19..74010f3cef4d6 100644 --- a/contrib/ltree/ltxtquery_io.c +++ b/contrib/ltree/ltxtquery_io.c @@ -416,6 +416,9 @@ while( ( (inf)->cur - (inf)->buf ) + (addsize) + 1 >= (inf)->buflen ) \ static void infix(INFIX *in, bool first) { + /* since this function recurses, it could be driven to stack overflow. */ + check_stack_depth(); + if (in->curpol->type == VAL) { char *op = in->op + in->curpol->distance; diff --git a/contrib/ltree/ltxtquery_op.c b/contrib/ltree/ltxtquery_op.c index 64f9d219f7678..1428c8b47806f 100644 --- a/contrib/ltree/ltxtquery_op.c +++ b/contrib/ltree/ltxtquery_op.c @@ -8,6 +8,7 @@ #include #include "ltree.h" +#include "miscadmin.h" PG_FUNCTION_INFO_V1(ltxtq_exec); PG_FUNCTION_INFO_V1(ltxtq_rexec); @@ -18,6 +19,9 @@ PG_FUNCTION_INFO_V1(ltxtq_rexec); bool ltree_execute(ITEM *curitem, void *checkval, bool calcnot, bool (*chkcond) (void *checkval, ITEM *val)) { + /* since this function recurses, it could be driven to stack overflow */ + check_stack_depth(); + if (curitem->type == VAL) return (*chkcond) (checkval, curitem); else if (curitem->val == (int32) '!') diff --git a/contrib/ltree_plpython/Makefile b/contrib/ltree_plpython/Makefile index 64ca1275f1cb1..7eacb40115944 100644 --- a/contrib/ltree_plpython/Makefile +++ b/contrib/ltree_plpython/Makefile @@ -23,9 +23,19 @@ include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif +# In configurations that forbid undefined symbols in libraries, link with each +# dependency. This does preclude pgxs builds. +ifeq ($(PORTNAME), aix) +rpathdir = $(pkglibdir):$(python_libdir) +SHLIB_LINK += $(python_libspec) $(python_additional_libs) $(wildcard ../../src/pl/plpython/libplpython*.exp) +endif ifeq ($(PORTNAME), win32) -# This means we need an in-tree build on Windows, not a pgxs build -SHLIB_LINK += $(wildcard ../../src/pl/plpython/libpython*.a) +SHLIB_LINK += $(wildcard ../../src/pl/plpython/libpython*.a) $(wildcard ../../src/pl/plpython/libplpython*.a) +endif + +ifeq ($(PORTNAME), cygwin) +SHLIB_LINK += -L../ltree -lltree -L../../src/pl/plpython \ + -lplpython$(python_majorversion) $(python_libspec) endif REGRESS_OPTS += --load-extension=ltree diff --git a/contrib/pageinspect/brinfuncs.c b/contrib/pageinspect/brinfuncs.c index 7adcfa89370dc..a3d4cc5ef357f 100644 --- a/contrib/pageinspect/brinfuncs.c +++ b/contrib/pageinspect/brinfuncs.c @@ -37,18 +37,6 @@ typedef struct brin_column_state FmgrInfo outputFn[FLEXIBLE_ARRAY_MEMBER]; } brin_column_state; -typedef struct brin_page_state -{ - BrinDesc *bdesc; - Page page; - OffsetNumber offset; - bool unusedItem; - bool done; - AttrNumber attno; - BrinMemTuple *dtup; - brin_column_state *columns[FLEXIBLE_ARRAY_MEMBER]; -} brin_page_state; - static Page verify_brin_page(bytea *raw_page, uint16 type, const char *strtype); @@ -119,89 +107,89 @@ verify_brin_page(bytea *raw_page, uint16 type, const char *strtype) Datum brin_page_items(PG_FUNCTION_ARGS) { - brin_page_state *state; - FuncCallContext *fctx; + bytea *raw_page = PG_GETARG_BYTEA_P(0); + Oid indexRelid = PG_GETARG_OID(1); + ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; + TupleDesc tupdesc; + MemoryContext oldcontext; + Tuplestorestate *tupstore; + Relation indexRel; + brin_column_state **columns; + BrinDesc *bdesc; + BrinMemTuple *dtup; + Page page; + OffsetNumber offset; + AttrNumber attno; + bool unusedItem; if (!superuser()) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), (errmsg("must be superuser to use raw page functions")))); - if (SRF_IS_FIRSTCALL()) - { - bytea *raw_page = PG_GETARG_BYTEA_P(0); - Oid indexRelid = PG_GETARG_OID(1); - Page page; - TupleDesc tupdesc; - MemoryContext mctx; - Relation indexRel; - AttrNumber attno; - - /* minimally verify the page we got */ - page = verify_brin_page(raw_page, BRIN_PAGETYPE_REGULAR, "regular"); + /* check to see if caller supports us returning a tuplestore */ + if (rsinfo == NULL || !IsA(rsinfo, ReturnSetInfo)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("set-valued function called in context that cannot accept a set"))); + if (!(rsinfo->allowedModes & SFRM_Materialize) || + rsinfo->expectedDesc == NULL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("materialize mode required, but it is not allowed in this context"))); - /* create a function context for cross-call persistence */ - fctx = SRF_FIRSTCALL_INIT(); + /* Build a tuple descriptor for our result type */ + if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) + elog(ERROR, "return type must be a row type"); - /* switch to memory context appropriate for multiple function calls */ - mctx = MemoryContextSwitchTo(fctx->multi_call_memory_ctx); + /* Build tuplestore to hold the result rows */ + oldcontext = MemoryContextSwitchTo(rsinfo->econtext->ecxt_per_query_memory); - /* Build a tuple descriptor for our result type */ - if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) - elog(ERROR, "return type must be a row type"); + tupstore = tuplestore_begin_heap(true, false, work_mem); + rsinfo->returnMode = SFRM_Materialize; + rsinfo->setResult = tupstore; + rsinfo->setDesc = tupdesc; - indexRel = index_open(indexRelid, AccessShareLock); + MemoryContextSwitchTo(oldcontext); - state = palloc(offsetof(brin_page_state, columns) + - sizeof(brin_column_state) * RelationGetDescr(indexRel)->natts); + indexRel = index_open(indexRelid, AccessShareLock); + bdesc = brin_build_desc(indexRel); - state->bdesc = brin_build_desc(indexRel); - state->page = page; - state->offset = FirstOffsetNumber; - state->unusedItem = false; - state->done = false; - state->dtup = NULL; + /* minimally verify the page we got */ + page = verify_brin_page(raw_page, BRIN_PAGETYPE_REGULAR, "regular"); - /* - * Initialize output functions for all indexed datatypes; simplifies - * calling them later. - */ - for (attno = 1; attno <= state->bdesc->bd_tupdesc->natts; attno++) + /* + * Initialize output functions for all indexed datatypes; simplifies + * calling them later. + */ + columns = palloc(sizeof(brin_column_state *) * RelationGetDescr(indexRel)->natts); + for (attno = 1; attno <= bdesc->bd_tupdesc->natts; attno++) + { + Oid output; + bool isVarlena; + BrinOpcInfo *opcinfo; + int i; + brin_column_state *column; + + opcinfo = bdesc->bd_info[attno - 1]; + column = palloc(offsetof(brin_column_state, outputFn) + + sizeof(FmgrInfo) * opcinfo->oi_nstored); + + column->nstored = opcinfo->oi_nstored; + for (i = 0; i < opcinfo->oi_nstored; i++) { - Oid output; - bool isVarlena; - BrinOpcInfo *opcinfo; - int i; - brin_column_state *column; - - opcinfo = state->bdesc->bd_info[attno - 1]; - column = palloc(offsetof(brin_column_state, outputFn) + - sizeof(FmgrInfo) * opcinfo->oi_nstored); - - column->nstored = opcinfo->oi_nstored; - for (i = 0; i < opcinfo->oi_nstored; i++) - { - getTypeOutputInfo(opcinfo->oi_typcache[i]->type_id, &output, &isVarlena); - fmgr_info(output, &column->outputFn[i]); - } - - state->columns[attno - 1] = column; + getTypeOutputInfo(opcinfo->oi_typcache[i]->type_id, &output, &isVarlena); + fmgr_info(output, &column->outputFn[i]); } - index_close(indexRel, AccessShareLock); - - fctx->user_fctx = state; - fctx->tuple_desc = BlessTupleDesc(tupdesc); - - MemoryContextSwitchTo(mctx); + columns[attno - 1] = column; } - fctx = SRF_PERCALL_SETUP(); - state = fctx->user_fctx; - - if (!state->done) + offset = FirstOffsetNumber; + unusedItem = false; + dtup = NULL; + for (;;) { - HeapTuple result; Datum values[7]; bool nulls[7]; @@ -211,39 +199,30 @@ brin_page_items(PG_FUNCTION_ARGS) * signal for obtaining and decoding the next one. If that's not the * case, we output the next attribute. */ - if (state->dtup == NULL) + if (dtup == NULL) { - BrinTuple *tup; - MemoryContext mctx; ItemId itemId; - /* deformed tuple must live across calls */ - mctx = MemoryContextSwitchTo(fctx->multi_call_memory_ctx); - /* verify item status: if there's no data, we can't decode */ - itemId = PageGetItemId(state->page, state->offset); + itemId = PageGetItemId(page, offset); if (ItemIdIsUsed(itemId)) { - tup = (BrinTuple *) PageGetItem(state->page, - PageGetItemId(state->page, - state->offset)); - state->dtup = brin_deform_tuple(state->bdesc, tup); - state->attno = 1; - state->unusedItem = false; + dtup = brin_deform_tuple(bdesc, + (BrinTuple *) PageGetItem(page, itemId)); + attno = 1; + unusedItem = false; } else - state->unusedItem = true; - - MemoryContextSwitchTo(mctx); + unusedItem = true; } else - state->attno++; + attno++; MemSet(nulls, 0, sizeof(nulls)); - if (state->unusedItem) + if (unusedItem) { - values[0] = UInt16GetDatum(state->offset); + values[0] = UInt16GetDatum(offset); nulls[1] = true; nulls[2] = true; nulls[3] = true; @@ -253,17 +232,17 @@ brin_page_items(PG_FUNCTION_ARGS) } else { - int att = state->attno - 1; - - values[0] = UInt16GetDatum(state->offset); - values[1] = UInt32GetDatum(state->dtup->bt_blkno); - values[2] = UInt16GetDatum(state->attno); - values[3] = BoolGetDatum(state->dtup->bt_columns[att].bv_allnulls); - values[4] = BoolGetDatum(state->dtup->bt_columns[att].bv_hasnulls); - values[5] = BoolGetDatum(state->dtup->bt_placeholder); - if (!state->dtup->bt_columns[att].bv_allnulls) + int att = attno - 1; + + values[0] = UInt16GetDatum(offset); + values[1] = UInt32GetDatum(dtup->bt_blkno); + values[2] = UInt16GetDatum(attno); + values[3] = BoolGetDatum(dtup->bt_columns[att].bv_allnulls); + values[4] = BoolGetDatum(dtup->bt_columns[att].bv_hasnulls); + values[5] = BoolGetDatum(dtup->bt_placeholder); + if (!dtup->bt_columns[att].bv_allnulls) { - BrinValues *bvalues = &state->dtup->bt_columns[att]; + BrinValues *bvalues = &dtup->bt_columns[att]; StringInfoData s; bool first; int i; @@ -272,14 +251,14 @@ brin_page_items(PG_FUNCTION_ARGS) appendStringInfoChar(&s, '{'); first = true; - for (i = 0; i < state->columns[att]->nstored; i++) + for (i = 0; i < columns[att]->nstored; i++) { char *val; if (!first) appendStringInfoString(&s, " .. "); first = false; - val = OutputFunctionCall(&state->columns[att]->outputFn[i], + val = OutputFunctionCall(&columns[att]->outputFn[i], bvalues->bv_values[i]); appendStringInfoString(&s, val); pfree(val); @@ -295,35 +274,35 @@ brin_page_items(PG_FUNCTION_ARGS) } } - result = heap_form_tuple(fctx->tuple_desc, values, nulls); + tuplestore_putvalues(tupstore, tupdesc, values, nulls); /* * If the item was unused, jump straight to the next one; otherwise, * the only cleanup needed here is to set our signal to go to the next * tuple in the following iteration, by freeing the current one. */ - if (state->unusedItem) - state->offset = OffsetNumberNext(state->offset); - else if (state->attno >= state->bdesc->bd_tupdesc->natts) + if (unusedItem) + offset = OffsetNumberNext(offset); + else if (attno >= bdesc->bd_tupdesc->natts) { - pfree(state->dtup); - state->dtup = NULL; - state->offset = OffsetNumberNext(state->offset); + pfree(dtup); + dtup = NULL; + offset = OffsetNumberNext(offset); } /* - * If we're beyond the end of the page, set flag to end the function - * in the following iteration. + * If we're beyond the end of the page, we're done. */ - if (state->offset > PageGetMaxOffsetNumber(state->page)) - state->done = true; - - SRF_RETURN_NEXT(fctx, HeapTupleGetDatum(result)); + if (offset > PageGetMaxOffsetNumber(page)) + break; } - brin_free_desc(state->bdesc); + /* clean up and return the tuplestore */ + brin_free_desc(bdesc); + tuplestore_donestoring(tupstore); + index_close(indexRel, AccessShareLock); - SRF_RETURN_DONE(fctx); + return (Datum) 0; } Datum diff --git a/contrib/pg_standby/pg_standby.c b/contrib/pg_standby/pg_standby.c index 2f9f2b4d2e920..861caea348106 100644 --- a/contrib/pg_standby/pg_standby.c +++ b/contrib/pg_standby/pg_standby.c @@ -32,6 +32,8 @@ #include "pg_getopt.h" +#include "access/xlog_internal.h" + const char *progname; /* Options and defaults */ @@ -57,7 +59,7 @@ char *restartWALFileName; /* the file from which we can restart restore */ char *priorWALFileName; /* the file we need to get from archive */ char WALFilePath[MAXPGPATH]; /* the file path including archive */ char restoreCommand[MAXPGPATH]; /* run this to restore */ -char exclusiveCleanupFileName[MAXPGPATH]; /* the file we need to +char exclusiveCleanupFileName[MAXFNAMELEN]; /* the file we need to * get from archive */ /* @@ -113,11 +115,6 @@ struct stat stat_buf; * folded in to later versions of this program. */ -#define XLOG_DATA_FNAME_LEN 24 -/* Reworked from access/xlog_internal.h */ -#define XLogFileName(fname, tli, log, seg) \ - snprintf(fname, XLOG_DATA_FNAME_LEN + 1, "%08X%08X%08X", tli, log, seg) - /* * Initialize allows customized commands into the warm standby program. * @@ -182,10 +179,7 @@ CustomizableNextWALFileReady() * If it's a backup file, return immediately. If it's a regular file * return only if it's the right size already. */ - if (strlen(nextWALFileName) > 24 && - strspn(nextWALFileName, "0123456789ABCDEF") == 24 && - strcmp(nextWALFileName + strlen(nextWALFileName) - strlen(".backup"), - ".backup") == 0) + if (IsBackupHistoryFileName(nextWALFileName)) { nextWALFileType = XLOG_BACKUP_LABEL; return true; @@ -261,8 +255,7 @@ CustomizableCleanupPriorWALFiles(void) * are not removed in the order they were originally written, * in case this worries you. */ - if (strlen(xlde->d_name) == XLOG_DATA_FNAME_LEN && - strspn(xlde->d_name, "0123456789ABCDEF") == XLOG_DATA_FNAME_LEN && + if (IsXLogFileName(xlde->d_name) && strcmp(xlde->d_name + 8, exclusiveCleanupFileName + 8) < 0) { #ifdef WIN32 @@ -366,7 +359,7 @@ SetWALFileNameForCleanup(void) } } - XLogFileName(exclusiveCleanupFileName, tli, log, seg); + XLogFileNameById(exclusiveCleanupFileName, tli, log, seg); return cleanup; } @@ -740,10 +733,7 @@ main(int argc, char **argv) * Check for initial history file: always the first file to be requested * It's OK if the file isn't there - all other files need to wait */ - if (strlen(nextWALFileName) > 8 && - strspn(nextWALFileName, "0123456789ABCDEF") == 8 && - strcmp(nextWALFileName + strlen(nextWALFileName) - strlen(".history"), - ".history") == 0) + if (IsTLHistoryFileName(nextWALFileName)) { nextWALFileType = XLOG_HISTORY; if (RestoreWALFileForRecovery()) diff --git a/contrib/pg_stat_statements/Makefile b/contrib/pg_stat_statements/Makefile index 975a637897cdf..835ec82fc6056 100644 --- a/contrib/pg_stat_statements/Makefile +++ b/contrib/pg_stat_statements/Makefile @@ -9,6 +9,8 @@ DATA = pg_stat_statements--1.3.sql pg_stat_statements--1.2--1.3.sql \ pg_stat_statements--unpackaged--1.0.sql PGFILEDESC = "pg_stat_statements - execution statistics of SQL statements" +LDFLAGS_SL += $(filter -lm, $(LIBS)) + ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 0eb991cdf0e86..cea84ee4b0f29 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -170,7 +170,7 @@ typedef struct pgssEntry pgssHashKey key; /* hash key of entry - MUST BE FIRST */ Counters counters; /* the statistics for this query */ Size query_offset; /* query text offset in external file */ - int query_len; /* # of valid bytes in query string */ + int query_len; /* # of valid bytes in query string, or -1 */ int encoding; /* query text encoding */ slock_t mutex; /* protects the counters only */ } pgssEntry; @@ -1705,7 +1705,8 @@ entry_cmp(const void *lhs, const void *rhs) } /* - * Deallocate least used entries. + * Deallocate least-used entries. + * * Caller must hold an exclusive lock on pgss->lock. */ static void @@ -1716,17 +1717,27 @@ entry_dealloc(void) pgssEntry *entry; int nvictims; int i; - Size totlen = 0; + Size tottextlen; + int nvalidtexts; /* * Sort entries by usage and deallocate USAGE_DEALLOC_PERCENT of them. * While we're scanning the table, apply the decay factor to the usage - * values. + * values, and update the mean query length. + * + * Note that the mean query length is almost immediately obsolete, since + * we compute it before not after discarding the least-used entries. + * Hopefully, that doesn't affect the mean too much; it doesn't seem worth + * making two passes to get a more current result. Likewise, the new + * cur_median_usage includes the entries we're about to zap. */ entries = palloc(hash_get_num_entries(pgss_hash) * sizeof(pgssEntry *)); i = 0; + tottextlen = 0; + nvalidtexts = 0; + hash_seq_init(&hash_seq, pgss_hash); while ((entry = hash_seq_search(&hash_seq)) != NULL) { @@ -1736,20 +1747,27 @@ entry_dealloc(void) entry->counters.usage *= STICKY_DECREASE_FACTOR; else entry->counters.usage *= USAGE_DECREASE_FACTOR; - /* Accumulate total size, too. */ - totlen += entry->query_len + 1; + /* In the mean length computation, ignore dropped texts. */ + if (entry->query_len >= 0) + { + tottextlen += entry->query_len + 1; + nvalidtexts++; + } } + /* Sort into increasing order by usage */ qsort(entries, i, sizeof(pgssEntry *), entry_cmp); + /* Record the (approximate) median usage */ if (i > 0) - { - /* Record the (approximate) median usage */ pgss->cur_median_usage = entries[i / 2]->counters.usage; - /* Record the mean query length */ - pgss->mean_query_len = totlen / i; - } + /* Record the mean query length */ + if (nvalidtexts > 0) + pgss->mean_query_len = tottextlen / nvalidtexts; + else + pgss->mean_query_len = ASSUMED_LENGTH_INIT; + /* Now zap an appropriate fraction of lowest-usage entries */ nvictims = Max(10, i * USAGE_DEALLOC_PERCENT / 100); nvictims = Min(nvictims, i); @@ -1892,7 +1910,7 @@ qtext_load_file(Size *buffer_size) } /* Allocate buffer; beware that off_t might be wider than size_t */ - if (stat.st_size <= MaxAllocSize) + if (stat.st_size <= MaxAllocHugeSize) buf = (char *) malloc(stat.st_size); else buf = NULL; @@ -1900,7 +1918,9 @@ qtext_load_file(Size *buffer_size) { ereport(LOG, (errcode(ERRCODE_OUT_OF_MEMORY), - errmsg("out of memory"))); + errmsg("out of memory"), + errdetail("Could not allocate enough memory to read pg_stat_statement file \"%s\".", + PGSS_TEXT_FILE))); CloseTransientFile(fd); return NULL; } @@ -2002,13 +2022,17 @@ need_gc_qtexts(void) * occur in the foreseeable future. * * The caller must hold an exclusive lock on pgss->lock. + * + * At the first sign of trouble we unlink the query text file to get a clean + * slate (although existing statistics are retained), rather than risk + * thrashing by allowing the same problem case to recur indefinitely. */ static void gc_qtexts(void) { char *qbuffer; Size qbuffer_size; - FILE *qfile; + FILE *qfile = NULL; HASH_SEQ_STATUS hash_seq; pgssEntry *entry; Size extent; @@ -2023,12 +2047,15 @@ gc_qtexts(void) return; /* - * Load the old texts file. If we fail (out of memory, for instance) just - * skip the garbage collection. + * Load the old texts file. If we fail (out of memory, for instance), + * invalidate query texts. Hopefully this is rare. It might seem better + * to leave things alone on an OOM failure, but the problem is that the + * file is only going to get bigger; hoping for a future non-OOM result is + * risky and can easily lead to complete denial of service. */ qbuffer = qtext_load_file(&qbuffer_size); if (qbuffer == NULL) - return; + goto gc_fail; /* * We overwrite the query texts file in place, so as to reduce the risk of @@ -2063,6 +2090,7 @@ gc_qtexts(void) /* Trouble ... drop the text */ entry->query_offset = 0; entry->query_len = -1; + /* entry will not be counted in mean query length computation */ continue; } @@ -2147,7 +2175,36 @@ gc_qtexts(void) entry->query_len = -1; } - /* Seems like a good idea to bump the GC count even though we failed */ + /* + * Destroy the query text file and create a new, empty one + */ + (void) unlink(PGSS_TEXT_FILE); + qfile = AllocateFile(PGSS_TEXT_FILE, PG_BINARY_W); + if (qfile == NULL) + ereport(LOG, + (errcode_for_file_access(), + errmsg("could not write new pg_stat_statement file \"%s\": %m", + PGSS_TEXT_FILE))); + else + FreeFile(qfile); + + /* Reset the shared extent pointer */ + pgss->extent = 0; + + /* Reset mean_query_len to match the new state */ + pgss->mean_query_len = ASSUMED_LENGTH_INIT; + + /* + * Bump the GC count even though we failed. + * + * This is needed to make concurrent readers of file without any lock on + * pgss->lock notice existence of new version of file. Once readers + * subsequently observe a change in GC count with pgss->lock held, that + * forces a safe reopen of file. Writers also require that we bump here, + * of course. (As required by locking protocol, readers and writers don't + * trust earlier file contents until gc_count is found unchanged after + * pgss->lock acquired in shared or exclusive mode respectively.) + */ record_gc_qtexts(); } @@ -2297,6 +2354,7 @@ JumbleRangeTable(pgssJumbleState *jstate, List *rtable) { case RTE_RELATION: APP_JUMB(rte->relid); + JumbleExpr(jstate, (Node *) rte->tablesample); break; case RTE_SUBQUERY: JumbleQuery(jstate, rte->subquery); @@ -2767,6 +2825,15 @@ JumbleExpr(pgssJumbleState *jstate, Node *node) JumbleExpr(jstate, rtfunc->funcexpr); } break; + case T_TableSampleClause: + { + TableSampleClause *tsc = (TableSampleClause *) node; + + APP_JUMB(tsc->tsmhandler); + JumbleExpr(jstate, (Node *) tsc->args); + JumbleExpr(jstate, (Node *) tsc->repeatable); + } + break; default: /* Only a warning, since we can stumble along anyway */ elog(WARNING, "unrecognized node type: %d", diff --git a/contrib/pgcrypto/crypt-blowfish.c b/contrib/pgcrypto/crypt-blowfish.c index fbaa3d776a08f..4054e6a06fc75 100644 --- a/contrib/pgcrypto/crypt-blowfish.c +++ b/contrib/pgcrypto/crypt-blowfish.c @@ -602,6 +602,17 @@ _crypt_blowfish_rn(const char *key, const char *setting, if (size < 7 + 22 + 31 + 1) return NULL; + /* + * Blowfish salt value must be formatted as follows: "$2a$" or "$2x$", a + * two digit cost parameter, "$", and 22 digits from the alphabet + * "./0-9A-Za-z". -- from the PHP crypt docs. Apparently we enforce a few + * more restrictions on the count in the salt as well. + */ + if (strlen(setting) < 29) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid salt"))); + if (setting[0] != '$' || setting[1] != '2' || (setting[2] != 'a' && setting[2] != 'x') || @@ -611,14 +622,18 @@ _crypt_blowfish_rn(const char *key, const char *setting, (setting[4] == '3' && setting[5] > '1') || setting[6] != '$') { - return NULL; + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid salt"))); } count = (BF_word) 1 << ((setting[4] - '0') * 10 + (setting[5] - '0')); if (count < 16 || BF_decode(data.binary.salt, &setting[7], 16)) { px_memset(data.binary.salt, 0, sizeof(data.binary.salt)); - return NULL; + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid salt"))); } BF_swap(data.binary.salt, 4); diff --git a/contrib/pgcrypto/crypt-des.c b/contrib/pgcrypto/crypt-des.c index b43141fed5cb6..e94346159955c 100644 --- a/contrib/pgcrypto/crypt-des.c +++ b/contrib/pgcrypto/crypt-des.c @@ -681,9 +681,19 @@ px_crypt_des(const char *key, const char *setting) if (*setting == _PASSWORD_EFMT1) { /* - * "new"-style: setting - underscore, 4 bytes of count, 4 bytes of - * salt key - unlimited characters + * "new"-style: setting must be a 9-character (underscore, then 4 + * bytes of count, then 4 bytes of salt) string. See CRYPT(3) under + * the "Extended crypt" heading for further details. + * + * Unlimited characters of the input key are used. This is known as + * the "Extended crypt" DES method. + * */ + if (strlen(setting) < 9) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid salt"))); + for (i = 1, count = 0L; i < 5; i++) count |= ascii_to_bin(setting[i]) << (i - 1) * 6; @@ -722,10 +732,16 @@ px_crypt_des(const char *key, const char *setting) #endif /* !DISABLE_XDES */ { /* - * "old"-style: setting - 2 bytes of salt key - up to 8 characters + * "old"-style: setting - 2 bytes of salt key - only up to the first 8 + * characters of the input key are used. */ count = 25; + if (strlen(setting) < 2) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid salt"))); + salt = (ascii_to_bin(setting[1]) << 6) | ascii_to_bin(setting[0]); diff --git a/contrib/pgcrypto/expected/crypt-blowfish.out b/contrib/pgcrypto/expected/crypt-blowfish.out index 329d78f625462..d79b0c047b4c7 100644 --- a/contrib/pgcrypto/expected/crypt-blowfish.out +++ b/contrib/pgcrypto/expected/crypt-blowfish.out @@ -13,6 +13,15 @@ SELECT crypt('foox', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O'); $2a$06$RQiOJ.3ELirrXwxIZY8q0OR3CVJrAfda1z26CCHPnB6mmVZD8p0/C (1 row) +-- error, salt too short: +SELECT crypt('foox', '$2a$'); +ERROR: invalid salt +-- error, first digit of count in salt invalid +SELECT crypt('foox', '$2a$40$RQiOJ.3ELirrXwxIZY8q0O'); +ERROR: invalid salt +-- error, count in salt too small +SELECT crypt('foox', '$2a$00$RQiOJ.3ELirrXwxIZY8q0O'); +ERROR: invalid salt CREATE TABLE ctest (data text, res text, salt text); INSERT INTO ctest VALUES ('password', '', ''); UPDATE ctest SET salt = gen_salt('bf', 8); diff --git a/contrib/pgcrypto/expected/crypt-des.out b/contrib/pgcrypto/expected/crypt-des.out index b8b605037d48b..a462dcd580a89 100644 --- a/contrib/pgcrypto/expected/crypt-des.out +++ b/contrib/pgcrypto/expected/crypt-des.out @@ -13,6 +13,10 @@ SELECT crypt('foox', 'NB'); NB53EGGqrrb5E (1 row) +-- We are supposed to pass in a 2-character salt. +-- error since salt is too short: +SELECT crypt('password', 'a'); +ERROR: invalid salt CREATE TABLE ctest (data text, res text, salt text); INSERT INTO ctest VALUES ('password', '', ''); UPDATE ctest SET salt = gen_salt('des'); diff --git a/contrib/pgcrypto/expected/crypt-xdes.out b/contrib/pgcrypto/expected/crypt-xdes.out index cdcdefb199699..8cf907512f6f7 100644 --- a/contrib/pgcrypto/expected/crypt-xdes.out +++ b/contrib/pgcrypto/expected/crypt-xdes.out @@ -13,6 +13,30 @@ SELECT crypt('foox', '_J9..j2zz'); _J9..j2zzAYKMvO2BYRY (1 row) +-- check XDES handling of keys longer than 8 chars +SELECT crypt('longlongpassword', '_J9..j2zz'); + crypt +---------------------- + _J9..j2zz4BeseiQNwUg +(1 row) + +-- error, salt too short +SELECT crypt('foox', '_J9..BWH'); +ERROR: invalid salt +-- error, count specified in the second argument is 0 +SELECT crypt('password', '_........'); +ERROR: crypt(3) returned NULL +-- error, count will wind up still being 0 due to invalid encoding +-- of the count: only chars ``./0-9A-Za-z' are valid +SELECT crypt('password', '_..!!!!!!'); +ERROR: crypt(3) returned NULL +-- count should be non-zero here, will work +SELECT crypt('password', '_/!!!!!!!'); + crypt +---------------------- + _/!!!!!!!zqM49hRzxko +(1 row) + CREATE TABLE ctest (data text, res text, salt text); INSERT INTO ctest VALUES ('password', '', ''); UPDATE ctest SET salt = gen_salt('xdes', 1001); diff --git a/contrib/pgcrypto/px-crypt.c b/contrib/pgcrypto/px-crypt.c index 7b003a76ca663..e3246fc5b9d5f 100644 --- a/contrib/pgcrypto/px-crypt.c +++ b/contrib/pgcrypto/px-crypt.c @@ -42,7 +42,7 @@ run_crypt_des(const char *psw, const char *salt, char *res; res = px_crypt_des(psw, salt); - if (strlen(res) > len - 1) + if (res == NULL || strlen(res) > len - 1) return NULL; strcpy(buf, res); return buf; diff --git a/contrib/pgcrypto/sql/crypt-blowfish.sql b/contrib/pgcrypto/sql/crypt-blowfish.sql index 60c1140055520..3b5a681c3f5cd 100644 --- a/contrib/pgcrypto/sql/crypt-blowfish.sql +++ b/contrib/pgcrypto/sql/crypt-blowfish.sql @@ -6,6 +6,15 @@ SELECT crypt('', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O'); SELECT crypt('foox', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O'); +-- error, salt too short: +SELECT crypt('foox', '$2a$'); + +-- error, first digit of count in salt invalid +SELECT crypt('foox', '$2a$40$RQiOJ.3ELirrXwxIZY8q0O'); + +-- error, count in salt too small +SELECT crypt('foox', '$2a$00$RQiOJ.3ELirrXwxIZY8q0O'); + CREATE TABLE ctest (data text, res text, salt text); INSERT INTO ctest VALUES ('password', '', ''); diff --git a/contrib/pgcrypto/sql/crypt-des.sql b/contrib/pgcrypto/sql/crypt-des.sql index fabdc652fc986..a85ec1e655510 100644 --- a/contrib/pgcrypto/sql/crypt-des.sql +++ b/contrib/pgcrypto/sql/crypt-des.sql @@ -6,6 +6,10 @@ SELECT crypt('', 'NB'); SELECT crypt('foox', 'NB'); +-- We are supposed to pass in a 2-character salt. +-- error since salt is too short: +SELECT crypt('password', 'a'); + CREATE TABLE ctest (data text, res text, salt text); INSERT INTO ctest VALUES ('password', '', ''); diff --git a/contrib/pgcrypto/sql/crypt-xdes.sql b/contrib/pgcrypto/sql/crypt-xdes.sql index d4a74f76bde52..8171cd872be21 100644 --- a/contrib/pgcrypto/sql/crypt-xdes.sql +++ b/contrib/pgcrypto/sql/crypt-xdes.sql @@ -6,6 +6,22 @@ SELECT crypt('', '_J9..j2zz'); SELECT crypt('foox', '_J9..j2zz'); +-- check XDES handling of keys longer than 8 chars +SELECT crypt('longlongpassword', '_J9..j2zz'); + +-- error, salt too short +SELECT crypt('foox', '_J9..BWH'); + +-- error, count specified in the second argument is 0 +SELECT crypt('password', '_........'); + +-- error, count will wind up still being 0 due to invalid encoding +-- of the count: only chars ``./0-9A-Za-z' are valid +SELECT crypt('password', '_..!!!!!!'); + +-- count should be non-zero here, will work +SELECT crypt('password', '_/!!!!!!!'); + CREATE TABLE ctest (data text, res text, salt text); INSERT INTO ctest VALUES ('password', '', ''); diff --git a/contrib/pgstattuple/pgstattuple.c b/contrib/pgstattuple/pgstattuple.c index c3a8b1d424ab3..4e221c3682663 100644 --- a/contrib/pgstattuple/pgstattuple.c +++ b/contrib/pgstattuple/pgstattuple.c @@ -151,7 +151,6 @@ build_pgstattuple_type(pgstattuple_type *stat, FunctionCallInfo fcinfo) * * C FUNCTION definition * pgstattuple(text) returns pgstattuple_type - * see pgstattuple.sql for pgstattuple_type * ---------- */ @@ -234,6 +233,9 @@ pgstat_relation(Relation rel, FunctionCallInfo fcinfo) case SPGIST_AM_OID: err = "spgist index"; break; + case BRIN_AM_OID: + err = "brin index"; + break; default: err = "unknown index"; break; diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c index 81cb2b447d84d..697de60dfe51b 100644 --- a/contrib/postgres_fdw/deparse.c +++ b/contrib/postgres_fdw/deparse.c @@ -17,11 +17,12 @@ * We do not consider that it is ever safe to send COLLATE expressions to * the remote server: it might not have the same collation names we do. * (Later we might consider it safe to send COLLATE "C", but even that would - * fail on old remote servers.) An expression is considered safe to send only - * if all collations used in it are traceable to Var(s) of the foreign table. - * That implies that if the remote server gets a different answer than we do, - * the foreign table's columns are not marked with collations that match the - * remote table's columns, which we can consider to be user error. + * fail on old remote servers.) An expression is considered safe to send + * only if all operator/function input collations used in it are traceable to + * Var(s) of the foreign table. That implies that if the remote server gets + * a different answer than we do, the foreign table's columns are not marked + * with collations that match the remote table's columns, which we can + * consider to be user error. * * Portions Copyright (c) 2012-2015, PostgreSQL Global Development Group * @@ -69,9 +70,12 @@ typedef struct foreign_glob_cxt */ typedef enum { - FDW_COLLATE_NONE, /* expression is of a noncollatable type */ + FDW_COLLATE_NONE, /* expression is of a noncollatable type, or + * it has default collation that is not + * traceable to a foreign Var */ FDW_COLLATE_SAFE, /* collation derives from a foreign Var */ - FDW_COLLATE_UNSAFE /* collation derives from something else */ + FDW_COLLATE_UNSAFE /* collation is non-default and derives from + * something other than a foreign Var */ } FDWCollateState; typedef struct foreign_loc_cxt @@ -272,13 +276,24 @@ foreign_expr_walker(Node *node, else { /* Var belongs to some other table */ - if (var->varcollid != InvalidOid && - var->varcollid != DEFAULT_COLLATION_OID) - return false; - - /* We can consider that it doesn't set collation */ - collation = InvalidOid; - state = FDW_COLLATE_NONE; + collation = var->varcollid; + if (collation == InvalidOid || + collation == DEFAULT_COLLATION_OID) + { + /* + * It's noncollatable, or it's safe to combine with a + * collatable foreign Var, so set state to NONE. + */ + state = FDW_COLLATE_NONE; + } + else + { + /* + * Do not fail right away, since the Var might appear + * in a collation-insensitive context. + */ + state = FDW_COLLATE_UNSAFE; + } } } break; @@ -288,16 +303,16 @@ foreign_expr_walker(Node *node, /* * If the constant has nondefault collation, either it's of a - * non-builtin type, or it reflects folding of a CollateExpr; - * either way, it's unsafe to send to the remote. + * non-builtin type, or it reflects folding of a CollateExpr. + * It's unsafe to send to the remote unless it's used in a + * non-collation-sensitive context. */ - if (c->constcollid != InvalidOid && - c->constcollid != DEFAULT_COLLATION_OID) - return false; - - /* Otherwise, we can consider that it doesn't set collation */ - collation = InvalidOid; - state = FDW_COLLATE_NONE; + collation = c->constcollid; + if (collation == InvalidOid || + collation == DEFAULT_COLLATION_OID) + state = FDW_COLLATE_NONE; + else + state = FDW_COLLATE_UNSAFE; } break; case T_Param: @@ -305,14 +320,14 @@ foreign_expr_walker(Node *node, Param *p = (Param *) node; /* - * Collation handling is same as for Consts. + * Collation rule is same as for Consts and non-foreign Vars. */ - if (p->paramcollid != InvalidOid && - p->paramcollid != DEFAULT_COLLATION_OID) - return false; - - collation = InvalidOid; - state = FDW_COLLATE_NONE; + collation = p->paramcollid; + if (collation == InvalidOid || + collation == DEFAULT_COLLATION_OID) + state = FDW_COLLATE_NONE; + else + state = FDW_COLLATE_UNSAFE; } break; case T_ArrayRef: @@ -348,6 +363,8 @@ foreign_expr_walker(Node *node, else if (inner_cxt.state == FDW_COLLATE_SAFE && collation == inner_cxt.collation) state = FDW_COLLATE_SAFE; + else if (collation == DEFAULT_COLLATION_OID) + state = FDW_COLLATE_NONE; else state = FDW_COLLATE_UNSAFE; } @@ -393,6 +410,8 @@ foreign_expr_walker(Node *node, else if (inner_cxt.state == FDW_COLLATE_SAFE && collation == inner_cxt.collation) state = FDW_COLLATE_SAFE; + else if (collation == DEFAULT_COLLATION_OID) + state = FDW_COLLATE_NONE; else state = FDW_COLLATE_UNSAFE; } @@ -434,6 +453,8 @@ foreign_expr_walker(Node *node, else if (inner_cxt.state == FDW_COLLATE_SAFE && collation == inner_cxt.collation) state = FDW_COLLATE_SAFE; + else if (collation == DEFAULT_COLLATION_OID) + state = FDW_COLLATE_NONE; else state = FDW_COLLATE_UNSAFE; } @@ -483,7 +504,7 @@ foreign_expr_walker(Node *node, /* * RelabelType must not introduce a collation not derived from - * an input foreign Var. + * an input foreign Var (same logic as for a real function). */ collation = r->resultcollid; if (collation == InvalidOid) @@ -491,6 +512,8 @@ foreign_expr_walker(Node *node, else if (inner_cxt.state == FDW_COLLATE_SAFE && collation == inner_cxt.collation) state = FDW_COLLATE_SAFE; + else if (collation == DEFAULT_COLLATION_OID) + state = FDW_COLLATE_NONE; else state = FDW_COLLATE_UNSAFE; } @@ -540,7 +563,7 @@ foreign_expr_walker(Node *node, /* * ArrayExpr must not introduce a collation not derived from - * an input foreign Var. + * an input foreign Var (same logic as for a function). */ collation = a->array_collid; if (collation == InvalidOid) @@ -548,6 +571,8 @@ foreign_expr_walker(Node *node, else if (inner_cxt.state == FDW_COLLATE_SAFE && collation == inner_cxt.collation) state = FDW_COLLATE_SAFE; + else if (collation == DEFAULT_COLLATION_OID) + state = FDW_COLLATE_NONE; else state = FDW_COLLATE_UNSAFE; } diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 1f417b30be8fe..65ea6e8d7d563 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -1005,71 +1005,110 @@ COMMIT; -- =================================================================== -- test handling of collations -- =================================================================== -create table loct3 (f1 text collate "C", f2 text); -create foreign table ft3 (f1 text collate "C", f2 text) - server loopback options (table_name 'loct3'); +create table loct3 (f1 text collate "C" unique, f2 text, f3 varchar(10) unique); +create foreign table ft3 (f1 text collate "C", f2 text, f3 varchar(10)) + server loopback options (table_name 'loct3', use_remote_estimate 'true'); -- can be sent to remote explain (verbose, costs off) select * from ft3 where f1 = 'foo'; - QUERY PLAN --------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------ Foreign Scan on public.ft3 - Output: f1, f2 - Remote SQL: SELECT f1, f2 FROM public.loct3 WHERE ((f1 = 'foo'::text)) + Output: f1, f2, f3 + Remote SQL: SELECT f1, f2, f3 FROM public.loct3 WHERE ((f1 = 'foo'::text)) (3 rows) explain (verbose, costs off) select * from ft3 where f1 COLLATE "C" = 'foo'; - QUERY PLAN --------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------ Foreign Scan on public.ft3 - Output: f1, f2 - Remote SQL: SELECT f1, f2 FROM public.loct3 WHERE ((f1 = 'foo'::text)) + Output: f1, f2, f3 + Remote SQL: SELECT f1, f2, f3 FROM public.loct3 WHERE ((f1 = 'foo'::text)) (3 rows) explain (verbose, costs off) select * from ft3 where f2 = 'foo'; - QUERY PLAN --------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------ Foreign Scan on public.ft3 - Output: f1, f2 - Remote SQL: SELECT f1, f2 FROM public.loct3 WHERE ((f2 = 'foo'::text)) + Output: f1, f2, f3 + Remote SQL: SELECT f1, f2, f3 FROM public.loct3 WHERE ((f2 = 'foo'::text)) (3 rows) +explain (verbose, costs off) select * from ft3 where f3 = 'foo'; + QUERY PLAN +------------------------------------------------------------------------------ + Foreign Scan on public.ft3 + Output: f1, f2, f3 + Remote SQL: SELECT f1, f2, f3 FROM public.loct3 WHERE ((f3 = 'foo'::text)) +(3 rows) + +explain (verbose, costs off) select * from ft3 f, loct3 l + where f.f3 = l.f3 and l.f1 = 'foo'; + QUERY PLAN +-------------------------------------------------------------------------------------------------- + Nested Loop + Output: f.f1, f.f2, f.f3, l.f1, l.f2, l.f3 + -> Index Scan using loct3_f1_key on public.loct3 l + Output: l.f1, l.f2, l.f3 + Index Cond: (l.f1 = 'foo'::text) + -> Foreign Scan on public.ft3 f + Output: f.f1, f.f2, f.f3 + Remote SQL: SELECT f1, f2, f3 FROM public.loct3 WHERE (($1::character varying(10) = f3)) +(8 rows) + -- can't be sent to remote explain (verbose, costs off) select * from ft3 where f1 COLLATE "POSIX" = 'foo'; - QUERY PLAN ------------------------------------------------ + QUERY PLAN +--------------------------------------------------- Foreign Scan on public.ft3 - Output: f1, f2 + Output: f1, f2, f3 Filter: ((ft3.f1)::text = 'foo'::text) - Remote SQL: SELECT f1, f2 FROM public.loct3 + Remote SQL: SELECT f1, f2, f3 FROM public.loct3 (4 rows) explain (verbose, costs off) select * from ft3 where f1 = 'foo' COLLATE "C"; - QUERY PLAN ------------------------------------------------ + QUERY PLAN +--------------------------------------------------- Foreign Scan on public.ft3 - Output: f1, f2 + Output: f1, f2, f3 Filter: (ft3.f1 = 'foo'::text COLLATE "C") - Remote SQL: SELECT f1, f2 FROM public.loct3 + Remote SQL: SELECT f1, f2, f3 FROM public.loct3 (4 rows) explain (verbose, costs off) select * from ft3 where f2 COLLATE "C" = 'foo'; - QUERY PLAN ------------------------------------------------ + QUERY PLAN +--------------------------------------------------- Foreign Scan on public.ft3 - Output: f1, f2 + Output: f1, f2, f3 Filter: ((ft3.f2)::text = 'foo'::text) - Remote SQL: SELECT f1, f2 FROM public.loct3 + Remote SQL: SELECT f1, f2, f3 FROM public.loct3 (4 rows) explain (verbose, costs off) select * from ft3 where f2 = 'foo' COLLATE "C"; - QUERY PLAN ------------------------------------------------ + QUERY PLAN +--------------------------------------------------- Foreign Scan on public.ft3 - Output: f1, f2 + Output: f1, f2, f3 Filter: (ft3.f2 = 'foo'::text COLLATE "C") - Remote SQL: SELECT f1, f2 FROM public.loct3 + Remote SQL: SELECT f1, f2, f3 FROM public.loct3 (4 rows) +explain (verbose, costs off) select * from ft3 f, loct3 l + where f.f3 = l.f3 COLLATE "POSIX" and l.f1 = 'foo'; + QUERY PLAN +------------------------------------------------------------- + Hash Join + Output: f.f1, f.f2, f.f3, l.f1, l.f2, l.f3 + Hash Cond: ((f.f3)::text = (l.f3)::text) + -> Foreign Scan on public.ft3 f + Output: f.f1, f.f2, f.f3 + Remote SQL: SELECT f1, f2, f3 FROM public.loct3 + -> Hash + Output: l.f1, l.f2, l.f3 + -> Index Scan using loct3_f1_key on public.loct3 l + Output: l.f1, l.f2, l.f3 + Index Cond: (l.f1 = 'foo'::text) +(11 rows) + -- =================================================================== -- test writable foreign table stuff -- =================================================================== diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index 6da01e1d6f35f..1902f1f4eae1f 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -748,6 +748,7 @@ postgresGetForeignPlan(PlannerInfo *root, Index scan_relid = baserel->relid; List *fdw_private; List *remote_conds = NIL; + List *remote_exprs = NIL; List *local_exprs = NIL; List *params_list = NIL; List *retrieved_attrs; @@ -769,8 +770,8 @@ postgresGetForeignPlan(PlannerInfo *root, * * This code must match "extract_actual_clauses(scan_clauses, false)" * except for the additional decision about remote versus local execution. - * Note however that we only strip the RestrictInfo nodes from the - * local_exprs list, since appendWhereClause expects a list of + * Note however that we don't strip the RestrictInfo nodes from the + * remote_conds list, since appendWhereClause expects a list of * RestrictInfos. */ foreach(lc, scan_clauses) @@ -784,11 +785,17 @@ postgresGetForeignPlan(PlannerInfo *root, continue; if (list_member_ptr(fpinfo->remote_conds, rinfo)) + { remote_conds = lappend(remote_conds, rinfo); + remote_exprs = lappend(remote_exprs, rinfo->clause); + } else if (list_member_ptr(fpinfo->local_conds, rinfo)) local_exprs = lappend(local_exprs, rinfo->clause); else if (is_foreign_expr(root, baserel, rinfo->clause)) + { remote_conds = lappend(remote_conds, rinfo); + remote_exprs = lappend(remote_exprs, rinfo->clause); + } else local_exprs = lappend(local_exprs, rinfo->clause); } @@ -874,7 +881,8 @@ postgresGetForeignPlan(PlannerInfo *root, scan_relid, params_list, fdw_private, - NIL /* no custom tlist */ ); + NIL, /* no custom tlist */ + remote_exprs); } /* @@ -2738,7 +2746,7 @@ postgresImportForeignSchema(ImportForeignSchemaStmt *stmt, Oid serverOid) } /* Append ORDER BY at the end of query to ensure output ordering */ - appendStringInfo(&buf, " ORDER BY c.relname, a.attnum"); + appendStringInfoString(&buf, " ORDER BY c.relname, a.attnum"); /* Fetch the data */ res = PQexec(conn, buf.data); diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index fcdd92e280b1d..11160f82455c0 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -316,19 +316,24 @@ COMMIT; -- =================================================================== -- test handling of collations -- =================================================================== -create table loct3 (f1 text collate "C", f2 text); -create foreign table ft3 (f1 text collate "C", f2 text) - server loopback options (table_name 'loct3'); +create table loct3 (f1 text collate "C" unique, f2 text, f3 varchar(10) unique); +create foreign table ft3 (f1 text collate "C", f2 text, f3 varchar(10)) + server loopback options (table_name 'loct3', use_remote_estimate 'true'); -- can be sent to remote explain (verbose, costs off) select * from ft3 where f1 = 'foo'; explain (verbose, costs off) select * from ft3 where f1 COLLATE "C" = 'foo'; explain (verbose, costs off) select * from ft3 where f2 = 'foo'; +explain (verbose, costs off) select * from ft3 where f3 = 'foo'; +explain (verbose, costs off) select * from ft3 f, loct3 l + where f.f3 = l.f3 and l.f1 = 'foo'; -- can't be sent to remote explain (verbose, costs off) select * from ft3 where f1 COLLATE "POSIX" = 'foo'; explain (verbose, costs off) select * from ft3 where f1 = 'foo' COLLATE "C"; explain (verbose, costs off) select * from ft3 where f2 COLLATE "C" = 'foo'; explain (verbose, costs off) select * from ft3 where f2 = 'foo' COLLATE "C"; +explain (verbose, costs off) select * from ft3 f, loct3 l + where f.f3 = l.f3 COLLATE "POSIX" and l.f1 = 'foo'; -- =================================================================== -- test writable foreign table stuff diff --git a/contrib/sepgsql/expected/alter.out b/contrib/sepgsql/expected/alter.out index 124f862cec3d9..2b5ab3bd7048b 100644 --- a/contrib/sepgsql/expected/alter.out +++ b/contrib/sepgsql/expected/alter.out @@ -8,9 +8,9 @@ DROP DATABASE IF EXISTS regtest_sepgsql_test_database; DROP USER IF EXISTS regtest_sepgsql_test_user; RESET client_min_messages; SELECT sepgsql_getcon(); -- confirm client privilege - sepgsql_getcon -------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0 + sepgsql_getcon +---------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 (1 row) -- @@ -40,140 +40,140 @@ SET client_min_messages = LOG; -- owner is not actually changed. -- ALTER DATABASE regtest_sepgsql_test_database_1 OWNER TO regtest_sepgsql_test_user; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="regtest_sepgsql_test_database_1" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="regtest_sepgsql_test_database_1" ALTER DATABASE regtest_sepgsql_test_database_1 OWNER TO regtest_sepgsql_test_user; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="regtest_sepgsql_test_database_1" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="regtest_sepgsql_test_database_1" ALTER SCHEMA regtest_schema_1 OWNER TO regtest_sepgsql_test_user; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" ALTER SCHEMA regtest_schema_1 OWNER TO regtest_sepgsql_test_user; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" ALTER TABLE regtest_table_1 OWNER TO regtest_sepgsql_test_user; -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_1.regtest_table_1" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_1.regtest_table_1" ALTER TABLE regtest_table_1 OWNER TO regtest_sepgsql_test_user; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_1.regtest_table_1" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_1.regtest_table_1" ALTER SEQUENCE regtest_seq_1 OWNER TO regtest_sepgsql_test_user; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema_1.regtest_seq_1" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema_1.regtest_seq_1" ALTER SEQUENCE regtest_seq_1 OWNER TO regtest_sepgsql_test_user; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema_1.regtest_seq_1" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema_1.regtest_seq_1" ALTER VIEW regtest_view_1 OWNER TO regtest_sepgsql_test_user; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema_1.regtest_view_1" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema_1.regtest_view_1" ALTER VIEW regtest_view_1 OWNER TO regtest_sepgsql_test_user; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema_1.regtest_view_1" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema_1.regtest_view_1" ALTER FUNCTION regtest_func_1(text) OWNER TO regtest_sepgsql_test_user; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema_1.regtest_func_1(pg_catalog.text)" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema_1.regtest_func_1(pg_catalog.text)" ALTER FUNCTION regtest_func_1(text) OWNER TO regtest_sepgsql_test_user; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema_1.regtest_func_1(pg_catalog.text)" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema_1.regtest_func_1(pg_catalog.text)" -- -- ALTER xxx SET SCHEMA -- ALTER TABLE regtest_table_1 SET SCHEMA regtest_schema_2; -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_1.regtest_table_1" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_1.regtest_table_1" ALTER SEQUENCE regtest_seq_1 SET SCHEMA regtest_schema_2; -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema_1.regtest_seq_1" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema_1.regtest_seq_1" ALTER VIEW regtest_view_1 SET SCHEMA regtest_schema_2; -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema_1.regtest_view_1" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema_1.regtest_view_1" ALTER FUNCTION regtest_func_1(text) SET SCHEMA regtest_schema_2; -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema_1.regtest_func_1(pg_catalog.text)" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema_1.regtest_func_1(pg_catalog.text)" -- -- ALTER xxx RENAME TO -- ALTER DATABASE regtest_sepgsql_test_database_1 RENAME TO regtest_sepgsql_test_database; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="regtest_sepgsql_test_database_1" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="regtest_sepgsql_test_database_1" ALTER SCHEMA regtest_schema_1 RENAME TO regtest_schema; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_1" ALTER TABLE regtest_table_1 RENAME TO regtest_table; -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" -LOG: SELinux: allowed { add_name remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_2.regtest_table_1" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" +LOG: SELinux: allowed { add_name remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_2.regtest_table_1" ALTER SEQUENCE regtest_seq_1 RENAME TO regtest_seq; -LOG: SELinux: allowed { add_name remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema_2.regtest_seq_1" +LOG: SELinux: allowed { add_name remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema_2.regtest_seq_1" ALTER VIEW regtest_view_1 RENAME TO regtest_view; -LOG: SELinux: allowed { add_name remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema_2.regtest_view_1" +LOG: SELinux: allowed { add_name remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema_2.regtest_view_1" ALTER FUNCTION regtest_func_1(text) RENAME TO regtest_func; -LOG: SELinux: allowed { add_name remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema_2.regtest_func_1(pg_catalog.text)" +LOG: SELinux: allowed { add_name remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema_2.regtest_func_1(pg_catalog.text)" SET search_path = regtest_schema, regtest_schema_2, public; -- -- misc ALTER commands -- ALTER DATABASE regtest_sepgsql_test_database CONNECTION LIMIT 999; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="regtest_sepgsql_test_database" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="regtest_sepgsql_test_database" ALTER DATABASE regtest_sepgsql_test_database SET search_path TO regtest_schema, public; -- not supported yet ALTER TABLE regtest_table ADD COLUMN d float; -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.d" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.d" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LINE 1: ALTER TABLE regtest_table ADD COLUMN d float; + ^ +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.d" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.d" ALTER TABLE regtest_table DROP COLUMN d; -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.d" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.d" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.d" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.d" ALTER TABLE regtest_table ALTER b SET DEFAULT 'abcd'; -- not supported yet ALTER TABLE regtest_table ALTER b SET DEFAULT 'XYZ'; -- not supported yet ALTER TABLE regtest_table ALTER b DROP DEFAULT; -- not supported yet ALTER TABLE regtest_table ALTER b SET NOT NULL; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.b" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.b" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.b" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.b" ALTER TABLE regtest_table ALTER b DROP NOT NULL; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.b" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.b" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.b" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.b" ALTER TABLE regtest_table ALTER b SET STATISTICS -1; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.b" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.b" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.b" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.b" ALTER TABLE regtest_table ALTER b SET (n_distinct = 999); -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.b" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.b" ALTER TABLE regtest_table ALTER b SET STORAGE PLAIN; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.b" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.b" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.b" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.b" ALTER TABLE regtest_table ADD CONSTRAINT test_fk FOREIGN KEY (a) REFERENCES regtest_table_3(x); -- not supported -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_2.regtest_table" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table regtest_table column a" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_3" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table regtest_table_3 column x" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_2.regtest_table" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table regtest_table column a" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_3" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table regtest_table_3 column x" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema_2" LINE 1: SELECT fk."a" FROM ONLY "regtest_schema_2"."regtest_table" f... ^ QUERY: SELECT fk."a" FROM ONLY "regtest_schema_2"."regtest_table" fk LEFT OUTER JOIN ONLY "regtest_schema"."regtest_table_3" pk ON ( pk."x" OPERATOR(pg_catalog.=) fk."a") WHERE pk."x" IS NULL AND (fk."a" IS NOT NULL) -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" LINE 1: ...schema_2"."regtest_table" fk LEFT OUTER JOIN ONLY "regtest_s... ^ QUERY: SELECT fk."a" FROM ONLY "regtest_schema_2"."regtest_table" fk LEFT OUTER JOIN ONLY "regtest_schema"."regtest_table_3" pk ON ( pk."x" OPERATOR(pg_catalog.=) fk."a") WHERE pk."x" IS NULL AND (fk."a" IS NOT NULL) -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -CONTEXT: SQL statement "SELECT fk."a" FROM ONLY "regtest_schema_2"."regtest_table" fk LEFT OUTER JOIN ONLY "regtest_schema"."regtest_table_3" pk ON ( pk."x" OPERATOR(pg_catalog.=) fk."a") WHERE pk."x" IS NULL AND (fk."a" IS NOT NULL)" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LINE 1: ..."regtest_schema"."regtest_table_3" pk ON ( pk."x" OPERATOR(p... + ^ +QUERY: SELECT fk."a" FROM ONLY "regtest_schema_2"."regtest_table" fk LEFT OUTER JOIN ONLY "regtest_schema"."regtest_table_3" pk ON ( pk."x" OPERATOR(pg_catalog.=) fk."a") WHERE pk."x" IS NULL AND (fk."a" IS NOT NULL) +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" CONTEXT: SQL statement "SELECT fk."a" FROM ONLY "regtest_schema_2"."regtest_table" fk LEFT OUTER JOIN ONLY "regtest_schema"."regtest_table_3" pk ON ( pk."x" OPERATOR(pg_catalog.=) fk."a") WHERE pk."x" IS NULL AND (fk."a" IS NOT NULL)" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_2.regtest_table" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_2.regtest_table" CONTEXT: SQL statement "SELECT fk."a" FROM ONLY "regtest_schema_2"."regtest_table" fk LEFT OUTER JOIN ONLY "regtest_schema"."regtest_table_3" pk ON ( pk."x" OPERATOR(pg_catalog.=) fk."a") WHERE pk."x" IS NULL AND (fk."a" IS NOT NULL)" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table regtest_table column a" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table regtest_table column a" CONTEXT: SQL statement "SELECT fk."a" FROM ONLY "regtest_schema_2"."regtest_table" fk LEFT OUTER JOIN ONLY "regtest_schema"."regtest_table_3" pk ON ( pk."x" OPERATOR(pg_catalog.=) fk."a") WHERE pk."x" IS NULL AND (fk."a" IS NOT NULL)" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_3" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_3" CONTEXT: SQL statement "SELECT fk."a" FROM ONLY "regtest_schema_2"."regtest_table" fk LEFT OUTER JOIN ONLY "regtest_schema"."regtest_table_3" pk ON ( pk."x" OPERATOR(pg_catalog.=) fk."a") WHERE pk."x" IS NULL AND (fk."a" IS NOT NULL)" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table regtest_table_3 column x" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table regtest_table_3 column x" CONTEXT: SQL statement "SELECT fk."a" FROM ONLY "regtest_schema_2"."regtest_table" fk LEFT OUTER JOIN ONLY "regtest_schema"."regtest_table_3" pk ON ( pk."x" OPERATOR(pg_catalog.=) fk."a") WHERE pk."x" IS NULL AND (fk."a" IS NOT NULL)" ALTER TABLE regtest_table ADD CONSTRAINT test_ck CHECK (b like '%abc%') NOT VALID; -- not supported ALTER TABLE regtest_table VALIDATE CONSTRAINT test_ck; -- not supported @@ -186,23 +186,23 @@ CREATE RULE regtest_test_rule AS ON INSERT TO regtest_table_3 DO ALSO NOTHING; ALTER TABLE regtest_table_3 DISABLE RULE regtest_test_rule; -- not supported ALTER TABLE regtest_table_3 ENABLE RULE regtest_test_rule; -- not supported ALTER TABLE regtest_table SET WITH OIDS; -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.oid" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.oid" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.oid" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.oid" ALTER TABLE regtest_table SET WITHOUT OIDS; -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.oid" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.oid" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.oid" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema_2.regtest_table.oid" ALTER TABLE regtest_table SET (fillfactor = 75); -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_2.regtest_table" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_2.regtest_table" ALTER TABLE regtest_table RESET (fillfactor); -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_2.regtest_table" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_2.regtest_table" ALTER TABLE regtest_table_2 NO INHERIT regtest_table; -- not supported ALTER TABLE regtest_table_2 INHERIT regtest_table; -- not supported ALTER TABLE regtest_table SET TABLESPACE pg_default; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_2.regtest_table" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema_2.regtest_table" ALTER VIEW regtest_view SET (security_barrier); -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema_2.regtest_view" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema_2.regtest_view" ALTER SEQUENCE regtest_seq INCREMENT BY 10 START WITH 1000; -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema_2.regtest_seq" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema_2.regtest_seq" -- -- clean-up objects -- diff --git a/contrib/sepgsql/expected/ddl.out b/contrib/sepgsql/expected/ddl.out index 08cd6d5e01dbb..906c884a74dbc 100644 --- a/contrib/sepgsql/expected/ddl.out +++ b/contrib/sepgsql/expected/ddl.out @@ -8,9 +8,9 @@ DROP USER IF EXISTS regtest_sepgsql_test_user; RESET client_min_messages; -- confirm required permissions using audit messages SELECT sepgsql_getcon(); -- confirm client privilege - sepgsql_getcon -------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0 + sepgsql_getcon +---------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 (1 row) SET sepgsql.debug_audit = true; @@ -19,257 +19,271 @@ SET client_min_messages = LOG; -- CREATE Permission checks -- CREATE DATABASE regtest_sepgsql_test_database; -LOG: SELinux: allowed { getattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_db_t:s0 tclass=db_database name="template1" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="regtest_sepgsql_test_database" +LOG: SELinux: allowed { getattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_db_t:s0 tclass=db_database name="template1" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="regtest_sepgsql_test_database" CREATE USER regtest_sepgsql_test_user; CREATE SCHEMA regtest_schema; -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" GRANT ALL ON SCHEMA regtest_schema TO regtest_sepgsql_test_user; SET search_path = regtest_schema, public; CREATE TABLE regtest_table (x serial primary key, y text); -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_table_x_seq" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.tableoid" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.cmax" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.xmax" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.cmin" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.xmin" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.ctid" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.x" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.y" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" LINE 1: CREATE TABLE regtest_table (x serial primary key, y text); ^ -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_table_x_seq" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" +LINE 1: CREATE TABLE regtest_table (x serial primary key, y text); + ^ +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_table_x_seq" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.tableoid" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.cmax" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.xmax" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.cmin" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.xmin" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.ctid" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.x" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.y" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_table_x_seq" ALTER TABLE regtest_table ADD COLUMN z int; -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.z" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LINE 1: ALTER TABLE regtest_table ADD COLUMN z int; + ^ +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.z" CREATE TABLE regtest_table_2 (a int) WITH OIDS; -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_2" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.tableoid" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.cmax" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.xmax" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.cmin" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.xmin" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.oid" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.ctid" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.a" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LINE 1: CREATE TABLE regtest_table_2 (a int) WITH OIDS; + ^ +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_2" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.tableoid" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.cmax" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.xmax" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.cmin" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.xmin" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.oid" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.ctid" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.a" -- corresponding toast table should not have label and permission checks ALTER TABLE regtest_table_2 ADD COLUMN b text; -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.b" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.b" -- VACUUM FULL internally create a new table and swap them later. VACUUM FULL regtest_table; CREATE VIEW regtest_view AS SELECT * FROM regtest_table WHERE x < 100; -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema.regtest_view" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema.regtest_view" CREATE SEQUENCE regtest_seq; -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_seq" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_seq" CREATE TYPE regtest_comptype AS (a int, b text); -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" CREATE FUNCTION regtest_func(text,int[]) RETURNS bool LANGUAGE plpgsql AS 'BEGIN RAISE NOTICE ''regtest_func => %'', $1; RETURN true; END'; -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema.regtest_func(pg_catalog.text,integer[])" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema.regtest_func(pg_catalog.text,integer[])" CREATE AGGREGATE regtest_agg ( sfunc1 = int4pl, basetype = int4, stype1 = int4, initcond1 = '0' ); -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema.regtest_agg(integer)" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema.regtest_agg(integer)" -- CREATE objects owned by others SET SESSION AUTHORIZATION regtest_sepgsql_test_user; SET search_path = regtest_schema, public; CREATE TABLE regtest_table_3 (x int, y serial); -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_table_3_y_seq" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_3" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.tableoid" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.cmax" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.xmax" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.cmin" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.xmin" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.ctid" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.x" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.y" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_table_3_y_seq" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LINE 1: CREATE TABLE regtest_table_3 (x int, y serial); + ^ +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" +LINE 1: CREATE TABLE regtest_table_3 (x int, y serial); + ^ +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LINE 1: CREATE TABLE regtest_table_3 (x int, y serial); + ^ +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_table_3_y_seq" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_3" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.tableoid" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.cmax" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.xmax" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.cmin" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.xmin" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.ctid" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.x" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.y" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_table_3_y_seq" CREATE VIEW regtest_view_2 AS SELECT * FROM regtest_table_3 WHERE x < y; -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema.regtest_view_2" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema.regtest_view_2" CREATE FUNCTION regtest_func_2(int) RETURNS bool LANGUAGE plpgsql AS 'BEGIN RETURN $1 * $1 < 100; END'; -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema.regtest_func_2(integer)" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema.regtest_func_2(integer)" RESET SESSION AUTHORIZATION; -- -- ALTER and CREATE/DROP extra attribute permissions -- CREATE TABLE regtest_table_4 (x int primary key, y int, z int); -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.tableoid" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.cmax" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.xmax" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.cmin" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.xmin" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.ctid" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.x" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.y" -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.z" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" LINE 1: CREATE TABLE regtest_table_4 (x int primary key, y int, z in... ^ -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" +LINE 1: CREATE TABLE regtest_table_4 (x int primary key, y int, z in... + ^ +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LINE 1: CREATE TABLE regtest_table_4 (x int primary key, y int, z in... + ^ +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LINE 1: ...REATE TABLE regtest_table_4 (x int primary key, y int, z int... + ^ +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LINE 1: ...ATE TABLE regtest_table_4 (x int primary key, y int, z int); + ^ +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.tableoid" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.cmax" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.xmax" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.cmin" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.xmin" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.ctid" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.x" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.y" +LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.z" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" CREATE INDEX regtest_index_tbl4_y ON regtest_table_4(y); -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" CREATE INDEX regtest_index_tbl4_z ON regtest_table_4(z); -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" ALTER TABLE regtest_table_4 ALTER COLUMN y TYPE float; -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.y" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.y" DROP INDEX regtest_index_tbl4_y; -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" ALTER TABLE regtest_table_4 ADD CONSTRAINT regtest_tbl4_con EXCLUDE USING btree (z WITH =); -LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" +LOG: SELinux: allowed { add_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" DROP TABLE regtest_table_4 CASCADE; -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.tableoid" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.cmax" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.xmax" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.cmin" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.xmin" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.ctid" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.x" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.y" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.z" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_4" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.tableoid" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.cmax" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.xmax" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.cmin" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.xmin" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.ctid" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.x" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.y" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_4.z" -- -- DROP Permission checks (with clean-up) -- DROP FUNCTION regtest_func(text,int[]); -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema.regtest_func(pg_catalog.text,integer[])" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema.regtest_func(pg_catalog.text,integer[])" DROP AGGREGATE regtest_agg(int); -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema.regtest_agg(integer)" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="pg_catalog" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema.regtest_agg(integer)" DROP SEQUENCE regtest_seq; -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_seq" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_seq" DROP VIEW regtest_view; -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema.regtest_view" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema.regtest_view" ALTER TABLE regtest_table DROP COLUMN y; -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.y" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.y" ALTER TABLE regtest_table_2 SET WITHOUT OIDS; -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.oid" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.oid" DROP TABLE regtest_table; -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_table_x_seq" -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table" -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.tableoid" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.cmax" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.xmax" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.cmin" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.xmin" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.ctid" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.x" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.z" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_table_x_seq" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { setattr } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.tableoid" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.cmax" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.xmax" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.cmin" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.xmin" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.ctid" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.x" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table.z" DROP OWNED BY regtest_sepgsql_test_user; -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema.regtest_func_2(integer)" -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema.regtest_view_2" -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_table_3_y_seq" -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_3" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.tableoid" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.cmax" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.xmax" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.cmin" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.xmin" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.ctid" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.x" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.y" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="regtest_schema.regtest_func_2(integer)" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_view_t:s0 tclass=db_view name="regtest_schema.regtest_view_2" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_seq_t:s0 tclass=db_sequence name="regtest_schema.regtest_table_3_y_seq" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_3" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.tableoid" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.cmax" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.xmax" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.cmin" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.xmin" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.ctid" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.x" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_3.y" DROP DATABASE regtest_sepgsql_test_database; -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="regtest_sepgsql_test_database" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="regtest_sepgsql_test_database" DROP USER regtest_sepgsql_test_user; DROP SCHEMA IF EXISTS regtest_schema CASCADE; -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { search } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=system_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="public" NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table regtest_table_2 drop cascades to type regtest_comptype -LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_2" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.tableoid" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.cmax" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.xmax" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.cmin" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.xmin" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.ctid" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.a" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.b" -LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { remove_name } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="regtest_schema.regtest_table_2" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.tableoid" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.cmax" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.xmax" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.cmin" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.xmin" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.ctid" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.a" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="regtest_schema.regtest_table_2.b" +LOG: SELinux: allowed { drop } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" diff --git a/contrib/sepgsql/expected/dml.out b/contrib/sepgsql/expected/dml.out index 3b90f8934714b..8716ac735d5a2 100644 --- a/contrib/sepgsql/expected/dml.out +++ b/contrib/sepgsql/expected/dml.out @@ -192,9 +192,9 @@ LINE 1: SELECT * FROM my_schema_2.ts2; -- Clean up -- SELECT sepgsql_getcon(); -- confirm client privilege - sepgsql_getcon ------------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c255 + sepgsql_getcon +--------------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 (1 row) DROP TABLE IF EXISTS t1 CASCADE; diff --git a/contrib/sepgsql/expected/label.out b/contrib/sepgsql/expected/label.out index 9d1f90437a222..fad1954b41336 100644 --- a/contrib/sepgsql/expected/label.out +++ b/contrib/sepgsql/expected/label.out @@ -175,138 +175,138 @@ LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:sepgsql_re -- -- validation of transaction aware dynamic-transition SELECT sepgsql_getcon(); -- confirm client privilege - sepgsql_getcon --------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c25 + sepgsql_getcon +----------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c25 (1 row) -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c15'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c15'); sepgsql_setcon ---------------- t (1 row) SELECT sepgsql_getcon(); - sepgsql_getcon --------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c15 + sepgsql_getcon +----------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c15 (1 row) SELECT sepgsql_setcon(NULL); -- failed to reset ERROR: SELinux: security policy violation SELECT sepgsql_getcon(); - sepgsql_getcon --------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c15 + sepgsql_getcon +----------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c15 (1 row) BEGIN; -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c12'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c12'); sepgsql_setcon ---------------- t (1 row) SELECT sepgsql_getcon(); - sepgsql_getcon --------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c12 + sepgsql_getcon +----------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c12 (1 row) SAVEPOINT svpt_1; -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c9'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c9'); sepgsql_setcon ---------------- t (1 row) SELECT sepgsql_getcon(); - sepgsql_getcon -------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c9 + sepgsql_getcon +---------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c9 (1 row) SAVEPOINT svpt_2; -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c6'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c6'); sepgsql_setcon ---------------- t (1 row) SELECT sepgsql_getcon(); - sepgsql_getcon -------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c6 + sepgsql_getcon +---------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c6 (1 row) SAVEPOINT svpt_3; -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c3'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c3'); sepgsql_setcon ---------------- t (1 row) SELECT sepgsql_getcon(); - sepgsql_getcon -------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c3 + sepgsql_getcon +---------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c3 (1 row) ROLLBACK TO SAVEPOINT svpt_2; SELECT sepgsql_getcon(); -- should be 's0:c0.c9' - sepgsql_getcon -------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c9 + sepgsql_getcon +---------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c9 (1 row) ROLLBACK TO SAVEPOINT svpt_1; SELECT sepgsql_getcon(); -- should be 's0:c0.c12' - sepgsql_getcon --------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c12 + sepgsql_getcon +----------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c12 (1 row) ABORT; SELECT sepgsql_getcon(); -- should be 's0:c0.c15' - sepgsql_getcon --------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c15 + sepgsql_getcon +----------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c15 (1 row) BEGIN; -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c8'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c8'); sepgsql_setcon ---------------- t (1 row) SELECT sepgsql_getcon(); - sepgsql_getcon -------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c8 + sepgsql_getcon +---------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c8 (1 row) SAVEPOINT svpt_1; -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c4'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c4'); sepgsql_setcon ---------------- t (1 row) SELECT sepgsql_getcon(); - sepgsql_getcon -------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c4 + sepgsql_getcon +---------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c4 (1 row) ROLLBACK TO SAVEPOINT svpt_1; SELECT sepgsql_getcon(); -- should be 's0:c0.c8' - sepgsql_getcon -------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c8 + sepgsql_getcon +---------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c8 (1 row) -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c6'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c6'); sepgsql_setcon ---------------- t @@ -314,9 +314,9 @@ SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c6'); COMMIT; SELECT sepgsql_getcon(); -- should be 's0:c0.c6' - sepgsql_getcon -------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0:c0.c6 + sepgsql_getcon +---------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c6 (1 row) -- sepgsql_regtest_user_t is not available dynamic-transition, @@ -493,9 +493,9 @@ SELECT sepgsql_getcon(); -- Clean up -- SELECT sepgsql_getcon(); -- confirm client privilege - sepgsql_getcon ------------------------------------------------------- - unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c255 + sepgsql_getcon +--------------------------------------------------------------------- + unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 (1 row) DROP TABLE IF EXISTS t1 CASCADE; diff --git a/contrib/sepgsql/expected/misc.out b/contrib/sepgsql/expected/misc.out index 5904840163359..1ce47c48b01fb 100644 --- a/contrib/sepgsql/expected/misc.out +++ b/contrib/sepgsql/expected/misc.out @@ -12,11 +12,11 @@ SET sepgsql.debug_audit = on; SET client_min_messages = log; -- regular function and operators SELECT * FROM t1 WHERE x > 50 AND y like '%64%'; -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="public.t1" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table t1 column x" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table t1 column y" -LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.int4gt(integer,integer)" -LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.textlike(pg_catalog.text,pg_catalog.text)" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="public.t1" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table t1 column x" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table t1 column y" +LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.int4gt(integer,integer)" +LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.textlike(pg_catalog.text,pg_catalog.text)" x | y -----+---------------------------------- 77 | 28dd2c7955ce926456240b2ff0100bde @@ -29,13 +29,13 @@ LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:unconfined -- aggregate function SELECT MIN(x), AVG(x) FROM t1; -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="public.t1" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table t1 column x" -LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.avg(integer)" -LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.int4_avg_accum(bigint[],integer)" -LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.int8_avg(bigint[])" -LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.min(integer)" -LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.int4smaller(integer,integer)" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="public.t1" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table t1 column x" +LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.avg(integer)" +LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.int4_avg_accum(bigint[],integer)" +LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.int8_avg(bigint[])" +LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.min(integer)" +LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.int4smaller(integer,integer)" min | avg -----+--------------------- 1 | 50.5000000000000000 @@ -43,11 +43,11 @@ LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:unconfined -- window function SELECT row_number() OVER (order by x), * FROM t1 WHERE y like '%86%'; -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="public.t1" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table t1 column x" -LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table t1 column y" -LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.row_number()" -LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.textlike(pg_catalog.text,pg_catalog.text)" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_table name="public.t1" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table t1 column x" +LOG: SELinux: allowed { select } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=unconfined_u:object_r:sepgsql_table_t:s0 tclass=db_column name="table t1 column y" +LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.row_number()" +LOG: SELinux: allowed { execute } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 tcontext=system_u:object_r:sepgsql_proc_exec_t:s0 tclass=db_procedure name="pg_catalog.textlike(pg_catalog.text,pg_catalog.text)" row_number | x | y ------------+----+---------------------------------- 1 | 2 | c81e728d9d4c2f636f067f89cc14862c diff --git a/contrib/sepgsql/launcher b/contrib/sepgsql/launcher index c0c3ab75d7507..4fa78ee2a82c2 100755 --- a/contrib/sepgsql/launcher +++ b/contrib/sepgsql/launcher @@ -21,7 +21,7 @@ fi # Read SQL from stdin # TEMP=`mktemp` -CONTEXT="" +CONTEXT="unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255" while IFS='\\n' read LINE do diff --git a/contrib/sepgsql/sepgsql-regtest.te b/contrib/sepgsql/sepgsql-regtest.te index 8727523ca5554..e5d65243e6be3 100644 --- a/contrib/sepgsql/sepgsql-regtest.te +++ b/contrib/sepgsql/sepgsql-regtest.te @@ -1,4 +1,4 @@ -policy_module(sepgsql-regtest, 1.07) +policy_module(sepgsql-regtest, 1.08) gen_require(` all_userspace_class_perms @@ -23,6 +23,35 @@ postgresql_procedure_object(sepgsql_nosuch_trusted_proc_exec_t) type sepgsql_regtest_invisible_schema_t; postgresql_schema_object(sepgsql_regtest_invisible_schema_t); +# +# Test domains for self defined unconfined / superuser +# +role sepgsql_regtest_superuser_r; +userdom_base_user_template(sepgsql_regtest_superuser) +userdom_manage_home_role(sepgsql_regtest_superuser_r, sepgsql_regtest_superuser_t) +userdom_exec_user_home_content_files(sepgsql_regtest_superuser_t) +userdom_write_user_tmp_sockets(sepgsql_regtest_superuser_t) +optional_policy(` + postgresql_stream_connect(sepgsql_regtest_superuser_t) + postgresql_unconfined(sepgsql_regtest_superuser_t) +') +optional_policy(` + unconfined_stream_connect(sepgsql_regtest_superuser_t) + unconfined_rw_pipes(sepgsql_regtest_superuser_t) +') +optional_policy(` + gen_require(` + attribute sepgsql_client_type; + ') + allow sepgsql_regtest_superuser_t self : process { setcurrent }; + allow sepgsql_regtest_superuser_t { self sepgsql_client_type } : process { dyntransition }; +') + +# Type transition rules +allow sepgsql_regtest_user_t sepgsql_regtest_dba_t : process { transition }; +type_transition sepgsql_regtest_user_t sepgsql_regtest_trusted_proc_exec_t:process sepgsql_regtest_dba_t; +type_transition sepgsql_regtest_user_t sepgsql_nosuch_trusted_proc_exec_t:process sepgsql_regtest_nosuch_t; + # # Test domains for database administrators # @@ -156,10 +185,12 @@ optional_policy(` tunable_policy(`sepgsql_regression_test_mode',` allow unconfined_t self : process { setcurrent dyntransition }; allow unconfined_t sepgsql_regtest_dba_t : process { transition dyntransition }; + allow unconfined_t sepgsql_regtest_superuser_t : process { transition dyntransition }; allow unconfined_t sepgsql_regtest_user_t : process { transition dyntransition }; allow unconfined_t sepgsql_regtest_pool_t : process { transition dyntransition }; ') role unconfined_r types sepgsql_regtest_dba_t; + role unconfined_r types sepgsql_regtest_superuser_t; role unconfined_r types sepgsql_regtest_user_t; role unconfined_r types sepgsql_regtest_nosuch_t; role unconfined_r types sepgsql_trusted_proc_t; @@ -169,6 +200,32 @@ optional_policy(` role unconfined_r types sepgsql_regtest_var_t; ') +# +# Rule to make MCS policy work on regression test +# +# NOTE: MCS (multi category security) policy was enabled by default, to +# allow DAC style access control, in the previous selinux policy. +# However, its definition was changed later, then a limited number of +# applications are restricted by MCS policy, for container features +# mainly. The rules below enables MCS policy for domains of regression +# test also, even if base security policy does not apply. If base policy +# is old and MCS is enabled in default, rules below does nothing. +# +optional_policy(` + gen_require(` + type sepgsql_trusted_proc_t; + ') + mcs_constrained(sepgsql_regtest_dba_t) + mcs_constrained(sepgsql_regtest_superuser_t) + mcs_constrained(sepgsql_regtest_user_t) + mcs_constrained(sepgsql_regtest_nosuch_t) + mcs_constrained(sepgsql_trusted_proc_t) + + mcs_constrained(sepgsql_regtest_pool_t) + mcs_constrained(sepgsql_regtest_foo_t) + mcs_constrained(sepgsql_regtest_var_t) +') + # # Rule to execute original trusted procedures # diff --git a/contrib/sepgsql/sql/alter.sql b/contrib/sepgsql/sql/alter.sql index 4bded7ead5c65..3682b3e92ad6a 100644 --- a/contrib/sepgsql/sql/alter.sql +++ b/contrib/sepgsql/sql/alter.sql @@ -9,7 +9,7 @@ DROP DATABASE IF EXISTS regtest_sepgsql_test_database; DROP USER IF EXISTS regtest_sepgsql_test_user; RESET client_min_messages; --- @SECURITY-CONTEXT=unconfined_u:unconfined_r:unconfined_t:s0 +-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 -- -- CREATE Objects to be altered (with debug_audit being silent) diff --git a/contrib/sepgsql/sql/ddl.sql b/contrib/sepgsql/sql/ddl.sql index c91c4cf572f15..c0de3f6b8c2c3 100644 --- a/contrib/sepgsql/sql/ddl.sql +++ b/contrib/sepgsql/sql/ddl.sql @@ -9,7 +9,7 @@ DROP USER IF EXISTS regtest_sepgsql_test_user; RESET client_min_messages; -- confirm required permissions using audit messages --- @SECURITY-CONTEXT=unconfined_u:unconfined_r:unconfined_t:s0 +-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 SET sepgsql.debug_audit = true; SET client_min_messages = LOG; diff --git a/contrib/sepgsql/sql/dml.sql b/contrib/sepgsql/sql/dml.sql index 97e01c3e3c410..7a64b9e21327c 100644 --- a/contrib/sepgsql/sql/dml.sql +++ b/contrib/sepgsql/sql/dml.sql @@ -126,7 +126,7 @@ SELECT * FROM my_schema_2.ts2; -- failed (policy violation) -- -- Clean up -- --- @SECURITY-CONTEXT=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c255 +-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 DROP TABLE IF EXISTS t1 CASCADE; DROP TABLE IF EXISTS t2 CASCADE; DROP TABLE IF EXISTS t3 CASCADE; diff --git a/contrib/sepgsql/sql/label.sql b/contrib/sepgsql/sql/label.sql index 7a05c248ebb65..04085e57a4dcf 100644 --- a/contrib/sepgsql/sql/label.sql +++ b/contrib/sepgsql/sql/label.sql @@ -110,27 +110,27 @@ SELECT sepgsql_getcon(); -- client's label must be restored -- -- validation of transaction aware dynamic-transition --- @SECURITY-CONTEXT=unconfined_u:unconfined_r:unconfined_t:s0:c0.c25 -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c15'); +-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c25 +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c15'); SELECT sepgsql_getcon(); SELECT sepgsql_setcon(NULL); -- failed to reset SELECT sepgsql_getcon(); BEGIN; -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c12'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c12'); SELECT sepgsql_getcon(); SAVEPOINT svpt_1; -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c9'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c9'); SELECT sepgsql_getcon(); SAVEPOINT svpt_2; -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c6'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c6'); SELECT sepgsql_getcon(); SAVEPOINT svpt_3; -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c3'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c3'); SELECT sepgsql_getcon(); ROLLBACK TO SAVEPOINT svpt_2; @@ -143,16 +143,16 @@ ABORT; SELECT sepgsql_getcon(); -- should be 's0:c0.c15' BEGIN; -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c8'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c8'); SELECT sepgsql_getcon(); SAVEPOINT svpt_1; -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c4'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c4'); SELECT sepgsql_getcon(); ROLLBACK TO SAVEPOINT svpt_1; SELECT sepgsql_getcon(); -- should be 's0:c0.c8' -SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c6'); +SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c6'); COMMIT; SELECT sepgsql_getcon(); -- should be 's0:c0.c6' @@ -231,7 +231,7 @@ SELECT sepgsql_getcon(); -- -- Clean up -- --- @SECURITY-CONTEXT=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c255 +-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255 DROP TABLE IF EXISTS t1 CASCADE; DROP TABLE IF EXISTS t2 CASCADE; DROP TABLE IF EXISTS t3 CASCADE; diff --git a/contrib/sslinfo/sslinfo.c b/contrib/sslinfo/sslinfo.c index da201bde33205..031a83a814e39 100644 --- a/contrib/sslinfo/sslinfo.c +++ b/contrib/sslinfo/sslinfo.c @@ -138,6 +138,10 @@ ASN1_STRING_to_text(ASN1_STRING *str) text *result; membuf = BIO_new(BIO_s_mem()); + if (membuf == NULL) + ereport(ERROR, + (errcode(ERRCODE_OUT_OF_MEMORY), + errmsg("could not create OpenSSL BIO structure"))); (void) BIO_set_close(membuf, BIO_CLOSE); ASN1_STRING_print_ex(membuf, str, ((ASN1_STRFLGS_RFC2253 & ~ASN1_STRFLGS_ESC_MSB) @@ -150,7 +154,8 @@ ASN1_STRING_to_text(ASN1_STRING *str) result = cstring_to_text(dp); if (dp != sp) pfree(dp); - BIO_free(membuf); + if (BIO_free(membuf) != 1) + elog(ERROR, "could not free OpenSSL BIO structure"); PG_RETURN_TEXT_P(result); } @@ -289,15 +294,28 @@ X509_NAME_to_text(X509_NAME *name) char *dp; text *result; + if (membuf == NULL) + ereport(ERROR, + (errcode(ERRCODE_OUT_OF_MEMORY), + errmsg("could not create OpenSSL BIO structure"))); + (void) BIO_set_close(membuf, BIO_CLOSE); for (i = 0; i < count; i++) { e = X509_NAME_get_entry(name, i); nid = OBJ_obj2nid(X509_NAME_ENTRY_get_object(e)); + if (nid == NID_undef) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("could not get NID for ASN1_OBJECT object"))); v = X509_NAME_ENTRY_get_data(e); field_name = OBJ_nid2sn(nid); - if (!field_name) + if (field_name == NULL) field_name = OBJ_nid2ln(nid); + if (field_name == NULL) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("could not convert NID %d to an ASN1_OBJECT structure", nid))); BIO_printf(membuf, "/%s=", field_name); ASN1_STRING_print_ex(membuf, v, ((ASN1_STRFLGS_RFC2253 & ~ASN1_STRFLGS_ESC_MSB) @@ -312,7 +330,8 @@ X509_NAME_to_text(X509_NAME *name) result = cstring_to_text(dp); if (dp != sp) pfree(dp); - BIO_free(membuf); + if (BIO_free(membuf) != 1) + elog(ERROR, "could not free OpenSSL BIO structure"); PG_RETURN_TEXT_P(result); } diff --git a/contrib/tablefunc/tablefunc.c b/contrib/tablefunc/tablefunc.c index 8a95d4710b700..cb1d029bf5472 100644 --- a/contrib/tablefunc/tablefunc.c +++ b/contrib/tablefunc/tablefunc.c @@ -432,7 +432,9 @@ crosstab(PG_FUNCTION_ARGS) break; default: /* result type isn't composite */ - elog(ERROR, "return type must be a row type"); + ereport(ERROR, + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("return type must be a row type"))); break; } @@ -1350,7 +1352,9 @@ build_tuplestore_recursively(char *key_fld, appendStringInfo(&chk_current_key, "%s%s%s", branch_delim, current_key, branch_delim); if (strstr(chk_branchstr.data, chk_current_key.data)) - elog(ERROR, "infinite recursion detected"); + ereport(ERROR, + (errcode(ERRCODE_INVALID_RECURSION), + errmsg("infinite recursion detected"))); } /* OK, extend the branch */ @@ -1429,7 +1433,7 @@ validateConnectbyTupleDesc(TupleDesc tupdesc, bool show_branch, bool show_serial { if (tupdesc->natts != (CONNECTBY_NCOLS + serial_column)) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid return type"), errdetail("Query-specified return tuple has " \ "wrong number of columns."))); @@ -1438,7 +1442,7 @@ validateConnectbyTupleDesc(TupleDesc tupdesc, bool show_branch, bool show_serial { if (tupdesc->natts != CONNECTBY_NCOLS_NOBRANCH + serial_column) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid return type"), errdetail("Query-specified return tuple has " \ "wrong number of columns."))); @@ -1447,14 +1451,14 @@ validateConnectbyTupleDesc(TupleDesc tupdesc, bool show_branch, bool show_serial /* check that the types of the first two columns match */ if (tupdesc->attrs[0]->atttypid != tupdesc->attrs[1]->atttypid) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid return type"), errdetail("First two columns must be the same type."))); /* check that the type of the third column is INT4 */ if (tupdesc->attrs[2]->atttypid != INT4OID) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid return type"), errdetail("Third column must be type %s.", format_type_be(INT4OID)))); @@ -1462,20 +1466,26 @@ validateConnectbyTupleDesc(TupleDesc tupdesc, bool show_branch, bool show_serial /* check that the type of the fourth column is TEXT if applicable */ if (show_branch && tupdesc->attrs[3]->atttypid != TEXTOID) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid return type"), errdetail("Fourth column must be type %s.", format_type_be(TEXTOID)))); /* check that the type of the fifth column is INT4 */ if (show_branch && show_serial && tupdesc->attrs[4]->atttypid != INT4OID) - elog(ERROR, "query-specified return tuple not valid for Connectby: " - "fifth column must be type %s", format_type_be(INT4OID)); + ereport(ERROR, + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("query-specified return tuple not valid for Connectby: " + "fifth column must be type %s", + format_type_be(INT4OID)))); /* check that the type of the fifth column is INT4 */ if (!show_branch && show_serial && tupdesc->attrs[3]->atttypid != INT4OID) - elog(ERROR, "query-specified return tuple not valid for Connectby: " - "fourth column must be type %s", format_type_be(INT4OID)); + ereport(ERROR, + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("query-specified return tuple not valid for Connectby: " + "fourth column must be type %s", + format_type_be(INT4OID)))); /* OK, the tupdesc is valid for our purposes */ } @@ -1496,7 +1506,7 @@ compatConnectbyTupleDescs(TupleDesc ret_tupdesc, TupleDesc sql_tupdesc) */ if (sql_tupdesc->natts < 2) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid return type"), errdetail("Query must return at least two columns."))); @@ -1511,7 +1521,7 @@ compatConnectbyTupleDescs(TupleDesc ret_tupdesc, TupleDesc sql_tupdesc) if (ret_atttypid != sql_atttypid || (ret_atttypmod >= 0 && ret_atttypmod != sql_atttypmod)) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid return type"), errdetail("SQL key field type %s does " \ "not match return key field type %s.", @@ -1525,7 +1535,7 @@ compatConnectbyTupleDescs(TupleDesc ret_tupdesc, TupleDesc sql_tupdesc) if (ret_atttypid != sql_atttypid || (ret_atttypmod >= 0 && ret_atttypmod != sql_atttypmod)) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid return type"), errdetail("SQL parent key field type %s does " \ "not match return parent key field type %s.", @@ -1556,7 +1566,7 @@ compatCrosstabTupleDescs(TupleDesc ret_tupdesc, TupleDesc sql_tupdesc) sql_atttypid = sql_tupdesc->attrs[0]->atttypid; if (ret_atttypid != sql_atttypid) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid return type"), errdetail("SQL rowid datatype does not match " \ "return rowid datatype."))); diff --git a/contrib/test_decoding/expected/binary.out b/contrib/test_decoding/expected/binary.out index 6d307491f06df..b3a3509595edc 100644 --- a/contrib/test_decoding/expected/binary.out +++ b/contrib/test_decoding/expected/binary.out @@ -7,22 +7,22 @@ SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_d (1 row) -- succeeds, textual plugin, textual consumer -SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'force-binary', '0'); +SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'force-binary', '0', 'skip-empty-xacts', '1'); data ------ (0 rows) -- fails, binary plugin, textual consumer -SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'force-binary', '1'); -ERROR: logical decoding output plugin "test_decoding" produces binary output, but "pg_logical_slot_get_changes(name,pg_lsn,integer,text[])" expects textual data +SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'force-binary', '1', 'skip-empty-xacts', '1'); +ERROR: logical decoding output plugin "test_decoding" produces binary output, but function "pg_logical_slot_get_changes(name,pg_lsn,integer,text[])" expects textual data -- succeeds, textual plugin, binary consumer -SELECT data FROM pg_logical_slot_get_binary_changes('regression_slot', NULL, NULL, 'force-binary', '0'); +SELECT data FROM pg_logical_slot_get_binary_changes('regression_slot', NULL, NULL, 'force-binary', '0', 'skip-empty-xacts', '1'); data ------ (0 rows) -- succeeds, binary plugin, binary consumer -SELECT data FROM pg_logical_slot_get_binary_changes('regression_slot', NULL, NULL, 'force-binary', '1'); +SELECT data FROM pg_logical_slot_get_binary_changes('regression_slot', NULL, NULL, 'force-binary', '1', 'skip-empty-xacts', '1'); data ------ (0 rows) diff --git a/contrib/test_decoding/expected/ddl.out b/contrib/test_decoding/expected/ddl.out index 728798b3b7344..a48d42c5a1422 100644 --- a/contrib/test_decoding/expected/ddl.out +++ b/contrib/test_decoding/expected/ddl.out @@ -12,7 +12,7 @@ ERROR: replication slot "regression_slot" already exists -- fail because of an invalid name SELECT 'init' FROM pg_create_logical_replication_slot('Invalid Name', 'test_decoding'); ERROR: replication slot name "Invalid Name" contains invalid character -HINT: Replication slot names may only contain letters, numbers, and the underscore character. +HINT: Replication slot names may only contain lower case letters, numbers, and the underscore character. -- fail twice because of an invalid parameter values SELECT 'init' FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', 'frakbar'); ERROR: could not parse value "frakbar" for parameter "include-xids" diff --git a/contrib/test_decoding/sql/binary.sql b/contrib/test_decoding/sql/binary.sql index 619f00b3bc8c9..df1c5fbd42263 100644 --- a/contrib/test_decoding/sql/binary.sql +++ b/contrib/test_decoding/sql/binary.sql @@ -3,12 +3,12 @@ SET synchronous_commit = on; SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding'); -- succeeds, textual plugin, textual consumer -SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'force-binary', '0'); +SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'force-binary', '0', 'skip-empty-xacts', '1'); -- fails, binary plugin, textual consumer -SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'force-binary', '1'); +SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'force-binary', '1', 'skip-empty-xacts', '1'); -- succeeds, textual plugin, binary consumer -SELECT data FROM pg_logical_slot_get_binary_changes('regression_slot', NULL, NULL, 'force-binary', '0'); +SELECT data FROM pg_logical_slot_get_binary_changes('regression_slot', NULL, NULL, 'force-binary', '0', 'skip-empty-xacts', '1'); -- succeeds, binary plugin, binary consumer -SELECT data FROM pg_logical_slot_get_binary_changes('regression_slot', NULL, NULL, 'force-binary', '1'); +SELECT data FROM pg_logical_slot_get_binary_changes('regression_slot', NULL, NULL, 'force-binary', '1', 'skip-empty-xacts', '1'); SELECT 'init' FROM pg_drop_replication_slot('regression_slot'); diff --git a/contrib/tsm_system_rows/Makefile b/contrib/tsm_system_rows/Makefile index 700ab276db2e9..609af463c5c24 100644 --- a/contrib/tsm_system_rows/Makefile +++ b/contrib/tsm_system_rows/Makefile @@ -1,8 +1,8 @@ -# src/test/modules/tsm_system_rows/Makefile +# contrib/tsm_system_rows/Makefile MODULE_big = tsm_system_rows OBJS = tsm_system_rows.o $(WIN32RES) -PGFILEDESC = "tsm_system_rows - SYSTEM TABLESAMPLE method which accepts number of rows as a limit" +PGFILEDESC = "tsm_system_rows - TABLESAMPLE method which accepts number of rows as a limit" EXTENSION = tsm_system_rows DATA = tsm_system_rows--1.0.sql diff --git a/contrib/tsm_system_rows/expected/tsm_system_rows.out b/contrib/tsm_system_rows/expected/tsm_system_rows.out index 7e0f72b02b7df..87b4a8fc64bd2 100644 --- a/contrib/tsm_system_rows/expected/tsm_system_rows.out +++ b/contrib/tsm_system_rows/expected/tsm_system_rows.out @@ -1,31 +1,83 @@ CREATE EXTENSION tsm_system_rows; -CREATE TABLE test_tablesample (id int, name text) WITH (fillfactor=10); -- force smaller pages so we don't have to load too much data to get multiple pages -INSERT INTO test_tablesample SELECT i, repeat(i::text, 1000) FROM generate_series(0, 30) s(i) ORDER BY i; +CREATE TABLE test_tablesample (id int, name text); +INSERT INTO test_tablesample SELECT i, repeat(i::text, 1000) + FROM generate_series(0, 30) s(i); ANALYZE test_tablesample; -SELECT count(*) FROM test_tablesample TABLESAMPLE system_rows (1000); +SELECT count(*) FROM test_tablesample TABLESAMPLE system_rows (0); + count +------- + 0 +(1 row) + +SELECT count(*) FROM test_tablesample TABLESAMPLE system_rows (1); + count +------- + 1 +(1 row) + +SELECT count(*) FROM test_tablesample TABLESAMPLE system_rows (10); + count +------- + 10 +(1 row) + +SELECT count(*) FROM test_tablesample TABLESAMPLE system_rows (100); count ------- 31 (1 row) -SELECT id FROM test_tablesample TABLESAMPLE system_rows (8) REPEATABLE (5432); - id ----- - 7 - 14 - 21 - 28 - 4 - 11 - 18 - 25 -(8 rows) - -EXPLAIN SELECT id FROM test_tablesample TABLESAMPLE system_rows (20) REPEATABLE (10); - QUERY PLAN ------------------------------------------------------------------------------------ - Sample Scan (system_rows) on test_tablesample (cost=0.00..80.20 rows=20 width=4) +-- bad parameters should get through planning, but not execution: +EXPLAIN (COSTS OFF) +SELECT id FROM test_tablesample TABLESAMPLE system_rows (-1); + QUERY PLAN +---------------------------------------- + Sample Scan on test_tablesample + Sampling: system_rows ('-1'::bigint) +(2 rows) + +SELECT id FROM test_tablesample TABLESAMPLE system_rows (-1); +ERROR: sample size must not be negative +-- fail, this method is not repeatable: +SELECT * FROM test_tablesample TABLESAMPLE system_rows (10) REPEATABLE (0); +ERROR: tablesample method system_rows does not support REPEATABLE +LINE 1: SELECT * FROM test_tablesample TABLESAMPLE system_rows (10) ... + ^ +-- but a join should be allowed: +EXPLAIN (COSTS OFF) +SELECT * FROM + (VALUES (0),(10),(100)) v(nrows), + LATERAL (SELECT count(*) FROM test_tablesample + TABLESAMPLE system_rows (nrows)) ss; + QUERY PLAN +---------------------------------------------------------- + Nested Loop + -> Values Scan on "*VALUES*" + -> Aggregate + -> Sample Scan on test_tablesample + Sampling: system_rows ("*VALUES*".column1) +(5 rows) + +SELECT * FROM + (VALUES (0),(10),(100)) v(nrows), + LATERAL (SELECT count(*) FROM test_tablesample + TABLESAMPLE system_rows (nrows)) ss; + nrows | count +-------+------- + 0 | 0 + 10 | 10 + 100 | 31 +(3 rows) + +CREATE VIEW vv AS + SELECT count(*) FROM test_tablesample TABLESAMPLE system_rows (20); +SELECT * FROM vv; + count +------- + 20 (1 row) --- done -DROP TABLE test_tablesample CASCADE; +DROP EXTENSION tsm_system_rows; -- fail, view depends on extension +ERROR: cannot drop extension tsm_system_rows because other objects depend on it +DETAIL: view vv depends on function system_rows(internal) +HINT: Use DROP ... CASCADE to drop the dependent objects too. diff --git a/contrib/tsm_system_rows/sql/tsm_system_rows.sql b/contrib/tsm_system_rows/sql/tsm_system_rows.sql index bd812220ed98d..e3ab4204eea5a 100644 --- a/contrib/tsm_system_rows/sql/tsm_system_rows.sql +++ b/contrib/tsm_system_rows/sql/tsm_system_rows.sql @@ -1,14 +1,39 @@ CREATE EXTENSION tsm_system_rows; -CREATE TABLE test_tablesample (id int, name text) WITH (fillfactor=10); -- force smaller pages so we don't have to load too much data to get multiple pages - -INSERT INTO test_tablesample SELECT i, repeat(i::text, 1000) FROM generate_series(0, 30) s(i) ORDER BY i; +CREATE TABLE test_tablesample (id int, name text); +INSERT INTO test_tablesample SELECT i, repeat(i::text, 1000) + FROM generate_series(0, 30) s(i); ANALYZE test_tablesample; -SELECT count(*) FROM test_tablesample TABLESAMPLE system_rows (1000); -SELECT id FROM test_tablesample TABLESAMPLE system_rows (8) REPEATABLE (5432); +SELECT count(*) FROM test_tablesample TABLESAMPLE system_rows (0); +SELECT count(*) FROM test_tablesample TABLESAMPLE system_rows (1); +SELECT count(*) FROM test_tablesample TABLESAMPLE system_rows (10); +SELECT count(*) FROM test_tablesample TABLESAMPLE system_rows (100); + +-- bad parameters should get through planning, but not execution: +EXPLAIN (COSTS OFF) +SELECT id FROM test_tablesample TABLESAMPLE system_rows (-1); + +SELECT id FROM test_tablesample TABLESAMPLE system_rows (-1); + +-- fail, this method is not repeatable: +SELECT * FROM test_tablesample TABLESAMPLE system_rows (10) REPEATABLE (0); + +-- but a join should be allowed: +EXPLAIN (COSTS OFF) +SELECT * FROM + (VALUES (0),(10),(100)) v(nrows), + LATERAL (SELECT count(*) FROM test_tablesample + TABLESAMPLE system_rows (nrows)) ss; + +SELECT * FROM + (VALUES (0),(10),(100)) v(nrows), + LATERAL (SELECT count(*) FROM test_tablesample + TABLESAMPLE system_rows (nrows)) ss; + +CREATE VIEW vv AS + SELECT count(*) FROM test_tablesample TABLESAMPLE system_rows (20); -EXPLAIN SELECT id FROM test_tablesample TABLESAMPLE system_rows (20) REPEATABLE (10); +SELECT * FROM vv; --- done -DROP TABLE test_tablesample CASCADE; +DROP EXTENSION tsm_system_rows; -- fail, view depends on extension diff --git a/contrib/tsm_system_rows/tsm_system_rows--1.0.sql b/contrib/tsm_system_rows/tsm_system_rows--1.0.sql index 1a29c584b5a83..de508ed72675f 100644 --- a/contrib/tsm_system_rows/tsm_system_rows--1.0.sql +++ b/contrib/tsm_system_rows/tsm_system_rows--1.0.sql @@ -1,44 +1,9 @@ -/* src/test/modules/tablesample/tsm_system_rows--1.0.sql */ +/* contrib/tsm_system_rows/tsm_system_rows--1.0.sql */ -- complain if script is sourced in psql, rather than via CREATE EXTENSION \echo Use "CREATE EXTENSION tsm_system_rows" to load this file. \quit -CREATE FUNCTION tsm_system_rows_init(internal, int4, int4) -RETURNS void -AS 'MODULE_PATHNAME' +CREATE FUNCTION system_rows(internal) +RETURNS tsm_handler +AS 'MODULE_PATHNAME', 'tsm_system_rows_handler' LANGUAGE C STRICT; - -CREATE FUNCTION tsm_system_rows_nextblock(internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT; - -CREATE FUNCTION tsm_system_rows_nexttuple(internal, int4, int2) -RETURNS int2 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT; - -CREATE FUNCTION tsm_system_rows_examinetuple(internal, int4, internal, bool) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT; - -CREATE FUNCTION tsm_system_rows_end(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT; - -CREATE FUNCTION tsm_system_rows_reset(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT; - -CREATE FUNCTION tsm_system_rows_cost(internal, internal, internal, internal, internal, internal, internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT; - -INSERT INTO pg_tablesample_method VALUES('system_rows', false, true, - 'tsm_system_rows_init', 'tsm_system_rows_nextblock', - 'tsm_system_rows_nexttuple', 'tsm_system_rows_examinetuple', - 'tsm_system_rows_end', 'tsm_system_rows_reset', 'tsm_system_rows_cost'); diff --git a/contrib/tsm_system_rows/tsm_system_rows.c b/contrib/tsm_system_rows/tsm_system_rows.c index e325eaff49897..f251e3e5e06dd 100644 --- a/contrib/tsm_system_rows/tsm_system_rows.c +++ b/contrib/tsm_system_rows/tsm_system_rows.c @@ -1,240 +1,356 @@ /*------------------------------------------------------------------------- * * tsm_system_rows.c - * interface routines for system_rows tablesample method + * support routines for SYSTEM_ROWS tablesample method * + * The desire here is to produce a random sample with a given number of rows + * (or the whole relation, if that is fewer rows). We use a block-sampling + * approach. To ensure that the whole relation will be visited if necessary, + * we start at a randomly chosen block and then advance with a stride that + * is randomly chosen but is relatively prime to the relation's nblocks. * - * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group + * Because of the dependence on nblocks, this method cannot be repeatable + * across queries. (Even if the user hasn't explicitly changed the relation, + * maintenance activities such as autovacuum might change nblocks.) However, + * we can at least make it repeatable across scans, by determining the + * sampling pattern only once on the first scan. This means that rescans + * won't visit blocks added after the first scan, but that is fine since + * such blocks shouldn't contain any visible tuples anyway. + * + * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * contrib/tsm_system_rows_rowlimit/tsm_system_rows.c + * contrib/tsm_system_rows/tsm_system_rows.c * *------------------------------------------------------------------------- */ #include "postgres.h" -#include "fmgr.h" - -#include "access/tablesample.h" #include "access/relscan.h" +#include "access/tsmapi.h" +#include "catalog/pg_type.h" #include "miscadmin.h" -#include "nodes/execnodes.h" -#include "nodes/relation.h" #include "optimizer/clauses.h" -#include "storage/bufmgr.h" +#include "optimizer/cost.h" #include "utils/sampling.h" PG_MODULE_MAGIC; -/* - * State - */ +PG_FUNCTION_INFO_V1(tsm_system_rows_handler); + + +/* Private state */ typedef struct { - SamplerRandomState randstate; uint32 seed; /* random seed */ - BlockNumber nblocks; /* number of block in relation */ - int32 ntuples; /* number of tuples to return */ - int32 donetuples; /* tuples already returned */ + int64 ntuples; /* number of tuples to return */ + int64 donetuples; /* number of tuples already returned */ OffsetNumber lt; /* last tuple returned from current block */ - BlockNumber step; /* step size */ + BlockNumber doneblocks; /* number of already-scanned blocks */ BlockNumber lb; /* last block visited */ - BlockNumber doneblocks; /* number of already returned blocks */ -} SystemSamplerData; - - -PG_FUNCTION_INFO_V1(tsm_system_rows_init); -PG_FUNCTION_INFO_V1(tsm_system_rows_nextblock); -PG_FUNCTION_INFO_V1(tsm_system_rows_nexttuple); -PG_FUNCTION_INFO_V1(tsm_system_rows_examinetuple); -PG_FUNCTION_INFO_V1(tsm_system_rows_end); -PG_FUNCTION_INFO_V1(tsm_system_rows_reset); -PG_FUNCTION_INFO_V1(tsm_system_rows_cost); - + /* these three values are not changed during a rescan: */ + BlockNumber nblocks; /* number of blocks in relation */ + BlockNumber firstblock; /* first block to sample from */ + BlockNumber step; /* step size, or 0 if not set yet */ +} SystemRowsSamplerData; + +static void system_rows_samplescangetsamplesize(PlannerInfo *root, + RelOptInfo *baserel, + List *paramexprs, + BlockNumber *pages, + double *tuples); +static void system_rows_initsamplescan(SampleScanState *node, + int eflags); +static void system_rows_beginsamplescan(SampleScanState *node, + Datum *params, + int nparams, + uint32 seed); +static BlockNumber system_rows_nextsampleblock(SampleScanState *node); +static OffsetNumber system_rows_nextsampletuple(SampleScanState *node, + BlockNumber blockno, + OffsetNumber maxoffset); +static bool SampleOffsetVisible(OffsetNumber tupoffset, HeapScanDesc scan); static uint32 random_relative_prime(uint32 n, SamplerRandomState randstate); + /* - * Initializes the state. + * Create a TsmRoutine descriptor for the SYSTEM_ROWS method. */ Datum -tsm_system_rows_init(PG_FUNCTION_ARGS) +tsm_system_rows_handler(PG_FUNCTION_ARGS) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - uint32 seed = PG_GETARG_UINT32(1); - int32 ntuples = PG_ARGISNULL(2) ? -1 : PG_GETARG_INT32(2); - HeapScanDesc scan = tsdesc->heapScan; - SystemSamplerData *sampler; + TsmRoutine *tsm = makeNode(TsmRoutine); - if (ntuples < 1) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("invalid sample size"), - errhint("Sample size must be positive integer value."))); + tsm->parameterTypes = list_make1_oid(INT8OID); - sampler = palloc0(sizeof(SystemSamplerData)); + /* See notes at head of file */ + tsm->repeatable_across_queries = false; + tsm->repeatable_across_scans = true; - /* Remember initial values for reinit */ - sampler->seed = seed; - sampler->nblocks = scan->rs_nblocks; - sampler->ntuples = ntuples; - sampler->donetuples = 0; - sampler->lt = InvalidOffsetNumber; - sampler->doneblocks = 0; - - sampler_random_init_state(sampler->seed, sampler->randstate); - - /* Find relative prime as step size for linear probing. */ - sampler->step = random_relative_prime(sampler->nblocks, sampler->randstate); - - /* - * Randomize start position so that blocks close to step size don't have - * higher probability of being chosen on very short scan. - */ - sampler->lb = sampler_random_fract(sampler->randstate) * - (sampler->nblocks / sampler->step); + tsm->SampleScanGetSampleSize = system_rows_samplescangetsamplesize; + tsm->InitSampleScan = system_rows_initsamplescan; + tsm->BeginSampleScan = system_rows_beginsamplescan; + tsm->NextSampleBlock = system_rows_nextsampleblock; + tsm->NextSampleTuple = system_rows_nextsampletuple; + tsm->EndSampleScan = NULL; - tsdesc->tsmdata = (void *) sampler; - - PG_RETURN_VOID(); + PG_RETURN_POINTER(tsm); } /* - * Get next block number or InvalidBlockNumber when we're done. - * - * Uses linear probing algorithm for picking next block. + * Sample size estimation. */ -Datum -tsm_system_rows_nextblock(PG_FUNCTION_ARGS) +static void +system_rows_samplescangetsamplesize(PlannerInfo *root, + RelOptInfo *baserel, + List *paramexprs, + BlockNumber *pages, + double *tuples) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - SystemSamplerData *sampler = (SystemSamplerData *) tsdesc->tsmdata; + Node *limitnode; + int64 ntuples; + double npages; - sampler->lb = (sampler->lb + sampler->step) % sampler->nblocks; - sampler->doneblocks++; + /* Try to extract an estimate for the limit rowcount */ + limitnode = (Node *) linitial(paramexprs); + limitnode = estimate_expression_value(root, limitnode); - /* All blocks have been read, we're done */ - if (sampler->doneblocks > sampler->nblocks || - sampler->donetuples >= sampler->ntuples) - PG_RETURN_UINT32(InvalidBlockNumber); + if (IsA(limitnode, Const) && + !((Const *) limitnode)->constisnull) + { + ntuples = DatumGetInt64(((Const *) limitnode)->constvalue); + if (ntuples < 0) + { + /* Default ntuples if the value is bogus */ + ntuples = 1000; + } + } + else + { + /* Default ntuples if we didn't obtain a non-null Const */ + ntuples = 1000; + } - PG_RETURN_UINT32(sampler->lb); -} + /* Clamp to the estimated relation size */ + if (ntuples > baserel->tuples) + ntuples = (int64) baserel->tuples; + ntuples = clamp_row_est(ntuples); -/* - * Get next tuple offset in current block or InvalidOffsetNumber if we are done - * with this block. - */ -Datum -tsm_system_rows_nexttuple(PG_FUNCTION_ARGS) -{ - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - OffsetNumber maxoffset = PG_GETARG_UINT16(2); - SystemSamplerData *sampler = (SystemSamplerData *) tsdesc->tsmdata; - OffsetNumber tupoffset = sampler->lt; + if (baserel->tuples > 0 && baserel->pages > 0) + { + /* Estimate number of pages visited based on tuple density */ + double density = baserel->tuples / (double) baserel->pages; - if (tupoffset == InvalidOffsetNumber) - tupoffset = FirstOffsetNumber; + npages = ntuples / density; + } else - tupoffset++; - - if (tupoffset > maxoffset || - sampler->donetuples >= sampler->ntuples) - tupoffset = InvalidOffsetNumber; + { + /* For lack of data, assume one tuple per page */ + npages = ntuples; + } - sampler->lt = tupoffset; + /* Clamp to sane value */ + npages = clamp_row_est(Min((double) baserel->pages, npages)); - PG_RETURN_UINT16(tupoffset); + *pages = npages; + *tuples = ntuples; } /* - * Examine tuple and decide if it should be returned. + * Initialize during executor setup. */ -Datum -tsm_system_rows_examinetuple(PG_FUNCTION_ARGS) +static void +system_rows_initsamplescan(SampleScanState *node, int eflags) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - bool visible = PG_GETARG_BOOL(3); - SystemSamplerData *sampler = (SystemSamplerData *) tsdesc->tsmdata; - - if (!visible) - PG_RETURN_BOOL(false); - - sampler->donetuples++; - - PG_RETURN_BOOL(true); + node->tsm_state = palloc0(sizeof(SystemRowsSamplerData)); + /* Note the above leaves tsm_state->step equal to zero */ } /* - * Cleanup method. + * Examine parameters and prepare for a sample scan. */ -Datum -tsm_system_rows_end(PG_FUNCTION_ARGS) +static void +system_rows_beginsamplescan(SampleScanState *node, + Datum *params, + int nparams, + uint32 seed) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); + SystemRowsSamplerData *sampler = (SystemRowsSamplerData *) node->tsm_state; + int64 ntuples = DatumGetInt64(params[0]); + + if (ntuples < 0) + ereport(ERROR, + (errcode(ERRCODE_INVALID_TABLESAMPLE_ARGUMENT), + errmsg("sample size must not be negative"))); - pfree(tsdesc->tsmdata); + sampler->seed = seed; + sampler->ntuples = ntuples; + sampler->donetuples = 0; + sampler->lt = InvalidOffsetNumber; + sampler->doneblocks = 0; + /* lb will be initialized during first NextSampleBlock call */ + /* we intentionally do not change nblocks/firstblock/step here */ - PG_RETURN_VOID(); + /* + * We *must* use pagemode visibility checking in this module, so force + * that even though it's currently default. + */ + node->use_pagemode = true; } /* - * Reset state (called by ReScan). + * Select next block to sample. + * + * Uses linear probing algorithm for picking next block. */ -Datum -tsm_system_rows_reset(PG_FUNCTION_ARGS) +static BlockNumber +system_rows_nextsampleblock(SampleScanState *node) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - SystemSamplerData *sampler = (SystemSamplerData *) tsdesc->tsmdata; + SystemRowsSamplerData *sampler = (SystemRowsSamplerData *) node->tsm_state; + HeapScanDesc scan = node->ss.ss_currentScanDesc; - sampler->lt = InvalidOffsetNumber; - sampler->donetuples = 0; - sampler->doneblocks = 0; + /* First call within scan? */ + if (sampler->doneblocks == 0) + { + /* First scan within query? */ + if (sampler->step == 0) + { + /* Initialize now that we have scan descriptor */ + SamplerRandomState randstate; + + /* If relation is empty, there's nothing to scan */ + if (scan->rs_nblocks == 0) + return InvalidBlockNumber; + + /* We only need an RNG during this setup step */ + sampler_random_init_state(sampler->seed, randstate); + + /* Compute nblocks/firstblock/step only once per query */ + sampler->nblocks = scan->rs_nblocks; - sampler_random_init_state(sampler->seed, sampler->randstate); - sampler->step = random_relative_prime(sampler->nblocks, sampler->randstate); - sampler->lb = sampler_random_fract(sampler->randstate) * (sampler->nblocks / sampler->step); + /* Choose random starting block within the relation */ + /* (Actually this is the predecessor of the first block visited) */ + sampler->firstblock = sampler_random_fract(randstate) * + sampler->nblocks; + + /* Find relative prime as step size for linear probing */ + sampler->step = random_relative_prime(sampler->nblocks, randstate); + } + + /* Reinitialize lb */ + sampler->lb = sampler->firstblock; + } + + /* If we've read all blocks or returned all needed tuples, we're done */ + if (++sampler->doneblocks > sampler->nblocks || + sampler->donetuples >= sampler->ntuples) + return InvalidBlockNumber; + + /* + * It's probably impossible for scan->rs_nblocks to decrease between scans + * within a query; but just in case, loop until we select a block number + * less than scan->rs_nblocks. We don't care if scan->rs_nblocks has + * increased since the first scan. + */ + do + { + /* Advance lb, using uint64 arithmetic to forestall overflow */ + sampler->lb = ((uint64) sampler->lb + sampler->step) % sampler->nblocks; + } while (sampler->lb >= scan->rs_nblocks); - PG_RETURN_VOID(); + return sampler->lb; } /* - * Costing function. + * Select next sampled tuple in current block. + * + * In block sampling, we just want to sample all the tuples in each selected + * block. + * + * When we reach end of the block, return InvalidOffsetNumber which tells + * SampleScan to go to next block. */ -Datum -tsm_system_rows_cost(PG_FUNCTION_ARGS) +static OffsetNumber +system_rows_nextsampletuple(SampleScanState *node, + BlockNumber blockno, + OffsetNumber maxoffset) { - PlannerInfo *root = (PlannerInfo *) PG_GETARG_POINTER(0); - Path *path = (Path *) PG_GETARG_POINTER(1); - RelOptInfo *baserel = (RelOptInfo *) PG_GETARG_POINTER(2); - List *args = (List *) PG_GETARG_POINTER(3); - BlockNumber *pages = (BlockNumber *) PG_GETARG_POINTER(4); - double *tuples = (double *) PG_GETARG_POINTER(5); - Node *limitnode; - int32 ntuples; + SystemRowsSamplerData *sampler = (SystemRowsSamplerData *) node->tsm_state; + HeapScanDesc scan = node->ss.ss_currentScanDesc; + OffsetNumber tupoffset = sampler->lt; - limitnode = linitial(args); - limitnode = estimate_expression_value(root, limitnode); + /* Quit if we've returned all needed tuples */ + if (sampler->donetuples >= sampler->ntuples) + return InvalidOffsetNumber; - if (IsA(limitnode, RelabelType)) - limitnode = (Node *) ((RelabelType *) limitnode)->arg; + /* + * Because we should only count visible tuples as being returned, we need + * to search for a visible tuple rather than just let the core code do it. + */ - if (IsA(limitnode, Const)) - ntuples = DatumGetInt32(((Const *) limitnode)->constvalue); - else + /* We rely on the data accumulated in pagemode access */ + Assert(scan->rs_pageatatime); + for (;;) { - /* Default ntuples if the estimation didn't return Const. */ - ntuples = 1000; + /* Advance to next possible offset on page */ + if (tupoffset == InvalidOffsetNumber) + tupoffset = FirstOffsetNumber; + else + tupoffset++; + + /* Done? */ + if (tupoffset > maxoffset) + { + tupoffset = InvalidOffsetNumber; + break; + } + + /* Found a candidate? */ + if (SampleOffsetVisible(tupoffset, scan)) + { + sampler->donetuples++; + break; + } } - *pages = Min(baserel->pages, ntuples); - *tuples = ntuples; - path->rows = *tuples; + sampler->lt = tupoffset; - PG_RETURN_VOID(); + return tupoffset; } +/* + * Check if tuple offset is visible + * + * In pageatatime mode, heapgetpage() already did visibility checks, + * so just look at the info it left in rs_vistuples[]. + */ +static bool +SampleOffsetVisible(OffsetNumber tupoffset, HeapScanDesc scan) +{ + int start = 0, + end = scan->rs_ntuples - 1; + + while (start <= end) + { + int mid = (start + end) / 2; + OffsetNumber curoffset = scan->rs_vistuples[mid]; + + if (tupoffset == curoffset) + return true; + else if (tupoffset < curoffset) + end = mid - 1; + else + start = mid + 1; + } + + return false; +} +/* + * Compute greatest common divisor of two uint32's. + */ static uint32 gcd(uint32 a, uint32 b) { @@ -250,22 +366,29 @@ gcd(uint32 a, uint32 b) return b; } +/* + * Pick a random value less than and relatively prime to n, if possible + * (else return 1). + */ static uint32 random_relative_prime(uint32 n, SamplerRandomState randstate) { - /* Pick random starting number, with some limits on what it can be. */ - uint32 r = (uint32) sampler_random_fract(randstate) * n / 2 + n / 4, - t; + uint32 r; + + /* Safety check to avoid infinite loop or zero result for small n. */ + if (n <= 1) + return 1; /* * This should only take 2 or 3 iterations as the probability of 2 numbers - * being relatively prime is ~61%. + * being relatively prime is ~61%; but just in case, we'll include a + * CHECK_FOR_INTERRUPTS in the loop. */ - while ((t = gcd(r, n)) > 1) + do { CHECK_FOR_INTERRUPTS(); - r /= t; - } + r = (uint32) (sampler_random_fract(randstate) * n); + } while (r == 0 || gcd(r, n) > 1); return r; } diff --git a/contrib/tsm_system_rows/tsm_system_rows.control b/contrib/tsm_system_rows/tsm_system_rows.control index 84ea7adb49a26..4bd0232f97215 100644 --- a/contrib/tsm_system_rows/tsm_system_rows.control +++ b/contrib/tsm_system_rows/tsm_system_rows.control @@ -1,5 +1,5 @@ # tsm_system_rows extension -comment = 'SYSTEM TABLESAMPLE method which accepts number rows as a limit' +comment = 'TABLESAMPLE method which accepts number of rows as a limit' default_version = '1.0' module_pathname = '$libdir/tsm_system_rows' relocatable = true diff --git a/contrib/tsm_system_time/Makefile b/contrib/tsm_system_time/Makefile index c42c1c6bb61f2..4c08a9935ab68 100644 --- a/contrib/tsm_system_time/Makefile +++ b/contrib/tsm_system_time/Makefile @@ -1,14 +1,16 @@ -# src/test/modules/tsm_system_time/Makefile +# contrib/tsm_system_time/Makefile MODULE_big = tsm_system_time OBJS = tsm_system_time.o $(WIN32RES) -PGFILEDESC = "tsm_system_time - SYSTEM TABLESAMPLE method which accepts number rows of as a limit" +PGFILEDESC = "tsm_system_time - TABLESAMPLE method which accepts time in milliseconds as a limit" EXTENSION = tsm_system_time DATA = tsm_system_time--1.0.sql REGRESS = tsm_system_time +SHLIB_LINK += $(filter -lm, $(LIBS)) + ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) diff --git a/contrib/tsm_system_time/expected/tsm_system_time.out b/contrib/tsm_system_time/expected/tsm_system_time.out index 32ad03c4bdcef..ac44f30be9038 100644 --- a/contrib/tsm_system_time/expected/tsm_system_time.out +++ b/contrib/tsm_system_time/expected/tsm_system_time.out @@ -1,54 +1,100 @@ CREATE EXTENSION tsm_system_time; -CREATE TABLE test_tablesample (id int, name text) WITH (fillfactor=10); -- force smaller pages so we don't have to load too much data to get multiple pages -INSERT INTO test_tablesample SELECT i, repeat(i::text, 1000) FROM generate_series(0, 30) s(i) ORDER BY i; +CREATE TABLE test_tablesample (id int, name text); +INSERT INTO test_tablesample SELECT i, repeat(i::text, 1000) + FROM generate_series(0, 30) s(i); ANALYZE test_tablesample; -SELECT count(*) FROM test_tablesample TABLESAMPLE system_time (1000); +-- It's a bit tricky to test SYSTEM_TIME in a platform-independent way. +-- We can test the zero-time corner case ... +SELECT count(*) FROM test_tablesample TABLESAMPLE system_time (0); count ------- - 31 + 0 (1 row) -SELECT id FROM test_tablesample TABLESAMPLE system_time (1000) REPEATABLE (5432); - id ----- - 7 - 14 - 21 - 28 - 4 - 11 - 18 - 25 - 1 - 8 - 15 - 22 - 29 - 5 - 12 - 19 - 26 - 2 - 9 - 16 - 23 - 30 - 6 - 13 - 20 - 27 - 3 - 10 - 17 - 24 - 0 -(31 rows) - -EXPLAIN SELECT id FROM test_tablesample TABLESAMPLE system_time (100) REPEATABLE (10); - QUERY PLAN ------------------------------------------------------------------------------------- - Sample Scan (system_time) on test_tablesample (cost=0.00..100.25 rows=25 width=4) +-- ... and we assume that this will finish before running out of time: +SELECT count(*) FROM test_tablesample TABLESAMPLE system_time (100000); + count +------- + 31 (1 row) --- done -DROP TABLE test_tablesample CASCADE; +-- bad parameters should get through planning, but not execution: +EXPLAIN (COSTS OFF) +SELECT id FROM test_tablesample TABLESAMPLE system_time (-1); + QUERY PLAN +-------------------------------------------------- + Sample Scan on test_tablesample + Sampling: system_time ('-1'::double precision) +(2 rows) + +SELECT id FROM test_tablesample TABLESAMPLE system_time (-1); +ERROR: sample collection time must not be negative +-- fail, this method is not repeatable: +SELECT * FROM test_tablesample TABLESAMPLE system_time (10) REPEATABLE (0); +ERROR: tablesample method system_time does not support REPEATABLE +LINE 1: SELECT * FROM test_tablesample TABLESAMPLE system_time (10) ... + ^ +-- since it's not repeatable, we expect a Materialize node in these plans: +EXPLAIN (COSTS OFF) +SELECT * FROM + (VALUES (0),(100000)) v(time), + LATERAL (SELECT COUNT(*) FROM test_tablesample + TABLESAMPLE system_time (100000)) ss; + QUERY PLAN +------------------------------------------------------------------------ + Nested Loop + -> Aggregate + -> Materialize + -> Sample Scan on test_tablesample + Sampling: system_time ('100000'::double precision) + -> Values Scan on "*VALUES*" +(6 rows) + +SELECT * FROM + (VALUES (0),(100000)) v(time), + LATERAL (SELECT COUNT(*) FROM test_tablesample + TABLESAMPLE system_time (100000)) ss; + time | count +--------+------- + 0 | 31 + 100000 | 31 +(2 rows) + +EXPLAIN (COSTS OFF) +SELECT * FROM + (VALUES (0),(100000)) v(time), + LATERAL (SELECT COUNT(*) FROM test_tablesample + TABLESAMPLE system_time (time)) ss; + QUERY PLAN +---------------------------------------------------------------- + Nested Loop + -> Values Scan on "*VALUES*" + -> Aggregate + -> Materialize + -> Sample Scan on test_tablesample + Sampling: system_time ("*VALUES*".column1) +(6 rows) + +SELECT * FROM + (VALUES (0),(100000)) v(time), + LATERAL (SELECT COUNT(*) FROM test_tablesample + TABLESAMPLE system_time (time)) ss; + time | count +--------+------- + 0 | 0 + 100000 | 31 +(2 rows) + +CREATE VIEW vv AS + SELECT * FROM test_tablesample TABLESAMPLE system_time (20); +EXPLAIN (COSTS OFF) SELECT * FROM vv; + QUERY PLAN +-------------------------------------------------- + Sample Scan on test_tablesample + Sampling: system_time ('20'::double precision) +(2 rows) + +DROP EXTENSION tsm_system_time; -- fail, view depends on extension +ERROR: cannot drop extension tsm_system_time because other objects depend on it +DETAIL: view vv depends on function system_time(internal) +HINT: Use DROP ... CASCADE to drop the dependent objects too. diff --git a/contrib/tsm_system_time/sql/tsm_system_time.sql b/contrib/tsm_system_time/sql/tsm_system_time.sql index 68dbbf98afd2d..117de163d8505 100644 --- a/contrib/tsm_system_time/sql/tsm_system_time.sql +++ b/contrib/tsm_system_time/sql/tsm_system_time.sql @@ -1,14 +1,51 @@ CREATE EXTENSION tsm_system_time; -CREATE TABLE test_tablesample (id int, name text) WITH (fillfactor=10); -- force smaller pages so we don't have to load too much data to get multiple pages - -INSERT INTO test_tablesample SELECT i, repeat(i::text, 1000) FROM generate_series(0, 30) s(i) ORDER BY i; +CREATE TABLE test_tablesample (id int, name text); +INSERT INTO test_tablesample SELECT i, repeat(i::text, 1000) + FROM generate_series(0, 30) s(i); ANALYZE test_tablesample; -SELECT count(*) FROM test_tablesample TABLESAMPLE system_time (1000); -SELECT id FROM test_tablesample TABLESAMPLE system_time (1000) REPEATABLE (5432); +-- It's a bit tricky to test SYSTEM_TIME in a platform-independent way. +-- We can test the zero-time corner case ... +SELECT count(*) FROM test_tablesample TABLESAMPLE system_time (0); +-- ... and we assume that this will finish before running out of time: +SELECT count(*) FROM test_tablesample TABLESAMPLE system_time (100000); + +-- bad parameters should get through planning, but not execution: +EXPLAIN (COSTS OFF) +SELECT id FROM test_tablesample TABLESAMPLE system_time (-1); + +SELECT id FROM test_tablesample TABLESAMPLE system_time (-1); + +-- fail, this method is not repeatable: +SELECT * FROM test_tablesample TABLESAMPLE system_time (10) REPEATABLE (0); + +-- since it's not repeatable, we expect a Materialize node in these plans: +EXPLAIN (COSTS OFF) +SELECT * FROM + (VALUES (0),(100000)) v(time), + LATERAL (SELECT COUNT(*) FROM test_tablesample + TABLESAMPLE system_time (100000)) ss; + +SELECT * FROM + (VALUES (0),(100000)) v(time), + LATERAL (SELECT COUNT(*) FROM test_tablesample + TABLESAMPLE system_time (100000)) ss; + +EXPLAIN (COSTS OFF) +SELECT * FROM + (VALUES (0),(100000)) v(time), + LATERAL (SELECT COUNT(*) FROM test_tablesample + TABLESAMPLE system_time (time)) ss; + +SELECT * FROM + (VALUES (0),(100000)) v(time), + LATERAL (SELECT COUNT(*) FROM test_tablesample + TABLESAMPLE system_time (time)) ss; + +CREATE VIEW vv AS + SELECT * FROM test_tablesample TABLESAMPLE system_time (20); -EXPLAIN SELECT id FROM test_tablesample TABLESAMPLE system_time (100) REPEATABLE (10); +EXPLAIN (COSTS OFF) SELECT * FROM vv; --- done -DROP TABLE test_tablesample CASCADE; +DROP EXTENSION tsm_system_time; -- fail, view depends on extension diff --git a/contrib/tsm_system_time/tsm_system_time--1.0.sql b/contrib/tsm_system_time/tsm_system_time--1.0.sql index 1f390d6ed7aca..c59d2e84efdab 100644 --- a/contrib/tsm_system_time/tsm_system_time--1.0.sql +++ b/contrib/tsm_system_time/tsm_system_time--1.0.sql @@ -1,39 +1,9 @@ -/* src/test/modules/tablesample/tsm_system_time--1.0.sql */ +/* contrib/tsm_system_time/tsm_system_time--1.0.sql */ -- complain if script is sourced in psql, rather than via CREATE EXTENSION \echo Use "CREATE EXTENSION tsm_system_time" to load this file. \quit -CREATE FUNCTION tsm_system_time_init(internal, int4, int4) -RETURNS void -AS 'MODULE_PATHNAME' +CREATE FUNCTION system_time(internal) +RETURNS tsm_handler +AS 'MODULE_PATHNAME', 'tsm_system_time_handler' LANGUAGE C STRICT; - -CREATE FUNCTION tsm_system_time_nextblock(internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT; - -CREATE FUNCTION tsm_system_time_nexttuple(internal, int4, int2) -RETURNS int2 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT; - -CREATE FUNCTION tsm_system_time_end(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT; - -CREATE FUNCTION tsm_system_time_reset(internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT; - -CREATE FUNCTION tsm_system_time_cost(internal, internal, internal, internal, internal, internal, internal) -RETURNS void -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT; - -INSERT INTO pg_tablesample_method VALUES('system_time', false, true, - 'tsm_system_time_init', 'tsm_system_time_nextblock', - 'tsm_system_time_nexttuple', '-', 'tsm_system_time_end', - 'tsm_system_time_reset', 'tsm_system_time_cost'); diff --git a/contrib/tsm_system_time/tsm_system_time.c b/contrib/tsm_system_time/tsm_system_time.c index 7708fc0761748..83f1455c5fa24 100644 --- a/contrib/tsm_system_time/tsm_system_time.c +++ b/contrib/tsm_system_time/tsm_system_time.c @@ -1,286 +1,320 @@ /*------------------------------------------------------------------------- * * tsm_system_time.c - * interface routines for system_time tablesample method + * support routines for SYSTEM_TIME tablesample method * + * The desire here is to produce a random sample with as many rows as possible + * in no more than the specified amount of time. We use a block-sampling + * approach. To ensure that the whole relation will be visited if necessary, + * we start at a randomly chosen block and then advance with a stride that + * is randomly chosen but is relatively prime to the relation's nblocks. * - * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group + * Because of the time dependence, this method is necessarily unrepeatable. + * However, we do what we can to reduce surprising behavior by selecting + * the sampling pattern just once per query, much as in tsm_system_rows. + * + * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * contrib/tsm_system_time_rowlimit/tsm_system_time.c + * contrib/tsm_system_time/tsm_system_time.c * *------------------------------------------------------------------------- */ #include "postgres.h" -#include "fmgr.h" +#ifdef _MSC_VER +#include /* for _isnan */ +#endif +#include -#include "access/tablesample.h" #include "access/relscan.h" +#include "access/tsmapi.h" +#include "catalog/pg_type.h" #include "miscadmin.h" -#include "nodes/execnodes.h" -#include "nodes/relation.h" #include "optimizer/clauses.h" -#include "storage/bufmgr.h" +#include "optimizer/cost.h" #include "utils/sampling.h" #include "utils/spccache.h" -#include "utils/timestamp.h" PG_MODULE_MAGIC; -/* - * State - */ +PG_FUNCTION_INFO_V1(tsm_system_time_handler); + + +/* Private state */ typedef struct { - SamplerRandomState randstate; uint32 seed; /* random seed */ - BlockNumber nblocks; /* number of block in relation */ - int32 time; /* time limit for sampling */ - TimestampTz start_time; /* start time of sampling */ - TimestampTz end_time; /* end time of sampling */ + double millis; /* time limit for sampling */ + instr_time start_time; /* scan start time */ OffsetNumber lt; /* last tuple returned from current block */ - BlockNumber step; /* step size */ + BlockNumber doneblocks; /* number of already-scanned blocks */ BlockNumber lb; /* last block visited */ - BlockNumber estblocks; /* estimated number of returned blocks - * (moving) */ - BlockNumber doneblocks; /* number of already returned blocks */ -} SystemSamplerData; - - -PG_FUNCTION_INFO_V1(tsm_system_time_init); -PG_FUNCTION_INFO_V1(tsm_system_time_nextblock); -PG_FUNCTION_INFO_V1(tsm_system_time_nexttuple); -PG_FUNCTION_INFO_V1(tsm_system_time_end); -PG_FUNCTION_INFO_V1(tsm_system_time_reset); -PG_FUNCTION_INFO_V1(tsm_system_time_cost); - + /* these three values are not changed during a rescan: */ + BlockNumber nblocks; /* number of blocks in relation */ + BlockNumber firstblock; /* first block to sample from */ + BlockNumber step; /* step size, or 0 if not set yet */ +} SystemTimeSamplerData; + +static void system_time_samplescangetsamplesize(PlannerInfo *root, + RelOptInfo *baserel, + List *paramexprs, + BlockNumber *pages, + double *tuples); +static void system_time_initsamplescan(SampleScanState *node, + int eflags); +static void system_time_beginsamplescan(SampleScanState *node, + Datum *params, + int nparams, + uint32 seed); +static BlockNumber system_time_nextsampleblock(SampleScanState *node); +static OffsetNumber system_time_nextsampletuple(SampleScanState *node, + BlockNumber blockno, + OffsetNumber maxoffset); static uint32 random_relative_prime(uint32 n, SamplerRandomState randstate); + /* - * Initializes the state. + * Create a TsmRoutine descriptor for the SYSTEM_TIME method. */ Datum -tsm_system_time_init(PG_FUNCTION_ARGS) +tsm_system_time_handler(PG_FUNCTION_ARGS) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - uint32 seed = PG_GETARG_UINT32(1); - int32 time = PG_ARGISNULL(2) ? -1 : PG_GETARG_INT32(2); - HeapScanDesc scan = tsdesc->heapScan; - SystemSamplerData *sampler; - - if (time < 1) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("invalid time limit"), - errhint("Time limit must be positive integer value."))); + TsmRoutine *tsm = makeNode(TsmRoutine); - sampler = palloc0(sizeof(SystemSamplerData)); + tsm->parameterTypes = list_make1_oid(FLOAT8OID); - /* Remember initial values for reinit */ - sampler->seed = seed; - sampler->nblocks = scan->rs_nblocks; - sampler->lt = InvalidOffsetNumber; - sampler->estblocks = 2; - sampler->doneblocks = 0; - sampler->time = time; - sampler->start_time = GetCurrentTimestamp(); - sampler->end_time = TimestampTzPlusMilliseconds(sampler->start_time, - sampler->time); + /* See notes at head of file */ + tsm->repeatable_across_queries = false; + tsm->repeatable_across_scans = false; - sampler_random_init_state(sampler->seed, sampler->randstate); + tsm->SampleScanGetSampleSize = system_time_samplescangetsamplesize; + tsm->InitSampleScan = system_time_initsamplescan; + tsm->BeginSampleScan = system_time_beginsamplescan; + tsm->NextSampleBlock = system_time_nextsampleblock; + tsm->NextSampleTuple = system_time_nextsampletuple; + tsm->EndSampleScan = NULL; - /* Find relative prime as step size for linear probing. */ - sampler->step = random_relative_prime(sampler->nblocks, sampler->randstate); - - /* - * Randomize start position so that blocks close to step size don't have - * higher probability of being chosen on very short scan. - */ - sampler->lb = sampler_random_fract(sampler->randstate) * (sampler->nblocks / sampler->step); - - tsdesc->tsmdata = (void *) sampler; - - PG_RETURN_VOID(); + PG_RETURN_POINTER(tsm); } /* - * Get next block number or InvalidBlockNumber when we're done. - * - * Uses linear probing algorithm for picking next block. + * Sample size estimation. */ -Datum -tsm_system_time_nextblock(PG_FUNCTION_ARGS) +static void +system_time_samplescangetsamplesize(PlannerInfo *root, + RelOptInfo *baserel, + List *paramexprs, + BlockNumber *pages, + double *tuples) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - SystemSamplerData *sampler = (SystemSamplerData *) tsdesc->tsmdata; - - sampler->lb = (sampler->lb + sampler->step) % sampler->nblocks; - sampler->doneblocks++; + Node *limitnode; + double millis; + double spc_random_page_cost; + double npages; + double ntuples; - /* All blocks have been read, we're done */ - if (sampler->doneblocks > sampler->nblocks) - PG_RETURN_UINT32(InvalidBlockNumber); + /* Try to extract an estimate for the limit time spec */ + limitnode = (Node *) linitial(paramexprs); + limitnode = estimate_expression_value(root, limitnode); - /* - * Update the estimations for time limit at least 10 times per estimated - * number of returned blocks to handle variations in block read speed. - */ - if (sampler->doneblocks % Max(sampler->estblocks / 10, 1) == 0) + if (IsA(limitnode, Const) && + !((Const *) limitnode)->constisnull) + { + millis = DatumGetFloat8(((Const *) limitnode)->constvalue); + if (millis < 0 || isnan(millis)) + { + /* Default millis if the value is bogus */ + millis = 1000; + } + } + else { - TimestampTz now = GetCurrentTimestamp(); - long secs; - int usecs; - int usecs_remaining; - int time_per_block; + /* Default millis if we didn't obtain a non-null Const */ + millis = 1000; + } - TimestampDifference(sampler->start_time, now, &secs, &usecs); - usecs += (int) secs *1000000; + /* Get the planner's idea of cost per page read */ + get_tablespace_page_costs(baserel->reltablespace, + &spc_random_page_cost, + NULL); - time_per_block = usecs / sampler->doneblocks; + /* + * Estimate the number of pages we can read by assuming that the cost + * figure is expressed in milliseconds. This is completely, unmistakably + * bogus, but we have to do something to produce an estimate and there's + * no better answer. + */ + if (spc_random_page_cost > 0) + npages = millis / spc_random_page_cost; + else + npages = millis; /* even more bogus, but whatcha gonna do? */ - /* No time left, end. */ - TimestampDifference(now, sampler->end_time, &secs, &usecs); - if (secs <= 0 && usecs <= 0) - PG_RETURN_UINT32(InvalidBlockNumber); + /* Clamp to sane value */ + npages = clamp_row_est(Min((double) baserel->pages, npages)); - /* Remaining microseconds */ - usecs_remaining = usecs + (int) secs *1000000; + if (baserel->tuples > 0 && baserel->pages > 0) + { + /* Estimate number of tuples returned based on tuple density */ + double density = baserel->tuples / (double) baserel->pages; - /* Recalculate estimated returned number of blocks */ - if (time_per_block < usecs_remaining && time_per_block > 0) - sampler->estblocks = sampler->time * time_per_block; + ntuples = npages * density; } - - PG_RETURN_UINT32(sampler->lb); -} - -/* - * Get next tuple offset in current block or InvalidOffsetNumber if we are done - * with this block. - */ -Datum -tsm_system_time_nexttuple(PG_FUNCTION_ARGS) -{ - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - OffsetNumber maxoffset = PG_GETARG_UINT16(2); - SystemSamplerData *sampler = (SystemSamplerData *) tsdesc->tsmdata; - OffsetNumber tupoffset = sampler->lt; - - if (tupoffset == InvalidOffsetNumber) - tupoffset = FirstOffsetNumber; else - tupoffset++; - - if (tupoffset > maxoffset) - tupoffset = InvalidOffsetNumber; + { + /* For lack of data, assume one tuple per page */ + ntuples = npages; + } - sampler->lt = tupoffset; + /* Clamp to the estimated relation size */ + ntuples = clamp_row_est(Min(baserel->tuples, ntuples)); - PG_RETURN_UINT16(tupoffset); + *pages = npages; + *tuples = ntuples; } /* - * Cleanup method. + * Initialize during executor setup. */ -Datum -tsm_system_time_end(PG_FUNCTION_ARGS) +static void +system_time_initsamplescan(SampleScanState *node, int eflags) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - - pfree(tsdesc->tsmdata); - - PG_RETURN_VOID(); + node->tsm_state = palloc0(sizeof(SystemTimeSamplerData)); + /* Note the above leaves tsm_state->step equal to zero */ } /* - * Reset state (called by ReScan). + * Examine parameters and prepare for a sample scan. */ -Datum -tsm_system_time_reset(PG_FUNCTION_ARGS) +static void +system_time_beginsamplescan(SampleScanState *node, + Datum *params, + int nparams, + uint32 seed) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - SystemSamplerData *sampler = (SystemSamplerData *) tsdesc->tsmdata; + SystemTimeSamplerData *sampler = (SystemTimeSamplerData *) node->tsm_state; + double millis = DatumGetFloat8(params[0]); + + if (millis < 0 || isnan(millis)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_TABLESAMPLE_ARGUMENT), + errmsg("sample collection time must not be negative"))); + sampler->seed = seed; + sampler->millis = millis; sampler->lt = InvalidOffsetNumber; - sampler->start_time = GetCurrentTimestamp(); - sampler->end_time = TimestampTzPlusMilliseconds(sampler->start_time, - sampler->time); - sampler->estblocks = 2; sampler->doneblocks = 0; - - sampler_random_init_state(sampler->seed, sampler->randstate); - sampler->step = random_relative_prime(sampler->nblocks, sampler->randstate); - sampler->lb = sampler_random_fract(sampler->randstate) * (sampler->nblocks / sampler->step); - - PG_RETURN_VOID(); + /* start_time, lb will be initialized during first NextSampleBlock call */ + /* we intentionally do not change nblocks/firstblock/step here */ } /* - * Costing function. + * Select next block to sample. + * + * Uses linear probing algorithm for picking next block. */ -Datum -tsm_system_time_cost(PG_FUNCTION_ARGS) +static BlockNumber +system_time_nextsampleblock(SampleScanState *node) { - PlannerInfo *root = (PlannerInfo *) PG_GETARG_POINTER(0); - Path *path = (Path *) PG_GETARG_POINTER(1); - RelOptInfo *baserel = (RelOptInfo *) PG_GETARG_POINTER(2); - List *args = (List *) PG_GETARG_POINTER(3); - BlockNumber *pages = (BlockNumber *) PG_GETARG_POINTER(4); - double *tuples = (double *) PG_GETARG_POINTER(5); - Node *limitnode; - int32 time; - BlockNumber relpages; - double reltuples; - double density; - double spc_random_page_cost; - - limitnode = linitial(args); - limitnode = estimate_expression_value(root, limitnode); - - if (IsA(limitnode, RelabelType)) - limitnode = (Node *) ((RelabelType *) limitnode)->arg; + SystemTimeSamplerData *sampler = (SystemTimeSamplerData *) node->tsm_state; + HeapScanDesc scan = node->ss.ss_currentScanDesc; + instr_time cur_time; - if (IsA(limitnode, Const)) - time = DatumGetInt32(((Const *) limitnode)->constvalue); - else + /* First call within scan? */ + if (sampler->doneblocks == 0) { - /* Default time (1s) if the estimation didn't return Const. */ - time = 1000; + /* First scan within query? */ + if (sampler->step == 0) + { + /* Initialize now that we have scan descriptor */ + SamplerRandomState randstate; + + /* If relation is empty, there's nothing to scan */ + if (scan->rs_nblocks == 0) + return InvalidBlockNumber; + + /* We only need an RNG during this setup step */ + sampler_random_init_state(sampler->seed, randstate); + + /* Compute nblocks/firstblock/step only once per query */ + sampler->nblocks = scan->rs_nblocks; + + /* Choose random starting block within the relation */ + /* (Actually this is the predecessor of the first block visited) */ + sampler->firstblock = sampler_random_fract(randstate) * + sampler->nblocks; + + /* Find relative prime as step size for linear probing */ + sampler->step = random_relative_prime(sampler->nblocks, randstate); + } + + /* Reinitialize lb and start_time */ + sampler->lb = sampler->firstblock; + INSTR_TIME_SET_CURRENT(sampler->start_time); } - relpages = baserel->pages; - reltuples = baserel->tuples; + /* If we've read all blocks in relation, we're done */ + if (++sampler->doneblocks > sampler->nblocks) + return InvalidBlockNumber; - /* estimate the tuple density */ - if (relpages > 0) - density = reltuples / (double) relpages; - else - density = (BLCKSZ - SizeOfPageHeaderData) / baserel->width; + /* If we've used up all the allotted time, we're done */ + INSTR_TIME_SET_CURRENT(cur_time); + INSTR_TIME_SUBTRACT(cur_time, sampler->start_time); + if (INSTR_TIME_GET_MILLISEC(cur_time) >= sampler->millis) + return InvalidBlockNumber; /* - * We equal random page cost value to number of ms it takes to read the - * random page here which is far from accurate but we don't have anything - * better to base our predicted page reads. + * It's probably impossible for scan->rs_nblocks to decrease between scans + * within a query; but just in case, loop until we select a block number + * less than scan->rs_nblocks. We don't care if scan->rs_nblocks has + * increased since the first scan. */ - get_tablespace_page_costs(baserel->reltablespace, - &spc_random_page_cost, - NULL); + do + { + /* Advance lb, using uint64 arithmetic to forestall overflow */ + sampler->lb = ((uint64) sampler->lb + sampler->step) % sampler->nblocks; + } while (sampler->lb >= scan->rs_nblocks); - /* - * Assumption here is that we'll never read less than 1% of table pages, - * this is here mainly because it is much less bad to overestimate than - * underestimate and using just spc_random_page_cost will probably lead to - * underestimations in general. - */ - *pages = Min(baserel->pages, Max(time / spc_random_page_cost, baserel->pages / 100)); - *tuples = rint(density * (double) *pages * path->rows / baserel->tuples); - path->rows = *tuples; + return sampler->lb; +} + +/* + * Select next sampled tuple in current block. + * + * In block sampling, we just want to sample all the tuples in each selected + * block. + * + * When we reach end of the block, return InvalidOffsetNumber which tells + * SampleScan to go to next block. + */ +static OffsetNumber +system_time_nextsampletuple(SampleScanState *node, + BlockNumber blockno, + OffsetNumber maxoffset) +{ + SystemTimeSamplerData *sampler = (SystemTimeSamplerData *) node->tsm_state; + OffsetNumber tupoffset = sampler->lt; + + /* Advance to next possible offset on page */ + if (tupoffset == InvalidOffsetNumber) + tupoffset = FirstOffsetNumber; + else + tupoffset++; + + /* Done? */ + if (tupoffset > maxoffset) + tupoffset = InvalidOffsetNumber; + + sampler->lt = tupoffset; - PG_RETURN_VOID(); + return tupoffset; } +/* + * Compute greatest common divisor of two uint32's. + */ static uint32 gcd(uint32 a, uint32 b) { @@ -296,22 +330,29 @@ gcd(uint32 a, uint32 b) return b; } +/* + * Pick a random value less than and relatively prime to n, if possible + * (else return 1). + */ static uint32 random_relative_prime(uint32 n, SamplerRandomState randstate) { - /* Pick random starting number, with some limits on what it can be. */ - uint32 r = (uint32) sampler_random_fract(randstate) * n / 2 + n / 4, - t; + uint32 r; + + /* Safety check to avoid infinite loop or zero result for small n. */ + if (n <= 1) + return 1; /* * This should only take 2 or 3 iterations as the probability of 2 numbers - * being relatively prime is ~61%. + * being relatively prime is ~61%; but just in case, we'll include a + * CHECK_FOR_INTERRUPTS in the loop. */ - while ((t = gcd(r, n)) > 1) + do { CHECK_FOR_INTERRUPTS(); - r /= t; - } + r = (uint32) (sampler_random_fract(randstate) * n); + } while (r == 0 || gcd(r, n) > 1); return r; } diff --git a/contrib/tsm_system_time/tsm_system_time.control b/contrib/tsm_system_time/tsm_system_time.control index ebcee19d23a0d..c247987c66d14 100644 --- a/contrib/tsm_system_time/tsm_system_time.control +++ b/contrib/tsm_system_time/tsm_system_time.control @@ -1,5 +1,5 @@ # tsm_system_time extension -comment = 'SYSTEM TABLESAMPLE method which accepts time in milliseconds as a limit' +comment = 'TABLESAMPLE method which accepts time in milliseconds as a limit' default_version = '1.0' module_pathname = '$libdir/tsm_system_time' relocatable = true diff --git a/doc/bug.template b/doc/bug.template index 78d7421b0b491..8a0f08cfc02ca 100644 --- a/doc/bug.template +++ b/doc/bug.template @@ -27,7 +27,7 @@ System Configuration: Operating System (example: Linux 2.4.18) : - PostgreSQL version (example: PostgreSQL 9.5alpha1): PostgreSQL 9.5alpha1 + PostgreSQL version (example: PostgreSQL 9.5beta1): PostgreSQL 9.5beta1 Compiler used (example: gcc 3.3.5) : diff --git a/doc/src/sgml/array.sgml b/doc/src/sgml/array.sgml index 5e4130aa6dfa4..4385a09cd9798 100644 --- a/doc/src/sgml/array.sgml +++ b/doc/src/sgml/array.sgml @@ -346,7 +346,7 @@ SELECT array_length(schedule, 1) FROM sal_emp WHERE name = 'Carol'; SELECT cardinality(schedule) FROM sal_emp WHERE name = 'Carol'; - cardinality + cardinality ------------- 4 (1 row) @@ -494,11 +494,7 @@ SELECT array_dims(ARRAY[1,2] || ARRAY[[3,4],[5,6]]); array_prepend, array_append, or array_cat. The first two only support one-dimensional arrays, but array_cat supports multidimensional arrays. - - Note that the concatenation operator discussed above is preferred over - direct use of these functions. In fact, these functions primarily exist for use - in implementing the concatenation operator. However, they might be directly - useful in the creation of user-defined aggregates. Some examples: + Some examples: SELECT array_prepend(1, ARRAY[2,3]); @@ -531,6 +527,45 @@ SELECT array_cat(ARRAY[5,6], ARRAY[[1,2],[3,4]]); {{5,6},{1,2},{3,4}} + + + In simple cases, the concatenation operator discussed above is preferred + over direct use of these functions. However, because the concatenation + operator is overloaded to serve all three cases, there are situations where + use of one of the functions is helpful to avoid ambiguity. For example + consider: + + +SELECT ARRAY[1, 2] || '{3, 4}'; -- the untyped literal is taken as an array + ?column? +----------- + {1,2,3,4} + +SELECT ARRAY[1, 2] || '7'; -- so is this one +ERROR: malformed array literal: "7" + +SELECT ARRAY[1, 2] || NULL; -- so is an undecorated NULL + ?column? +---------- + {1,2} +(1 row) + +SELECT array_append(ARRAY[1, 2], NULL); -- this might have been meant + array_append +-------------- + {1,2,NULL} + + + In the examples above, the parser sees an integer array on one side of the + concatenation operator, and a constant of undetermined type on the other. + The heuristic it uses to resolve the constant's type is to assume it's of + the same type as the operator's other input — in this case, + integer array. So the concatenation operator is presumed to + represent array_cat, not array_append. When + that's the wrong choice, it could be fixed by casting the constant to the + array's element type; but explicit use of array_append might + be a preferable solution. + diff --git a/doc/src/sgml/backup.sgml b/doc/src/sgml/backup.sgml index 75dabe9f29f80..7413666382c1d 100644 --- a/doc/src/sgml/backup.sgml +++ b/doc/src/sgml/backup.sgml @@ -40,7 +40,7 @@ pg_dump dbname > pg_dump writes its result to the standard output. We will see below how this can be useful. While the above command creates a text file, pg_dump - can create files in other formats that allow for parallism and more + can create files in other formats that allow for parallelism and more fine-grained control of object restoration. @@ -221,7 +221,7 @@ psql -f infile postgres roles, tablespaces, and empty databases, then invoking pg_dump for each database. This means that while each database will be internally consistent, the snapshots of - different databases are not sychronized. + different databases are not synchronized. diff --git a/doc/src/sgml/brin.sgml b/doc/src/sgml/brin.sgml index e25f09c6800cf..2202b7a09961e 100644 --- a/doc/src/sgml/brin.sgml +++ b/doc/src/sgml/brin.sgml @@ -48,7 +48,7 @@ geometrical types might store the bounding box for all the objects in the block range. - + The size of the block range is determined at index creation time by the pages_per_range storage parameter. The number of index @@ -65,7 +65,7 @@ The core PostgreSQL distribution - includes the BRIN operator classes shown in + includes the BRIN operator classes shown in . @@ -529,14 +529,265 @@ typedef struct BrinOpcInfo - To implement these methods in a generic way, the operator class - defines its own internal support functions. - (For instance, min/max operator classes implements - support functions for the four inequality operators for the data type.) - Additionally, the operator class must supply appropriate - operator entries, - to enable the optimizer to use the index when those operators are - used in queries. + The core distribution includes support for two types of operator classes: + minmax and inclusion. Operator class definitions using them are shipped for + in-core data types as appropriate. Additional operator classes can be + defined by the user for other data types using equivalent definitions, + without having to write any source code; appropriate catalog entries being + declared is enough. Note that assumptions about the semantics of operator + strategies are embedded in the support procedures' source code. + + + + Operator classes that implement completely different semantics are also + possible, provided implementations of the four main support procedures + described above are written. Note that backwards compatibility across major + releases is not guaranteed: for example, additional support procedures might + be required in later releases. + + + + To write an operator class for a data type that implements a totally + ordered set, it is possible to use the minmax support procedures + alongside the corresponding operators, as shown in + . + All operator class members (procedures and operators) are mandatory. + + + + Procedure and Support Numbers for Minmax Operator Classes + + + + Operator class member + Object + + + + + Support Procedure 1 + internal function brin_minmax_opcinfo() + + + Support Procedure 2 + internal function brin_minmax_add_value() + + + Support Procedure 3 + internal function brin_minmax_consistent() + + + Support Procedure 4 + internal function brin_minmax_union() + + + Operator Strategy 1 + operator less-than + + + Operator Strategy 2 + operator less-than-or-equal-to + + + Operator Strategy 3 + operator equal-to + + + Operator Strategy 4 + operator greater-than-or-equal-to + + + Operator Strategy 5 + operator greater-than + + + +
+ + + To write an operator class for a complex datatype which has values + included within another type, it's possible to use the inclusion support + procedures alongside the corresponding operators, as shown + in . It requires + only a single additional function, which can be written in any language. + More functions can be defined for additional functionality. All operators + are optional. Some operators require other operators, as shown as + dependencies on the table. + + + + Procedure and Support Numbers for Inclusion Operator Classes + + + + Operator class member + Object + Dependency + + + + + Support Procedure 1 + internal function brin_inclusion_opcinfo() + + + + Support Procedure 2 + internal function brin_inclusion_add_value() + + + + Support Procedure 3 + internal function brin_inclusion_consistent() + + + + Support Procedure 4 + internal function brin_inclusion_union() + + + + Support Procedure 11 + function to merge two elements + + + + Support Procedure 12 + optional function to check whether two elements are mergeable + + + + Support Procedure 13 + optional function to check if an element is contained within another + + + + Support Procedure 14 + optional function to check whether an element is empty + + + + Operator Strategy 1 + operator left-of + Operator Strategy 4 + + + Operator Strategy 2 + operator does-not-extend-to-the-right-of + Operator Strategy 5 + + + Operator Strategy 3 + operator overlaps + + + + Operator Strategy 4 + operator right-of + Operator Strategy 2 + + + Operator Strategy 5 + operator does-not-extend-to-the-right-of + Operator Strategy 1 + + + Operator Strategy 6, 18 + operator same-as-or-equal-to + Operator Strategy 7 + + + Operator Strategy 7, 13, 16, 24, 25 + operator contains-or-equal-to + + + + Operator Strategy 8, 14, 26, 27 + operator is-contained-by-or-equal-to + Operator Strategy 3 + + + Operator Strategy 9 + operator does-not-extend-above + Operator Strategy 11 + + + Operator Strategy 10 + operator is-below + Operator Strategy 12 + + + Operator Strategy 11 + operator is-above + Operator Strategy 9 + + + Operator Strategy 12 + operator does-not-extend-below + Operator Strategy 10 + + + Operator Strategy 20 + operator less-than + Operator Strategy 4 + + + Operator Strategy 21 + operator less-than-or-equal-to + Operator Strategy 4 + + + Operator Strategy 22 + operator greater-than + Operator Strategy 1 + + + Operator Strategy 23 + operator greater-than-or-equal-to + Operator Strategy 1 + + + +
+ + + Support procedure numbers 1-10 are reserved for the BRIN internal + functions, so the SQL level functions start with number 11. Support + function number 11 is the main function required to build the index. + It should accept two arguments with the same datatype as the opclass, + and return the union of them. The inclusion opclass can store union + values with different datatypes if it is defined with the + STORAGE parameter. The return value of the union + function should match the STORAGE datatype. + + + + Support procedure numbers 12 and 14 are provided to support + irregularities of built-in datatypes. Procedure number 12 + is used to support network addresses from different families which + are not mergeable. Procedure number 14 is used to support + empty ranges. Procedure number 13 is an optional but + recommended one, which allows the new value to be checked before + it is passed to the union function. As the BRIN framework can shortcut + some operations when the union is not changed, using this + function can improve index performance. + + + + Both minmax and inclusion opclasses support cross-datatype + operators, though with these the dependencies become more complicated. + The minmax opclass requires a full set of operators to be + defined with both arguments having the same datatype. It allows + additional datatypes to be supported by defining extra sets + of operators. Inclusion opclass operator strategies are dependent + on another operator strategy as shown in + , or the same + operator strategy as themselves. They require the dependency + operator to be defined with the STORAGE datatype as the + left-hand-side argument and the other supported datatype to be the + right-hand-side argument of the supported operator. See + float4_minmax_ops as an example of minmax, and + box_inclusion_ops as an example of inclusion. diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 2c2190f13d373..90a137bc0d353 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -278,11 +278,6 @@ planner statistics - - pg_tablesample_method - table sampling methods - - pg_tablespace tablespaces within this database cluster @@ -1459,7 +1454,7 @@ rolbypassrls bool - Role can bypass row level security policies, see + Role bypasses every row level security policy, see for more information. @@ -1976,6 +1971,16 @@ + + relforcerowsecurity + bool + + + True if row level security (when enabled) will also apply to table owner; see + pg_policy catalog + + + relispopulated bool @@ -5455,10 +5460,11 @@ local_lsn pg_lsn - This node's LSN that at - which remote_lsn has been replicated. Used to - flush commit records before persisting data to disk when using - asynchronous commits. + + This node's LSN at which remote_lsn has + been replicated. Used to flush commit records before persisting + data to disk when using asynchronous commits. + @@ -5797,6 +5803,16 @@ + + SHARED_DEPENDENCY_POLICY (r) + + + The referenced object (which must be a role) is mentioned as the + target of a dependent policy object. + + + + SHARED_DEPENDENCY_PIN (p) @@ -6132,121 +6148,6 @@ - - <structname>pg_tabesample_method</structname> - - - pg_am - - - - The catalog pg_tablesample_method stores - information about table sampling methods which can be used in - TABLESAMPLE clause of a SELECT - statement. - - - - <structname>pg_tablesample_method</> Columns - - - - - Name - Type - References - Description - - - - - - oid - oid - - Row identifier (hidden attribute; must be explicitly selected) - - - - tsmname - name - - Name of the sampling method - - - - tsmseqscan - bool - - If true, the sampling method scans the whole table sequentially. - - - - - tsmpagemode - bool - - If true, the sampling method always reads the pages completely. - - - - - tsminit - regproc - pg_proc.oid - Initialize the sampling scan function - - - - tsmnextblock - regproc - pg_proc.oid - Get next block number function - - - - tsmnexttuple - regproc - pg_proc.oid - Get next tuple offset function - - - - tsmexaminetuple - regproc - pg_proc.oid - Function which examines the tuple contents and decides if to - return it, or zero if none - - - - tsmend - regproc - pg_proc.oid - End the sampling scan function - - - - tsmreset - regproc - pg_proc.oid - Restart the state of sampling scan function - - - - tsmcost - regproc - pg_proc.oid - Costing function - - - - -
- -
- - <structname>pg_tablespace</structname> @@ -8044,7 +7945,7 @@ sourcefile text - Full pathname of the configuration file + Full path name of the configuration file sourceline @@ -9494,7 +9395,7 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx bool - User can bypass row level security policies, see + User bypasses every row level security policy, see for more information. @@ -9969,7 +9870,7 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx usebypassrls bool - User can bypass row level security policies, see + User bypasses every row level security policy, see for more information. diff --git a/doc/src/sgml/client-auth.sgml b/doc/src/sgml/client-auth.sgml index 5f72bebba8600..5eef08fb00c06 100644 --- a/doc/src/sgml/client-auth.sgml +++ b/doc/src/sgml/client-auth.sgml @@ -958,11 +958,11 @@ omicron bryanh guest1 PostgreSQL also supports a parameter to strip the realm from the principal. This method is supported for backwards compatibility and is strongly discouraged as it is then impossible to distinguish different users - with the same username but coming from different realms. To enable this, + with the same user name but coming from different realms. To enable this, set include_realm to 0. For simple single-realm installations, include_realm combined with the krb_realm parameter (which checks that the realm provided - matches exactly what is in the krb_realm parameter) would be a secure but + matches exactly what is in the krb_realm parameter) would be a secure but less capable option compared to specifying an explicit mapping in pg_ident.conf. @@ -1009,8 +1009,8 @@ omicron bryanh guest1 If set to 0, the realm name from the authenticated user principal is stripped off before being passed through the user name mapping (). This is discouraged and is - primairly available for backwards compatibility as it is not secure - in multi-realm environments unless krb_realm is also used. Users + primarily available for backwards compatibility as it is not secure + in multi-realm environments unless krb_realm is also used. Users are recommended to leave include_realm set to the default (1) and to provide an explicit mapping in pg_ident.conf. @@ -1030,7 +1030,7 @@ omicron bryanh guest1 username/hostbased@EXAMPLE.COM, respectively), unless include_realm has been set to 0, in which case username (or username/hostbased) - is what is seen as the system username when mapping. + is what is seen as the system user name when mapping.
@@ -1088,8 +1088,8 @@ omicron bryanh guest1 If set to 0, the realm name from the authenticated user principal is stripped off before being passed through the user name mapping (). This is discouraged and is - primairly available for backwards compatibility as it is not secure - in multi-realm environments unless krb_realm is also used. Users + primarily available for backwards compatibility as it is not secure + in multi-realm environments unless krb_realm is also used. Users are recommended to leave include_realm set to the default (1) and to provide an explicit mapping in pg_ident.conf. @@ -1109,7 +1109,7 @@ omicron bryanh guest1 username/hostbased@EXAMPLE.COM, respectively), unless include_realm has been set to 0, in which case username (or username/hostbased) - is what is seen as the system username when mapping. + is what is seen as the system user name when mapping. @@ -1292,7 +1292,7 @@ omicron bryanh guest1 this search, the server disconnects and re-binds to the directory as this user, using the password specified by the client, to verify that the login is correct. This mode is the same as that used by LDAP authentication - schemes in other software, such as Apache mod_authnz_ldap and pam_ldap. + schemes in other software, such as Apache mod_authnz_ldap and pam_ldap. This method allows for significantly more flexibility in where the user objects are located in the directory, but will cause two separate connections to the LDAP server to be made. @@ -1464,7 +1464,7 @@ host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapse Here is the same search+bind configuration written as a URL: -host ... ldap lapurl="ldap://ldap.example.net/dc=example,dc=net?uid?sub" +host ... ldap ldapurl="ldap://ldap.example.net/dc=example,dc=net?uid?sub" Some other software that supports authentication against LDAP uses the same URL format, so it will be easier to share the configuration. diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 4b7bd8a86e643..f2f4b1d13d8cb 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -1034,35 +1034,6 @@ include_dir 'conf.d' - - ssl_renegotiation_limit (integer) - - ssl_renegotiation_limit configuration parameter - - - - - Specifies how much data can flow over an SSL-encrypted - connection before renegotiation of the session keys will take - place. Renegotiation decreases an attacker's chances of doing - cryptanalysis when large amounts of traffic can be examined, but it - also carries a large performance penalty. The sum of sent and received - traffic is used to check the limit. If this parameter is set to 0, - renegotiation is disabled. The default is 512MB. - - - - SSL libraries from before November 2009 are insecure when using SSL - renegotiation, due to a vulnerability in the SSL protocol. As a - stop-gap fix for this vulnerability, some vendors shipped SSL - libraries incapable of doing renegotiation. If any such libraries - are in use on the client or server, SSL renegotiation should be - disabled. - - - - - ssl_ciphers (string) @@ -2019,7 +1990,7 @@ include_dir 'conf.d' In logical level, the same information is logged as with hot_standby, plus information needed to allow - extracting logical changesets from the WAL. Using a level of + extracting logical change sets from the WAL. Using a level of logical will increase the WAL volume, particularly if many tables are configured for REPLICA IDENTITY FULL and many UPDATE and DELETE statements are @@ -2303,6 +2274,7 @@ include_dir 'conf.d' is on or during a base backup. A compressed page image will be decompressed during WAL replay. The default value is off. + Only superusers can change this setting. @@ -2426,27 +2398,6 @@ include_dir 'conf.d' Checkpoints - - max_wal_size (integer) - - max_wal_size configuration parameter - - - - - Maximum size to let the WAL grow to between automatic WAL - checkpoints. This is a soft limit; WAL size can exceed - max_wal_size under special circumstances, like - under heavy load, a failing archive_command, or a high - wal_keep_segments setting. The default is 1 GB. - Increasing this parameter can increase the amount of time needed for - crash recovery. - This parameter can only be set in the postgresql.conf - file or on the server command line. - - - - checkpoint_timeout (integer) @@ -2503,6 +2454,27 @@ include_dir 'conf.d' + + max_wal_size (integer) + + max_wal_size configuration parameter + + + + + Maximum size to let the WAL grow to between automatic WAL + checkpoints. This is a soft limit; WAL size can exceed + max_wal_size under special circumstances, like + under heavy load, a failing archive_command, or a high + wal_keep_segments setting. The default is 1 GB. + Increasing this parameter can increase the amount of time needed for + crash recovery. + This parameter can only be set in the postgresql.conf + file or on the server command line. + + + + min_wal_size (integer) @@ -2546,7 +2518,7 @@ include_dir 'conf.d' mode. In always mode, all files restored from the archive or streamed with streaming replication will be archived (again). See for details. - + archive_mode and archive_command are separate variables so that archive_command can be @@ -3934,7 +3906,7 @@ local0.* /var/log/postgresql listed in the Open Group's strftime specification. - Note that the system's strftime is not used + Note that the system's strftime is not used directly, so platform-specific (nonstandard) extensions do not work. The default is postgresql-%Y-%m-%d_%H%M%S.log. @@ -4373,30 +4345,6 @@ local0.* /var/log/postgresql - - cluster_name (string) - - cluster_name configuration parameter - - - - - Sets the cluster name that appears in the process title for all - processes in this cluster. The name can be any string of less than - NAMEDATALEN characters (64 characters in a standard - build). Only printable ASCII characters may be used in the - cluster_name value. Other characters will be - replaced with question marks (?). No name is shown - if this parameter is set to the empty string '' (which is - the default). This parameter can only be set at server start. - - - The process title is typically viewed using programs like - ps or, on Windows, Process Explorer. - - - - debug_print_parse (boolean) @@ -4984,9 +4932,61 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; -
- + + + Process Title + + + These settings control how the process title as seen + by ps is modified. See + for details. + + + + + cluster_name (string) + + cluster_name configuration parameter + + + + + Sets the cluster name that appears in the process title for all + processes in this cluster. The name can be any string of less than + NAMEDATALEN characters (64 characters in a standard + build). Only printable ASCII characters may be used in the + cluster_name value. Other characters will be + replaced with question marks (?). No name is shown + if this parameter is set to the empty string '' (which is + the default). This parameter can only be set at server start. + + + The process title is typically viewed using programs like + ps or, on Windows, Process Explorer. + + + + + + update_process_title (boolean) + + update_process_title configuration parameter + + + + + Enables updating of the process title every time a new SQL command + is received by the server. The process title is typically viewed + by the ps command, + or in Windows by using the Process Explorer. + Only superusers can change this setting. + + + + + + Run-time Statistics @@ -5104,23 +5104,6 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; - - update_process_title (boolean) - - update_process_title configuration parameter - - - - - Enables updating of the process title every time a new SQL command - is received by the server. The process title is typically viewed - by the ps command, - or in Windows by using the Process Explorer. - Only superusers can change this setting. - - - - stats_temp_directory (string) @@ -5558,36 +5541,22 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; - row_security (enum) + row_security (boolean) row_security configuration parameter - This variable controls if row security policies are to be applied - to queries which are run against tables that have row security enabled. - The default is 'on'. When set to 'on', all users, except superusers - and the owner of the table, will have the row policies for the table - applied to their queries. The table owner and superuser can request - that row policies be applied to their queries by setting this to - 'force'. Lastly, this can also be set to 'off' which will bypass row - policies for the table, if possible, and error if not. - - - - For a user who is not a superuser and not the table owner to bypass - row policies for the table, they must have the BYPASSRLS role attribute. - If this is set to 'off' and the user queries a table which has row - policies enabled and the user does not have the right to bypass - row policies then a permission denied error will be returned. - - - - The allowed values of row_security are - on (apply normally - not to superuser or table owner), - off (fail if row security would be applied), and - force (apply always - even to superuser and table owner). + This variable controls whether to raise an error in lieu of applying a + row security policy. When set to on, policies apply + normally. When set to off, queries fail which would + otherwise apply at least one policy. The default is on. + Change to off where limited row visibility could cause + incorrect results; for example, pg_dump makes that + change by default. This variable has no effect on roles which bypass + every row security policy, to wit, superusers and roles with + the BYPASSRLS attribute. diff --git a/doc/src/sgml/cube.sgml b/doc/src/sgml/cube.sgml index e2da68556d561..0a226ca54289b 100644 --- a/doc/src/sgml/cube.sgml +++ b/doc/src/sgml/cube.sgml @@ -4,7 +4,7 @@ cube - cube + cube (extension) @@ -391,10 +391,7 @@ t My thanks are primarily to Prof. Joe Hellerstein () for elucidating the gist of the GiST (), and - to his former student, Andy Dong (), for his example - written for Illustra, - . + to his former student Andy Dong for his example written for Illustra. I am also grateful to all Postgres developers, present and past, for enabling myself to create my own world and live undisturbed in it. And I would like to acknowledge my gratitude to Argonne Lab and to the diff --git a/doc/src/sgml/custom-scan.sgml b/doc/src/sgml/custom-scan.sgml index dc327b11b21b8..a229326836a7b 100644 --- a/doc/src/sgml/custom-scan.sgml +++ b/doc/src/sgml/custom-scan.sgml @@ -70,7 +70,7 @@ typedef struct CustomPath path must be initialized as for any other path, including the row-count estimate, start and total cost, and sort ordering provided - by this path. flags is a bitmask, which should include + by this path. flags is a bit mask, which should include CUSTOMPATH_SUPPORT_BACKWARD_SCAN if the custom path can support a backward scan and CUSTOMPATH_SUPPORT_MARK_RESTORE if it can support mark and restore. Both capabilities are optional. @@ -163,7 +163,7 @@ typedef struct CustomScan scan must be initialized as for any other scan, including estimated costs, target lists, qualifications, and so on. - flags is a bitmask with the same meaning as in + flags is a bit mask with the same meaning as in CustomPath. custom_plans can be used to store child Plan nodes. @@ -174,12 +174,12 @@ typedef struct CustomScan that is only used by the custom scan provider itself. custom_scan_tlist can be NIL when scanning a base relation, indicating that the custom scan returns scan tuples that match - the base relation's rowtype. Otherwise it is a targetlist describing + the base relation's row type. Otherwise it is a target list describing the actual scan tuples. custom_scan_tlist must be provided for joins, and could be provided for scans if the custom scan provider can compute some non-Var expressions. custom_relids is set by the core code to the set of - relations (rangetable indexes) that this scan node handles; except when + relations (range table indexes) that this scan node handles; except when this scan is replacing a join, it will have only one member. methods must point to a (usually statically allocated) object implementing the required custom scan methods, which are further @@ -251,10 +251,10 @@ typedef struct CustomScanState - ss is initialized as for any other scanstate, + ss is initialized as for any other scan state, except that if the scan is for a join rather than a base relation, ss.ss_currentRelation is left NULL. - flags is a bitmask with the same meaning as in + flags is a bit mask with the same meaning as in CustomPath and CustomScan. methods must point to a (usually statically allocated) object implementing the required custom scan state methods, which are diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index 9d5ce953f1728..c47c7f4cb1bcc 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -1114,7 +1114,8 @@ SELECT '52093.89'::money::numeric::float8; advantages in some other database systems, there is no such advantage in PostgreSQL; in fact character(n) is usually the slowest of - the three because of its additional storage costs. In most situations + the three because of its additional storage costs and slower + sorting. In most situations text or character varying should be used instead. @@ -4321,7 +4322,7 @@ SET xmloption TO { DOCUMENT | CONTENT }; an object identifier. There are also several alias types for oid: regproc, regprocedure, regoper, regoperator, regclass, - regtype, regrole, regnamespace, + regtype, regrole, regnamespace, regconfig, and regdictionary. shows an overview. @@ -4597,6 +4598,10 @@ SELECT * FROM pg_attribute fdw_handler + + tsm_handler + + cstring @@ -4691,6 +4696,11 @@ SELECT * FROM pg_attribute A foreign-data wrapper handler is declared to return fdw_handler. + + tsm_handler + A tablesample method handler is declared to return tsm_handler. + + record Identifies a function returning an unspecified row type. diff --git a/doc/src/sgml/dblink.sgml b/doc/src/sgml/dblink.sgml index b07ac48c005b4..a33a4f7cf85bf 100644 --- a/doc/src/sgml/dblink.sgml +++ b/doc/src/sgml/dblink.sgml @@ -69,7 +69,7 @@ dblink_connect(text connname, text connstr) returns text - conname + connname The name to use for this connection; if omitted, an unnamed @@ -276,7 +276,7 @@ dblink_disconnect(text connname) returns text - conname + connname The name of a named connection to be closed. @@ -359,7 +359,7 @@ dblink(text sql [, bool fail_on_error]) returns setof record - conname + connname Name of the connection to use; omit this parameter to use the @@ -577,7 +577,7 @@ dblink_exec(text sql [, bool fail_on_error]) returns text - conname + connname Name of the connection to use; omit this parameter to use the @@ -706,7 +706,7 @@ dblink_open(text connname, text cursorname, text sql [, bool fail_on_error]) ret - conname + connname Name of the connection to use; omit this parameter to use the @@ -829,7 +829,7 @@ dblink_fetch(text connname, text cursorname, int howmany [, bool fail_on_error]) - conname + connname Name of the connection to use; omit this parameter to use the @@ -982,7 +982,7 @@ dblink_close(text connname, text cursorname [, bool fail_on_error]) returns text - conname + connname Name of the connection to use; omit this parameter to use the @@ -1137,7 +1137,7 @@ dblink_error_message(text connname) returns text - conname + connname Name of the connection to use. @@ -1210,7 +1210,7 @@ dblink_send_query(text connname, text sql) returns int - conname + connname Name of the connection to use. @@ -1281,7 +1281,7 @@ dblink_is_busy(text connname) returns int - conname + connname Name of the connection to check. @@ -1350,7 +1350,7 @@ dblink_get_notify(text connname) returns setof (notify_name text, be_pid int, ex - conname + connname The name of a named connection to get notifications on. @@ -1429,7 +1429,7 @@ dblink_get_result(text connname [, bool fail_on_error]) returns setof record - conname + connname Name of the connection to use. @@ -1596,7 +1596,7 @@ dblink_cancel_query(text connname) returns text - conname + connname Name of the connection to use. diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml index 0aa0c13c5c811..fe5a076fe120d 100644 --- a/doc/src/sgml/ddl.sgml +++ b/doc/src/sgml/ddl.sgml @@ -545,7 +545,7 @@ CREATE TABLE products ( - Adding a unique constraint will automatically create a unique btree + Adding a unique constraint will automatically create a unique B-tree index on the column or group of columns used in the constraint. A uniqueness constraint on only some rows can be enforced by creating a partial index. @@ -630,7 +630,7 @@ CREATE TABLE example ( - Adding a primary key will automatically create a unique btree index + Adding a primary key will automatically create a unique B-tree index on the column or group of columns used in the primary key. @@ -1512,20 +1512,11 @@ REVOKE ALL ON accounts FROM PUBLIC; Row Security Policies - rowsecurity + row security - rls - - - - policies - policy - - - - POLICY + policy @@ -1552,14 +1543,18 @@ REVOKE ALL ON accounts FROM PUBLIC; Row security policies can be specific to commands, or to roles, or to both. The commands available are ALL, SELECT, INSERT, UPDATE, and - DELETE. Multiple roles can be assigned to a given policy - and normal role membership and inheritance rules apply. + DELETE. Multiple roles can be assigned to a given policy and + normal role membership and inheritance rules apply. Table owners, + superusers, and roles with the BYPASSRLS attribute bypass the + row security system when querying a table. Applications that expect to + bypass all row security through those mechanisms should + set to off. To specify which rows are visible and what rows can be added to the table with row level security, an expression is required which returns - a boolean result. This expression will be evaluated for each row prior + a Boolean result. This expression will be evaluated for each row prior to other conditionals or functions which are part of the query. The one exception to this rule are leakproof functions, which are guaranteed to not leak information. Two expressions may be @@ -1583,20 +1578,6 @@ REVOKE ALL ON accounts FROM PUBLIC; command. - - The table owners and superusers bypass the row security system when - querying a table, by default. Row security can be enabled for - superusers and table owners by setting - to force. Any - user can request that row security be bypassed by setting - to off. If - the user does not have privileges to bypass row security when - querying a given table then an error will be returned instead. Other - users can be granted the ability to bypass the row security system - with the BYPASSRLS role attribute. This - attribute can only be set by a superuser. - - Each policy has a name and multiple policies can be defined for a table. As policies are table-specific, each policy for a table must @@ -1676,7 +1657,7 @@ CREATE POLICY user_policy ON users Below is a larger example of how this feature can be used in - production environments, based on a unix password file. + production environments, based on a Unix password file. diff --git a/doc/src/sgml/event-trigger.sgml b/doc/src/sgml/event-trigger.sgml index b6cbb1bc249dc..3ed14f08c0f02 100644 --- a/doc/src/sgml/event-trigger.sgml +++ b/doc/src/sgml/event-trigger.sgml @@ -935,7 +935,7 @@ typedef struct EventTriggerData Describes the event for which the function is called, one of "ddl_command_start", "ddl_command_end", - "sql_drop". + "sql_drop", "table_rewrite". See for the meaning of these events. diff --git a/doc/src/sgml/external-projects.sgml b/doc/src/sgml/external-projects.sgml index b616eb06515ca..cef89ee4933c0 100644 --- a/doc/src/sgml/external-projects.sgml +++ b/doc/src/sgml/external-projects.sgml @@ -86,7 +86,7 @@ Npgsql .NET .NET data provider - http://npgsql.projects.postgresql.org/ + http://www.npgsql.org/ @@ -100,7 +100,7 @@ psqlODBC ODBC ODBC driver - http://psqlodbc.projects.postgresql.org/ + https://odbc.postgresql.org/ @@ -172,7 +172,7 @@ PL/Java Java - http://pljava.projects.postgresql.org/ + https://github.com/tada/pljava @@ -208,7 +208,7 @@ PL/sh Unix shell - http://plsh.projects.postgresql.org/ + https://github.com/petere/plsh diff --git a/doc/src/sgml/fdwhandler.sgml b/doc/src/sgml/fdwhandler.sgml index 236157743a537..1533a6bf80c3f 100644 --- a/doc/src/sgml/fdwhandler.sgml +++ b/doc/src/sgml/fdwhandler.sgml @@ -239,7 +239,7 @@ IterateForeignScan (ForeignScanState *node); The rows returned must match the fdw_scan_tlist target - list if one was supplied, otherwise they must match the rowtype of the + list if one was supplied, otherwise they must match the row type of the foreign table being scanned. If you choose to optimize away fetching columns that are not needed, you should insert nulls in those column positions, or else generate a fdw_scan_tlist list with @@ -333,7 +333,7 @@ GetForeignJoinPaths (PlannerInfo *root, remote join cannot be found from the system catalogs, the FDW must fill fdw_scan_tlist with an appropriate list of TargetEntry nodes, representing the set of columns - it will supply at runtime in the tuples it returns. + it will supply at run time in the tuples it returns. @@ -752,7 +752,7 @@ RefetchForeignRow (EState *estate, for the row to be re-fetched. Although the rowid value is passed as a Datum, it can currently only be a tid. The function API is chosen in hopes that it may be possible to allow other - datatypes for row IDs in future. + data types for row IDs in future. @@ -1135,13 +1135,22 @@ GetForeignServerByName(const char *name, bool missing_ok); evaluation of the fdw_exprs expression tree. + + Any clauses removed from the plan node's qual list must instead be added + to fdw_recheck_quals in order to ensure correct behavior + at the READ COMMITTED isolation level. When a concurrent + update occurs for some other table involved in the query, the executor + may need to verify that all of the original quals are still satisfied for + the tuple, possibly against a different set of parameter values. + + Another ForeignScan field that can be filled by FDWs is fdw_scan_tlist, which describes the tuples returned by the FDW for this plan node. For simple foreign table scans this can be set to NIL, implying that the returned tuples have the - rowtype declared for the foreign table. A non-NIL value must be a - targetlist (list of TargetEntrys) containing Vars and/or + row type declared for the foreign table. A non-NIL value must be a + target list (list of TargetEntrys) containing Vars and/or expressions representing the returned columns. This might be used, for example, to show that the FDW has omitted some columns that it noticed won't be needed for the query. Also, if the FDW can compute expressions @@ -1196,9 +1205,10 @@ GetForeignServerByName(const char *name, bool missing_ok); INSERT with an ON CONFLICT clause does not - support specifying the conflict target, as remote constraints are not - locally known. This in turn implies that ON CONFLICT DO - UPDATE is not supported, since the specification is mandatory there. + support specifying the conflict target, as unique constraints or + exclusion constraints on remote tables are not locally known. This + in turn implies that ON CONFLICT DO UPDATE is not supported, + since the specification is mandatory there. diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index d49cd4342822f..ecca7922acec3 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -3600,6 +3600,28 @@ cast(-44 as bit(12)) 111111010100 + + + While most regular-expression searches can be executed very quickly, + regular expressions can be contrived that take arbitrary amounts of + time and memory to process. Be wary of accepting regular-expression + search patterns from hostile sources. If you must do so, it is + advisable to impose a statement timeout. + + + + Searches using SIMILAR TO patterns have the same + security hazards, since SIMILAR TO provides many + of the same capabilities as POSIX-style regular + expressions. + + + + LIKE searches, being much simpler than the other + two options, are safer to use with possibly-hostile pattern sources. + + + <function>LIKE</function> @@ -4620,16 +4642,6 @@ SELECT foo FROM regexp_split_to_table('the quick brown fox', E'\\s*') AS foo; Non-capturing parentheses do not define subexpressions. - - - Keep in mind that an escape's leading \ will need to be - doubled when entering the pattern as an SQL string constant. For example: - -'123' ~ E'^\\d{3}' true - - - - Regular Expression Character-entry Escapes @@ -4669,7 +4681,7 @@ SELECT foo FROM regexp_split_to_table('the quick brown fox', E'\\s*') AS foo; \e the character whose collating-sequence name is ESC, - or failing that, the character with octal value 033 + or failing that, the character with octal value 033 @@ -4695,15 +4707,17 @@ SELECT foo FROM regexp_split_to_table('the quick brown fox', E'\\s*') AS foo; \uwxyz (where wxyz is exactly four hexadecimal digits) - the UTF16 (Unicode, 16-bit) character U+wxyz - in the local byte ordering + the character whose hexadecimal value is + 0xwxyz + \Ustuvwxyz (where stuvwxyz is exactly eight hexadecimal digits) - reserved for a hypothetical Unicode extension to 32 bits + the character whose hexadecimal value is + 0xstuvwxyz @@ -4752,6 +4766,17 @@ SELECT foo FROM regexp_split_to_table('the quick brown fox', E'\\s*') AS foo; Octal digits are 0-7. + + Numeric character-entry escapes specifying values outside the ASCII range + (0-127) have meanings dependent on the database encoding. When the + encoding is UTF-8, escape values are equivalent to Unicode code points, + for example \u1234 means the character U+1234. + For other multibyte encodings, character-entry escapes usually just + specify the concatenation of the byte values for the character. If the + escape value does not correspond to any legal character in the database + encoding, no error will be raised, but it will never match any data. + + The character-entry escapes are always taken as ordinary characters. For example, \135 is ] in ASCII, but @@ -5203,10 +5228,37 @@ SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})'); The quantifiers {1,1} and {1,1}? can be used to force greediness or non-greediness, respectively, on a subexpression or a whole RE. + This is useful when you need the whole RE to have a greediness attribute + different from what's deduced from its elements. As an example, + suppose that we are trying to separate a string containing some digits + into the digits and the parts before and after them. We might try to + do that like this: + +SELECT regexp_matches('abc01234xyz', '(.*)(\d+)(.*)'); +Result: {abc0123,4,xyz} + + That didn't work: the first .* is greedy so + it eats as much as it can, leaving the \d+ to + match at the last possible place, the last digit. We might try to fix + that by making it non-greedy: + +SELECT regexp_matches('abc01234xyz', '(.*?)(\d+)(.*)'); +Result: {abc,0,""} + + That didn't work either, because now the RE as a whole is non-greedy + and so it ends the overall match as soon as possible. We can get what + we want by forcing the RE as a whole to be greedy: + +SELECT regexp_matches('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); +Result: {abc,01234,xyz} + + Controlling the RE's overall greediness separately from its components' + greediness allows great flexibility in handling variable-length patterns. - Match lengths are measured in characters, not collating elements. + When deciding what is a longer or shorter match, + match lengths are measured in characters, not collating elements. An empty string is considered longer than no match at all. For example: bb* @@ -6272,7 +6324,7 @@ SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})'); to_char(485, 'L999') - 'DM 485 + 'DM 485' to_char(485, 'RN') @@ -10177,7 +10229,8 @@ table2-mapping -> int - Get JSON array element (indexed from zero) + Get JSON array element (indexed from zero, negative + integers count from the end) '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json->2 {"c":"baz"} @@ -10230,7 +10283,10 @@ table2-mapping returning text, which coerce the value to text. The field/element/path extraction operators return NULL, rather than failing, if the JSON input does not have the right structure to match - the request; for example if no such element exists. + the request; for example if no such element exists. The + field/element/path extraction operators that accept integer JSON + array subscripts all support negative subscripting from the end of + arrays. @@ -10265,38 +10321,42 @@ table2-mapping @> jsonb - Does the left JSON value contain within it the right value? + Does the left JSON value contain the right JSON + path/value entries at the top level? '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb <@ jsonb - Is the left JSON value contained within the right value? + Are the left JSON path/value entries contained at the top level within + the right JSON value? '{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb ? text - Does the key/element string exist within - the JSON value? + Does the string exist as a top-level + key within the JSON value? '{"a":1, "b":2}'::jsonb ? 'b' ?| text[] - Do any of these key/element strings exist? + Do any of these array strings + exist as top-level keys? '{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'c'] ?& text[] - Do all of these key/element strings exist? + Do all of these array strings exist + as top-level keys? '["a", "b"]'::jsonb ?& array['a', 'b'] || jsonb - Concatentate two jsonb values into a new jsonb value + Concatenate two jsonb values into a new jsonb value '["a", "b"]'::jsonb || '["c", "d"]'::jsonb @@ -10318,7 +10378,8 @@ table2-mapping #- text[] - Delete the field or element with specified path + Delete the field or element with specified path (for + JSON arrays, negative integers count from the end) '["a", {"b":1}]'::jsonb #- '{1,b}' @@ -10858,6 +10919,9 @@ table2-mapping create_missing is true ( default is true) and the item designated by path does not exist. + As with the path orientated operators, negative integers that + appear in path count from the end + of JSON arrays. jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}','[2,3,4]', false) jsonb_set('[{"f1":1,"f2":null},2]', '{0,f3}','[2,3,4]') @@ -10872,20 +10936,20 @@ table2-mapping text Returns from_json - as indented json text. + as indented JSON text. jsonb_pretty('[{"f1":1,"f2":null},2,null,3]') - - [ - { - "f1": 1, - "f2": null - }, - 2, - null, - 3 - ] + +[ + { + "f1": 1, + "f2": null + }, + 2, + null, + 3 +] @@ -10951,7 +11015,7 @@ table2-mapping If the argument to json_strip_nulls contains duplicate field names in any object, the result could be semantically somewhat different, depending on the order in which they occur. This is not an - issue for jsonb_strip_nulls since jsonb values never have + issue for jsonb_strip_nulls since jsonb values never have duplicate object field names. @@ -13398,7 +13462,7 @@ SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab; integer - Integer bitmask indicating which arguments are not being included in the current + Integer bit mask indicating which arguments are not being included in the current grouping set @@ -13571,9 +13635,9 @@ SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab; lag - lag(value any + lag(value anyelement [, offset integer - [, default any ]]) + [, default anyelement ]]) @@ -13583,7 +13647,9 @@ SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab; returns value evaluated at the row that is offset rows before the current row within the partition; if there is no such - row, instead return default. + row, instead return default + (which must be of the same type as + value). Both offset and default are evaluated with respect to the current row. If omitted, @@ -13598,9 +13664,9 @@ SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab; lead - lead(value any + lead(value anyelement [, offset integer - [, default any ]]) + [, default anyelement ]]) @@ -13610,7 +13676,9 @@ SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab; returns value evaluated at the row that is offset rows after the current row within the partition; if there is no such - row, instead return default. + row, instead return default + (which must be of the same type as + value). Both offset and default are evaluated with respect to the current row. If omitted, @@ -15236,6 +15304,12 @@ SET search_path TO schema , schema, .. boolean does current user have privilege for role + + row_security_active(table) + + boolean + does current user have row level security active for table +
@@ -15276,6 +15350,9 @@ SET search_path TO schema , schema, .. pg_has_role + + row_security_active + has_table_privilege checks whether a user @@ -15439,6 +15516,13 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); are immediately available without doing SET ROLE. + + row_security_active checks whether row level + security is active for the specified table in the context of the + current_user and environment. The table can + be specified by name or by OID. + + shows functions that determine whether a certain object is visible in the @@ -16558,7 +16642,7 @@ SELECT set_config('log_statement_stats', 'off', false); boolean Cancel a backend's current query. This is also allowed if the - calling role is a member of the role whose backend is being cancelled, + calling role is a member of the role whose backend is being canceled, however only superusers can cancel superuser backends. @@ -17321,7 +17405,7 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup()); pg_replication_origin_session_setup - pg_replication_origin_setup_session(node_name text) + pg_replication_origin_session_setup(node_name text) void @@ -17370,7 +17454,7 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup()); pg_replication_origin_session_progress - pg_replication_origin_progress(flush bool) + pg_replication_origin_session_progress(flush bool) pg_lsn @@ -17851,7 +17935,7 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup()); All of these functions take an optional missing_ok parameter, - which specifies the behaviour when the file or directory does not exist. + which specifies the behavior when the file or directory does not exist. If true, the function returns NULL (except pg_ls_dir, which returns an empty result set). If false, an error is raised. The default is false. @@ -18520,7 +18604,7 @@ CREATE EVENT TRIGGER test_event_trigger_for_drops pg_event_trigger_table_rewrite_oid() Oid - The Oid of the table about to be rewritten. + The OID of the table about to be rewritten. diff --git a/doc/src/sgml/high-availability.sgml b/doc/src/sgml/high-availability.sgml index d2f7fec523441..e4a50ba6549c0 100644 --- a/doc/src/sgml/high-availability.sgml +++ b/doc/src/sgml/high-availability.sgml @@ -2035,6 +2035,11 @@ LOG: database system is ready to accept read only connections max_locks_per_transaction + + + max_worker_processes + + diff --git a/doc/src/sgml/indices.sgml b/doc/src/sgml/indices.sgml index 309fd1269bd60..23bbec6eb7112 100644 --- a/doc/src/sgml/indices.sgml +++ b/doc/src/sgml/indices.sgml @@ -343,7 +343,7 @@ SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10; BRIN can support many different indexing strategies, and the particular operators with which a BRIN index can be used vary depending on the indexing strategy. - For datatypes that have a linear sort order, the indexed data + For data types that have a linear sort order, the indexed data corresponds to the minimum and maximum values of the values in the column for each block range, which support indexed queries using these operators: @@ -655,11 +655,7 @@ CREATE UNIQUE INDEX name ON table - The preferred way to add a unique constraint to a table is - ALTER TABLE ... ADD CONSTRAINT. The use of - indexes to enforce unique constraints could be considered an - implementation detail that should not be accessed directly. - One should, however, be aware that there's no need to manually + There's no need to manually create indexes on unique columns; doing so would just duplicate the automatically-created index. diff --git a/doc/src/sgml/json.sgml b/doc/src/sgml/json.sgml index 1e78558e27ac3..3cf78d6394cdb 100644 --- a/doc/src/sgml/json.sgml +++ b/doc/src/sgml/json.sgml @@ -267,30 +267,33 @@ SELECT '{"reading": 1.230e-5}'::json, '{"reading": 1.230e-5}'::jsonb; -- Simple scalar/primitive values contain only the identical value: -SELECT '"foo"'::jsonb @> '"foo"'::jsonb; +SELECT '"foo"'::jsonb @> '"foo"'::jsonb; -- The array on the right side is contained within the one on the left: -SELECT '[1, 2, 3]'::jsonb @> '[1, 3]'::jsonb; +SELECT '[1, 2, 3]'::jsonb @> '[1, 3]'::jsonb; -- Order of array elements is not significant, so this is also true: -SELECT '[1, 2, 3]'::jsonb @> '[3, 1]'::jsonb; +SELECT '[1, 2, 3]'::jsonb @> '[3, 1]'::jsonb; -- Duplicate array elements don't matter either: -SELECT '[1, 2, 3]'::jsonb @> '[1, 2, 2]'::jsonb; +SELECT '[1, 2, 3]'::jsonb @> '[1, 2, 2]'::jsonb; -- The object with a single pair on the right side is contained -- within the object on the left side: -SELECT '{"product": "PostgreSQL", "version": 9.4, "jsonb":true}'::jsonb @> '{"version":9.4}'::jsonb; +SELECT '{"product": "PostgreSQL", "version": 9.4, "jsonb": true}'::jsonb @> '{"version": 9.4}'::jsonb; -- The array on the right side is not considered contained within the -- array on the left, even though a similar array is nested within it: -SELECT '[1, 2, [1, 3]]'::jsonb @> '[1, 3]'::jsonb; -- yields false +SELECT '[1, 2, [1, 3]]'::jsonb @> '[1, 3]'::jsonb; -- yields false -- But with a layer of nesting, it is contained: -SELECT '[1, 2, [1, 3]]'::jsonb @> '[[1, 3]]'::jsonb; +SELECT '[1, 2, [1, 3]]'::jsonb @> '[[1, 3]]'::jsonb; -- Similarly, containment is not reported here: -SELECT '{"foo": {"bar": "baz"}}'::jsonb @> '{"bar": "baz"}'::jsonb; -- yields false +SELECT '{"foo": {"bar": "baz"}}'::jsonb @> '{"bar": "baz"}'::jsonb; -- yields false + +-- A top-level key and an empty object is contained: +SELECT '{"foo": {"bar": "baz"}}'::jsonb @> '{"foo": {}}'::jsonb; @@ -309,10 +312,10 @@ SELECT '{"foo": {"bar": "baz"}}'::jsonb @> '{"bar": "baz"}'::jsonb; -- yields f -- This array contains the primitive string value: -SELECT '["foo", "bar"]'::jsonb @> '"bar"'::jsonb; +SELECT '["foo", "bar"]'::jsonb @> '"bar"'::jsonb; -- This exception is not reciprocal -- non-containment is reported here: -SELECT '"bar"'::jsonb @> '["bar"]'::jsonb; -- yields false +SELECT '"bar"'::jsonb @> '["bar"]'::jsonb; -- yields false @@ -346,6 +349,34 @@ SELECT '"foo"'::jsonb ? 'foo'; need to be searched linearly. + + + Because JSON containment is nested, an appropriate query can skip + explicit selection of sub-objects. As an example, suppose that we have + a doc column containing objects at the top level, with + most objects containing tags fields that contain arrays of + sub-objects. This query finds entries in which sub-objects containing + both "term":"paris" and "term":"food" appear, + while ignoring any such keys outside the tags array: + +SELECT doc->'site_name' FROM websites + WHERE doc @> '{"tags":[{"term":"paris"}, {"term":"food"}]}'; + + One could accomplish the same thing with, say, + +SELECT doc->'site_name' FROM websites + WHERE doc->'tags' @> '[{"term":"paris"}, {"term":"food"}]'; + + but that approach is less flexible, and often less efficient as well. + + + + On the other hand, the JSON existence operator is not nested: it will + only look for the specified key or array element at top level of the + JSON value. + + + The various containment and existence operators, along with all other JSON operators and functions are documented @@ -369,8 +400,9 @@ SELECT '"foo"'::jsonb ? 'foo'; The default GIN operator class for jsonb supports queries with - the @>, ?, ?& - and ?| operators. + top-level key-exists operators ?, ?& + and ?| operators and path/value-exists operator + @>. (For details of the semantics that these operators implement, see .) An example of creating an index with this operator class is: diff --git a/doc/src/sgml/keywords.sgml b/doc/src/sgml/keywords.sgml index ea582116ab9dc..898a79b42e92a 100644 --- a/doc/src/sgml/keywords.sgml +++ b/doc/src/sgml/keywords.sgml @@ -1037,7 +1037,7 @@ CUBE - + non-reserved reserved reserved @@ -2031,7 +2031,7 @@ GROUPING - + non-reserved (cannot be function or type) reserved reserved @@ -2164,7 +2164,7 @@ IMPORT - + non-reserved reserved reserved @@ -2463,20 +2463,6 @@ reserved - - LC_COLLATE - non-reserved - - - - - - LC_CTYPE - non-reserved - - - - LEAD @@ -2624,6 +2610,20 @@ + + LOCKED + non-reserved + + + + + + LOGGED + non-reserved + + + + LOWER @@ -3893,7 +3893,7 @@ ROLLUP - + non-reserved reserved reserved @@ -4145,7 +4145,7 @@ SETS - + non-reserved non-reserved non-reserved @@ -4185,6 +4185,13 @@ non-reserved reserved + + SKIP + non-reserved + + + + SMALLINT non-reserved (cannot be function or type) @@ -4243,7 +4250,7 @@ SQL - + non-reserved reserved reserved reserved @@ -4502,7 +4509,7 @@ TABLESAMPLE - + reserved (can be function or type) reserved reserved @@ -4649,7 +4656,7 @@ TRANSFORM - + non-reserved non-reserved non-reserved diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index de6b3ad86bfdb..235a168815bb5 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -139,7 +139,7 @@ PGconn *PQconnectdbParams(const char * const *keywords, - If any parameter is NULL or an emptry string, the corresponding + If any parameter is NULL or an empty string, the corresponding environment variable (see ) is checked. If the environment variable is not set either, then the indicated built-in defaults are used. @@ -1906,8 +1906,10 @@ const char *PQsslAttribute(const PGconn *conn, const char *attribute_name); protocol - SSL/TLS version in use. Common values are "SSLv2", "SSLv3", - "TLSv1", "TLSv1.1" and "TLSv1.2", but an implementation may + SSL/TLS version in use. Common values + are "SSLv2", "SSLv3", + "TLSv1", "TLSv1.1" + and "TLSv1.2", but an implementation may return other strings if some other protocol is used. @@ -1924,7 +1926,7 @@ const char *PQsslAttribute(const PGconn *conn, const char *attribute_name); cipher - A short name of the ciphersuite used, e.g. + A short name of the ciphersuite used, e.g. "DHE-RSA-DES-CBC3-SHA". The names are specific to each SSL implementation. @@ -2012,7 +2014,7 @@ void *PQgetssl(const PGconn *conn); - This function is equivalent to PQsslStruct(conn, "OpenSSL"). It should + This function is equivalent to PQsslStruct(conn, "OpenSSL"). It should not be used in new applications, because the returned struct is specific to OpenSSL and will not be available if another SSL implementation is used. To check if a connection uses SSL, call @@ -5149,7 +5151,7 @@ int PQputCopyEnd(PGconn *conn, connections.) - + The result is 1 if the termination message was sent; or in nonblocking mode, this may only indicate that the termination message was successfully queued. (In nonblocking mode, to be @@ -7572,7 +7574,7 @@ ldap://ldap.acme.com/cn=dbserver,cn=hosts?pgconnectinfo?base?(objectclass=*) libpq will not also initialize those libraries. See + url="http://h71000.www7.hp.com/doc/83final/ba554_90007/ch04.html"> for details on the SSL API. diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index 5fa2f77ea893e..4f0853316761d 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -577,7 +577,7 @@ typedef void (*LogicalDecodeChangeCB) ( The optional filter_by_origin_cb callback - is called to determine wheter data that has been replayed + is called to determine whether data that has been replayed from origin_id is of interest to the output plugin. @@ -594,7 +594,7 @@ typedef bool (*LogicalDecodeChangeCB) ( for transactions and changes that have been filtered away. - This is useful when implementing cascading or multi directional + This is useful when implementing cascading or multidirectional replication solutions. Filtering by the origin allows to prevent replicating the same changes back and forth in such setups. While transactions and changes also carry information diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml index e34426ff18f5b..b5d405024d8a4 100644 --- a/doc/src/sgml/maintenance.sgml +++ b/doc/src/sgml/maintenance.sgml @@ -661,7 +661,7 @@ HINT: Stop the postmaster and vacuum that database in single-user mode. . Whole-table vacuum scans will also occur progressively for all tables, starting with those that have the oldest multixact-age, if the amount of used member - storage space exceeds the amount 50% of the addressible storage space. + storage space exceeds the amount 50% of the addressable storage space. Both of these kinds of whole-table scans will occur even if autovacuum is nominally disabled. @@ -861,7 +861,7 @@ analyze threshold = analyze base threshold + analyze scale factor * number of tu and . When an index is used to enforce uniqueness or other constraints, might be necessary to swap the existing constraint with one enforced by - the new index. Review this alternate multi-step rebuild approach + the new index. Review this alternate multistep rebuild approach carefully before using it as there are limitations on which indexes can be reindexed this way, and errors must be handled. diff --git a/doc/src/sgml/manage-ag.sgml b/doc/src/sgml/manage-ag.sgml index 78ec509a8b587..260cf3610458d 100644 --- a/doc/src/sgml/manage-ag.sgml +++ b/doc/src/sgml/manage-ag.sgml @@ -389,7 +389,7 @@ dropdb dbname database cluster or backed up individually. Similarly, if you lose a tablespace (file deletion, disk failure, etc), the database cluster might become unreadable or unable to start. Placing a tablespace - on a temporary file system like a ramdisk risks the reliability of + on a temporary file system like a RAM disk risks the reliability of the entire cluster. diff --git a/doc/src/sgml/mvcc.sgml b/doc/src/sgml/mvcc.sgml index 385691e21ed08..dd3c775530973 100644 --- a/doc/src/sgml/mvcc.sgml +++ b/doc/src/sgml/mvcc.sgml @@ -757,20 +757,6 @@ ERROR: could not serialize access due to read/write dependencies among transact - - - - Support for the Serializable transaction isolation level has not yet - been added to Hot Standby replication targets (described in - ). The strictest isolation level currently - supported in hot standby mode is Repeatable Read. While performing all - permanent database writes within Serializable transactions on the - master will ensure that all standbys will eventually reach a consistent - state, a Repeatable Read transaction run on the standby can sometimes - see a transient state which is inconsistent with any serial execution - of serializable transactions on the master. - -
@@ -1004,7 +990,9 @@ ERROR: could not serialize access due to read/write dependencies among transact Acquired by the DROP TABLE, TRUNCATE, REINDEX, - CLUSTER, and VACUUM FULL + CLUSTER, VACUUM FULL, + and REFRESH MATERIALIZED VIEW (without + ) commands. Many forms of ALTER TABLE also acquire a lock at this level. This is also the default lock mode for LOCK TABLE statements that do not specify @@ -1667,6 +1655,38 @@ SELECT pg_advisory_lock(q.id) FROM + + Caveats + + + Some DDL commands, currently only and the + table-rewriting forms of , are not + MVCC-safe. This means that after the truncation or rewrite commits, the + table will appear empty to concurrent transactions, if they are using a + snapshot taken before the DDL command committed. This will only be an + issue for a transaction that did not access the table in question + before the DDL command started — any transaction that has done so + would hold at least an ACCESS SHARE table lock, + which would block the DDL command until that transaction completes. + So these commands will not cause any apparent inconsistency in the + table contents for successive queries on the target table, but they + could cause visible inconsistency between the contents of the target + table and other tables in the database. + + + + Support for the Serializable transaction isolation level has not yet + been added to Hot Standby replication targets (described in + ). The strictest isolation level currently + supported in hot standby mode is Repeatable Read. While performing all + permanent database writes within Serializable transactions on the + master will ensure that all standbys will eventually reach a consistent + state, a Repeatable Read transaction run on the standby can sometimes + see a transient state that is inconsistent with any serial execution + of the transactions on the master. + + + Locking and Indexes diff --git a/doc/src/sgml/pageinspect.sgml b/doc/src/sgml/pageinspect.sgml index 313cbaea308c8..b95cc81a09ce5 100644 --- a/doc/src/sgml/pageinspect.sgml +++ b/doc/src/sgml/pageinspect.sgml @@ -382,7 +382,7 @@ test=# SELECT * FROM gin_page_opaque_info(get_raw_page('gin_index', 2)); gin_leafpage_items returns information about the data stored in a GIN leaf page. For example: - test=# SELECT first_tid, nbytes, tids[0:5] as some_tids +test=# SELECT first_tid, nbytes, tids[0:5] as some_tids FROM gin_leafpage_items(get_raw_page('gin_test_idx', 2)); first_tid | nbytes | some_tids -----------+--------+---------------------------------------------------------- diff --git a/doc/src/sgml/pgprewarm.sgml b/doc/src/sgml/pgprewarm.sgml index 2989ac393ed4d..c090401eca69f 100644 --- a/doc/src/sgml/pgprewarm.sgml +++ b/doc/src/sgml/pgprewarm.sgml @@ -50,10 +50,10 @@ pg_prewarm(regclass, mode text default 'buffer', fork text default 'main', using buffer — will likely result in lower-numbered blocks being evicted as higher numbered blocks are read in. Prewarmed data also enjoys no special protection from cache evictions, so it is possible - for other system activity may evict the newly prewarmed blocks shortly after - they are read; conversely, prewarming may also evict other data from cache. - For these reasons, prewarming is typically most useful at startup, when - caches are largely empty. + that other system activity may evict the newly prewarmed blocks shortly + after they are read; conversely, prewarming may also evict other data from + cache. For these reasons, prewarming is typically most useful at startup, + when caches are largely empty. diff --git a/doc/src/sgml/pgstatstatements.sgml b/doc/src/sgml/pgstatstatements.sgml index 4d7a6e68ea212..d4f09fc2a3a16 100644 --- a/doc/src/sgml/pgstatstatements.sgml +++ b/doc/src/sgml/pgstatstatements.sgml @@ -270,7 +270,7 @@ - Consumers of pg_stat_statements may wish to use + Consumers of pg_stat_statements may wish to use queryid (perhaps in combination with dbid and userid) as a more stable and reliable identifier for each entry than its query text. @@ -280,7 +280,7 @@ post-parse-analysis tree, its value is a function of, among other things, the internal object identifiers appearing in this representation. This has some counterintuitive implications. For example, - pg_stat_statements will consider two apparently-identical + pg_stat_statements will consider two apparently-identical queries to be distinct, if they reference a table that was dropped and recreated between the executions of the two queries. The hashing process is also sensitive to differences in @@ -300,6 +300,20 @@ not be a useful identifier for accumulating costs across a set of logical replicas. If in doubt, direct testing is recommended. + + + The representative query texts are kept in an external disk file, and do + not consume shared memory. Therefore, even very lengthy query texts can + be stored successfully. However, if many long query texts are + accumulated, the external file might grow unmanageably large. As a + recovery method if that happens, pg_stat_statements may + choose to discard the query texts, whereupon all existing entries in + the pg_stat_statements view will show + null query fields, though the statistics associated with + each queryid are preserved. If this happens, consider + reducing pg_stat_statements.max to prevent + recurrences. + diff --git a/doc/src/sgml/plpgsql.sgml b/doc/src/sgml/plpgsql.sgml index 9a7763d18c908..a27bbc53a230c 100644 --- a/doc/src/sgml/plpgsql.sgml +++ b/doc/src/sgml/plpgsql.sgml @@ -3617,10 +3617,10 @@ RAISE unique_violation USING MESSAGE = 'Duplicate user ID: ' || user_id; ASSERT condition , message ; - The condition is a boolean - expression that is expected to always evaluate to TRUE; if it does, + The condition is a Boolean + expression that is expected to always evaluate to true; if it does, the ASSERT statement does nothing further. If the - result is FALSE or NULL, then an ASSERT_FAILURE exception + result is false or null, then an ASSERT_FAILURE exception is raised. (If an error occurs while evaluating the condition, it is reported as a normal error.) @@ -3637,7 +3637,7 @@ ASSERT condition , Testing of assertions can be enabled or disabled via the configuration - parameter plpgsql.check_asserts, which takes a boolean + parameter plpgsql.check_asserts, which takes a Boolean value; the default is on. If this parameter is off then ASSERT statements do nothing. diff --git a/doc/src/sgml/plpython.sgml b/doc/src/sgml/plpython.sgml index c838c7b79a5a6..015bbad8ddaa9 100644 --- a/doc/src/sgml/plpython.sgml +++ b/doc/src/sgml/plpython.sgml @@ -288,8 +288,9 @@ $$ LANGUAGE plpythonu; Data Type Mapping - Function arguments are converted from their PostgreSQL type to a - corresponding Python type: + When a PL/Python function is called, its arguments are converted from + their PostgreSQL data type to a corresponding Python type: + @@ -322,7 +323,7 @@ $$ LANGUAGE plpythonu; Otherwise, decimal.Decimal from the standard library will be used. cdecimal is significantly faster - than decimal. In Python 3.3, + than decimal. In Python 3.3 and up, however, cdecimal has been integrated into the standard library under the name decimal, so there is no longer any difference. @@ -356,8 +357,9 @@ $$ LANGUAGE plpythonu; - Function return values are converted to the declared PostgreSQL - return data type as follows: + When a PL/Python function returns, its return value is converted to the + function's declared PostgreSQL return data type as follows: + @@ -373,16 +375,18 @@ $$ LANGUAGE plpythonu; When the PostgreSQL return type is bytea, the return value will be converted to a string (Python 2) or bytes (Python 3) using the respective Python built-ins, with the - result being converted bytea. + result being converted to bytea. - For all other PostgreSQL return types, the returned Python - value is converted to a string using the Python - built-in str, and the result is passed to the - input function of the PostgreSQL data type. + For all other PostgreSQL return types, the return value is converted + to a string using the Python built-in str, and the + result is passed to the input function of the PostgreSQL data type. + (If the Python value is a float, it is converted using + the repr built-in instead of str, to + avoid loss of precision.) diff --git a/doc/src/sgml/postgres-fdw.sgml b/doc/src/sgml/postgres-fdw.sgml index 14b12e37dc6cc..7c922821e988f 100644 --- a/doc/src/sgml/postgres-fdw.sgml +++ b/doc/src/sgml/postgres-fdw.sgml @@ -437,6 +437,41 @@ + + Remote Query Execution Environment + + + In the remote sessions opened by postgres_fdw, + the parameter is set to + just pg_catalog, so that only built-in objects are visible + without schema qualification. This is not an issue for queries + generated by postgres_fdw itself, because it always + supplies such qualification. However, this can pose a hazard for + functions that are executed on the remote server via triggers or rules + on remote tables. For example, if a remote table is actually a view, + any functions used in that view will be executed with the restricted + search path. It is recommended to schema-qualify all names in such + functions, or else attach SET search_path options + (see ) to such functions + to establish their expected search path environment. + + + + postgres_fdw likewise establishes remote session settings + for the parameters , + , , + and . These are less likely + to be problematic than search_path, but can be handled + with function SET options if the need arises. + + + + It is not recommended that you override this behavior by + changing the session-level settings of these parameters; that is likely + to cause postgres_fdw to malfunction. + + + Cross-Version Compatibility diff --git a/doc/src/sgml/postgres.sgml b/doc/src/sgml/postgres.sgml index d1703e9c01ff8..7e82cdc3b124b 100644 --- a/doc/src/sgml/postgres.sgml +++ b/doc/src/sgml/postgres.sgml @@ -243,6 +243,7 @@ &nls; &plhandler; &fdwhandler; + &tablesample-method; &custom-scan; &geqo; &indexam; @@ -250,7 +251,6 @@ &spgist; &gin; &brin; - &tablesample-method; &storage; &bki; &planstats; diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index 42e94971741a4..3fd34576e9959 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -294,7 +294,7 @@ The frontend must now send a PasswordMessage containing the - password (with username) encrypted via MD5, then encrypted + password (with user name) encrypted via MD5, then encrypted again using the 4-byte random salt specified in the AuthenticationMD5Password message. If this is the correct password, the server responds with an AuthenticationOk, diff --git a/doc/src/sgml/queries.sgml b/doc/src/sgml/queries.sgml index ab49bd7e91f03..4444c6abd6733 100644 --- a/doc/src/sgml/queries.sgml +++ b/doc/src/sgml/queries.sgml @@ -1236,7 +1236,7 @@ SELECT product_id, p.name, (sum(s.units) * (p.price - p.cost)) AS profit References to the grouping columns or expressions are replaced - by NULL values in result rows for grouping sets in which those + by null values in result rows for grouping sets in which those columns do not appear. To distinguish which grouping a particular output row resulted from, see . @@ -1289,8 +1289,8 @@ GROUPING SETS ( The individual elements of a CUBE or ROLLUP - clause may be either individual expressions, or sub-lists of elements in - parentheses. In the latter case, the sub-lists are treated as single + clause may be either individual expressions, or sublists of elements in + parentheses. In the latter case, the sublists are treated as single units for the purposes of generating the individual grouping sets. For example: @@ -2202,7 +2202,7 @@ SELECT n FROM t LIMIT 100; functions with side-effects. However, the other side of this coin is that the optimizer is less able to push restrictions from the parent query down into a WITH query - than an ordinary sub-query. The WITH query will generally be + than an ordinary subquery. The WITH query will generally be evaluated as written, without suppression of rows that the parent query might discard afterwards. (But, as mentioned above, evaluation might stop early if the reference(s) to the query demand only a limited number of diff --git a/doc/src/sgml/rangetypes.sgml b/doc/src/sgml/rangetypes.sgml index 260545711b3a5..9557c16a4dbd2 100644 --- a/doc/src/sgml/rangetypes.sgml +++ b/doc/src/sgml/rangetypes.sgml @@ -79,7 +79,7 @@ INSERT INTO reservation VALUES (1108, '[2010-01-01 14:30, 2010-01-01 15:30)'); -- Containment -SELECT int4range(10, 20) @> 3; +SELECT int4range(10, 20) @> 3; -- Overlaps SELECT numrange(11.1, 22.2) && numrange(20.0, 30.0); @@ -344,6 +344,12 @@ SELECT '[1.234, 5.678]'::floatrange; function in this example. + + Defining your own range type also allows you to specify a different + subtype B-tree operator class or collation to use, so as to change the sort + ordering that determines which values fall into a given range. + + If the subtype is considered to have discrete rather than continuous values, the CREATE TYPE command should specify a @@ -365,29 +371,40 @@ SELECT '[1.234, 5.678]'::floatrange; - Defining your own range type also allows you to specify a different - subtype B-tree operator class or collation to use, so as to change the sort - ordering that determines which values fall into a given range. + In addition, any range type that is meant to be used with GiST or SP-GiST + indexes should define a subtype difference, or subtype_diff, + function. (The index will still work without subtype_diff, + but it is likely to be considerably less efficient than if a difference + function is provided.) The subtype difference function takes two input + values of the subtype, and returns their difference + (i.e., X minus Y) represented as + a float8 value. In our example above, the + function float8mi that underlies the regular float8 + minus operator can be used; but for any other subtype, some type + conversion would be necessary. Some creative thought about how to + represent differences as numbers might be needed, too. To the greatest + extent possible, the subtype_diff function should agree with + the sort ordering implied by the selected operator class and collation; + that is, its result should be positive whenever its first argument is + greater than its second according to the sort ordering. - In addition, any range type that is meant to be used with GiST or SP-GiST indexes - should define a subtype difference, or subtype_diff, function. - (the index will still work without subtype_diff, but it is - likely to be considerably less efficient than if a difference function is - provided.) The subtype difference function takes two input values of the - subtype, and returns their difference (i.e., X minus - Y) represented as a float8 value. In our example - above, the function that underlies the regular float8 minus - operator can be used; but for any other subtype, some type conversion would - be necessary. Some creative thought about how to represent differences as - numbers might be needed, too. To the greatest extent possible, the - subtype_diff function should agree with the sort ordering - implied by the selected operator class and collation; that is, its result - should be positive whenever its first argument is greater than its second - according to the sort ordering. + A less-oversimplified example of a subtype_diff function is: + +CREATE FUNCTION time_subtype_diff(x time, y time) RETURNS float8 AS +'SELECT EXTRACT(EPOCH FROM (x - y))' LANGUAGE sql STRICT IMMUTABLE; + +CREATE TYPE timerange AS RANGE ( + subtype = time, + subtype_diff = time_subtype_diff +); + +SELECT '[11:10, 23:00]'::timerange; + + See for more information about creating range types. diff --git a/doc/src/sgml/recovery-config.sgml b/doc/src/sgml/recovery-config.sgml index 61cf86ca80e6e..22d1332b8b433 100644 --- a/doc/src/sgml/recovery-config.sgml +++ b/doc/src/sgml/recovery-config.sgml @@ -446,7 +446,7 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows It is possible that the replication delay between servers exceeds the value of this parameter, in which case no delay is added. - Note that the delay is calculated between the WAL timestamp as written + Note that the delay is calculated between the WAL time stamp as written on master and the current time on the standby. Delays in transfer because of network lag or cascading replication configurations may reduce the actual wait time significantly. If the system diff --git a/doc/src/sgml/ref/alter_database.sgml b/doc/src/sgml/ref/alter_database.sgml index 8b6fa5816f45b..cfc28cf9a7708 100644 --- a/doc/src/sgml/ref/alter_database.sgml +++ b/doc/src/sgml/ref/alter_database.sgml @@ -25,9 +25,9 @@ ALTER DATABASE name [ [ WITH ] where option can be: - IS_TEMPLATE istemplate ALLOW_CONNECTIONS allowconn CONNECTION LIMIT connlimit + IS_TEMPLATE istemplate ALTER DATABASE name RENAME TO new_name @@ -110,17 +110,6 @@ ALTER DATABASE name RESET ALL - - istemplate - - - If true, then this database can be cloned by any user with CREATEDB - privileges; if false, then only superusers or the owner of the - database can clone it. - - - - allowconn @@ -129,7 +118,7 @@ ALTER DATABASE name RESET ALL - + connlimit @@ -140,6 +129,17 @@ ALTER DATABASE name RESET ALL + + istemplate + + + If true, then this database can be cloned by any user with CREATEDB + privileges; if false, then only superusers or the owner of the + database can clone it. + + + + new_name diff --git a/doc/src/sgml/ref/alter_large_object.sgml b/doc/src/sgml/ref/alter_large_object.sgml index a0ed6c22f3449..5748d52db115b 100644 --- a/doc/src/sgml/ref/alter_large_object.sgml +++ b/doc/src/sgml/ref/alter_large_object.sgml @@ -21,7 +21,7 @@ PostgreSQL documentation -ALTER LARGE OBJECT large_object_oid { OWNER TO new_owner | CURRENT_USER | SESSION_USER } +ALTER LARGE OBJECT large_object_oid OWNER TO { new_owner | CURRENT_USER | SESSION_USER } diff --git a/doc/src/sgml/ref/alter_opclass.sgml b/doc/src/sgml/ref/alter_opclass.sgml index 2e561be8d78f4..58de603aa4683 100644 --- a/doc/src/sgml/ref/alter_opclass.sgml +++ b/doc/src/sgml/ref/alter_opclass.sgml @@ -22,13 +22,13 @@ PostgreSQL documentation ALTER OPERATOR CLASS name USING index_method - RENAME TO new_name + RENAME TO new_name ALTER OPERATOR CLASS name USING index_method - { OWNER TO new_owner | CURRENT_USER | SESSION_USER } + OWNER TO { new_owner | CURRENT_USER | SESSION_USER } ALTER OPERATOR CLASS name USING index_method - SET SCHEMA new_schema + SET SCHEMA new_schema diff --git a/doc/src/sgml/ref/alter_operator.sgml b/doc/src/sgml/ref/alter_operator.sgml index bdb2d029b171a..8a7af50d6049c 100644 --- a/doc/src/sgml/ref/alter_operator.sgml +++ b/doc/src/sgml/ref/alter_operator.sgml @@ -22,10 +22,10 @@ PostgreSQL documentation ALTER OPERATOR name ( { left_type | NONE } , { right_type | NONE } ) - { OWNER TO new_owner | CURRENT_USER | SESSION_USER } + OWNER TO { new_owner | CURRENT_USER | SESSION_USER } ALTER OPERATOR name ( { left_type | NONE } , { right_type | NONE } ) - SET SCHEMA new_schema + SET SCHEMA new_schema diff --git a/doc/src/sgml/ref/alter_opfamily.sgml b/doc/src/sgml/ref/alter_opfamily.sgml index b0942b6ea7de2..4511c7f7b24c9 100644 --- a/doc/src/sgml/ref/alter_opfamily.sgml +++ b/doc/src/sgml/ref/alter_opfamily.sgml @@ -34,13 +34,13 @@ ALTER OPERATOR FAMILY name USING index_method - RENAME TO new_name + RENAME TO new_name ALTER OPERATOR FAMILY name USING index_method - OWNER TO { new_owner | CURRENT_USER | SESSION_USER } + OWNER TO { new_owner | CURRENT_USER | SESSION_USER } ALTER OPERATOR FAMILY name USING index_method - SET SCHEMA new_schema + SET SCHEMA new_schema diff --git a/doc/src/sgml/ref/alter_role.sgml b/doc/src/sgml/ref/alter_role.sgml index e97bf4c9d282e..7638817b830a1 100644 --- a/doc/src/sgml/ref/alter_role.sgml +++ b/doc/src/sgml/ref/alter_role.sgml @@ -138,7 +138,7 @@ ALTER ROLE { role_specification | A CURRENT_USER - Alter the current user instead of an explicitely identified role. + Alter the current user instead of an explicitly identified role. @@ -147,7 +147,7 @@ ALTER ROLE { role_specification | A SESSION_USER - Alter the current session user instead of an explicitely identified + Alter the current session user instead of an explicitly identified role. diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index 207fec1758e49..9fea2702bac47 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -61,6 +61,8 @@ ALTER TABLE ALL IN TABLESPACE name ENABLE ALWAYS RULE rewrite_rule_name DISABLE ROW LEVEL SECURITY ENABLE ROW LEVEL SECURITY + FORCE ROW LEVEL SECURITY + NO FORCE ROW LEVEL SECURITY CLUSTER ON index_name SET WITHOUT CLUSTER SET WITH OIDS @@ -431,6 +433,21 @@ ALTER TABLE ALL IN TABLESPACE name + + NO FORCE/FORCE ROW LEVEL SECURITY + + + These forms control the application of row security policies belonging + to the table when the user is the table owner. If enabled, row level + security policies will be applied when the user is the table owner. If + disabled (the default) then row level security will not be applied when + the user is the table owner. + See also + . + + + + CLUSTER ON @@ -646,7 +663,7 @@ ALTER TABLE ALL IN TABLESPACE name This form changes the information which is written to the write-ahead log to identify rows which are updated or deleted. This option has no effect except when logical replication is in use. DEFAULT - (the default for non-system tables) records the + (the default for non-system tables) records the old values of the columns of the primary key, if any. USING INDEX records the old values of the columns covered by the named index, which must be unique, not partial, not deferrable, and include only columns marked @@ -948,7 +965,8 @@ ALTER TABLE ALL IN TABLESPACE name Adding a CHECK or NOT NULL constraint requires - scanning the table to verify that existing rows meet the constraint. + scanning the table to verify that existing rows meet the constraint, + but does not require a table rewrite. @@ -970,11 +988,17 @@ ALTER TABLE ALL IN TABLESPACE name - To force an immediate rewrite of the table, you can use - VACUUM FULL, - or one of the forms of ALTER TABLE that forces a rewrite. This results in - no semantically-visible change in the table, but gets rid of - no-longer-useful data. + To force immediate reclamation of space occupied by a dropped column, + you can execute one of the forms of ALTER TABLE that + performs a rewrite of the whole table. This results in reconstructing + each row with the dropped column replaced by a null value. + + + + The rewriting forms of ALTER TABLE are not MVCC-safe. + After a table rewrite, the table will appear empty to concurrent + transactions, if they are using a snapshot taken before the rewrite + occurred. See for more details. @@ -1059,7 +1083,7 @@ ALTER TABLE distributors - To change an integer column containing UNIX timestamps to timestamp + To change an integer column containing Unix timestamps to timestamp with time zone via a USING clause: ALTER TABLE foo diff --git a/doc/src/sgml/ref/comment.sgml b/doc/src/sgml/ref/comment.sgml index 656f5aae5baba..3321d4b49d679 100644 --- a/doc/src/sgml/ref/comment.sgml +++ b/doc/src/sgml/ref/comment.sgml @@ -43,6 +43,7 @@ COMMENT ON OPERATOR operator_name (left_type, right_type) | OPERATOR CLASS object_name USING index_method | OPERATOR FAMILY object_name USING index_method | + POLICY policy_name ON table_name | [ PROCEDURAL ] LANGUAGE object_name | ROLE object_name | RULE rule_name ON table_name | @@ -113,6 +114,7 @@ COMMENT ON constraint_name function_name operator_name + policy_name rule_name trigger_name @@ -133,9 +135,9 @@ COMMENT ON domain_name - When creating a comment on a constraint on a table or a domain, these - parameteres specify the name of the table or domain on which the - constraint is defined. + When creating a comment on a constraint, a table, a domain or + a policy these parameters specify the name of the table or domain on + which the constraint is defined. @@ -315,6 +317,7 @@ COMMENT ON OPERATOR ^ (text, text) IS 'Performs intersection of two texts'; COMMENT ON OPERATOR - (NONE, integer) IS 'Unary minus'; COMMENT ON OPERATOR CLASS int4ops USING btree IS '4 byte integer operators for btrees'; COMMENT ON OPERATOR FAMILY integer_ops USING btree IS 'all integer operators for btrees'; +COMMENT ON POLICY my_policy ON mytable IS 'Filter rows by users'; COMMENT ON ROLE my_role IS 'Administration group for finance tables'; COMMENT ON RULE my_rule ON my_table IS 'Logs updates of employee records'; COMMENT ON SCHEMA my_schema IS 'Departmental data'; diff --git a/doc/src/sgml/ref/create_database.sgml b/doc/src/sgml/ref/create_database.sgml index 9711b1f98e3eb..138996bedc804 100644 --- a/doc/src/sgml/ref/create_database.sgml +++ b/doc/src/sgml/ref/create_database.sgml @@ -28,9 +28,9 @@ CREATE DATABASE name [ LC_COLLATE [=] lc_collate ] [ LC_CTYPE [=] lc_ctype ] [ TABLESPACE [=] tablespace_name ] - [ IS_TEMPLATE [=] istemplate ] [ ALLOW_CONNECTIONS [=] allowconn ] [ CONNECTION LIMIT [=] connlimit ] ] + [ IS_TEMPLATE [=] istemplate ] @@ -149,17 +149,6 @@ CREATE DATABASE name - - istemplate - - - If true, then this database can be cloned by any user with CREATEDB - privileges; if false (the default), then only superusers or the owner - of the database can clone it. - - - - allowconn @@ -170,7 +159,7 @@ CREATE DATABASE name - + connlimit @@ -180,6 +169,17 @@ CREATE DATABASE name + + + istemplate + + + If true, then this database can be cloned by any user with CREATEDB + privileges; if false (the default), then only superusers or the owner + of the database can clone it. + + + diff --git a/doc/src/sgml/ref/create_domain.sgml b/doc/src/sgml/ref/create_domain.sgml index 8b7848b820d05..3423bf9a32857 100644 --- a/doc/src/sgml/ref/create_domain.sgml +++ b/doc/src/sgml/ref/create_domain.sgml @@ -209,8 +209,8 @@ INSERT INTO tab (domcol) VALUES ((SELECT domcol FROM tab WHERE false)); It is very difficult to avoid such problems, because of SQL's general - assumption that NULL is a valid value of every datatype. Best practice - therefore is to design a domain's constraints so that NULL is allowed, + assumption that a null value is a valid value of every data type. Best practice + therefore is to design a domain's constraints so that a null value is allowed, and then to apply column NOT NULL constraints to columns of the domain type as needed, rather than directly to the domain type. diff --git a/doc/src/sgml/ref/create_event_trigger.sgml b/doc/src/sgml/ref/create_event_trigger.sgml index 7cdf4c75f67d2..be18fc36e8045 100644 --- a/doc/src/sgml/ref/create_event_trigger.sgml +++ b/doc/src/sgml/ref/create_event_trigger.sgml @@ -22,9 +22,9 @@ PostgreSQL documentation CREATE EVENT TRIGGER name - ON event - [ WHEN filter_variable IN (filter_value [, ... ]) [ AND ... ] ] - EXECUTE PROCEDURE function_name() + ON event + [ WHEN filter_variable IN (filter_value [, ... ]) [ AND ... ] ] + EXECUTE PROCEDURE function_name() diff --git a/doc/src/sgml/ref/create_function.sgml b/doc/src/sgml/ref/create_function.sgml index c5beb166cfaf2..bd11d2bc2895f 100644 --- a/doc/src/sgml/ref/create_function.sgml +++ b/doc/src/sgml/ref/create_function.sgml @@ -350,9 +350,18 @@ CREATE [ OR REPLACE ] FUNCTION effects. It reveals no information about its arguments other than by its return value. For example, a function which throws an error message for some argument values but not others, or which includes the argument - values in any error message, is not leakproof. The query planner may - push leakproof functions (but not others) into views created with the - security_barrier option. See + values in any error message, is not leakproof. This affects how the + system executes queries against views created with the + security_barrier option or tables with row level + security enabled. The system will enforce conditions from security + policies and security barrier views before any user-supplied conditions + from the query itself that contain non-leakproof functions, in order to + prevent the inadvertent exposure of data. Functions and operators + marked as leakproof are assumed to be trustworthy, and may be executed + before conditions from security policies and security barrier views. + In addition, functions which do not take arguments or which are not + passed any arguments from the security barrier view or table do not have + to be marked as leakproof to be executed before security conditions. See and . This option can only be set by the superuser. diff --git a/doc/src/sgml/ref/create_policy.sgml b/doc/src/sgml/ref/create_policy.sgml index e826984633c47..a4043f629dbdf 100644 --- a/doc/src/sgml/ref/create_policy.sgml +++ b/doc/src/sgml/ref/create_policy.sgml @@ -34,7 +34,7 @@ CREATE POLICY name ON The CREATE POLICY command defines a new policy for a - table. Note that row level security must also be enabled on the table using + table. Note that row-level security must also be enabled on the table using ALTER TABLE in order for created policies to be applied. @@ -53,7 +53,7 @@ CREATE POLICY name ON Generally, the system will enforce filter conditions imposed using security policies prior to qualifications that appear in the query itself, - in order to the prevent the inadvertent exposure of the protected data to + in order to prevent the inadvertent exposure of the protected data to user-defined functions which might not be trustworthy. However, functions and operators marked by the system (or the system administrator) as LEAKPROOF may be evaluated before policy @@ -112,7 +112,7 @@ CREATE POLICY name ON name ON UPDATE path is taken. Any existing row that necessitates that the UPDATE path be taken must pass the (UPDATE or ALL) USING qualifications (combined - using OR), which are always enforced as WTIH CHECK + using OR), which are always enforced as WITH CHECK options in this context (the UPDATE path will never be silently avoided; an error will be thrown instead). Finally, the final row appended to the relation must pass diff --git a/doc/src/sgml/ref/create_role.sgml b/doc/src/sgml/ref/create_role.sgml index ea26027511458..240c21ce85fcd 100644 --- a/doc/src/sgml/ref/create_role.sgml +++ b/doc/src/sgml/ref/create_role.sgml @@ -196,16 +196,13 @@ CREATE ROLE name [ [ WITH ] NOBYPASSRLS - These clauses determine whether a role is allowed to bypass row-security - policies. A role having the BYPASSRLS attribute will - be allowed to bypass row-security policies by setting - row_security to - OFF. NOBYPASSRLS is the default. + These clauses determine whether a role bypasses every row-level + security (RLS) policy. NOBYPASSRLS is the default. Note that pg_dump will set row_security to OFF by default, to ensure all contents of a table are dumped out. If the user running pg_dump does not have appropriate permissions, an error will be returned. The superuser and owner of the - table being dumped are considered to always have the right to bypass RLS. + table being dumped always bypass RLS. diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index fac7e1ec5e187..a2d0b0cbe1e2e 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -1009,9 +1009,7 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXI Custom parameter. Note that autovacuum will ignore attempts to set a per-table autovacuum_freeze_max_age larger than the system-wide setting - (it can only be set smaller). Note that while you can set - autovacuum_freeze_max_age very small, or even zero, this is - usually unwise since it will force frequent vacuuming. + (it can only be set smaller). @@ -1045,10 +1043,7 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXI Custom parameter. Note that autovacuum will ignore attempts to set a per-table autovacuum_multixact_freeze_max_age larger than the - system-wide setting (it can only be set smaller). Note that while you - can set autovacuum_multixact_freeze_max_age very small, - or even zero, this is usually unwise since it will force frequent - vacuuming. + system-wide setting (it can only be set smaller). diff --git a/doc/src/sgml/ref/create_view.sgml b/doc/src/sgml/ref/create_view.sgml index 8fa3564021eda..e37bb009b4f7e 100644 --- a/doc/src/sgml/ref/create_view.sgml +++ b/doc/src/sgml/ref/create_view.sgml @@ -139,7 +139,7 @@ CREATE VIEW name AS WITH RECURSIVE name ( - security_barrier (string) + security_barrier (boolean) This should be used if the view is intended to provide row-level diff --git a/doc/src/sgml/ref/drop_owned.sgml b/doc/src/sgml/ref/drop_owned.sgml index 64906efd3dcfc..d03cc57845082 100644 --- a/doc/src/sgml/ref/drop_owned.sgml +++ b/doc/src/sgml/ref/drop_owned.sgml @@ -90,19 +90,24 @@ DROP OWNED BY { name | CURRENT_USER The command is an alternative that reassigns the ownership of all the database objects owned by one or - more roles. + more roles. However, REASSIGN OWNED does not deal with + privileges for other objects. Databases and tablespaces owned by the role(s) will not be removed. + + + See for more discussion. + Compatibility - The DROP OWNED statement is a + The DROP OWNED command is a PostgreSQL extension. diff --git a/doc/src/sgml/ref/drop_policy.sgml b/doc/src/sgml/ref/drop_policy.sgml index bd4ef5cf7ce03..c25bc61d9e176 100644 --- a/doc/src/sgml/ref/drop_policy.sgml +++ b/doc/src/sgml/ref/drop_policy.sgml @@ -83,9 +83,9 @@ DROP POLICY [ IF EXISTS ] name ON < To drop the policy called p1 on the table named my_table: - - DROP POLICY p1 ON my_table; - + +DROP POLICY p1 ON my_table; + diff --git a/doc/src/sgml/ref/drop_role.sgml b/doc/src/sgml/ref/drop_role.sgml index 9a93da624a5ab..75b48f94f9ace 100644 --- a/doc/src/sgml/ref/drop_role.sgml +++ b/doc/src/sgml/ref/drop_role.sgml @@ -39,10 +39,10 @@ DROP ROLE [ IF EXISTS ] name [, ... A role cannot be removed if it is still referenced in any database of the cluster; an error will be raised if so. Before dropping the role, you must drop all the objects it owns (or reassign their ownership) - and revoke any privileges the role has been granted. The - and - commands can be useful for this purpose. + and revoke any privileges the role has been granted on other objects. + The and + commands can be useful for this purpose; see + for more discussion. diff --git a/doc/src/sgml/ref/drop_user.sgml b/doc/src/sgml/ref/drop_user.sgml index 24e2a87ff2db5..38e5418d0787a 100644 --- a/doc/src/sgml/ref/drop_user.sgml +++ b/doc/src/sgml/ref/drop_user.sgml @@ -29,7 +29,7 @@ DROP USER [ IF EXISTS ] name [, ... Description - DROP USER is now an alias for + DROP USER is simply an alternate spelling of . diff --git a/doc/src/sgml/ref/import_foreign_schema.sgml b/doc/src/sgml/ref/import_foreign_schema.sgml index bdcc26558acf0..331b362db7c13 100644 --- a/doc/src/sgml/ref/import_foreign_schema.sgml +++ b/doc/src/sgml/ref/import_foreign_schema.sgml @@ -22,10 +22,10 @@ PostgreSQL documentation IMPORT FOREIGN SCHEMA remote_schema -[ { LIMIT TO | EXCEPT } ( table_name [, ...] ) ] -FROM SERVER server_name -INTO local_schema -[ OPTIONS ( option 'value' [, ... ] ) ] + [ { LIMIT TO | EXCEPT } ( table_name [, ...] ) ] + FROM SERVER server_name + INTO local_schema + [ OPTIONS ( option 'value' [, ... ] ) ] diff --git a/doc/src/sgml/ref/insert.sgml b/doc/src/sgml/ref/insert.sgml index 7cd4577f1eafc..8caf5fe855ff2 100644 --- a/doc/src/sgml/ref/insert.sgml +++ b/doc/src/sgml/ref/insert.sgml @@ -308,7 +308,7 @@ INSERT INTO table_name [ AS column_name_index or expression_index use a particular collation in order to be matched in the inference clause. - Typically this is omitted, as collations usually do not affect wether or + Typically this is omitted, as collations usually do not affect whether or not a constraint violation occurs. Follows CREATE INDEX format. @@ -621,9 +621,9 @@ INSERT INTO employees_log SELECT *, current_timestamp FROM upd; expression is used to reference values originally proposed for insertion: - INSERT INTO distributors (did, dname) - VALUES (5, 'Gizmo transglobal'), (6, 'Associated Computing, inc') - ON CONFLICT (did) DO UPDATE SET dname = EXCLUDED.dname; +INSERT INTO distributors (did, dname) + VALUES (5, 'Gizmo transglobal'), (6, 'Associated Computing, inc') + ON CONFLICT (did) DO UPDATE SET dname = EXCLUDED.dname; @@ -633,8 +633,8 @@ INSERT INTO employees_log SELECT *, current_timestamp FROM upd; Example assumes a unique index has been defined that constrains values appearing in the did column: - INSERT INTO distributors (did, dname) VALUES (7, 'Redline GmbH') - ON CONFLICT (did) DO NOTHING; +INSERT INTO distributors (did, dname) VALUES (7, 'Redline GmbH') + ON CONFLICT (did) DO NOTHING; @@ -644,16 +644,16 @@ INSERT INTO employees_log SELECT *, current_timestamp FROM upd; used to limit the rows actually updated (any existing row not updated will still be locked, though): - -- Don't update existing distributors based in a certain ZIP code - INSERT INTO distributors AS d (did, dname) VALUES (8, 'Anvil Distribution') - ON CONFLICT (did) DO UPDATE - SET dname = EXCLUDED.dname || ' (formerly ' || d.dname || ')' - WHERE d.zipcode != '21201'; - - -- Name a constraint directly in the statement (uses associated - -- index to arbitrate taking the DO NOTHING action) - INSERT INTO distributors (did, dname) VALUES (9, 'Antwerp Design') - ON CONFLICT ON CONSTRAINT distributors_pkey DO NOTHING; +-- Don't update existing distributors based in a certain ZIP code +INSERT INTO distributors AS d (did, dname) VALUES (8, 'Anvil Distribution') + ON CONFLICT (did) DO UPDATE + SET dname = EXCLUDED.dname || ' (formerly ' || d.dname || ')' + WHERE d.zipcode <> '21201'; + +-- Name a constraint directly in the statement (uses associated +-- index to arbitrate taking the DO NOTHING action) +INSERT INTO distributors (did, dname) VALUES (9, 'Antwerp Design') + ON CONFLICT ON CONSTRAINT distributors_pkey DO NOTHING; @@ -661,14 +661,14 @@ INSERT INTO employees_log SELECT *, current_timestamp FROM upd; DO NOTHING. Example assumes a unique index has been defined that constrains values appearing in the did column on a subset of rows where the - is_active boolean column evaluates to + is_active Boolean column evaluates to true: - -- This statement could infer a partial unique index on "did" - -- with a predicate of "WHERE is_active", but it could also - -- just use a regular unique constraint on "did" - INSERT INTO distributors (did, dname) VALUES (10, 'Conrad International') - ON CONFLICT (did) WHERE is_active DO NOTHING; +-- This statement could infer a partial unique index on "did" +-- with a predicate of "WHERE is_active", but it could also +-- just use a regular unique constraint on "did" +INSERT INTO distributors (did, dname) VALUES (10, 'Conrad International') + ON CONFLICT (did) WHERE is_active DO NOTHING; diff --git a/doc/src/sgml/ref/pg_basebackup.sgml b/doc/src/sgml/ref/pg_basebackup.sgml index cb8b8a3c4999b..616c74a4bad64 100644 --- a/doc/src/sgml/ref/pg_basebackup.sgml +++ b/doc/src/sgml/ref/pg_basebackup.sgml @@ -580,7 +580,7 @@ PostgreSQL documentation Tablespaces will in plain format by default be backed up to the same path they have on the server, unless the - option --tablespace-mapping is used. Without + option --tablespace-mapping is used. Without this option, running a plain format base backup on the same host as the server will not work if tablespaces are in use, because the backup would have to be written to the same directory locations as the original @@ -589,18 +589,18 @@ PostgreSQL documentation When tar format mode is used, it is the user's responsibility to unpack each - tar file before starting postgres. If there are additional tablespaces, the + tar file before starting the PostgreSQL server. If there are additional tablespaces, the tar files for them need to be unpacked in the correct locations. In this - case the symbolic links for those tablespaces will be created by Postgres + case the symbolic links for those tablespaces will be created by the server according to the contents of the tablespace_map file that is included in the base.tar file. pg_basebackup works with servers of the same - or an older major version, down to 9.1. However, WAL streaming mode (-X - stream) only works with server version 9.3 and later, and tar format mode - (--format=tar) of the current version only works with server version 9.5 + or an older major version, down to 9.1. However, WAL streaming mode (-X + stream) only works with server version 9.3 and later, and tar format mode + (--format=tar) of the current version only works with server version 9.5 or later. diff --git a/doc/src/sgml/ref/pg_ctl-ref.sgml b/doc/src/sgml/ref/pg_ctl-ref.sgml index 2df65db0bdde1..eaa0cc8b3701e 100644 --- a/doc/src/sgml/ref/pg_ctl-ref.sgml +++ b/doc/src/sgml/ref/pg_ctl-ref.sgml @@ -427,10 +427,10 @@ PostgreSQL documentation Name of the event source for pg_ctl to use for logging to the event log when running as a Windows service. The default is PostgreSQL. Note that this only controls - the logging from pg_ctl itself - once + the logging from pg_ctl itself; once started, the server will use the event source specified by . Should the server fail during - early startup, it may also log using the default event + early startup, it might also log using the default event source PostgreSQL. diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml index 7c28bd2876ddd..ab5dd08c546ab 100644 --- a/doc/src/sgml/ref/pg_dump.sgml +++ b/doc/src/sgml/ref/pg_dump.sgml @@ -688,13 +688,13 @@ PostgreSQL documentation This option is relevant only when dumping the contents of a table - which has row security. By default, pg_dump will set - ROW_SECURITY to OFF, to ensure + which has row security. By default, pg_dump will set + to off, to ensure that all data is dumped from the table. If the user does not have sufficient privileges to bypass row security, then an error is thrown. This parameter instructs pg_dump to set - row_security to 'ON' instead, allowing the user to dump the contents - of the table which they have access to. + to on instead, allowing the user + to dump the parts of the contents of the table that they have access to. @@ -843,27 +843,6 @@ PostgreSQL documentation - - - - - Use the specifed synchronized snapshot when making a dump of the - database (see - for more - details). - - - This option is useful when needing to synchronize the dump with - a logical replication slot (see ) - or with a concurrent session. - - - In the case of a parallel dump, the snapshot name defined by this - option is used rather than taking a new snapshot. - - - - @@ -899,6 +878,27 @@ PostgreSQL documentation + + + + + Use the specified synchronized snapshot when making a dump of the + database (see + for more + details). + + + This option is useful when needing to synchronize the dump with + a logical replication slot (see ) + or with a concurrent session. + + + In the case of a parallel dump, the snapshot name defined by this + option is used rather than taking a new snapshot. + + + + diff --git a/doc/src/sgml/ref/pg_receivexlog.sgml b/doc/src/sgml/ref/pg_receivexlog.sgml index fd787649e42eb..0dcba4d54fb7f 100644 --- a/doc/src/sgml/ref/pg_receivexlog.sgml +++ b/doc/src/sgml/ref/pg_receivexlog.sgml @@ -50,7 +50,7 @@ PostgreSQL documentation Unlike the standby's WAL receiver, pg_receivexlog - flushes WAL data only when a WAL file is closed, by default. + by default flushes WAL data only when a WAL file is closed. --synchronous option must be specified to flush WAL data in real time and ensure it's safely flushed to disk. @@ -92,6 +92,16 @@ PostgreSQL documentation + + + + + Do not not error out when is specified + and a slot with the specified name already exists. + + + + @@ -263,7 +273,7 @@ PostgreSQL documentation Create a new physical replication slot with the name specified in - , then start to stream WAL. + , then exit. diff --git a/doc/src/sgml/ref/pg_recvlogical.sgml b/doc/src/sgml/ref/pg_recvlogical.sgml index a28dbc3f18441..9d0b58bc96b93 100644 --- a/doc/src/sgml/ref/pg_recvlogical.sgml +++ b/doc/src/sgml/ref/pg_recvlogical.sgml @@ -111,7 +111,7 @@ PostgreSQL documentation Write received and decoded transaction data into this - file. Use - for stdout. + file. Use - for stdout. @@ -154,6 +154,16 @@ PostgreSQL documentation + + + + + Do not not error out when is specified + and a slot with the specified name already exists. + + + + @@ -226,7 +236,7 @@ PostgreSQL documentation The following command-line options control the database connection parameters. - + @@ -234,7 +244,7 @@ PostgreSQL documentation The database to connect to. See the description of the actions for - what this means in detail. This can be a libpq connection string; + what this means in detail. This can be a libpq connection string; see for more information. Defaults to user name. @@ -273,7 +283,7 @@ PostgreSQL documentation - Username to connect as. Defaults to current operating system user + User name to connect as. Defaults to current operating system user name. diff --git a/doc/src/sgml/ref/pg_restore.sgml b/doc/src/sgml/ref/pg_restore.sgml index ebdf58020eed0..66a3aa5455ad5 100644 --- a/doc/src/sgml/ref/pg_restore.sgml +++ b/doc/src/sgml/ref/pg_restore.sgml @@ -481,25 +481,25 @@ - + + This option is relevant only when restoring the contents of a table - which has row security. By default, pg_restore will set - ROW_SECURITY to OFF, to ensure + which has row security. By default, pg_restore will set + to off, to ensure that all data is restored in to the table. If the user does not have sufficient privileges to bypass row security, then an error is thrown. This parameter instructs pg_restore to set - row_security to 'ON' instead, allowing the user to attempt to restore - the contents of the table with row security enabled. This may still + to on instead, allowing the user to attempt to restore + the contents of the table with row security enabled. This might still fail if the user does not have the right to insert the rows from the dump into the table. - + - Note that this option currently also requires the dump be in INSERT - format as COPY TO does not support row security. + Note that this option currently also requires the dump be in INSERT + format, as COPY TO does not support row security. - diff --git a/doc/src/sgml/ref/pg_rewind.sgml b/doc/src/sgml/ref/pg_rewind.sgml index 32dc83f6e26dd..9cdfa902f5acf 100644 --- a/doc/src/sgml/ref/pg_rewind.sgml +++ b/doc/src/sgml/ref/pg_rewind.sgml @@ -81,6 +81,16 @@ PostgreSQL documentation recovery.conf file in the target data directory with a suitable restore_command. + + + pg_rewind requires that the target server either has + the option is enabled + in postgresql.conf or that data checksums were enabled when + the cluster was initialized with initdb. Neither of these + are currently on by default. + must also be enabled. That is the + default. + @@ -159,13 +169,13 @@ PostgreSQL documentation - Display version information, then exit + Display version information, then exit. - Show help, then exit + Show help, then exit. @@ -185,13 +195,6 @@ PostgreSQL documentation Notes - - pg_rewind requires that the wal_log_hints - option is enabled in postgresql.conf, or that data checksums - were enabled when the cluster was initialized with initdb. - full_page_writes must also be enabled. - - How it works @@ -217,8 +220,8 @@ PostgreSQL documentation - Copy all other files like clog, conf files etc. from the new cluster - to old cluster. Everything except the relation files. + Copy all other files such as clog and configuration files from the new cluster + to the old cluster, everything except the relation files. diff --git a/doc/src/sgml/ref/pg_xlogdump.sgml b/doc/src/sgml/ref/pg_xlogdump.sgml index d9f4a6a499ccf..54ef0a725dd90 100644 --- a/doc/src/sgml/ref/pg_xlogdump.sgml +++ b/doc/src/sgml/ref/pg_xlogdump.sgml @@ -174,7 +174,7 @@ PostgreSQL documentation - Only display records marked with the given TransactionId. + Only display records marked with the given transaction ID. @@ -215,6 +215,12 @@ PostgreSQL documentation Only the specified timeline is displayed (or the default, if none is specified). Records in other timelines are ignored. + + + pg_xlogdump cannot read WAL files with suffix + .partial. If those files need to be read, .partial + suffix needs to be removed from the file name. + diff --git a/doc/src/sgml/ref/pgarchivecleanup.sgml b/doc/src/sgml/ref/pgarchivecleanup.sgml index 779159d7fc2c5..60a7fc4e6b986 100644 --- a/doc/src/sgml/ref/pgarchivecleanup.sgml +++ b/doc/src/sgml/ref/pgarchivecleanup.sgml @@ -60,8 +60,10 @@ archive_cleanup_command = 'pg_archivecleanup archivelocation %r' When used as a standalone program all WAL files logically preceding the oldestkeptwalfile will be removed from archivelocation. - In this mode, if you specify a .backup file name, then only the file prefix - will be used as the oldestkeptwalfile. This allows you to remove + In this mode, if you specify a .partial or .backup + file name, then only the file prefix will be used as the + oldestkeptwalfile. This treatment of .backup + file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name 000000010000003700000010: @@ -128,11 +130,6 @@ pg_archivecleanup: removing file "archive/00000001000000370000000E" .gz. - - Note that the - .backup file name passed to the program should not - include the extension. - diff --git a/doc/src/sgml/ref/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml index a8085463a5e33..b4904384130d4 100644 --- a/doc/src/sgml/ref/pgbench.sgml +++ b/doc/src/sgml/ref/pgbench.sgml @@ -45,7 +45,7 @@ - Typical output from pgbench looks like: + Typical output from pgbench looks like: transaction type: TPC-B (sort of) @@ -545,7 +545,7 @@ pgbench options dbname Vacuum all four standard tables before running the test. - With neither @@ -659,7 +659,7 @@ pgbench options dbname Notes - What is the <quote>Transaction</> Actually Performed in pgbench? + What is the <quote>Transaction</> Actually Performed in <application>pgbench</application>? The default transaction script issues seven commands per transaction: @@ -956,7 +956,7 @@ END; pgbench writes the time taken by each transaction to a log file. The log file will be named pgbench_log.nnn, where - nnn is the PID of the pgbench process. + nnn is the PID of the pgbench process. If the - Streaming replication and log-shipping standby servers can remain running until - a later step. + Streaming replication and log-shipping standby servers can + remain running until a later step. + + + + + Verify standby servers + + + If you are upgrading Streaming Replication and Log-Shipping standby + servers, verify that the old standby servers are caught up by running + pg_controldata against the old primary and standby + clusters. Verify that the Latest checkpoint location + values match in all clusters. (There will be a mismatch if old + standby servers were shut down before the old primary.) @@ -390,7 +403,7 @@ pg_upgrade.exe exit and you will have to revert to the old cluster as outlined in below. To try pg_upgrade again, you will need to modify the old cluster so the pg_upgrade schema restore succeeds. If the problem is a - contrib module, you might need to uninstall the contrib module from + contrib module, you might need to uninstall the contrib module from the old cluster and install it in the new cluster after the upgrade, assuming the module is not being used to store user data. @@ -401,13 +414,15 @@ pg_upgrade.exe servers - If you have Streaming Replication () or Log-Shipping () or Log-Shipping (see ) standby servers, follow these steps to - upgrade them (before starting any servers): + upgrade them. You will not be running pg_upgrade + on the standby servers, but rather rsync. Do not + start any servers yet. - + Install the new PostgreSQL binaries on standby servers @@ -447,18 +462,6 @@ pg_upgrade.exe - - Verify standby servers - - - To prevent old standby servers from being modified, run - pg_controldata against the primary and standby - clusters and verify that the Latest checkpoint location - values match in all clusters. (This requires the standbys to be - shut down after the primary.) - - - Save configuration files @@ -487,7 +490,7 @@ pg_upgrade.exe directories, run this for each slave: - rsync --archive --delete --hard-links --size-only old_pgdata new_pgdata remote_dir +rsync --archive --delete --hard-links --size-only old_pgdata new_pgdata remote_dir where - + diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 62a3b21209d60..e690534d9c9d5 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -564,11 +564,11 @@ EOF Show help about psql and exit. The optional topic parameter (defaulting - to options) selects which part of psql is + to options) selects which part of psql is explained: commands describes psql's - backslash commands; options describes the commandline - switches that can be passed to psql; - and variables shows help about about psql configuration + backslash commands; options describes the command-line + options that can be passed to psql; + and variables shows help about about psql configuration variables. @@ -2012,14 +2012,15 @@ lo_import 152801 The value must be a number. In general, the higher the number the more borders and lines the tables will have, - but this depends on the particular format. In - HTML format, this will translate directly - into the border=... attribute; in - latex and latex-longtable - formats, a value of 3 will add a dividing line between each row; in - the other formats only values 0 (no border), 1 (internal dividing - lines), and 2 (table frame) make sense and values above 2 will be - treated the same as border = 2. + but details depend on the particular format. + In HTML format, this will translate directly + into the border=... attribute. + In most other formats only values 0 (no border), 1 (internal + dividing lines), and 2 (table frame) make sense, and values above 2 + will be treated the same as border = 2. + The latex and latex-longtable + formats additionally allow a value of 3 to add dividing lines + between data rows. @@ -2194,8 +2195,8 @@ lo_import 152801 When the border setting is greater than zero, - this option also determines the characters - with which the border lines are drawn. + the linestyle option also determines the + characters with which the border lines are drawn. Plain ASCII characters work everywhere, but Unicode characters look nicer on displays that recognize them. @@ -2338,31 +2339,34 @@ lo_import 152801 - unicode_border_style + unicode_border_linestyle - Sets the border drawing style for the unicode linestyle to one - of single or double. + Sets the border drawing style for the unicode + line style to one of single + or double. - unicode_column_style + unicode_column_linestyle - Sets the column drawing style for the unicode linestyle to one - of single or double. + Sets the column drawing style for the unicode + line style to one of single + or double. - unicode_header_style + unicode_header_linestyle - Sets the header drawing style for the unicode linestyle to one - of single or double. + Sets the header drawing style for the unicode + line style to one of single + or double. @@ -2645,11 +2649,11 @@ testdb=> \setenv LESS -imx4F Shows help information. The optional topic parameter - (defaulting to commands) selects which part of psql is + (defaulting to commands) selects which part of psql is explained: commands describes psql's - backslash commands; options describes the commandline - switches that can be passed to psql; - and variables shows help about about psql configuration + backslash commands; options describes the command-line + options that can be passed to psql; + and variables shows help about about psql configuration variables. diff --git a/doc/src/sgml/ref/reassign_owned.sgml b/doc/src/sgml/ref/reassign_owned.sgml index 382cba337bd49..ccd038629bf7f 100644 --- a/doc/src/sgml/ref/reassign_owned.sgml +++ b/doc/src/sgml/ref/reassign_owned.sgml @@ -31,8 +31,9 @@ REASSIGN OWNED BY { old_role | CURR REASSIGN OWNED instructs the system to change - the ownership of database objects owned by one of the - old_roles, to new_role. + the ownership of database objects owned by any of the + old_roles to + new_role. @@ -82,16 +83,18 @@ REASSIGN OWNED BY { old_role | CURR The command is an alternative that - drops all the database objects owned by one or more roles. Note - also that DROP OWNED requires privileges only - on the source role(s). + simply drops all the database objects owned by one or more roles. - The REASSIGN OWNED command does not affect the - privileges granted to the old_roles in objects that are not owned - by them. Use DROP OWNED to revoke those - privileges. + The REASSIGN OWNED command does not affect any + privileges granted to the old_roles for + objects that are not owned by them. Use DROP OWNED to + revoke such privileges. + + + + See for more discussion. @@ -100,7 +103,7 @@ REASSIGN OWNED BY { old_role | CURR Compatibility - The REASSIGN OWNED statement is a + The REASSIGN OWNED command is a PostgreSQL extension. diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index 632d7935cb41f..44810f4909c06 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -49,7 +49,8 @@ SELECT [ ALL | DISTINCT [ ON ( expressionwhere from_item can be one of: - [ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ] [ TABLESAMPLE sampling_method ( argument [, ...] ) [ REPEATABLE ( seed ) ] ] + [ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ] + [ TABLESAMPLE sampling_method ( argument [, ...] ) [ REPEATABLE ( seed ) ] ] [ LATERAL ] ( select ) [ AS ] alias [ ( column_alias [, ...] ) ] with_query_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ] [ LATERAL ] function_name ( [ argument [, ...] ] ) @@ -325,50 +326,6 @@ TABLE [ ONLY ] table_name [ * ] - - TABLESAMPLE sampling_method ( argument [, ...] ) [ REPEATABLE ( seed ) ] - - - Table sample clause after - table_name indicates that - a sampling_method should - be used to retrieve subset of rows in the table. - The sampling_method can be - any sampling method installed in the database. There are currently two - sampling methods available in the standard - PostgreSQL distribution: - - - SYSTEM - - - BERNOULLI - - - Both of these sampling methods currently accept only single argument - which is the percent (floating point from 0 to 100) of the rows to - be returned. - The SYSTEM sampling method does block level - sampling with each block having the same chance of being selected and - returns all rows from each selected block. - The BERNOULLI scans whole table and returns - individual rows with equal probability. Additional sampling methods - may be installed in the database via extensions. - - - The optional parameter REPEATABLE uses the seed - parameter, which can be a number or expression producing a number, as - a random seed for sampling. Note that subsequent commands may return - different results even if same REPEATABLE clause was - specified. This happens because DML statements and - maintenance operations such as VACUUM may affect physical - distribution of data. The setseed() function will not - affect the sampling result when the REPEATABLE - parameter is used. - - - - alias @@ -387,6 +344,61 @@ TABLE [ ONLY ] table_name [ * ] + + TABLESAMPLE sampling_method ( argument [, ...] ) [ REPEATABLE ( seed ) ] + + + A TABLESAMPLE clause after + a table_name indicates that the + specified sampling_method + should be used to retrieve a subset of the rows in that table. + This sampling precedes the application of any other filters such + as WHERE clauses. + The standard PostgreSQL distribution + includes two sampling methods, BERNOULLI + and SYSTEM, and other sampling methods can be + installed in the database via extensions. + + + + The BERNOULLI and SYSTEM sampling methods + each accept a single argument + which is the fraction of the table to sample, expressed as a + percentage between 0 and 100. This argument can be + any real-valued expression. (Other sampling methods might + accept more or different arguments.) These two methods each return + a randomly-chosen sample of the table that will contain + approximately the specified percentage of the table's rows. + The BERNOULLI method scans the whole table and + selects or ignores individual rows independently with the specified + probability. + The SYSTEM method does block-level sampling with + each block having the specified chance of being selected; all rows + in each selected block are returned. + The SYSTEM method is significantly faster than + the BERNOULLI method when small sampling + percentages are specified, but it may return a less-random sample of + the table as a result of clustering effects. + + + + The optional REPEATABLE clause specifies + a seed number or expression to use + for generating random numbers within the sampling method. The seed + value can be any non-null floating-point value. Two queries that + specify the same seed and argument + values will select the same sample of the table, if the table has + not been changed meanwhile. But different seed values will usually + produce different samples. + If REPEATABLE is not given then a new random + sample is selected for each query. + Note that some add-on sampling methods do not + accept REPEATABLE, and will always produce new + samples on each use. + + + + select @@ -1870,6 +1882,16 @@ SELECT distributors.* WHERE distributors.name = 'Westward'; + + <literal>TABLESAMPLE</literal> Clause Restrictions + + + The TABLESAMPLE clause is currently accepted only on + regular tables and materialized views. According to the SQL standard + it should be possible to apply it to any FROM item. + + + Function Calls in <literal>FROM</literal> @@ -1993,19 +2015,5 @@ SELECT distributors.* WHERE distributors.name = 'Westward'; - - <literal>TABLESAMPLE</literal> clause - - - The TABLESAMPLE clause is currently accepted only on physical - relations and materialized views. - - - - Additional modules allow you to install custom sampling methods and use - them instead of the SQL standard methods. - - - diff --git a/doc/src/sgml/ref/truncate.sgml b/doc/src/sgml/ref/truncate.sgml index 10c4fdd359abb..a78e47c0952b5 100644 --- a/doc/src/sgml/ref/truncate.sgml +++ b/doc/src/sgml/ref/truncate.sgml @@ -140,23 +140,12 @@ TRUNCATE [ TABLE ] [ ONLY ] name [ that were added due to cascading). - - - TRUNCATE is not MVCC-safe (see - for general information about MVCC). After truncation, the table - will appear empty to all concurrent transactions, even if they - are using a snapshot taken before the truncation occurred. This - will only be an issue for a transaction that did not access the - truncated table before the truncation happened — any - transaction that has done so would hold at least an - ACCESS SHARE lock, which would block - TRUNCATE until that transaction completes. So - truncation will not cause any apparent inconsistency in the table - contents for successive queries on the same table, but it could - cause visible inconsistency between the contents of the truncated - table and other tables in the database. - - + + TRUNCATE is not MVCC-safe. After truncation, the table will + appear empty to concurrent transactions, if they are using a snapshot + taken before the truncation occurred. + See for more details. + TRUNCATE is transaction-safe with respect to the data diff --git a/doc/src/sgml/ref/vacuumdb.sgml b/doc/src/sgml/ref/vacuumdb.sgml index e38c34aea3789..92b8984b7a6a9 100644 --- a/doc/src/sgml/ref/vacuumdb.sgml +++ b/doc/src/sgml/ref/vacuumdb.sgml @@ -133,6 +133,30 @@ PostgreSQL documentation + + + + + + Execute the vacuum or analyze commands in parallel by running + njobs + commands simultaneously. This option reduces the time of the + processing but it also increases the load on the database server. + + + vacuumdb will open + njobs connections to the + database, so make sure your + setting is high enough to accommodate all connections. + + + Note that using this mode together with the + (FULL) option might cause deadlock failures if + certain system catalogs are processed in parallel. + + + + @@ -203,30 +227,6 @@ PostgreSQL documentation - - - - - - Execute the vacuum or analyze commands in parallel by running - njobs - commands simultaneously. This option reduces the time of the - processing but it also increases the load on the database server. - - - vacuumdb will open - njobs connections to the - database, so make sure your - setting is high enough to accommodate all connections. - - - Note that using this mode together with the - (FULL) option might cause deadlock failures if - certain system catalogs are processed in parallel. - - - - diff --git a/doc/src/sgml/release-9.0.sgml b/doc/src/sgml/release-9.0.sgml index 736b6dda63751..ef8eb1c9ad2d9 100644 --- a/doc/src/sgml/release-9.0.sgml +++ b/doc/src/sgml/release-9.0.sgml @@ -1,6 +1,503 @@ + + Release 9.0.23 + + + Release Date + 2015-10-08 + + + + This release contains a variety of fixes from 9.0.22. + For information about new features in the 9.0 major release, see + . + + + + This is expected to be the last PostgreSQL release + in the 9.0.X series. Users are encouraged to update to a newer + release branch soon. + + + + Migration to Version 9.0.23 + + + A dump/restore is not required for those running 9.0.X. + + + + However, if you are upgrading from a version earlier than 9.0.18, + see . + + + + + + Changes + + + + + + Fix contrib/pgcrypto to detect and report + too-short crypt() salts (Josh Kupershmidt) + + + + Certain invalid salt arguments crashed the server or disclosed a few + bytes of server memory. We have not ruled out the viability of + attacks that arrange for presence of confidential information in the + disclosed bytes, but they seem unlikely. (CVE-2015-5288) + + + + + + Fix subtransaction cleanup after a portal (cursor) belonging to an + outer subtransaction fails (Tom Lane, Michael Paquier) + + + + A function executed in an outer-subtransaction cursor could cause an + assertion failure or crash by referencing a relation created within an + inner subtransaction. + + + + + + Fix insertion of relations into the relation cache init file + (Tom Lane) + + + + An oversight in a patch in the most recent minor releases + caused pg_trigger_tgrelid_tgname_index to be omitted + from the init file. Subsequent sessions detected this, then deemed the + init file to be broken and silently ignored it, resulting in a + significant degradation in session startup time. In addition to fixing + the bug, install some guards so that any similar future mistake will be + more obvious. + + + + + + Avoid O(N^2) behavior when inserting many tuples into a SPI query + result (Neil Conway) + + + + + + Improve LISTEN startup time when there are many unread + notifications (Matt Newell) + + + + + + Disable SSL renegotiation by default (Michael Paquier, Andres Freund) + + + + While use of SSL renegotiation is a good idea in theory, we have seen + too many bugs in practice, both in the underlying OpenSSL library and + in our usage of it. Renegotiation will be removed entirely in 9.5 and + later. In the older branches, just change the default value + of ssl_renegotiation_limit to zero (disabled). + + + + + + Lower the minimum values of the *_freeze_max_age parameters + (Andres Freund) + + + + This is mainly to make tests of related behavior less time-consuming, + but it may also be of value for installations with limited disk space. + + + + + + Limit the maximum value of wal_buffers to 2GB to avoid + server crashes (Josh Berkus) + + + + + + Fix rare internal overflow in multiplication of numeric values + (Dean Rasheed) + + + + + + Guard against hard-to-reach stack overflows involving record types, + range types, json, jsonb, tsquery, + ltxtquery and query_int (Noah Misch) + + + + + + Fix handling of DOW and DOY in datetime input + (Greg Stark) + + + + These tokens aren't meant to be used in datetime values, but previously + they resulted in opaque internal error messages rather + than invalid input syntax. + + + + + + Add more query-cancel checks to regular expression matching (Tom Lane) + + + + + + Add recursion depth protections to regular expression, SIMILAR + TO, and LIKE matching (Tom Lane) + + + + Suitable search patterns and a low stack depth limit could lead to + stack-overrun crashes. + + + + + + Fix potential infinite loop in regular expression execution (Tom Lane) + + + + A search pattern that can apparently match a zero-length string, but + actually doesn't match because of a back reference, could lead to an + infinite loop. + + + + + + Fix low-memory failures in regular expression compilation + (Andreas Seltenreich) + + + + + + Fix low-probability memory leak during regular expression execution + (Tom Lane) + + + + + + Fix rare low-memory failure in lock cleanup during transaction abort + (Tom Lane) + + + + + + Fix unexpected out-of-memory situation during sort errors + when using tuplestores with small work_mem settings (Tom + Lane) + + + + + + Fix very-low-probability stack overrun in qsort (Tom Lane) + + + + + + Fix invalid memory alloc request size failure in hash joins + with large work_mem settings (Tomas Vondra, Tom Lane) + + + + + + Fix assorted planner bugs (Tom Lane) + + + + These mistakes could lead to incorrect query plans that would give wrong + answers, or to assertion failures in assert-enabled builds, or to odd + planner errors such as could not devise a query plan for the + given query, could not find pathkey item to + sort, plan should not reference subplan's variable, + or failed to assign all NestLoopParams to plan nodes. + Thanks are due to Andreas Seltenreich and Piotr Stefaniak for fuzz + testing that exposed these problems. + + + + + + Use fuzzy path cost tiebreaking rule in all supported branches (Tom Lane) + + + + This change is meant to avoid platform-specific behavior when + alternative plan choices have effectively-identical estimated costs. + + + + + + During postmaster shutdown, ensure that per-socket lock files are + removed and listen sockets are closed before we remove + the postmaster.pid file (Tom Lane) + + + + This avoids race-condition failures if an external script attempts to + start a new postmaster as soon as pg_ctl stop returns. + + + + + + Fix postmaster's handling of a startup-process crash during crash + recovery (Tom Lane) + + + + If, during a crash recovery cycle, the startup process crashes without + having restored database consistency, we'd try to launch a new startup + process, which typically would just crash again, leading to an infinite + loop. + + + + + + Do not print a WARNING when an autovacuum worker is already + gone when we attempt to signal it, and reduce log verbosity for such + signals (Tom Lane) + + + + + + Prevent autovacuum launcher from sleeping unduly long if the server + clock is moved backwards a large amount (Álvaro Herrera) + + + + + + Ensure that cleanup of a GIN index's pending-insertions list is + interruptable by cancel requests (Jeff Janes) + + + + + + Allow all-zeroes pages in GIN indexes to be reused (Heikki Linnakangas) + + + + Such a page might be left behind after a crash. + + + + + + Fix off-by-one error that led to otherwise-harmless warnings + about apparent wraparound in subtrans/multixact truncation + (Thomas Munro) + + + + + + Fix misreporting of CONTINUE and MOVE statement + types in PL/pgSQL's error context messages + (Pavel Stehule, Tom Lane) + + + + + + Fix some places in PL/Tcl that neglected to check for + failure of malloc() calls (Michael Paquier, Álvaro + Herrera) + + + + + + Improve libpq's handling of out-of-memory conditions + (Michael Paquier, Heikki Linnakangas) + + + + + + Fix memory leaks and missing out-of-memory checks + in ecpg (Michael Paquier) + + + + + + Fix psql's code for locale-aware formatting of numeric + output (Tom Lane) + + + + The formatting code invoked by \pset numericlocale on + did the wrong thing for some uncommon cases such as numbers with an + exponent but no decimal point. It could also mangle already-localized + output from the money data type. + + + + + + Prevent crash in psql's \c command when + there is no current connection (Noah Misch) + + + + + + Ensure that temporary files created during a pg_dump + run with tar-format output are not world-readable (Michael + Paquier) + + + + + + Fix pg_dump and pg_upgrade to support + cases where the postgres or template1 database + is in a non-default tablespace (Marti Raudsepp, Bruce Momjian) + + + + + + Fix pg_dump to handle object privileges sanely when + dumping from a server too old to have a particular privilege type + (Tom Lane) + + + + When dumping functions or procedural languages from pre-7.3 + servers, pg_dump would + produce GRANT/REVOKE commands that revoked the + owner's grantable privileges and instead granted all privileges + to PUBLIC. Since the privileges involved are + just USAGE and EXECUTE, this isn't a security + problem, but it's certainly a surprising representation of the older + systems' behavior. Fix it to leave the default privilege state alone + in these cases. + + + + + + Fix pg_dump to dump shell types (Tom Lane) + + + + Shell types (that is, not-yet-fully-defined types) aren't useful for + much, but nonetheless pg_dump should dump them. + + + + + + Fix spinlock assembly code for PPC hardware to be compatible + with AIX's native assembler (Tom Lane) + + + + Building with gcc didn't work if gcc + had been configured to use the native assembler, which is becoming more + common. + + + + + + On AIX, test the -qlonglong compiler option + rather than just assuming it's safe to use (Noah Misch) + + + + + + On AIX, use -Wl,-brtllib link option to allow + symbols to be resolved at runtime (Noah Misch) + + + + Perl relies on this ability in 5.8.0 and later. + + + + + + Avoid use of inline functions when compiling with + 32-bit xlc, due to compiler bugs (Noah Misch) + + + + + + Use librt for sched_yield() when necessary, + which it is on some Solaris versions (Oskari Saarenmaa) + + + + + + Fix Windows install.bat script to handle target directory + names that contain spaces (Heikki Linnakangas) + + + + + + Make the numeric form of the PostgreSQL version number + (e.g., 90405) readily available to extension Makefiles, + as a variable named VERSION_NUM (Michael Paquier) + + + + + + Update time zone data files to tzdata release 2015g for + DST law changes in Cayman Islands, Fiji, Moldova, Morocco, Norfolk + Island, North Korea, Turkey, and Uruguay. There is a new zone name + America/Fort_Nelson for the Canadian Northern Rockies. + + + + + + + + Release 9.0.22 diff --git a/doc/src/sgml/release-9.1.sgml b/doc/src/sgml/release-9.1.sgml index a97ec57276f9c..fde6b61bced07 100644 --- a/doc/src/sgml/release-9.1.sgml +++ b/doc/src/sgml/release-9.1.sgml @@ -1,6 +1,567 @@ + + Release 9.1.19 + + + Release Date + 2015-10-08 + + + + This release contains a variety of fixes from 9.1.18. + For information about new features in the 9.1 major release, see + . + + + + Migration to Version 9.1.19 + + + A dump/restore is not required for those running 9.1.X. + + + + However, if you are upgrading from a version earlier than 9.1.16, + see . + + + + + + Changes + + + + + + Fix contrib/pgcrypto to detect and report + too-short crypt() salts (Josh Kupershmidt) + + + + Certain invalid salt arguments crashed the server or disclosed a few + bytes of server memory. We have not ruled out the viability of + attacks that arrange for presence of confidential information in the + disclosed bytes, but they seem unlikely. (CVE-2015-5288) + + + + + + Fix subtransaction cleanup after a portal (cursor) belonging to an + outer subtransaction fails (Tom Lane, Michael Paquier) + + + + A function executed in an outer-subtransaction cursor could cause an + assertion failure or crash by referencing a relation created within an + inner subtransaction. + + + + + + Fix insertion of relations into the relation cache init file + (Tom Lane) + + + + An oversight in a patch in the most recent minor releases + caused pg_trigger_tgrelid_tgname_index to be omitted + from the init file. Subsequent sessions detected this, then deemed the + init file to be broken and silently ignored it, resulting in a + significant degradation in session startup time. In addition to fixing + the bug, install some guards so that any similar future mistake will be + more obvious. + + + + + + Avoid O(N^2) behavior when inserting many tuples into a SPI query + result (Neil Conway) + + + + + + Improve LISTEN startup time when there are many unread + notifications (Matt Newell) + + + + + + Back-patch 9.3-era addition of per-resource-owner lock caches + (Jeff Janes) + + + + This substantially improves performance when pg_dump + tries to dump a large number of tables. + + + + + + Disable SSL renegotiation by default (Michael Paquier, Andres Freund) + + + + While use of SSL renegotiation is a good idea in theory, we have seen + too many bugs in practice, both in the underlying OpenSSL library and + in our usage of it. Renegotiation will be removed entirely in 9.5 and + later. In the older branches, just change the default value + of ssl_renegotiation_limit to zero (disabled). + + + + + + Lower the minimum values of the *_freeze_max_age parameters + (Andres Freund) + + + + This is mainly to make tests of related behavior less time-consuming, + but it may also be of value for installations with limited disk space. + + + + + + Limit the maximum value of wal_buffers to 2GB to avoid + server crashes (Josh Berkus) + + + + + + Fix rare internal overflow in multiplication of numeric values + (Dean Rasheed) + + + + + + Guard against hard-to-reach stack overflows involving record types, + range types, json, jsonb, tsquery, + ltxtquery and query_int (Noah Misch) + + + + + + Fix handling of DOW and DOY in datetime input + (Greg Stark) + + + + These tokens aren't meant to be used in datetime values, but previously + they resulted in opaque internal error messages rather + than invalid input syntax. + + + + + + Add more query-cancel checks to regular expression matching (Tom Lane) + + + + + + Add recursion depth protections to regular expression, SIMILAR + TO, and LIKE matching (Tom Lane) + + + + Suitable search patterns and a low stack depth limit could lead to + stack-overrun crashes. + + + + + + Fix potential infinite loop in regular expression execution (Tom Lane) + + + + A search pattern that can apparently match a zero-length string, but + actually doesn't match because of a back reference, could lead to an + infinite loop. + + + + + + Fix low-memory failures in regular expression compilation + (Andreas Seltenreich) + + + + + + Fix low-probability memory leak during regular expression execution + (Tom Lane) + + + + + + Fix rare low-memory failure in lock cleanup during transaction abort + (Tom Lane) + + + + + + Fix unexpected out-of-memory situation during sort errors + when using tuplestores with small work_mem settings (Tom + Lane) + + + + + + Fix very-low-probability stack overrun in qsort (Tom Lane) + + + + + + Fix invalid memory alloc request size failure in hash joins + with large work_mem settings (Tomas Vondra, Tom Lane) + + + + + + Fix assorted planner bugs (Tom Lane) + + + + These mistakes could lead to incorrect query plans that would give wrong + answers, or to assertion failures in assert-enabled builds, or to odd + planner errors such as could not devise a query plan for the + given query, could not find pathkey item to + sort, plan should not reference subplan's variable, + or failed to assign all NestLoopParams to plan nodes. + Thanks are due to Andreas Seltenreich and Piotr Stefaniak for fuzz + testing that exposed these problems. + + + + + + + + Use fuzzy path cost tiebreaking rule in all supported branches (Tom Lane) + + + + This change is meant to avoid platform-specific behavior when + alternative plan choices have effectively-identical estimated costs. + + + + + + Ensure standby promotion trigger files are removed at postmaster + startup (Michael Paquier, Fujii Masao) + + + + This prevents unwanted promotion from occurring if these files appear + in a database backup that is used to initialize a new standby server. + + + + + + During postmaster shutdown, ensure that per-socket lock files are + removed and listen sockets are closed before we remove + the postmaster.pid file (Tom Lane) + + + + This avoids race-condition failures if an external script attempts to + start a new postmaster as soon as pg_ctl stop returns. + + + + + + Fix postmaster's handling of a startup-process crash during crash + recovery (Tom Lane) + + + + If, during a crash recovery cycle, the startup process crashes without + having restored database consistency, we'd try to launch a new startup + process, which typically would just crash again, leading to an infinite + loop. + + + + + + Do not print a WARNING when an autovacuum worker is already + gone when we attempt to signal it, and reduce log verbosity for such + signals (Tom Lane) + + + + + + Prevent autovacuum launcher from sleeping unduly long if the server + clock is moved backwards a large amount (Álvaro Herrera) + + + + + + Ensure that cleanup of a GIN index's pending-insertions list is + interruptable by cancel requests (Jeff Janes) + + + + + + Allow all-zeroes pages in GIN indexes to be reused (Heikki Linnakangas) + + + + Such a page might be left behind after a crash. + + + + + + Fix off-by-one error that led to otherwise-harmless warnings + about apparent wraparound in subtrans/multixact truncation + (Thomas Munro) + + + + + + Fix misreporting of CONTINUE and MOVE statement + types in PL/pgSQL's error context messages + (Pavel Stehule, Tom Lane) + + + + + + Fix PL/Perl to handle non-ASCII error + message texts correctly (Alex Hunsaker) + + + + + + Fix PL/Python crash when returning the string + representation of a record result (Tom Lane) + + + + + + Fix some places in PL/Tcl that neglected to check for + failure of malloc() calls (Michael Paquier, Álvaro + Herrera) + + + + + + In contrib/isn, fix output of ISBN-13 numbers that begin + with 979 (Fabien Coelho) + + + + EANs beginning with 979 (but not 9790) are considered ISBNs, but they + must be printed in the new 13-digit format, not the 10-digit format. + + + + + + Improve libpq's handling of out-of-memory conditions + (Michael Paquier, Heikki Linnakangas) + + + + + + Fix memory leaks and missing out-of-memory checks + in ecpg (Michael Paquier) + + + + + + Fix psql's code for locale-aware formatting of numeric + output (Tom Lane) + + + + The formatting code invoked by \pset numericlocale on + did the wrong thing for some uncommon cases such as numbers with an + exponent but no decimal point. It could also mangle already-localized + output from the money data type. + + + + + + Prevent crash in psql's \c command when + there is no current connection (Noah Misch) + + + + + + Fix selection of default zlib compression level + in pg_dump's directory output format (Andrew Dunstan) + + + + + + Ensure that temporary files created during a pg_dump + run with tar-format output are not world-readable (Michael + Paquier) + + + + + + Fix pg_dump and pg_upgrade to support + cases where the postgres or template1 database + is in a non-default tablespace (Marti Raudsepp, Bruce Momjian) + + + + + + Fix pg_dump to handle object privileges sanely when + dumping from a server too old to have a particular privilege type + (Tom Lane) + + + + When dumping functions or procedural languages from pre-7.3 + servers, pg_dump would + produce GRANT/REVOKE commands that revoked the + owner's grantable privileges and instead granted all privileges + to PUBLIC. Since the privileges involved are + just USAGE and EXECUTE, this isn't a security + problem, but it's certainly a surprising representation of the older + systems' behavior. Fix it to leave the default privilege state alone + in these cases. + + + + + + Fix pg_dump to dump shell types (Tom Lane) + + + + Shell types (that is, not-yet-fully-defined types) aren't useful for + much, but nonetheless pg_dump should dump them. + + + + + + Fix assorted minor memory leaks in pg_dump and other + client-side programs (Michael Paquier) + + + + + + Fix spinlock assembly code for PPC hardware to be compatible + with AIX's native assembler (Tom Lane) + + + + Building with gcc didn't work if gcc + had been configured to use the native assembler, which is becoming more + common. + + + + + + On AIX, test the -qlonglong compiler option + rather than just assuming it's safe to use (Noah Misch) + + + + + + On AIX, use -Wl,-brtllib link option to allow + symbols to be resolved at runtime (Noah Misch) + + + + Perl relies on this ability in 5.8.0 and later. + + + + + + Avoid use of inline functions when compiling with + 32-bit xlc, due to compiler bugs (Noah Misch) + + + + + + Use librt for sched_yield() when necessary, + which it is on some Solaris versions (Oskari Saarenmaa) + + + + + + Fix Windows install.bat script to handle target directory + names that contain spaces (Heikki Linnakangas) + + + + + + Make the numeric form of the PostgreSQL version number + (e.g., 90405) readily available to extension Makefiles, + as a variable named VERSION_NUM (Michael Paquier) + + + + + + Update time zone data files to tzdata release 2015g for + DST law changes in Cayman Islands, Fiji, Moldova, Morocco, Norfolk + Island, North Korea, Turkey, and Uruguay. There is a new zone name + America/Fort_Nelson for the Canadian Northern Rockies. + + + + + + + + Release 9.1.18 diff --git a/doc/src/sgml/release-9.2.sgml b/doc/src/sgml/release-9.2.sgml index d91328e7c1efd..4bfede5bc0e60 100644 --- a/doc/src/sgml/release-9.2.sgml +++ b/doc/src/sgml/release-9.2.sgml @@ -1,6 +1,603 @@ + + Release 9.2.14 + + + Release Date + 2015-10-08 + + + + This release contains a variety of fixes from 9.2.13. + For information about new features in the 9.2 major release, see + . + + + + Migration to Version 9.2.14 + + + A dump/restore is not required for those running 9.2.X. + + + + However, if you are upgrading from a version earlier than 9.2.11, + see . + + + + + + Changes + + + + + + Fix contrib/pgcrypto to detect and report + too-short crypt() salts (Josh Kupershmidt) + + + + Certain invalid salt arguments crashed the server or disclosed a few + bytes of server memory. We have not ruled out the viability of + attacks that arrange for presence of confidential information in the + disclosed bytes, but they seem unlikely. (CVE-2015-5288) + + + + + + Fix subtransaction cleanup after a portal (cursor) belonging to an + outer subtransaction fails (Tom Lane, Michael Paquier) + + + + A function executed in an outer-subtransaction cursor could cause an + assertion failure or crash by referencing a relation created within an + inner subtransaction. + + + + + + Fix insertion of relations into the relation cache init file + (Tom Lane) + + + + An oversight in a patch in the most recent minor releases + caused pg_trigger_tgrelid_tgname_index to be omitted + from the init file. Subsequent sessions detected this, then deemed the + init file to be broken and silently ignored it, resulting in a + significant degradation in session startup time. In addition to fixing + the bug, install some guards so that any similar future mistake will be + more obvious. + + + + + + Avoid O(N^2) behavior when inserting many tuples into a SPI query + result (Neil Conway) + + + + + + Improve LISTEN startup time when there are many unread + notifications (Matt Newell) + + + + + + + + Back-patch 9.3-era addition of per-resource-owner lock caches + (Jeff Janes) + + + + This substantially improves performance when pg_dump + tries to dump a large number of tables. + + + + + + Disable SSL renegotiation by default (Michael Paquier, Andres Freund) + + + + While use of SSL renegotiation is a good idea in theory, we have seen + too many bugs in practice, both in the underlying OpenSSL library and + in our usage of it. Renegotiation will be removed entirely in 9.5 and + later. In the older branches, just change the default value + of ssl_renegotiation_limit to zero (disabled). + + + + + + Lower the minimum values of the *_freeze_max_age parameters + (Andres Freund) + + + + This is mainly to make tests of related behavior less time-consuming, + but it may also be of value for installations with limited disk space. + + + + + + Limit the maximum value of wal_buffers to 2GB to avoid + server crashes (Josh Berkus) + + + + + + Fix rare internal overflow in multiplication of numeric values + (Dean Rasheed) + + + + + + Guard against hard-to-reach stack overflows involving record types, + range types, json, jsonb, tsquery, + ltxtquery and query_int (Noah Misch) + + + + + + Fix handling of DOW and DOY in datetime input + (Greg Stark) + + + + These tokens aren't meant to be used in datetime values, but previously + they resulted in opaque internal error messages rather + than invalid input syntax. + + + + + + Add more query-cancel checks to regular expression matching (Tom Lane) + + + + + + Add recursion depth protections to regular expression, SIMILAR + TO, and LIKE matching (Tom Lane) + + + + Suitable search patterns and a low stack depth limit could lead to + stack-overrun crashes. + + + + + + Fix potential infinite loop in regular expression execution (Tom Lane) + + + + A search pattern that can apparently match a zero-length string, but + actually doesn't match because of a back reference, could lead to an + infinite loop. + + + + + + In regular expression execution, correctly record match data for + capturing parentheses within a quantifier even when the match is + zero-length (Tom Lane) + + + + + + Fix low-memory failures in regular expression compilation + (Andreas Seltenreich) + + + + + + Fix low-probability memory leak during regular expression execution + (Tom Lane) + + + + + + Fix rare low-memory failure in lock cleanup during transaction abort + (Tom Lane) + + + + + + Fix unexpected out-of-memory situation during sort errors + when using tuplestores with small work_mem settings (Tom + Lane) + + + + + + Fix very-low-probability stack overrun in qsort (Tom Lane) + + + + + + Fix invalid memory alloc request size failure in hash joins + with large work_mem settings (Tomas Vondra, Tom Lane) + + + + + + Fix assorted planner bugs (Tom Lane) + + + + These mistakes could lead to incorrect query plans that would give wrong + answers, or to assertion failures in assert-enabled builds, or to odd + planner errors such as could not devise a query plan for the + given query, could not find pathkey item to + sort, plan should not reference subplan's variable, + or failed to assign all NestLoopParams to plan nodes. + Thanks are due to Andreas Seltenreich and Piotr Stefaniak for fuzz + testing that exposed these problems. + + + + + + Improve planner's performance for UPDATE/DELETE + on large inheritance sets (Tom Lane, Dean Rasheed) + + + + + + Ensure standby promotion trigger files are removed at postmaster + startup (Michael Paquier, Fujii Masao) + + + + This prevents unwanted promotion from occurring if these files appear + in a database backup that is used to initialize a new standby server. + + + + + + During postmaster shutdown, ensure that per-socket lock files are + removed and listen sockets are closed before we remove + the postmaster.pid file (Tom Lane) + + + + This avoids race-condition failures if an external script attempts to + start a new postmaster as soon as pg_ctl stop returns. + + + + + + Fix postmaster's handling of a startup-process crash during crash + recovery (Tom Lane) + + + + If, during a crash recovery cycle, the startup process crashes without + having restored database consistency, we'd try to launch a new startup + process, which typically would just crash again, leading to an infinite + loop. + + + + + + Do not print a WARNING when an autovacuum worker is already + gone when we attempt to signal it, and reduce log verbosity for such + signals (Tom Lane) + + + + + + Prevent autovacuum launcher from sleeping unduly long if the server + clock is moved backwards a large amount (Álvaro Herrera) + + + + + + Ensure that cleanup of a GIN index's pending-insertions list is + interruptable by cancel requests (Jeff Janes) + + + + + + Allow all-zeroes pages in GIN indexes to be reused (Heikki Linnakangas) + + + + Such a page might be left behind after a crash. + + + + + + Fix handling of all-zeroes pages in SP-GiST indexes (Heikki + Linnakangas) + + + + VACUUM attempted to recycle such pages, but did so in a + way that wasn't crash-safe. + + + + + + Fix off-by-one error that led to otherwise-harmless warnings + about apparent wraparound in subtrans/multixact truncation + (Thomas Munro) + + + + + + Fix misreporting of CONTINUE and MOVE statement + types in PL/pgSQL's error context messages + (Pavel Stehule, Tom Lane) + + + + + + Fix PL/Perl to handle non-ASCII error + message texts correctly (Alex Hunsaker) + + + + + + Fix PL/Python crash when returning the string + representation of a record result (Tom Lane) + + + + + + Fix some places in PL/Tcl that neglected to check for + failure of malloc() calls (Michael Paquier, Álvaro + Herrera) + + + + + + In contrib/isn, fix output of ISBN-13 numbers that begin + with 979 (Fabien Coelho) + + + + EANs beginning with 979 (but not 9790) are considered ISBNs, but they + must be printed in the new 13-digit format, not the 10-digit format. + + + + + + + + Fix contrib/sepgsql's handling of SELECT INTO + statements (Kohei KaiGai) + + + + + + Improve libpq's handling of out-of-memory conditions + (Michael Paquier, Heikki Linnakangas) + + + + + + Fix memory leaks and missing out-of-memory checks + in ecpg (Michael Paquier) + + + + + + Fix psql's code for locale-aware formatting of numeric + output (Tom Lane) + + + + The formatting code invoked by \pset numericlocale on + did the wrong thing for some uncommon cases such as numbers with an + exponent but no decimal point. It could also mangle already-localized + output from the money data type. + + + + + + Prevent crash in psql's \c command when + there is no current connection (Noah Misch) + + + + + + Make pg_dump handle inherited NOT VALID + check constraints correctly (Tom Lane) + + + + + + Fix selection of default zlib compression level + in pg_dump's directory output format (Andrew Dunstan) + + + + + + Ensure that temporary files created during a pg_dump + run with tar-format output are not world-readable (Michael + Paquier) + + + + + + Fix pg_dump and pg_upgrade to support + cases where the postgres or template1 database + is in a non-default tablespace (Marti Raudsepp, Bruce Momjian) + + + + + + Fix pg_dump to handle object privileges sanely when + dumping from a server too old to have a particular privilege type + (Tom Lane) + + + + When dumping data types from pre-9.2 servers, and when dumping + functions or procedural languages from pre-7.3 + servers, pg_dump would + produce GRANT/REVOKE commands that revoked the + owner's grantable privileges and instead granted all privileges + to PUBLIC. Since the privileges involved are + just USAGE and EXECUTE, this isn't a security + problem, but it's certainly a surprising representation of the older + systems' behavior. Fix it to leave the default privilege state alone + in these cases. + + + + + + Fix pg_dump to dump shell types (Tom Lane) + + + + Shell types (that is, not-yet-fully-defined types) aren't useful for + much, but nonetheless pg_dump should dump them. + + + + + + Fix assorted minor memory leaks in pg_dump and other + client-side programs (Michael Paquier) + + + + + + Fix spinlock assembly code for PPC hardware to be compatible + with AIX's native assembler (Tom Lane) + + + + Building with gcc didn't work if gcc + had been configured to use the native assembler, which is becoming more + common. + + + + + + On AIX, test the -qlonglong compiler option + rather than just assuming it's safe to use (Noah Misch) + + + + + + On AIX, use -Wl,-brtllib link option to allow + symbols to be resolved at runtime (Noah Misch) + + + + Perl relies on this ability in 5.8.0 and later. + + + + + + Avoid use of inline functions when compiling with + 32-bit xlc, due to compiler bugs (Noah Misch) + + + + + + Use librt for sched_yield() when necessary, + which it is on some Solaris versions (Oskari Saarenmaa) + + + + + + Fix Windows install.bat script to handle target directory + names that contain spaces (Heikki Linnakangas) + + + + + + Make the numeric form of the PostgreSQL version number + (e.g., 90405) readily available to extension Makefiles, + as a variable named VERSION_NUM (Michael Paquier) + + + + + + Update time zone data files to tzdata release 2015g for + DST law changes in Cayman Islands, Fiji, Moldova, Morocco, Norfolk + Island, North Korea, Turkey, and Uruguay. There is a new zone name + America/Fort_Nelson for the Canadian Northern Rockies. + + + + + + + + Release 9.2.13 diff --git a/doc/src/sgml/release-9.3.sgml b/doc/src/sgml/release-9.3.sgml index 6aafbd73071ab..1ac6abe632a95 100644 --- a/doc/src/sgml/release-9.3.sgml +++ b/doc/src/sgml/release-9.3.sgml @@ -1,6 +1,635 @@ + + Release 9.3.10 + + + Release Date + 2015-10-08 + + + + This release contains a variety of fixes from 9.3.9. + For information about new features in the 9.3 major release, see + . + + + + Migration to Version 9.3.10 + + + A dump/restore is not required for those running 9.3.X. + + + + However, if you are upgrading from a version earlier than 9.3.9, + see . + + + + + + Changes + + + + + + Guard against stack overflows in json parsing + (Oskari Saarenmaa) + + + + If an application constructs PostgreSQL json + or jsonb values from arbitrary user input, the application's + users can reliably crash the PostgreSQL server, causing momentary + denial of service. (CVE-2015-5289) + + + + + + Fix contrib/pgcrypto to detect and report + too-short crypt() salts (Josh Kupershmidt) + + + + Certain invalid salt arguments crashed the server or disclosed a few + bytes of server memory. We have not ruled out the viability of + attacks that arrange for presence of confidential information in the + disclosed bytes, but they seem unlikely. (CVE-2015-5288) + + + + + + Fix subtransaction cleanup after a portal (cursor) belonging to an + outer subtransaction fails (Tom Lane, Michael Paquier) + + + + A function executed in an outer-subtransaction cursor could cause an + assertion failure or crash by referencing a relation created within an + inner subtransaction. + + + + + + Ensure all relations referred to by an updatable view are properly + locked during an update statement (Dean Rasheed) + + + + + + Fix insertion of relations into the relation cache init file + (Tom Lane) + + + + An oversight in a patch in the most recent minor releases + caused pg_trigger_tgrelid_tgname_index to be omitted + from the init file. Subsequent sessions detected this, then deemed the + init file to be broken and silently ignored it, resulting in a + significant degradation in session startup time. In addition to fixing + the bug, install some guards so that any similar future mistake will be + more obvious. + + + + + + Avoid O(N^2) behavior when inserting many tuples into a SPI query + result (Neil Conway) + + + + + + Improve LISTEN startup time when there are many unread + notifications (Matt Newell) + + + + + + Fix performance problem when a session alters large numbers of foreign + key constraints (Jan Wieck, Tom Lane) + + + + This was seen primarily when restoring pg_dump output + for databases with many thousands of tables. + + + + + + Disable SSL renegotiation by default (Michael Paquier, Andres Freund) + + + + While use of SSL renegotiation is a good idea in theory, we have seen + too many bugs in practice, both in the underlying OpenSSL library and + in our usage of it. Renegotiation will be removed entirely in 9.5 and + later. In the older branches, just change the default value + of ssl_renegotiation_limit to zero (disabled). + + + + + + Lower the minimum values of the *_freeze_max_age parameters + (Andres Freund) + + + + This is mainly to make tests of related behavior less time-consuming, + but it may also be of value for installations with limited disk space. + + + + + + Limit the maximum value of wal_buffers to 2GB to avoid + server crashes (Josh Berkus) + + + + + + Avoid logging complaints when a parameter that can only be set at + server start appears multiple times in postgresql.conf, + and fix counting of line numbers after an include_dir + directive (Tom Lane) + + + + + + Fix rare internal overflow in multiplication of numeric values + (Dean Rasheed) + + + + + + Guard against hard-to-reach stack overflows involving record types, + range types, json, jsonb, tsquery, + ltxtquery and query_int (Noah Misch) + + + + + + Fix handling of DOW and DOY in datetime input + (Greg Stark) + + + + These tokens aren't meant to be used in datetime values, but previously + they resulted in opaque internal error messages rather + than invalid input syntax. + + + + + + Add more query-cancel checks to regular expression matching (Tom Lane) + + + + + + Add recursion depth protections to regular expression, SIMILAR + TO, and LIKE matching (Tom Lane) + + + + Suitable search patterns and a low stack depth limit could lead to + stack-overrun crashes. + + + + + + Fix potential infinite loop in regular expression execution (Tom Lane) + + + + A search pattern that can apparently match a zero-length string, but + actually doesn't match because of a back reference, could lead to an + infinite loop. + + + + + + In regular expression execution, correctly record match data for + capturing parentheses within a quantifier even when the match is + zero-length (Tom Lane) + + + + + + Fix low-memory failures in regular expression compilation + (Andreas Seltenreich) + + + + + + Fix low-probability memory leak during regular expression execution + (Tom Lane) + + + + + + Fix rare low-memory failure in lock cleanup during transaction abort + (Tom Lane) + + + + + + Fix unexpected out-of-memory situation during sort errors + when using tuplestores with small work_mem settings (Tom + Lane) + + + + + + Fix very-low-probability stack overrun in qsort (Tom Lane) + + + + + + Fix invalid memory alloc request size failure in hash joins + with large work_mem settings (Tomas Vondra, Tom Lane) + + + + + + Fix assorted planner bugs (Tom Lane) + + + + These mistakes could lead to incorrect query plans that would give wrong + answers, or to assertion failures in assert-enabled builds, or to odd + planner errors such as could not devise a query plan for the + given query, could not find pathkey item to + sort, plan should not reference subplan's variable, + or failed to assign all NestLoopParams to plan nodes. + Thanks are due to Andreas Seltenreich and Piotr Stefaniak for fuzz + testing that exposed these problems. + + + + + + Improve planner's performance for UPDATE/DELETE + on large inheritance sets (Tom Lane, Dean Rasheed) + + + + + + Ensure standby promotion trigger files are removed at postmaster + startup (Michael Paquier, Fujii Masao) + + + + This prevents unwanted promotion from occurring if these files appear + in a database backup that is used to initialize a new standby server. + + + + + + During postmaster shutdown, ensure that per-socket lock files are + removed and listen sockets are closed before we remove + the postmaster.pid file (Tom Lane) + + + + This avoids race-condition failures if an external script attempts to + start a new postmaster as soon as pg_ctl stop returns. + + + + + + Fix postmaster's handling of a startup-process crash during crash + recovery (Tom Lane) + + + + If, during a crash recovery cycle, the startup process crashes without + having restored database consistency, we'd try to launch a new startup + process, which typically would just crash again, leading to an infinite + loop. + + + + + + Make emergency autovacuuming for multixact wraparound more robust + (Andres Freund) + + + + + + Do not print a WARNING when an autovacuum worker is already + gone when we attempt to signal it, and reduce log verbosity for such + signals (Tom Lane) + + + + + + Prevent autovacuum launcher from sleeping unduly long if the server + clock is moved backwards a large amount (Álvaro Herrera) + + + + + + Ensure that cleanup of a GIN index's pending-insertions list is + interruptable by cancel requests (Jeff Janes) + + + + + + Allow all-zeroes pages in GIN indexes to be reused (Heikki Linnakangas) + + + + Such a page might be left behind after a crash. + + + + + + Fix handling of all-zeroes pages in SP-GiST indexes (Heikki + Linnakangas) + + + + VACUUM attempted to recycle such pages, but did so in a + way that wasn't crash-safe. + + + + + + Fix off-by-one error that led to otherwise-harmless warnings + about apparent wraparound in subtrans/multixact truncation + (Thomas Munro) + + + + + + Fix misreporting of CONTINUE and MOVE statement + types in PL/pgSQL's error context messages + (Pavel Stehule, Tom Lane) + + + + + + Fix PL/Perl to handle non-ASCII error + message texts correctly (Alex Hunsaker) + + + + + + Fix PL/Python crash when returning the string + representation of a record result (Tom Lane) + + + + + + Fix some places in PL/Tcl that neglected to check for + failure of malloc() calls (Michael Paquier, Álvaro + Herrera) + + + + + + In contrib/isn, fix output of ISBN-13 numbers that begin + with 979 (Fabien Coelho) + + + + EANs beginning with 979 (but not 9790) are considered ISBNs, but they + must be printed in the new 13-digit format, not the 10-digit format. + + + + + + Improve contrib/postgres_fdw's handling of + collation-related decisions (Tom Lane) + + + + The main user-visible effect is expected to be that comparisons + involving varchar columns will be sent to the remote server + for execution in more cases than before. + + + + + + Improve libpq's handling of out-of-memory conditions + (Michael Paquier, Heikki Linnakangas) + + + + + + Fix memory leaks and missing out-of-memory checks + in ecpg (Michael Paquier) + + + + + + Fix psql's code for locale-aware formatting of numeric + output (Tom Lane) + + + + The formatting code invoked by \pset numericlocale on + did the wrong thing for some uncommon cases such as numbers with an + exponent but no decimal point. It could also mangle already-localized + output from the money data type. + + + + + + Prevent crash in psql's \c command when + there is no current connection (Noah Misch) + + + + + + Make pg_dump handle inherited NOT VALID + check constraints correctly (Tom Lane) + + + + + + Fix selection of default zlib compression level + in pg_dump's directory output format (Andrew Dunstan) + + + + + + Ensure that temporary files created during a pg_dump + run with tar-format output are not world-readable (Michael + Paquier) + + + + + + Fix pg_dump and pg_upgrade to support + cases where the postgres or template1 database + is in a non-default tablespace (Marti Raudsepp, Bruce Momjian) + + + + + + Fix pg_dump to handle object privileges sanely when + dumping from a server too old to have a particular privilege type + (Tom Lane) + + + + When dumping data types from pre-9.2 servers, and when dumping + functions or procedural languages from pre-7.3 + servers, pg_dump would + produce GRANT/REVOKE commands that revoked the + owner's grantable privileges and instead granted all privileges + to PUBLIC. Since the privileges involved are + just USAGE and EXECUTE, this isn't a security + problem, but it's certainly a surprising representation of the older + systems' behavior. Fix it to leave the default privilege state alone + in these cases. + + + + + + Fix pg_dump to dump shell types (Tom Lane) + + + + Shell types (that is, not-yet-fully-defined types) aren't useful for + much, but nonetheless pg_dump should dump them. + + + + + + Fix assorted minor memory leaks in pg_dump and other + client-side programs (Michael Paquier) + + + + + + Fix spinlock assembly code for PPC hardware to be compatible + with AIX's native assembler (Tom Lane) + + + + Building with gcc didn't work if gcc + had been configured to use the native assembler, which is becoming more + common. + + + + + + On AIX, test the -qlonglong compiler option + rather than just assuming it's safe to use (Noah Misch) + + + + + + On AIX, use -Wl,-brtllib link option to allow + symbols to be resolved at runtime (Noah Misch) + + + + Perl relies on this ability in 5.8.0 and later. + + + + + + Avoid use of inline functions when compiling with + 32-bit xlc, due to compiler bugs (Noah Misch) + + + + + + Use librt for sched_yield() when necessary, + which it is on some Solaris versions (Oskari Saarenmaa) + + + + + + Fix Windows install.bat script to handle target directory + names that contain spaces (Heikki Linnakangas) + + + + + + Make the numeric form of the PostgreSQL version number + (e.g., 90405) readily available to extension Makefiles, + as a variable named VERSION_NUM (Michael Paquier) + + + + + + Update time zone data files to tzdata release 2015g for + DST law changes in Cayman Islands, Fiji, Moldova, Morocco, Norfolk + Island, North Korea, Turkey, and Uruguay. There is a new zone name + America/Fort_Nelson for the Canadian Northern Rockies. + + + + + + + + Release 9.3.9 diff --git a/doc/src/sgml/release-9.4.sgml b/doc/src/sgml/release-9.4.sgml index 0b63efc7a3ab8..4fd1feb6fa9a2 100644 --- a/doc/src/sgml/release-9.4.sgml +++ b/doc/src/sgml/release-9.4.sgml @@ -1,6 +1,1529 @@ + + Release 9.4.5 + + + Release Date + 2015-10-08 + + + + This release contains a variety of fixes from 9.4.4. + For information about new features in the 9.4 major release, see + . + + + + Migration to Version 9.4.5 + + + A dump/restore is not required for those running 9.4.X. + + + + However, if you are upgrading from a version earlier than 9.4.4, + see . + + + + + Changes + + + + + + + + Guard against stack overflows in json parsing + (Oskari Saarenmaa) + + + + If an application constructs PostgreSQL json + or jsonb values from arbitrary user input, the application's + users can reliably crash the PostgreSQL server, causing momentary + denial of service. (CVE-2015-5289) + + + + + + + + Fix contrib/pgcrypto to detect and report + too-short crypt() salts (Josh Kupershmidt) + + + + Certain invalid salt arguments crashed the server or disclosed a few + bytes of server memory. We have not ruled out the viability of + attacks that arrange for presence of confidential information in the + disclosed bytes, but they seem unlikely. (CVE-2015-5288) + + + + + + + + Fix subtransaction cleanup after a portal (cursor) belonging to an + outer subtransaction fails (Tom Lane, Michael Paquier) + + + + A function executed in an outer-subtransaction cursor could cause an + assertion failure or crash by referencing a relation created within an + inner subtransaction. + + + + + + + + Fix possible deadlock during WAL insertion + when commit_delay is set (Heikki Linnakangas) + + + + + + + + Ensure all relations referred to by an updatable view are properly + locked during an update statement (Dean Rasheed) + + + + + + + + Fix insertion of relations into the relation cache init file + (Tom Lane) + + + + An oversight in a patch in the most recent minor releases + caused pg_trigger_tgrelid_tgname_index to be omitted + from the init file. Subsequent sessions detected this, then deemed the + init file to be broken and silently ignored it, resulting in a + significant degradation in session startup time. In addition to fixing + the bug, install some guards so that any similar future mistake will be + more obvious. + + + + + + + + Avoid O(N^2) behavior when inserting many tuples into a SPI query + result (Neil Conway) + + + + + + + + Improve LISTEN startup time when there are many unread + notifications (Matt Newell) + + + + + + + + Fix performance problem when a session alters large numbers of foreign + key constraints (Jan Wieck, Tom Lane) + + + + This was seen primarily when restoring pg_dump output + for databases with many thousands of tables. + + + + + + + + Disable SSL renegotiation by default (Michael Paquier, Andres Freund) + + + + While use of SSL renegotiation is a good idea in theory, we have seen + too many bugs in practice, both in the underlying OpenSSL library and + in our usage of it. Renegotiation will be removed entirely in 9.5 and + later. In the older branches, just change the default value + of ssl_renegotiation_limit to zero (disabled). + + + + + + + + Lower the minimum values of the *_freeze_max_age parameters + (Andres Freund) + + + + This is mainly to make tests of related behavior less time-consuming, + but it may also be of value for installations with limited disk space. + + + + + + + + Limit the maximum value of wal_buffers to 2GB to avoid + server crashes (Josh Berkus) + + + + + + + + Avoid logging complaints when a parameter that can only be set at + server start appears multiple times in postgresql.conf, + and fix counting of line numbers after an include_dir + directive (Tom Lane) + + + + + + + + Fix rare internal overflow in multiplication of numeric values + (Dean Rasheed) + + + + + + + + Guard against hard-to-reach stack overflows involving record types, + range types, json, jsonb, tsquery, + ltxtquery and query_int (Noah Misch) + + + + + + + + Fix handling of DOW and DOY in datetime input + (Greg Stark) + + + + These tokens aren't meant to be used in datetime values, but previously + they resulted in opaque internal error messages rather + than invalid input syntax. + + + + + + + + Add more query-cancel checks to regular expression matching (Tom Lane) + + + + + + + + Add recursion depth protections to regular expression, SIMILAR + TO, and LIKE matching (Tom Lane) + + + + Suitable search patterns and a low stack depth limit could lead to + stack-overrun crashes. + + + + + + + + Fix potential infinite loop in regular expression execution (Tom Lane) + + + + A search pattern that can apparently match a zero-length string, but + actually doesn't match because of a back reference, could lead to an + infinite loop. + + + + + + + + In regular expression execution, correctly record match data for + capturing parentheses within a quantifier even when the match is + zero-length (Tom Lane) + + + + + + + + Fix low-memory failures in regular expression compilation + (Andreas Seltenreich) + + + + + + + + Fix low-probability memory leak during regular expression execution + (Tom Lane) + + + + + + + + Fix rare low-memory failure in lock cleanup during transaction abort + (Tom Lane) + + + + + + + + Fix unexpected out-of-memory situation during sort errors + when using tuplestores with small work_mem settings (Tom + Lane) + + + + + + + + Fix very-low-probability stack overrun in qsort (Tom Lane) + + + + + + + + Fix invalid memory alloc request size failure in hash joins + with large work_mem settings (Tomas Vondra, Tom Lane) + + + + + + + + Fix assorted planner bugs (Tom Lane) + + + + These mistakes could lead to incorrect query plans that would give wrong + answers, or to assertion failures in assert-enabled builds, or to odd + planner errors such as could not devise a query plan for the + given query, could not find pathkey item to + sort, plan should not reference subplan's variable, + or failed to assign all NestLoopParams to plan nodes. + Thanks are due to Andreas Seltenreich and Piotr Stefaniak for fuzz + testing that exposed these problems. + + + + + + + + Improve planner's performance for UPDATE/DELETE + on large inheritance sets (Tom Lane, Dean Rasheed) + + + + + + + + Ensure standby promotion trigger files are removed at postmaster + startup (Michael Paquier, Fujii Masao) + + + + This prevents unwanted promotion from occurring if these files appear + in a database backup that is used to initialize a new standby server. + + + + + + + + During postmaster shutdown, ensure that per-socket lock files are + removed and listen sockets are closed before we remove + the postmaster.pid file (Tom Lane) + + + + This avoids race-condition failures if an external script attempts to + start a new postmaster as soon as pg_ctl stop returns. + + + + + + + + Ensure that the postmaster does not exit until all its child processes + are gone, even in an immediate shutdown (Tom Lane) + + + + Like the previous item, this avoids possible race conditions against a + subsequently-started postmaster. + + + + + + + + Fix postmaster's handling of a startup-process crash during crash + recovery (Tom Lane) + + + + If, during a crash recovery cycle, the startup process crashes without + having restored database consistency, we'd try to launch a new startup + process, which typically would just crash again, leading to an infinite + loop. + + + + + + + + Make emergency autovacuuming for multixact wraparound more robust + (Andres Freund) + + + + + + + + Do not print a WARNING when an autovacuum worker is already + gone when we attempt to signal it, and reduce log verbosity for such + signals (Tom Lane) + + + + + + + + Prevent autovacuum launcher from sleeping unduly long if the server + clock is moved backwards a large amount (Álvaro Herrera) + + + + + + + + Ensure that cleanup of a GIN index's pending-insertions list is + interruptable by cancel requests (Jeff Janes) + + + + + + + + Allow all-zeroes pages in GIN indexes to be reused (Heikki Linnakangas) + + + + Such a page might be left behind after a crash. + + + + + + + + Fix handling of all-zeroes pages in SP-GiST indexes (Heikki + Linnakangas) + + + + VACUUM attempted to recycle such pages, but did so in a + way that wasn't crash-safe. + + + + + + + + Fix off-by-one error that led to otherwise-harmless warnings + about apparent wraparound in subtrans/multixact truncation + (Thomas Munro) + + + + + + + + Fix misreporting of CONTINUE and MOVE statement + types in PL/pgSQL's error context messages + (Pavel Stehule, Tom Lane) + + + + + + + + Fix PL/Perl to handle non-ASCII error + message texts correctly (Alex Hunsaker) + + + + + + + + Fix PL/Python crash when returning the string + representation of a record result (Tom Lane) + + + + + + + + Fix some places in PL/Tcl that neglected to check for + failure of malloc() calls (Michael Paquier, Álvaro + Herrera) + + + + + + + + In contrib/isn, fix output of ISBN-13 numbers that begin + with 979 (Fabien Coelho) + + + + EANs beginning with 979 (but not 9790) are considered ISBNs, but they + must be printed in the new 13-digit format, not the 10-digit format. + + + + + + + + Improve contrib/pg_stat_statements' handling of + query-text garbage collection (Peter Geoghegan) + + + + The external file containing query texts could bloat to very large + sizes; once it got past 1GB attempts to trim it would fail, soon + leading to situations where the file could not be read at all. + + + + + + + + Improve contrib/postgres_fdw's handling of + collation-related decisions (Tom Lane) + + + + The main user-visible effect is expected to be that comparisons + involving varchar columns will be sent to the remote server + for execution in more cases than before. + + + + + + + + Improve libpq's handling of out-of-memory conditions + (Michael Paquier, Heikki Linnakangas) + + + + + + + + Fix memory leaks and missing out-of-memory checks + in ecpg (Michael Paquier) + + + + + + + + Fix psql's code for locale-aware formatting of numeric + output (Tom Lane) + + + + The formatting code invoked by \pset numericlocale on + did the wrong thing for some uncommon cases such as numbers with an + exponent but no decimal point. It could also mangle already-localized + output from the money data type. + + + + + + + + Prevent crash in psql's \c command when + there is no current connection (Noah Misch) + + + + + + + + Make pg_dump handle inherited NOT VALID + check constraints correctly (Tom Lane) + + + + + + + + Fix selection of default zlib compression level + in pg_dump's directory output format (Andrew Dunstan) + + + + + + + + Ensure that temporary files created during a pg_dump + run with tar-format output are not world-readable (Michael + Paquier) + + + + + + + + Fix pg_dump and pg_upgrade to support + cases where the postgres or template1 database + is in a non-default tablespace (Marti Raudsepp, Bruce Momjian) + + + + + + + + Fix pg_dump to handle object privileges sanely when + dumping from a server too old to have a particular privilege type + (Tom Lane) + + + + When dumping data types from pre-9.2 servers, and when dumping + functions or procedural languages from pre-7.3 + servers, pg_dump would + produce GRANT/REVOKE commands that revoked the + owner's grantable privileges and instead granted all privileges + to PUBLIC. Since the privileges involved are + just USAGE and EXECUTE, this isn't a security + problem, but it's certainly a surprising representation of the older + systems' behavior. Fix it to leave the default privilege state alone + in these cases. + + + + + + + + Fix pg_dump to dump shell types (Tom Lane) + + + + Shell types (that is, not-yet-fully-defined types) aren't useful for + much, but nonetheless pg_dump should dump them. + + + + + + + + Fix assorted minor memory leaks in pg_dump and other + client-side programs (Michael Paquier) + + + + + + + + Fix pgbench's progress-report behavior when a query, + or pgbench itself, gets stuck (Fabien Coelho) + + + + + + + + Fix spinlock assembly code for Alpha hardware (Tom Lane) + + + + + + + + Fix spinlock assembly code for PPC hardware to be compatible + with AIX's native assembler (Tom Lane) + + + + Building with gcc didn't work if gcc + had been configured to use the native assembler, which is becoming more + common. + + + + + + + + On AIX, test the -qlonglong compiler option + rather than just assuming it's safe to use (Noah Misch) + + + + + + + + On AIX, use -Wl,-brtllib link option to allow + symbols to be resolved at runtime (Noah Misch) + + + + Perl relies on this ability in 5.8.0 and later. + + + + + + + + Avoid use of inline functions when compiling with + 32-bit xlc, due to compiler bugs (Noah Misch) + + + + + + + + Use librt for sched_yield() when necessary, + which it is on some Solaris versions (Oskari Saarenmaa) + + + + + + + + Translate encoding UHC as Windows code page 949 + (Noah Misch) + + + + This fixes presentation of non-ASCII log messages from processes that + are not attached to any particular database, such as the postmaster. + + + + + + + + On Windows, avoid failure when doing encoding conversion to UTF16 + outside a transaction, such as for log messages (Noah Misch) + + + + + + + + Fix postmaster startup failure due to not + copying setlocale()'s return value (Noah Misch) + + + + This has been reported on Windows systems with the ANSI code page set + to CP936 (Chinese (Simplified, PRC)), and may occur with + other multibyte code pages. + + + + + + + + Fix Windows install.bat script to handle target directory + names that contain spaces (Heikki Linnakangas) + + + + + + + + Make the numeric form of the PostgreSQL version number + (e.g., 90405) readily available to extension Makefiles, + as a variable named VERSION_NUM (Michael Paquier) + + + + + + + + Update time zone data files to tzdata release 2015g for + DST law changes in Cayman Islands, Fiji, Moldova, Morocco, Norfolk + Island, North Korea, Turkey, and Uruguay. There is a new zone name + America/Fort_Nelson for the Canadian Northern Rockies. + + + + + + + + Release 9.4.4 diff --git a/doc/src/sgml/release-9.5.sgml b/doc/src/sgml/release-9.5.sgml index a010ffcd0f2ab..9055387832a20 100644 --- a/doc/src/sgml/release-9.5.sgml +++ b/doc/src/sgml/release-9.5.sgml @@ -7,7 +7,7 @@ Release Date 2015-??-?? - Current as of 2015-06-01 + Current as of 2015-10-03 @@ -53,6 +53,9 @@ + Adjust operator precedence to match the SQL standard (Tom Lane) @@ -78,6 +81,19 @@ + + + Change pg_ctl's default shutdown mode from + smart to fast (Bruce Momjian) + + + + + Use assignment cast behavior for data type conversions in PL/pgSQL assignments, rather than converting to and @@ -85,7 +101,7 @@ - This change causes conversions of booleans to strings to + This change causes conversions of Booleans to strings to produce true or false, not t or f. Other type conversions may succeed in more cases than before; for example, assigning a numeric value 3.9 to @@ -97,6 +113,9 @@ + Allow characters in server command-line options to be escaped with a backslash (Andres Freund) @@ -110,6 +129,9 @@ + Change the default value of include_realm to 1, so that @@ -119,6 +141,9 @@ + Fix REASSIGN OWNED and ALTER OWNER TO @@ -128,6 +153,43 @@ + + The configuration parameter checkpoint_segments has + been removed. Its place is taken by the new + setting . If you had previously + tuned checkpoint_segments, the following formula will + give you an approximately equivalent setting: + +max_wal_size = (3 * checkpoint_segments) * 16MB + + Note that the default setting for max_wal_size is + much higher than the default checkpoint_segments used + to be, so setting this might no longer be necessary. + + + + + + + Remove server configuration + parameter ssl_renegotiation_limit, which was deprecated + in earlier releases (Andres Freund) + + + + While SSL renegotiation is a good idea in theory, it has caused enough + bugs to be considered a net negative in practice, and it is due to be + removed from future versions of the relevant standards. We have + therefore removed support for it from PostgreSQL. + + + + + Remove server configuration parameter autocommit, which was already deprecated and non-operational (Tom Lane) @@ -135,12 +197,27 @@ + Remove pg_authid's rolcatupdate field, as it had no value (Adam Brightwell) + + + + Allow json and jsonb array extraction operators to + accept negative subscripts, which count from the end of JSON arrays. + Previously, these operators returned NULL for negative + subscripts. (Peter Geoghegan, Andrew Dunstan) + + + @@ -163,18 +240,26 @@ + Add Block Range Indexes (BRIN) - (Álvaro Herrera, Heikki Linnakangas, Emre Hasegeli) + (Álvaro Herrera) - BRIN indexes are very compact and store the min/max - values for a range of heap blocks. + BRIN indexes are very compact and cheap to update by + storing min/max values for a range of heap blocks. + Allow queries to perform accurate distance filtering of bounding-box-indexed objects (polygons, circles) using + Allow GiST indexes to perform index-only scans (Anastasia Lubennikova, Heikki Linnakangas, Andreas Karlsson) @@ -198,6 +289,9 @@ + Add configuration parameter to control the size of GIN pending lists (Fujii Masao) @@ -211,6 +305,9 @@ + Issue a warning during the creation of hash indexes because they are not @@ -228,13 +325,22 @@ + - Improve the speed of sorting character and numeric fields (Peter - Geoghegan, Andrew Gierth, Robert Haas) + Improve the speed of sorting VARCHAR, TEXT, + and NUMERIC fields (Peter Geoghegan, Andrew Gierth, + Robert Haas) + Extend the infrastructure that allows sorting to be performed by inlined, non-SQL-callable comparison functions to @@ -244,12 +350,23 @@ + Improve in-memory hash performance (Tomas Vondra, Robert Haas) + Improve concurrency of shared buffer replacement (Robert Haas, Amit Kapila) @@ -257,13 +374,52 @@ + + + Reduce the number of page locks and pins during index scans (Kevin Grittner) + + + + The primary benefit of this is to allow index vacuums to be blocked + less often. + + + + + + + Make backend local tracking of buffer pins memory efficient (Andres Freund) + + + + Previously each session allocated an array with space for every buffer + in shared_buffers. + + + + + + + Improve lock scalability (Andres Freund) + + - Improve concurrent locking and buffer scan performance (Andres - Freund, Kevin Grittner) + This particularly addresses scalability problems when running on + systems with multiple CPU sockets. + Allow the optimizer to remove unnecessary references to left outer join subqueries (David Rowley) @@ -271,6 +427,9 @@ + Allow pushdown of query restrictions into window functions, where appropriate @@ -279,13 +438,85 @@ + + + Allow non-leakproof functions to be passed into security barrier + views if the function does not reference any table columns + (Dean Rasheed) + + + + + + + Teach the planner to use statistics obtained from an expression + index on a boolean-returning function, when a matching function call + appears in WHERE (Tom Lane) + + + + + + + Make ANALYZE compute basic statistics (null fraction and + average column width) even for columns whose data type lacks an + equality function (Oleksandr Shulgin) + + + + + Speed up CRC (cyclic redundancy check) computations - (Abhijit Menon-Sen, Heikki Linnakangas) + and switch to CRC-32C (Abhijit Menon-Sen, Heikki Linnakangas) - + + + + Improve bitmap index scan performance (Teodor Sigaev, Tom Lane) + + + + + + + Speed up CREATE INDEX by avoiding unnecessary memory copies (Robert Haas) + + + + + + + Increase the number of buffer mapping partitions (Amit Kapila, + Andres Freund, Robert Haas) + + + + This improves performance for highly concurrent workloads. + + + + @@ -295,6 +526,9 @@ + Add per-table autovacuum logging control via log_min_autovacuum_duration (Michael Paquier) @@ -306,6 +540,9 @@ + Add new configuration parameter (Thomas Munro) @@ -321,6 +558,9 @@ + Prevent non-superusers from changing on connection startup (Fujii Masao) @@ -337,6 +577,9 @@ + Check Subject Alternative Names in SSL server certificates, if present @@ -350,6 +593,9 @@ + Add system view pg_stat_ssl to report @@ -358,6 +604,9 @@ + Add libpq function PQsslAttribute() @@ -375,6 +624,9 @@ + Make libpq honor any OpenSSL thread callbacks (Jan Urbanski) @@ -395,6 +647,12 @@ + Replace configuration parameter checkpoint_segments with @@ -402,12 +660,17 @@ - This allows the allocation of a large number of WAL - files without keeping them if they are not needed. + This allows the allocation of a large number of WAL files + without keeping them if they are not needed. Thus the default + for has been increased + to 1GB. + Add configuration parameter to control compression of full page images stored in WAL @@ -416,21 +679,27 @@ + Allow recording of transaction - commit timestamps when configuration parameter is enabled (Álvaro Herrera, Petr Jelínek) - Timestamp information can be accessed using functions pg_xact_commit_timestamp() and pg_last_committed_xact(). + Allow to be set by ALTER ROLE SET (Peter Eisentraut, Kyotaro Horiguchi) @@ -438,6 +707,9 @@ + Allow running autovacuum workers to respond to configuration parameter changes (Michael Paquier) @@ -445,6 +717,9 @@ + Make configuration parameter read-only (Andres Freund) @@ -459,6 +734,9 @@ + Allow setting on systems where it has no effect (Peter Eisentraut) @@ -466,6 +744,9 @@ + Add environment variables PG_OOM_ADJUST_FILE @@ -481,6 +762,10 @@ + Add system view pg_file_settings @@ -490,6 +775,9 @@ + Add pending_restart to the system view pg_settings to @@ -498,6 +786,9 @@ + Allow ALTER SYSTEM values to be reset with ALTER SYSTEM RESET (Vik @@ -521,6 +812,26 @@ + + + Rework truncation of the multixact commit log to be properly + WAL-logged (Andres Freund) + + + + This makes things substantially simpler and more robust. + + + + + Add recovery.conf parameter + Add new value always to allow standbys to always archive received @@ -542,6 +856,9 @@ + Add configuration parameter to @@ -555,6 +872,9 @@ + Archive WAL files with suffix .partial during standby promotion (Heikki Linnakangas) @@ -562,6 +882,9 @@ + Add configuration parameter @@ -577,17 +900,26 @@ + - Allow labeling - of the origin of logical replication changes (Andres Freund) + Allow labeling of + the origin progress of logical replication changes (Andres Freund) - This helps with change tracking. + This is helpful when implementing replication solutions. + Report the processes holding replication slots in pg_replication_slots @@ -600,6 +932,9 @@ + Allow recovery.conf's primary_conninfo to @@ -618,6 +953,10 @@ + Allow INSERTS that would generate constraint conflicts to be turned into @@ -633,6 +972,9 @@ + Add GROUP BY analysis functions GROUPING SETS, @@ -643,10 +985,13 @@ + - Allow multi-column UPDATEs with a single subselect - (Tom Lane) + Allow setting multiple target columns in + an UPDATE from the result of + a single sub-SELECT (Tom Lane) @@ -656,6 +1001,9 @@ + Add new SELECT option SKIP LOCKED to skip locked rows (Thomas Munro) @@ -668,6 +1016,9 @@ + Add SELECT option TABLESAMPLE to return a subset of a table (Petr @@ -676,6 +1027,9 @@ + Suggest possible matches for mistyped column names (Peter Geoghegan, Robert Haas) @@ -692,6 +1046,9 @@ + Add more details about sort ordering in EXPLAIN output (Marius Timmer, @@ -705,6 +1062,9 @@ + Have VACUUM log the number of pages skipped due to pins (Jim Nasby) @@ -712,6 +1072,9 @@ + Have TRUNCATE properly update the pg_stat* tuple counters (Alexander Shulgin) @@ -726,6 +1089,9 @@ + Allow REINDEX to reindex an entire schema using the SCHEMA option (Sawada Masahiko) @@ -733,6 +1099,9 @@ + Add VERBOSE option to REINDEX (Sawada Masahiko) @@ -740,6 +1109,9 @@ + Prevent REINDEX DATABASE and SCHEMA from outputting object names, unless VERBOSE is used @@ -748,6 +1120,9 @@ + Remove obsolete FORCE option from REINDEX (Fujii Masao) @@ -765,6 +1140,9 @@ + Add row-level security control (Craig Ringer, KaiGai Kohei, Adam Brightwell, Dean Rasheed, Stephen Frost) @@ -781,14 +1159,23 @@ + - Allow control of table WAL logging after table creation - with ALTER TABLE .. SET - LOGGED / UNLOGGED (Fabrízio de Royes Mello) + Allow changing of the WAL + logging status of a table after creation with ALTER TABLE .. SET LOGGED / + UNLOGGED (Fabrízio de Royes Mello) + Add IF NOT EXISTS clause to CREATE TABLE AS, @@ -800,6 +1187,9 @@ + Add support for IF EXISTS to ALTER TABLE ... RENAME @@ -808,6 +1198,9 @@ + Allow CURRENT/SESSION_USER to specify the current user in some commands (Kyotaro Horiguchi, Álvaro @@ -825,6 +1218,9 @@ + Allow comments on domain constraints (Álvaro Herrera) @@ -832,6 +1228,9 @@ + Reduce lock levels of some create and alter trigger and foreign key commands (Simon Riggs, Andreas Karlsson) @@ -839,6 +1238,9 @@ + Allow LOCK TABLE .. ROW EXCLUSIVE MODE for those with INSERT privileges (Stephen @@ -852,6 +1254,9 @@ + Apply table and domain CHECK constraints in name order (Tom Lane) @@ -863,6 +1268,10 @@ + Allow CREATE/ + Add support for IMPORT FOREIGN @@ -900,6 +1312,9 @@ + Allow foreign tables to participate in inheritance (Shigeru Hanada, Etsuro Fujita) @@ -912,6 +1327,9 @@ + Allow CHECK constraints to be placed on foreign tables (Shigeru Hanada, Etsuro Fujita) @@ -927,6 +1345,10 @@ + Allow foreign data wrappers and custom scans to implement join pushdown (KaiGai Kohei) @@ -943,6 +1365,10 @@ + Add a set-returning function pg_event_trigger_ddl_commands(), which returns DDL activity @@ -951,6 +1377,9 @@ + Allow event triggers on table rewrites caused by ALTER TABLE (Dimitri @@ -959,6 +1388,9 @@ + Add event trigger support for database-level COMMENT, + Add columns to the output of pg_event_trigger_dropped_objects @@ -992,6 +1428,9 @@ + Allow the XML data type to accept empty or all-whitespace values (Peter Eisentraut) @@ -1004,20 +1443,9 @@ - - Fix XML xpath() handling - to return namespace declarations even if the namespace is in a - parent element (Ali Akbar) - - - - Previously the namespace was not returned, potentially leading to - invalid XML. - - - - + Allow MACADDR input using the format xxxx-xxxx-xxxx (Herwin Weststrate) @@ -1025,6 +1453,10 @@ + Tighten syntax of INTERVAL precision @@ -1038,6 +1470,9 @@ + Add selectivity estimators for INET/ + Add JSONB functions jsonb_set() @@ -1064,6 +1503,9 @@ + Add several generator functions for JSONB that already existed for JSON (Andrew Dunstan) @@ -1086,6 +1528,9 @@ + Reduce casting requirements to/from JSON and + Allow TEXT, TEXT array, and INTEGER values to be subtracted @@ -1102,6 +1550,9 @@ + Add JSONB operator || @@ -1110,6 +1561,9 @@ + Add json_strip_nulls() @@ -1132,6 +1586,9 @@ + Add generate_series() for NUMERIC values (Plato Malugin) @@ -1139,6 +1596,9 @@ + Allow array_agg() and @@ -1147,6 +1607,10 @@ + Add functions array_position() @@ -1157,6 +1621,9 @@ + Add point-to-polygon @@ -1165,8 +1632,11 @@ + - Allow multi-byte characters as escape in SIMILAR TO and SUBSTRING (Jeff Davis) @@ -1178,6 +1648,9 @@ + Add a width_bucket() @@ -1187,6 +1660,20 @@ + + + Add an optional missing_ok argument to pg_read_file() + and related functions (Michael Paquier, Heikki Linnakangas) + + + + + Allow => to specify named parameters in function calls (Pavel Stehule) @@ -1196,14 +1683,17 @@ Previously only := could be used. This requires removing the possibility for => to be a user-defined operator. Creation of user-defined => operators has been issuing - warnings since Postgres 9.0. + warnings since PostgreSQL 9.0. + Add POSIX-compliant rounding for platforms that use - Postgres-supplied rounding functions (Pedro Gimeno Fortea) + PostgreSQL-supplied rounding functions (Pedro Gimeno Fortea) @@ -1215,17 +1705,15 @@ + Add function pg_get_object_address() - to return OIDs that uniquely identify an object - (Álvaro Herrera) - - - - - - Add function OIDs that uniquely + identify an object, and function pg_identify_object_as_address() to return object information based on OIDs (Álvaro Herrera) @@ -1233,6 +1721,9 @@ + Loosen security checks for viewing queries in pg_stat_activity, @@ -1250,10 +1741,13 @@ + Add pg_stat_get_snapshot_timestamp() - to output the timestamp of the statistics snapshot (Matt Kelly) + to output the time stamp of the statistics snapshot (Matt Kelly) @@ -1263,6 +1757,9 @@ + Add mxid_age() @@ -1271,21 +1768,16 @@ + - Add data type regrole that returns + Add data types regrole regnamespace that returns the OID of a role (Kyotaro Horiguchi) - - - - Add data type regnamespace that returns - the OID of a schema (Kyotaro Horiguchi) - - - @@ -1296,6 +1788,9 @@ + Add MIN()/MAX() aggregates for INET/ + Use 128-bit integers, where supported, as aggregate accumulators (Andreas Karlsson) @@ -1323,6 +1822,9 @@ + Improve support for composite types in PL/Python (Ed Behn, Ronan @@ -1336,6 +1838,9 @@ + Reduce lossiness of PL/Python floating value @@ -1344,6 +1849,9 @@ + Allow specification of conversion routines between SQL data types and data types of procedural languages (Peter Eisentraut) @@ -1369,6 +1877,12 @@ + Improve PL/pgSQL array performance (Tom Lane) @@ -1376,6 +1890,9 @@ + Add ASSERT statement in PL/pgSQL (Pavel Stehule) @@ -1383,6 +1900,9 @@ + Allow more PL/pgSQL keywords to be used as identifiers (Tom Lane) @@ -1401,6 +1921,12 @@ + Move pg_archivecleanup, @@ -1412,6 +1938,9 @@ + Add pg_rewind, which allows re-synchronizing a master server after failback @@ -1420,6 +1949,9 @@ + Allow pg_receivexlog @@ -1433,6 +1965,9 @@ + Allow the pg_receivexlog @@ -1446,13 +1981,19 @@ + - Allow vacuumdb to + Allow vacuumdb to vacuum in parallel using + Add + Make pg_basebackup use a tablespace mapping file when using tar format, @@ -1470,6 +2014,10 @@ + Add pg_xlogdump option - GiST and GIN Index Types + GIN and GiST Index Types text search @@ -3213,18 +3213,17 @@ SELECT plainto_tsquery('supernovae stars'); index - GiST + GIN text search - CREATE INDEX name ON table USING GIST (column); + CREATE INDEX name ON table USING GIN (column); - Creates a GiST (Generalized Search Tree)-based index. - The column can be of tsvector or - tsquery type. + Creates a GIN (Generalized Inverted Index)-based index. + The column must be of tsvector type. @@ -3234,17 +3233,18 @@ SELECT plainto_tsquery('supernovae stars'); index - GIN + GiST text search - CREATE INDEX name ON table USING GIN (column); + CREATE INDEX name ON table USING GIST (column); - Creates a GIN (Generalized Inverted Index)-based index. - The column must be of tsvector type. + Creates a GiST (Generalized Search Tree)-based index. + The column can be of tsvector or + tsquery type. @@ -3253,13 +3253,18 @@ SELECT plainto_tsquery('supernovae stars'); - There are substantial performance differences between the two index types, - so it is important to understand their characteristics. + GIN indexes are the preferred text search index type. As inverted + indexes, they contain an index entry for each word (lexeme), with a + compressed list of matching locations. Multi-word searches can find + the first match, then use the index to remove rows that are lacking + additional words. GIN indexes store only the words (lexemes) of + tsvector values, and not their weight labels. Thus a table + row recheck is needed when using a query that involves weights. A GiST index is lossy, meaning that the index - may produce false matches, and it is necessary + might produce false matches, and it is necessary to check the actual table row to eliminate such false matches. (PostgreSQL does this automatically when needed.) GiST indexes are lossy because each document is represented in the @@ -3280,53 +3285,6 @@ SELECT plainto_tsquery('supernovae stars'); recommended. - - GIN indexes are not lossy for standard queries, but their performance - depends logarithmically on the number of unique words. - (However, GIN indexes store only the words (lexemes) of tsvector - values, and not their weight labels. Thus a table row recheck is needed - when using a query that involves weights.) - - - - In choosing which index type to use, GiST or GIN, consider these - performance differences: - - - - - GIN index lookups are about three times faster than GiST - - - - - GIN indexes take about three times longer to build than GiST - - - - - GIN indexes are moderately slower to update than GiST indexes, but - about 10 times slower if fast-update support was disabled - (see for details) - - - - - GIN indexes are two-to-three times larger than GiST indexes - - - - - - - As a rule of thumb, GIN indexes are best for static data - because lookups are faster. For dynamic data, GiST indexes are - faster to update. Specifically, GiST indexes are very - good for dynamic data and fast if the number of unique words (lexemes) is - under 100,000, while GIN indexes will handle 100,000+ - lexemes better but are slower to update. - - Note that GIN index build time can often be improved by increasing , while @@ -3335,7 +3293,7 @@ SELECT plainto_tsquery('supernovae stars'); - Partitioning of big collections and the proper use of GiST and GIN indexes + Partitioning of big collections and the proper use of GIN and GiST indexes allows the implementation of very fast searches with online update. Partitioning can be done at the database level using table inheritance, or by distributing documents over diff --git a/doc/src/sgml/tsm-system-rows.sgml b/doc/src/sgml/tsm-system-rows.sgml index 0c2f1779c9ad8..93aa5366649bd 100644 --- a/doc/src/sgml/tsm-system-rows.sgml +++ b/doc/src/sgml/tsm-system-rows.sgml @@ -8,24 +8,37 @@ - The tsm_system_rows module provides the tablesample method - SYSTEM_ROWS, which can be used inside the - TABLESAMPLE clause of a SELECT. + The tsm_system_rows module provides the table sampling method + SYSTEM_ROWS, which can be used in + the TABLESAMPLE clause of a + command. - This tablesample method uses a linear probing algorithm to read sample - of a table and uses actual number of rows as limit (unlike the - SYSTEM tablesample method which limits by percentage - of a table). + This table sampling method accepts a single integer argument that is the + maximum number of rows to read. The resulting sample will always contain + exactly that many rows, unless the table does not contain enough rows, in + which case the whole table is selected. + + + + Like the built-in SYSTEM sampling + method, SYSTEM_ROWS performs block-level sampling, so + that the sample is not completely random but may be subject to clustering + effects, especially if only a small number of rows are requested. + + + + SYSTEM_ROWS does not support + the REPEATABLE clause. Examples - Here is an example of selecting sample of a table with - SYSTEM_ROWS. First install the extension: + Here is an example of selecting a sample of a table with + SYSTEM_ROWS. First install the extension: @@ -33,8 +46,7 @@ CREATE EXTENSION tsm_system_rows; - Then you can use it in SELECT command same way as other - tablesample methods: + Then you can use it in a SELECT command, for instance: SELECT * FROM my_table TABLESAMPLE SYSTEM_ROWS(100); @@ -42,8 +54,9 @@ SELECT * FROM my_table TABLESAMPLE SYSTEM_ROWS(100); - The above command will return a sample of 100 rows from the table my_table - (less if the table does not have 100 visible rows). + This command will return a sample of 100 rows from the + table my_table (unless the table does not have 100 + visible rows, in which case all its rows are returned). diff --git a/doc/src/sgml/tsm-system-time.sgml b/doc/src/sgml/tsm-system-time.sgml index 2343ab16d4f2b..3f8ff1a026f2e 100644 --- a/doc/src/sgml/tsm-system-time.sgml +++ b/doc/src/sgml/tsm-system-time.sgml @@ -8,25 +8,39 @@ - The tsm_system_time module provides the tablesample method - SYSTEM_TIME, which can be used inside the - TABLESAMPLE clause of a SELECT. + The tsm_system_time module provides the table sampling method + SYSTEM_TIME, which can be used in + the TABLESAMPLE clause of a + command. - This tablesample method uses a linear probing algorithm to read sample - of a table and uses time in milliseconds as limit (unlike the - SYSTEM tablesample method which limits by percentage - of a table). This gives you some control over the length of execution - of your query. + This table sampling method accepts a single floating-point argument that + is the maximum number of milliseconds to spend reading the table. This + gives you direct control over how long the query takes, at the price that + the size of the sample becomes hard to predict. The resulting sample will + contain as many rows as could be read in the specified time, unless the + whole table has been read first. + + + + Like the built-in SYSTEM sampling + method, SYSTEM_TIME performs block-level sampling, so + that the sample is not completely random but may be subject to clustering + effects, especially if only a small number of rows are selected. + + + + SYSTEM_TIME does not support + the REPEATABLE clause. Examples - Here is an example of selecting sample of a table with - SYSTEM_TIME. First install the extension: + Here is an example of selecting a sample of a table with + SYSTEM_TIME. First install the extension: @@ -34,8 +48,7 @@ CREATE EXTENSION tsm_system_time; - Then you can use it in a SELECT command the same way as - other tablesample methods: + Then you can use it in a SELECT command, for instance: SELECT * FROM my_table TABLESAMPLE SYSTEM_TIME(1000); @@ -43,8 +56,9 @@ SELECT * FROM my_table TABLESAMPLE SYSTEM_TIME(1000); - The above command will return as large a sample of my_table as it can read in - 1 second (or less if it reads whole table faster). + This command will return as large a sample of my_table as + it can read in 1 second (1000 milliseconds). Of course, if the whole + table can be read in under 1 second, all its rows will be returned. diff --git a/doc/src/sgml/user-manag.sgml b/doc/src/sgml/user-manag.sgml index 177ac7aa8c503..4fce70060bc30 100644 --- a/doc/src/sgml/user-manag.sgml +++ b/doc/src/sgml/user-manag.sgml @@ -7,8 +7,8 @@ PostgreSQL manages database access permissions using the concept of roles. A role can be thought of as either a database user, or a group of database users, depending on how - the role is set up. Roles can own database objects (for example, - tables) and can assign privileges on those objects to other roles to + the role is set up. Roles can own database objects (for example, tables + and functions) and can assign privileges on those objects to other roles to control who has access to which objects. Furthermore, it is possible to grant membership in a role to another role, thus allowing the member role to use privileges assigned to another role. @@ -213,7 +213,7 @@ CREATE USER name; A role must explicitly be given permission to initiate streaming replication (except for superusers, since those bypass all permission - checks). A role used for streaming replication must always + checks). A role used for streaming replication must have LOGIN permission as well. To create such a role, use CREATE ROLE name REPLICATION LOGIN. @@ -408,9 +408,67 @@ RESET ROLE; DROP ROLE name; Any memberships in the group role are automatically revoked (but the - member roles are not otherwise affected). Note however that any objects - owned by the group role must first be dropped or reassigned to other - owners; and any permissions granted to the group role must be revoked. + member roles are not otherwise affected). + + + + + Dropping Roles + + + Because roles can own database objects and can hold privileges + to access other objects, dropping a role is often not just a matter of a + quick . Any objects owned by the role must + first be dropped or reassigned to other owners; and any permissions + granted to the role must be revoked. + + + + Ownership of objects can be transferred one at a time + using ALTER commands, for example: + +ALTER TABLE bobs_table OWNER TO alice; + + Alternatively, the command can be + used to reassign ownership of all objects owned by the role-to-be-dropped + to a single other role. Because REASSIGN OWNED can only + access objects in the current database, it is necessary to run it in each + database that contains objects owned by the role. + + + + Once any valuable objects have been transferred to new owners, any + remaining objects owned by the role-to-be-dropped can be dropped with + the command. Again, this command can + only access objects in the current database, so it is necessary to run it + in each database that contains objects owned by the role. + + + + DROP OWNED also takes care of removing any privileges granted + to the target role for objects that do not belong to it. + Because REASSIGN OWNED does not touch such objects, it's + typically necessary to run both REASSIGN OWNED + and DROP OWNED (in that order!) to fully remove the + dependencies of a role to be dropped. + + + + In short then, the most general recipe for removing a role that has been + used to own objects is: + + + +REASSIGN OWNED BY doomed_role TO successor_role; +DROP OWNED BY doomed_role; +-- repeat the above commands in each database of the cluster +DROP ROLE doomed_role; + + + + If DROP ROLE is attempted while dependent objects still + remain, it will issue messages identifying which objects need to be + reassigned or dropped. diff --git a/src/Makefile.global.in b/src/Makefile.global.in index c583b44dbf356..3a0f0b9a27f5c 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -38,10 +38,26 @@ all: # PostgreSQL version number VERSION = @PACKAGE_VERSION@ MAJORVERSION = @PG_MAJORVERSION@ +VERSION_NUM = @PG_VERSION_NUM@ -# Support for VPATH builds -# (PGXS VPATH support is handled separately in pgxs.mk) -ifndef PGXS +# Set top_srcdir, srcdir, and VPATH. +ifdef PGXS +top_srcdir = $(top_builddir) + +# If VPATH is set or Makefile is not in current directory we are building +# the extension with VPATH so we set the variable here. +ifdef VPATH +srcdir = $(VPATH) +else +ifeq ($(CURDIR),$(dir $(firstword $(MAKEFILE_LIST)))) +srcdir = . +VPATH = +else +srcdir = $(dir $(firstword $(MAKEFILE_LIST))) +VPATH = $(srcdir) +endif +endif +else # not PGXS vpath_build = @vpath_build@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ @@ -304,11 +320,14 @@ check: temp-install .PHONY: temp-install temp-install: ifndef NO_TEMP_INSTALL +ifneq ($(abs_top_builddir),) ifeq ($(MAKELEVEL),0) rm -rf '$(abs_top_builddir)'/tmp_install - $(MAKE) -C '$(top_builddir)' DESTDIR='$(abs_top_builddir)'/tmp_install install + $(MKDIR_P) '$(abs_top_builddir)'/tmp_install/log + $(MAKE) -C '$(top_builddir)' DESTDIR='$(abs_top_builddir)'/tmp_install install >'$(abs_top_builddir)'/tmp_install/log/install.log 2>&1 +endif + $(if $(EXTRA_INSTALL),for extra in $(EXTRA_INSTALL); do $(MAKE) -C '$(top_builddir)'/$$extra DESTDIR='$(abs_top_builddir)'/tmp_install install >>'$(abs_top_builddir)'/tmp_install/log/install.log || exit; done) endif - $(if $(EXTRA_INSTALL),for extra in $(EXTRA_INSTALL); do $(MAKE) -C '$(top_builddir)'/$$extra DESTDIR='$(abs_top_builddir)'/tmp_install install || exit; done) endif PROVE = @PROVE@ @@ -332,10 +351,12 @@ endef ifeq ($(enable_tap_tests),yes) define prove_installcheck +rm -rf $(CURDIR)/tmp_check/log cd $(srcdir) && TESTDIR='$(CURDIR)' PATH="$(bindir):$$PATH" PGPORT='6$(DEF_PGPORT)' top_builddir='$(CURDIR)/$(top_builddir)' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) t/*.pl endef define prove_check +rm -rf $(CURDIR)/tmp_check/log cd $(srcdir) && TESTDIR='$(CURDIR)' $(with_temp_install) PGPORT='6$(DEF_PGPORT)' top_builddir='$(CURDIR)/$(top_builddir)' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) t/*.pl endef diff --git a/src/Makefile.shlib b/src/Makefile.shlib index 50c3805eec02f..86db52fe5e1f5 100644 --- a/src/Makefile.shlib +++ b/src/Makefile.shlib @@ -111,6 +111,7 @@ ifeq ($(PORTNAME), aix) shlib = lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION) endif haslibarule = yes + # $(exports_file) is also usable as an import file exports_file = lib$(NAME).exp endif @@ -341,7 +342,7 @@ $(shlib) $(stlib): $(OBJS) | $(SHLIB_PREREQS) rm -f $(stlib) $(LINK.static) $(stlib) $^ $(RANLIB) $(stlib) - $(MKLDEXPORT) $(stlib) >$(exports_file) + $(MKLDEXPORT) $(stlib) $(shlib) >$(exports_file) $(COMPILER) -o $(shlib) $(stlib) -Wl,-bE:$(exports_file) $(LDFLAGS) $(LDFLAGS_SL) $(SHLIB_LINK) rm -f $(stlib) $(AR) $(AROPT) $(stlib) $(shlib) diff --git a/src/backend/Makefile b/src/backend/Makefile index 4f0ea3f60c3a2..98b978f3da475 100644 --- a/src/backend/Makefile +++ b/src/backend/Makefile @@ -88,7 +88,7 @@ endif # win32 ifeq ($(PORTNAME), aix) postgres: $(POSTGRES_IMP) - $(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_EX) $(call expand_subsys,$(OBJS)) -Wl,-bE:$(top_builddir)/src/backend/$(POSTGRES_IMP) $(LIBS) -o $@ + $(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_EX) $(call expand_subsys,$(OBJS)) -Wl,-bE:$(top_builddir)/src/backend/$(POSTGRES_IMP) $(LIBS) -Wl,-brtllib -o $@ $(POSTGRES_IMP): $(OBJS) $(LD) $(LDREL) $(LDOUT) SUBSYS.o $(call expand_subsys,$^) diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c index ff18b220c2b8f..99337b0f0c047 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -68,6 +68,7 @@ static void brinsummarize(Relation index, Relation heapRel, static void form_and_insert_tuple(BrinBuildState *state); static void union_tuples(BrinDesc *bdesc, BrinMemTuple *a, BrinTuple *b); +static void brin_vacuum_scan(Relation idxrel, BufferAccessStrategy strategy); /* @@ -464,6 +465,14 @@ brinrescan(PG_FUNCTION_ARGS) /* other arguments ignored */ + /* + * Other index AMs preprocess the scan keys at this point, or sometime + * early during the scan; this lets them optimize by removing redundant + * keys, or doing early returns when they are impossible to satisfy; see + * _bt_preprocess_keys for an example. Something like that could be added + * here someday, too. + */ + if (scankey && scan->numberOfKeys > 0) memmove(scan->keyData, scankey, scan->numberOfKeys * sizeof(ScanKeyData)); @@ -688,7 +697,7 @@ brinbuildempty(PG_FUNCTION_ARGS) * * XXX we could mark item tuples as "dirty" (when a minimum or maximum heap * tuple is deleted), meaning the need to re-run summarization on the affected - * range. Need to an extra flag in mmtuples for that. + * range. Would need to add an extra flag in brintuples for that. */ Datum brinbulkdelete(PG_FUNCTION_ARGS) @@ -728,6 +737,8 @@ brinvacuumcleanup(PG_FUNCTION_ARGS) heapRel = heap_open(IndexGetRelation(RelationGetRelid(info->index), false), AccessShareLock); + brin_vacuum_scan(info->index, info->strategy); + brinsummarize(info->index, heapRel, &stats->num_index_tuples, &stats->num_index_tuples); @@ -923,12 +934,13 @@ terminate_brin_buildstate(BrinBuildState *state) */ static void summarize_range(IndexInfo *indexInfo, BrinBuildState *state, Relation heapRel, - BlockNumber heapBlk) + BlockNumber heapBlk, BlockNumber heapNumBlks) { Buffer phbuf; BrinTuple *phtup; Size phsz; OffsetNumber offset; + BlockNumber scanNumBlks; /* * Insert the placeholder tuple @@ -943,10 +955,16 @@ summarize_range(IndexInfo *indexInfo, BrinBuildState *state, Relation heapRel, * Execute the partial heap scan covering the heap blocks in the specified * page range, summarizing the heap tuples in it. This scan stops just * short of brinbuildCallback creating the new index entry. + * + * Note that it is critical we use the "any visible" mode of + * IndexBuildHeapRangeScan here: otherwise, we would miss tuples inserted + * by transactions that are still in progress, among other corner cases. */ state->bs_currRangeStart = heapBlk; - IndexBuildHeapRangeScan(heapRel, state->bs_irel, indexInfo, false, - heapBlk, state->bs_pagesPerRange, + scanNumBlks = heapBlk + state->bs_pagesPerRange <= heapNumBlks ? + state->bs_pagesPerRange : heapNumBlks - heapBlk; + IndexBuildHeapRangeScan(heapRel, state->bs_irel, indexInfo, false, true, + heapBlk, scanNumBlks, brinbuildCallback, (void *) state); /* @@ -1050,38 +1068,8 @@ brinsummarize(Relation index, Relation heapRel, double *numSummarized, state = initialize_brin_buildstate(index, revmap, pagesPerRange); indexInfo = BuildIndexInfo(index); - - /* - * We only have ShareUpdateExclusiveLock on the table, and - * therefore other sessions may insert tuples into the range - * we're going to scan. This is okay, because we take - * additional precautions to avoid losing the additional - * tuples; see comments in summarize_range. Set the - * concurrent flag, which causes IndexBuildHeapRangeScan to - * use a snapshot other than SnapshotAny, and silences - * warnings emitted there. - */ - indexInfo->ii_Concurrent = true; - - /* - * If using transaction-snapshot mode, it would be possible - * for another transaction to insert a tuple that's not - * visible to our snapshot if we have already acquired one, - * when in snapshot-isolation mode; therefore, disallow this - * from running in such a transaction unless a snapshot hasn't - * been acquired yet. - * - * This code is called by VACUUM and - * brin_summarize_new_values. Have the error message mention - * the latter because VACUUM cannot run in a transaction and - * thus cannot cause this issue. - */ - if (IsolationUsesXactSnapshot() && FirstSnapshotSet) - ereport(ERROR, - (errcode(ERRCODE_INVALID_TRANSACTION_STATE), - errmsg("brin_summarize_new_values() cannot run in a transaction that has already obtained a snapshot"))); } - summarize_range(indexInfo, state, heapRel, heapBlk); + summarize_range(indexInfo, state, heapRel, heapBlk, heapNumBlocks); /* and re-initialize state for the next range */ brin_memtuple_initialize(state->bs_dtuple, state->bs_bdesc); @@ -1103,7 +1091,10 @@ brinsummarize(Relation index, Relation heapRel, double *numSummarized, /* free resources */ brinRevmapTerminate(revmap); if (state) + { terminate_brin_buildstate(state); + pfree(indexInfo); + } } /* @@ -1165,3 +1156,43 @@ union_tuples(BrinDesc *bdesc, BrinMemTuple *a, BrinTuple *b) MemoryContextDelete(cxt); } + +/* + * brin_vacuum_scan + * Do a complete scan of the index during VACUUM. + * + * This routine scans the complete index looking for uncatalogued index pages, + * i.e. those that might have been lost due to a crash after index extension + * and such. + */ +static void +brin_vacuum_scan(Relation idxrel, BufferAccessStrategy strategy) +{ + bool vacuum_fsm = false; + BlockNumber blkno; + + /* + * Scan the index in physical order, and clean up any possible mess in + * each page. + */ + for (blkno = 0; blkno < RelationGetNumberOfBlocks(idxrel); blkno++) + { + Buffer buf; + + CHECK_FOR_INTERRUPTS(); + + buf = ReadBufferExtended(idxrel, MAIN_FORKNUM, blkno, + RBM_NORMAL, strategy); + + vacuum_fsm |= brin_page_cleanup(idxrel, buf); + + ReleaseBuffer(buf); + } + + /* + * If we made any change to the FSM, make sure the new info is visible all + * the way to the top. + */ + if (vacuum_fsm) + FreeSpaceMapVacuum(idxrel); +} diff --git a/src/backend/access/brin/brin_inclusion.c b/src/backend/access/brin/brin_inclusion.c index 803b07f10a913..926487ec0390b 100644 --- a/src/backend/access/brin/brin_inclusion.c +++ b/src/backend/access/brin/brin_inclusion.c @@ -276,8 +276,14 @@ brin_inclusion_consistent(PG_FUNCTION_ARGS) * For IS NOT NULL, we can only skip ranges that are known to have * only nulls. */ - Assert(key->sk_flags & SK_SEARCHNOTNULL); - PG_RETURN_BOOL(!column->bv_allnulls); + if (key->sk_flags & SK_SEARCHNOTNULL) + PG_RETURN_BOOL(!column->bv_allnulls); + + /* + * Neither IS NULL nor IS NOT NULL was used; assume all indexable + * operators are strict and return false. + */ + PG_RETURN_BOOL(false); } /* If it is all nulls, it cannot possibly be consistent. */ diff --git a/src/backend/access/brin/brin_minmax.c b/src/backend/access/brin/brin_minmax.c index 7cd98887c0ffe..2cc6e41e5f78c 100644 --- a/src/backend/access/brin/brin_minmax.c +++ b/src/backend/access/brin/brin_minmax.c @@ -174,8 +174,14 @@ brin_minmax_consistent(PG_FUNCTION_ARGS) * For IS NOT NULL, we can only skip ranges that are known to have * only nulls. */ - Assert(key->sk_flags & SK_SEARCHNOTNULL); - PG_RETURN_BOOL(!column->bv_allnulls); + if (key->sk_flags & SK_SEARCHNOTNULL) + PG_RETURN_BOOL(!column->bv_allnulls); + + /* + * Neither IS NULL nor IS NOT NULL was used; assume all indexable + * operators are strict and return false. + */ + PG_RETURN_BOOL(false); } /* if the range is all empty, it cannot possibly be consistent */ diff --git a/src/backend/access/brin/brin_pageops.c b/src/backend/access/brin/brin_pageops.c index 0b257d913b60d..f876f62cbbdf3 100644 --- a/src/backend/access/brin/brin_pageops.c +++ b/src/backend/access/brin/brin_pageops.c @@ -23,9 +23,20 @@ #include "utils/rel.h" +/* + * Maximum size of an entry in a BRIN_PAGETYPE_REGULAR page. We can tolerate + * a single item per page, unlike other index AMs. + */ +#define BrinMaxItemSize \ + MAXALIGN_DOWN(BLCKSZ - \ + (MAXALIGN(SizeOfPageHeaderData + \ + sizeof(ItemIdData)) + \ + MAXALIGN(sizeof(BrinSpecialSpace)))) + static Buffer brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, - bool *was_extended); + bool *extended); static Size br_page_get_freespace(Page page); +static void brin_initialize_empty_new_buffer(Relation idxrel, Buffer buffer); /* @@ -53,10 +64,22 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, BrinTuple *oldtup; Size oldsz; Buffer newbuf; - bool extended = false; + bool extended; Assert(newsz == MAXALIGN(newsz)); + /* If the item is oversized, don't bother. */ + if (newsz > BrinMaxItemSize) + { + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("index row size %lu exceeds maximum %lu for index \"%s\"", + (unsigned long) newsz, + (unsigned long) BrinMaxItemSize, + RelationGetRelationName(idxrel)))); + return false; /* keep compiler quiet */ + } + /* make sure the revmap is long enough to contain the entry we need */ brinRevmapExtend(revmap, heapBlk); @@ -64,11 +87,11 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, { /* need a page on which to put the item */ newbuf = brin_getinsertbuffer(idxrel, oldbuf, newsz, &extended); - /* XXX delay vacuuming FSM until locks are released? */ - if (extended) - FreeSpaceMapVacuum(idxrel); if (!BufferIsValid(newbuf)) + { + Assert(!extended); return false; + } /* * Note: it's possible (though unlikely) that the returned newbuf is @@ -76,12 +99,16 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, * buffer does in fact have enough space. */ if (newbuf == oldbuf) + { + Assert(!extended); newbuf = InvalidBuffer; + } } else { LockBuffer(oldbuf, BUFFER_LOCK_EXCLUSIVE); newbuf = InvalidBuffer; + extended = false; } oldpage = BufferGetPage(oldbuf); oldlp = PageGetItemId(oldpage, oldoff); @@ -93,8 +120,20 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, if (!ItemIdIsNormal(oldlp)) { LockBuffer(oldbuf, BUFFER_LOCK_UNLOCK); + + /* + * If this happens, and the new buffer was obtained by extending the + * relation, then we need to ensure we don't leave it uninitialized or + * forget about it. + */ if (BufferIsValid(newbuf)) + { + if (extended) + brin_initialize_empty_new_buffer(idxrel, newbuf); UnlockReleaseBuffer(newbuf); + if (extended) + FreeSpaceMapVacuum(idxrel); + } return false; } @@ -108,7 +147,13 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, { LockBuffer(oldbuf, BUFFER_LOCK_UNLOCK); if (BufferIsValid(newbuf)) + { + if (extended) + brin_initialize_empty_new_buffer(idxrel, newbuf); UnlockReleaseBuffer(newbuf); + if (extended) + FreeSpaceMapVacuum(idxrel); + } return false; } @@ -125,7 +170,12 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, brin_can_do_samepage_update(oldbuf, origsz, newsz)) { if (BufferIsValid(newbuf)) + { + /* as above */ + if (extended) + brin_initialize_empty_new_buffer(idxrel, newbuf); UnlockReleaseBuffer(newbuf); + } START_CRIT_SECTION(); PageIndexDeleteNoCompact(oldpage, &oldoff, 1); @@ -157,6 +207,10 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, END_CRIT_SECTION(); LockBuffer(oldbuf, BUFFER_LOCK_UNLOCK); + + if (extended) + FreeSpaceMapVacuum(idxrel); + return true; } else if (newbuf == InvalidBuffer) @@ -178,11 +232,21 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, Buffer revmapbuf; ItemPointerData newtid; OffsetNumber newoff; + BlockNumber newblk = InvalidBlockNumber; + Size freespace = 0; revmapbuf = brinLockRevmapPageForUpdate(revmap, heapBlk); START_CRIT_SECTION(); + /* + * We need to initialize the page if it's newly obtained. Note we + * will WAL-log the initialization as part of the update, so we don't + * need to do that here. + */ + if (extended) + brin_page_init(BufferGetPage(newbuf), BRIN_PAGETYPE_REGULAR); + PageIndexDeleteNoCompact(oldpage, &oldoff, 1); newoff = PageAddItem(newpage, (Item) newtup, newsz, InvalidOffsetNumber, false, false); @@ -191,6 +255,13 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, MarkBufferDirty(oldbuf); MarkBufferDirty(newbuf); + /* needed to update FSM below */ + if (extended) + { + newblk = BufferGetBlockNumber(newbuf); + freespace = br_page_get_freespace(newpage); + } + ItemPointerSet(&newtid, BufferGetBlockNumber(newbuf), newoff); brinSetHeapBlockItemptr(revmapbuf, pagesPerRange, heapBlk, newtid); MarkBufferDirty(revmapbuf); @@ -235,6 +306,14 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, LockBuffer(revmapbuf, BUFFER_LOCK_UNLOCK); LockBuffer(oldbuf, BUFFER_LOCK_UNLOCK); UnlockReleaseBuffer(newbuf); + + if (extended) + { + Assert(BlockNumberIsValid(newblk)); + RecordPageWithFreeSpace(idxrel, newblk, freespace); + FreeSpaceMapVacuum(idxrel); + } + return true; } } @@ -271,17 +350,28 @@ brin_doinsert(Relation idxrel, BlockNumber pagesPerRange, OffsetNumber off; Buffer revmapbuf; ItemPointerData tid; - bool extended = false; + bool extended; Assert(itemsz == MAXALIGN(itemsz)); + /* If the item is oversized, don't even bother. */ + if (itemsz > BrinMaxItemSize) + { + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("index row size %lu exceeds maximum %lu for index \"%s\"", + (unsigned long) itemsz, + (unsigned long) BrinMaxItemSize, + RelationGetRelationName(idxrel)))); + return InvalidOffsetNumber; /* keep compiler quiet */ + } + /* Make sure the revmap is long enough to contain the entry we need */ brinRevmapExtend(revmap, heapBlk); /* - * Obtain a locked buffer to insert the new tuple. Note - * brin_getinsertbuffer ensures there's enough space in the returned - * buffer. + * Acquire lock on buffer supplied by caller, if any. If it doesn't have + * enough space, unpin it to obtain a new one below. */ if (BufferIsValid(*buffer)) { @@ -298,12 +388,18 @@ brin_doinsert(Relation idxrel, BlockNumber pagesPerRange, } } + /* + * If we still don't have a usable buffer, have brin_getinsertbuffer + * obtain one for us. + */ if (!BufferIsValid(*buffer)) { - *buffer = brin_getinsertbuffer(idxrel, InvalidBuffer, itemsz, &extended); - Assert(BufferIsValid(*buffer)); - Assert(br_page_get_freespace(BufferGetPage(*buffer)) >= itemsz); + do + *buffer = brin_getinsertbuffer(idxrel, InvalidBuffer, itemsz, &extended); + while (!BufferIsValid(*buffer)); } + else + extended = false; /* Now obtain lock on revmap buffer */ revmapbuf = brinLockRevmapPageForUpdate(revmap, heapBlk); @@ -311,7 +407,10 @@ brin_doinsert(Relation idxrel, BlockNumber pagesPerRange, page = BufferGetPage(*buffer); blk = BufferGetBlockNumber(*buffer); + /* Execute the actual insertion */ START_CRIT_SECTION(); + if (extended) + brin_page_init(BufferGetPage(*buffer), BRIN_PAGETYPE_REGULAR); off = PageAddItem(page, (Item) tup, itemsz, InvalidOffsetNumber, false, false); if (off == InvalidOffsetNumber) @@ -489,27 +588,94 @@ brin_evacuate_page(Relation idxRel, BlockNumber pagesPerRange, UnlockReleaseBuffer(buf); } +/* + * Given a BRIN index page, initialize it if necessary, and record it into the + * FSM if necessary. Return value is true if the FSM itself needs "vacuuming". + * The main use for this is when, during vacuuming, an uninitialized page is + * found, which could be the result of relation extension followed by a crash + * before the page can be used. + */ +bool +brin_page_cleanup(Relation idxrel, Buffer buf) +{ + Page page = BufferGetPage(buf); + Size freespace; + + /* + * If a page was left uninitialized, initialize it now; also record it in + * FSM. + * + * Somebody else might be extending the relation concurrently. To avoid + * re-initializing the page before they can grab the buffer lock, we + * acquire the extension lock momentarily. Since they hold the extension + * lock from before getting the page and after its been initialized, we're + * sure to see their initialization. + */ + if (PageIsNew(page)) + { + LockRelationForExtension(idxrel, ShareLock); + UnlockRelationForExtension(idxrel, ShareLock); + + LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); + if (PageIsNew(page)) + { + brin_initialize_empty_new_buffer(idxrel, buf); + LockBuffer(buf, BUFFER_LOCK_UNLOCK); + return true; + } + LockBuffer(buf, BUFFER_LOCK_UNLOCK); + } + + /* Nothing to be done for non-regular index pages */ + if (BRIN_IS_META_PAGE(BufferGetPage(buf)) || + BRIN_IS_REVMAP_PAGE(BufferGetPage(buf))) + return false; + + /* Measure free space and record it */ + freespace = br_page_get_freespace(page); + if (freespace > GetRecordedFreeSpace(idxrel, BufferGetBlockNumber(buf))) + { + RecordPageWithFreeSpace(idxrel, BufferGetBlockNumber(buf), freespace); + return true; + } + + return false; +} + /* * Return a pinned and exclusively locked buffer which can be used to insert an - * index item of size itemsz. If oldbuf is a valid buffer, it is also locked - * (in an order determined to avoid deadlocks.) - * - * If there's no existing page with enough free space to accommodate the new - * item, the relation is extended. If this happens, *extended is set to true. + * index item of size itemsz (caller must ensure not to request sizes + * impossible to fulfill). If oldbuf is a valid buffer, it is also locked (in + * an order determined to avoid deadlocks.) * * If we find that the old page is no longer a regular index page (because * of a revmap extension), the old buffer is unlocked and we return * InvalidBuffer. + * + * If there's no existing page with enough free space to accommodate the new + * item, the relation is extended. If this happens, *extended is set to true, + * and it is the caller's responsibility to initialize the page (and WAL-log + * that fact) prior to use. + * + * Note that in some corner cases it is possible for this routine to extend the + * relation and then not return the buffer. It is this routine's + * responsibility to WAL-log the page initialization and to record the page in + * FSM if that happens. Such a buffer may later be reused by this routine. */ static Buffer brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, - bool *was_extended) + bool *extended) { BlockNumber oldblk; BlockNumber newblk; Page page; int freespace; + /* callers must have checked */ + Assert(itemsz <= BrinMaxItemSize); + + *extended = false; + if (BufferIsValid(oldbuf)) oldblk = BufferGetBlockNumber(oldbuf); else @@ -528,7 +694,6 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, { Buffer buf; bool extensionLockHeld = false; - bool extended = false; CHECK_FOR_INTERRUPTS(); @@ -546,7 +711,7 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, } buf = ReadBuffer(irel, P_NEW); newblk = BufferGetBlockNumber(buf); - *was_extended = extended = true; + *extended = true; BRIN_elog((DEBUG2, "brin_getinsertbuffer: extending to page %u", BufferGetBlockNumber(buf))); @@ -576,6 +741,25 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, if (!BRIN_IS_REGULAR_PAGE(BufferGetPage(oldbuf))) { LockBuffer(oldbuf, BUFFER_LOCK_UNLOCK); + + /* + * It is possible that the new page was obtained from + * extending the relation. In that case, we must be sure to + * record it in the FSM before leaving, because otherwise the + * space would be lost forever. However, we cannot let an + * uninitialized page get in the FSM, so we need to initialize + * it first. + */ + if (*extended) + { + brin_initialize_empty_new_buffer(irel, buf); + /* shouldn't matter, but don't confuse caller */ + *extended = false; + } + + if (extensionLockHeld) + UnlockRelationForExtension(irel, ExclusiveLock); + ReleaseBuffer(buf); return InvalidBuffer; } @@ -588,9 +772,6 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, page = BufferGetPage(buf); - if (extended) - brin_page_init(page, BRIN_PAGETYPE_REGULAR); - /* * We have a new buffer to insert into. Check that the new page has * enough free space, and return it if it does; otherwise start over. @@ -600,7 +781,8 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, * (br_page_get_freespace also checks that the FSM didn't hand us a * page that has since been repurposed for the revmap.) */ - freespace = br_page_get_freespace(page); + freespace = *extended ? + BrinMaxItemSize : br_page_get_freespace(page); if (freespace >= itemsz) { RelationSetTargetBlock(irel, BufferGetBlockNumber(buf)); @@ -610,7 +792,7 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, * invalidations, make sure we update the more permanent FSM with * data about it before going away. */ - if (extended) + if (*extended) RecordPageWithFreeSpace(irel, BufferGetBlockNumber(buf), freespace); @@ -634,12 +816,13 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, /* * If an entirely new page does not contain enough free space for the * new item, then surely that item is oversized. Complain loudly; but - * first make sure we record the page as free, for next time. + * first make sure we initialize the page and record it as free, for + * next time. */ - if (extended) + if (*extended) { - RecordPageWithFreeSpace(irel, BufferGetBlockNumber(buf), - freespace); + brin_initialize_empty_new_buffer(irel, buf); + ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("index row size %lu exceeds maximum %lu for index \"%s\"", @@ -658,6 +841,43 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, } } +/* + * Initialize a page as an empty regular BRIN page, WAL-log this, and record + * the page in FSM. + * + * There are several corner situations in which we extend the relation to + * obtain a new page and later find that we cannot use it immediately. When + * that happens, we don't want to leave the page go unrecorded in FSM, because + * there is no mechanism to get the space back and the index would bloat. + * Also, because we would not WAL-log the action that would initialize the + * page, the page would go uninitialized in a standby (or after recovery). + */ +static void +brin_initialize_empty_new_buffer(Relation idxrel, Buffer buffer) +{ + Page page; + + BRIN_elog((DEBUG2, + "brin_initialize_empty_new_buffer: initializing blank page %u", + BufferGetBlockNumber(buffer))); + + START_CRIT_SECTION(); + page = BufferGetPage(buffer); + brin_page_init(page, BRIN_PAGETYPE_REGULAR); + MarkBufferDirty(buffer); + log_newpage_buffer(buffer, true); + END_CRIT_SECTION(); + + /* + * We update the FSM for this page, but this is not WAL-logged. This is + * acceptable because VACUUM will scan the index and update the FSM with + * pages whose FSM records were forgotten in a crash. + */ + RecordPageWithFreeSpace(idxrel, BufferGetBlockNumber(buffer), + br_page_get_freespace(page)); +} + + /* * Return the amount of free space on a regular BRIN index page. * diff --git a/src/backend/access/brin/brin_revmap.c b/src/backend/access/brin/brin_revmap.c index 62d440f76b849..6ddcfda0a6ca0 100644 --- a/src/backend/access/brin/brin_revmap.c +++ b/src/backend/access/brin/brin_revmap.c @@ -127,7 +127,7 @@ brinRevmapExtend(BrinRevmap *revmap, BlockNumber heapBlk) * it's not long enough. * * The returned buffer is also recorded in the revmap struct; finishing that - * releases the buffer, therefore the caller needn't do it explicitely. + * releases the buffer, therefore the caller needn't do it explicitly. */ Buffer brinLockRevmapPageForUpdate(BrinRevmap *revmap, BlockNumber heapBlk) @@ -314,7 +314,7 @@ revmap_get_blkno(BrinRevmap *revmap, BlockNumber heapBlk) * Obtain and return a buffer containing the revmap page for the given heap * page. The revmap must have been previously extended to cover that page. * The returned buffer is also recorded in the revmap struct; finishing that - * releases the buffer, therefore the caller needn't do it explicitely. + * releases the buffer, therefore the caller needn't do it explicitly. */ static Buffer revmap_get_buffer(BrinRevmap *revmap, BlockNumber heapBlk) @@ -432,6 +432,7 @@ revmap_physical_extend(BrinRevmap *revmap) if (needLock) UnlockRelationForExtension(irel, ExclusiveLock); LockBuffer(revmap->rm_metaBuf, BUFFER_LOCK_UNLOCK); + ReleaseBuffer(buf); return; } LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); diff --git a/src/backend/access/brin/brin_xlog.c b/src/backend/access/brin/brin_xlog.c index 09001552920b5..760f0daf024df 100644 --- a/src/backend/access/brin/brin_xlog.c +++ b/src/backend/access/brin/brin_xlog.c @@ -180,11 +180,11 @@ brin_xlog_samepage_update(XLogReaderState *record) if (action == BLK_NEEDS_REDO) { Size tuplen; - BrinTuple *mmtuple; + BrinTuple *brintuple; Page page; OffsetNumber offnum; - mmtuple = (BrinTuple *) XLogRecGetBlockData(record, 0, &tuplen); + brintuple = (BrinTuple *) XLogRecGetBlockData(record, 0, &tuplen); page = (Page) BufferGetPage(buffer); @@ -193,7 +193,7 @@ brin_xlog_samepage_update(XLogReaderState *record) elog(PANIC, "brin_xlog_samepage_update: invalid max offset number"); PageIndexDeleteNoCompact(page, &offnum, 1); - offnum = PageAddItem(page, (Item) mmtuple, tuplen, offnum, true, false); + offnum = PageAddItem(page, (Item) brintuple, tuplen, offnum, true, false); if (offnum == InvalidOffsetNumber) elog(PANIC, "brin_xlog_samepage_update: failed to add tuple"); diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c index 09aea79c99928..4363bc3d7e83d 100644 --- a/src/backend/access/common/heaptuple.c +++ b/src/backend/access/common/heaptuple.c @@ -838,7 +838,7 @@ heap_modify_tuple(HeapTuple tuple, * repl information, as appropriate. * * NOTE: it's debatable whether to use heap_deform_tuple() here or just - * heap_getattr() only the non-replaced colums. The latter could win if + * heap_getattr() only the non-replaced columns. The latter could win if * there are many replaced columns and few non-replaced ones. However, * heap_deform_tuple costs only O(N) while the heap_getattr way would cost * O(N^2) if there are many non-replaced columns, so it seems better to diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c index 8176b6a6d414b..bfb6ed184bdec 100644 --- a/src/backend/access/common/reloptions.c +++ b/src/backend/access/common/reloptions.c @@ -185,7 +185,7 @@ static relopt_int intRelOpts[] = "Age at which to autovacuum a table to prevent transaction ID wraparound", RELOPT_KIND_HEAP | RELOPT_KIND_TOAST }, - -1, 100000000, 2000000000 + -1, 100000, 2000000000 }, { { @@ -193,7 +193,7 @@ static relopt_int intRelOpts[] = "Multixact age at which to autovacuum a table to prevent multixact wraparound", RELOPT_KIND_HEAP | RELOPT_KIND_TOAST }, - -1, 100000000, 2000000000 + -1, 10000, 2000000000 }, { { @@ -484,7 +484,7 @@ allocate_reloption(bits32 kinds, int type, char *name, char *desc) size = sizeof(relopt_string); break; default: - elog(ERROR, "unsupported option type"); + elog(ERROR, "unsupported reloption type %d", type); return NULL; /* keep compiler quiet */ } @@ -1016,7 +1016,8 @@ parse_one_reloption(relopt_value *option, char *text_str, int text_len, parsed = parse_bool(value, &option->values.bool_val); if (validate && !parsed) ereport(ERROR, - (errmsg("invalid value for boolean option \"%s\": %s", + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid value for boolean option \"%s\": %s", option->gen->name, value))); } break; @@ -1027,12 +1028,14 @@ parse_one_reloption(relopt_value *option, char *text_str, int text_len, parsed = parse_int(value, &option->values.int_val, 0, NULL); if (validate && !parsed) ereport(ERROR, - (errmsg("invalid value for integer option \"%s\": %s", + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid value for integer option \"%s\": %s", option->gen->name, value))); if (validate && (option->values.int_val < optint->min || option->values.int_val > optint->max)) ereport(ERROR, - (errmsg("value %s out of bounds for option \"%s\"", + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("value %s out of bounds for option \"%s\"", value, option->gen->name), errdetail("Valid values are between \"%d\" and \"%d\".", optint->min, optint->max))); @@ -1045,12 +1048,14 @@ parse_one_reloption(relopt_value *option, char *text_str, int text_len, parsed = parse_real(value, &option->values.real_val); if (validate && !parsed) ereport(ERROR, - (errmsg("invalid value for floating point option \"%s\": %s", + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid value for floating point option \"%s\": %s", option->gen->name, value))); if (validate && (option->values.real_val < optreal->min || option->values.real_val > optreal->max)) ereport(ERROR, - (errmsg("value %s out of bounds for option \"%s\"", + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("value %s out of bounds for option \"%s\"", value, option->gen->name), errdetail("Valid values are between \"%f\" and \"%f\".", optreal->min, optreal->max))); @@ -1168,7 +1173,7 @@ fillRelOptions(void *rdopts, Size basesize, } break; default: - elog(ERROR, "unrecognized reloption type %c", + elog(ERROR, "unsupported reloption type %d", options[i].gen->type); break; } diff --git a/src/backend/access/gin/ginfast.c b/src/backend/access/gin/ginfast.c index c5732c3dc030a..65471eb9f23bd 100644 --- a/src/backend/access/gin/ginfast.c +++ b/src/backend/access/gin/ginfast.c @@ -801,8 +801,7 @@ ginInsertCleanup(GinState *ginstate, */ processPendingPage(&accum, &datums, page, FirstOffsetNumber); - if (vac_delay) - vacuum_delay_point(); + vacuum_delay_point(); /* * Is it time to flush memory to disk? Flush if we are at the end of @@ -842,8 +841,7 @@ ginInsertCleanup(GinState *ginstate, { ginEntryInsert(ginstate, attnum, key, category, list, nlist, NULL); - if (vac_delay) - vacuum_delay_point(); + vacuum_delay_point(); } /* @@ -888,8 +886,8 @@ ginInsertCleanup(GinState *ginstate, * locking */ /* - * remove readed pages from pending list, at this point all - * content of readed pages is in regular structure + * remove read pages from pending list, at this point all + * content of read pages is in regular structure */ if (shiftList(index, metabuffer, blkno, stats)) { @@ -923,7 +921,7 @@ ginInsertCleanup(GinState *ginstate, /* * Read next page in pending list */ - CHECK_FOR_INTERRUPTS(); + vacuum_delay_point(); buffer = ReadBuffer(index, blkno); LockBuffer(buffer, GIN_SHARE); page = BufferGetPage(buffer); diff --git a/src/backend/access/gin/ginvacuum.c b/src/backend/access/gin/ginvacuum.c index eba572b0d8afa..1315762ecf970 100644 --- a/src/backend/access/gin/ginvacuum.c +++ b/src/backend/access/gin/ginvacuum.c @@ -710,7 +710,7 @@ ginvacuumcleanup(PG_FUNCTION_ARGS) LockBuffer(buffer, GIN_SHARE); page = (Page) BufferGetPage(buffer); - if (GinPageIsDeleted(page)) + if (PageIsNew(page) || GinPageIsDeleted(page)) { Assert(blkno != GIN_ROOT_BLKNO); RecordFreeIndexPage(index, blkno); diff --git a/src/backend/access/gist/gistproc.c b/src/backend/access/gist/gistproc.c index 4cea3f1be18d9..22ae31c0f878a 100644 --- a/src/backend/access/gist/gistproc.c +++ b/src/backend/access/gist/gistproc.c @@ -588,7 +588,7 @@ gist_box_picksplit(PG_FUNCTION_ARGS) * We first consider splits where b is the lower bound of an entry. * We iterate through all entries, and for each b, calculate the * smallest possible a. Then we consider splits where a is the - * uppper bound of an entry, and for each a, calculate the greatest + * upper bound of an entry, and for each a, calculate the greatest * possible b. * * In the above example, the first loop would consider splits: @@ -638,7 +638,7 @@ gist_box_picksplit(PG_FUNCTION_ARGS) } /* - * Iterate over upper bound of left group finding greates possible + * Iterate over upper bound of left group finding greatest possible * lower bound of right group. */ i1 = nentries - 1; diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 86a2e6bae6abd..0424a96058f38 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -80,8 +80,11 @@ bool synchronize_seqscans = true; static HeapScanDesc heap_beginscan_internal(Relation relation, Snapshot snapshot, int nkeys, ScanKey key, - bool allow_strat, bool allow_sync, bool allow_pagemode, - bool is_bitmapscan, bool is_samplescan, + bool allow_strat, + bool allow_sync, + bool allow_pagemode, + bool is_bitmapscan, + bool is_samplescan, bool temp_snap); static HeapTuple heap_prepare_insert(Relation relation, HeapTuple tup, TransactionId xid, CommandId cid, int options); @@ -207,7 +210,7 @@ static const int MultiXactStatusLock[MaxMultiXactStatus + 1] = * ---------------- */ static void -initscan(HeapScanDesc scan, ScanKey key, bool is_rescan) +initscan(HeapScanDesc scan, ScanKey key, bool keep_startblock) { bool allow_strat; bool allow_sync; @@ -257,12 +260,12 @@ initscan(HeapScanDesc scan, ScanKey key, bool is_rescan) scan->rs_strategy = NULL; } - if (is_rescan) + if (keep_startblock) { /* - * If rescan, keep the previous startblock setting so that rewinding a - * cursor doesn't generate surprising results. Reset the syncscan - * setting, though. + * When rescanning, we want to keep the previous startblock setting, + * so that rewinding a cursor doesn't generate surprising results. + * Reset the active syncscan setting, though. */ scan->rs_syncscan = (allow_sync && synchronize_seqscans); } @@ -277,7 +280,6 @@ initscan(HeapScanDesc scan, ScanKey key, bool is_rescan) scan->rs_startblock = 0; } - scan->rs_initblock = 0; scan->rs_numblocks = InvalidBlockNumber; scan->rs_inited = false; scan->rs_ctup.t_data = NULL; @@ -302,11 +304,22 @@ initscan(HeapScanDesc scan, ScanKey key, bool is_rescan) pgstat_count_heap_scan(scan->rs_rd); } +/* + * heap_setscanlimits - restrict range of a heapscan + * + * startBlk is the page to start at + * numBlks is number of pages to scan (InvalidBlockNumber means "all") + */ void heap_setscanlimits(HeapScanDesc scan, BlockNumber startBlk, BlockNumber numBlks) { + Assert(!scan->rs_inited); /* else too late to change */ + Assert(!scan->rs_syncscan); /* else rs_startblock is significant */ + + /* Check startBlk is valid (but allow case of zero blocks...) */ + Assert(startBlk == 0 || startBlk < scan->rs_nblocks); + scan->rs_startblock = startBlk; - scan->rs_initblock = startBlk; scan->rs_numblocks = numBlks; } @@ -477,7 +490,7 @@ heapgettup(HeapScanDesc scan, /* * return null immediately if relation is empty */ - if (scan->rs_nblocks == 0) + if (scan->rs_nblocks == 0 || scan->rs_numblocks == 0) { Assert(!BufferIsValid(scan->rs_cbuf)); tuple->t_data = NULL; @@ -511,7 +524,7 @@ heapgettup(HeapScanDesc scan, /* * return null immediately if relation is empty */ - if (scan->rs_nblocks == 0) + if (scan->rs_nblocks == 0 || scan->rs_numblocks == 0) { Assert(!BufferIsValid(scan->rs_cbuf)); tuple->t_data = NULL; @@ -651,7 +664,7 @@ heapgettup(HeapScanDesc scan, if (backward) { finished = (page == scan->rs_startblock) || - (scan->rs_numblocks != InvalidBlockNumber ? --scan->rs_numblocks <= 0 : false); + (scan->rs_numblocks != InvalidBlockNumber ? --scan->rs_numblocks == 0 : false); if (page == 0) page = scan->rs_nblocks; page--; @@ -662,7 +675,7 @@ heapgettup(HeapScanDesc scan, if (page >= scan->rs_nblocks) page = 0; finished = (page == scan->rs_startblock) || - (scan->rs_numblocks != InvalidBlockNumber ? --scan->rs_numblocks <= 0 : false); + (scan->rs_numblocks != InvalidBlockNumber ? --scan->rs_numblocks == 0 : false); /* * Report our new scan position for synchronization purposes. We @@ -754,7 +767,7 @@ heapgettup_pagemode(HeapScanDesc scan, /* * return null immediately if relation is empty */ - if (scan->rs_nblocks == 0) + if (scan->rs_nblocks == 0 || scan->rs_numblocks == 0) { Assert(!BufferIsValid(scan->rs_cbuf)); tuple->t_data = NULL; @@ -785,7 +798,7 @@ heapgettup_pagemode(HeapScanDesc scan, /* * return null immediately if relation is empty */ - if (scan->rs_nblocks == 0) + if (scan->rs_nblocks == 0 || scan->rs_numblocks == 0) { Assert(!BufferIsValid(scan->rs_cbuf)); tuple->t_data = NULL; @@ -914,7 +927,7 @@ heapgettup_pagemode(HeapScanDesc scan, if (backward) { finished = (page == scan->rs_startblock) || - (scan->rs_numblocks != InvalidBlockNumber ? --scan->rs_numblocks <= 0 : false); + (scan->rs_numblocks != InvalidBlockNumber ? --scan->rs_numblocks == 0 : false); if (page == 0) page = scan->rs_nblocks; page--; @@ -925,7 +938,7 @@ heapgettup_pagemode(HeapScanDesc scan, if (page >= scan->rs_nblocks) page = 0; finished = (page == scan->rs_startblock) || - (scan->rs_numblocks != InvalidBlockNumber ? --scan->rs_numblocks <= 0 : false); + (scan->rs_numblocks != InvalidBlockNumber ? --scan->rs_numblocks == 0 : false); /* * Report our new scan position for synchronization purposes. We @@ -1303,6 +1316,10 @@ heap_openrv_extended(const RangeVar *relation, LOCKMODE lockmode, /* ---------------- * heap_beginscan - begin relation scan * + * heap_beginscan is the "standard" case. + * + * heap_beginscan_catalog differs in setting up its own temporary snapshot. + * * heap_beginscan_strat offers an extended API that lets the caller control * whether a nondefault buffer access strategy can be used, and whether * syncscan can be chosen (possibly resulting in the scan not starting from @@ -1313,8 +1330,11 @@ heap_openrv_extended(const RangeVar *relation, LOCKMODE lockmode, * really quite unlike a standard seqscan, there is just enough commonality * to make it worth using the same data structure. * - * heap_beginscan_samplingscan is alternate entry point for setting up a - * HeapScanDesc for a TABLESAMPLE scan. + * heap_beginscan_sampling is an alternative entry point for setting up a + * HeapScanDesc for a TABLESAMPLE scan. As with bitmap scans, it's worth + * using the same data structure although the behavior is rather different. + * In addition to the options offered by heap_beginscan_strat, this call + * also allows control of whether page-mode visibility checking is used. * ---------------- */ HeapScanDesc @@ -1356,18 +1376,22 @@ heap_beginscan_bm(Relation relation, Snapshot snapshot, HeapScanDesc heap_beginscan_sampling(Relation relation, Snapshot snapshot, int nkeys, ScanKey key, - bool allow_strat, bool allow_pagemode) + bool allow_strat, bool allow_sync, bool allow_pagemode) { return heap_beginscan_internal(relation, snapshot, nkeys, key, - allow_strat, false, allow_pagemode, + allow_strat, allow_sync, allow_pagemode, false, true, false); } static HeapScanDesc heap_beginscan_internal(Relation relation, Snapshot snapshot, int nkeys, ScanKey key, - bool allow_strat, bool allow_sync, bool allow_pagemode, - bool is_bitmapscan, bool is_samplescan, bool temp_snap) + bool allow_strat, + bool allow_sync, + bool allow_pagemode, + bool is_bitmapscan, + bool is_samplescan, + bool temp_snap) { HeapScanDesc scan; @@ -1451,6 +1475,27 @@ heap_rescan(HeapScanDesc scan, initscan(scan, key, true); } +/* ---------------- + * heap_rescan_set_params - restart a relation scan after changing params + * + * This call allows changing the buffer strategy, syncscan, and pagemode + * options before starting a fresh scan. Note that although the actual use + * of syncscan might change (effectively, enabling or disabling reporting), + * the previously selected startblock will be kept. + * ---------------- + */ +void +heap_rescan_set_params(HeapScanDesc scan, ScanKey key, + bool allow_strat, bool allow_sync, bool allow_pagemode) +{ + /* adjust parameters */ + scan->rs_allow_strat = allow_strat; + scan->rs_allow_sync = allow_sync; + scan->rs_pageatatime = allow_pagemode && IsMVCCSnapshot(scan->rs_snapshot); + /* ... and rescan */ + heap_rescan(scan, key); +} + /* ---------------- * heap_endscan - end relation scan * @@ -2118,26 +2163,31 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, */ heaptup = heap_prepare_insert(relation, tup, xid, cid, options); + /* + * Find buffer to insert this tuple into. If the page is all visible, + * this will also pin the requisite visibility map page. + */ + buffer = RelationGetBufferForTuple(relation, heaptup->t_len, + InvalidBuffer, options, bistate, + &vmbuffer, NULL); + /* * We're about to do the actual insert -- but check for conflict first, to * avoid possibly having to roll back work we've just done. * + * This is safe without a recheck as long as there is no possibility of + * another process scanning the page between this check and the insert + * being visible to the scan (i.e., an exclusive buffer content lock is + * continuously held from this point until the tuple insert is visible). + * * For a heap insert, we only need to check for table-level SSI locks. Our * new tuple can't possibly conflict with existing tuple locks, and heap * page locks are only consolidated versions of tuple locks; they do not - * lock "gaps" as index page locks do. So we don't need to identify a - * buffer before making the call. + * lock "gaps" as index page locks do. So we don't need to specify a + * buffer when making the call, which makes for a faster check. */ CheckForSerializableConflictIn(relation, NULL, InvalidBuffer); - /* - * Find buffer to insert this tuple into. If the page is all visible, - * this will also pin the requisite visibility map page. - */ - buffer = RelationGetBufferForTuple(relation, heaptup->t_len, - InvalidBuffer, options, bistate, - &vmbuffer, NULL); - /* NO EREPORT(ERROR) from here till changes are logged */ START_CRIT_SECTION(); @@ -2391,13 +2441,26 @@ heap_multi_insert(Relation relation, HeapTuple *tuples, int ntuples, /* * We're about to do the actual inserts -- but check for conflict first, - * to avoid possibly having to roll back work we've just done. + * to minimize the possibility of having to roll back work we've just + * done. * - * For a heap insert, we only need to check for table-level SSI locks. Our - * new tuple can't possibly conflict with existing tuple locks, and heap + * A check here does not definitively prevent a serialization anomaly; + * that check MUST be done at least past the point of acquiring an + * exclusive buffer content lock on every buffer that will be affected, + * and MAY be done after all inserts are reflected in the buffers and + * those locks are released; otherwise there race condition. Since + * multiple buffers can be locked and unlocked in the loop below, and it + * would not be feasible to identify and lock all of those buffers before + * the loop, we must do a final check at the end. + * + * The check here could be omitted with no loss of correctness; it is + * present strictly as an optimization. + * + * For heap inserts, we only need to check for table-level SSI locks. Our + * new tuples can't possibly conflict with existing tuple locks, and heap * page locks are only consolidated versions of tuple locks; they do not - * lock "gaps" as index page locks do. So we don't need to identify a - * buffer before making the call. + * lock "gaps" as index page locks do. So we don't need to specify a + * buffer when making the call, which makes for a faster check. */ CheckForSerializableConflictIn(relation, NULL, InvalidBuffer); @@ -2576,6 +2639,22 @@ heap_multi_insert(Relation relation, HeapTuple *tuples, int ntuples, ndone += nthispage; } + /* + * We're done with the actual inserts. Check for conflicts again, to + * ensure that all rw-conflicts in to these inserts are detected. Without + * this final check, a sequential scan of the heap may have locked the + * table after the "before" check, missing one opportunity to detect the + * conflict, and then scanned the table before the new tuples were there, + * missing the other chance to detect the conflict. + * + * For heap inserts, we only need to check for table-level SSI locks. Our + * new tuples can't possibly conflict with existing tuple locks, and heap + * page locks are only consolidated versions of tuple locks; they do not + * lock "gaps" as index page locks do. So we don't need to specify a + * buffer when making the call. + */ + CheckForSerializableConflictIn(relation, NULL, InvalidBuffer); + /* * If tuples are cachable, mark them for invalidation from the caches in * case we abort. Note it is OK to do this after releasing the buffer, @@ -2756,7 +2835,9 @@ heap_delete(Relation relation, ItemPointer tid, if (result == HeapTupleInvisible) { UnlockReleaseBuffer(buffer); - elog(ERROR, "attempted to delete invisible tuple"); + ereport(ERROR, + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("attempted to delete invisible tuple"))); } else if (result == HeapTupleBeingUpdated && wait) { @@ -2887,6 +2968,11 @@ heap_delete(Relation relation, ItemPointer tid, /* * We're about to do the actual delete -- check for conflict first, to * avoid possibly having to roll back work we've just done. + * + * This is safe without a recheck as long as there is no possibility of + * another process scanning the page between this check and the delete + * being visible to the scan (i.e., an exclusive buffer content lock is + * continuously held from this point until the tuple delete is visible). */ CheckForSerializableConflictIn(relation, &tp, buffer); @@ -3298,7 +3384,9 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, if (result == HeapTupleInvisible) { UnlockReleaseBuffer(buffer); - elog(ERROR, "attempted to update invisible tuple"); + ereport(ERROR, + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("attempted to update invisible tuple"))); } else if (result == HeapTupleBeingUpdated && wait) { @@ -3512,12 +3600,6 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, goto l2; } - /* - * We're about to do the actual update -- check for conflict first, to - * avoid possibly having to roll back work we've just done. - */ - CheckForSerializableConflictIn(relation, &oldtup, buffer); - /* Fill in transaction status data */ /* @@ -3706,14 +3788,20 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, } /* - * We're about to create the new tuple -- check for conflict first, to + * We're about to do the actual update -- check for conflict first, to * avoid possibly having to roll back work we've just done. * - * NOTE: For a tuple insert, we only need to check for table locks, since - * predicate locking at the index level will cover ranges for anything - * except a table scan. Therefore, only provide the relation. + * This is safe without a recheck as long as there is no possibility of + * another process scanning the pages between this check and the update + * being visible to the scan (i.e., exclusive buffer content lock(s) are + * continuously held from this point until the tuple update is visible). + * + * For the new tuple the only check needed is at the relation level, but + * since both tuples are in the same relation and the check for oldtup + * will include checking the relation level, there is no benefit to a + * separate check for the new tuple. */ - CheckForSerializableConflictIn(relation, NULL, InvalidBuffer); + CheckForSerializableConflictIn(relation, &oldtup, buffer); /* * At this point newbuf and buffer are both pinned and locked, and newbuf @@ -5424,7 +5512,7 @@ heap_lock_updated_tuple_rec(Relation rel, ItemPointer tid, TransactionId xid, * * The initial tuple is assumed to be already locked. * - * This function doesn't check visibility, it just inconditionally marks the + * 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 * concurrently (or updated with the key being modified), sleep until the * transaction doing it is finished. @@ -6138,7 +6226,7 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple, TransactionId cutoff_xid, /* * NB -- some of these transformations are only valid because we * know the return Xid is a tuple updater (i.e. not merely a - * locker.) Also note that the only reason we don't explicitely + * locker.) Also note that the only reason we don't explicitly * worry about HEAP_KEYS_UPDATED is because it lives in * t_infomask2 rather than t_infomask. */ diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c index bcce3e35d5eb8..6a6fc3bf11dab 100644 --- a/src/backend/access/heap/rewriteheap.c +++ b/src/backend/access/heap/rewriteheap.c @@ -763,9 +763,9 @@ raw_heap_insert(RewriteState state, HeapTuple tup) * * Crash-Safety: This module diverts from the usual patterns of doing WAL * since it cannot rely on checkpoint flushing out all buffers and thus - * waiting for exlusive locks on buffers. Usually the XLogInsert() covering + * waiting for exclusive locks on buffers. Usually the XLogInsert() covering * buffer modifications is performed while the buffer(s) that are being - * modified are exlusively locked guaranteeing that both the WAL record and + * modified are exclusively locked guaranteeing that both the WAL record and * the modified heap are on either side of the checkpoint. But since the * mapping files we log aren't in shared_buffers that interlock doesn't work. * diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c index 1043362f914e2..aa5b28c61a07c 100644 --- a/src/backend/access/index/genam.c +++ b/src/backend/access/index/genam.c @@ -204,7 +204,7 @@ BuildIndexValueDescription(Relation indexRelation, Assert(indexrelid == idxrec->indexrelid); /* RLS check- if RLS is enabled then we don't return anything. */ - if (check_enable_rls(indrelid, GetUserId(), true) == RLS_ENABLED) + if (check_enable_rls(indrelid, InvalidOid, true) == RLS_ENABLED) { ReleaseSysCache(ht_idx); return NULL; diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 9431ab5d04281..cf4a6dc7c4780 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -881,7 +881,7 @@ btvacuumpage(BTVacState *vstate, BlockNumber blkno, BlockNumber orig_blkno) BlockNumber recurse_to; Buffer buf; Page page; - BTPageOpaque opaque; + BTPageOpaque opaque = NULL; restart: delete_now = false; @@ -900,9 +900,11 @@ btvacuumpage(BTVacState *vstate, BlockNumber blkno, BlockNumber orig_blkno) info->strategy); LockBuffer(buf, BT_READ); page = BufferGetPage(buf); - opaque = (BTPageOpaque) PageGetSpecialPointer(page); if (!PageIsNew(page)) + { _bt_checkpage(rel, buf); + opaque = (BTPageOpaque) PageGetSpecialPointer(page); + } /* * If we are recursing, the only case we want to do anything with is a diff --git a/src/backend/access/rmgrdesc/gindesc.c b/src/backend/access/rmgrdesc/gindesc.c index 324efa3769906..09e928fb7c6da 100644 --- a/src/backend/access/rmgrdesc/gindesc.c +++ b/src/backend/access/rmgrdesc/gindesc.c @@ -113,7 +113,7 @@ gin_desc(StringInfo buf, XLogReaderState *record) (ginxlogRecompressDataLeaf *) payload; if (XLogRecHasBlockImage(record, 0)) - appendStringInfo(buf, " (full page image)"); + appendStringInfoString(buf, " (full page image)"); else desc_recompress_leaf(buf, insertData); } @@ -147,7 +147,7 @@ gin_desc(StringInfo buf, XLogReaderState *record) ginxlogVacuumDataLeafPage *xlrec = (ginxlogVacuumDataLeafPage *) rec; if (XLogRecHasBlockImage(record, 0)) - appendStringInfo(buf, " (full page image)"); + appendStringInfoString(buf, " (full page image)"); else desc_recompress_leaf(buf, &xlrec->data); } diff --git a/src/backend/access/rmgrdesc/mxactdesc.c b/src/backend/access/rmgrdesc/mxactdesc.c index 572951ec2f11d..5b8134f258207 100644 --- a/src/backend/access/rmgrdesc/mxactdesc.c +++ b/src/backend/access/rmgrdesc/mxactdesc.c @@ -70,6 +70,14 @@ multixact_desc(StringInfo buf, XLogReaderState *record) for (i = 0; i < xlrec->nmembers; i++) out_member(buf, &xlrec->members[i]); } + else if (info == XLOG_MULTIXACT_TRUNCATE_ID) + { + xl_multixact_truncate *xlrec = (xl_multixact_truncate *) rec; + + appendStringInfo(buf, "offsets [%u, %u), members [%u, %u)", + xlrec->startTruncOff, xlrec->endTruncOff, + xlrec->startTruncMemb, xlrec->endTruncMemb); + } } const char * @@ -88,6 +96,9 @@ multixact_identify(uint8 info) case XLOG_MULTIXACT_CREATE_ID: id = "CREATE_ID"; break; + case XLOG_MULTIXACT_TRUNCATE_ID: + id = "TRUNCATE_ID"; + break; } return id; diff --git a/src/backend/access/rmgrdesc/spgdesc.c b/src/backend/access/rmgrdesc/spgdesc.c index 6e426d7b8c721..478f50c7a0d20 100644 --- a/src/backend/access/rmgrdesc/spgdesc.c +++ b/src/backend/access/rmgrdesc/spgdesc.c @@ -30,14 +30,14 @@ spg_desc(StringInfo buf, XLogReaderState *record) { spgxlogAddLeaf *xlrec = (spgxlogAddLeaf *) rec; - appendStringInfo(buf, "add leaf to page"); + appendStringInfoString(buf, "add leaf to page"); appendStringInfo(buf, "; off %u; headoff %u; parentoff %u", xlrec->offnumLeaf, xlrec->offnumHeadLeaf, xlrec->offnumParent); if (xlrec->newPage) - appendStringInfo(buf, " (newpage)"); + appendStringInfoString(buf, " (newpage)"); if (xlrec->storesNulls) - appendStringInfo(buf, " (nulls)"); + appendStringInfoString(buf, " (nulls)"); } break; case XLOG_SPGIST_MOVE_LEAFS: @@ -63,9 +63,9 @@ spg_desc(StringInfo buf, XLogReaderState *record) appendStringInfo(buf, "ndel %u; nins %u", xlrec->nDelete, xlrec->nInsert); if (xlrec->innerIsParent) - appendStringInfo(buf, " (innerIsParent)"); + appendStringInfoString(buf, " (innerIsParent)"); if (xlrec->isRootSplit) - appendStringInfo(buf, " (isRootSplit)"); + appendStringInfoString(buf, " (isRootSplit)"); } break; case XLOG_SPGIST_VACUUM_LEAF: diff --git a/src/backend/access/rmgrdesc/xactdesc.c b/src/backend/access/rmgrdesc/xactdesc.c index 7b5f98305070c..e811c0a61ee46 100644 --- a/src/backend/access/rmgrdesc/xactdesc.c +++ b/src/backend/access/rmgrdesc/xactdesc.c @@ -232,7 +232,7 @@ xact_desc_commit(StringInfo buf, uint8 info, xl_xact_commit *xlrec, RepOriginId } if (XactCompletionForceSyncCommit(parsed.xinfo)) - appendStringInfo(buf, "; sync"); + appendStringInfoString(buf, "; sync"); if (parsed.xinfo & XACT_XINFO_HAS_ORIGIN) { diff --git a/src/backend/access/rmgrdesc/xlogdesc.c b/src/backend/access/rmgrdesc/xlogdesc.c index 4f2913683a1a2..83cc9e896ebcb 100644 --- a/src/backend/access/rmgrdesc/xlogdesc.c +++ b/src/backend/access/rmgrdesc/xlogdesc.c @@ -111,7 +111,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record) appendStringInfo(buf, "max_connections=%d max_worker_processes=%d " "max_prepared_xacts=%d max_locks_per_xact=%d " "wal_level=%s wal_log_hints=%s " - "track_commit_timestamps=%s", + "track_commit_timestamp=%s", xlrec.MaxConnections, xlrec.max_worker_processes, xlrec.max_prepared_xacts, diff --git a/src/backend/access/spgist/spgdoinsert.c b/src/backend/access/spgist/spgdoinsert.c index b3fda13fa0662..db5d962b885c2 100644 --- a/src/backend/access/spgist/spgdoinsert.c +++ b/src/backend/access/spgist/spgdoinsert.c @@ -291,12 +291,16 @@ addLeafTuple(Relation index, SpGistState *state, SpGistLeafTuple leafTuple, if (RelationNeedsWAL(index)) { XLogRecPtr recptr; + int flags; XLogBeginInsert(); XLogRegisterData((char *) &xlrec, sizeof(xlrec)); XLogRegisterData((char *) leafTuple, leafTuple->size); - XLogRegisterBuffer(0, current->buffer, REGBUF_STANDARD); + flags = REGBUF_STANDARD; + if (xlrec.newPage) + flags |= REGBUF_WILL_INIT; + XLogRegisterBuffer(0, current->buffer, flags); if (xlrec.offnumParent != InvalidOffsetNumber) XLogRegisterBuffer(1, parent->buffer, REGBUF_STANDARD); @@ -1348,12 +1352,16 @@ doPickSplit(Relation index, SpGistState *state, XLogRegisterData((char *) innerTuple, innerTuple->size); XLogRegisterData(leafdata, leafptr - leafdata); - flags = REGBUF_STANDARD; - if (xlrec.initSrc) - flags |= REGBUF_WILL_INIT; + /* Old leaf page */ if (BufferIsValid(saveCurrent.buffer)) + { + flags = REGBUF_STANDARD; + if (xlrec.initSrc) + flags |= REGBUF_WILL_INIT; XLogRegisterBuffer(0, saveCurrent.buffer, flags); + } + /* New leaf page */ if (BufferIsValid(newLeafBuffer)) { flags = REGBUF_STANDARD; @@ -1361,7 +1369,14 @@ doPickSplit(Relation index, SpGistState *state, flags |= REGBUF_WILL_INIT; XLogRegisterBuffer(1, newLeafBuffer, flags); } - XLogRegisterBuffer(2, current->buffer, REGBUF_STANDARD); + + /* Inner page */ + flags = REGBUF_STANDARD; + if (xlrec.initInner) + flags |= REGBUF_WILL_INIT; + XLogRegisterBuffer(2, current->buffer, flags); + + /* Parent page, if different from inner page */ if (parent->buffer != InvalidBuffer) { if (parent->buffer != current->buffer) @@ -1631,13 +1646,17 @@ spgAddNodeAction(Relation index, SpGistState *state, if (RelationNeedsWAL(index)) { XLogRecPtr recptr; + int flags; XLogBeginInsert(); /* orig page */ XLogRegisterBuffer(0, saveCurrent.buffer, REGBUF_STANDARD); /* new page */ - XLogRegisterBuffer(1, current->buffer, REGBUF_STANDARD); + flags = REGBUF_STANDARD; + if (xlrec.newPage) + flags |= REGBUF_WILL_INIT; + XLogRegisterBuffer(1, current->buffer, flags); /* parent page (if different from orig and new) */ if (xlrec.parentBlk == 2) XLogRegisterBuffer(2, parent->buffer, REGBUF_STANDARD); diff --git a/src/backend/access/spgist/spgvacuum.c b/src/backend/access/spgist/spgvacuum.c index dc69d1ed20fcc..06c0b0af7eedc 100644 --- a/src/backend/access/spgist/spgvacuum.c +++ b/src/backend/access/spgist/spgvacuum.c @@ -621,14 +621,10 @@ spgvacuumpage(spgBulkDeleteState *bds, BlockNumber blkno) { /* * We found an all-zero page, which could happen if the database - * crashed just after extending the file. Initialize and recycle it. + * crashed just after extending the file. Recycle it. */ - SpGistInitBuffer(buffer, 0); - SpGistPageSetDeleted(page); - /* We don't bother to WAL-log this action; easy to redo */ - MarkBufferDirty(buffer); } - else if (SpGistPageIsDeleted(page)) + else if (PageIsEmpty(page)) { /* nothing to do */ } @@ -654,30 +650,23 @@ spgvacuumpage(spgBulkDeleteState *bds, BlockNumber blkno) /* * The root pages must never be deleted, nor marked as available in FSM, * because we don't want them ever returned by a search for a place to put - * a new tuple. Otherwise, check for empty/deletable page, and make sure - * FSM knows about it. + * a new tuple. Otherwise, check for empty page, and make sure the FSM + * knows about it. */ if (!SpGistBlockIsRoot(blkno)) { - /* If page is now empty, mark it deleted */ - if (PageIsEmpty(page) && !SpGistPageIsDeleted(page)) - { - SpGistPageSetDeleted(page); - /* We don't bother to WAL-log this action; easy to redo */ - MarkBufferDirty(buffer); - } - - if (SpGistPageIsDeleted(page)) + if (PageIsNew(page) || PageIsEmpty(page)) { RecordFreeIndexPage(index, blkno); bds->stats->pages_deleted++; } else + { + SpGistSetLastUsedPage(index, buffer); bds->lastFilledBlock = blkno; + } } - SpGistSetLastUsedPage(index, buffer); - UnlockReleaseBuffer(buffer); } diff --git a/src/backend/access/tablesample/Makefile b/src/backend/access/tablesample/Makefile index 46eeb59f9c468..68d9ab281472d 100644 --- a/src/backend/access/tablesample/Makefile +++ b/src/backend/access/tablesample/Makefile @@ -1,10 +1,10 @@ #------------------------------------------------------------------------- # # Makefile-- -# Makefile for utils/tablesample +# Makefile for access/tablesample # # IDENTIFICATION -# src/backend/utils/tablesample/Makefile +# src/backend/access/tablesample/Makefile # #------------------------------------------------------------------------- @@ -12,6 +12,6 @@ subdir = src/backend/access/tablesample top_builddir = ../../../.. include $(top_builddir)/src/Makefile.global -OBJS = tablesample.o system.o bernoulli.o +OBJS = bernoulli.o system.o tablesample.o include $(top_srcdir)/src/backend/common.mk diff --git a/src/backend/access/tablesample/bernoulli.c b/src/backend/access/tablesample/bernoulli.c index 0a539008221a5..ccef4f7f84388 100644 --- a/src/backend/access/tablesample/bernoulli.c +++ b/src/backend/access/tablesample/bernoulli.c @@ -1,233 +1,233 @@ /*------------------------------------------------------------------------- * * bernoulli.c - * interface routines for BERNOULLI tablesample method + * support routines for BERNOULLI tablesample method * - * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group + * To ensure repeatability of samples, it is necessary that selection of a + * given tuple be history-independent; otherwise syncscanning would break + * repeatability, to say nothing of logically-irrelevant maintenance such + * as physical extension or shortening of the relation. + * + * To achieve that, we proceed by hashing each candidate TID together with + * the active seed, and then selecting it if the hash is less than the + * cutoff value computed from the selection probability by BeginSampleScan. + * + * + * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * src/backend/utils/tablesample/bernoulli.c + * src/backend/access/tablesample/bernoulli.c * *------------------------------------------------------------------------- */ #include "postgres.h" -#include "fmgr.h" +#ifdef _MSC_VER +#include /* for _isnan */ +#endif +#include -#include "access/tablesample.h" -#include "access/relscan.h" -#include "nodes/execnodes.h" -#include "nodes/relation.h" +#include "access/hash.h" +#include "access/tsmapi.h" +#include "catalog/pg_type.h" #include "optimizer/clauses.h" -#include "storage/bufmgr.h" -#include "utils/sampling.h" +#include "optimizer/cost.h" +#include "utils/builtins.h" -/* tsdesc */ +/* Private state */ typedef struct { + uint64 cutoff; /* select tuples with hash less than this */ uint32 seed; /* random seed */ - BlockNumber startblock; /* starting block, we use ths for syncscan - * support */ - BlockNumber nblocks; /* number of blocks */ - BlockNumber blockno; /* current block */ - float4 probability; /* probabilty that tuple will be returned - * (0.0-1.0) */ OffsetNumber lt; /* last tuple returned from current block */ - SamplerRandomState randstate; /* random generator tsdesc */ } BernoulliSamplerData; + +static void bernoulli_samplescangetsamplesize(PlannerInfo *root, + RelOptInfo *baserel, + List *paramexprs, + BlockNumber *pages, + double *tuples); +static void bernoulli_initsamplescan(SampleScanState *node, + int eflags); +static void bernoulli_beginsamplescan(SampleScanState *node, + Datum *params, + int nparams, + uint32 seed); +static OffsetNumber bernoulli_nextsampletuple(SampleScanState *node, + BlockNumber blockno, + OffsetNumber maxoffset); + + /* - * Initialize the state. + * Create a TsmRoutine descriptor for the BERNOULLI method. */ Datum -tsm_bernoulli_init(PG_FUNCTION_ARGS) +tsm_bernoulli_handler(PG_FUNCTION_ARGS) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - uint32 seed = PG_GETARG_UINT32(1); - float4 percent = PG_ARGISNULL(2) ? -1 : PG_GETARG_FLOAT4(2); - HeapScanDesc scan = tsdesc->heapScan; - BernoulliSamplerData *sampler; + TsmRoutine *tsm = makeNode(TsmRoutine); + + tsm->parameterTypes = list_make1_oid(FLOAT4OID); + tsm->repeatable_across_queries = true; + tsm->repeatable_across_scans = true; + tsm->SampleScanGetSampleSize = bernoulli_samplescangetsamplesize; + tsm->InitSampleScan = bernoulli_initsamplescan; + tsm->BeginSampleScan = bernoulli_beginsamplescan; + tsm->NextSampleBlock = NULL; + tsm->NextSampleTuple = bernoulli_nextsampletuple; + tsm->EndSampleScan = NULL; + + PG_RETURN_POINTER(tsm); +} - if (percent < 0 || percent > 100) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("invalid sample size"), - errhint("Sample size must be numeric value between 0 and 100 (inclusive)."))); +/* + * Sample size estimation. + */ +static void +bernoulli_samplescangetsamplesize(PlannerInfo *root, + RelOptInfo *baserel, + List *paramexprs, + BlockNumber *pages, + double *tuples) +{ + Node *pctnode; + float4 samplefract; - sampler = palloc0(sizeof(BernoulliSamplerData)); + /* Try to extract an estimate for the sample percentage */ + pctnode = (Node *) linitial(paramexprs); + pctnode = estimate_expression_value(root, pctnode); - /* Remember initial values for reinit */ - sampler->seed = seed; - sampler->startblock = scan->rs_startblock; - sampler->nblocks = scan->rs_nblocks; - sampler->blockno = InvalidBlockNumber; - sampler->probability = percent / 100; - sampler->lt = InvalidOffsetNumber; - sampler_random_init_state(sampler->seed, sampler->randstate); + if (IsA(pctnode, Const) && + !((Const *) pctnode)->constisnull) + { + samplefract = DatumGetFloat4(((Const *) pctnode)->constvalue); + if (samplefract >= 0 && samplefract <= 100 && !isnan(samplefract)) + samplefract /= 100.0f; + else + { + /* Default samplefract if the value is bogus */ + samplefract = 0.1f; + } + } + else + { + /* Default samplefract if we didn't obtain a non-null Const */ + samplefract = 0.1f; + } + + /* We'll visit all pages of the baserel */ + *pages = baserel->pages; - tsdesc->tsmdata = (void *) sampler; + *tuples = clamp_row_est(baserel->tuples * samplefract); +} - PG_RETURN_VOID(); +/* + * Initialize during executor setup. + */ +static void +bernoulli_initsamplescan(SampleScanState *node, int eflags) +{ + node->tsm_state = palloc0(sizeof(BernoulliSamplerData)); } /* - * Get next block number to read or InvalidBlockNumber if we are at the - * end of the relation. + * Examine parameters and prepare for a sample scan. */ -Datum -tsm_bernoulli_nextblock(PG_FUNCTION_ARGS) +static void +bernoulli_beginsamplescan(SampleScanState *node, + Datum *params, + int nparams, + uint32 seed) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - BernoulliSamplerData *sampler = (BernoulliSamplerData *) tsdesc->tsmdata; + BernoulliSamplerData *sampler = (BernoulliSamplerData *) node->tsm_state; + double percent = DatumGetFloat4(params[0]); + double dcutoff; + + if (percent < 0 || percent > 100 || isnan(percent)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_TABLESAMPLE_ARGUMENT), + errmsg("sample percentage must be between 0 and 100"))); /* - * Bernoulli sampling scans all blocks on the table and supports syncscan - * so loop from startblock to startblock instead of from 0 to nblocks. + * The cutoff is sample probability times (PG_UINT32_MAX + 1); we have to + * store that as a uint64, of course. Note that this gives strictly + * correct behavior at the limits of zero or one probability. */ - if (sampler->blockno == InvalidBlockNumber) - sampler->blockno = sampler->startblock; - else - { - sampler->blockno++; - - if (sampler->blockno >= sampler->nblocks) - sampler->blockno = 0; - - if (sampler->blockno == sampler->startblock) - PG_RETURN_UINT32(InvalidBlockNumber); - } + dcutoff = rint(((double) PG_UINT32_MAX + 1) * percent / 100); + sampler->cutoff = (uint64) dcutoff; + sampler->seed = seed; + sampler->lt = InvalidOffsetNumber; - PG_RETURN_UINT32(sampler->blockno); + /* + * Use bulkread, since we're scanning all pages. But pagemode visibility + * checking is a win only at larger sampling fractions. The 25% cutoff + * here is based on very limited experimentation. + */ + node->use_bulkread = true; + node->use_pagemode = (percent >= 25); } /* - * Get next tuple from current block. - * - * This method implements the main logic in bernoulli sampling. - * The algorithm simply generates new random number (in 0.0-1.0 range) and if - * it falls within user specified probability (in the same range) return the - * tuple offset. - * - * It is ok here to return tuple offset without knowing if tuple is visible - * and not check it via examinetuple. The reason for that is that we do the - * coinflip (random number generation) for every tuple in the table. Since all - * tuples have same probability of being returned the visible and invisible - * tuples will be returned in same ratio as they have in the actual table. - * This means that there is no skew towards either visible or invisible tuples - * and the number of visible tuples returned from the executor node should - * match the fraction of visible tuples which was specified by user. + * Select next sampled tuple in current block. * - * This is faster than doing the coinflip in examinetuple because we don't - * have to do visibility checks on uninteresting tuples. + * It is OK here to return an offset without knowing if the tuple is visible + * (or even exists). The reason is that we do the coinflip for every tuple + * offset in the table. Since all tuples have the same probability of being + * returned, it doesn't matter if we do extra coinflips for invisible tuples. * - * If we reach end of the block return InvalidOffsetNumber which tells + * When we reach end of the block, return InvalidOffsetNumber which tells * SampleScan to go to next block. */ -Datum -tsm_bernoulli_nexttuple(PG_FUNCTION_ARGS) +static OffsetNumber +bernoulli_nextsampletuple(SampleScanState *node, + BlockNumber blockno, + OffsetNumber maxoffset) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - OffsetNumber maxoffset = PG_GETARG_UINT16(2); - BernoulliSamplerData *sampler = (BernoulliSamplerData *) tsdesc->tsmdata; + BernoulliSamplerData *sampler = (BernoulliSamplerData *) node->tsm_state; OffsetNumber tupoffset = sampler->lt; - float4 probability = sampler->probability; + uint32 hashinput[3]; + /* Advance to first/next tuple in block */ if (tupoffset == InvalidOffsetNumber) tupoffset = FirstOffsetNumber; else tupoffset++; /* - * Loop over tuple offsets until the random generator returns value that - * is within the probability of returning the tuple or until we reach end - * of the block. + * We compute the hash by applying hash_any to an array of 3 uint32's + * containing the block, offset, and seed. This is efficient to set up, + * and with the current implementation of hash_any, it gives + * machine-independent results, which is a nice property for regression + * testing. * - * (This is our implementation of bernoulli trial) + * These words in the hash input are the same throughout the block: */ - while (sampler_random_fract(sampler->randstate) > probability) + hashinput[0] = blockno; + hashinput[2] = sampler->seed; + + /* + * Loop over tuple offsets until finding suitable TID or reaching end of + * block. + */ + for (; tupoffset <= maxoffset; tupoffset++) { - tupoffset++; + uint32 hash; - if (tupoffset > maxoffset) + hashinput[1] = tupoffset; + + hash = DatumGetUInt32(hash_any((const unsigned char *) hashinput, + (int) sizeof(hashinput))); + if (hash < sampler->cutoff) break; } if (tupoffset > maxoffset) - /* Tell SampleScan that we want next block. */ tupoffset = InvalidOffsetNumber; sampler->lt = tupoffset; - PG_RETURN_UINT16(tupoffset); -} - -/* - * Cleanup method. - */ -Datum -tsm_bernoulli_end(PG_FUNCTION_ARGS) -{ - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - - pfree(tsdesc->tsmdata); - - PG_RETURN_VOID(); -} - -/* - * Reset tsdesc (called by ReScan). - */ -Datum -tsm_bernoulli_reset(PG_FUNCTION_ARGS) -{ - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - BernoulliSamplerData *sampler = (BernoulliSamplerData *) tsdesc->tsmdata; - - sampler->blockno = InvalidBlockNumber; - sampler->lt = InvalidOffsetNumber; - sampler_random_init_state(sampler->seed, sampler->randstate); - - PG_RETURN_VOID(); -} - -/* - * Costing function. - */ -Datum -tsm_bernoulli_cost(PG_FUNCTION_ARGS) -{ - PlannerInfo *root = (PlannerInfo *) PG_GETARG_POINTER(0); - Path *path = (Path *) PG_GETARG_POINTER(1); - RelOptInfo *baserel = (RelOptInfo *) PG_GETARG_POINTER(2); - List *args = (List *) PG_GETARG_POINTER(3); - BlockNumber *pages = (BlockNumber *) PG_GETARG_POINTER(4); - double *tuples = (double *) PG_GETARG_POINTER(5); - Node *pctnode; - float4 samplesize; - - *pages = baserel->pages; - - pctnode = linitial(args); - pctnode = estimate_expression_value(root, pctnode); - - if (IsA(pctnode, RelabelType)) - pctnode = (Node *) ((RelabelType *) pctnode)->arg; - - if (IsA(pctnode, Const)) - { - samplesize = DatumGetFloat4(((Const *) pctnode)->constvalue); - samplesize /= 100.0; - } - else - { - /* Default samplesize if the estimation didn't return Const. */ - samplesize = 0.1f; - } - - *tuples = path->rows * samplesize; - path->rows = *tuples; - - PG_RETURN_VOID(); + return tupoffset; } diff --git a/src/backend/access/tablesample/system.c b/src/backend/access/tablesample/system.c index 1d834369a4bd1..080a3121141e0 100644 --- a/src/backend/access/tablesample/system.c +++ b/src/backend/access/tablesample/system.c @@ -1,186 +1,262 @@ /*------------------------------------------------------------------------- * * system.c - * interface routines for system tablesample method + * support routines for SYSTEM tablesample method * + * To ensure repeatability of samples, it is necessary that selection of a + * given tuple be history-independent; otherwise syncscanning would break + * repeatability, to say nothing of logically-irrelevant maintenance such + * as physical extension or shortening of the relation. * - * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group + * To achieve that, we proceed by hashing each candidate block number together + * with the active seed, and then selecting it if the hash is less than the + * cutoff value computed from the selection probability by BeginSampleScan. + * + * + * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * src/backend/utils/tablesample/system.c + * src/backend/access/tablesample/system.c * *------------------------------------------------------------------------- */ #include "postgres.h" -#include "fmgr.h" +#ifdef _MSC_VER +#include /* for _isnan */ +#endif +#include -#include "access/tablesample.h" +#include "access/hash.h" #include "access/relscan.h" -#include "nodes/execnodes.h" -#include "nodes/relation.h" +#include "access/tsmapi.h" +#include "catalog/pg_type.h" #include "optimizer/clauses.h" -#include "storage/bufmgr.h" -#include "utils/sampling.h" +#include "optimizer/cost.h" +#include "utils/builtins.h" -/* - * State - */ +/* Private state */ typedef struct { - BlockSamplerData bs; + uint64 cutoff; /* select blocks with hash less than this */ uint32 seed; /* random seed */ - BlockNumber nblocks; /* number of block in relation */ - int samplesize; /* number of blocks to return */ + BlockNumber nextblock; /* next block to consider sampling */ OffsetNumber lt; /* last tuple returned from current block */ } SystemSamplerData; -/* - * Initializes the state. - */ -Datum -tsm_system_init(PG_FUNCTION_ARGS) -{ - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - uint32 seed = PG_GETARG_UINT32(1); - float4 percent = PG_ARGISNULL(2) ? -1 : PG_GETARG_FLOAT4(2); - HeapScanDesc scan = tsdesc->heapScan; - SystemSamplerData *sampler; +static void system_samplescangetsamplesize(PlannerInfo *root, + RelOptInfo *baserel, + List *paramexprs, + BlockNumber *pages, + double *tuples); +static void system_initsamplescan(SampleScanState *node, + int eflags); +static void system_beginsamplescan(SampleScanState *node, + Datum *params, + int nparams, + uint32 seed); +static BlockNumber system_nextsampleblock(SampleScanState *node); +static OffsetNumber system_nextsampletuple(SampleScanState *node, + BlockNumber blockno, + OffsetNumber maxoffset); - if (percent < 0 || percent > 100) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("invalid sample size"), - errhint("Sample size must be numeric value between 0 and 100 (inclusive)."))); - - sampler = palloc0(sizeof(SystemSamplerData)); - - /* Remember initial values for reinit */ - sampler->seed = seed; - sampler->nblocks = scan->rs_nblocks; - sampler->samplesize = 1 + (int) (sampler->nblocks * (percent / 100.0)); - sampler->lt = InvalidOffsetNumber; - - BlockSampler_Init(&sampler->bs, sampler->nblocks, sampler->samplesize, - sampler->seed); - - tsdesc->tsmdata = (void *) sampler; - - PG_RETURN_VOID(); -} /* - * Get next block number or InvalidBlockNumber when we're done. - * - * Uses the same logic as ANALYZE for picking the random blocks. + * Create a TsmRoutine descriptor for the SYSTEM method. */ Datum -tsm_system_nextblock(PG_FUNCTION_ARGS) +tsm_system_handler(PG_FUNCTION_ARGS) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - SystemSamplerData *sampler = (SystemSamplerData *) tsdesc->tsmdata; - BlockNumber blockno; - - if (!BlockSampler_HasMore(&sampler->bs)) - PG_RETURN_UINT32(InvalidBlockNumber); - - blockno = BlockSampler_Next(&sampler->bs); - - PG_RETURN_UINT32(blockno); + TsmRoutine *tsm = makeNode(TsmRoutine); + + tsm->parameterTypes = list_make1_oid(FLOAT4OID); + tsm->repeatable_across_queries = true; + tsm->repeatable_across_scans = true; + tsm->SampleScanGetSampleSize = system_samplescangetsamplesize; + tsm->InitSampleScan = system_initsamplescan; + tsm->BeginSampleScan = system_beginsamplescan; + tsm->NextSampleBlock = system_nextsampleblock; + tsm->NextSampleTuple = system_nextsampletuple; + tsm->EndSampleScan = NULL; + + PG_RETURN_POINTER(tsm); } /* - * Get next tuple offset in current block or InvalidOffsetNumber if we are done - * with this block. + * Sample size estimation. */ -Datum -tsm_system_nexttuple(PG_FUNCTION_ARGS) +static void +system_samplescangetsamplesize(PlannerInfo *root, + RelOptInfo *baserel, + List *paramexprs, + BlockNumber *pages, + double *tuples) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - OffsetNumber maxoffset = PG_GETARG_UINT16(2); - SystemSamplerData *sampler = (SystemSamplerData *) tsdesc->tsmdata; - OffsetNumber tupoffset = sampler->lt; + Node *pctnode; + float4 samplefract; - if (tupoffset == InvalidOffsetNumber) - tupoffset = FirstOffsetNumber; - else - tupoffset++; + /* Try to extract an estimate for the sample percentage */ + pctnode = (Node *) linitial(paramexprs); + pctnode = estimate_expression_value(root, pctnode); - if (tupoffset > maxoffset) - tupoffset = InvalidOffsetNumber; + if (IsA(pctnode, Const) && + !((Const *) pctnode)->constisnull) + { + samplefract = DatumGetFloat4(((Const *) pctnode)->constvalue); + if (samplefract >= 0 && samplefract <= 100 && !isnan(samplefract)) + samplefract /= 100.0f; + else + { + /* Default samplefract if the value is bogus */ + samplefract = 0.1f; + } + } + else + { + /* Default samplefract if we didn't obtain a non-null Const */ + samplefract = 0.1f; + } - sampler->lt = tupoffset; + /* We'll visit a sample of the pages ... */ + *pages = clamp_row_est(baserel->pages * samplefract); - PG_RETURN_UINT16(tupoffset); + /* ... and hopefully get a representative number of tuples from them */ + *tuples = clamp_row_est(baserel->tuples * samplefract); } /* - * Cleanup method. + * Initialize during executor setup. */ -Datum -tsm_system_end(PG_FUNCTION_ARGS) +static void +system_initsamplescan(SampleScanState *node, int eflags) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - - pfree(tsdesc->tsmdata); - - PG_RETURN_VOID(); + node->tsm_state = palloc0(sizeof(SystemSamplerData)); } /* - * Reset state (called by ReScan). + * Examine parameters and prepare for a sample scan. */ -Datum -tsm_system_reset(PG_FUNCTION_ARGS) +static void +system_beginsamplescan(SampleScanState *node, + Datum *params, + int nparams, + uint32 seed) { - TableSampleDesc *tsdesc = (TableSampleDesc *) PG_GETARG_POINTER(0); - SystemSamplerData *sampler = (SystemSamplerData *) tsdesc->tsmdata; + SystemSamplerData *sampler = (SystemSamplerData *) node->tsm_state; + double percent = DatumGetFloat4(params[0]); + double dcutoff; + if (percent < 0 || percent > 100 || isnan(percent)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_TABLESAMPLE_ARGUMENT), + errmsg("sample percentage must be between 0 and 100"))); + + /* + * The cutoff is sample probability times (PG_UINT32_MAX + 1); we have to + * store that as a uint64, of course. Note that this gives strictly + * correct behavior at the limits of zero or one probability. + */ + dcutoff = rint(((double) PG_UINT32_MAX + 1) * percent / 100); + sampler->cutoff = (uint64) dcutoff; + sampler->seed = seed; + sampler->nextblock = 0; sampler->lt = InvalidOffsetNumber; - BlockSampler_Init(&sampler->bs, sampler->nblocks, sampler->samplesize, - sampler->seed); - PG_RETURN_VOID(); + /* + * Bulkread buffer access strategy probably makes sense unless we're + * scanning a very small fraction of the table. The 1% cutoff here is a + * guess. We should use pagemode visibility checking, since we scan all + * tuples on each selected page. + */ + node->use_bulkread = (percent >= 1); + node->use_pagemode = true; } /* - * Costing function. + * Select next block to sample. */ -Datum -tsm_system_cost(PG_FUNCTION_ARGS) +static BlockNumber +system_nextsampleblock(SampleScanState *node) { - PlannerInfo *root = (PlannerInfo *) PG_GETARG_POINTER(0); - Path *path = (Path *) PG_GETARG_POINTER(1); - RelOptInfo *baserel = (RelOptInfo *) PG_GETARG_POINTER(2); - List *args = (List *) PG_GETARG_POINTER(3); - BlockNumber *pages = (BlockNumber *) PG_GETARG_POINTER(4); - double *tuples = (double *) PG_GETARG_POINTER(5); - Node *pctnode; - float4 samplesize; + SystemSamplerData *sampler = (SystemSamplerData *) node->tsm_state; + HeapScanDesc scan = node->ss.ss_currentScanDesc; + BlockNumber nextblock = sampler->nextblock; + uint32 hashinput[2]; + + /* + * We compute the hash by applying hash_any to an array of 2 uint32's + * containing the block number and seed. This is efficient to set up, and + * with the current implementation of hash_any, it gives + * machine-independent results, which is a nice property for regression + * testing. + * + * These words in the hash input are the same throughout the block: + */ + hashinput[1] = sampler->seed; + + /* + * Loop over block numbers until finding suitable block or reaching end of + * relation. + */ + for (; nextblock < scan->rs_nblocks; nextblock++) + { + uint32 hash; - pctnode = linitial(args); - pctnode = estimate_expression_value(root, pctnode); + hashinput[0] = nextblock; - if (IsA(pctnode, RelabelType)) - pctnode = (Node *) ((RelabelType *) pctnode)->arg; + hash = DatumGetUInt32(hash_any((const unsigned char *) hashinput, + (int) sizeof(hashinput))); + if (hash < sampler->cutoff) + break; + } - if (IsA(pctnode, Const)) + if (nextblock < scan->rs_nblocks) { - samplesize = DatumGetFloat4(((Const *) pctnode)->constvalue); - samplesize /= 100.0; + /* Found a suitable block; remember where we should start next time */ + sampler->nextblock = nextblock + 1; + return nextblock; } + + /* Done, but let's reset nextblock to 0 for safety. */ + sampler->nextblock = 0; + return InvalidBlockNumber; +} + +/* + * Select next sampled tuple in current block. + * + * In block sampling, we just want to sample all the tuples in each selected + * block. + * + * It is OK here to return an offset without knowing if the tuple is visible + * (or even exists); nodeSamplescan.c will deal with that. + * + * When we reach end of the block, return InvalidOffsetNumber which tells + * SampleScan to go to next block. + */ +static OffsetNumber +system_nextsampletuple(SampleScanState *node, + BlockNumber blockno, + OffsetNumber maxoffset) +{ + SystemSamplerData *sampler = (SystemSamplerData *) node->tsm_state; + OffsetNumber tupoffset = sampler->lt; + + /* Advance to next possible offset on page */ + if (tupoffset == InvalidOffsetNumber) + tupoffset = FirstOffsetNumber; else - { - /* Default samplesize if the estimation didn't return Const. */ - samplesize = 0.1f; - } + tupoffset++; - *pages = baserel->pages * samplesize; - *tuples = path->rows * samplesize; - path->rows = *tuples; + /* Done? */ + if (tupoffset > maxoffset) + tupoffset = InvalidOffsetNumber; + + sampler->lt = tupoffset; - PG_RETURN_VOID(); + return tupoffset; } diff --git a/src/backend/access/tablesample/tablesample.c b/src/backend/access/tablesample/tablesample.c index f21d42c8e38ca..b8ad7ced743cb 100644 --- a/src/backend/access/tablesample/tablesample.c +++ b/src/backend/access/tablesample/tablesample.c @@ -1,7 +1,7 @@ /*------------------------------------------------------------------------- * * tablesample.c - * TABLESAMPLE internal API + * Support functions for TABLESAMPLE feature * * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California @@ -10,356 +10,31 @@ * IDENTIFICATION * src/backend/access/tablesample/tablesample.c * - * TABLESAMPLE is the SQL standard clause for sampling the relations. - * - * The API is interface between the Executor and the TABLESAMPLE Methods. - * - * TABLESAMPLE Methods are implementations of actual sampling algorithms which - * can be used for returning a sample of the source relation. - * Methods don't read the table directly but are asked for block number and - * tuple offset which they want to examine (or return) and the tablesample - * interface implemented here does the reading for them. - * - * We currently only support sampling of the physical relations, but in the - * future we might extend the API to support subqueries as well. - * * ------------------------------------------------------------------------- */ #include "postgres.h" -#include "access/tablesample.h" - -#include "catalog/pg_tablesample_method.h" -#include "miscadmin.h" -#include "pgstat.h" -#include "storage/bufmgr.h" -#include "storage/predicate.h" -#include "utils/rel.h" -#include "utils/tqual.h" - - -static bool SampleTupleVisible(HeapTuple tuple, OffsetNumber tupoffset, HeapScanDesc scan); - - -/* - * Initialize the TABLESAMPLE Descriptor and the TABLESAMPLE Method. - */ -TableSampleDesc * -tablesample_init(SampleScanState *scanstate, TableSampleClause *tablesample) -{ - FunctionCallInfoData fcinfo; - int i; - List *args = tablesample->args; - ListCell *arg; - ExprContext *econtext = scanstate->ss.ps.ps_ExprContext; - TableSampleDesc *tsdesc = (TableSampleDesc *) palloc0(sizeof(TableSampleDesc)); - - /* Load functions */ - fmgr_info(tablesample->tsminit, &(tsdesc->tsminit)); - fmgr_info(tablesample->tsmnextblock, &(tsdesc->tsmnextblock)); - fmgr_info(tablesample->tsmnexttuple, &(tsdesc->tsmnexttuple)); - if (OidIsValid(tablesample->tsmexaminetuple)) - fmgr_info(tablesample->tsmexaminetuple, &(tsdesc->tsmexaminetuple)); - else - tsdesc->tsmexaminetuple.fn_oid = InvalidOid; - fmgr_info(tablesample->tsmreset, &(tsdesc->tsmreset)); - fmgr_info(tablesample->tsmend, &(tsdesc->tsmend)); - - InitFunctionCallInfoData(fcinfo, &tsdesc->tsminit, - list_length(args) + 2, - InvalidOid, NULL, NULL); - - tsdesc->tupDesc = scanstate->ss.ss_ScanTupleSlot->tts_tupleDescriptor; - tsdesc->heapScan = scanstate->ss.ss_currentScanDesc; - - /* First argument for init function is always TableSampleDesc */ - fcinfo.arg[0] = PointerGetDatum(tsdesc); - fcinfo.argnull[0] = false; +#include "access/tsmapi.h" - /* - * Second arg for init function is always REPEATABLE. - * - * If tablesample->repeatable is NULL then REPEATABLE clause was not - * specified, and we insert a random value as default. - * - * When specified, the expression cannot evaluate to NULL. - */ - if (tablesample->repeatable) - { - ExprState *argstate = ExecInitExpr((Expr *) tablesample->repeatable, - (PlanState *) scanstate); - - fcinfo.arg[1] = ExecEvalExpr(argstate, econtext, - &fcinfo.argnull[1], NULL); - if (fcinfo.argnull[1]) - ereport(ERROR, - (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), - errmsg("REPEATABLE clause must be NOT NULL numeric value"))); - } - else - { - fcinfo.arg[1] = UInt32GetDatum(random()); - fcinfo.argnull[1] = false; - } - - /* Rest of the arguments come from user. */ - i = 2; - foreach(arg, args) - { - Expr *argexpr = (Expr *) lfirst(arg); - ExprState *argstate = ExecInitExpr(argexpr, (PlanState *) scanstate); - - fcinfo.arg[i] = ExecEvalExpr(argstate, econtext, - &fcinfo.argnull[i], NULL); - i++; - } - Assert(i == fcinfo.nargs); - - (void) FunctionCallInvoke(&fcinfo); - - return tsdesc; -} /* - * Get next tuple from TABLESAMPLE Method. - */ -HeapTuple -tablesample_getnext(TableSampleDesc *desc) -{ - HeapScanDesc scan = desc->heapScan; - HeapTuple tuple = &(scan->rs_ctup); - bool pagemode = scan->rs_pageatatime; - BlockNumber blockno; - Page page; - bool page_all_visible; - ItemId itemid; - OffsetNumber tupoffset, - maxoffset; - - if (!scan->rs_inited) - { - /* - * return null immediately if relation is empty - */ - if (scan->rs_nblocks == 0) - { - Assert(!BufferIsValid(scan->rs_cbuf)); - tuple->t_data = NULL; - return NULL; - } - blockno = DatumGetInt32(FunctionCall1(&desc->tsmnextblock, - PointerGetDatum(desc))); - if (!BlockNumberIsValid(blockno)) - { - tuple->t_data = NULL; - return NULL; - } - - heapgetpage(scan, blockno); - scan->rs_inited = true; - } - else - { - /* continue from previously returned page/tuple */ - blockno = scan->rs_cblock; /* current page */ - } - - /* - * When pagemode is disabled, the scan will do visibility checks for each - * tuple it finds so the buffer needs to be locked. - */ - if (!pagemode) - LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); - - page = (Page) BufferGetPage(scan->rs_cbuf); - page_all_visible = PageIsAllVisible(page); - maxoffset = PageGetMaxOffsetNumber(page); - - for (;;) - { - CHECK_FOR_INTERRUPTS(); - - tupoffset = DatumGetUInt16(FunctionCall3(&desc->tsmnexttuple, - PointerGetDatum(desc), - UInt32GetDatum(blockno), - UInt16GetDatum(maxoffset))); - - if (OffsetNumberIsValid(tupoffset)) - { - bool visible; - bool found; - - /* Skip invalid tuple pointers. */ - itemid = PageGetItemId(page, tupoffset); - if (!ItemIdIsNormal(itemid)) - continue; - - tuple->t_data = (HeapTupleHeader) PageGetItem((Page) page, itemid); - tuple->t_len = ItemIdGetLength(itemid); - ItemPointerSet(&(tuple->t_self), blockno, tupoffset); - - if (page_all_visible) - visible = true; - else - visible = SampleTupleVisible(tuple, tupoffset, scan); - - /* - * Let the sampling method examine the actual tuple and decide if - * we should return it. - * - * Note that we let it examine even invisible tuples for - * statistical purposes, but not return them since user should - * never see invisible tuples. - */ - if (OidIsValid(desc->tsmexaminetuple.fn_oid)) - { - found = DatumGetBool(FunctionCall4(&desc->tsmexaminetuple, - PointerGetDatum(desc), - UInt32GetDatum(blockno), - PointerGetDatum(tuple), - BoolGetDatum(visible))); - /* Should not happen if sampling method is well written. */ - if (found && !visible) - elog(ERROR, "Sampling method wanted to return invisible tuple"); - } - else - found = visible; - - /* Found visible tuple, return it. */ - if (found) - { - if (!pagemode) - LockBuffer(scan->rs_cbuf, BUFFER_LOCK_UNLOCK); - break; - } - else - { - /* Try next tuple from same page. */ - continue; - } - } - - - if (!pagemode) - LockBuffer(scan->rs_cbuf, BUFFER_LOCK_UNLOCK); - - blockno = DatumGetInt32(FunctionCall1(&desc->tsmnextblock, - PointerGetDatum(desc))); - - /* - * Report our new scan position for synchronization purposes. We don't - * do that when moving backwards, however. That would just mess up any - * other forward-moving scanners. - * - * Note: we do this before checking for end of scan so that the final - * state of the position hint is back at the start of the rel. That's - * not strictly necessary, but otherwise when you run the same query - * multiple times the starting position would shift a little bit - * backwards on every invocation, which is confusing. We don't - * guarantee any specific ordering in general, though. - */ - if (scan->rs_syncscan) - ss_report_location(scan->rs_rd, BlockNumberIsValid(blockno) ? - blockno : scan->rs_startblock); - - /* - * Reached end of scan. - */ - if (!BlockNumberIsValid(blockno)) - { - if (BufferIsValid(scan->rs_cbuf)) - ReleaseBuffer(scan->rs_cbuf); - scan->rs_cbuf = InvalidBuffer; - scan->rs_cblock = InvalidBlockNumber; - tuple->t_data = NULL; - scan->rs_inited = false; - return NULL; - } - - heapgetpage(scan, blockno); - - if (!pagemode) - LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); - - page = (Page) BufferGetPage(scan->rs_cbuf); - page_all_visible = PageIsAllVisible(page); - maxoffset = PageGetMaxOffsetNumber(page); - } - - pgstat_count_heap_getnext(scan->rs_rd); - - return &(scan->rs_ctup); -} - -/* - * Reset the sampling to starting state - */ -void -tablesample_reset(TableSampleDesc *desc) -{ - (void) FunctionCall1(&desc->tsmreset, PointerGetDatum(desc)); -} - -/* - * Signal the sampling method that the scan has finished. - */ -void -tablesample_end(TableSampleDesc *desc) -{ - (void) FunctionCall1(&desc->tsmend, PointerGetDatum(desc)); -} - -/* - * Check visibility of the tuple. + * GetTsmRoutine --- get a TsmRoutine struct by invoking the handler. + * + * This is a convenience routine that's just meant to check for errors. */ -static bool -SampleTupleVisible(HeapTuple tuple, OffsetNumber tupoffset, HeapScanDesc scan) +TsmRoutine * +GetTsmRoutine(Oid tsmhandler) { - /* - * If this scan is reading whole pages at a time, there is already - * visibility info present in rs_vistuples so we can just search it for - * the tupoffset. - */ - if (scan->rs_pageatatime) - { - int start = 0, - end = scan->rs_ntuples - 1; - - /* - * Do the binary search over rs_vistuples, it's already sorted by - * OffsetNumber so we don't need to do any sorting ourselves here. - * - * We could use bsearch() here but it's slower for integers because of - * the function call overhead and because it needs boiler plate code - * it would not save us anything code-wise anyway. - */ - while (start <= end) - { - int mid = start + (end - start) / 2; - OffsetNumber curoffset = scan->rs_vistuples[mid]; - - if (curoffset == tupoffset) - return true; - else if (curoffset > tupoffset) - end = mid - 1; - else - start = mid + 1; - } - - return false; - } - else - { - /* No pagemode, we have to check the tuple itself. */ - Snapshot snapshot = scan->rs_snapshot; - Buffer buffer = scan->rs_cbuf; + Datum datum; + TsmRoutine *routine; - bool visible = HeapTupleSatisfiesVisibility(tuple, snapshot, buffer); + datum = OidFunctionCall1(tsmhandler, PointerGetDatum(NULL)); + routine = (TsmRoutine *) DatumGetPointer(datum); - CheckForSerializableConflictOut(visible, scan->rs_rd, tuple, buffer, - snapshot); + if (routine == NULL || !IsA(routine, TsmRoutine)) + elog(ERROR, "tablesample handler function %u did not return a TsmRoutine struct", + tsmhandler); - return visible; - } + return routine; } diff --git a/src/backend/access/transam/commit_ts.c b/src/backend/access/transam/commit_ts.c index 5ad35c0d7f895..b21a31345f76d 100644 --- a/src/backend/access/transam/commit_ts.c +++ b/src/backend/access/transam/commit_ts.c @@ -78,13 +78,21 @@ static SlruCtlData CommitTsCtlData; #define CommitTsCtl (&CommitTsCtlData) /* - * We keep a cache of the last value set in shared memory. This is protected - * by CommitTsLock. + * We keep a cache of the last value set in shared memory. + * + * This is also good place to keep the activation status. We keep this + * separate from the GUC so that the standby can activate the module if the + * primary has it active independently of the value of the GUC. + * + * This is protected by CommitTsLock. In some places, we use commitTsActive + * without acquiring the lock; where this happens, a comment explains the + * rationale for it. */ typedef struct CommitTimestampShared { TransactionId xidLastCommit; CommitTimestampEntry dataLastCommit; + bool commitTsActive; } CommitTimestampShared; CommitTimestampShared *commitTsShared; @@ -100,6 +108,8 @@ static void TransactionIdSetCommitTs(TransactionId xid, TimestampTz ts, RepOriginId nodeid, int slotno); static int ZeroCommitTsPage(int pageno, bool writeXlog); static bool CommitTsPagePrecedes(int page1, int page2); +static void ActivateCommitTs(void); +static void DeactivateCommitTs(void); static void WriteZeroPageXlogRec(int pageno); static void WriteTruncateXlogRec(int pageno); static void WriteSetTimestampXlogRec(TransactionId mainxid, int nsubxids, @@ -122,29 +132,38 @@ static void WriteSetTimestampXlogRec(TransactionId mainxid, int nsubxids, * subtrans implementation changes in the future, we might want to revisit the * decision of storing timestamp info for each subxid. * - * The do_xlog parameter tells us whether to include an XLog record of this - * or not. Normal path through RecordTransactionCommit() will be related - * to a transaction commit XLog record, and so should pass "false" here. - * Other callers probably want to pass true, so that the given values persist - * in case of crashes. + * The write_xlog parameter tells us whether to include an XLog record of this + * or not. Normally, this is called from transaction commit routines (both + * normal and prepared) and the information will be stored in the transaction + * commit XLog record, and so they should pass "false" for this. The XLog redo + * code should use "false" here as well. Other callers probably want to pass + * true, so that the given values persist in case of crashes. */ void TransactionTreeSetCommitTsData(TransactionId xid, int nsubxids, TransactionId *subxids, TimestampTz timestamp, - RepOriginId nodeid, bool do_xlog) + RepOriginId nodeid, bool write_xlog) { int i; TransactionId headxid; TransactionId newestXact; - if (!track_commit_timestamp) + /* + * No-op if the module is not active. + * + * An unlocked read here is fine, because in a standby (the only place + * where the flag can change in flight) this routine is only called by + * the recovery process, which is also the only process which can change + * the flag. + */ + if (!commitTsShared->commitTsActive) return; /* * Comply with the WAL-before-data rule: if caller specified it wants this * value to be recorded in WAL, do so before touching the data. */ - if (do_xlog) + if (write_xlog) WriteSetTimestampXlogRec(xid, nsubxids, subxids, timestamp, nodeid); /* @@ -252,8 +271,10 @@ TransactionIdSetCommitTs(TransactionId xid, TimestampTz ts, /* * Interrogate the commit timestamp of a transaction. * - * Return value indicates whether commit timestamp record was found for - * given xid. + * The return value indicates whether a commit timestamp record was found for + * the given xid. The timestamp value is returned in *ts (which may not be + * null), and the origin node for the Xid is returned in *nodeid, if it's not + * null. */ bool TransactionIdGetCommitTsData(TransactionId xid, TimestampTz *ts, @@ -266,63 +287,55 @@ TransactionIdGetCommitTsData(TransactionId xid, TimestampTz *ts, TransactionId oldestCommitTs; TransactionId newestCommitTs; + /* error if the given Xid doesn't normally commit */ + if (!TransactionIdIsNormal(xid)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("cannot retrieve commit timestamp for transaction %u", xid))); + + LWLockAcquire(CommitTsLock, LW_SHARED); + /* Error if module not enabled */ - if (!track_commit_timestamp) + if (!commitTsShared->commitTsActive) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("could not get commit timestamp data"), errhint("Make sure the configuration parameter \"%s\" is set.", "track_commit_timestamp"))); - /* error if the given Xid doesn't normally commit */ - if (!TransactionIdIsNormal(xid)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("cannot retrieve commit timestamp for transaction %u", xid))); - /* - * Return empty if the requested value is outside our valid range. + * If we're asked for the cached value, return that. Otherwise, fall + * through to read from SLRU. */ - LWLockAcquire(CommitTsLock, LW_SHARED); + if (commitTsShared->xidLastCommit == xid) + { + *ts = commitTsShared->dataLastCommit.time; + if (nodeid) + *nodeid = commitTsShared->dataLastCommit.nodeid; + + LWLockRelease(CommitTsLock); + return *ts != 0; + } + oldestCommitTs = ShmemVariableCache->oldestCommitTs; newestCommitTs = ShmemVariableCache->newestCommitTs; /* neither is invalid, or both are */ Assert(TransactionIdIsValid(oldestCommitTs) == TransactionIdIsValid(newestCommitTs)); LWLockRelease(CommitTsLock); + /* + * Return empty if the requested value is outside our valid range. + */ if (!TransactionIdIsValid(oldestCommitTs) || TransactionIdPrecedes(xid, oldestCommitTs) || TransactionIdPrecedes(newestCommitTs, xid)) { - if (ts) - *ts = 0; + *ts = 0; if (nodeid) *nodeid = InvalidRepOriginId; return false; } - /* - * Use an unlocked atomic read on our cached value in shared memory; if - * it's a hit, acquire a lock and read the data, after verifying that it's - * still what we initially read. Otherwise, fall through to read from - * SLRU. - */ - if (commitTsShared->xidLastCommit == xid) - { - LWLockAcquire(CommitTsLock, LW_SHARED); - if (commitTsShared->xidLastCommit == xid) - { - if (ts) - *ts = commitTsShared->dataLastCommit.time; - if (nodeid) - *nodeid = commitTsShared->dataLastCommit.nodeid; - - LWLockRelease(CommitTsLock); - return *ts != 0; - } - LWLockRelease(CommitTsLock); - } - /* lock is acquired by SimpleLruReadPage_ReadOnly */ slotno = SimpleLruReadPage_ReadOnly(CommitTsCtl, pageno, xid); memcpy(&entry, @@ -330,8 +343,7 @@ TransactionIdGetCommitTsData(TransactionId xid, TimestampTz *ts, SizeOfCommitTimestampEntry * entryno, SizeOfCommitTimestampEntry); - if (ts) - *ts = entry.time; + *ts = entry.time; if (nodeid) *nodeid = entry.nodeid; @@ -352,15 +364,16 @@ GetLatestCommitTsData(TimestampTz *ts, RepOriginId *nodeid) { TransactionId xid; + LWLockAcquire(CommitTsLock, LW_SHARED); + /* Error if module not enabled */ - if (!track_commit_timestamp) + if (!commitTsShared->commitTsActive) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("could not get commit timestamp data"), errhint("Make sure the configuration parameter \"%s\" is set.", "track_commit_timestamp"))); - LWLockAcquire(CommitTsLock, LW_SHARED); xid = commitTsShared->xidLastCommit; if (ts) *ts = commitTsShared->dataLastCommit.time; @@ -479,6 +492,7 @@ CommitTsShmemInit(void) commitTsShared->xidLastCommit = InvalidTransactionId; TIMESTAMP_NOBEGIN(commitTsShared->dataLastCommit.time); commitTsShared->dataLastCommit.nodeid = InvalidRepOriginId; + commitTsShared->commitTsActive = false; } else Assert(found); @@ -525,38 +539,60 @@ ZeroCommitTsPage(int pageno, bool writeXlog) /* * This must be called ONCE during postmaster or standalone-backend startup, * after StartupXLOG has initialized ShmemVariableCache->nextXid. + * + * Caller may choose to enable the feature even when it is turned off in the + * configuration. */ void -StartupCommitTs(void) +StartupCommitTs(bool force_enable) { - TransactionId xid = ShmemVariableCache->nextXid; - int pageno = TransactionIdToCTsPage(xid); - - if (track_commit_timestamp) - { - ActivateCommitTs(); - return; - } - - LWLockAcquire(CommitTsControlLock, LW_EXCLUSIVE); - /* - * Initialize our idea of the latest page number. + * If the module is not enabled, there's nothing to do here. The module + * could still be activated from elsewhere. */ - CommitTsCtl->shared->latest_page_number = pageno; - - LWLockRelease(CommitTsControlLock); + if (track_commit_timestamp || force_enable) + ActivateCommitTs(); } /* * This must be called ONCE during postmaster or standalone-backend startup, - * when commit timestamp is enabled, after recovery has finished. + * after recovery has finished. */ void CompleteCommitTsInitialization(void) { + /* + * If the feature is not enabled, turn it off for good. This also removes + * any leftover data. + */ if (!track_commit_timestamp) - DeactivateCommitTs(true); + DeactivateCommitTs(); +} + +/* + * Activate or deactivate CommitTs' upon reception of a XLOG_PARAMETER_CHANGE + * XLog record in a standby. + */ +void +CommitTsParameterChange(bool newvalue, bool oldvalue) +{ + /* + * If the commit_ts module is disabled in this server and we get word from + * the master server that it is enabled there, activate it so that we can + * replay future WAL records involving it; also mark it as active on + * pg_control. If the old value was already set, we already did this, so + * don't do anything. + * + * If the module is disabled in the master, disable it here too, unless + * the module is enabled locally. + */ + if (newvalue) + { + if (!commitTsShared->commitTsActive) + ActivateCommitTs(); + } + else if (commitTsShared->commitTsActive) + DeactivateCommitTs(); } /* @@ -575,7 +611,7 @@ CompleteCommitTsInitialization(void) * running with this module disabled for a while and thus might have skipped * the normal creation point. */ -void +static void ActivateCommitTs(void) { TransactionId xid = ShmemVariableCache->nextXid; @@ -609,7 +645,7 @@ ActivateCommitTs(void) } LWLockRelease(CommitTsLock); - /* Finally, create the current segment file, if necessary */ + /* Create the current segment file, if necessary */ if (!SimpleLruDoesPhysicalPageExist(CommitTsCtl, pageno)) { int slotno; @@ -620,6 +656,11 @@ ActivateCommitTs(void) Assert(!CommitTsCtl->shared->page_dirty[slotno]); LWLockRelease(CommitTsControlLock); } + + /* Change the activation status in shared memory. */ + LWLockAcquire(CommitTsLock, LW_EXCLUSIVE); + commitTsShared->commitTsActive = true; + LWLockRelease(CommitTsLock); } /* @@ -632,25 +673,39 @@ ActivateCommitTs(void) * Resets CommitTs into invalid state to make sure we don't hand back * possibly-invalid data; also removes segments of old data. */ -void -DeactivateCommitTs(bool do_wal) +static void +DeactivateCommitTs(void) { - TransactionId xid = ShmemVariableCache->nextXid; - int pageno = TransactionIdToCTsPage(xid); - /* - * Re-Initialize our idea of the latest page number. + * Cleanup the status in the shared memory. + * + * We reset everything in the commitTsShared record to prevent user from + * getting confusing data about last committed transaction on the standby + * when the module was activated repeatedly on the primary. */ - LWLockAcquire(CommitTsControlLock, LW_EXCLUSIVE); - CommitTsCtl->shared->latest_page_number = pageno; - LWLockRelease(CommitTsControlLock); - LWLockAcquire(CommitTsLock, LW_EXCLUSIVE); + + commitTsShared->commitTsActive = false; + commitTsShared->xidLastCommit = InvalidTransactionId; + TIMESTAMP_NOBEGIN(commitTsShared->dataLastCommit.time); + commitTsShared->dataLastCommit.nodeid = InvalidRepOriginId; + ShmemVariableCache->oldestCommitTs = InvalidTransactionId; ShmemVariableCache->newestCommitTs = InvalidTransactionId; + LWLockRelease(CommitTsLock); - TruncateCommitTs(ReadNewTransactionId(), do_wal); + /* + * Remove *all* files. This is necessary so that there are no leftover + * files; in the case where this feature is later enabled after running + * with it disabled for some time there may be a gap in the file sequence. + * (We can probably tolerate out-of-sequence files, as they are going to + * be overwritten anyway when we wrap around, but it seems better to be + * tidy.) + */ + LWLockAcquire(CommitTsControlLock, LW_EXCLUSIVE); + (void) SlruScanDirectory(CommitTsCtl, SlruScanDirCbDeleteAll, NULL); + LWLockRelease(CommitTsControlLock); } /* @@ -689,8 +744,13 @@ ExtendCommitTs(TransactionId newestXact) { int pageno; - /* nothing to do if module not enabled */ - if (!track_commit_timestamp) + /* + * Nothing to do if module not enabled. Note we do an unlocked read of the + * flag here, which is okay because this routine is only called from + * GetNewTransactionId, which is never called in a standby. + */ + Assert(!InRecovery); + if (!commitTsShared->commitTsActive) return; /* @@ -718,7 +778,7 @@ ExtendCommitTs(TransactionId newestXact) * Note that we don't need to flush XLOG here. */ void -TruncateCommitTs(TransactionId oldestXact, bool do_wal) +TruncateCommitTs(TransactionId oldestXact) { int cutoffPage; @@ -734,8 +794,7 @@ TruncateCommitTs(TransactionId oldestXact, bool do_wal) return; /* nothing to remove */ /* Write XLOG record */ - if (do_wal) - WriteTruncateXlogRec(cutoffPage); + WriteTruncateXlogRec(cutoffPage); /* Now we can remove the old CommitTs segment(s) */ SimpleLruTruncate(CommitTsCtl, cutoffPage); @@ -907,7 +966,7 @@ commit_ts_redo(XLogReaderState *record) subxids = NULL; TransactionTreeSetCommitTsData(setts->mainxid, nsubxids, subxids, - setts->timestamp, setts->nodeid, false); + setts->timestamp, setts->nodeid, true); if (subxids) pfree(subxids); } diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index 377d0842bdd9d..c886ec32284ba 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -49,9 +49,7 @@ * value is removed; the cutoff value is stored in pg_class. The minimum value * across all tables in each database is stored in pg_database, and the global * minimum across all databases is part of pg_control and is kept in shared - * memory. At checkpoint time, after the value is known flushed in WAL, any - * files that correspond to multixacts older than that value are removed. - * (These files are also removed when a restartpoint is executed.) + * memory. Whenever that minimum is advanced, the SLRUs are truncated. * * When new multixactid values are to be created, care is taken that the * counter does not fall within the wraparound horizon considering the global @@ -83,6 +81,7 @@ #include "postmaster/autovacuum.h" #include "storage/lmgr.h" #include "storage/pmsignal.h" +#include "storage/proc.h" #include "storage/procarray.h" #include "utils/builtins.h" #include "utils/memutils.h" @@ -109,6 +108,7 @@ ((xid) / (MultiXactOffset) MULTIXACT_OFFSETS_PER_PAGE) #define MultiXactIdToOffsetEntry(xid) \ ((xid) % (MultiXactOffset) MULTIXACT_OFFSETS_PER_PAGE) +#define MultiXactIdToOffsetSegment(xid) (MultiXactIdToOffsetPage(xid) / SLRU_PAGES_PER_SEGMENT) /* * The situation for members is a bit more complex: we store one byte of @@ -153,6 +153,7 @@ /* page in which a member is to be found */ #define MXOffsetToMemberPage(xid) ((xid) / (TransactionId) MULTIXACT_MEMBERS_PER_PAGE) +#define MXOffsetToMemberSegment(xid) (MXOffsetToMemberPage(xid) / SLRU_PAGES_PER_SEGMENT) /* Location (byte offset within page) of flag word for a given member */ #define MXOffsetToFlagsOffset(xid) \ @@ -173,6 +174,8 @@ #define MULTIXACT_MEMBER_DANGER_THRESHOLD \ (MaxMultiXactOffset - MaxMultiXactOffset / 4) +#define PreviousMultiXactId(xid) \ + ((xid) == FirstMultiXactId ? MaxMultiXactId : (xid) - 1) /* * Links to shared-memory data structures for MultiXact control @@ -210,20 +213,13 @@ typedef struct MultiXactStateData Oid oldestMultiXactDB; /* - * Oldest multixact offset that is potentially referenced by a - * multixact referenced by a relation. We don't always know this value, - * so there's a flag here to indicate whether or not we currently do. + * Oldest multixact offset that is potentially referenced by a multixact + * referenced by a relation. We don't always know this value, so there's + * a flag here to indicate whether or not we currently do. */ MultiXactOffset oldestOffset; bool oldestOffsetKnown; - /* - * This is what the previous checkpoint stored as the truncate position. - * This value is the oldestMultiXactId that was valid when a checkpoint - * was last executed. - */ - MultiXactId lastCheckpointedOldest; - /* support for anti-wraparound measures */ MultiXactId multiVacLimit; MultiXactId multiWarnLimit; @@ -231,8 +227,7 @@ typedef struct MultiXactStateData MultiXactId multiWrapLimit; /* support for members anti-wraparound measures */ - MultiXactOffset offsetStopLimit; - bool offsetStopLimitKnown; + MultiXactOffset offsetStopLimit; /* known if oldestOffsetKnown */ /* * Per-backend data starts here. We have two arrays stored in the area @@ -362,12 +357,14 @@ static bool MultiXactOffsetPrecedes(MultiXactOffset offset1, MultiXactOffset offset2); static void ExtendMultiXactOffset(MultiXactId multi); static void ExtendMultiXactMember(MultiXactOffset offset, int nmembers); -static void DetermineSafeOldestOffset(MultiXactId oldestMXact); static bool MultiXactOffsetWouldWrap(MultiXactOffset boundary, MultiXactOffset start, uint32 distance); -static bool SetOffsetVacuumLimit(bool finish_setup); +static bool SetOffsetVacuumLimit(void); static bool find_multixact_start(MultiXactId multi, MultiXactOffset *result); static void WriteMZeroPageXlogRec(int pageno, uint8 info); +static void WriteMTruncateXlogRec(Oid oldestMultiDB, + MultiXactId startOff, MultiXactId endOff, + MultiXactOffset startMemb, MultiXactOffset endMemb); /* @@ -1097,7 +1094,7 @@ GetNewMultiXactId(int nmembers, MultiXactOffset *offset) *---------- */ #define OFFSET_WARN_SEGMENTS 20 - if (MultiXactState->offsetStopLimitKnown && + if (MultiXactState->oldestOffsetKnown && MultiXactOffsetWouldWrap(MultiXactState->offsetStopLimit, nextOffset, nmembers)) { @@ -1137,13 +1134,15 @@ GetNewMultiXactId(int nmembers, MultiXactOffset *offset) SendPostmasterSignal(PMSIGNAL_START_AUTOVAC_LAUNCHER); } - if (MultiXactState->offsetStopLimitKnown && + if (MultiXactState->oldestOffsetKnown && MultiXactOffsetWouldWrap(MultiXactState->offsetStopLimit, nextOffset, nmembers + MULTIXACT_MEMBERS_PER_PAGE * SLRU_PAGES_PER_SEGMENT * OFFSET_WARN_SEGMENTS)) ereport(WARNING, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), - errmsg("database with OID %u must be vacuumed before %d more multixact members are used", + errmsg_plural("database with OID %u must be vacuumed before %d more multixact member is used", + "database with OID %u must be vacuumed before %d more multixact members are used", + MultiXactState->offsetStopLimit - nextOffset + nmembers, MultiXactState->oldestMultiXactDB, MultiXactState->offsetStopLimit - nextOffset + nmembers), errhint("Execute a database-wide VACUUM in that database with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings."))); @@ -2008,20 +2007,24 @@ StartupMultiXact(void) /* * This must be called ONCE at the end of startup/recovery. - * - * We don't need any locks here, really; the SLRU locks are taken only because - * slru.c expects to be called with locks held. */ void TrimMultiXact(void) { - MultiXactId multi = MultiXactState->nextMXact; - MultiXactOffset offset = MultiXactState->nextOffset; - MultiXactId oldestMXact; + MultiXactId nextMXact; + MultiXactOffset offset; + MultiXactId oldestMXact; + Oid oldestMXactDB; int pageno; int entryno; int flagsoff; + LWLockAcquire(MultiXactGenLock, LW_SHARED); + nextMXact = MultiXactState->nextMXact; + offset = MultiXactState->nextOffset; + oldestMXact = MultiXactState->oldestMultiXactId; + oldestMXactDB = MultiXactState->oldestMultiXactDB; + LWLockRelease(MultiXactGenLock); /* Clean up offsets state */ LWLockAcquire(MultiXactOffsetControlLock, LW_EXCLUSIVE); @@ -2029,20 +2032,20 @@ TrimMultiXact(void) /* * (Re-)Initialize our idea of the latest page number for offsets. */ - pageno = MultiXactIdToOffsetPage(multi); + pageno = MultiXactIdToOffsetPage(nextMXact); MultiXactOffsetCtl->shared->latest_page_number = pageno; /* * Zero out the remainder of the current offsets page. See notes in * TrimCLOG() for motivation. */ - entryno = MultiXactIdToOffsetEntry(multi); + entryno = MultiXactIdToOffsetEntry(nextMXact); if (entryno != 0) { int slotno; MultiXactOffset *offptr; - slotno = SimpleLruReadPage(MultiXactOffsetCtl, pageno, true, multi); + slotno = SimpleLruReadPage(MultiXactOffsetCtl, pageno, true, nextMXact); offptr = (MultiXactOffset *) MultiXactOffsetCtl->shared->page_buffer[slotno]; offptr += entryno; @@ -2091,12 +2094,13 @@ TrimMultiXact(void) LWLockRelease(MultiXactMemberControlLock); - if (SetOffsetVacuumLimit(true) && IsUnderPostmaster) - SendPostmasterSignal(PMSIGNAL_START_AUTOVAC_LAUNCHER); - LWLockAcquire(MultiXactGenLock, LW_SHARED); - oldestMXact = MultiXactState->lastCheckpointedOldest; + /* signal that we're officially up */ + LWLockAcquire(MultiXactGenLock, LW_EXCLUSIVE); + MultiXactState->finishedStartup = true; LWLockRelease(MultiXactGenLock); - DetermineSafeOldestOffset(oldestMXact); + + /* Now compute how far away the next members wraparound is. */ + SetMultiXactIdLimit(oldestMXact, oldestMXactDB); } /* @@ -2265,8 +2269,20 @@ SetMultiXactIdLimit(MultiXactId oldest_datminmxid, Oid oldest_datoid) (errmsg("MultiXactId wrap limit is %u, limited by database with OID %u", multiWrapLimit, oldest_datoid))); + /* + * Computing the actual limits is only possible once the data directory is + * in a consistent state. There's no need to compute the limits while + * still replaying WAL - no decisions about new multis are made even + * though multixact creations might be replayed. So we'll only do further + * checks after TrimMultiXact() has been called. + */ + if (!MultiXactState->finishedStartup) + return; + + Assert(!InRecovery); + /* Set limits for offset vacuum. */ - needs_offset_vacuum = SetOffsetVacuumLimit(false); + needs_offset_vacuum = SetOffsetVacuumLimit(); /* * If past the autovacuum force point, immediately signal an autovac @@ -2276,11 +2292,11 @@ SetMultiXactIdLimit(MultiXactId oldest_datminmxid, Oid oldest_datoid) * another iteration immediately if there are still any old databases. */ if ((MultiXactIdPrecedes(multiVacLimit, curMulti) || - needs_offset_vacuum) && IsUnderPostmaster && !InRecovery) + needs_offset_vacuum) && IsUnderPostmaster) SendPostmasterSignal(PMSIGNAL_START_AUTOVAC_LAUNCHER); /* Give an immediate warning if past the wrap warn point */ - if (MultiXactIdPrecedes(multiWarnLimit, curMulti) && !InRecovery) + if (MultiXactIdPrecedes(multiWarnLimit, curMulti)) { char *oldest_datname; @@ -2348,29 +2364,20 @@ MultiXactAdvanceNextMXact(MultiXactId minMulti, } /* - * Update our oldestMultiXactId value, but only if it's more recent than - * what we had. However, even if not, always update the oldest multixact - * offset limit. + * Update our oldestMultiXactId value, but only if it's more recent than what + * we had. + * + * This may only be called during WAL replay. */ void MultiXactAdvanceOldest(MultiXactId oldestMulti, Oid oldestMultiDB) { + Assert(InRecovery); + if (MultiXactIdPrecedes(MultiXactState->oldestMultiXactId, oldestMulti)) SetMultiXactIdLimit(oldestMulti, oldestMultiDB); } -/* - * Update the "safe truncation point". This is the newest value of oldestMulti - * that is known to be flushed as part of a checkpoint record. - */ -void -MultiXactSetSafeTruncate(MultiXactId safeTruncateMulti) -{ - LWLockAcquire(MultiXactGenLock, LW_EXCLUSIVE); - MultiXactState->lastCheckpointedOldest = safeTruncateMulti; - LWLockRelease(MultiXactGenLock); -} - /* * Make sure that MultiXactOffset has room for a newly-allocated MultiXactId. * @@ -2523,133 +2530,57 @@ GetOldestMultiXactId(void) return oldestMXact; } -/* - * Based on the given oldest MultiXactId, determine what's the oldest member - * offset and install the limit info in MultiXactState, where it can be used to - * prevent overrun of old data in the members SLRU area. - */ -static void -DetermineSafeOldestOffset(MultiXactId oldestMXact) -{ - MultiXactOffset oldestOffset; - MultiXactOffset nextOffset; - MultiXactOffset offsetStopLimit; - MultiXactOffset prevOffsetStopLimit; - MultiXactId nextMXact; - bool finishedStartup; - bool prevOffsetStopLimitKnown; - - /* Fetch values from shared memory. */ - LWLockAcquire(MultiXactGenLock, LW_SHARED); - finishedStartup = MultiXactState->finishedStartup; - nextMXact = MultiXactState->nextMXact; - nextOffset = MultiXactState->nextOffset; - prevOffsetStopLimit = MultiXactState->offsetStopLimit; - prevOffsetStopLimitKnown = MultiXactState->offsetStopLimitKnown; - LWLockRelease(MultiXactGenLock); - - /* Don't worry about this until after we've started up. */ - if (!finishedStartup) - return; - - /* - * Determine the offset of the oldest multixact. Normally, we can read - * the offset from the multixact itself, but there's an important special - * case: if there are no multixacts in existence at all, oldestMXact - * obviously can't point to one. It will instead point to the multixact - * ID that will be assigned the next time one is needed. - * - * NB: oldestMXact should be the oldest multixact that still exists in the - * SLRU, unlike in SetOffsetVacuumLimit, where we do this same computation - * based on the oldest value that might be referenced in a table. - */ - if (nextMXact == oldestMXact) - oldestOffset = nextOffset; - else - { - bool oldestOffsetKnown; - - oldestOffsetKnown = find_multixact_start(oldestMXact, &oldestOffset); - if (!oldestOffsetKnown) - { - ereport(LOG, - (errmsg("MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk", - oldestMXact))); - return; - } - } - - /* move back to start of the corresponding segment */ - offsetStopLimit = oldestOffset - (oldestOffset % - (MULTIXACT_MEMBERS_PER_PAGE * SLRU_PAGES_PER_SEGMENT)); - /* always leave one segment before the wraparound point */ - offsetStopLimit -= (MULTIXACT_MEMBERS_PER_PAGE * SLRU_PAGES_PER_SEGMENT); - - /* if nothing has changed, we're done */ - if (prevOffsetStopLimitKnown && offsetStopLimit == prevOffsetStopLimit) - return; - - LWLockAcquire(MultiXactGenLock, LW_EXCLUSIVE); - MultiXactState->offsetStopLimit = offsetStopLimit; - MultiXactState->offsetStopLimitKnown = true; - LWLockRelease(MultiXactGenLock); - - if (!prevOffsetStopLimitKnown && IsUnderPostmaster) - ereport(LOG, - (errmsg("MultiXact member wraparound protections are now enabled"))); - ereport(DEBUG1, - (errmsg("MultiXact member stop limit is now %u based on MultiXact %u", - offsetStopLimit, oldestMXact))); -} - /* * Determine how aggressively we need to vacuum in order to prevent member * wraparound. * - * To determine the oldest multixact ID, we look at oldestMultiXactId, not - * lastCheckpointedOldest. That's because vacuuming can't help with anything - * older than oldestMultiXactId; anything older than that isn't referenced - * by any table. Offsets older than oldestMultiXactId but not as old as - * lastCheckpointedOldest will go away after the next checkpoint. + * To do so determine what's the oldest member offset and install the limit + * info in MultiXactState, where it can be used to prevent overrun of old data + * in the members SLRU area. * * The return value is true if emergency autovacuum is required and false * otherwise. */ static bool -SetOffsetVacuumLimit(bool finish_setup) +SetOffsetVacuumLimit(void) { - MultiXactId oldestMultiXactId; + MultiXactId oldestMultiXactId; MultiXactId nextMXact; - bool finishedStartup; - MultiXactOffset oldestOffset = 0; /* placate compiler */ + MultiXactOffset oldestOffset = 0; /* placate compiler */ + MultiXactOffset prevOldestOffset; MultiXactOffset nextOffset; bool oldestOffsetKnown = false; - MultiXactOffset prevOldestOffset; bool prevOldestOffsetKnown; + MultiXactOffset offsetStopLimit = 0; + + /* + * NB: Have to prevent concurrent truncation, we might otherwise try to + * lookup a oldestMulti that's concurrently getting truncated away. + */ + LWLockAcquire(MultiXactTruncationLock, LW_SHARED); /* Read relevant fields from shared memory. */ LWLockAcquire(MultiXactGenLock, LW_SHARED); oldestMultiXactId = MultiXactState->oldestMultiXactId; nextMXact = MultiXactState->nextMXact; nextOffset = MultiXactState->nextOffset; - finishedStartup = MultiXactState->finishedStartup; - prevOldestOffset = MultiXactState->oldestOffset; prevOldestOffsetKnown = MultiXactState->oldestOffsetKnown; + prevOldestOffset = MultiXactState->oldestOffset; + Assert(MultiXactState->finishedStartup); LWLockRelease(MultiXactGenLock); - /* Don't do this until after any recovery is complete. */ - if (!finishedStartup && !finish_setup) - return false; - /* - * If no multixacts exist, then oldestMultiXactId will be the next - * multixact that will be created, rather than an existing multixact. + * Determine the offset of the oldest multixact. Normally, we can read + * the offset from the multixact itself, but there's an important special + * case: if there are no multixacts in existence at all, oldestMXact + * obviously can't point to one. It will instead point to the multixact + * ID that will be assigned the next time one is needed. */ if (oldestMultiXactId == nextMXact) { /* - * When the next multixact gets created, it will be stored at the - * next offset. + * When the next multixact gets created, it will be stored at the next + * offset. */ oldestOffset = nextOffset; oldestOffsetKnown = true; @@ -2657,55 +2588,67 @@ SetOffsetVacuumLimit(bool finish_setup) else { /* - * Figure out where the oldest existing multixact's offsets are stored. - * Due to bugs in early release of PostgreSQL 9.3.X and 9.4.X, the - * supposedly-earliest multixact might not really exist. We are + * Figure out where the oldest existing multixact's offsets are + * stored. Due to bugs in early release of PostgreSQL 9.3.X and 9.4.X, + * the supposedly-earliest multixact might not really exist. We are * careful not to fail in that case. */ oldestOffsetKnown = find_multixact_start(oldestMultiXactId, &oldestOffset); - } - /* - * Except when initializing the system for the first time, there's no - * need to update anything if we don't know the oldest offset or if it - * hasn't changed. - */ - if (finish_setup || - (oldestOffsetKnown && !prevOldestOffsetKnown) || - (oldestOffsetKnown && prevOldestOffset != oldestOffset)) - { - /* Install the new limits. */ - LWLockAcquire(MultiXactGenLock, LW_EXCLUSIVE); - MultiXactState->oldestOffset = oldestOffset; - MultiXactState->oldestOffsetKnown = oldestOffsetKnown; - MultiXactState->finishedStartup = true; - LWLockRelease(MultiXactGenLock); - - /* Log the info */ if (oldestOffsetKnown) ereport(DEBUG1, (errmsg("oldest MultiXactId member is at offset %u", - oldestOffset))); + oldestOffset))); else - ereport(DEBUG1, - (errmsg("oldest MultiXactId member offset unknown"))); + ereport(LOG, + (errmsg("MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk", + oldestMultiXactId))); } + LWLockRelease(MultiXactTruncationLock); + /* - * If we failed to get the oldest offset this time, but we have a value - * from a previous pass through this function, assess the need for - * autovacuum based on that old value rather than automatically forcing - * it. + * If we can, compute limits (and install them MultiXactState) to prevent + * overrun of old data in the members SLRU area. We can only do so if the + * oldest offset is known though. */ - if (prevOldestOffsetKnown && !oldestOffsetKnown) + if (oldestOffsetKnown) { + /* move back to start of the corresponding segment */ + offsetStopLimit = oldestOffset - (oldestOffset % + (MULTIXACT_MEMBERS_PER_PAGE * SLRU_PAGES_PER_SEGMENT)); + + /* always leave one segment before the wraparound point */ + offsetStopLimit -= (MULTIXACT_MEMBERS_PER_PAGE * SLRU_PAGES_PER_SEGMENT); + + if (!prevOldestOffsetKnown && IsUnderPostmaster) + ereport(LOG, + (errmsg("MultiXact member wraparound protections are now enabled"))); + ereport(DEBUG1, + (errmsg("MultiXact member stop limit is now %u based on MultiXact %u", + offsetStopLimit, oldestMultiXactId))); + } + else if (prevOldestOffsetKnown) + { + /* + * If we failed to get the oldest offset this time, but we have a + * value from a previous pass through this function, use the old value + * rather than automatically forcing it. + */ oldestOffset = prevOldestOffset; oldestOffsetKnown = true; } + /* Install the computed values */ + LWLockAcquire(MultiXactGenLock, LW_EXCLUSIVE); + MultiXactState->oldestOffset = oldestOffset; + MultiXactState->oldestOffsetKnown = oldestOffsetKnown; + MultiXactState->offsetStopLimit = offsetStopLimit; + LWLockRelease(MultiXactGenLock); + /* - * Do we need an emergency autovacuum? If we're not sure, assume yes. + * Do we need an emergency autovacuum? If we're not sure, assume yes. */ return !oldestOffsetKnown || (nextOffset - oldestOffset > MULTIXACT_MEMBER_SAFE_THRESHOLD); @@ -2718,7 +2661,7 @@ SetOffsetVacuumLimit(bool finish_setup) * boundary point, hence the name. The reason we don't want to use the regular * 2^31-modulo arithmetic here is that we want to be able to use the whole of * the 2^32-1 space here, allowing for more multixacts that would fit - * otherwise. See also SlruScanDirCbRemoveMembers. + * otherwise. */ static bool MultiXactOffsetWouldWrap(MultiXactOffset boundary, MultiXactOffset start, @@ -2764,6 +2707,9 @@ MultiXactOffsetWouldWrap(MultiXactOffset boundary, MultiXactOffset start, * * Returns false if the file containing the multi does not exist on disk. * Otherwise, returns true and sets *result to the starting member offset. + * + * This function does not prevent concurrent truncation, so if that's + * required, the caller has to protect against that. */ static bool find_multixact_start(MultiXactId multi, MultiXactOffset *result) @@ -2774,9 +2720,21 @@ find_multixact_start(MultiXactId multi, MultiXactOffset *result) int slotno; MultiXactOffset *offptr; + Assert(MultiXactState->finishedStartup); + pageno = MultiXactIdToOffsetPage(multi); entryno = MultiXactIdToOffsetEntry(multi); + /* + * Flush out dirty data, so PhysicalPageExists can work correctly. + * SimpleLruFlush() is a pretty big hammer for that. Alternatively we + * could add a in-memory version of page exists, but find_multixact_start + * is called infrequently, and it doesn't seem bad to flush buffers to + * disk before truncation. + */ + SimpleLruFlush(MultiXactOffsetCtl, true); + SimpleLruFlush(MultiXactMemberCtl, true); + if (!SimpleLruDoesPhysicalPageExist(MultiXactOffsetCtl, pageno)) return false; @@ -2882,65 +2840,6 @@ MultiXactMemberFreezeThreshold(void) return multixacts - victim_multixacts; } -/* - * SlruScanDirectory callback. - * This callback deletes segments that are outside the range determined by - * the given page numbers. - * - * Both range endpoints are exclusive (that is, segments containing any of - * those pages are kept.) - */ -typedef struct MembersLiveRange -{ - int rangeStart; - int rangeEnd; -} MembersLiveRange; - -static bool -SlruScanDirCbRemoveMembers(SlruCtl ctl, char *filename, int segpage, - void *data) -{ - MembersLiveRange *range = (MembersLiveRange *) data; - MultiXactOffset nextOffset; - - if ((segpage == range->rangeStart) || - (segpage == range->rangeEnd)) - return false; /* easy case out */ - - /* - * To ensure that no segment is spuriously removed, we must keep track of - * new segments added since the start of the directory scan; to do this, - * we update our end-of-range point as we run. - * - * As an optimization, we can skip looking at shared memory if we know for - * certain that the current segment must be kept. This is so because - * nextOffset never decreases, and we never increase rangeStart during any - * one run. - */ - if (!((range->rangeStart > range->rangeEnd && - segpage > range->rangeEnd && segpage < range->rangeStart) || - (range->rangeStart < range->rangeEnd && - (segpage < range->rangeStart || segpage > range->rangeEnd)))) - return false; - - /* - * Update our idea of the end of the live range. - */ - LWLockAcquire(MultiXactGenLock, LW_SHARED); - nextOffset = MultiXactState->nextOffset; - LWLockRelease(MultiXactGenLock); - range->rangeEnd = MXOffsetToMemberPage(nextOffset); - - /* Recheck the deletion condition. If it still holds, perform deletion */ - if ((range->rangeStart > range->rangeEnd && - segpage > range->rangeEnd && segpage < range->rangeStart) || - (range->rangeStart < range->rangeEnd && - (segpage < range->rangeStart || segpage > range->rangeEnd))) - SlruDeleteSegment(ctl, filename); - - return false; /* keep going */ -} - typedef struct mxtruncinfo { int earliestExistingPage; @@ -2964,37 +2863,107 @@ SlruScanDirCbFindEarliest(SlruCtl ctl, char *filename, int segpage, void *data) return false; /* keep going */ } + +/* + * Delete members segments [oldest, newOldest) + * + * The members SLRU can, in contrast to the offsets one, be filled to almost + * the full range at once. This means SimpleLruTruncate() can't trivially be + * used - instead the to-be-deleted range is computed using the offsets + * SLRU. C.f. TruncateMultiXact(). + */ +static void +PerformMembersTruncation(MultiXactOffset oldestOffset, MultiXactOffset newOldestOffset) +{ + const int maxsegment = MXOffsetToMemberSegment(MaxMultiXactOffset); + int startsegment = MXOffsetToMemberSegment(oldestOffset); + int endsegment = MXOffsetToMemberSegment(newOldestOffset); + int segment = startsegment; + + /* + * Delete all the segments but the last one. The last segment can still + * contain, possibly partially, valid data. + */ + while (segment != endsegment) + { + elog(DEBUG2, "truncating multixact members segment %x", segment); + SlruDeleteSegment(MultiXactMemberCtl, segment); + + /* move to next segment, handling wraparound correctly */ + if (segment == maxsegment) + segment = 0; + else + segment += 1; + } +} + +/* + * Delete offsets segments [oldest, newOldest) + */ +static void +PerformOffsetsTruncation(MultiXactId oldestMulti, MultiXactId newOldestMulti) +{ + /* + * We step back one multixact to avoid passing a cutoff page that hasn't + * been created yet in the rare case that oldestMulti would be the first + * item on a page and oldestMulti == nextMulti. In that case, if we + * didn't subtract one, we'd trigger SimpleLruTruncate's wraparound + * detection. + */ + SimpleLruTruncate(MultiXactOffsetCtl, + MultiXactIdToOffsetPage(PreviousMultiXactId(newOldestMulti))); +} + /* * Remove all MultiXactOffset and MultiXactMember segments before the oldest * ones still of interest. * - * On a primary, this is called by the checkpointer process after a checkpoint - * has been flushed; during crash recovery, it's called from - * CreateRestartPoint(). In the latter case, we rely on the fact that - * xlog_redo() will already have called MultiXactAdvanceOldest(). Our - * latest_page_number will already have been initialized by StartupMultiXact() - * and kept up to date as new pages are zeroed. + * This is only called on a primary as part of vacuum (via + * vac_truncate_clog()). During recovery truncation is done by replaying + * truncation WAL records logged here. + * + * newOldestMulti is the oldest currently required multixact, newOldestMultiDB + * is one of the databases preventing newOldestMulti from increasing. */ void -TruncateMultiXact(void) +TruncateMultiXact(MultiXactId newOldestMulti, Oid newOldestMultiDB) { - MultiXactId oldestMXact; + MultiXactId oldestMulti; + MultiXactId nextMulti; + MultiXactOffset newOldestOffset; MultiXactOffset oldestOffset; - MultiXactId nextMXact; - MultiXactOffset nextOffset; + MultiXactOffset nextOffset; mxtruncinfo trunc; MultiXactId earliest; - MembersLiveRange range; - Assert(AmCheckpointerProcess() || AmStartupProcess() || - !IsPostmasterEnvironment); + Assert(!RecoveryInProgress()); + Assert(MultiXactState->finishedStartup); + + /* + * We can only allow one truncation to happen at once. Otherwise parts of + * members might vanish while we're doing lookups or similar. There's no + * need to have an interlock with creating new multis or such, since those + * are constrained by the limits (which only grow, never shrink). + */ + LWLockAcquire(MultiXactTruncationLock, LW_EXCLUSIVE); LWLockAcquire(MultiXactGenLock, LW_SHARED); - oldestMXact = MultiXactState->lastCheckpointedOldest; - nextMXact = MultiXactState->nextMXact; + nextMulti = MultiXactState->nextMXact; nextOffset = MultiXactState->nextOffset; + oldestMulti = MultiXactState->oldestMultiXactId; LWLockRelease(MultiXactGenLock); - Assert(MultiXactIdIsValid(oldestMXact)); + Assert(MultiXactIdIsValid(oldestMulti)); + + /* + * Make sure to only attempt truncation if there's values to truncate + * away. In normal processing values shouldn't go backwards, but there's + * some corner cases (due to bugs) where that's possible. + */ + if (MultiXactIdPrecedesOrEquals(newOldestMulti, oldestMulti)) + { + LWLockRelease(MultiXactTruncationLock); + return; + } /* * Note we can't just plow ahead with the truncation; it's possible that @@ -3002,6 +2971,9 @@ TruncateMultiXact(void) * going to attempt to read the offsets page to determine where to * truncate the members SLRU. So we first scan the directory to determine * the earliest offsets page number that we can read without error. + * + * NB: It's also possible that the page that oldestMulti is on has already + * been truncated away, and we crashed before updating oldestMulti. */ trunc.earliestExistingPage = -1; SlruScanDirectory(MultiXactOffsetCtl, SlruScanDirCbFindEarliest, &trunc); @@ -3009,19 +2981,10 @@ TruncateMultiXact(void) if (earliest < FirstMultiXactId) earliest = FirstMultiXactId; - /* - * If there's nothing to remove, we can bail out early. - * - * Due to bugs in early releases of PostgreSQL 9.3.X and 9.4.X, - * oldestMXact might point to a multixact that does not exist. - * Autovacuum will eventually advance it to a value that does exist, - * and we want to set a proper offsetStopLimit when that happens, - * so call DetermineSafeOldestOffset here even if we're not actually - * truncating. - */ - if (MultiXactIdPrecedes(oldestMXact, earliest)) + /* If there's nothing to remove, we can bail out early. */ + if (MultiXactIdPrecedes(oldestMulti, earliest)) { - DetermineSafeOldestOffset(oldestMXact); + LWLockRelease(MultiXactTruncationLock); return; } @@ -3030,44 +2993,96 @@ TruncateMultiXact(void) * the starting offset of the oldest multixact. * * Hopefully, find_multixact_start will always work here, because we've - * already checked that it doesn't precede the earliest MultiXact on - * disk. But if it fails, don't truncate anything, and log a message. + * already checked that it doesn't precede the earliest MultiXact on disk. + * But if it fails, don't truncate anything, and log a message. */ - if (oldestMXact == nextMXact) - oldestOffset = nextOffset; /* there are NO MultiXacts */ - else if (!find_multixact_start(oldestMXact, &oldestOffset)) + if (oldestMulti == nextMulti) + { + /* there are NO MultiXacts */ + oldestOffset = nextOffset; + } + else if (!find_multixact_start(oldestMulti, &oldestOffset)) { ereport(LOG, (errmsg("oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation", - oldestMXact, earliest))); + oldestMulti, earliest))); + LWLockRelease(MultiXactTruncationLock); return; } /* - * To truncate MultiXactMembers, we need to figure out the active page - * range and delete all files outside that range. The start point is the - * start of the segment containing the oldest offset; an end point of the - * segment containing the next offset to use is enough. The end point is - * updated as MultiXactMember gets extended concurrently, elsewhere. + * Secondly compute up to where to truncate. Lookup the corresponding + * member offset for newOldestMulti for that. */ - range.rangeStart = MXOffsetToMemberPage(oldestOffset); - range.rangeStart -= range.rangeStart % SLRU_PAGES_PER_SEGMENT; + if (newOldestMulti == nextMulti) + { + /* there are NO MultiXacts */ + newOldestOffset = nextOffset; + } + else if (!find_multixact_start(newOldestMulti, &newOldestOffset)) + { + ereport(LOG, + (errmsg("cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation", + newOldestMulti))); + LWLockRelease(MultiXactTruncationLock); + return; + } - range.rangeEnd = MXOffsetToMemberPage(nextOffset); + elog(DEBUG1, "performing multixact truncation: " + "offsets [%u, %u), offsets segments [%x, %x), " + "members [%u, %u), members segments [%x, %x)", + oldestMulti, newOldestMulti, + MultiXactIdToOffsetSegment(oldestMulti), + MultiXactIdToOffsetSegment(newOldestMulti), + oldestOffset, newOldestOffset, + MXOffsetToMemberSegment(oldestOffset), + MXOffsetToMemberSegment(newOldestOffset)); - SlruScanDirectory(MultiXactMemberCtl, SlruScanDirCbRemoveMembers, &range); + /* + * Do truncation, and the WAL logging of the truncation, in a critical + * section. That way offsets/members cannot get out of sync anymore, i.e. + * once consistent the newOldestMulti will always exist in members, even + * if we crashed in the wrong moment. + */ + START_CRIT_SECTION(); - /* Now we can truncate MultiXactOffset */ - SimpleLruTruncate(MultiXactOffsetCtl, - MultiXactIdToOffsetPage(oldestMXact)); + /* + * Prevent checkpoints from being scheduled concurrently. This is critical + * because otherwise a truncation record might not be replayed after a + * crash/basebackup, even though the state of the data directory would + * require it. + */ + Assert(!MyPgXact->delayChkpt); + MyPgXact->delayChkpt = true; + /* WAL log truncation */ + WriteMTruncateXlogRec(newOldestMultiDB, + oldestMulti, newOldestMulti, + oldestOffset, newOldestOffset); /* - * Now, and only now, we can advance the stop point for multixact members. - * If we did it any sooner, the segments we deleted above might already - * have been overwritten with new members. That would be bad. + * Update in-memory limits before performing the truncation, while inside + * the critical section: Have to do it before truncation, to prevent + * concurrent lookups of those values. Has to be inside the critical + * section as otherwise a future call to this function would error out, + * while looking up the oldest member in offsets, if our caller crashes + * before updating the limits. */ - DetermineSafeOldestOffset(oldestMXact); + LWLockAcquire(MultiXactGenLock, LW_EXCLUSIVE); + MultiXactState->oldestMultiXactId = newOldestMulti; + MultiXactState->oldestMultiXactDB = newOldestMultiDB; + LWLockRelease(MultiXactGenLock); + + /* First truncate members */ + PerformMembersTruncation(oldestOffset, newOldestOffset); + + /* Then offsets */ + PerformOffsetsTruncation(oldestMulti, newOldestMulti); + + MyPgXact->delayChkpt = false; + + END_CRIT_SECTION(); + LWLockRelease(MultiXactTruncationLock); } /* @@ -3163,6 +3178,34 @@ WriteMZeroPageXlogRec(int pageno, uint8 info) (void) XLogInsert(RM_MULTIXACT_ID, info); } +/* + * Write a TRUNCATE xlog record + * + * We must flush the xlog record to disk before returning --- see notes in + * TruncateCLOG(). + */ +static void +WriteMTruncateXlogRec(Oid oldestMultiDB, + MultiXactId startTruncOff, MultiXactId endTruncOff, + MultiXactOffset startTruncMemb, MultiXactOffset endTruncMemb) +{ + XLogRecPtr recptr; + xl_multixact_truncate xlrec; + + xlrec.oldestMultiDB = oldestMultiDB; + + xlrec.startTruncOff = startTruncOff; + xlrec.endTruncOff = endTruncOff; + + xlrec.startTruncMemb = startTruncMemb; + xlrec.endTruncMemb = endTruncMemb; + + XLogBeginInsert(); + XLogRegisterData((char *) (&xlrec), SizeOfMultiXactTruncate); + recptr = XLogInsert(RM_MULTIXACT_ID, XLOG_MULTIXACT_TRUNCATE_ID); + XLogFlush(recptr); +} + /* * MULTIXACT resource manager's routines */ @@ -3245,6 +3288,46 @@ multixact_redo(XLogReaderState *record) LWLockRelease(XidGenLock); } } + else if (info == XLOG_MULTIXACT_TRUNCATE_ID) + { + xl_multixact_truncate xlrec; + int pageno; + + memcpy(&xlrec, XLogRecGetData(record), + SizeOfMultiXactTruncate); + + elog(DEBUG1, "replaying multixact truncation: " + "offsets [%u, %u), offsets segments [%x, %x), " + "members [%u, %u), members segments [%x, %x)", + xlrec.startTruncOff, xlrec.endTruncOff, + MultiXactIdToOffsetSegment(xlrec.startTruncOff), + MultiXactIdToOffsetSegment(xlrec.endTruncOff), + xlrec.startTruncMemb, xlrec.endTruncMemb, + MXOffsetToMemberSegment(xlrec.startTruncMemb), + MXOffsetToMemberSegment(xlrec.endTruncMemb)); + + /* should not be required, but more than cheap enough */ + LWLockAcquire(MultiXactTruncationLock, LW_EXCLUSIVE); + + /* + * Advance the horizon values, so they're current at the end of + * recovery. + */ + SetMultiXactIdLimit(xlrec.endTruncOff, xlrec.oldestMultiDB); + + 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); + } else elog(PANIC, "multixact_redo: unknown op code %u", info); } diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index f4ba8518b1215..9c7428f5d6c6e 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -28,6 +28,7 @@ #include "tcop/tcopprot.h" #include "utils/combocid.h" #include "utils/guc.h" +#include "utils/inval.h" #include "utils/memutils.h" #include "utils/resowner.h" #include "utils/snapmgr.h" @@ -95,6 +96,9 @@ int ParallelWorkerNumber = -1; /* Is there a parallel message pending which we need to receive? */ bool ParallelMessagePending = false; +/* Are we initializing a parallel worker? */ +bool InitializingParallelWorker = false; + /* Pointer to our fixed parallel state. */ static FixedParallelState *MyFixedParallelState; @@ -513,14 +517,17 @@ DestroyParallelContext(ParallelContext *pcxt) dlist_delete(&pcxt->node); /* Kill each worker in turn, and forget their error queues. */ - for (i = 0; i < pcxt->nworkers; ++i) + if (pcxt->worker != NULL) { - if (pcxt->worker[i].bgwhandle != NULL) - TerminateBackgroundWorker(pcxt->worker[i].bgwhandle); - if (pcxt->worker[i].error_mqh != NULL) + for (i = 0; i < pcxt->nworkers; ++i) { - pfree(pcxt->worker[i].error_mqh); - pcxt->worker[i].error_mqh = NULL; + if (pcxt->worker[i].bgwhandle != NULL) + TerminateBackgroundWorker(pcxt->worker[i].bgwhandle); + if (pcxt->worker[i].error_mqh != NULL) + { + pfree(pcxt->worker[i].error_mqh); + pcxt->worker[i].error_mqh = NULL; + } } } @@ -550,7 +557,7 @@ DestroyParallelContext(ParallelContext *pcxt) { BgwHandleStatus status; - if (pcxt->worker[i].bgwhandle == NULL) + if (pcxt->worker == NULL || pcxt->worker[i].bgwhandle == NULL) continue; /* @@ -811,6 +818,9 @@ ParallelWorkerMain(Datum main_arg) char *tstatespace; StringInfoData msgbuf; + /* Set flag to indicate that we're initializing a parallel worker. */ + InitializingParallelWorker = true; + /* Establish signal handlers. */ pqsignal(SIGTERM, die); BackgroundWorkerUnblockSignals(); @@ -864,7 +874,7 @@ ParallelWorkerMain(Datum main_arg) ParallelWorkerNumber * PARALLEL_ERROR_QUEUE_SIZE); shm_mq_set_sender(mq, MyProc); mqh = shm_mq_attach(mq, seg, NULL); - pq_redirect_to_shm_mq(mq, mqh); + pq_redirect_to_shm_mq(seg, mqh); pq_set_parallel_master(fps->parallel_master_pid, fps->parallel_master_backend_id); @@ -925,6 +935,12 @@ ParallelWorkerMain(Datum main_arg) Assert(asnapspace != NULL); PushActiveSnapshot(RestoreSnapshot(asnapspace)); + /* + * We've changed which tuples we can see, and must therefore invalidate + * system caches. + */ + InvalidateSystemCaches(); + /* Restore user ID and security context. */ SetUserIdAndSecContext(fps->current_user_id, fps->sec_context); @@ -932,6 +948,7 @@ ParallelWorkerMain(Datum main_arg) * We've initialized all of our state now; nothing should change * hereafter. */ + InitializingParallelWorker = false; EnterParallelMode(); /* diff --git a/src/backend/access/transam/slru.c b/src/backend/access/transam/slru.c index 5fcea113eafea..90c7cf56e63b4 100644 --- a/src/backend/access/transam/slru.c +++ b/src/backend/access/transam/slru.c @@ -134,6 +134,7 @@ static int SlruSelectLRUPage(SlruCtl ctl, int pageno); static bool SlruScanDirCbDeleteCutoff(SlruCtl ctl, char *filename, int segpage, void *data); +static void SlruInternalDeleteSegment(SlruCtl ctl, char *filename); /* * Initialization of shared memory @@ -1075,7 +1076,7 @@ SlruSelectLRUPage(SlruCtl ctl, int pageno) * Flush dirty pages to disk during checkpoint or database shutdown */ void -SimpleLruFlush(SlruCtl ctl, bool checkpoint) +SimpleLruFlush(SlruCtl ctl, bool allow_redirtied) { SlruShared shared = ctl->shared; SlruFlushData fdata; @@ -1096,11 +1097,11 @@ SimpleLruFlush(SlruCtl ctl, bool checkpoint) SlruInternalWritePage(ctl, slotno, &fdata); /* - * When called during a checkpoint, we cannot assert that the slot is - * clean now, since another process might have re-dirtied it already. - * That's okay. + * In some places (e.g. checkpoints), we cannot assert that the slot + * is clean now, since another process might have re-dirtied it + * already. That's okay. */ - Assert(checkpoint || + Assert(allow_redirtied || shared->page_status[slotno] == SLRU_PAGE_EMPTY || (shared->page_status[slotno] == SLRU_PAGE_VALID && !shared->page_dirty[slotno])); @@ -1210,8 +1211,14 @@ restart:; (void) SlruScanDirectory(ctl, SlruScanDirCbDeleteCutoff, &cutoffPage); } -void -SlruDeleteSegment(SlruCtl ctl, char *filename) +/* + * Delete an individual SLRU segment, identified by the filename. + * + * NB: This does not touch the SLRU buffers themselves, callers have to ensure + * they either can't yet contain anything, or have already been cleaned out. + */ +static void +SlruInternalDeleteSegment(SlruCtl ctl, char *filename) { char path[MAXPGPATH]; @@ -1221,6 +1228,64 @@ SlruDeleteSegment(SlruCtl ctl, char *filename) unlink(path); } +/* + * Delete an individual SLRU segment, identified by the segment number. + */ +void +SlruDeleteSegment(SlruCtl ctl, int segno) +{ + SlruShared shared = ctl->shared; + int slotno; + char path[MAXPGPATH]; + bool did_write; + + /* Clean out any possibly existing references to the segment. */ + LWLockAcquire(shared->ControlLock, LW_EXCLUSIVE); +restart: + did_write = false; + for (slotno = 0; slotno < shared->num_slots; slotno++) + { + int pagesegno = shared->page_number[slotno] / SLRU_PAGES_PER_SEGMENT; + + if (shared->page_status[slotno] == SLRU_PAGE_EMPTY) + continue; + + /* not the segment we're looking for */ + if (pagesegno != segno) + continue; + + /* If page is clean, just change state to EMPTY (expected case). */ + if (shared->page_status[slotno] == SLRU_PAGE_VALID && + !shared->page_dirty[slotno]) + { + shared->page_status[slotno] = SLRU_PAGE_EMPTY; + continue; + } + + /* Same logic as SimpleLruTruncate() */ + if (shared->page_status[slotno] == SLRU_PAGE_VALID) + SlruInternalWritePage(ctl, slotno, NULL); + else + SimpleLruWaitIO(ctl, slotno); + + did_write = true; + } + + /* + * Be extra careful and re-check. The IO functions release the control + * lock, so new pages could have been read in. + */ + if (did_write) + goto restart; + + snprintf(path, MAXPGPATH, "%s/%04X", ctl->Dir, segno); + ereport(DEBUG2, + (errmsg("removing file \"%s\"", path))); + unlink(path); + + LWLockRelease(shared->ControlLock); +} + /* * SlruScanDirectory callback * This callback reports true if there's any segment prior to the one @@ -1249,7 +1314,7 @@ SlruScanDirCbDeleteCutoff(SlruCtl ctl, char *filename, int segpage, void *data) int cutoffPage = *(int *) data; if (ctl->PagePrecedes(segpage, cutoffPage)) - SlruDeleteSegment(ctl, filename); + SlruInternalDeleteSegment(ctl, filename); return false; /* keep going */ } @@ -1261,7 +1326,7 @@ SlruScanDirCbDeleteCutoff(SlruCtl ctl, char *filename, int segpage, void *data) bool SlruScanDirCbDeleteAll(SlruCtl ctl, char *filename, int segpage, void *data) { - SlruDeleteSegment(ctl, filename); + SlruInternalDeleteSegment(ctl, filename); return false; /* keep going */ } diff --git a/src/backend/access/transam/subtrans.c b/src/backend/access/transam/subtrans.c index 4bc24d9bbcbc4..6b70982322780 100644 --- a/src/backend/access/transam/subtrans.c +++ b/src/backend/access/transam/subtrans.c @@ -340,8 +340,13 @@ TruncateSUBTRANS(TransactionId oldestXact) /* * The cutoff point is the start of the segment containing oldestXact. We - * pass the *page* containing oldestXact to SimpleLruTruncate. + * pass the *page* containing oldestXact to SimpleLruTruncate. We step + * back one transaction to avoid passing a cutoff page that hasn't been + * created yet in the rare case that oldestXact would be the first item on + * a page and oldestXact == next XID. In that case, if we didn't subtract + * one, we'd trigger SimpleLruTruncate's wraparound detection. */ + TransactionIdRetreat(oldestXact); cutoffPage = TransactionIdToPage(oldestXact); SimpleLruTruncate(SubTransCtl, cutoffPage); diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 177d1e1432e38..6f82e546cb3d4 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -41,6 +41,7 @@ #include #include +#include "access/commit_ts.h" #include "access/htup_details.h" #include "access/subtrans.h" #include "access/transam.h" @@ -56,8 +57,9 @@ #include "miscadmin.h" #include "pg_trace.h" #include "pgstat.h" -#include "replication/walsender.h" +#include "replication/origin.h" #include "replication/syncrep.h" +#include "replication/walsender.h" #include "storage/fd.h" #include "storage/ipc.h" #include "storage/predicate.h" @@ -2070,8 +2072,9 @@ RecoverPreparedTransactions(void) /* * RecordTransactionCommitPrepared * - * This is basically the same as RecordTransactionCommit: in particular, - * we must set the delayChkpt flag to avoid a race condition. + * This is basically the same as RecordTransactionCommit (q.v. if you change + * this function): in particular, we must set the delayChkpt flag to avoid a + * race condition. * * We know the transaction made at least one XLOG entry (its PREPARE), * so it is never possible to optimize out the commit record. @@ -2087,6 +2090,15 @@ RecordTransactionCommitPrepared(TransactionId xid, bool initfileinval) { XLogRecPtr recptr; + TimestampTz committs = GetCurrentTimestamp(); + bool replorigin; + + /* + * Are we using the replication origins feature? Or, in other words, are + * we replaying remote actions? + */ + replorigin = (replorigin_session_origin != InvalidRepOriginId && + replorigin_session_origin != DoNotReplicateId); START_CRIT_SECTION(); @@ -2094,12 +2106,33 @@ RecordTransactionCommitPrepared(TransactionId xid, MyPgXact->delayChkpt = true; /* Emit the XLOG commit record */ - recptr = XactLogCommitRecord(GetCurrentTimestamp(), + recptr = XactLogCommitRecord(committs, nchildren, children, nrels, rels, ninvalmsgs, invalmsgs, initfileinval, false, xid); + + if (replorigin) + /* Move LSNs forward for this replication origin */ + replorigin_session_advance(replorigin_session_origin_lsn, + XactLastRecEnd); + + /* + * Record commit timestamp. The value comes from plain commit timestamp + * if replorigin is not enabled, or replorigin already set a value for us + * in replorigin_session_origin_timestamp otherwise. + * + * We don't need to WAL-log anything here, as the commit record written + * above already contains the data. + */ + if (!replorigin || replorigin_session_origin_timestamp == 0) + replorigin_session_origin_timestamp = committs; + + TransactionTreeSetCommitTsData(xid, nchildren, children, + replorigin_session_origin_timestamp, + replorigin_session_origin, false); + /* * We don't currently try to sleep before flush here ... nor is there any * support for async commit of a prepared xact (the very idea is probably diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index b53d95faf8608..47312f6854fb2 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -42,9 +42,9 @@ #include "miscadmin.h" #include "pgstat.h" #include "replication/logical.h" -#include "replication/walsender.h" -#include "replication/syncrep.h" #include "replication/origin.h" +#include "replication/syncrep.h" +#include "replication/walsender.h" #include "storage/fd.h" #include "storage/lmgr.h" #include "storage/predicate.h" @@ -83,7 +83,7 @@ int synchronous_commit = SYNCHRONOUS_COMMIT_ON; * When running as a parallel worker, we place only a single * TransactionStateData on the parallel worker's state stack, and the XID * reflected there will be that of the *innermost* currently-active - * subtransaction in the backend that initiated paralllelism. However, + * subtransaction in the backend that initiated parallelism. However, * GetTopTransactionId() and TransactionIdIsCurrentTransactionId() * need to return the same answers in the parallel worker as they would have * in the user backend, so we need some additional bookkeeping. @@ -497,7 +497,7 @@ AssignTransactionId(TransactionState s) * Workers synchronize transaction state at the beginning of each parallel * operation, so we can't account for new XIDs at this point. */ - if (IsInParallelMode()) + if (IsInParallelMode() || IsParallelWorker()) elog(ERROR, "cannot assign XIDs during a parallel operation"); /* @@ -931,7 +931,7 @@ CommandCounterIncrement(void) * parallel operation, so we can't account for new commands after that * point. */ - if (IsInParallelMode()) + if (IsInParallelMode() || IsParallelWorker()) elog(ERROR, "cannot start commands during a parallel operation"); currentCommandId += 1; @@ -1119,6 +1119,8 @@ AtSubStart_ResourceOwner(void) * * Returns latest XID among xact and its children, or InvalidTransactionId * if the xact has no XID. (We compute that here just because it's easier.) + * + * If you change this function, see RecordTransactionCommitPrepared also. */ static TransactionId RecordTransactionCommit(void) @@ -1172,6 +1174,15 @@ RecordTransactionCommit(void) } else { + bool replorigin; + + /* + * Are we using the replication origins feature? Or, in other words, + * are we replaying remote actions? + */ + replorigin = (replorigin_session_origin != InvalidRepOriginId && + replorigin_session_origin != DoNotReplicateId); + /* * Begin commit critical section and insert the commit XLOG record. */ @@ -1206,26 +1217,27 @@ RecordTransactionCommit(void) RelcacheInitFileInval, forceSyncCommit, InvalidTransactionId /* plain commit */ ); - /* - * Record plain commit ts if not replaying remote actions, or if no - * timestamp is configured. - */ - if (replorigin_sesssion_origin == InvalidRepOriginId || - replorigin_sesssion_origin == DoNotReplicateId || - replorigin_sesssion_origin_timestamp == 0) - replorigin_sesssion_origin_timestamp = xactStopTimestamp; - else - replorigin_session_advance(replorigin_sesssion_origin_lsn, + if (replorigin) + /* Move LSNs forward for this replication origin */ + replorigin_session_advance(replorigin_session_origin_lsn, XactLastRecEnd); /* - * We don't need to WAL log origin or timestamp here, the commit - * record contains all the necessary information and will redo the SET - * action during replay. + * Record commit timestamp. The value comes from plain commit + * timestamp if there's no replication origin; otherwise, the + * timestamp was already set in replorigin_session_origin_timestamp by + * replication. + * + * We don't need to WAL-log anything here, as the commit record + * written above already contains the data. */ + + if (!replorigin || replorigin_session_origin_timestamp == 0) + replorigin_session_origin_timestamp = xactStopTimestamp; + TransactionTreeSetCommitTsData(xid, nchildren, children, - replorigin_sesssion_origin_timestamp, - replorigin_sesssion_origin, false); + replorigin_session_origin_timestamp, + replorigin_session_origin, false); } /* @@ -1915,6 +1927,10 @@ CommitTransaction(void) is_parallel_worker = (s->blockState == TBLOCK_PARALLEL_INPROGRESS); + /* Enforce parallel mode restrictions during parallel worker commit. */ + if (is_parallel_worker) + EnterParallelMode(); + ShowTransactionState("CommitTransaction"); /* @@ -1959,10 +1975,7 @@ CommitTransaction(void) /* If we might have parallel workers, clean them up now. */ if (IsInParallelMode()) - { AtEOXact_Parallel(true); - s->parallelModeLevel = 0; - } /* Shut down the deferred-trigger manager */ AfterTriggerEndXact(true); @@ -2001,6 +2014,7 @@ CommitTransaction(void) * commit processing */ s->state = TRANS_COMMIT; + s->parallelModeLevel = 0; if (!is_parallel_worker) { @@ -4585,6 +4599,7 @@ AbortSubTransaction(void) AfterTriggerEndSubXact(false); AtSubAbort_Portals(s->subTransactionId, s->parent->subTransactionId, + s->curTransactionOwner, s->parent->curTransactionOwner); AtEOSubXact_LargeObject(false, s->subTransactionId, s->parent->subTransactionId); @@ -4773,8 +4788,8 @@ Size EstimateTransactionStateSpace(void) { TransactionState s; - Size nxids = 5; /* iso level, deferrable, top & current XID, - * XID count */ + Size nxids = 6; /* iso level, deferrable, top & current XID, + * command counter, XID count */ for (s = CurrentTransactionState; s != NULL; s = s->parent) { @@ -4794,12 +4809,13 @@ EstimateTransactionStateSpace(void) * * We need to save and restore XactDeferrable, XactIsoLevel, and the XIDs * associated with this transaction. The first eight bytes of the result - * contain XactDeferrable and XactIsoLevel; the next eight bytes contain the - * XID of the top-level transaction and the XID of the current transaction - * (or, in each case, InvalidTransactionId if none). After that, the next 4 - * bytes contain a count of how many additional XIDs follow; this is followed - * by all of those XIDs one after another. We emit the XIDs in sorted order - * for the convenience of the receiving process. + * contain XactDeferrable and XactIsoLevel; the next twelve bytes contain the + * XID of the top-level transaction, the XID of the current transaction + * (or, in each case, InvalidTransactionId if none), and the current command + * counter. After that, the next 4 bytes contain a count of how many + * additional XIDs follow; this is followed by all of those XIDs one after + * another. We emit the XIDs in sorted order for the convenience of the + * receiving process. */ void SerializeTransactionState(Size maxsize, char *start_address) @@ -4807,14 +4823,16 @@ SerializeTransactionState(Size maxsize, char *start_address) TransactionState s; Size nxids = 0; Size i = 0; + Size c = 0; TransactionId *workspace; TransactionId *result = (TransactionId *) start_address; - Assert(maxsize >= 5 * sizeof(TransactionId)); - result[0] = (TransactionId) XactIsoLevel; - result[1] = (TransactionId) XactDeferrable; - result[2] = XactTopTransactionId; - result[3] = CurrentTransactionState->transactionId; + result[c++] = (TransactionId) XactIsoLevel; + result[c++] = (TransactionId) XactDeferrable; + result[c++] = XactTopTransactionId; + result[c++] = CurrentTransactionState->transactionId; + result[c++] = (TransactionId) currentCommandId; + Assert(maxsize >= c * sizeof(TransactionId)); /* * If we're running in a parallel worker and launching a parallel worker @@ -4823,9 +4841,9 @@ SerializeTransactionState(Size maxsize, char *start_address) */ if (nParallelCurrentXids > 0) { - Assert(maxsize > (nParallelCurrentXids + 4) * sizeof(TransactionId)); - result[4] = nParallelCurrentXids; - memcpy(&result[5], ParallelCurrentXids, + result[c++] = nParallelCurrentXids; + Assert(maxsize >= (nParallelCurrentXids + c) * sizeof(TransactionId)); + memcpy(&result[c], ParallelCurrentXids, nParallelCurrentXids * sizeof(TransactionId)); return; } @@ -4840,7 +4858,7 @@ SerializeTransactionState(Size maxsize, char *start_address) nxids = add_size(nxids, 1); nxids = add_size(nxids, s->nChildXids); } - Assert(nxids * sizeof(TransactionId) < maxsize); + Assert((c + 1 + nxids) * sizeof(TransactionId) <= maxsize); /* Copy them to our scratch space. */ workspace = palloc(nxids * sizeof(TransactionId)); @@ -4858,8 +4876,8 @@ SerializeTransactionState(Size maxsize, char *start_address) qsort(workspace, nxids, sizeof(TransactionId), xidComparator); /* Copy data into output area. */ - result[4] = (TransactionId) nxids; - memcpy(&result[5], workspace, nxids * sizeof(TransactionId)); + result[c++] = (TransactionId) nxids; + memcpy(&result[c], workspace, nxids * sizeof(TransactionId)); } /* @@ -4879,8 +4897,9 @@ StartParallelWorkerTransaction(char *tstatespace) XactDeferrable = (bool) tstate[1]; XactTopTransactionId = tstate[2]; CurrentTransactionState->transactionId = tstate[3]; - nParallelCurrentXids = (int) tstate[4]; - ParallelCurrentXids = &tstate[5]; + currentCommandId = tstate[4]; + nParallelCurrentXids = (int) tstate[5]; + ParallelCurrentXids = &tstate[6]; CurrentTransactionState->blockState = TBLOCK_PARALLEL_INPROGRESS; } @@ -5133,12 +5152,12 @@ XactLogCommitRecord(TimestampTz commit_time, } /* dump transaction origin information */ - if (replorigin_sesssion_origin != InvalidRepOriginId) + if (replorigin_session_origin != InvalidRepOriginId) { xl_xinfo.xinfo |= XACT_XINFO_HAS_ORIGIN; - xl_origin.origin_lsn = replorigin_sesssion_origin_lsn; - xl_origin.origin_timestamp = replorigin_sesssion_origin_timestamp; + xl_origin.origin_lsn = replorigin_session_origin_lsn; + xl_origin.origin_timestamp = replorigin_session_origin_timestamp; } if (xl_xinfo.xinfo != 0) @@ -5319,8 +5338,7 @@ xact_redo_commit(xl_xact_parsed_commit *parsed, /* Set the transaction commit timestamp and metadata */ TransactionTreeSetCommitTsData(xid, parsed->nsubxacts, parsed->subxacts, - commit_time, origin_id, - false); + commit_time, origin_id, false); if (standbyState == STANDBY_DISABLED) { diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 0def47d6ed5bb..08d16823ed105 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -808,7 +808,7 @@ 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, int elevel); + bool use_lock); static int XLogFileRead(XLogSegNo segno, int emode, TimeLineID tli, int source, bool notexistOk); static int XLogFileReadAnyTLI(XLogSegNo segno, int emode, int source); @@ -1097,7 +1097,7 @@ XLogInsertRecord(XLogRecData *rdata, XLogRecPtr fpw_lsn) if (!debug_reader) { - appendStringInfo(&buf, "error decoding record: out of memory"); + appendStringInfoString(&buf, "error decoding record: out of memory"); } else if (!DecodeXLogRecord(debug_reader, (XLogRecord *) recordBuf.data, &errormsg)) @@ -1408,9 +1408,7 @@ WALInsertLockAcquire(void) * The insertingAt value is initially set to 0, as we don't know our * insert location yet. */ - immed = LWLockAcquireWithVar(&WALInsertLocks[MyLockNo].l.lock, - &WALInsertLocks[MyLockNo].l.insertingAt, - 0); + immed = LWLockAcquire(&WALInsertLocks[MyLockNo].l.lock, LW_EXCLUSIVE); if (!immed) { /* @@ -1435,26 +1433,28 @@ WALInsertLockAcquireExclusive(void) int i; /* - * When holding all the locks, we only update the last lock's insertingAt - * indicator. The others are set to 0xFFFFFFFFFFFFFFFF, which is higher - * than any real XLogRecPtr value, to make sure that no-one blocks waiting - * on those. + * When holding all the locks, all but the last lock's insertingAt + * indicator is set to 0xFFFFFFFFFFFFFFFF, which is higher than any real + * XLogRecPtr value, to make sure that no-one blocks waiting on those. */ for (i = 0; i < NUM_XLOGINSERT_LOCKS - 1; i++) { - LWLockAcquireWithVar(&WALInsertLocks[i].l.lock, - &WALInsertLocks[i].l.insertingAt, - PG_UINT64_MAX); + LWLockAcquire(&WALInsertLocks[i].l.lock, LW_EXCLUSIVE); + LWLockUpdateVar(&WALInsertLocks[i].l.lock, + &WALInsertLocks[i].l.insertingAt, + PG_UINT64_MAX); } - LWLockAcquireWithVar(&WALInsertLocks[i].l.lock, - &WALInsertLocks[i].l.insertingAt, - 0); + /* Variable value reset to 0 at release */ + LWLockAcquire(&WALInsertLocks[i].l.lock, LW_EXCLUSIVE); holdingAllLocks = true; } /* * Release our insertion lock (or locks, if we're holding them all). + * + * NB: Reset all variables to 0, so they cause LWLockWaitForVar to block the + * next time the lock is acquired. */ static void WALInsertLockRelease(void) @@ -1464,13 +1464,17 @@ WALInsertLockRelease(void) int i; for (i = 0; i < NUM_XLOGINSERT_LOCKS; i++) - LWLockRelease(&WALInsertLocks[i].l.lock); + LWLockReleaseClearVar(&WALInsertLocks[i].l.lock, + &WALInsertLocks[i].l.insertingAt, + 0); holdingAllLocks = false; } else { - LWLockRelease(&WALInsertLocks[MyLockNo].l.lock); + LWLockReleaseClearVar(&WALInsertLocks[MyLockNo].l.lock, + &WALInsertLocks[MyLockNo].l.insertingAt, + 0); } } @@ -1660,11 +1664,32 @@ GetXLogBuffer(XLogRecPtr ptr) endptr = XLogCtl->xlblocks[idx]; if (expectedEndPtr != endptr) { + XLogRecPtr initializedUpto; + /* - * Let others know that we're finished inserting the record up to the - * page boundary. + * Before calling AdvanceXLInsertBuffer(), which can block, let others + * know how far we're finished with inserting the record. + * + * NB: If 'ptr' points to just after the page header, advertise a + * position at the beginning of the page rather than 'ptr' itself. If + * there are no other insertions running, someone might try to flush + * up to our advertised location. If we advertised a position after + * the page header, someone might try to flush the page header, even + * though page might actually not be initialized yet. As the first + * inserter on the page, we are effectively responsible for making + * sure that it's initialized, before we let insertingAt to move past + * the page header. */ - WALInsertLockUpdateInsertingAt(expectedEndPtr - XLOG_BLCKSZ); + if (ptr % XLOG_BLCKSZ == SizeOfXLogShortPHD && + ptr % XLOG_SEG_SIZE > XLOG_BLCKSZ) + initializedUpto = ptr - SizeOfXLogShortPHD; + else if (ptr % XLOG_BLCKSZ == SizeOfXLogLongPHD && + ptr % XLOG_SEG_SIZE < XLOG_BLCKSZ) + initializedUpto = ptr - SizeOfXLogLongPHD; + else + initializedUpto = ptr; + + WALInsertLockUpdateInsertingAt(initializedUpto); AdvanceXLInsertBuffer(ptr, false); endptr = XLogCtl->xlblocks[idx]; @@ -3013,7 +3038,7 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock) max_segno = logsegno + CheckPointSegments; if (!InstallXLogFileSegment(&installed_segno, tmppath, *use_existent, max_segno, - use_lock, LOG)) + use_lock)) { /* * No need for any more future segments, or InstallXLogFileSegment() @@ -3040,20 +3065,25 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock) } /* - * Copy a WAL segment file in pg_xlog directory. + * Create a new XLOG file segment by copying a pre-existing one. + * + * destsegno: identify segment to be created. * - * srcfname source filename - * upto how much of the source file to copy? (the rest is filled with - * zeros) - * segno identify segment to install. + * srcTLI, srclog, srcseg: identify segment to be copied (could be from + * a different timeline) * - * The file is first copied with a temporary filename, and then installed as - * a newly-created segment. + * upto: how much of the source file to copy (the rest is filled with + * zeros) + * + * Currently this is only used during recovery, and so there are no locking + * considerations. But we should be just as tense as XLogFileInit to avoid + * emplacing a bogus file. */ static void -XLogFileCopy(char *srcfname, int upto, XLogSegNo segno) +XLogFileCopy(XLogSegNo destsegno, TimeLineID srcTLI, XLogSegNo srcsegno, + int upto) { - char srcpath[MAXPGPATH]; + char path[MAXPGPATH]; char tmppath[MAXPGPATH]; char buffer[XLOG_BLCKSZ]; int srcfd; @@ -3063,12 +3093,12 @@ XLogFileCopy(char *srcfname, int upto, XLogSegNo segno) /* * Open the source file */ - snprintf(srcpath, MAXPGPATH, XLOGDIR "/%s", srcfname); - srcfd = OpenTransientFile(srcpath, O_RDONLY | PG_BINARY, 0); + XLogFilePath(path, srcTLI, srcsegno); + srcfd = OpenTransientFile(path, O_RDONLY | PG_BINARY, 0); if (srcfd < 0) ereport(ERROR, (errcode_for_file_access(), - errmsg("could not open file \"%s\": %m", srcpath))); + errmsg("could not open file \"%s\": %m", path))); /* * Copy into a temp file name. @@ -3112,11 +3142,11 @@ XLogFileCopy(char *srcfname, int upto, XLogSegNo segno) ereport(ERROR, (errcode_for_file_access(), errmsg("could not read file \"%s\": %m", - srcpath))); + path))); else ereport(ERROR, (errmsg("not enough data in file \"%s\"", - srcpath))); + path))); } } errno = 0; @@ -3149,9 +3179,11 @@ XLogFileCopy(char *srcfname, int upto, XLogSegNo segno) CloseTransientFile(srcfd); - /* install the new file */ - (void) InstallXLogFileSegment(&segno, tmppath, false, - 0, false, ERROR); + /* + * Now move the segment into place with its final name. + */ + if (!InstallXLogFileSegment(&destsegno, tmppath, false, 0, false)) + elog(ERROR, "InstallXLogFileSegment should not have failed"); } /* @@ -3178,8 +3210,6 @@ XLogFileCopy(char *srcfname, int upto, XLogSegNo segno) * place. This should be TRUE except during bootstrap log creation. The * caller must *not* hold the lock at call. * - * elevel: log level used by this routine. - * * 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. @@ -3187,7 +3217,7 @@ XLogFileCopy(char *srcfname, int upto, XLogSegNo segno) static bool InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, bool find_free, XLogSegNo max_segno, - bool use_lock, int elevel) + bool use_lock) { char path[MAXPGPATH]; struct stat stat_buf; @@ -3232,7 +3262,7 @@ InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, { if (use_lock) LWLockRelease(ControlFileLock); - ereport(elevel, + ereport(LOG, (errcode_for_file_access(), errmsg("could not link file \"%s\" to \"%s\" (initialization of log file): %m", tmppath, path))); @@ -3244,7 +3274,7 @@ InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, { if (use_lock) LWLockRelease(ControlFileLock); - ereport(elevel, + ereport(LOG, (errcode_for_file_access(), errmsg("could not rename file \"%s\" to \"%s\" (initialization of log file): %m", tmppath, path))); @@ -3733,7 +3763,7 @@ RemoveXlogFile(const char *segname, XLogRecPtr PriorRedoPtr, XLogRecPtr endptr) if (endlogSegNo <= recycleSegNo && lstat(path, &statbuf) == 0 && S_ISREG(statbuf.st_mode) && InstallXLogFileSegment(&endlogSegNo, path, - true, recycleSegNo, true, LOG)) + true, recycleSegNo, true)) { ereport(DEBUG2, (errmsg("recycled transaction log file \"%s\"", @@ -4948,7 +4978,7 @@ readRecoveryCommandFile(void) (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid value for recovery parameter \"%s\"", "recovery_target_action"), - errhint("The allowed values are \"pause\", \"promote\" and \"shutdown\"."))); + errhint("The allowed values are \"pause\", \"promote\", and \"shutdown\"."))); ereport(DEBUG2, (errmsg_internal("recovery_target_action = '%s'", @@ -5212,8 +5242,6 @@ exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog) */ if (endLogSegNo == startLogSegNo) { - XLogFileName(xlogfname, endTLI, endLogSegNo); - /* * Make a copy of the file on the new timeline. * @@ -5221,7 +5249,8 @@ exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog) * considerations. But we should be just as tense as XLogFileInit to * avoid emplacing a bogus file. */ - XLogFileCopy(xlogfname, endOfLog % XLOG_SEG_SIZE, endLogSegNo); + XLogFileCopy(endLogSegNo, endTLI, endLogSegNo, + endOfLog % XLOG_SEG_SIZE); } else { @@ -5797,22 +5826,13 @@ do { \ minValue))); \ } while(0) -#define RecoveryRequiresBoolParameter(param_name, currValue, masterValue) \ -do { \ - bool _currValue = (currValue); \ - bool _masterValue = (masterValue); \ - if (_currValue != _masterValue) \ - ereport(ERROR, \ - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), \ - errmsg("hot standby is not possible because it requires \"%s\" to be same on master and standby (master has \"%s\", standby has \"%s\")", \ - param_name, \ - _masterValue ? "true" : "false", \ - _currValue ? "true" : "false"))); \ -} while(0) - /* * Check to see if required parameters are set high enough on this server * for various aspects of recovery operation. + * + * Note that all the parameters which this function tests need to be + * listed in Administrator's Overview section in high-availability.sgml. + * If you change them, don't forget to update the list. */ static void CheckRequiredParameterValues(void) @@ -5852,9 +5872,6 @@ CheckRequiredParameterValues(void) RecoveryRequiresIntParameter("max_locks_per_transaction", max_locks_per_xact, ControlFile->max_locks_per_xact); - RecoveryRequiresBoolParameter("track_commit_timestamp", - track_commit_timestamp, - ControlFile->track_commit_timestamp); } } @@ -5883,6 +5900,7 @@ StartupXLOG(void) XLogReaderState *xlogreader; XLogPageReadPrivate private; bool fast_promoted = false; + struct stat st; /* * Read control file and check XLOG status looks valid. @@ -6109,6 +6127,33 @@ StartupXLOG(void) } else { + /* + * If tablespace_map file is present without backup_label file, there + * is no use of such file. There is no harm in retaining it, but it + * is better to get rid of the map file so that we don't have any + * redundant file in data directory and it will avoid any sort of + * confusion. It seems prudent though to just rename the file out + * of the way rather than delete it completely, also we ignore any + * error that occurs in rename operation as even if map file is + * present without backup_label file, it is harmless. + */ + if (stat(TABLESPACE_MAP, &st) == 0) + { + unlink(TABLESPACE_MAP_OLD); + if (rename(TABLESPACE_MAP, TABLESPACE_MAP_OLD) == 0) + ereport(LOG, + (errmsg("ignoring \"%s\" file because no \"%s\" file exists", + TABLESPACE_MAP, BACKUP_LABEL_FILE), + errdetail("File \"%s\" was renamed to \"%s\".", + TABLESPACE_MAP, TABLESPACE_MAP_OLD))); + else + ereport(LOG, + (errmsg("ignoring \"%s\" file because no \"%s\" file exists", + TABLESPACE_MAP, BACKUP_LABEL_FILE), + errdetail("File \"%s\" could not be renamed to \"%s\": %m.", + TABLESPACE_MAP, TABLESPACE_MAP_OLD))); + } + /* * It's possible that archive recovery was requested, but we don't * know how far we need to replay the WAL before we reach consistency. @@ -6269,7 +6314,6 @@ StartupXLOG(void) SetMultiXactIdLimit(checkPoint.oldestMulti, checkPoint.oldestMultiDB); SetCommitTsLimit(checkPoint.oldestCommitTs, checkPoint.newestCommitTs); - MultiXactSetSafeTruncate(checkPoint.oldestMulti); XLogCtl->ckptXidEpoch = checkPoint.nextXidEpoch; XLogCtl->ckptXid = checkPoint.nextXid; @@ -6286,10 +6330,8 @@ StartupXLOG(void) StartupReorderBuffer(); /* - * Startup MultiXact. We need to do this early for two reasons: one is - * that we might try to access multixacts when we do tuple freezing, and - * the other is we need its state initialized because we attempt - * truncation during restartpoints. + * Startup MultiXact. We need to do this early to be able to replay + * truncations. */ StartupMultiXact(); @@ -6525,7 +6567,7 @@ StartupXLOG(void) * maintained during recovery and need not be started yet. */ StartupCLOG(); - StartupCommitTs(); + StartupCommitTs(ControlFile->track_commit_timestamp); StartupSUBTRANS(oldestActiveXID); /* @@ -7294,7 +7336,7 @@ StartupXLOG(void) if (standbyState == STANDBY_DISABLED) { StartupCLOG(); - StartupCommitTs(); + StartupCommitTs(false); StartupSUBTRANS(oldestActiveXID); } @@ -8446,12 +8488,6 @@ CreateCheckPoint(int flags) */ END_CRIT_SECTION(); - /* - * Now that the checkpoint is safely on disk, we can update the point to - * which multixact can be truncated. - */ - MultiXactSetSafeTruncate(checkPoint.oldestMulti); - /* * Let smgr do post-checkpoint cleanup (eg, deleting old files). */ @@ -8491,11 +8527,6 @@ CreateCheckPoint(int flags) if (!RecoveryInProgress()) TruncateSUBTRANS(GetOldestXmin(NULL, false)); - /* - * Truncate pg_multixact too. - */ - TruncateMultiXact(); - /* Real work is done, but log and update stats before releasing lock. */ LogCheckpointEnd(false); @@ -8825,21 +8856,6 @@ CreateRestartPoint(int flags) ThisTimeLineID = 0; } - /* - * Due to a historical accident multixact truncations are not WAL-logged, - * but just performed everytime the mxact horizon is increased. So, unless - * we explicitly execute truncations on a standby it will never clean out - * /pg_multixact which obviously is bad, both because it uses space and - * because we can wrap around into pre-existing data... - * - * We can only do the truncation here, after the UpdateControlFile() - * above, because we've now safely established a restart point. That - * guarantees we will not need to access those multis. - * - * It's probably worth improving this. - */ - TruncateMultiXact(); - /* * Truncate pg_subtrans if possible. We can throw away all data before * the oldest XMIN of any running transaction. No future transaction will @@ -9200,9 +9216,10 @@ xlog_redo(XLogReaderState *record) LWLockRelease(OidGenLock); MultiXactSetNextMXact(checkPoint.nextMulti, checkPoint.nextMultiOffset); + + MultiXactAdvanceOldest(checkPoint.oldestMulti, + checkPoint.oldestMultiDB); SetTransactionIdLimit(checkPoint.oldestXid, checkPoint.oldestXidDB); - SetMultiXactIdLimit(checkPoint.oldestMulti, checkPoint.oldestMultiDB); - MultiXactSetSafeTruncate(checkPoint.oldestMulti); /* * If we see a shutdown checkpoint while waiting for an end-of-backup @@ -9292,14 +9309,17 @@ xlog_redo(XLogReaderState *record) LWLockRelease(OidGenLock); MultiXactAdvanceNextMXact(checkPoint.nextMulti, checkPoint.nextMultiOffset); + + /* + * NB: This may perform multixact truncation when replaying WAL + * generated by an older primary. + */ + MultiXactAdvanceOldest(checkPoint.oldestMulti, + checkPoint.oldestMultiDB); if (TransactionIdPrecedes(ShmemVariableCache->oldestXid, checkPoint.oldestXid)) SetTransactionIdLimit(checkPoint.oldestXid, checkPoint.oldestXidDB); - MultiXactAdvanceOldest(checkPoint.oldestMulti, - checkPoint.oldestMultiDB); - MultiXactSetSafeTruncate(checkPoint.oldestMulti); - /* ControlFile->checkPointCopy always tracks the latest ckpt XID */ ControlFile->checkPointCopy.nextXidEpoch = checkPoint.nextXidEpoch; ControlFile->checkPointCopy.nextXid = checkPoint.nextXid; @@ -9436,25 +9456,9 @@ xlog_redo(XLogReaderState *record) ControlFile->minRecoveryPointTLI = ThisTimeLineID; } - /* - * Update the commit timestamp tracking. If there was a change it - * needs to be activated or deactivated accordingly. - */ - if (track_commit_timestamp != xlrec.track_commit_timestamp) - { - track_commit_timestamp = xlrec.track_commit_timestamp; - ControlFile->track_commit_timestamp = track_commit_timestamp; - if (track_commit_timestamp) - ActivateCommitTs(); - else - - /* - * We can't create a new WAL record here, but that's OK as - * master did the WAL logging already and we will replay the - * record from master in case we crash. - */ - DeactivateCommitTs(false); - } + CommitTsParameterChange(xlrec.track_commit_timestamp, + ControlFile->track_commit_timestamp); + ControlFile->track_commit_timestamp = xlrec.track_commit_timestamp; UpdateControlFile(); LWLockRelease(ControlFileLock); @@ -9524,7 +9528,7 @@ xlog_outrec(StringInfo buf, XLogReaderState *record) rnode.spcNode, rnode.dbNode, rnode.relNode, blk); if (XLogRecHasBlockImage(record, block_id)) - appendStringInfo(buf, " FPW"); + appendStringInfoString(buf, " FPW"); } } #endif /* WAL_DEBUG */ @@ -10850,32 +10854,32 @@ CancelBackup(void) { struct stat stat_buf; - /* if the file is not there, return */ + /* if the backup_label file is not there, return */ if (stat(BACKUP_LABEL_FILE, &stat_buf) < 0) return; /* remove leftover file from previously canceled backup if it exists */ unlink(BACKUP_LABEL_OLD); - if (rename(BACKUP_LABEL_FILE, BACKUP_LABEL_OLD) == 0) - { - ereport(LOG, - (errmsg("online backup mode canceled"), - errdetail("\"%s\" was renamed to \"%s\".", - BACKUP_LABEL_FILE, BACKUP_LABEL_OLD))); - } - else + if (rename(BACKUP_LABEL_FILE, BACKUP_LABEL_OLD) != 0) { ereport(WARNING, (errcode_for_file_access(), errmsg("online backup mode was not canceled"), - errdetail("Could not rename \"%s\" to \"%s\": %m.", + errdetail("File \"%s\" could not be renamed to \"%s\": %m.", BACKUP_LABEL_FILE, BACKUP_LABEL_OLD))); + return; } /* if the tablespace_map file is not there, return */ if (stat(TABLESPACE_MAP, &stat_buf) < 0) + { + ereport(LOG, + (errmsg("online backup mode canceled"), + errdetail("File \"%s\" was renamed to \"%s\".", + BACKUP_LABEL_FILE, BACKUP_LABEL_OLD))); return; + } /* remove leftover file from previously canceled backup if it exists */ unlink(TABLESPACE_MAP_OLD); @@ -10884,15 +10888,19 @@ CancelBackup(void) { ereport(LOG, (errmsg("online backup mode canceled"), - errdetail("\"%s\" was renamed to \"%s\".", - TABLESPACE_MAP, TABLESPACE_MAP_OLD))); + errdetail("Files \"%s\" and \"%s\" were renamed to " + "\"%s\" and \"%s\", respectively.", + BACKUP_LABEL_FILE, TABLESPACE_MAP, + BACKUP_LABEL_OLD, TABLESPACE_MAP_OLD))); } else { ereport(WARNING, (errcode_for_file_access(), - errmsg("online backup mode was not canceled"), - errdetail("Could not rename \"%s\" to \"%s\": %m.", + errmsg("online backup mode canceled"), + errdetail("File \"%s\" was renamed to \"%s\", but " + "file \"%s\" could not be renamed to \"%s\": %m.", + BACKUP_LABEL_FILE, BACKUP_LABEL_OLD, TABLESPACE_MAP, TABLESPACE_MAP_OLD))); } } @@ -11526,6 +11534,16 @@ CheckForStandbyTrigger(void) return false; } +/* + * Remove the files signaling a standby promotion request. + */ +void +RemovePromoteSignalFiles(void) +{ + unlink(PROMOTE_SIGNAL_FILE); + unlink(FALLBACK_PROMOTE_SIGNAL_FILE); +} + /* * Check to see if a promote request has arrived. Should be * called by postmaster after receiving SIGUSR1. diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/transam/xloginsert.c index 0b89c0a7a2c3f..925255f52d408 100644 --- a/src/backend/access/transam/xloginsert.c +++ b/src/backend/access/transam/xloginsert.c @@ -73,7 +73,7 @@ static XLogRecData *mainrdata_head; static XLogRecData *mainrdata_last = (XLogRecData *) &mainrdata_head; static uint32 mainrdata_len; /* total # of bytes in chain */ -/* Should te in-progress insertion log the origin */ +/* Should the in-progress insertion log the origin? */ static bool include_origin = false; /* @@ -701,11 +701,11 @@ XLogRecordAssemble(RmgrId rmid, uint8 info, } /* followed by the record's origin, if any */ - if (include_origin && replorigin_sesssion_origin != InvalidRepOriginId) + if (include_origin && replorigin_session_origin != InvalidRepOriginId) { *(scratch++) = XLR_BLOCK_ID_ORIGIN; - memcpy(scratch, &replorigin_sesssion_origin, sizeof(replorigin_sesssion_origin)); - scratch += sizeof(replorigin_sesssion_origin); + memcpy(scratch, &replorigin_session_origin, sizeof(replorigin_session_origin)); + scratch += sizeof(replorigin_session_origin); } /* followed by main data, if any */ diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index a9e926c5a283d..37cf9dee80ff4 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -124,13 +124,10 @@ XLogReaderFree(XLogReaderState *state) { int block_id; - for (block_id = 0; block_id <= state->max_block_id; block_id++) + for (block_id = 0; block_id <= XLR_MAX_BLOCK_ID; block_id++) { - if (state->blocks[block_id].in_use) - { - if (state->blocks[block_id].data) - pfree(state->blocks[block_id].data); - } + if (state->blocks[block_id].data) + pfree(state->blocks[block_id].data); } if (state->main_data) pfree(state->main_data); @@ -751,20 +748,20 @@ ValidXLogPageHeader(XLogReaderState *state, XLogRecPtr recptr, snprintf(sysident_str, sizeof(sysident_str), UINT64_FORMAT, state->system_identifier); report_invalid_record(state, - "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s.", + "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s", fhdrident_str, sysident_str); return false; } else if (longhdr->xlp_seg_size != XLogSegSize) { report_invalid_record(state, - "WAL file is from different database system: Incorrect XLOG_SEG_SIZE in page header."); + "WAL file is from different database system: incorrect XLOG_SEG_SIZE in page header"); return false; } else if (longhdr->xlp_xlog_blcksz != XLOG_BLCKSZ) { report_invalid_record(state, - "WAL file is from different database system: Incorrect XLOG_BLCKSZ in page header."); + "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header"); return false; } } diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c index fa98b8294e827..a5003c3b92277 100644 --- a/src/backend/access/transam/xlogutils.c +++ b/src/backend/access/transam/xlogutils.c @@ -328,6 +328,8 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, ForkNumber forknum; BlockNumber blkno; Page page; + bool zeromode; + bool willinit; if (!XLogRecGetBlockTag(record, block_id, &rnode, &forknum, &blkno)) { @@ -335,6 +337,17 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, elog(PANIC, "failed to locate backup block with ID %d", block_id); } + /* + * Make sure that if the block is marked with WILL_INIT, the caller is + * going to initialize it. And vice versa. + */ + zeromode = (mode == RBM_ZERO_AND_LOCK || mode == RBM_ZERO_AND_CLEANUP_LOCK); + willinit = (record->blocks[block_id].flags & BKPBLOCK_WILL_INIT) != 0; + if (willinit && !zeromode) + elog(PANIC, "block with WILL_INIT flag in WAL record must be zeroed by redo routine"); + if (!willinit && zeromode) + elog(PANIC, "block to be initialized in redo routine must be marked with WILL_INIT flag in the WAL record"); + /* If it's a full-page image, restore it. */ if (XLogRecHasBlockImage(record, block_id)) { @@ -359,12 +372,6 @@ XLogReadBufferForRedoExtended(XLogReaderState *record, } else { - if ((record->blocks[block_id].flags & BKPBLOCK_WILL_INIT) != 0 && - mode != RBM_ZERO_AND_LOCK && mode != RBM_ZERO_AND_CLEANUP_LOCK) - { - elog(PANIC, "block with WILL_INIT flag in WAL record must be zeroed by redo routine"); - } - *buf = XLogReadBufferExtended(rnode, forknum, blkno, mode); if (BufferIsValid(*buf)) { diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile index 3d1139b5ba0bf..25130ecf12480 100644 --- a/src/backend/catalog/Makefile +++ b/src/backend/catalog/Makefile @@ -40,8 +40,9 @@ POSTGRES_BKI_SRCS = $(addprefix $(top_srcdir)/src/include/catalog/,\ pg_ts_parser.h pg_ts_template.h pg_extension.h \ pg_foreign_data_wrapper.h pg_foreign_server.h pg_user_mapping.h \ pg_foreign_table.h pg_policy.h pg_replication_origin.h \ - pg_tablesample_method.h pg_default_acl.h pg_seclabel.h pg_shseclabel.h \ - pg_collation.h pg_range.h pg_transform.h toasting.h indexing.h \ + pg_default_acl.h pg_seclabel.h pg_shseclabel.h \ + pg_collation.h pg_range.h pg_transform.h \ + toasting.h indexing.h \ ) # location of Catalog.pm diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index c1212e9075a21..efca34c66d78f 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -126,7 +126,7 @@ typedef struct * This constant table maps ObjectClasses to the corresponding catalog OIDs. * See also getObjectClass(). */ -static const Oid object_classes[MAX_OCLASS] = { +static const Oid object_classes[] = { RelationRelationId, /* OCLASS_CLASS */ ProcedureRelationId, /* OCLASS_PROC */ TypeRelationId, /* OCLASS_TYPE */ @@ -158,7 +158,8 @@ static const Oid object_classes[MAX_OCLASS] = { DefaultAclRelationId, /* OCLASS_DEFACL */ ExtensionRelationId, /* OCLASS_EXTENSION */ EventTriggerRelationId, /* OCLASS_EVENT_TRIGGER */ - PolicyRelationId /* OCLASS_POLICY */ + PolicyRelationId, /* OCLASS_POLICY */ + TransformRelationId /* OCLASS_TRANSFORM */ }; @@ -1618,7 +1619,7 @@ find_expr_references_walker(Node *node, case REGROLEOID: ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("constant of the type \'regrole\' cannot be used here"))); + errmsg("constant of the type \"regrole\" cannot be used here"))); break; } } @@ -1910,6 +1911,14 @@ find_expr_references_walker(Node *node, context->addrs); } } + else if (IsA(node, TableSampleClause)) + { + TableSampleClause *tsc = (TableSampleClause *) node; + + add_object_address(OCLASS_PROC, tsc->tsmhandler, 0, + context->addrs); + /* fall through to examine arguments */ + } return expression_tree_walker(node, find_expr_references_walker, (void *) context); @@ -2037,6 +2046,12 @@ add_object_address(ObjectClass oclass, Oid objectId, int32 subId, { ObjectAddress *item; + /* + * Make sure object_classes is kept up to date with the ObjectClass enum. + */ + StaticAssertStmt(lengthof(object_classes) == LAST_OCLASS + 1, + "object_classes[] must cover all ObjectClasses"); + /* enlarge array if needed */ if (addrs->numrefs >= addrs->maxrefs) { diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index d04e94d74f3c1..7d7d062c068f5 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -802,6 +802,7 @@ InsertPgClassTuple(Relation pg_class_desc, values[Anum_pg_class_relhasrules - 1] = BoolGetDatum(rd_rel->relhasrules); values[Anum_pg_class_relhastriggers - 1] = BoolGetDatum(rd_rel->relhastriggers); values[Anum_pg_class_relrowsecurity - 1] = BoolGetDatum(rd_rel->relrowsecurity); + values[Anum_pg_class_relforcerowsecurity - 1] = BoolGetDatum(rd_rel->relforcerowsecurity); values[Anum_pg_class_relhassubclass - 1] = BoolGetDatum(rd_rel->relhassubclass); values[Anum_pg_class_relispopulated - 1] = BoolGetDatum(rd_rel->relispopulated); values[Anum_pg_class_relreplident - 1] = CharGetDatum(rd_rel->relreplident); diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 4246554d19d21..e59b163173c61 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -2161,6 +2161,7 @@ IndexBuildHeapScan(Relation heapRelation, { return IndexBuildHeapRangeScan(heapRelation, indexRelation, indexInfo, allow_sync, + false, 0, InvalidBlockNumber, callback, callback_state); } @@ -2168,13 +2169,19 @@ IndexBuildHeapScan(Relation heapRelation, /* * As above, except that instead of scanning the complete heap, only the given * number of blocks are scanned. Scan to end-of-rel can be signalled by - * passing InvalidBlockNumber as numblocks. + * passing InvalidBlockNumber as numblocks. Note that restricting the range + * to scan cannot be done when requesting syncscan. + * + * When "anyvisible" mode is requested, all tuples visible to any transaction + * are considered, including those inserted or deleted by transactions that are + * still in progress. */ double IndexBuildHeapRangeScan(Relation heapRelation, Relation indexRelation, IndexInfo *indexInfo, bool allow_sync, + bool anyvisible, BlockNumber start_blockno, BlockNumber numblocks, IndexBuildCallback callback, @@ -2208,6 +2215,12 @@ IndexBuildHeapRangeScan(Relation heapRelation, checking_uniqueness = (indexInfo->ii_Unique || indexInfo->ii_ExclusionOps != NULL); + /* + * "Any visible" mode is not compatible with uniqueness checks; make sure + * only one of those is requested. + */ + Assert(!(anyvisible && checking_uniqueness)); + /* * Need an EState for evaluation of index expressions and partial-index * predicates. Also a slot to hold the current tuple. @@ -2235,6 +2248,9 @@ IndexBuildHeapRangeScan(Relation heapRelation, { snapshot = RegisterSnapshot(GetTransactionSnapshot()); OldestXmin = InvalidTransactionId; /* not used */ + + /* "any visible" mode is not compatible with this */ + Assert(!anyvisible); } else { @@ -2251,7 +2267,14 @@ IndexBuildHeapRangeScan(Relation heapRelation, allow_sync); /* syncscan OK? */ /* set our scan endpoints */ - heap_setscanlimits(scan, start_blockno, numblocks); + if (!allow_sync) + heap_setscanlimits(scan, start_blockno, numblocks); + else + { + /* syncscan can only be requested on whole relation */ + Assert(start_blockno == 0); + Assert(numblocks == InvalidBlockNumber); + } reltuples = 0; @@ -2355,6 +2378,17 @@ IndexBuildHeapRangeScan(Relation heapRelation, break; case HEAPTUPLE_INSERT_IN_PROGRESS: + /* + * In "anyvisible" mode, this tuple is visible and we don't + * need any further checks. + */ + if (anyvisible) + { + indexIt = true; + tupleIsAlive = true; + break; + } + /* * Since caller should hold ShareLock or better, normally * the only way to see this is if it was inserted earlier @@ -2401,8 +2435,16 @@ IndexBuildHeapRangeScan(Relation heapRelation, /* * As with INSERT_IN_PROGRESS case, this is unexpected - * unless it's our own deletion or a system catalog. + * unless it's our own deletion or a system catalog; + * but in anyvisible mode, this tuple is visible. */ + if (anyvisible) + { + indexIt = true; + tupleIsAlive = false; + break; + } + xwait = HeapTupleHeaderGetUpdateXid(heapTuple->t_data); if (!TransactionIdIsCurrentTransactionId(xwait)) { diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index 83390f6bab007..fc56f1ec3cfde 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -1740,7 +1740,7 @@ get_object_address_defacl(List *objname, List *objargs, bool missing_ok) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("unrecognized default ACL object type %c", objtype), - errhint("Valid object types are 'r', 'S', 'f', and 'T'."))); + errhint("Valid object types are \"r\", \"S\", \"f\", and \"T\"."))); } /* @@ -1831,7 +1831,7 @@ textarray_to_strvaluelist(ArrayType *arr) Datum pg_get_object_address(PG_FUNCTION_ARGS) { - char *ttype = TextDatumGetCString(PG_GETARG_TEXT_P(0)); + char *ttype = TextDatumGetCString(PG_GETARG_DATUM(0)); ArrayType *namearr = PG_GETARG_ARRAYTYPE_P(1); ArrayType *argsarr = PG_GETARG_ARRAYTYPE_P(2); int itype; diff --git a/src/backend/catalog/pg_shdepend.c b/src/backend/catalog/pg_shdepend.c index 34fe4e2474585..43076c9c287d2 100644 --- a/src/backend/catalog/pg_shdepend.c +++ b/src/backend/catalog/pg_shdepend.c @@ -1083,6 +1083,8 @@ storeObjectDescription(StringInfo descs, appendStringInfo(descs, _("owner of %s"), objdesc); else if (deptype == SHARED_DEPENDENCY_ACL) appendStringInfo(descs, _("privileges for %s"), objdesc); + else if (deptype == SHARED_DEPENDENCY_POLICY) + appendStringInfo(descs, _("target of %s"), objdesc); else elog(ERROR, "unrecognized dependency type: %d", (int) deptype); diff --git a/src/backend/catalog/sql_features.txt b/src/backend/catalog/sql_features.txt index 3da6010b9fdd6..fd9e78d92435f 100644 --- a/src/backend/catalog/sql_features.txt +++ b/src/backend/catalog/sql_features.txt @@ -229,7 +229,7 @@ F311 Schema definition statement 02 CREATE TABLE for persistent base tables YES F311 Schema definition statement 03 CREATE VIEW YES F311 Schema definition statement 04 CREATE VIEW: WITH CHECK OPTION YES F311 Schema definition statement 05 GRANT statement YES -F312 MERGE statement NO Consider INSERT ... ON CONFLICT DO UPDATE +F312 MERGE statement NO consider INSERT ... ON CONFLICT DO UPDATE F313 Enhanced MERGE statement NO F314 MERGE statement with DELETE branch NO F321 User authorization YES @@ -383,7 +383,7 @@ S274 Multisets of reference types NO S275 Advanced multiset support NO S281 Nested collection types NO S291 Unique constraint on entire row NO -S301 Enhanced UNNEST NO +S301 Enhanced UNNEST YES S401 Distinct types based on array types NO S402 Distinct types based on distinct types NO S403 ARRAY_MAX_CARDINALITY NO @@ -481,8 +481,7 @@ T501 Enhanced EXISTS predicate YES T502 Period predicates NO T511 Transaction counts NO T521 Named arguments in CALL statement NO -T522 Default values for IN parameters of SQL-invoked procedures NO -T541 Updatable table references NO +T522 Default values for IN parameters of SQL-invoked procedures NO supported except DEFAULT key word in invocation T551 Optional key words for default syntax YES T561 Holdable locators NO T571 Array-returning external SQL-invoked functions NO @@ -490,7 +489,7 @@ T572 Multiset-returning external SQL-invoked functions NO T581 Regular expression substring function YES T591 UNIQUE constraints of possibly null columns YES T601 Local cursor references NO -T611 Elementary OLAP operations NO most forms supported +T611 Elementary OLAP operations YES T612 Advanced OLAP operations NO some forms supported T613 Sampling YES T614 NTILE function YES diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index e82a53aee9364..c0bd6fa96b750 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -150,7 +150,7 @@ CREATE VIEW pg_indexes AS LEFT JOIN pg_tablespace T ON (T.oid = I.reltablespace) WHERE C.relkind IN ('r', 'm') AND I.relkind = 'i'; -CREATE VIEW pg_stats AS +CREATE VIEW pg_stats WITH (security_barrier) AS SELECT nspname AS schemaname, relname AS tablename, @@ -211,7 +211,9 @@ CREATE VIEW pg_stats AS FROM pg_statistic s JOIN pg_class c ON (c.oid = s.starelid) JOIN pg_attribute a ON (c.oid = attrelid AND attnum = s.staattnum) LEFT JOIN pg_namespace n ON (n.oid = c.relnamespace) - WHERE NOT attisdropped AND has_column_privilege(c.oid, a.attnum, 'select'); + WHERE NOT attisdropped + AND has_column_privilege(c.oid, a.attnum, 'select') + AND (c.relrowsecurity = false OR NOT row_security_active(c.oid)); REVOKE ALL on pg_statistic FROM public; diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 861048f213fd5..ddb68abf6b4e3 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -1689,10 +1689,14 @@ typedef struct } CompareScalarsContext; -static void compute_minimal_stats(VacAttrStatsP stats, +static void compute_trivial_stats(VacAttrStatsP stats, AnalyzeAttrFetchFunc fetchfunc, int samplerows, double totalrows); +static void compute_distinct_stats(VacAttrStatsP stats, + AnalyzeAttrFetchFunc fetchfunc, + int samplerows, + double totalrows); static void compute_scalar_stats(VacAttrStatsP stats, AnalyzeAttrFetchFunc fetchfunc, int samplerows, @@ -1723,21 +1727,17 @@ std_typanalyze(VacAttrStats *stats) <opr, &eqopr, NULL, NULL); - /* If column has no "=" operator, we can't do much of anything */ - if (!OidIsValid(eqopr)) - return false; - /* Save the operator info for compute_stats routines */ mystats = (StdAnalyzeData *) palloc(sizeof(StdAnalyzeData)); mystats->eqopr = eqopr; - mystats->eqfunc = get_opcode(eqopr); + mystats->eqfunc = OidIsValid(eqopr) ? get_opcode(eqopr) : InvalidOid; mystats->ltopr = ltopr; stats->extra_data = mystats; /* * Determine which standard statistics algorithm to use */ - if (OidIsValid(ltopr)) + if (OidIsValid(eqopr) && OidIsValid(ltopr)) { /* Seems to be a scalar datatype */ stats->compute_stats = compute_scalar_stats; @@ -1762,10 +1762,17 @@ std_typanalyze(VacAttrStats *stats) */ stats->minrows = 300 * attr->attstattarget; } + else if (OidIsValid(eqopr)) + { + /* We can still recognize distinct values */ + stats->compute_stats = compute_distinct_stats; + /* Might as well use the same minrows as above */ + stats->minrows = 300 * attr->attstattarget; + } else { - /* Can't do much but the minimal stuff */ - stats->compute_stats = compute_minimal_stats; + /* Can't do much but the trivial stuff */ + stats->compute_stats = compute_trivial_stats; /* Might as well use the same minrows as above */ stats->minrows = 300 * attr->attstattarget; } @@ -1773,8 +1780,91 @@ std_typanalyze(VacAttrStats *stats) return true; } + +/* + * compute_trivial_stats() -- compute very basic column statistics + * + * We use this when we cannot find a hash "=" operator for the datatype. + * + * We determine the fraction of non-null rows and the average datum width. + */ +static void +compute_trivial_stats(VacAttrStatsP stats, + AnalyzeAttrFetchFunc fetchfunc, + int samplerows, + double totalrows) +{ + int i; + int null_cnt = 0; + int nonnull_cnt = 0; + double total_width = 0; + bool is_varlena = (!stats->attrtype->typbyval && + stats->attrtype->typlen == -1); + bool is_varwidth = (!stats->attrtype->typbyval && + stats->attrtype->typlen < 0); + + for (i = 0; i < samplerows; i++) + { + Datum value; + bool isnull; + + vacuum_delay_point(); + + value = fetchfunc(stats, i, &isnull); + + /* Check for null/nonnull */ + if (isnull) + { + null_cnt++; + continue; + } + nonnull_cnt++; + + /* + * If it's a variable-width field, add up widths for average width + * calculation. Note that if the value is toasted, we use the toasted + * width. We don't bother with this calculation if it's a fixed-width + * type. + */ + if (is_varlena) + { + total_width += VARSIZE_ANY(DatumGetPointer(value)); + } + else if (is_varwidth) + { + /* must be cstring */ + total_width += strlen(DatumGetCString(value)) + 1; + } + } + + /* We can only compute average width if we found some non-null values. */ + if (nonnull_cnt > 0) + { + stats->stats_valid = true; + /* Do the simple null-frac and width stats */ + stats->stanullfrac = (double) null_cnt / (double) samplerows; + if (is_varwidth) + stats->stawidth = total_width / (double) nonnull_cnt; + else + stats->stawidth = stats->attrtype->typlen; + stats->stadistinct = 0.0; /* "unknown" */ + } + else if (null_cnt > 0) + { + /* We found only nulls; assume the column is entirely null */ + stats->stats_valid = true; + stats->stanullfrac = 1.0; + if (is_varwidth) + stats->stawidth = 0; /* "unknown" */ + else + stats->stawidth = stats->attrtype->typlen; + stats->stadistinct = 0.0; /* "unknown" */ + } +} + + /* - * compute_minimal_stats() -- compute minimal column statistics + * compute_distinct_stats() -- compute column statistics including ndistinct * * We use this when we can find only an "=" operator for the datatype. * @@ -1789,10 +1879,10 @@ std_typanalyze(VacAttrStats *stats) * depend mainly on the length of the list we are willing to keep. */ static void -compute_minimal_stats(VacAttrStatsP stats, - AnalyzeAttrFetchFunc fetchfunc, - int samplerows, - double totalrows) +compute_distinct_stats(VacAttrStatsP stats, + AnalyzeAttrFetchFunc fetchfunc, + int samplerows, + double totalrows) { int i; int null_cnt = 0; diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c index 2826b7e43c446..beef574076c25 100644 --- a/src/backend/commands/async.c +++ b/src/backend/commands/async.c @@ -202,12 +202,19 @@ typedef struct QueuePosition (x).page != (y).page ? (y) : \ (x).offset < (y).offset ? (x) : (y)) +/* choose logically larger QueuePosition */ +#define QUEUE_POS_MAX(x,y) \ + (asyncQueuePagePrecedes((x).page, (y).page) ? (y) : \ + (x).page != (y).page ? (x) : \ + (x).offset > (y).offset ? (x) : (y)) + /* * Struct describing a listening backend's status */ typedef struct QueueBackendStatus { int32 pid; /* either a PID or InvalidPid */ + Oid dboid; /* backend's database OID, or InvalidOid */ QueuePosition pos; /* backend has read queue up to here */ } QueueBackendStatus; @@ -224,6 +231,7 @@ typedef struct QueueBackendStatus * When holding the lock in EXCLUSIVE mode, backends can inspect the entries * of other backends and also change the head and tail pointers. * + * AsyncCtlLock is used as the control lock for the pg_notify SLRU buffers. * In order to avoid deadlocks, whenever we need both locks, we always first * get AsyncQueueLock and then AsyncCtlLock. * @@ -234,8 +242,8 @@ typedef struct QueueBackendStatus typedef struct AsyncQueueControl { QueuePosition head; /* head points to the next free location */ - QueuePosition tail; /* the global tail is equivalent to the tail - * of the "slowest" backend */ + QueuePosition tail; /* the global tail is equivalent to the pos of + * the "slowest" backend */ TimestampTz lastQueueFillWarn; /* time of last queue-full msg */ QueueBackendStatus backend[FLEXIBLE_ARRAY_MEMBER]; /* backend[0] is not used; used entries are from [1] to [MaxBackends] */ @@ -246,6 +254,7 @@ static AsyncQueueControl *asyncQueueControl; #define QUEUE_HEAD (asyncQueueControl->head) #define QUEUE_TAIL (asyncQueueControl->tail) #define QUEUE_BACKEND_PID(i) (asyncQueueControl->backend[i].pid) +#define QUEUE_BACKEND_DBOID(i) (asyncQueueControl->backend[i].dboid) #define QUEUE_BACKEND_POS(i) (asyncQueueControl->backend[i].pos) /* @@ -459,6 +468,7 @@ AsyncShmemInit(void) for (i = 0; i <= MaxBackends; i++) { QUEUE_BACKEND_PID(i) = InvalidPid; + QUEUE_BACKEND_DBOID(i) = InvalidOid; SET_QUEUE_POS(QUEUE_BACKEND_POS(i), 0, 0); } } @@ -905,6 +915,10 @@ AtCommit_Notify(void) static void Exec_ListenPreCommit(void) { + QueuePosition head; + QueuePosition max; + int i; + /* * Nothing to do if we are already listening to something, nor if we * already ran this routine in this transaction. @@ -932,10 +946,34 @@ Exec_ListenPreCommit(void) * over already-committed notifications. This ensures we cannot miss any * not-yet-committed notifications. We might get a few more but that * doesn't hurt. + * + * In some scenarios there might be a lot of committed notifications that + * have not yet been pruned away (because some backend is being lazy about + * reading them). To reduce our startup time, we can look at other + * backends and adopt the maximum "pos" pointer of any backend that's in + * our database; any notifications it's already advanced over are surely + * committed and need not be re-examined by us. (We must consider only + * backends connected to our DB, because others will not have bothered to + * check committed-ness of notifications in our DB.) But we only bother + * with that if there's more than a page worth of notifications + * outstanding, otherwise scanning all the other backends isn't worth it. + * + * We need exclusive lock here so we can look at other backends' entries. */ - LWLockAcquire(AsyncQueueLock, LW_SHARED); - QUEUE_BACKEND_POS(MyBackendId) = QUEUE_TAIL; + LWLockAcquire(AsyncQueueLock, LW_EXCLUSIVE); + head = QUEUE_HEAD; + max = QUEUE_TAIL; + if (QUEUE_POS_PAGE(max) != QUEUE_POS_PAGE(head)) + { + for (i = 1; i <= MaxBackends; i++) + { + if (QUEUE_BACKEND_DBOID(i) == MyDatabaseId) + max = QUEUE_POS_MAX(max, QUEUE_BACKEND_POS(i)); + } + } + QUEUE_BACKEND_POS(MyBackendId) = max; QUEUE_BACKEND_PID(MyBackendId) = MyProcPid; + QUEUE_BACKEND_DBOID(MyBackendId) = MyDatabaseId; LWLockRelease(AsyncQueueLock); /* Now we are listed in the global array, so remember we're listening */ @@ -951,7 +989,8 @@ Exec_ListenPreCommit(void) * * This will also advance the global tail pointer if possible. */ - asyncQueueReadAllNotifications(); + if (!QUEUE_POS_EQUAL(max, head)) + asyncQueueReadAllNotifications(); } /* @@ -1154,6 +1193,7 @@ asyncQueueUnregister(void) QUEUE_POS_EQUAL(QUEUE_BACKEND_POS(MyBackendId), QUEUE_TAIL); /* ... then mark it invalid */ QUEUE_BACKEND_PID(MyBackendId) = InvalidPid; + QUEUE_BACKEND_DBOID(MyBackendId) = InvalidOid; LWLockRelease(AsyncQueueLock); /* mark ourselves as no longer listed in the global array */ diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 8904676609d51..9f1f225aad77b 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -878,7 +878,7 @@ DoCopy(const CopyStmt *stmt, const char *queryString, uint64 *processed) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("COPY FROM not supported with row level security."), - errhint("Use direct INSERT statements instead."))); + errhint("Use INSERT statements instead."))); /* Build target list */ cr = makeNode(ColumnRef); @@ -896,8 +896,12 @@ DoCopy(const CopyStmt *stmt, const char *queryString, uint64 *processed) target->val = (Node *) cr; target->location = 1; - /* Build FROM clause */ - from = stmt->relation; + /* + * Build RangeVar for from clause, fully qualified based on the + * relation which we have opened and locked. + */ + from = makeRangeVar(get_namespace_name(RelationGetNamespace(rel)), + RelationGetRelationName(rel), -1); /* Build query */ select = makeNode(SelectStmt); @@ -906,8 +910,13 @@ DoCopy(const CopyStmt *stmt, const char *queryString, uint64 *processed) query = (Node *) select; - /* Close the handle to the relation as it is no longer needed. */ - heap_close(rel, (is_from ? RowExclusiveLock : AccessShareLock)); + /* + * Close the relation for now, but keep the lock on it to prevent + * changes between now and when we start the query-based COPY. + * + * We'll reopen it later as part of the query-based COPY. + */ + heap_close(rel, NoLock); rel = NULL; } } @@ -1407,25 +1416,25 @@ BeginCopy(bool is_from, plan = planner(query, 0, NULL); /* - * If we were passed in a relid, make sure we got the same one back - * after planning out the query. It's possible that it changed - * between when we checked the policies on the table and decided to - * use a query and now. + * With row level security and a user using "COPY relation TO", we + * have to convert the "COPY relation TO" to a query-based COPY (eg: + * "COPY (SELECT * FROM relation) TO"), to allow the rewriter to add + * in any RLS clauses. + * + * When this happens, we are passed in the relid of the originally + * found relation (which we have locked). As the planner will look up + * the relation again, we double-check here to make sure it found the + * same one that we have locked. */ if (queryRelId != InvalidOid) { - Oid relid = linitial_oid(plan->relationOids); - /* - * There should only be one relationOid in this case, since we - * will only get here when we have changed the command for the - * user from a "COPY relation TO" to "COPY (SELECT * FROM - * relation) TO", to allow row level security policies to be - * applied. + * Note that with RLS involved there may be multiple relations, + * and while the one we need is almost certainly first, we don't + * make any guarantees of that in the planner, so check the whole + * list and make sure we find the original relation. */ - Assert(list_length(plan->relationOids) == 1); - - if (relid != queryRelId) + if (!list_member_oid(plan->relationOids, queryRelId)) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("relation referenced by COPY statement has changed"))); @@ -1594,10 +1603,12 @@ ClosePipeToProgram(CopyState cstate) pclose_rc = ClosePipeStream(cstate->copy_file); if (pclose_rc == -1) ereport(ERROR, - (errmsg("could not close pipe to external command: %m"))); + (errcode_for_file_access(), + errmsg("could not close pipe to external command: %m"))); else if (pclose_rc != 0) ereport(ERROR, - (errmsg("program \"%s\" failed", + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("program \"%s\" failed", cstate->filename), errdetail_internal("%s", wait_result_to_str(pclose_rc)))); } @@ -1694,7 +1705,8 @@ BeginCopyTo(Relation rel, cstate->copy_file = OpenPipeStream(cstate->filename, PG_BINARY_W); if (cstate->copy_file == NULL) ereport(ERROR, - (errmsg("could not execute command \"%s\": %m", + (errcode_for_file_access(), + errmsg("could not execute command \"%s\": %m", cstate->filename))); } else @@ -1721,7 +1733,10 @@ BeginCopyTo(Relation rel, cstate->filename))); if (fstat(fileno(cstate->copy_file), &st)) - elog(ERROR, "could not stat file \"%s\": %m", cstate->filename); + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not stat file \"%s\": %m", + cstate->filename))); if (S_ISDIR(st.st_mode)) ereport(ERROR, @@ -2262,13 +2277,13 @@ CopyFrom(CopyState cstate) { if (!ThereAreNoPriorRegisteredSnapshots() || !ThereAreNoReadyPortals()) ereport(ERROR, - (ERRCODE_INVALID_TRANSACTION_STATE, + (errcode(ERRCODE_INVALID_TRANSACTION_STATE), errmsg("cannot perform FREEZE because of prior transaction activity"))); if (cstate->rel->rd_createSubid != GetCurrentSubTransactionId() && cstate->rel->rd_newRelfilenodeSubid != GetCurrentSubTransactionId()) ereport(ERROR, - (ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE, + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot perform FREEZE because the table was not created or truncated in the current subtransaction"))); hi_options |= HEAP_INSERT_FROZEN; @@ -2728,7 +2743,8 @@ BeginCopyFrom(Relation rel, cstate->copy_file = OpenPipeStream(cstate->filename, PG_BINARY_R); if (cstate->copy_file == NULL) ereport(ERROR, - (errmsg("could not execute command \"%s\": %m", + (errcode_for_file_access(), + errmsg("could not execute command \"%s\": %m", cstate->filename))); } else @@ -2743,7 +2759,10 @@ BeginCopyFrom(Relation rel, cstate->filename))); if (fstat(fileno(cstate->copy_file), &st)) - elog(ERROR, "could not stat file \"%s\": %m", cstate->filename); + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not stat file \"%s\": %m", + cstate->filename))); if (S_ISDIR(st.st_mode)) ereport(ERROR, diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index bf40881037cbc..3d1cb0b8e3057 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -1168,15 +1168,6 @@ EventTriggerSupportsObjectClass(ObjectClass objclass) case OCLASS_EXTENSION: case OCLASS_POLICY: return true; - - case MAX_OCLASS: - - /* - * This shouldn't ever happen, but we keep the case to avoid a - * compiler warning without a "default" clause in the switch. - */ - Assert(false); - break; } return true; diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 0d1ecc2a3edbb..5d06fa4ea65c4 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -96,6 +96,8 @@ static void show_sort_group_keys(PlanState *planstate, const char *qlabel, List *ancestors, ExplainState *es); static void show_sortorder_options(StringInfo buf, Node *sortexpr, Oid sortOperator, Oid collation, bool nullsFirst); +static void show_tablesample(TableSampleClause *tsc, PlanState *planstate, + List *ancestors, ExplainState *es); static void show_sort_info(SortState *sortstate, ExplainState *es); static void show_hash_info(HashState *hashstate, ExplainState *es); static void show_tidbitmap_info(BitmapHeapScanState *planstate, @@ -116,7 +118,7 @@ static void ExplainMemberNodes(List *plans, PlanState **planstates, static void ExplainSubPlans(List *plans, List *ancestors, const char *relationship, ExplainState *es); static void ExplainCustomChildren(CustomScanState *css, - List *ancestors, ExplainState *es); + List *ancestors, ExplainState *es); static void ExplainProperty(const char *qlabel, const char *value, bool numeric, ExplainState *es); static void ExplainOpenGroup(const char *objtype, const char *labelname, @@ -730,6 +732,7 @@ ExplainPreScanNode(PlanState *planstate, Bitmapset **rels_used) switch (nodeTag(plan)) { case T_SeqScan: + case T_SampleScan: case T_IndexScan: case T_IndexOnlyScan: case T_BitmapHeapScan: @@ -739,7 +742,6 @@ ExplainPreScanNode(PlanState *planstate, Bitmapset **rels_used) case T_ValuesScan: case T_CteScan: case T_WorkTableScan: - case T_SampleScan: *rels_used = bms_add_member(*rels_used, ((Scan *) plan)->scanrelid); break; @@ -935,6 +937,9 @@ ExplainNode(PlanState *planstate, List *ancestors, case T_SeqScan: pname = sname = "Seq Scan"; break; + case T_SampleScan: + pname = sname = "Sample Scan"; + break; case T_IndexScan: pname = sname = "Index Scan"; break; @@ -976,23 +981,6 @@ ExplainNode(PlanState *planstate, List *ancestors, else pname = sname; break; - case T_SampleScan: - { - /* - * Fetch the tablesample method name from RTE. - * - * It would be nice to also show parameters, but since we - * support arbitrary expressions as parameter it might get - * quite messy. - */ - RangeTblEntry *rte; - - rte = rt_fetch(((SampleScan *) plan)->scanrelid, es->rtable); - custom_name = get_tablesample_method_name(rte->tablesample->tsmid); - pname = psprintf("Sample Scan (%s)", custom_name); - sname = "Sample Scan"; - } - break; case T_Material: pname = sname = "Materialize"; break; @@ -1101,6 +1089,7 @@ ExplainNode(PlanState *planstate, List *ancestors, switch (nodeTag(plan)) { case T_SeqScan: + case T_SampleScan: case T_BitmapHeapScan: case T_TidScan: case T_SubqueryScan: @@ -1115,9 +1104,6 @@ ExplainNode(PlanState *planstate, List *ancestors, if (((Scan *) plan)->scanrelid > 0) ExplainScanTarget((Scan *) plan, es); break; - case T_SampleScan: - ExplainScanTarget((Scan *) plan, es); - break; case T_IndexScan: { IndexScan *indexscan = (IndexScan *) plan; @@ -1363,12 +1349,15 @@ ExplainNode(PlanState *planstate, List *ancestors, if (es->analyze) show_tidbitmap_info((BitmapHeapScanState *) planstate, es); break; + case T_SampleScan: + show_tablesample(((SampleScan *) plan)->tablesample, + planstate, ancestors, es); + /* FALL THRU to print additional fields the same as SeqScan */ case T_SeqScan: case T_ValuesScan: case T_CteScan: case T_WorkTableScan: case T_SubqueryScan: - case T_SampleScan: show_scan_qual(plan->qual, "Filter", planstate, ancestors, es); if (plan->qual) show_instrumentation_count("Rows Removed by Filter", 1, @@ -2109,6 +2098,72 @@ show_sortorder_options(StringInfo buf, Node *sortexpr, } } +/* + * Show TABLESAMPLE properties + */ +static void +show_tablesample(TableSampleClause *tsc, PlanState *planstate, + List *ancestors, ExplainState *es) +{ + List *context; + bool useprefix; + char *method_name; + List *params = NIL; + char *repeatable; + ListCell *lc; + + /* Set up deparsing context */ + context = set_deparse_context_planstate(es->deparse_cxt, + (Node *) planstate, + ancestors); + useprefix = list_length(es->rtable) > 1; + + /* Get the tablesample method name */ + method_name = get_func_name(tsc->tsmhandler); + + /* Deparse parameter expressions */ + foreach(lc, tsc->args) + { + Node *arg = (Node *) lfirst(lc); + + params = lappend(params, + deparse_expression(arg, context, + useprefix, false)); + } + if (tsc->repeatable) + repeatable = deparse_expression((Node *) tsc->repeatable, context, + useprefix, false); + else + repeatable = NULL; + + /* Print results */ + if (es->format == EXPLAIN_FORMAT_TEXT) + { + bool first = true; + + appendStringInfoSpaces(es->str, es->indent * 2); + appendStringInfo(es->str, "Sampling: %s (", method_name); + foreach(lc, params) + { + if (!first) + appendStringInfoString(es->str, ", "); + appendStringInfoString(es->str, (const char *) lfirst(lc)); + first = false; + } + appendStringInfoChar(es->str, ')'); + if (repeatable) + appendStringInfo(es->str, " REPEATABLE (%s)", repeatable); + appendStringInfoChar(es->str, '\n'); + } + else + { + ExplainPropertyText("Sampling Method", method_name, es); + ExplainPropertyList("Sampling Parameters", params, es); + if (repeatable) + ExplainPropertyText("Repeatable Seed", repeatable, es); + } +} + /* * If it's EXPLAIN ANALYZE, show tuplesort stats for a sort node */ @@ -2366,13 +2421,13 @@ ExplainTargetRel(Plan *plan, Index rti, ExplainState *es) switch (nodeTag(plan)) { case T_SeqScan: + case T_SampleScan: case T_IndexScan: case T_IndexOnlyScan: case T_BitmapHeapScan: case T_TidScan: case T_ForeignScan: case T_CustomScan: - case T_SampleScan: case T_ModifyTable: /* Assert it's on a real relation */ Assert(rte->rtekind == RTE_RELATION); @@ -2663,9 +2718,9 @@ ExplainCustomChildren(CustomScanState *css, List *ancestors, ExplainState *es) { ListCell *cell; const char *label = - (list_length(css->custom_ps) != 1 ? "children" : "child"); + (list_length(css->custom_ps) != 1 ? "children" : "child"); - foreach (cell, css->custom_ps) + foreach(cell, css->custom_ps) ExplainNode((PlanState *) lfirst(cell), ancestors, label, NULL, es); } diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index 5492e5985bf61..745b76527d1c3 100644 --- a/src/backend/commands/matview.c +++ b/src/backend/commands/matview.c @@ -608,7 +608,7 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner, */ ereport(ERROR, (errcode(ERRCODE_CARDINALITY_VIOLATION), - errmsg("new data for \"%s\" contains duplicate rows without any null columns", + errmsg("new data for materialized view \"%s\" contains duplicate rows without any null columns", RelationGetRelationName(matviewRel)), errdetail("Row: %s", SPI_getvalue(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 1)))); diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c index 6e95ba28b9db1..8851fe7c9ff9b 100644 --- a/src/backend/commands/policy.c +++ b/src/backend/commands/policy.c @@ -22,6 +22,7 @@ #include "catalog/indexing.h" #include "catalog/namespace.h" #include "catalog/objectaccess.h" +#include "catalog/pg_authid.h" #include "catalog/pg_policy.h" #include "catalog/pg_type.h" #include "commands/policy.h" @@ -29,6 +30,7 @@ #include "nodes/makefuncs.h" #include "nodes/pg_list.h" #include "parser/parse_clause.h" +#include "parser/parse_collate.h" #include "parser/parse_node.h" #include "parser/parse_relation.h" #include "rewrite/rewriteManip.h" @@ -47,7 +49,7 @@ static void RangeVarCallbackForPolicy(const RangeVar *rv, Oid relid, Oid oldrelid, void *arg); static char parse_policy_command(const char *cmd_name); -static ArrayType *policy_role_list_to_array(List *roles); +static Datum *policy_role_list_to_array(List *roles, int *num_roles); /* * Callback to RangeVarGetRelidExtended(). @@ -106,53 +108,51 @@ RangeVarCallbackForPolicy(const RangeVar *rv, Oid relid, Oid oldrelid, static char parse_policy_command(const char *cmd_name) { - char cmd; + char polcmd; if (!cmd_name) elog(ERROR, "unrecognized policy command"); if (strcmp(cmd_name, "all") == 0) - cmd = '*'; + polcmd = '*'; else if (strcmp(cmd_name, "select") == 0) - cmd = ACL_SELECT_CHR; + polcmd = ACL_SELECT_CHR; else if (strcmp(cmd_name, "insert") == 0) - cmd = ACL_INSERT_CHR; + polcmd = ACL_INSERT_CHR; else if (strcmp(cmd_name, "update") == 0) - cmd = ACL_UPDATE_CHR; + polcmd = ACL_UPDATE_CHR; else if (strcmp(cmd_name, "delete") == 0) - cmd = ACL_DELETE_CHR; + polcmd = ACL_DELETE_CHR; else elog(ERROR, "unrecognized policy command"); - return cmd; + return polcmd; } /* * policy_role_list_to_array - * helper function to convert a list of RoleSpecs to an array of role ids. + * helper function to convert a list of RoleSpecs to an array of + * role id Datums. */ -static ArrayType * -policy_role_list_to_array(List *roles) +static Datum * +policy_role_list_to_array(List *roles, int *num_roles) { - ArrayType *role_ids; - Datum *temp_array; + Datum *role_oids; ListCell *cell; - int num_roles; int i = 0; /* Handle no roles being passed in as being for public */ if (roles == NIL) { - temp_array = (Datum *) palloc(sizeof(Datum)); - temp_array[0] = ObjectIdGetDatum(ACL_ID_PUBLIC); + *num_roles = 1; + role_oids = (Datum *) palloc(*num_roles * sizeof(Datum)); + role_oids[0] = ObjectIdGetDatum(ACL_ID_PUBLIC); - role_ids = construct_array(temp_array, 1, OIDOID, sizeof(Oid), true, - 'i'); - return role_ids; + return role_oids; } - num_roles = list_length(roles); - temp_array = (Datum *) palloc(num_roles * sizeof(Datum)); + *num_roles = list_length(roles); + role_oids = (Datum *) palloc(*num_roles * sizeof(Datum)); foreach(cell, roles) { @@ -163,32 +163,29 @@ policy_role_list_to_array(List *roles) */ if (spec->roletype == ROLESPEC_PUBLIC) { - if (num_roles != 1) + if (*num_roles != 1) + { ereport(WARNING, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("ignoring roles specified other than public"), errhint("All roles are members of the public role."))); - temp_array[0] = ObjectIdGetDatum(ACL_ID_PUBLIC); - num_roles = 1; - break; + *num_roles = 1; + } + role_oids[0] = ObjectIdGetDatum(ACL_ID_PUBLIC); + + return role_oids; } else - temp_array[i++] = + role_oids[i++] = ObjectIdGetDatum(get_rolespec_oid((Node *) spec, false)); } - role_ids = construct_array(temp_array, num_roles, OIDOID, sizeof(Oid), true, - 'i'); - - return role_ids; + return role_oids; } /* * Load row security policy from the catalog, and store it in * the relation's relcache entry. - * - * We will always set up some kind of policy here. If no explicit policies - * are found then an implicit default-deny policy is created. */ void RelationBuildRowSecurity(Relation relation) @@ -246,7 +243,6 @@ RelationBuildRowSecurity(Relation relation) char *with_check_value; Expr *with_check_qual; char *policy_name_value; - Oid policy_id; bool isnull; RowSecurityPolicy *policy; @@ -298,14 +294,11 @@ RelationBuildRowSecurity(Relation relation) else with_check_qual = NULL; - policy_id = HeapTupleGetOid(tuple); - /* Now copy everything into the cache context */ MemoryContextSwitchTo(rscxt); policy = palloc0(sizeof(RowSecurityPolicy)); policy->policy_name = pstrdup(policy_name_value); - policy->policy_id = policy_id; policy->polcmd = cmd_value; policy->roles = DatumGetArrayTypePCopy(roles_datum); policy->qual = copyObject(qual_expr); @@ -326,40 +319,6 @@ RelationBuildRowSecurity(Relation relation) systable_endscan(sscan); heap_close(catalog, AccessShareLock); - - /* - * Check if no policies were added - * - * If no policies exist in pg_policy for this relation, then we need - * to create a single default-deny policy. We use InvalidOid for the - * Oid to indicate that this is the default-deny policy (we may decide - * to ignore the default policy if an extension adds policies). - */ - if (rsdesc->policies == NIL) - { - RowSecurityPolicy *policy; - Datum role; - - MemoryContextSwitchTo(rscxt); - - role = ObjectIdGetDatum(ACL_ID_PUBLIC); - - policy = palloc0(sizeof(RowSecurityPolicy)); - policy->policy_name = pstrdup("default-deny policy"); - policy->policy_id = InvalidOid; - policy->polcmd = '*'; - policy->roles = construct_array(&role, 1, OIDOID, sizeof(Oid), true, - 'i'); - policy->qual = (Expr *) makeConst(BOOLOID, -1, InvalidOid, - sizeof(bool), BoolGetDatum(false), - false, true); - policy->with_check_qual = copyObject(policy->qual); - policy->hassublinks = false; - - rsdesc->policies = lcons(policy, rsdesc->policies); - - MemoryContextSwitchTo(oldcxt); - } } PG_CATCH(); { @@ -462,6 +421,8 @@ CreatePolicy(CreatePolicyStmt *stmt) Relation target_table; Oid table_id; char polcmd; + Datum *role_oids; + int nitems = 0; ArrayType *role_ids; ParseState *qual_pstate; ParseState *with_check_pstate; @@ -475,9 +436,10 @@ CreatePolicy(CreatePolicyStmt *stmt) bool isnull[Natts_pg_policy]; ObjectAddress target; ObjectAddress myself; + int i; /* Parse command */ - polcmd = parse_policy_command(stmt->cmd); + polcmd = parse_policy_command(stmt->cmd_name); /* * If the command is SELECT or DELETE then WITH CHECK should be NULL. @@ -497,9 +459,10 @@ CreatePolicy(CreatePolicyStmt *stmt) (errcode(ERRCODE_SYNTAX_ERROR), errmsg("only WITH CHECK expression allowed for INSERT"))); - /* Collect role ids */ - role_ids = policy_role_list_to_array(stmt->roles); + role_oids = policy_role_list_to_array(stmt->roles, &nitems); + role_ids = construct_array(role_oids, nitems, OIDOID, + sizeof(Oid), true, 'i'); /* Parse the supplied clause */ qual_pstate = make_parsestate(NULL); @@ -530,14 +493,18 @@ CreatePolicy(CreatePolicyStmt *stmt) qual = transformWhereClause(qual_pstate, copyObject(stmt->qual), - EXPR_KIND_WHERE, + EXPR_KIND_POLICY, "POLICY"); with_check_qual = transformWhereClause(with_check_pstate, copyObject(stmt->with_check), - EXPR_KIND_WHERE, + EXPR_KIND_POLICY, "POLICY"); + /* Fix up collation information */ + assign_expr_collations(qual_pstate, qual); + assign_expr_collations(with_check_pstate, with_check_qual); + /* Open pg_policy catalog */ pg_policy_rel = heap_open(PolicyRelationId, RowExclusiveLock); @@ -563,7 +530,7 @@ CreatePolicy(CreatePolicyStmt *stmt) if (HeapTupleIsValid(policy_tuple)) ereport(ERROR, (errcode(ERRCODE_DUPLICATE_OBJECT), - errmsg("policy \"%s\" for relation \"%s\" already exists", + errmsg("policy \"%s\" for table \"%s\" already exists", stmt->policy_name, RelationGetRelationName(target_table)))); values[Anum_pg_policy_polrelid - 1] = ObjectIdGetDatum(table_id); @@ -609,6 +576,20 @@ CreatePolicy(CreatePolicyStmt *stmt) recordDependencyOnExpr(&myself, with_check_qual, with_check_pstate->p_rtable, DEPENDENCY_NORMAL); + /* Register role dependencies */ + target.classId = AuthIdRelationId; + target.objectSubId = 0; + for (i = 0; i < nitems; i++) + { + target.objectId = DatumGetObjectId(role_oids[i]); + /* no dependency if public */ + if (target.objectId != ACL_ID_PUBLIC) + recordSharedDependencyOn(&myself, &target, + SHARED_DEPENDENCY_POLICY); + } + + InvokeObjectPostCreateHook(PolicyRelationId, policy_id, 0); + /* Invalidate Relation Cache */ CacheInvalidateRelcache(target_table); @@ -636,6 +617,8 @@ AlterPolicy(AlterPolicyStmt *stmt) Oid policy_id; Relation target_table; Oid table_id; + Datum *role_oids = NULL; + int nitems = 0; ArrayType *role_ids = NULL; List *qual_parse_rtable = NIL; List *with_check_parse_rtable = NIL; @@ -650,13 +633,18 @@ AlterPolicy(AlterPolicyStmt *stmt) bool replaces[Natts_pg_policy]; ObjectAddress target; ObjectAddress myself; - Datum cmd_datum; + Datum polcmd_datum; char polcmd; bool polcmd_isnull; + int i; /* Parse role_ids */ if (stmt->roles != NULL) - role_ids = policy_role_list_to_array(stmt->roles); + { + role_oids = policy_role_list_to_array(stmt->roles, &nitems); + role_ids = construct_array(role_oids, nitems, OIDOID, + sizeof(Oid), true, 'i'); + } /* Get id of table. Also handles permissions checks. */ table_id = RangeVarGetRelidExtended(stmt->table, AccessExclusiveLock, @@ -678,9 +666,12 @@ AlterPolicy(AlterPolicyStmt *stmt) addRTEtoQuery(qual_pstate, rte, false, true, true); qual = transformWhereClause(qual_pstate, copyObject(stmt->qual), - EXPR_KIND_WHERE, + EXPR_KIND_POLICY, "POLICY"); + /* Fix up collation information */ + assign_expr_collations(qual_pstate, qual); + qual_parse_rtable = qual_pstate->p_rtable; free_parsestate(qual_pstate); } @@ -698,9 +689,12 @@ AlterPolicy(AlterPolicyStmt *stmt) with_check_qual = transformWhereClause(with_check_pstate, copyObject(stmt->with_check), - EXPR_KIND_WHERE, + EXPR_KIND_POLICY, "POLICY"); + /* Fix up collation information */ + assign_expr_collations(with_check_pstate, with_check_qual); + with_check_parse_rtable = with_check_pstate->p_rtable; free_parsestate(with_check_pstate); } @@ -735,16 +729,16 @@ AlterPolicy(AlterPolicyStmt *stmt) if (!HeapTupleIsValid(policy_tuple)) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("policy \"%s\" on table \"%s\" does not exist", + errmsg("policy \"%s\" for table \"%s\" does not exist", stmt->policy_name, RelationGetRelationName(target_table)))); /* Get policy command */ - cmd_datum = heap_getattr(policy_tuple, Anum_pg_policy_polcmd, + polcmd_datum = heap_getattr(policy_tuple, Anum_pg_policy_polcmd, RelationGetDescr(pg_policy_rel), &polcmd_isnull); Assert(!polcmd_isnull); - polcmd = DatumGetChar(cmd_datum); + polcmd = DatumGetChar(polcmd_datum); /* * If the command is SELECT or DELETE then WITH CHECK should be NULL. @@ -814,6 +808,21 @@ AlterPolicy(AlterPolicyStmt *stmt) recordDependencyOnExpr(&myself, with_check_qual, with_check_parse_rtable, DEPENDENCY_NORMAL); + /* Register role dependencies */ + deleteSharedDependencyRecordsFor(PolicyRelationId, policy_id, 0); + target.classId = AuthIdRelationId; + target.objectSubId = 0; + for (i = 0; i < nitems; i++) + { + target.objectId = DatumGetObjectId(role_oids[i]); + /* no dependency if public */ + if (target.objectId != ACL_ID_PUBLIC) + recordSharedDependencyOn(&myself, &target, + SHARED_DEPENDENCY_POLICY); + } + + InvokeObjectPostAlterHook(PolicyRelationId, policy_id, 0); + heap_freetuple(new_tuple); /* Invalidate Relation Cache */ @@ -977,7 +986,7 @@ get_relation_policy_oid(Oid relid, const char *policy_name, bool missing_ok) if (!missing_ok) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("policy \"%s\" for table \"%s\" does not exist", + errmsg("policy \"%s\" for table \"%s\" does not exist", policy_name, get_rel_name(relid)))); policy_oid = InvalidOid; @@ -991,3 +1000,32 @@ get_relation_policy_oid(Oid relid, const char *policy_name, bool missing_ok) return policy_oid; } + +/* + * relation_has_policies - Determine if relation has any policies + */ +bool +relation_has_policies(Relation rel) +{ + Relation catalog; + ScanKeyData skey; + SysScanDesc sscan; + HeapTuple policy_tuple; + bool ret = false; + + catalog = heap_open(PolicyRelationId, AccessShareLock); + ScanKeyInit(&skey, + Anum_pg_policy_polrelid, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(RelationGetRelid(rel))); + sscan = systable_beginscan(catalog, PolicyPolrelidPolnameIndexId, true, + NULL, 1, &skey); + policy_tuple = systable_getnext(sscan); + if (HeapTupleIsValid(policy_tuple)) + ret = true; + + systable_endscan(sscan); + heap_close(catalog, AccessShareLock); + + return ret; +} diff --git a/src/backend/commands/portalcmds.c b/src/backend/commands/portalcmds.c index 2794537721f96..327b2a5fe9019 100644 --- a/src/backend/commands/portalcmds.c +++ b/src/backend/commands/portalcmds.c @@ -335,11 +335,7 @@ PersistHoldablePortal(Portal portal) /* * Check for improper portal use, and mark portal active. */ - if (portal->status != PORTAL_READY) - ereport(ERROR, - (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("portal \"%s\" cannot be run", portal->name))); - portal->status = PORTAL_ACTIVE; + MarkPortalActive(portal); /* * Set up global portal context pointers. diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index d3947139c07d5..cf99de4e8dbc8 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -386,6 +386,8 @@ static void ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, static void ATPostAlterTypeParse(Oid oldId, Oid oldRelId, Oid refRelId, char *cmd, List **wqueue, LOCKMODE lockmode, bool rewrite); +static void RebuildConstraintComment(AlteredTableInfo *tab, int pass, + Oid objid, Relation rel, char *conname); static void TryReuseIndex(Oid oldId, IndexStmt *stmt); static void TryReuseForeignKey(Oid oldId, Constraint *con); static void change_owner_fix_column_acls(Oid relationOid, @@ -416,6 +418,7 @@ static void ATExecReplicaIdentity(Relation rel, ReplicaIdentityStmt *stmt, LOCKM static void ATExecGenericOptions(Relation rel, List *options); static void ATExecEnableRowSecurity(Relation rel); static void ATExecDisableRowSecurity(Relation rel); +static void ATExecForceNoForceRowSecurity(Relation rel, bool force_rls); static void copy_relation_data(SMgrRelation rel, SMgrRelation dst, ForkNumber forkNum, char relpersistence); @@ -2927,6 +2930,8 @@ AlterTableGetLockLevel(List *cmds) case AT_SetNotNull: case AT_EnableRowSecurity: case AT_DisableRowSecurity: + case AT_ForceRowSecurity: + case AT_NoForceRowSecurity: cmd_lockmode = AccessExclusiveLock; break; @@ -3352,6 +3357,8 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, case AT_DropOf: /* NOT OF */ case AT_EnableRowSecurity: case AT_DisableRowSecurity: + case AT_ForceRowSecurity: + case AT_NoForceRowSecurity: ATSimplePermissions(rel, ATT_TABLE); /* These commands never recurse */ /* No command-specific prep needed */ @@ -3514,6 +3521,9 @@ ATExecCmd(List **wqueue, AlteredTableInfo *tab, Relation rel, ATExecAddConstraint(wqueue, tab, rel, (Constraint *) cmd->def, false, true, lockmode); break; + case AT_ReAddComment: /* Re-add existing comment */ + address = CommentObject((CommentStmt *) cmd->def); + break; case AT_AddIndexConstraint: /* ADD CONSTRAINT USING INDEX */ address = ATExecAddIndexConstraint(tab, rel, (IndexStmt *) cmd->def, lockmode); @@ -3665,6 +3675,12 @@ ATExecCmd(List **wqueue, AlteredTableInfo *tab, Relation rel, case AT_DisableRowSecurity: ATExecDisableRowSecurity(rel); break; + case AT_ForceRowSecurity: + ATExecForceNoForceRowSecurity(rel, true); + break; + case AT_NoForceRowSecurity: + ATExecForceNoForceRowSecurity(rel, false); + break; case AT_GenericOptions: ATExecGenericOptions(rel, (List *) cmd->def); break; @@ -4323,6 +4339,9 @@ ATWrongRelkindError(Relation rel, int allowed_targets) case ATT_TABLE | ATT_VIEW: msg = _("\"%s\" is not a table or view"); break; + case ATT_TABLE | ATT_VIEW | ATT_FOREIGN_TABLE: + msg = _("\"%s\" is not a table, view, or foreign table"); + break; case ATT_TABLE | ATT_VIEW | ATT_MATVIEW | ATT_INDEX: msg = _("\"%s\" is not a table, view, materialized view, or index"); break; @@ -4332,6 +4351,9 @@ ATWrongRelkindError(Relation rel, int allowed_targets) case ATT_TABLE | ATT_MATVIEW | ATT_INDEX: msg = _("\"%s\" is not a table, materialized view, or index"); break; + case ATT_TABLE | ATT_MATVIEW | ATT_FOREIGN_TABLE: + msg = _("\"%s\" is not a table, materialized view, or foreign table"); + break; case ATT_TABLE | ATT_FOREIGN_TABLE: msg = _("\"%s\" is not a table or foreign table"); break; @@ -4339,7 +4361,7 @@ ATWrongRelkindError(Relation rel, int allowed_targets) msg = _("\"%s\" is not a table, composite type, or foreign table"); break; case ATT_TABLE | ATT_MATVIEW | ATT_INDEX | ATT_FOREIGN_TABLE: - msg = _("\"%s\" is not a table, materialized view, composite type, or foreign table"); + msg = _("\"%s\" is not a table, materialized view, index, or foreign table"); break; case ATT_VIEW: msg = _("\"%s\" is not a view"); @@ -5639,7 +5661,7 @@ ATPrepDropColumn(List **wqueue, Relation rel, bool recurse, bool recursing, } /* - * Return value is that of the dropped column. + * Return value is the address of the dropped column. */ static ObjectAddress ATExecDropColumn(List **wqueue, Relation rel, const char *colName, @@ -8645,74 +8667,128 @@ ATPostAlterTypeParse(Oid oldId, Oid oldRelId, Oid refRelId, char *cmd, Node *stm = (Node *) lfirst(list_item); AlteredTableInfo *tab; - switch (nodeTag(stm)) + tab = ATGetQueueEntry(wqueue, rel); + + if (IsA(stm, IndexStmt)) + { + IndexStmt *stmt = (IndexStmt *) stm; + AlterTableCmd *newcmd; + + if (!rewrite) + TryReuseIndex(oldId, stmt); + /* keep the index's comment */ + stmt->idxcomment = GetComment(oldId, RelationRelationId, 0); + + newcmd = makeNode(AlterTableCmd); + newcmd->subtype = AT_ReAddIndex; + newcmd->def = (Node *) stmt; + tab->subcmds[AT_PASS_OLD_INDEX] = + lappend(tab->subcmds[AT_PASS_OLD_INDEX], newcmd); + } + else if (IsA(stm, AlterTableStmt)) { - case T_IndexStmt: + AlterTableStmt *stmt = (AlterTableStmt *) stm; + ListCell *lcmd; + + foreach(lcmd, stmt->cmds) + { + AlterTableCmd *cmd = (AlterTableCmd *) lfirst(lcmd); + + if (cmd->subtype == AT_AddIndex) { - IndexStmt *stmt = (IndexStmt *) stm; - AlterTableCmd *newcmd; + IndexStmt *indstmt; + Oid indoid; + + Assert(IsA(cmd->def, IndexStmt)); + + indstmt = (IndexStmt *) cmd->def; + indoid = get_constraint_index(oldId); if (!rewrite) - TryReuseIndex(oldId, stmt); + TryReuseIndex(indoid, indstmt); + /* keep any comment on the index */ + indstmt->idxcomment = GetComment(indoid, + RelationRelationId, 0); - tab = ATGetQueueEntry(wqueue, rel); - newcmd = makeNode(AlterTableCmd); - newcmd->subtype = AT_ReAddIndex; - newcmd->def = (Node *) stmt; + cmd->subtype = AT_ReAddIndex; tab->subcmds[AT_PASS_OLD_INDEX] = - lappend(tab->subcmds[AT_PASS_OLD_INDEX], newcmd); - break; + lappend(tab->subcmds[AT_PASS_OLD_INDEX], cmd); + + /* recreate any comment on the constraint */ + RebuildConstraintComment(tab, + AT_PASS_OLD_INDEX, + oldId, + rel, indstmt->idxname); } - case T_AlterTableStmt: + else if (cmd->subtype == AT_AddConstraint) { - AlterTableStmt *stmt = (AlterTableStmt *) stm; - ListCell *lcmd; - - tab = ATGetQueueEntry(wqueue, rel); - foreach(lcmd, stmt->cmds) - { - AlterTableCmd *cmd = (AlterTableCmd *) lfirst(lcmd); - Constraint *con; - - switch (cmd->subtype) - { - case AT_AddIndex: - Assert(IsA(cmd->def, IndexStmt)); - if (!rewrite) - TryReuseIndex(get_constraint_index(oldId), - (IndexStmt *) cmd->def); - cmd->subtype = AT_ReAddIndex; - tab->subcmds[AT_PASS_OLD_INDEX] = - lappend(tab->subcmds[AT_PASS_OLD_INDEX], cmd); - break; - case AT_AddConstraint: - Assert(IsA(cmd->def, Constraint)); - con = (Constraint *) cmd->def; - con->old_pktable_oid = refRelId; - /* rewriting neither side of a FK */ - if (con->contype == CONSTR_FOREIGN && - !rewrite && tab->rewrite == 0) - TryReuseForeignKey(oldId, con); - cmd->subtype = AT_ReAddConstraint; - tab->subcmds[AT_PASS_OLD_CONSTR] = - lappend(tab->subcmds[AT_PASS_OLD_CONSTR], cmd); - break; - default: - elog(ERROR, "unexpected statement type: %d", - (int) cmd->subtype); - } - } - break; + Constraint *con; + + Assert(IsA(cmd->def, Constraint)); + + con = (Constraint *) cmd->def; + con->old_pktable_oid = refRelId; + /* rewriting neither side of a FK */ + if (con->contype == CONSTR_FOREIGN && + !rewrite && tab->rewrite == 0) + TryReuseForeignKey(oldId, con); + cmd->subtype = AT_ReAddConstraint; + tab->subcmds[AT_PASS_OLD_CONSTR] = + lappend(tab->subcmds[AT_PASS_OLD_CONSTR], cmd); + + /* recreate any comment on the constraint */ + RebuildConstraintComment(tab, + AT_PASS_OLD_CONSTR, + oldId, + rel, con->conname); } - default: - elog(ERROR, "unexpected statement type: %d", - (int) nodeTag(stm)); + else + elog(ERROR, "unexpected statement type: %d", + (int) cmd->subtype); + } } + else + elog(ERROR, "unexpected statement type: %d", + (int) nodeTag(stm)); } relation_close(rel, NoLock); } +/* + * Subroutine for ATPostAlterTypeParse() to recreate a comment entry for + * a constraint that is being re-added. + */ +static void +RebuildConstraintComment(AlteredTableInfo *tab, int pass, Oid objid, + Relation rel, char *conname) +{ + CommentStmt *cmd; + char *comment_str; + AlterTableCmd *newcmd; + + /* Look for comment for object wanted, and leave if none */ + comment_str = GetComment(objid, ConstraintRelationId, 0); + if (comment_str == NULL) + return; + + /* Build node CommentStmt */ + cmd = makeNode(CommentStmt); + cmd->objtype = OBJECT_TABCONSTRAINT; + cmd->objname = list_make3( + makeString(get_namespace_name(RelationGetNamespace(rel))), + makeString(RelationGetRelationName(rel)), + makeString(conname)); + cmd->objargs = NIL; + cmd->comment = comment_str; + + /* Append it to list of commands */ + newcmd = makeNode(AlterTableCmd); + newcmd->subtype = AT_ReAddComment; + newcmd->def = (Node *) cmd; + tab->subcmds[pass] = lappend(tab->subcmds[pass], newcmd); +} + /* * Subroutine for ATPostAlterTypeParse(). Calls out to CheckIndexCompatible() * for the real analysis, then mutates the IndexStmt based on that verdict. @@ -9717,7 +9793,7 @@ AlterTableMoveAll(AlterTableMoveAllStmt *stmt) !ConditionalLockRelationOid(relOid, AccessExclusiveLock)) ereport(ERROR, (errcode(ERRCODE_OBJECT_IN_USE), - errmsg("aborting because lock on relation \"%s\".\"%s\" is not available", + errmsg("aborting because lock on relation \"%s.%s\" is not available", get_namespace_name(relForm->relnamespace), NameStr(relForm->relname)))); else @@ -10288,7 +10364,7 @@ MergeConstraintsIntoExisting(Relation child_rel, Relation parent_rel) * coninhcount and conislocal for inherited constraints are adjusted in * exactly the same way. * - * Return value is the OID of the relation that is no longer parent. + * Return value is the address of the relation that is no longer parent. */ static ObjectAddress ATExecDropInherit(Relation rel, RangeVar *parent, LOCKMODE lockmode) @@ -10989,6 +11065,35 @@ ATExecDisableRowSecurity(Relation rel) heap_freetuple(tuple); } +/* + * ALTER TABLE FORCE/NO FORCE ROW LEVEL SECURITY + */ +static void +ATExecForceNoForceRowSecurity(Relation rel, bool force_rls) +{ + Relation pg_class; + Oid relid; + HeapTuple tuple; + + relid = RelationGetRelid(rel); + + pg_class = heap_open(RelationRelationId, RowExclusiveLock); + + tuple = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(relid)); + + if (!HeapTupleIsValid(tuple)) + elog(ERROR, "cache lookup failed for relation %u", relid); + + ((Form_pg_class) GETSTRUCT(tuple))->relforcerowsecurity = force_rls; + simple_heap_update(pg_class, &tuple->t_self, tuple); + + /* keep catalog indexes current */ + CatalogUpdateIndexes(pg_class, tuple); + + heap_close(pg_class, RowExclusiveLock); + heap_freetuple(tuple); +} + /* * ALTER FOREIGN TABLE OPTIONS (...) */ @@ -11110,7 +11215,7 @@ ATPrepChangePersistence(Relation rel, bool toLogged) /* * Check existing foreign key constraints to preserve the invariant that - * no permanent tables cannot reference unlogged ones. Self-referencing + * permanent tables cannot reference unlogged ones. Self-referencing * foreign keys can safely be ignored. */ pg_constraint = heap_open(ConstraintRelationId, AccessShareLock); diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c index ff0d904b7a865..18ae4ab10af48 100644 --- a/src/backend/commands/tablespace.c +++ b/src/backend/commands/tablespace.c @@ -383,13 +383,14 @@ CreateTableSpace(CreateTableSpaceStmt *stmt) /* We keep the lock on pg_tablespace until commit */ heap_close(rel, NoLock); + + return tablespaceoid; #else /* !HAVE_SYMLINK */ ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("tablespaces are not supported on this platform"))); + return InvalidOid; /* keep compiler quiet */ #endif /* HAVE_SYMLINK */ - - return tablespaceoid; } /* @@ -856,7 +857,7 @@ remove_tablespace_symlink(const char *linkloc) return; ereport(ERROR, (errcode_for_file_access(), - errmsg("could not stat \"%s\": %m", linkloc))); + errmsg("could not stat file \"%s\": %m", linkloc))); } if (S_ISDIR(st.st_mode)) diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 31091ba7f3e2f..74100f0eeaabf 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -4126,7 +4126,7 @@ AfterTriggerEndXact(bool isCommit) /* - * Forget the query stack and constrant-related state information. As + * Forget the query stack and constraint-related state information. As * with the subtransaction state information, we don't bother freeing the * memory here. */ diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index 3b381c58353fc..295e0b0fdf37a 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -301,7 +301,7 @@ CreateRole(CreateRoleStmt *stmt) if (!superuser()) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("must be superuser to change bypassrls attribute."))); + errmsg("must be superuser to change bypassrls attribute"))); } else { @@ -311,13 +311,6 @@ CreateRole(CreateRoleStmt *stmt) errmsg("permission denied to create role"))); } - if (strcmp(stmt->role, "public") == 0 || - strcmp(stmt->role, "none") == 0) - ereport(ERROR, - (errcode(ERRCODE_RESERVED_NAME), - errmsg("role name \"%s\" is reserved", - stmt->role))); - /* * Check the pg_authid relation to be certain the role doesn't already * exist. @@ -500,7 +493,7 @@ AlterRole(AlterRoleStmt *stmt) char *validUntil = NULL; /* time the login is valid until */ Datum validUntil_datum; /* same, as timestamptz Datum */ bool validUntil_null; - bool bypassrls = -1; + int bypassrls = -1; DefElem *dpassword = NULL; DefElem *dissuper = NULL; DefElem *dinherit = NULL; @@ -1159,13 +1152,6 @@ RenameRole(const char *oldname, const char *newname) (errcode(ERRCODE_DUPLICATE_OBJECT), errmsg("role \"%s\" already exists", newname))); - if (strcmp(newname, "public") == 0 || - strcmp(newname, "none") == 0) - ereport(ERROR, - (errcode(ERRCODE_RESERVED_NAME), - errmsg("role name \"%s\" is reserved", - newname))); - /* * createrole is enough privilege unless you want to mess with a superuser */ diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index baf66f1e6c01e..7c4ef58129e65 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -180,7 +180,10 @@ vacuum(int options, RangeVar *relation, Oid relid, VacuumParams *params, * calls a hostile index expression that itself calls ANALYZE. */ if (in_vacuum) - elog(ERROR, "%s cannot be executed from VACUUM or ANALYZE", stmttype); + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("%s cannot be executed from VACUUM or ANALYZE", + stmttype))); /* * Send info about dead objects to the statistics collector, unless we are @@ -1134,11 +1137,11 @@ vac_truncate_clog(TransactionId frozenXID, return; /* - * Truncate CLOG and CommitTs to the oldest computed value. Note we don't - * truncate multixacts; that will be done by the next checkpoint. + * Truncate CLOG, multixact and CommitTs to the oldest computed value. */ TruncateCLOG(frozenXID); - TruncateCommitTs(frozenXID, true); + TruncateCommitTs(frozenXID); + TruncateMultiXact(minMulti, minmulti_datoid); /* * Update the wrap limit for GetNewTransactionId and creation of new diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c index a01cfb4c04330..24298894fae10 100644 --- a/src/backend/commands/vacuumlazy.c +++ b/src/backend/commands/vacuumlazy.c @@ -1124,9 +1124,13 @@ lazy_scan_heap(Relation onerel, LVRelStats *vacrelstats, nkeep); appendStringInfo(&buf, _("There were %.0f unused item pointers.\n"), nunused); - appendStringInfo(&buf, _("Skipped %u pages due to buffer pins.\n"), + appendStringInfo(&buf, ngettext("Skipped %u page due to buffer pins.\n", + "Skipped %u pages due to buffer pins.\n", + vacrelstats->pinskipped_pages), vacrelstats->pinskipped_pages); - appendStringInfo(&buf, _("%u pages are entirely empty.\n"), + appendStringInfo(&buf, ngettext("%u page is entirely empty.\n", + "%u pages are entirely empty.\n", + empty_pages), empty_pages); appendStringInfo(&buf, _("%s."), pg_rusage_show(&ru0)); diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index 2d0a44effe797..16c122a22bc7f 100644 --- a/src/backend/commands/variable.c +++ b/src/backend/commands/variable.c @@ -19,6 +19,7 @@ #include #include "access/htup_details.h" +#include "access/parallel.h" #include "access/xact.h" #include "access/xlog.h" #include "catalog/pg_authid.h" @@ -877,9 +878,12 @@ check_role(char **newval, void **extra, GucSource source) ReleaseSysCache(roleTup); /* - * Verify that session user is allowed to become this role + * Verify that session user is allowed to become this role, but + * skip this in parallel mode, where we must blindly recreate the + * parallel leader's state. */ - if (!is_member_of_role(GetSessionUserId(), roleid)) + if (!InitializingParallelWorker && + !is_member_of_role(GetSessionUserId(), roleid)) { GUC_check_errcode(ERRCODE_INSUFFICIENT_PRIVILEGE); GUC_check_errmsg("permission denied to set role \"%s\"", diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c index 04073d3f9f916..93e1e9a691c50 100644 --- a/src/backend/executor/execAmi.c +++ b/src/backend/executor/execAmi.c @@ -463,6 +463,10 @@ ExecSupportsBackwardScan(Plan *node) case T_CteScan: return TargetListSupportsBackwardScan(node->targetlist); + case T_SampleScan: + /* Simplify life for tablesample methods by disallowing this */ + return false; + case T_IndexScan: return IndexSupportsBackwardScan(((IndexScan *) node)->indexid) && TargetListSupportsBackwardScan(node->targetlist); @@ -485,9 +489,6 @@ ExecSupportsBackwardScan(Plan *node) } return false; - case T_SampleScan: - return false; - case T_Material: case T_Sort: /* these don't evaluate tlist */ diff --git a/src/backend/executor/execIndexing.c b/src/backend/executor/execIndexing.c index bf385086c6252..72993297079df 100644 --- a/src/backend/executor/execIndexing.c +++ b/src/backend/executor/execIndexing.c @@ -405,7 +405,7 @@ ExecInsertIndexTuples(TupleTableSlot *slot, if (indexInfo->ii_ExclusionOps != NULL) { bool violationOK; - bool waitMode; + CEOUC_WAIT_MODE waitMode; if (noDupErr) { @@ -535,8 +535,8 @@ ExecCheckIndexConstraints(TupleTableSlot *slot, if (!indexRelation->rd_index->indimmediate) ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("ON CONFLICT does not support deferred unique constraints/exclusion constraints as arbiters"), + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("ON CONFLICT does not support deferrable unique constraints/exclusion constraints as arbiters"), errtableconstraint(heapRelation, RelationGetRelationName(indexRelation)))); diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index a1561ce0cc0ff..cb2e78dca597f 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -1808,22 +1808,34 @@ ExecWithCheckOptions(WCOKind kind, ResultRelInfo *resultRelInfo, ereport(ERROR, (errcode(ERRCODE_WITH_CHECK_OPTION_VIOLATION), - errmsg("new row violates WITH CHECK OPTION for \"%s\"", + errmsg("new row violates check option for view \"%s\"", wco->relname), val_desc ? errdetail("Failing row contains %s.", val_desc) : 0)); break; case WCO_RLS_INSERT_CHECK: case WCO_RLS_UPDATE_CHECK: - ereport(ERROR, - (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("new row violates row level security policy for \"%s\"", + if (wco->polname != NULL) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("new row violates row-level security policy \"%s\" for table \"%s\"", + wco->polname, wco->relname))); + else + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("new row violates row-level security policy for table \"%s\"", wco->relname))); break; case WCO_RLS_CONFLICT_CHECK: - ereport(ERROR, - (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("new row violates row level security policy (USING expression) for \"%s\"", + if (wco->polname != NULL) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"", + wco->polname, wco->relname))); + else + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("new row violates row-level security policy (USING expression) for table \"%s\"", wco->relname))); break; default: @@ -1874,7 +1886,7 @@ ExecBuildSlotValueDescription(Oid reloid, * then don't return anything. Otherwise, go through normal permission * checks. */ - if (check_enable_rls(reloid, GetUserId(), true) == RLS_ENABLED) + if (check_enable_rls(reloid, InvalidOid, true) == RLS_ENABLED) return NULL; initStringInfo(&buf); diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index 0f911f210bf3b..16bc8fa5f6c35 100644 --- a/src/backend/executor/execQual.c +++ b/src/backend/executor/execQual.c @@ -631,7 +631,8 @@ ExecEvalScalarVar(ExprState *exprstate, ExprContext *econtext, { if (variable->vartype != attr->atttypid) ereport(ERROR, - (errmsg("attribute %d has wrong type", attnum), + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("attribute %d has wrong type", attnum), errdetail("Table has type %s, but query expects %s.", format_type_be(attr->atttypid), format_type_be(variable->vartype)))); @@ -4111,7 +4112,8 @@ ExecEvalFieldSelect(FieldSelectState *fstate, /* As in ExecEvalScalarVar, we should but can't check typmod */ if (fselect->resulttype != attr->atttypid) ereport(ERROR, - (errmsg("attribute %d has wrong type", fieldnum), + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("attribute %d has wrong type", fieldnum), errdetail("Table has type %s, but query expects %s.", format_type_be(attr->atttypid), format_type_be(fselect->resulttype)))); diff --git a/src/backend/executor/nodeForeignscan.c b/src/backend/executor/nodeForeignscan.c index bb28a7372d1be..6165e4a6cb432 100644 --- a/src/backend/executor/nodeForeignscan.c +++ b/src/backend/executor/nodeForeignscan.c @@ -25,6 +25,7 @@ #include "executor/executor.h" #include "executor/nodeForeignscan.h" #include "foreign/fdwapi.h" +#include "utils/memutils.h" #include "utils/rel.h" static TupleTableSlot *ForeignNext(ForeignScanState *node); @@ -72,8 +73,19 @@ ForeignNext(ForeignScanState *node) static bool ForeignRecheck(ForeignScanState *node, TupleTableSlot *slot) { - /* There are no access-method-specific conditions to recheck. */ - return true; + ExprContext *econtext; + + /* + * extract necessary information from foreign scan node + */ + econtext = node->ss.ps.ps_ExprContext; + + /* Does the tuple meet the remote qual condition? */ + econtext->ecxt_scantuple = slot; + + ResetExprContext(econtext); + + return ExecQual(node->fdw_recheck_quals, econtext, false); } /* ---------------------------------------------------------------- @@ -135,6 +147,9 @@ ExecInitForeignScan(ForeignScan *node, EState *estate, int eflags) scanstate->ss.ps.qual = (List *) ExecInitExpr((Expr *) node->scan.plan.qual, (PlanState *) scanstate); + scanstate->fdw_recheck_quals = (List *) + ExecInitExpr((Expr *) node->fdw_recheck_quals, + (PlanState *) scanstate); /* * tuple table initialization diff --git a/src/backend/executor/nodeHash.c b/src/backend/executor/nodeHash.c index 906cb46b65892..5e05ec3df3701 100644 --- a/src/backend/executor/nodeHash.c +++ b/src/backend/executor/nodeHash.c @@ -131,17 +131,7 @@ MultiExecHash(HashState *node) /* resize the hash table if needed (NTUP_PER_BUCKET exceeded) */ if (hashtable->nbuckets != hashtable->nbuckets_optimal) - { - /* We never decrease the number of buckets. */ - Assert(hashtable->nbuckets_optimal > hashtable->nbuckets); - -#ifdef HJDEBUG - printf("Increasing nbuckets %d => %d\n", - hashtable->nbuckets, hashtable->nbuckets_optimal); -#endif - ExecHashIncreaseNumBuckets(hashtable); - } /* Account for the buckets in spaceUsed (reported in EXPLAIN ANALYZE) */ hashtable->spaceUsed += hashtable->nbuckets * sizeof(HashJoinTuple); @@ -425,6 +415,7 @@ ExecChooseHashTableSize(double ntuples, int tupwidth, bool useskew, long hash_table_bytes; long skew_table_bytes; long max_pointers; + long mppow2; int nbatch = 1; int nbuckets; double dbuckets; @@ -486,23 +477,37 @@ ExecChooseHashTableSize(double ntuples, int tupwidth, bool useskew, /* * Set nbuckets to achieve an average bucket load of NTUP_PER_BUCKET when - * memory is filled, assuming a single batch. The Min() step limits the - * results so that the pointer arrays we'll try to allocate do not exceed - * work_mem. + * memory is filled, assuming a single batch; but limit the value so that + * the pointer arrays we'll try to allocate do not exceed work_mem nor + * MaxAllocSize. + * + * Note that both nbuckets and nbatch must be powers of 2 to make + * ExecHashGetBucketAndBatch fast. */ - max_pointers = (work_mem * 1024L) / sizeof(void *); - /* also ensure we avoid integer overflow in nbatch and nbuckets */ + max_pointers = (work_mem * 1024L) / sizeof(HashJoinTuple); + max_pointers = Min(max_pointers, MaxAllocSize / sizeof(HashJoinTuple)); + /* If max_pointers isn't a power of 2, must round it down to one */ + mppow2 = 1L << my_log2(max_pointers); + if (max_pointers != mppow2) + max_pointers = mppow2 / 2; + + /* Also ensure we avoid integer overflow in nbatch and nbuckets */ + /* (this step is redundant given the current value of MaxAllocSize) */ max_pointers = Min(max_pointers, INT_MAX / 2); + dbuckets = ceil(ntuples / NTUP_PER_BUCKET); dbuckets = Min(dbuckets, max_pointers); - nbuckets = Max((int) dbuckets, 1024); + nbuckets = (int) dbuckets; + /* don't let nbuckets be really small, though ... */ + nbuckets = Max(nbuckets, 1024); + /* ... and force it to be a power of 2. */ nbuckets = 1 << my_log2(nbuckets); - bucket_bytes = sizeof(HashJoinTuple) * nbuckets; /* * If there's not enough space to store the projected number of tuples and * the required bucket headers, we will need multiple batches. */ + bucket_bytes = sizeof(HashJoinTuple) * nbuckets; if (inner_rel_bytes + bucket_bytes > hash_table_bytes) { /* We'll need multiple batches */ @@ -518,9 +523,10 @@ ExecChooseHashTableSize(double ntuples, int tupwidth, bool useskew, * overhead for the hash code, pointer to the next tuple, etc. */ bucket_size = (tupsize * NTUP_PER_BUCKET + sizeof(HashJoinTuple)); - lbuckets = 1 << my_log2(hash_table_bytes / bucket_size); + lbuckets = 1L << my_log2(hash_table_bytes / bucket_size); lbuckets = Min(lbuckets, max_pointers); nbuckets = (int) lbuckets; + nbuckets = 1 << my_log2(nbuckets); bucket_bytes = nbuckets * sizeof(HashJoinTuple); /* @@ -542,6 +548,9 @@ ExecChooseHashTableSize(double ntuples, int tupwidth, bool useskew, nbatch <<= 1; } + Assert(nbuckets > 0); + Assert(nbatch > 0); + *numbuckets = nbuckets; *numbatches = nbatch; } @@ -757,21 +766,18 @@ ExecHashIncreaseNumBuckets(HashJoinTable hashtable) if (hashtable->nbuckets >= hashtable->nbuckets_optimal) return; - /* - * We already know the optimal number of buckets, so let's just compute - * the log2_nbuckets for it. - */ +#ifdef HJDEBUG + printf("Increasing nbuckets %d => %d\n", + hashtable->nbuckets, hashtable->nbuckets_optimal); +#endif + hashtable->nbuckets = hashtable->nbuckets_optimal; - hashtable->log2_nbuckets = my_log2(hashtable->nbuckets_optimal); + hashtable->log2_nbuckets = hashtable->log2_nbuckets_optimal; Assert(hashtable->nbuckets > 1); Assert(hashtable->nbuckets <= (INT_MAX / 2)); Assert(hashtable->nbuckets == (1 << hashtable->log2_nbuckets)); -#ifdef HJDEBUG - printf("Increasing nbuckets to %d\n", hashtable->nbuckets); -#endif - /* * Just reallocate the proper number of buckets - we don't need to walk * through them - we can walk the dense-allocated chunks (just like in @@ -782,7 +788,7 @@ ExecHashIncreaseNumBuckets(HashJoinTable hashtable) (HashJoinTuple *) repalloc(hashtable->buckets, hashtable->nbuckets * sizeof(HashJoinTuple)); - memset(hashtable->buckets, 0, sizeof(void *) * hashtable->nbuckets); + memset(hashtable->buckets, 0, hashtable->nbuckets * sizeof(HashJoinTuple)); /* scan through all tuples in all chunks to rebuild the hash table */ for (chunk = hashtable->chunks; chunk != NULL; chunk = chunk->next) @@ -875,12 +881,16 @@ ExecHashTableInsert(HashJoinTable hashtable, * NTUP_PER_BUCKET threshold, but only when there's still a single * batch. */ - if ((hashtable->nbatch == 1) && - (hashtable->nbuckets_optimal <= INT_MAX / 2) && /* overflow protection */ - (ntuples >= (hashtable->nbuckets_optimal * NTUP_PER_BUCKET))) + if (hashtable->nbatch == 1 && + ntuples > (hashtable->nbuckets_optimal * NTUP_PER_BUCKET)) { - hashtable->nbuckets_optimal *= 2; - hashtable->log2_nbuckets_optimal += 1; + /* Guard against integer overflow and alloc size overflow */ + if (hashtable->nbuckets_optimal <= INT_MAX / 2 && + hashtable->nbuckets_optimal * 2 <= MaxAllocSize / sizeof(HashJoinTuple)) + { + hashtable->nbuckets_optimal *= 2; + hashtable->log2_nbuckets_optimal += 1; + } } /* Account for space used, and back off if we've used too much */ diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 874ca6a69bcd2..dabaea9910969 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -351,8 +351,7 @@ ExecInsert(ModifyTableState *mtstate, * * We loop back here if we find a conflict below, either during * the pre-check, or when we re-check after inserting the tuple - * speculatively. See the executor README for a full discussion - * of speculative insertion. + * speculatively. */ vlock: specConflict = false; @@ -1679,7 +1678,7 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) /* create target slot for UPDATE SET projection */ tupDesc = ExecTypeFromTL((List *) node->onConflictSet, - false); + resultRelInfo->ri_RelationDesc->rd_rel->relhasoids); mtstate->mt_conflproj = ExecInitExtraTupleSlot(mtstate->ps.state); ExecSetSlotDescriptor(mtstate->mt_conflproj, tupDesc); diff --git a/src/backend/executor/nodeSamplescan.c b/src/backend/executor/nodeSamplescan.c index 4c1c5237b7d20..dbe84b0baa868 100644 --- a/src/backend/executor/nodeSamplescan.c +++ b/src/backend/executor/nodeSamplescan.c @@ -3,7 +3,7 @@ * nodeSamplescan.c * Support routines for sample scans of relations (table sampling). * - * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -14,22 +14,23 @@ */ #include "postgres.h" -#include "access/tablesample.h" +#include "access/hash.h" +#include "access/relscan.h" +#include "access/tsmapi.h" #include "executor/executor.h" #include "executor/nodeSamplescan.h" #include "miscadmin.h" -#include "parser/parsetree.h" #include "pgstat.h" -#include "storage/bufmgr.h" #include "storage/predicate.h" #include "utils/rel.h" -#include "utils/syscache.h" #include "utils/tqual.h" -static void InitScanRelation(SampleScanState *node, EState *estate, - int eflags, TableSampleClause *tablesample); +static void InitScanRelation(SampleScanState *node, EState *estate, int eflags); static TupleTableSlot *SampleNext(SampleScanState *node); - +static void tablesample_init(SampleScanState *scanstate); +static HeapTuple tablesample_getnext(SampleScanState *scanstate); +static bool SampleTupleVisible(HeapTuple tuple, OffsetNumber tupoffset, + HeapScanDesc scan); /* ---------------------------------------------------------------- * Scan Support @@ -45,23 +46,26 @@ static TupleTableSlot *SampleNext(SampleScanState *node); static TupleTableSlot * SampleNext(SampleScanState *node) { - TupleTableSlot *slot; - TableSampleDesc *tsdesc; HeapTuple tuple; + TupleTableSlot *slot; /* - * get information from the scan state + * if this is first call within a scan, initialize */ - slot = node->ss.ss_ScanTupleSlot; - tsdesc = node->tsdesc; + if (!node->begun) + tablesample_init(node); + + /* + * get the next tuple, and store it in our result slot + */ + tuple = tablesample_getnext(node); - tuple = tablesample_getnext(tsdesc); + slot = node->ss.ss_ScanTupleSlot; if (tuple) ExecStoreTuple(tuple, /* tuple to store */ slot, /* slot to store in */ - tsdesc->heapScan->rs_cbuf, /* buffer associated - * with this tuple */ + node->ss.ss_currentScanDesc->rs_cbuf, /* tuple's buffer */ false); /* don't pfree this pointer */ else ExecClearTuple(slot); @@ -75,7 +79,10 @@ SampleNext(SampleScanState *node) static bool SampleRecheck(SampleScanState *node, TupleTableSlot *slot) { - /* No need to recheck for SampleScan */ + /* + * No need to recheck for SampleScan, since like SeqScan we don't pass any + * checkable keys to heap_beginscan. + */ return true; } @@ -103,8 +110,7 @@ ExecSampleScan(SampleScanState *node) * ---------------------------------------------------------------- */ static void -InitScanRelation(SampleScanState *node, EState *estate, int eflags, - TableSampleClause *tablesample) +InitScanRelation(SampleScanState *node, EState *estate, int eflags) { Relation currentRelation; @@ -113,19 +119,13 @@ InitScanRelation(SampleScanState *node, EState *estate, int eflags, * open that relation and acquire appropriate lock on it. */ currentRelation = ExecOpenScanRelation(estate, - ((SampleScan *) node->ss.ps.plan)->scanrelid, + ((SampleScan *) node->ss.ps.plan)->scan.scanrelid, eflags); node->ss.ss_currentRelation = currentRelation; - /* - * Even though we aren't going to do a conventional seqscan, it is useful - * to create a HeapScanDesc --- many of the fields in it are usable. - */ - node->ss.ss_currentScanDesc = - heap_beginscan_sampling(currentRelation, estate->es_snapshot, 0, NULL, - tablesample->tsmseqscan, - tablesample->tsmpagemode); + /* we won't set up the HeapScanDesc till later */ + node->ss.ss_currentScanDesc = NULL; /* and report the scan tuple slot's rowtype */ ExecAssignScanType(&node->ss, RelationGetDescr(currentRelation)); @@ -140,12 +140,11 @@ SampleScanState * ExecInitSampleScan(SampleScan *node, EState *estate, int eflags) { SampleScanState *scanstate; - RangeTblEntry *rte = rt_fetch(node->scanrelid, - estate->es_range_table); + TableSampleClause *tsc = node->tablesample; + TsmRoutine *tsm; Assert(outerPlan(node) == NULL); Assert(innerPlan(node) == NULL); - Assert(rte->tablesample != NULL); /* * create state structure @@ -165,10 +164,17 @@ ExecInitSampleScan(SampleScan *node, EState *estate, int eflags) * initialize child expressions */ scanstate->ss.ps.targetlist = (List *) - ExecInitExpr((Expr *) node->plan.targetlist, + ExecInitExpr((Expr *) node->scan.plan.targetlist, (PlanState *) scanstate); scanstate->ss.ps.qual = (List *) - ExecInitExpr((Expr *) node->plan.qual, + ExecInitExpr((Expr *) node->scan.plan.qual, + (PlanState *) scanstate); + + scanstate->args = (List *) + ExecInitExpr((Expr *) tsc->args, + (PlanState *) scanstate); + scanstate->repeatable = + ExecInitExpr(tsc->repeatable, (PlanState *) scanstate); /* @@ -180,7 +186,7 @@ ExecInitSampleScan(SampleScan *node, EState *estate, int eflags) /* * initialize scan relation */ - InitScanRelation(scanstate, estate, eflags, rte->tablesample); + InitScanRelation(scanstate, estate, eflags); scanstate->ss.ps.ps_TupFromTlist = false; @@ -190,7 +196,25 @@ ExecInitSampleScan(SampleScan *node, EState *estate, int eflags) ExecAssignResultTypeFromTL(&scanstate->ss.ps); ExecAssignScanProjectionInfo(&scanstate->ss); - scanstate->tsdesc = tablesample_init(scanstate, rte->tablesample); + /* + * If we don't have a REPEATABLE clause, select a random seed. We want to + * do this just once, since the seed shouldn't change over rescans. + */ + if (tsc->repeatable == NULL) + scanstate->seed = random(); + + /* + * Finally, initialize the TABLESAMPLE method handler. + */ + tsm = GetTsmRoutine(tsc->tsmhandler); + scanstate->tsmroutine = tsm; + scanstate->tsm_state = NULL; + + if (tsm->InitSampleScan) + tsm->InitSampleScan(scanstate, eflags); + + /* We'll do BeginSampleScan later; we can't evaluate params yet */ + scanstate->begun = false; return scanstate; } @@ -207,7 +231,8 @@ ExecEndSampleScan(SampleScanState *node) /* * Tell sampling function that we finished the scan. */ - tablesample_end(node->tsdesc); + if (node->tsmroutine->EndSampleScan) + node->tsmroutine->EndSampleScan(node); /* * Free the exprcontext @@ -223,7 +248,8 @@ ExecEndSampleScan(SampleScanState *node) /* * close heap scan */ - heap_endscan(node->ss.ss_currentScanDesc); + if (node->ss.ss_currentScanDesc) + heap_endscan(node->ss.ss_currentScanDesc); /* * close the heap relation. @@ -231,11 +257,6 @@ ExecEndSampleScan(SampleScanState *node) ExecCloseScanRelation(node->ss.ss_currentRelation); } -/* ---------------------------------------------------------------- - * Join Support - * ---------------------------------------------------------------- - */ - /* ---------------------------------------------------------------- * ExecReScanSampleScan * @@ -246,12 +267,336 @@ ExecEndSampleScan(SampleScanState *node) void ExecReScanSampleScan(SampleScanState *node) { - heap_rescan(node->ss.ss_currentScanDesc, NULL); + /* Remember we need to do BeginSampleScan again (if we did it at all) */ + node->begun = false; + + ExecScanReScan(&node->ss); +} + + +/* + * Initialize the TABLESAMPLE method: evaluate params and call BeginSampleScan. + */ +static void +tablesample_init(SampleScanState *scanstate) +{ + TsmRoutine *tsm = scanstate->tsmroutine; + ExprContext *econtext = scanstate->ss.ps.ps_ExprContext; + Datum *params; + Datum datum; + bool isnull; + uint32 seed; + bool allow_sync; + int i; + ListCell *arg; + + params = (Datum *) palloc(list_length(scanstate->args) * sizeof(Datum)); + + i = 0; + foreach(arg, scanstate->args) + { + ExprState *argstate = (ExprState *) lfirst(arg); + + params[i] = ExecEvalExprSwitchContext(argstate, + econtext, + &isnull, + NULL); + if (isnull) + ereport(ERROR, + (errcode(ERRCODE_INVALID_TABLESAMPLE_ARGUMENT), + errmsg("TABLESAMPLE parameter cannot be null"))); + i++; + } + + if (scanstate->repeatable) + { + datum = ExecEvalExprSwitchContext(scanstate->repeatable, + econtext, + &isnull, + NULL); + if (isnull) + ereport(ERROR, + (errcode(ERRCODE_INVALID_TABLESAMPLE_REPEAT), + errmsg("TABLESAMPLE REPEATABLE parameter cannot be null"))); + + /* + * The REPEATABLE parameter has been coerced to float8 by the parser. + * The reason for using float8 at the SQL level is that it will + * produce unsurprising results both for users used to databases that + * accept only integers in the REPEATABLE clause and for those who + * might expect that REPEATABLE works like setseed() (a float in the + * range from -1 to 1). + * + * We use hashfloat8() to convert the supplied value into a suitable + * seed. For regression-testing purposes, that has the convenient + * property that REPEATABLE(0) gives a machine-independent result. + */ + seed = DatumGetUInt32(DirectFunctionCall1(hashfloat8, datum)); + } + else + { + /* Use the seed selected by ExecInitSampleScan */ + seed = scanstate->seed; + } + + /* Set default values for params that BeginSampleScan can adjust */ + scanstate->use_bulkread = true; + scanstate->use_pagemode = true; + + /* Let tablesample method do its thing */ + tsm->BeginSampleScan(scanstate, + params, + list_length(scanstate->args), + seed); + + /* We'll use syncscan if there's no NextSampleBlock function */ + allow_sync = (tsm->NextSampleBlock == NULL); + + /* Now we can create or reset the HeapScanDesc */ + if (scanstate->ss.ss_currentScanDesc == NULL) + { + scanstate->ss.ss_currentScanDesc = + heap_beginscan_sampling(scanstate->ss.ss_currentRelation, + scanstate->ss.ps.state->es_snapshot, + 0, NULL, + scanstate->use_bulkread, + allow_sync, + scanstate->use_pagemode); + } + else + { + heap_rescan_set_params(scanstate->ss.ss_currentScanDesc, NULL, + scanstate->use_bulkread, + allow_sync, + scanstate->use_pagemode); + } + + pfree(params); + + /* And we're initialized. */ + scanstate->begun = true; +} + +/* + * Get next tuple from TABLESAMPLE method. + * + * Note: an awful lot of this is copied-and-pasted from heapam.c. It would + * perhaps be better to refactor to share more code. + */ +static HeapTuple +tablesample_getnext(SampleScanState *scanstate) +{ + TsmRoutine *tsm = scanstate->tsmroutine; + HeapScanDesc scan = scanstate->ss.ss_currentScanDesc; + HeapTuple tuple = &(scan->rs_ctup); + Snapshot snapshot = scan->rs_snapshot; + bool pagemode = scan->rs_pageatatime; + BlockNumber blockno; + Page page; + bool all_visible; + OffsetNumber maxoffset; + + if (!scan->rs_inited) + { + /* + * return null immediately if relation is empty + */ + if (scan->rs_nblocks == 0) + { + Assert(!BufferIsValid(scan->rs_cbuf)); + tuple->t_data = NULL; + return NULL; + } + if (tsm->NextSampleBlock) + { + blockno = tsm->NextSampleBlock(scanstate); + if (!BlockNumberIsValid(blockno)) + { + tuple->t_data = NULL; + return NULL; + } + } + else + blockno = scan->rs_startblock; + Assert(blockno < scan->rs_nblocks); + heapgetpage(scan, blockno); + scan->rs_inited = true; + } + else + { + /* continue from previously returned page/tuple */ + blockno = scan->rs_cblock; /* current page */ + } /* - * Tell sampling function to reset its state for rescan. + * When not using pagemode, we must lock the buffer during tuple + * visibility checks. */ - tablesample_reset(node->tsdesc); + if (!pagemode) + LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); + + page = (Page) BufferGetPage(scan->rs_cbuf); + all_visible = PageIsAllVisible(page) && !snapshot->takenDuringRecovery; + maxoffset = PageGetMaxOffsetNumber(page); + + for (;;) + { + OffsetNumber tupoffset; + bool finished; + + CHECK_FOR_INTERRUPTS(); + + /* Ask the tablesample method which tuples to check on this page. */ + tupoffset = tsm->NextSampleTuple(scanstate, + blockno, + maxoffset); + + if (OffsetNumberIsValid(tupoffset)) + { + ItemId itemid; + bool visible; + + /* Skip invalid tuple pointers. */ + itemid = PageGetItemId(page, tupoffset); + if (!ItemIdIsNormal(itemid)) + continue; + + tuple->t_data = (HeapTupleHeader) PageGetItem(page, itemid); + tuple->t_len = ItemIdGetLength(itemid); + ItemPointerSet(&(tuple->t_self), blockno, tupoffset); + + if (all_visible) + visible = true; + else + visible = SampleTupleVisible(tuple, tupoffset, scan); + + /* in pagemode, heapgetpage did this for us */ + if (!pagemode) + CheckForSerializableConflictOut(visible, scan->rs_rd, tuple, + scan->rs_cbuf, snapshot); + + if (visible) + { + /* Found visible tuple, return it. */ + if (!pagemode) + LockBuffer(scan->rs_cbuf, BUFFER_LOCK_UNLOCK); + break; + } + else + { + /* Try next tuple from same page. */ + continue; + } + } + + /* + * if we get here, it means we've exhausted the items on this page and + * it's time to move to the next. + */ + if (!pagemode) + LockBuffer(scan->rs_cbuf, BUFFER_LOCK_UNLOCK); + + if (tsm->NextSampleBlock) + { + blockno = tsm->NextSampleBlock(scanstate); + Assert(!scan->rs_syncscan); + finished = !BlockNumberIsValid(blockno); + } + else + { + /* Without NextSampleBlock, just do a plain forward seqscan. */ + blockno++; + if (blockno >= scan->rs_nblocks) + blockno = 0; + + /* + * Report our new scan position for synchronization purposes. + * + * Note: we do this before checking for end of scan so that the + * final state of the position hint is back at the start of the + * rel. That's not strictly necessary, but otherwise when you run + * the same query multiple times the starting position would shift + * a little bit backwards on every invocation, which is confusing. + * We don't guarantee any specific ordering in general, though. + */ + if (scan->rs_syncscan) + ss_report_location(scan->rs_rd, blockno); + + finished = (blockno == scan->rs_startblock); + } + + /* + * Reached end of scan? + */ + if (finished) + { + if (BufferIsValid(scan->rs_cbuf)) + ReleaseBuffer(scan->rs_cbuf); + scan->rs_cbuf = InvalidBuffer; + scan->rs_cblock = InvalidBlockNumber; + tuple->t_data = NULL; + scan->rs_inited = false; + return NULL; + } + + Assert(blockno < scan->rs_nblocks); + heapgetpage(scan, blockno); + + /* Re-establish state for new page */ + if (!pagemode) + LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); + + page = (Page) BufferGetPage(scan->rs_cbuf); + all_visible = PageIsAllVisible(page) && !snapshot->takenDuringRecovery; + maxoffset = PageGetMaxOffsetNumber(page); + } + + /* Count successfully-fetched tuples as heap fetches */ + pgstat_count_heap_getnext(scan->rs_rd); + + return &(scan->rs_ctup); +} - ExecScanReScan(&node->ss); +/* + * Check visibility of the tuple. + */ +static bool +SampleTupleVisible(HeapTuple tuple, OffsetNumber tupoffset, HeapScanDesc scan) +{ + if (scan->rs_pageatatime) + { + /* + * In pageatatime mode, heapgetpage() already did visibility checks, + * so just look at the info it left in rs_vistuples[]. + * + * We use a binary search over the known-sorted array. Note: we could + * save some effort if we insisted that NextSampleTuple select tuples + * in increasing order, but it's not clear that there would be enough + * gain to justify the restriction. + */ + int start = 0, + end = scan->rs_ntuples - 1; + + while (start <= end) + { + int mid = (start + end) / 2; + OffsetNumber curoffset = scan->rs_vistuples[mid]; + + if (tupoffset == curoffset) + return true; + else if (tupoffset < curoffset) + end = mid - 1; + else + start = mid + 1; + } + + return false; + } + else + { + /* Otherwise, we have to check the tuple individually. */ + return HeapTupleSatisfiesVisibility(tuple, + scan->rs_snapshot, + scan->rs_cbuf); + } } diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c index d544ad9c1062c..300401e01f984 100644 --- a/src/backend/executor/spi.c +++ b/src/backend/executor/spi.c @@ -1797,7 +1797,8 @@ spi_printtup(TupleTableSlot *slot, DestReceiver *self) if (tuptable->free == 0) { - tuptable->free = 256; + /* Double the size of the pointer array */ + tuptable->free = tuptable->alloced; tuptable->alloced += tuptable->free; tuptable->vals = (HeapTuple *) repalloc(tuptable->vals, tuptable->alloced * sizeof(HeapTuple)); diff --git a/src/backend/lib/bipartite_match.c b/src/backend/lib/bipartite_match.c index 037dd1de30b82..317222f57acea 100644 --- a/src/backend/lib/bipartite_match.c +++ b/src/backend/lib/bipartite_match.c @@ -16,17 +16,20 @@ */ #include "postgres.h" -#include -#include #include #include "lib/bipartite_match.h" #include "miscadmin.h" -#include "utils/builtins.h" +/* + * The distances computed in hk_breadth_search can easily be seen to never + * exceed u_size. Since we restrict u_size to be less than SHRT_MAX, we + * can therefore use SHRT_MAX as the "infinity" distance needed as a marker. + */ +#define HK_INFINITY SHRT_MAX static bool hk_breadth_search(BipartiteMatchState *state); -static bool hk_depth_search(BipartiteMatchState *state, int u, int depth); +static bool hk_depth_search(BipartiteMatchState *state, int u); /* * Given the size of U and V, where each is indexed 1..size, and an adjacency @@ -37,26 +40,29 @@ BipartiteMatch(int u_size, int v_size, short **adjacency) { BipartiteMatchState *state = palloc(sizeof(BipartiteMatchState)); - Assert(u_size < SHRT_MAX); - Assert(v_size < SHRT_MAX); + if (u_size < 0 || u_size >= SHRT_MAX || + v_size < 0 || v_size >= SHRT_MAX) + elog(ERROR, "invalid set size for BipartiteMatch"); state->u_size = u_size; state->v_size = v_size; - state->matching = 0; state->adjacency = adjacency; - state->pair_uv = palloc0((u_size + 1) * sizeof(short)); - state->pair_vu = palloc0((v_size + 1) * sizeof(short)); - state->distance = palloc((u_size + 1) * sizeof(float)); - state->queue = palloc((u_size + 2) * sizeof(short)); + state->matching = 0; + state->pair_uv = (short *) palloc0((u_size + 1) * sizeof(short)); + state->pair_vu = (short *) palloc0((v_size + 1) * sizeof(short)); + state->distance = (short *) palloc((u_size + 1) * sizeof(short)); + state->queue = (short *) palloc((u_size + 2) * sizeof(short)); while (hk_breadth_search(state)) { int u; - for (u = 1; u <= u_size; ++u) + for (u = 1; u <= u_size; u++) + { if (state->pair_uv[u] == 0) - if (hk_depth_search(state, u, 1)) + if (hk_depth_search(state, u)) state->matching++; + } CHECK_FOR_INTERRUPTS(); /* just in case */ } @@ -79,19 +85,23 @@ BipartiteMatchFree(BipartiteMatchState *state) pfree(state); } +/* + * Perform the breadth-first search step of H-K matching. + * Returns true if successful. + */ static bool hk_breadth_search(BipartiteMatchState *state) { int usize = state->u_size; short *queue = state->queue; - float *distance = state->distance; + short *distance = state->distance; int qhead = 0; /* we never enqueue any node more than once */ int qtail = 0; /* so don't have to worry about wrapping */ int u; - distance[0] = get_float4_infinity(); + distance[0] = HK_INFINITY; - for (u = 1; u <= usize; ++u) + for (u = 1; u <= usize; u++) { if (state->pair_uv[u] == 0) { @@ -99,7 +109,7 @@ hk_breadth_search(BipartiteMatchState *state) queue[qhead++] = u; } else - distance[u] = get_float4_infinity(); + distance[u] = HK_INFINITY; } while (qtail < qhead) @@ -111,45 +121,52 @@ hk_breadth_search(BipartiteMatchState *state) short *u_adj = state->adjacency[u]; int i = u_adj ? u_adj[0] : 0; - for (; i > 0; --i) + for (; i > 0; i--) { int u_next = state->pair_vu[u_adj[i]]; - if (isinf(distance[u_next])) + if (distance[u_next] == HK_INFINITY) { distance[u_next] = 1 + distance[u]; + Assert(qhead < usize + 2); queue[qhead++] = u_next; - Assert(qhead <= usize + 2); } } } } - return !isinf(distance[0]); + return (distance[0] != HK_INFINITY); } +/* + * Perform the depth-first search step of H-K matching. + * Returns true if successful. + */ static bool -hk_depth_search(BipartiteMatchState *state, int u, int depth) +hk_depth_search(BipartiteMatchState *state, int u) { - float *distance = state->distance; + short *distance = state->distance; short *pair_uv = state->pair_uv; short *pair_vu = state->pair_vu; short *u_adj = state->adjacency[u]; int i = u_adj ? u_adj[0] : 0; + short nextdist; if (u == 0) return true; + if (distance[u] == HK_INFINITY) + return false; + nextdist = distance[u] + 1; - if ((depth % 8) == 0) - check_stack_depth(); + check_stack_depth(); - for (; i > 0; --i) + for (; i > 0; i--) { int v = u_adj[i]; - if (distance[pair_vu[v]] == distance[u] + 1) + if (distance[pair_vu[v]] == nextdist) { - if (hk_depth_search(state, pair_vu[v], depth + 1)) + if (hk_depth_search(state, pair_vu[v])) { pair_vu[v] = u; pair_uv[u] = v; @@ -158,6 +175,6 @@ hk_depth_search(BipartiteMatchState *state, int u, int depth) } } - distance[u] = get_float4_infinity(); + distance[u] = HK_INFINITY; return false; } diff --git a/src/backend/lib/pairingheap.c b/src/backend/lib/pairingheap.c index 3d8a5ea56189c..7ca35452ded66 100644 --- a/src/backend/lib/pairingheap.c +++ b/src/backend/lib/pairingheap.c @@ -306,7 +306,7 @@ pairingheap_dump_recurse(StringInfo buf, appendStringInfoSpaces(buf, depth * 4); dumpfunc(node, buf, opaque); - appendStringInfoString(buf, "\n"); + appendStringInfoChar(buf, '\n'); if (node->first_child) pairingheap_dump_recurse(buf, node->first_child, dumpfunc, opaque, depth + 1, node); prev_or_parent = node; diff --git a/src/backend/libpq/be-secure-openssl.c b/src/backend/libpq/be-secure-openssl.c index f0774fe8c9529..e9bc282d2e720 100644 --- a/src/backend/libpq/be-secure-openssl.c +++ b/src/backend/libpq/be-secure-openssl.c @@ -16,12 +16,8 @@ * backend can restart automatically, it is important that * we select an algorithm that continues to provide confidentiality * even if the attacker has the server's private key. Ephemeral - * DH (EDH) keys provide this, and in fact provide Perfect Forward - * Secrecy (PFS) except for situations where the session can - * be hijacked during a periodic handshake/renegotiation. - * Even that backdoor can be closed if client certificates - * are used (since the imposter will be unable to successfully - * complete renegotiation). + * DH (EDH) keys provide this and more (Perfect Forward Secrecy + * aka PFS). * * N.B., the static private key should still be protected to * the largest extent possible, to minimize the risk of @@ -37,12 +33,6 @@ * session. In this case you'll need to temporarily disable * EDH by commenting out the callback. * - * ... - * - * Because the risk of cryptanalysis increases as large - * amounts of data are sent with the same session key, the - * session keys are periodically renegotiated. - * *------------------------------------------------------------------------- */ @@ -92,9 +82,6 @@ static const char *SSLerrmessage(void); static char *X509_NAME_to_cstring(X509_NAME *name); -/* are we in the middle of a renegotiation? */ -static bool in_ssl_renegotiation = false; - static SSL_CTX *SSL_context = NULL; /* ------------------------------------------------------------ */ @@ -570,37 +557,6 @@ be_tls_write(Port *port, void *ptr, size_t len, int *waitfor) ssize_t n; int err; - /* - * If SSL renegotiations are enabled and we're getting close to the limit, - * start one now; but avoid it if there's one already in progress. - * Request the renegotiation 1kB before the limit has actually expired. - */ - if (ssl_renegotiation_limit && !in_ssl_renegotiation && - port->count > (ssl_renegotiation_limit - 1) * 1024L) - { - in_ssl_renegotiation = true; - - /* - * The way we determine that a renegotiation has completed is by - * observing OpenSSL's internal renegotiation counter. Make sure we - * start out at zero, and assume that the renegotiation is complete - * when the counter advances. - * - * OpenSSL provides SSL_renegotiation_pending(), but this doesn't seem - * to work in testing. - */ - SSL_clear_num_renegotiations(port->ssl); - - /* without this, renegotiation fails when a client cert is used */ - SSL_set_session_id_context(port->ssl, (void *) &SSL_context, - sizeof(SSL_context)); - - if (SSL_renegotiate(port->ssl) <= 0) - ereport(COMMERROR, - (errcode(ERRCODE_PROTOCOL_VIOLATION), - errmsg("SSL failure during renegotiation start"))); - } - errno = 0; n = SSL_write(port->ssl, ptr, len); err = SSL_get_error(port->ssl, n); @@ -646,28 +602,6 @@ be_tls_write(Port *port, void *ptr, size_t len, int *waitfor) break; } - if (n >= 0) - { - /* is renegotiation complete? */ - if (in_ssl_renegotiation && - SSL_num_renegotiations(port->ssl) >= 1) - { - in_ssl_renegotiation = false; - port->count = 0; - } - - /* - * if renegotiation is still ongoing, and we've gone beyond the limit, - * kill the connection now -- continuing to use it can be considered a - * security problem. - */ - if (in_ssl_renegotiation && - port->count > ssl_renegotiation_limit * 1024L) - ereport(FATAL, - (errcode(ERRCODE_PROTOCOL_VIOLATION), - errmsg("SSL failed to renegotiate connection before limit expired"))); - } - return n; } diff --git a/src/backend/libpq/be-secure.c b/src/backend/libpq/be-secure.c index 4a650cc001254..26d8faaf773a8 100644 --- a/src/backend/libpq/be-secure.c +++ b/src/backend/libpq/be-secure.c @@ -43,13 +43,6 @@ char *ssl_key_file; char *ssl_ca_file; char *ssl_crl_file; -/* - * How much data can be sent across a secure connection - * (total in both directions) before we require renegotiation. - * Set to 0 to disable renegotiation completely. - */ -int ssl_renegotiation_limit; - #ifdef USE_SSL bool ssl_loaded_verify_locations = false; #endif diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index a4b37ed5a263c..279df936cf9f7 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -174,12 +174,15 @@ PQcommMethods *PqCommMethods = &PqCommSocketMethods; void pq_init(void) { + /* initialize state variables */ PqSendBufferSize = PQ_SEND_BUFFER_SIZE; PqSendBuffer = MemoryContextAlloc(TopMemoryContext, PqSendBufferSize); PqSendPointer = PqSendStart = PqRecvPointer = PqRecvLength = 0; PqCommBusy = false; PqCommReadingMsg = false; DoingCopyOut = false; + + /* set up process-exit hook to close the socket */ on_proc_exit(socket_close, 0); /* @@ -285,28 +288,6 @@ socket_close(int code, Datum arg) */ -/* StreamDoUnlink() - * Shutdown routine for backend connection - * If any Unix sockets are used for communication, explicitly close them. - */ -#ifdef HAVE_UNIX_SOCKETS -static void -StreamDoUnlink(int code, Datum arg) -{ - ListCell *l; - - /* Loop through all created sockets... */ - foreach(l, sock_paths) - { - char *sock_path = (char *) lfirst(l); - - unlink(sock_path); - } - /* Since we're about to exit, no need to reclaim storage */ - sock_paths = NIL; -} -#endif /* HAVE_UNIX_SOCKETS */ - /* * StreamServerPort -- open a "listening" port to accept connections. * @@ -588,16 +569,11 @@ Lock_AF_UNIX(char *unixSocketDir, char *unixSocketPath) * Once we have the interlock, we can safely delete any pre-existing * socket file to avoid failure at bind() time. */ - unlink(unixSocketPath); + (void) unlink(unixSocketPath); /* - * Arrange to unlink the socket file(s) at proc_exit. If this is the - * first one, set up the on_proc_exit function to do it; then add this - * socket file to the list of files to unlink. + * Remember socket file pathnames for later maintenance. */ - if (sock_paths == NIL) - on_proc_exit(StreamDoUnlink, 0); - sock_paths = lappend(sock_paths, pstrdup(unixSocketPath)); return STATUS_OK; @@ -826,6 +802,26 @@ TouchSocketFiles(void) } } +/* + * RemoveSocketFiles -- unlink socket files at postmaster shutdown + */ +void +RemoveSocketFiles(void) +{ + ListCell *l; + + /* Loop through all created sockets... */ + foreach(l, sock_paths) + { + char *sock_path = (char *) lfirst(l); + + /* Ignore any error. */ + (void) unlink(sock_path); + } + /* Since we're about to exit, no need to reclaim storage */ + sock_paths = NIL; +} + /* -------------------------------- * Low-level I/O routines begin here. diff --git a/src/backend/libpq/pqmq.c b/src/backend/libpq/pqmq.c index 9ca6b7ce0d1b7..0a3c2b70cbe46 100644 --- a/src/backend/libpq/pqmq.c +++ b/src/backend/libpq/pqmq.c @@ -26,6 +26,7 @@ static bool pq_mq_busy = false; static pid_t pq_mq_parallel_master_pid = 0; static pid_t pq_mq_parallel_master_backend_id = InvalidBackendId; +static void pq_cleanup_redirect_to_shm_mq(dsm_segment *seg, Datum arg); static void mq_comm_reset(void); static int mq_flush(void); static int mq_flush_if_writable(void); @@ -51,13 +52,26 @@ static PQcommMethods PqCommMqMethods = { * message queue. */ void -pq_redirect_to_shm_mq(shm_mq *mq, shm_mq_handle *mqh) +pq_redirect_to_shm_mq(dsm_segment *seg, shm_mq_handle *mqh) { PqCommMethods = &PqCommMqMethods; - pq_mq = mq; + pq_mq = shm_mq_get_queue(mqh); pq_mq_handle = mqh; whereToSendOutput = DestRemote; FrontendProtocol = PG_PROTOCOL_LATEST; + on_dsm_detach(seg, pq_cleanup_redirect_to_shm_mq, (Datum) 0); +} + +/* + * When the DSM that contains our shm_mq goes away, we need to stop sending + * messages to it. + */ +static void +pq_cleanup_redirect_to_shm_mq(dsm_segment *seg, Datum arg) +{ + pq_mq = NULL; + pq_mq_handle = NULL; + whereToSendOutput = DestNone; } /* @@ -123,9 +137,19 @@ mq_putmessage(char msgtype, const char *s, size_t len) if (pq_mq != NULL) shm_mq_detach(pq_mq); pq_mq = NULL; + pq_mq_handle = NULL; return EOF; } + /* + * If the message queue is already gone, just ignore the message. This + * doesn't necessarily indicate a problem; for example, DEBUG messages + * can be generated late in the shutdown sequence, after all DSMs have + * already been detached. + */ + if (pq_mq == NULL) + return 0; + pq_mq_busy = true; iov[0].data = &msgtype; diff --git a/src/backend/main/main.c b/src/backend/main/main.c index 2ecadd660cfda..4fad6f3dc5545 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -149,6 +149,8 @@ main(int argc, char *argv[]) */ unsetenv("LC_ALL"); + check_strxfrm_bug(); + /* * Catch standard options before doing much else, in particular before we * insist on not being root. diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 4c363d3d39a9e..e19fee4c3181b 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -359,6 +359,27 @@ _copySeqScan(const SeqScan *from) return newnode; } +/* + * _copySampleScan + */ +static SampleScan * +_copySampleScan(const SampleScan *from) +{ + SampleScan *newnode = makeNode(SampleScan); + + /* + * copy node superclass fields + */ + CopyScanFields((const Scan *) from, (Scan *) newnode); + + /* + * copy remainder of node + */ + COPY_NODE_FIELD(tablesample); + + return newnode; +} + /* * _copyIndexScan */ @@ -603,6 +624,7 @@ _copyForeignScan(const ForeignScan *from) COPY_NODE_FIELD(fdw_exprs); COPY_NODE_FIELD(fdw_private); COPY_NODE_FIELD(fdw_scan_tlist); + COPY_NODE_FIELD(fdw_recheck_quals); COPY_BITMAPSET_FIELD(fs_relids); COPY_SCALAR_FIELD(fsSystemCol); @@ -626,6 +648,7 @@ _copyCustomScan(const CustomScan *from) * copy remainder of node */ COPY_SCALAR_FIELD(flags); + COPY_NODE_FIELD(custom_plans); COPY_NODE_FIELD(custom_exprs); COPY_NODE_FIELD(custom_private); COPY_NODE_FIELD(custom_scan_tlist); @@ -641,22 +664,6 @@ _copyCustomScan(const CustomScan *from) return newnode; } -/* - * _copySampleScan - */ -static SampleScan * -_copySampleScan(const SampleScan *from) -{ - SampleScan *newnode = makeNode(SampleScan); - - /* - * copy node superclass fields - */ - CopyScanFields((const Scan *) from, (Scan *) newnode); - - return newnode; -} - /* * CopyJoinFields * @@ -1920,9 +1927,9 @@ _copyOnConflictExpr(const OnConflictExpr *from) COPY_SCALAR_FIELD(action); COPY_NODE_FIELD(arbiterElems); COPY_NODE_FIELD(arbiterWhere); + COPY_SCALAR_FIELD(constraint); COPY_NODE_FIELD(onConflictSet); COPY_NODE_FIELD(onConflictWhere); - COPY_SCALAR_FIELD(constraint); COPY_SCALAR_FIELD(exclRelIndex); COPY_NODE_FIELD(exclRelTlist); @@ -2143,6 +2150,18 @@ _copyRangeTblFunction(const RangeTblFunction *from) return newnode; } +static TableSampleClause * +_copyTableSampleClause(const TableSampleClause *from) +{ + TableSampleClause *newnode = makeNode(TableSampleClause); + + COPY_SCALAR_FIELD(tsmhandler); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(repeatable); + + return newnode; +} + static WithCheckOption * _copyWithCheckOption(const WithCheckOption *from) { @@ -2150,6 +2169,7 @@ _copyWithCheckOption(const WithCheckOption *from) COPY_SCALAR_FIELD(kind); COPY_STRING_FIELD(relname); + COPY_STRING_FIELD(polname); COPY_NODE_FIELD(qual); COPY_SCALAR_FIELD(cascaded); @@ -2271,40 +2291,6 @@ _copyCommonTableExpr(const CommonTableExpr *from) return newnode; } -static RangeTableSample * -_copyRangeTableSample(const RangeTableSample *from) -{ - RangeTableSample *newnode = makeNode(RangeTableSample); - - COPY_NODE_FIELD(relation); - COPY_STRING_FIELD(method); - COPY_NODE_FIELD(repeatable); - COPY_NODE_FIELD(args); - - return newnode; -} - -static TableSampleClause * -_copyTableSampleClause(const TableSampleClause *from) -{ - TableSampleClause *newnode = makeNode(TableSampleClause); - - COPY_SCALAR_FIELD(tsmid); - COPY_SCALAR_FIELD(tsmseqscan); - COPY_SCALAR_FIELD(tsmpagemode); - COPY_SCALAR_FIELD(tsminit); - COPY_SCALAR_FIELD(tsmnextblock); - COPY_SCALAR_FIELD(tsmnexttuple); - COPY_SCALAR_FIELD(tsmexaminetuple); - COPY_SCALAR_FIELD(tsmend); - COPY_SCALAR_FIELD(tsmreset); - COPY_SCALAR_FIELD(tsmcost); - COPY_NODE_FIELD(repeatable); - COPY_NODE_FIELD(args); - - return newnode; -} - static A_Expr * _copyAExpr(const A_Expr *from) { @@ -2532,6 +2518,20 @@ _copyRangeFunction(const RangeFunction *from) return newnode; } +static RangeTableSample * +_copyRangeTableSample(const RangeTableSample *from) +{ + RangeTableSample *newnode = makeNode(RangeTableSample); + + COPY_NODE_FIELD(relation); + COPY_NODE_FIELD(method); + COPY_NODE_FIELD(args); + COPY_NODE_FIELD(repeatable); + COPY_LOCATION_FIELD(location); + + return newnode; +} + static TypeCast * _copyTypeCast(const TypeCast *from) { @@ -2702,7 +2702,6 @@ _copyQuery(const Query *from) COPY_NODE_FIELD(rtable); COPY_NODE_FIELD(jointree); COPY_NODE_FIELD(targetList); - COPY_NODE_FIELD(withCheckOptions); COPY_NODE_FIELD(onConflict); COPY_NODE_FIELD(returningList); COPY_NODE_FIELD(groupClause); @@ -2716,6 +2715,7 @@ _copyQuery(const Query *from) COPY_NODE_FIELD(rowMarks); COPY_NODE_FIELD(setOperations); COPY_NODE_FIELD(constraintDeps); + COPY_NODE_FIELD(withCheckOptions); return newnode; } @@ -4073,7 +4073,7 @@ _copyCreatePolicyStmt(const CreatePolicyStmt *from) COPY_STRING_FIELD(policy_name); COPY_NODE_FIELD(table); - COPY_SCALAR_FIELD(cmd); + COPY_STRING_FIELD(cmd_name); COPY_NODE_FIELD(roles); COPY_NODE_FIELD(qual); COPY_NODE_FIELD(with_check); @@ -4225,6 +4225,9 @@ copyObject(const void *from) case T_SeqScan: retval = _copySeqScan(from); break; + case T_SampleScan: + retval = _copySampleScan(from); + break; case T_IndexScan: retval = _copyIndexScan(from); break; @@ -4261,9 +4264,6 @@ copyObject(const void *from) case T_CustomScan: retval = _copyCustomScan(from); break; - case T_SampleScan: - retval = _copySampleScan(from); - break; case T_Join: retval = _copyJoin(from); break; @@ -4882,6 +4882,9 @@ copyObject(const void *from) case T_RangeFunction: retval = _copyRangeFunction(from); break; + case T_RangeTableSample: + retval = _copyRangeTableSample(from); + break; case T_TypeName: retval = _copyTypeName(from); break; @@ -4906,6 +4909,9 @@ copyObject(const void *from) case T_RangeTblFunction: retval = _copyRangeTblFunction(from); break; + case T_TableSampleClause: + retval = _copyTableSampleClause(from); + break; case T_WithCheckOption: retval = _copyWithCheckOption(from); break; @@ -4933,12 +4939,6 @@ copyObject(const void *from) case T_CommonTableExpr: retval = _copyCommonTableExpr(from); break; - case T_RangeTableSample: - retval = _copyRangeTableSample(from); - break; - case T_TableSampleClause: - retval = _copyTableSampleClause(from); - break; case T_FuncWithArgs: retval = _copyFuncWithArgs(from); break; diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index f19251e7c415f..fcdb3d02837b2 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -759,9 +759,9 @@ _equalOnConflictExpr(const OnConflictExpr *a, const OnConflictExpr *b) COMPARE_SCALAR_FIELD(action); COMPARE_NODE_FIELD(arbiterElems); COMPARE_NODE_FIELD(arbiterWhere); + COMPARE_SCALAR_FIELD(constraint); COMPARE_NODE_FIELD(onConflictSet); COMPARE_NODE_FIELD(onConflictWhere); - COMPARE_SCALAR_FIELD(constraint); COMPARE_SCALAR_FIELD(exclRelIndex); COMPARE_NODE_FIELD(exclRelTlist); @@ -906,7 +906,6 @@ _equalQuery(const Query *a, const Query *b) COMPARE_NODE_FIELD(rtable); COMPARE_NODE_FIELD(jointree); COMPARE_NODE_FIELD(targetList); - COMPARE_NODE_FIELD(withCheckOptions); COMPARE_NODE_FIELD(onConflict); COMPARE_NODE_FIELD(returningList); COMPARE_NODE_FIELD(groupClause); @@ -920,6 +919,7 @@ _equalQuery(const Query *a, const Query *b) COMPARE_NODE_FIELD(rowMarks); COMPARE_NODE_FIELD(setOperations); COMPARE_NODE_FIELD(constraintDeps); + COMPARE_NODE_FIELD(withCheckOptions); return true; } @@ -1858,8 +1858,8 @@ _equalCreateEventTrigStmt(const CreateEventTrigStmt *a, const CreateEventTrigStm { COMPARE_STRING_FIELD(trigname); COMPARE_STRING_FIELD(eventname); - COMPARE_NODE_FIELD(funcname); COMPARE_NODE_FIELD(whenclause); + COMPARE_NODE_FIELD(funcname); return true; } @@ -2064,7 +2064,7 @@ _equalCreatePolicyStmt(const CreatePolicyStmt *a, const CreatePolicyStmt *b) { COMPARE_STRING_FIELD(policy_name); COMPARE_NODE_FIELD(table); - COMPARE_SCALAR_FIELD(cmd); + COMPARE_STRING_FIELD(cmd_name); COMPARE_NODE_FIELD(roles); COMPARE_NODE_FIELD(qual); COMPARE_NODE_FIELD(with_check); @@ -2280,6 +2280,18 @@ _equalRangeFunction(const RangeFunction *a, const RangeFunction *b) return true; } +static bool +_equalRangeTableSample(const RangeTableSample *a, const RangeTableSample *b) +{ + COMPARE_NODE_FIELD(relation); + COMPARE_NODE_FIELD(method); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(repeatable); + COMPARE_LOCATION_FIELD(location); + + return true; +} + static bool _equalIndexElem(const IndexElem *a, const IndexElem *b) { @@ -2418,11 +2430,22 @@ _equalRangeTblFunction(const RangeTblFunction *a, const RangeTblFunction *b) return true; } +static bool +_equalTableSampleClause(const TableSampleClause *a, const TableSampleClause *b) +{ + COMPARE_SCALAR_FIELD(tsmhandler); + COMPARE_NODE_FIELD(args); + COMPARE_NODE_FIELD(repeatable); + + return true; +} + static bool _equalWithCheckOption(const WithCheckOption *a, const WithCheckOption *b) { COMPARE_SCALAR_FIELD(kind); COMPARE_STRING_FIELD(relname); + COMPARE_STRING_FIELD(polname); COMPARE_NODE_FIELD(qual); COMPARE_SCALAR_FIELD(cascaded); @@ -2528,36 +2551,6 @@ _equalCommonTableExpr(const CommonTableExpr *a, const CommonTableExpr *b) return true; } -static bool -_equalRangeTableSample(const RangeTableSample *a, const RangeTableSample *b) -{ - COMPARE_NODE_FIELD(relation); - COMPARE_STRING_FIELD(method); - COMPARE_NODE_FIELD(repeatable); - COMPARE_NODE_FIELD(args); - - return true; -} - -static bool -_equalTableSampleClause(const TableSampleClause *a, const TableSampleClause *b) -{ - COMPARE_SCALAR_FIELD(tsmid); - COMPARE_SCALAR_FIELD(tsmseqscan); - COMPARE_SCALAR_FIELD(tsmpagemode); - COMPARE_SCALAR_FIELD(tsminit); - COMPARE_SCALAR_FIELD(tsmnextblock); - COMPARE_SCALAR_FIELD(tsmnexttuple); - COMPARE_SCALAR_FIELD(tsmexaminetuple); - COMPARE_SCALAR_FIELD(tsmend); - COMPARE_SCALAR_FIELD(tsmreset); - COMPARE_SCALAR_FIELD(tsmcost); - COMPARE_NODE_FIELD(repeatable); - COMPARE_NODE_FIELD(args); - - return true; -} - static bool _equalXmlSerialize(const XmlSerialize *a, const XmlSerialize *b) { @@ -3247,6 +3240,9 @@ equal(const void *a, const void *b) case T_RangeFunction: retval = _equalRangeFunction(a, b); break; + case T_RangeTableSample: + retval = _equalRangeTableSample(a, b); + break; case T_TypeName: retval = _equalTypeName(a, b); break; @@ -3271,6 +3267,9 @@ equal(const void *a, const void *b) case T_RangeTblFunction: retval = _equalRangeTblFunction(a, b); break; + case T_TableSampleClause: + retval = _equalTableSampleClause(a, b); + break; case T_WithCheckOption: retval = _equalWithCheckOption(a, b); break; @@ -3298,12 +3297,6 @@ equal(const void *a, const void *b) case T_CommonTableExpr: retval = _equalCommonTableExpr(a, b); break; - case T_RangeTableSample: - retval = _equalRangeTableSample(a, b); - break; - case T_TableSampleClause: - retval = _equalTableSampleClause(a, b); - break; case T_FuncWithArgs: retval = _equalFuncWithArgs(a, b); break; diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c index b1e3e6e489320..c517dfd9d69c6 100644 --- a/src/backend/nodes/nodeFuncs.c +++ b/src/backend/nodes/nodeFuncs.c @@ -1486,6 +1486,9 @@ exprLocation(const Node *expr) case T_WindowDef: loc = ((const WindowDef *) expr)->location; break; + case T_RangeTableSample: + loc = ((const RangeTableSample *) expr)->location; + break; case T_TypeName: loc = ((const TypeName *) expr)->location; break; @@ -1995,6 +1998,17 @@ expression_tree_walker(Node *node, return walker(((PlaceHolderInfo *) node)->ph_var, context); case T_RangeTblFunction: return walker(((RangeTblFunction *) node)->funcexpr, context); + case T_TableSampleClause: + { + TableSampleClause *tsc = (TableSampleClause *) node; + + if (expression_tree_walker((Node *) tsc->args, + walker, context)) + return true; + if (walker((Node *) tsc->repeatable, context)) + return true; + } + break; default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); @@ -2082,13 +2096,8 @@ range_table_walker(List *rtable, switch (rte->rtekind) { case RTE_RELATION: - if (rte->tablesample) - { - if (walker(rte->tablesample->args, context)) - return true; - if (walker(rte->tablesample->repeatable, context)) - return true; - } + if (walker(rte->tablesample, context)) + return true; break; case RTE_CTE: /* nothing to do */ @@ -2782,6 +2791,17 @@ expression_tree_mutator(Node *node, return (Node *) newnode; } break; + case T_TableSampleClause: + { + TableSampleClause *tsc = (TableSampleClause *) node; + TableSampleClause *newnode; + + FLATCOPY(newnode, tsc, TableSampleClause); + MUTATE(newnode->args, tsc->args, List *); + MUTATE(newnode->repeatable, tsc->repeatable, Expr *); + return (Node *) newnode; + } + break; default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); @@ -2868,20 +2888,12 @@ range_table_mutator(List *rtable, switch (rte->rtekind) { case RTE_RELATION: - if (rte->tablesample) - { - CHECKFLATCOPY(newrte->tablesample, rte->tablesample, - TableSampleClause); - MUTATE(newrte->tablesample->args, - newrte->tablesample->args, - List *); - MUTATE(newrte->tablesample->repeatable, - newrte->tablesample->repeatable, - Node *); - } + MUTATE(newrte->tablesample, rte->tablesample, + TableSampleClause *); + /* we don't bother to copy eref, aliases, etc; OK? */ break; case RTE_CTE: - /* we don't bother to copy eref, aliases, etc; OK? */ + /* nothing to do */ break; case RTE_SUBQUERY: if (!(flags & QTW_IGNORE_RT_SUBQUERIES)) @@ -3316,6 +3328,19 @@ raw_expression_tree_walker(Node *node, return true; } break; + case T_RangeTableSample: + { + RangeTableSample *rts = (RangeTableSample *) node; + + if (walker(rts->relation, context)) + return true; + /* method name is deemed uninteresting */ + if (walker(rts->args, context)) + return true; + if (walker(rts->repeatable, context)) + return true; + } + break; case T_TypeName: { TypeName *tn = (TypeName *) node; @@ -3380,18 +3405,6 @@ raw_expression_tree_walker(Node *node, break; case T_CommonTableExpr: return walker(((CommonTableExpr *) node)->ctequery, context); - case T_RangeTableSample: - { - RangeTableSample *rts = (RangeTableSample *) node; - - if (walker(rts->relation, context)) - return true; - if (walker(rts->repeatable, context)) - return true; - if (walker(rts->args, context)) - return true; - } - break; default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 87304ba9bf65d..b39c772209bda 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -341,7 +341,7 @@ _outModifyTable(StringInfo str, const ModifyTable *node) WRITE_NODE_FIELD(arbiterIndexes); WRITE_NODE_FIELD(onConflictSet); WRITE_NODE_FIELD(onConflictWhere); - WRITE_INT_FIELD(exclRelRTI); + WRITE_UINT_FIELD(exclRelRTI); WRITE_NODE_FIELD(exclRelTlist); } @@ -444,6 +444,16 @@ _outSeqScan(StringInfo str, const SeqScan *node) _outScanInfo(str, (const Scan *) node); } +static void +_outSampleScan(StringInfo str, const SampleScan *node) +{ + WRITE_NODE_TYPE("SAMPLESCAN"); + + _outScanInfo(str, (const Scan *) node); + + WRITE_NODE_FIELD(tablesample); +} + static void _outIndexScan(StringInfo str, const IndexScan *node) { @@ -569,6 +579,7 @@ _outForeignScan(StringInfo str, const ForeignScan *node) WRITE_NODE_FIELD(fdw_exprs); WRITE_NODE_FIELD(fdw_private); WRITE_NODE_FIELD(fdw_scan_tlist); + WRITE_NODE_FIELD(fdw_recheck_quals); WRITE_BITMAPSET_FIELD(fs_relids); WRITE_BOOL_FIELD(fsSystemCol); } @@ -581,6 +592,7 @@ _outCustomScan(StringInfo str, const CustomScan *node) _outScanInfo(str, (const Scan *) node); WRITE_UINT_FIELD(flags); + WRITE_NODE_FIELD(custom_plans); WRITE_NODE_FIELD(custom_exprs); WRITE_NODE_FIELD(custom_private); WRITE_NODE_FIELD(custom_scan_tlist); @@ -591,14 +603,6 @@ _outCustomScan(StringInfo str, const CustomScan *node) node->methods->TextOutCustomScan(str, node); } -static void -_outSampleScan(StringInfo str, const SampleScan *node) -{ - WRITE_NODE_TYPE("SAMPLESCAN"); - - _outScanInfo(str, (const Scan *) node); -} - static void _outJoin(StringInfo str, const Join *node) { @@ -1014,7 +1018,7 @@ _outGroupingFunc(StringInfo str, const GroupingFunc *node) WRITE_NODE_FIELD(args); WRITE_NODE_FIELD(refs); WRITE_NODE_FIELD(cols); - WRITE_INT_FIELD(agglevelsup); + WRITE_UINT_FIELD(agglevelsup); WRITE_LOCATION_FIELD(location); } @@ -1530,9 +1534,9 @@ _outOnConflictExpr(StringInfo str, const OnConflictExpr *node) WRITE_ENUM_FIELD(action, OnConflictAction); WRITE_NODE_FIELD(arbiterElems); WRITE_NODE_FIELD(arbiterWhere); + WRITE_OID_FIELD(constraint); WRITE_NODE_FIELD(onConflictSet); WRITE_NODE_FIELD(onConflictWhere); - WRITE_OID_FIELD(constraint); WRITE_INT_FIELD(exclRelIndex); WRITE_NODE_FIELD(exclRelTlist); } @@ -1672,6 +1676,7 @@ _outCustomPath(StringInfo str, const CustomPath *node) _outPathInfo(str, (const Path *) node); WRITE_UINT_FIELD(flags); + WRITE_NODE_FIELD(custom_paths); WRITE_NODE_FIELD(custom_private); appendStringInfoString(str, " :methods "); _outToken(str, node->methods->CustomName); @@ -2375,7 +2380,6 @@ _outQuery(StringInfo str, const Query *node) WRITE_NODE_FIELD(rtable); WRITE_NODE_FIELD(jointree); WRITE_NODE_FIELD(targetList); - WRITE_NODE_FIELD(withCheckOptions); WRITE_NODE_FIELD(onConflict); WRITE_NODE_FIELD(returningList); WRITE_NODE_FIELD(groupClause); @@ -2398,6 +2402,7 @@ _outWithCheckOption(StringInfo str, const WithCheckOption *node) WRITE_ENUM_FIELD(kind, WCOKind); WRITE_STRING_FIELD(relname); + WRITE_STRING_FIELD(polname); WRITE_NODE_FIELD(qual); WRITE_BOOL_FIELD(cascaded); } @@ -2478,36 +2483,6 @@ _outCommonTableExpr(StringInfo str, const CommonTableExpr *node) WRITE_NODE_FIELD(ctecolcollations); } -static void -_outRangeTableSample(StringInfo str, const RangeTableSample *node) -{ - WRITE_NODE_TYPE("RANGETABLESAMPLE"); - - WRITE_NODE_FIELD(relation); - WRITE_STRING_FIELD(method); - WRITE_NODE_FIELD(repeatable); - WRITE_NODE_FIELD(args); -} - -static void -_outTableSampleClause(StringInfo str, const TableSampleClause *node) -{ - WRITE_NODE_TYPE("TABLESAMPLECLAUSE"); - - WRITE_OID_FIELD(tsmid); - WRITE_BOOL_FIELD(tsmseqscan); - WRITE_BOOL_FIELD(tsmpagemode); - WRITE_OID_FIELD(tsminit); - WRITE_OID_FIELD(tsmnextblock); - WRITE_OID_FIELD(tsmnexttuple); - WRITE_OID_FIELD(tsmexaminetuple); - WRITE_OID_FIELD(tsmend); - WRITE_OID_FIELD(tsmreset); - WRITE_OID_FIELD(tsmcost); - WRITE_NODE_FIELD(repeatable); - WRITE_NODE_FIELD(args); -} - static void _outSetOperationStmt(StringInfo str, const SetOperationStmt *node) { @@ -2594,6 +2569,16 @@ _outRangeTblFunction(StringInfo str, const RangeTblFunction *node) WRITE_BITMAPSET_FIELD(funcparams); } +static void +_outTableSampleClause(StringInfo str, const TableSampleClause *node) +{ + WRITE_NODE_TYPE("TABLESAMPLECLAUSE"); + + WRITE_OID_FIELD(tsmhandler); + WRITE_NODE_FIELD(args); + WRITE_NODE_FIELD(repeatable); +} + static void _outAExpr(StringInfo str, const A_Expr *node) { @@ -2845,6 +2830,18 @@ _outRangeFunction(StringInfo str, const RangeFunction *node) WRITE_NODE_FIELD(coldeflist); } +static void +_outRangeTableSample(StringInfo str, const RangeTableSample *node) +{ + WRITE_NODE_TYPE("RANGETABLESAMPLE"); + + WRITE_NODE_FIELD(relation); + WRITE_NODE_FIELD(method); + WRITE_NODE_FIELD(args); + WRITE_NODE_FIELD(repeatable); + WRITE_LOCATION_FIELD(location); +} + static void _outConstraint(StringInfo str, const Constraint *node) { @@ -3002,6 +2999,9 @@ _outNode(StringInfo str, const void *obj) case T_SeqScan: _outSeqScan(str, obj); break; + case T_SampleScan: + _outSampleScan(str, obj); + break; case T_IndexScan: _outIndexScan(str, obj); break; @@ -3038,9 +3038,6 @@ _outNode(StringInfo str, const void *obj) case T_CustomScan: _outCustomScan(str, obj); break; - case T_SampleScan: - _outSampleScan(str, obj); - break; case T_Join: _outJoin(str, obj); break; @@ -3393,12 +3390,6 @@ _outNode(StringInfo str, const void *obj) case T_CommonTableExpr: _outCommonTableExpr(str, obj); break; - case T_RangeTableSample: - _outRangeTableSample(str, obj); - break; - case T_TableSampleClause: - _outTableSampleClause(str, obj); - break; case T_SetOperationStmt: _outSetOperationStmt(str, obj); break; @@ -3408,6 +3399,9 @@ _outNode(StringInfo str, const void *obj) case T_RangeTblFunction: _outRangeTblFunction(str, obj); break; + case T_TableSampleClause: + _outTableSampleClause(str, obj); + break; case T_A_Expr: _outAExpr(str, obj); break; @@ -3450,6 +3444,9 @@ _outNode(StringInfo str, const void *obj) case T_RangeFunction: _outRangeFunction(str, obj); break; + case T_RangeTableSample: + _outRangeTableSample(str, obj); + break; case T_Constraint: _outConstraint(str, obj); break; diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index f5a40fbfb44b8..32b23fff097ca 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -213,7 +213,6 @@ _readQuery(void) READ_NODE_FIELD(rtable); READ_NODE_FIELD(jointree); READ_NODE_FIELD(targetList); - READ_NODE_FIELD(withCheckOptions); READ_NODE_FIELD(onConflict); READ_NODE_FIELD(returningList); READ_NODE_FIELD(groupClause); @@ -270,6 +269,7 @@ _readWithCheckOption(void) READ_ENUM_FIELD(kind, WCOKind); READ_STRING_FIELD(relname); + READ_STRING_FIELD(polname); READ_NODE_FIELD(qual); READ_BOOL_FIELD(cascaded); @@ -367,46 +367,6 @@ _readCommonTableExpr(void) READ_DONE(); } -/* - * _readRangeTableSample - */ -static RangeTableSample * -_readRangeTableSample(void) -{ - READ_LOCALS(RangeTableSample); - - READ_NODE_FIELD(relation); - READ_STRING_FIELD(method); - READ_NODE_FIELD(repeatable); - READ_NODE_FIELD(args); - - READ_DONE(); -} - -/* - * _readTableSampleClause - */ -static TableSampleClause * -_readTableSampleClause(void) -{ - READ_LOCALS(TableSampleClause); - - READ_OID_FIELD(tsmid); - READ_BOOL_FIELD(tsmseqscan); - READ_BOOL_FIELD(tsmpagemode); - READ_OID_FIELD(tsminit); - READ_OID_FIELD(tsmnextblock); - READ_OID_FIELD(tsmnexttuple); - READ_OID_FIELD(tsmexaminetuple); - READ_OID_FIELD(tsmend); - READ_OID_FIELD(tsmreset); - READ_OID_FIELD(tsmcost); - READ_NODE_FIELD(repeatable); - READ_NODE_FIELD(args); - - READ_DONE(); -} - /* * _readSetOperationStmt */ @@ -578,7 +538,7 @@ _readGroupingFunc(void) READ_NODE_FIELD(args); READ_NODE_FIELD(refs); READ_NODE_FIELD(cols); - READ_INT_FIELD(agglevelsup); + READ_UINT_FIELD(agglevelsup); READ_LOCATION_FIELD(location); READ_DONE(); @@ -1296,9 +1256,9 @@ _readOnConflictExpr(void) READ_ENUM_FIELD(action, OnConflictAction); READ_NODE_FIELD(arbiterElems); READ_NODE_FIELD(arbiterWhere); + READ_OID_FIELD(constraint); READ_NODE_FIELD(onConflictSet); READ_NODE_FIELD(onConflictWhere); - READ_OID_FIELD(constraint); READ_INT_FIELD(exclRelIndex); READ_NODE_FIELD(exclRelTlist); @@ -1391,6 +1351,21 @@ _readRangeTblFunction(void) READ_DONE(); } +/* + * _readTableSampleClause + */ +static TableSampleClause * +_readTableSampleClause(void) +{ + READ_LOCALS(TableSampleClause); + + READ_OID_FIELD(tsmhandler); + READ_NODE_FIELD(args); + READ_NODE_FIELD(repeatable); + + READ_DONE(); +} + /* * parseNodeString @@ -1426,10 +1401,6 @@ parseNodeString(void) return_value = _readRowMarkClause(); else if (MATCH("COMMONTABLEEXPR", 15)) return_value = _readCommonTableExpr(); - else if (MATCH("RANGETABLESAMPLE", 16)) - return_value = _readRangeTableSample(); - else if (MATCH("TABLESAMPLECLAUSE", 17)) - return_value = _readTableSampleClause(); else if (MATCH("SETOPERATIONSTMT", 16)) return_value = _readSetOperationStmt(); else if (MATCH("ALIAS", 5)) @@ -1528,6 +1499,8 @@ parseNodeString(void) return_value = _readRangeTblEntry(); else if (MATCH("RANGETBLFUNCTION", 16)) return_value = _readRangeTblFunction(); + else if (MATCH("TABLESAMPLECLAUSE", 17)) + return_value = _readTableSampleClause(); else if (MATCH("NOTIFY", 6)) return_value = _readNotifyStmt(); else if (MATCH("DECLARECURSOR", 13)) diff --git a/src/backend/optimizer/README b/src/backend/optimizer/README index 99c300a65751f..916a51852e3e7 100644 --- a/src/backend/optimizer/README +++ b/src/backend/optimizer/README @@ -241,12 +241,23 @@ non-FULL joins can be freely associated into the lefthand side of an OJ, but in some cases they can't be associated into the righthand side. So the restriction enforced by join_is_legal is that a proposed join can't join a rel within or partly within an RHS boundary to one outside -the boundary, unless the join validly implements some outer join. -(To support use of identity 3, we have to allow cases where an apparent -violation of a lower OJ's RHS is committed while forming an upper OJ. -If this wouldn't in fact be legal, the upper OJ's minimum LHS or RHS -set must be expanded to include the whole of the lower OJ, thereby -preventing it from being formed before the lower OJ is.) +the boundary, unless the proposed join is a LEFT join that can associate +into the SpecialJoinInfo's RHS using identity 3. + +The use of minimum Relid sets has some pitfalls; consider a query like + A leftjoin (B leftjoin (C innerjoin D) on (Pbcd)) on Pa +where Pa doesn't mention B/C/D at all. In this case a naive computation +would give the upper leftjoin's min LHS as {A} and min RHS as {C,D} (since +we know that the innerjoin can't associate out of the leftjoin's RHS, and +enforce that by including its relids in the leftjoin's min RHS). And the +lower leftjoin has min LHS of {B} and min RHS of {C,D}. Given such +information, join_is_legal would think it's okay to associate the upper +join into the lower join's RHS, transforming the query to + B leftjoin (A leftjoin (C innerjoin D) on Pa) on (Pbcd) +which yields totally wrong answers. We prevent that by forcing the min RHS +for the upper join to include B. This is perhaps overly restrictive, but +such cases don't arise often so it's not clear that it's worth developing a +more complicated system. Pulling Up Subqueries diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 0b831891fcb42..8fc1cfd15f533 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -18,6 +18,7 @@ #include #include "access/sysattr.h" +#include "access/tsmapi.h" #include "catalog/pg_class.h" #include "catalog/pg_operator.h" #include "foreign/fdwapi.h" @@ -359,6 +360,11 @@ set_rel_size(PlannerInfo *root, RelOptInfo *rel, break; } } + + /* + * We insist that all non-dummy rels have a nonzero rowcount estimate. + */ + Assert(rel->rows > 0 || IS_DUMMY_REL(rel)); } /* @@ -390,7 +396,7 @@ set_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, } else if (rte->tablesample != NULL) { - /* Build sample scan on relation */ + /* Sampled relation */ set_tablesample_rel_pathlist(root, rel, rte); } else @@ -480,11 +486,40 @@ set_plain_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte) /* * set_tablesample_rel_size - * Set size estimates for a sampled relation. + * Set size estimates for a sampled relation */ static void set_tablesample_rel_size(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte) { + TableSampleClause *tsc = rte->tablesample; + TsmRoutine *tsm; + BlockNumber pages; + double tuples; + + /* + * Test any partial indexes of rel for applicability. We must do this + * first since partial unique indexes can affect size estimates. + */ + check_partial_indexes(root, rel); + + /* + * Call the sampling method's estimation function to estimate the number + * of pages it will read and the number of tuples it will return. (Note: + * we assume the function returns sane values.) + */ + tsm = GetTsmRoutine(tsc->tsmhandler); + tsm->SampleScanGetSampleSize(root, rel, tsc->args, + &pages, &tuples); + + /* + * For the moment, because we will only consider a SampleScan path for the + * rel, it's okay to just overwrite the pages and tuples estimates for the + * whole relation. If we ever consider multiple path types for sampled + * rels, we'll need more complication. + */ + rel->pages = pages; + rel->tuples = tuples; + /* Mark rel with estimated output rows, width, etc */ set_baserel_size_estimates(root, rel); } @@ -492,8 +527,6 @@ set_tablesample_rel_size(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte) /* * set_tablesample_rel_pathlist * Build access paths for a sampled relation - * - * There is only one possible path - sampling scan */ static void set_tablesample_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte) @@ -502,15 +535,41 @@ set_tablesample_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry * Path *path; /* - * We don't support pushing join clauses into the quals of a seqscan, but - * it could still have required parameterization due to LATERAL refs in - * its tlist. + * We don't support pushing join clauses into the quals of a samplescan, + * but it could still have required parameterization due to LATERAL refs + * in its tlist or TABLESAMPLE arguments. */ required_outer = rel->lateral_relids; - /* We only do sample scan if it was requested */ + /* Consider sampled scan */ path = create_samplescan_path(root, rel, required_outer); - rel->pathlist = list_make1(path); + + /* + * If the sampling method does not support repeatable scans, we must avoid + * plans that would scan the rel multiple times. Ideally, we'd simply + * avoid putting the rel on the inside of a nestloop join; but adding such + * a consideration to the planner seems like a great deal of complication + * to support an uncommon usage of second-rate sampling methods. Instead, + * if there is a risk that the query might perform an unsafe join, just + * wrap the SampleScan in a Materialize node. We can check for joins by + * counting the membership of all_baserels (note that this correctly + * counts inheritance trees as single rels). If we're inside a subquery, + * we can't easily check whether a join might occur in the outer query, so + * just assume one is possible. + * + * GetTsmRoutine is relatively expensive compared to the other tests here, + * so check repeatable_across_scans last, even though that's a bit odd. + */ + if ((root->query_level > 1 || + bms_membership(root->all_baserels) != BMS_SINGLETON) && + !(GetTsmRoutine(rte->tablesample->tsmhandler)->repeatable_across_scans)) + { + path = (Path *) create_material_path(rel, path); + } + + add_path(rel, path); + + /* For the moment, at least, there are no other paths to consider */ } /* @@ -525,6 +584,9 @@ set_foreign_size(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte) /* Let FDW adjust the size estimates, if it can */ rel->fdwroutine->GetForeignRelSize(root, rel, rte->relid); + + /* ... but do not let it set the rows estimate to zero */ + rel->rows = clamp_row_est(rel->rows); } /* @@ -554,6 +616,7 @@ set_append_rel_size(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte) { int parentRTindex = rti; + bool has_live_children; double parent_rows; double parent_size; double *parent_attrsizes; @@ -574,6 +637,7 @@ set_append_rel_size(PlannerInfo *root, RelOptInfo *rel, * Note: if you consider changing this logic, beware that child rels could * have zero rows and/or width, if they were excluded by constraints. */ + has_live_children = false; parent_rows = 0; parent_size = 0; nattrs = rel->max_attr - rel->min_attr + 1; @@ -701,70 +765,80 @@ set_append_rel_size(PlannerInfo *root, RelOptInfo *rel, if (IS_DUMMY_REL(childrel)) continue; + /* We have at least one live child. */ + has_live_children = true; + /* * Accumulate size information from each live child. */ - if (childrel->rows > 0) + Assert(childrel->rows > 0); + + parent_rows += childrel->rows; + parent_size += childrel->width * childrel->rows; + + /* + * Accumulate per-column estimates too. We need not do anything for + * PlaceHolderVars in the parent list. If child expression isn't a + * Var, or we didn't record a width estimate for it, we have to fall + * back on a datatype-based estimate. + * + * By construction, child's reltargetlist is 1-to-1 with parent's. + */ + forboth(parentvars, rel->reltargetlist, + childvars, childrel->reltargetlist) { - parent_rows += childrel->rows; - parent_size += childrel->width * childrel->rows; + Var *parentvar = (Var *) lfirst(parentvars); + Node *childvar = (Node *) lfirst(childvars); - /* - * Accumulate per-column estimates too. We need not do anything - * for PlaceHolderVars in the parent list. If child expression - * isn't a Var, or we didn't record a width estimate for it, we - * have to fall back on a datatype-based estimate. - * - * By construction, child's reltargetlist is 1-to-1 with parent's. - */ - forboth(parentvars, rel->reltargetlist, - childvars, childrel->reltargetlist) + if (IsA(parentvar, Var)) { - Var *parentvar = (Var *) lfirst(parentvars); - Node *childvar = (Node *) lfirst(childvars); + int pndx = parentvar->varattno - rel->min_attr; + int32 child_width = 0; - if (IsA(parentvar, Var)) + if (IsA(childvar, Var) && + ((Var *) childvar)->varno == childrel->relid) { - int pndx = parentvar->varattno - rel->min_attr; - int32 child_width = 0; - - if (IsA(childvar, Var) && - ((Var *) childvar)->varno == childrel->relid) - { - int cndx = ((Var *) childvar)->varattno - childrel->min_attr; + int cndx = ((Var *) childvar)->varattno - childrel->min_attr; - child_width = childrel->attr_widths[cndx]; - } - if (child_width <= 0) - child_width = get_typavgwidth(exprType(childvar), - exprTypmod(childvar)); - Assert(child_width > 0); - parent_attrsizes[pndx] += child_width * childrel->rows; + child_width = childrel->attr_widths[cndx]; } + if (child_width <= 0) + child_width = get_typavgwidth(exprType(childvar), + exprTypmod(childvar)); + Assert(child_width > 0); + parent_attrsizes[pndx] += child_width * childrel->rows; } } } - /* - * Save the finished size estimates. - */ - rel->rows = parent_rows; - if (parent_rows > 0) + if (has_live_children) { + /* + * Save the finished size estimates. + */ int i; + Assert(parent_rows > 0); + rel->rows = parent_rows; rel->width = rint(parent_size / parent_rows); for (i = 0; i < nattrs; i++) rel->attr_widths[i] = rint(parent_attrsizes[i] / parent_rows); + + /* + * Set "raw tuples" count equal to "rows" for the appendrel; needed + * because some places assume rel->tuples is valid for any baserel. + */ + rel->tuples = parent_rows; } else - rel->width = 0; /* attr_widths should be zero already */ - - /* - * Set "raw tuples" count equal to "rows" for the appendrel; needed - * because some places assume rel->tuples is valid for any baserel. - */ - rel->tuples = parent_rows; + { + /* + * All children were excluded by constraints, so mark the whole + * appendrel dummy. We must do this in this phase so that the rel's + * dummy-ness is visible when we generate paths for other rels. + */ + set_dummy_rel_pathlist(rel); + } pfree(parent_attrsizes); } @@ -2177,6 +2251,46 @@ subquery_push_qual(Query *subquery, RangeTblEntry *rte, Index rti, Node *qual) recurse_push_qual(subquery->setOperations, subquery, rte, rti, qual); } + else if (IsA(qual, CurrentOfExpr)) + { + /* + * This is possible when a WHERE CURRENT OF expression is applied to a + * table with row-level security. In that case, the subquery should + * contain precisely one rtable entry for the table, and we can safely + * push the expression down into the subquery. This will cause a TID + * scan subquery plan to be generated allowing the target relation to + * be updated. + * + * Someday we might also be able to use a WHERE CURRENT OF expression + * on a view, but currently the rewriter prevents that, so we should + * never see any other case here, but generate sane error messages in + * case it does somehow happen. + */ + if (subquery->rtable == NIL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("WHERE CURRENT OF is not supported on a view with no underlying relation"))); + + if (list_length(subquery->rtable) > 1) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("WHERE CURRENT OF is not supported on a view with more than one underlying relation"))); + + if (subquery->hasAggs || subquery->groupClause || subquery->groupingSets || subquery->havingQual) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("WHERE CURRENT OF is not supported on a view with grouping or aggregation"))); + + /* + * Adjust the CURRENT OF expression to refer to the underlying table + * in the subquery, and attach it to the subquery's WHERE clause. + */ + qual = copyObject(qual); + ((CurrentOfExpr *) qual)->cvarno = 1; + + subquery->jointree->quals = + make_and_qual(subquery->jointree->quals, qual); + } else { /* @@ -2410,7 +2524,33 @@ print_path(PlannerInfo *root, Path *path, int indent) switch (nodeTag(path)) { case T_Path: - ptype = "SeqScan"; + switch (path->pathtype) + { + case T_SeqScan: + ptype = "SeqScan"; + break; + case T_SampleScan: + ptype = "SampleScan"; + break; + case T_SubqueryScan: + ptype = "SubqueryScan"; + break; + case T_FunctionScan: + ptype = "FunctionScan"; + break; + case T_ValuesScan: + ptype = "ValuesScan"; + break; + case T_CteScan: + ptype = "CteScan"; + break; + case T_WorkTableScan: + ptype = "WorkTableScan"; + break; + default: + ptype = "???Path"; + break; + } break; case T_IndexPath: ptype = "IdxScan"; diff --git a/src/backend/optimizer/path/clausesel.c b/src/backend/optimizer/path/clausesel.c index dcac1c1e7d4cc..6ce2726a7e9bc 100644 --- a/src/backend/optimizer/path/clausesel.c +++ b/src/backend/optimizer/path/clausesel.c @@ -14,7 +14,6 @@ */ #include "postgres.h" -#include "catalog/pg_operator.h" #include "nodes/makefuncs.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" @@ -568,18 +567,8 @@ clause_selectivity(PlannerInfo *root, if (var->varlevelsup == 0 && (varRelid == 0 || varRelid == (int) var->varno)) { - /* - * A Var at the top of a clause must be a bool Var. This is - * equivalent to the clause reln.attribute = 't', so we compute - * the selectivity as if that is what we have. - */ - s1 = restriction_selectivity(root, - BooleanEqualOperator, - list_make2(var, - makeBoolConst(true, - false)), - InvalidOid, - varRelid); + /* Use the restriction selectivity function for a bool Var */ + s1 = boolvarsel(root, (Node *) var, varRelid); } } else if (IsA(clause, Const)) @@ -680,25 +669,6 @@ clause_selectivity(PlannerInfo *root, if (IsA(clause, DistinctExpr)) s1 = 1.0 - s1; } - else if (is_funcclause(clause)) - { - /* - * This is not an operator, so we guess at the selectivity. THIS IS A - * HACK TO GET V4 OUT THE DOOR. FUNCS SHOULD BE ABLE TO HAVE - * SELECTIVITIES THEMSELVES. -- JMH 7/9/92 - */ - s1 = (Selectivity) 0.3333333; - } -#ifdef NOT_USED - else if (IsA(clause, SubPlan) || - IsA(clause, AlternativeSubPlan)) - { - /* - * Just for the moment! FIX ME! - vadim 02/04/98 - */ - s1 = (Selectivity) 0.5; - } -#endif else if (IsA(clause, ScalarArrayOpExpr)) { /* Use node specific selectivity calculation function */ @@ -766,6 +736,17 @@ clause_selectivity(PlannerInfo *root, jointype, sjinfo); } + else + { + /* + * For anything else, see if we can consider it as a boolean variable. + * This only works if it's an immutable expression in Vars of a single + * relation; but there's no point in us checking that here because + * boolvarsel() will do it internally, and return a suitable default + * selectivity if not. + */ + s1 = boolvarsel(root, clause, varRelid); + } /* Cache the result if possible */ if (cacheable) diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 0d302f66bee4c..d107d76a3c04d 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -74,6 +74,7 @@ #include #include "access/htup_details.h" +#include "access/tsmapi.h" #include "executor/executor.h" #include "executor/nodeHash.h" #include "miscadmin.h" @@ -223,64 +224,66 @@ cost_seqscan(Path *path, PlannerInfo *root, * cost_samplescan * Determines and returns the cost of scanning a relation using sampling. * - * From planner/optimizer perspective, we don't care all that much about cost - * itself since there is always only one scan path to consider when sampling - * scan is present, but number of rows estimation is still important. - * * 'baserel' is the relation to be scanned * 'param_info' is the ParamPathInfo if this is a parameterized path, else NULL */ void -cost_samplescan(Path *path, PlannerInfo *root, RelOptInfo *baserel) +cost_samplescan(Path *path, PlannerInfo *root, + RelOptInfo *baserel, ParamPathInfo *param_info) { Cost startup_cost = 0; Cost run_cost = 0; + RangeTblEntry *rte; + TableSampleClause *tsc; + TsmRoutine *tsm; double spc_seq_page_cost, spc_random_page_cost, spc_page_cost; QualCost qpqual_cost; Cost cpu_per_tuple; - BlockNumber pages; - double tuples; - RangeTblEntry *rte = planner_rt_fetch(baserel->relid, root); - TableSampleClause *tablesample = rte->tablesample; - /* Should only be applied to base relations */ + /* Should only be applied to base relations with tablesample clauses */ Assert(baserel->relid > 0); - Assert(baserel->rtekind == RTE_RELATION); + rte = planner_rt_fetch(baserel->relid, root); + Assert(rte->rtekind == RTE_RELATION); + tsc = rte->tablesample; + Assert(tsc != NULL); + tsm = GetTsmRoutine(tsc->tsmhandler); /* Mark the path with the correct row estimate */ - if (path->param_info) - path->rows = path->param_info->ppi_rows; + if (param_info) + path->rows = param_info->ppi_rows; else path->rows = baserel->rows; - /* Call the sampling method's costing function. */ - OidFunctionCall6(tablesample->tsmcost, PointerGetDatum(root), - PointerGetDatum(path), PointerGetDatum(baserel), - PointerGetDatum(tablesample->args), - PointerGetDatum(&pages), PointerGetDatum(&tuples)); - /* fetch estimated page cost for tablespace containing table */ get_tablespace_page_costs(baserel->reltablespace, &spc_random_page_cost, &spc_seq_page_cost); - - spc_page_cost = tablesample->tsmseqscan ? spc_seq_page_cost : - spc_random_page_cost; + /* if NextSampleBlock is used, assume random access, else sequential */ + spc_page_cost = (tsm->NextSampleBlock != NULL) ? + spc_random_page_cost : spc_seq_page_cost; /* - * disk costs + * disk costs (recall that baserel->pages has already been set to the + * number of pages the sampling method will visit) */ - run_cost += spc_page_cost * pages; + run_cost += spc_page_cost * baserel->pages; - /* CPU costs */ - get_restriction_qual_cost(root, baserel, path->param_info, &qpqual_cost); + /* + * CPU costs (recall that baserel->tuples has already been set to the + * number of tuples the sampling method will select). Note that we ignore + * execution cost of the TABLESAMPLE parameter expressions; they will be + * evaluated only once per scan, and in most usages they'll likely be + * simple constants anyway. We also don't charge anything for the + * calculations the sampling method might do internally. + */ + get_restriction_qual_cost(root, baserel, param_info, &qpqual_cost); startup_cost += qpqual_cost.startup; cpu_per_tuple = cpu_tuple_cost + qpqual_cost.per_tuple; - run_cost += cpu_per_tuple * tuples; + run_cost += cpu_per_tuple * baserel->tuples; path->startup_cost = startup_cost; path->total_cost = startup_cost + run_cost; @@ -1036,7 +1039,7 @@ cost_tidscan(Path *path, PlannerInfo *root, /* * The TID qual expressions will be computed once, any other baserestrict - * quals once per retrived tuple. + * quals once per retrieved tuple. */ cost_qual_eval(&tid_qual_cost, tidquals, root); diff --git a/src/backend/optimizer/path/equivclass.c b/src/backend/optimizer/path/equivclass.c index 80021d57bdc06..48be45dffc974 100644 --- a/src/backend/optimizer/path/equivclass.c +++ b/src/backend/optimizer/path/equivclass.c @@ -2285,9 +2285,11 @@ has_relevant_eclass_joinclause(PlannerInfo *root, RelOptInfo *rel1) * from actually being generated. */ bool -eclass_useful_for_merging(EquivalenceClass *eclass, +eclass_useful_for_merging(PlannerInfo *root, + EquivalenceClass *eclass, RelOptInfo *rel) { + Relids relids; ListCell *lc; Assert(!eclass->ec_merged); @@ -2305,8 +2307,14 @@ eclass_useful_for_merging(EquivalenceClass *eclass, * possibly-overoptimistic heuristic. */ + /* If specified rel is a child, we must consider the topmost parent rel */ + if (rel->reloptkind == RELOPT_OTHER_MEMBER_REL) + relids = find_childrel_top_parent(root, rel)->relids; + else + relids = rel->relids; + /* If rel already includes all members of eclass, no point in searching */ - if (bms_is_subset(eclass->ec_relids, rel->relids)) + if (bms_is_subset(eclass->ec_relids, relids)) return false; /* To join, we need a member not in the given rel */ @@ -2317,7 +2325,7 @@ eclass_useful_for_merging(EquivalenceClass *eclass, if (cur_em->em_is_child) continue; /* ignore children here */ - if (!bms_overlap(cur_em->em_relids, rel->relids)) + if (!bms_overlap(cur_em->em_relids, relids)) return true; } diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c index ba78252b8f998..a35c881fd92bd 100644 --- a/src/backend/optimizer/path/joinpath.c +++ b/src/backend/optimizer/path/joinpath.c @@ -118,7 +118,7 @@ add_paths_to_joinrel(PlannerInfo *root, * is usually no need to create a parameterized result path unless there * is a join order restriction that prevents joining one of our input rels * directly to the parameter source rel instead of joining to the other - * input rel. (But see exception in try_nestloop_path.) This restriction + * input rel. (But see allow_star_schema_join().) This restriction * reduces the number of parameterized paths we have to deal with at * higher join levels, without compromising the quality of the resulting * plan. We express the restriction as a Relids set that must overlap the @@ -270,6 +270,85 @@ add_paths_to_joinrel(PlannerInfo *root, jointype, &extra); } +/* + * We override the param_source_rels heuristic to accept nestloop paths in + * which the outer rel satisfies some but not all of the inner path's + * parameterization. This is necessary to get good plans for star-schema + * scenarios, in which a parameterized path for a large table may require + * parameters from multiple small tables that will not get joined directly to + * each other. We can handle that by stacking nestloops that have the small + * tables on the outside; but this breaks the rule the param_source_rels + * heuristic is based on, namely that parameters should not be passed down + * across joins unless there's a join-order-constraint-based reason to do so. + * So we ignore the param_source_rels restriction when this case applies. + * + * allow_star_schema_join() returns TRUE if the param_source_rels restriction + * should be overridden, ie, it's okay to perform this join. + */ +static inline bool +allow_star_schema_join(PlannerInfo *root, + Path *outer_path, + Path *inner_path) +{ + Relids innerparams = PATH_REQ_OUTER(inner_path); + Relids outerrelids = outer_path->parent->relids; + + /* + * It's a star-schema case if the outer rel provides some but not all of + * the inner rel's parameterization. + */ + return (bms_overlap(innerparams, outerrelids) && + bms_nonempty_difference(innerparams, outerrelids)); +} + +/* + * There's a pitfall for creating parameterized nestloops: suppose the inner + * rel (call it A) has a parameter that is a PlaceHolderVar, and that PHV's + * minimum eval_at set includes the outer rel (B) and some third rel (C). + * We might think we could create a B/A nestloop join that's parameterized by + * C. But we would end up with a plan in which the PHV's expression has to be + * evaluated as a nestloop parameter at the B/A join; and the executor is only + * set up to handle simple Vars as NestLoopParams. Rather than add complexity + * and overhead to the executor for such corner cases, it seems better to + * forbid the join. (Note that existence of such a PHV probably means there + * is a join order constraint that will cause us to consider joining B and C + * directly; so we can still make use of A's parameterized path with B+C.) + * So we check whether any PHVs used in the query could pose such a hazard. + * We don't have any simple way of checking whether a risky PHV would actually + * be used in the inner plan, and the case is so unusual that it doesn't seem + * worth working very hard on it. + * + * This case can occur whether or not the join's remaining parameterization + * overlaps param_source_rels, so we have to check for it separately from + * allow_star_schema_join, even though it looks much like a star-schema case. + */ +static inline bool +check_hazardous_phv(PlannerInfo *root, + Path *outer_path, + Path *inner_path) +{ + Relids innerparams = PATH_REQ_OUTER(inner_path); + Relids outerrelids = outer_path->parent->relids; + ListCell *lc; + + foreach(lc, root->placeholder_list) + { + PlaceHolderInfo *phinfo = (PlaceHolderInfo *) lfirst(lc); + + if (!bms_is_subset(phinfo->ph_eval_at, innerparams)) + continue; /* ignore, could not be a nestloop param */ + if (!bms_overlap(phinfo->ph_eval_at, outerrelids)) + continue; /* ignore, not relevant to this join */ + if (bms_is_subset(phinfo->ph_eval_at, outerrelids)) + continue; /* safe, it can be eval'd within outerrel */ + /* Otherwise, it's potentially unsafe, so reject the join */ + return false; + } + + /* OK to perform the join */ + return true; +} + /* * try_nestloop_path * Consider a nestloop join path; if it appears useful, push it into @@ -289,36 +368,20 @@ try_nestloop_path(PlannerInfo *root, /* * Check to see if proposed path is still parameterized, and reject if the - * parameterization wouldn't be sensible. + * parameterization wouldn't be sensible --- unless allow_star_schema_join + * says to allow it anyway. Also, we must reject if check_hazardous_phv + * doesn't like the look of it. */ required_outer = calc_nestloop_required_outer(outer_path, inner_path); if (required_outer && - !bms_overlap(required_outer, extra->param_source_rels)) + ((!bms_overlap(required_outer, extra->param_source_rels) && + !allow_star_schema_join(root, outer_path, inner_path)) || + !check_hazardous_phv(root, outer_path, inner_path))) { - /* - * We override the param_source_rels heuristic to accept nestloop - * paths in which the outer rel satisfies some but not all of the - * inner path's parameterization. This is necessary to get good plans - * for star-schema scenarios, in which a parameterized path for a - * large table may require parameters from multiple small tables that - * will not get joined directly to each other. We can handle that by - * stacking nestloops that have the small tables on the outside; but - * this breaks the rule the param_source_rels heuristic is based on, - * namely that parameters should not be passed down across joins - * unless there's a join-order-constraint-based reason to do so. So - * ignore the param_source_rels restriction when this case applies. - */ - Relids outerrelids = outer_path->parent->relids; - Relids innerparams = PATH_REQ_OUTER(inner_path); - - if (!(bms_overlap(innerparams, outerrelids) && - bms_nonempty_difference(innerparams, outerrelids))) - { - /* Waste no memory when we reject a path here */ - bms_free(required_outer); - return; - } + /* Waste no memory when we reject a path here */ + bms_free(required_outer); + return; } /* diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c index fe9fd57317429..b2cc9f07f56d0 100644 --- a/src/backend/optimizer/path/joinrels.c +++ b/src/backend/optimizer/path/joinrels.c @@ -331,7 +331,7 @@ join_is_legal(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, SpecialJoinInfo *match_sjinfo; bool reversed; bool unique_ified; - bool is_valid_inner; + bool must_be_leftjoin; bool lateral_fwd; bool lateral_rev; ListCell *l; @@ -346,12 +346,12 @@ join_is_legal(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, /* * If we have any special joins, the proposed join might be illegal; and * in any case we have to determine its join type. Scan the join info - * list for conflicts. + * list for matches and conflicts. */ match_sjinfo = NULL; reversed = false; unique_ified = false; - is_valid_inner = true; + must_be_leftjoin = false; foreach(l, root->join_info_list) { @@ -402,7 +402,8 @@ join_is_legal(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, * If one input contains min_lefthand and the other contains * min_righthand, then we can perform the SJ at this join. * - * Barf if we get matches to more than one SJ (is that possible?) + * Reject if we get matches to more than one SJ; that implies we're + * considering something that's not really valid. */ if (bms_is_subset(sjinfo->min_lefthand, rel1->relids) && bms_is_subset(sjinfo->min_righthand, rel2->relids)) @@ -467,50 +468,60 @@ join_is_legal(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, } else { - /*---------- - * Otherwise, the proposed join overlaps the RHS but isn't - * a valid implementation of this SJ. It might still be - * a legal join, however. If both inputs overlap the RHS, - * assume that it's OK. Since the inputs presumably got past - * this function's checks previously, they can't overlap the - * LHS and their violations of the RHS boundary must represent - * SJs that have been determined to commute with this one. - * We have to allow this to work correctly in cases like - * (a LEFT JOIN (b JOIN (c LEFT JOIN d))) - * when the c/d join has been determined to commute with the join - * to a, and hence d is not part of min_righthand for the upper - * join. It should be legal to join b to c/d but this will appear - * as a violation of the upper join's RHS. - * Furthermore, if one input overlaps the RHS and the other does - * not, we should still allow the join if it is a valid - * implementation of some other SJ. We have to allow this to - * support the associative identity - * (a LJ b on Pab) LJ c ON Pbc = a LJ (b LJ c ON Pbc) on Pab - * since joining B directly to C violates the lower SJ's RHS. - * We assume that make_outerjoininfo() set things up correctly - * so that we'll only match to some SJ if the join is valid. - * Set flag here to check at bottom of loop. - *---------- + /* + * Otherwise, the proposed join overlaps the RHS but isn't a valid + * implementation of this SJ. But don't panic quite yet: the RHS + * violation might have occurred previously, in one or both input + * relations, in which case we must have previously decided that + * it was OK to commute some other SJ with this one. If we need + * to perform this join to finish building up the RHS, rejecting + * it could lead to not finding any plan at all. (This can occur + * because of the heuristics elsewhere in this file that postpone + * clauseless joins: we might not consider doing a clauseless join + * within the RHS until after we've performed other, validly + * commutable SJs with one or both sides of the clauseless join.) + * This consideration boils down to the rule that if both inputs + * overlap the RHS, we can allow the join --- they are either + * fully within the RHS, or represent previously-allowed joins to + * rels outside it. */ - if (sjinfo->jointype != JOIN_SEMI && - bms_overlap(rel1->relids, sjinfo->min_righthand) && + if (bms_overlap(rel1->relids, sjinfo->min_righthand) && bms_overlap(rel2->relids, sjinfo->min_righthand)) - { - /* seems OK */ - Assert(!bms_overlap(joinrelids, sjinfo->min_lefthand)); - } - else - is_valid_inner = false; + continue; /* assume valid previous violation of RHS */ + + /* + * The proposed join could still be legal, but only if we're + * allowed to associate it into the RHS of this SJ. That means + * this SJ must be a LEFT join (not SEMI or ANTI, and certainly + * not FULL) and the proposed join must not overlap the LHS. + */ + if (sjinfo->jointype != JOIN_LEFT || + bms_overlap(joinrelids, sjinfo->min_lefthand)) + return false; /* invalid join path */ + + /* + * To be valid, the proposed join must be a LEFT join; otherwise + * it can't associate into this SJ's RHS. But we may not yet have + * found the SpecialJoinInfo matching the proposed join, so we + * can't test that yet. Remember the requirement for later. + */ + must_be_leftjoin = true; } } /* - * Fail if violated some SJ's RHS and didn't match to another SJ. However, - * "matching" to a semijoin we are implementing by unique-ification - * doesn't count (think: it's really an inner join). + * Fail if violated any SJ's RHS and didn't match to a LEFT SJ: the + * proposed join can't associate into an SJ's RHS. + * + * Also, fail if the proposed join's predicate isn't strict; we're + * essentially checking to see if we can apply outer-join identity 3, and + * that's a requirement. (This check may be redundant with checks in + * make_outerjoininfo, but I'm not quite sure, and it's cheap to test.) */ - if (!is_valid_inner && - (match_sjinfo == NULL || unique_ified)) + if (must_be_leftjoin && + (match_sjinfo == NULL || + match_sjinfo->jointype != JOIN_LEFT || + !match_sjinfo->lhs_strict)) return false; /* invalid join path */ /* @@ -536,7 +547,9 @@ join_is_legal(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, if (!bms_is_subset(ljinfo->lateral_lhs, rel1->relids)) return false; /* rel1 can't compute the required parameter */ if (match_sjinfo && - (reversed || match_sjinfo->jointype == JOIN_FULL)) + (reversed || + unique_ified || + match_sjinfo->jointype == JOIN_FULL)) return false; /* not implementable as nestloop */ } if (bms_is_subset(ljinfo->lateral_rhs, rel1->relids) && @@ -549,7 +562,9 @@ join_is_legal(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, if (!bms_is_subset(ljinfo->lateral_lhs, rel2->relids)) return false; /* rel2 can't compute the required parameter */ if (match_sjinfo && - (!reversed || match_sjinfo->jointype == JOIN_FULL)) + (!reversed || + unique_ified || + match_sjinfo->jointype == JOIN_FULL)) return false; /* not implementable as nestloop */ } } diff --git a/src/backend/optimizer/path/pathkeys.c b/src/backend/optimizer/path/pathkeys.c index 8b25222b93a82..c6b5d78724b80 100644 --- a/src/backend/optimizer/path/pathkeys.c +++ b/src/backend/optimizer/path/pathkeys.c @@ -1373,7 +1373,7 @@ pathkeys_useful_for_merging(PlannerInfo *root, RelOptInfo *rel, List *pathkeys) * surely possible to generate a mergejoin clause using them. */ if (rel->has_eclass_joins && - eclass_useful_for_merging(pathkey->pk_eclass, rel)) + eclass_useful_for_merging(root, pathkey->pk_eclass, rel)) matched = true; else { diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c index 470db87817515..7912b153c59e4 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -240,10 +240,10 @@ join_is_removable(PlannerInfo *root, SpecialJoinInfo *sjinfo) { PlaceHolderInfo *phinfo = (PlaceHolderInfo *) lfirst(l); - if (bms_is_subset(phinfo->ph_needed, joinrelids)) - continue; /* PHV is not used above the join */ if (bms_overlap(phinfo->ph_lateral, innerrel->relids)) return false; /* it references innerrel laterally */ + if (bms_is_subset(phinfo->ph_needed, joinrelids)) + continue; /* PHV is not used above the join */ if (!bms_overlap(phinfo->ph_eval_at, innerrel->relids)) continue; /* it definitely doesn't reference innerrel */ if (bms_is_subset(phinfo->ph_eval_at, innerrel->relids)) @@ -439,43 +439,41 @@ remove_rel_from_query(PlannerInfo *root, int relid, Relids joinrelids) sjinfo->syn_righthand = bms_del_member(sjinfo->syn_righthand, relid); } + /* There shouldn't be any LATERAL info to translate, as yet */ + Assert(root->lateral_info_list == NIL); + /* - * Likewise remove references from LateralJoinInfo data structures. + * Likewise remove references from PlaceHolderVar data structures, + * removing any no-longer-needed placeholders entirely. * - * If we are deleting a LATERAL subquery, we can forget its - * LateralJoinInfos altogether. Otherwise, make sure the target is not - * included in any lateral_lhs set. (It probably can't be, since that - * should have precluded deciding to remove it; but let's cope anyway.) + * Removal is a bit tricker than it might seem: we can remove PHVs that + * are used at the target rel and/or in the join qual, but not those that + * are used at join partner rels or above the join. It's not that easy to + * distinguish PHVs used at partner rels from those used in the join qual, + * since they will both have ph_needed sets that are subsets of + * joinrelids. However, a PHV used at a partner rel could not have the + * target rel in ph_eval_at, so we check that while deciding whether to + * remove or just update the PHV. There is no corresponding test in + * join_is_removable because it doesn't need to distinguish those cases. */ - for (l = list_head(root->lateral_info_list); l != NULL; l = nextl) + for (l = list_head(root->placeholder_list); l != NULL; l = nextl) { - LateralJoinInfo *ljinfo = (LateralJoinInfo *) lfirst(l); + PlaceHolderInfo *phinfo = (PlaceHolderInfo *) lfirst(l); nextl = lnext(l); - ljinfo->lateral_rhs = bms_del_member(ljinfo->lateral_rhs, relid); - if (bms_is_empty(ljinfo->lateral_rhs)) - root->lateral_info_list = list_delete_ptr(root->lateral_info_list, - ljinfo); + Assert(!bms_is_member(relid, phinfo->ph_lateral)); + if (bms_is_subset(phinfo->ph_needed, joinrelids) && + bms_is_member(relid, phinfo->ph_eval_at)) + root->placeholder_list = list_delete_ptr(root->placeholder_list, + phinfo); else { - ljinfo->lateral_lhs = bms_del_member(ljinfo->lateral_lhs, relid); - Assert(!bms_is_empty(ljinfo->lateral_lhs)); + phinfo->ph_eval_at = bms_del_member(phinfo->ph_eval_at, relid); + Assert(!bms_is_empty(phinfo->ph_eval_at)); + phinfo->ph_needed = bms_del_member(phinfo->ph_needed, relid); } } - /* - * Likewise remove references from PlaceHolderVar data structures. - */ - foreach(l, root->placeholder_list) - { - PlaceHolderInfo *phinfo = (PlaceHolderInfo *) lfirst(l); - - phinfo->ph_eval_at = bms_del_member(phinfo->ph_eval_at, relid); - Assert(!bms_is_empty(phinfo->ph_eval_at)); - Assert(!bms_is_member(relid, phinfo->ph_lateral)); - phinfo->ph_needed = bms_del_member(phinfo->ph_needed, relid); - } - /* * Remove any joinquals referencing the rel from the joininfo lists. * diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index dc2dcbf93f7a1..224bf3d1476a4 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -102,7 +102,8 @@ static List *order_qual_clauses(PlannerInfo *root, List *clauses); static void copy_path_costsize(Plan *dest, Path *src); static void copy_plan_costsize(Plan *dest, Plan *src); static SeqScan *make_seqscan(List *qptlist, List *qpqual, Index scanrelid); -static SampleScan *make_samplescan(List *qptlist, List *qpqual, Index scanrelid); +static SampleScan *make_samplescan(List *qptlist, List *qpqual, Index scanrelid, + TableSampleClause *tsc); static IndexScan *make_indexscan(List *qptlist, List *qpqual, Index scanrelid, Oid indexid, List *indexqual, List *indexqualorig, List *indexorderby, List *indexorderbyorig, @@ -1148,7 +1149,7 @@ create_seqscan_plan(PlannerInfo *root, Path *best_path, /* * create_samplescan_plan - * Returns a samplecan plan for the base relation scanned by 'best_path' + * Returns a samplescan plan for the base relation scanned by 'best_path' * with restriction clauses 'scan_clauses' and targetlist 'tlist'. */ static SampleScan * @@ -1157,11 +1158,15 @@ create_samplescan_plan(PlannerInfo *root, Path *best_path, { SampleScan *scan_plan; Index scan_relid = best_path->parent->relid; + RangeTblEntry *rte; + TableSampleClause *tsc; - /* it should be a base rel with tablesample clause... */ + /* it should be a base rel with a tablesample clause... */ Assert(scan_relid > 0); - Assert(best_path->parent->rtekind == RTE_RELATION); - Assert(best_path->pathtype == T_SampleScan); + rte = planner_rt_fetch(scan_relid, root); + Assert(rte->rtekind == RTE_RELATION); + tsc = rte->tablesample; + Assert(tsc != NULL); /* Sort clauses into best execution order */ scan_clauses = order_qual_clauses(root, scan_clauses); @@ -1174,13 +1179,16 @@ create_samplescan_plan(PlannerInfo *root, Path *best_path, { scan_clauses = (List *) replace_nestloop_params(root, (Node *) scan_clauses); + tsc = (TableSampleClause *) + replace_nestloop_params(root, (Node *) tsc); } scan_plan = make_samplescan(tlist, scan_clauses, - scan_relid); + scan_relid, + tsc); - copy_path_costsize(&scan_plan->plan, best_path); + copy_path_costsize(&scan_plan->scan.plan, best_path); return scan_plan; } @@ -2109,6 +2117,9 @@ create_foreignscan_plan(PlannerInfo *root, ForeignPath *best_path, replace_nestloop_params(root, (Node *) scan_plan->scan.plan.qual); scan_plan->fdw_exprs = (List *) replace_nestloop_params(root, (Node *) scan_plan->fdw_exprs); + scan_plan->fdw_recheck_quals = (List *) + replace_nestloop_params(root, + (Node *) scan_plan->fdw_recheck_quals); } /* @@ -2161,9 +2172,9 @@ create_customscan_plan(PlannerInfo *root, CustomPath *best_path, ListCell *lc; /* Recursively transform child paths. */ - foreach (lc, best_path->custom_paths) + foreach(lc, best_path->custom_paths) { - Plan *plan = create_plan_recurse(root, (Path *) lfirst(lc)); + Plan *plan = create_plan_recurse(root, (Path *) lfirst(lc)); custom_plans = lappend(custom_plans, plan); } @@ -3437,17 +3448,19 @@ make_seqscan(List *qptlist, static SampleScan * make_samplescan(List *qptlist, List *qpqual, - Index scanrelid) + Index scanrelid, + TableSampleClause *tsc) { SampleScan *node = makeNode(SampleScan); - Plan *plan = &node->plan; + Plan *plan = &node->scan.plan; /* cost should be inserted by caller */ plan->targetlist = qptlist; plan->qual = qpqual; plan->lefttree = NULL; plan->righttree = NULL; - node->scanrelid = scanrelid; + node->scan.scanrelid = scanrelid; + node->tablesample = tsc; return node; } @@ -3692,7 +3705,8 @@ make_foreignscan(List *qptlist, Index scanrelid, List *fdw_exprs, List *fdw_private, - List *fdw_scan_tlist) + List *fdw_scan_tlist, + List *fdw_recheck_quals) { ForeignScan *node = makeNode(ForeignScan); Plan *plan = &node->scan.plan; @@ -3708,6 +3722,7 @@ make_foreignscan(List *qptlist, node->fdw_exprs = fdw_exprs; node->fdw_private = fdw_private; node->fdw_scan_tlist = fdw_scan_tlist; + node->fdw_recheck_quals = fdw_recheck_quals; /* fs_relids will be filled in by create_foreignscan_plan */ node->fs_relids = NULL; /* fsSystemCol will be filled in by create_foreignscan_plan */ @@ -4430,7 +4445,7 @@ make_sort_from_groupcols(PlannerInfo *root, TargetEntry *tle = get_tle_by_resno(sub_tlist, grpColIdx[numsortkeys]); if (!tle) - elog(ERROR, "could not retrive tle for sort-from-groupcols"); + elog(ERROR, "could not retrieve tle for sort-from-groupcols"); sortColIdx[numsortkeys] = tle->resno; sortOperators[numsortkeys] = grpcl->sortop; diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c index 00b2625d342ee..2f4e8181eb5a7 100644 --- a/src/backend/optimizer/plan/initsplan.c +++ b/src/backend/optimizer/plan/initsplan.c @@ -306,7 +306,9 @@ extract_lateral_references(PlannerInfo *root, RelOptInfo *brel, Index rtindex) return; /* Fetch the appropriate variables */ - if (rte->rtekind == RTE_SUBQUERY) + if (rte->rtekind == RTE_RELATION) + vars = pull_vars_of_level((Node *) rte->tablesample, 0); + else if (rte->rtekind == RTE_SUBQUERY) vars = pull_vars_of_level((Node *) rte->subquery, 1); else if (rte->rtekind == RTE_FUNCTION) vars = pull_vars_of_level((Node *) rte->functions, 0); @@ -1126,6 +1128,9 @@ make_outerjoininfo(PlannerInfo *root, min_righthand = bms_int_members(bms_union(clause_relids, inner_join_rels), right_rels); + /* + * Now check previous outer joins for ordering restrictions. + */ foreach(l, root->join_info_list) { SpecialJoinInfo *otherinfo = (SpecialJoinInfo *) lfirst(l); @@ -1165,9 +1170,15 @@ make_outerjoininfo(PlannerInfo *root, * For a lower OJ in our RHS, if our join condition does not use the * lower join's RHS and the lower OJ's join condition is strict, we * can interchange the ordering of the two OJs; otherwise we must add - * the lower OJ's full syntactic relset to min_righthand. Also, we - * must preserve ordering anyway if either the current join or the - * lower OJ is either a semijoin or an antijoin. + * the lower OJ's full syntactic relset to min_righthand. + * + * Also, if our join condition does not use the lower join's LHS + * either, force the ordering to be preserved. Otherwise we can end + * up with SpecialJoinInfos with identical min_righthands, which can + * confuse join_is_legal (see discussion in backend/optimizer/README). + * + * Also, we must preserve ordering anyway if either the current join + * or the lower OJ is either a semijoin or an antijoin. * * Here, we have to consider that "our join condition" includes any * clauses that syntactically appeared above the lower OJ and below @@ -1183,6 +1194,7 @@ make_outerjoininfo(PlannerInfo *root, if (bms_overlap(right_rels, otherinfo->syn_righthand)) { if (bms_overlap(clause_relids, otherinfo->syn_righthand) || + !bms_overlap(clause_relids, otherinfo->min_lefthand) || jointype == JOIN_SEMI || jointype == JOIN_ANTI || otherinfo->jointype == JOIN_SEMI || diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index a6ce96efc4862..09d4ea12e874c 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -505,14 +505,10 @@ subquery_planner(PlannerGlobal *glob, Query *parse, if (rte->rtekind == RTE_RELATION) { if (rte->tablesample) - { - rte->tablesample->args = (List *) - preprocess_expression(root, (Node *) rte->tablesample->args, - EXPRKIND_TABLESAMPLE); - rte->tablesample->repeatable = (Node *) - preprocess_expression(root, rte->tablesample->repeatable, + rte->tablesample = (TableSampleClause *) + preprocess_expression(root, + (Node *) rte->tablesample, EXPRKIND_TABLESAMPLE); - } } else if (rte->rtekind == RTE_SUBQUERY) { @@ -574,13 +570,12 @@ subquery_planner(PlannerGlobal *glob, Query *parse, if (contain_agg_clause(havingclause) || contain_volatile_functions(havingclause) || - contain_subplans(havingclause) || - parse->groupingSets) + contain_subplans(havingclause)) { /* keep it in HAVING */ newHaving = lappend(newHaving, havingclause); } - else if (parse->groupClause) + else if (parse->groupClause && !parse->groupingSets) { /* move it to WHERE */ parse->jointree->quals = (Node *) @@ -697,11 +692,14 @@ preprocess_expression(PlannerInfo *root, Node *expr, int kind) * If the query has any join RTEs, replace join alias variables with * base-relation variables. We must do this before sublink processing, * else sublinks expanded out from join aliases would not get processed. - * We can skip it in non-lateral RTE functions and VALUES lists, however, - * since they can't contain any Vars of the current query level. + * We can skip it in non-lateral RTE functions, VALUES lists, and + * TABLESAMPLE clauses, however, since they can't contain any Vars of the + * current query level. */ if (root->hasJoinRTEs && - !(kind == EXPRKIND_RTFUNC || kind == EXPRKIND_VALUES)) + !(kind == EXPRKIND_RTFUNC || + kind == EXPRKIND_VALUES || + kind == EXPRKIND_TABLESAMPLE)) expr = flatten_join_alias_vars(root, expr); /* @@ -1538,9 +1536,11 @@ grouping_planner(PlannerInfo *root, double tuple_fraction) standard_qp_callback, &qp_extra); /* - * Extract rowcount and width estimates for use below. + * Extract rowcount and width estimates for use below. If final_rel + * has been proven dummy, its rows estimate will be zero; clamp it to + * one to avoid zero-divide in subsequent calculations. */ - path_rows = final_rel->rows; + path_rows = clamp_row_est(final_rel->rows); path_width = final_rel->width; /* @@ -2402,13 +2402,8 @@ build_grouping_chain(PlannerInfo *root, * Prepare the grpColIdx for the real Agg node first, because we may need * it for sorting */ - if (list_length(rollup_groupclauses) > 1) - { - Assert(rollup_lists && llast(rollup_lists)); - - top_grpColIdx = - remap_groupColIdx(root, llast(rollup_groupclauses)); - } + if (parse->groupingSets) + top_grpColIdx = remap_groupColIdx(root, llast(rollup_groupclauses)); /* * If we need a Sort operation on the input, generate that. diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 820f69dc67c52..e1e1d7ab4bd9b 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -372,10 +372,10 @@ flatten_rtes_walker(Node *node, PlannerGlobal *glob) * * In the flat rangetable, we zero out substructure pointers that are not * needed by the executor; this reduces the storage space and copying cost - * for cached plans. We keep only the alias and eref Alias fields, which are - * needed by EXPLAIN, and the selectedCols, insertedCols and updatedCols - * bitmaps, which are needed for executor-startup permissions checking and for - * trigger event checking. + * for cached plans. We keep only the ctename, alias and eref Alias fields, + * which are needed by EXPLAIN, and the selectedCols, insertedCols and + * updatedCols bitmaps, which are needed for executor-startup permissions + * checking and for trigger event checking. */ static void add_rte_to_flat_rtable(PlannerGlobal *glob, RangeTblEntry *rte) @@ -387,6 +387,7 @@ add_rte_to_flat_rtable(PlannerGlobal *glob, RangeTblEntry *rte) memcpy(newrte, rte, sizeof(RangeTblEntry)); /* zap unneeded sub-structure */ + newrte->tablesample = NULL; newrte->subquery = NULL; newrte->joinaliasvars = NIL; newrte->functions = NIL; @@ -395,6 +396,7 @@ add_rte_to_flat_rtable(PlannerGlobal *glob, RangeTblEntry *rte) newrte->ctecoltypes = NIL; newrte->ctecoltypmods = NIL; newrte->ctecolcollations = NIL; + newrte->securityQuals = NIL; glob->finalrtable = lappend(glob->finalrtable, newrte); @@ -454,11 +456,13 @@ set_plan_refs(PlannerInfo *root, Plan *plan, int rtoffset) { SampleScan *splan = (SampleScan *) plan; - splan->scanrelid += rtoffset; - splan->plan.targetlist = - fix_scan_list(root, splan->plan.targetlist, rtoffset); - splan->plan.qual = - fix_scan_list(root, splan->plan.qual, rtoffset); + splan->scan.scanrelid += rtoffset; + splan->scan.plan.targetlist = + fix_scan_list(root, splan->scan.plan.targetlist, rtoffset); + splan->scan.plan.qual = + fix_scan_list(root, splan->scan.plan.qual, rtoffset); + splan->tablesample = (TableSampleClause *) + fix_scan_expr(root, (Node *) splan->tablesample, rtoffset); } break; case T_IndexScan: @@ -776,6 +780,8 @@ set_plan_refs(PlannerInfo *root, Plan *plan, int rtoffset) linitial_int(splan->resultRelations), rtoffset); + pfree(itlist); + splan->exclRelTlist = fix_scan_list(root, splan->exclRelTlist, rtoffset); } @@ -1121,13 +1127,15 @@ set_foreignscan_references(PlannerInfo *root, } else { - /* Adjust tlist, qual, fdw_exprs in the standard way */ + /* Adjust tlist, qual, fdw_exprs, etc. in the standard way */ fscan->scan.plan.targetlist = fix_scan_list(root, fscan->scan.plan.targetlist, rtoffset); fscan->scan.plan.qual = fix_scan_list(root, fscan->scan.plan.qual, rtoffset); fscan->fdw_exprs = fix_scan_list(root, fscan->fdw_exprs, rtoffset); + fscan->fdw_recheck_quals = + fix_scan_list(root, fscan->fdw_recheck_quals, rtoffset); } /* Adjust fs_relids if needed */ @@ -1197,7 +1205,7 @@ set_customscan_references(PlannerInfo *root, } /* Adjust child plan-nodes recursively, if needed */ - foreach (lc, cscan->custom_plans) + foreach(lc, cscan->custom_plans) { lfirst(lc) = set_plan_refs(root, (Plan *) lfirst(lc), rtoffset); } @@ -1237,7 +1245,7 @@ copyVar(Var *var) * This is code that is common to all variants of expression-fixing. * We must look up operator opcode info for OpExpr and related nodes, * add OIDs from regclass Const nodes into root->glob->relationOids, and - * add catalog TIDs for user-defined functions into root->glob->invalItems. + * add PlanInvalItems for user-defined functions into root->glob->invalItems. * We also fill in column index lists for GROUPING() expressions. * * We assume it's okay to update opcode info in-place. So this could possibly @@ -1923,16 +1931,21 @@ search_indexed_tlist_for_sortgroupref(Node *node, * relation target lists. Also perform opcode lookup and add * regclass OIDs to root->glob->relationOids. * - * This is used in two different scenarios: a normal join clause, where all - * the Vars in the clause *must* be replaced by OUTER_VAR or INNER_VAR - * references; and a RETURNING clause, which may contain both Vars of the - * target relation and Vars of other relations. In the latter case we want - * to replace the other-relation Vars by OUTER_VAR references, while leaving - * target Vars alone. - * - * For a normal join, acceptable_rel should be zero so that any failure to - * match a Var will be reported as an error. For the RETURNING case, pass - * inner_itlist = NULL and acceptable_rel = the ID of the target relation. + * This is used in three different scenarios: + * 1) a normal join clause, where all the Vars in the clause *must* be + * replaced by OUTER_VAR or INNER_VAR references. In this case + * acceptable_rel should be zero so that any failure to match a Var will be + * reported as an error. + * 2) RETURNING clauses, which may contain both Vars of the target relation + * and Vars of other relations. In this case we want to replace the + * other-relation Vars by OUTER_VAR references, while leaving target Vars + * alone. Thus inner_itlist = NULL and acceptable_rel = the ID of the + * target relation should be passed. + * 3) ON CONFLICT UPDATE SET/WHERE clauses. Here references to EXCLUDED are + * to be replaced with INNER_VAR references, while leaving target Vars (the + * to-be-updated relation) alone. Correspondingly inner_itlist is to be + * EXCLUDED elements, outer_itlist = NULL and acceptable_rel the target + * relation. * * 'clauses' is the targetlist or list of join clauses * 'outer_itlist' is the indexed target list of the outer join relation, @@ -1975,7 +1988,7 @@ fix_join_expr_mutator(Node *node, fix_join_expr_context *context) { Var *var = (Var *) node; - /* First look for the var in the input tlists */ + /* Look for the var in the input tlists, first in the outer */ if (context->outer_itlist) { newvar = search_indexed_tlist_for_var(var, @@ -1986,7 +1999,7 @@ fix_join_expr_mutator(Node *node, fix_join_expr_context *context) return (Node *) newvar; } - /* Then in the outer */ + /* then in the inner. */ if (context->inner_itlist) { newvar = search_indexed_tlist_for_var(var, diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index 4708b87f330b6..00fb6376d9794 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -2216,7 +2216,12 @@ finalize_plan(PlannerInfo *root, Plan *plan, Bitmapset *valid_params, break; case T_SeqScan: + context.paramids = bms_add_members(context.paramids, scan_params); + break; + case T_SampleScan: + finalize_primnode((Node *) ((SampleScan *) plan)->tablesample, + &context); context.paramids = bms_add_members(context.paramids, scan_params); break; @@ -2366,10 +2371,18 @@ finalize_plan(PlannerInfo *root, Plan *plan, Bitmapset *valid_params, break; case T_ForeignScan: - finalize_primnode((Node *) ((ForeignScan *) plan)->fdw_exprs, - &context); - /* We assume fdw_scan_tlist cannot contain Params */ - context.paramids = bms_add_members(context.paramids, scan_params); + { + ForeignScan *fscan = (ForeignScan *) plan; + + finalize_primnode((Node *) fscan->fdw_exprs, + &context); + finalize_primnode((Node *) fscan->fdw_recheck_quals, + &context); + + /* We assume fdw_scan_tlist cannot contain Params */ + context.paramids = bms_add_members(context.paramids, + scan_params); + } break; case T_CustomScan: @@ -2384,7 +2397,7 @@ finalize_plan(PlannerInfo *root, Plan *plan, Bitmapset *valid_params, bms_add_members(context.paramids, scan_params); /* child nodes if any */ - foreach (lc, cscan->custom_plans) + foreach(lc, cscan->custom_plans) { context.paramids = bms_add_members(context.paramids, diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index 92b0562843458..9bf1c662b5371 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -1091,12 +1091,15 @@ pull_up_simple_subquery(PlannerInfo *root, Node *jtnode, RangeTblEntry *rte, switch (child_rte->rtekind) { + case RTE_RELATION: + if (child_rte->tablesample) + child_rte->lateral = true; + break; case RTE_SUBQUERY: case RTE_FUNCTION: case RTE_VALUES: child_rte->lateral = true; break; - case RTE_RELATION: case RTE_JOIN: case RTE_CTE: /* these can't contain any lateral references */ @@ -1432,25 +1435,40 @@ is_simple_subquery(Query *subquery, RangeTblEntry *rte, /* * Don't pull up a subquery with an empty jointree, unless it has no quals - * and deletion_ok is TRUE. query_planner() will correctly generate a - * Result plan for a jointree that's totally empty, but we can't cope with - * an empty FromExpr appearing lower down in a jointree: we identify join - * rels via baserelid sets, so we couldn't distinguish a join containing - * such a FromExpr from one without it. This would for example break the - * PlaceHolderVar mechanism, since we'd have no way to identify where to - * evaluate a PHV coming out of the subquery. We can only handle such - * cases if the place where the subquery is linked is a FromExpr or inner - * JOIN that would still be nonempty after removal of the subquery, so - * that it's still identifiable via its contained baserelids. Safe - * contexts are signaled by deletion_ok. But even in a safe context, we - * must keep the subquery if it has any quals, because it's unclear where - * to put them in the upper query. (Note that deletion of a subquery is - * also dependent on the check below that its targetlist contains no - * set-returning functions. Deletion from a FROM list or inner JOIN is - * okay only if the subquery must return exactly one row.) + * and deletion_ok is TRUE and we're not underneath an outer join. + * + * query_planner() will correctly generate a Result plan for a jointree + * that's totally empty, but we can't cope with an empty FromExpr + * appearing lower down in a jointree: we identify join rels via baserelid + * sets, so we couldn't distinguish a join containing such a FromExpr from + * one without it. We can only handle such cases if the place where the + * subquery is linked is a FromExpr or inner JOIN that would still be + * nonempty after removal of the subquery, so that it's still identifiable + * via its contained baserelids. Safe contexts are signaled by + * deletion_ok. + * + * But even in a safe context, we must keep the subquery if it has any + * quals, because it's unclear where to put them in the upper query. + * + * Also, we must forbid pullup if such a subquery is underneath an outer + * join, because then we might need to wrap its output columns with + * PlaceHolderVars, and the PHVs would then have empty relid sets meaning + * we couldn't tell where to evaluate them. (This test is separate from + * the deletion_ok flag for possible future expansion: deletion_ok tells + * whether the immediate parent site in the jointree could cope, not + * whether we'd have PHV issues. It's possible this restriction could be + * fixed by letting the PHVs use the relids of the parent jointree item, + * but that complication is for another day.) + * + * Note that deletion of a subquery is also dependent on the check below + * that its targetlist contains no set-returning functions. Deletion from + * a FROM list or inner JOIN is okay only if the subquery must return + * exactly one row. */ if (subquery->jointree->fromlist == NIL && - (subquery->jointree->quals || !deletion_ok)) + (subquery->jointree->quals != NULL || + !deletion_ok || + lowest_outer_join != NULL)) return false; /* @@ -1664,7 +1682,8 @@ is_simple_values(PlannerInfo *root, RangeTblEntry *rte, bool deletion_ok) /* * Because VALUES can't appear under an outer join (or at least, we won't - * try to pull it up if it does), we need not worry about LATERAL. + * try to pull it up if it does), we need not worry about LATERAL, nor + * about validity of PHVs for the VALUES' outputs. */ /* @@ -1909,6 +1928,13 @@ replace_vars_in_jointree(Node *jtnode, { switch (rte->rtekind) { + case RTE_RELATION: + /* shouldn't be marked LATERAL unless tablesample */ + Assert(rte->tablesample); + rte->tablesample = (TableSampleClause *) + pullup_replace_vars((Node *) rte->tablesample, + context); + break; case RTE_SUBQUERY: rte->subquery = pullup_replace_vars_subquery(rte->subquery, @@ -1924,7 +1950,6 @@ replace_vars_in_jointree(Node *jtnode, pullup_replace_vars((Node *) rte->values_lists, context); break; - case RTE_RELATION: case RTE_JOIN: case RTE_CTE: /* these shouldn't be marked LATERAL */ diff --git a/src/backend/optimizer/prep/prepsecurity.c b/src/backend/optimizer/prep/prepsecurity.c index c4b61df300312..ee1e1e40ef84a 100644 --- a/src/backend/optimizer/prep/prepsecurity.c +++ b/src/backend/optimizer/prep/prepsecurity.c @@ -56,6 +56,12 @@ static bool security_barrier_replace_vars_walker(Node *node, * the others, providing protection against malicious user-defined security * barriers. The first security barrier qual in the list will be used in the * innermost subquery. + * + * In practice, the only RTEs that will have security barrier quals are those + * that refer to tables with row-level security, or which are the target + * relation of an update to an auto-updatable security barrier view. RTEs + * that read from a security barrier view will have already been expanded by + * the rewriter. */ void expand_security_quals(PlannerInfo *root, List *tlist) @@ -263,7 +269,8 @@ expand_security_qual(PlannerInfo *root, List *tlist, int rt_index, * Replace any variables in the outer query that refer to the * original relation RTE with references to columns that we will * expose in the new subquery, building the subquery's targetlist - * as we go. + * as we go. Also replace any references in the translated_vars + * lists of any appendrels. */ context.rt_index = rt_index; context.sublevels_up = 0; @@ -274,6 +281,8 @@ expand_security_qual(PlannerInfo *root, List *tlist, int rt_index, security_barrier_replace_vars((Node *) parse, &context); security_barrier_replace_vars((Node *) tlist, &context); + security_barrier_replace_vars((Node *) root->append_rel_list, + &context); heap_close(context.rel, NoLock); diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index d40083d396ea2..c72dbef1c8344 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -390,7 +390,7 @@ make_ands_implicit(Expr *clause) /* * contain_agg_clause - * Recursively search for Aggref nodes within a clause. + * Recursively search for Aggref/GroupingFunc nodes within a clause. * * Returns true if any aggregate found. * @@ -417,6 +417,11 @@ contain_agg_clause_walker(Node *node, void *context) Assert(((Aggref *) node)->agglevelsup == 0); return true; /* abort the tree traversal and return true */ } + if (IsA(node, GroupingFunc)) + { + Assert(((GroupingFunc *) node)->agglevelsup == 0); + return true; /* abort the tree traversal and return true */ + } Assert(!IsA(node, SubLink)); return expression_tree_walker(node, contain_agg_clause_walker, context); } @@ -1492,6 +1497,16 @@ contain_leaked_vars_walker(Node *node, void *context) } break; + case T_CurrentOfExpr: + + /* + * WHERE CURRENT OF doesn't contain function calls. Moreover, it + * is important that this can be pushed down into a + * security_barrier view, since the planner must always generate + * a TID scan when CURRENT OF is present -- c.f. cost_tidscan. + */ + return false; + default: /* diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index f7f33bbe7721b..4336ca1b782fa 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -713,7 +713,7 @@ create_seqscan_path(PlannerInfo *root, RelOptInfo *rel, Relids required_outer) /* * create_samplescan_path - * Like seqscan but uses sampling function while scanning. + * Creates a path node for a sampled table scan. */ Path * create_samplescan_path(PlannerInfo *root, RelOptInfo *rel, Relids required_outer) @@ -726,7 +726,7 @@ create_samplescan_path(PlannerInfo *root, RelOptInfo *rel, Relids required_outer required_outer); pathnode->pathkeys = NIL; /* samplescan has unordered result */ - cost_samplescan(pathnode, root, rel); + cost_samplescan(pathnode, root, rel, pathnode->param_info); return pathnode; } @@ -1449,13 +1449,13 @@ create_worktablescan_path(PlannerInfo *root, RelOptInfo *rel, /* * create_foreignscan_path - * Creates a path corresponding to a scan of a foreign table, - * returning the pathnode. + * Creates a path corresponding to a scan of a foreign table or + * a foreign join, returning the pathnode. * * This function is never called from core Postgres; rather, it's expected - * to be called by the GetForeignPaths function of a foreign data wrapper. - * We make the FDW supply all fields of the path, since we do not have any - * way to calculate them in core. + * to be called by the GetForeignPaths or GetForeignJoinPaths function of + * a foreign data wrapper. We make the FDW supply all fields of the path, + * since we do not have any way to calculate them in core. */ ForeignPath * create_foreignscan_path(PlannerInfo *root, RelOptInfo *rel, @@ -1773,6 +1773,8 @@ reparameterize_path(PlannerInfo *root, Path *path, { case T_SeqScan: return create_seqscan_path(root, rel, required_outer); + case T_SampleScan: + return (Path *) create_samplescan_path(root, rel, required_outer); case T_IndexScan: case T_IndexOnlyScan: { @@ -1805,8 +1807,6 @@ reparameterize_path(PlannerInfo *root, Path *path, case T_SubqueryScan: return create_subqueryscan_path(root, rel, path->pathkeys, required_outer); - case T_SampleScan: - return (Path *) create_samplescan_path(root, rel, required_outer); default: break; } diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index 662b97755ab28..9442e5fa32b31 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -52,7 +52,7 @@ get_relation_info_hook_type get_relation_info_hook = NULL; static bool infer_collation_opclass_match(InferenceElem *elem, Relation idxRel, - Bitmapset *inferAttrs, List *idxExprs); + List *idxExprs); static int32 get_rel_data_width(Relation rel, int32 *attr_widths); static List *get_relation_constraints(PlannerInfo *root, Oid relationObjectId, RelOptInfo *rel, @@ -616,8 +616,7 @@ infer_arbiter_indexes(PlannerInfo *root) * this for both expressions and ordinary (non-expression) * attributes appearing as inference elements. */ - if (!infer_collation_opclass_match(elem, idxRel, inferAttrs, - idxExprs)) + if (!infer_collation_opclass_match(elem, idxRel, idxExprs)) goto next; /* @@ -682,11 +681,10 @@ infer_arbiter_indexes(PlannerInfo *root) * infer_collation_opclass_match - ensure infer element opclass/collation match * * Given unique index inference element from inference specification, if - * collation was specified, or if opclass (represented here as opfamily + - * opcintype) was specified, verify that there is at least one matching - * indexed attribute (occasionally, there may be more). Skip this in the - * common case where inference specification does not include collation or - * opclass (instead matching everything, regardless of cataloged + * collation was specified, or if opclass was specified, verify that there is + * at least one matching indexed attribute (occasionally, there may be more). + * Skip this in the common case where inference specification does not include + * collation or opclass (instead matching everything, regardless of cataloged * collation/opclass of indexed attribute). * * At least historically, Postgres has not offered collations or opclasses @@ -708,11 +706,12 @@ infer_arbiter_indexes(PlannerInfo *root) */ static bool infer_collation_opclass_match(InferenceElem *elem, Relation idxRel, - Bitmapset *inferAttrs, List *idxExprs) + List *idxExprs) { AttrNumber natt; - Oid inferopfamily = InvalidOid; /* OID of att opfamily */ - Oid inferopcinputtype = InvalidOid; /* OID of att opfamily */ + Oid inferopfamily = InvalidOid; /* OID of opclass opfamily */ + Oid inferopcinputtype = InvalidOid; /* OID of opclass input type */ + int nplain = 0; /* # plain attrs observed */ /* * If inference specification element lacks collation/opclass, then no @@ -735,6 +734,10 @@ infer_collation_opclass_match(InferenceElem *elem, Relation idxRel, Oid opfamily = idxRel->rd_opfamily[natt - 1]; Oid opcinputtype = idxRel->rd_opcintype[natt - 1]; Oid collation = idxRel->rd_indcollation[natt - 1]; + int attno = idxRel->rd_index->indkey.values[natt - 1]; + + if (attno != 0) + nplain++; if (elem->inferopclass != InvalidOid && (inferopfamily != opfamily || inferopcinputtype != opcinputtype)) @@ -750,12 +753,23 @@ infer_collation_opclass_match(InferenceElem *elem, Relation idxRel, continue; } - if ((IsA(elem->expr, Var) && - bms_is_member(((Var *) elem->expr)->varattno, inferAttrs)) || - list_member(idxExprs, elem->expr)) + /* If one matching index att found, good enough -- return true */ + if (IsA(elem->expr, Var)) { - /* Found one match - good enough */ - return true; + if (((Var *) elem->expr)->varattno == attno) + return true; + } + else if (attno == 0) + { + Node *nattExpr = list_nth(idxExprs, (natt - 1) - nplain); + + /* + * Note that unlike routines like match_index_to_operand() we + * don't need to care about RelabelType. Neither the index + * definition nor the inference clause should contain them. + */ + if (equal(elem->expr, nattExpr)) + return true; } } diff --git a/src/backend/optimizer/util/predtest.c b/src/backend/optimizer/util/predtest.c index d9e49d127e1a0..7e86ca974be27 100644 --- a/src/backend/optimizer/util/predtest.c +++ b/src/backend/optimizer/util/predtest.c @@ -1028,6 +1028,8 @@ arrayexpr_cleanup_fn(PredIterInfo info) * "foo" is NULL, which we can take as equivalent to FALSE because we know * we are within an AND/OR subtree of a WHERE clause. (Again, "foo" is * already known immutable, so the clause will certainly always fail.) + * Also, if the clause is just "foo" (meaning it's a boolean variable), + * the predicate is implied since the clause can't be true if "foo" is NULL. * * Finally, if both clauses are binary operator expressions, we may be able * to prove something using the system's knowledge about operators; those @@ -1061,6 +1063,8 @@ predicate_implied_by_simple_clause(Expr *predicate, Node *clause) list_member_strip(((FuncExpr *) clause)->args, nonnullarg) && func_strict(((FuncExpr *) clause)->funcid)) return true; + if (equal(clause, nonnullarg)) + return true; } return false; /* we can't succeed below... */ } diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c index be2ef3becfe0a..68a93a1a5bdf9 100644 --- a/src/backend/optimizer/util/relnode.c +++ b/src/backend/optimizer/util/relnode.c @@ -982,9 +982,18 @@ get_joinrel_parampathinfo(PlannerInfo *root, RelOptInfo *joinrel, { RestrictInfo *rinfo = (RestrictInfo *) lfirst(lc); + /* + * In principle, join_clause_is_movable_into() should accept anything + * returned by generate_join_implied_equalities(); but because its + * analysis is only approximate, sometimes it doesn't. So we + * currently cannot use this Assert; instead just assume it's okay to + * apply the joinclause at this level. + */ +#ifdef NOT_USED Assert(join_clause_is_movable_into(rinfo, joinrel->relids, join_and_req)); +#endif if (!join_clause_is_movable_into(rinfo, outer_path->parent->relids, outer_and_req) && diff --git a/src/backend/optimizer/util/restrictinfo.c b/src/backend/optimizer/util/restrictinfo.c index e5f7836517584..65499902f6c1d 100644 --- a/src/backend/optimizer/util/restrictinfo.c +++ b/src/backend/optimizer/util/restrictinfo.c @@ -464,10 +464,9 @@ extract_actual_join_clauses(List *restrictinfo_list, * outer join, as that would change the results (rows would be suppressed * rather than being null-extended). * - * Also the target relation must not be in the clause's nullable_relids, i.e., - * there must not be an outer join below the clause that would null the Vars - * coming from the target relation. Otherwise the clause might give results - * different from what it would give at its normal semantic level. + * Also there must not be an outer join below the clause that would null the + * Vars coming from the target relation. Otherwise the clause might give + * results different from what it would give at its normal semantic level. * * Also, the join clause must not use any relations that have LATERAL * references to the target relation, since we could not put such rels on @@ -516,10 +515,31 @@ join_clause_is_movable_to(RestrictInfo *rinfo, RelOptInfo *baserel) * not pushing the clause into its outer-join outer side, nor down into * a lower outer join's inner side. * + * The check about pushing a clause down into a lower outer join's inner side + * is only approximate; it sometimes returns "false" when actually it would + * be safe to use the clause here because we're still above the outer join + * in question. This is okay as long as the answers at different join levels + * are consistent: it just means we might sometimes fail to push a clause as + * far down as it could safely be pushed. It's unclear whether it would be + * worthwhile to do this more precisely. (But if it's ever fixed to be + * exactly accurate, there's an Assert in get_joinrel_parampathinfo() that + * should be re-enabled.) + * * There's no check here equivalent to join_clause_is_movable_to's test on * lateral_referencers. We assume the caller wouldn't be inquiring unless * it'd verified that the proposed outer rels don't have lateral references - * to the current rel(s). + * to the current rel(s). (If we are considering join paths with the outer + * rels on the outside and the current rels on the inside, then this should + * have been checked at the outset of such consideration; see join_is_legal + * and the path parameterization checks in joinpath.c.) On the other hand, + * in join_clause_is_movable_to we are asking whether the clause could be + * moved for some valid set of outer rels, so we don't have the benefit of + * relying on prior checks for lateral-reference validity. + * + * Note: if this returns true, it means that the clause could be moved to + * this join relation, but that doesn't mean that this is the lowest join + * it could be moved to. Caller may need to make additional calls to verify + * that this doesn't succeed on either of the inputs of a proposed join. * * Note: get_joinrel_parampathinfo depends on the fact that if * current_and_outer is NULL, this function will always return false @@ -534,7 +554,7 @@ join_clause_is_movable_into(RestrictInfo *rinfo, if (!bms_is_subset(rinfo->clause_relids, current_and_outer)) return false; - /* Clause must physically reference target rel(s) */ + /* Clause must physically reference at least one target rel */ if (!bms_overlap(currentrelids, rinfo->clause_relids)) return false; @@ -542,7 +562,12 @@ join_clause_is_movable_into(RestrictInfo *rinfo, if (bms_overlap(currentrelids, rinfo->outer_relids)) return false; - /* Target rel(s) must not be nullable below the clause */ + /* + * Target rel(s) must not be nullable below the clause. This is + * approximate, in the safe direction, because the current join might be + * above the join where the nulling would happen, in which case the clause + * would work correctly here. But we don't have enough info to be sure. + */ if (bms_overlap(currentrelids, rinfo->nullable_relids)) return false; diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index fc463faa6be64..3ecb790cebeb5 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -891,27 +891,81 @@ transformOnConflictClause(ParseState *pstate, /* Process DO UPDATE */ if (onConflictClause->action == ONCONFLICT_UPDATE) { + Relation targetrel = pstate->p_target_relation; + Var *var; + TargetEntry *te; + int attno; + + /* + * All INSERT expressions have been parsed, get ready for potentially + * existing SET statements that need to be processed like an UPDATE. + */ + pstate->p_is_insert = false; + + /* + * Add range table entry for the EXCLUDED pseudo relation; relkind is + * set to composite to signal that we're not dealing with an actual + * relation. + */ exclRte = addRangeTableEntryForRelation(pstate, - pstate->p_target_relation, + targetrel, makeAlias("excluded", NIL), false, false); + exclRte->relkind = RELKIND_COMPOSITE_TYPE; exclRelIndex = list_length(pstate->p_rtable); /* - * Build a targetlist for the EXCLUDED pseudo relation. Out of - * simplicity we do that here, because expandRelAttrs() happens to - * nearly do the right thing; specifically it also works with views. - * It'd be more proper to instead scan some pseudo scan node, but it - * doesn't seem worth the amount of code required. - * - * The only caveat of this hack is that the permissions expandRelAttrs - * adds have to be reset. markVarForSelectPriv() will add the exact - * required permissions back. + * Build a targetlist for the EXCLUDED pseudo relation. Have to be + * careful to use resnos that correspond to attnos of the underlying + * relation. + */ + Assert(pstate->p_next_resno == 1); + for (attno = 0; attno < targetrel->rd_rel->relnatts; attno++) + { + Form_pg_attribute attr = targetrel->rd_att->attrs[attno]; + char *name; + + if (attr->attisdropped) + { + /* + * can't use atttypid here, but it doesn't really matter what + * type the Const claims to be. + */ + var = (Var *) makeNullConst(INT4OID, -1, InvalidOid); + name = ""; + } + else + { + var = makeVar(exclRelIndex, attno + 1, + attr->atttypid, attr->atttypmod, + attr->attcollation, + 0); + var->location = -1; + + name = NameStr(attr->attname); + } + + Assert(pstate->p_next_resno == attno + 1); + te = makeTargetEntry((Expr *) var, + pstate->p_next_resno++, + name, + false); + + /* don't require select access yet */ + exclRelTlist = lappend(exclRelTlist, te); + } + + /* + * Additionally add a whole row tlist entry for EXCLUDED. That's + * really only needed for ruleutils' benefit, which expects to find + * corresponding entries in child tlists. Alternatively we could do + * this only when required, but that doesn't seem worth the trouble. */ - exclRelTlist = expandRelAttrs(pstate, exclRte, - exclRelIndex, 0, -1); - exclRte->requiredPerms = 0; - exclRte->selectedCols = NULL; + var = makeVar(exclRelIndex, InvalidAttrNumber, + RelationGetRelid(targetrel), + -1, InvalidOid, 0); + te = makeTargetEntry((Expr *) var, 0, NULL, true); + exclRelTlist = lappend(exclRelTlist, te); /* * Add EXCLUDED and the target RTE to the namespace, so that they can @@ -1999,7 +2053,7 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt) Node *qual; qry->commandType = CMD_UPDATE; - pstate->p_is_update = true; + pstate->p_is_insert = false; /* process the WITH clause independently of all else */ if (stmt->withClause) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index e0ff6f16a2181..c46914d87bb01 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -457,8 +457,8 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type joined_table %type relation_expr %type relation_expr_opt_alias +%type tablesample_clause opt_repeatable_clause %type target_el single_set_clause set_target insert_column_item -%type relation_expr_tablesample tablesample_clause opt_repeatable_clause %type generic_option_name %type generic_option_arg @@ -673,7 +673,6 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %nonassoc '<' '>' '=' LESS_EQUALS GREATER_EQUALS NOT_EQUALS %nonassoc BETWEEN IN_P LIKE ILIKE SIMILAR NOT_LA %nonassoc ESCAPE /* ESCAPE must be just above LIKE/ILIKE/SIMILAR */ -%nonassoc OVERLAPS %left POSTFIXOP /* dummy for postfix Op rules */ /* * To support target_el without AS, we must give IDENT an explicit priority @@ -2333,6 +2332,20 @@ alter_table_cmd: n->subtype = AT_DisableRowSecurity; $$ = (Node *)n; } + /* ALTER TABLE FORCE ROW LEVEL SECURITY */ + | FORCE ROW LEVEL SECURITY + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ForceRowSecurity; + $$ = (Node *)n; + } + /* ALTER TABLE NO FORCE ROW LEVEL SECURITY */ + | NO FORCE ROW LEVEL SECURITY + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_NoForceRowSecurity; + $$ = (Node *)n; + } | alter_generic_options { AlterTableCmd *n = makeNode(AlterTableCmd); @@ -4593,7 +4606,7 @@ CreatePolicyStmt: CreatePolicyStmt *n = makeNode(CreatePolicyStmt); n->policy_name = $3; n->table = $5; - n->cmd = $6; + n->cmd_name = $6; n->roles = $7; n->qual = $8; n->with_check = $9; @@ -10463,9 +10476,13 @@ table_ref: relation_expr opt_alias_clause $1->alias = $2; $$ = (Node *) $1; } - | relation_expr_tablesample + | relation_expr opt_alias_clause tablesample_clause { - $$ = (Node *) $1; + RangeTableSample *n = (RangeTableSample *) $3; + $1->alias = $2; + /* relation_expr goes inside the RangeTableSample node */ + n->relation = (Node *) $1; + $$ = (Node *) n; } | func_table func_alias_clause { @@ -10792,23 +10809,18 @@ relation_expr_opt_alias: relation_expr %prec UMINUS } ; - -relation_expr_tablesample: relation_expr opt_alias_clause tablesample_clause - { - RangeTableSample *n = (RangeTableSample *) $3; - n->relation = $1; - n->relation->alias = $2; - $$ = (Node *) n; - } - ; - +/* + * TABLESAMPLE decoration in a FROM item + */ tablesample_clause: - TABLESAMPLE ColId '(' expr_list ')' opt_repeatable_clause + TABLESAMPLE func_name '(' expr_list ')' opt_repeatable_clause { RangeTableSample *n = makeNode(RangeTableSample); + /* n->relation will be filled in later */ n->method = $2; n->args = $4; n->repeatable = $6; + n->location = @2; $$ = (Node *) n; } ; diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index 478d8ca70bdd6..3846b569d6fa4 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -372,6 +372,13 @@ check_agglevels_and_constraints(ParseState *pstate, Node *expr) break; case EXPR_KIND_WHERE: errkind = true; + break; + case EXPR_KIND_POLICY: + if (isAgg) + err = _("aggregate functions are not allowed in policy expressions"); + else + err = _("grouping operations are not allowed in policy expressions"); + break; case EXPR_KIND_HAVING: /* okay */ @@ -770,6 +777,9 @@ transformWindowFuncCall(ParseState *pstate, WindowFunc *wfunc, case EXPR_KIND_WHERE: errkind = true; break; + case EXPR_KIND_POLICY: + err = _("window functions are not allowed in policy expressions"); + break; case EXPR_KIND_HAVING: errkind = true; break; diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index e90e1d68e3a53..9c2846dc337e1 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -18,8 +18,8 @@ #include "miscadmin.h" #include "access/heapam.h" +#include "access/tsmapi.h" #include "catalog/catalog.h" -#include "access/htup_details.h" #include "catalog/heap.h" #include "catalog/pg_constraint.h" #include "catalog/pg_type.h" @@ -43,7 +43,7 @@ #include "utils/guc.h" #include "utils/lsyscache.h" #include "utils/rel.h" -#include "utils/syscache.h" + /* Convenience macro for the most common makeNamespaceItem() case */ #define makeDefaultNSItem(rte) makeNamespaceItem(rte, true, true, false, true) @@ -63,6 +63,8 @@ static RangeTblEntry *transformRangeSubselect(ParseState *pstate, RangeSubselect *r); static RangeTblEntry *transformRangeFunction(ParseState *pstate, RangeFunction *r); +static TableSampleClause *transformRangeTableSample(ParseState *pstate, + RangeTableSample *rts); static Node *transformFromClauseItem(ParseState *pstate, Node *n, RangeTblEntry **top_rte, int *top_rti, List **namespace); @@ -423,40 +425,6 @@ transformJoinOnClause(ParseState *pstate, JoinExpr *j, List *namespace) return result; } -static RangeTblEntry * -transformTableSampleEntry(ParseState *pstate, RangeTableSample *rv) -{ - RangeTblEntry *rte = NULL; - CommonTableExpr *cte = NULL; - TableSampleClause *tablesample = NULL; - - /* if relation has an unqualified name, it might be a CTE reference */ - if (!rv->relation->schemaname) - { - Index levelsup; - - cte = scanNameSpaceForCTE(pstate, rv->relation->relname, &levelsup); - } - - /* We first need to build a range table entry */ - if (!cte) - rte = transformTableEntry(pstate, rv->relation); - - if (!rte || - (rte->relkind != RELKIND_RELATION && - rte->relkind != RELKIND_MATVIEW)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("TABLESAMPLE clause can only be used on tables and materialized views"), - parser_errposition(pstate, rv->relation->location))); - - tablesample = ParseTableSample(pstate, rv->method, rv->repeatable, - rv->args, rv->relation->location); - rte->tablesample = tablesample; - - return rte; -} - /* * transformTableEntry --- transform a RangeVar (simple relation reference) */ @@ -748,6 +716,109 @@ transformRangeFunction(ParseState *pstate, RangeFunction *r) return rte; } +/* + * transformRangeTableSample --- transform a TABLESAMPLE clause + * + * Caller has already transformed rts->relation, we just have to validate + * the remaining fields and create a TableSampleClause node. + */ +static TableSampleClause * +transformRangeTableSample(ParseState *pstate, RangeTableSample *rts) +{ + TableSampleClause *tablesample; + Oid handlerOid; + Oid funcargtypes[1]; + TsmRoutine *tsm; + List *fargs; + ListCell *larg, + *ltyp; + + /* + * To validate the sample method name, look up the handler function, which + * has the same name, one dummy INTERNAL argument, and a result type of + * tsm_handler. (Note: tablesample method names are not schema-qualified + * in the SQL standard; but since they are just functions to us, we allow + * schema qualification to resolve any potential ambiguity.) + */ + funcargtypes[0] = INTERNALOID; + + handlerOid = LookupFuncName(rts->method, 1, funcargtypes, true); + + /* we want error to complain about no-such-method, not no-such-function */ + if (!OidIsValid(handlerOid)) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("tablesample method %s does not exist", + NameListToString(rts->method)), + parser_errposition(pstate, rts->location))); + + /* check that handler has correct return type */ + if (get_func_rettype(handlerOid) != TSM_HANDLEROID) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("function %s must return type \"tsm_handler\"", + NameListToString(rts->method)), + parser_errposition(pstate, rts->location))); + + /* OK, run the handler to get TsmRoutine, for argument type info */ + tsm = GetTsmRoutine(handlerOid); + + tablesample = makeNode(TableSampleClause); + tablesample->tsmhandler = handlerOid; + + /* check user provided the expected number of arguments */ + if (list_length(rts->args) != list_length(tsm->parameterTypes)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_TABLESAMPLE_ARGUMENT), + errmsg_plural("tablesample method %s requires %d argument, not %d", + "tablesample method %s requires %d arguments, not %d", + list_length(tsm->parameterTypes), + NameListToString(rts->method), + list_length(tsm->parameterTypes), + list_length(rts->args)), + parser_errposition(pstate, rts->location))); + + /* + * Transform the arguments, typecasting them as needed. Note we must also + * assign collations now, because assign_query_collations() doesn't + * examine any substructure of RTEs. + */ + fargs = NIL; + forboth(larg, rts->args, ltyp, tsm->parameterTypes) + { + Node *arg = (Node *) lfirst(larg); + Oid argtype = lfirst_oid(ltyp); + + arg = transformExpr(pstate, arg, EXPR_KIND_FROM_FUNCTION); + arg = coerce_to_specific_type(pstate, arg, argtype, "TABLESAMPLE"); + assign_expr_collations(pstate, arg); + fargs = lappend(fargs, arg); + } + tablesample->args = fargs; + + /* Process REPEATABLE (seed) */ + if (rts->repeatable != NULL) + { + Node *arg; + + if (!tsm->repeatable_across_queries) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("tablesample method %s does not support REPEATABLE", + NameListToString(rts->method)), + parser_errposition(pstate, rts->location))); + + arg = transformExpr(pstate, rts->repeatable, EXPR_KIND_FROM_FUNCTION); + arg = coerce_to_specific_type(pstate, arg, FLOAT8OID, "REPEATABLE"); + assign_expr_collations(pstate, arg); + tablesample->repeatable = (Expr *) arg; + } + else + tablesample->repeatable = NULL; + + return tablesample; +} + /* * transformFromClauseItem - @@ -844,6 +915,33 @@ transformFromClauseItem(ParseState *pstate, Node *n, rtr->rtindex = rtindex; return (Node *) rtr; } + else if (IsA(n, RangeTableSample)) + { + /* TABLESAMPLE clause (wrapping some other valid FROM node) */ + RangeTableSample *rts = (RangeTableSample *) n; + Node *rel; + RangeTblRef *rtr; + RangeTblEntry *rte; + + /* Recursively transform the contained relation */ + rel = transformFromClauseItem(pstate, rts->relation, + top_rte, top_rti, namespace); + /* Currently, grammar could only return a RangeVar as contained rel */ + Assert(IsA(rel, RangeTblRef)); + rtr = (RangeTblRef *) rel; + rte = rt_fetch(rtr->rtindex, pstate->p_rtable); + /* We only support this on plain relations and matviews */ + if (rte->relkind != RELKIND_RELATION && + rte->relkind != RELKIND_MATVIEW) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("TABLESAMPLE clause can only be applied to tables and materialized views"), + parser_errposition(pstate, exprLocation(rts->relation)))); + + /* Transform TABLESAMPLE details and attach to the RTE */ + rte->tablesample = transformRangeTableSample(pstate, rts); + return (Node *) rtr; + } else if (IsA(n, JoinExpr)) { /* A newfangled join expression */ @@ -1165,26 +1263,6 @@ transformFromClauseItem(ParseState *pstate, Node *n, return (Node *) j; } - else if (IsA(n, RangeTableSample)) - { - /* Tablesample reference */ - RangeTableSample *rv = (RangeTableSample *) n; - RangeTblRef *rtr; - RangeTblEntry *rte = NULL; - int rtindex; - - rte = transformTableSampleEntry(pstate, rv); - - /* assume new rte is at end */ - rtindex = list_length(pstate->p_rtable); - Assert(rte == rt_fetch(rtindex, pstate->p_rtable)); - *top_rte = rte; - *top_rti = rtindex; - *namespace = list_make1(makeDefaultNSItem(rte)); - rtr = makeNode(RangeTblRef); - rtr->rtindex = rtindex; - return (Node *) rtr; - } else elog(ERROR, "unrecognized node type: %d", (int) nodeTag(n)); return NULL; /* can't get here, keep compiler quiet */ @@ -1734,7 +1812,7 @@ findTargetlistEntrySQL99(ParseState *pstate, Node *node, List **tlist, * Inside a grouping set (ROLLUP, CUBE, or GROUPING SETS), we expect the * content to be nested no more than 2 deep: i.e. ROLLUP((a,b),(c,d)) is * ok, but ROLLUP((a,(b,c)),d) is flattened to ((a,b,c),d), which we then - * normalize to ((a,b,c),(d)). + * (later) normalize to ((a,b,c),(d)). * * CUBE or ROLLUP can be nested inside GROUPING SETS (but not the reverse), * and we leave that alone if we find it. But if we see GROUPING SETS inside @@ -1803,9 +1881,16 @@ flatten_grouping_sets(Node *expr, bool toplevel, bool *hasGroupingSets) foreach(l2, gset->content) { - Node *n2 = flatten_grouping_sets(lfirst(l2), false, NULL); + Node *n1 = lfirst(l2); + Node *n2 = flatten_grouping_sets(n1, false, NULL); - result_set = lappend(result_set, n2); + if (IsA(n1, GroupingSet) && + ((GroupingSet *)n1)->kind == GROUPING_SET_SETS) + { + result_set = list_concat(result_set, (List *) n2); + } + else + result_set = lappend(result_set, n2); } /* @@ -2782,7 +2867,7 @@ transformOnConflictArbiter(ParseState *pstate, if (IsCatalogRelation(pstate->p_target_relation)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("ON CONFLICT not supported with system catalog tables"), + errmsg("ON CONFLICT is not supported with system catalog tables"), parser_errposition(pstate, exprLocation((Node *) onConflictClause)))); @@ -2790,7 +2875,7 @@ transformOnConflictArbiter(ParseState *pstate, if (RelationIsUsedAsCatalogTable(pstate->p_target_relation)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("ON CONFLICT not supported on table \"%s\" used as a catalog table", + errmsg("ON CONFLICT is not supported on table \"%s\" used as a catalog table", RelationGetRelationName(pstate->p_target_relation)), parser_errposition(pstate, exprLocation((Node *) onConflictClause)))); diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 0ff46dd457c79..fa77ef1f8bb6a 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -1672,6 +1672,7 @@ transformSubLink(ParseState *pstate, SubLink *sublink) case EXPR_KIND_FROM_SUBSELECT: case EXPR_KIND_FROM_FUNCTION: case EXPR_KIND_WHERE: + case EXPR_KIND_POLICY: case EXPR_KIND_HAVING: case EXPR_KIND_FILTER: case EXPR_KIND_WINDOW_PARTITION: @@ -3173,6 +3174,8 @@ ParseExprKindName(ParseExprKind exprKind) return "function in FROM"; case EXPR_KIND_WHERE: return "WHERE"; + case EXPR_KIND_POLICY: + return "POLICY"; case EXPR_KIND_HAVING: return "HAVING"; case EXPR_KIND_FILTER: diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c index 430baff116527..554ca9d8c47e5 100644 --- a/src/backend/parser/parse_func.c +++ b/src/backend/parser/parse_func.c @@ -18,7 +18,6 @@ #include "catalog/pg_aggregate.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" -#include "catalog/pg_tablesample_method.h" #include "funcapi.h" #include "lib/stringinfo.h" #include "nodes/makefuncs.h" @@ -27,7 +26,6 @@ #include "parser/parse_clause.h" #include "parser/parse_coerce.h" #include "parser/parse_func.h" -#include "parser/parse_expr.h" #include "parser/parse_relation.h" #include "parser/parse_target.h" #include "parser/parse_type.h" @@ -769,148 +767,6 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, } -/* - * ParseTableSample - * - * Parse TABLESAMPLE clause and process the arguments - */ -TableSampleClause * -ParseTableSample(ParseState *pstate, char *samplemethod, Node *repeatable, - List *sampleargs, int location) -{ - HeapTuple tuple; - Form_pg_tablesample_method tsm; - Form_pg_proc procform; - TableSampleClause *tablesample; - List *fargs; - ListCell *larg; - int nargs, - initnargs; - Oid init_arg_types[FUNC_MAX_ARGS]; - - /* Load the tablesample method */ - tuple = SearchSysCache1(TABLESAMPLEMETHODNAME, PointerGetDatum(samplemethod)); - if (!HeapTupleIsValid(tuple)) - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("tablesample method \"%s\" does not exist", - samplemethod), - parser_errposition(pstate, location))); - - tablesample = makeNode(TableSampleClause); - tablesample->tsmid = HeapTupleGetOid(tuple); - - tsm = (Form_pg_tablesample_method) GETSTRUCT(tuple); - - tablesample->tsmseqscan = tsm->tsmseqscan; - tablesample->tsmpagemode = tsm->tsmpagemode; - tablesample->tsminit = tsm->tsminit; - tablesample->tsmnextblock = tsm->tsmnextblock; - tablesample->tsmnexttuple = tsm->tsmnexttuple; - tablesample->tsmexaminetuple = tsm->tsmexaminetuple; - tablesample->tsmend = tsm->tsmend; - tablesample->tsmreset = tsm->tsmreset; - tablesample->tsmcost = tsm->tsmcost; - - ReleaseSysCache(tuple); - - /* Validate the parameters against init function definition. */ - tuple = SearchSysCache1(PROCOID, - ObjectIdGetDatum(tablesample->tsminit)); - - if (!HeapTupleIsValid(tuple)) /* should not happen */ - elog(ERROR, "cache lookup failed for function %u", - tablesample->tsminit); - - procform = (Form_pg_proc) GETSTRUCT(tuple); - initnargs = procform->pronargs; - Assert(initnargs >= 3); - - /* - * First parameter is used to pass the SampleScanState, second is seed - * (REPEATABLE), skip the processing for them here, just assert that the - * types are correct. - */ - Assert(procform->proargtypes.values[0] == INTERNALOID); - Assert(procform->proargtypes.values[1] == INT4OID); - initnargs -= 2; - memcpy(init_arg_types, procform->proargtypes.values + 2, - initnargs * sizeof(Oid)); - - /* Now we are done with the catalog */ - ReleaseSysCache(tuple); - - /* Process repeatable (seed) */ - if (repeatable != NULL) - { - Node *arg = repeatable; - - if (arg && IsA(arg, A_Const)) - { - A_Const *con = (A_Const *) arg; - - if (con->val.type == T_Null) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("REPEATABLE clause must be NOT NULL numeric value"), - parser_errposition(pstate, con->location))); - - } - - arg = transformExpr(pstate, arg, EXPR_KIND_FROM_FUNCTION); - arg = coerce_to_specific_type(pstate, arg, INT4OID, "REPEATABLE"); - tablesample->repeatable = arg; - } - else - tablesample->repeatable = NULL; - - /* Check user provided expected number of arguments. */ - if (list_length(sampleargs) != initnargs) - ereport(ERROR, - (errcode(ERRCODE_TOO_MANY_ARGUMENTS), - errmsg_plural("tablesample method \"%s\" expects %d argument got %d", - "tablesample method \"%s\" expects %d arguments got %d", - initnargs, - samplemethod, - initnargs, list_length(sampleargs)), - parser_errposition(pstate, location))); - - /* Transform the arguments, typecasting them as needed. */ - fargs = NIL; - nargs = 0; - foreach(larg, sampleargs) - { - Node *inarg = (Node *) lfirst(larg); - Node *arg = transformExpr(pstate, inarg, EXPR_KIND_FROM_FUNCTION); - Oid argtype = exprType(arg); - - if (argtype != init_arg_types[nargs]) - { - if (!can_coerce_type(1, &argtype, &init_arg_types[nargs], - COERCION_IMPLICIT)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("wrong parameter %d for tablesample method \"%s\"", - nargs + 1, samplemethod), - errdetail("Expected type %s got %s.", - format_type_be(init_arg_types[nargs]), - format_type_be(argtype)), - parser_errposition(pstate, exprLocation(inarg)))); - - arg = coerce_type(pstate, arg, argtype, init_arg_types[nargs], -1, - COERCION_IMPLICIT, COERCE_IMPLICIT_CAST, -1); - } - - fargs = lappend(fargs, arg); - nargs++; - } - - /* Pass the arguments down */ - tablesample->args = fargs; - - return tablesample; -} - /* func_match_argtypes() * * Given a list of candidate functions (having the right name and number diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c index 0b2dacfd593d2..0c4ed65afa2e8 100644 --- a/src/backend/parser/parse_relation.c +++ b/src/backend/parser/parse_relation.c @@ -686,9 +686,12 @@ scanRTEForColumn(ParseState *pstate, RangeTblEntry *rte, char *colname, return result; /* - * If the RTE represents a real table, consider system column names. + * If the RTE represents a real relation, consider system column names. + * Composites are only used for pseudo-relations like ON CONFLICT's + * excluded. */ - if (rte->rtekind == RTE_RELATION) + if (rte->rtekind == RTE_RELATION && + rte->relkind != RELKIND_COMPOSITE_TYPE) { /* quick check to see if name could be a system column */ attnum = specialAttNum(colname); diff --git a/src/backend/po/de.po b/src/backend/po/de.po index 6cc44a6ba95f9..4b5f2be854502 100644 --- a/src/backend/po/de.po +++ b/src/backend/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-05-19 23:38+0000\n" -"PO-Revision-Date: 2015-05-19 23:31-0400\n" +"POT-Creation-Date: 2015-10-04 18:38+0000\n" +"PO-Revision-Date: 2015-10-05 09:24-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -80,24 +80,24 @@ msgid "could not close directory \"%s\": %s\n" msgstr "konnte Verzeichnis „%s“ nicht schließen: %s\n" #: ../common/psprintf.c:179 ../port/path.c:596 ../port/path.c:634 -#: ../port/path.c:651 access/transam/xlog.c:6088 lib/stringinfo.c:258 +#: ../port/path.c:651 access/transam/xlog.c:6038 lib/stringinfo.c:258 #: libpq/auth.c:821 libpq/auth.c:1182 libpq/auth.c:1250 libpq/auth.c:1659 -#: postmaster/bgworker.c:289 postmaster/bgworker.c:795 -#: postmaster/postmaster.c:2214 postmaster/postmaster.c:2245 -#: postmaster/postmaster.c:3792 postmaster/postmaster.c:4480 -#: postmaster/postmaster.c:4548 postmaster/postmaster.c:5265 -#: postmaster/postmaster.c:5519 replication/logical/logical.c:170 -#: storage/buffer/localbuf.c:396 storage/file/fd.c:459 storage/file/fd.c:856 -#: storage/file/fd.c:974 storage/file/fd.c:1587 storage/ipc/procarray.c:907 +#: postmaster/bgworker.c:289 postmaster/bgworker.c:796 +#: postmaster/postmaster.c:2284 postmaster/postmaster.c:2315 +#: postmaster/postmaster.c:3834 postmaster/postmaster.c:4522 +#: postmaster/postmaster.c:4590 postmaster/postmaster.c:5277 +#: postmaster/postmaster.c:5530 replication/logical/logical.c:167 +#: storage/buffer/localbuf.c:396 storage/file/fd.c:481 storage/file/fd.c:878 +#: storage/file/fd.c:996 storage/file/fd.c:1609 storage/ipc/procarray.c:907 #: storage/ipc/procarray.c:1393 storage/ipc/procarray.c:1400 #: storage/ipc/procarray.c:1793 storage/ipc/procarray.c:2377 #: utils/adt/formatting.c:1523 utils/adt/formatting.c:1643 -#: utils/adt/formatting.c:1764 utils/adt/regexp.c:219 utils/adt/varlena.c:4197 -#: utils/adt/varlena.c:4218 utils/fmgr/dfmgr.c:220 utils/hash/dynahash.c:411 +#: utils/adt/formatting.c:1764 utils/adt/regexp.c:219 utils/adt/varlena.c:4199 +#: utils/adt/varlena.c:4220 utils/fmgr/dfmgr.c:220 utils/hash/dynahash.c:411 #: utils/hash/dynahash.c:488 utils/hash/dynahash.c:1002 utils/mb/mbutils.c:376 -#: utils/mb/mbutils.c:709 utils/misc/guc.c:3745 utils/misc/guc.c:3761 -#: utils/misc/guc.c:3774 utils/misc/guc.c:6708 utils/misc/tzparser.c:470 -#: utils/mmgr/aset.c:499 utils/mmgr/mcxt.c:688 utils/mmgr/mcxt.c:723 +#: utils/mb/mbutils.c:709 utils/misc/guc.c:3704 utils/misc/guc.c:3720 +#: utils/misc/guc.c:3733 utils/misc/guc.c:6667 utils/misc/tzparser.c:470 +#: utils/mmgr/aset.c:504 utils/mmgr/mcxt.c:688 utils/mmgr/mcxt.c:723 #: utils/mmgr/mcxt.c:760 utils/mmgr/mcxt.c:797 utils/mmgr/mcxt.c:831 #: utils/mmgr/mcxt.c:860 utils/mmgr/mcxt.c:894 utils/mmgr/mcxt.c:974 #: utils/mmgr/mcxt.c:1007 utils/mmgr/mcxt.c:1054 @@ -118,7 +118,7 @@ msgstr "Gültige Fork-Namen sind „main“, „fsm“, „vm“ und „init“. #: ../common/restricted_token.c:68 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -msgstr "%s: WARNUNG: auf dieser Platform können keine beschränkten Token erzeugt werden\n" +msgstr "%s: WARNUNG: auf dieser Plattform können keine beschränkten Token erzeugt werden\n" #: ../common/restricted_token.c:77 #, c-format @@ -215,7 +215,7 @@ msgid "could not determine encoding for codeset \"%s\"" msgstr "konnte Kodierung für Codeset „%s“ nicht bestimmen" #: ../port/chklocale.c:260 ../port/chklocale.c:389 -#: postmaster/postmaster.c:4777 +#: postmaster/postmaster.c:4819 #, c-format msgid "Please report this to ." msgstr "Bitte berichten Sie das an ." @@ -288,22 +288,15 @@ msgstr "win32-Fehlercode %lu nach %d abgebildet" msgid "unrecognized win32 error code: %lu" msgstr "unbekannter win32-Fehlercode: %lu" -#: access/brin/brin.c:1083 -#, fuzzy, c-format -#| msgid "cannot PREPARE a transaction that has exported snapshots" -msgid "brin_summarize_new_values() cannot run in a transaction that has already obtained a snapshot" -msgstr "PREPARE kann nicht für eine Transaktion ausgeführt werden, die Snapshots exportiert hat" - -#: access/brin/brin_pageops.c:645 -#, fuzzy, c-format -#| msgid "index row size %zu exceeds maximum %zu for index \"%s\"" +#: access/brin/brin_pageops.c:647 access/brin/brin_pageops.c:805 +#, c-format msgid "index row size %lu exceeds maximum %lu for index \"%s\"" -msgstr "Größe %zu der Indexzeile überschreitet Maximum %zu für Index „%s“" +msgstr "Größe %lu der Indexzeile überschreitet Maximum %lu für Index „%s“" -#: access/brin/brin_revmap.c:448 +#: access/brin/brin_revmap.c:449 #, c-format msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" -msgstr "" +msgstr "unerwarteter Seitentyp 0x%04X in BRIN-Index „%s“ Block %u" #: access/common/heaptuple.c:708 access/common/heaptuple.c:1450 #, c-format @@ -341,7 +334,7 @@ msgstr "RESET darf keinen Parameterwert enthalten" msgid "unrecognized parameter namespace \"%s\"" msgstr "unbekannter Parameter-Namensraum „%s“" -#: access/common/reloptions.c:974 parser/parse_clause.c:277 +#: access/common/reloptions.c:974 parser/parse_clause.c:279 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "unbekannter Parameter „%s“" @@ -351,32 +344,32 @@ msgstr "unbekannter Parameter „%s“" msgid "parameter \"%s\" specified more than once" msgstr "Parameter „%s“ mehrmals angegeben" -#: access/common/reloptions.c:1019 +#: access/common/reloptions.c:1020 #, 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:1030 +#: access/common/reloptions.c:1032 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "ungültiger Wert für ganzzahlige Option „%s“: „%s“" -#: access/common/reloptions.c:1035 access/common/reloptions.c:1053 +#: access/common/reloptions.c:1038 access/common/reloptions.c:1058 #, 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:1037 +#: access/common/reloptions.c:1040 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Gültige Werte sind zwischen „%d“ und „%d“." -#: access/common/reloptions.c:1048 +#: access/common/reloptions.c:1052 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "ungültiger Wert für Gleitkommaoption „%s“: „%s“" -#: access/common/reloptions.c:1055 +#: access/common/reloptions.c:1060 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Gültige Werte sind zwischen „%f“ und „%f“." @@ -401,14 +394,14 @@ msgstr "Attribut „%s“ von Typ %s stimmt nicht mit dem entsprechenden Attribu msgid "Attribute \"%s\" of type %s does not exist in type %s." msgstr "Attribut „%s“ von Typ %s existiert nicht in Typ %s." -#: access/common/tupdesc.c:635 parser/parse_relation.c:1511 +#: access/common/tupdesc.c:635 parser/parse_relation.c:1514 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "Spalte „%s“ kann nicht als SETOF deklariert werden" #: access/gin/ginentrypage.c:109 access/gist/gist.c:1289 -#: access/nbtree/nbtinsert.c:566 access/nbtree/nbtsort.c:488 -#: access/spgist/spgdoinsert.c:1888 +#: access/nbtree/nbtinsert.c:567 access/nbtree/nbtsort.c:488 +#: access/spgist/spgdoinsert.c:1907 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "Größe %zu der Indexzeile überschreitet Maximum %zu für Index „%s“" @@ -484,7 +477,7 @@ msgstr "Index „%s“ enthält korrupte Seite bei Block %u" msgid "index row size %zu exceeds hash maximum %zu" msgstr "Größe der Indexzeile %zu überschreitet Maximum für Hash-Index %zu" -#: access/hash/hashinsert.c:70 access/spgist/spgdoinsert.c:1892 +#: access/hash/hashinsert.c:70 access/spgist/spgdoinsert.c:1911 #: access/spgist/spgutils.c:666 #, c-format msgid "Values larger than a buffer page cannot be indexed." @@ -510,45 +503,51 @@ msgstr "Index „%s“ ist kein Hash-Index" msgid "index \"%s\" has wrong hash version" msgstr "Index „%s“ hat falsche Hash-Version" -#: access/heap/heapam.c:1061 access/heap/heapam.c:1113 -#, fuzzy, c-format -#| msgid "cannot create temporary tables during recovery" +#: access/heap/heapam.c:1074 access/heap/heapam.c:1126 +#, c-format msgid "cannot access temporary tables during a parallel operation" -msgstr "während der Wiederherstellung können keine temporäre Tabellen erzeugt werden" +msgstr "während einer parallelen Operation kann nicht auf temporäre Tabellen zugegriffen werden" -#: access/heap/heapam.c:1230 access/heap/heapam.c:1258 -#: access/heap/heapam.c:1290 catalog/aclchk.c:1733 +#: access/heap/heapam.c:1243 access/heap/heapam.c:1271 +#: access/heap/heapam.c:1303 catalog/aclchk.c:1733 #, c-format msgid "\"%s\" is an index" msgstr "„%s“ ist ein Index" -#: access/heap/heapam.c:1235 access/heap/heapam.c:1263 -#: access/heap/heapam.c:1295 catalog/aclchk.c:1740 commands/tablecmds.c:8850 -#: commands/tablecmds.c:11850 +#: access/heap/heapam.c:1248 access/heap/heapam.c:1276 +#: access/heap/heapam.c:1308 catalog/aclchk.c:1740 commands/tablecmds.c:8925 +#: commands/tablecmds.c:11925 #, c-format msgid "\"%s\" is a composite type" msgstr "„%s“ ist ein zusammengesetzter Typ" -#: access/heap/heapam.c:2294 -#, fuzzy, c-format -#| msgid "cannot insert multiple commands into a prepared statement" +#: access/heap/heapam.c:2339 +#, c-format msgid "cannot insert tuples during a parallel operation" -msgstr "kann nicht mehrere Befehle in vorbereitete Anweisung einfügen" +msgstr "während einer parallelen Operation können keine Tupel eingefügt werden" -#: access/heap/heapam.c:2715 -#, fuzzy, c-format -#| msgid "cannot execute %s during recovery" +#: access/heap/heapam.c:2760 +#, c-format msgid "cannot delete tuples during a parallel operation" -msgstr "%s kann nicht während der Wiederherstellung ausgeführt werden" +msgstr "während einer parallelen Operation können keine Tupel gelöscht werden" -#: access/heap/heapam.c:3181 access/heap/heapam.c:5730 -#, fuzzy, c-format -#| msgid "cannot execute %s during recovery" +#: access/heap/heapam.c:2806 +#, c-format +msgid "attempted to delete invisible tuple" +msgstr "Versuch ein unsichtbares Tupel zu löschen" + +#: access/heap/heapam.c:3228 access/heap/heapam.c:5779 +#, c-format msgid "cannot update tuples during a parallel operation" -msgstr "%s kann nicht während der Wiederherstellung ausgeführt werden" +msgstr "während einer parallelen Operation können keine Tupel aktualisiert werden" + +#: access/heap/heapam.c:3350 +#, c-format +msgid "attempted to update invisible tuple" +msgstr "Versuch ein unsichtbares Tupel zu aktualisieren" -#: access/heap/heapam.c:4552 access/heap/heapam.c:4590 -#: access/heap/heapam.c:4813 executor/execMain.c:2267 +#: access/heap/heapam.c:4601 access/heap/heapam.c:4639 +#: access/heap/heapam.c:4862 executor/execMain.c:2279 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "konnte Sperre für Zeile in Relation „%s“ nicht setzen" @@ -565,22 +564,23 @@ msgstr "konnte nicht in Datei „%s“ schreiben, %d von %d geschrieben: %m" #: access/heap/rewriteheap.c:965 access/heap/rewriteheap.c:1177 #: access/heap/rewriteheap.c:1274 access/transam/timeline.c:407 -#: access/transam/timeline.c:497 access/transam/xlog.c:2987 -#: access/transam/xlog.c:3145 replication/logical/origin.c:608 +#: access/transam/timeline.c:497 access/transam/xlog.c:3011 +#: access/transam/xlog.c:3173 replication/logical/origin.c:613 #: replication/logical/snapbuild.c:1592 replication/slot.c:1026 -#: replication/slot.c:1115 storage/file/fd.c:437 storage/smgr/md.c:982 -#: storage/smgr/md.c:1213 storage/smgr/md.c:1386 utils/misc/guc.c:6730 +#: replication/slot.c:1115 storage/file/fd.c:459 storage/file/fd.c:2718 +#: storage/smgr/md.c:982 storage/smgr/md.c:1213 storage/smgr/md.c:1386 +#: utils/misc/guc.c:6689 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "konnte Datei „%s“ nicht fsyncen: %m" #: access/heap/rewriteheap.c:1020 access/heap/rewriteheap.c:1140 #: access/transam/timeline.c:315 access/transam/timeline.c:475 -#: access/transam/xlog.c:2943 access/transam/xlog.c:3089 -#: access/transam/xlog.c:10097 access/transam/xlog.c:10133 -#: access/transam/xlog.c:10455 postmaster/postmaster.c:4255 -#: replication/logical/origin.c:537 replication/slot.c:983 -#: storage/file/copydir.c:162 storage/smgr/md.c:320 utils/time/snapmgr.c:1068 +#: access/transam/xlog.c:2967 access/transam/xlog.c:3116 +#: access/transam/xlog.c:10096 access/transam/xlog.c:10132 +#: access/transam/xlog.c:10454 postmaster/postmaster.c:4297 +#: replication/logical/origin.c:542 replication/slot.c:983 +#: storage/file/copydir.c:162 storage/smgr/md.c:320 utils/time/snapmgr.c:1071 #, c-format msgid "could not create file \"%s\": %m" msgstr "konnte Datei „%s“ nicht erstellen: %m" @@ -598,23 +598,23 @@ msgstr "konnte Positionszeiger nicht ans Ende der Datei „%s“ setzen: %m" #: access/heap/rewriteheap.c:1167 access/transam/timeline.c:367 #: access/transam/timeline.c:401 access/transam/timeline.c:491 -#: access/transam/xlog.c:2978 access/transam/xlog.c:3138 -#: postmaster/postmaster.c:4265 postmaster/postmaster.c:4275 -#: replication/logical/origin.c:546 replication/logical/origin.c:582 -#: replication/logical/origin.c:598 replication/logical/snapbuild.c:1576 +#: access/transam/xlog.c:3002 access/transam/xlog.c:3166 +#: postmaster/postmaster.c:4307 postmaster/postmaster.c:4317 +#: replication/logical/origin.c:551 replication/logical/origin.c:587 +#: replication/logical/origin.c:603 replication/logical/snapbuild.c:1576 #: replication/slot.c:1012 storage/file/copydir.c:187 -#: utils/init/miscinit.c:1178 utils/init/miscinit.c:1187 -#: utils/init/miscinit.c:1194 utils/misc/guc.c:6691 utils/misc/guc.c:6722 -#: utils/misc/guc.c:8483 utils/misc/guc.c:8497 utils/time/snapmgr.c:1073 -#: utils/time/snapmgr.c:1080 +#: utils/init/miscinit.c:1183 utils/init/miscinit.c:1192 +#: utils/init/miscinit.c:1199 utils/misc/guc.c:6650 utils/misc/guc.c:6681 +#: utils/misc/guc.c:8468 utils/misc/guc.c:8482 utils/time/snapmgr.c:1076 +#: utils/time/snapmgr.c:1083 #, c-format msgid "could not write to file \"%s\": %m" msgstr "konnte nicht in Datei „%s“ schreiben: %m" -#: access/heap/rewriteheap.c:1250 access/transam/xlog.c:10322 +#: access/heap/rewriteheap.c:1250 access/transam/xlog.c:10321 #: access/transam/xlogarchive.c:114 access/transam/xlogarchive.c:468 -#: replication/logical/origin.c:524 replication/logical/reorderbuffer.c:2418 -#: replication/logical/reorderbuffer.c:2475 +#: replication/logical/origin.c:529 replication/logical/reorderbuffer.c:2421 +#: replication/logical/reorderbuffer.c:2478 #: replication/logical/snapbuild.c:1520 replication/logical/snapbuild.c:1895 #: replication/slot.c:1089 storage/ipc/dsm.c:326 storage/smgr/md.c:420 #: storage/smgr/md.c:469 storage/smgr/md.c:1333 @@ -624,51 +624,52 @@ msgstr "konnte Datei „%s“ nicht löschen: %m" #: access/heap/rewriteheap.c:1264 access/transam/timeline.c:111 #: access/transam/timeline.c:236 access/transam/timeline.c:334 -#: access/transam/xlog.c:2919 access/transam/xlog.c:3036 -#: access/transam/xlog.c:3074 access/transam/xlog.c:3378 -#: access/transam/xlog.c:3456 replication/basebackup.c:397 -#: replication/basebackup.c:1156 replication/logical/logicalfuncs.c:154 -#: replication/logical/origin.c:671 replication/logical/reorderbuffer.c:2035 -#: replication/logical/reorderbuffer.c:2239 -#: replication/logical/reorderbuffer.c:2866 +#: access/transam/xlog.c:2943 access/transam/xlog.c:3060 +#: access/transam/xlog.c:3101 access/transam/xlog.c:3392 +#: access/transam/xlog.c:3470 replication/basebackup.c:398 +#: replication/basebackup.c:1158 replication/logical/logicalfuncs.c:154 +#: replication/logical/origin.c:677 replication/logical/reorderbuffer.c:2038 +#: replication/logical/reorderbuffer.c:2242 +#: replication/logical/reorderbuffer.c:2869 #: replication/logical/snapbuild.c:1569 replication/logical/snapbuild.c:1653 #: replication/slot.c:1104 replication/walsender.c:458 -#: replication/walsender.c:2079 storage/file/copydir.c:155 -#: storage/file/fd.c:423 storage/file/fd.c:2464 storage/smgr/md.c:602 -#: storage/smgr/md.c:860 utils/error/elog.c:1854 utils/init/miscinit.c:1113 -#: utils/init/miscinit.c:1242 utils/misc/guc.c:6931 utils/misc/guc.c:6960 +#: replication/walsender.c:2080 storage/file/copydir.c:155 +#: storage/file/fd.c:445 storage/file/fd.c:2653 storage/file/fd.c:2705 +#: storage/smgr/md.c:602 storage/smgr/md.c:860 utils/error/elog.c:1854 +#: utils/init/miscinit.c:1118 utils/init/miscinit.c:1247 utils/misc/guc.c:6893 +#: utils/misc/guc.c:6925 #, c-format msgid "could not open file \"%s\": %m" msgstr "konnte Datei „%s“ nicht öffnen: %m" -#: access/index/indexam.c:172 catalog/objectaddress.c:1041 -#: commands/indexcmds.c:1753 commands/tablecmds.c:238 -#: commands/tablecmds.c:11841 +#: access/index/indexam.c:172 catalog/objectaddress.c:1144 +#: commands/indexcmds.c:1754 commands/tablecmds.c:238 +#: commands/tablecmds.c:11916 #, c-format msgid "\"%s\" is not an index" msgstr "„%s“ ist kein Index" -#: access/nbtree/nbtinsert.c:418 +#: access/nbtree/nbtinsert.c:419 #, c-format msgid "duplicate key value violates unique constraint \"%s\"" msgstr "doppelter Schlüsselwert verletzt Unique-Constraint „%s“" -#: access/nbtree/nbtinsert.c:420 +#: access/nbtree/nbtinsert.c:421 #, c-format msgid "Key %s already exists." msgstr "Schlüssel „%s“ existiert bereits." -#: access/nbtree/nbtinsert.c:487 +#: access/nbtree/nbtinsert.c:488 #, c-format msgid "failed to re-find tuple within index \"%s\"" msgstr "konnte Tupel mit Index „%s“ nicht erneut finden" -#: access/nbtree/nbtinsert.c:489 +#: access/nbtree/nbtinsert.c:490 #, c-format msgid "This may be because of a non-immutable index expression." msgstr "Das kann daran liegen, dass der Indexausdruck nicht „immutable“ ist." -#: access/nbtree/nbtinsert.c:569 access/nbtree/nbtsort.c:491 +#: access/nbtree/nbtinsert.c:570 access/nbtree/nbtsort.c:491 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -704,47 +705,37 @@ msgstr "Die Ursache kann ein unterbrochenes VACUUM in Version 9.3 oder älter vo msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "innere Tupelgröße %zu überschreitet SP-GiST-Maximum %zu" -#: access/tablesample/bernoulli.c:54 access/tablesample/system.c:56 -#, c-format -msgid "invalid sample size" -msgstr "ungültige Stichprobengröße" - -#: access/tablesample/bernoulli.c:55 access/tablesample/system.c:57 -#, c-format -msgid "Sample size must be numeric value between 0 and 100 (inclusive)." -msgstr "Stichprobengröße muss ein numerischer Wert zwischen 0 und 100 (einschließlich) sein." - -#: access/tablesample/tablesample.c:95 parser/parse_func.c:854 -#, c-format -msgid "REPEATABLE clause must be NOT NULL numeric value" -msgstr "" +#: access/tablesample/bernoulli.c:152 access/tablesample/system.c:156 +#, fuzzy, c-format +#| msgid "timestamp(%d) precision must be between %d and %d" +msgid "sample percentage must be between 0 and 100" +msgstr "Präzision von timestamp(%d) muss zwischen %d und %d sein" -#: access/transam/commit_ts.c:273 access/transam/commit_ts.c:359 +#: access/transam/commit_ts.c:290 access/transam/commit_ts.c:373 #, fuzzy, c-format #| msgid "could not commit database transaction" msgid "could not get commit timestamp data" msgstr "konnte Datenbanktransaktion nicht beenden" -#: access/transam/commit_ts.c:274 access/transam/commit_ts.c:360 +#: access/transam/commit_ts.c:291 access/transam/commit_ts.c:374 #: libpq/hba.c:1424 -#, fuzzy, c-format -#| msgid "Make sure the configuration parameter \"ssl_ca_file\" is set." +#, c-format msgid "Make sure the configuration parameter \"%s\" is set." -msgstr "Stellen Sie sicher, dass der Konfigurationsparameter „ssl_ca_file“ gesetzt ist." +msgstr "Stellen Sie sicher, dass der Konfigurationsparameter „%s“ gesetzt ist." -#: access/transam/commit_ts.c:281 +#: access/transam/commit_ts.c:298 #, fuzzy, c-format #| msgid "cannot inherit from temporary relation \"%s\"" msgid "cannot retrieve commit timestamp for transaction %u" msgstr "von temporärer Relation „%s“ kann nicht geerbt werden" -#: access/transam/multixact.c:1001 +#: access/transam/multixact.c:1008 #, 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:1003 access/transam/multixact.c:1010 -#: access/transam/multixact.c:1025 access/transam/multixact.c:1034 +#: access/transam/multixact.c:1010 access/transam/multixact.c:1017 +#: access/transam/multixact.c:1041 access/transam/multixact.c:1050 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -753,71 +744,71 @@ msgstr "" "Führen Sie ein datenbankweites VACUUM in dieser Datenbank aus.\n" "Eventuell müssen Sie auch alte vorbereitete Transaktionen committen oder zurückrollen." -#: access/transam/multixact.c:1008 +#: access/transam/multixact.c:1015 #, 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:1020 access/transam/multixact.c:2283 +#: access/transam/multixact.c:1036 access/transam/multixact.c:2317 #, 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:1029 access/transam/multixact.c:2292 +#: access/transam/multixact.c:1045 access/transam/multixact.c:2326 #, 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:1085 +#: access/transam/multixact.c:1106 #, fuzzy, c-format #| msgid "stack depth limit exceeded" msgid "multixact \"members\" limit exceeded" msgstr "Grenze für Stacktiefe überschritten" -#: access/transam/multixact.c:1086 +#: access/transam/multixact.c:1107 #, 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:1091 +#: access/transam/multixact.c:1112 #, 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:1098 +#: access/transam/multixact.c:1143 #, fuzzy, 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" msgid "database with OID %u must be vacuumed before %d more multixact members are used" msgstr "Datenbank mit OID %u muss gevacuumt werden, bevor %u weitere MultiXactId aufgebraucht ist" -#: access/transam/multixact.c:1101 +#: access/transam/multixact.c:1146 #, 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:1239 +#: access/transam/multixact.c:1284 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u existiert nicht mehr -- anscheinender Überlauf" -#: access/transam/multixact.c:1247 +#: access/transam/multixact.c:1292 #, 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:2247 +#: access/transam/multixact.c:2267 #, c-format msgid "MultiXactId wrap limit is %u, limited by database with OID %u" msgstr "Grenze für MultiXactId-Überlauf ist %u, begrenzt durch Datenbank mit OID %u" -#: access/transam/multixact.c:2288 access/transam/multixact.c:2297 +#: access/transam/multixact.c:2322 access/transam/multixact.c:2331 #: access/transam/varsup.c:146 access/transam/varsup.c:153 #: access/transam/varsup.c:384 access/transam/varsup.c:391 #, c-format @@ -828,94 +819,125 @@ 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." -#: access/transam/multixact.c:3067 +#: access/transam/multixact.c:2599 +#, c-format +msgid "oldest MultiXactId member is at offset %u" +msgstr "ältestes MultiXactId-Mitglied ist bei Offset %u" + +#: access/transam/multixact.c:2603 +#, 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:2625 +#, c-format +msgid "MultiXact member wraparound protections are now enabled" +msgstr "MultiXact-Member-Wraparound-Schutz ist jetzt aktiviert" + +#: access/transam/multixact.c:2627 +#, c-format +msgid "MultiXact member stop limit is now %u based on MultiXact %u" +msgstr "MultiXact-Member-Stopp-Limit ist jetzt %u, basierend auf MultiXact %u" + +#: access/transam/multixact.c:3005 +#, 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:3023 +#, fuzzy, c-format +#| msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" +msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" +msgstr "älteste MultiXact %u nicht gefunden, älteste ist MultiXact %u, Truncate wird ausgelassen" + +#: access/transam/multixact.c:3349 #, c-format msgid "invalid MultiXactId: %u" msgstr "ungültige MultiXactId: %u" -#: access/transam/parallel.c:574 +#: access/transam/parallel.c:577 #, fuzzy, c-format #| msgid "cannot execute %s in a read-only transaction" msgid "postmaster exited during a parallel transaction" msgstr "%s kann nicht in einer Read-Only-Transaktion ausgeführt werden" -#: access/transam/parallel.c:665 +#: access/transam/parallel.c:668 #, fuzzy, c-format #| msgid "no connection to the server\n" msgid "lost connection to parallel worker" msgstr "keine Verbindung mit dem Server\n" -#: access/transam/parallel.c:834 +#: access/transam/parallel.c:838 #, fuzzy, c-format #| msgid "too many dynamic shared memory segments" msgid "unable to map dynamic shared memory segment" msgstr "zu viele dynamische Shared-Memory-Segmente" -#: access/transam/parallel.c:839 +#: access/transam/parallel.c:843 #, fuzzy, c-format #| msgid "too many dynamic shared memory segments" msgid "bad magic number in dynamic shared memory segment" msgstr "zu viele dynamische Shared-Memory-Segmente" -#: access/transam/parallel.c:852 +#: access/transam/parallel.c:856 #, c-format msgid "too many parallel workers already attached" msgstr "" -#: access/transam/parallel.c:991 +#: access/transam/parallel.c:996 #, fuzzy, c-format #| msgid "parallel archiver" msgid "parallel worker, pid %d" msgstr "paralleler Archivierer" -#: access/transam/slru.c:651 +#: access/transam/slru.c:652 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "Datei „%s“ existiert nicht, wird als Nullen eingelesen" -#: access/transam/slru.c:881 access/transam/slru.c:887 -#: access/transam/slru.c:894 access/transam/slru.c:901 -#: access/transam/slru.c:908 access/transam/slru.c:915 +#: access/transam/slru.c:882 access/transam/slru.c:888 +#: access/transam/slru.c:895 access/transam/slru.c:902 +#: access/transam/slru.c:909 access/transam/slru.c:916 #, c-format msgid "could not access status of transaction %u" msgstr "konnte auf den Status von Transaktion %u nicht zugreifen" -#: access/transam/slru.c:882 +#: access/transam/slru.c:883 #, c-format msgid "Could not open file \"%s\": %m." msgstr "Konnte Datei „%s“ nicht öffnen: %m." -#: access/transam/slru.c:888 +#: access/transam/slru.c:889 #, c-format msgid "Could not seek in file \"%s\" to offset %u: %m." msgstr "Konnte Positionszeiger in Datei „%s“ nicht auf %u setzen: %m." -#: access/transam/slru.c:895 +#: access/transam/slru.c:896 #, c-format msgid "Could not read from file \"%s\" at offset %u: %m." msgstr "Konnte nicht aus Datei „%s“ bei Position %u lesen: %m." -#: access/transam/slru.c:902 +#: access/transam/slru.c:903 #, c-format msgid "Could not write to file \"%s\" at offset %u: %m." msgstr "Konnte nicht in Datei „%s“ bei Position %u schreiben: %m." -#: access/transam/slru.c:909 +#: access/transam/slru.c:910 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "Konnte Datei „%s“ nicht fsyncen: %m." -#: access/transam/slru.c:916 +#: access/transam/slru.c:917 #, c-format msgid "Could not close file \"%s\": %m." msgstr "Konnte Datei „%s“ nicht schließen: %m." -#: access/transam/slru.c:1171 +#: access/transam/slru.c:1172 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "konnte Verzeichnis „%s“ nicht leeren: anscheinender Überlauf" -#: access/transam/slru.c:1220 +#: access/transam/slru.c:1227 access/transam/slru.c:1283 #, c-format msgid "removing file \"%s\"" msgstr "entferne Datei „%s“" @@ -955,21 +977,22 @@ msgstr "ungültige Daten in History-Datei „%s“" msgid "Timeline IDs must be less than child timeline's ID." msgstr "Zeitleisten-IDs müssen kleiner als die Zeitleisten-ID des Kindes sein." -#: access/transam/timeline.c:346 access/transam/xlog.c:3116 -#: access/transam/xlog.c:10304 access/transam/xlog.c:10317 -#: access/transam/xlog.c:10680 access/transam/xlog.c:10723 -#: access/transam/xlog.c:10760 access/transam/xlog.c:10803 +#: access/transam/timeline.c:346 access/transam/xlog.c:3144 +#: access/transam/xlog.c:10303 access/transam/xlog.c:10316 +#: access/transam/xlog.c:10679 access/transam/xlog.c:10722 +#: access/transam/xlog.c:10761 access/transam/xlog.c:10804 #: access/transam/xlogfuncs.c:478 access/transam/xlogfuncs.c:497 -#: replication/logical/origin.c:678 replication/logical/origin.c:708 -#: replication/logical/reorderbuffer.c:2884 replication/walsender.c:483 -#: storage/file/copydir.c:176 utils/adt/genfile.c:139 +#: commands/extension.c:3047 replication/logical/origin.c:684 +#: replication/logical/origin.c:714 replication/logical/reorderbuffer.c:2887 +#: replication/walsender.c:483 storage/file/copydir.c:176 +#: utils/adt/genfile.c:151 #, c-format msgid "could not read file \"%s\": %m" msgstr "konnte Datei „%s“ nicht lesen: %m" #: access/transam/timeline.c:412 access/transam/timeline.c:502 -#: access/transam/xlog.c:2993 access/transam/xlog.c:3150 -#: access/transam/xlogfuncs.c:503 commands/copy.c:1619 +#: access/transam/xlog.c:3017 access/transam/xlog.c:3178 +#: access/transam/xlogfuncs.c:503 commands/copy.c:1631 #: storage/file/copydir.c:201 #, c-format msgid "could not close file \"%s\": %m" @@ -981,13 +1004,13 @@ msgid "could not link file \"%s\" to \"%s\": %m" msgstr "konnte Datei „%s“ nicht nach „%s“ linken: %m" #: access/transam/timeline.c:436 access/transam/timeline.c:526 -#: access/transam/xlog.c:3167 access/transam/xlog.c:5339 -#: access/transam/xlog.c:6546 access/transam/xlog.c:6563 +#: access/transam/xlog.c:5299 access/transam/xlog.c:6501 +#: access/transam/xlog.c:6518 access/transam/xlog.c:7300 #: access/transam/xlogarchive.c:458 access/transam/xlogarchive.c:476 #: access/transam/xlogarchive.c:586 postmaster/pgarch.c:734 -#: replication/logical/origin.c:619 replication/logical/snapbuild.c:1606 +#: replication/logical/origin.c:624 replication/logical/snapbuild.c:1606 #: replication/slot.c:470 replication/slot.c:926 replication/slot.c:1038 -#: utils/misc/guc.c:6984 utils/time/snapmgr.c:1091 +#: utils/misc/guc.c:6949 utils/time/snapmgr.c:1094 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "konnte Datei „%s“ nicht in „%s“ umbenennen: %m" @@ -997,156 +1020,156 @@ msgstr "konnte Datei „%s“ nicht in „%s“ umbenennen: %m" msgid "requested timeline %u is not in this server's history" msgstr "angeforderte Zeitleiste %u ist nicht in der History dieses Servers" -#: access/transam/twophase.c:328 +#: access/transam/twophase.c:330 #, c-format msgid "transaction identifier \"%s\" is too long" msgstr "Transaktionsbezeichner „%s“ ist zu lang" -#: access/transam/twophase.c:335 +#: access/transam/twophase.c:337 #, c-format msgid "prepared transactions are disabled" msgstr "vorbereitete Transaktionen sind abgeschaltet" -#: access/transam/twophase.c:336 +#: access/transam/twophase.c:338 #, c-format msgid "Set max_prepared_transactions to a nonzero value." msgstr "Setzen Sie max_prepared_transactions auf einen Wert höher als null." -#: access/transam/twophase.c:355 +#: access/transam/twophase.c:357 #, c-format msgid "transaction identifier \"%s\" is already in use" msgstr "Transaktionsbezeichner „%s“ wird bereits verwendet" -#: access/transam/twophase.c:364 +#: access/transam/twophase.c:366 #, c-format msgid "maximum number of prepared transactions reached" msgstr "maximale Anzahl vorbereiteter Transaktionen erreicht" -#: access/transam/twophase.c:365 +#: access/transam/twophase.c:367 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "Erhöhen Sie max_prepared_transactions (aktuell %d)." -#: access/transam/twophase.c:502 +#: access/transam/twophase.c:504 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "vorbereitete Transaktion mit Bezeichner „%s“ ist beschäftigt" -#: access/transam/twophase.c:508 +#: access/transam/twophase.c:510 #, c-format msgid "permission denied to finish prepared transaction" msgstr "keine Berechtigung, um vorbereitete Transaktion abzuschließen" -#: access/transam/twophase.c:509 +#: access/transam/twophase.c:511 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "Sie müssen Superuser oder der Benutzer sein, der die Transaktion vorbereitet hat." -#: access/transam/twophase.c:520 +#: access/transam/twophase.c:522 #, c-format msgid "prepared transaction belongs to another database" msgstr "vorbereitete Transaktion gehört zu einer anderen Datenbank" -#: access/transam/twophase.c:521 +#: access/transam/twophase.c:523 #, c-format msgid "Connect to the database where the transaction was prepared to finish it." msgstr "Verbinden Sie sich mit der Datenbank, wo die Transaktion vorbereitet wurde, um sie zu beenden." -#: access/transam/twophase.c:536 +#: access/transam/twophase.c:538 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "vorbereitete Transaktion mit Bezeichner „%s“ existiert nicht" -#: access/transam/twophase.c:1046 +#: access/transam/twophase.c:1048 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "maximale Länge der Zweiphasen-Statusdatei überschritten" -#: access/transam/twophase.c:1059 +#: access/transam/twophase.c:1061 #, c-format msgid "could not create two-phase state file \"%s\": %m" msgstr "konnte Zweiphasen-Statusdatei „%s“ nicht erstellen: %m" -#: access/transam/twophase.c:1073 access/transam/twophase.c:1090 -#: access/transam/twophase.c:1143 access/transam/twophase.c:1573 -#: access/transam/twophase.c:1580 +#: access/transam/twophase.c:1075 access/transam/twophase.c:1092 +#: access/transam/twophase.c:1145 access/transam/twophase.c:1575 +#: access/transam/twophase.c:1582 #, c-format msgid "could not write two-phase state file: %m" msgstr "konnte Zweiphasen-Statusdatei nicht schreiben: %m" -#: access/transam/twophase.c:1099 +#: access/transam/twophase.c:1101 #, c-format msgid "could not seek in two-phase state file: %m" msgstr "konnte Positionszeiger in Zweiphasen-Statusdatei nicht setzen: %m" -#: access/transam/twophase.c:1149 access/transam/twophase.c:1598 +#: access/transam/twophase.c:1151 access/transam/twophase.c:1600 #, c-format msgid "could not close two-phase state file: %m" msgstr "konnte Zweiphasen-Statusdatei nicht schließen: %m" -#: access/transam/twophase.c:1237 access/transam/twophase.c:1679 +#: access/transam/twophase.c:1239 access/transam/twophase.c:1681 #, c-format msgid "could not open two-phase state file \"%s\": %m" msgstr "konnte Zweiphasen-Statusdatei „%s“ nicht öffnen: %m" -#: access/transam/twophase.c:1254 +#: access/transam/twophase.c:1256 #, c-format msgid "could not stat two-phase state file \"%s\": %m" msgstr "konnte „stat“ für Zweiphasen-Statusdatei „%s“ nicht ausführen: %m" -#: access/transam/twophase.c:1286 +#: access/transam/twophase.c:1288 #, c-format msgid "could not read two-phase state file \"%s\": %m" msgstr "konnte Zweiphasen-Statusdatei „%s“ nicht lesen: %m" -#: access/transam/twophase.c:1382 +#: access/transam/twophase.c:1384 #, c-format msgid "two-phase state file for transaction %u is corrupt" msgstr "Zweiphasen-Statusdatei für Transaktion %u ist verfälscht" -#: access/transam/twophase.c:1535 +#: access/transam/twophase.c:1537 #, c-format msgid "could not remove two-phase state file \"%s\": %m" msgstr "konnte Zweiphasen-Statusdatei „%s“ nicht löschen: %m" -#: access/transam/twophase.c:1564 +#: access/transam/twophase.c:1566 #, c-format msgid "could not recreate two-phase state file \"%s\": %m" msgstr "konnte Zweiphasen-Statusdatei „%s“ nicht wieder erstellen: %m" -#: access/transam/twophase.c:1592 +#: access/transam/twophase.c:1594 #, c-format msgid "could not fsync two-phase state file: %m" msgstr "konnte Zweiphasen-Statusdatei nicht fsyncen: %m" -#: access/transam/twophase.c:1688 +#: access/transam/twophase.c:1690 #, c-format msgid "could not fsync two-phase state file \"%s\": %m" msgstr "konnte Zweiphasen-Statusdatei „%s“ nicht fsyncen: %m" -#: access/transam/twophase.c:1695 +#: access/transam/twophase.c:1697 #, c-format msgid "could not close two-phase state file \"%s\": %m" msgstr "konnte Zweiphasen-Statistikdatei „%s“ nicht schließen: %m" -#: access/transam/twophase.c:1760 +#: access/transam/twophase.c:1762 #, c-format msgid "removing future two-phase state file \"%s\"" msgstr "entferne Zweiphasen-Statusdatei aus der Zukunft „%s“" -#: access/transam/twophase.c:1776 access/transam/twophase.c:1787 -#: access/transam/twophase.c:1906 access/transam/twophase.c:1917 -#: access/transam/twophase.c:1990 +#: access/transam/twophase.c:1778 access/transam/twophase.c:1789 +#: access/transam/twophase.c:1908 access/transam/twophase.c:1919 +#: access/transam/twophase.c:1992 #, c-format msgid "removing corrupt two-phase state file \"%s\"" msgstr "entferne verfälschte Zweiphasen-Statusdatei „%s“" -#: access/transam/twophase.c:1895 access/transam/twophase.c:1979 +#: access/transam/twophase.c:1897 access/transam/twophase.c:1981 #, c-format msgid "removing stale two-phase state file \"%s\"" msgstr "entferne abgelaufene Zweiphasen-Statusdatei „%s“" -#: access/transam/twophase.c:1997 +#: access/transam/twophase.c:1999 #, c-format msgid "recovering prepared transaction %u" msgstr "Wiederherstellung der vorbereiteten Transaktion %u" @@ -1190,991 +1213,986 @@ msgstr "Grenze für Transaktionsnummernüberlauf ist %u, begrenzt durch Datenban 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:1441 +#: access/transam/xact.c:1453 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "maximale Anzahl committeter Subtransaktionen (%d) erreicht" -#: access/transam/xact.c:2235 +#: access/transam/xact.c:2247 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary tables" msgstr "PREPARE kann nicht für eine Transaktion ausgeführt werden, die temporäre Tabellen bearbeitet hat" -#: access/transam/xact.c:2245 +#: access/transam/xact.c:2257 #, 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:3124 +#: access/transam/xact.c:3135 #, 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:3134 +#: access/transam/xact.c:3145 #, 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:3144 +#: access/transam/xact.c:3155 #, c-format msgid "%s cannot be executed from a function or multi-command string" msgstr "%s kann nicht aus einer Funktion oder einer mehrbefehligen Zeichenkette heraus ausgeführt werden" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3215 +#: access/transam/xact.c:3226 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s kann nur in Transaktionsblöcken verwendet werden" -#: access/transam/xact.c:3399 +#: access/transam/xact.c:3410 #, c-format msgid "there is already a transaction in progress" msgstr "eine Transaktion ist bereits begonnen" -#: access/transam/xact.c:3567 access/transam/xact.c:3670 +#: access/transam/xact.c:3578 access/transam/xact.c:3681 #, c-format msgid "there is no transaction in progress" msgstr "keine Transaktion offen" -#: access/transam/xact.c:3578 -#, fuzzy, c-format -#| msgid "could not commit database transaction" +#: access/transam/xact.c:3589 +#, c-format msgid "cannot commit during a parallel operation" -msgstr "konnte Datenbanktransaktion nicht beenden" +msgstr "während einer parallelen Operation kann nicht committet werden" -#: access/transam/xact.c:3681 +#: access/transam/xact.c:3692 #, c-format msgid "cannot abort during a parallel operation" -msgstr "" +msgstr "während einer parallelen Operation kann nicht abgebrochen werden" -#: access/transam/xact.c:3723 +#: access/transam/xact.c:3734 #, c-format msgid "cannot define savepoints during a parallel operation" -msgstr "" +msgstr "während einer parallelen Operation können keine Sicherungspunkte definiert werden" -#: access/transam/xact.c:3790 -#, fuzzy, c-format -#| msgid "cannot create temporary tables during recovery" +#: access/transam/xact.c:3801 +#, c-format msgid "cannot release savepoints during a parallel operation" -msgstr "während der Wiederherstellung können keine temporäre Tabellen erzeugt werden" +msgstr "während einer parallelen Operation können keine Sicherungspunkte freigegeben werden" -#: access/transam/xact.c:3801 access/transam/xact.c:3853 -#: access/transam/xact.c:3859 access/transam/xact.c:3915 -#: access/transam/xact.c:3965 access/transam/xact.c:3971 +#: access/transam/xact.c:3812 access/transam/xact.c:3864 +#: access/transam/xact.c:3870 access/transam/xact.c:3926 +#: access/transam/xact.c:3976 access/transam/xact.c:3982 #, c-format msgid "no such savepoint" -msgstr "Savepoint existiert nicht" +msgstr "Sicherungspunkt existiert nicht" -#: access/transam/xact.c:3903 +#: access/transam/xact.c:3914 #, c-format msgid "cannot rollback to savepoints during a parallel operation" -msgstr "" +msgstr "während einer parallelen Operation kann nicht auf einen Sicherungspunkt zurückgerollt werden" -#: access/transam/xact.c:4030 -#, fuzzy, c-format -#| msgid "cannot have more than 2^32-1 subtransactions in a transaction" +#: access/transam/xact.c:4042 +#, c-format msgid "cannot start subtransactions during a parallel operation" -msgstr "kann nicht mehr als 2^32-1 Subtransaktionen in einer Transaktion haben" +msgstr "während einer parallelen Operation können keine Subtransaktionen gestartet werden" -#: access/transam/xact.c:4097 -#, fuzzy, c-format -#| msgid "cannot have more than 2^32-1 subtransactions in a transaction" +#: access/transam/xact.c:4109 +#, c-format msgid "cannot commit subtransactions during a parallel operation" -msgstr "kann nicht mehr als 2^32-1 Subtransaktionen in einer Transaktion haben" +msgstr "während einer parallelen Operation können keine Subtransaktionen committet werden" -#: access/transam/xact.c:4702 +#: access/transam/xact.c:4715 #, 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:2246 +#: access/transam/xlog.c:2270 #, c-format msgid "could not seek in log file %s to offset %u: %m" msgstr "konnte Positionszeiger in Logdatei %s nicht auf %u setzen: %m" -#: access/transam/xlog.c:2266 +#: access/transam/xlog.c:2290 #, 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:2529 +#: access/transam/xlog.c:2553 #, c-format msgid "updated min recovery point to %X/%X on timeline %u" msgstr "minimaler Recovery-Punkt auf %X/%X auf Zeitleiste %u aktualisiert" -#: access/transam/xlog.c:3120 +#: access/transam/xlog.c:3148 #, c-format msgid "not enough data in file \"%s\"" msgstr "nicht genug Daten in Datei „%s“" -#: access/transam/xlog.c:3253 +#: access/transam/xlog.c:3267 #, c-format msgid "could not link file \"%s\" to \"%s\" (initialization of log file): %m" msgstr "konnte Datei „%s“ nicht nach „%s“ linken (Logdatei-Initialisierung): %m" -#: access/transam/xlog.c:3265 +#: access/transam/xlog.c:3279 #, c-format msgid "could not rename file \"%s\" to \"%s\" (initialization of log file): %m" msgstr "konnte Datei „%s“ nicht in „%s“ umbenennen (Logdatei-Initialisierung): %m" -#: access/transam/xlog.c:3293 +#: access/transam/xlog.c:3307 #, c-format msgid "could not open transaction log file \"%s\": %m" msgstr "konnte Transaktionslogdatei „%s“ nicht öffnen: %m" -#: access/transam/xlog.c:3482 access/transam/xlog.c:5309 +#: access/transam/xlog.c:3496 access/transam/xlog.c:5269 #, c-format msgid "could not close log file %s: %m" msgstr "konnte Logdatei %s nicht schließen: %m" -#: access/transam/xlog.c:3539 replication/logical/logicalfuncs.c:149 -#: replication/walsender.c:2074 +#: access/transam/xlog.c:3553 replication/logical/logicalfuncs.c:149 +#: replication/walsender.c:2075 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "das angeforderte WAL-Segment %s wurde schon entfernt" -#: access/transam/xlog.c:3599 access/transam/xlog.c:3674 -#: access/transam/xlog.c:3871 +#: access/transam/xlog.c:3613 access/transam/xlog.c:3688 +#: access/transam/xlog.c:3886 #, c-format msgid "could not open transaction log directory \"%s\": %m" msgstr "konnte Transaktionslog-Verzeichnis „%s“ nicht öffnen: %m" -#: access/transam/xlog.c:3755 +#: access/transam/xlog.c:3769 #, c-format msgid "recycled transaction log file \"%s\"" msgstr "Transaktionslogdatei „%s“ wird wiederverwendet" -#: access/transam/xlog.c:3767 +#: access/transam/xlog.c:3781 #, c-format msgid "removing transaction log file \"%s\"" msgstr "entferne Transaktionslogdatei „%s“" -#: access/transam/xlog.c:3786 +#: access/transam/xlog.c:3801 #, c-format msgid "could not rename old transaction log file \"%s\": %m" msgstr "konnte alte Transaktionslogdatei „%s“ nicht umbenennen: %m" -#: access/transam/xlog.c:3798 +#: access/transam/xlog.c:3813 #, c-format msgid "could not remove old transaction log file \"%s\": %m" msgstr "konnte alte Transaktionslogdatei „%s“ nicht löschen: %m" -#: access/transam/xlog.c:3831 access/transam/xlog.c:3841 +#: access/transam/xlog.c:3846 access/transam/xlog.c:3856 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "benötigtes WAL-Verzeichnis „%s“ existiert nicht" -#: access/transam/xlog.c:3847 +#: access/transam/xlog.c:3862 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "erzeuge fehlendes WAL-Verzeichnis „%s“" -#: access/transam/xlog.c:3850 +#: access/transam/xlog.c:3865 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "konnte fehlendes Verzeichnis „%s“ nicht erzeugen: %m" -#: access/transam/xlog.c:3881 +#: access/transam/xlog.c:3896 #, c-format msgid "removing transaction log backup history file \"%s\"" msgstr "entferne Transaktionslog-Backup-History-Datei „%s“" -#: access/transam/xlog.c:3962 +#: access/transam/xlog.c:3977 #, 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:4084 +#: access/transam/xlog.c:4099 #, 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:4098 +#: access/transam/xlog.c:4113 #, 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:4117 +#: access/transam/xlog.c:4132 #, c-format msgid "new target timeline is %u" msgstr "neue Zielzeitleiste ist %u" -#: access/transam/xlog.c:4197 +#: access/transam/xlog.c:4212 #, c-format msgid "could not create control file \"%s\": %m" msgstr "konnte Kontrolldatei „%s“ nicht erzeugen: %m" -#: access/transam/xlog.c:4208 access/transam/xlog.c:4444 +#: access/transam/xlog.c:4223 access/transam/xlog.c:4459 #, c-format msgid "could not write to control file: %m" msgstr "konnte nicht in Kontrolldatei schreiben: %m" -#: access/transam/xlog.c:4214 access/transam/xlog.c:4450 +#: access/transam/xlog.c:4229 access/transam/xlog.c:4465 #, c-format msgid "could not fsync control file: %m" msgstr "konnte Kontrolldatei nicht fsyncen: %m" -#: access/transam/xlog.c:4219 access/transam/xlog.c:4455 +#: access/transam/xlog.c:4234 access/transam/xlog.c:4470 #, c-format msgid "could not close control file: %m" msgstr "konnte Kontrolldatei nicht schließen: %m" -#: access/transam/xlog.c:4237 access/transam/xlog.c:4433 +#: access/transam/xlog.c:4252 access/transam/xlog.c:4448 #, c-format msgid "could not open control file \"%s\": %m" msgstr "konnte Kontrolldatei „%s“ nicht öffnen: %m" -#: access/transam/xlog.c:4243 +#: access/transam/xlog.c:4258 #, c-format msgid "could not read from control file: %m" msgstr "konnte nicht aus Kontrolldatei lesen: %m" -#: access/transam/xlog.c:4256 access/transam/xlog.c:4265 -#: access/transam/xlog.c:4289 access/transam/xlog.c:4296 -#: access/transam/xlog.c:4303 access/transam/xlog.c:4308 -#: access/transam/xlog.c:4315 access/transam/xlog.c:4322 -#: access/transam/xlog.c:4329 access/transam/xlog.c:4336 -#: access/transam/xlog.c:4343 access/transam/xlog.c:4350 -#: access/transam/xlog.c:4357 access/transam/xlog.c:4366 -#: access/transam/xlog.c:4373 access/transam/xlog.c:4382 -#: access/transam/xlog.c:4389 access/transam/xlog.c:4398 -#: access/transam/xlog.c:4405 utils/init/miscinit.c:1260 +#: access/transam/xlog.c:4271 access/transam/xlog.c:4280 +#: access/transam/xlog.c:4304 access/transam/xlog.c:4311 +#: access/transam/xlog.c:4318 access/transam/xlog.c:4323 +#: access/transam/xlog.c:4330 access/transam/xlog.c:4337 +#: access/transam/xlog.c:4344 access/transam/xlog.c:4351 +#: access/transam/xlog.c:4358 access/transam/xlog.c:4365 +#: access/transam/xlog.c:4372 access/transam/xlog.c:4381 +#: access/transam/xlog.c:4388 access/transam/xlog.c:4397 +#: access/transam/xlog.c:4404 access/transam/xlog.c:4413 +#: access/transam/xlog.c:4420 utils/init/miscinit.c:1265 #, c-format msgid "database files are incompatible with server" msgstr "Datenbankdateien sind inkompatibel mit Server" -#: access/transam/xlog.c:4257 +#: access/transam/xlog.c:4272 #, 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:4261 +#: access/transam/xlog.c:4276 #, 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:4266 +#: access/transam/xlog.c:4281 #, 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:4269 access/transam/xlog.c:4293 -#: access/transam/xlog.c:4300 access/transam/xlog.c:4305 +#: access/transam/xlog.c:4284 access/transam/xlog.c:4308 +#: access/transam/xlog.c:4315 access/transam/xlog.c:4320 #, 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:4280 +#: access/transam/xlog.c:4295 #, c-format msgid "incorrect checksum in control file" msgstr "falsche Prüfsumme in Kontrolldatei" -#: access/transam/xlog.c:4290 +#: access/transam/xlog.c:4305 #, 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:4297 +#: access/transam/xlog.c:4312 #, 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:4304 +#: access/transam/xlog.c:4319 #, 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:4309 +#: access/transam/xlog.c:4324 #, 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:4312 access/transam/xlog.c:4319 -#: access/transam/xlog.c:4326 access/transam/xlog.c:4333 -#: access/transam/xlog.c:4340 access/transam/xlog.c:4347 -#: access/transam/xlog.c:4354 access/transam/xlog.c:4361 +#: access/transam/xlog.c:4327 access/transam/xlog.c:4334 +#: access/transam/xlog.c:4341 access/transam/xlog.c:4348 +#: access/transam/xlog.c:4355 access/transam/xlog.c:4362 #: access/transam/xlog.c:4369 access/transam/xlog.c:4376 -#: access/transam/xlog.c:4385 access/transam/xlog.c:4392 -#: access/transam/xlog.c:4401 access/transam/xlog.c:4408 +#: access/transam/xlog.c:4384 access/transam/xlog.c:4391 +#: access/transam/xlog.c:4400 access/transam/xlog.c:4407 +#: access/transam/xlog.c:4416 access/transam/xlog.c:4423 #, 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:4316 +#: access/transam/xlog.c:4331 #, 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:4323 +#: access/transam/xlog.c:4338 #, 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:4330 +#: access/transam/xlog.c:4345 #, c-format msgid "The database cluster was initialized with XLOG_SEG_SIZE %d, but the server was compiled with XLOG_SEG_SIZE %d." msgstr "Der Datenbank-Cluster wurde mit XLOG_SEG_SIZE %d initialisiert, aber der Server wurde mit XLOG_SEG_SIZE %d kompiliert." -#: access/transam/xlog.c:4337 +#: access/transam/xlog.c:4352 #, 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:4344 +#: access/transam/xlog.c:4359 #, 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:4351 +#: access/transam/xlog.c:4366 #, 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:4358 +#: access/transam/xlog.c:4373 #, 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:4367 +#: access/transam/xlog.c:4382 #, c-format msgid "The database cluster was initialized without HAVE_INT64_TIMESTAMP but the server was compiled with HAVE_INT64_TIMESTAMP." msgstr "Der Datenbank-Cluster wurde ohne HAVE_INT64_TIMESTAMP initialisiert, aber der Server wurde mit HAE_INT64_TIMESTAMP kompiliert." -#: access/transam/xlog.c:4374 +#: access/transam/xlog.c:4389 #, c-format msgid "The database cluster was initialized with HAVE_INT64_TIMESTAMP but the server was compiled without HAVE_INT64_TIMESTAMP." msgstr "Der Datenbank-Cluster wurde mit HAVE_INT64_TIMESTAMP initialisiert, aber der Server wurde ohne HAE_INT64_TIMESTAMP kompiliert." -#: access/transam/xlog.c:4383 +#: access/transam/xlog.c:4398 #, c-format msgid "The database cluster was initialized without USE_FLOAT4_BYVAL but the server was compiled with USE_FLOAT4_BYVAL." msgstr "Der Datenbank-Cluster wurde ohne USE_FLOAT4_BYVAL initialisiert, aber der Server wurde mit USE_FLOAT4_BYVAL kompiliert." -#: access/transam/xlog.c:4390 +#: access/transam/xlog.c:4405 #, c-format msgid "The database cluster was initialized with USE_FLOAT4_BYVAL but the server was compiled without USE_FLOAT4_BYVAL." msgstr "Der Datenbank-Cluster wurde mit USE_FLOAT4_BYVAL initialisiert, aber der Server wurde ohne USE_FLOAT4_BYVAL kompiliert." -#: access/transam/xlog.c:4399 +#: access/transam/xlog.c:4414 #, 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:4406 +#: access/transam/xlog.c:4421 #, 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:4832 +#: access/transam/xlog.c:4847 #, c-format msgid "could not write bootstrap transaction log file: %m" msgstr "konnte Bootstrap-Transaktionslogdatei nicht schreiben: %m" -#: access/transam/xlog.c:4838 +#: access/transam/xlog.c:4853 #, c-format msgid "could not fsync bootstrap transaction log file: %m" msgstr "konnte Bootstrap-Transaktionslogdatei nicht fsyncen: %m" -#: access/transam/xlog.c:4843 +#: access/transam/xlog.c:4858 #, c-format msgid "could not close bootstrap transaction log file: %m" msgstr "konnte Bootstrap-Transaktionslogdatei nicht schließen: %m" -#: access/transam/xlog.c:4918 +#: access/transam/xlog.c:4933 #, c-format msgid "could not open recovery command file \"%s\": %m" msgstr "konnte Recovery-Kommandodatei „%s“ nicht öffnen: %m" -#: access/transam/xlog.c:4964 +#: access/transam/xlog.c:4979 #, fuzzy, c-format #| msgid "invalid value for parameter \"%s\": %d" msgid "invalid value for recovery parameter \"%s\"" msgstr "ungültiger Wert für Parameter „%s“: %d" -#: access/transam/xlog.c:4966 +#: access/transam/xlog.c:4981 #, fuzzy, c-format #| msgid "Valid values are \"on\", \"off\", and \"auto\"." -msgid "The allowed values are \"pause\", \"promote\" and \"shutdown\"." +msgid "The allowed values are \"pause\", \"promote\", and \"shutdown\"." msgstr "Gültige Werte sind „on“, „off“ und „auto“." -#: access/transam/xlog.c:4985 +#: access/transam/xlog.c:5000 #, c-format msgid "recovery_target_timeline is not a valid number: \"%s\"" msgstr "recovery_target_timeline ist keine gültige Zahl: „%s“" -#: access/transam/xlog.c:5001 +#: access/transam/xlog.c:5016 #, c-format msgid "recovery_target_xid is not a valid number: \"%s\"" msgstr "recovery_target_xid ist keine gültige Zahl: „%s“" -#: access/transam/xlog.c:5032 +#: access/transam/xlog.c:5047 #, c-format msgid "recovery_target_name is too long (maximum %d characters)" msgstr "recovery_target_name ist zu lang (maximal %d Zeichen)" -#: access/transam/xlog.c:5046 +#: access/transam/xlog.c:5061 #, c-format msgid "invalid value for recovery parameter \"recovery_target\"" msgstr "ungültiger Wert für Recovery-Parameter „recovery_target“" -#: access/transam/xlog.c:5047 +#: access/transam/xlog.c:5062 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Der einzige erlaubte Wert ist „immediate“." -#: access/transam/xlog.c:5060 access/transam/xlog.c:5071 -#: commands/extension.c:527 commands/extension.c:535 utils/misc/guc.c:5486 +#: access/transam/xlog.c:5075 access/transam/xlog.c:5086 +#: commands/extension.c:531 commands/extension.c:539 utils/misc/guc.c:5445 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "Parameter „%s“ erfordert einen Boole’schen Wert" -#: access/transam/xlog.c:5106 +#: access/transam/xlog.c:5121 #, c-format msgid "parameter \"%s\" requires a temporal value" msgstr "Parameter „%s“ erfordert einen Zeitwert" -#: access/transam/xlog.c:5108 catalog/dependency.c:983 -#: catalog/dependency.c:984 catalog/dependency.c:990 catalog/dependency.c:991 -#: catalog/dependency.c:1002 catalog/dependency.c:1003 -#: catalog/objectaddress.c:950 commands/tablecmds.c:787 -#: commands/tablecmds.c:9312 commands/user.c:1033 commands/view.c:482 +#: access/transam/xlog.c:5123 catalog/dependency.c:984 +#: catalog/dependency.c:985 catalog/dependency.c:991 catalog/dependency.c:992 +#: catalog/dependency.c:1003 catalog/dependency.c:1004 +#: catalog/objectaddress.c:1053 commands/tablecmds.c:789 +#: commands/tablecmds.c:9387 commands/user.c:1027 commands/view.c:482 #: libpq/auth.c:285 port/win32/security.c:51 storage/lmgr/deadlock.c:955 -#: storage/lmgr/proc.c:1176 utils/misc/guc.c:5508 utils/misc/guc.c:5601 -#: utils/misc/guc.c:9454 utils/misc/guc.c:9488 utils/misc/guc.c:9522 -#: utils/misc/guc.c:9556 utils/misc/guc.c:9591 +#: storage/lmgr/proc.c:1177 utils/misc/guc.c:5467 utils/misc/guc.c:5560 +#: utils/misc/guc.c:9439 utils/misc/guc.c:9473 utils/misc/guc.c:9507 +#: utils/misc/guc.c:9541 utils/misc/guc.c:9576 #, c-format msgid "%s" msgstr "%s" -#: access/transam/xlog.c:5114 +#: access/transam/xlog.c:5129 #, c-format msgid "unrecognized recovery parameter \"%s\"" msgstr "unbekannter Recovery-Parameter „%s“" -#: access/transam/xlog.c:5125 +#: access/transam/xlog.c:5140 #, c-format msgid "recovery command file \"%s\" specified neither primary_conninfo nor restore_command" msgstr "Recovery-Kommandodatei „%s“ hat weder primary_conninfo noch restore_command angegeben" -#: access/transam/xlog.c:5127 +#: access/transam/xlog.c:5142 #, c-format msgid "The database server will regularly poll the pg_xlog subdirectory to check for files placed there." msgstr "Der Datenbankserver prüft das Unterverzeichnis pg_xlog regelmäßig auf dort abgelegte Dateien." -#: access/transam/xlog.c:5133 +#: access/transam/xlog.c:5148 #, c-format msgid "recovery command file \"%s\" must specify restore_command when standby mode is not enabled" msgstr "Recovery-Kommandodatei „%s“ muss restore_command angeben, wenn der Standby-Modus nicht eingeschaltet ist" -#: access/transam/xlog.c:5163 +#: access/transam/xlog.c:5178 #, c-format msgid "recovery target timeline %u does not exist" msgstr "recovery_target_timeline %u existiert nicht" -#: access/transam/xlog.c:5343 +#: access/transam/xlog.c:5303 #, c-format msgid "archive recovery complete" msgstr "Wiederherstellung aus Archiv abgeschlossen" -#: access/transam/xlog.c:5402 access/transam/xlog.c:5630 +#: access/transam/xlog.c:5362 access/transam/xlog.c:5590 #, c-format msgid "recovery stopping after reaching consistency" msgstr "Wiederherstellung beendet nachdem Konsistenz erreicht wurde" -#: access/transam/xlog.c:5490 +#: access/transam/xlog.c:5450 #, 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:5497 +#: access/transam/xlog.c:5457 #, 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:5542 +#: access/transam/xlog.c:5502 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "Wiederherstellung beendet bei Restore-Punkt „%s“, Zeit %s" -#: access/transam/xlog.c:5610 +#: access/transam/xlog.c:5570 #, 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:5618 +#: access/transam/xlog.c:5578 #, 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:5657 +#: access/transam/xlog.c:5617 #, c-format msgid "recovery has paused" msgstr "Wiederherstellung wurde pausiert" -#: access/transam/xlog.c:5658 +#: access/transam/xlog.c:5618 #, c-format msgid "Execute pg_xlog_replay_resume() to continue." msgstr "Führen Sie pg_xlog_replay_resume() aus um fortzusetzen." -#: access/transam/xlog.c:5861 +#: access/transam/xlog.c:5821 #, c-format msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" msgstr "Hot Standby ist nicht möglich, weil %s = %d eine niedrigere Einstellung als auf dem Masterserver ist (Wert dort war %d)" -#: access/transam/xlog.c:5876 -#, fuzzy, c-format -#| msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" -msgid "hot standby is not possible because it requires \"%s\" to be same on master and standby (master has \"%s\", standby has \"%s\")" -msgstr "Hot Standby ist nicht möglich, weil %s = %d eine niedrigere Einstellung als auf dem Masterserver ist (Wert dort war %d)" - -#: access/transam/xlog.c:5896 +#: access/transam/xlog.c:5847 #, c-format msgid "WAL was generated with wal_level=minimal, data may be missing" msgstr "WAL wurde mit wal_level=minimal erzeugt, eventuell fehlen Daten" -#: access/transam/xlog.c:5897 +#: access/transam/xlog.c:5848 #, c-format msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." msgstr "Das passiert, wenn vorübergehend wal_level=minimal gesetzt wurde, ohne ein neues Base-Backup zu erzeugen." -#: access/transam/xlog.c:5908 +#: access/transam/xlog.c:5859 #, c-format msgid "hot standby is not possible because wal_level was not set to \"hot_standby\" or higher on the master server" msgstr "Hot Standby ist nicht möglich, weil wal_level auf dem Masterserver nicht auf „hot_standby“ oder höher gesetzt wurde" -#: access/transam/xlog.c:5909 +#: access/transam/xlog.c:5860 #, c-format msgid "Either set wal_level to \"hot_standby\" on the master, or turn off hot_standby here." msgstr "Setzen Sie entweder wal_level auf „hot_standby“ auf dem Master oder schalten Sie hot_standby hier aus." -#: access/transam/xlog.c:5967 +#: access/transam/xlog.c:5917 #, c-format msgid "control file contains invalid data" msgstr "Kontrolldatei enthält ungültige Daten" -#: access/transam/xlog.c:5973 +#: access/transam/xlog.c:5923 #, c-format msgid "database system was shut down at %s" msgstr "Datenbanksystem wurde am %s heruntergefahren" -#: access/transam/xlog.c:5978 +#: access/transam/xlog.c:5928 #, 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:5982 +#: access/transam/xlog.c:5932 #, 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:5986 +#: access/transam/xlog.c:5936 #, 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:5988 +#: access/transam/xlog.c:5938 #, 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:5992 +#: access/transam/xlog.c:5942 #, 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:5994 +#: access/transam/xlog.c:5944 #, 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:5998 +#: access/transam/xlog.c:5948 #, 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:6054 +#: access/transam/xlog.c:6004 #, c-format msgid "entering standby mode" msgstr "Standby-Modus eingeschaltet" -#: access/transam/xlog.c:6057 +#: access/transam/xlog.c:6007 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "starte Point-in-Time-Recovery bis XID %u" -#: access/transam/xlog.c:6061 +#: access/transam/xlog.c:6011 #, c-format msgid "starting point-in-time recovery to %s" msgstr "starte Point-in-Time-Recovery bis %s" -#: access/transam/xlog.c:6065 +#: access/transam/xlog.c:6015 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "starte Point-in-Time-Recovery bis „%s“" -#: access/transam/xlog.c:6069 +#: access/transam/xlog.c:6019 #, 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:6072 +#: access/transam/xlog.c:6022 #, c-format msgid "starting archive recovery" msgstr "starte Wiederherstellung aus Archiv" -#: access/transam/xlog.c:6089 +#: access/transam/xlog.c:6039 #, c-format msgid "Failed while allocating an XLog reading processor." msgstr "Fehlgeschlagen beim Anlegen eines XLog-Leseprozessors." -#: access/transam/xlog.c:6116 access/transam/xlog.c:6236 +#: access/transam/xlog.c:6066 access/transam/xlog.c:6194 #, c-format msgid "checkpoint record is at %X/%X" msgstr "Checkpoint-Eintrag ist bei %X/%X" -#: access/transam/xlog.c:6130 +#: access/transam/xlog.c:6080 #, 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:6131 access/transam/xlog.c:6138 +#: access/transam/xlog.c:6081 access/transam/xlog.c:6088 #, c-format msgid "If you are not restoring from a backup, try removing the file \"%s/backup_label\"." msgstr "Wenn Sie gerade keine Sicherung wiederherstellen, versuchen Sie, die Datei „%s/backup_label“ zu löschen." -#: access/transam/xlog.c:6137 +#: access/transam/xlog.c:6087 #, c-format msgid "could not locate required checkpoint record" msgstr "konnte den nötigen Checkpoint-Datensatz nicht finden" -#: access/transam/xlog.c:6167 commands/tablespace.c:643 -#: commands/tablespace.c:765 commands/tablespace.c:778 -#: commands/tablespace.c:802 -#, c-format -msgid "could not remove directory \"%s\": %m" -msgstr "konnte Verzeichnis „%s“ nicht löschen: %m" - -#: access/transam/xlog.c:6175 commands/tablespace.c:651 -#: commands/tablespace.c:813 -#, c-format -msgid "could not remove symbolic link \"%s\": %m" -msgstr "konnte symbolische Verknüpfung „%s“ nicht löschen: %m" - -#: access/transam/xlog.c:6182 commands/tablespace.c:662 +#: access/transam/xlog.c:6113 commands/tablespace.c:641 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung „%s“ nicht erstellen: %m" -#: access/transam/xlog.c:6246 access/transam/xlog.c:6261 +#: access/transam/xlog.c:6145 access/transam/xlog.c:6151 +#, fuzzy, c-format +#| msgid "constraint \"%s\" for relation \"%s\" already exists" +msgid "ignoring \"%s\" file because no \"%s\" file exists" +msgstr "Constraint „%s“ existiert bereits für Relation „%s“" + +#: access/transam/xlog.c:6147 access/transam/xlog.c:10879 +#, fuzzy, c-format +#| msgid "\"%s\" was renamed to \"%s\"." +msgid "File \"%s\" was renamed to \"%s\"." +msgstr "„%s“ wurde in „%s“ umbenannt." + +#: access/transam/xlog.c:6153 access/transam/xlog.c:10869 +#, fuzzy, c-format +#| msgid "Could not rename \"%s\" to \"%s\": %m." +msgid "File \"%s\" could not be renamed to \"%s\": %m." +msgstr "Konnte „%s“ nicht in „%s“ umbenennen: %m." + +#: access/transam/xlog.c:6204 access/transam/xlog.c:6219 #, c-format msgid "could not locate a valid checkpoint record" msgstr "konnte keinen gültigen Checkpoint-Datensatz finden" -#: access/transam/xlog.c:6255 +#: access/transam/xlog.c:6213 #, c-format msgid "using previous checkpoint record at %X/%X" msgstr "verwende vorherigen Checkpoint-Eintrag bei %X/%X" -#: access/transam/xlog.c:6299 +#: access/transam/xlog.c:6257 #, 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:6301 +#: access/transam/xlog.c:6259 #, 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:6317 +#: access/transam/xlog.c:6275 #, 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:6326 +#: access/transam/xlog.c:6284 #, c-format msgid "redo record is at %X/%X; shutdown %s" msgstr "Redo-Eintrag ist bei %X/%X; Shutdown %s" -#: access/transam/xlog.c:6330 +#: access/transam/xlog.c:6288 #, c-format msgid "next transaction ID: %u/%u; next OID: %u" msgstr "nächste Transaktions-ID: %u/%u; nächste OID: %u" -#: access/transam/xlog.c:6334 +#: access/transam/xlog.c:6292 #, c-format msgid "next MultiXactId: %u; next MultiXactOffset: %u" msgstr "nächste MultiXactId: %u; nächster MultiXactOffset: %u" -#: access/transam/xlog.c:6337 +#: access/transam/xlog.c:6295 #, c-format msgid "oldest unfrozen transaction ID: %u, in database %u" msgstr "älteste nicht eingefrorene Transaktions-ID: %u, in Datenbank %u" -#: access/transam/xlog.c:6340 +#: access/transam/xlog.c:6298 #, c-format msgid "oldest MultiXactId: %u, in database %u" msgstr "älteste MultiXactId: %u, in Datenbank %u" -#: access/transam/xlog.c:6343 +#: access/transam/xlog.c:6301 #, c-format msgid "commit timestamp Xid oldest/newest: %u/%u" msgstr "" -#: access/transam/xlog.c:6348 +#: access/transam/xlog.c:6306 #, c-format msgid "invalid next transaction ID" msgstr "ungültige nächste Transaktions-ID" -#: access/transam/xlog.c:6426 +#: access/transam/xlog.c:6381 #, c-format msgid "invalid redo in checkpoint record" msgstr "ungültiges Redo im Checkpoint-Datensatz" -#: access/transam/xlog.c:6437 +#: access/transam/xlog.c:6392 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "ungültiger Redo-Datensatz im Shutdown-Checkpoint" -#: access/transam/xlog.c:6465 +#: access/transam/xlog.c:6420 #, 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:6469 +#: access/transam/xlog.c:6424 #, 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:6513 +#: access/transam/xlog.c:6468 #, 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:6514 +#: access/transam/xlog.c:6469 #, 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:6596 +#: access/transam/xlog.c:6551 #, c-format msgid "initializing for hot standby" msgstr "initialisiere für Hot Standby" -#: access/transam/xlog.c:6729 +#: access/transam/xlog.c:6684 #, c-format msgid "redo starts at %X/%X" msgstr "Redo beginnt bei %X/%X" -#: access/transam/xlog.c:6942 +#: access/transam/xlog.c:6898 #, 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:6979 +#: access/transam/xlog.c:6936 #, c-format msgid "redo done at %X/%X" msgstr "Redo fertig bei %X/%X" -#: access/transam/xlog.c:6984 access/transam/xlog.c:8866 +#: access/transam/xlog.c:6941 access/transam/xlog.c:8876 #, c-format msgid "last completed transaction was at log time %s" msgstr "letzte vollständige Transaktion war bei Logzeit %s" -#: access/transam/xlog.c:6993 +#: access/transam/xlog.c:6950 #, c-format msgid "redo is not required" msgstr "Redo nicht nötig" -#: access/transam/xlog.c:7059 access/transam/xlog.c:7063 +#: access/transam/xlog.c:7025 access/transam/xlog.c:7029 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL endet vor dem Ende der Online-Sicherung" -#: access/transam/xlog.c:7060 +#: access/transam/xlog.c:7026 #, 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:7064 +#: access/transam/xlog.c:7030 #, 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:7067 +#: access/transam/xlog.c:7033 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL endet vor einem konsistenten Wiederherstellungspunkt" -#: access/transam/xlog.c:7094 +#: access/transam/xlog.c:7060 #, c-format msgid "selected new timeline ID: %u" msgstr "gewählte neue Zeitleisten-ID: %u" -#: access/transam/xlog.c:7440 +#: access/transam/xlog.c:7476 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "konsistenter Wiederherstellungszustand erreicht bei %X/%X" -#: access/transam/xlog.c:7631 +#: access/transam/xlog.c:7667 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "ungültige primäre Checkpoint-Verknüpfung in Kontrolldatei" -#: access/transam/xlog.c:7635 +#: access/transam/xlog.c:7671 #, c-format msgid "invalid secondary checkpoint link in control file" msgstr "ungültige sekundäre Checkpoint-Verknüpfung in Kontrolldatei" -#: access/transam/xlog.c:7639 +#: access/transam/xlog.c:7675 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "ungültige Checkpoint-Verknüpfung in backup_label-Datei" -#: access/transam/xlog.c:7656 +#: access/transam/xlog.c:7692 #, c-format msgid "invalid primary checkpoint record" msgstr "ungültiger primärer Checkpoint-Datensatz" -#: access/transam/xlog.c:7660 +#: access/transam/xlog.c:7696 #, c-format msgid "invalid secondary checkpoint record" msgstr "ungültiger sekundärer Checkpoint-Datensatz" -#: access/transam/xlog.c:7664 +#: access/transam/xlog.c:7700 #, c-format msgid "invalid checkpoint record" msgstr "ungültiger Checkpoint-Datensatz" -#: access/transam/xlog.c:7675 +#: access/transam/xlog.c:7711 #, 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:7679 +#: access/transam/xlog.c:7715 #, c-format msgid "invalid resource manager ID in secondary checkpoint record" msgstr "ungültige Resource-Manager-ID im sekundären Checkpoint-Datensatz" -#: access/transam/xlog.c:7683 +#: access/transam/xlog.c:7719 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "ungültige Resource-Manager-ID im Checkpoint-Datensatz" -#: access/transam/xlog.c:7695 +#: access/transam/xlog.c:7731 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "ungültige xl_info im primären Checkpoint-Datensatz" -#: access/transam/xlog.c:7699 +#: access/transam/xlog.c:7735 #, c-format msgid "invalid xl_info in secondary checkpoint record" msgstr "ungültige xl_info im sekundären Checkpoint-Datensatz" -#: access/transam/xlog.c:7703 +#: access/transam/xlog.c:7739 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "ungültige xl_info im Checkpoint-Datensatz" -#: access/transam/xlog.c:7714 +#: access/transam/xlog.c:7750 #, c-format msgid "invalid length of primary checkpoint record" msgstr "ungültige Länge des primären Checkpoint-Datensatzes" -#: access/transam/xlog.c:7718 +#: access/transam/xlog.c:7754 #, c-format msgid "invalid length of secondary checkpoint record" msgstr "ungültige Länge des sekundären Checkpoint-Datensatzes" -#: access/transam/xlog.c:7722 +#: access/transam/xlog.c:7758 #, c-format msgid "invalid length of checkpoint record" msgstr "ungültige Länge des Checkpoint-Datensatzes" -#: access/transam/xlog.c:7892 +#: access/transam/xlog.c:7928 #, c-format msgid "shutting down" msgstr "fahre herunter" -#: access/transam/xlog.c:7916 +#: access/transam/xlog.c:7952 #, c-format msgid "database system is shut down" msgstr "Datenbanksystem ist heruntergefahren" -#: access/transam/xlog.c:8409 +#: access/transam/xlog.c:8445 #, c-format msgid "concurrent transaction log activity while database system is shutting down" msgstr "gleichzeitige Transaktionslog-Aktivität während das Datenbanksystem herunterfährt" -#: access/transam/xlog.c:8671 +#: access/transam/xlog.c:8696 #, c-format msgid "skipping restartpoint, recovery has already ended" msgstr "Restart-Punkt übersprungen, Wiederherstellung ist bereits beendet" -#: access/transam/xlog.c:8694 +#: access/transam/xlog.c:8719 #, c-format msgid "skipping restartpoint, already performed at %X/%X" msgstr "Restart-Punkt wird übersprungen, schon bei %X/%X erledigt" -#: access/transam/xlog.c:8864 +#: access/transam/xlog.c:8874 #, c-format msgid "recovery restart point at %X/%X" msgstr "Recovery-Restart-Punkt bei %X/%X" -#: access/transam/xlog.c:8997 +#: access/transam/xlog.c:9007 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "Restore-Punkt „%s“ erzeugt bei %X/%X" -#: access/transam/xlog.c:9127 +#: access/transam/xlog.c:9137 #, 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:9136 +#: access/transam/xlog.c:9146 #, 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:9152 +#: access/transam/xlog.c:9162 #, 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:9222 +#: access/transam/xlog.c:9233 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "Online-Sicherung wurde storniert, Wiederherstellung kann nicht fortgesetzt werden" -#: access/transam/xlog.c:9278 access/transam/xlog.c:9322 -#: access/transam/xlog.c:9345 +#: access/transam/xlog.c:9289 access/transam/xlog.c:9336 +#: access/transam/xlog.c:9359 #, 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:9637 +#: access/transam/xlog.c:9636 #, c-format msgid "could not fsync log segment %s: %m" msgstr "konnte Logsegment %s nicht fsyncen: %m" -#: access/transam/xlog.c:9661 +#: access/transam/xlog.c:9660 #, c-format msgid "could not fsync log file %s: %m" msgstr "konnte Logdatei %s nicht fsyncen: %m" -#: access/transam/xlog.c:9669 +#: access/transam/xlog.c:9668 #, c-format msgid "could not fsync write-through log file %s: %m" msgstr "konnte Write-Through-Logdatei %s nicht fsyncen: %m" -#: access/transam/xlog.c:9678 +#: access/transam/xlog.c:9677 #, c-format msgid "could not fdatasync log file %s: %m" msgstr "konnte Logdatei %s nicht fdatasyncen: %m" -#: access/transam/xlog.c:9770 access/transam/xlog.c:10241 +#: access/transam/xlog.c:9769 access/transam/xlog.c:10240 #: access/transam/xlogfuncs.c:121 access/transam/xlogfuncs.c:150 #: access/transam/xlogfuncs.c:189 access/transam/xlogfuncs.c:210 #: access/transam/xlogfuncs.c:280 access/transam/xlogfuncs.c:336 @@ -2182,191 +2200,192 @@ msgstr "konnte Logdatei %s nicht fdatasyncen: %m" msgid "recovery is in progress" msgstr "Wiederherstellung läuft" -#: access/transam/xlog.c:9771 access/transam/xlog.c:10242 +#: access/transam/xlog.c:9770 access/transam/xlog.c:10241 #: access/transam/xlogfuncs.c:122 access/transam/xlogfuncs.c:151 #: access/transam/xlogfuncs.c:190 access/transam/xlogfuncs.c:211 #, c-format 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:9780 access/transam/xlog.c:10251 +#: access/transam/xlog.c:9779 access/transam/xlog.c:10250 #, 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:9781 access/transam/xlog.c:10252 +#: access/transam/xlog.c:9780 access/transam/xlog.c:10251 #: access/transam/xlogfuncs.c:157 #, c-format msgid "wal_level must be set to \"archive\", \"hot_standby\", or \"logical\" at server start." msgstr "wal_level muss beim Serverstart auf „archive“, „hot_standby“ oder „logical“ gesetzt werden." -#: access/transam/xlog.c:9786 +#: access/transam/xlog.c:9785 #, c-format msgid "backup label too long (max %d bytes)" msgstr "Backup-Label zu lang (maximal %d Bytes)" -#: access/transam/xlog.c:9818 access/transam/xlog.c:10088 -#: access/transam/xlog.c:10124 +#: access/transam/xlog.c:9817 access/transam/xlog.c:10087 +#: access/transam/xlog.c:10123 #, c-format msgid "a backup is already in progress" msgstr "ein Backup läuft bereits" -#: access/transam/xlog.c:9819 +#: access/transam/xlog.c:9818 #, 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:9914 +#: access/transam/xlog.c:9913 #, 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:9916 access/transam/xlog.c:10406 +#: access/transam/xlog.c:9915 access/transam/xlog.c:10405 #, c-format msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." msgstr "Das bedeutet, dass die aktuelle Datensicherung auf dem Standby-Server verfälscht ist und nicht verwendet werden sollte. Schalten Sie full_page_writes ein, führen Sie CHECKPOINT aus und versuchen Sie dann die Online-Sicherung erneut." -#: access/transam/xlog.c:9982 replication/basebackup.c:1026 -#: storage/file/fd.c:2524 utils/adt/misc.c:377 +#: access/transam/xlog.c:9981 replication/basebackup.c:1027 +#: utils/adt/misc.c:378 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung „%s“ nicht lesen: %m" -#: access/transam/xlog.c:9989 replication/basebackup.c:1030 -#: storage/file/fd.c:2529 utils/adt/misc.c:381 +#: access/transam/xlog.c:9988 replication/basebackup.c:1032 +#: utils/adt/misc.c:383 #, 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:10042 commands/tablespace.c:389 -#: commands/tablespace.c:552 replication/basebackup.c:1046 -#: utils/adt/misc.c:389 +#: access/transam/xlog.c:10041 commands/tablespace.c:391 +#: commands/tablespace.c:553 replication/basebackup.c:1048 +#: utils/adt/misc.c:391 #, c-format msgid "tablespaces are not supported on this platform" msgstr "Tablespaces werden auf dieser Plattform nicht unterstützt" -#: access/transam/xlog.c:10082 access/transam/xlog.c:10118 -#: access/transam/xlog.c:10292 access/transam/xlogarchive.c:106 -#: access/transam/xlogarchive.c:265 guc-file.l:898 -#: replication/basebackup.c:403 replication/basebackup.c:471 -#: replication/logical/snapbuild.c:1478 storage/file/copydir.c:72 -#: storage/file/copydir.c:115 storage/file/fd.c:2503 storage/file/fd.c:2544 -#: utils/adt/dbsize.c:68 utils/adt/dbsize.c:218 utils/adt/dbsize.c:298 -#: utils/adt/genfile.c:108 utils/adt/genfile.c:280 +#: access/transam/xlog.c:10081 access/transam/xlog.c:10117 +#: access/transam/xlog.c:10291 access/transam/xlogarchive.c:106 +#: access/transam/xlogarchive.c:265 commands/copy.c:1738 commands/copy.c:2764 +#: commands/extension.c:3026 guc-file.l:1003 replication/basebackup.c:404 +#: replication/basebackup.c:472 replication/logical/snapbuild.c:1478 +#: storage/file/copydir.c:72 storage/file/copydir.c:115 storage/file/fd.c:2519 +#: storage/file/fd.c:2611 utils/adt/dbsize.c:68 utils/adt/dbsize.c:218 +#: utils/adt/dbsize.c:298 utils/adt/genfile.c:114 utils/adt/genfile.c:333 #, c-format msgid "could not stat file \"%s\": %m" msgstr "konnte „stat“ für Datei „%s“ nicht ausführen: %m" -#: access/transam/xlog.c:10089 access/transam/xlog.c:10125 +#: access/transam/xlog.c:10088 access/transam/xlog.c:10124 #, 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:10106 access/transam/xlog.c:10142 -#: access/transam/xlog.c:10467 +#: access/transam/xlog.c:10105 access/transam/xlog.c:10141 +#: access/transam/xlog.c:10466 #, c-format msgid "could not write file \"%s\": %m" msgstr "konnte Datei „%s“ nicht schreiben: %m" -#: access/transam/xlog.c:10296 +#: access/transam/xlog.c:10295 #, c-format msgid "a backup is not in progress" msgstr "es läuft kein Backup" -#: access/transam/xlog.c:10341 access/transam/xlog.c:10354 -#: access/transam/xlog.c:10694 access/transam/xlog.c:10700 -#: access/transam/xlog.c:10782 access/transam/xlogfuncs.c:508 +#: access/transam/xlog.c:10340 access/transam/xlog.c:10353 +#: access/transam/xlog.c:10693 access/transam/xlog.c:10699 +#: access/transam/xlog.c:10783 access/transam/xlogfuncs.c:508 #, c-format msgid "invalid data in file \"%s\"" msgstr "ungültige Daten in Datei „%s“" -#: access/transam/xlog.c:10358 replication/basebackup.c:924 +#: access/transam/xlog.c:10357 replication/basebackup.c:925 #, 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:10359 replication/basebackup.c:925 +#: access/transam/xlog.c:10358 replication/basebackup.c:926 #, 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:10404 +#: access/transam/xlog.c:10403 #, 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:10516 +#: access/transam/xlog.c:10515 #, c-format msgid "pg_stop_backup cleanup done, waiting for required WAL segments to be archived" msgstr "Aufräumen nach pg_stop_backup beendet, warte bis die benötigten WAL-Segmente archiviert sind" -#: access/transam/xlog.c:10526 +#: access/transam/xlog.c:10525 #, c-format msgid "pg_stop_backup still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "pg_stop_backup wartet immer noch, bis alle benötigten WAL-Segmente archiviert sind (%d Sekunden abgelaufen)" -#: access/transam/xlog.c:10528 +#: access/transam/xlog.c:10527 #, c-format msgid "Check that your archive_command is executing properly. pg_stop_backup can be canceled safely, 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. pg_stop_backup kann gefahrlos abgebrochen werden, aber die Datenbanksicherung wird ohne die fehlenden WAL-Segmente nicht benutzbar sein." -#: access/transam/xlog.c:10535 +#: access/transam/xlog.c:10534 #, c-format msgid "pg_stop_backup complete, all required WAL segments have been archived" msgstr "pg_stop_backup abgeschlossen, alle benötigten WAL-Segmente wurden archiviert" -#: access/transam/xlog.c:10539 +#: access/transam/xlog.c:10538 #, 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:10821 +#: access/transam/xlog.c:10822 #, c-format msgid "xlog redo %s" msgstr "xlog redo %s" -#: access/transam/xlog.c:10866 access/transam/xlog.c:10889 +#: access/transam/xlog.c:10868 #, c-format -msgid "online backup mode canceled" -msgstr "Online-Sicherungsmodus storniert" +msgid "online backup mode was not canceled" +msgstr "Online-Sicherungsmodus wurde nicht storniert" -#: access/transam/xlog.c:10867 access/transam/xlog.c:10890 +#: access/transam/xlog.c:10878 access/transam/xlog.c:10890 +#: access/transam/xlog.c:10900 #, c-format -msgid "\"%s\" was renamed to \"%s\"." -msgstr "„%s“ wurde in „%s“ umbenannt." +msgid "online backup mode canceled" +msgstr "Online-Sicherungsmodus storniert" -#: access/transam/xlog.c:10874 access/transam/xlog.c:10897 +#: access/transam/xlog.c:10891 #, c-format -msgid "online backup mode was not canceled" -msgstr "Online-Sicherungsmodus wurde nicht storniert" +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:10875 access/transam/xlog.c:10898 +#: access/transam/xlog.c:10901 #, c-format -msgid "Could not rename \"%s\" to \"%s\": %m." -msgstr "Konnte „%s“ nicht in „%s“ umbenennen: %m." +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:11018 replication/logical/logicalfuncs.c:171 -#: replication/walreceiver.c:932 replication/walsender.c:2091 +#: access/transam/xlog.c:11023 replication/logical/logicalfuncs.c:171 +#: replication/walreceiver.c:932 replication/walsender.c:2092 #, c-format msgid "could not seek in log segment %s to offset %u: %m" msgstr "konnte Positionszeiger von Logsegment %s nicht auf %u setzen: %m" -#: access/transam/xlog.c:11030 +#: access/transam/xlog.c:11035 #, 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:11503 +#: access/transam/xlog.c:11509 #, c-format msgid "received promote request" msgstr "Anforderung zum Befördern empfangen" -#: access/transam/xlog.c:11516 +#: access/transam/xlog.c:11522 #, c-format msgid "trigger file found: %s" msgstr "Triggerdatei gefunden: %s" -#: access/transam/xlog.c:11525 +#: access/transam/xlog.c:11531 #, c-format msgid "could not stat trigger file \"%s\": %m" msgstr "konnte „stat“ für Trigger-Datei „%s“ nicht ausführen: %m" @@ -2409,12 +2428,12 @@ msgstr "konnte Archivstatusdatei „%s“ nicht schreiben: %m" msgid "must be superuser or replication role to run a backup" msgstr "nur Superuser und Replikationsrollen können ein Backup ausführen" -#: access/transam/xlogfuncs.c:67 commands/tablespace.c:726 -#: commands/tablespace.c:736 postmaster/postmaster.c:1302 -#: replication/basebackup.c:291 replication/basebackup.c:631 -#: storage/file/copydir.c:53 storage/file/copydir.c:96 storage/file/fd.c:1952 -#: storage/ipc/dsm.c:300 utils/adt/genfile.c:354 utils/adt/misc.c:291 -#: utils/misc/tzparser.c:339 +#: access/transam/xlogfuncs.c:67 commands/tablespace.c:705 +#: commands/tablespace.c:715 postmaster/postmaster.c:1389 +#: replication/basebackup.c:292 replication/basebackup.c:632 +#: storage/file/copydir.c:53 storage/file/copydir.c:96 storage/file/fd.c:1985 +#: storage/file/fd.c:2584 storage/ipc/dsm.c:300 utils/adt/genfile.c:439 +#: utils/adt/misc.c:291 utils/misc/tzparser.c:339 #, c-format msgid "could not open directory \"%s\": %m" msgstr "konnte Verzeichnis „%s“ nicht öffnen: %m" @@ -2466,153 +2485,153 @@ msgstr "Wiederherstellung läuft nicht" msgid "Recovery control functions can only be executed during recovery." msgstr "Wiederherstellungskontrollfunktionen können nur während der Wiederherstellung ausgeführt werden." -#: access/transam/xlogreader.c:267 +#: access/transam/xlogreader.c:264 #, c-format msgid "invalid record offset at %X/%X" msgstr "ungültiger Datensatz-Offset bei %X/%X" -#: access/transam/xlogreader.c:275 +#: access/transam/xlogreader.c:272 #, c-format msgid "contrecord is requested by %X/%X" msgstr "Contrecord angefordert von %X/%X" -#: access/transam/xlogreader.c:315 access/transam/xlogreader.c:606 +#: access/transam/xlogreader.c:312 access/transam/xlogreader.c:603 #, c-format msgid "invalid record length at %X/%X" msgstr "ungültige Datensatzlänge bei %X/%X" -#: access/transam/xlogreader.c:329 +#: access/transam/xlogreader.c:326 #, c-format msgid "record length %u at %X/%X too long" msgstr "Datensatzlänge %u bei %X/%X ist zu lang" -#: access/transam/xlogreader.c:370 +#: access/transam/xlogreader.c:367 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "keine Contrecord-Flag bei %X/%X" -#: access/transam/xlogreader.c:383 +#: access/transam/xlogreader.c:380 #, c-format msgid "invalid contrecord length %u at %X/%X" msgstr "ungültige Contrecord-Länge %u bei %X/%X" -#: access/transam/xlogreader.c:613 +#: access/transam/xlogreader.c:610 #, 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:627 access/transam/xlogreader.c:644 +#: access/transam/xlogreader.c:624 access/transam/xlogreader.c:641 #, 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:681 +#: access/transam/xlogreader.c:678 #, 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:714 +#: access/transam/xlogreader.c:711 #, 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:728 access/transam/xlogreader.c:779 +#: access/transam/xlogreader.c:725 access/transam/xlogreader.c:776 #, 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:754 +#: access/transam/xlogreader.c:751 #, c-format -msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s." -msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Datenbanksystemidentifikator in WAL-Datei ist %s, Datenbanksystemidentifikator in pg_control ist %s." +msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" +msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Datenbanksystemidentifikator in WAL-Datei ist %s, Datenbanksystemidentifikator in pg_control ist %s" -#: access/transam/xlogreader.c:761 +#: access/transam/xlogreader.c:758 #, c-format -msgid "WAL file is from different database system: Incorrect XLOG_SEG_SIZE in page header." -msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Falsche XLOG_SEG_SIZE im Seitenkopf." +msgid "WAL file is from different database system: incorrect XLOG_SEG_SIZE in page header" +msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Falsche XLOG_SEG_SIZE im Seitenkopf" -#: access/transam/xlogreader.c:767 +#: access/transam/xlogreader.c:764 #, 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." +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:793 +#: access/transam/xlogreader.c:790 #, 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:818 +#: access/transam/xlogreader.c:815 #, 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:1027 +#: access/transam/xlogreader.c:1024 #, c-format msgid "out-of-order block_id %u at %X/%X" -msgstr "" +msgstr "block_id %u außer der Reihe bei %X/%X" -#: access/transam/xlogreader.c:1049 +#: access/transam/xlogreader.c:1046 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" -msgstr "" +msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%X" -#: access/transam/xlogreader.c:1056 +#: access/transam/xlogreader.c:1053 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" -msgstr "" +msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%X" -#: access/transam/xlogreader.c:1089 +#: access/transam/xlogreader.c:1086 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" -msgstr "" +msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%X" -#: access/transam/xlogreader.c:1104 +#: access/transam/xlogreader.c:1102 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" -msgstr "" +msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%X" -#: access/transam/xlogreader.c:1118 +#: access/transam/xlogreader.c:1117 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" -msgstr "" +msgstr "BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%X" #: access/transam/xlogreader.c:1132 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" -msgstr "" +msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%X" #: access/transam/xlogreader.c:1148 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" -msgstr "" +msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%X" #: access/transam/xlogreader.c:1160 #, c-format msgid "invalid block_id %u at %X/%X" -msgstr "" +msgstr "ungültige block_id %u bei %X/%X" #: access/transam/xlogreader.c:1225 #, c-format msgid "record with invalid length at %X/%X" -msgstr "" +msgstr "Datensatz mit ungültiger Länge bei %X/%X" #: access/transam/xlogreader.c:1314 #, c-format msgid "invalid compressed image at %X/%X, block %d" -msgstr "" +msgstr "ungültiges komprimiertes Image bei %X/%X, Block %d" -#: bootstrap/bootstrap.c:268 postmaster/postmaster.c:760 tcop/postgres.c:3480 +#: bootstrap/bootstrap.c:268 postmaster/postmaster.c:779 tcop/postgres.c:3485 #, c-format msgid "--%s requires a value" msgstr "--%s benötigt einen Wert" -#: bootstrap/bootstrap.c:273 postmaster/postmaster.c:765 tcop/postgres.c:3485 +#: bootstrap/bootstrap.c:273 postmaster/postmaster.c:784 tcop/postgres.c:3490 #, c-format msgid "-c %s requires a value" msgstr "-c %s benötigt einen Wert" -#: bootstrap/bootstrap.c:284 postmaster/postmaster.c:777 -#: postmaster/postmaster.c:790 +#: bootstrap/bootstrap.c:284 postmaster/postmaster.c:796 +#: postmaster/postmaster.c:809 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie „%s --help“ für weitere Informationen.\n" @@ -2733,43 +2752,43 @@ msgid "column privileges are only valid for relations" msgstr "Spaltenprivilegien sind nur für Relation gültig" #: catalog/aclchk.c:676 catalog/aclchk.c:3874 catalog/aclchk.c:4651 -#: catalog/objectaddress.c:751 catalog/pg_largeobject.c:113 +#: catalog/objectaddress.c:854 catalog/pg_largeobject.c:113 #: storage/large_object/inv_api.c:291 #, c-format msgid "large object %u does not exist" msgstr "Large Object %u existiert nicht" #: catalog/aclchk.c:863 catalog/aclchk.c:871 commands/collationcmds.c:92 -#: commands/copy.c:1001 commands/copy.c:1019 commands/copy.c:1027 -#: commands/copy.c:1035 commands/copy.c:1043 commands/copy.c:1051 -#: commands/copy.c:1059 commands/copy.c:1067 commands/copy.c:1075 -#: commands/copy.c:1091 commands/copy.c:1105 commands/copy.c:1124 -#: commands/copy.c:1139 commands/dbcommands.c:155 commands/dbcommands.c:163 +#: commands/copy.c:1010 commands/copy.c:1028 commands/copy.c:1036 +#: commands/copy.c:1044 commands/copy.c:1052 commands/copy.c:1060 +#: commands/copy.c:1068 commands/copy.c:1076 commands/copy.c:1084 +#: commands/copy.c:1100 commands/copy.c:1114 commands/copy.c:1133 +#: commands/copy.c:1148 commands/dbcommands.c:155 commands/dbcommands.c:163 #: commands/dbcommands.c:171 commands/dbcommands.c:179 #: commands/dbcommands.c:187 commands/dbcommands.c:195 #: commands/dbcommands.c:203 commands/dbcommands.c:211 #: commands/dbcommands.c:219 commands/dbcommands.c:1397 #: commands/dbcommands.c:1405 commands/dbcommands.c:1413 -#: commands/dbcommands.c:1421 commands/extension.c:1247 -#: commands/extension.c:1255 commands/extension.c:1263 -#: commands/extension.c:2680 commands/foreigncmds.c:538 -#: commands/foreigncmds.c:547 commands/functioncmds.c:525 +#: commands/dbcommands.c:1421 commands/extension.c:1244 +#: commands/extension.c:1252 commands/extension.c:1260 +#: commands/extension.c:2677 commands/foreigncmds.c:539 +#: commands/foreigncmds.c:548 commands/functioncmds.c:525 #: commands/functioncmds.c:619 commands/functioncmds.c:627 #: commands/functioncmds.c:635 commands/functioncmds.c:643 -#: commands/functioncmds.c:2044 commands/functioncmds.c:2052 +#: commands/functioncmds.c:2045 commands/functioncmds.c:2053 #: commands/sequence.c:1189 commands/sequence.c:1197 commands/sequence.c:1205 #: commands/sequence.c:1213 commands/sequence.c:1221 commands/sequence.c:1229 #: commands/sequence.c:1237 commands/sequence.c:1245 commands/typecmds.c:293 #: commands/typecmds.c:1380 commands/typecmds.c:1389 commands/typecmds.c:1397 -#: commands/typecmds.c:1405 commands/typecmds.c:1413 commands/user.c:137 -#: commands/user.c:154 commands/user.c:162 commands/user.c:170 -#: commands/user.c:178 commands/user.c:186 commands/user.c:194 -#: commands/user.c:202 commands/user.c:210 commands/user.c:218 -#: commands/user.c:226 commands/user.c:234 commands/user.c:242 -#: commands/user.c:528 commands/user.c:540 commands/user.c:548 -#: commands/user.c:556 commands/user.c:564 commands/user.c:572 -#: commands/user.c:580 commands/user.c:588 commands/user.c:597 -#: commands/user.c:605 commands/user.c:613 +#: commands/typecmds.c:1405 commands/typecmds.c:1413 commands/user.c:138 +#: commands/user.c:155 commands/user.c:163 commands/user.c:171 +#: commands/user.c:179 commands/user.c:187 commands/user.c:195 +#: commands/user.c:203 commands/user.c:211 commands/user.c:219 +#: commands/user.c:227 commands/user.c:235 commands/user.c:243 +#: commands/user.c:522 commands/user.c:534 commands/user.c:542 +#: commands/user.c:550 commands/user.c:558 commands/user.c:566 +#: commands/user.c:574 commands/user.c:582 commands/user.c:591 +#: commands/user.c:599 commands/user.c:607 #, c-format msgid "conflicting or redundant options" msgstr "widersprüchliche oder überflüssige Optionen" @@ -2779,22 +2798,22 @@ msgstr "widersprüchliche oder überflüssige Optionen" msgid "default privileges cannot be set for columns" msgstr "Vorgabeprivilegien können nicht für Spalten gesetzt werden" -#: catalog/aclchk.c:1483 catalog/objectaddress.c:1235 commands/analyze.c:378 -#: commands/copy.c:4363 commands/sequence.c:1491 commands/tablecmds.c:5144 -#: commands/tablecmds.c:5250 commands/tablecmds.c:5310 -#: commands/tablecmds.c:5423 commands/tablecmds.c:5480 -#: commands/tablecmds.c:5574 commands/tablecmds.c:5670 -#: commands/tablecmds.c:7831 commands/tablecmds.c:8020 -#: commands/tablecmds.c:8440 commands/trigger.c:643 parser/analyze.c:2106 -#: parser/parse_relation.c:2536 parser/parse_relation.c:2598 +#: catalog/aclchk.c:1483 catalog/objectaddress.c:1338 commands/analyze.c:378 +#: commands/copy.c:4383 commands/sequence.c:1491 commands/tablecmds.c:5149 +#: commands/tablecmds.c:5255 commands/tablecmds.c:5315 +#: commands/tablecmds.c:5428 commands/tablecmds.c:5485 +#: commands/tablecmds.c:5579 commands/tablecmds.c:5675 +#: commands/tablecmds.c:7836 commands/tablecmds.c:8041 +#: commands/tablecmds.c:8461 commands/trigger.c:643 parser/analyze.c:2160 +#: parser/parse_relation.c:2539 parser/parse_relation.c:2601 #: parser/parse_target.c:940 parser/parse_type.c:128 utils/adt/acl.c:2839 #: utils/adt/ruleutils.c:1836 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "Spalte „%s“ von Relation „%s“ existiert nicht" -#: catalog/aclchk.c:1748 catalog/objectaddress.c:1048 commands/sequence.c:1078 -#: commands/tablecmds.c:220 commands/tablecmds.c:11815 utils/adt/acl.c:2075 +#: catalog/aclchk.c:1748 catalog/objectaddress.c:1151 commands/sequence.c:1078 +#: commands/tablecmds.c:220 commands/tablecmds.c:11890 utils/adt/acl.c:2075 #: utils/adt/acl.c:2105 utils/adt/acl.c:2137 utils/adt/acl.c:2169 #: utils/adt/acl.c:2197 utils/adt/acl.c:2227 #, c-format @@ -2841,7 +2860,7 @@ msgstr "für Array-Typen können keine Privilegien gesetzt werden" msgid "Set the privileges of the element type instead." msgstr "Setzen Sie stattdessen die Privilegien des Elementtyps." -#: catalog/aclchk.c:3091 catalog/objectaddress.c:1368 commands/typecmds.c:3142 +#: catalog/aclchk.c:3091 catalog/objectaddress.c:1471 commands/typecmds.c:3142 #, c-format msgid "\"%s\" is not a domain" msgstr "„%s“ ist keine Domäne" @@ -3137,7 +3156,7 @@ msgstr "Textsuchewörterbuch mit OID %u existiert nicht" msgid "text search configuration with OID %u does not exist" msgstr "Textsuchekonfiguration mit OID %u existiert nicht" -#: catalog/aclchk.c:4893 commands/event_trigger.c:583 +#: catalog/aclchk.c:4893 commands/event_trigger.c:586 #, c-format msgid "event trigger with OID %u does not exist" msgstr "Ereignistrigger mit OID %u existiert nicht" @@ -3157,37 +3176,37 @@ msgstr "Konversion mit OID %u existiert nicht" msgid "extension with OID %u does not exist" msgstr "Erweiterung mit OID %u existiert nicht" -#: catalog/dependency.c:639 +#: catalog/dependency.c:640 #, c-format msgid "cannot drop %s because %s requires it" msgstr "kann %s nicht löschen, wird von %s benötigt" -#: catalog/dependency.c:642 +#: catalog/dependency.c:643 #, c-format msgid "You can drop %s instead." msgstr "Sie können stattdessen %s löschen." -#: catalog/dependency.c:803 catalog/pg_shdepend.c:573 +#: catalog/dependency.c:804 catalog/pg_shdepend.c:574 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "kann %s nicht löschen, wird vom Datenbanksystem benötigt" -#: catalog/dependency.c:919 +#: catalog/dependency.c:920 #, c-format msgid "drop auto-cascades to %s" msgstr "Löschvorgang löscht automatisch %s" -#: catalog/dependency.c:931 catalog/dependency.c:940 +#: catalog/dependency.c:932 catalog/dependency.c:941 #, c-format msgid "%s depends on %s" msgstr "%s hängt von %s ab" -#: catalog/dependency.c:952 catalog/dependency.c:961 +#: catalog/dependency.c:953 catalog/dependency.c:962 #, c-format msgid "drop cascades to %s" msgstr "Löschvorgang löscht ebenfalls %s" -#: catalog/dependency.c:969 catalog/pg_shdepend.c:684 +#: catalog/dependency.c:970 catalog/pg_shdepend.c:685 #, c-format msgid "" "\n" @@ -3202,33 +3221,33 @@ msgstr[1] "" "\n" "und %d weitere Objekte (Liste im Serverlog)" -#: catalog/dependency.c:981 +#: catalog/dependency.c:982 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "kann %s nicht löschen, weil andere Objekte davon abhängen" -#: catalog/dependency.c:985 catalog/dependency.c:992 +#: catalog/dependency.c:986 catalog/dependency.c:993 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Verwenden Sie DROP ... CASCADE, um die abhängigen Objekte ebenfalls zu löschen." -#: catalog/dependency.c:989 +#: catalog/dependency.c:990 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "kann gewünschte Objekte nicht löschen, weil andere Objekte davon abhängen" #. translator: %d always has a value larger than 1 -#: catalog/dependency.c:998 +#: catalog/dependency.c:999 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "Löschvorgang löscht ebenfalls %d weiteres Objekt" msgstr[1] "Löschvorgang löscht ebenfalls %d weitere Objekte" -#: catalog/dependency.c:1621 +#: catalog/dependency.c:1622 #, c-format msgid "constant of the type 'regrole' cannot be used here" -msgstr "" +msgstr "Konstante vom Typ „regrole“ kann hier nicht verwendet werden" #: catalog/heap.c:276 #, c-format @@ -3240,13 +3259,13 @@ msgstr "keine Berechtigung, um „%s.%s“ zu erzeugen" msgid "System catalog modifications are currently disallowed." msgstr "Änderungen an Systemkatalogen sind gegenwärtig nicht erlaubt." -#: catalog/heap.c:413 commands/tablecmds.c:1430 commands/tablecmds.c:1883 -#: commands/tablecmds.c:4781 +#: catalog/heap.c:413 commands/tablecmds.c:1432 commands/tablecmds.c:1885 +#: commands/tablecmds.c:4786 #, c-format msgid "tables can have at most %d columns" msgstr "Tabellen können höchstens %d Spalten haben" -#: catalog/heap.c:430 commands/tablecmds.c:5040 +#: catalog/heap.c:430 commands/tablecmds.c:5045 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "Spaltenname „%s“ steht im Konflikt mit dem Namen einer Systemspalte" @@ -3281,17 +3300,17 @@ msgstr "zusammengesetzter Typ %s kann nicht Teil von sich selbst werden" msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "für Spalte „%s“ mit sortierbarem Typ %s wurde keine Sortierfolge abgeleitet" -#: catalog/heap.c:584 commands/createas.c:375 commands/indexcmds.c:1086 +#: catalog/heap.c:584 commands/createas.c:375 commands/indexcmds.c:1087 #: commands/view.c:116 regex/regc_pg_locale.c:262 utils/adt/formatting.c:1514 #: utils/adt/formatting.c:1566 utils/adt/formatting.c:1634 #: utils/adt/formatting.c:1686 utils/adt/formatting.c:1755 -#: utils/adt/formatting.c:1819 utils/adt/like.c:212 utils/adt/selfuncs.c:5234 -#: utils/adt/varlena.c:1410 utils/adt/varlena.c:1799 +#: utils/adt/formatting.c:1819 utils/adt/like.c:213 utils/adt/selfuncs.c:5276 +#: utils/adt/varlena.c:1411 utils/adt/varlena.c:1800 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Verwenden Sie die COLLATE-Klausel, um die Sortierfolge explizit zu setzen." -#: catalog/heap.c:1064 catalog/index.c:793 commands/tablecmds.c:2610 +#: catalog/heap.c:1064 catalog/index.c:793 commands/tablecmds.c:2612 #, c-format msgid "relation \"%s\" already exists" msgstr "Relation „%s“ existiert bereits" @@ -3319,7 +3338,7 @@ msgstr "nur Superuser können im Binary-Upgrade-Modus verbinden" msgid "check constraint \"%s\" already exists" msgstr "Check-Constraint „%s“ existiert bereits" -#: catalog/heap.c:2444 catalog/pg_constraint.c:652 commands/tablecmds.c:6015 +#: catalog/heap.c:2444 catalog/pg_constraint.c:652 commands/tablecmds.c:6020 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "Constraint „%s“ existiert bereits für Relation „%s“" @@ -3344,14 +3363,14 @@ msgstr "Spaltenverweise können nicht in Vorgabeausdrücken verwendet werden" msgid "default expression must not return a set" msgstr "Vorgabeausdruck kann keine Ergebnismenge zurückgeben" -#: catalog/heap.c:2591 rewrite/rewriteHandler.c:1073 +#: catalog/heap.c:2591 rewrite/rewriteHandler.c:1077 #, 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:2596 commands/prepare.c:374 parser/parse_node.c:411 #: parser/parse_target.c:528 parser/parse_target.c:778 -#: parser/parse_target.c:788 rewrite/rewriteHandler.c:1078 +#: parser/parse_target.c:788 rewrite/rewriteHandler.c:1082 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Sie müssen den Ausdruck umschreiben oder eine Typumwandlung vornehmen." @@ -3433,19 +3452,19 @@ msgstr "DROP INDEX CONCURRENTLY muss die erste Aktion in einer Transaktion sein" msgid "building index \"%s\" on table \"%s\"" msgstr "baue Index „%s“ von Tabelle „%s“" -#: catalog/index.c:3220 +#: catalog/index.c:3262 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht reindizieren" -#: catalog/index.c:3345 +#: catalog/index.c:3387 #, fuzzy, c-format #| msgid "table \"%s.%s\" was reindexed" msgid "index \"%s\" was reindexed" msgstr "Tabelle „%s.%s“ wurde neu indiziert" -#: catalog/index.c:3347 commands/vacuumlazy.c:1130 commands/vacuumlazy.c:1206 -#: commands/vacuumlazy.c:1373 commands/vacuumlazy.c:1545 +#: catalog/index.c:3389 commands/vacuumlazy.c:1131 commands/vacuumlazy.c:1207 +#: commands/vacuumlazy.c:1374 commands/vacuumlazy.c:1546 #, c-format msgid "%s." msgstr "%s." @@ -3471,19 +3490,19 @@ msgstr "konnte Sperre für Relation „%s.%s“ nicht setzen" msgid "could not obtain lock on relation \"%s\"" msgstr "konnte Sperre für Relation „%s“ nicht setzen" -#: catalog/namespace.c:414 parser/parse_relation.c:1131 +#: catalog/namespace.c:414 parser/parse_relation.c:1134 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "Relation „%s.%s“ existiert nicht" -#: catalog/namespace.c:419 parser/parse_relation.c:1144 -#: parser/parse_relation.c:1152 utils/adt/regproc.c:1035 +#: catalog/namespace.c:419 parser/parse_relation.c:1147 +#: parser/parse_relation.c:1155 utils/adt/regproc.c:1035 #, c-format msgid "relation \"%s\" does not exist" msgstr "Relation „%s“ existiert nicht" -#: catalog/namespace.c:487 catalog/namespace.c:2852 commands/extension.c:1397 -#: commands/extension.c:1403 +#: catalog/namespace.c:487 catalog/namespace.c:2852 commands/extension.c:1394 +#: commands/extension.c:1400 #, c-format msgid "no schema has been selected to create in" msgstr "kein Schema für die Objekterzeugung ausgewählt" @@ -3529,7 +3548,7 @@ msgstr "Textsuchekonfiguration „%s“ existiert nicht" msgid "cross-database references are not implemented: %s" msgstr "Verweise auf andere Datenbanken sind nicht implementiert: %s" -#: catalog/namespace.c:2652 gram.y:13293 gram.y:14647 parser/parse_expr.c:796 +#: catalog/namespace.c:2652 gram.y:13291 gram.y:14645 parser/parse_expr.c:796 #: parser/parse_target.c:1137 #, c-format msgid "improper qualified name (too many dotted names): %s" @@ -3551,7 +3570,7 @@ msgid "cannot move objects into or out of TOAST schema" msgstr "Objekte können nicht in oder aus TOAST-Schemas verschoben werden" #: catalog/namespace.c:2873 commands/schemacmds.c:238 -#: commands/schemacmds.c:317 commands/tablecmds.c:732 +#: commands/schemacmds.c:317 commands/tablecmds.c:734 #, c-format msgid "schema \"%s\" does not exist" msgstr "Schema „%s“ existiert nicht" @@ -3587,86 +3606,86 @@ msgstr "während der Wiederherstellung können keine temporäre Tabellen erzeugt msgid "cannot create temporary tables in parallel mode" msgstr "während der Wiederherstellung können keine temporäre Tabellen erzeugt werden" -#: catalog/namespace.c:3898 commands/tablespace.c:1117 commands/variable.c:62 -#: replication/syncrep.c:700 utils/misc/guc.c:9621 +#: catalog/namespace.c:3898 commands/tablespace.c:1159 commands/variable.c:62 +#: replication/syncrep.c:700 utils/misc/guc.c:9606 #, c-format msgid "List syntax is invalid." msgstr "Die Listensyntax ist ungültig." -#: catalog/objectaddress.c:918 +#: catalog/objectaddress.c:1021 msgid "database name cannot be qualified" msgstr "Datenbankname kann nicht qualifiziert werden" -#: catalog/objectaddress.c:921 commands/extension.c:2426 +#: catalog/objectaddress.c:1024 commands/extension.c:2423 #, c-format msgid "extension name cannot be qualified" msgstr "Erweiterungsname kann nicht qualifiziert werden" -#: catalog/objectaddress.c:924 +#: catalog/objectaddress.c:1027 msgid "tablespace name cannot be qualified" msgstr "Tablespace-Name kann nicht qualifiziert werden" -#: catalog/objectaddress.c:927 +#: catalog/objectaddress.c:1030 msgid "role name cannot be qualified" msgstr "Rollenname kann nicht qualifiziert werden" -#: catalog/objectaddress.c:930 +#: catalog/objectaddress.c:1033 msgid "schema name cannot be qualified" msgstr "Schemaname kann nicht qualifiziert werden" -#: catalog/objectaddress.c:933 +#: catalog/objectaddress.c:1036 msgid "language name cannot be qualified" msgstr "Sprachname kann nicht qualifiziert werden" -#: catalog/objectaddress.c:936 +#: catalog/objectaddress.c:1039 msgid "foreign-data wrapper name cannot be qualified" msgstr "Fremddaten-Wrapper-Name kann nicht qualifiziert werden" -#: catalog/objectaddress.c:939 +#: catalog/objectaddress.c:1042 msgid "server name cannot be qualified" msgstr "Servername kann nicht qualifiziert werden" -#: catalog/objectaddress.c:942 +#: catalog/objectaddress.c:1045 msgid "event trigger name cannot be qualified" msgstr "Ereignistriggername kann nicht qualifiziert werden" -#: catalog/objectaddress.c:1055 commands/lockcmds.c:94 commands/policy.c:92 -#: commands/policy.c:422 commands/tablecmds.c:214 commands/tablecmds.c:1291 -#: commands/tablecmds.c:4321 commands/tablecmds.c:7917 +#: catalog/objectaddress.c:1158 commands/lockcmds.c:94 commands/policy.c:94 +#: commands/policy.c:381 commands/tablecmds.c:214 commands/tablecmds.c:1293 +#: commands/tablecmds.c:4326 commands/tablecmds.c:7938 #, c-format msgid "\"%s\" is not a table" msgstr "„%s“ ist keine Tabelle" -#: catalog/objectaddress.c:1062 commands/tablecmds.c:226 -#: commands/tablecmds.c:4345 commands/tablecmds.c:11820 commands/view.c:155 +#: catalog/objectaddress.c:1165 commands/tablecmds.c:226 +#: commands/tablecmds.c:4350 commands/tablecmds.c:11895 commands/view.c:155 #, c-format msgid "\"%s\" is not a view" msgstr "„%s“ ist keine Sicht" -#: catalog/objectaddress.c:1069 commands/matview.c:174 -#: commands/tablecmds.c:232 commands/tablecmds.c:11825 +#: catalog/objectaddress.c:1172 commands/matview.c:174 +#: commands/tablecmds.c:232 commands/tablecmds.c:11900 #, c-format msgid "\"%s\" is not a materialized view" msgstr "„%s“ ist keine materialisierte Sicht" -#: catalog/objectaddress.c:1076 commands/tablecmds.c:250 -#: commands/tablecmds.c:4348 commands/tablecmds.c:11830 +#: catalog/objectaddress.c:1179 commands/tablecmds.c:250 +#: commands/tablecmds.c:4353 commands/tablecmds.c:11905 #, c-format msgid "\"%s\" is not a foreign table" msgstr "„%s“ ist keine Fremdtabelle" -#: catalog/objectaddress.c:1221 catalog/objectaddress.c:1274 +#: catalog/objectaddress.c:1324 catalog/objectaddress.c:1377 #, c-format msgid "column name must be qualified" msgstr "Spaltenname muss qualifiziert werden" -#: catalog/objectaddress.c:1317 +#: catalog/objectaddress.c:1420 #, fuzzy, c-format #| msgid "column \"%s\" of relation \"%s\" does not exist" msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "Spalte „%s“ von Relation „%s“ existiert nicht" -#: catalog/objectaddress.c:1357 commands/functioncmds.c:128 +#: catalog/objectaddress.c:1460 commands/functioncmds.c:128 #: commands/tablecmds.c:242 commands/typecmds.c:3210 parser/parse_type.c:227 #: parser/parse_type.c:256 parser/parse_type.c:824 utils/adt/acl.c:4373 #: utils/adt/regproc.c:1226 @@ -3674,182 +3693,182 @@ msgstr "Spalte „%s“ von Relation „%s“ existiert nicht" msgid "type \"%s\" does not exist" msgstr "Typ „%s“ existiert nicht" -#: catalog/objectaddress.c:1474 +#: catalog/objectaddress.c:1577 #, fuzzy, c-format #| msgid "operator %d (%s, %s) of %s: %s" msgid "operator %d (%s, %s) of %s does not exist" msgstr "Operator %d (%s, %s) von %s: %s" -#: catalog/objectaddress.c:1503 +#: catalog/objectaddress.c:1606 #, fuzzy, c-format #| msgid "function %d (%s, %s) of %s: %s" msgid "function %d (%s, %s) of %s does not exist" msgstr "Funktion %d (%s, %s) von %s: %s" -#: catalog/objectaddress.c:1552 catalog/objectaddress.c:1578 +#: catalog/objectaddress.c:1655 catalog/objectaddress.c:1681 #, fuzzy, c-format #| msgid "mapping for token type \"%s\" does not exist" msgid "user mapping for user \"%s\" in server \"%s\" does not exist" msgstr "Mapping für Tokentyp „%s“ existiert nicht" -#: catalog/objectaddress.c:1567 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:996 commands/foreigncmds.c:1358 +#: catalog/objectaddress.c:1670 commands/foreigncmds.c:430 +#: commands/foreigncmds.c:997 commands/foreigncmds.c:1359 #: foreign/foreign.c:691 #, c-format msgid "server \"%s\" does not exist" msgstr "Server „%s“ existiert nicht" -#: catalog/objectaddress.c:1639 +#: catalog/objectaddress.c:1742 #, fuzzy, c-format #| msgid "unrecognized locktag type %d" msgid "unrecognized default ACL object type %c" msgstr "unbekannter Locktag-Typ %d" -#: catalog/objectaddress.c:1640 +#: catalog/objectaddress.c:1743 #, c-format msgid "Valid object types are 'r', 'S', 'f', and 'T'." -msgstr "" +msgstr "Gültige Objekttypen sind „r“, „S“, „f“ und „T“." -#: catalog/objectaddress.c:1686 +#: catalog/objectaddress.c:1789 #, fuzzy, c-format #| msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" msgstr "Standardumwandlung von Kodierung „%s“ nach „%s“ existiert nicht" -#: catalog/objectaddress.c:1691 +#: catalog/objectaddress.c:1794 #, fuzzy, c-format #| msgid "LDAP user \"%s\" does not exist" msgid "default ACL for user \"%s\" on %s does not exist" msgstr "LDAP-Benutzer „%s“ existiert nicht" -#: catalog/objectaddress.c:1718 catalog/objectaddress.c:1774 -#: catalog/objectaddress.c:1829 +#: catalog/objectaddress.c:1821 catalog/objectaddress.c:1877 +#: catalog/objectaddress.c:1932 #, fuzzy, c-format #| msgid "array must not contain nulls" msgid "name or argument lists may not contain nulls" msgstr "Array darf keine NULL-Werte enthalten" -#: catalog/objectaddress.c:1750 +#: catalog/objectaddress.c:1853 #, fuzzy, c-format #| msgid "unsupported type \"%s\" on line %d" msgid "unsupported object type \"%s\"" msgstr "nicht unterstützter Typ „%s“ auf Zeile %d" -#: catalog/objectaddress.c:1770 catalog/objectaddress.c:1788 +#: catalog/objectaddress.c:1873 catalog/objectaddress.c:1891 #, c-format msgid "name list length must be exactly %d" -msgstr "" +msgstr "Länge der Namensliste muss genau %d sein" -#: catalog/objectaddress.c:1792 +#: catalog/objectaddress.c:1895 #, fuzzy, c-format #| msgid "argument %d cannot be null" msgid "large object OID may not be null" msgstr "Argument %d darf nicht NULL sein" -#: catalog/objectaddress.c:1801 +#: catalog/objectaddress.c:1904 #, c-format msgid "name list must be of length at least %d" -msgstr "" +msgstr "Länge der Namensliste muss mindestens %d sein" -#: catalog/objectaddress.c:1853 catalog/objectaddress.c:1873 +#: catalog/objectaddress.c:1957 catalog/objectaddress.c:1977 #, fuzzy, c-format #| msgid "argument of %s must be a type name" msgid "argument list length must be exactly %d" msgstr "Argument von %s muss ein Typname sein" -#: catalog/objectaddress.c:1860 catalog/objectaddress.c:1867 +#: catalog/objectaddress.c:1964 catalog/objectaddress.c:1971 #, fuzzy, c-format #| msgid "length for type %s must be at least 1" msgid "name list length must be at least %d" msgstr "Länge von Typ %s muss mindestens 1 sein" -#: catalog/objectaddress.c:2009 libpq/be-fsstubs.c:352 +#: catalog/objectaddress.c:2113 libpq/be-fsstubs.c:352 #, c-format msgid "must be owner of large object %u" msgstr "Berechtigung nur für Eigentümer des Large Object %u" -#: catalog/objectaddress.c:2024 commands/functioncmds.c:1385 +#: catalog/objectaddress.c:2128 commands/functioncmds.c:1386 #, c-format msgid "must be owner of type %s or type %s" msgstr "Berechtigung nur für Eigentümer des Typs %s oder des Typs %s" -#: catalog/objectaddress.c:2064 catalog/objectaddress.c:2080 +#: catalog/objectaddress.c:2168 catalog/objectaddress.c:2184 #, c-format msgid "must be superuser" msgstr "Berechtigung nur für Superuser" -#: catalog/objectaddress.c:2071 +#: catalog/objectaddress.c:2175 #, c-format msgid "must have CREATEROLE privilege" msgstr "Berechtigung nur mit CREATEROLE-Privileg" -#: catalog/objectaddress.c:2150 +#: catalog/objectaddress.c:2254 #, fuzzy, c-format #| msgid "unrecognized locktag type %d" msgid "unrecognized object type \"%s\"" msgstr "unbekannter Locktag-Typ %d" -#: catalog/objectaddress.c:2345 +#: catalog/objectaddress.c:2449 #, c-format msgid " column %s" msgstr " Spalte %s" -#: catalog/objectaddress.c:2351 +#: catalog/objectaddress.c:2455 #, c-format msgid "function %s" msgstr "Funktion %s" -#: catalog/objectaddress.c:2356 +#: catalog/objectaddress.c:2460 #, c-format msgid "type %s" msgstr "Typ %s" -#: catalog/objectaddress.c:2386 +#: catalog/objectaddress.c:2490 #, c-format msgid "cast from %s to %s" msgstr "Typumwandlung von %s in %s" -#: catalog/objectaddress.c:2406 +#: catalog/objectaddress.c:2510 #, c-format msgid "collation %s" msgstr "Sortierfolge %s" -#: catalog/objectaddress.c:2430 +#: catalog/objectaddress.c:2534 #, c-format msgid "constraint %s on %s" msgstr "Constraint %s für %s" -#: catalog/objectaddress.c:2436 +#: catalog/objectaddress.c:2540 #, c-format msgid "constraint %s" msgstr "Constraint %s" -#: catalog/objectaddress.c:2453 +#: catalog/objectaddress.c:2557 #, c-format msgid "conversion %s" msgstr "Konversion %s" -#: catalog/objectaddress.c:2490 +#: catalog/objectaddress.c:2594 #, c-format msgid "default for %s" msgstr "Vorgabewert für %s" -#: catalog/objectaddress.c:2499 +#: catalog/objectaddress.c:2603 #, c-format msgid "language %s" msgstr "Sprache %s" -#: catalog/objectaddress.c:2504 +#: catalog/objectaddress.c:2608 #, c-format msgid "large object %u" msgstr "Large Object %u" -#: catalog/objectaddress.c:2509 +#: catalog/objectaddress.c:2613 #, c-format msgid "operator %s" msgstr "Operator %s" -#: catalog/objectaddress.c:2541 +#: catalog/objectaddress.c:2645 #, c-format msgid "operator class %s for access method %s" msgstr "Operatorklasse %s für Zugriffsmethode %s" @@ -3858,7 +3877,7 @@ msgstr "Operatorklasse %s für Zugriffsmethode %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:2591 +#: catalog/objectaddress.c:2695 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "Operator %d (%s, %s) von %s: %s" @@ -3867,175 +3886,173 @@ msgstr "Operator %d (%s, %s) von %s: %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:2641 +#: catalog/objectaddress.c:2745 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "Funktion %d (%s, %s) von %s: %s" -#: catalog/objectaddress.c:2681 +#: catalog/objectaddress.c:2785 #, c-format msgid "rule %s on " msgstr "Regel %s für " -#: catalog/objectaddress.c:2703 -#, fuzzy, c-format -#| msgid "permission denied for language %s" +#: catalog/objectaddress.c:2807 +#, c-format msgid "transform for %s language %s" -msgstr "keine Berechtigung für Sprache %s" +msgstr "Transformation %s für Sprache %s" -#: catalog/objectaddress.c:2737 +#: catalog/objectaddress.c:2841 #, c-format msgid "trigger %s on " msgstr "Trigger %s für " -#: catalog/objectaddress.c:2754 +#: catalog/objectaddress.c:2858 #, c-format msgid "schema %s" msgstr "Schema %s" -#: catalog/objectaddress.c:2767 +#: catalog/objectaddress.c:2871 #, c-format msgid "text search parser %s" msgstr "Textsucheparser %s" -#: catalog/objectaddress.c:2782 +#: catalog/objectaddress.c:2886 #, c-format msgid "text search dictionary %s" msgstr "Textsuchewörterbuch %s" -#: catalog/objectaddress.c:2797 +#: catalog/objectaddress.c:2901 #, c-format msgid "text search template %s" msgstr "Textsuchevorlage %s" -#: catalog/objectaddress.c:2812 +#: catalog/objectaddress.c:2916 #, c-format msgid "text search configuration %s" msgstr "Textsuchekonfiguration %s" -#: catalog/objectaddress.c:2820 +#: catalog/objectaddress.c:2924 #, c-format msgid "role %s" msgstr "Rolle %s" -#: catalog/objectaddress.c:2833 +#: catalog/objectaddress.c:2937 #, c-format msgid "database %s" msgstr "Datenbank %s" -#: catalog/objectaddress.c:2845 +#: catalog/objectaddress.c:2949 #, c-format msgid "tablespace %s" msgstr "Tablespace %s" -#: catalog/objectaddress.c:2854 +#: catalog/objectaddress.c:2958 #, c-format msgid "foreign-data wrapper %s" msgstr "Fremddaten-Wrapper %s" -#: catalog/objectaddress.c:2863 +#: catalog/objectaddress.c:2967 #, c-format msgid "server %s" msgstr "Server %s" -#: catalog/objectaddress.c:2891 +#: catalog/objectaddress.c:2995 #, fuzzy, c-format #| msgid "user mapping for %s" msgid "user mapping for %s on server %s" msgstr "Benutzerabbildung für %s" -#: catalog/objectaddress.c:2926 +#: catalog/objectaddress.c:3030 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "Vorgabeprivilegien für neue Relationen von Rolle %s" -#: catalog/objectaddress.c:2931 +#: catalog/objectaddress.c:3035 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "Vorgabeprivilegien für neue Sequenzen von Rolle %s" -#: catalog/objectaddress.c:2936 +#: catalog/objectaddress.c:3040 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "Vorgabeprivilegien für neue Funktionen von Rolle %s" -#: catalog/objectaddress.c:2941 +#: catalog/objectaddress.c:3045 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "Vorgabeprivilegien für neue Typen von Rolle %s" -#: catalog/objectaddress.c:2947 +#: catalog/objectaddress.c:3051 #, c-format msgid "default privileges belonging to role %s" msgstr "Vorgabeprivilegien von Rolle %s" -#: catalog/objectaddress.c:2955 +#: catalog/objectaddress.c:3059 #, c-format msgid " in schema %s" msgstr " in Schema %s" -#: catalog/objectaddress.c:2972 +#: catalog/objectaddress.c:3076 #, c-format msgid "extension %s" msgstr "Erweiterung %s" -#: catalog/objectaddress.c:2985 +#: catalog/objectaddress.c:3089 #, c-format msgid "event trigger %s" msgstr "Ereignistrigger %s" -#: catalog/objectaddress.c:3017 -#, fuzzy, c-format -#| msgid "rule %s on " +#: catalog/objectaddress.c:3121 +#, c-format msgid "policy %s on " -msgstr "Regel %s für " +msgstr "Policy %s für " -#: catalog/objectaddress.c:3080 +#: catalog/objectaddress.c:3184 #, c-format msgid "table %s" msgstr "Tabelle %s" -#: catalog/objectaddress.c:3084 +#: catalog/objectaddress.c:3188 #, c-format msgid "index %s" msgstr "Index %s" -#: catalog/objectaddress.c:3088 +#: catalog/objectaddress.c:3192 #, c-format msgid "sequence %s" msgstr "Sequenz %s" -#: catalog/objectaddress.c:3092 +#: catalog/objectaddress.c:3196 #, c-format msgid "toast table %s" msgstr "TOAST-Tabelle %s" -#: catalog/objectaddress.c:3096 +#: catalog/objectaddress.c:3200 #, c-format msgid "view %s" msgstr "Sicht %s" -#: catalog/objectaddress.c:3100 +#: catalog/objectaddress.c:3204 #, c-format msgid "materialized view %s" msgstr "materialisierte Sicht %s" -#: catalog/objectaddress.c:3104 +#: catalog/objectaddress.c:3208 #, c-format msgid "composite type %s" msgstr "zusammengesetzter Typ %s" -#: catalog/objectaddress.c:3108 +#: catalog/objectaddress.c:3212 #, c-format msgid "foreign table %s" msgstr "Fremdtabelle %s" -#: catalog/objectaddress.c:3113 +#: catalog/objectaddress.c:3217 #, c-format msgid "relation %s" msgstr "Relation %s" -#: catalog/objectaddress.c:3150 +#: catalog/objectaddress.c:3254 #, c-format msgid "operator family %s for access method %s" msgstr "Operatorfamilie %s für Zugriffsmethode %s" @@ -4125,9 +4142,9 @@ msgstr "Sortieroperator kann nur für Aggregatfunktionen mit einem Argument ange #: catalog/pg_aggregate.c:700 commands/typecmds.c:1702 #: commands/typecmds.c:1753 commands/typecmds.c:1784 commands/typecmds.c:1807 #: commands/typecmds.c:1828 commands/typecmds.c:1855 commands/typecmds.c:1882 -#: commands/typecmds.c:1959 commands/typecmds.c:2001 parser/parse_func.c:366 -#: parser/parse_func.c:395 parser/parse_func.c:420 parser/parse_func.c:434 -#: parser/parse_func.c:509 parser/parse_func.c:520 parser/parse_func.c:2057 +#: commands/typecmds.c:1959 commands/typecmds.c:2001 parser/parse_func.c:364 +#: parser/parse_func.c:393 parser/parse_func.c:418 parser/parse_func.c:432 +#: parser/parse_func.c:507 parser/parse_func.c:518 parser/parse_func.c:1920 #, c-format msgid "function %s does not exist" msgstr "Funktion %s existiert nicht" @@ -4192,7 +4209,7 @@ 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:165 commands/extension.c:2948 +#: catalog/pg_depend.c:165 commands/extension.c:2945 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s ist schon Mitglied der Erweiterung „%s“" @@ -4303,7 +4320,7 @@ msgstr "Operator %s existiert bereits" msgid "operator cannot be its own negator or sort operator" msgstr "Operator kann nicht sein eigener Negator oder Sortierungsoperator sein" -#: catalog/pg_proc.c:133 parser/parse_func.c:2081 parser/parse_func.c:2121 +#: catalog/pg_proc.c:133 parser/parse_func.c:1944 parser/parse_func.c:1984 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" @@ -4401,7 +4418,7 @@ msgstr "SQL-Funktionen können keine Argumente vom Typ „%s“ haben" msgid "SQL function \"%s\"" msgstr "SQL-Funktion „%s“" -#: catalog/pg_shdepend.c:691 +#: catalog/pg_shdepend.c:692 #, c-format msgid "" "\n" @@ -4416,45 +4433,51 @@ msgstr[1] "" "\n" "und Objekte in %d anderen Datenbanken (Liste im Serverlog)" -#: catalog/pg_shdepend.c:1003 +#: catalog/pg_shdepend.c:1004 #, c-format msgid "role %u was concurrently dropped" msgstr "Rolle %u wurde gleichzeitig gelöscht" -#: catalog/pg_shdepend.c:1022 +#: catalog/pg_shdepend.c:1023 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "Tablespace %u wurde gleichzeitig gelöscht" -#: catalog/pg_shdepend.c:1037 +#: catalog/pg_shdepend.c:1038 #, c-format msgid "database %u was concurrently dropped" msgstr "Datenbank %u wurde gleichzeitig gelöscht" -#: catalog/pg_shdepend.c:1081 +#: catalog/pg_shdepend.c:1083 #, c-format msgid "owner of %s" msgstr "Eigentümer von %s" -#: catalog/pg_shdepend.c:1083 +#: catalog/pg_shdepend.c:1085 #, c-format msgid "privileges for %s" msgstr "Privilegien für %s" +#: catalog/pg_shdepend.c:1087 +#, fuzzy, c-format +#| msgid "owner of %s" +msgid "target of %s" +msgstr "Eigentümer von %s" + #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1091 +#: catalog/pg_shdepend.c:1095 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" msgstr[0] "%d Objekt in %s" msgstr[1] "%d Objekte in %s" -#: catalog/pg_shdepend.c:1202 +#: catalog/pg_shdepend.c:1206 #, c-format msgid "cannot drop objects owned by %s because they are required by the database system" msgstr "kann Objekte, die %s gehören, nicht löschen, weil sie vom Datenbanksystem benötigt werden" -#: catalog/pg_shdepend.c:1305 +#: catalog/pg_shdepend.c:1309 #, c-format msgid "cannot reassign ownership of objects owned by %s because they are required by the database system" msgstr "kann den Eigentümer von den Objekten, die %s gehören, nicht ändern, weil die Objekte vom Datenbanksystem benötigt werden" @@ -4496,8 +4519,8 @@ msgstr "Typen mit fester Größe müssen Storage-Typ PLAIN haben" msgid "could not form array type name for type \"%s\"" msgstr "konnte keinen Arraytypnamen für Datentyp „%s“ erzeugen" -#: catalog/toasting.c:104 commands/indexcmds.c:381 commands/tablecmds.c:4330 -#: commands/tablecmds.c:11708 +#: catalog/toasting.c:104 commands/indexcmds.c:381 commands/tablecmds.c:4335 +#: commands/tablecmds.c:11783 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "„%s“ ist keine Tabelle oder materialisierte Sicht" @@ -4577,17 +4600,17 @@ msgstr "Angabe „basetype“ ist überflüssig bei Angabe des Eingabetyps der A msgid "aggregate transition data type cannot be %s" msgstr "Übergangsdatentyp von Aggregatfunktion kann nicht %s sein" -#: commands/alter.c:80 commands/event_trigger.c:227 +#: commands/alter.c:80 commands/event_trigger.c:230 #, c-format msgid "event trigger \"%s\" already exists" msgstr "Ereignistrigger „%s“ existiert bereits" -#: commands/alter.c:83 commands/foreigncmds.c:596 +#: commands/alter.c:83 commands/foreigncmds.c:597 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "Fremddaten-Wrapper „%s“ existiert bereits" -#: commands/alter.c:86 commands/foreigncmds.c:889 +#: commands/alter.c:86 commands/foreigncmds.c:890 #, c-format msgid "server \"%s\" already exists" msgstr "Server „%s“ existiert bereits" @@ -4685,53 +4708,53 @@ msgstr "„%s“: %d von %u Seiten gelesen, enthalten %.0f lebende Zeilen und %. #: commands/analyze.c:1280 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" -msgstr "" +msgstr "überspringe Analysieren des Vererbungsbaums „%s.%s“ --- dieser Vererbungsbaum enthält keine abgeleiteten Tabellen" #: commands/analyze.c:1369 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" -msgstr "" +msgstr "überspringe Analysieren des Vererbungsbaums „%s.%s“ --- dieser Vererbungsbaum enthält keine analysierbaren abgeleiteten Tabellen" -#: commands/analyze.c:1417 executor/execQual.c:2899 +#: commands/analyze.c:1417 executor/execQual.c:2900 msgid "could not convert row type" msgstr "konnte Zeilentyp nicht umwandeln" -#: commands/async.c:543 +#: commands/async.c:553 #, c-format msgid "channel name cannot be empty" msgstr "Kanalname kann nicht leer sein" -#: commands/async.c:548 +#: commands/async.c:558 #, c-format msgid "channel name too long" msgstr "Kanalname zu lang" -#: commands/async.c:555 +#: commands/async.c:565 #, c-format msgid "payload string too long" msgstr "Payload-Zeichenkette zu lang" -#: commands/async.c:741 +#: commands/async.c:751 #, 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:844 +#: commands/async.c:854 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "zu viele Benachrichtigungen in NOTIFY-Schlange" -#: commands/async.c:1417 +#: commands/async.c:1457 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "NOTIFY-Schlange ist %.0f%% voll" -#: commands/async.c:1419 +#: commands/async.c:1459 #, c-format msgid "The server process with PID %d is among those with the oldest transactions." msgstr "Der Serverprozess mit PID %d gehört zu denen mit den ältesten Transaktionen." -#: commands/async.c:1422 +#: commands/async.c:1462 #, c-format msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "Die NOTIFY-Schlange kann erst geleert werden, wenn dieser Prozess seine aktuelle Transaktion beendet." @@ -4746,7 +4769,7 @@ msgstr "kann temporäre Tabellen anderer Sitzungen nicht clustern" msgid "there is no previously clustered index for table \"%s\"" msgstr "es gibt keinen bereits geclusterten Index für Tabelle „%s“" -#: commands/cluster.c:171 commands/tablecmds.c:9153 commands/tablecmds.c:10850 +#: commands/cluster.c:171 commands/tablecmds.c:9228 commands/tablecmds.c:10925 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "Index „%s“ für Tabelle „%s“ existiert nicht" @@ -4761,7 +4784,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:431 commands/tablecmds.c:10860 +#: commands/cluster.c:431 commands/tablecmds.c:10935 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "„%s“ ist kein Index für Tabelle „%s“" @@ -4791,7 +4814,7 @@ msgstr "clustere „%s.%s“ durch Index-Scan von „%s“" msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "clustere „%s.%s“ durch sequenziellen Scan und Sortieren" -#: commands/cluster.c:929 commands/vacuumlazy.c:463 +#: commands/cluster.c:929 commands/vacuumlazy.c:464 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "vacuume „%s.%s“" @@ -4838,8 +4861,8 @@ msgstr "Sortierfolge „%s“ existiert bereits in Schema „%s“" #: commands/comment.c:62 commands/dbcommands.c:797 commands/dbcommands.c:962 #: commands/dbcommands.c:1067 commands/dbcommands.c:1257 #: commands/dbcommands.c:1477 commands/dbcommands.c:1594 -#: commands/dbcommands.c:2011 utils/init/postinit.c:823 -#: utils/init/postinit.c:899 utils/init/postinit.c:916 +#: commands/dbcommands.c:2011 utils/init/postinit.c:826 +#: utils/init/postinit.c:928 utils/init/postinit.c:945 #, c-format msgid "database \"%s\" does not exist" msgstr "Datenbank „%s“ existiert nicht" @@ -4849,12 +4872,12 @@ msgstr "Datenbank „%s“ existiert nicht" msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "„%s“ ist weder Tabelle, Sicht, materialisierte Sicht, zusammengesetzter Typ noch Fremdtabelle" -#: commands/constraint.c:60 utils/adt/ri_triggers.c:2713 +#: commands/constraint.c:60 utils/adt/ri_triggers.c:2717 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "Funktion „%s“ wurde nicht von Triggermanager aufgerufen" -#: commands/constraint.c:67 utils/adt/ri_triggers.c:2722 +#: commands/constraint.c:67 utils/adt/ri_triggers.c:2726 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "Funktion „%s“ muss AFTER ROW ausgelöst werden" @@ -4944,427 +4967,427 @@ msgstr "" #: commands/copy.c:881 #, c-format msgid "Use direct INSERT statements instead." -msgstr "" +msgstr "Verwenden Sie stattdessen direkte INSERT-Anweisungen." -#: commands/copy.c:1012 +#: commands/copy.c:1021 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "COPY-Format „%s“ nicht erkannt" -#: commands/copy.c:1083 commands/copy.c:1097 commands/copy.c:1111 -#: commands/copy.c:1131 +#: commands/copy.c:1092 commands/copy.c:1106 commands/copy.c:1120 +#: commands/copy.c:1140 #, 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:1144 +#: commands/copy.c:1153 #, 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:1150 commands/dbcommands.c:232 commands/dbcommands.c:1427 +#: commands/copy.c:1159 commands/dbcommands.c:232 commands/dbcommands.c:1427 #, c-format msgid "option \"%s\" not recognized" msgstr "Option „%s“ nicht erkannt" -#: commands/copy.c:1161 +#: commands/copy.c:1170 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "DELIMITER kann nicht im BINARY-Modus angegeben werden" -#: commands/copy.c:1166 +#: commands/copy.c:1175 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "NULL kann nicht im BINARY-Modus angegeben werden" -#: commands/copy.c:1188 +#: commands/copy.c:1197 #, 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:1195 +#: commands/copy.c:1204 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPY-Trennzeichen kann nicht Newline oder Carriage Return sein" -#: commands/copy.c:1201 +#: commands/copy.c:1210 #, 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:1218 +#: commands/copy.c:1227 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "DELIMITER für COPY darf nicht „%s“ sein" -#: commands/copy.c:1224 +#: commands/copy.c:1233 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADER ist nur im CSV-Modus verfügbar" -#: commands/copy.c:1230 +#: commands/copy.c:1239 #, 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:1235 +#: commands/copy.c:1244 #, 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:1240 +#: commands/copy.c:1249 #, c-format msgid "COPY delimiter and quote must be different" msgstr "DELIMITER und QUOTE für COPY müssen verschieden sein" -#: commands/copy.c:1246 +#: commands/copy.c:1255 #, 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:1251 +#: commands/copy.c:1260 #, 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:1257 +#: commands/copy.c:1266 #, 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:1261 +#: commands/copy.c:1270 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "FORCE_QUOTE ist nur bei COPY TO verfügbar" -#: commands/copy.c:1267 +#: commands/copy.c:1276 #, 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:1271 +#: commands/copy.c:1280 #, 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:1277 +#: commands/copy.c:1286 #, 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:1282 +#: commands/copy.c:1291 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "FORCE_NULL ist nur bei COPY FROM verfügbar" -#: commands/copy.c:1288 +#: commands/copy.c:1297 #, 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:1295 +#: commands/copy.c:1304 #, 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:1358 +#: commands/copy.c:1367 #, c-format msgid "table \"%s\" does not have OIDs" msgstr "Tabelle „%s“ hat keine OIDs" -#: commands/copy.c:1375 +#: commands/copy.c:1384 #, c-format msgid "COPY (SELECT) WITH OIDS is not supported" msgstr "COPY (SELECT) WITH OIDS wird nicht unterstützt" -#: commands/copy.c:1401 +#: commands/copy.c:1410 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) wird nicht unterstützt" -#: commands/copy.c:1430 +#: commands/copy.c:1440 #, c-format msgid "relation referenced by COPY statement has changed" -msgstr "" +msgstr "die von der COPY-Anweisung verwendete Relation hat sich geändert" -#: commands/copy.c:1488 +#: commands/copy.c:1498 #, c-format msgid "FORCE QUOTE column \"%s\" not referenced by COPY" msgstr "FORCE-QUOTE-Spalte „%s“ wird von COPY nicht verwendet" -#: commands/copy.c:1510 +#: commands/copy.c:1520 #, c-format msgid "FORCE NOT NULL column \"%s\" not referenced by COPY" msgstr "Spalte „%s“ mit FORCE NOT NULL wird von COPY nicht verwendet" -#: commands/copy.c:1532 +#: commands/copy.c:1542 #, c-format msgid "FORCE NULL column \"%s\" not referenced by COPY" msgstr "Spalte „%s“ mit FORCE NULL wird von COPY nicht verwendet" -#: commands/copy.c:1596 +#: commands/copy.c:1607 #, c-format msgid "could not close pipe to external command: %m" msgstr "konnte Pipe zu externem Programm nicht schließen: %m" -#: commands/copy.c:1599 +#: commands/copy.c:1611 #, c-format msgid "program \"%s\" failed" msgstr "Programm „%s“ fehlgeschlagen" -#: commands/copy.c:1649 +#: commands/copy.c:1661 #, c-format msgid "cannot copy from view \"%s\"" msgstr "kann nicht aus Sicht „%s“ kopieren" -#: commands/copy.c:1651 commands/copy.c:1657 commands/copy.c:1663 +#: commands/copy.c:1663 commands/copy.c:1669 commands/copy.c:1675 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "Versuchen Sie die Variante COPY (SELECT ...) TO." -#: commands/copy.c:1655 +#: commands/copy.c:1667 #, c-format msgid "cannot copy from materialized view \"%s\"" msgstr "kann nicht aus materialisierter Sicht „%s“ kopieren" -#: commands/copy.c:1661 +#: commands/copy.c:1673 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "kann nicht aus Fremdtabelle „%s“ kopieren" -#: commands/copy.c:1667 +#: commands/copy.c:1679 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "kann nicht aus Sequenz „%s“ kopieren" -#: commands/copy.c:1672 +#: commands/copy.c:1684 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "kann nicht aus Relation „%s“, die keine Tabelle ist, kopieren" -#: commands/copy.c:1696 commands/copy.c:2730 +#: commands/copy.c:1709 commands/copy.c:2747 #, c-format msgid "could not execute command \"%s\": %m" msgstr "konnte Befehl „%s“ nicht ausführen: %m" -#: commands/copy.c:1711 +#: commands/copy.c:1724 #, c-format msgid "relative path not allowed for COPY to file" msgstr "relativer Pfad bei COPY in Datei nicht erlaubt" -#: commands/copy.c:1719 +#: commands/copy.c:1732 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "konnte Datei „%s“ nicht zum Schreiben öffnen: %m" -#: commands/copy.c:1728 commands/copy.c:2750 +#: commands/copy.c:1744 commands/copy.c:2770 #, c-format msgid "\"%s\" is a directory" msgstr "„%s“ ist ein Verzeichnis" -#: commands/copy.c:2053 +#: commands/copy.c:2069 #, c-format msgid "COPY %s, line %d, column %s" msgstr "COPY %s, Zeile %d, Spalte %s" -#: commands/copy.c:2057 commands/copy.c:2104 +#: commands/copy.c:2073 commands/copy.c:2120 #, c-format msgid "COPY %s, line %d" msgstr "COPY %s, Zeile %d" -#: commands/copy.c:2068 +#: commands/copy.c:2084 #, c-format msgid "COPY %s, line %d, column %s: \"%s\"" msgstr "COPY %s, Zeile %d, Spalte %s: „%s“" -#: commands/copy.c:2076 +#: commands/copy.c:2092 #, c-format msgid "COPY %s, line %d, column %s: null input" msgstr "COPY %s, Zeile %d, Spalte %s: NULL Eingabe" -#: commands/copy.c:2098 +#: commands/copy.c:2114 #, c-format msgid "COPY %s, line %d: \"%s\"" msgstr "COPY %s, Zeile %d: „%s“" -#: commands/copy.c:2182 +#: commands/copy.c:2198 #, c-format msgid "cannot copy to view \"%s\"" msgstr "kann nicht in Sicht „%s“ kopieren" -#: commands/copy.c:2187 +#: commands/copy.c:2203 #, c-format msgid "cannot copy to materialized view \"%s\"" msgstr "kann nicht in materialisierte Sicht „%s“ kopieren" -#: commands/copy.c:2192 +#: commands/copy.c:2208 #, c-format msgid "cannot copy to foreign table \"%s\"" msgstr "kann nicht in Fremdtabelle „%s“ kopieren" -#: commands/copy.c:2197 +#: commands/copy.c:2213 #, c-format msgid "cannot copy to sequence \"%s\"" msgstr "kann nicht in Sequenz „%s“ kopieren" -#: commands/copy.c:2202 +#: commands/copy.c:2218 #, c-format msgid "cannot copy to non-table relation \"%s\"" msgstr "kann nicht in Relation „%s“ kopieren, die keine Tabelle ist" -#: commands/copy.c:2265 +#: commands/copy.c:2281 #, c-format msgid "cannot perform FREEZE because of prior transaction activity" msgstr "FREEZE kann nicht durchgeführt werden wegen vorheriger Aktivität in dieser Transaktion" -#: commands/copy.c:2271 +#: commands/copy.c:2287 #, c-format msgid "cannot perform FREEZE because the table was not created or truncated in the current subtransaction" msgstr "FREEZE kann nicht durchgeführt werden, weil die Tabelle nicht in der aktuellen Transaktion erzeugt oder geleert wurde" -#: commands/copy.c:2741 utils/adt/genfile.c:123 +#: commands/copy.c:2758 commands/extension.c:3037 utils/adt/genfile.c:134 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "konnte Datei „%s“ nicht zum Lesen öffnen: %m" -#: commands/copy.c:2770 +#: commands/copy.c:2790 #, c-format msgid "COPY file signature not recognized" msgstr "COPY-Datei-Signatur nicht erkannt" -#: commands/copy.c:2775 +#: commands/copy.c:2795 #, c-format msgid "invalid COPY file header (missing flags)" msgstr "ungültiger COPY-Dateikopf (Flags fehlen)" -#: commands/copy.c:2781 +#: commands/copy.c:2801 #, c-format msgid "unrecognized critical flags in COPY file header" msgstr "unbekannte kritische Flags im COPY-Dateikopf" -#: commands/copy.c:2787 +#: commands/copy.c:2807 #, c-format msgid "invalid COPY file header (missing length)" msgstr "ungültiger COPY-Dateikopf (Länge fehlt)" -#: commands/copy.c:2794 +#: commands/copy.c:2814 #, c-format msgid "invalid COPY file header (wrong length)" msgstr "ungültiger COPY-Dateikopf (falsche Länge)" -#: commands/copy.c:2927 commands/copy.c:3634 commands/copy.c:3864 +#: commands/copy.c:2947 commands/copy.c:3654 commands/copy.c:3884 #, c-format msgid "extra data after last expected column" msgstr "zusätzliche Daten nach letzter erwarteter Spalte" -#: commands/copy.c:2937 +#: commands/copy.c:2957 #, c-format msgid "missing data for OID column" msgstr "fehlende Daten für OID-Spalte" -#: commands/copy.c:2943 +#: commands/copy.c:2963 #, c-format msgid "null OID in COPY data" msgstr "OID ist NULL in COPY-Daten" -#: commands/copy.c:2953 commands/copy.c:3076 +#: commands/copy.c:2973 commands/copy.c:3096 #, c-format msgid "invalid OID in COPY data" msgstr "ungültige OID in COPY-Daten" -#: commands/copy.c:2968 +#: commands/copy.c:2988 #, c-format msgid "missing data for column \"%s\"" msgstr "fehlende Daten für Spalte „%s“" -#: commands/copy.c:3051 +#: commands/copy.c:3071 #, c-format msgid "received copy data after EOF marker" msgstr "COPY-Daten nach EOF-Markierung empfangen" -#: commands/copy.c:3058 +#: commands/copy.c:3078 #, c-format msgid "row field count is %d, expected %d" msgstr "Feldanzahl in Zeile ist %d, erwartet wurden %d" -#: commands/copy.c:3398 commands/copy.c:3415 +#: commands/copy.c:3418 commands/copy.c:3435 #, c-format msgid "literal carriage return found in data" msgstr "Carriage-Return-Zeichen in Daten gefunden" -#: commands/copy.c:3399 commands/copy.c:3416 +#: commands/copy.c:3419 commands/copy.c:3436 #, c-format msgid "unquoted carriage return found in data" msgstr "ungequotetes Carriage-Return-Zeichen in Daten gefunden" -#: commands/copy.c:3401 commands/copy.c:3418 +#: commands/copy.c:3421 commands/copy.c:3438 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "Verwenden Sie „\\r“, um ein Carriage-Return-Zeichen darzustellen." -#: commands/copy.c:3402 commands/copy.c:3419 +#: commands/copy.c:3422 commands/copy.c:3439 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "Verwenden Sie ein gequotetes CSV-Feld, um ein Carriage-Return-Zeichen darzustellen." -#: commands/copy.c:3431 +#: commands/copy.c:3451 #, c-format msgid "literal newline found in data" msgstr "Newline-Zeichen in Daten gefunden" -#: commands/copy.c:3432 +#: commands/copy.c:3452 #, c-format msgid "unquoted newline found in data" msgstr "ungequotetes Newline-Zeichen in Daten gefunden" -#: commands/copy.c:3434 +#: commands/copy.c:3454 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "Verwenden Sie „\\n“, um ein Newline-Zeichen darzustellen." -#: commands/copy.c:3435 +#: commands/copy.c:3455 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "Verwenden Sie ein gequotetes CSV-Feld, um ein Newline-Zeichen darzustellen." -#: commands/copy.c:3481 commands/copy.c:3517 +#: commands/copy.c:3501 commands/copy.c:3537 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "COPY-Ende-Markierung stimmt nicht mit vorherigem Newline-Stil überein" -#: commands/copy.c:3490 commands/copy.c:3506 +#: commands/copy.c:3510 commands/copy.c:3526 #, c-format msgid "end-of-copy marker corrupt" msgstr "COPY-Ende-Markierung verfälscht" -#: commands/copy.c:3948 +#: commands/copy.c:3968 #, c-format msgid "unterminated CSV quoted field" msgstr "Quotes in CSV-Feld nicht abgeschlossen" -#: commands/copy.c:4025 commands/copy.c:4044 +#: commands/copy.c:4045 commands/copy.c:4064 #, c-format msgid "unexpected EOF in COPY data" msgstr "unerwartetes EOF in COPY-Daten" -#: commands/copy.c:4034 +#: commands/copy.c:4054 #, c-format msgid "invalid field size" msgstr "ungültige Feldgröße" -#: commands/copy.c:4057 +#: commands/copy.c:4077 #, c-format msgid "incorrect binary data format" msgstr "falsches Binärdatenformat" -#: commands/copy.c:4368 commands/indexcmds.c:1007 commands/tablecmds.c:1455 -#: commands/tablecmds.c:2278 parser/parse_relation.c:3078 -#: parser/parse_relation.c:3098 utils/adt/tsvector_op.c:1417 +#: commands/copy.c:4388 commands/indexcmds.c:1008 commands/tablecmds.c:1457 +#: commands/tablecmds.c:2280 parser/parse_relation.c:3081 +#: parser/parse_relation.c:3101 utils/adt/tsvector_op.c:1417 #, c-format msgid "column \"%s\" does not exist" msgstr "Spalte „%s“ existiert nicht" -#: commands/copy.c:4375 commands/tablecmds.c:1481 commands/trigger.c:652 +#: commands/copy.c:4395 commands/tablecmds.c:1483 commands/trigger.c:652 #: parser/parse_target.c:956 parser/parse_target.c:967 #, c-format msgid "column \"%s\" specified more than once" @@ -5401,8 +5424,8 @@ msgstr "%d ist kein gültiger Kodierungscode" msgid "%s is not a valid encoding name" msgstr "%s ist kein gültiger Kodierungsname" -#: commands/dbcommands.c:279 commands/dbcommands.c:1458 commands/user.c:270 -#: commands/user.c:641 +#: commands/dbcommands.c:279 commands/dbcommands.c:1458 commands/user.c:271 +#: commands/user.c:635 #, c-format msgid "invalid connection limit: %d" msgstr "ungültige Verbindungshöchstgrenze: %d" @@ -5562,7 +5585,7 @@ msgstr "Sie müssen sie zurück in den Standard-Tablespace der Datenbank verschi #: commands/dbcommands.c:1325 commands/dbcommands.c:1868 #: commands/dbcommands.c:2072 commands/dbcommands.c:2120 -#: commands/tablespace.c:605 +#: commands/tablespace.c:606 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "einige nutzlose Dateien wurde möglicherweise im alten Datenbankverzeichnis „%s“ zurückgelassen" @@ -5640,7 +5663,7 @@ msgstr "Argument von %s muss ein Typname sein" msgid "invalid argument for %s: \"%s\"" msgstr "ungültiges Argument für %s: „%s“" -#: commands/dropcmds.c:112 commands/functioncmds.c:1165 +#: commands/dropcmds.c:112 commands/functioncmds.c:1166 #: utils/adt/ruleutils.c:1950 #, c-format msgid "\"%s\" is an aggregate function" @@ -5651,14 +5674,14 @@ msgstr "„%s“ ist eine Aggregatfunktion" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Verwenden Sie DROP AGGREGATE, um Aggregatfunktionen zu löschen." -#: commands/dropcmds.c:165 commands/sequence.c:424 commands/tablecmds.c:2365 -#: commands/tablecmds.c:2516 commands/tablecmds.c:2558 -#: commands/tablecmds.c:11191 tcop/utility.c:1103 +#: commands/dropcmds.c:165 commands/sequence.c:424 commands/tablecmds.c:2367 +#: commands/tablecmds.c:2518 commands/tablecmds.c:2560 +#: commands/tablecmds.c:11266 tcop/utility.c:1104 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "Relation „%s“ existiert nicht, wird übersprungen" -#: commands/dropcmds.c:195 commands/dropcmds.c:292 commands/tablecmds.c:737 +#: commands/dropcmds.c:195 commands/dropcmds.c:292 commands/tablecmds.c:739 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "Schema „%s“ existiert nicht, wird übersprungen" @@ -5729,10 +5752,9 @@ msgid "cast from type %s to type %s does not exist, skipping" msgstr "Typumwandlung von Typ %s in Typ %s existiert nicht, wird übersprungen" #: commands/dropcmds.c:372 -#, fuzzy, c-format -#| msgid "language \"%s\" does not exist, skipping" +#, c-format msgid "transform for type %s language \"%s\" does not exist, skipping" -msgstr "Sprache „%s“ existiert nicht, wird übersprungen" +msgstr "Transformation für Typ %s Sprache „%s“ existiert nicht, wird übersprungen" #: commands/dropcmds.c:380 #, c-format @@ -5740,10 +5762,9 @@ msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" msgstr "Trigger „%s“ für Relation „%s“ existiert nicht, wird übersprungen" #: commands/dropcmds.c:389 -#, fuzzy, c-format -#| msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" +#, c-format msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" -msgstr "Regel „%s“ für Relation „%s“ existiert nicht, wird übersprungen" +msgstr "Policy „%s“ für Relation „%s“ existiert nicht, wird übersprungen" #: commands/dropcmds.c:396 #, c-format @@ -5775,332 +5796,339 @@ msgstr "Operatorklasse „%s“ existiert nicht für Zugriffsmethode „%s“, w msgid "operator family \"%s\" does not exist for access method \"%s\", skipping" msgstr "Operatorfamilie „%s“ existiert nicht für Zugriffsmethode „%s“, wird übersprungen" -#: commands/event_trigger.c:178 +#: commands/event_trigger.c:181 #, c-format msgid "permission denied to create event trigger \"%s\"" msgstr "keine Berechtigung, um Ereignistrigger „%s“ zu erzeugen" -#: commands/event_trigger.c:180 +#: commands/event_trigger.c:183 #, c-format msgid "Must be superuser to create an event trigger." msgstr "Nur Superuser können Ereignistrigger anlegen." -#: commands/event_trigger.c:189 +#: commands/event_trigger.c:192 #, c-format msgid "unrecognized event name \"%s\"" msgstr "unbekannter Ereignisname „%s“" -#: commands/event_trigger.c:206 +#: commands/event_trigger.c:209 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "unbekannte Filtervariable „%s“" -#: commands/event_trigger.c:236 +#: commands/event_trigger.c:239 #, c-format msgid "function \"%s\" must return type \"event_trigger\"" msgstr "Funktion „%s“ muss Typ „event_trigger“ zurückgeben" -#: commands/event_trigger.c:261 +#: commands/event_trigger.c:264 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "Filterwert „%s“ nicht erkannt für Filtervariable „%s“" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:267 commands/event_trigger.c:337 +#: commands/event_trigger.c:270 commands/event_trigger.c:340 #, c-format msgid "event triggers are not supported for %s" msgstr "Ereignistrigger für %s werden nicht unterstützt" -#: commands/event_trigger.c:360 +#: commands/event_trigger.c:363 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "Filtervariable „%s“ mehrmals angegeben" -#: commands/event_trigger.c:508 commands/event_trigger.c:552 -#: commands/event_trigger.c:645 +#: commands/event_trigger.c:511 commands/event_trigger.c:555 +#: commands/event_trigger.c:648 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "Ereignistrigger „%s“ existiert nicht" -#: commands/event_trigger.c:613 +#: commands/event_trigger.c:616 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "keine Berechtigung, um Eigentümer des Ereignistriggers „%s“ zu ändern" -#: commands/event_trigger.c:615 +#: commands/event_trigger.c:618 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "Der Eigentümer eines Ereignistriggers muss ein Superuser sein." -#: commands/event_trigger.c:1445 +#: commands/event_trigger.c:1439 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%s kann nur in einer sql_drop-Ereignistriggerfunktion aufgerufen werden" -#: commands/event_trigger.c:1452 commands/event_trigger.c:2003 -#: commands/extension.c:1648 commands/extension.c:1757 -#: commands/extension.c:1950 commands/prepare.c:701 executor/execQual.c:1734 -#: executor/execQual.c:1759 executor/execQual.c:2134 executor/execQual.c:5374 +#: commands/event_trigger.c:1446 commands/event_trigger.c:1997 +#: commands/extension.c:1645 commands/extension.c:1754 +#: commands/extension.c:1947 commands/prepare.c:701 executor/execQual.c:1735 +#: executor/execQual.c:1760 executor/execQual.c:2135 executor/execQual.c:5376 #: executor/functions.c:1021 foreign/foreign.c:491 -#: replication/logical/logicalfuncs.c:312 replication/logical/origin.c:1405 -#: replication/slotfuncs.c:173 replication/walsender.c:2741 -#: utils/adt/jsonfuncs.c:1417 utils/adt/jsonfuncs.c:1549 -#: utils/adt/jsonfuncs.c:1739 utils/adt/jsonfuncs.c:1868 -#: utils/adt/jsonfuncs.c:2636 utils/adt/pgstatfuncs.c:547 -#: utils/fmgr/funcapi.c:61 utils/mmgr/portalmem.c:986 +#: replication/logical/logicalfuncs.c:312 replication/logical/origin.c:1410 +#: replication/slotfuncs.c:173 replication/walsender.c:2742 +#: utils/adt/jsonfuncs.c:1474 utils/adt/jsonfuncs.c:1606 +#: utils/adt/jsonfuncs.c:1796 utils/adt/jsonfuncs.c:1925 +#: utils/adt/jsonfuncs.c:2693 utils/adt/pgstatfuncs.c:547 +#: utils/fmgr/funcapi.c:61 utils/misc/guc.c:8177 utils/mmgr/portalmem.c:1052 #, 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" -#: commands/event_trigger.c:1456 commands/event_trigger.c:2007 -#: commands/extension.c:1652 commands/extension.c:1761 -#: commands/extension.c:1954 commands/prepare.c:705 foreign/foreign.c:496 -#: replication/logical/logicalfuncs.c:316 replication/logical/origin.c:1409 -#: replication/slotfuncs.c:177 replication/walsender.c:2745 -#: utils/adt/pgstatfuncs.c:551 utils/mmgr/portalmem.c:990 +#: commands/event_trigger.c:1450 commands/event_trigger.c:2001 +#: commands/extension.c:1649 commands/extension.c:1758 +#: commands/extension.c:1951 commands/prepare.c:705 foreign/foreign.c:496 +#: replication/logical/logicalfuncs.c:316 replication/logical/origin.c:1414 +#: replication/slotfuncs.c:177 replication/walsender.c:2746 +#: utils/adt/pgstatfuncs.c:551 utils/misc/guc.c:8181 +#: utils/mmgr/portalmem.c:1056 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "Materialisierungsmodus wird benötigt, ist aber in diesem Zusammenhang nicht erlaubt" -#: commands/event_trigger.c:1565 commands/event_trigger.c:1586 +#: commands/event_trigger.c:1559 commands/event_trigger.c:1580 #, fuzzy, c-format #| msgid "%s can only be called in a sql_drop event trigger function" msgid "%s can only be called in a table_rewrite event trigger function" msgstr "%s kann nur in einer sql_drop-Ereignistriggerfunktion aufgerufen werden" -#: commands/event_trigger.c:1996 +#: commands/event_trigger.c:1990 #, fuzzy, c-format #| msgid "%s can only be called in a sql_drop event trigger function" msgid "%s can only be called in an event trigger function" msgstr "%s kann nur in einer sql_drop-Ereignistriggerfunktion aufgerufen werden" -#: commands/explain.c:180 +#: commands/explain.c:184 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "unbekannter Wert für EXPLAIN-Option „%s“: „%s“" -#: commands/explain.c:186 +#: commands/explain.c:190 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "unbekannte EXPLAIN-Option „%s“" -#: commands/explain.c:193 +#: commands/explain.c:197 #, c-format msgid "EXPLAIN option BUFFERS requires ANALYZE" msgstr "EXPLAIN-Option BUFFERS erfordert ANALYZE" -#: commands/explain.c:202 +#: commands/explain.c:206 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "EXPLAIN-Option TIMING erfordert ANALYZE" -#: commands/extension.c:148 commands/extension.c:2638 +#: commands/extension.c:152 commands/extension.c:2635 #, c-format msgid "extension \"%s\" does not exist" msgstr "Erweiterung „%s“ existiert nicht" -#: commands/extension.c:247 commands/extension.c:256 commands/extension.c:268 -#: commands/extension.c:278 +#: commands/extension.c:251 commands/extension.c:260 commands/extension.c:272 +#: commands/extension.c:282 #, c-format msgid "invalid extension name: \"%s\"" msgstr "ungültiger Erweiterungsname: „%s“" -#: commands/extension.c:248 +#: commands/extension.c:252 #, c-format msgid "Extension names must not be empty." msgstr "Erweiterungsnamen dürfen nicht leer sein." -#: commands/extension.c:257 +#: commands/extension.c:261 #, c-format msgid "Extension names must not contain \"--\"." msgstr "Erweiterungsnamen dürfen nicht „--“ enthalten." -#: commands/extension.c:269 +#: commands/extension.c:273 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "Erweiterungsnamen dürfen nicht mit „-“ anfangen oder aufhören." -#: commands/extension.c:279 +#: commands/extension.c:283 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "Erweiterungsnamen dürfen keine Verzeichnistrennzeichen enthalten." -#: commands/extension.c:294 commands/extension.c:303 commands/extension.c:312 -#: commands/extension.c:322 +#: commands/extension.c:298 commands/extension.c:307 commands/extension.c:316 +#: commands/extension.c:326 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "ungültiger Erweiterungsversionsname: „%s“" -#: commands/extension.c:295 +#: commands/extension.c:299 #, c-format msgid "Version names must not be empty." msgstr "Versionsnamen dürfen nicht leer sein." -#: commands/extension.c:304 +#: commands/extension.c:308 #, c-format msgid "Version names must not contain \"--\"." msgstr "Versionsnamen dürfen nicht „--“ enthalten." -#: commands/extension.c:313 +#: commands/extension.c:317 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "Versionsnamen dürfen nicht mit „-“ anfangen oder aufhören." -#: commands/extension.c:323 +#: commands/extension.c:327 #, c-format msgid "Version names must not contain directory separator characters." msgstr "Versionsnamen dürfen keine Verzeichnistrennzeichen enthalten." -#: commands/extension.c:473 +#: commands/extension.c:477 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "konnte Erweiterungskontrolldatei „%s“ nicht öffnen: %m" -#: commands/extension.c:495 commands/extension.c:505 +#: commands/extension.c:499 commands/extension.c:509 #, 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:544 +#: commands/extension.c:548 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "„%s“ ist kein gültiger Kodierungsname" -#: commands/extension.c:558 +#: commands/extension.c:562 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "Parameter „%s“ muss eine Liste von Erweiterungsnamen sein" -#: commands/extension.c:565 +#: commands/extension.c:569 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "unbekannter Parameter „%s“ in Datei „%s“" -#: commands/extension.c:574 +#: commands/extension.c:578 #, 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:722 +#: commands/extension.c:719 #, c-format msgid "transaction control statements are not allowed within an extension script" msgstr "Transaktionskontrollanweisungen sind nicht in einem Erweiterungsskript erlaubt" -#: commands/extension.c:790 +#: commands/extension.c:787 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "keine Berechtigung, um Erweiterung „%s“ zu erzeugen" -#: commands/extension.c:792 +#: commands/extension.c:789 #, c-format msgid "Must be superuser to create this extension." msgstr "Nur Superuser können diese Erweiterung anlegen." -#: commands/extension.c:796 +#: commands/extension.c:793 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "keine Berechtigung, um Erweiterung „%s“ zu aktualisieren" -#: commands/extension.c:798 +#: commands/extension.c:795 #, c-format msgid "Must be superuser to update this extension." msgstr "Nur Superuser können diese Erweiterung aktualisieren." -#: commands/extension.c:1080 +#: commands/extension.c:1077 #, 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:1208 +#: commands/extension.c:1205 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "Erweiterung „%s“ existiert bereits, wird übersprungen" -#: commands/extension.c:1215 +#: commands/extension.c:1212 #, c-format msgid "extension \"%s\" already exists" msgstr "Erweiterung „%s“ existiert bereits" -#: commands/extension.c:1226 +#: commands/extension.c:1223 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "geschachteltes CREATE EXTENSION wird nicht unterstützt" -#: commands/extension.c:1281 commands/extension.c:2698 +#: commands/extension.c:1278 commands/extension.c:2695 #, c-format msgid "version to install must be specified" msgstr "die zu installierende Version muss angegeben werden" -#: commands/extension.c:1298 +#: commands/extension.c:1295 #, c-format msgid "FROM version must be different from installation target version \"%s\"" msgstr "FROM-Version muss verschieden von der zu installierenden Version „%s“ sein" -#: commands/extension.c:1353 +#: commands/extension.c:1350 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "Erweiterung „%s“ muss in Schema „%s“ installiert werden" -#: commands/extension.c:1437 commands/extension.c:2843 +#: commands/extension.c:1434 commands/extension.c:2840 #, c-format msgid "required extension \"%s\" is not installed" msgstr "benötigte Erweiterung „%s“ ist nicht installiert" -#: commands/extension.c:1600 +#: commands/extension.c:1597 #, 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:2071 +#: commands/extension.c:2068 #, c-format msgid "pg_extension_config_dump() can only be called from an SQL script executed by CREATE EXTENSION" msgstr "pg_extension_config_dump() kann nur von einem SQL-Skript aufgerufen werden, das von CREATE EXTENSION ausgeführt wird" -#: commands/extension.c:2083 +#: commands/extension.c:2080 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u bezieht sich nicht auf eine Tabelle" -#: commands/extension.c:2088 +#: commands/extension.c:2085 #, 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:2453 +#: commands/extension.c:2450 #, 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:2493 commands/extension.c:2556 +#: commands/extension.c:2490 commands/extension.c:2553 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "Erweiterung „%s“ unterstützt SET SCHEMA nicht" -#: commands/extension.c:2558 +#: commands/extension.c:2555 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "%s ist nicht im Schema der Erweiterung („%s“)" -#: commands/extension.c:2618 +#: commands/extension.c:2615 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "geschachteltes ALTER EXTENSION wird nicht unterstützt" -#: commands/extension.c:2709 +#: commands/extension.c:2706 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "Version „%s“ von Erweiterung „%s“ ist bereits installiert" -#: commands/extension.c:2960 +#: commands/extension.c:2957 #, 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:2978 +#: commands/extension.c:2975 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s ist kein Mitglied der Erweiterung „%s“" +#: commands/extension.c:3031 +#, fuzzy, c-format +#| msgid "tsquery is too large" +msgid "file too large" +msgstr "tsquery ist zu groß" + #: commands/foreigncmds.c:150 commands/foreigncmds.c:159 #, c-format msgid "option \"%s\" not found" @@ -6126,82 +6154,80 @@ msgstr "Nur Superuser können den Eigentümer eines Fremddaten-Wrappers ändern. 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:292 commands/foreigncmds.c:708 foreign/foreign.c:670 +#: commands/foreigncmds.c:292 commands/foreigncmds.c:709 foreign/foreign.c:670 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "Fremddaten-Wrapper „%s“ existiert nicht" -#: commands/foreigncmds.c:488 +#: commands/foreigncmds.c:489 #, c-format msgid "function %s must return type \"fdw_handler\"" msgstr "Funktion %s muss Typ „fdw_handler“ zurückgeben" -#: commands/foreigncmds.c:583 +#: commands/foreigncmds.c:584 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "keine Berechtigung, um Fremddaten-Wrapper „%s“ zu erzeugen" -#: commands/foreigncmds.c:585 +#: commands/foreigncmds.c:586 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "Nur Superuser können Fremddaten-Wrapper anlegen." -#: commands/foreigncmds.c:698 +#: commands/foreigncmds.c:699 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "keine Berechtigung, um Fremddaten-Wrapper „%s“ zu ändern" -#: commands/foreigncmds.c:700 +#: commands/foreigncmds.c:701 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "Nur Superuser können Fremddaten-Wrapper ändern." -#: commands/foreigncmds.c:731 +#: commands/foreigncmds.c:732 #, 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:746 +#: commands/foreigncmds.c:747 #, 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:1164 +#: commands/foreigncmds.c:1165 #, c-format msgid "user mapping \"%s\" already exists for server %s" msgstr "Benutzerabbildung „%s“ existiert bereits für Server „%s“" -#: commands/foreigncmds.c:1258 commands/foreigncmds.c:1374 +#: commands/foreigncmds.c:1259 commands/foreigncmds.c:1375 #, c-format msgid "user mapping \"%s\" does not exist for the server" msgstr "Benutzerabbildung „%s“ existiert für den Server nicht" -#: commands/foreigncmds.c:1361 +#: commands/foreigncmds.c:1362 #, c-format msgid "server does not exist, skipping" msgstr "Server existiert nicht, wird übersprungen" -#: commands/foreigncmds.c:1379 +#: commands/foreigncmds.c:1380 #, c-format msgid "user mapping \"%s\" does not exist for the server, skipping" msgstr "Benutzerabbildung „%s“ existiert nicht für den Server, wird übersprungen" -#: commands/foreigncmds.c:1531 foreign/foreign.c:360 +#: commands/foreigncmds.c:1532 foreign/foreign.c:360 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "Fremddaten-Wrapper „%s“ hat keinen Handler" -#: commands/foreigncmds.c:1537 -#, fuzzy, c-format -#| msgid "foreign-data wrapper \"%s\" does not exist" +#: commands/foreigncmds.c:1538 +#, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" -msgstr "Fremddaten-Wrapper „%s“ existiert nicht" +msgstr "Fremddaten-Wrapper „%s“ unterstützt IMPORT FOREIGN SCHEMA nicht" -#: commands/foreigncmds.c:1630 -#, fuzzy, c-format -#| msgid "cannot insert into foreign table \"%s\"" +#: commands/foreigncmds.c:1631 +#, c-format msgid "importing foreign table \"%s\"" -msgstr "kann nicht in Fremdtabelle „%s“ einfügen" +msgstr "importiere Fremdtabelle „%s“" #: commands/functioncmds.c:99 #, c-format @@ -6298,12 +6324,12 @@ msgstr "kein Funktionskörper angegeben" msgid "no language specified" msgstr "keine Sprache angegeben" -#: commands/functioncmds.c:705 commands/functioncmds.c:1204 +#: commands/functioncmds.c:705 commands/functioncmds.c:1205 #, c-format msgid "COST must be positive" msgstr "COST muss positiv sein" -#: commands/functioncmds.c:713 commands/functioncmds.c:1212 +#: commands/functioncmds.c:713 commands/functioncmds.c:1213 #, c-format msgid "ROWS must be positive" msgstr "ROWS muss positiv sein" @@ -6318,230 +6344,220 @@ msgstr "unbekanntes Funktionsattribut „%s“ ignoriert" msgid "only one AS item needed for language \"%s\"" msgstr "nur ein AS-Element benötigt für Sprache „%s“" -#: commands/functioncmds.c:894 commands/functioncmds.c:2078 +#: commands/functioncmds.c:894 commands/functioncmds.c:2079 #: commands/proclang.c:560 #, c-format msgid "language \"%s\" does not exist" msgstr "Sprache „%s“ existiert nicht" -#: commands/functioncmds.c:896 commands/functioncmds.c:2080 +#: commands/functioncmds.c:896 commands/functioncmds.c:2081 #, c-format msgid "Use CREATE LANGUAGE to load the language into the database." msgstr "Sie müssen CREATE LANGUAGE verwenden, um die Sprache in die Datenbank zu laden." -#: commands/functioncmds.c:931 commands/functioncmds.c:1195 +#: commands/functioncmds.c:931 commands/functioncmds.c:1197 #, c-format msgid "only superuser can define a leakproof function" msgstr "nur Superuser können eine „leakproof“-Funktion definieren" -#: commands/functioncmds.c:974 +#: commands/functioncmds.c:975 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "Ergebnistyp der Funktion muss %s sein wegen OUT-Parametern" -#: commands/functioncmds.c:987 +#: commands/functioncmds.c:988 #, c-format msgid "function result type must be specified" msgstr "Ergebnistyp der Funktion muss angegeben werden" -#: commands/functioncmds.c:1041 commands/functioncmds.c:1216 +#: commands/functioncmds.c:1042 commands/functioncmds.c:1217 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS ist nicht anwendbar, wenn die Funktion keine Ergebnismenge zurückgibt" -#: commands/functioncmds.c:1371 +#: commands/functioncmds.c:1372 #, c-format msgid "source data type %s is a pseudo-type" msgstr "Quelldatentyp %s ist ein Pseudotyp" -#: commands/functioncmds.c:1377 +#: commands/functioncmds.c:1378 #, c-format msgid "target data type %s is a pseudo-type" msgstr "Zieldatentyp %s ist ein Pseudotyp" -#: commands/functioncmds.c:1401 +#: commands/functioncmds.c:1402 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "Typumwandlung wird ignoriert werden, weil der Quelldatentyp eine Domäne ist" -#: commands/functioncmds.c:1406 +#: commands/functioncmds.c:1407 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "Typumwandlung wird ignoriert werden, weil der Zieldatentyp eine Domäne ist" -#: commands/functioncmds.c:1433 +#: commands/functioncmds.c:1434 #, c-format msgid "cast function must take one to three arguments" msgstr "Typumwandlungsfunktion muss ein bis drei Argumente haben" -#: commands/functioncmds.c:1437 +#: commands/functioncmds.c:1438 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "Argument der Typumwandlungsfunktion muss mit Quelldatentyp übereinstimmen oder in ihn binär-umwandelbar sein" -#: commands/functioncmds.c:1441 +#: commands/functioncmds.c:1442 #, c-format msgid "second argument of cast function must be type integer" msgstr "zweites Argument der Typumwandlungsfunktion muss Typ integer haben" -#: commands/functioncmds.c:1445 +#: commands/functioncmds.c:1446 #, c-format msgid "third argument of cast function must be type boolean" msgstr "drittes Argument der Typumwandlungsfunktion muss Typ boolean haben" -#: commands/functioncmds.c:1449 +#: commands/functioncmds.c:1450 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "Rückgabetyp der Typumwandlungsfunktion muss mit Zieldatentyp übereinstimmen oder in ihn binär-umwandelbar sein" -#: commands/functioncmds.c:1460 +#: commands/functioncmds.c:1461 #, c-format msgid "cast function must not be volatile" msgstr "Typumwandlungsfunktion darf nicht VOLATILE sein" -#: commands/functioncmds.c:1465 +#: commands/functioncmds.c:1466 #, c-format msgid "cast function must not be an aggregate function" msgstr "Typumwandlungsfunktion darf keine Aggregatfunktion sein" -#: commands/functioncmds.c:1469 +#: commands/functioncmds.c:1470 #, c-format msgid "cast function must not be a window function" msgstr "Typumwandlungsfunktion darf keine Fensterfunktion sein" -#: commands/functioncmds.c:1473 +#: commands/functioncmds.c:1474 #, c-format msgid "cast function must not return a set" msgstr "Typumwandlungsfunktion darf keine Ergebnismenge zurückgeben" -#: commands/functioncmds.c:1499 +#: commands/functioncmds.c:1500 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "nur Superuser können Typumwandlungen mit WITHOUT FUNCTION erzeugen" -#: commands/functioncmds.c:1514 +#: commands/functioncmds.c:1515 #, c-format msgid "source and target data types are not physically compatible" msgstr "Quelldatentyp und Zieldatentyp sind nicht physikalisch kompatibel" -#: commands/functioncmds.c:1529 +#: commands/functioncmds.c:1530 #, c-format msgid "composite data types are not binary-compatible" msgstr "zusammengesetzte Datentypen sind nicht binärkompatibel" -#: commands/functioncmds.c:1535 +#: commands/functioncmds.c:1536 #, c-format msgid "enum data types are not binary-compatible" msgstr "Enum-Datentypen sind nicht binärkompatibel" -#: commands/functioncmds.c:1541 +#: commands/functioncmds.c:1542 #, c-format msgid "array data types are not binary-compatible" msgstr "Array-Datentypen sind nicht binärkompatibel" -#: commands/functioncmds.c:1558 +#: commands/functioncmds.c:1559 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "Domänendatentypen dürfen nicht als binärkompatibel markiert werden" -#: commands/functioncmds.c:1568 +#: commands/functioncmds.c:1569 #, c-format msgid "source data type and target data type are the same" msgstr "Quelldatentyp und Zieldatentyp sind der selbe" -#: commands/functioncmds.c:1601 +#: commands/functioncmds.c:1602 #, c-format msgid "cast from type %s to type %s already exists" msgstr "Typumwandlung von Typ %s in Typ %s existiert bereits" -#: commands/functioncmds.c:1676 +#: commands/functioncmds.c:1677 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "Typumwandlung von Typ %s in Typ %s existiert nicht" -#: commands/functioncmds.c:1715 -#, fuzzy, c-format -#| msgid "cast function must not be volatile" +#: commands/functioncmds.c:1716 +#, c-format msgid "transform function must not be volatile" -msgstr "Typumwandlungsfunktion darf nicht VOLATILE sein" +msgstr "Transformationsfunktion darf nicht VOLATILE sein" -#: commands/functioncmds.c:1719 -#, fuzzy, c-format -#| msgid "cast function must not be an aggregate function" +#: commands/functioncmds.c:1720 +#, c-format msgid "transform function must not be an aggregate function" -msgstr "Typumwandlungsfunktion darf keine Aggregatfunktion sein" +msgstr "Transformationsfunktion darf keine Aggregatfunktion sein" -#: commands/functioncmds.c:1723 -#, fuzzy, c-format -#| msgid "cast function must not be a window function" +#: commands/functioncmds.c:1724 +#, c-format msgid "transform function must not be a window function" -msgstr "Typumwandlungsfunktion darf keine Fensterfunktion sein" +msgstr "Transformationsfunktion darf keine Fensterfunktion sein" -#: commands/functioncmds.c:1727 -#, fuzzy, c-format -#| msgid "cast function must not return a set" +#: commands/functioncmds.c:1728 +#, c-format msgid "transform function must not return a set" -msgstr "Typumwandlungsfunktion darf keine Ergebnismenge zurückgeben" +msgstr "Transformationsfunktion darf keine Ergebnismenge zurückgeben" -#: commands/functioncmds.c:1731 -#, fuzzy, c-format -#| msgid "cast function must take one to three arguments" +#: commands/functioncmds.c:1732 +#, c-format msgid "transform function must take one argument" -msgstr "Typumwandlungsfunktion muss ein bis drei Argumente haben" +msgstr "Transformationsfunktion muss ein Argument haben" -#: commands/functioncmds.c:1735 -#, fuzzy, c-format -#| msgid "second argument of cast function must be type integer" +#: commands/functioncmds.c:1736 +#, c-format msgid "first argument of transform function must be type \"internal\"" -msgstr "zweites Argument der Typumwandlungsfunktion muss Typ integer haben" +msgstr "erstes Argument der Transformationsfunktion muss Typ „internal“ haben" -#: commands/functioncmds.c:1772 -#, fuzzy, c-format -#| msgid "source data type %s is a pseudo-type" +#: commands/functioncmds.c:1773 +#, c-format msgid "data type %s is a pseudo-type" -msgstr "Quelldatentyp %s ist ein Pseudotyp" +msgstr "Datentyp %s ist ein Pseudotyp" -#: commands/functioncmds.c:1778 -#, fuzzy, c-format -#| msgid "type %s is not a domain" +#: commands/functioncmds.c:1779 +#, c-format msgid "data type %s is a domain" -msgstr "Typ %s ist keine Domäne" +msgstr "Datentyp %s ist eine Domäne" -#: commands/functioncmds.c:1818 +#: commands/functioncmds.c:1819 #, fuzzy, c-format #| msgid "return data type of cast function must match or be binary-coercible to target data type" msgid "return data type of FROM SQL function must be \"internal\"" msgstr "Rückgabetyp der Typumwandlungsfunktion muss mit Zieldatentyp übereinstimmen oder in ihn binär-umwandelbar sein" -#: commands/functioncmds.c:1843 +#: commands/functioncmds.c:1844 #, fuzzy, c-format #| msgid "return data type of cast function must match or be binary-coercible to target data type" msgid "return data type of TO SQL function must be the transform data type" msgstr "Rückgabetyp der Typumwandlungsfunktion muss mit Zieldatentyp übereinstimmen oder in ihn binär-umwandelbar sein" -#: commands/functioncmds.c:1870 -#, fuzzy, c-format -#| msgid "language \"%s\" already exists" +#: commands/functioncmds.c:1871 +#, c-format msgid "transform for type %s language \"%s\" already exists" -msgstr "Sprache „%s“ existiert bereits" +msgstr "Transformation für Typ %s Sprache „%s“ existiert bereits" -#: commands/functioncmds.c:1961 -#, fuzzy, c-format -#| msgid "language \"%s\" does not exist" +#: commands/functioncmds.c:1962 +#, c-format msgid "transform for type %s language \"%s\" does not exist" -msgstr "Sprache „%s“ existiert nicht" +msgstr "Transformation für Typ %s Sprache „%s“ existiert nicht" -#: commands/functioncmds.c:2012 +#: commands/functioncmds.c:2013 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "Funktion %s existiert bereits in Schema „%s“" -#: commands/functioncmds.c:2065 +#: commands/functioncmds.c:2066 #, c-format msgid "no inline code specified" msgstr "kein Inline-Code angegeben" -#: commands/functioncmds.c:2110 +#: commands/functioncmds.c:2111 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "Sprache „%s“ unterstützt das Ausführen von Inline-Code nicht" @@ -6573,7 +6589,7 @@ msgstr "kann keinen Index für Fremdtabelle „%s“ erzeugen" msgid "cannot create indexes on temporary tables of other sessions" msgstr "kann keine Indexe für temporäre Tabellen anderer Sitzungen erzeugen" -#: commands/indexcmds.c:446 commands/tablecmds.c:537 commands/tablecmds.c:9464 +#: commands/indexcmds.c:446 commands/tablecmds.c:539 commands/tablecmds.c:9539 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "nur geteilte Relationen können in den Tablespace „pg_global“ gelegt werden" @@ -6583,124 +6599,124 @@ msgstr "nur geteilte Relationen können in den Tablespace „pg_global“ gelegt msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "ersetze Zugriffsmethode „gist“ für obsolete Methode „rtree“" -#: commands/indexcmds.c:495 +#: commands/indexcmds.c:496 #, c-format msgid "hash indexes are not WAL-logged and their use is discouraged" -msgstr "" +msgstr "Hash-Indexe werden nicht im WAL geloggt und von ihrer Verwendung wird abgeraten." -#: commands/indexcmds.c:500 +#: commands/indexcmds.c:501 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "Zugriffsmethode „%s“ unterstützt keine Unique Indexe" -#: commands/indexcmds.c:505 +#: commands/indexcmds.c:506 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "Zugriffsmethode „%s“ unterstützt keine mehrspaltigen Indexe" -#: commands/indexcmds.c:510 +#: commands/indexcmds.c:511 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "Zugriffsmethode „%s“ unterstützt keine Exclusion-Constraints" -#: commands/indexcmds.c:589 +#: commands/indexcmds.c:590 #, c-format msgid "%s %s will create implicit index \"%s\" for table \"%s\"" msgstr "%s %s erstellt implizit einen Index „%s“ für Tabelle „%s“" -#: commands/indexcmds.c:936 +#: commands/indexcmds.c:937 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "Funktionen im Indexprädikat müssen als IMMUTABLE markiert sein" -#: commands/indexcmds.c:1002 parser/parse_utilcmd.c:1844 +#: commands/indexcmds.c:1003 parser/parse_utilcmd.c:1844 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "Spalte „%s“, die im Schlüssel verwendet wird, existiert nicht" -#: commands/indexcmds.c:1062 +#: commands/indexcmds.c:1063 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "Funktionen im Indexausdruck müssen als IMMUTABLE markiert sein" -#: commands/indexcmds.c:1085 +#: commands/indexcmds.c:1086 #, c-format msgid "could not determine which collation to use for index expression" msgstr "konnte die für den Indexausdruck zu verwendende Sortierfolge nicht bestimmen" -#: commands/indexcmds.c:1093 commands/typecmds.c:825 parser/parse_expr.c:2558 -#: parser/parse_type.c:551 parser/parse_utilcmd.c:2736 utils/adt/misc.c:544 +#: commands/indexcmds.c:1094 commands/typecmds.c:825 parser/parse_expr.c:2559 +#: parser/parse_type.c:551 parser/parse_utilcmd.c:2736 utils/adt/misc.c:546 #, c-format msgid "collations are not supported by type %s" msgstr "Sortierfolgen werden von Typ %s nicht unterstützt" -#: commands/indexcmds.c:1131 +#: commands/indexcmds.c:1132 #, c-format msgid "operator %s is not commutative" msgstr "Operator %s ist nicht kommutativ" -#: commands/indexcmds.c:1133 +#: commands/indexcmds.c:1134 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "In Exclusion-Constraints können nur kommutative Operatoren verwendet werden." -#: commands/indexcmds.c:1159 +#: commands/indexcmds.c:1160 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "Operator %s ist kein Mitglied der Operatorfamilie „%s“" -#: commands/indexcmds.c:1162 +#: commands/indexcmds.c:1163 #, c-format msgid "The exclusion operator must be related to the index operator class for the constraint." msgstr "Der Exklusionsoperator muss in Beziehung zur Indexoperatorklasse des Constraints stehen." -#: commands/indexcmds.c:1197 +#: commands/indexcmds.c:1198 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "Zugriffsmethode „%s“ unterstützt die Optionen ASC/DESC nicht" -#: commands/indexcmds.c:1202 +#: commands/indexcmds.c:1203 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "Zugriffsmethode „%s“ unterstützt die Optionen NULLS FIRST/LAST nicht" -#: commands/indexcmds.c:1258 commands/typecmds.c:1932 +#: commands/indexcmds.c:1259 commands/typecmds.c:1932 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "Datentyp %s hat keine Standardoperatorklasse für Zugriffsmethode „%s“" -#: commands/indexcmds.c:1260 +#: commands/indexcmds.c:1261 #, c-format msgid "You must specify an operator class for the index or define a default operator class for the data type." msgstr "Sie müssen für den Index eine Operatorklasse angeben oder eine Standardoperatorklasse für den Datentyp definieren." -#: commands/indexcmds.c:1289 commands/indexcmds.c:1297 +#: commands/indexcmds.c:1290 commands/indexcmds.c:1298 #: commands/opclasscmds.c:204 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "Operatorklasse „%s“ existiert nicht für Zugriffsmethode „%s“" -#: commands/indexcmds.c:1310 commands/typecmds.c:1920 +#: commands/indexcmds.c:1311 commands/typecmds.c:1920 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "Operatorklasse „%s“ akzeptiert Datentyp %s nicht" -#: commands/indexcmds.c:1400 +#: commands/indexcmds.c:1401 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "es gibt mehrere Standardoperatorklassen für Datentyp %s" -#: commands/indexcmds.c:1791 +#: commands/indexcmds.c:1792 #, c-format msgid "table \"%s\" has no indexes" msgstr "Tabelle „%s“ hat keine Indexe" -#: commands/indexcmds.c:1846 +#: commands/indexcmds.c:1847 #, c-format msgid "can only reindex the currently open database" msgstr "aktuell geöffnete Datenbank kann nicht reindiziert werden" -#: commands/indexcmds.c:1948 +#: commands/indexcmds.c:1949 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "Tabelle „%s.%s“ wurde neu indiziert" @@ -6932,72 +6948,52 @@ msgstr "Restriktionsschätzfunktion %s muss Typ „float8“ zurückgeben" msgid "join estimator function %s must return type \"float8\"" msgstr "Join-Schätzfunktion %s muss Typ „float8“ zurückgeben" -#: commands/policy.c:85 commands/policy.c:428 commands/tablecmds.c:962 -#: commands/tablecmds.c:1304 commands/tablecmds.c:2172 -#: commands/tablecmds.c:4303 commands/tablecmds.c:6235 -#: commands/tablecmds.c:11741 commands/tablecmds.c:11776 +#: commands/policy.c:87 commands/policy.c:387 commands/tablecmds.c:964 +#: commands/tablecmds.c:1306 commands/tablecmds.c:2174 +#: commands/tablecmds.c:4308 commands/tablecmds.c:6240 +#: commands/tablecmds.c:11816 commands/tablecmds.c:11851 #: commands/trigger.c:240 commands/trigger.c:1126 commands/trigger.c:1234 -#: rewrite/rewriteDefine.c:272 rewrite/rewriteDefine.c:891 +#: rewrite/rewriteDefine.c:273 rewrite/rewriteDefine.c:905 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "keine Berechtigung: „%s“ ist ein Systemkatalog" -#: commands/policy.c:169 +#: commands/policy.c:170 #, fuzzy, c-format #| msgid "storage type specified more than once" msgid "ignoring roles specified other than public" msgstr "Storage-Typ mehrmals angegeben" -#: commands/policy.c:170 +#: commands/policy.c:171 #, c-format msgid "All roles are members of the public role." msgstr "" -#: commands/policy.c:489 +#: commands/policy.c:451 #, fuzzy, c-format #| msgid "%s cannot be applied to VALUES" msgid "WITH CHECK cannot be applied to SELECT or DELETE" msgstr "%s kann nicht auf VALUES angewendet werden" -#: commands/policy.c:498 commands/policy.c:766 +#: commands/policy.c:460 commands/policy.c:760 #, c-format msgid "only WITH CHECK expression allowed for INSERT" msgstr "" -#: commands/policy.c:566 -#, fuzzy, c-format -#| msgid "rule \"%s\" for relation \"%s\" already exists" -msgid "policy \"%s\" for relation \"%s\" already exists" -msgstr "Regel „%s“ für Relation „%s“ existiert bereits" - -#: commands/policy.c:738 -#, fuzzy, c-format -#| msgid "index \"%s\" for table \"%s\" does not exist" -msgid "policy \"%s\" on table \"%s\" does not exist" -msgstr "Index „%s“ für Tabelle „%s“ existiert nicht" - -#: commands/policy.c:756 +#: commands/policy.c:533 commands/policy.c:886 #, c-format -msgid "only USING expression allowed for SELECT, DELETE" -msgstr "" - -#: commands/policy.c:877 -#, fuzzy, c-format -#| msgid "collation \"%s\" for encoding \"%s\" already exists" msgid "policy \"%s\" for table \"%s\" already exists" -msgstr "Sortierfolge „%s“ für Kodierung „%s“ existiert bereits" +msgstr "Policy „%s“ für Tabelle „%s“ existiert bereits" -#: commands/policy.c:905 -#, fuzzy, c-format -#| msgid "index \"%s\" for table \"%s\" does not exist" +#: commands/policy.c:732 commands/policy.c:914 commands/policy.c:989 +#, c-format msgid "policy \"%s\" for table \"%s\" does not exist" -msgstr "Index „%s“ für Tabelle „%s“ existiert nicht" +msgstr "Policy „%s“ für Tabelle „%s“ existiert nicht" -#: commands/policy.c:980 -#, fuzzy, c-format -#| msgid "index \"%s\" for table \"%s\" does not exist" -msgid "policy \"%s\" for table \"%s\" does not exist" -msgstr "Index „%s“ für Tabelle „%s“ existiert nicht" +#: commands/policy.c:750 +#, c-format +msgid "only USING expression allowed for SELECT, DELETE" +msgstr "" #: commands/portalcmds.c:61 commands/portalcmds.c:160 #: commands/portalcmds.c:212 @@ -7011,12 +7007,7 @@ msgstr "ungültiger Cursorname: darf nicht leer sein" msgid "cursor \"%s\" does not exist" msgstr "Cursor „%s“ existiert nicht" -#: commands/portalcmds.c:341 tcop/pquery.c:746 tcop/pquery.c:1415 -#, c-format -msgid "portal \"%s\" cannot be run" -msgstr "Portal „%s“ kann nicht ausgeführt werden" - -#: commands/portalcmds.c:411 +#: commands/portalcmds.c:407 #, c-format msgid "could not reposition held cursor" msgstr "konnte gehaltenen Cursor nicht umpositionieren" @@ -7300,8 +7291,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:248 commands/tablecmds.c:8426 -#: commands/tablecmds.c:11002 +#: commands/tablecmds.c:248 commands/tablecmds.c:8447 +#: commands/tablecmds.c:11077 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "Fremdtabelle „%s“ existiert nicht" @@ -7315,69 +7306,69 @@ msgstr "Fremdtabelle „%s“ existiert nicht, wird übersprungen" msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Verwenden Sie DROP FOREIGN TABLE, um eine Fremdtabelle zu löschen." -#: commands/tablecmds.c:485 +#: commands/tablecmds.c:487 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT kann nur mit temporären Tabellen verwendet werden" -#: commands/tablecmds.c:505 +#: commands/tablecmds.c:507 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "kann temporäre Tabelle nicht in einer sicherheitsbeschränkten Operation erzeugen" -#: commands/tablecmds.c:813 +#: commands/tablecmds.c:815 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY unterstützt das Löschen von mehreren Objekten nicht" -#: commands/tablecmds.c:817 +#: commands/tablecmds.c:819 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY unterstützt kein CASCADE" -#: commands/tablecmds.c:1076 +#: commands/tablecmds.c:1078 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "Truncate-Vorgang leert ebenfalls Tabelle „%s“" -#: commands/tablecmds.c:1314 +#: commands/tablecmds.c:1316 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht leeren" -#: commands/tablecmds.c:1520 parser/parse_utilcmd.c:1807 +#: commands/tablecmds.c:1522 parser/parse_utilcmd.c:1807 #, fuzzy, c-format #| msgid "referenced relation \"%s\" is not a table or foreign table" msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "Relation „%s“, auf die verwiesen wird, ist keine Tabelle oder Fremdtabelle" -#: commands/tablecmds.c:1527 commands/tablecmds.c:9901 +#: commands/tablecmds.c:1529 commands/tablecmds.c:9976 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "von temporärer Relation „%s“ kann nicht geerbt werden" -#: commands/tablecmds.c:1535 commands/tablecmds.c:9909 +#: commands/tablecmds.c:1537 commands/tablecmds.c:9984 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "von temporärer Relation einer anderen Sitzung kann nicht geerbt werden" -#: commands/tablecmds.c:1551 commands/tablecmds.c:9943 +#: commands/tablecmds.c:1553 commands/tablecmds.c:10018 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "von der Relation „%s“ würde mehrmals geerbt werden" -#: commands/tablecmds.c:1599 +#: commands/tablecmds.c:1601 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "geerbte Definitionen von Spalte „%s“ werden zusammengeführt" -#: commands/tablecmds.c:1607 +#: commands/tablecmds.c:1609 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "geerbte Spalte „%s“ hat Typkonflikt" -#: commands/tablecmds.c:1609 commands/tablecmds.c:1630 -#: commands/tablecmds.c:1828 commands/tablecmds.c:1850 +#: commands/tablecmds.c:1611 commands/tablecmds.c:1632 +#: commands/tablecmds.c:1830 commands/tablecmds.c:1852 #: parser/parse_coerce.c:1592 parser/parse_coerce.c:1612 #: parser/parse_coerce.c:1632 parser/parse_coerce.c:1677 #: parser/parse_coerce.c:1714 parser/parse_param.c:218 @@ -7385,752 +7376,765 @@ msgstr "geerbte Spalte „%s“ hat Typkonflikt" msgid "%s versus %s" msgstr "%s gegen %s" -#: commands/tablecmds.c:1616 +#: commands/tablecmds.c:1618 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "geerbte Spalte „%s“ hat Sortierfolgenkonflikt" -#: commands/tablecmds.c:1618 commands/tablecmds.c:1838 -#: commands/tablecmds.c:4734 +#: commands/tablecmds.c:1620 commands/tablecmds.c:1840 +#: commands/tablecmds.c:4739 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "„%s“ gegen „%s“" -#: commands/tablecmds.c:1628 +#: commands/tablecmds.c:1630 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "geerbte Spalte „%s“ hat einen Konflikt bei einem Storage-Parameter" -#: commands/tablecmds.c:1741 parser/parse_utilcmd.c:894 +#: commands/tablecmds.c:1743 parser/parse_utilcmd.c:894 #: parser/parse_utilcmd.c:1238 parser/parse_utilcmd.c:1314 #, c-format msgid "cannot convert whole-row table reference" msgstr "kann Verweis auf ganze Zeile der Tabelle nicht umwandeln" -#: commands/tablecmds.c:1742 parser/parse_utilcmd.c:895 +#: commands/tablecmds.c:1744 parser/parse_utilcmd.c:895 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "Constraint „%s“ enthält einen Verweis auf die ganze Zeile der Tabelle „%s“." -#: commands/tablecmds.c:1814 +#: commands/tablecmds.c:1816 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "Spalte „%s“ wird mit geerbter Definition zusammengeführt" -#: commands/tablecmds.c:1818 +#: commands/tablecmds.c:1820 #, fuzzy, c-format #| msgid "merging column \"%s\" with inherited definition" msgid "moving and merging column \"%s\" with inherited definition" msgstr "Spalte „%s“ wird mit geerbter Definition zusammengeführt" -#: commands/tablecmds.c:1819 +#: commands/tablecmds.c:1821 #, c-format msgid "User-specified column moved to the position of the inherited column." -msgstr "" +msgstr "Benutzerdefinierte Spalte wurde auf die Position der geerbten Spalte verschoben." -#: commands/tablecmds.c:1826 +#: commands/tablecmds.c:1828 #, c-format msgid "column \"%s\" has a type conflict" msgstr "für Spalte „%s“ besteht ein Typkonflikt" -#: commands/tablecmds.c:1836 +#: commands/tablecmds.c:1838 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "für Spalte „%s“ besteht ein Sortierfolgenkonflikt" -#: commands/tablecmds.c:1848 +#: commands/tablecmds.c:1850 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "für Spalte „%s“ besteht ein Konflikt bei einem Storage-Parameter" -#: commands/tablecmds.c:1900 +#: commands/tablecmds.c:1902 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "Spalte „%s“ erbt widersprüchliche Vorgabewerte" -#: commands/tablecmds.c:1902 +#: commands/tablecmds.c:1904 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Um den Konflikt zu lösen, geben Sie einen Vorgabewert ausdrücklich an." -#: commands/tablecmds.c:1949 +#: commands/tablecmds.c:1951 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "Check-Constraint-Name „%s“ erscheint mehrmals, aber mit unterschiedlichen Ausdrücken" -#: commands/tablecmds.c:2143 +#: commands/tablecmds.c:2145 #, c-format msgid "cannot rename column of typed table" msgstr "Spalte einer getypten Tabelle kann nicht umbenannt werden" -#: commands/tablecmds.c:2160 +#: commands/tablecmds.c:2162 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "„%s“ ist weder Tabelle, Sicht, materialisierte Sicht, zusammengesetzter Typ, Index noch Fremdtabelle" -#: commands/tablecmds.c:2254 +#: commands/tablecmds.c:2256 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "vererbte Spalte „%s“ muss ebenso in den abgeleiteten Tabellen umbenannt werden" -#: commands/tablecmds.c:2286 +#: commands/tablecmds.c:2288 #, c-format msgid "cannot rename system column \"%s\"" msgstr "Systemspalte „%s“ kann nicht umbenannt werden" -#: commands/tablecmds.c:2301 +#: commands/tablecmds.c:2303 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "kann vererbte Spalte „%s“ nicht umbenennen" -#: commands/tablecmds.c:2456 +#: commands/tablecmds.c:2458 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "vererbter Constraint „%s“ muss ebenso in den abgeleiteten Tabellen umbenannt werden" -#: commands/tablecmds.c:2463 +#: commands/tablecmds.c:2465 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "kann vererbten Constraint „%s“ nicht umbenennen" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:2689 +#: commands/tablecmds.c:2691 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "%s mit Relation „%s“ nicht möglich, weil sie von aktiven Anfragen in dieser Sitzung verwendet wird" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:2698 +#: commands/tablecmds.c:2700 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "%s mit Relation „%s“ nicht möglich, weil es anstehende Trigger-Ereignisse dafür gibt" -#: commands/tablecmds.c:3759 +#: commands/tablecmds.c:3764 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "Systemrelation „%s“ kann nicht neu geschrieben werden" -#: commands/tablecmds.c:3765 +#: commands/tablecmds.c:3770 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "Tabelle „%s“, die als Katalogtabelle verwendet wird, kann nicht neu geschrieben werden" -#: commands/tablecmds.c:3775 +#: commands/tablecmds.c:3780 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht neu schreiben" -#: commands/tablecmds.c:4043 +#: commands/tablecmds.c:4048 #, c-format msgid "rewriting table \"%s\"" msgstr "schreibe Tabelle „%s“ neu" -#: commands/tablecmds.c:4047 +#: commands/tablecmds.c:4052 #, c-format msgid "verifying table \"%s\"" msgstr "überprüfe Tabelle „%s“" -#: commands/tablecmds.c:4161 +#: commands/tablecmds.c:4166 #, c-format msgid "column \"%s\" contains null values" msgstr "Spalte „%s“ enthält NULL-Werte" -#: commands/tablecmds.c:4176 commands/tablecmds.c:7322 +#: commands/tablecmds.c:4181 commands/tablecmds.c:7327 #, c-format msgid "check constraint \"%s\" is violated by some row" msgstr "Check-Constraint „%s“ wird von irgendeiner Zeile verletzt" -#: commands/tablecmds.c:4324 commands/trigger.c:234 -#: rewrite/rewriteDefine.c:266 rewrite/rewriteDefine.c:886 +#: commands/tablecmds.c:4329 commands/trigger.c:234 +#: rewrite/rewriteDefine.c:267 rewrite/rewriteDefine.c:900 #, c-format msgid "\"%s\" is not a table or view" msgstr "„%s“ ist keine Tabelle oder Sicht" -#: commands/tablecmds.c:4327 +#: commands/tablecmds.c:4332 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "„%s“ ist weder Tabelle, Sicht, materialisierte Sicht noch Index" -#: commands/tablecmds.c:4333 +#: commands/tablecmds.c:4338 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "„%s“ ist weder Tabelle, materialisierte Sicht noch Index" -#: commands/tablecmds.c:4336 +#: commands/tablecmds.c:4341 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "„%s“ ist keine Tabelle oder Fremdtabelle" -#: commands/tablecmds.c:4339 +#: commands/tablecmds.c:4344 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "„%s“ ist weder Tabelle, Sicht, zusammengesetzter Typ noch Fremdtabelle" -#: commands/tablecmds.c:4342 +#: commands/tablecmds.c:4347 #, c-format msgid "\"%s\" is not a table, materialized view, composite type, or foreign table" msgstr "„%s“ ist weder Tabelle, materialisierte Sicht, zusammengesetzter Typ noch Fremdtabelle" -#: commands/tablecmds.c:4352 +#: commands/tablecmds.c:4357 #, c-format msgid "\"%s\" is of the wrong type" msgstr "„%s“ hat den falschen Typ" -#: commands/tablecmds.c:4504 commands/tablecmds.c:4511 +#: commands/tablecmds.c:4509 commands/tablecmds.c:4516 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "kann Typ „%s“ nicht ändern, weil Spalte „%s.%s“ ihn verwendet" -#: commands/tablecmds.c:4518 +#: commands/tablecmds.c:4523 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "kann Fremdtabelle „%s“ nicht ändern, weil Spalte „%s.%s“ ihren Zeilentyp verwendet" -#: commands/tablecmds.c:4525 +#: commands/tablecmds.c:4530 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "kann Tabelle „%s“ nicht ändern, weil Spalte „%s.%s“ ihren Zeilentyp verwendet" -#: commands/tablecmds.c:4587 +#: commands/tablecmds.c:4592 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "kann Typ „%s“ nicht ändern, weil er der Typ einer getypten Tabelle ist" -#: commands/tablecmds.c:4589 +#: commands/tablecmds.c:4594 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Verwenden Sie ALTER ... CASCADE, um die getypten Tabellen ebenfalls zu ändern." -#: commands/tablecmds.c:4633 +#: commands/tablecmds.c:4638 #, c-format msgid "type %s is not a composite type" msgstr "Typ %s ist kein zusammengesetzter Typ" -#: commands/tablecmds.c:4659 +#: commands/tablecmds.c:4664 #, c-format msgid "cannot add column to typed table" msgstr "zu einer getypten Tabelle kann keine Spalte hinzugefügt werden" -#: commands/tablecmds.c:4726 commands/tablecmds.c:10102 +#: commands/tablecmds.c:4731 commands/tablecmds.c:10177 #, 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:4732 commands/tablecmds.c:10109 +#: commands/tablecmds.c:4737 commands/tablecmds.c:10184 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "abgeleitete Tabelle „%s“ hat unterschiedliche Sortierfolge für Spalte „%s“" -#: commands/tablecmds.c:4742 +#: commands/tablecmds.c:4747 #, c-format msgid "child table \"%s\" has a conflicting \"%s\" column" msgstr "abgeleitete Tabelle „%s“ hat eine widersprüchliche Spalte „%s“" -#: commands/tablecmds.c:4754 +#: commands/tablecmds.c:4759 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "Definition von Spalte „%s“ für abgeleitete Tabelle „%s“ wird zusammengeführt" -#: commands/tablecmds.c:4975 +#: commands/tablecmds.c:4980 #, 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:5045 +#: commands/tablecmds.c:5050 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "Spalte „%s“ von Relation „%s“ existiert bereits" -#: commands/tablecmds.c:5153 commands/tablecmds.c:5259 -#: commands/tablecmds.c:5317 commands/tablecmds.c:5431 -#: commands/tablecmds.c:5488 commands/tablecmds.c:5582 -#: commands/tablecmds.c:7840 commands/tablecmds.c:8449 +#: commands/tablecmds.c:5158 commands/tablecmds.c:5264 +#: commands/tablecmds.c:5322 commands/tablecmds.c:5436 +#: commands/tablecmds.c:5493 commands/tablecmds.c:5587 +#: commands/tablecmds.c:7845 commands/tablecmds.c:8470 #, c-format msgid "cannot alter system column \"%s\"" msgstr "Systemspalte „%s“ kann nicht geändert werden" -#: commands/tablecmds.c:5189 +#: commands/tablecmds.c:5194 #, c-format msgid "column \"%s\" is in a primary key" msgstr "Spalte „%s“ ist in einem Primärschlüssel" -#: commands/tablecmds.c:5372 +#: commands/tablecmds.c:5377 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "„%s“ ist weder Tabelle, materialisierte Sicht, Index noch Fremdtabelle" -#: commands/tablecmds.c:5404 +#: commands/tablecmds.c:5409 #, c-format msgid "statistics target %d is too low" msgstr "Statistikziel %d ist zu niedrig" -#: commands/tablecmds.c:5412 +#: commands/tablecmds.c:5417 #, c-format msgid "lowering statistics target to %d" msgstr "setze Statistikziel auf %d herab" -#: commands/tablecmds.c:5562 +#: commands/tablecmds.c:5567 #, c-format msgid "invalid storage type \"%s\"" msgstr "ungültiger Storage-Typ „%s“" -#: commands/tablecmds.c:5594 +#: commands/tablecmds.c:5599 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "Spaltendatentyp %s kann nur Storage-Typ PLAIN" -#: commands/tablecmds.c:5632 +#: commands/tablecmds.c:5637 #, c-format msgid "cannot drop column from typed table" msgstr "aus einer getypten Tabelle können keine Spalten gelöscht werden" -#: commands/tablecmds.c:5676 +#: commands/tablecmds.c:5681 #, 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:5689 +#: commands/tablecmds.c:5694 #, c-format msgid "cannot drop system column \"%s\"" msgstr "Systemspalte „%s“ kann nicht gelöscht werden" -#: commands/tablecmds.c:5696 +#: commands/tablecmds.c:5701 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "geerbte Spalte „%s“ kann nicht gelöscht werden" -#: commands/tablecmds.c:5936 +#: commands/tablecmds.c:5941 #, 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:6158 +#: commands/tablecmds.c:6163 #, 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:6229 +#: commands/tablecmds.c:6234 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "Relation „%s“, auf die verwiesen wird, ist keine Tabelle" -#: commands/tablecmds.c:6252 +#: commands/tablecmds.c:6257 #, 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:6259 +#: commands/tablecmds.c:6264 #, 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:6265 +#: commands/tablecmds.c:6270 #, 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:6269 +#: commands/tablecmds.c:6274 #, 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:6330 +#: commands/tablecmds.c:6335 #, 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:6437 +#: commands/tablecmds.c:6442 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "Fremdschlüssel-Constraint „%s“ kann nicht implementiert werden" -#: commands/tablecmds.c:6440 +#: commands/tablecmds.c:6445 #, 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:6647 commands/tablecmds.c:6797 -#: commands/tablecmds.c:7679 commands/tablecmds.c:7735 +#: commands/tablecmds.c:6652 commands/tablecmds.c:6802 +#: commands/tablecmds.c:7684 commands/tablecmds.c:7740 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "Constraint „%s“ von Relation „%s“ existiert nicht" -#: commands/tablecmds.c:6653 +#: commands/tablecmds.c:6658 #, 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:6804 +#: commands/tablecmds.c:6809 #, 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:6872 +#: commands/tablecmds.c:6877 #, c-format msgid "constraint must be validated on child tables too" msgstr "Constraint muss ebenso in den abgeleiteten Tabellen validiert werden" -#: commands/tablecmds.c:6941 +#: commands/tablecmds.c:6946 #, 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:6946 +#: commands/tablecmds.c:6951 #, 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:7011 +#: commands/tablecmds.c:7016 #, 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:7028 +#: commands/tablecmds.c:7033 #, 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:7093 +#: commands/tablecmds.c:7098 #, 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:7187 +#: commands/tablecmds.c:7192 #, 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:7192 +#: commands/tablecmds.c:7197 #, 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:7355 +#: commands/tablecmds.c:7360 #, c-format msgid "validating foreign key constraint \"%s\"" msgstr "validiere Fremdschlüssel-Constraint „%s“" -#: commands/tablecmds.c:7651 +#: commands/tablecmds.c:7656 #, 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:7685 +#: commands/tablecmds.c:7690 #, 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:7824 +#: commands/tablecmds.c:7829 #, c-format msgid "cannot alter column type of typed table" msgstr "Spaltentyp einer getypten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:7847 +#: commands/tablecmds.c:7852 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "kann vererbte Spalte „%s“ nicht ändern" -#: commands/tablecmds.c:7892 +#: commands/tablecmds.c:7901 +#, fuzzy, c-format +#| msgid "default for column \"%s\" cannot be cast automatically to type %s" +msgid "result of USING clause 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:7904 +#, fuzzy, c-format +#| msgid "You might need to initdb." +msgid "You might need to add an explicit cast." +msgstr "Sie müssen möglicherweise initdb ausführen." + +#: commands/tablecmds.c:7908 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "Spalte „%s“ kann nicht automatisch in Typ %s umgewandelt werden" -#: commands/tablecmds.c:7894 -#, c-format -msgid "Specify a USING expression to perform the conversion." -msgstr "Geben Sie einen USING-Ausdruck für die Umwandlung an." +#. translator: USING is SQL, don't translate it +#: commands/tablecmds.c:7911 +#, fuzzy, c-format +#| msgid "You might need to initdb." +msgid "You might need to specify \"USING %s::%s\"." +msgstr "Sie müssen möglicherweise initdb ausführen." -#: commands/tablecmds.c:7943 +#: commands/tablecmds.c:7964 #, 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:8030 +#: commands/tablecmds.c:8051 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "Typ der Spalte „%s“ kann nicht zweimal geändert werden" -#: commands/tablecmds.c:8066 +#: commands/tablecmds.c:8087 #, 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:8192 +#: commands/tablecmds.c:8213 #, 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:8193 commands/tablecmds.c:8212 -#: commands/tablecmds.c:8230 +#: commands/tablecmds.c:8214 commands/tablecmds.c:8233 +#: commands/tablecmds.c:8251 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s hängt von Spalte „%s“ ab" -#: commands/tablecmds.c:8211 +#: commands/tablecmds.c:8232 #, 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:8229 -#, fuzzy, c-format -#| msgid "cannot alter type of a column used in a trigger definition" +#: commands/tablecmds.c:8250 +#, c-format msgid "cannot alter type of a column used in a policy definition" -msgstr "Typ einer Spalte, die in einer Trigger-Definition verwendet wird, kann nicht geändert werden" +msgstr "Typ einer Spalte, die in einer Policy-Definition verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:8820 +#: commands/tablecmds.c:8895 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "kann Eigentümer des Index „%s“ nicht ändern" -#: commands/tablecmds.c:8822 +#: commands/tablecmds.c:8897 #, 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:8838 +#: commands/tablecmds.c:8913 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "kann Eigentümer der Sequenz „%s“ nicht ändern" -#: commands/tablecmds.c:8840 commands/tablecmds.c:11210 +#: commands/tablecmds.c:8915 commands/tablecmds.c:11285 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "Sequenz „%s“ ist mit Tabelle „%s“ verknüpft." -#: commands/tablecmds.c:8852 commands/tablecmds.c:11851 +#: commands/tablecmds.c:8927 commands/tablecmds.c:11926 #, c-format msgid "Use ALTER TYPE instead." msgstr "Verwenden Sie stattdessen ALTER TYPE." -#: commands/tablecmds.c:8861 +#: commands/tablecmds.c:8936 #, 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:9205 +#: commands/tablecmds.c:9280 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "mehrere SET TABLESPACE Unterbefehle sind ungültig" -#: commands/tablecmds.c:9278 +#: commands/tablecmds.c:9353 #, 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:9311 commands/view.c:481 +#: commands/tablecmds.c:9386 commands/view.c:481 #, 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:9457 +#: commands/tablecmds.c:9532 #, c-format msgid "cannot move system relation \"%s\"" msgstr "Systemrelation „%s“ kann nicht verschoben werden" -#: commands/tablecmds.c:9473 +#: commands/tablecmds.c:9548 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "temporäre Tabellen anderer Sitzungen können nicht verschoben werden" -#: commands/tablecmds.c:9601 +#: commands/tablecmds.c:9676 #, 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:9613 +#: commands/tablecmds.c:9688 #, 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:9704 +#: commands/tablecmds.c:9779 #, 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:9720 +#: commands/tablecmds.c:9795 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "keine passenden Relationen in Tablespace „%s“ gefunden" -#: commands/tablecmds.c:9784 storage/buffer/bufmgr.c:799 +#: commands/tablecmds.c:9859 storage/buffer/bufmgr.c:801 #, c-format msgid "invalid page in block %u of relation %s" msgstr "ungültige Seite in Block %u von Relation %s" -#: commands/tablecmds.c:9866 +#: commands/tablecmds.c:9941 #, c-format msgid "cannot change inheritance of typed table" msgstr "Vererbung einer getypten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:9916 +#: commands/tablecmds.c:9991 #, 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:9970 +#: commands/tablecmds.c:10045 #, c-format msgid "circular inheritance not allowed" msgstr "zirkuläre Vererbung ist nicht erlaubt" -#: commands/tablecmds.c:9971 +#: commands/tablecmds.c:10046 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "„%s“ ist schon von „%s“ abgeleitet." -#: commands/tablecmds.c:9979 +#: commands/tablecmds.c:10054 #, c-format msgid "table \"%s\" without OIDs cannot inherit from table \"%s\" with OIDs" msgstr "Tabelle „%s“ ohne OIDs kann nicht von Tabelle „%s“ mit OIDs erben" -#: commands/tablecmds.c:10120 +#: commands/tablecmds.c:10195 #, 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:10136 +#: commands/tablecmds.c:10211 #, c-format msgid "child table is missing column \"%s\"" msgstr "Spalte „%s“ fehlt in abgeleiteter Tabelle" -#: commands/tablecmds.c:10219 +#: commands/tablecmds.c:10294 #, 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:10227 +#: commands/tablecmds.c:10302 #, 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:10251 +#: commands/tablecmds.c:10326 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "Constraint „%s“ fehlt in abgeleiteter Tabelle" -#: commands/tablecmds.c:10335 +#: commands/tablecmds.c:10410 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "Relation „%s“ ist keine Basisrelation von Relation „%s“" -#: commands/tablecmds.c:10569 +#: commands/tablecmds.c:10644 #, c-format msgid "typed tables cannot inherit" msgstr "getypte Tabellen können nicht erben" -#: commands/tablecmds.c:10600 +#: commands/tablecmds.c:10675 #, c-format msgid "table is missing column \"%s\"" msgstr "Spalte „%s“ fehlt in Tabelle" -#: commands/tablecmds.c:10610 +#: commands/tablecmds.c:10685 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "Tabelle hat Spalte „%s“, aber Typ benötigt „%s“" -#: commands/tablecmds.c:10619 +#: commands/tablecmds.c:10694 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "Tabelle „%s“ hat unterschiedlichen Typ für Spalte „%s“" -#: commands/tablecmds.c:10632 +#: commands/tablecmds.c:10707 #, c-format msgid "table has extra column \"%s\"" msgstr "Tabelle hat zusätzliche Spalte „%s“" -#: commands/tablecmds.c:10684 +#: commands/tablecmds.c:10759 #, c-format msgid "\"%s\" is not a typed table" msgstr "„%s“ ist keine getypte Tabelle" -#: commands/tablecmds.c:10867 +#: commands/tablecmds.c:10942 #, 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:10873 +#: commands/tablecmds.c:10948 #, 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:10879 +#: commands/tablecmds.c:10954 #, 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:10885 +#: commands/tablecmds.c:10960 #, 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:10891 +#: commands/tablecmds.c:10966 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "ungültiger Index „%s“ kann nicht als Replik-Identität verwendet werden" -#: commands/tablecmds.c:10909 +#: commands/tablecmds.c:10984 #, 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:11077 +#: commands/tablecmds.c:11152 #, fuzzy, c-format #| msgid "cannot change owner of index \"%s\"" msgid "cannot change logged status of table %s" msgstr "kann Eigentümer des Index „%s“ nicht ändern" -#: commands/tablecmds.c:11079 +#: commands/tablecmds.c:11154 #, fuzzy, c-format #| msgid "tablespace \"%s\" is not empty" msgid "Table %s is temporary." msgstr "Tablespace „%s“ ist nicht leer" -#: commands/tablecmds.c:11138 +#: commands/tablecmds.c:11213 #, fuzzy, c-format #| msgid "cannot change inheritance of typed table" msgid "cannot change status of table %s to logged" msgstr "Vererbung einer getypten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:11140 +#: commands/tablecmds.c:11215 #, fuzzy, c-format #| msgid "Table \"%s\" references \"%s\"." msgid "Table %s references unlogged table %s." msgstr "Tabelle „%s“ verweist auf „%s“." -#: commands/tablecmds.c:11150 +#: commands/tablecmds.c:11225 #, fuzzy, c-format #| msgid "cannot change inheritance of typed table" msgid "cannot change status of table %s to unlogged" msgstr "Vererbung einer getypten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:11152 +#: commands/tablecmds.c:11227 #, fuzzy, c-format #| msgid "Key is still referenced from table \"%s\"." msgid "Logged table %s is referenced by table %s." msgstr "Auf den Schlüssel wird noch aus Tabelle „%s“ verwiesen." -#: commands/tablecmds.c:11209 +#: commands/tablecmds.c:11284 #, 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:11310 +#: commands/tablecmds.c:11385 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "Relation „%s“ existiert bereits in Schema „%s“" -#: commands/tablecmds.c:11835 +#: commands/tablecmds.c:11910 #, c-format msgid "\"%s\" is not a composite type" msgstr "„%s“ ist kein zusammengesetzter Typ" -#: commands/tablecmds.c:11865 +#: commands/tablecmds.c:11940 #, 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/tablespace.c:162 commands/tablespace.c:179 #: commands/tablespace.c:190 commands/tablespace.c:198 -#: commands/tablespace.c:624 replication/slot.c:914 storage/file/copydir.c:47 +#: commands/tablespace.c:625 replication/slot.c:914 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "konnte Verzeichnis „%s“ nicht erzeugen: %m" @@ -8171,74 +8175,96 @@ msgid "tablespace location \"%s\" is too long" msgstr "Tablespace-Pfad „%s“ ist zu lang" #: commands/tablespace.c:295 -#, fuzzy, c-format -#| msgid "tablespace location must be an absolute path" +#, c-format msgid "tablespace location should not be inside the data directory" -msgstr "Tablespace-Pfad muss ein absoluter Pfad sein" +msgstr "Tablespace-Pfad sollte nicht innerhalb des Datenverzeichnisses sein" -#: commands/tablespace.c:304 commands/tablespace.c:896 +#: commands/tablespace.c:304 commands/tablespace.c:938 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "inakzeptabler Tablespace-Name „%s“" -#: commands/tablespace.c:306 commands/tablespace.c:897 +#: commands/tablespace.c:306 commands/tablespace.c:939 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "Der Präfix „pg_“ ist für System-Tablespaces reserviert." -#: commands/tablespace.c:316 commands/tablespace.c:909 +#: commands/tablespace.c:316 commands/tablespace.c:951 #, c-format msgid "tablespace \"%s\" already exists" msgstr "Tablespace „%s“ existiert bereits" -#: commands/tablespace.c:429 commands/tablespace.c:879 -#: commands/tablespace.c:960 commands/tablespace.c:1029 -#: commands/tablespace.c:1162 commands/tablespace.c:1362 +#: commands/tablespace.c:430 commands/tablespace.c:921 +#: commands/tablespace.c:1002 commands/tablespace.c:1071 +#: commands/tablespace.c:1204 commands/tablespace.c:1404 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "Tablespace „%s“ existiert nicht" -#: commands/tablespace.c:435 +#: commands/tablespace.c:436 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "Tablespace „%s“ existiert nicht, wird übersprungen" -#: commands/tablespace.c:511 +#: commands/tablespace.c:512 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "Tablespace „%s“ ist nicht leer" -#: commands/tablespace.c:583 +#: commands/tablespace.c:584 #, c-format msgid "directory \"%s\" does not exist" msgstr "Verzeichnis „%s“ existiert nicht" -#: commands/tablespace.c:584 +#: commands/tablespace.c:585 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "Erzeugen Sie dieses Verzeichnis für den Tablespace bevor Sie den Server neu starten." -#: commands/tablespace.c:589 +#: commands/tablespace.c:590 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "konnte Zugriffsrechte für Verzeichnis „%s“ nicht setzen: %m" -#: commands/tablespace.c:619 +#: commands/tablespace.c:620 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "Verzeichnis „%s“ ist bereits als Tablespace in Verwendung" -#: commands/tablespace.c:1034 +#: commands/tablespace.c:744 commands/tablespace.c:757 +#: commands/tablespace.c:781 commands/tablespace.c:872 #, c-format -msgid "Tablespace \"%s\" does not exist." -msgstr "Tablespace „%s“ existiert nicht." +msgid "could not remove directory \"%s\": %m" +msgstr "konnte Verzeichnis „%s“ nicht löschen: %m" -#: commands/tablespace.c:1461 +#: commands/tablespace.c:793 commands/tablespace.c:881 #, c-format -msgid "directories for tablespace %u could not be removed" -msgstr "Verzeichnisse für Tablespace %u konnten nicht entfernt werden" +msgid "could not remove symbolic link \"%s\": %m" +msgstr "konnte symbolische Verknüpfung „%s“ nicht löschen: %m" -#: commands/tablespace.c:1463 +#: commands/tablespace.c:803 commands/tablespace.c:889 +#, fuzzy, c-format +#| msgid "could not read symbolic link \"%s\"" +msgid "not a directory or symbolic link: \"%s\"" +msgstr "konnte symbolische Verknüpfung „%s“ nicht lesen" + +#: commands/tablespace.c:860 +#, fuzzy, c-format +#| msgid "could not stat file \"%s\": %m" +msgid "could not stat \"%s\": %m" +msgstr "konnte „stat“ für Datei „%s“ nicht ausführen: %m" + +#: commands/tablespace.c:1076 +#, c-format +msgid "Tablespace \"%s\" does not exist." +msgstr "Tablespace „%s“ existiert nicht." + +#: commands/tablespace.c:1503 +#, c-format +msgid "directories for tablespace %u could not be removed" +msgstr "Verzeichnisse für Tablespace %u konnten nicht entfernt werden" + +#: commands/tablespace.c:1505 #, c-format msgid "You can remove the directories manually if necessary." msgstr "Sie können die Verzeichnisse falls nötig manuell entfernen." @@ -8391,22 +8417,22 @@ msgstr "Triggerfunktion %u gab NULL-Wert zurück" msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "Trigger für BEFORE STATEMENT kann keinen Wert zurückgeben" -#: commands/trigger.c:2727 executor/nodeModifyTable.c:633 -#: executor/nodeModifyTable.c:921 +#: commands/trigger.c:2727 executor/nodeModifyTable.c:631 +#: executor/nodeModifyTable.c:919 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "das zu aktualisierende Tupel wurde schon durch eine vom aktuellen Befehl ausgelöste Operation verändert" -#: commands/trigger.c:2728 executor/nodeModifyTable.c:634 -#: executor/nodeModifyTable.c:922 +#: commands/trigger.c:2728 executor/nodeModifyTable.c:632 +#: executor/nodeModifyTable.c:920 #, 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:2742 executor/execMain.c:2332 -#: executor/nodeLockRows.c:215 executor/nodeModifyTable.c:183 -#: executor/nodeModifyTable.c:646 executor/nodeModifyTable.c:934 -#: executor/nodeModifyTable.c:1101 +#: commands/trigger.c:2742 executor/execMain.c:2344 +#: executor/nodeLockRows.c:216 executor/nodeModifyTable.c:183 +#: executor/nodeModifyTable.c:644 executor/nodeModifyTable.c:932 +#: executor/nodeModifyTable.c:1099 #, c-format msgid "could not serialize access due to concurrent update" msgstr "kann Zugriff nicht serialisieren wegen gleichzeitiger Aktualisierung" @@ -8813,325 +8839,314 @@ msgstr "Sie können den Typ %s ändern, wodurch der Array-Typ ebenfalls geänder msgid "type \"%s\" already exists in schema \"%s\"" msgstr "Typ %s existiert bereits in Schema „%s“" -#: commands/user.c:147 +#: commands/user.c:148 #, c-format msgid "SYSID can no longer be specified" msgstr "SYSID kann nicht mehr angegeben werden" -#: commands/user.c:289 +#: commands/user.c:290 #, c-format msgid "must be superuser to create superusers" msgstr "nur Superuser können Superuser anlegen" -#: commands/user.c:296 +#: commands/user.c:297 #, c-format msgid "must be superuser to create replication users" msgstr "nur Superuser können Replikationsbenutzer anlegen" -#: commands/user.c:303 +#: commands/user.c:304 commands/user.c:678 #, fuzzy, c-format #| msgid "must be superuser to create a base type" -msgid "must be superuser to change bypassrls attribute." +msgid "must be superuser to change bypassrls attribute" msgstr "nur Superuser können Basistypen anlegen" -#: commands/user.c:310 +#: commands/user.c:311 #, c-format msgid "permission denied to create role" msgstr "keine Berechtigung, um Rolle zu erzeugen" -#: commands/user.c:317 commands/user.c:1165 gram.y:13458 gram.y:13493 -#, c-format -msgid "role name \"%s\" is reserved" -msgstr "Rollenname „%s“ ist reserviert" - -#: commands/user.c:330 commands/user.c:1159 +#: commands/user.c:324 commands/user.c:1153 #, c-format msgid "role \"%s\" already exists" msgstr "Rolle „%s“ existiert bereits" -#: commands/user.c:408 +#: commands/user.c:402 #, fuzzy, c-format #| msgid "must be superuser to connect in binary upgrade mode" msgid "pg_authid OID value not set when in binary upgrade mode" msgstr "nur Superuser können im Binary-Upgrade-Modus verbinden" -#: commands/user.c:670 commands/user.c:884 commands/user.c:1407 -#: commands/user.c:1553 +#: commands/user.c:664 commands/user.c:878 commands/user.c:1394 +#: commands/user.c:1540 #, c-format msgid "must be superuser to alter superusers" msgstr "nur Superuser können Superuser ändern" -#: commands/user.c:677 +#: commands/user.c:671 #, c-format msgid "must be superuser to alter replication users" msgstr "nur Superuser können Replikationsbenutzer ändern" -#: commands/user.c:684 -#, fuzzy, c-format -#| msgid "must be superuser to create a base type" -msgid "must be superuser to change bypassrls attribute" -msgstr "nur Superuser können Basistypen anlegen" - -#: commands/user.c:700 commands/user.c:892 +#: commands/user.c:694 commands/user.c:886 #, c-format msgid "permission denied" msgstr "keine Berechtigung" -#: commands/user.c:922 +#: commands/user.c:916 #, c-format msgid "must be superuser to alter settings globally" msgstr "nur Superuser können globale Einstellungen ändern" -#: commands/user.c:944 +#: commands/user.c:938 #, c-format msgid "permission denied to drop role" msgstr "keine Berechtigung, um Rolle zu entfernen" -#: commands/user.c:968 +#: commands/user.c:962 #, fuzzy, c-format #| msgid "cannot assign new default tablespace \"%s\"" msgid "cannot use special role specifier in \"%s\"" msgstr "kann neuen Standard-Tablespace „%s“ nicht setzen" -#: commands/user.c:978 commands/user.c:1134 commands/variable.c:798 +#: commands/user.c:972 commands/user.c:1128 commands/variable.c:798 #: commands/variable.c:870 utils/adt/acl.c:5120 utils/adt/acl.c:5172 -#: utils/adt/acl.c:5205 utils/adt/acl.c:5223 utils/init/miscinit.c:477 +#: utils/adt/acl.c:5205 utils/adt/acl.c:5223 utils/init/miscinit.c:478 #, c-format msgid "role \"%s\" does not exist" msgstr "Rolle „%s“ existiert nicht" -#: commands/user.c:983 +#: commands/user.c:977 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "Rolle „%s“ existiert nicht, wird übersprungen" -#: commands/user.c:995 commands/user.c:999 +#: commands/user.c:989 commands/user.c:993 #, c-format msgid "current user cannot be dropped" msgstr "aktueller Benutzer kann nicht entfernt werden" -#: commands/user.c:1003 +#: commands/user.c:997 #, c-format msgid "session user cannot be dropped" msgstr "aktueller Sitzungsbenutzer kann nicht entfernt werden" -#: commands/user.c:1014 +#: commands/user.c:1008 #, c-format msgid "must be superuser to drop superusers" msgstr "nur Superuser können Superuser löschen" -#: commands/user.c:1030 +#: commands/user.c:1024 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "kann Rolle „%s“ nicht löschen, weil andere Objekte davon abhängen" -#: commands/user.c:1149 +#: commands/user.c:1143 #, c-format msgid "session user cannot be renamed" msgstr "aktueller Sitzungsbenutzer kann nicht umbenannt werden" -#: commands/user.c:1153 +#: commands/user.c:1147 #, c-format msgid "current user cannot be renamed" msgstr "aktueller Benutzer kann nicht umbenannt werden" -#: commands/user.c:1176 +#: commands/user.c:1163 #, c-format msgid "must be superuser to rename superusers" msgstr "nur Superuser können Superuser umbenennen" -#: commands/user.c:1183 +#: commands/user.c:1170 #, c-format msgid "permission denied to rename role" msgstr "keine Berechtigung, um Rolle umzubenennen" -#: commands/user.c:1204 +#: commands/user.c:1191 #, c-format msgid "MD5 password cleared because of role rename" msgstr "MD5-Passwort wegen Rollenumbenennung gelöscht" -#: commands/user.c:1266 +#: commands/user.c:1253 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "bei GRANT/REVOKE ROLE können keine Spaltennamen angegeben werden" -#: commands/user.c:1304 +#: commands/user.c:1291 #, c-format msgid "permission denied to drop objects" msgstr "keine Berechtigung, um Objekte zu löschen" -#: commands/user.c:1331 commands/user.c:1340 +#: commands/user.c:1318 commands/user.c:1327 #, c-format msgid "permission denied to reassign objects" msgstr "keine Berechtigung, um Objekte neu zuzuordnen" -#: commands/user.c:1415 commands/user.c:1561 +#: commands/user.c:1402 commands/user.c:1548 #, c-format msgid "must have admin option on role \"%s\"" msgstr "Admin-Option für Rolle „%s“ wird benötigt" -#: commands/user.c:1432 +#: commands/user.c:1419 #, c-format msgid "must be superuser to set grantor" msgstr "nur Superuser können Grantor setzen" -#: commands/user.c:1457 +#: commands/user.c:1444 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "Rolle „%s“ ist ein Mitglied der Rolle „%s“" -#: commands/user.c:1472 +#: commands/user.c:1459 #, c-format msgid "role \"%s\" is already a member of role \"%s\"" msgstr "Rolle „%s“ ist schon Mitglied der Rolle „%s“" -#: commands/user.c:1583 +#: commands/user.c:1570 #, c-format msgid "role \"%s\" is not a member of role \"%s\"" msgstr "Rolle „%s“ ist kein Mitglied der Rolle „%s“" -#: commands/vacuum.c:524 +#: commands/vacuum.c:185 +#, fuzzy, c-format +#| msgid "%s: cannot be executed by \"root\"\n" +msgid "%s cannot be executed from VACUUM or ANALYZE" +msgstr "%s: kann nicht von „root“ ausgeführt werden\n" + +#: commands/vacuum.c:527 #, c-format msgid "oldest xmin is far in the past" msgstr "älteste xmin ist weit in der Vergangenheit" -#: commands/vacuum.c:525 +#: commands/vacuum.c:528 #, c-format msgid "Close open transactions soon to avoid wraparound problems." msgstr "Schließen Sie bald alle offenen Transaktionen, um Überlaufprobleme zu vermeiden." -#: commands/vacuum.c:564 +#: commands/vacuum.c:567 #, c-format msgid "oldest multixact is far in the past" msgstr "älteste Multixact ist weit in der Vergangenheit" -#: commands/vacuum.c:565 +#: commands/vacuum.c:568 #, 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:1127 +#: commands/vacuum.c:1130 #, 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:1128 +#: commands/vacuum.c:1131 #, 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:1250 +#: commands/vacuum.c:1252 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "überspringe Vacuum von „%s“ --- Sperre nicht verfügbar" -#: commands/vacuum.c:1276 +#: commands/vacuum.c:1278 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "überspringe „%s“ --- nur Superuser kann sie vacuumen" -#: commands/vacuum.c:1280 +#: commands/vacuum.c:1282 #, 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:1284 +#: commands/vacuum.c:1286 #, 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:1302 +#: commands/vacuum.c:1304 #, 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/vacuumlazy.c:357 +#: commands/vacuumlazy.c:358 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" msgstr "automatisches Vacuum der Tabelle „%s.%s.%s“: Index-Scans: %d\n" -#: commands/vacuumlazy.c:362 +#: commands/vacuumlazy.c:363 #, c-format msgid "pages: %u removed, %u remain, %u skipped due to pins\n" -msgstr "" +msgstr "Seiten: %u entfernt, %u verbleiben, %u übersprungen wegen Pins\n" -#: commands/vacuumlazy.c:367 +#: commands/vacuumlazy.c:368 #, c-format msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable\n" -msgstr "" +msgstr "Tupel: %.0f entfernt, %.0f verbleiben, %.0f sind tot aber noch nicht entfernbar\n" -#: commands/vacuumlazy.c:372 +#: commands/vacuumlazy.c:373 #, c-format msgid "buffer usage: %d hits, %d misses, %d dirtied\n" -msgstr "" +msgstr "Puffer-Verwendung: %d Treffer, %d Verfehlen, %d geändert\n" -#: commands/vacuumlazy.c:376 +#: commands/vacuumlazy.c:377 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" -msgstr "" +msgstr "durchschn. Leserate: %.3f MB/s, durchschn. Schreibrate: %.3f MB/s\n" -#: commands/vacuumlazy.c:378 -#, fuzzy, c-format -#| msgid "statement: %s" +#: commands/vacuumlazy.c:379 +#, c-format msgid "system usage: %s" -msgstr "Anweisung: %s" +msgstr "Systembenutzung: %s" -#: commands/vacuumlazy.c:700 +#: commands/vacuumlazy.c:701 #, c-format msgid "relation \"%s\" page %u is uninitialized --- fixing" msgstr "Seite %2$u in Relation „%1$s“ ist nicht initialisiert --- wird repariert" -#: commands/vacuumlazy.c:1112 +#: commands/vacuumlazy.c:1113 #, c-format msgid "\"%s\": removed %.0f row versions in %u pages" msgstr "„%s“: %.0f Zeilenversionen in %u Seiten entfernt" -#: commands/vacuumlazy.c:1122 -#, fuzzy, c-format -#| msgid "" -#| "%.0f dead row versions cannot be removed yet.\n" -#| "%s." +#: commands/vacuumlazy.c:1123 +#, c-format msgid "%.0f dead row versions cannot be removed yet.\n" -msgstr "" -"%.0f tote Zeilenversionen können noch nicht entfernt werden.\n" -"%s." +msgstr "%.0f tote Zeilenversionen können noch nicht entfernt werden.\n" -#: commands/vacuumlazy.c:1124 +#: commands/vacuumlazy.c:1125 #, c-format msgid "There were %.0f unused item pointers.\n" -msgstr "" +msgstr "Es gab %.0f unbenutzte Itemzeiger.\n" -#: commands/vacuumlazy.c:1126 +#: commands/vacuumlazy.c:1127 #, c-format msgid "Skipped %u pages due to buffer pins.\n" msgstr "" -#: commands/vacuumlazy.c:1128 +#: commands/vacuumlazy.c:1129 #, c-format msgid "%u pages are entirely empty.\n" -msgstr "" +msgstr "%u Seiten sind vollkommen leer.\n" -#: commands/vacuumlazy.c:1134 +#: commands/vacuumlazy.c:1135 #, c-format msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" msgstr "„%s“: %.0f entfernbare, %.0f nicht entfernbare Zeilenversionen in %u von %u Seiten gefunden" -#: commands/vacuumlazy.c:1203 +#: commands/vacuumlazy.c:1204 #, c-format msgid "\"%s\": removed %d row versions in %d pages" msgstr "„%s“: %d Zeilenversionen in %d Seiten entfernt" -#: commands/vacuumlazy.c:1370 +#: commands/vacuumlazy.c:1371 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "Index „%s“ gelesen und %d Zeilenversionen entfernt" -#: commands/vacuumlazy.c:1416 +#: commands/vacuumlazy.c:1417 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "Index „%s“ enthält %.0f Zeilenversionen in %u Seiten" -#: commands/vacuumlazy.c:1420 +#: commands/vacuumlazy.c:1421 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -9142,22 +9157,22 @@ msgstr "" "%u Indexseiten wurden gelöscht, %u sind gegenwärtig wiederverwendbar.\n" "%s." -#: commands/vacuumlazy.c:1477 +#: commands/vacuumlazy.c:1478 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "„%s“: Truncate wird gestoppt wegen Sperrkonflikt" -#: commands/vacuumlazy.c:1542 +#: commands/vacuumlazy.c:1543 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "„%s“: von %u auf %u Seiten verkürzt" -#: commands/vacuumlazy.c:1598 +#: commands/vacuumlazy.c:1599 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "„%s“: Truncate wird ausgesetzt wegen Sperrkonflikt" -#: commands/variable.c:163 utils/misc/guc.c:9645 +#: commands/variable.c:163 utils/misc/guc.c:9630 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Unbekanntes Schlüsselwort: „%s“." @@ -9342,12 +9357,12 @@ msgstr "Cursor „%s“ ist nicht auf eine Zeile positioniert" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "Cursor „%s“ ist kein einfach aktualisierbarer Scan der Tabelle „%s“" -#: executor/execCurrent.c:231 executor/execQual.c:1155 +#: executor/execCurrent.c:231 executor/execQual.c:1156 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "Typ von Parameter %d (%s) stimmt nicht mit dem überein, als der Plan vorbereitet worden ist (%s)" -#: executor/execCurrent.c:243 executor/execQual.c:1167 +#: executor/execCurrent.c:243 executor/execQual.c:1168 #, c-format msgid "no value found for parameter %d" msgstr "kein Wert für Parameter %d gefunden" @@ -9387,128 +9402,128 @@ 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:1026 +#: executor/execMain.c:1025 #, c-format msgid "cannot change sequence \"%s\"" msgstr "kann Sequenz „%s“ nicht ändern" -#: executor/execMain.c:1032 +#: executor/execMain.c:1031 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "kann TOAST-Relation „%s“ nicht ändern" -#: executor/execMain.c:1050 rewrite/rewriteHandler.c:2608 +#: executor/execMain.c:1049 rewrite/rewriteHandler.c:2631 #, c-format msgid "cannot insert into view \"%s\"" msgstr "kann nicht in Sicht „%s“ einfügen" -#: executor/execMain.c:1052 rewrite/rewriteHandler.c:2611 +#: executor/execMain.c:1051 rewrite/rewriteHandler.c:2634 #, 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:1058 rewrite/rewriteHandler.c:2616 +#: executor/execMain.c:1057 rewrite/rewriteHandler.c:2639 #, c-format msgid "cannot update view \"%s\"" msgstr "kann Sicht „%s“ nicht aktualisieren" -#: executor/execMain.c:1060 rewrite/rewriteHandler.c:2619 +#: executor/execMain.c:1059 rewrite/rewriteHandler.c:2642 #, 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:1066 rewrite/rewriteHandler.c:2624 +#: executor/execMain.c:1065 rewrite/rewriteHandler.c:2647 #, c-format msgid "cannot delete from view \"%s\"" msgstr "kann nicht aus Sicht „%s“ löschen" -#: executor/execMain.c:1068 rewrite/rewriteHandler.c:2627 +#: executor/execMain.c:1067 rewrite/rewriteHandler.c:2650 #, 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:1079 +#: executor/execMain.c:1078 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "kann materialisierte Sicht „%s“ nicht ändern" -#: executor/execMain.c:1091 +#: executor/execMain.c:1090 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "kann nicht in Fremdtabelle „%s“ einfügen" -#: executor/execMain.c:1097 +#: executor/execMain.c:1096 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "Fremdtabelle „%s“ erlaubt kein Einfügen" -#: executor/execMain.c:1104 +#: executor/execMain.c:1103 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "kann Fremdtabelle „%s“ nicht aktualisieren" -#: executor/execMain.c:1110 +#: executor/execMain.c:1109 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "Fremdtabelle „%s“ erlaubt kein Aktualisieren" -#: executor/execMain.c:1117 +#: executor/execMain.c:1116 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "kann nicht aus Fremdtabelle „%s“ löschen" -#: executor/execMain.c:1123 +#: executor/execMain.c:1122 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "Fremdtabelle „%s“ erlaubt kein Löschen" -#: executor/execMain.c:1134 +#: executor/execMain.c:1133 #, c-format msgid "cannot change relation \"%s\"" msgstr "kann Relation „%s“ nicht ändern" -#: executor/execMain.c:1160 +#: executor/execMain.c:1159 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "kann Zeilen in Sequenz „%s“ nicht sperren" -#: executor/execMain.c:1167 +#: executor/execMain.c:1166 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "kann Zeilen in TOAST-Relation „%s“ nicht sperren" -#: executor/execMain.c:1174 +#: executor/execMain.c:1173 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "kann Zeilen in Sicht „%s“ nicht sperren" -#: executor/execMain.c:1182 +#: executor/execMain.c:1181 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "kann Zeilen in materialisierter Sicht „%s“ nicht sperren" -#: executor/execMain.c:1191 executor/execMain.c:2566 +#: executor/execMain.c:1190 executor/execMain.c:2578 #: executor/nodeLockRows.c:132 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "kann Zeilen in Fremdtabelle „%s“ nicht sperren" -#: executor/execMain.c:1197 +#: executor/execMain.c:1196 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "kann Zeilen in Relation „%s“ nicht sperren" -#: executor/execMain.c:1697 +#: executor/execMain.c:1696 #, c-format msgid "null value in column \"%s\" violates not-null constraint" msgstr "NULL-Wert in Spalte „%s“ verletzt Not-Null-Constraint" -#: executor/execMain.c:1699 executor/execMain.c:1725 executor/execMain.c:1813 +#: executor/execMain.c:1698 executor/execMain.c:1724 executor/execMain.c:1813 #, c-format msgid "Failing row contains %s." msgstr "Fehlgeschlagene Zeile enthält %s." -#: executor/execMain.c:1723 +#: executor/execMain.c:1722 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "neue Zeile für Relation „%s“ verletzt Check-Constraint „%s“" @@ -9519,17 +9534,27 @@ msgstr "neue Zeile für Relation „%s“ verletzt Check-Constraint „%s“" msgid "new row violates WITH CHECK OPTION for \"%s\"" msgstr "neue Zeile verletzt WITH CHECK OPTION für Sicht „%s“" -#: executor/execMain.c:1820 +#: executor/execMain.c:1821 #, c-format -msgid "new row violates row level security policy for \"%s\"" +msgid "new row violates row level security policy \"%s\" for \"%s\"" msgstr "" #: executor/execMain.c:1826 #, c-format +msgid "new row violates row level security policy for \"%s\"" +msgstr "" + +#: executor/execMain.c:1833 +#, c-format +msgid "new row violates row level security policy \"%s\" (USING expression) for \"%s\"" +msgstr "" + +#: executor/execMain.c:1838 +#, c-format msgid "new row violates row level security policy (USING expression) for \"%s\"" msgstr "" -#: executor/execQual.c:300 executor/execQual.c:328 executor/execQual.c:3190 +#: executor/execQual.c:300 executor/execQual.c:328 executor/execQual.c:3191 #: utils/adt/array_userfuncs.c:472 utils/adt/arrayfuncs.c:263 #: utils/adt/arrayfuncs.c:561 utils/adt/arrayfuncs.c:1291 #: utils/adt/arrayfuncs.c:3335 utils/adt/arrayfuncs.c:5219 @@ -9543,172 +9568,172 @@ msgstr "Anzahl der Arraydimensionen (%d) überschreitet erlaubtes Maximum (%d)" msgid "array subscript in assignment must not be null" msgstr "Arrayindex in Zuweisung darf nicht NULL sein" -#: executor/execQual.c:634 executor/execQual.c:4114 +#: executor/execQual.c:635 executor/execQual.c:4116 #, c-format msgid "attribute %d has wrong type" msgstr "Attribut %d hat falschen Typ" -#: executor/execQual.c:635 executor/execQual.c:4115 +#: executor/execQual.c:636 executor/execQual.c:4117 #, c-format msgid "Table has type %s, but query expects %s." msgstr "Tabelle hat Typ %s, aber Anfrage erwartet %s." -#: executor/execQual.c:828 executor/execQual.c:845 executor/execQual.c:1045 +#: executor/execQual.c:829 executor/execQual.c:846 executor/execQual.c:1046 #: executor/nodeModifyTable.c:95 executor/nodeModifyTable.c:105 #: executor/nodeModifyTable.c:122 executor/nodeModifyTable.c:130 #, c-format msgid "table row type and query-specified row type do not match" msgstr "Zeilentyp der Tabelle und der von der Anfrage angegebene Zeilentyp stimmen nicht überein" -#: executor/execQual.c:829 +#: executor/execQual.c:830 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." msgstr[0] "Tabellenzeile enthält %d Attribut, aber Anfrage erwartet %d." msgstr[1] "Tabellenzeile enthält %d Attribute, aber Anfrage erwartet %d." -#: executor/execQual.c:846 executor/nodeModifyTable.c:106 +#: executor/execQual.c:847 executor/nodeModifyTable.c:106 #, 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/execQual.c:1046 executor/execQual.c:1642 +#: executor/execQual.c:1047 executor/execQual.c:1643 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "Physischer Speicher stimmt nicht überein mit gelöschtem Attribut auf Position %d." -#: executor/execQual.c:1321 parser/parse_func.c:117 parser/parse_func.c:544 -#: parser/parse_func.c:1037 +#: executor/execQual.c:1322 parser/parse_func.c:115 parser/parse_func.c:542 +#: parser/parse_func.c:894 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" msgstr[0] "kann nicht mehr als %d Argument an Funktion übergeben" msgstr[1] "kann nicht mehr als %d Argumente an Funktion übergeben" -#: executor/execQual.c:1510 +#: executor/execQual.c:1511 #, c-format msgid "functions and operators can take at most one set argument" msgstr "Funktionen und Operatoren können höchstens ein Mengenargument haben" -#: executor/execQual.c:1560 +#: executor/execQual.c:1561 #, c-format msgid "function returning setof record called in context that cannot accept type record" msgstr "Funktion mit Ergebnis SETOF RECORD in einem Zusammenhang aufgerufen, der den Typ RECORD nicht verarbeiten kann" -#: executor/execQual.c:1615 executor/execQual.c:1631 executor/execQual.c:1641 +#: executor/execQual.c:1616 executor/execQual.c:1632 executor/execQual.c:1642 #, c-format msgid "function return row and query-specified return row do not match" msgstr "von Funktion zurückgegebene Zeile und von der Anfrage angegebene zurückzugebende Zeile stimmen nicht überein" -#: executor/execQual.c:1616 +#: executor/execQual.c:1617 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." msgstr[0] "Zurückgegebene Zeile enthält %d Attribut, aber Anfrage erwartet %d." msgstr[1] "Zurückgegebene Zeile enthält %d Attribute, aber Anfrage erwartet %d." -#: executor/execQual.c:1632 +#: executor/execQual.c:1633 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "Rückgabetyp war %s auf Position %d, aber Anfrage erwartet %s." -#: executor/execQual.c:1874 executor/execQual.c:2305 +#: executor/execQual.c:1875 executor/execQual.c:2306 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "Tabellenfunktionsprotokoll für Materialisierungsmodus wurde nicht befolgt" -#: executor/execQual.c:1894 executor/execQual.c:2312 +#: executor/execQual.c:1895 executor/execQual.c:2313 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "unbekannter returnMode von Tabellenfunktion: %d" -#: executor/execQual.c:2222 +#: executor/execQual.c:2223 #, c-format msgid "function returning set of rows cannot return null value" msgstr "Funktion, die eine Zeilenmenge zurückgibt, kann keinen NULL-Wert zurückgeben" -#: executor/execQual.c:2279 +#: executor/execQual.c:2280 #, c-format msgid "rows returned by function are not all of the same row type" msgstr "von Funktion zurückgegebene Zeilen haben nicht alle den selben Zeilentyp" -#: executor/execQual.c:2494 +#: executor/execQual.c:2495 #, c-format msgid "IS DISTINCT FROM does not support set arguments" msgstr "IS DISTINCT FROM unterstützt keine Mengenargumente" -#: executor/execQual.c:2571 +#: executor/execQual.c:2572 #, c-format msgid "op ANY/ALL (array) does not support set arguments" msgstr "op ANY/ALL (array) unterstützt keine Mengenargumente" -#: executor/execQual.c:3168 +#: executor/execQual.c:3169 #, c-format msgid "cannot merge incompatible arrays" msgstr "kann inkompatible Arrays nicht verschmelzen" -#: executor/execQual.c:3169 +#: executor/execQual.c:3170 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "Arrayelement mit Typ %s kann nicht in ARRAY-Konstrukt mit Elementtyp %s verwendet werden." -#: executor/execQual.c:3210 executor/execQual.c:3237 +#: executor/execQual.c:3211 executor/execQual.c:3238 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "mehrdimensionale Arrays müssen Arraysausdrücke mit gleicher Anzahl Dimensionen haben" -#: executor/execQual.c:3752 +#: executor/execQual.c:3753 #, c-format msgid "NULLIF does not support set arguments" msgstr "NULLIF unterstützt keine Mengenargumente" -#: executor/execQual.c:3985 utils/adt/domains.c:136 +#: executor/execQual.c:3986 utils/adt/domains.c:136 #, c-format msgid "domain %s does not allow null values" msgstr "Domäne %s erlaubt keine NULL-Werte" -#: executor/execQual.c:4015 utils/adt/domains.c:173 +#: executor/execQual.c:4016 utils/adt/domains.c:173 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "Wert für Domäne %s verletzt Check-Constraint „%s“" -#: executor/execQual.c:4369 +#: executor/execQual.c:4371 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF wird für diesen Tabellentyp nicht unterstützt" -#: executor/execQual.c:4516 parser/parse_agg.c:581 parser/parse_agg.c:611 +#: executor/execQual.c:4518 parser/parse_agg.c:596 parser/parse_agg.c:626 #, c-format msgid "aggregate function calls cannot be nested" msgstr "Aufrufe von Aggregatfunktionen können nicht geschachtelt werden" -#: executor/execQual.c:4578 parser/parse_agg.c:727 +#: executor/execQual.c:4580 parser/parse_agg.c:742 #, c-format msgid "window function calls cannot be nested" msgstr "Aufrufe von Fensterfunktionen können nicht geschachtelt werden" -#: executor/execQual.c:4790 +#: executor/execQual.c:4792 #, c-format msgid "target type is not an array" msgstr "Zieltyp ist kein Array" -#: executor/execQual.c:4905 +#: executor/execQual.c:4907 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "ROW()-Spalte hat Typ %s statt Typ %s" -#: executor/execQual.c:5040 utils/adt/arrayfuncs.c:3777 -#: utils/adt/arrayfuncs.c:6315 utils/adt/rowtypes.c:921 +#: executor/execQual.c:5042 utils/adt/arrayfuncs.c:3777 +#: utils/adt/arrayfuncs.c:6315 utils/adt/rowtypes.c:916 #, c-format msgid "could not identify a comparison function for type %s" msgstr "konnte keine Vergleichsfunktion für Typ %s ermitteln" -#: executor/execUtils.c:829 +#: executor/execUtils.c:831 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "materialisierte Sicht „%s“ wurde noch nicht befüllt" -#: executor/execUtils.c:831 +#: executor/execUtils.c:833 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "Verwenden Sie den Befehl REFRESH MATERIALIZED VIEW." @@ -9725,7 +9750,7 @@ msgid "%s is not allowed in a SQL function" msgstr "%s ist in SQL-Funktionen nicht erlaubt" #. translator: %s is a SQL statement name -#: executor/functions.c:513 executor/spi.c:1368 executor/spi.c:2157 +#: executor/functions.c:513 executor/spi.c:1368 executor/spi.c:2158 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s ist in als nicht „volatile“ markierten Funktionen nicht erlaubt" @@ -9787,7 +9812,7 @@ msgstr "Die letzte Anweisung gibt zu wenige Spalten zurück." msgid "return type %s is not supported for SQL functions" msgstr "Rückgabetyp %s wird von SQL-Funktionen nicht unterstützt" -#: executor/nodeAgg.c:2449 executor/nodeWindowAgg.c:2286 +#: executor/nodeAgg.c:2450 executor/nodeWindowAgg.c:2286 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "Aggregatfunktion %u muss kompatiblen Eingabe- und Übergangstyp haben" @@ -9813,6 +9838,12 @@ msgstr "konnte nicht in temporäre Datei für Hash-Verbund schreiben: %m" msgid "could not read from hash-join temporary file: %m" msgstr "konnte nicht aus temporärer Datei für Hash-Verbund lesen: %m" +#: executor/nodeIndexonlyscan.c:179 +#, fuzzy, c-format +#| msgid "window functions are not allowed in index predicates" +msgid "lossy distance functions are not supported in index-only scans" +msgstr "Fensterfunktionen sind in Indexprädikaten nicht erlaubt" + #: executor/nodeLimit.c:253 #, c-format msgid "OFFSET must not be negative" @@ -9848,16 +9879,26 @@ msgstr "Anfrage liefert einen Wert für eine gelöschte Spalte auf Position %d." msgid "Query has too few columns." msgstr "Anfrage hat zu wenige Spalten." -#: executor/nodeModifyTable.c:1082 +#: executor/nodeModifyTable.c:1080 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "" -#: executor/nodeModifyTable.c:1083 +#: executor/nodeModifyTable.c:1081 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "" +#: executor/nodeSamplescan.c:307 +#, c-format +msgid "TABLESAMPLE parameter cannot be null" +msgstr "Parameter von TABLESAMPLE darf nicht NULL sein" + +#: executor/nodeSamplescan.c:320 +#, c-format +msgid "TABLESAMPLE REPEATABLE parameter cannot be null" +msgstr "Parameter von TABLESAMPLE REPEATABLE darf nicht NULL sein" + #: executor/nodeSubplan.c:345 executor/nodeSubplan.c:384 #: executor/nodeSubplan.c:1040 #, c-format @@ -9920,12 +9961,12 @@ 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:1343 parser/analyze.c:2238 +#: executor/spi.c:1343 parser/analyze.c:2292 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Scrollbare Cursor müssen READ ONLY sein." -#: executor/spi.c:2449 +#: executor/spi.c:2450 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL-Anweisung „%s“" @@ -9945,358 +9986,363 @@ msgstr "ungültige Option „%s“" msgid "Valid options in this context are: %s" msgstr "Gültige Optionen in diesem Zusammenhang sind: %s" -#: gram.y:1010 +#: gram.y:1009 #, c-format msgid "unrecognized role option \"%s\"" msgstr "unbekannte Rollenoption „%s“" -#: gram.y:1286 gram.y:1301 +#: gram.y:1285 gram.y:1300 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS kann keine Schemaelemente enthalten" -#: gram.y:1446 +#: gram.y:1445 #, c-format msgid "current database cannot be changed" msgstr "aktuelle Datenbank kann nicht geändert werden" -#: gram.y:1570 +#: gram.y:1569 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "Zeitzonenintervall muss HOUR oder HOUR TO MINUTE sein" -#: gram.y:2571 gram.y:2600 +#: gram.y:2570 gram.y:2599 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUT sind nicht mit PROGRAM erlaubt" -#: gram.y:2866 gram.y:2873 gram.y:10140 gram.y:10148 +#: gram.y:2865 gram.y:2872 gram.y:10139 gram.y:10147 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "die Verwendung von GLOBAL beim Erzeugen einer temporären Tabelle ist veraltet" -#: gram.y:3312 utils/adt/ri_triggers.c:312 utils/adt/ri_triggers.c:369 -#: utils/adt/ri_triggers.c:788 utils/adt/ri_triggers.c:1011 -#: utils/adt/ri_triggers.c:1167 utils/adt/ri_triggers.c:1348 -#: utils/adt/ri_triggers.c:1513 utils/adt/ri_triggers.c:1689 -#: utils/adt/ri_triggers.c:1869 utils/adt/ri_triggers.c:2060 -#: utils/adt/ri_triggers.c:2118 utils/adt/ri_triggers.c:2223 -#: utils/adt/ri_triggers.c:2400 +#: gram.y:3311 utils/adt/ri_triggers.c:316 utils/adt/ri_triggers.c:373 +#: utils/adt/ri_triggers.c:792 utils/adt/ri_triggers.c:1015 +#: utils/adt/ri_triggers.c:1171 utils/adt/ri_triggers.c:1352 +#: utils/adt/ri_triggers.c:1517 utils/adt/ri_triggers.c:1693 +#: utils/adt/ri_triggers.c:1873 utils/adt/ri_triggers.c:2064 +#: utils/adt/ri_triggers.c:2122 utils/adt/ri_triggers.c:2227 +#: utils/adt/ri_triggers.c:2404 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL ist noch nicht implementiert" -#: gram.y:4746 +#: gram.y:4745 msgid "duplicate trigger events specified" msgstr "mehrere Trigger-Ereignisse angegeben" -#: gram.y:4839 parser/parse_utilcmd.c:2657 parser/parse_utilcmd.c:2683 +#: gram.y:4838 parser/parse_utilcmd.c:2657 parser/parse_utilcmd.c:2683 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "Constraint, der als INITIALLY DEFERRED deklariert wurde, muss DEFERRABLE sein" -#: gram.y:4846 +#: gram.y:4845 #, c-format msgid "conflicting constraint properties" msgstr "widersprüchliche Constraint-Eigentschaften" -#: gram.y:4978 +#: gram.y:4977 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION ist noch nicht implementiert" -#: gram.y:4994 +#: gram.y:4993 #, c-format msgid "DROP ASSERTION is not yet implemented" msgstr "DROP ASSERTION ist noch nicht implementiert" -#: gram.y:5340 +#: gram.y:5339 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK wird nicht mehr benötigt" -#: gram.y:5341 +#: gram.y:5340 #, c-format msgid "Update your data type." msgstr "Aktualisieren Sie Ihren Datentyp." -#: gram.y:6918 +#: gram.y:6917 #, c-format msgid "aggregates cannot have output arguments" msgstr "Aggregatfunktionen können keine OUT-Argumente haben" -#: gram.y:7233 utils/adt/regproc.c:774 utils/adt/regproc.c:815 +#: gram.y:7232 utils/adt/regproc.c:774 utils/adt/regproc.c:815 #, c-format msgid "missing argument" msgstr "Argument fehlt" -#: gram.y:7234 utils/adt/regproc.c:775 utils/adt/regproc.c:816 +#: gram.y:7233 utils/adt/regproc.c:775 utils/adt/regproc.c:816 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Verwenden Sie NONE, um das fehlende Argument eines unären Operators anzugeben." -#: gram.y:8708 gram.y:8726 +#: gram.y:8707 gram.y:8725 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION wird für rekursive Sichten nicht unterstützt" -#: gram.y:9732 parser/parse_expr.c:1468 +#: gram.y:9731 parser/parse_expr.c:1468 #, c-format msgid "number of columns does not match number of values" msgstr "Anzahl der Spalten stimmt nicht mit der Anzahl der Werte überein" -#: gram.y:10248 +#: gram.y:10247 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "Syntax LIMIT x,y wird nicht unterstützt" -#: gram.y:10249 +#: gram.y:10248 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Verwenden Sie die getrennten Klauseln LIMIT und OFFSET." -#: gram.y:10508 gram.y:10533 +#: gram.y:10511 gram.y:10536 #, c-format msgid "VALUES in FROM must have an alias" msgstr "VALUES in FROM muss Aliasnamen erhalten" -#: gram.y:10509 gram.y:10534 +#: gram.y:10512 gram.y:10537 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Zum Beispiel FROM (VALUES ...) [AS] xyz." -#: gram.y:10514 gram.y:10539 +#: gram.y:10517 gram.y:10542 #, c-format msgid "subquery in FROM must have an alias" msgstr "Unteranfrage in FROM muss Aliasnamen erhalten" -#: gram.y:10515 gram.y:10540 +#: gram.y:10518 gram.y:10543 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Zum Beispiel FROM (SELECT ...) [AS] xyz." -#: gram.y:11119 +#: gram.y:11117 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "Präzision von Typ float muss mindestens 1 Bit sein" -#: gram.y:11128 +#: gram.y:11126 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "Präzision von Typ float muss weniger als 54 Bits sein" -#: gram.y:11632 +#: gram.y:11630 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "falsche Anzahl Parameter auf linker Seite von OVERLAPS-Ausdruck" -#: gram.y:11637 +#: gram.y:11635 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "falsche Anzahl Parameter auf rechter Seite von OVERLAPS-Ausdruck" -#: gram.y:11814 +#: gram.y:11812 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "UNIQUE-Prädikat ist noch nicht implementiert" -#: gram.y:12146 +#: gram.y:12144 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "in WITHIN GROUP können nicht mehrere ORDER-BY-Klauseln verwendet werden" -#: gram.y:12151 +#: gram.y:12149 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "DISTINCT kann nicht mit WITHIN GROUP verwendet werden" -#: gram.y:12156 +#: gram.y:12154 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "VARIADIC kann nicht mit WITHIN GROUP verwendet werden" -#: gram.y:12662 +#: gram.y:12660 #, c-format msgid "RANGE PRECEDING is only supported with UNBOUNDED" msgstr "RANGE PRECEDING wird nur mit UNBOUNDED unterstützt" -#: gram.y:12668 +#: gram.y:12666 #, c-format msgid "RANGE FOLLOWING is only supported with UNBOUNDED" msgstr "RANGE FOLLOWING wird nur mit UNBOUNDED unterstützt" -#: gram.y:12695 gram.y:12718 +#: gram.y:12693 gram.y:12716 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "Frame-Beginn kann nicht UNBOUNDED FOLLOWING sein" -#: gram.y:12700 +#: gram.y:12698 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "Frame der in der folgenden Zeile beginnt kann nicht in der aktuellen Zeile enden" -#: gram.y:12723 +#: gram.y:12721 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "Frame-Ende kann nicht UNBOUNDED PRECEDING sein" -#: gram.y:12729 +#: gram.y:12727 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "Frame der in der aktuellen Zeile beginnt kann keine vorhergehenden Zeilen haben" -#: gram.y:12736 +#: gram.y:12734 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "Frame der in der folgenden Zeile beginnt kann keine vorhergehenden Zeilen haben" -#: gram.y:13394 +#: gram.y:13392 #, c-format msgid "type modifier cannot have parameter name" msgstr "Typmodifikator kann keinen Parameternamen haben" -#: gram.y:13400 +#: gram.y:13398 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "Typmodifikator kann kein ORDER BY haben" -#: gram.y:13464 gram.y:13470 +#: gram.y:13456 gram.y:13491 +#, c-format +msgid "role name \"%s\" is reserved" +msgstr "Rollenname „%s“ ist reserviert" + +#: gram.y:13462 gram.y:13468 #, fuzzy, c-format #| msgid "%s cannot be applied to a join" msgid "%s cannot be used as a role name here" msgstr "%s kann nicht auf einen Verbund angewendet werden" -#: gram.y:14089 gram.y:14278 +#: gram.y:14087 gram.y:14276 msgid "improper use of \"*\"" msgstr "unzulässige Verwendung von „*“" -#: gram.y:14241 gram.y:14258 tsearch/spell.c:518 tsearch/spell.c:535 +#: gram.y:14239 gram.y:14256 tsearch/spell.c:518 tsearch/spell.c:535 #: tsearch/spell.c:552 tsearch/spell.c:569 tsearch/spell.c:591 #, c-format msgid "syntax error" msgstr "Syntaxfehler" -#: gram.y:14342 +#: gram.y:14340 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "eine Ordered-Set-Aggregatfunktion mit einem direkten VARIADIC-Argument muss ein aggregiertes VARIADIC-Argument des selben Datentyps haben" -#: gram.y:14379 +#: gram.y:14377 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "mehrere ORDER-BY-Klauseln sind nicht erlaubt" -#: gram.y:14390 +#: gram.y:14388 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "mehrere OFFSET-Klauseln sind nicht erlaubt" -#: gram.y:14399 +#: gram.y:14397 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "mehrere LIMIT-Klauseln sind nicht erlaubt" -#: gram.y:14408 +#: gram.y:14406 #, c-format msgid "multiple WITH clauses not allowed" msgstr "mehrere WITH-Klauseln sind nicht erlaubt" -#: gram.y:14588 +#: gram.y:14586 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "OUT- und INOUT-Argumente sind in TABLE-Funktionen nicht erlaubt" -#: gram.y:14689 +#: gram.y:14687 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "mehrere COLLATE-Klauseln sind nicht erlaubt" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:14727 gram.y:14740 +#: gram.y:14725 gram.y:14738 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "%s-Constraints können nicht als DEFERRABLE markiert werden" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:14753 +#: gram.y:14751 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "%s-Constraints können nicht als NOT VALID markiert werden" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:14766 +#: gram.y:14764 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "%s-Constraints können nicht als NO INHERIT markiert werden" -#: guc-file.l:253 +#: guc-file.l:315 #, c-format msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %u" msgstr "unbekannter Konfigurationsparameter „%s“ in Datei „%s“ Zeile %u" -#: guc-file.l:290 utils/misc/guc.c:5742 utils/misc/guc.c:5934 -#: utils/misc/guc.c:6024 utils/misc/guc.c:6114 utils/misc/guc.c:6222 -#: utils/misc/guc.c:6317 +#: guc-file.l:352 utils/misc/guc.c:5701 utils/misc/guc.c:5893 +#: utils/misc/guc.c:5983 utils/misc/guc.c:6073 utils/misc/guc.c:6181 +#: utils/misc/guc.c:6276 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "Parameter „%s“ kann nicht geändert werden, ohne den Server neu zu starten" -#: guc-file.l:318 +#: guc-file.l:388 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "Parameter „%s“ wurde aus Konfigurationsdatei entfernt, wird auf Standardwert zurückgesetzt" -#: guc-file.l:428 +#: guc-file.l:454 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "Parameter „%s“ auf „%s“ gesetzt" -#: guc-file.l:463 +#: guc-file.l:496 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "Konfigurationsdatei „%s“ enthält Fehler" -#: guc-file.l:468 +#: guc-file.l:501 #, c-format msgid "configuration file \"%s\" contains errors; unaffected changes were applied" msgstr "Konfigurationsdatei „%s“ enthält Fehler; nicht betroffene Änderungen wurden durchgeführt" -#: guc-file.l:473 +#: guc-file.l:506 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "Konfigurationsdatei „%s“ enthält Fehler; keine Änderungen wurden durchgeführt" -#: guc-file.l:546 +#: guc-file.l:579 #, c-format msgid "could not open configuration file \"%s\": maximum nesting depth exceeded" msgstr "konnte Konfigurationsdatei „%s“ nicht öffnen: maximale Verschachtelungstiefe überschritten" -#: guc-file.l:559 libpq/hba.c:1764 +#: guc-file.l:595 libpq/hba.c:1764 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "konnte Konfigurationsdatei „%s“ nicht öffnen: %m" -#: guc-file.l:566 +#: guc-file.l:606 #, c-format msgid "skipping missing configuration file \"%s\"" msgstr "fehlende Konfigurationsdatei „%s“ wird übersprungen" -#: guc-file.l:776 +#: guc-file.l:860 #, c-format msgid "syntax error in file \"%s\" line %u, near end of line" msgstr "Syntaxfehler in Datei „%s“, Zeile %u, am Ende der Zeile" -#: guc-file.l:781 +#: guc-file.l:870 #, c-format msgid "syntax error in file \"%s\" line %u, near token \"%s\"" msgstr "Syntaxfehler in Datei „%s“, Zeile %u, bei „%s“" -#: guc-file.l:797 +#: guc-file.l:890 #, c-format msgid "too many syntax errors found, abandoning file \"%s\"" msgstr "zu viele Syntaxfehler gefunden, Datei „%s“ wird aufgegeben" -#: guc-file.l:842 +#: guc-file.l:942 #, c-format msgid "could not open configuration directory \"%s\": %m" msgstr "konnte Konfigurationsverzeichnis „%s“ nicht öffnen: %m" @@ -10859,137 +10905,127 @@ msgstr "konnte Serverdatei „%s“ nicht schreiben: %m" msgid "large object read request is too large" msgstr "Large-Object-Leseaufforderung ist zu groß" -#: libpq/be-fsstubs.c:857 utils/adt/genfile.c:187 utils/adt/genfile.c:232 +#: libpq/be-fsstubs.c:857 utils/adt/genfile.c:211 utils/adt/genfile.c:252 #, c-format msgid "requested length cannot be negative" msgstr "verlangte Länge darf nicht negativ sein" -#: libpq/be-secure-openssl.c:197 +#: libpq/be-secure-openssl.c:184 #, c-format msgid "could not create SSL context: %s" msgstr "konnte SSL-Kontext nicht erzeugen: %s" -#: libpq/be-secure-openssl.c:213 +#: libpq/be-secure-openssl.c:200 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "konnte Serverzertifikatsdatei „%s“ nicht laden: %s" -#: libpq/be-secure-openssl.c:219 +#: libpq/be-secure-openssl.c:206 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "konnte auf private Schlüsseldatei „%s“ nicht zugreifen: %m" -#: libpq/be-secure-openssl.c:234 +#: libpq/be-secure-openssl.c:221 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "private Schlüsseldatei „%s“ erlaubt Zugriff von Gruppe oder Welt" -#: libpq/be-secure-openssl.c:236 +#: libpq/be-secure-openssl.c:223 #, c-format msgid "Permissions should be u=rw (0600) or less." msgstr "Rechte sollten u=rw (0600) oder weniger sein." -#: libpq/be-secure-openssl.c:243 +#: libpq/be-secure-openssl.c:230 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "konnte private Schlüsseldatei „%s“ nicht laden: %s" -#: libpq/be-secure-openssl.c:248 +#: libpq/be-secure-openssl.c:235 #, c-format msgid "check of private key failed: %s" msgstr "Überprüfung des privaten Schlüssels fehlgeschlagen: %s" -#: libpq/be-secure-openssl.c:277 +#: libpq/be-secure-openssl.c:264 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "konnte Root-Zertifikat-Datei „%s“ nicht laden: %s" -#: libpq/be-secure-openssl.c:301 +#: libpq/be-secure-openssl.c:288 #, c-format msgid "SSL certificate revocation list file \"%s\" ignored" msgstr "SSL-Certificate-Revocation-List-Datei „%s“ ignoriert" -#: libpq/be-secure-openssl.c:303 +#: libpq/be-secure-openssl.c:290 #, c-format msgid "SSL library does not support certificate revocation lists." msgstr "SSL-Bibliothek unterstützt keine Certificate-Revocation-Lists." -#: libpq/be-secure-openssl.c:308 +#: libpq/be-secure-openssl.c:295 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "konnte SSL-Certificate-Revocation-List-Datei „%s“ nicht laden: %s" -#: libpq/be-secure-openssl.c:354 +#: libpq/be-secure-openssl.c:341 #, c-format msgid "could not initialize SSL connection: %s" msgstr "konnte SSL-Verbindung nicht initialisieren: %s" -#: libpq/be-secure-openssl.c:362 +#: libpq/be-secure-openssl.c:349 #, c-format msgid "could not set SSL socket: %s" msgstr "konnte SSL-Socket nicht setzen: %s" -#: libpq/be-secure-openssl.c:396 +#: libpq/be-secure-openssl.c:383 #, c-format msgid "could not accept SSL connection: %m" msgstr "konnte SSL-Verbindung nicht annehmen: %m" -#: libpq/be-secure-openssl.c:400 libpq/be-secure-openssl.c:411 +#: libpq/be-secure-openssl.c:387 libpq/be-secure-openssl.c:398 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "konnte SSL-Verbindung nicht annehmen: EOF entdeckt" -#: libpq/be-secure-openssl.c:405 +#: libpq/be-secure-openssl.c:392 #, c-format msgid "could not accept SSL connection: %s" msgstr "konnte SSL-Verbindung nicht annehmen: %s" -#: libpq/be-secure-openssl.c:416 libpq/be-secure-openssl.c:554 -#: libpq/be-secure-openssl.c:643 +#: libpq/be-secure-openssl.c:403 libpq/be-secure-openssl.c:541 +#: libpq/be-secure-openssl.c:598 #, c-format msgid "unrecognized SSL error code: %d" msgstr "unbekannter SSL-Fehlercode: %d" -#: libpq/be-secure-openssl.c:460 +#: libpq/be-secure-openssl.c:447 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "Common-Name im SSL-Zertifikat enthält Null-Byte" -#: libpq/be-secure-openssl.c:471 +#: libpq/be-secure-openssl.c:458 #, c-format msgid "SSL connection from \"%s\"" msgstr "SSL-Verbindung von „%s“" -#: libpq/be-secure-openssl.c:545 libpq/be-secure-openssl.c:634 +#: libpq/be-secure-openssl.c:532 libpq/be-secure-openssl.c:589 #, c-format msgid "SSL error: %s" msgstr "SSL-Fehler: %s" -#: libpq/be-secure-openssl.c:602 -#, c-format -msgid "SSL failure during renegotiation start" -msgstr "SSL-Fehler beim Renegotiation-Start" - -#: libpq/be-secure-openssl.c:669 -#, c-format -msgid "SSL failed to renegotiate connection before limit expired" -msgstr "SSL konnte Verbindung nicht vor Ablauf der Frist neu aushandeln" - -#: libpq/be-secure-openssl.c:1004 +#: libpq/be-secure-openssl.c:937 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: unbekannter Kurvenname: %s" -#: libpq/be-secure-openssl.c:1009 +#: libpq/be-secure-openssl.c:942 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: konnte Schlüssel nicht erzeugen" -#: libpq/be-secure-openssl.c:1033 +#: libpq/be-secure-openssl.c:966 msgid "no SSL error reported" msgstr "kein SSL-Fehler berichtet" -#: libpq/be-secure-openssl.c:1037 +#: libpq/be-secure-openssl.c:970 #, c-format msgid "SSL error code %lu" msgstr "SSL-Fehlercode %lu" @@ -11307,139 +11343,139 @@ msgstr "kein passender Eintrag in Usermap „%s“ für Benutzer „%s“, authe msgid "could not open usermap file \"%s\": %m" msgstr "konnte Usermap-Datei „%s“ nicht öffnen: %m" -#: libpq/pqcomm.c:198 +#: libpq/pqcomm.c:201 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "konnte Socket nicht auf nicht-blockierenden Modus umstellen: %m" -#: libpq/pqcomm.c:367 +#: libpq/pqcomm.c:348 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "Unix-Domain-Socket-Pfad „%s“ ist zu lang (maximal %d Bytes)" -#: libpq/pqcomm.c:388 +#: libpq/pqcomm.c:369 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "konnte Hostname „%s“, Dienst „%s“ nicht in Adresse übersetzen: %s" -#: libpq/pqcomm.c:392 +#: libpq/pqcomm.c:373 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "konnte Dienst „%s“ nicht in Adresse übersetzen: %s" -#: libpq/pqcomm.c:419 +#: libpq/pqcomm.c:400 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "konnte nicht an alle verlangten Adressen binden: MAXLISTEN (%d) überschritten" -#: libpq/pqcomm.c:428 +#: libpq/pqcomm.c:409 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:432 +#: libpq/pqcomm.c:413 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:437 +#: libpq/pqcomm.c:418 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:442 +#: libpq/pqcomm.c:423 #, c-format msgid "unrecognized address family %d" msgstr "unbekannte Adressfamilie %d" #. translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:453 +#: libpq/pqcomm.c:434 #, c-format msgid "could not create %s socket: %m" msgstr "konnte %s-Socket nicht erstellen: %m" -#: libpq/pqcomm.c:478 +#: libpq/pqcomm.c:459 #, c-format msgid "setsockopt(SO_REUSEADDR) failed: %m" msgstr "setsockopt(SO_REUSEADDR) fehlgeschlagen: %m" -#: libpq/pqcomm.c:493 +#: libpq/pqcomm.c:474 #, c-format msgid "setsockopt(IPV6_V6ONLY) failed: %m" msgstr "setsockopt(IPV6_V6ONLY) fehlgeschlagen: %m" #. translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:512 +#: libpq/pqcomm.c:493 #, c-format msgid "could not bind %s socket: %m" msgstr "konnte %s-Socket nicht binden: %m" -#: libpq/pqcomm.c:515 +#: libpq/pqcomm.c:496 #, c-format msgid "Is another postmaster already running on port %d? If not, remove socket file \"%s\" and retry." msgstr "Läuft bereits ein anderer Postmaster auf Port %d? Wenn nicht, entfernen Sie die Socketdatei „%s“ und versuchen Sie erneut." -#: libpq/pqcomm.c:518 +#: libpq/pqcomm.c:499 #, c-format msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." msgstr "Läuft bereits ein anderer Postmaster auf Port %d? Wenn nicht, warten Sie einige Sekunden und versuchen Sie erneut." #. translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:551 +#: libpq/pqcomm.c:532 #, c-format msgid "could not listen on %s socket: %m" msgstr "konnte nicht auf %s-Socket hören: %m" -#: libpq/pqcomm.c:641 +#: libpq/pqcomm.c:617 #, c-format msgid "group \"%s\" does not exist" msgstr "Gruppe „%s“ existiert nicht" -#: libpq/pqcomm.c:651 +#: libpq/pqcomm.c:627 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "konnte Gruppe von Datei „%s“ nicht setzen: %m" -#: libpq/pqcomm.c:662 +#: libpq/pqcomm.c:638 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "konnte Zugriffsrechte von Datei „%s“ nicht setzen: %m" -#: libpq/pqcomm.c:692 +#: libpq/pqcomm.c:668 #, c-format msgid "could not accept new connection: %m" msgstr "konnte neue Verbindung nicht akzeptieren: %m" -#: libpq/pqcomm.c:851 +#: libpq/pqcomm.c:847 #, fuzzy, c-format #| msgid "unexpected EOF on client connection" msgid "there is no client connection" msgstr "unerwartetes EOF auf Client-Verbindung" -#: libpq/pqcomm.c:902 libpq/pqcomm.c:998 +#: libpq/pqcomm.c:898 libpq/pqcomm.c:994 #, c-format msgid "could not receive data from client: %m" msgstr "konnte Daten vom Client nicht empfangen: %m" -#: libpq/pqcomm.c:1143 tcop/postgres.c:3897 +#: libpq/pqcomm.c:1139 tcop/postgres.c:3902 #, fuzzy, c-format #| msgid "terminating connection because of crash of another server process" msgid "terminating connection because protocol sync was lost" msgstr "breche Verbindung ab wegen Absturz eines anderen Serverprozesses" -#: libpq/pqcomm.c:1209 +#: libpq/pqcomm.c:1205 #, c-format msgid "unexpected EOF within message length word" msgstr "unerwartetes EOF im Message-Längenwort" -#: libpq/pqcomm.c:1220 +#: libpq/pqcomm.c:1216 #, c-format msgid "invalid message length" msgstr "ungültige Message-Länge" -#: libpq/pqcomm.c:1242 libpq/pqcomm.c:1255 +#: libpq/pqcomm.c:1238 libpq/pqcomm.c:1251 #, c-format msgid "incomplete message from client" msgstr "unvollständige Message vom Client" -#: libpq/pqcomm.c:1388 +#: libpq/pqcomm.c:1384 #, c-format msgid "could not send data to client: %m" msgstr "konnte Daten nicht an den Client senden: %m" @@ -11450,7 +11486,7 @@ msgid "no data left in message" msgstr "keine Daten in Message übrig" #: libpq/pqformat.c:556 libpq/pqformat.c:574 libpq/pqformat.c:595 -#: utils/adt/arrayfuncs.c:1460 utils/adt/rowtypes.c:561 +#: utils/adt/arrayfuncs.c:1460 utils/adt/rowtypes.c:556 #, c-format msgid "insufficient data left in message" msgstr "nicht genug Daten in Message übrig" @@ -11465,12 +11501,12 @@ msgstr "ungültige Zeichenkette in Message" msgid "invalid message format" msgstr "ungültiges Message-Format" -#: main/main.c:257 +#: main/main.c:259 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartup fehlgeschlagen: %d\n" -#: main/main.c:303 +#: main/main.c:306 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -11479,7 +11515,7 @@ msgstr "" "%s ist der PostgreSQL-Server.\n" "\n" -#: main/main.c:304 +#: main/main.c:307 #, c-format msgid "" "Usage:\n" @@ -11490,112 +11526,112 @@ msgstr "" " %s [OPTION]...\n" "\n" -#: main/main.c:305 +#: main/main.c:308 #, c-format msgid "Options:\n" msgstr "Optionen:\n" -#: main/main.c:306 +#: main/main.c:309 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B ZAHL Anzahl der geteilten Puffer\n" -#: main/main.c:307 +#: main/main.c:310 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NAME=WERT setze Konfigurationsparameter\n" -#: main/main.c:308 +#: main/main.c:311 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NAME Wert des Konfigurationsparameters ausgeben, dann beenden\n" -#: main/main.c:309 +#: main/main.c:312 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 Debug-Level\n" -#: main/main.c:310 +#: main/main.c:313 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D VERZEICHNIS Datenbankverzeichnis\n" -#: main/main.c:311 +#: main/main.c:314 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e verwende europäisches Datumseingabeformat (DMY)\n" -#: main/main.c:312 +#: main/main.c:315 #, c-format msgid " -F turn fsync off\n" msgstr " -F „fsync“ ausschalten\n" -#: main/main.c:313 +#: main/main.c:316 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h HOSTNAME horche auf Hostname oder IP-Adresse\n" -#: main/main.c:314 +#: main/main.c:317 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i ermögliche TCP/IP-Verbindungen\n" -#: main/main.c:315 +#: main/main.c:318 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k VERZEICHNIS Ort der Unix-Domain-Socket\n" -#: main/main.c:317 +#: main/main.c:320 #, c-format msgid " -l enable SSL connections\n" msgstr " -l ermögliche SSL-Verbindungen\n" -#: main/main.c:319 +#: main/main.c:322 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N ZAHL Anzahl der erlaubten Verbindungen\n" -#: main/main.c:320 +#: main/main.c:323 #, c-format msgid " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" msgstr " -o OPTIONEN „OPTIONEN“ an jeden Serverprozess weiterreichen (obsolet)\n" -#: main/main.c:321 +#: main/main.c:324 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT auf dieser Portnummer horchen\n" -#: main/main.c:322 +#: main/main.c:325 #, c-format msgid " -s show statistics after each query\n" msgstr " -s zeige Statistiken nach jeder Anfrage\n" -#: main/main.c:323 +#: main/main.c:326 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S ZAHL setze Speicher für Sortiervorgänge (in kB)\n" -#: main/main.c:324 +#: main/main.c:327 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: main/main.c:325 +#: main/main.c:328 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NAME=WERT setze Konfigurationsparameter\n" -#: main/main.c:326 +#: main/main.c:329 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config zeige Konfigurationsparameter und beende\n" -#: main/main.c:327 +#: main/main.c:330 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: main/main.c:329 +#: main/main.c:332 #, c-format msgid "" "\n" @@ -11604,42 +11640,42 @@ msgstr "" "\n" "Entwickleroptionen:\n" -#: main/main.c:330 +#: main/main.c:333 #, c-format msgid " -f s|i|n|m|h forbid use of some plan types\n" msgstr " -f s|i|n|m|h verbiete Verwendung einiger Plantypen\n" -#: main/main.c:331 +#: main/main.c:334 #, c-format msgid " -n do not reinitialize shared memory after abnormal exit\n" msgstr " -n Shared Memory nach abnormalem Ende nicht neu initialisieren\n" -#: main/main.c:332 +#: main/main.c:335 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O erlaube Änderungen an Systemtabellenstruktur\n" -#: main/main.c:333 +#: main/main.c:336 #, c-format msgid " -P disable system indexes\n" msgstr " -P schalte Systemindexe aus\n" -#: main/main.c:334 +#: main/main.c:337 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex zeige Zeitmessung nach jeder Anfrage\n" -#: main/main.c:335 +#: main/main.c:338 #, c-format msgid " -T send SIGSTOP to all backend processes if one dies\n" msgstr " -T SIGSTOP an alle Backend-Prozesse senden wenn einer stirbt\n" -#: main/main.c:336 +#: main/main.c:339 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr " -W ZAHL warte ZAHL Sekunden, um Debugger starten zu können\n" -#: main/main.c:338 +#: main/main.c:341 #, c-format msgid "" "\n" @@ -11648,39 +11684,39 @@ msgstr "" "\n" "Optionen für Einzelbenutzermodus:\n" -#: main/main.c:339 +#: main/main.c:342 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr " --single wählt den Einzelbenutzermodus (muss erstes Argument sein)\n" -#: main/main.c:340 +#: main/main.c:343 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME Datenbankname (Vorgabe: Benutzername)\n" -#: main/main.c:341 +#: main/main.c:344 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 Debug-Level setzen\n" -#: main/main.c:342 +#: main/main.c:345 #, c-format msgid " -E echo statement before execution\n" msgstr " -E gebe Befehl vor der Ausführung aus\n" -#: main/main.c:343 +#: main/main.c:346 #, c-format msgid " -j do not use newline as interactive query delimiter\n" msgstr "" " -j verwende Zeilenende nicht als Anfrageende im interaktiven\n" " Modus\n" -#: main/main.c:344 main/main.c:349 +#: main/main.c:347 main/main.c:352 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r DATEINAME sende stdout und stderr in genannte Datei\n" -#: main/main.c:346 +#: main/main.c:349 #, c-format msgid "" "\n" @@ -11689,22 +11725,22 @@ msgstr "" "\n" "Optionen für Bootstrap-Modus:\n" -#: main/main.c:347 +#: main/main.c:350 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot wählt den Bootstrap-Modus (muss erstes Argument sein)\n" -#: main/main.c:348 +#: main/main.c:351 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAME Datenbankname (Pflichtangabe im Bootstrap-Modus)\n" -#: main/main.c:350 +#: main/main.c:353 #, c-format msgid " -x NUM internal use\n" msgstr " -x NUM interne Verwendung\n" -#: main/main.c:352 +#: main/main.c:355 #, c-format msgid "" "\n" @@ -11721,7 +11757,7 @@ msgstr "" "\n" "Berichten Sie Fehler an .\n" -#: main/main.c:366 +#: main/main.c:369 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -11735,12 +11771,12 @@ msgstr "" "Dokumentation finden Sie weitere Informationen darüber, wie der\n" "Server richtig gestartet wird.\n" -#: main/main.c:383 +#: main/main.c:386 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: reelle und effektive Benutzer-IDs müssen übereinstimmen\n" -#: main/main.c:390 +#: main/main.c:393 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -11757,66 +11793,81 @@ msgstr "" #: nodes/nodeFuncs.c:118 nodes/nodeFuncs.c:149 parser/parse_coerce.c:1782 #: parser/parse_coerce.c:1810 parser/parse_coerce.c:1886 -#: parser/parse_expr.c:1980 parser/parse_func.c:599 parser/parse_oper.c:952 +#: parser/parse_expr.c:1981 parser/parse_func.c:597 parser/parse_oper.c:952 #, c-format msgid "could not find array type for data type %s" msgstr "konnte Arraytyp für Datentyp %s nicht finden" -#: optimizer/path/joinrels.c:725 +#: optimizer/path/allpaths.c:2272 +#, c-format +msgid "WHERE CURRENT OF is not supported on a view with no underlying relation" +msgstr "WHERE CURRENT OF wird nicht unterstützt für Sichten ohne zugrundeliegende Relation" + +#: optimizer/path/allpaths.c:2277 +#, c-format +msgid "WHERE CURRENT OF is not supported on a view with more than one underlying relation" +msgstr "WHERE CURRENT OF wird nicht unterstützt für Sichten mit mehr als einer zugrundeliegenden Relation" + +#: optimizer/path/allpaths.c:2282 +#, c-format +msgid "WHERE CURRENT OF is not supported on a view with grouping or aggregation" +msgstr "WHERE CURRENT OF wird nicht unterstützt für Sichten mit Gruppierung oder Aggregierung" + +#: optimizer/path/joinrels.c:740 #, c-format msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" msgstr "FULL JOIN wird nur für Merge- oder Hash-Verbund-fähige Verbundbedingungen unterstützt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1081 +#: optimizer/plan/initsplan.c:1083 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s kann nicht auf die nullbare Seite eines äußeren Verbundes angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1251 parser/analyze.c:1427 parser/analyze.c:1625 -#: parser/analyze.c:2406 +#: optimizer/plan/planner.c:1324 parser/analyze.c:1481 parser/analyze.c:1679 +#: parser/analyze.c:2460 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s ist nicht in UNION/INTERSECT/EXCEPT erlaubt" -#: optimizer/plan/planner.c:3502 +#: optimizer/plan/planner.c:3580 #, c-format msgid "could not implement GROUP BY" msgstr "konnte GROUP BY nicht implementieren" -#: optimizer/plan/planner.c:3503 optimizer/plan/planner.c:3671 +#: optimizer/plan/planner.c:3581 optimizer/plan/planner.c:3749 #: optimizer/prep/prepunion.c:828 #, 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:3670 +#: optimizer/plan/planner.c:3748 #, c-format msgid "could not implement DISTINCT" msgstr "konnte DISTINCT nicht implementieren" -#: optimizer/plan/planner.c:4276 +#: optimizer/plan/planner.c:4354 #, c-format msgid "could not implement window PARTITION BY" msgstr "konnte PARTITION BY für Fenster nicht implementieren" -#: optimizer/plan/planner.c:4277 +#: optimizer/plan/planner.c:4355 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Fensterpartitionierungsspalten müssen sortierbare Datentypen haben." -#: optimizer/plan/planner.c:4281 +#: optimizer/plan/planner.c:4359 #, c-format msgid "could not implement window ORDER BY" msgstr "konnte ORDER BY für Fenster nicht implementieren" -#: optimizer/plan/planner.c:4282 +#: optimizer/plan/planner.c:4360 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Fenstersortierspalten müssen sortierbare Datentypen haben." -#: optimizer/plan/setrefs.c:409 +#: optimizer/plan/setrefs.c:411 #, c-format msgid "too many range table entries" msgstr "zu viele Range-Table-Einträge" @@ -11837,39 +11888,38 @@ msgstr "Alle Spaltendatentypen müssen hashbar sein." msgid "could not implement %s" msgstr "konnte %s nicht implementieren" -#: optimizer/util/clauses.c:4582 +#: optimizer/util/clauses.c:4597 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "SQL-Funktion „%s“ beim Inlining" -#: optimizer/util/plancat.c:107 +#: optimizer/util/plancat.c:108 #, c-format 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:496 +#: optimizer/util/plancat.c:498 #, c-format msgid "system columns cannot be used in an ON CONFLICT clause" -msgstr "" +msgstr "Systemspalten können nicht in der ON-CONFLICT-Klausel verwendet werden" -#: optimizer/util/plancat.c:514 +#: optimizer/util/plancat.c:516 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "" -#: optimizer/util/plancat.c:566 -#, fuzzy, c-format -#| msgid "access method \"%s\" does not support exclusion constraints" +#: optimizer/util/plancat.c:568 +#, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" -msgstr "Zugriffsmethode „%s“ unterstützt keine Exclusion-Constraints" +msgstr "ON CONFLICT DO UDPATE nicht unterstützt mit Exclusion-Constraints" -#: optimizer/util/plancat.c:674 +#: optimizer/util/plancat.c:675 #, fuzzy, c-format #| msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "in Tabelle „%s“, auf die verwiesen wird, gibt es keinen Unique-Constraint, der auf die angegebenen Schlüssel passt" -#: parser/analyze.c:639 parser/analyze.c:1199 +#: parser/analyze.c:639 parser/analyze.c:1253 #, c-format msgid "VALUES lists must all be the same length" msgstr "VALUES-Listen müssen alle die gleiche Länge haben" @@ -11889,177 +11939,177 @@ msgstr "INSERT hat mehr Zielspalten als Ausdrücke" msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "Der einzufügende Wert ist ein Zeilenausdruck mit der gleichen Anzahl Spalten wie von INSERT erwartet. Haben Sie versehentlich zu viele Klammern gesetzt?" -#: parser/analyze.c:1020 parser/analyze.c:1400 +#: parser/analyze.c:1074 parser/analyze.c:1454 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO ist hier nicht erlaubt" -#: parser/analyze.c:1213 +#: parser/analyze.c:1267 #, c-format msgid "DEFAULT can only appear in a VALUES list within INSERT" msgstr "DEFAULT kann nur in VALUES-Liste innerhalb von INSERT auftreten" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1332 parser/analyze.c:2576 +#: parser/analyze.c:1386 parser/analyze.c:2630 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s kann nicht auf VALUES angewendet werden" -#: parser/analyze.c:1553 +#: parser/analyze.c:1607 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "ungültige ORDER-BY-Klausel mit UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:1554 +#: parser/analyze.c:1608 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "Es können nur Ergebnisspaltennamen verwendet werden, keine Ausdrücke oder Funktionen." -#: parser/analyze.c:1555 +#: parser/analyze.c:1609 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "Fügen Sie den Ausdrück/die Funktion jedem SELECT hinzu oder verlegen Sie die UNION in eine FROM-Klausel." -#: parser/analyze.c:1615 +#: parser/analyze.c:1669 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTO ist nur im ersten SELECT von UNION/INTERSECT/EXCEPT erlaubt" -#: parser/analyze.c:1679 +#: parser/analyze.c:1733 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "Teilanweisung von UNION/INTERSECT/EXCEPT kann nicht auf andere Relationen auf der selben Anfrageebene verweisen" -#: parser/analyze.c:1768 +#: parser/analyze.c:1822 #, c-format msgid "each %s query must have the same number of columns" msgstr "jede %s-Anfrage muss die gleiche Anzahl Spalten haben" -#: parser/analyze.c:2161 +#: parser/analyze.c:2215 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING muss mindestens eine Spalte haben" -#: parser/analyze.c:2198 +#: parser/analyze.c:2252 #, c-format msgid "cannot specify both SCROLL and NO SCROLL" msgstr "SCROLL und NO SCROLL können nicht beide angegeben werden" -#: parser/analyze.c:2216 +#: parser/analyze.c:2270 #, 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:2224 +#: parser/analyze.c:2278 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s wird nicht unterstützt" -#: parser/analyze.c:2227 +#: parser/analyze.c:2281 #, 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:2235 +#: parser/analyze.c:2289 #, 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:2246 +#: parser/analyze.c:2300 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" msgstr "DECLARE INSENSITIVE CURSOR ... %s wird nicht unterstützt" -#: parser/analyze.c:2249 +#: parser/analyze.c:2303 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Insensitive Cursor müssen READ ONLY sein." -#: parser/analyze.c:2315 +#: parser/analyze.c:2369 #, 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:2325 +#: parser/analyze.c:2379 #, 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:2335 +#: parser/analyze.c:2389 #, 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:2347 +#: parser/analyze.c:2401 #, c-format msgid "materialized views cannot be UNLOGGED" msgstr "materialisierte Sichten können nicht UNLOGGED sein" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2413 +#: parser/analyze.c:2467 #, 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:2420 +#: parser/analyze.c:2474 #, 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:2427 +#: parser/analyze.c:2481 #, 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:2434 +#: parser/analyze.c:2488 #, 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:2441 +#: parser/analyze.c:2495 #, 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:2448 +#: parser/analyze.c:2502 #, 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:2527 +#: parser/analyze.c:2581 #, 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:2558 +#: parser/analyze.c:2612 #, 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:2567 +#: parser/analyze.c:2621 #, 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:2585 +#: parser/analyze.c:2639 #, 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:2602 +#: parser/analyze.c:2656 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "Relation „%s“ in %s nicht in der FROM-Klausel gefunden" @@ -12077,427 +12127,435 @@ msgstr "Aggregatfunktionen mit DISTINCT müssen ihre Eingaben sortieren können. #: parser/parse_agg.c:244 #, c-format msgid "GROUPING must have fewer than 32 arguments" -msgstr "" +msgstr "GROUPING muss weniger als 32 Argumente haben" -#: parser/parse_agg.c:343 +#: parser/parse_agg.c:347 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "Aggregatfunktionen sind in JOIN-Bedingungen nicht erlaubt" -#: parser/parse_agg.c:345 -#, fuzzy -#| msgid "window functions are not allowed in JOIN conditions" +#: parser/parse_agg.c:349 msgid "grouping operations are not allowed in JOIN conditions" -msgstr "Fensterfunktionen sind in JOIN-Bedingungen nicht erlaubt" +msgstr "Gruppieroperationen sind in JOIN-Bedingungen nicht erlaubt" -#: parser/parse_agg.c:353 +#: parser/parse_agg.c:361 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:355 -#, fuzzy -#| msgid "aggregate functions are not allowed in FROM clause of their own query level" +#: parser/parse_agg.c:363 msgid "grouping operations are not allowed in FROM clause of their own query level" -msgstr "Aggregatfunktionen sind nicht in der FROM-Klausel ihrer eigenen Anfrageebene erlaubt" +msgstr "Gruppieroperationen sind nicht in der FROM-Klausel ihrer eigenen Anfrageebene erlaubt" -#: parser/parse_agg.c:360 +#: parser/parse_agg.c:368 msgid "aggregate functions are not allowed in functions in FROM" msgstr "Aggregatfunktionen sind in Funktionen in FROM nicht erlaubt" -#: parser/parse_agg.c:362 -#, fuzzy -#| msgid "window functions are not allowed in functions in FROM" +#: parser/parse_agg.c:370 msgid "grouping operations are not allowed in functions in FROM" -msgstr "Fensterfunktionen sind in Funktionen in FROM nicht erlaubt" +msgstr "Gruppieroperationen sind in Funktionen in FROM nicht erlaubt" -#: parser/parse_agg.c:382 +#: parser/parse_agg.c:378 +msgid "aggregate functions are not allowed in policy expressions" +msgstr "Aggregatfunktionen sind in Policy-Ausdrücken nicht erlaubt" + +#: parser/parse_agg.c:380 +msgid "grouping operations are not allowed in policy expressions" +msgstr "Gruppieroperationen sind in Policy-Ausdrücken nicht erlaubt" + +#: parser/parse_agg.c:397 msgid "aggregate functions are not allowed in window RANGE" msgstr "Aggregatfunktionen sind in der Fenster-RANGE-Klausel nicht erlaubt" -#: parser/parse_agg.c:384 -#, fuzzy -#| msgid "aggregate functions are not allowed in window RANGE" +#: parser/parse_agg.c:399 msgid "grouping operations are not allowed in window RANGE" -msgstr "Aggregatfunktionen sind in der Fenster-RANGE-Klausel nicht erlaubt" +msgstr "Gruppieroperationen sind in der Fenster-RANGE-Klausel nicht erlaubt" -#: parser/parse_agg.c:389 +#: parser/parse_agg.c:404 msgid "aggregate functions are not allowed in window ROWS" msgstr "Aggregatfunktionen sind in der Fenster-ROWS-Klausel nicht erlaubt" -#: parser/parse_agg.c:391 -#, fuzzy -#| msgid "aggregate functions are not allowed in window ROWS" +#: parser/parse_agg.c:406 msgid "grouping operations are not allowed in window ROWS" -msgstr "Aggregatfunktionen sind in der Fenster-ROWS-Klausel nicht erlaubt" +msgstr "Gruppieroperationen sind in der Fenster-ROWS-Klausel nicht erlaubt" -#: parser/parse_agg.c:424 +#: parser/parse_agg.c:439 msgid "aggregate functions are not allowed in check constraints" msgstr "Aggregatfunktionen sind in Check-Constraints nicht erlaubt" -#: parser/parse_agg.c:426 -#, fuzzy -#| msgid "window functions are not allowed in check constraints" +#: parser/parse_agg.c:441 msgid "grouping operations are not allowed in check constraints" -msgstr "Fensterfunktionen sind in Check-Constraints nicht erlaubt" +msgstr "Gruppieroperationen sind in Check-Constraints nicht erlaubt" -#: parser/parse_agg.c:433 +#: parser/parse_agg.c:448 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "Aggregatfunktionen sind in DEFAULT-Ausdrücken nicht erlaubt" -#: parser/parse_agg.c:435 -#, fuzzy -#| msgid "window functions are not allowed in DEFAULT expressions" +#: parser/parse_agg.c:450 msgid "grouping operations are not allowed in DEFAULT expressions" -msgstr "Fensterfunktionen sind in DEFAULT-Ausdrücken nicht erlaubt" +msgstr "Gruppieroperationen sind in DEFAULT-Ausdrücken nicht erlaubt" -#: parser/parse_agg.c:440 +#: parser/parse_agg.c:455 msgid "aggregate functions are not allowed in index expressions" msgstr "Aggregatfunktionen sind in Indexausdrücken nicht erlaubt" -#: parser/parse_agg.c:442 -#, fuzzy -#| msgid "window functions are not allowed in index expressions" +#: parser/parse_agg.c:457 msgid "grouping operations are not allowed in index expressions" -msgstr "Fensterfunktionen sind in Indexausdrücken nicht erlaubt" +msgstr "Gruppieroperationen sind in Indexausdrücken nicht erlaubt" -#: parser/parse_agg.c:447 +#: parser/parse_agg.c:462 msgid "aggregate functions are not allowed in index predicates" msgstr "Aggregatfunktionen sind in Indexprädikaten nicht erlaubt" -#: parser/parse_agg.c:449 -#, fuzzy -#| msgid "window functions are not allowed in index predicates" +#: parser/parse_agg.c:464 msgid "grouping operations are not allowed in index predicates" -msgstr "Fensterfunktionen sind in Indexprädikaten nicht erlaubt" +msgstr "Gruppieroperationen sind in Indexprädikaten nicht erlaubt" -#: parser/parse_agg.c:454 +#: parser/parse_agg.c:469 msgid "aggregate functions are not allowed in transform expressions" msgstr "Aggregatfunktionen sind in Umwandlungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:456 -#, fuzzy -#| msgid "window functions are not allowed in transform expressions" +#: parser/parse_agg.c:471 msgid "grouping operations are not allowed in transform expressions" -msgstr "Fensterfunktionen sind in Umwandlungsausdrücken nicht erlaubt" +msgstr "Gruppieroperationen sind in Umwandlungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:461 +#: parser/parse_agg.c:476 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "Aggregatfunktionen sind in EXECUTE-Parametern nicht erlaubt" -#: parser/parse_agg.c:463 -#, fuzzy -#| msgid "window functions are not allowed in EXECUTE parameters" +#: parser/parse_agg.c:478 msgid "grouping operations are not allowed in EXECUTE parameters" -msgstr "Fensterfunktionen sind in EXECUTE-Parametern nicht erlaubt" +msgstr "Gruppieroperationen sind in EXECUTE-Parametern nicht erlaubt" -#: parser/parse_agg.c:468 +#: parser/parse_agg.c:483 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:470 -#, fuzzy -#| msgid "window functions are not allowed in trigger WHEN conditions" +#: parser/parse_agg.c:485 msgid "grouping operations are not allowed in trigger WHEN conditions" -msgstr "Fensterfunktionen sind in der WHEN-Bedingung eines Triggers nicht erlaubt" +msgstr "Gruppieroperationen sind in der WHEN-Bedingung eines Triggers nicht erlaubt" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:493 parser/parse_clause.c:1469 +#: parser/parse_agg.c:508 parser/parse_clause.c:1548 #, 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:496 -#, fuzzy, c-format -#| msgid "window functions are not allowed in %s" +#: parser/parse_agg.c:511 +#, c-format msgid "grouping operations are not allowed in %s" -msgstr "Fensterfunktionen sind in %s nicht erlaubt" +msgstr "Gruppieroperationen sind in %s nicht erlaubt" -#: parser/parse_agg.c:604 +#: parser/parse_agg.c:619 #, 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:675 +#: parser/parse_agg.c:690 #, 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:753 +#: parser/parse_agg.c:768 msgid "window functions are not allowed in JOIN conditions" msgstr "Fensterfunktionen sind in JOIN-Bedingungen nicht erlaubt" -#: parser/parse_agg.c:760 +#: parser/parse_agg.c:775 msgid "window functions are not allowed in functions in FROM" msgstr "Fensterfunktionen sind in Funktionen in FROM nicht erlaubt" -#: parser/parse_agg.c:775 +#: parser/parse_agg.c:781 +msgid "window functions are not allowed in policy expressions" +msgstr "Fensterfunktionen sind in Policy-Ausdrücken nicht erlaubt" + +#: parser/parse_agg.c:793 msgid "window functions are not allowed in window definitions" msgstr "Fensterfunktionen sind in Fensterdefinitionen nicht erlaubt" -#: parser/parse_agg.c:806 +#: parser/parse_agg.c:824 msgid "window functions are not allowed in check constraints" msgstr "Fensterfunktionen sind in Check-Constraints nicht erlaubt" -#: parser/parse_agg.c:810 +#: parser/parse_agg.c:828 msgid "window functions are not allowed in DEFAULT expressions" msgstr "Fensterfunktionen sind in DEFAULT-Ausdrücken nicht erlaubt" -#: parser/parse_agg.c:813 +#: parser/parse_agg.c:831 msgid "window functions are not allowed in index expressions" msgstr "Fensterfunktionen sind in Indexausdrücken nicht erlaubt" -#: parser/parse_agg.c:816 +#: parser/parse_agg.c:834 msgid "window functions are not allowed in index predicates" msgstr "Fensterfunktionen sind in Indexprädikaten nicht erlaubt" -#: parser/parse_agg.c:819 +#: parser/parse_agg.c:837 msgid "window functions are not allowed in transform expressions" msgstr "Fensterfunktionen sind in Umwandlungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:822 +#: parser/parse_agg.c:840 msgid "window functions are not allowed in EXECUTE parameters" msgstr "Fensterfunktionen sind in EXECUTE-Parametern nicht erlaubt" -#: parser/parse_agg.c:825 +#: parser/parse_agg.c:843 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "Fensterfunktionen sind in der WHEN-Bedingung eines Triggers nicht erlaubt" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:845 parser/parse_clause.c:1478 +#: parser/parse_agg.c:863 parser/parse_clause.c:1557 #, c-format msgid "window functions are not allowed in %s" msgstr "Fensterfunktionen sind in %s nicht erlaubt" -#: parser/parse_agg.c:879 parser/parse_clause.c:2303 +#: parser/parse_agg.c:897 parser/parse_clause.c:2394 #, c-format msgid "window \"%s\" does not exist" msgstr "Fenster „%s“ existiert nicht" -#: parser/parse_agg.c:964 +#: parser/parse_agg.c:982 #, c-format msgid "too many grouping sets present (max 4096)" msgstr "" -#: parser/parse_agg.c:1112 +#: parser/parse_agg.c:1131 #, 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:1305 +#: parser/parse_agg.c:1324 #, 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:1308 +#: parser/parse_agg.c:1327 #, 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:1313 +#: parser/parse_agg.c:1332 #, 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:1477 +#: parser/parse_agg.c:1496 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" -msgstr "" +msgstr "Argumente von GROUPING müssen Gruppierausdrücke der zugehörigen Anfrageebene sein" -#: parser/parse_clause.c:449 -#, c-format -msgid "TABLESAMPLE clause can only be used on tables and materialized views" -msgstr "" - -#: parser/parse_clause.c:678 +#: parser/parse_clause.c:647 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "mehrere Spaltendefinitionslisten für die selbe Funktion sind nicht erlaubt" -#: parser/parse_clause.c:711 +#: parser/parse_clause.c:680 #, c-format msgid "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "ROWS FROM() mit mehreren Funktionen kann keine Spaltendefinitionsliste haben" -#: parser/parse_clause.c:712 +#: parser/parse_clause.c:681 #, c-format msgid "Put a separate column definition list for each function inside ROWS FROM()." msgstr "Geben Sie innerhalb von ROWS FROM() jeder Funktion eine eigene Spaltendefinitionsliste." -#: parser/parse_clause.c:718 +#: parser/parse_clause.c:687 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "UNNEST() mit mehreren Argumenten kann keine Spaltendefinitionsliste haben" -#: parser/parse_clause.c:719 +#: parser/parse_clause.c:688 #, c-format msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." msgstr "Verwenden Sie getrennte UNNEST()-Aufrufe innerhalb von ROWS FROM() und geben Sie jeder eine eigene Spaltendefinitionsliste." -#: parser/parse_clause.c:726 +#: parser/parse_clause.c:695 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY kann nicht mit einer Spaltendefinitionsliste verwendet werden" -#: parser/parse_clause.c:727 +#: parser/parse_clause.c:696 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "Geben Sie die Spaltendefinitionsliste innerhalb von ROWS FROM() an." -#: parser/parse_clause.c:1009 +#: parser/parse_clause.c:751 +#, c-format +msgid "tablesample method %s does not exist" +msgstr "Tablesample-Methode %s existiert nicht" + +#: parser/parse_clause.c:759 +#, c-format +msgid "function %s must return type \"tsm_handler\"" +msgstr "Funktion %s muss Typ „tsm_handler“ zurückgeben" + +#: parser/parse_clause.c:773 +#, c-format +msgid "tablesample method %s requires %d argument, not %d" +msgid_plural "tablesample method %s requires %d arguments, not %d" +msgstr[0] "Tablesample-Methode %s benötigt %d Argument, nicht %d" +msgstr[1] "Tablesample-Methode %s benötigt %d Argumente, nicht %d" + +#: parser/parse_clause.c:807 +#, c-format +msgid "tablesample method %s does not support REPEATABLE" +msgstr "Tablesample-Methode %s unterstützt REPEATABLE nicht" + +#: parser/parse_clause.c:938 +#, c-format +msgid "TABLESAMPLE clause can only be applied to tables and materialized views" +msgstr "TABLESAMPLE-Klausel kann nur auf Tabellen und materialisierte Sichten angewendet werden" + +#: parser/parse_clause.c:1108 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "Spaltenname „%s“ erscheint mehrmals in der USING-Klausel" -#: parser/parse_clause.c:1024 +#: parser/parse_clause.c:1123 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "gemeinsamer Spaltenname „%s“ erscheint mehrmals in der linken Tabelle" -#: parser/parse_clause.c:1033 +#: parser/parse_clause.c:1132 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "Spalte „%s“ aus der USING-Klausel existiert nicht in der linken Tabelle" -#: parser/parse_clause.c:1047 +#: parser/parse_clause.c:1146 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "gemeinsamer Spaltenname „%s“ erscheint mehrmals in der rechten Tabelle" -#: parser/parse_clause.c:1056 +#: parser/parse_clause.c:1155 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "Spalte „%s“ aus der USING-Klausel existiert nicht in der rechten Tabelle" -#: parser/parse_clause.c:1110 +#: parser/parse_clause.c:1209 #, c-format msgid "column alias list for \"%s\" has too many entries" msgstr "Spaltenaliasliste für „%s“ hat zu viele Einträge" #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1439 +#: parser/parse_clause.c:1518 #, c-format msgid "argument of %s must not contain variables" msgstr "Argument von %s darf keine Variablen enthalten" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1604 +#: parser/parse_clause.c:1683 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s „%s“ ist nicht eindeutig" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1633 +#: parser/parse_clause.c:1712 #, c-format msgid "non-integer constant in %s" msgstr "Konstante in %s ist keine ganze Zahl" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1655 +#: parser/parse_clause.c:1734 #, c-format msgid "%s position %d is not in select list" msgstr "%s Position %d ist nicht in der Select-Liste" -#: parser/parse_clause.c:2085 +#: parser/parse_clause.c:2176 #, c-format msgid "CUBE is limited to 12 elements" -msgstr "" +msgstr "CUBE ist auf 12 Elemente begrenzt" -#: parser/parse_clause.c:2291 +#: parser/parse_clause.c:2382 #, c-format msgid "window \"%s\" is already defined" msgstr "Fenster „%s“ ist bereits definiert" -#: parser/parse_clause.c:2353 +#: parser/parse_clause.c:2444 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "PARTITION-BY-Klausel von Fenster „%s“ kann nicht aufgehoben werden" -#: parser/parse_clause.c:2365 +#: parser/parse_clause.c:2456 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "ORDER-BY-Klausel von Fenster „%s“ kann nicht aufgehoben werden" -#: parser/parse_clause.c:2395 parser/parse_clause.c:2401 +#: parser/parse_clause.c:2486 parser/parse_clause.c:2492 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "kann Fenster „%s“ nicht kopieren, weil es eine Frame-Klausel hat" -#: parser/parse_clause.c:2403 +#: parser/parse_clause.c:2494 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Lassen Sie die Klammern in dieser OVER-Klausel weg." -#: parser/parse_clause.c:2469 +#: parser/parse_clause.c:2560 #, c-format msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" msgstr "in einer Aggregatfunktion mit DISTINCT müssen ORDER-BY-Ausdrücke in der Argumentliste erscheinen" -#: parser/parse_clause.c:2470 +#: parser/parse_clause.c:2561 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "bei SELECT DISTINCT müssen ORDER-BY-Ausdrücke in der Select-Liste erscheinen" -#: parser/parse_clause.c:2503 +#: parser/parse_clause.c:2594 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "eine Aggregatfunktion mit DISTINCT muss mindestens ein Argument haben" -#: parser/parse_clause.c:2504 +#: parser/parse_clause.c:2595 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT muss mindestens eine Spalte haben" -#: parser/parse_clause.c:2570 parser/parse_clause.c:2602 +#: parser/parse_clause.c:2661 parser/parse_clause.c:2693 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "Ausdrücke in SELECT DISTINCT ON müssen mit den ersten Ausdrücken in ORDER BY übereinstimmen" -#: parser/parse_clause.c:2681 +#: parser/parse_clause.c:2772 #, fuzzy, c-format #| msgid "%s is not allowed with DISTINCT clause" msgid "ASC/DESC is not allowed in ON CONFLICT clause" msgstr "%s ist nicht mit DISTINCT-Klausel erlaubt" -#: parser/parse_clause.c:2687 +#: parser/parse_clause.c:2778 #, fuzzy, c-format #| msgid "%s is not allowed with DISTINCT clause" msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" msgstr "%s ist nicht mit DISTINCT-Klausel erlaubt" -#: parser/parse_clause.c:2767 +#: parser/parse_clause.c:2858 #, c-format msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" msgstr "" -#: parser/parse_clause.c:2768 +#: parser/parse_clause.c:2859 #, c-format msgid "For example, ON CONFLICT ()." msgstr "" -#: parser/parse_clause.c:2779 +#: parser/parse_clause.c:2870 #, c-format msgid "ON CONFLICT not supported with system catalog tables" -msgstr "" +msgstr "ON CONFLICT wird nicht mit Systemkatalogtabellen unterstützt" -#: parser/parse_clause.c:2787 -#, fuzzy, c-format -#| msgid "cannot rewrite table \"%s\" used as a catalog table" +#: parser/parse_clause.c:2878 +#, c-format msgid "ON CONFLICT not supported on table \"%s\" used as a catalog table" -msgstr "Tabelle „%s“, die als Katalogtabelle verwendet wird, kann nicht neu geschrieben werden" +msgstr "ON CONFLICT wird nicht unterstützt mit Tabelle „%s“, die als Katalogtabelle verwendet wird" -#: parser/parse_clause.c:2920 +#: parser/parse_clause.c:3010 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "Operator %s ist kein gültiger Sortieroperator" -#: parser/parse_clause.c:2922 +#: parser/parse_clause.c:3012 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "Sortieroperatoren müssen die Mitglieder „<“ oder „>“ einer „btree“-Operatorfamilie sein." #: parser/parse_coerce.c:933 parser/parse_coerce.c:963 #: parser/parse_coerce.c:981 parser/parse_coerce.c:996 -#: parser/parse_expr.c:2014 parser/parse_expr.c:2527 parser/parse_target.c:874 +#: parser/parse_expr.c:2015 parser/parse_expr.c:2528 parser/parse_target.c:874 #, c-format msgid "cannot cast type %s to %s" msgstr "kann Typ %s nicht in Typ %s umwandeln" @@ -12721,8 +12779,8 @@ msgstr "FOR UPDATE/SHARE in einer rekursiven Anfrage ist nicht implementiert" msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "rekursiver Verweis auf Anfrage „%s“ darf nicht mehrmals erscheinen" -#: parser/parse_expr.c:387 parser/parse_relation.c:3077 -#: parser/parse_relation.c:3097 +#: parser/parse_expr.c:387 parser/parse_relation.c:3080 +#: parser/parse_relation.c:3100 #, c-format msgid "column %s.%s does not exist" msgstr "Spalte %s.%s existiert nicht" @@ -12748,7 +12806,7 @@ msgid "row expansion via \"*\" is not supported here" msgstr "Zeilenexpansion mit „*“ wird hier nicht unterstützt" #: parser/parse_expr.c:767 parser/parse_relation.c:666 -#: parser/parse_relation.c:763 parser/parse_target.c:1109 +#: parser/parse_relation.c:766 parser/parse_target.c:1109 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "Spaltenverweis „%s“ ist nicht eindeutig" @@ -12764,304 +12822,280 @@ msgstr "es gibt keinen Parameter $%d" msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF erfordert, dass Operator = boolean ergibt" -#: parser/parse_expr.c:1696 +#: parser/parse_expr.c:1697 msgid "cannot use subquery in check constraint" msgstr "Unteranfragen können nicht in Check-Constraints verwendet werden" -#: parser/parse_expr.c:1700 +#: parser/parse_expr.c:1701 msgid "cannot use subquery in DEFAULT expression" msgstr "Unteranfragen können nicht in DEFAULT-Ausdrücken verwendet werden" -#: parser/parse_expr.c:1703 +#: parser/parse_expr.c:1704 msgid "cannot use subquery in index expression" msgstr "Unteranfragen können nicht in Indexausdrücken verwendet werden" -#: parser/parse_expr.c:1706 +#: parser/parse_expr.c:1707 msgid "cannot use subquery in index predicate" msgstr "Unteranfragen können nicht im Indexprädikat verwendet werden" -#: parser/parse_expr.c:1709 +#: parser/parse_expr.c:1710 msgid "cannot use subquery in transform expression" msgstr "Unteranfragen können in Umwandlungsausdrücken nicht verwendet werden" -#: parser/parse_expr.c:1712 +#: parser/parse_expr.c:1713 msgid "cannot use subquery in EXECUTE parameter" msgstr "Unteranfragen können nicht in EXECUTE-Parameter verwendet werden" -#: parser/parse_expr.c:1715 +#: parser/parse_expr.c:1716 msgid "cannot use subquery in trigger WHEN condition" msgstr "Unteranfragen können nicht in der WHEN-Bedingung eines Triggers verwendet werden" -#: parser/parse_expr.c:1769 +#: parser/parse_expr.c:1770 #, c-format msgid "subquery must return only one column" msgstr "Unteranfrage darf nur eine Spalte zurückgeben" -#: parser/parse_expr.c:1853 +#: parser/parse_expr.c:1854 #, c-format msgid "subquery has too many columns" msgstr "Unteranfrage hat zu viele Spalten" -#: parser/parse_expr.c:1858 +#: parser/parse_expr.c:1859 #, c-format msgid "subquery has too few columns" msgstr "Unteranfrage hat zu wenige Spalten" -#: parser/parse_expr.c:1954 +#: parser/parse_expr.c:1955 #, c-format msgid "cannot determine type of empty array" msgstr "kann Typ eines leeren Arrays nicht bestimmen" -#: parser/parse_expr.c:1955 +#: parser/parse_expr.c:1956 #, 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:1969 +#: parser/parse_expr.c:1970 #, 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:2192 +#: parser/parse_expr.c:2193 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "unbenannter XML-Attributwert muss ein Spaltenverweis sein" -#: parser/parse_expr.c:2193 +#: parser/parse_expr.c:2194 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "unbenannter XML-Elementwert muss ein Spaltenverweis sein" -#: parser/parse_expr.c:2208 +#: parser/parse_expr.c:2209 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "XML-Attributname „%s“ einscheint mehrmals" -#: parser/parse_expr.c:2315 +#: parser/parse_expr.c:2316 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "kann das Ergebnis von XMLSERIALIZE nicht in Typ %s umwandeln" -#: parser/parse_expr.c:2600 parser/parse_expr.c:2796 +#: parser/parse_expr.c:2601 parser/parse_expr.c:2797 #, c-format msgid "unequal number of entries in row expressions" msgstr "ungleiche Anzahl Einträge in Zeilenausdrücken" -#: parser/parse_expr.c:2610 +#: parser/parse_expr.c:2611 #, c-format msgid "cannot compare rows of zero length" msgstr "kann Zeilen mit Länge null nicht vergleichen" -#: parser/parse_expr.c:2635 +#: parser/parse_expr.c:2636 #, 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:2642 +#: parser/parse_expr.c:2643 #, c-format msgid "row comparison operator must not return a set" msgstr "Zeilenvergleichsoperator darf keine Ergebnismenge zurückgeben" -#: parser/parse_expr.c:2701 parser/parse_expr.c:2742 +#: parser/parse_expr.c:2702 parser/parse_expr.c:2743 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "konnte Interpretation des Zeilenvergleichsoperators %s nicht bestimmen" -#: parser/parse_expr.c:2703 +#: parser/parse_expr.c:2704 #, 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:2744 +#: parser/parse_expr.c:2745 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Es gibt mehrere gleichermaßen plausible Kandidaten." -#: parser/parse_expr.c:2836 +#: parser/parse_expr.c:2837 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM erfordert, dass Operator = boolean ergibt" -#: parser/parse_expr.c:3126 parser/parse_expr.c:3144 +#: parser/parse_expr.c:3127 parser/parse_expr.c:3145 #, c-format msgid "operator precedence change: %s is now lower precedence than %s" msgstr "" -#: parser/parse_func.c:176 +#: parser/parse_func.c:174 #, c-format msgid "argument name \"%s\" used more than once" msgstr "Argumentname „%s“ mehrmals angegeben" -#: parser/parse_func.c:187 +#: parser/parse_func.c:185 #, c-format msgid "positional argument cannot follow named argument" msgstr "Positionsargument kann nicht hinter benanntem Argument stehen" -#: parser/parse_func.c:272 +#: parser/parse_func.c:270 #, c-format msgid "%s(*) specified, but %s is not an aggregate function" msgstr "%s(*) angegeben, aber %s ist keine Aggregatfunktion" -#: parser/parse_func.c:279 +#: parser/parse_func.c:277 #, c-format msgid "DISTINCT specified, but %s is not an aggregate function" msgstr "DISTINCT wurde angegeben, aber %s ist keine Aggregatfunktion" -#: parser/parse_func.c:285 +#: parser/parse_func.c:283 #, c-format msgid "WITHIN GROUP specified, but %s is not an aggregate function" msgstr "WITHIN GROUP wurde angegeben, aber %s ist keine Aggregatfunktion" -#: parser/parse_func.c:291 +#: parser/parse_func.c:289 #, c-format msgid "ORDER BY specified, but %s is not an aggregate function" msgstr "ORDER BY angegeben, aber %s ist keine Aggregatfunktion" -#: parser/parse_func.c:297 +#: parser/parse_func.c:295 #, c-format msgid "FILTER specified, but %s is not an aggregate function" msgstr "FILTER wurde angegeben, aber %s ist keine Aggregatfunktion" -#: parser/parse_func.c:303 +#: parser/parse_func.c:301 #, c-format msgid "OVER specified, but %s is not a window function nor an aggregate function" msgstr "OVER angegeben, aber %s ist keine Fensterfunktion oder Aggregatfunktion" -#: parser/parse_func.c:333 +#: parser/parse_func.c:331 #, c-format msgid "WITHIN GROUP is required for ordered-set aggregate %s" msgstr "WITHIN GROUP muss angegeben werden für Ordered-Set-Aggregatfunktion %s" -#: parser/parse_func.c:339 +#: parser/parse_func.c:337 #, c-format msgid "OVER is not supported for ordered-set aggregate %s" msgstr "OVER wird für Ordered-Set-Aggregatfunktion %s nicht unterstützt" -#: parser/parse_func.c:370 parser/parse_func.c:399 +#: parser/parse_func.c:368 parser/parse_func.c:397 #, c-format msgid "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." msgstr "Es gibt eine Ordered-Set-Aggregatfunktion %s, aber sie benötigt %d direkte Argumente, nicht %d." -#: parser/parse_func.c:424 +#: parser/parse_func.c:422 #, c-format msgid "To use the hypothetical-set aggregate %s, the number of hypothetical direct arguments (here %d) must match the number of ordering columns (here %d)." msgstr "Um die Hypothetical-Set-Aggregatfunktion %s zu verwenden, muss die Anzahl der hypothetischen direkten Argumente (hier %d) mit der Anzahl der Sortierspalten (hier %d) übereinstimmen." -#: parser/parse_func.c:438 +#: parser/parse_func.c:436 #, c-format msgid "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." msgstr "Es gibt eine Ordered-Set-Aggregatfunktion %s, aber sie benötigt mindestens %d direkte Argumente." -#: parser/parse_func.c:457 +#: parser/parse_func.c:455 #, c-format msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" msgstr "%s ist keine Ordered-Set-Aggregatfunktion und kann deshalb kein WITHIN GROUP haben" -#: parser/parse_func.c:470 +#: parser/parse_func.c:468 #, c-format msgid "window function %s requires an OVER clause" msgstr "Fensterfunktion %s erfordert eine OVER-Klausel" -#: parser/parse_func.c:477 +#: parser/parse_func.c:475 #, c-format msgid "window function %s cannot have WITHIN GROUP" msgstr "Fensterfunktion %s kann kein WITHIN GROUP haben" -#: parser/parse_func.c:498 +#: parser/parse_func.c:496 #, c-format msgid "function %s is not unique" msgstr "Funktion %s ist nicht eindeutig" -#: parser/parse_func.c:501 +#: parser/parse_func.c:499 #, c-format msgid "Could not choose a best candidate function. You might need to add explicit type casts." msgstr "Konnte keine beste Kandidatfunktion auswählen. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen." -#: parser/parse_func.c:512 +#: parser/parse_func.c:510 #, c-format msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." msgstr "Keine Aggregatfunktion stimmt mit dem angegebenen Namen und den Argumenttypen überein. Mõglicherweise steht ORDER BY an der falschen Stelle; ORDER BY muss hinter allen normalen Argumenten der Aggregatfunktion stehen." -#: parser/parse_func.c:523 +#: parser/parse_func.c:521 #, c-format msgid "No function matches the given name and argument types. You might need to add explicit type casts." msgstr "Keine Funktion stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen." -#: parser/parse_func.c:625 +#: parser/parse_func.c:623 #, c-format msgid "VARIADIC argument must be an array" msgstr "VARIADIC-Argument muss ein Array sein" -#: parser/parse_func.c:670 parser/parse_func.c:734 +#: parser/parse_func.c:668 parser/parse_func.c:732 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "beim Aufruf einer parameterlosen Aggregatfunktion muss %s(*) angegeben werden" -#: parser/parse_func.c:677 +#: parser/parse_func.c:675 #, c-format msgid "aggregates cannot return sets" msgstr "Aggregatfunktionen können keine Ergebnismengen zurückgeben" -#: parser/parse_func.c:692 +#: parser/parse_func.c:690 #, c-format msgid "aggregates cannot use named arguments" msgstr "Aggregatfunktionen können keine benannten Argumente verwenden" -#: parser/parse_func.c:724 +#: parser/parse_func.c:722 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "DISTINCT ist für Fensterfunktionen nicht implementiert" -#: parser/parse_func.c:744 +#: parser/parse_func.c:742 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "ORDER BY in Aggregatfunktion ist für Fensterfunktionen nicht implementiert" -#: parser/parse_func.c:753 +#: parser/parse_func.c:751 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "FILTER ist für Fensterfunktionen, die keine Aggregatfunktionen sind, nicht implementiert" -#: parser/parse_func.c:759 +#: parser/parse_func.c:757 #, c-format msgid "window functions cannot return sets" msgstr "Fensterfunktionen können keine Ergebnismengen zurückgeben" -#: parser/parse_func.c:795 -#, c-format -msgid "tablesample method \"%s\" does not exist" -msgstr "Tablesample-Methode „%s“ existiert nicht" - -#: parser/parse_func.c:870 -#, c-format -msgid "tablesample method \"%s\" expects %d argument got %d" -msgid_plural "tablesample method \"%s\" expects %d arguments got %d" -msgstr[0] "" -msgstr[1] "" - -#: parser/parse_func.c:892 -#, fuzzy, c-format -#| msgid "wrong number of parameters for prepared statement \"%s\"" -msgid "wrong parameter %d for tablesample method \"%s\"" -msgstr "falsche Anzahl Parameter für vorbereitete Anweisung „%s“" - -#: parser/parse_func.c:894 -#, fuzzy, c-format -#| msgid "Expected %d parameters but got %d." -msgid "Expected type %s got %s." -msgstr "%d Parameter erwartet aber %d erhalten." - -#: parser/parse_func.c:2144 +#: parser/parse_func.c:2007 #, c-format msgid "aggregate %s(*) does not exist" msgstr "Aggregatfunktion %s(*) existiert nicht" -#: parser/parse_func.c:2149 +#: parser/parse_func.c:2012 #, c-format msgid "aggregate %s does not exist" msgstr "Aggregatfunktion %s existiert nicht" -#: parser/parse_func.c:2168 +#: parser/parse_func.c:2031 #, c-format msgid "function %s is not an aggregate" msgstr "Funktion %s ist keine Aggregatfunktion" @@ -13097,10 +13131,10 @@ msgstr "Operator existiert nicht: %s" msgid "Use an explicit ordering operator or modify the query." msgstr "Verwenden Sie einen ausdrücklichen Sortieroperator oder ändern Sie die Anfrage." -#: parser/parse_oper.c:226 utils/adt/array_userfuncs.c:781 -#: utils/adt/array_userfuncs.c:918 utils/adt/arrayfuncs.c:3613 +#: parser/parse_oper.c:226 utils/adt/array_userfuncs.c:782 +#: utils/adt/array_userfuncs.c:920 utils/adt/arrayfuncs.c:3613 #: utils/adt/arrayfuncs.c:4051 utils/adt/arrayfuncs.c:6029 -#: utils/adt/rowtypes.c:1159 +#: utils/adt/rowtypes.c:1154 #, c-format msgid "could not identify an equality operator for type %s" msgstr "konnte keinen Ist-Gleich-Operator für Typ %s ermitteln" @@ -13165,12 +13199,12 @@ msgstr "Tabellenbezug %u ist nicht eindeutig" msgid "table name \"%s\" specified more than once" msgstr "Tabellenname „%s“ mehrmals angegeben" -#: parser/parse_relation.c:424 parser/parse_relation.c:3017 +#: parser/parse_relation.c:424 parser/parse_relation.c:3020 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "ungültiger Verweis auf FROM-Klausel-Eintrag für Tabelle „%s“" -#: parser/parse_relation.c:427 parser/parse_relation.c:3022 +#: parser/parse_relation.c:427 parser/parse_relation.c:3025 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "Es gibt einen Eintrag für Tabelle „%s“, aber auf ihn kann aus diesem Teil der Anfrage nicht verwiesen werden." @@ -13180,84 +13214,84 @@ msgstr "Es gibt einen Eintrag für Tabelle „%s“, aber auf ihn kann aus diese msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." msgstr "Der JOIN-Typ für LATERAL muss INNER oder LEFT sein." -#: parser/parse_relation.c:701 +#: parser/parse_relation.c:704 #, c-format msgid "system column \"%s\" reference in check constraint is invalid" msgstr "Verweis auf Systemspalte „%s“ im Check-Constraint ist ungültig" -#: parser/parse_relation.c:1059 parser/parse_relation.c:1339 -#: parser/parse_relation.c:1841 +#: parser/parse_relation.c:1062 parser/parse_relation.c:1342 +#: parser/parse_relation.c:1844 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "Tabelle „%s“ hat %d Spalten, aber %d Spalten wurden angegeben" -#: parser/parse_relation.c:1146 +#: parser/parse_relation.c:1149 #, c-format msgid "There is a WITH item named \"%s\", but it cannot be referenced from this part of the query." msgstr "Es gibt ein WITH-Element namens „%s“, aber darauf kann aus diesem Teil der Anfrage kein Bezug genommen werden." -#: parser/parse_relation.c:1148 +#: parser/parse_relation.c:1151 #, c-format msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." msgstr "Verwenden Sie WITH RECURSIVE oder sortieren Sie die WITH-Ausdrücke um, um Vorwärtsreferenzen zu entfernen." -#: parser/parse_relation.c:1459 +#: parser/parse_relation.c:1462 #, c-format msgid "a column definition list is only allowed for functions returning \"record\"" msgstr "eine Spaltendefinitionsliste ist nur erlaubt bei Funktionen, die „record“ zurückgeben" -#: parser/parse_relation.c:1468 +#: parser/parse_relation.c:1471 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "eine Spaltendefinitionsliste ist erforderlich bei Funktionen, die „record“ zurückgeben" -#: parser/parse_relation.c:1547 +#: parser/parse_relation.c:1550 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "Funktion „%s“ in FROM hat nicht unterstützten Rückgabetyp %s" -#: parser/parse_relation.c:1669 +#: parser/parse_relation.c:1672 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "VALUES-Liste „%s“ hat %d Spalten verfügbar, aber %d Spalten wurden angegeben" -#: parser/parse_relation.c:1724 +#: parser/parse_relation.c:1727 #, c-format msgid "joins can have at most %d columns" msgstr "Verbunde können höchstens %d Spalten haben" -#: parser/parse_relation.c:1814 +#: parser/parse_relation.c:1817 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "WITH-Anfrage „%s“ hat keine RETURNING-Klausel" -#: parser/parse_relation.c:2646 parser/parse_relation.c:2801 +#: parser/parse_relation.c:2649 parser/parse_relation.c:2804 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "Spalte %d von Relation „%s“ existiert nicht" -#: parser/parse_relation.c:3020 +#: parser/parse_relation.c:3023 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Vielleicht wurde beabsichtigt, auf den Tabellenalias „%s“ zu verweisen." -#: parser/parse_relation.c:3028 +#: parser/parse_relation.c:3031 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "fehlender Eintrag in FROM-Klausel für Tabelle „%s“" -#: parser/parse_relation.c:3080 +#: parser/parse_relation.c:3083 #, fuzzy, c-format #| msgid "Perhaps you meant to reference the table alias \"%s\"." msgid "Perhaps you meant to reference the column \"%s\".\"%s\"." msgstr "Vielleicht wurde beabsichtigt, auf den Tabellenalias „%s“ zu verweisen." -#: parser/parse_relation.c:3082 +#: parser/parse_relation.c:3085 #, c-format msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." msgstr "Es gibt eine Spalte namens „%s“ in Tabelle „%s“, aber auf sie kann aus diesem Teil der Anfrage nicht verwiesen werden." -#: parser/parse_relation.c:3099 +#: parser/parse_relation.c:3102 #, fuzzy, c-format #| msgid "Perhaps you meant to reference the table alias \"%s\"." msgid "Perhaps you meant to reference the column \"%s\".\"%s\" or the column \"%s\".\"%s\"." @@ -13364,28 +13398,24 @@ msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "mehrere Vorgabewerte angegeben für Spalte „%s“ von Tabelle „%s“" #: parser/parse_utilcmd.c:541 parser/parse_utilcmd.c:632 -#, fuzzy, c-format -#| msgid "constraints are not supported on foreign tables" +#, c-format msgid "primary key constraints are not supported on foreign tables" -msgstr "Constraints auf Fremdtabellen werden nicht unterstützt" +msgstr "Primärschlüssel für Fremdtabellen werden nicht unterstützt" #: parser/parse_utilcmd.c:550 parser/parse_utilcmd.c:642 -#, fuzzy, c-format -#| msgid "constraints are not supported on foreign tables" +#, c-format msgid "unique constraints are not supported on foreign tables" -msgstr "Constraints auf Fremdtabellen werden nicht unterstützt" +msgstr "Unique-Constraints auf Fremdtabellen werden nicht unterstützt" #: parser/parse_utilcmd.c:567 parser/parse_utilcmd.c:666 -#, fuzzy, c-format -#| msgid "constraints are not supported on foreign tables" +#, c-format msgid "foreign key constraints are not supported on foreign tables" -msgstr "Constraints auf Fremdtabellen werden nicht unterstützt" +msgstr "Fremdschlüssel-Constraints auf Fremdtabellen werden nicht unterstützt" #: parser/parse_utilcmd.c:652 -#, fuzzy, c-format -#| msgid "constraints are not supported on foreign tables" +#, c-format msgid "exclusion constraints are not supported on foreign tables" -msgstr "Constraints auf Fremdtabellen werden nicht unterstützt" +msgstr "Exclusion-Constraints auf Fremdtabellen werden nicht unterstützt" #: parser/parse_utilcmd.c:716 #, c-format @@ -13489,7 +13519,7 @@ msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELE msgstr "Regeln mit WHERE-Bedingungen können als Aktion nur SELECT, INSERT, UPDATE oder DELETE haben" #: parser/parse_utilcmd.c:2240 parser/parse_utilcmd.c:2339 -#: rewrite/rewriteHandler.c:474 rewrite/rewriteManip.c:1018 +#: rewrite/rewriteHandler.c:478 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "UNION/INTERSECTION/EXCEPT mit Bedingung sind nicht implementiert" @@ -13728,17 +13758,17 @@ msgstr "konnte Signal-Dispatch-Thread nicht erzeugen: Fehlercode %lu\n" msgid "could not create semaphore: error code %lu" msgstr "konnte Semaphore nicht erzeugen: Fehlercode %lu" -#: port/win32_sema.c:166 +#: port/win32_sema.c:167 #, c-format msgid "could not lock semaphore: error code %lu" msgstr "konnte Semaphore nicht sperren: Fehlercode %lu" -#: port/win32_sema.c:186 +#: port/win32_sema.c:187 #, c-format msgid "could not unlock semaphore: error code %lu" msgstr "konnte Semaphore nicht entsperren: Fehlercode %lu" -#: port/win32_sema.c:215 +#: port/win32_sema.c:216 #, c-format msgid "could not try-lock semaphore: error code %lu" msgstr "konnte Semaphore nicht versuchsweise sperren: Fehlercode %lu" @@ -13773,62 +13803,62 @@ msgstr "Fehlgeschlagener Systemaufruf war DuplicateHandle." msgid "Failed system call was MapViewOfFileEx." msgstr "Fehlgeschlagener Systemaufruf war MapViewOfFileEx." -#: postmaster/autovacuum.c:376 +#: postmaster/autovacuum.c:377 #, c-format msgid "could not fork autovacuum launcher process: %m" msgstr "konnte Autovacuum-Launcher-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/autovacuum.c:412 +#: postmaster/autovacuum.c:413 #, c-format msgid "autovacuum launcher started" msgstr "Autovacuum-Launcher startet" -#: postmaster/autovacuum.c:774 +#: postmaster/autovacuum.c:775 #, c-format msgid "autovacuum launcher shutting down" msgstr "Autovacuum-Launcher fährt herunter" -#: postmaster/autovacuum.c:1433 +#: postmaster/autovacuum.c:1443 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "konnte Autovacuum-Worker-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/autovacuum.c:1629 +#: postmaster/autovacuum.c:1639 #, c-format msgid "autovacuum: processing database \"%s\"" msgstr "Autovacuum: bearbeite Datenbank „%s“" -#: postmaster/autovacuum.c:2041 +#: postmaster/autovacuum.c:2051 #, c-format msgid "autovacuum: dropping orphan temp table \"%s\".\"%s\" in database \"%s\"" msgstr "Autovacuum: lösche verwaiste temporäre Tabelle „%s.%s“ in Datenbank „%s“" -#: postmaster/autovacuum.c:2053 +#: postmaster/autovacuum.c:2063 #, c-format msgid "autovacuum: found orphan temp table \"%s\".\"%s\" in database \"%s\"" msgstr "Autovacuum: verwaiste temporäre Tabelle „%s.%s“ in Datenbank „%s“ gefunden" -#: postmaster/autovacuum.c:2336 +#: postmaster/autovacuum.c:2346 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "automatisches Vacuum der Tabelle „%s.%s.%s“" -#: postmaster/autovacuum.c:2339 +#: postmaster/autovacuum.c:2349 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "automatisches Analysieren der Tabelle „%s.%s.%s“" -#: postmaster/autovacuum.c:2867 +#: postmaster/autovacuum.c:2877 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "Autovacuum wegen Fehlkonfiguration nicht gestartet" -#: postmaster/autovacuum.c:2868 +#: postmaster/autovacuum.c:2878 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Schalten Sie die Option „track_counts“ ein." -#: postmaster/bgworker.c:345 postmaster/bgworker.c:744 +#: postmaster/bgworker.c:345 postmaster/bgworker.c:745 #, c-format msgid "registering background worker \"%s\"" msgstr "registriere Background-Worker „%s“" @@ -13858,29 +13888,29 @@ msgstr "Background-Worker „%s“: ungültiges Neustart-Intervall" msgid "terminating background worker \"%s\" due to administrator command" msgstr "breche Background-Worker „%s“ ab aufgrund von Anweisung des Administrators" -#: postmaster/bgworker.c:751 +#: postmaster/bgworker.c:752 #, c-format msgid "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "Background-Worker „%s“: muss in shared_preload_libraries registriert sein" -#: postmaster/bgworker.c:763 +#: postmaster/bgworker.c:764 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "Background-Worker „%s“: nur dynamische Background-Worker können Benachrichtigung verlangen" -#: postmaster/bgworker.c:778 +#: postmaster/bgworker.c:779 #, c-format msgid "too many background workers" msgstr "zu viele Background-Worker" -#: postmaster/bgworker.c:779 +#: postmaster/bgworker.c:780 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." msgstr[0] "Mit den aktuellen Einstellungen können bis zu %d Background-Worker registriert werden." msgstr[1] "Mit den aktuellen Einstellungen können bis zu %d Background-Worker registriert werden." -#: postmaster/bgworker.c:783 +#: postmaster/bgworker.c:784 #, c-format msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Erhöhen Sie eventuell den Konfigurationsparameter „max_worker_processes“." @@ -13897,22 +13927,22 @@ msgstr[1] "Checkpoints passieren zu oft (alle %d Sekunden)" msgid "Consider increasing the configuration parameter \"max_wal_size\"." msgstr "Erhöhen Sie eventuell den Konfigurationsparameter „max_wal_size“." -#: postmaster/checkpointer.c:619 +#: postmaster/checkpointer.c:621 #, c-format msgid "transaction log switch forced (archive_timeout=%d)" msgstr "Umschalten des Transaktionslogs erzwungen (archive_timeout=%d)" -#: postmaster/checkpointer.c:1069 +#: postmaster/checkpointer.c:1081 #, c-format msgid "checkpoint request failed" msgstr "Checkpoint-Anforderung fehlgeschlagen" -#: postmaster/checkpointer.c:1070 +#: postmaster/checkpointer.c:1082 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Einzelheiten finden Sie in den letzten Meldungen im Serverlog." -#: postmaster/checkpointer.c:1265 +#: postmaster/checkpointer.c:1277 #, c-format msgid "compacted fsync request queue from %d entries to %d entries" msgstr "fsync-Anfrageschlange von %d Einträgen auf %d Einträge zusammengefasst" @@ -13948,7 +13978,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:598 postmaster/postmaster.c:3355 +#: postmaster/pgarch.c:598 postmaster/postmaster.c:3426 #, 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." @@ -14063,213 +14093,213 @@ msgstr "unbekanntes Reset-Ziel: „%s“" msgid "Target must be \"archiver\" or \"bgwriter\"." msgstr "Das Reset-Ziel muss „archiver“ oder „bgwriter“ sein." -#: postmaster/pgstat.c:3414 +#: postmaster/pgstat.c:3425 #, c-format msgid "could not read statistics message: %m" msgstr "konnte Statistiknachricht nicht lesen: %m" -#: postmaster/pgstat.c:3745 postmaster/pgstat.c:3922 +#: postmaster/pgstat.c:3756 postmaster/pgstat.c:3933 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "konnte temporäre Statistikdatei „%s“ nicht öffnen: %m" -#: postmaster/pgstat.c:3813 postmaster/pgstat.c:3967 +#: postmaster/pgstat.c:3824 postmaster/pgstat.c:3978 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "konnte temporäre Statistikdatei „%s“ nicht schreiben: %m" -#: postmaster/pgstat.c:3822 postmaster/pgstat.c:3976 +#: postmaster/pgstat.c:3833 postmaster/pgstat.c:3987 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "konnte temporäre Statistikdatei „%s“ nicht schließen: %m" -#: postmaster/pgstat.c:3830 postmaster/pgstat.c:3984 +#: postmaster/pgstat.c:3841 postmaster/pgstat.c:3995 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "konnte temporäre Statistikdatei „%s“ nicht in „%s“ umbenennen: %m" -#: postmaster/pgstat.c:4066 postmaster/pgstat.c:4249 postmaster/pgstat.c:4404 +#: postmaster/pgstat.c:4077 postmaster/pgstat.c:4260 postmaster/pgstat.c:4415 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "konnte Statistikdatei „%s“ nicht öffnen: %m" -#: postmaster/pgstat.c:4078 postmaster/pgstat.c:4088 postmaster/pgstat.c:4098 -#: postmaster/pgstat.c:4119 postmaster/pgstat.c:4134 postmaster/pgstat.c:4190 -#: postmaster/pgstat.c:4261 postmaster/pgstat.c:4281 postmaster/pgstat.c:4299 -#: postmaster/pgstat.c:4315 postmaster/pgstat.c:4333 postmaster/pgstat.c:4349 -#: postmaster/pgstat.c:4416 postmaster/pgstat.c:4428 postmaster/pgstat.c:4440 -#: postmaster/pgstat.c:4465 postmaster/pgstat.c:4487 +#: postmaster/pgstat.c:4089 postmaster/pgstat.c:4099 postmaster/pgstat.c:4109 +#: postmaster/pgstat.c:4130 postmaster/pgstat.c:4145 postmaster/pgstat.c:4201 +#: postmaster/pgstat.c:4272 postmaster/pgstat.c:4292 postmaster/pgstat.c:4310 +#: postmaster/pgstat.c:4326 postmaster/pgstat.c:4344 postmaster/pgstat.c:4360 +#: postmaster/pgstat.c:4427 postmaster/pgstat.c:4439 postmaster/pgstat.c:4451 +#: postmaster/pgstat.c:4476 postmaster/pgstat.c:4498 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "verfälschte Statistikdatei „%s“" -#: postmaster/pgstat.c:4604 +#: postmaster/pgstat.c:4615 #, c-format msgid "using stale statistics instead of current ones because stats collector is not responding" msgstr "verwende veraltete Statistiken anstatt aktueller, weil der Statistiksammelprozess nicht antwortet" -#: postmaster/pgstat.c:4922 +#: postmaster/pgstat.c:4933 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "Datenbank-Hash-Tabelle beim Aufräumen verfälscht --- Abbruch" -#: postmaster/postmaster.c:651 +#: postmaster/postmaster.c:670 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: ungültiges Argument für Option -f: „%s“\n" -#: postmaster/postmaster.c:737 +#: postmaster/postmaster.c:756 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: ungültiges Argument für Option -t: „%s“\n" -#: postmaster/postmaster.c:788 +#: postmaster/postmaster.c:807 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: ungültiges Argument: „%s“\n" -#: postmaster/postmaster.c:823 +#: postmaster/postmaster.c:842 #, c-format msgid "%s: superuser_reserved_connections must be less than max_connections\n" msgstr "%s: superuser_reserved_connections muss kleiner als max_connections sein\n" -#: postmaster/postmaster.c:828 +#: postmaster/postmaster.c:847 #, c-format msgid "%s: max_wal_senders must be less than max_connections\n" msgstr "%s: max_wal_senders muss kleiner als max_connections sein\n" -#: postmaster/postmaster.c:833 +#: postmaster/postmaster.c:852 #, c-format msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" -msgstr "" +msgstr "WAL-Archivierung kann nicht eingeschaltet werden, wenn wal_level „minimal“ ist" -#: postmaster/postmaster.c:836 +#: postmaster/postmaster.c:855 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"archive\", \"hot_standby\", or \"logical\"" msgstr "WAL-Streaming (max_wal_senders > 0) benötigt wal_level „archive“, „hot_standby“ oder „logical“" -#: postmaster/postmaster.c:844 +#: postmaster/postmaster.c:863 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ungültige datetoken-Tabellen, bitte reparieren\n" -#: postmaster/postmaster.c:926 postmaster/postmaster.c:1024 -#: utils/init/miscinit.c:1309 +#: postmaster/postmaster.c:955 postmaster/postmaster.c:1053 +#: utils/init/miscinit.c:1314 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "ungültige Listensyntax für Parameter „%s“" -#: postmaster/postmaster.c:957 +#: postmaster/postmaster.c:986 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "konnte Listen-Socket für „%s“ nicht erzeugen" -#: postmaster/postmaster.c:963 +#: postmaster/postmaster.c:992 #, c-format msgid "could not create any TCP/IP sockets" msgstr "konnte keine TCP/IP-Sockets erstellen" -#: postmaster/postmaster.c:1046 +#: postmaster/postmaster.c:1075 #, 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:1052 +#: postmaster/postmaster.c:1081 #, c-format msgid "could not create any Unix-domain sockets" msgstr "konnte keine Unix-Domain-Sockets erzeugen" -#: postmaster/postmaster.c:1064 +#: postmaster/postmaster.c:1093 #, c-format msgid "no socket created for listening" msgstr "keine Listen-Socket erzeugt" -#: postmaster/postmaster.c:1104 +#: postmaster/postmaster.c:1133 #, 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:1133 +#: postmaster/postmaster.c:1162 #, 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:1137 +#: postmaster/postmaster.c:1166 #, 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:1167 +#: postmaster/postmaster.c:1217 #, c-format msgid "ending log output to stderr" msgstr "Logausgabe nach stderr endet" -#: postmaster/postmaster.c:1168 +#: postmaster/postmaster.c:1218 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "Die weitere Logausgabe geht an Logziel „%s“." -#: postmaster/postmaster.c:1194 utils/init/postinit.c:200 +#: postmaster/postmaster.c:1244 utils/init/postinit.c:200 #, c-format msgid "could not load pg_hba.conf" msgstr "konnte pg_hba.conf nicht laden" -#: postmaster/postmaster.c:1220 +#: postmaster/postmaster.c:1270 #, c-format msgid "postmaster became multithreaded during startup" msgstr "Postmaster ist während des Starts multithreaded geworden" -#: postmaster/postmaster.c:1221 +#: postmaster/postmaster.c:1271 #, 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:1281 +#: postmaster/postmaster.c:1368 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: konnte kein passendes Programm „postgres“ finden" -#: postmaster/postmaster.c:1304 utils/misc/tzparser.c:341 +#: postmaster/postmaster.c:1391 utils/misc/tzparser.c:341 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Dies kann auf eine unvollständige PostgreSQL-Installation hindeuten, oder darauf, dass die Datei „%s“ von ihrer richtigen Stelle verschoben worden ist." -#: postmaster/postmaster.c:1332 +#: postmaster/postmaster.c:1419 #, c-format msgid "data directory \"%s\" does not exist" msgstr "Datenverzeichnis „%s“ existiert nicht" -#: postmaster/postmaster.c:1337 +#: postmaster/postmaster.c:1424 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "konnte Zugriffsrechte von Verzeichnis „%s“ nicht lesen: %m" -#: postmaster/postmaster.c:1345 +#: postmaster/postmaster.c:1432 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "angegebenes Datenverzeichnis „%s“ ist kein Verzeichnis" -#: postmaster/postmaster.c:1361 +#: postmaster/postmaster.c:1448 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "Datenverzeichnis „%s“ hat falschen Eigentümer" -#: postmaster/postmaster.c:1363 +#: postmaster/postmaster.c:1450 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "Der Server muss von dem Benutzer gestartet werden, dem das Datenverzeichnis gehört." -#: postmaster/postmaster.c:1383 +#: postmaster/postmaster.c:1470 #, c-format msgid "data directory \"%s\" has group or world access" msgstr "Datenverzeichnis „%s“ erlaubt Zugriff von Gruppe oder Welt" -#: postmaster/postmaster.c:1385 +#: postmaster/postmaster.c:1472 #, c-format msgid "Permissions should be u=rwx (0700)." msgstr "Rechte sollten u=rwx (0700) sein." -#: postmaster/postmaster.c:1396 +#: postmaster/postmaster.c:1483 #, c-format msgid "" "%s: could not find the database system\n" @@ -14280,310 +14310,309 @@ msgstr "" "Es wurde im Verzeichnis „%s“ erwartet,\n" "aber die Datei „%s“ konnte nicht geöffnet werden: %s\n" -#: postmaster/postmaster.c:1570 +#: postmaster/postmaster.c:1659 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() fehlgeschlagen im Postmaster: %m" -#: postmaster/postmaster.c:1787 postmaster/postmaster.c:1818 +#: postmaster/postmaster.c:1857 postmaster/postmaster.c:1888 #, c-format msgid "incomplete startup packet" msgstr "unvollständiges Startpaket" -#: postmaster/postmaster.c:1799 +#: postmaster/postmaster.c:1869 #, c-format msgid "invalid length of startup packet" msgstr "ungültige Länge des Startpakets" -#: postmaster/postmaster.c:1857 +#: postmaster/postmaster.c:1927 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "konnte SSL-Verhandlungsantwort nicht senden: %m" -#: postmaster/postmaster.c:1886 +#: postmaster/postmaster.c:1956 #, 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:1949 +#: postmaster/postmaster.c:2019 #, c-format msgid "invalid value for parameter \"replication\"" msgstr "ungültiger Wert für Parameter „replication“" -#: postmaster/postmaster.c:1950 +#: postmaster/postmaster.c:2020 #, c-format msgid "Valid values are: false, 0, true, 1, database." msgstr "Gültige Werte sind: false, 0, true, 1, database." -#: postmaster/postmaster.c:1970 +#: postmaster/postmaster.c:2040 #, 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:1998 +#: postmaster/postmaster.c:2068 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "kein PostgreSQL-Benutzername im Startpaket angegeben" -#: postmaster/postmaster.c:2057 +#: postmaster/postmaster.c:2127 #, c-format msgid "the database system is starting up" msgstr "das Datenbanksystem startet" -#: postmaster/postmaster.c:2062 +#: postmaster/postmaster.c:2132 #, c-format msgid "the database system is shutting down" msgstr "das Datenbanksystem fährt herunter" -#: postmaster/postmaster.c:2067 +#: postmaster/postmaster.c:2137 #, c-format msgid "the database system is in recovery mode" msgstr "das Datenbanksystem ist im Wiederherstellungsmodus" -#: postmaster/postmaster.c:2072 storage/ipc/procarray.c:284 +#: postmaster/postmaster.c:2142 storage/ipc/procarray.c:284 #: storage/ipc/sinvaladt.c:298 storage/lmgr/proc.c:334 #, c-format msgid "sorry, too many clients already" msgstr "tut mir leid, schon zu viele Verbindungen" -#: postmaster/postmaster.c:2134 +#: postmaster/postmaster.c:2204 #, c-format msgid "wrong key in cancel request for process %d" msgstr "falscher Schlüssel in Stornierungsanfrage für Prozess %d" -#: postmaster/postmaster.c:2142 +#: postmaster/postmaster.c:2212 #, 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:2362 +#: postmaster/postmaster.c:2432 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUP empfangen, Konfigurationsdateien werden neu geladen" -#: postmaster/postmaster.c:2388 +#: postmaster/postmaster.c:2457 #, c-format msgid "pg_hba.conf not reloaded" msgstr "pg_hba.conf nicht neu geladen" -#: postmaster/postmaster.c:2392 +#: postmaster/postmaster.c:2461 #, c-format msgid "pg_ident.conf not reloaded" msgstr "pg_ident.conf nicht neu geladen" -#: postmaster/postmaster.c:2433 +#: postmaster/postmaster.c:2502 #, c-format msgid "received smart shutdown request" msgstr "intelligentes Herunterfahren verlangt" -#: postmaster/postmaster.c:2486 +#: postmaster/postmaster.c:2554 #, c-format msgid "received fast shutdown request" msgstr "schnelles Herunterfahren verlangt" -#: postmaster/postmaster.c:2512 +#: postmaster/postmaster.c:2580 #, c-format msgid "aborting any active transactions" msgstr "etwaige aktive Transaktionen werden abgebrochen" -#: postmaster/postmaster.c:2546 +#: postmaster/postmaster.c:2614 #, c-format msgid "received immediate shutdown request" msgstr "sofortiges Herunterfahren verlangt" -#: postmaster/postmaster.c:2606 -#, fuzzy, c-format -#| msgid "shut down in recovery" +#: postmaster/postmaster.c:2675 +#, c-format msgid "shutdown at recovery target" -msgstr "in der Wiederherstellung heruntergefahren" +msgstr "Herunterfahren beim Wiederherstellungsziel" -#: postmaster/postmaster.c:2621 postmaster/postmaster.c:2642 +#: postmaster/postmaster.c:2691 postmaster/postmaster.c:2714 msgid "startup process" msgstr "Startprozess" -#: postmaster/postmaster.c:2624 +#: postmaster/postmaster.c:2694 #, c-format msgid "aborting startup due to startup process failure" msgstr "Serverstart abgebrochen wegen Startprozessfehler" -#: postmaster/postmaster.c:2682 +#: postmaster/postmaster.c:2755 #, c-format msgid "database system is ready to accept connections" msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" -#: postmaster/postmaster.c:2697 +#: postmaster/postmaster.c:2770 msgid "background writer process" msgstr "Background-Writer-Prozess" -#: postmaster/postmaster.c:2751 +#: postmaster/postmaster.c:2824 msgid "checkpointer process" msgstr "Checkpointer-Prozess" -#: postmaster/postmaster.c:2767 +#: postmaster/postmaster.c:2840 msgid "WAL writer process" msgstr "WAL-Schreibprozess" -#: postmaster/postmaster.c:2781 +#: postmaster/postmaster.c:2854 msgid "WAL receiver process" msgstr "WAL-Receiver-Prozess" -#: postmaster/postmaster.c:2796 +#: postmaster/postmaster.c:2869 msgid "autovacuum launcher process" msgstr "Autovacuum-Launcher-Prozess" -#: postmaster/postmaster.c:2811 +#: postmaster/postmaster.c:2884 msgid "archiver process" msgstr "Archivierprozess" -#: postmaster/postmaster.c:2827 +#: postmaster/postmaster.c:2900 msgid "statistics collector process" msgstr "Statistiksammelprozess" -#: postmaster/postmaster.c:2841 +#: postmaster/postmaster.c:2914 msgid "system logger process" msgstr "Systemlogger-Prozess" -#: postmaster/postmaster.c:2903 +#: postmaster/postmaster.c:2976 msgid "worker process" msgstr "Worker-Prozess" -#: postmaster/postmaster.c:2989 postmaster/postmaster.c:3009 -#: postmaster/postmaster.c:3016 postmaster/postmaster.c:3034 +#: postmaster/postmaster.c:3059 postmaster/postmaster.c:3079 +#: postmaster/postmaster.c:3086 postmaster/postmaster.c:3104 msgid "server process" msgstr "Serverprozess" -#: postmaster/postmaster.c:3088 +#: postmaster/postmaster.c:3158 #, 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:3343 +#: postmaster/postmaster.c:3414 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) beendete mit Status %d" -#: postmaster/postmaster.c:3345 postmaster/postmaster.c:3356 -#: postmaster/postmaster.c:3367 postmaster/postmaster.c:3376 -#: postmaster/postmaster.c:3386 +#: postmaster/postmaster.c:3416 postmaster/postmaster.c:3427 +#: postmaster/postmaster.c:3438 postmaster/postmaster.c:3447 +#: postmaster/postmaster.c:3457 #, 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:3353 +#: postmaster/postmaster.c:3424 #, 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:3363 +#: postmaster/postmaster.c:3434 #, 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:3374 +#: postmaster/postmaster.c:3445 #, c-format msgid "%s (PID %d) was terminated by signal %d" msgstr "%s (PID %d) wurde von Signal %d beendet" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3384 +#: postmaster/postmaster.c:3455 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) beendete mit unbekanntem Status %d" -#: postmaster/postmaster.c:3572 +#: postmaster/postmaster.c:3642 #, c-format msgid "abnormal database system shutdown" msgstr "abnormales Herunterfahren des Datenbanksystems" -#: postmaster/postmaster.c:3611 +#: postmaster/postmaster.c:3682 #, c-format msgid "all server processes terminated; reinitializing" msgstr "alle Serverprozesse beendet; initialisiere neu" -#: postmaster/postmaster.c:3852 +#: postmaster/postmaster.c:3894 #, 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:3894 +#: postmaster/postmaster.c:3936 msgid "could not fork new process for connection: " msgstr "konnte neuen Prozess für Verbindung nicht starten (fork-Fehler): " -#: postmaster/postmaster.c:4000 +#: postmaster/postmaster.c:4042 #, c-format msgid "connection received: host=%s port=%s" msgstr "Verbindung empfangen: Host=%s Port=%s" -#: postmaster/postmaster.c:4005 +#: postmaster/postmaster.c:4047 #, c-format msgid "connection received: host=%s" msgstr "Verbindung empfangen: Host=%s" -#: postmaster/postmaster.c:4294 +#: postmaster/postmaster.c:4336 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "konnte Serverprozess „%s“ nicht ausführen: %m" -#: postmaster/postmaster.c:4854 +#: postmaster/postmaster.c:4893 #, c-format msgid "database system is ready to accept read only connections" msgstr "Datenbanksystem ist bereit, um lesende Verbindungen anzunehmen" -#: postmaster/postmaster.c:5164 +#: postmaster/postmaster.c:5176 #, c-format msgid "could not fork startup process: %m" msgstr "konnte Startprozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5168 +#: postmaster/postmaster.c:5180 #, c-format msgid "could not fork background writer process: %m" msgstr "konnte Background-Writer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5172 +#: postmaster/postmaster.c:5184 #, c-format msgid "could not fork checkpointer process: %m" msgstr "konnte Checkpointer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5176 +#: postmaster/postmaster.c:5188 #, c-format msgid "could not fork WAL writer process: %m" msgstr "konnte WAL-Writer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5180 +#: postmaster/postmaster.c:5192 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "konnte WAL-Receiver-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5184 +#: postmaster/postmaster.c:5196 #, c-format msgid "could not fork process: %m" msgstr "konnte Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5346 postmaster/postmaster.c:5369 +#: postmaster/postmaster.c:5358 postmaster/postmaster.c:5381 #, 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:5353 postmaster/postmaster.c:5376 +#: postmaster/postmaster.c:5365 postmaster/postmaster.c:5388 #, c-format msgid "invalid processing mode in background worker" msgstr "ungültiger Verarbeitungsmodus in Background-Worker" -#: postmaster/postmaster.c:5428 +#: postmaster/postmaster.c:5440 #, c-format msgid "starting background worker process \"%s\"" msgstr "starte Background-Worker-Prozess „%s“" -#: postmaster/postmaster.c:5439 +#: postmaster/postmaster.c:5451 #, c-format msgid "could not fork worker process: %m" msgstr "konnte Worker-Prozess nicht starten (fork-Fehler): %m" @@ -14716,66 +14745,66 @@ msgstr "Zeichenkette in Anführungszeichen nicht abgeschlossen" msgid "syntax error: unexpected character \"%s\"" msgstr "Syntaxfehler: unerwartetes Zeichen „%s“" -#: replication/basebackup.c:226 +#: replication/basebackup.c:227 #, c-format msgid "could not stat control file \"%s\": %m" msgstr "konnte „stat“ für Kontrolldatei „%s“ nicht ausführen: %m" -#: replication/basebackup.c:335 +#: replication/basebackup.c:336 #, c-format msgid "could not find any WAL files" msgstr "konnte keine WAL-Dateien finden" -#: replication/basebackup.c:348 replication/basebackup.c:362 -#: replication/basebackup.c:371 +#: replication/basebackup.c:349 replication/basebackup.c:363 +#: replication/basebackup.c:372 #, c-format msgid "could not find WAL file \"%s\"" msgstr "konnte WAL-Datei „%s“ nicht finden" -#: replication/basebackup.c:410 replication/basebackup.c:436 +#: replication/basebackup.c:411 replication/basebackup.c:437 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "unerwartete WAL-Dateigröße „%s“" -#: replication/basebackup.c:422 replication/basebackup.c:1175 +#: replication/basebackup.c:423 replication/basebackup.c:1177 #, c-format msgid "base backup could not send data, aborting backup" msgstr "Basissicherung konnte keine Daten senden, Sicherung abgebrochen" -#: replication/basebackup.c:524 replication/basebackup.c:533 -#: replication/basebackup.c:542 replication/basebackup.c:551 -#: replication/basebackup.c:560 replication/basebackup.c:571 -#: replication/basebackup.c:588 +#: replication/basebackup.c:525 replication/basebackup.c:534 +#: replication/basebackup.c:543 replication/basebackup.c:552 +#: replication/basebackup.c:561 replication/basebackup.c:572 +#: replication/basebackup.c:589 #, c-format msgid "duplicate option \"%s\"" msgstr "doppelte Option „%s“" -#: replication/basebackup.c:577 utils/misc/guc.c:5516 +#: replication/basebackup.c:578 utils/misc/guc.c:5475 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d ist außerhalb des gültigen Bereichs für Parameter „%s“ (%d ... %d)" -#: replication/basebackup.c:843 replication/basebackup.c:945 +#: replication/basebackup.c:844 replication/basebackup.c:946 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "konnte „stat“ für Datei oder Verzeichnis „%s“ nicht ausführen: %m" -#: replication/basebackup.c:1111 +#: replication/basebackup.c:1113 #, c-format msgid "skipping special file \"%s\"" msgstr "überspringe besondere Datei „%s“" -#: replication/basebackup.c:1165 +#: replication/basebackup.c:1167 #, c-format msgid "archive member \"%s\" too large for tar format" msgstr "Archivmitglied „%s“ zu groß für Tar-Format" -#: replication/basebackup.c:1238 +#: replication/basebackup.c:1240 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "Dateiname zu lang für Tar-Format: „%s“" -#: replication/basebackup.c:1243 +#: replication/basebackup.c:1245 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "" @@ -14863,57 +14892,57 @@ msgstr "konnte keine Daten vom WAL-Stream empfangen: %s" msgid "could not send data to WAL stream: %s" msgstr "konnte keine Daten an den WAL-Stream senden: %s" -#: replication/logical/logical.c:83 +#: replication/logical/logical.c:80 #, c-format msgid "logical decoding requires wal_level >= logical" msgstr "logische Dekodierung erfordert wal_level >= logical" -#: replication/logical/logical.c:88 +#: replication/logical/logical.c:85 #, c-format msgid "logical decoding requires a database connection" msgstr "logische Dekodierung benötigt eine Datenbankverbindung" -#: replication/logical/logical.c:106 +#: replication/logical/logical.c:103 #, c-format msgid "logical decoding cannot be used while in recovery" msgstr "logische Dekodierung kann nicht während der Wiederherstellung verwendet werden" -#: replication/logical/logical.c:237 replication/logical/logical.c:386 +#: replication/logical/logical.c:234 replication/logical/logical.c:383 #, 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:242 replication/logical/logical.c:391 +#: replication/logical/logical.c:239 replication/logical/logical.c:388 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "Replikations-Slot „%s“ wurde nicht in dieser Datenbank erzeugt" -#: replication/logical/logical.c:249 +#: replication/logical/logical.c:246 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "logischer Replikations-Slot kann nicht in einer Transaktion erzeugt werden, die Schreibvorgänge ausgeführt hat" -#: replication/logical/logical.c:427 +#: replication/logical/logical.c:425 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "starte logisches Dekodieren für Slot „%s“" -#: replication/logical/logical.c:429 +#: replication/logical/logical.c:427 #, 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:564 +#: replication/logical/logical.c:562 #, 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:571 +#: replication/logical/logical.c:569 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "Slot „%s“, Ausgabe-Plugin „%s“, im Callback %s" -#: replication/logical/logicalfuncs.c:192 replication/walsender.c:2108 +#: replication/logical/logicalfuncs.c:192 replication/walsender.c:2109 #, c-format msgid "could not read from log segment %s, offset %u, length %lu: %m" msgstr "konnte nicht aus Logsegment %s bei Position %u, Länge %lu lesen: %m" @@ -14933,8 +14962,8 @@ msgstr "Array muss eindimensional sein" msgid "array must not contain nulls" msgstr "Array darf keine NULL-Werte enthalten" -#: replication/logical/logicalfuncs.c:363 utils/adt/json.c:2211 -#: utils/adt/jsonb.c:1364 +#: replication/logical/logicalfuncs.c:363 utils/adt/json.c:2273 +#: utils/adt/jsonb.c:1378 #, c-format msgid "array must have even number of elements" msgstr "Array muss eine gerade Anzahl Elemente haben" @@ -14945,114 +14974,105 @@ msgid "logical decoding output plugin \"%s\" produces binary output, but \"%s\" msgstr "Ausgabe-Plugin „%s“ erzeugt binäre Ausgabe, aber „%s“ erwartet Textdaten" #: replication/logical/origin.c:181 -#, fuzzy, c-format -#| msgid "must be superuser to alter replication users" +#, c-format msgid "only superusers can query or manipulate replication origins" -msgstr "nur Superuser können Replikationsbenutzer ändern" +msgstr "nur Superuser können Replication-Origins abfragen oder ändern" #: replication/logical/origin.c:186 -#, fuzzy, c-format -#| msgid "cannot use a logical replication slot for physical replication" +#, c-format msgid "cannot query or manipulate replication origin when max_replication_slots = 0" -msgstr "logischer Replikations-Slot kann nicht für physische Replikation verwendet werden" +msgstr "Replication-Origin kann nicht abgefragt oder geändert werden, wenn max_replication_slots = 0" #: replication/logical/origin.c:191 -#, fuzzy, c-format -#| msgid "cannot execute %s during recovery" +#, c-format msgid "cannot manipulate replication origins during recovery" -msgstr "%s kann nicht während der Wiederherstellung ausgeführt werden" +msgstr "Replication-Origins können nicht während der Wiederherstellung geändert werden" -#: replication/logical/origin.c:315 +#: replication/logical/origin.c:316 #, c-format -msgid "no free replication oid could be found" -msgstr "" +msgid "no free replication origin oid could be found" +msgstr "konnte keine freie Replication-Origin-OID finden" -#: replication/logical/origin.c:352 +#: replication/logical/origin.c:353 #, c-format msgid "cannot drop replication origin with oid %d, in use by pid %d" -msgstr "" +msgstr "kann Replication-Origin mit OID %d nicht löschen, wird von PID %d verwendet" -#: replication/logical/origin.c:684 +#: replication/logical/origin.c:690 #, c-format msgid "replication checkpoint has wrong magic %u instead of %u" msgstr "Replikations-Checkpoint hat falsche magische Zahl %u statt %u" -#: replication/logical/origin.c:716 -#, fuzzy, c-format -#| msgid "could not read file \"%s\", read %d of %u: %m" +#: replication/logical/origin.c:722 +#, c-format msgid "could not read file \"%s\": read %d of %zu" -msgstr "konnte Datei „%s“ nicht lesen, %d von %u gelesen: %m" +msgstr "konnte Datei „%s“ nicht lesen: %d von %zu gelesen" -#: replication/logical/origin.c:725 -#, fuzzy, c-format -#| msgid "replication slots can only be used if max_replication_slots > 0" +#: replication/logical/origin.c:731 +#, c-format msgid "no free replication state could be found, increase max_replication_slots" -msgstr "Replikations-Slots können nur verwendet werden, wenn max_replication_slots > 0" +msgstr "konnte keinen freien Replication-State finden, erhöhen Sie max_replication_slots" -#: replication/logical/origin.c:743 -#, fuzzy, c-format -#| msgid "replication slot file \"%s\" has wrong magic %u instead of %u" +#: replication/logical/origin.c:749 +#, c-format msgid "replication_slot_checkpoint has wrong checksum %u, expected %u" -msgstr "Replikations-Slot-Datei „%s“ hat falsche magische Zahl %u statt %u" +msgstr "Replikations-Slot-Checkpoint hat falsche Prüfsumme %u, erwartet wurde %u" -#: replication/logical/origin.c:867 -#, fuzzy, c-format -#| msgid "replication slot \"%s\" is already active" +#: replication/logical/origin.c:873 +#, c-format msgid "replication origin with oid %d is already active for pid %d" -msgstr "Replikations-Slot „%s“ ist bereits aktiv" +msgstr "Replication-Origin mit OID %d ist bereits aktiv für PID %d" -#: replication/logical/origin.c:878 replication/logical/origin.c:1058 -#, fuzzy, c-format -#| msgid "replication slots can only be used if max_replication_slots > 0" +#: replication/logical/origin.c:884 replication/logical/origin.c:1064 +#, c-format msgid "no free replication state slot could be found for replication origin with oid %u" -msgstr "Replikations-Slots können nur verwendet werden, wenn max_replication_slots > 0" +msgstr "konnte keinen freien Replication-State-Slot für Replication-Origin mit OID %u finden" -#: replication/logical/origin.c:880 replication/logical/origin.c:1060 +#: replication/logical/origin.c:886 replication/logical/origin.c:1066 #: replication/slot.c:1241 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Erhöhen Sie max_replication_slots und versuchen Sie es erneut." -#: replication/logical/origin.c:1017 +#: replication/logical/origin.c:1023 #, c-format msgid "cannot setup replication origin when one is already setup" -msgstr "" +msgstr "kann Replication-Origin nicht einrichten, wenn schon einer eingerichtet ist" -#: replication/logical/origin.c:1046 -#, fuzzy, c-format -#| msgid "replication slot \"%s\" is already active" -msgid "replication identiefer %d is already active for pid %d" -msgstr "Replikations-Slot „%s“ ist bereits aktiv" +#: replication/logical/origin.c:1052 +#, c-format +msgid "replication identifier %d is already active for pid %d" +msgstr "Replikationsidentifikator %d ist bereits aktiv für PID %d" -#: replication/logical/origin.c:1092 replication/logical/origin.c:1288 -#: replication/logical/origin.c:1308 +#: replication/logical/origin.c:1098 replication/logical/origin.c:1293 +#: replication/logical/origin.c:1313 #, c-format msgid "no replication origin is configured" -msgstr "" +msgstr "kein Replication-Origin konfiguriert" -#: replication/logical/reorderbuffer.c:2167 +#: replication/logical/reorderbuffer.c:2170 #, 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:2263 -#: replication/logical/reorderbuffer.c:2283 +#: replication/logical/reorderbuffer.c:2266 +#: replication/logical/reorderbuffer.c:2286 #, 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:2267 -#: replication/logical/reorderbuffer.c:2287 +#: replication/logical/reorderbuffer.c:2270 +#: replication/logical/reorderbuffer.c:2290 #, 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:2891 +#: replication/logical/reorderbuffer.c:2894 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "konnte nicht aus Datei „%s“ lesen: %d statt %d Bytes gelesen" -#: replication/logical/snapbuild.c:601 +#: replication/logical/snapbuild.c:600 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs" @@ -15135,8 +15155,8 @@ msgstr "Replikations-Slot-Name „%s“ enthält ungültiges Zeichen" #: replication/slot.c:198 #, c-format -msgid "Replication slot names may only contain letters, numbers, and the underscore character." -msgstr "Replikations-Slot-Namen dürfen nur Buchstaben, Zahlen und Unterstriche enthalten." +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:245 #, c-format @@ -15159,10 +15179,9 @@ msgid "replication slot \"%s\" does not exist" msgstr "Replikations-Slot „%s“ existiert nicht" #: replication/slot.c:352 -#, fuzzy, c-format -#| msgid "replication slot \"%s\" is already active" +#, c-format msgid "replication slot \"%s\" is already active for pid %d" -msgstr "Replikations-Slot „%s“ ist bereits aktiv" +msgstr "Replikations-Slot „%s“ ist bereits aktiv für PID %d" #: replication/slot.c:501 replication/slot.c:857 replication/slot.c:1202 #, c-format @@ -15319,390 +15338,398 @@ msgstr "Die History dieses Servers zweigte von Zeitleiste %u bei %X/%X ab." 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" -#: replication/walsender.c:947 +#: replication/walsender.c:948 #, c-format msgid "terminating walsender process after promotion" msgstr "beende WAL-Sender-Prozess nach Beförderung" -#: replication/walsender.c:1274 -#, fuzzy, c-format -#| msgid "%s: could not send replication command \"%s\": %s" +#: replication/walsender.c:1275 +#, c-format msgid "received replication command: %s" -msgstr "%s: konnte Replikationsbefehl „%s“ nicht senden: %s" +msgstr "Replikationsbefehl empfangen: %s" -#: replication/walsender.c:1367 replication/walsender.c:1383 +#: replication/walsender.c:1368 replication/walsender.c:1384 #, c-format msgid "unexpected EOF on standby connection" msgstr "unerwartetes EOF auf Standby-Verbindung" -#: replication/walsender.c:1397 +#: replication/walsender.c:1398 #, c-format msgid "unexpected standby message type \"%c\", after receiving CopyDone" msgstr "unerwarteter Standby-Message-Typ „%c“, nach Empfang von CopyDone" -#: replication/walsender.c:1435 +#: replication/walsender.c:1436 #, c-format msgid "invalid standby message type \"%c\"" msgstr "ungültiger Standby-Message-Typ „%c“" -#: replication/walsender.c:1476 +#: replication/walsender.c:1477 #, c-format msgid "unexpected message type \"%c\"" msgstr "unerwarteter Message-Typ „%c“" -#: replication/walsender.c:1763 +#: replication/walsender.c:1764 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "breche WAL-Sender-Prozess ab wegen Zeitüberschreitung bei der Replikation" -#: replication/walsender.c:1856 +#: replication/walsender.c:1857 #, c-format msgid "standby \"%s\" has now caught up with primary" msgstr "Standby-Server „%s“ hat jetzt den Primärserver eingeholt" -#: replication/walsender.c:1957 +#: replication/walsender.c:1958 #, c-format msgid "number of requested standby connections exceeds max_wal_senders (currently %d)" msgstr "Anzahl angeforderter Standby-Verbindungen überschreitet max_wal_senders (aktuell %d)" -#: rewrite/rewriteDefine.c:111 rewrite/rewriteDefine.c:947 +#: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:961 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "Regel „%s“ für Relation „%s“ existiert bereits" -#: rewrite/rewriteDefine.c:296 +#: rewrite/rewriteDefine.c:297 #, c-format msgid "rule actions on OLD are not implemented" msgstr "Regelaktionen für OLD sind nicht implementiert" -#: rewrite/rewriteDefine.c:297 +#: rewrite/rewriteDefine.c:298 #, c-format msgid "Use views or triggers instead." msgstr "Verwenden Sie stattdessen Sichten oder Trigger." -#: rewrite/rewriteDefine.c:301 +#: rewrite/rewriteDefine.c:302 #, c-format msgid "rule actions on NEW are not implemented" msgstr "Regelaktionen für NEW sind nicht implementiert" -#: rewrite/rewriteDefine.c:302 +#: rewrite/rewriteDefine.c:303 #, c-format msgid "Use triggers instead." msgstr "Verwenden Sie stattdessen Trigger." -#: rewrite/rewriteDefine.c:315 +#: rewrite/rewriteDefine.c:316 #, c-format msgid "INSTEAD NOTHING rules on SELECT are not implemented" msgstr "INSTEAD-NOTHING-Regeln für SELECT sind nicht implementiert" -#: rewrite/rewriteDefine.c:316 +#: rewrite/rewriteDefine.c:317 #, c-format msgid "Use views instead." msgstr "Verwenden Sie stattdessen Sichten." -#: rewrite/rewriteDefine.c:324 +#: rewrite/rewriteDefine.c:325 #, c-format msgid "multiple actions for rules on SELECT are not implemented" msgstr "mehrere Regelaktionen für SELECT-Regeln sind nicht implementiert" -#: rewrite/rewriteDefine.c:335 +#: rewrite/rewriteDefine.c:336 #, c-format msgid "rules on SELECT must have action INSTEAD SELECT" msgstr "Regeln für SELECT müssen als Aktion INSTEAD SELECT haben" -#: rewrite/rewriteDefine.c:343 +#: rewrite/rewriteDefine.c:344 #, c-format msgid "rules on SELECT must not contain data-modifying statements in WITH" msgstr "Regeln für SELECT dürfen keine datenmodifizierenden Anweisungen in WITH enthalten" -#: rewrite/rewriteDefine.c:351 +#: rewrite/rewriteDefine.c:352 #, c-format msgid "event qualifications are not implemented for rules on SELECT" msgstr "Ereignisqualifikationen sind nicht implementiert für SELECT-Regeln" -#: rewrite/rewriteDefine.c:378 +#: rewrite/rewriteDefine.c:379 #, c-format msgid "\"%s\" is already a view" msgstr "„%s“ ist bereits eine Sicht" -#: rewrite/rewriteDefine.c:402 +#: rewrite/rewriteDefine.c:403 #, c-format msgid "view rule for \"%s\" must be named \"%s\"" msgstr "Sicht-Regel für „%s“ muss „%s“ heißen" -#: rewrite/rewriteDefine.c:430 +#: rewrite/rewriteDefine.c:432 #, c-format msgid "could not convert table \"%s\" to a view because it is not empty" msgstr "konnte Tabelle „%s“ nicht in Sicht umwandeln, weil sie nicht leer ist" -#: rewrite/rewriteDefine.c:438 +#: rewrite/rewriteDefine.c:440 #, c-format msgid "could not convert table \"%s\" to a view because it has triggers" msgstr "konnte Tabelle „%s“ nicht in Sicht umwandeln, weil sie Trigger hat" -#: rewrite/rewriteDefine.c:440 +#: rewrite/rewriteDefine.c:442 #, c-format msgid "In particular, the table cannot be involved in any foreign key relationships." msgstr "Insbesondere darf die Tabelle nicht in Fremschlüsselverhältnisse eingebunden sein." -#: rewrite/rewriteDefine.c:445 +#: rewrite/rewriteDefine.c:447 #, c-format msgid "could not convert table \"%s\" to a view because it has indexes" msgstr "konnte Tabelle „%s“ nicht in Sicht umwandeln, weil sie Indexe hat" -#: rewrite/rewriteDefine.c:451 +#: rewrite/rewriteDefine.c:453 #, c-format msgid "could not convert table \"%s\" to a view because it has child tables" msgstr "konnte Tabelle „%s“ nicht in Sicht umwandeln, weil sie abgeleitete Tabellen hat" -#: rewrite/rewriteDefine.c:478 +#: rewrite/rewriteDefine.c:459 +#, c-format +msgid "could not convert table \"%s\" to a view because it has row security enabled" +msgstr "konnte Tabelle „%s“ nicht in Sicht umwandeln, weil sie Sicherheit auf Zeilenebene eingeschaltet hat" + +#: rewrite/rewriteDefine.c:465 +#, c-format +msgid "could not convert table \"%s\" to a view because it has row security policies" +msgstr "konnte Tabelle „%s“ nicht in Sicht umwandeln, weil sie Policys für Sicherheit auf Zeilenebene hat" + +#: rewrite/rewriteDefine.c:492 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "Regel kann nicht mehrere RETURNING-Listen enthalten" -#: rewrite/rewriteDefine.c:483 +#: rewrite/rewriteDefine.c:497 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "RETURNING-Listen werden in Regeln mit Bedingung nicht unterstützt" -#: rewrite/rewriteDefine.c:487 +#: rewrite/rewriteDefine.c:501 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "RETURNING-Listen werden nur in INSTEAD-Regeln unterstützt" -#: rewrite/rewriteDefine.c:653 +#: rewrite/rewriteDefine.c:667 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "Targetliste von SELECT-Regel hat zu viele Einträge" -#: rewrite/rewriteDefine.c:654 +#: rewrite/rewriteDefine.c:668 #, c-format msgid "RETURNING list has too many entries" msgstr "RETURNING-Liste hat zu viele Einträge" -#: rewrite/rewriteDefine.c:670 +#: rewrite/rewriteDefine.c:684 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "kann Relation mit gelöschten Spalten nicht in Sicht umwandeln" -#: rewrite/rewriteDefine.c:676 +#: rewrite/rewriteDefine.c:690 #, c-format msgid "SELECT rule's target entry %d has different column name from column \"%s\"" msgstr "Spaltenname in Targeteintrag %d von SELECT-Regel unterscheidet sich von Spalte „%s“" -#: rewrite/rewriteDefine.c:678 +#: rewrite/rewriteDefine.c:692 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "SELECT-Targeteintrag heißt „%s“." -#: rewrite/rewriteDefine.c:687 +#: rewrite/rewriteDefine.c:701 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "Typ von Targeteintrag %d von SELECT-Regel unterscheidet sich von Spalte „%s“" -#: rewrite/rewriteDefine.c:689 +#: rewrite/rewriteDefine.c:703 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "Eintrag %d in RETURNING-Liste hat anderen Typ als Spalte „%s“" -#: rewrite/rewriteDefine.c:692 rewrite/rewriteDefine.c:716 +#: rewrite/rewriteDefine.c:706 rewrite/rewriteDefine.c:730 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "SELECT-Targeteintrag hat Typ %s, aber Spalte hat Typ %s." -#: rewrite/rewriteDefine.c:695 rewrite/rewriteDefine.c:720 +#: rewrite/rewriteDefine.c:709 rewrite/rewriteDefine.c:734 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "Eintrag in RETURNING-Liste hat Typ %s, aber Spalte hat Typ %s." -#: rewrite/rewriteDefine.c:711 +#: rewrite/rewriteDefine.c:725 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "Größe von Targeteintrag %d von SELECT-Regel unterscheidet sich von Spalte „%s“" -#: rewrite/rewriteDefine.c:713 +#: rewrite/rewriteDefine.c:727 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "Eintrag %d in RETURNING-Liste hat andere Größe als Spalte „%s“" -#: rewrite/rewriteDefine.c:730 +#: rewrite/rewriteDefine.c:744 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "Targetliste von SELECT-Regeln hat zu wenige Einträge" -#: rewrite/rewriteDefine.c:731 +#: rewrite/rewriteDefine.c:745 #, c-format msgid "RETURNING list has too few entries" msgstr "RETURNING-Liste hat zu wenige Einträge" -#: rewrite/rewriteDefine.c:823 rewrite/rewriteDefine.c:938 +#: rewrite/rewriteDefine.c:837 rewrite/rewriteDefine.c:952 #: rewrite/rewriteSupport.c:112 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "Regel „%s“ für Relation „%s“ existiert nicht" -#: rewrite/rewriteDefine.c:957 +#: rewrite/rewriteDefine.c:971 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "Umbenennen einer ON-SELECT-Regel ist nicht erlaubt" -#: rewrite/rewriteHandler.c:517 +#: rewrite/rewriteHandler.c:521 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "WITH-Anfragename „%s“ erscheint sowohl in der Regelaktion als auch in der umzuschreibenden Anfrage" -#: rewrite/rewriteHandler.c:577 +#: rewrite/rewriteHandler.c:581 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "RETURNING-Listen können nicht in mehreren Regeln auftreten" -#: rewrite/rewriteHandler.c:917 rewrite/rewriteHandler.c:935 +#: rewrite/rewriteHandler.c:921 rewrite/rewriteHandler.c:939 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "mehrere Zuweisungen zur selben Spalte „%s“" -#: rewrite/rewriteHandler.c:1710 rewrite/rewriteHandler.c:3268 +#: rewrite/rewriteHandler.c:1714 rewrite/rewriteHandler.c:3307 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "unendliche Rekursion entdeckt in Regeln für Relation „%s“" -#: rewrite/rewriteHandler.c:1793 -#, fuzzy, c-format -#| msgid "infinite recursion detected in rules for relation \"%s\"" +#: rewrite/rewriteHandler.c:1799 +#, c-format msgid "infinite recursion detected in policy for relation \"%s\"" -msgstr "unendliche Rekursion entdeckt in Regeln für Relation „%s“" +msgstr "unendliche Rekursion entdeckt in Policys für Relation „%s“" -#: rewrite/rewriteHandler.c:2090 +#: rewrite/rewriteHandler.c:2113 msgid "Junk view columns are not updatable." msgstr "Junk-Sichtspalten sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2095 +#: rewrite/rewriteHandler.c:2118 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:2098 +#: rewrite/rewriteHandler.c:2121 msgid "View columns that refer to system columns are not updatable." msgstr "Sichtspalten, die auf Systemspalten verweisen, sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2101 +#: rewrite/rewriteHandler.c:2124 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:2159 +#: rewrite/rewriteHandler.c:2182 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Sichten, die DISTINCT enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2162 +#: rewrite/rewriteHandler.c:2185 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Sichten, die GROUP BY enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2165 +#: rewrite/rewriteHandler.c:2188 msgid "Views containing HAVING are not automatically updatable." msgstr "Sichten, die HAVING enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2168 +#: rewrite/rewriteHandler.c:2191 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:2171 +#: rewrite/rewriteHandler.c:2194 msgid "Views containing WITH are not automatically updatable." msgstr "Sichten, die WITH enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2174 +#: rewrite/rewriteHandler.c:2197 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Sichten, die LIMIT oder OFFSET enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2186 +#: rewrite/rewriteHandler.c:2209 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Sichten, die Aggregatfunktionen zurückgeben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2189 +#: rewrite/rewriteHandler.c:2212 msgid "Views that return window functions are not automatically updatable." msgstr "Sichten, die Fensterfunktionen zurückgeben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2192 +#: rewrite/rewriteHandler.c:2215 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:2199 rewrite/rewriteHandler.c:2203 -#: rewrite/rewriteHandler.c:2210 +#: rewrite/rewriteHandler.c:2222 rewrite/rewriteHandler.c:2226 +#: rewrite/rewriteHandler.c:2233 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:2213 +#: rewrite/rewriteHandler.c:2236 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Sichten, die TABLESAMPLE enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2237 +#: rewrite/rewriteHandler.c:2260 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:2684 +#: rewrite/rewriteHandler.c:2707 #, 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:2692 +#: rewrite/rewriteHandler.c:2715 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "kann Spalte „%s“ von Sicht „%s“ nicht aktualisieren" -#: rewrite/rewriteHandler.c:3067 +#: rewrite/rewriteHandler.c:3106 #, 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:3081 +#: rewrite/rewriteHandler.c:3120 #, 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:3085 +#: rewrite/rewriteHandler.c:3124 #, 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:3090 +#: rewrite/rewriteHandler.c:3129 #, 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:3305 +#: rewrite/rewriteHandler.c:3344 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "INSERT RETURNING kann in Relation „%s“ nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:3307 +#: rewrite/rewriteHandler.c:3346 #, 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:3312 +#: rewrite/rewriteHandler.c:3351 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "UPDATE RETURNING kann in Relation „%s“ nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:3314 +#: rewrite/rewriteHandler.c:3353 #, 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:3319 +#: rewrite/rewriteHandler.c:3358 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "DELETE RETURNING kann in Relation „%s“ nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:3321 +#: rewrite/rewriteHandler.c:3360 #, 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:3339 +#: rewrite/rewriteHandler.c:3378 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "" -#: rewrite/rewriteHandler.c:3396 +#: rewrite/rewriteHandler.c:3435 #, 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" @@ -15854,63 +15881,63 @@ msgstr "nicht standardkonforme Verwendung von Escape in Zeichenkettenkonstante" msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Verwenden Sie die Syntax für Escape-Zeichenketten, z.B. E'\\r\\n'." -#: snowball/dict_snowball.c:179 +#: snowball/dict_snowball.c:177 #, c-format msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" msgstr "kein Snowball-Stemmer für Sprache „%s“ und Kodierung „%s“ verfügbar" -#: snowball/dict_snowball.c:202 tsearch/dict_ispell.c:73 +#: snowball/dict_snowball.c:200 tsearch/dict_ispell.c:73 #: tsearch/dict_simple.c:48 #, c-format msgid "multiple StopWords parameters" msgstr "mehrere „StopWords“-Parameter" -#: snowball/dict_snowball.c:211 +#: snowball/dict_snowball.c:209 #, c-format msgid "multiple Language parameters" msgstr "mehrere „Language“-Parameter" -#: snowball/dict_snowball.c:218 +#: snowball/dict_snowball.c:216 #, c-format msgid "unrecognized Snowball parameter: \"%s\"" msgstr "unbekannter Snowball-Parameter: „%s“" -#: snowball/dict_snowball.c:226 +#: snowball/dict_snowball.c:224 #, c-format msgid "missing Language parameter" msgstr "Parameter „Language“ fehlt" -#: storage/buffer/bufmgr.c:440 storage/buffer/bufmgr.c:553 +#: storage/buffer/bufmgr.c:442 storage/buffer/bufmgr.c:555 #, 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:702 +#: storage/buffer/bufmgr.c:704 #, 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:704 +#: storage/buffer/bufmgr.c:706 #, 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:791 +#: storage/buffer/bufmgr.c:793 #, 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:3563 +#: storage/buffer/bufmgr.c:3569 #, c-format msgid "could not write block %u of %s" msgstr "konnte Block %u von %s nicht schreiben" -#: storage/buffer/bufmgr.c:3565 +#: storage/buffer/bufmgr.c:3571 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Mehrere Fehlschläge --- Schreibfehler ist möglicherweise dauerhaft." -#: storage/buffer/bufmgr.c:3586 storage/buffer/bufmgr.c:3605 +#: storage/buffer/bufmgr.c:3592 storage/buffer/bufmgr.c:3611 #, c-format msgid "writing block %u of relation %s" msgstr "schreibe Block %u von Relation %s" @@ -15920,62 +15947,57 @@ msgstr "schreibe Block %u von Relation %s" msgid "no empty local buffer available" msgstr "kein leerer lokaler Puffer verfügbar" -#: storage/file/fd.c:506 +#: storage/file/fd.c:528 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit fehlgeschlagen: %m" -#: storage/file/fd.c:596 +#: storage/file/fd.c:618 #, 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:597 +#: storage/file/fd.c:619 #, c-format msgid "System allows %d, we need at least %d." msgstr "System erlaubt %d, wir benötigen mindestens %d." -#: storage/file/fd.c:638 storage/file/fd.c:1672 storage/file/fd.c:1765 -#: storage/file/fd.c:1913 +#: storage/file/fd.c:660 storage/file/fd.c:1694 storage/file/fd.c:1787 +#: storage/file/fd.c:1935 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "keine Dateideskriptoren mehr: %m; freigeben und nochmal versuchen" -#: storage/file/fd.c:1212 +#: storage/file/fd.c:1234 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "temporäre Datei: Pfad „%s“, Größe %lu" -#: storage/file/fd.c:1361 +#: storage/file/fd.c:1383 #, 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:1648 storage/file/fd.c:1698 +#: storage/file/fd.c:1670 storage/file/fd.c:1720 #, 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:1738 +#: storage/file/fd.c:1760 #, 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:1889 +#: storage/file/fd.c:1911 #, 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:1962 +#: storage/file/fd.c:1997 #, c-format msgid "could not read directory \"%s\": %m" msgstr "konnte Verzeichnis „%s“ nicht lesen: %m" -#: storage/file/fd.c:2548 -#, c-format -msgid "this platform does not support symbolic links; ignoring \"%s\"" -msgstr "" - #: storage/ipc/dsm.c:363 #, c-format msgid "dynamic shared memory control segment is corrupt" @@ -16054,8 +16076,8 @@ msgid "could not duplicate handle for \"%s\": %m" msgstr "konnte Handle für „%s“ nicht duplizieren: %m" #: storage/ipc/shm_toc.c:108 storage/ipc/shm_toc.c:189 storage/ipc/shmem.c:205 -#: storage/lmgr/lock.c:867 storage/lmgr/lock.c:901 storage/lmgr/lock.c:2596 -#: storage/lmgr/lock.c:3712 storage/lmgr/lock.c:3777 storage/lmgr/lock.c:4067 +#: storage/lmgr/lock.c:867 storage/lmgr/lock.c:901 storage/lmgr/lock.c:2598 +#: storage/lmgr/lock.c:3714 storage/lmgr/lock.c:3779 storage/lmgr/lock.c:4069 #: storage/lmgr/predicate.c:2328 storage/lmgr/predicate.c:2343 #: storage/lmgr/predicate.c:3736 storage/lmgr/predicate.c:4879 #: storage/lmgr/proc.c:200 utils/hash/dynahash.c:998 @@ -16239,13 +16261,13 @@ msgstr "Sperrmodus %s kann während der Wiederherstellung nicht auf Datenbankobj msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." msgstr "Nur Sperren gleich oder unter RowExclusiveLock können während der Wiederherstellung auf Datenbankobjekte gesetzt werden." -#: storage/lmgr/lock.c:868 storage/lmgr/lock.c:902 storage/lmgr/lock.c:2597 -#: storage/lmgr/lock.c:3713 storage/lmgr/lock.c:3778 storage/lmgr/lock.c:4068 +#: storage/lmgr/lock.c:868 storage/lmgr/lock.c:902 storage/lmgr/lock.c:2599 +#: storage/lmgr/lock.c:3715 storage/lmgr/lock.c:3780 storage/lmgr/lock.c:4070 #, c-format msgid "You might need to increase max_locks_per_transaction." msgstr "Sie müssen möglicherweise max_locks_per_transaction erhöhen." -#: storage/lmgr/lock.c:3038 storage/lmgr/lock.c:3150 +#: storage/lmgr/lock.c:3040 storage/lmgr/lock.c:3152 #, c-format msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" msgstr "PREPARE kann nicht ausgeführt werden, wenn für das selbe Objekt Sperren auf Sitzungsebene und auf Transaktionsebene gehalten werden" @@ -16351,37 +16373,37 @@ msgstr "Die Transaktion könnte erfolgreich sein, wenn sie erneut versucht würd msgid "Process %d waits for %s on %s." msgstr "Prozess %d wartet auf %s-Sperre auf %s." -#: storage/lmgr/proc.c:1174 +#: storage/lmgr/proc.c:1175 #, c-format msgid "sending cancel to blocking autovacuum PID %d" msgstr "sende Stornierung an blockierende Autovacuum-PID %d" -#: storage/lmgr/proc.c:1186 utils/adt/misc.c:146 +#: storage/lmgr/proc.c:1193 utils/adt/misc.c:146 #, c-format msgid "could not send signal to process %d: %m" msgstr "konnte Signal nicht an Prozess %d senden: %m" -#: storage/lmgr/proc.c:1285 +#: storage/lmgr/proc.c:1295 #, c-format msgid "process %d avoided deadlock for %s on %s by rearranging queue order after %ld.%03d ms" msgstr "Prozess %d vermied Verklemmung wegen %s-Sperre auf %s durch Umordnen der Queue nach %ld,%03d ms" -#: storage/lmgr/proc.c:1300 +#: storage/lmgr/proc.c:1310 #, c-format msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "Prozess %d hat Verklemmung festgestellt beim Warten auf %s-Sperre auf %s nach %ld,%03d ms" -#: storage/lmgr/proc.c:1309 +#: storage/lmgr/proc.c:1319 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "Prozess %d wartet immer noch auf %s-Sperre auf %s nach %ld,%03d ms" -#: storage/lmgr/proc.c:1316 +#: storage/lmgr/proc.c:1326 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "Prozess %d erlangte %s-Sperre auf %s nach %ld,%03d ms" -#: storage/lmgr/proc.c:1332 +#: storage/lmgr/proc.c:1342 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "Prozess %d konnte %s-Sperre auf %s nach %ld,%03d ms nicht erlangen" @@ -16544,7 +16566,7 @@ msgid "unexpected EOF on client connection" msgstr "unerwartetes EOF auf Client-Verbindung" #: tcop/postgres.c:449 tcop/postgres.c:461 tcop/postgres.c:472 -#: tcop/postgres.c:484 tcop/postgres.c:4263 +#: tcop/postgres.c:484 tcop/postgres.c:4268 #, c-format msgid "invalid frontend message type %d" msgstr "ungültiger Frontend-Message-Typ %d" @@ -16737,82 +16759,82 @@ msgstr "storniere Autovacuum-Aufgabe" msgid "canceling statement due to user request" msgstr "storniere Anfrage wegen Benutzeraufforderung" -#: tcop/postgres.c:3118 tcop/postgres.c:3140 +#: tcop/postgres.c:3098 #, c-format msgid "stack depth limit exceeded" msgstr "Grenze für Stacktiefe überschritten" -#: tcop/postgres.c:3119 tcop/postgres.c:3141 +#: tcop/postgres.c:3099 #, 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:3157 +#: tcop/postgres.c:3162 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "„max_stack_depth“ darf %ldkB nicht überschreiten." -#: tcop/postgres.c:3159 +#: tcop/postgres.c:3164 #, 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:3519 +#: tcop/postgres.c:3524 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "ungültiges Kommandozeilenargument für Serverprozess: %s" -#: tcop/postgres.c:3520 tcop/postgres.c:3526 +#: tcop/postgres.c:3525 tcop/postgres.c:3531 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Versuchen Sie „%s --help“ für weitere Informationen." -#: tcop/postgres.c:3524 +#: tcop/postgres.c:3529 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: ungültiges Kommandozeilenargument: %s" -#: tcop/postgres.c:3585 +#: tcop/postgres.c:3590 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: weder Datenbankname noch Benutzername angegeben" -#: tcop/postgres.c:4171 +#: tcop/postgres.c:4176 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "ungültiger Subtyp %d von CLOSE-Message" -#: tcop/postgres.c:4206 +#: tcop/postgres.c:4211 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "ungültiger Subtyp %d von DESCRIBE-Message" -#: tcop/postgres.c:4284 +#: tcop/postgres.c:4289 #, 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:4288 +#: tcop/postgres.c:4293 #, 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:4458 +#: tcop/postgres.c:4463 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "Verbindungsende: Sitzungszeit: %d:%02d:%02d.%03d Benutzer=%s Datenbank=%s Host=%s%s%s" -#: tcop/pquery.c:668 +#: tcop/pquery.c:662 #, c-format msgid "bind message has %d result formats but query has %d columns" msgstr "Bind-Message hat %d Ergebnisspalten, aber Anfrage hat %d Spalten" -#: tcop/pquery.c:978 +#: tcop/pquery.c:968 #, c-format msgid "cursor can only scan forward" msgstr "Cursor kann nur vorwärts scannen" -#: tcop/pquery.c:979 +#: tcop/pquery.c:969 #, 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." @@ -16825,10 +16847,9 @@ msgstr "%s kann nicht in einer Read-Only-Transaktion ausgeführt werden" #. translator: %s is name of a SQL command, eg CREATE #: tcop/utility.c:251 -#, fuzzy, c-format -#| msgid "cannot execute %s during recovery" +#, c-format msgid "cannot execute %s during a parallel operation" -msgstr "%s kann nicht während der Wiederherstellung ausgeführt werden" +msgstr "%s kann nicht während einer parallelen Operation ausgeführt werden" #. translator: %s is name of a SQL command, eg CREATE #: tcop/utility.c:270 @@ -17185,18 +17206,17 @@ msgid "array size exceeds the maximum allowed (%d)" msgstr "Arraygröße überschreitet erlaubtes Maximum (%d)" #: utils/adt/array_userfuncs.c:67 utils/adt/array_userfuncs.c:529 -#: utils/adt/array_userfuncs.c:609 utils/adt/json.c:1707 utils/adt/json.c:1802 -#: utils/adt/json.c:1833 utils/adt/jsonb.c:1128 utils/adt/jsonb.c:1157 -#: utils/adt/jsonb.c:1586 utils/adt/jsonb.c:1746 utils/adt/jsonb.c:1764 +#: utils/adt/array_userfuncs.c:609 utils/adt/json.c:1755 utils/adt/json.c:1850 +#: utils/adt/json.c:1888 utils/adt/jsonb.c:1142 utils/adt/jsonb.c:1171 +#: utils/adt/jsonb.c:1613 utils/adt/jsonb.c:1777 utils/adt/jsonb.c:1787 #, c-format msgid "could not determine input data type" msgstr "konnte Eingabedatentypen nicht bestimmen" #: utils/adt/array_userfuncs.c:72 -#, fuzzy, c-format -#| msgid "target type is not an array" +#, c-format msgid "input data type is not an array" -msgstr "Zieltyp ist kein Array" +msgstr "Eingabedatentyp ist kein Array" #: utils/adt/array_userfuncs.c:120 utils/adt/array_userfuncs.c:174 #: utils/adt/arrayfuncs.c:1325 utils/adt/float.c:1161 utils/adt/float.c:1220 @@ -17207,7 +17227,7 @@ msgstr "Zieltyp ist kein Array" #: utils/adt/int.c:1016 utils/adt/int.c:1043 utils/adt/int.c:1076 #: utils/adt/int.c:1159 utils/adt/int8.c:1298 utils/adt/numeric.c:2903 #: utils/adt/numeric.c:2912 utils/adt/varbit.c:1173 utils/adt/varbit.c:1565 -#: utils/adt/varlena.c:1044 utils/adt/varlena.c:2580 +#: utils/adt/varlena.c:1045 utils/adt/varlena.c:2582 #, c-format msgid "integer out of range" msgstr "integer ist außerhalb des gültigen Bereichs" @@ -17250,7 +17270,7 @@ msgstr "Arrays mit unterschiedlichen Dimensionen sind nicht kompatibel für Anei msgid "invalid number of dimensions: %d" msgstr "ungültige Anzahl Dimensionen: %d" -#: utils/adt/array_userfuncs.c:725 utils/adt/array_userfuncs.c:875 +#: utils/adt/array_userfuncs.c:725 utils/adt/array_userfuncs.c:876 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "Suche nach Elementen in mehrdimensionalen Arrays wird nicht unterstützt" @@ -17314,7 +17334,7 @@ msgstr "Angegebene Array-Dimensionen stimmen nicht mit dem Array-Inhalt überein #: utils/adt/arrayfuncs.c:492 utils/adt/arrayfuncs.c:519 #: utils/adt/rangetypes.c:2111 utils/adt/rangetypes.c:2119 -#: utils/adt/rowtypes.c:208 utils/adt/rowtypes.c:216 +#: utils/adt/rowtypes.c:205 utils/adt/rowtypes.c:213 #, c-format msgid "Unexpected end of input." msgstr "Unerwartetes Ende der Eingabe." @@ -17356,7 +17376,7 @@ msgid "wrong element type" msgstr "falscher Elementtyp" #: utils/adt/arrayfuncs.c:1356 utils/adt/rangetypes.c:325 -#: utils/cache/lsyscache.c:2587 +#: utils/cache/lsyscache.c:2586 #, c-format msgid "no binary input function available for type %s" msgstr "keine binäre Eingabefunktion verfügbar für Typ %s" @@ -17367,7 +17387,7 @@ msgid "improper binary format in array element %d" msgstr "falsches Binärformat in Arrayelement %d" #: utils/adt/arrayfuncs.c:1577 utils/adt/rangetypes.c:330 -#: utils/cache/lsyscache.c:2620 +#: utils/cache/lsyscache.c:2619 #, c-format msgid "no binary output function available for type %s" msgstr "keine binäre Ausgabefunktion verfügbar für Typ %s" @@ -17381,9 +17401,9 @@ msgstr "Auswählen von Stücken aus Arrays mit fester Länge ist nicht implement #: utils/adt/arrayfuncs.c:2297 utils/adt/arrayfuncs.c:2533 #: utils/adt/arrayfuncs.c:2830 utils/adt/arrayfuncs.c:5718 #: utils/adt/arrayfuncs.c:5750 utils/adt/arrayfuncs.c:5767 -#: utils/adt/json.c:2224 utils/adt/json.c:2299 utils/adt/jsonb.c:1377 -#: utils/adt/jsonb.c:1463 utils/adt/jsonfuncs.c:3480 -#: utils/adt/jsonfuncs.c:3524 +#: utils/adt/json.c:2286 utils/adt/json.c:2361 utils/adt/jsonb.c:1391 +#: utils/adt/jsonb.c:1477 utils/adt/jsonfuncs.c:3528 +#: utils/adt/jsonfuncs.c:3573 #, c-format msgid "wrong number of array subscripts" msgstr "falsche Anzahl Arrayindizes" @@ -17426,10 +17446,9 @@ msgid "could not identify a hash function for type %s" msgstr "konnte keine Hash-Funktion für Typ %s ermitteln" #: utils/adt/arrayfuncs.c:5130 -#, fuzzy, c-format -#| msgid "target type is not an array" +#, c-format msgid "data type %s is not an array type" -msgstr "Zieltyp ist kein Array" +msgstr "Datentyp %s ist kein Array-Typ" #: utils/adt/arrayfuncs.c:5187 #, fuzzy, c-format @@ -17533,8 +17552,8 @@ msgstr "ungültige Eingabesyntax für Typ money: „%s“" #: utils/adt/int.c:861 utils/adt/int.c:969 utils/adt/int.c:1058 #: utils/adt/int.c:1097 utils/adt/int.c:1125 utils/adt/int8.c:597 #: utils/adt/int8.c:657 utils/adt/int8.c:897 utils/adt/int8.c:1005 -#: utils/adt/int8.c:1094 utils/adt/int8.c:1202 utils/adt/numeric.c:5907 -#: utils/adt/numeric.c:6190 utils/adt/timestamp.c:3350 +#: utils/adt/int8.c:1094 utils/adt/int8.c:1202 utils/adt/numeric.c:5917 +#: utils/adt/numeric.c:6200 utils/adt/timestamp.c:3350 #, c-format msgid "division by zero" msgstr "Division durch Null" @@ -17598,8 +17617,8 @@ msgstr "Datum ist außerhalb des gültigen Bereichs für Typ „timestamp“" #: utils/adt/date.c:971 utils/adt/date.c:1017 utils/adt/date.c:1617 #: utils/adt/date.c:1653 utils/adt/date.c:2525 utils/adt/formatting.c:3399 #: utils/adt/formatting.c:3431 utils/adt/formatting.c:3499 -#: utils/adt/json.c:1478 utils/adt/json.c:1505 utils/adt/jsonb.c:826 -#: utils/adt/jsonb.c:855 utils/adt/nabstime.c:455 utils/adt/nabstime.c:498 +#: utils/adt/json.c:1526 utils/adt/json.c:1553 utils/adt/jsonb.c:840 +#: utils/adt/jsonb.c:869 utils/adt/nabstime.c:455 utils/adt/nabstime.c:498 #: utils/adt/nabstime.c:528 utils/adt/nabstime.c:571 utils/adt/timestamp.c:225 #: utils/adt/timestamp.c:268 utils/adt/timestamp.c:717 #: utils/adt/timestamp.c:746 utils/adt/timestamp.c:785 @@ -17610,9 +17629,9 @@ msgstr "Datum ist außerhalb des gültigen Bereichs für Typ „timestamp“" #: utils/adt/timestamp.c:3611 utils/adt/timestamp.c:3740 #: utils/adt/timestamp.c:3781 utils/adt/timestamp.c:3869 #: utils/adt/timestamp.c:3915 utils/adt/timestamp.c:4026 -#: utils/adt/timestamp.c:4350 utils/adt/timestamp.c:4489 -#: utils/adt/timestamp.c:4499 utils/adt/timestamp.c:4561 -#: utils/adt/timestamp.c:4701 utils/adt/timestamp.c:4711 +#: utils/adt/timestamp.c:4350 utils/adt/timestamp.c:4466 +#: utils/adt/timestamp.c:4476 utils/adt/timestamp.c:4561 +#: utils/adt/timestamp.c:4680 utils/adt/timestamp.c:4690 #: utils/adt/timestamp.c:5006 utils/adt/timestamp.c:5020 #: utils/adt/timestamp.c:5145 utils/adt/timestamp.c:5152 #: utils/adt/timestamp.c:5178 utils/adt/timestamp.c:5182 @@ -17754,8 +17773,8 @@ msgstr "ungültige Endsequenz" msgid "Input data is missing padding, truncated, or otherwise corrupted." msgstr "" -#: utils/adt/encode.c:442 utils/adt/encode.c:507 utils/adt/varlena.c:286 -#: utils/adt/varlena.c:327 +#: utils/adt/encode.c:442 utils/adt/encode.c:507 utils/adt/varlena.c:287 +#: utils/adt/varlena.c:328 #, c-format msgid "invalid input syntax for type bytea" msgstr "ungültige Eingabesyntax für Typ bytea" @@ -17803,7 +17822,7 @@ msgid "\"%s\" is out of range for type real" msgstr "„%s“ ist außerhalb des gültigen Bereichs für Typ real" #: utils/adt/float.c:417 utils/adt/float.c:491 utils/adt/float.c:515 -#: utils/adt/numeric.c:5369 utils/adt/numeric.c:5395 +#: utils/adt/numeric.c:5373 utils/adt/numeric.c:5399 #, c-format msgid "invalid input syntax for type double precision: \"%s\"" msgstr "ungültige Eingabesyntax für Typ double precision: „%s“" @@ -17821,7 +17840,7 @@ msgstr "„%s“ ist außerhalb des gültigen Bereichs für Typ double precision msgid "smallint out of range" msgstr "smallint ist außerhalb des gültigen Bereichs" -#: utils/adt/float.c:1363 utils/adt/numeric.c:6583 +#: utils/adt/float.c:1363 utils/adt/numeric.c:6593 #, c-format msgid "cannot take square root of a negative number" msgstr "Quadratwurzel von negativer Zahl kann nicht ermittelt werden" @@ -17836,12 +17855,12 @@ msgstr "null hoch eine negative Zahl ist undefiniert" 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:1475 utils/adt/float.c:1505 utils/adt/numeric.c:6801 +#: utils/adt/float.c:1475 utils/adt/float.c:1505 utils/adt/numeric.c:6811 #, c-format msgid "cannot take logarithm of zero" msgstr "Logarithmus von null kann nicht ermittelt werden" -#: utils/adt/float.c:1479 utils/adt/float.c:1509 utils/adt/numeric.c:6805 +#: utils/adt/float.c:1479 utils/adt/float.c:1509 utils/adt/numeric.c:6815 #, c-format msgid "cannot take logarithm of a negative number" msgstr "Logarithmus negativer Zahlen kann nicht ermittelt werden" @@ -18084,45 +18103,44 @@ msgstr "„E“ wird nicht bei der Eingabe unterstützt" msgid "\"RN\" not supported for input" msgstr "„RN“ wird nicht bei der Eingabe unterstützt" -#: utils/adt/genfile.c:61 +#: utils/adt/genfile.c:62 #, c-format msgid "reference to parent directory (\"..\") not allowed" msgstr "Verweis auf übergeordnetes Verzeichnis („..“) nicht erlaubt" -#: utils/adt/genfile.c:72 +#: utils/adt/genfile.c:73 #, c-format msgid "absolute path not allowed" msgstr "absoluter Pfad nicht erlaubt" -#: utils/adt/genfile.c:77 +#: utils/adt/genfile.c:78 #, c-format msgid "path must be in or below the current directory" msgstr "Pfad muss in oder unter aktuellem Verzeichnis sein" -#: utils/adt/genfile.c:118 utils/adt/oracle_compat.c:184 +#: utils/adt/genfile.c:125 utils/adt/oracle_compat.c:184 #: utils/adt/oracle_compat.c:282 utils/adt/oracle_compat.c:758 #: utils/adt/oracle_compat.c:1059 #, c-format msgid "requested length too large" msgstr "verlangte Länge zu groß" -#: utils/adt/genfile.c:130 +#: utils/adt/genfile.c:142 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "konnte Positionszeiger in Datei „%s“ nicht setzen: %m" -#: utils/adt/genfile.c:180 utils/adt/genfile.c:204 utils/adt/genfile.c:225 -#: utils/adt/genfile.c:249 +#: utils/adt/genfile.c:200 utils/adt/genfile.c:241 #, c-format msgid "must be superuser to read files" msgstr "nur Superuser können Dateien lesen" -#: utils/adt/genfile.c:273 +#: utils/adt/genfile.c:318 #, c-format msgid "must be superuser to get file information" msgstr "nur Superuser können Dateiinformationen lesen" -#: utils/adt/genfile.c:337 +#: utils/adt/genfile.c:404 #, c-format msgid "must be superuser to get directory listings" msgstr "nur Superuser können Verzeichnislisten lesen" @@ -18305,323 +18323,336 @@ msgstr "bigint ist außerhalb des gültigen Bereichs" msgid "OID out of range" msgstr "OID ist außerhalb des gültigen Bereichs" -#: utils/adt/json.c:728 utils/adt/json.c:768 utils/adt/json.c:783 -#: utils/adt/json.c:794 utils/adt/json.c:804 utils/adt/json.c:855 -#: utils/adt/json.c:886 utils/adt/json.c:904 utils/adt/json.c:916 -#: utils/adt/json.c:928 utils/adt/json.c:1067 utils/adt/json.c:1081 -#: utils/adt/json.c:1092 utils/adt/json.c:1100 utils/adt/json.c:1108 -#: utils/adt/json.c:1116 utils/adt/json.c:1124 utils/adt/json.c:1132 -#: utils/adt/json.c:1140 utils/adt/json.c:1148 utils/adt/json.c:1178 +#: utils/adt/json.c:776 utils/adt/json.c:816 utils/adt/json.c:831 +#: utils/adt/json.c:842 utils/adt/json.c:852 utils/adt/json.c:903 +#: utils/adt/json.c:934 utils/adt/json.c:952 utils/adt/json.c:964 +#: utils/adt/json.c:976 utils/adt/json.c:1115 utils/adt/json.c:1129 +#: utils/adt/json.c:1140 utils/adt/json.c:1148 utils/adt/json.c:1156 +#: utils/adt/json.c:1164 utils/adt/json.c:1172 utils/adt/json.c:1180 +#: utils/adt/json.c:1188 utils/adt/json.c:1196 utils/adt/json.c:1226 #, c-format msgid "invalid input syntax for type json" msgstr "ungültige Eingabesyntax für Typ json" -#: utils/adt/json.c:729 +#: utils/adt/json.c:777 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Zeichen mit Wert 0x%02x muss escapt werden." -#: utils/adt/json.c:769 +#: utils/adt/json.c:817 #, c-format msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "Nach „\\u“ müssen vier Hexadezimalziffern folgen." -#: utils/adt/json.c:784 +#: utils/adt/json.c:832 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Unicode-High-Surrogate darf nicht auf ein High-Surrogate folgen." -#: utils/adt/json.c:795 utils/adt/json.c:805 utils/adt/json.c:856 -#: utils/adt/json.c:917 utils/adt/json.c:929 +#: utils/adt/json.c:843 utils/adt/json.c:853 utils/adt/json.c:904 +#: utils/adt/json.c:965 utils/adt/json.c:977 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Unicode-Low-Surrogate muss auf ein High-Surrogate folgen." -#: utils/adt/json.c:820 utils/adt/json.c:843 +#: utils/adt/json.c:868 utils/adt/json.c:891 #, c-format msgid "unsupported Unicode escape sequence" msgstr "nicht unterstützte Unicode-Escape-Sequenz" -#: utils/adt/json.c:821 +#: utils/adt/json.c:869 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 kann nicht in „text“ umgewandelt werden." -#: utils/adt/json.c:844 +#: utils/adt/json.c:892 #, c-format msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8." msgstr "Unicode-Escape-Werte können nicht für Code-Punkt-Werte über 007F verwendet werden, wenn die Serverkodierung nicht UTF8 ist." -#: utils/adt/json.c:887 utils/adt/json.c:905 +#: utils/adt/json.c:935 utils/adt/json.c:953 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "Escape-Sequenz „\\%s“ ist nicht gültig." -#: utils/adt/json.c:1068 +#: utils/adt/json.c:1116 #, c-format msgid "The input string ended unexpectedly." msgstr "Die Eingabezeichenkette endete unerwartet." -#: utils/adt/json.c:1082 +#: utils/adt/json.c:1130 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Ende der Eingabe erwartet, aber „%s“ gefunden." -#: utils/adt/json.c:1093 +#: utils/adt/json.c:1141 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "JSON-Wert erwartet, aber „%s“ gefunden." -#: utils/adt/json.c:1101 utils/adt/json.c:1149 +#: utils/adt/json.c:1149 utils/adt/json.c:1197 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Zeichenkette erwartet, aber „%s“ gefunden." -#: utils/adt/json.c:1109 +#: utils/adt/json.c:1157 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Array-Element oder „]“ erwartet, aber „%s“ gefunden." -#: utils/adt/json.c:1117 +#: utils/adt/json.c:1165 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "„,“ oder „]“ erwartet, aber „%s“ gefunden." -#: utils/adt/json.c:1125 +#: utils/adt/json.c:1173 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Zeichenkette oder „}“ erwartet, aber „%s“ gefunden." -#: utils/adt/json.c:1133 +#: utils/adt/json.c:1181 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "„:“ erwartet, aber „%s“ gefunden." -#: utils/adt/json.c:1141 +#: utils/adt/json.c:1189 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "„,“ oder „}“ erwartet, aber „%s“ gefunden." -#: utils/adt/json.c:1179 +#: utils/adt/json.c:1227 #, c-format msgid "Token \"%s\" is invalid." msgstr "Token „%s“ ist ungültig." -#: utils/adt/json.c:1251 +#: utils/adt/json.c:1299 #, c-format msgid "JSON data, line %d: %s%s%s" msgstr "JSON-Daten, Zeile %d: %s%s%s" -#: utils/adt/json.c:1404 +#: utils/adt/json.c:1452 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "Schlüsselwert muss skalar sein, nicht Array, zusammengesetzt oder json" -#: utils/adt/json.c:1964 utils/adt/json.c:1982 utils/adt/json.c:2076 -#: utils/adt/json.c:2097 utils/adt/json.c:2156 +#: utils/adt/json.c:2002 #, c-format -msgid "could not determine data type for argument %d" -msgstr "konnte Datentyp von Argument %d nicht ermitteln" +msgid "could not determine data type for argument 1" +msgstr "konnte Datentyp von Argument 1 nicht ermitteln" + +#: utils/adt/json.c:2012 +#, c-format +msgid "could not determine data type for argument 2" +msgstr "konnte Datentyp von Argument 2 nicht ermitteln" -#: utils/adt/json.c:1969 +#: utils/adt/json.c:2036 utils/adt/jsonb.c:1803 #, c-format msgid "field name must not be null" msgstr "Feldname darf nicht NULL sein" -#: utils/adt/json.c:2051 +#: utils/adt/json.c:2113 #, c-format msgid "argument list must have even number of elements" msgstr "Argumentliste muss gerade Anzahl Elemente haben" -#: utils/adt/json.c:2052 +#: utils/adt/json.c:2114 #, c-format msgid "The arguments of json_build_object() must consist of alternating keys and values." msgstr "Die Argumente von json_build_object() müssen abwechselnd Schlüssel und Werte sein." -#: utils/adt/json.c:2082 +#: utils/adt/json.c:2138 utils/adt/json.c:2159 utils/adt/json.c:2218 +#, c-format +msgid "could not determine data type for argument %d" +msgstr "konnte Datentyp von Argument %d nicht ermitteln" + +#: utils/adt/json.c:2144 #, c-format msgid "argument %d cannot be null" msgstr "Argument %d darf nicht NULL sein" -#: utils/adt/json.c:2083 +#: utils/adt/json.c:2145 #, c-format msgid "Object keys should be text." msgstr "Objektschlüssel sollten Text sein." -#: utils/adt/json.c:2218 utils/adt/jsonb.c:1371 +#: utils/adt/json.c:2280 utils/adt/jsonb.c:1385 #, c-format msgid "array must have two columns" msgstr "Array muss zwei Spalten haben" -#: utils/adt/json.c:2242 utils/adt/json.c:2326 utils/adt/jsonb.c:1395 -#: utils/adt/jsonb.c:1490 +#: utils/adt/json.c:2304 utils/adt/json.c:2388 utils/adt/jsonb.c:1409 +#: utils/adt/jsonb.c:1504 #, c-format msgid "null value not allowed for object key" msgstr "NULL-Werte sind nicht als Objektschlüssel erlaubt" -#: utils/adt/json.c:2315 utils/adt/jsonb.c:1479 +#: utils/adt/json.c:2377 utils/adt/jsonb.c:1493 #, c-format msgid "mismatched array dimensions" msgstr "Array-Dimensionen passen nicht" -#: utils/adt/jsonb.c:256 +#: utils/adt/jsonb.c:265 #, c-format msgid "string too long to represent as jsonb string" msgstr "Zeichenkette ist zu lang für jsonb" -#: utils/adt/jsonb.c:257 +#: utils/adt/jsonb.c:266 #, c-format msgid "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." msgstr "Aufgrund einer Einschränkung der Implementierung können jsonb-Zeichenketten nicht länger als %d Bytes sein." -#: utils/adt/jsonb.c:715 -#, fuzzy, c-format -#| msgid "key value must be scalar, not array, composite, or json" +#: utils/adt/jsonb.c:729 +#, c-format msgid "key value must be scalar, not array, composite or json" msgstr "Schlüsselwert muss skalar sein, nicht Array, zusammengesetzt oder json" -#: utils/adt/jsonb.c:1184 +#: utils/adt/jsonb.c:1198 #, c-format msgid "invalid number or arguments: object must be matched key value pairs" msgstr "" -#: utils/adt/jsonb.c:1198 +#: utils/adt/jsonb.c:1212 #, fuzzy, c-format #| msgid "argument %d cannot be null" msgid "arg %d: key cannot be null" msgstr "Argument %d darf nicht NULL sein" -#: utils/adt/jsonb.c:1220 utils/adt/jsonb.c:1243 utils/adt/jsonb.c:1305 +#: utils/adt/jsonb.c:1234 utils/adt/jsonb.c:1257 utils/adt/jsonb.c:1319 #, fuzzy, c-format #| msgid "could not determine input data type" msgid "arg %d: could not determine data type" msgstr "konnte Eingabedatentypen nicht bestimmen" -#: utils/adt/jsonb.c:1823 -#, fuzzy, c-format -#| msgid "Object keys should be text." +#: utils/adt/jsonb.c:1856 +#, c-format msgid "object keys must be strings" -msgstr "Objektschlüssel sollten Text sein." +msgstr "Objektschlüssel müssen Zeichenketten sein" -#: utils/adt/jsonb_util.c:622 +#: utils/adt/jsonb_util.c:656 #, 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:663 +#: utils/adt/jsonb_util.c:697 #, 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:1490 utils/adt/jsonb_util.c:1510 +#: utils/adt/jsonb_util.c:1525 utils/adt/jsonb_util.c:1545 #, 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:1571 utils/adt/jsonb_util.c:1606 -#: utils/adt/jsonb_util.c:1626 +#: utils/adt/jsonb_util.c:1606 utils/adt/jsonb_util.c:1641 +#: utils/adt/jsonb_util.c:1661 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "Gesamtgröße der jsonb-Objektelemente überschreitet die maximale Größe von %u Bytes" -#: utils/adt/jsonfuncs.c:294 utils/adt/jsonfuncs.c:459 -#: utils/adt/jsonfuncs.c:1999 utils/adt/jsonfuncs.c:2440 -#: utils/adt/jsonfuncs.c:2946 +#: utils/adt/jsonfuncs.c:296 utils/adt/jsonfuncs.c:461 +#: utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2497 +#: utils/adt/jsonfuncs.c:3003 #, c-format msgid "cannot call %s on a scalar" msgstr "%s kann nicht mit einem skalaren Wert aufgerufen werden" -#: utils/adt/jsonfuncs.c:299 utils/adt/jsonfuncs.c:446 -#: utils/adt/jsonfuncs.c:2429 +#: utils/adt/jsonfuncs.c:301 utils/adt/jsonfuncs.c:448 +#: utils/adt/jsonfuncs.c:2486 #, c-format msgid "cannot call %s on an array" msgstr "%s kann nicht mit einem Array aufgerufen werden" -#: utils/adt/jsonfuncs.c:1307 utils/adt/jsonfuncs.c:1342 +#: utils/adt/jsonfuncs.c:1364 utils/adt/jsonfuncs.c:1399 #, c-format msgid "cannot get array length of a scalar" msgstr "kann nicht die Arraylänge eines skalaren Wertes ermitteln" -#: utils/adt/jsonfuncs.c:1311 utils/adt/jsonfuncs.c:1330 +#: utils/adt/jsonfuncs.c:1368 utils/adt/jsonfuncs.c:1387 #, c-format msgid "cannot get array length of a non-array" msgstr "kann nicht die Arraylänge eines Nicht-Arrays ermitteln" -#: utils/adt/jsonfuncs.c:1407 +#: utils/adt/jsonfuncs.c:1464 #, c-format msgid "cannot call %s on a non-object" msgstr "%s kann nicht mit etwas aufgerufen werden, das kein Objekt ist" -#: utils/adt/jsonfuncs.c:1425 utils/adt/jsonfuncs.c:2112 -#: utils/adt/jsonfuncs.c:2649 +#: utils/adt/jsonfuncs.c:1482 utils/adt/jsonfuncs.c:2169 +#: utils/adt/jsonfuncs.c:2706 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "Funktion, die einen Record zurückgibt, in einem Zusammenhang aufgerufen, der Typ record nicht verarbeiten kann" -#: utils/adt/jsonfuncs.c:1668 +#: utils/adt/jsonfuncs.c:1725 #, c-format msgid "cannot deconstruct an array as an object" msgstr "kann Array nicht in ein Objekt zerlegen" -#: utils/adt/jsonfuncs.c:1680 +#: utils/adt/jsonfuncs.c:1737 #, c-format msgid "cannot deconstruct a scalar" msgstr "kann skalaren Wert nicht zerlegen" -#: utils/adt/jsonfuncs.c:1726 +#: utils/adt/jsonfuncs.c:1783 #, c-format msgid "cannot extract elements from a scalar" msgstr "kann keine Elemente aus einem skalaren Wert auswählen" -#: utils/adt/jsonfuncs.c:1730 +#: utils/adt/jsonfuncs.c:1787 #, c-format msgid "cannot extract elements from an object" msgstr "kann keine Elemente aus einem Objekt auswählen" -#: utils/adt/jsonfuncs.c:1986 utils/adt/jsonfuncs.c:2745 +#: utils/adt/jsonfuncs.c:2043 utils/adt/jsonfuncs.c:2802 #, c-format msgid "cannot call %s on a non-array" msgstr "%s kann nicht mit etwas aufgerufen werden, das kein Array ist" -#: utils/adt/jsonfuncs.c:2073 utils/adt/jsonfuncs.c:2625 +#: utils/adt/jsonfuncs.c:2130 utils/adt/jsonfuncs.c:2682 #, c-format msgid "first argument of %s must be a row type" msgstr "erstes Argument von %s muss ein Zeilentyp sein" -#: utils/adt/jsonfuncs.c:2114 +#: utils/adt/jsonfuncs.c:2171 #, c-format msgid "Try calling the function in the FROM clause using a column definition list." msgstr "Versuchen Sie, die Funktion in der FROM-Klausel mit einer Spaltendefinitionsliste aufzurufen." -#: utils/adt/jsonfuncs.c:2761 utils/adt/jsonfuncs.c:2928 +#: utils/adt/jsonfuncs.c:2818 utils/adt/jsonfuncs.c:2985 #, c-format msgid "argument of %s must be an array of objects" msgstr "Argument von %s muss ein Array von Objekten sein" -#: utils/adt/jsonfuncs.c:2785 +#: utils/adt/jsonfuncs.c:2842 #, c-format msgid "cannot call %s on an object" msgstr "%s kann nicht mit einem Objekt aufgerufen werden" -#: utils/adt/jsonfuncs.c:3362 utils/adt/jsonfuncs.c:3415 +#: utils/adt/jsonfuncs.c:3409 utils/adt/jsonfuncs.c:3462 #, fuzzy, c-format #| msgid "cannot delete from view \"%s\"" msgid "cannot delete from scalar" msgstr "kann nicht aus Sicht „%s“ löschen" -#: utils/adt/jsonfuncs.c:3485 +#: utils/adt/jsonfuncs.c:3467 #, fuzzy, c-format -#| msgid "cannot call %s on a scalar" -msgid "cannot replace path in scalar" -msgstr "%s kann nicht mit einem skalaren Wert aufgerufen werden" +#| msgid "cannot delete from foreign table \"%s\"" +msgid "cannot delete from object using integer subscript" +msgstr "kann nicht aus Fremdtabelle „%s“ löschen" + +#: utils/adt/jsonfuncs.c:3533 +#, fuzzy, c-format +#| msgid "cannot deconstruct a scalar" +msgid "cannot set path in scalar" +msgstr "kann skalaren Wert nicht zerlegen" -#: utils/adt/jsonfuncs.c:3529 +#: utils/adt/jsonfuncs.c:3578 #, fuzzy, c-format #| msgid "cannot deconstruct a scalar" msgid "cannot delete path in scalar" msgstr "kann skalaren Wert nicht zerlegen" -#: utils/adt/jsonfuncs.c:3675 +#: utils/adt/jsonfuncs.c:3703 #, fuzzy, c-format #| msgid "invalid combination of date conventions" msgid "invalid concatenation of jsonb objects" @@ -18633,22 +18664,22 @@ msgstr "ungültige Kombination von Datumskonventionen" msgid "argument exceeds the maximum length of %d bytes" msgstr "Gesamtgröße der jsonb-Array-Elemente überschreitet die maximale Größe von %u Bytes" -#: utils/adt/like.c:211 utils/adt/selfuncs.c:5233 +#: utils/adt/like.c:212 utils/adt/selfuncs.c:5275 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "konnte die für ILIKE zu verwendende Sortierfolge nicht bestimmen" -#: utils/adt/like_match.c:104 utils/adt/like_match.c:164 +#: utils/adt/like_match.c:107 utils/adt/like_match.c:167 #, c-format msgid "LIKE pattern must not end with escape character" msgstr "LIKE-Muster darf nicht mit Escape-Zeichen enden" -#: utils/adt/like_match.c:289 utils/adt/regexp.c:698 +#: utils/adt/like_match.c:292 utils/adt/regexp.c:698 #, c-format msgid "invalid escape string" msgstr "ungültige ESCAPE-Zeichenkette" -#: utils/adt/like_match.c:290 utils/adt/regexp.c:699 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:699 #, c-format msgid "Escape string must be empty or one character." msgstr "ESCAPE-Zeichenkette muss null oder ein Zeichen lang sein." @@ -18656,7 +18687,7 @@ msgstr "ESCAPE-Zeichenkette muss null oder ein Zeichen lang sein." #: utils/adt/lockfuncs.c:422 #, c-format msgid "cannot use advisory locks during a parallel operation" -msgstr "" +msgstr "während einer parallelen Operation können keine Benutzersperren verwendet werden" #: utils/adt/mac.c:68 #, c-format @@ -18674,10 +18705,9 @@ msgid "PID %d is not a PostgreSQL server process" msgstr "PID %d ist kein PostgreSQL-Serverprozess" #: utils/adt/misc.c:166 -#, fuzzy, c-format -#| msgid "must be superuser to create superusers" +#, c-format msgid "must be a superuser to cancel superuser query" -msgstr "nur Superuser können Superuser anlegen" +msgstr "nur Superuser können Anfragen eines Superusers stornieren" #: utils/adt/misc.c:171 #, c-format @@ -18685,10 +18715,9 @@ msgid "must be a member of the role whose query is being cancelled" msgstr "" #: utils/adt/misc.c:190 -#, fuzzy, c-format -#| msgid "must be superuser to create superusers" +#, c-format msgid "must be a superuser to terminate superuser process" -msgstr "nur Superuser können Superuser anlegen" +msgstr "nur Superuser können Prozesse eines Superusers beenden" #: utils/adt/misc.c:195 #, fuzzy, c-format @@ -18726,19 +18755,19 @@ msgstr "globaler Tablespace hat niemals Datenbanken" msgid "%u is not a tablespace OID" msgstr "%u ist keine Tablespace-OID" -#: utils/adt/misc.c:489 +#: utils/adt/misc.c:491 msgid "unreserved" msgstr "unreserviert" -#: utils/adt/misc.c:493 +#: utils/adt/misc.c:495 msgid "unreserved (cannot be function or type name)" msgstr "unreserviert (kann nicht Funktions- oder Typname sein)" -#: utils/adt/misc.c:497 +#: utils/adt/misc.c:499 msgid "reserved (can be function or type name)" msgstr "reserviert (kann Funktions- oder Typname sein)" -#: utils/adt/misc.c:501 +#: utils/adt/misc.c:503 msgid "reserved" msgstr "reserviert" @@ -18842,8 +18871,8 @@ msgstr "Ergebnis ist außerhalb des gültigen Bereichs" msgid "cannot subtract inet values of different sizes" msgstr "Subtraktion von „inet“-Werten unterschiedlicher Größe nicht möglich" -#: utils/adt/numeric.c:549 utils/adt/numeric.c:576 utils/adt/numeric.c:4603 -#: utils/adt/numeric.c:4626 utils/adt/numeric.c:4650 utils/adt/numeric.c:4657 +#: utils/adt/numeric.c:549 utils/adt/numeric.c:576 utils/adt/numeric.c:4604 +#: utils/adt/numeric.c:4627 utils/adt/numeric.c:4651 utils/adt/numeric.c:4658 #, c-format msgid "invalid input syntax for type numeric: \"%s\"" msgstr "ungültige Eingabesyntax für Typ numeric: „%s“" @@ -18901,7 +18930,7 @@ msgstr "timestamp kann nicht NaN sein" msgid "step size cannot be NaN" msgstr "Schrittgröße kann nicht gleich null sein" -#: utils/adt/numeric.c:2550 utils/adt/numeric.c:5100 utils/adt/numeric.c:7116 +#: utils/adt/numeric.c:2550 utils/adt/numeric.c:5104 utils/adt/numeric.c:7126 #, c-format msgid "value overflows numeric format" msgstr "Wert verursacht Überlauf im „numeric“-Format" @@ -18921,17 +18950,17 @@ msgstr "kann NaN nicht in bigint umwandeln" msgid "cannot convert NaN to smallint" msgstr "kann NaN nicht in smallint umwandeln" -#: utils/adt/numeric.c:5170 +#: utils/adt/numeric.c:5174 #, c-format msgid "numeric field overflow" msgstr "Feldüberlauf bei Typ „numeric“" -#: utils/adt/numeric.c:5171 +#: utils/adt/numeric.c:5175 #, 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:6673 +#: utils/adt/numeric.c:6683 #, c-format msgid "argument for function \"exp\" too big" msgstr "Argument für Funktion „exp“ zu groß" @@ -18992,32 +19021,37 @@ 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:1052 +#: utils/adt/pg_locale.c:911 +#, c-format +msgid "Apply system library package updates." +msgstr "" + +#: utils/adt/pg_locale.c:1116 #, c-format msgid "could not create locale \"%s\": %m" msgstr "konnte Locale „%s“ nicht erzeugen: %m" -#: utils/adt/pg_locale.c:1055 +#: utils/adt/pg_locale.c:1119 #, 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:1142 +#: utils/adt/pg_locale.c:1206 #, 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:1157 +#: utils/adt/pg_locale.c:1221 #, c-format msgid "nondefault collations are not supported on this platform" msgstr "Sortierfolgen außer der Standardsortierfolge werden auf dieser Plattform nicht unterstützt" -#: utils/adt/pg_locale.c:1328 +#: utils/adt/pg_locale.c:1392 #, c-format msgid "invalid multibyte character for locale" msgstr "ungültiges Mehrbytezeichen für Locale" -#: utils/adt/pg_locale.c:1329 +#: utils/adt/pg_locale.c:1393 #, 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." @@ -19099,62 +19133,74 @@ msgid "cannot display a value of type fdw_handler" msgstr "kann keinen Wert vom Typ fdw_handler anzeigen" #: utils/adt/pseudotypes.c:384 +#, fuzzy, c-format +#| msgid "cannot accept a value of type fdw_handler" +msgid "cannot accept a value of type tsm_handler" +msgstr "kann keinen Wert vom Typ fdw_handler annehmen" + +#: utils/adt/pseudotypes.c:397 +#, fuzzy, c-format +#| msgid "cannot display a value of type fdw_handler" +msgid "cannot display a value of type tsm_handler" +msgstr "kann keinen Wert vom Typ fdw_handler anzeigen" + +#: utils/adt/pseudotypes.c:411 #, c-format msgid "cannot accept a value of type internal" msgstr "kann keinen Wert vom Typ internal annehmen" -#: utils/adt/pseudotypes.c:397 +#: utils/adt/pseudotypes.c:424 #, c-format msgid "cannot display a value of type internal" msgstr "kann keinen Wert vom Typ internal anzeigen" -#: utils/adt/pseudotypes.c:411 +#: utils/adt/pseudotypes.c:438 #, c-format msgid "cannot accept a value of type opaque" msgstr "kann keinen Wert vom Typ opaque annehmen" -#: utils/adt/pseudotypes.c:424 +#: utils/adt/pseudotypes.c:451 #, c-format msgid "cannot display a value of type opaque" msgstr "kann keinen Wert vom Typ opaque anzeigen" -#: utils/adt/pseudotypes.c:438 +#: utils/adt/pseudotypes.c:465 #, c-format msgid "cannot accept a value of type anyelement" msgstr "kann keinen Wert vom Typ anyelement annehmen" -#: utils/adt/pseudotypes.c:451 +#: utils/adt/pseudotypes.c:478 #, c-format msgid "cannot display a value of type anyelement" msgstr "kann keinen Wert vom Typ anyelement anzeigen" -#: utils/adt/pseudotypes.c:464 +#: utils/adt/pseudotypes.c:491 #, c-format msgid "cannot accept a value of type anynonarray" msgstr "kann keinen Wert vom Typ anynonarray annehmen" -#: utils/adt/pseudotypes.c:477 +#: utils/adt/pseudotypes.c:504 #, c-format msgid "cannot display a value of type anynonarray" msgstr "kann keinen Wert vom Typ anynonarray anzeigen" -#: utils/adt/pseudotypes.c:490 +#: utils/adt/pseudotypes.c:517 #, c-format msgid "cannot accept a value of a shell type" msgstr "kann keinen Wert eines Hüllentyps annehmen" -#: utils/adt/pseudotypes.c:503 +#: utils/adt/pseudotypes.c:530 #, c-format msgid "cannot display a value of a shell type" msgstr "kann keinen Wert eines Hüllentyps anzeigen" -#: utils/adt/pseudotypes.c:525 utils/adt/pseudotypes.c:550 -#: utils/adt/pseudotypes.c:578 utils/adt/pseudotypes.c:606 +#: utils/adt/pseudotypes.c:552 utils/adt/pseudotypes.c:577 +#: utils/adt/pseudotypes.c:605 utils/adt/pseudotypes.c:633 #, c-format msgid "cannot accept a value of type %s" msgstr "kann keinen Wert vom Typ %s annehmen" -#: utils/adt/pseudotypes.c:593 utils/adt/pseudotypes.c:619 +#: utils/adt/pseudotypes.c:620 utils/adt/pseudotypes.c:646 #, fuzzy, c-format #| msgid "cannot accept a value of type any" msgid "cannot output a value of type %s" @@ -19225,7 +19271,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:285 utils/adt/regexp.c:1287 utils/adt/varlena.c:3586 +#: utils/adt/regexp.c:285 utils/adt/regexp.c:1288 utils/adt/varlena.c:3588 #, c-format msgid "regular expression failed: %s" msgstr "regulärer Ausdruck fehlgeschlagen: %s" @@ -19235,7 +19281,7 @@ msgstr "regulärer Ausdruck fehlgeschlagen: %s" msgid "invalid regexp option: \"%c\"" msgstr "ungültige Option für regulären Ausdruck: „%c“" -#: utils/adt/regexp.c:947 +#: utils/adt/regexp.c:948 #, c-format msgid "regexp_split does not support the global option" msgstr "regexp_split unterstützt die „Global“-Option nicht" @@ -19251,7 +19297,7 @@ msgid "more than one operator named %s" msgstr "es gibt mehrere Operatoren namens %s" #: utils/adt/regproc.c:779 utils/adt/regproc.c:820 utils/adt/regproc.c:1962 -#: utils/adt/ruleutils.c:8101 utils/adt/ruleutils.c:8226 +#: utils/adt/ruleutils.c:8060 utils/adt/ruleutils.c:8185 #, c-format msgid "too many arguments" msgstr "zu viele Argumente" @@ -19261,8 +19307,8 @@ msgstr "zu viele Argumente" msgid "Provide two argument types for operator." msgstr "Geben Sie zwei Argumente für den Operator an." -#: utils/adt/regproc.c:1797 utils/adt/regproc.c:1802 utils/adt/varlena.c:2857 -#: utils/adt/varlena.c:2862 +#: utils/adt/regproc.c:1797 utils/adt/regproc.c:1802 utils/adt/varlena.c:2859 +#: utils/adt/varlena.c:2864 #, c-format msgid "invalid name syntax" msgstr "ungültige Namenssyntax" @@ -19287,151 +19333,146 @@ msgstr "Typname erwartet" msgid "improper type name" msgstr "falscher Typname" -#: utils/adt/ri_triggers.c:341 utils/adt/ri_triggers.c:2488 -#: utils/adt/ri_triggers.c:3297 +#: utils/adt/ri_triggers.c:345 utils/adt/ri_triggers.c:2492 +#: utils/adt/ri_triggers.c:3315 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "Einfügen oder Aktualisieren in Tabelle „%s“ verletzt Fremdschlüssel-Constraint „%s“" -#: utils/adt/ri_triggers.c:344 utils/adt/ri_triggers.c:2491 +#: utils/adt/ri_triggers.c:348 utils/adt/ri_triggers.c:2495 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL erlaubt das Mischen von Schlüsseln, die NULL und nicht NULL sind, nicht." -#: utils/adt/ri_triggers.c:2730 +#: utils/adt/ri_triggers.c:2734 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "Funktion „%s“ muss von INSERT ausgelöst werden" -#: utils/adt/ri_triggers.c:2736 +#: utils/adt/ri_triggers.c:2740 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "Funktion „%s“ muss von UPDATE ausgelöst werden" -#: utils/adt/ri_triggers.c:2742 +#: utils/adt/ri_triggers.c:2746 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "Funktion „%s“ muss von DELETE ausgelöst werden" -#: utils/adt/ri_triggers.c:2765 +#: utils/adt/ri_triggers.c:2769 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "kein „pg_constraint“-Eintrag für Trigger „%s“ für Tabelle „%s“" -#: utils/adt/ri_triggers.c:2767 +#: utils/adt/ri_triggers.c:2771 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "Entfernen Sie diesen Referentielle-Integritäts-Trigger und seine Partner und führen Sie dann ALTER TABLE ADD CONSTRAINT aus." -#: utils/adt/ri_triggers.c:3209 +#: utils/adt/ri_triggers.c:3225 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "RI-Anfrage in Tabelle „%s“ für Constraint „%s“ von Tabelle „%s“ ergab unerwartetes Ergebnis" -#: utils/adt/ri_triggers.c:3213 +#: utils/adt/ri_triggers.c:3229 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Das liegt höchstwahrscheinlich daran, dass eine Regel die Anfrage umgeschrieben hat." -#: utils/adt/ri_triggers.c:3301 +#: utils/adt/ri_triggers.c:3319 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "Schlüssel (%s)=(%s) ist nicht in Tabelle „%s“ vorhanden." -#: utils/adt/ri_triggers.c:3304 +#: utils/adt/ri_triggers.c:3322 #, c-format msgid "Key is not present in table \"%s\"." msgstr "Der Schlüssel ist nicht in Tabelle „%s“ vorhanden." -#: utils/adt/ri_triggers.c:3310 +#: utils/adt/ri_triggers.c:3328 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "Aktualisieren oder Löschen in Tabelle „%s“ verletzt Fremdschlüssel-Constraint „%s“ von Tabelle „%s“" -#: utils/adt/ri_triggers.c:3315 +#: utils/adt/ri_triggers.c:3333 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "Auf Schlüssel (%s)=(%s) wird noch aus Tabelle „%s“ verwiesen." -#: utils/adt/ri_triggers.c:3318 +#: utils/adt/ri_triggers.c:3336 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "Auf den Schlüssel wird noch aus Tabelle „%s“ verwiesen." -#: utils/adt/rowtypes.c:102 utils/adt/rowtypes.c:477 +#: utils/adt/rowtypes.c:100 utils/adt/rowtypes.c:472 #, c-format msgid "input of anonymous composite types is not implemented" msgstr "Eingabe anonymer zusammengesetzter Typen ist nicht implementiert" -#: utils/adt/rowtypes.c:155 utils/adt/rowtypes.c:183 utils/adt/rowtypes.c:206 -#: utils/adt/rowtypes.c:214 utils/adt/rowtypes.c:266 utils/adt/rowtypes.c:274 +#: utils/adt/rowtypes.c:152 utils/adt/rowtypes.c:180 utils/adt/rowtypes.c:203 +#: utils/adt/rowtypes.c:211 utils/adt/rowtypes.c:263 utils/adt/rowtypes.c:271 #, c-format msgid "malformed record literal: \"%s\"" msgstr "fehlerhafte Record-Konstante: „%s“" -#: utils/adt/rowtypes.c:156 +#: utils/adt/rowtypes.c:153 #, c-format msgid "Missing left parenthesis." msgstr "Linke Klammer fehlt." -#: utils/adt/rowtypes.c:184 +#: utils/adt/rowtypes.c:181 #, c-format msgid "Too few columns." msgstr "Zu wenige Spalten." -#: utils/adt/rowtypes.c:267 +#: utils/adt/rowtypes.c:264 #, c-format msgid "Too many columns." msgstr "Zu viele Spalten." -#: utils/adt/rowtypes.c:275 +#: utils/adt/rowtypes.c:272 #, c-format msgid "Junk after right parenthesis." msgstr "Müll nach rechter Klammer." -#: utils/adt/rowtypes.c:526 +#: utils/adt/rowtypes.c:521 #, c-format msgid "wrong number of columns: %d, expected %d" msgstr "falsche Anzahl der Spalten: %d, erwartet wurden %d" -#: utils/adt/rowtypes.c:553 +#: utils/adt/rowtypes.c:548 #, c-format msgid "wrong data type: %u, expected %u" msgstr "falscher Datentyp: %u, erwartet wurde %u" -#: utils/adt/rowtypes.c:614 +#: utils/adt/rowtypes.c:609 #, c-format msgid "improper binary format in record column %d" msgstr "falsches Binärformat in Record-Spalte %d" -#: utils/adt/rowtypes.c:896 utils/adt/rowtypes.c:1134 -#: utils/adt/rowtypes.c:1388 utils/adt/rowtypes.c:1665 +#: utils/adt/rowtypes.c:891 utils/adt/rowtypes.c:1129 +#: utils/adt/rowtypes.c:1383 utils/adt/rowtypes.c:1660 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "kann unterschiedliche Spaltentyp %s und %s in Record-Spalte %d nicht vergleichen" -#: utils/adt/rowtypes.c:985 utils/adt/rowtypes.c:1205 -#: utils/adt/rowtypes.c:1521 utils/adt/rowtypes.c:1761 +#: utils/adt/rowtypes.c:980 utils/adt/rowtypes.c:1200 +#: utils/adt/rowtypes.c:1516 utils/adt/rowtypes.c:1756 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "kann Record-Typen mit unterschiedlicher Anzahl Spalten nicht vergleichen" -#: utils/adt/ruleutils.c:4074 +#: utils/adt/ruleutils.c:4076 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "Regel „%s“ hat nicht unterstützten Ereignistyp %d" -#: utils/adt/ruleutils.c:4254 -#, c-format -msgid "cache lookup failed for tablesample method %u" -msgstr "" - -#: utils/adt/selfuncs.c:5218 +#: utils/adt/selfuncs.c:5260 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "Mustersuche ohne Rücksicht auf Groß-/Kleinschreibung wird für Typ bytea nicht unterstützt" -#: utils/adt/selfuncs.c:5321 +#: utils/adt/selfuncs.c:5363 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "Mustersuche mit regulären Ausdrücken wird für Typ bytea nicht unterstützt" @@ -19530,7 +19571,7 @@ msgstr "Präzision von interval(%d) muss zwischen %d und %d sein" msgid "cannot subtract infinite timestamps" msgstr "kann unendliche timestamp-Werte nicht subtrahieren" -#: utils/adt/timestamp.c:3861 utils/adt/timestamp.c:4467 +#: utils/adt/timestamp.c:3861 utils/adt/timestamp.c:4487 #: utils/adt/timestamp.c:4507 #, c-format msgid "timestamp units \"%s\" not supported" @@ -19541,7 +19582,7 @@ msgstr "„timestamp“-Einheit „%s“ nicht unterstützt" msgid "timestamp units \"%s\" not recognized" msgstr "„timestamp“-Einheit „%s“ nicht erkannt" -#: utils/adt/timestamp.c:4015 utils/adt/timestamp.c:4678 +#: utils/adt/timestamp.c:4015 utils/adt/timestamp.c:4698 #: utils/adt/timestamp.c:4719 #, c-format msgid "timestamp with time zone units \"%s\" not supported" @@ -19728,6 +19769,18 @@ msgstr "es gibt kein escaptes Zeichen: „%s“" msgid "wrong position info in tsvector: \"%s\"" msgstr "falsche Positionsinformationen in tsvector: „%s“" +#: utils/adt/txid.c:339 +#, fuzzy, c-format +#| msgid "invalid input syntax for type tid: \"%s\"" +msgid "invalid input syntax for type txid_snapshot: \"%s\"" +msgstr "ungültige Eingabesyntax für Typ tid: „%s“" + +#: utils/adt/txid.c:534 +#, fuzzy, c-format +#| msgid "invalid external \"cidr\" value" +msgid "invalid external txid_snapshot data" +msgstr "ungültiger externer „cidr“-Wert" + #: utils/adt/uuid.c:128 #, c-format msgid "invalid input syntax for uuid: \"%s\"" @@ -19773,9 +19826,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:1066 utils/adt/varbit.c:1168 utils/adt/varlena.c:831 -#: utils/adt/varlena.c:895 utils/adt/varlena.c:1039 utils/adt/varlena.c:2508 -#: utils/adt/varlena.c:2575 +#: utils/adt/varbit.c:1066 utils/adt/varbit.c:1168 utils/adt/varlena.c:832 +#: utils/adt/varlena.c:896 utils/adt/varlena.c:1040 utils/adt/varlena.c:2510 +#: utils/adt/varlena.c:2577 #, c-format msgid "negative substring length not allowed" msgstr "negative Teilzeichenkettenlänge nicht erlaubt" @@ -19800,7 +19853,7 @@ msgstr "binäres „Exklusiv-Oder“ nicht mit Bitketten unterschiedlicher Läng 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:1802 utils/adt/varlena.c:2775 +#: utils/adt/varbit.c:1802 utils/adt/varlena.c:2777 #, c-format msgid "new bit must be 0 or 1" msgstr "neues Bit muss 0 oder 1 sein" @@ -19815,63 +19868,63 @@ 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/varlena.c:1409 utils/adt/varlena.c:1798 +#: utils/adt/varlena.c:1410 utils/adt/varlena.c:1799 #, 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:1467 utils/adt/varlena.c:1480 +#: utils/adt/varlena.c:1468 utils/adt/varlena.c:1481 #, 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:1495 +#: utils/adt/varlena.c:1496 #, c-format msgid "could not compare Unicode strings: %m" msgstr "konnte Unicode-Zeichenketten nicht vergleichen: %m" -#: utils/adt/varlena.c:2653 utils/adt/varlena.c:2684 utils/adt/varlena.c:2720 -#: utils/adt/varlena.c:2763 +#: utils/adt/varlena.c:2655 utils/adt/varlena.c:2686 utils/adt/varlena.c:2722 +#: utils/adt/varlena.c:2765 #, 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:3682 +#: utils/adt/varlena.c:3684 #, c-format msgid "field position must be greater than zero" msgstr "Feldposition muss größer als null sein" -#: utils/adt/varlena.c:4561 +#: utils/adt/varlena.c:4563 #, c-format msgid "unterminated format specifier" msgstr "Formatspezifikation nicht abgeschlossen" -#: utils/adt/varlena.c:4693 utils/adt/varlena.c:4813 +#: utils/adt/varlena.c:4695 utils/adt/varlena.c:4815 #, c-format msgid "unrecognized conversion type specifier \"%c\"" msgstr "unbekannte Konvertierungstypspezifikation „%c“" -#: utils/adt/varlena.c:4705 utils/adt/varlena.c:4762 +#: utils/adt/varlena.c:4707 utils/adt/varlena.c:4764 #, c-format msgid "too few arguments for format" msgstr "zu wenige Argumente für Format" -#: utils/adt/varlena.c:4856 utils/adt/varlena.c:5039 +#: utils/adt/varlena.c:4858 utils/adt/varlena.c:5041 #, c-format msgid "number is out of range" msgstr "Zahl ist außerhalb des gültigen Bereichs" -#: utils/adt/varlena.c:4920 utils/adt/varlena.c:4948 +#: utils/adt/varlena.c:4922 utils/adt/varlena.c:4950 #, 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:4941 +#: utils/adt/varlena.c:4943 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "Argumentposition der Breitenangabe muss mit „$“ enden" -#: utils/adt/varlena.c:4986 +#: utils/adt/varlena.c:4988 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "NULL-Werte können nicht als SQL-Bezeichner formatiert werden" @@ -20025,38 +20078,38 @@ msgstr "weder Namensraumname noch URI dürfen NULL sein" 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/cache/lsyscache.c:2516 utils/cache/lsyscache.c:2549 -#: utils/cache/lsyscache.c:2582 utils/cache/lsyscache.c:2615 +#: utils/cache/lsyscache.c:2515 utils/cache/lsyscache.c:2548 +#: utils/cache/lsyscache.c:2581 utils/cache/lsyscache.c:2614 #, c-format msgid "type %s is only a shell" msgstr "Typ %s ist nur eine Hülle" -#: utils/cache/lsyscache.c:2521 +#: utils/cache/lsyscache.c:2520 #, c-format msgid "no input function available for type %s" msgstr "keine Eingabefunktion verfügbar für Typ %s" -#: utils/cache/lsyscache.c:2554 +#: utils/cache/lsyscache.c:2553 #, c-format msgid "no output function available for type %s" msgstr "keine Ausgabefunktion verfügbar für Typ %s" -#: utils/cache/plancache.c:738 +#: utils/cache/plancache.c:725 #, c-format msgid "cached plan must not change result type" msgstr "gecachter Plan darf den Ergebnistyp nicht ändern" -#: utils/cache/relcache.c:4992 +#: utils/cache/relcache.c:5021 #, 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:4994 +#: utils/cache/relcache.c:5023 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Setze trotzdem fort, aber irgendwas stimmt nicht." -#: utils/cache/relcache.c:5208 +#: utils/cache/relcache.c:5256 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "konnte Cache-Datei „%s“ nicht löschen: %m" @@ -20333,17 +20386,17 @@ msgstr "Sprachvalidierungsfunktion %u wurde für Sprache %u statt %u aufgerufen" msgid "could not determine actual result type for function \"%s\" declared to return type %s" msgstr "konnte tatsächlichen Ergebnistyp von Funktion „%s“ mit deklarierten Rückgabetyp %s nicht bestimmen" -#: utils/fmgr/funcapi.c:1343 utils/fmgr/funcapi.c:1374 +#: utils/fmgr/funcapi.c:1342 utils/fmgr/funcapi.c:1373 #, c-format msgid "number of aliases does not match number of columns" msgstr "Anzahl der Aliasnamen stimmt nicht mit der Anzahl der Spalten überein" -#: utils/fmgr/funcapi.c:1368 +#: utils/fmgr/funcapi.c:1367 #, c-format msgid "no column alias was provided" msgstr "Spaltenalias fehlt" -#: utils/fmgr/funcapi.c:1392 +#: utils/fmgr/funcapi.c:1391 #, c-format msgid "could not determine row description for function returning record" msgstr "konnte Zeilenbeschreibung für Funktion, die „record“ zurückgibt, nicht ermitteln" @@ -20353,138 +20406,138 @@ msgstr "konnte Zeilenbeschreibung für Funktion, die „record“ zurückgibt, n msgid "could not change directory to \"%s\": %m" msgstr "konnte nicht in Verzeichnis „%s“ wechseln: %m" -#: utils/init/miscinit.c:424 utils/misc/guc.c:5861 +#: utils/init/miscinit.c:425 utils/misc/guc.c:5820 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "kann Parameter „%s“ nicht in einer sicherheitsbeschränkten Operation setzen" -#: utils/init/miscinit.c:505 +#: utils/init/miscinit.c:506 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "Rolle „%s“ hat keine Berechtigung zum Einloggen" -#: utils/init/miscinit.c:523 +#: utils/init/miscinit.c:524 #, c-format msgid "too many connections for role \"%s\"" msgstr "zu viele Verbindungen von Rolle „%s“" -#: utils/init/miscinit.c:583 +#: utils/init/miscinit.c:584 #, c-format msgid "permission denied to set session authorization" msgstr "keine Berechtigung, um Sitzungsauthorisierung zu setzen" -#: utils/init/miscinit.c:666 +#: utils/init/miscinit.c:667 #, c-format msgid "invalid role OID: %u" msgstr "ungültige Rollen-OID: %u" -#: utils/init/miscinit.c:796 +#: utils/init/miscinit.c:797 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "konnte Sperrdatei „%s“ nicht erstellen: %m" -#: utils/init/miscinit.c:810 +#: utils/init/miscinit.c:811 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "konnte Sperrdatei „%s“ nicht öffnen: %m" -#: utils/init/miscinit.c:816 +#: utils/init/miscinit.c:817 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "konnte Sperrdatei „%s“ nicht lesen: %m" -#: utils/init/miscinit.c:824 +#: utils/init/miscinit.c:825 #, c-format msgid "lock file \"%s\" is empty" msgstr "Sperrdatei „%s“ ist leer" -#: utils/init/miscinit.c:825 +#: utils/init/miscinit.c:826 #, c-format msgid "Either another server is starting, or the lock file is the remnant of a previous server startup crash." msgstr "Entweder startet gerade ein anderer Server oder die Sperrdatei ist von einen Absturz übrig geblieben." -#: utils/init/miscinit.c:872 +#: utils/init/miscinit.c:873 #, c-format msgid "lock file \"%s\" already exists" msgstr "Sperrdatei „%s“ existiert bereits" -#: utils/init/miscinit.c:876 +#: utils/init/miscinit.c:877 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "Läuft bereits ein anderer postgres-Prozess (PID %d) im Datenverzeichnis „%s“?" -#: utils/init/miscinit.c:878 +#: utils/init/miscinit.c:879 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "Läuft bereits ein anderer postmaster-Prozess (PID %d) im Datenverzeichnis „%s“?" -#: utils/init/miscinit.c:881 +#: utils/init/miscinit.c:882 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "Verwendet bereits ein anderer postgres-Prozess (PID %d) die Socketdatei „%s“?" -#: utils/init/miscinit.c:883 +#: utils/init/miscinit.c:884 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "Verwendet bereits ein anderer postmaster-Prozess (PID %d) die Socketdatei „%s“?" -#: utils/init/miscinit.c:919 +#: utils/init/miscinit.c:920 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "bereits bestehender Shared-Memory-Block (Schlüssel %lu, ID %lu) wird noch benutzt" -#: utils/init/miscinit.c:922 +#: utils/init/miscinit.c:923 #, c-format msgid "If you're sure there are no old server processes still running, remove the shared memory block or just delete the file \"%s\"." msgstr "Wenn Sie sich sicher sind, dass kein alter Serverprozess mehr läuft, entfernen Sie den Shared-Memory-Block oder löschen Sie einfach die Datei „%s“." -#: utils/init/miscinit.c:938 +#: utils/init/miscinit.c:939 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "konnte alte Sperrdatei „%s“ nicht löschen: %m" -#: utils/init/miscinit.c:940 +#: utils/init/miscinit.c:941 #, c-format msgid "The file seems accidentally left over, but it could not be removed. Please remove the file by hand and try again." msgstr "Die Datei ist anscheinend aus Versehen übrig geblieben, konnte aber nicht gelöscht werden. Bitte entfernen Sie die Datei von Hand und versuchen Sie es erneut." -#: utils/init/miscinit.c:976 utils/init/miscinit.c:987 -#: utils/init/miscinit.c:997 +#: utils/init/miscinit.c:977 utils/init/miscinit.c:988 +#: utils/init/miscinit.c:998 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "konnte Sperrdatei „%s“ nicht schreiben: %m" -#: utils/init/miscinit.c:1122 utils/misc/guc.c:8574 +#: utils/init/miscinit.c:1127 utils/misc/guc.c:8559 #, c-format msgid "could not read from file \"%s\": %m" msgstr "konnte nicht aus Datei „%s“ lesen: %m" -#: utils/init/miscinit.c:1236 utils/init/miscinit.c:1249 +#: utils/init/miscinit.c:1241 utils/init/miscinit.c:1254 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "„%s“ ist kein gültiges Datenverzeichnis" -#: utils/init/miscinit.c:1238 +#: utils/init/miscinit.c:1243 #, c-format msgid "File \"%s\" is missing." msgstr "Die Datei „%s“ fehlt." -#: utils/init/miscinit.c:1251 +#: utils/init/miscinit.c:1256 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Die Datei „%s“ enthält keine gültigen Daten." -#: utils/init/miscinit.c:1253 +#: utils/init/miscinit.c:1258 #, c-format msgid "You might need to initdb." msgstr "Sie müssen möglicherweise initdb ausführen." -#: utils/init/miscinit.c:1261 +#: utils/init/miscinit.c:1266 #, c-format msgid "The data directory was initialized by PostgreSQL version %ld.%ld, which is not compatible with this version %s." msgstr "Das Datenverzeichnis wurde von PostgreSQL Version %ld.%ld initialisiert, welche nicht mit dieser Version %s kompatibel ist." -#: utils/init/miscinit.c:1332 +#: utils/init/miscinit.c:1337 #, c-format msgid "loaded library \"%s\"" msgstr "Bibliothek „%s“ geladen" @@ -20567,57 +20620,57 @@ msgstr "Erzeugen Sie die Datenbank neu mit einer anderen Locale oder installiere msgid "The database was initialized with LC_CTYPE \"%s\", which is not recognized by setlocale()." msgstr "Die Datenbank wurde mit LC_CTYPE „%s“ initialisiert, was von setlocale() nicht erkannt wird." -#: utils/init/postinit.c:696 +#: utils/init/postinit.c:699 #, c-format msgid "no roles are defined in this database system" msgstr "in diesem Datenbanksystem sind keine Rollen definiert" -#: utils/init/postinit.c:697 +#: utils/init/postinit.c:700 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Sie sollten sofort CREATE USER \"%s\" SUPERUSER; ausführen." -#: utils/init/postinit.c:733 +#: utils/init/postinit.c:736 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "während des Herunterfahrens der Datenbank sind keine neuen Replikationsverbindungen erlaubt" -#: utils/init/postinit.c:737 +#: utils/init/postinit.c:740 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "nur Superuser können während des Herunterfahrens der Datenbank verbinden" -#: utils/init/postinit.c:747 +#: utils/init/postinit.c:750 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "nur Superuser können im Binary-Upgrade-Modus verbinden" -#: utils/init/postinit.c:761 +#: utils/init/postinit.c:764 #, c-format msgid "remaining connection slots are reserved for non-replication superuser connections" msgstr "die verbleibenden Verbindungen sind für Superuser auf Nicht-Replikationsverbindungen reserviert" -#: utils/init/postinit.c:771 +#: utils/init/postinit.c:774 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "nur Superuser und Replikationsrollen können WAL-Sender starten" -#: utils/init/postinit.c:840 +#: utils/init/postinit.c:843 #, c-format msgid "database %u does not exist" msgstr "Datenbank %u existiert nicht" -#: utils/init/postinit.c:900 +#: utils/init/postinit.c:929 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Sie wurde anscheinend gerade gelöscht oder umbenannt." -#: utils/init/postinit.c:918 +#: utils/init/postinit.c:947 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Das Datenbankunterverzeichnis „%s“ fehlt." -#: utils/init/postinit.c:923 +#: utils/init/postinit.c:952 #, c-format msgid "could not access directory \"%s\": %m" msgstr "konnte nicht auf Verzeichnis „%s“ zugreifen: %m" @@ -20627,14 +20680,14 @@ msgstr "konnte nicht auf Verzeichnis „%s“ zugreifen: %m" msgid "invalid encoding number: %d" msgstr "ungültige Kodierungsnummer: %d" -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:140 -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:172 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:137 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:169 #, c-format msgid "unexpected encoding ID %d for ISO 8859 character sets" msgstr "unerwartete Kodierungs-ID %d für ISO-8859-Zeichensatz" -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:130 -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:162 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:127 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:159 #, c-format msgid "unexpected encoding ID %d for WIN character sets" msgstr "unerwartete Kodierungs-ID %d für WIN-Zeichensatz" @@ -20689,1444 +20742,1444 @@ msgstr "ungültige Byte-Sequenz für Kodierung „%s“: %s" msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "Zeichen mit Byte-Folge %s in Kodierung „%s“ hat keine Entsprechung in Kodierung „%s“" -#: utils/misc/guc.c:541 +#: utils/misc/guc.c:527 msgid "Ungrouped" msgstr "Ungruppiert" -#: utils/misc/guc.c:543 +#: utils/misc/guc.c:529 msgid "File Locations" msgstr "Dateipfade" -#: utils/misc/guc.c:545 +#: utils/misc/guc.c:531 msgid "Connections and Authentication" msgstr "Verbindungen und Authentifizierung" -#: utils/misc/guc.c:547 +#: utils/misc/guc.c:533 msgid "Connections and Authentication / Connection Settings" msgstr "Verbindungen und Authentifizierung / Verbindungseinstellungen" -#: utils/misc/guc.c:549 +#: utils/misc/guc.c:535 msgid "Connections and Authentication / Security and Authentication" msgstr "Verbindungen und Authentifizierung / Sicherheit und Authentifizierung" -#: utils/misc/guc.c:551 +#: utils/misc/guc.c:537 msgid "Resource Usage" msgstr "Resourcenbenutzung" -#: utils/misc/guc.c:553 +#: utils/misc/guc.c:539 msgid "Resource Usage / Memory" msgstr "Resourcenbenutzung / Speicher" -#: utils/misc/guc.c:555 +#: utils/misc/guc.c:541 msgid "Resource Usage / Disk" msgstr "Resourcenbenutzung / Festplatte" -#: utils/misc/guc.c:557 +#: utils/misc/guc.c:543 msgid "Resource Usage / Kernel Resources" msgstr "Resourcenbenutzung / Kernelresourcen" -#: utils/misc/guc.c:559 +#: utils/misc/guc.c:545 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Resourcenbenutzung / Kostenbasierte Vacuum-Verzögerung" -#: utils/misc/guc.c:561 +#: utils/misc/guc.c:547 msgid "Resource Usage / Background Writer" msgstr "Resourcenbenutzung / Background-Writer" -#: utils/misc/guc.c:563 +#: utils/misc/guc.c:549 msgid "Resource Usage / Asynchronous Behavior" msgstr "Resourcenbenutzung / Asynchrones Verhalten" -#: utils/misc/guc.c:565 +#: utils/misc/guc.c:551 msgid "Write-Ahead Log" msgstr "Write-Ahead-Log" -#: utils/misc/guc.c:567 +#: utils/misc/guc.c:553 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead-Log / Einstellungen" -#: utils/misc/guc.c:569 +#: utils/misc/guc.c:555 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead-Log / Checkpoints" -#: utils/misc/guc.c:571 +#: utils/misc/guc.c:557 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead-Log / Archivierung" -#: utils/misc/guc.c:573 +#: utils/misc/guc.c:559 msgid "Replication" msgstr "Replikation" -#: utils/misc/guc.c:575 +#: utils/misc/guc.c:561 msgid "Replication / Sending Servers" msgstr "Replikation / sendende Server" -#: utils/misc/guc.c:577 +#: utils/misc/guc.c:563 msgid "Replication / Master Server" msgstr "Replikation / Master-Server" -#: utils/misc/guc.c:579 +#: utils/misc/guc.c:565 msgid "Replication / Standby Servers" msgstr "Replikation / Standby-Server" -#: utils/misc/guc.c:581 +#: utils/misc/guc.c:567 msgid "Query Tuning" msgstr "Anfragetuning" -#: utils/misc/guc.c:583 +#: utils/misc/guc.c:569 msgid "Query Tuning / Planner Method Configuration" msgstr "Anfragetuning / Planermethoden" -#: utils/misc/guc.c:585 +#: utils/misc/guc.c:571 msgid "Query Tuning / Planner Cost Constants" msgstr "Anfragetuning / Planerkosten" -#: utils/misc/guc.c:587 +#: utils/misc/guc.c:573 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Anfragetuning / Genetischer Anfrageoptimierer" -#: utils/misc/guc.c:589 +#: utils/misc/guc.c:575 msgid "Query Tuning / Other Planner Options" msgstr "Anfragetuning / Andere Planeroptionen" -#: utils/misc/guc.c:591 +#: utils/misc/guc.c:577 msgid "Reporting and Logging" msgstr "Berichte und Logging" -#: utils/misc/guc.c:593 +#: utils/misc/guc.c:579 msgid "Reporting and Logging / Where to Log" msgstr "Berichte und Logging / Wohin geloggt wird" -#: utils/misc/guc.c:595 +#: utils/misc/guc.c:581 msgid "Reporting and Logging / When to Log" msgstr "Berichte und Logging / Wann geloggt wird" -#: utils/misc/guc.c:597 +#: utils/misc/guc.c:583 msgid "Reporting and Logging / What to Log" msgstr "Berichte und Logging / Was geloggt wird" -#: utils/misc/guc.c:599 +#: utils/misc/guc.c:585 +msgid "Process Title" +msgstr "" + +#: utils/misc/guc.c:587 msgid "Statistics" msgstr "Statistiken" -#: utils/misc/guc.c:601 +#: utils/misc/guc.c:589 msgid "Statistics / Monitoring" msgstr "Statistiken / Überwachung" -#: utils/misc/guc.c:603 +#: utils/misc/guc.c:591 msgid "Statistics / Query and Index Statistics Collector" msgstr "Statistiken / Statistiksammler für Anfragen und Indexe" -#: utils/misc/guc.c:605 +#: utils/misc/guc.c:593 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc.c:607 +#: utils/misc/guc.c:595 msgid "Client Connection Defaults" msgstr "Standardeinstellungen für Clientverbindungen" -#: utils/misc/guc.c:609 +#: utils/misc/guc.c:597 msgid "Client Connection Defaults / Statement Behavior" msgstr "Standardeinstellungen für Clientverbindungen / Anweisungsverhalten" -#: utils/misc/guc.c:611 +#: utils/misc/guc.c:599 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Standardeinstellungen für Clientverbindungen / Locale und Formatierung" -#: utils/misc/guc.c:613 +#: utils/misc/guc.c:601 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Standardeinstellungen für Clientverbindungen / Shared Library Preloading" -#: utils/misc/guc.c:615 +#: utils/misc/guc.c:603 msgid "Client Connection Defaults / Other Defaults" msgstr "Standardeinstellungen für Clientverbindungen / Andere" -#: utils/misc/guc.c:617 +#: utils/misc/guc.c:605 msgid "Lock Management" msgstr "Sperrenverwaltung" -#: utils/misc/guc.c:619 +#: utils/misc/guc.c:607 msgid "Version and Platform Compatibility" msgstr "Versions- und Plattformkompatibilität" -#: utils/misc/guc.c:621 +#: utils/misc/guc.c:609 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Versions- und Plattformkompatibilität / Frühere PostgreSQL-Versionen" -#: utils/misc/guc.c:623 +#: utils/misc/guc.c:611 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Versions- und Plattformkompatibilität / Andere Plattformen und Clients" -#: utils/misc/guc.c:625 +#: utils/misc/guc.c:613 msgid "Error Handling" msgstr "Fehlerbehandlung" -#: utils/misc/guc.c:627 +#: utils/misc/guc.c:615 msgid "Preset Options" msgstr "Voreingestellte Optionen" -#: utils/misc/guc.c:629 +#: utils/misc/guc.c:617 msgid "Customized Options" msgstr "Angepasste Optionen" -#: utils/misc/guc.c:631 +#: utils/misc/guc.c:619 msgid "Developer Options" msgstr "Entwickleroptionen" -#: utils/misc/guc.c:688 +#: utils/misc/guc.c:676 msgid "Valid units for this parameter are \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Gültige Einheiten für diesen Parameter sind „kB“, „MB“, „GB“ und „TB“." -#: utils/misc/guc.c:716 +#: utils/misc/guc.c:703 msgid "Valid units for this parameter are \"ms\", \"s\", \"min\", \"h\", and \"d\"." msgstr "Gültige Einheiten für diesen Parameter sind „ms“, „s“, „min“, „h“ und „d“." -#: utils/misc/guc.c:775 +#: utils/misc/guc.c:762 msgid "Enables the planner's use of sequential-scan plans." msgstr "Ermöglicht sequenzielle Scans in Planer." -#: utils/misc/guc.c:784 +#: utils/misc/guc.c:771 msgid "Enables the planner's use of index-scan plans." msgstr "Ermöglicht Index-Scans im Planer." -#: utils/misc/guc.c:793 +#: utils/misc/guc.c:780 msgid "Enables the planner's use of index-only-scan plans." msgstr "Ermöglicht Index-Only-Scans im Planer." -#: utils/misc/guc.c:802 +#: utils/misc/guc.c:789 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Ermöglicht Bitmap-Scans im Planer." -#: utils/misc/guc.c:811 +#: utils/misc/guc.c:798 msgid "Enables the planner's use of TID scan plans." msgstr "Ermöglicht TID-Scans im Planer." -#: utils/misc/guc.c:820 +#: utils/misc/guc.c:807 msgid "Enables the planner's use of explicit sort steps." msgstr "Ermöglicht Sortierschritte im Planer." -#: utils/misc/guc.c:829 +#: utils/misc/guc.c:816 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Ermöglicht Hash-Aggregierung im Planer." -#: utils/misc/guc.c:838 +#: utils/misc/guc.c:825 msgid "Enables the planner's use of materialization." msgstr "Ermöglicht Materialisierung im Planer." -#: utils/misc/guc.c:847 +#: utils/misc/guc.c:834 msgid "Enables the planner's use of nested-loop join plans." msgstr "Ermöglicht Nested-Loop-Verbunde im Planer." -#: utils/misc/guc.c:856 +#: utils/misc/guc.c:843 msgid "Enables the planner's use of merge join plans." msgstr "Ermöglicht Merge-Verbunde im Planer." -#: utils/misc/guc.c:865 +#: utils/misc/guc.c:852 msgid "Enables the planner's use of hash join plans." msgstr "Ermöglicht Hash-Verbunde im Planer." -#: utils/misc/guc.c:874 +#: utils/misc/guc.c:861 msgid "Enables genetic query optimization." msgstr "Ermöglicht genetische Anfrageoptimierung." -#: utils/misc/guc.c:875 +#: utils/misc/guc.c:862 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Dieser Algorithmus versucht das Planen ohne erschöpfende Suche durchzuführen." -#: utils/misc/guc.c:885 +#: utils/misc/guc.c:872 msgid "Shows whether the current user is a superuser." msgstr "Zeigt, ob der aktuelle Benutzer ein Superuser ist." -#: utils/misc/guc.c:895 +#: utils/misc/guc.c:882 msgid "Enables advertising the server via Bonjour." msgstr "Ermöglicht die Bekanntgabe des Servers mit Bonjour." -#: utils/misc/guc.c:904 +#: utils/misc/guc.c:891 msgid "Collects transaction commit time." msgstr "" -#: utils/misc/guc.c:913 +#: utils/misc/guc.c:900 msgid "Enables SSL connections." msgstr "Ermöglicht SSL-Verbindungen." -#: utils/misc/guc.c:922 +#: utils/misc/guc.c:909 msgid "Give priority to server ciphersuite order." msgstr "Der Ciphersuite-Reihenfolge des Servers Vorrang geben." -#: utils/misc/guc.c:931 +#: utils/misc/guc.c:918 msgid "Forces synchronization of updates to disk." msgstr "Erzwingt die Synchronisierung von Aktualisierungen auf Festplatte." -#: utils/misc/guc.c:932 +#: utils/misc/guc.c:919 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "Der Server verwendet den Systemaufruf fsync() an mehreren Stellen, um sicherzustellen, dass Datenänderungen physikalisch auf die Festplatte geschrieben werden. Das stellt sicher, dass der Datenbankcluster nach einem Betriebssystemabsturz oder Hardwarefehler in einem korrekten Zustand wiederhergestellt werden kann." -#: utils/misc/guc.c:943 +#: utils/misc/guc.c:930 msgid "Continues processing after a checksum failure." msgstr "Setzt die Verarbeitung trotz Prüfsummenfehler fort." -#: utils/misc/guc.c:944 +#: utils/misc/guc.c:931 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "Wenn eine fehlerhafte Prüfsumme entdeckt wird, gibt PostgreSQL normalerweise ein Fehler aus und bricht die aktuelle Transaktion ab. Wenn „ignore_checksum_failure“ an ist, dann wird der Fehler ignoriert (aber trotzdem eine Warnung ausgegeben) und die Verarbeitung geht weiter. Dieses Verhalten kann Abstürze und andere ernsthafte Probleme verursachen. Es hat keine Auswirkungen, wenn Prüfsummen nicht eingeschaltet sind." -#: utils/misc/guc.c:958 +#: utils/misc/guc.c:945 msgid "Continues processing past damaged page headers." msgstr "Setzt die Verarbeitung trotz kaputter Seitenköpfe fort." -#: utils/misc/guc.c:959 +#: utils/misc/guc.c:946 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "Wenn ein kaputter Seitenkopf entdeckt wird, gibt PostgreSQL normalerweise einen Fehler aus und bricht die aktuelle Transaktion ab. Wenn „zero_damaged_pages“ an ist, dann wird eine Warnung ausgegeben, die kaputte Seite mit Nullen gefüllt und die Verarbeitung geht weiter. Dieses Verhalten zerstört Daten, nämlich alle Zeilen in der kaputten Seite." -#: utils/misc/guc.c:972 +#: utils/misc/guc.c:959 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Schreibt volle Seiten in den WAL, sobald sie nach einem Checkpoint geändert werden." -#: utils/misc/guc.c:973 +#: utils/misc/guc.c:960 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "Ein Seitenschreibvorgang während eines Betriebssystemabsturzes könnte eventuell nur teilweise geschrieben worden sein. Bei der Wiederherstellung sind die im WAL gespeicherten Zeilenänderungen nicht ausreichend. Diese Option schreibt Seiten, sobald sie nach einem Checkpoint geändert worden sind, damit eine volle Wiederherstellung möglich ist." -#: utils/misc/guc.c:986 +#: utils/misc/guc.c:973 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." msgstr "Schreibt volle Seiten in den WAL, sobald sie nach einem Checkpoint geändert werden, auch für nicht kritische Änderungen." -#: utils/misc/guc.c:996 +#: utils/misc/guc.c:983 msgid "Compresses full-page writes written in WAL file." msgstr "" -#: utils/misc/guc.c:1006 +#: utils/misc/guc.c:993 msgid "Logs each checkpoint." msgstr "Schreibt jeden Checkpoint in den Log." -#: utils/misc/guc.c:1015 +#: utils/misc/guc.c:1002 msgid "Logs each successful connection." msgstr "Schreibt jede erfolgreiche Verbindung in den Log." -#: utils/misc/guc.c:1024 +#: utils/misc/guc.c:1011 msgid "Logs end of a session, including duration." msgstr "Schreibt jedes Verbindungsende mit Sitzungszeit in den Log." -#: utils/misc/guc.c:1033 +#: utils/misc/guc.c:1020 #, fuzzy #| msgid "Logs each query's execution plan." msgid "Logs each replication command." msgstr "Schreibt der Ausführungsplan jeder Anfrage in den Log." -#: utils/misc/guc.c:1042 +#: utils/misc/guc.c:1029 #, fuzzy #| msgid "Shows whether the current user is a superuser." msgid "Shows whether the running server has assertion checks enabled." msgstr "Zeigt, ob der aktuelle Benutzer ein Superuser ist." -#: utils/misc/guc.c:1057 +#: utils/misc/guc.c:1044 msgid "Terminate session on any error." msgstr "Sitzung bei jedem Fehler abbrechen." -#: utils/misc/guc.c:1066 +#: utils/misc/guc.c:1053 msgid "Reinitialize server after backend crash." msgstr "Server nach Absturz eines Serverprozesses reinitialisieren." -#: utils/misc/guc.c:1076 +#: utils/misc/guc.c:1063 msgid "Logs the duration of each completed SQL statement." msgstr "Loggt die Dauer jeder abgeschlossenen SQL-Anweisung." -#: utils/misc/guc.c:1085 +#: utils/misc/guc.c:1072 msgid "Logs each query's parse tree." msgstr "Scheibt den Parsebaum jeder Anfrage in den Log." -#: utils/misc/guc.c:1094 +#: utils/misc/guc.c:1081 msgid "Logs each query's rewritten parse tree." msgstr "Schreibt den umgeschriebenen Parsebaum jeder Anfrage in den Log." -#: utils/misc/guc.c:1103 +#: utils/misc/guc.c:1090 msgid "Logs each query's execution plan." msgstr "Schreibt der Ausführungsplan jeder Anfrage in den Log." -#: utils/misc/guc.c:1112 +#: utils/misc/guc.c:1099 msgid "Indents parse and plan tree displays." msgstr "Rückt die Anzeige von Parse- und Planbäumen ein." -#: utils/misc/guc.c:1121 +#: utils/misc/guc.c:1108 msgid "Writes parser performance statistics to the server log." msgstr "Schreibt Parser-Leistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1130 +#: utils/misc/guc.c:1117 msgid "Writes planner performance statistics to the server log." msgstr "Schreibt Planer-Leistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1139 +#: utils/misc/guc.c:1126 msgid "Writes executor performance statistics to the server log." msgstr "Schreibt Executor-Leistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1148 +#: utils/misc/guc.c:1135 msgid "Writes cumulative performance statistics to the server log." msgstr "Schreibt Gesamtleistungsstatistiken in den Serverlog." -#: utils/misc/guc.c:1158 +#: utils/misc/guc.c:1145 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Loggt Statistiken über Systemressourcen (Speicher und CPU) während diverser B-Baum-Operationen." -#: utils/misc/guc.c:1170 +#: utils/misc/guc.c:1157 msgid "Collects information about executing commands." msgstr "Sammelt Informationen über ausgeführte Befehle." -#: utils/misc/guc.c:1171 +#: utils/misc/guc.c:1158 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "Schaltet die Sammlung von Informationen über den aktuell ausgeführten Befehl jeder Sitzung ein, einschließlich der Zeit, and dem die Befehlsausführung begann." -#: utils/misc/guc.c:1181 +#: utils/misc/guc.c:1168 msgid "Collects statistics on database activity." msgstr "Sammelt Statistiken über Datenbankaktivität." -#: utils/misc/guc.c:1190 +#: utils/misc/guc.c:1177 msgid "Collects timing statistics for database I/O activity." msgstr "Sammelt Zeitmessungsstatistiken über Datenbank-I/O-Aktivität." -#: utils/misc/guc.c:1200 +#: utils/misc/guc.c:1187 msgid "Updates the process title to show the active SQL command." msgstr "Der Prozesstitel wird aktualisiert, um den aktuellen SQL-Befehl anzuzeigen." -#: utils/misc/guc.c:1201 +#: utils/misc/guc.c:1188 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "Ermöglicht das Aktualisieren des Prozesstitels bei jedem von Server empfangenen neuen SQL-Befehl." -#: utils/misc/guc.c:1210 +#: utils/misc/guc.c:1197 msgid "Starts the autovacuum subprocess." msgstr "Startet den Autovacuum-Prozess." -#: utils/misc/guc.c:1220 +#: utils/misc/guc.c:1207 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Erzeugt Debug-Ausgabe für LISTEN und NOTIFY." -#: utils/misc/guc.c:1232 +#: utils/misc/guc.c:1219 msgid "Emits information about lock usage." msgstr "Gibt Informationen über Sperrenverwendung aus." -#: utils/misc/guc.c:1242 +#: utils/misc/guc.c:1229 msgid "Emits information about user lock usage." msgstr "Gibt Informationen über Benutzersperrenverwendung aus." -#: utils/misc/guc.c:1252 +#: utils/misc/guc.c:1239 msgid "Emits information about lightweight lock usage." msgstr "Gibt Informationen über die Verwendung von Lightweight Locks aus." -#: utils/misc/guc.c:1262 +#: utils/misc/guc.c:1249 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Gibt Informationen über alle aktuellen Sperren aus, wenn eine Verklemmung auftritt." -#: utils/misc/guc.c:1274 +#: utils/misc/guc.c:1261 msgid "Logs long lock waits." msgstr "Schreibt Meldungen über langes Warten auf Sperren in den Log." -#: utils/misc/guc.c:1284 +#: utils/misc/guc.c:1271 msgid "Logs the host name in the connection logs." msgstr "Schreibt den Hostnamen jeder Verbindung in den Log." -#: utils/misc/guc.c:1285 +#: utils/misc/guc.c:1272 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "In der Standardeinstellung zeigen die Verbindungslogs nur die IP-Adresse der Clienthosts. Wenn Sie den Hostnamen auch anzeigen wollen, dann können Sie diese Option anschalten, aber je nachdem, wie Ihr DNS eingerichtet ist, kann das die Leistung nicht unerheblich beeinträchtigen." -#: utils/misc/guc.c:1296 +#: utils/misc/guc.c:1283 msgid "Causes subtables to be included by default in various commands." msgstr "Schließt abgeleitete Tabellen in diverse Befehle automatisch ein." -#: utils/misc/guc.c:1305 +#: utils/misc/guc.c:1292 msgid "Encrypt passwords." msgstr "Verschlüsselt Passwörter." -#: utils/misc/guc.c:1306 +#: utils/misc/guc.c:1293 msgid "When a password is specified in CREATE USER or ALTER USER without writing either ENCRYPTED or UNENCRYPTED, this parameter determines whether the password is to be encrypted." msgstr "Wenn in CREATE USER oder ALTER USER ein Passwort ohne ENCRYPTED oder UNENCRYPTED angegeben ist, bestimmt dieser Parameter, ob das Passwort verschlüsselt wird." -#: utils/misc/guc.c:1316 +#: utils/misc/guc.c:1303 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Behandelt „ausdruck=NULL“ als „ausdruck IS NULL“." -#: utils/misc/guc.c:1317 +#: utils/misc/guc.c:1304 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "Wenn an, dann werden Ausdrücke der Form ausdruck = NULL (oder NULL = ausdruck) wie ausdruck IS NULL behandelt, das heißt, sie ergeben wahr, wenn das Ergebnis von ausdruck der NULL-Wert ist, und ansonsten falsch. Das korrekte Verhalten von ausdruck = NULL ist immer den NULL-Wert (für unbekannt) zurückzugeben." -#: utils/misc/guc.c:1329 +#: utils/misc/guc.c:1316 msgid "Enables per-database user names." msgstr "Ermöglicht Datenbank-lokale Benutzernamen." -#: utils/misc/guc.c:1338 +#: utils/misc/guc.c:1325 msgid "Sets the default read-only status of new transactions." msgstr "Setzt den Standardwert für die Read-Only-Einstellung einer neuen Transaktion." -#: utils/misc/guc.c:1347 +#: utils/misc/guc.c:1334 msgid "Sets the current transaction's read-only status." msgstr "Setzt die Read-Only-Einstellung der aktuellen Transaktion." -#: utils/misc/guc.c:1357 +#: utils/misc/guc.c:1344 msgid "Sets the default deferrable status of new transactions." msgstr "Setzt den Standardwert für die Deferrable-Einstellung einer neuen Transaktion." -#: utils/misc/guc.c:1366 +#: utils/misc/guc.c:1353 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "Ob eine serialisierbare Read-Only-Transaktion aufgeschoben werden soll, bis sie ohne mögliche Serialisierungsfehler ausgeführt werden kann." -#: utils/misc/guc.c:1376 +#: utils/misc/guc.c:1363 +msgid "Enable row security." +msgstr "" + +#: utils/misc/guc.c:1364 +#, fuzzy +#| msgid "define or change a security label applied to an object" +msgid "When enabled, row security will be applied to all users." +msgstr "definiert oder ändert ein Security-Label eines Objektes" + +#: utils/misc/guc.c:1372 msgid "Check function bodies during CREATE FUNCTION." msgstr "Prüft Funktionskörper bei der Ausführung von CREATE FUNCTION." -#: utils/misc/guc.c:1385 +#: utils/misc/guc.c:1381 msgid "Enable input of NULL elements in arrays." msgstr "Ermöglicht die Eingabe von NULL-Elementen in Arrays." -#: utils/misc/guc.c:1386 +#: utils/misc/guc.c:1382 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "Wenn dies eingeschaltet ist, wird ein nicht gequotetes NULL in einem Array-Eingabewert als NULL-Wert interpretiert, ansonsten als Zeichenkette." -#: utils/misc/guc.c:1396 +#: utils/misc/guc.c:1392 msgid "Create new tables with OIDs by default." msgstr "Erzeugt neue Tabellen standardmäßig mit OIDs." -#: utils/misc/guc.c:1405 +#: utils/misc/guc.c:1401 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "Startet einen Subprozess, um die Stderr-Ausgabe und/oder CSV-Logs in Logdateien auszugeben." -#: utils/misc/guc.c:1414 +#: utils/misc/guc.c:1410 msgid "Truncate existing log files of same name during log rotation." msgstr "Kürzt existierende Logdateien mit dem selben Namen beim Rotieren." -#: utils/misc/guc.c:1425 +#: utils/misc/guc.c:1421 msgid "Emit information about resource usage in sorting." msgstr "Gibt Informationen über die Ressourcenverwendung beim Sortieren aus." -#: utils/misc/guc.c:1439 +#: utils/misc/guc.c:1435 msgid "Generate debugging output for synchronized scanning." msgstr "Erzeugt Debug-Ausgabe für synchronisiertes Scannen." -#: utils/misc/guc.c:1454 +#: utils/misc/guc.c:1450 msgid "Enable bounded sorting using heap sort." msgstr "Ermöglicht Bounded Sorting mittels Heap-Sort." -#: utils/misc/guc.c:1467 +#: utils/misc/guc.c:1463 msgid "Emit WAL-related debugging output." msgstr "Gibt diverse Debug-Meldungen über WAL aus." -#: utils/misc/guc.c:1479 +#: utils/misc/guc.c:1475 msgid "Datetimes are integer based." msgstr "Datum/Zeit verwendet intern ganze Zahlen." -#: utils/misc/guc.c:1494 +#: utils/misc/guc.c:1490 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "Bestimmt, ob Groß-/Kleinschreibung bei Kerberos- und GSSAPI-Benutzernamen ignoriert werden soll." -#: utils/misc/guc.c:1504 +#: utils/misc/guc.c:1500 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Warnt bei Backslash-Escapes in normalen Zeichenkettenkonstanten." -#: utils/misc/guc.c:1514 +#: utils/misc/guc.c:1510 msgid "Causes '...' strings to treat backslashes literally." msgstr "Bewirkt, dass Zeichenketten der Art '...' Backslashes als normales Zeichen behandeln." -#: utils/misc/guc.c:1525 +#: utils/misc/guc.c:1521 msgid "Enable synchronized sequential scans." msgstr "Ermöglicht synchronisierte sequenzielle Scans." -#: utils/misc/guc.c:1535 +#: utils/misc/guc.c:1531 msgid "Allows connections and queries during recovery." msgstr "Erlaubt Verbindungen und Anfragen während der Wiederherstellung." -#: utils/misc/guc.c:1545 +#: utils/misc/guc.c:1541 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Erlaubt Rückmeldungen von einem Hot Standby an den Primärserver, um Anfragekonflikte zu vermeiden." -#: utils/misc/guc.c:1555 +#: utils/misc/guc.c:1551 msgid "Allows modifications of the structure of system tables." msgstr "Erlaubt Änderungen an der Struktur von Systemtabellen." -#: utils/misc/guc.c:1566 +#: utils/misc/guc.c:1562 msgid "Disables reading from system indexes." msgstr "Schaltet das Lesen aus Systemindexen ab." -#: utils/misc/guc.c:1567 +#: utils/misc/guc.c:1563 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "Das Aktualisieren der Indexe wird nicht verhindert, also ist die Verwendung unbedenklich. Schlimmstenfalls wird alles langsamer." -#: utils/misc/guc.c:1578 +#: utils/misc/guc.c:1574 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Schaltet den rückwärtskompatiblen Modus für Privilegienprüfungen bei Large Objects ein." -#: utils/misc/guc.c:1579 +#: utils/misc/guc.c:1575 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "Überspringt Privilegienprüfungen beim Lesen oder Ändern von Large Objects, zur Kompatibilität mit PostgreSQL-Versionen vor 9.0." -#: utils/misc/guc.c:1589 +#: utils/misc/guc.c:1585 msgid "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." msgstr "" -#: utils/misc/guc.c:1599 +#: utils/misc/guc.c:1595 msgid "When generating SQL fragments, quote all identifiers." msgstr "Wenn SQL-Fragmente erzeugt werden, alle Bezeichner quoten." -#: utils/misc/guc.c:1609 +#: utils/misc/guc.c:1605 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Zeigt, ob Datenprüfsummen in diesem Cluster angeschaltet sind." -#: utils/misc/guc.c:1629 +#: utils/misc/guc.c:1625 msgid "Forces a switch to the next xlog file if a new file has not been started within N seconds." msgstr "Erzwingt das Umschalten zur nächsten Transaktionslogdatei, wenn seit N Sekunden keine neue Datei begonnen worden ist." -#: utils/misc/guc.c:1640 +#: utils/misc/guc.c:1636 msgid "Waits N seconds on connection startup after authentication." msgstr "Wartet beim Starten einer Verbindung N Sekunden nach der Authentifizierung." -#: utils/misc/guc.c:1641 utils/misc/guc.c:2143 +#: utils/misc/guc.c:1637 utils/misc/guc.c:2139 msgid "This allows attaching a debugger to the process." msgstr "Das ermöglicht es, einen Debugger in den Prozess einzuhängen." -#: utils/misc/guc.c:1650 +#: utils/misc/guc.c:1646 msgid "Sets the default statistics target." msgstr "Setzt das voreingestellte Statistikziel." -#: utils/misc/guc.c:1651 +#: utils/misc/guc.c:1647 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "Diese Einstellung gilt für Tabellenspalten, für die kein spaltenspezifisches Ziel mit ALTER TABLE SET STATISTICS gesetzt worden ist." -#: utils/misc/guc.c:1660 +#: utils/misc/guc.c:1656 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Setzt die Größe der FROM-Liste, ab der Unteranfragen nicht kollabiert werden." -#: utils/misc/guc.c:1662 +#: utils/misc/guc.c:1658 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "Der Planer bindet Unteranfragen in die übergeordneten Anfragen ein, wenn die daraus resultierende FROM-Liste nicht mehr als so viele Elemente haben würde." -#: utils/misc/guc.c:1672 +#: utils/misc/guc.c:1668 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Setzt die Größe der FROM-Liste, ab der JOIN-Konstrukte nicht aufgelöst werden." -#: utils/misc/guc.c:1674 +#: utils/misc/guc.c:1670 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "Der Planer löst ausdrückliche JOIN-Konstrukte in FROM-Listen auf, wenn die daraus resultierende FROM-Liste nicht mehr als so viele Elemente haben würde." -#: utils/misc/guc.c:1684 +#: utils/misc/guc.c:1680 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Setzt die Anzahl der Elemente in der FROM-Liste, ab der GEQO verwendet wird." -#: utils/misc/guc.c:1693 +#: utils/misc/guc.c:1689 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: wird für die Berechnung der Vorgabewerte anderer GEQO-Parameter verwendet." -#: utils/misc/guc.c:1702 +#: utils/misc/guc.c:1698 msgid "GEQO: number of individuals in the population." msgstr "GEQO: Anzahl der Individien in der Bevölkerung." -#: utils/misc/guc.c:1703 utils/misc/guc.c:1712 +#: utils/misc/guc.c:1699 utils/misc/guc.c:1708 msgid "Zero selects a suitable default value." msgstr "Null wählt einen passenden Vorgabewert." -#: utils/misc/guc.c:1711 +#: utils/misc/guc.c:1707 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: Anzahl der Iterationen im Algorithmus." -#: utils/misc/guc.c:1722 +#: utils/misc/guc.c:1718 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Setzt die Zeit, die gewartet wird, bis auf Verklemmung geprüft wird." -#: utils/misc/guc.c:1733 +#: utils/misc/guc.c:1729 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Setzt die maximale Verzögerung bevor Anfragen storniert werden, wenn ein Hot-Standby-Server archivierte WAL-Daten verarbeitet." -#: utils/misc/guc.c:1744 +#: utils/misc/guc.c:1740 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "Setzt die maximale Verzögerung bevor Anfragen storniert werden, wenn ein Hot-Standby-Server gestreamte WAL-Daten verarbeitet." -#: utils/misc/guc.c:1755 +#: utils/misc/guc.c:1751 msgid "Sets the maximum interval between WAL receiver status reports to the primary." msgstr "Setzt das maximale Intervall zwischen Statusberichten des WAL-Receivers an den Primärserver." -#: utils/misc/guc.c:1766 +#: utils/misc/guc.c:1762 msgid "Sets the maximum wait time to receive data from the primary." msgstr "Setzt die maximale Zeit, um auf den Empfang von Daten vom Primärserver zu warten." -#: utils/misc/guc.c:1777 +#: utils/misc/guc.c:1773 msgid "Sets the maximum number of concurrent connections." msgstr "Setzt die maximale Anzahl gleichzeitiger Verbindungen." -#: utils/misc/guc.c:1787 +#: utils/misc/guc.c:1783 msgid "Sets the number of connection slots reserved for superusers." msgstr "Setzt die Anzahl der für Superuser reservierten Verbindungen." -#: utils/misc/guc.c:1801 +#: utils/misc/guc.c:1797 msgid "Sets the number of shared memory buffers used by the server." msgstr "Setzt die Anzahl der vom Server verwendeten Shared-Memory-Puffer." -#: utils/misc/guc.c:1812 +#: utils/misc/guc.c:1808 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Setzt die maximale Anzahl der von jeder Sitzung verwendeten temporären Puffer." -#: utils/misc/guc.c:1823 +#: utils/misc/guc.c:1819 msgid "Sets the TCP port the server listens on." msgstr "Setzt den TCP-Port, auf dem der Server auf Verbindungen wartet." -#: utils/misc/guc.c:1833 +#: utils/misc/guc.c:1829 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Setzt die Zugriffsrechte für die Unix-Domain-Socket." -#: utils/misc/guc.c:1834 +#: utils/misc/guc.c:1830 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Unix-Domain-Sockets verwenden die üblichen Zugriffsrechte für Unix-Dateisysteme. Der Wert dieser Option muss ein numerischer Wert in der von den Systemaufrufen chmod und umask verwendeten Form sein. (Um das gebräuchliche Oktalformat zu verwenden, muss die Zahl mit 0 (einer Null) anfangen.)" -#: utils/misc/guc.c:1848 +#: utils/misc/guc.c:1844 msgid "Sets the file permissions for log files." msgstr "Setzt die Dateizugriffsrechte für Logdateien." -#: utils/misc/guc.c:1849 +#: utils/misc/guc.c:1845 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Der Wert dieser Option muss ein numerischer Wert in der von den Systemaufrufen chmod und umask verwendeten Form sein. (Um das gebräuchliche Oktalformat zu verwenden, muss die Zahl mit 0 (einer Null) anfangen.)" -#: utils/misc/guc.c:1862 +#: utils/misc/guc.c:1858 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Setzt die maximale Speichergröße für Anfrage-Arbeitsbereiche." -#: utils/misc/guc.c:1863 +#: utils/misc/guc.c:1859 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "Gibt die Speichermenge an, die für interne Sortiervorgänge und Hashtabellen verwendet werden kann, bevor auf temporäre Dateien umgeschaltet wird." -#: utils/misc/guc.c:1875 +#: utils/misc/guc.c:1871 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Setzt die maximale Speichergröße für Wartungsoperationen." -#: utils/misc/guc.c:1876 +#: utils/misc/guc.c:1872 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Das schließt Operationen wie VACUUM und CREATE INDEX ein." -#: utils/misc/guc.c:1891 +#: utils/misc/guc.c:1887 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Setzt die maximale Stackgröße, in Kilobytes." -#: utils/misc/guc.c:1902 +#: utils/misc/guc.c:1898 msgid "Limits the total size of all temporary files used by each session." msgstr "Beschränkt die Gesamtgröße aller temporären Dateien, die von einer Sitzung verwendet werden." -#: utils/misc/guc.c:1903 +#: utils/misc/guc.c:1899 msgid "-1 means no limit." msgstr "-1 bedeutet keine Grenze." -#: utils/misc/guc.c:1913 +#: utils/misc/guc.c:1909 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Vacuum-Kosten für eine im Puffer-Cache gefundene Seite." -#: utils/misc/guc.c:1923 +#: utils/misc/guc.c:1919 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Vacuum-Kosten für eine nicht im Puffer-Cache gefundene Seite." -#: utils/misc/guc.c:1933 +#: utils/misc/guc.c:1929 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Vacuum-Kosten für eine durch Vacuum schmutzig gemachte Seite." -#: utils/misc/guc.c:1943 +#: utils/misc/guc.c:1939 msgid "Vacuum cost amount available before napping." msgstr "Verfügbare Vacuum-Kosten vor Nickerchen." -#: utils/misc/guc.c:1953 +#: utils/misc/guc.c:1949 msgid "Vacuum cost delay in milliseconds." msgstr "Vacuum-Kosten-Verzögerung in Millisekunden." -#: utils/misc/guc.c:1964 +#: utils/misc/guc.c:1960 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Vacuum-Kosten-Verzögerung in Millisekunden, für Autovacuum." -#: utils/misc/guc.c:1975 +#: utils/misc/guc.c:1971 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Verfügbare Vacuum-Kosten vor Nickerchen, für Autovacuum." -#: utils/misc/guc.c:1985 +#: utils/misc/guc.c:1981 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Setzt die maximale Zahl gleichzeitig geöffneter Dateien für jeden Serverprozess." -#: utils/misc/guc.c:1998 +#: utils/misc/guc.c:1994 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Setzt die maximale Anzahl von gleichzeitig vorbereiteten Transaktionen." -#: utils/misc/guc.c:2009 +#: utils/misc/guc.c:2005 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Setzt die minimale Tabellen-OID für das Verfolgen von Sperren." -#: utils/misc/guc.c:2010 +#: utils/misc/guc.c:2006 msgid "Is used to avoid output on system tables." msgstr "Wird verwendet, um Ausgabe für Systemtabellen zu vermeiden." -#: utils/misc/guc.c:2019 +#: utils/misc/guc.c:2015 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Setzt die OID der Tabelle mit bedingungsloser Sperrenverfolgung." -#: utils/misc/guc.c:2031 +#: utils/misc/guc.c:2027 msgid "Sets the maximum allowed duration of any statement." msgstr "Setzt die maximal erlaubte Dauer jeder Anweisung." -#: utils/misc/guc.c:2032 utils/misc/guc.c:2043 +#: utils/misc/guc.c:2028 utils/misc/guc.c:2039 msgid "A value of 0 turns off the timeout." msgstr "Der Wert 0 schaltet die Zeitprüfung aus." -#: utils/misc/guc.c:2042 +#: utils/misc/guc.c:2038 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Setzt die maximal erlaubte Dauer, um auf eine Sperre zu warten." -#: utils/misc/guc.c:2053 +#: utils/misc/guc.c:2049 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Mindestalter, bei dem VACUUM eine Tabellenzeile einfrieren soll." -#: utils/misc/guc.c:2063 +#: utils/misc/guc.c:2059 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." -#: utils/misc/guc.c:2073 +#: utils/misc/guc.c:2069 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Mindestalter, bei dem VACUUM eine MultiXactId in einer Tabellenzeile einfrieren soll." -#: utils/misc/guc.c:2083 +#: utils/misc/guc.c:2079 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Multixact-Alter, bei dem VACUUM die ganze Tabelle durchsuchen soll, um Zeilen einzufrieren." -#: utils/misc/guc.c:2093 +#: utils/misc/guc.c:2089 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Anzahl Transaktionen, um die VACUUM- und HOT-Aufräumen aufgeschoben werden soll." -#: utils/misc/guc.c:2106 +#: utils/misc/guc.c:2102 msgid "Sets the maximum number of locks per transaction." msgstr "Setzt die maximale Anzahl Sperren pro Transaktion." -#: utils/misc/guc.c:2107 +#: utils/misc/guc.c:2103 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "Die globale Sperrentabelle wird mit der Annahme angelegt, das höchstens max_locks_per_transaction * max_connections verschiedene Objekte gleichzeitig gesperrt werden müssen." -#: utils/misc/guc.c:2118 +#: utils/misc/guc.c:2114 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Setzt die maximale Anzahl Prädikatsperren pro Transaktion." -#: utils/misc/guc.c:2119 +#: utils/misc/guc.c:2115 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "Die globale Prädikatsperrentabelle wird mit der Annahme angelegt, das höchstens max_pred_locks_per_transaction * max_connections verschiedene Objekte gleichzeitig gesperrt werden müssen." -#: utils/misc/guc.c:2130 +#: utils/misc/guc.c:2126 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Setzt die maximale Zeit, um die Client-Authentifizierung zu beenden." -#: utils/misc/guc.c:2142 +#: utils/misc/guc.c:2138 msgid "Waits N seconds on connection startup before authentication." msgstr "Wartet beim Starten einer Verbindung N Sekunden vor der Authentifizierung." -#: utils/misc/guc.c:2153 +#: utils/misc/guc.c:2149 msgid "Sets the number of WAL files held for standby servers." msgstr "Setzt die maximale Anzahl der für Standby-Server vorgehaltenen WAL-Dateien." -#: utils/misc/guc.c:2163 +#: utils/misc/guc.c:2159 #, fuzzy #| msgid "Sets the maximum time to wait for WAL replication." msgid "Sets the minimum size to shrink the WAL to." msgstr "Setzt die maximale Zeit, um auf WAL-Replikation zu warten." -#: utils/misc/guc.c:2174 +#: utils/misc/guc.c:2170 #, fuzzy #| msgid "Sets the maximum time between automatic WAL checkpoints." msgid "Sets the WAL size that triggers a checkpoint." msgstr "Setzt die maximale Zeit zwischen automatischen WAL-Checkpoints." -#: utils/misc/guc.c:2185 +#: utils/misc/guc.c:2181 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Setzt die maximale Zeit zwischen automatischen WAL-Checkpoints." -#: utils/misc/guc.c:2196 +#: utils/misc/guc.c:2192 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "Schreibt eine Logmeldung, wenn Checkpoint-Segmente häufiger als dieser Wert gefüllt werden." -#: utils/misc/guc.c:2198 +#: utils/misc/guc.c:2194 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "Schreibe Meldung in den Serverlog, wenn Checkpoints, die durch Füllen der Checkpoint-Segmente ausgelöst werden, häufiger als dieser Wert in Sekunden passieren. Null schaltet die Warnung ab." -#: utils/misc/guc.c:2210 +#: utils/misc/guc.c:2206 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Setzt die Anzahl Diskseitenpuffer für WAL im Shared Memory." -#: utils/misc/guc.c:2221 +#: utils/misc/guc.c:2217 msgid "WAL writer sleep time between WAL flushes." msgstr "Schlafzeit zwischen WAL-Flush-Operationen des WAL-Writers." -#: utils/misc/guc.c:2233 +#: utils/misc/guc.c:2229 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Setzt die maximale Anzahl gleichzeitig laufender WAL-Sender-Prozesse." -#: utils/misc/guc.c:2244 +#: utils/misc/guc.c:2240 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Setzt die maximale Anzahl von gleichzeitig definierten Replikations-Slots." -#: utils/misc/guc.c:2254 +#: utils/misc/guc.c:2250 msgid "Sets the maximum time to wait for WAL replication." msgstr "Setzt die maximale Zeit, um auf WAL-Replikation zu warten." -#: utils/misc/guc.c:2265 +#: utils/misc/guc.c:2261 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Setzt die Verzögerung in Millisekunden zwischen Transaktionsabschluss und dem Schreiben von WAL auf die Festplatte." -#: utils/misc/guc.c:2277 +#: utils/misc/guc.c:2273 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "Setzt die minimale Anzahl gleichzeitig offener Transaktionen bevor „commit_delay“ angewendet wird." -#: utils/misc/guc.c:2288 +#: utils/misc/guc.c:2284 msgid "Sets the number of digits displayed for floating-point values." msgstr "Setzt die Anzahl ausgegebener Ziffern für Fließkommawerte." -#: utils/misc/guc.c:2289 +#: utils/misc/guc.c:2285 msgid "This affects real, double precision, and geometric data types. The parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate)." msgstr "Diese Einstellung betrifft real, double precision und geometrische Datentypen. Der Parameterwert wird zur Standardziffernanzahl (FLT_DIG bzw. DBL_DIG) hinzuaddiert." -#: utils/misc/guc.c:2300 +#: utils/misc/guc.c:2296 msgid "Sets the minimum execution time above which statements will be logged." msgstr "Setzt die minimale Ausführungszeit, über der Anweisungen geloggt werden." -#: utils/misc/guc.c:2302 +#: utils/misc/guc.c:2298 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Null zeigt alle Anfragen. -1 schaltet dieses Feature aus." -#: utils/misc/guc.c:2312 +#: utils/misc/guc.c:2308 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Setzt die minimale Ausführungszeit, über der Autovacuum-Aktionen geloggt werden." -#: utils/misc/guc.c:2314 +#: utils/misc/guc.c:2310 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Null gibt alls Aktionen aus. -1 schaltet die Log-Aufzeichnung über Autovacuum aus." -#: utils/misc/guc.c:2324 +#: utils/misc/guc.c:2320 msgid "Background writer sleep time between rounds." msgstr "Schlafzeit zwischen Durchläufen des Background-Writers." -#: utils/misc/guc.c:2335 +#: utils/misc/guc.c:2331 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Maximale Anzahl der vom Background-Writer pro Durchlauf zu flushenden LRU-Seiten." -#: utils/misc/guc.c:2347 +#: utils/misc/guc.c:2343 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Anzahl simultaner Anfragen, die das Festplattensubsystem effizient bearbeiten kann." -#: utils/misc/guc.c:2348 +#: utils/misc/guc.c:2344 msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." msgstr "Für RAID-Arrays sollte dies ungefähr die Anzahl Spindeln im Array sein." -#: utils/misc/guc.c:2363 +#: utils/misc/guc.c:2359 msgid "Maximum number of concurrent worker processes." msgstr "Maximale Anzahl gleichzeitiger Worker-Prozesse." -#: utils/misc/guc.c:2373 +#: utils/misc/guc.c:2369 msgid "Automatic log file rotation will occur after N minutes." msgstr "Automatische Rotation der Logdateien geschieht nach N Minuten." -#: utils/misc/guc.c:2384 +#: utils/misc/guc.c:2380 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "Automatische Rotation der Logdateien geschieht nach N Kilobytes." -#: utils/misc/guc.c:2395 +#: utils/misc/guc.c:2391 msgid "Shows the maximum number of function arguments." msgstr "Setzt die maximale Anzahl von Funktionsargumenten." -#: utils/misc/guc.c:2406 +#: utils/misc/guc.c:2402 msgid "Shows the maximum number of index keys." msgstr "Zeigt die maximale Anzahl von Indexschlüsseln." -#: utils/misc/guc.c:2417 +#: utils/misc/guc.c:2413 msgid "Shows the maximum identifier length." msgstr "Zeigt die maximale Länge von Bezeichnern." -#: utils/misc/guc.c:2428 +#: utils/misc/guc.c:2424 msgid "Shows the size of a disk block." msgstr "Zeigt die Größe eines Diskblocks." -#: utils/misc/guc.c:2439 +#: utils/misc/guc.c:2435 msgid "Shows the number of pages per disk file." msgstr "Zeigt die Anzahl Seiten pro Diskdatei." -#: utils/misc/guc.c:2450 +#: utils/misc/guc.c:2446 msgid "Shows the block size in the write ahead log." msgstr "Zeigt die Blockgröße im Write-Ahead-Log." -#: utils/misc/guc.c:2461 +#: utils/misc/guc.c:2457 msgid "Sets the time to wait before retrying to retrieve WALafter a failed attempt." msgstr "" -#: utils/misc/guc.c:2473 +#: utils/misc/guc.c:2469 msgid "Shows the number of pages per write ahead log segment." msgstr "Zeit die Anzahl Seiten pro Write-Ahead-Log-Segment." -#: utils/misc/guc.c:2486 +#: utils/misc/guc.c:2482 msgid "Time to sleep between autovacuum runs." msgstr "Wartezeit zwischen Autovacuum-Durchläufen." -#: utils/misc/guc.c:2496 +#: utils/misc/guc.c:2492 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Mindestanzahl an geänderten oder gelöschten Tupeln vor einem Vacuum." -#: utils/misc/guc.c:2505 +#: utils/misc/guc.c:2501 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Mindestanzahl an Einfüge-, Änderungs- oder Löschoperationen von einem Analyze." -#: utils/misc/guc.c:2515 +#: utils/misc/guc.c:2511 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Alter, nach dem eine Tabelle automatisch gevacuumt wird, um Transaktionsnummernüberlauf zu verhindern." -#: utils/misc/guc.c:2526 +#: utils/misc/guc.c:2522 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Multixact-Alter, nach dem eine Tabelle automatisch gevacuumt wird, um Transaktionsnummernüberlauf zu verhindern." -#: utils/misc/guc.c:2536 +#: utils/misc/guc.c:2532 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Setzt die maximale Anzahl gleichzeitig laufender Autovacuum-Worker-Prozesse." -#: utils/misc/guc.c:2546 +#: utils/misc/guc.c:2542 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Setzt die maximale Speichergröße für jeden Autovacuum-Worker-Prozess." -#: utils/misc/guc.c:2557 +#: utils/misc/guc.c:2553 msgid "Time between issuing TCP keepalives." msgstr "Zeit zwischen TCP-Keepalive-Sendungen." -#: utils/misc/guc.c:2558 utils/misc/guc.c:2569 +#: utils/misc/guc.c:2554 utils/misc/guc.c:2565 msgid "A value of 0 uses the system default." msgstr "Der Wert 0 verwendet die Systemvoreinstellung." -#: utils/misc/guc.c:2568 +#: utils/misc/guc.c:2564 msgid "Time between TCP keepalive retransmits." msgstr "Zeit zwischen TCP-Keepalive-Neuübertragungen." -#: utils/misc/guc.c:2579 -msgid "Set the amount of traffic to send and receive before renegotiating the encryption keys." -msgstr "Setzt die Traffic-Menge, die gesendet oder empfangen wird, bevor der Verschlüsselungsschlüssel neu ausgehandelt wird." - -#: utils/misc/guc.c:2590 +#: utils/misc/guc.c:2575 msgid "Maximum number of TCP keepalive retransmits." msgstr "Maximale Anzahl an TCP-Keepalive-Neuübertragungen." -#: utils/misc/guc.c:2591 +#: utils/misc/guc.c:2576 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "Dies bestimmt die Anzahl von aufeinanderfolgenden Keepalive-Neuübertragungen, die verloren gehen dürfen, bis die Verbindung als tot betrachtet wird. Der Wert 0 verwendet die Betriebssystemvoreinstellung." -#: utils/misc/guc.c:2602 +#: utils/misc/guc.c:2587 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Setzt die maximal erlaubte Anzahl Ergebnisse für eine genaue Suche mit GIN." -#: utils/misc/guc.c:2613 +#: utils/misc/guc.c:2598 msgid "Sets the planner's assumption about the size of the disk cache." msgstr "Setzt die Annahme des Planers über die Größe des Festplatten-Caches." -#: utils/misc/guc.c:2614 +#: utils/misc/guc.c:2599 msgid "That is, the portion of the kernel's disk cache that will be used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "Setzt die Annahme des Planers über die effektive Größe des Diskcaches (das heißt des Teils des Diskcaches vom Kernel, der für die Datendateien von PostgreSQL verwendet wird). Das wird in Diskseiten gemessen, welche normalerweise 8 kB groß sind." -#: utils/misc/guc.c:2627 +#: utils/misc/guc.c:2612 msgid "Shows the server version as an integer." msgstr "Zeigt die Serverversion als Zahl." -#: utils/misc/guc.c:2638 +#: utils/misc/guc.c:2623 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Schreibt Meldungen über die Verwendung von temporären Dateien in den Log, wenn sie größer als diese Anzahl an Kilobytes sind." -#: utils/misc/guc.c:2639 +#: utils/misc/guc.c:2624 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "Null loggt alle Dateien. Die Standardeinstellung ist -1 (wodurch dieses Feature ausgeschaltet wird)." -#: utils/misc/guc.c:2649 +#: utils/misc/guc.c:2634 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Setzt die für pg_stat_activity.query reservierte Größe, in Bytes." -#: utils/misc/guc.c:2664 +#: utils/misc/guc.c:2649 #, fuzzy #| msgid "Sets the maximum time to wait for WAL replication." msgid "Sets the maximum size of the pending list for GIN index." msgstr "Setzt die maximale Zeit, um auf WAL-Replikation zu warten." -#: utils/misc/guc.c:2684 +#: utils/misc/guc.c:2669 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Setzt den vom Planer geschätzten Aufwand, um eine sequenzielle Diskseite zu lesen." -#: utils/misc/guc.c:2694 +#: utils/misc/guc.c:2679 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Setzt den vom Planer geschätzten Aufwand, um eine nichtsequenzielle Diskseite zu lesen." -#: utils/misc/guc.c:2704 +#: utils/misc/guc.c:2689 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Setzt den vom Planer geschätzten Aufwand für die Verarbeitung einer Zeile." -#: utils/misc/guc.c:2714 +#: utils/misc/guc.c:2699 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "Setzt den vom Planer geschätzten Aufwand für die Verarbeitung eines Indexeintrags während eines Index-Scans." -#: utils/misc/guc.c:2724 +#: utils/misc/guc.c:2709 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Setzt den vom Planer geschätzten Aufwand für die Verarbeitung eines Operators oder Funktionsaufrufs." -#: utils/misc/guc.c:2735 +#: utils/misc/guc.c:2720 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Setzt den vom Planer geschätzten Anteil der Cursor-Zeilen, die ausgelesen werden werden." -#: utils/misc/guc.c:2746 +#: utils/misc/guc.c:2731 msgid "GEQO: selective pressure within the population." msgstr "GEQO: selektiver Auswahldruck in der Bevölkerung." -#: utils/misc/guc.c:2756 +#: utils/misc/guc.c:2741 msgid "GEQO: seed for random path selection." msgstr "GEQO: Ausgangswert für die zufällige Pfadauswahl." -#: utils/misc/guc.c:2766 +#: utils/misc/guc.c:2751 msgid "Multiple of the average buffer usage to free per round." msgstr "Vielfaches der durchschnittlichen freizugebenden Pufferverwendung pro Runde." -#: utils/misc/guc.c:2776 +#: utils/misc/guc.c:2761 msgid "Sets the seed for random-number generation." msgstr "Setzt den Ausgangswert für die Zufallszahlenerzeugung." -#: utils/misc/guc.c:2787 +#: utils/misc/guc.c:2772 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Anzahl geänderter oder gelöschter Tupel vor einem Vacuum, relativ zu reltuples." -#: utils/misc/guc.c:2796 +#: utils/misc/guc.c:2781 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Anzahl eingefügter, geänderter oder gelöschter Tupel vor einem Analyze, relativ zu reltuples." -#: utils/misc/guc.c:2806 +#: utils/misc/guc.c:2791 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "Zeit, die damit verbracht wird, modifizierte Puffer während eines Checkpoints zurückzuschreiben, als Bruchteil des Checkpoint-Intervalls." -#: utils/misc/guc.c:2825 +#: utils/misc/guc.c:2810 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Setzt den Shell-Befehl, der aufgerufen wird, um eine WAL-Datei zu archivieren." -#: utils/misc/guc.c:2835 +#: utils/misc/guc.c:2820 msgid "Sets the client's character set encoding." msgstr "Setzt die Zeichensatzkodierung des Clients." -#: utils/misc/guc.c:2846 +#: utils/misc/guc.c:2831 msgid "Controls information prefixed to each log line." msgstr "Bestimmt die Informationen, die vor jede Logzeile geschrieben werden." -#: utils/misc/guc.c:2847 +#: utils/misc/guc.c:2832 msgid "If blank, no prefix is used." msgstr "Wenn leer, dann wird kein Präfix verwendet." -#: utils/misc/guc.c:2856 +#: utils/misc/guc.c:2841 msgid "Sets the time zone to use in log messages." msgstr "Setzt die in Logmeldungen verwendete Zeitzone." -#: utils/misc/guc.c:2866 +#: utils/misc/guc.c:2851 msgid "Sets the display format for date and time values." msgstr "Setzt das Ausgabeformat für Datums- und Zeitwerte." -#: utils/misc/guc.c:2867 +#: utils/misc/guc.c:2852 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Kontrolliert auch die Interpretation von zweideutigen Datumseingaben." -#: utils/misc/guc.c:2878 +#: utils/misc/guc.c:2863 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Setzt den Standard-Tablespace für Tabellen und Indexe." -#: utils/misc/guc.c:2879 +#: utils/misc/guc.c:2864 msgid "An empty string selects the database's default tablespace." msgstr "Eine leere Zeichenkette wählt den Standard-Tablespace der Datenbank." -#: utils/misc/guc.c:2889 +#: utils/misc/guc.c:2874 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Setzt den oder die Tablespaces für temporäre Tabellen und Sortierdateien." -#: utils/misc/guc.c:2900 +#: utils/misc/guc.c:2885 msgid "Sets the path for dynamically loadable modules." msgstr "Setzt den Pfad für ladbare dynamische Bibliotheken." -#: utils/misc/guc.c:2901 +#: utils/misc/guc.c:2886 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "Wenn ein dynamisch ladbares Modul geöffnet werden muss und der angegebene Name keine Verzeichniskomponente hat (das heißt er enthält keinen Schrägstrich), dann sucht das System in diesem Pfad nach der angegebenen Datei." -#: utils/misc/guc.c:2914 +#: utils/misc/guc.c:2899 msgid "Sets the location of the Kerberos server key file." msgstr "Setzt den Ort der Kerberos-Server-Schlüsseldatei." -#: utils/misc/guc.c:2925 +#: utils/misc/guc.c:2910 msgid "Sets the Bonjour service name." msgstr "Setzt den Bonjour-Servicenamen." -#: utils/misc/guc.c:2937 +#: utils/misc/guc.c:2922 msgid "Shows the collation order locale." msgstr "Zeigt die Locale für die Sortierreihenfolge." -#: utils/misc/guc.c:2948 +#: utils/misc/guc.c:2933 msgid "Shows the character classification and case conversion locale." msgstr "Zeigt die Locale für Zeichenklassifizierung und Groß-/Kleinschreibung." -#: utils/misc/guc.c:2959 +#: utils/misc/guc.c:2944 msgid "Sets the language in which messages are displayed." msgstr "Setzt die Sprache, in der Mitteilungen ausgegeben werden." -#: utils/misc/guc.c:2969 +#: utils/misc/guc.c:2954 msgid "Sets the locale for formatting monetary amounts." msgstr "Setzt die Locale für die Formatierung von Geldbeträgen." -#: utils/misc/guc.c:2979 +#: utils/misc/guc.c:2964 msgid "Sets the locale for formatting numbers." msgstr "Setzt die Locale für die Formatierung von Zahlen." -#: utils/misc/guc.c:2989 +#: utils/misc/guc.c:2974 msgid "Sets the locale for formatting date and time values." msgstr "Setzt die Locale für die Formatierung von Datums- und Zeitwerten." -#: utils/misc/guc.c:2999 +#: utils/misc/guc.c:2984 msgid "Lists shared libraries to preload into each backend." msgstr "Listet dynamische Bibliotheken, die vorab in jeden Serverprozess geladen werden." -#: utils/misc/guc.c:3010 +#: utils/misc/guc.c:2995 msgid "Lists shared libraries to preload into server." msgstr "Listet dynamische Bibliotheken, die vorab in den Server geladen werden." -#: utils/misc/guc.c:3021 +#: utils/misc/guc.c:3006 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Listet unprivilegierte dynamische Bibliotheken, die vorab in jeden Serverprozess geladen werden." -#: utils/misc/guc.c:3032 +#: utils/misc/guc.c:3017 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Setzt die Schemasuchreihenfolge für Namen ohne Schemaqualifikation." -#: utils/misc/guc.c:3044 +#: utils/misc/guc.c:3029 msgid "Sets the server (database) character set encoding." msgstr "Setzt die Zeichensatzkodierung des Servers (der Datenbank)." -#: utils/misc/guc.c:3056 +#: utils/misc/guc.c:3041 msgid "Shows the server version." msgstr "Zeigt die Serverversion." -#: utils/misc/guc.c:3068 +#: utils/misc/guc.c:3053 msgid "Sets the current role." msgstr "Setzt die aktuelle Rolle." -#: utils/misc/guc.c:3080 +#: utils/misc/guc.c:3065 msgid "Sets the session user name." msgstr "Setzt den Sitzungsbenutzernamen." -#: utils/misc/guc.c:3091 +#: utils/misc/guc.c:3076 msgid "Sets the destination for server log output." msgstr "Setzt das Ziel für die Serverlogausgabe." -#: utils/misc/guc.c:3092 +#: utils/misc/guc.c:3077 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "Gültige Werte sind Kombinationen von „stderr“, „syslog“, „csvlog“ und „eventlog“, je nach Plattform." -#: utils/misc/guc.c:3103 +#: utils/misc/guc.c:3088 msgid "Sets the destination directory for log files." msgstr "Bestimmt das Zielverzeichnis für Logdateien." -#: utils/misc/guc.c:3104 +#: utils/misc/guc.c:3089 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Kann relativ zum Datenverzeichnis oder als absoluter Pfad angegeben werden." -#: utils/misc/guc.c:3114 +#: utils/misc/guc.c:3099 msgid "Sets the file name pattern for log files." msgstr "Bestimmt das Dateinamenmuster für Logdateien." -#: utils/misc/guc.c:3125 +#: utils/misc/guc.c:3110 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Setzt den Programmnamen, mit dem PostgreSQL-Meldungen im Syslog identifiziert werden." -#: utils/misc/guc.c:3136 +#: utils/misc/guc.c:3121 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Setzt den Programmnamen, mit dem PostgreSQL-Meldungen im Ereignisprotokoll identifiziert werden." -#: utils/misc/guc.c:3147 +#: utils/misc/guc.c:3132 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Setzt die Zeitzone, in der Zeitangaben interpretiert und ausgegeben werden." -#: utils/misc/guc.c:3157 +#: utils/misc/guc.c:3142 msgid "Selects a file of time zone abbreviations." msgstr "Wählt eine Datei mit Zeitzonenabkürzungen." -#: utils/misc/guc.c:3167 +#: utils/misc/guc.c:3152 msgid "Sets the current transaction's isolation level." msgstr "Zeigt den Isolationsgrad der aktuellen Transaktion." -#: utils/misc/guc.c:3178 +#: utils/misc/guc.c:3163 msgid "Sets the owning group of the Unix-domain socket." msgstr "Setzt die Eigentümergruppe der Unix-Domain-Socket." -#: utils/misc/guc.c:3179 +#: utils/misc/guc.c:3164 msgid "The owning user of the socket is always the user that starts the server." msgstr "Der Eigentümer ist immer der Benutzer, der den Server startet." -#: utils/misc/guc.c:3189 +#: utils/misc/guc.c:3174 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Setzt die Verzeichnisse, in denen Unix-Domain-Sockets erzeugt werden sollen." -#: utils/misc/guc.c:3204 +#: utils/misc/guc.c:3189 msgid "Sets the host name or IP address(es) to listen to." msgstr "Setzt den Hostnamen oder die IP-Adresse(n), auf der auf Verbindungen gewartet wird." -#: utils/misc/guc.c:3219 +#: utils/misc/guc.c:3204 msgid "Sets the server's data directory." msgstr "Setzt das Datenverzeichnis des Servers." -#: utils/misc/guc.c:3230 +#: utils/misc/guc.c:3215 msgid "Sets the server's main configuration file." msgstr "Setzt die Hauptkonfigurationsdatei des Servers." -#: utils/misc/guc.c:3241 +#: utils/misc/guc.c:3226 msgid "Sets the server's \"hba\" configuration file." msgstr "Setzt die „hba“-Konfigurationsdatei des Servers." -#: utils/misc/guc.c:3252 +#: utils/misc/guc.c:3237 msgid "Sets the server's \"ident\" configuration file." msgstr "Setzt die „ident“-Konfigurationsdatei des Servers." -#: utils/misc/guc.c:3263 +#: utils/misc/guc.c:3248 msgid "Writes the postmaster PID to the specified file." msgstr "Schreibt die Postmaster-PID in die angegebene Datei." -#: utils/misc/guc.c:3274 +#: utils/misc/guc.c:3259 msgid "Location of the SSL server certificate file." msgstr "Ort der SSL-Serverzertifikatsdatei." -#: utils/misc/guc.c:3284 +#: utils/misc/guc.c:3269 msgid "Location of the SSL server private key file." msgstr "Setzt den Ort der Datei mit dem privaten SSL-Server-Schlüssel." -#: utils/misc/guc.c:3294 +#: utils/misc/guc.c:3279 msgid "Location of the SSL certificate authority file." msgstr "Ort der SSL-Certificate-Authority-Datei." -#: utils/misc/guc.c:3304 +#: utils/misc/guc.c:3289 msgid "Location of the SSL certificate revocation list file." msgstr "Ort der SSL-Certificate-Revocation-List-Datei." -#: utils/misc/guc.c:3314 +#: utils/misc/guc.c:3299 msgid "Writes temporary statistics files to the specified directory." msgstr "Schreibt temporäre Statistikdateien in das angegebene Verzeichnis." -#: utils/misc/guc.c:3325 +#: utils/misc/guc.c:3310 msgid "List of names of potential synchronous standbys." msgstr "Liste der Namen der möglichen synchronen Standbys." -#: utils/misc/guc.c:3336 +#: utils/misc/guc.c:3321 msgid "Sets default text search configuration." msgstr "Setzt die vorgegebene Textsuchekonfiguration." -#: utils/misc/guc.c:3346 +#: utils/misc/guc.c:3331 msgid "Sets the list of allowed SSL ciphers." msgstr "Setzt die Liste der erlaubten SSL-Verschlüsselungsalgorithmen." -#: utils/misc/guc.c:3361 +#: utils/misc/guc.c:3346 msgid "Sets the curve to use for ECDH." msgstr "Setzt die für ECDH zu verwendende Kurve." -#: utils/misc/guc.c:3376 +#: utils/misc/guc.c:3361 msgid "Sets the application name to be reported in statistics and logs." msgstr "Setzt den Anwendungsnamen, der in Statistiken und Logs verzeichnet wird." -#: utils/misc/guc.c:3387 +#: utils/misc/guc.c:3372 msgid "Sets the name of the cluster which is included in the process title." msgstr "" -#: utils/misc/guc.c:3407 +#: utils/misc/guc.c:3392 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Bestimmt, ob „\\'“ in Zeichenkettenkonstanten erlaubt ist." -#: utils/misc/guc.c:3417 +#: utils/misc/guc.c:3402 msgid "Sets the output format for bytea." msgstr "Setzt das Ausgabeformat für bytea." -#: utils/misc/guc.c:3427 +#: utils/misc/guc.c:3412 msgid "Sets the message levels that are sent to the client." msgstr "Setzt die Meldungstypen, die an den Client gesendet werden." -#: utils/misc/guc.c:3428 utils/misc/guc.c:3481 utils/misc/guc.c:3492 -#: utils/misc/guc.c:3558 +#: utils/misc/guc.c:3413 utils/misc/guc.c:3466 utils/misc/guc.c:3477 +#: utils/misc/guc.c:3543 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "Jeder Wert schließt alle ihm folgenden Werte mit ein. Je weiter hinten der Wert steht, desto weniger Meldungen werden gesendet werden." -#: utils/misc/guc.c:3438 +#: utils/misc/guc.c:3423 msgid "Enables the planner to use constraints to optimize queries." msgstr "Ermöglicht dem Planer die Verwendung von Constraints, um Anfragen zu optimieren." -#: utils/misc/guc.c:3439 +#: utils/misc/guc.c:3424 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "Tabellen-Scans werden übersprungen, wenn deren Constraints garantieren, dass keine Zeile mit der Abfrage übereinstimmt." -#: utils/misc/guc.c:3449 +#: utils/misc/guc.c:3434 msgid "Sets the transaction isolation level of each new transaction." msgstr "Setzt den Transaktionsisolationsgrad neuer Transaktionen." -#: utils/misc/guc.c:3459 +#: utils/misc/guc.c:3444 msgid "Sets the display format for interval values." msgstr "Setzt das Ausgabeformat für Intervallwerte." -#: utils/misc/guc.c:3470 +#: utils/misc/guc.c:3455 msgid "Sets the verbosity of logged messages." msgstr "Setzt den Detailgrad von geloggten Meldungen." -#: utils/misc/guc.c:3480 +#: utils/misc/guc.c:3465 msgid "Sets the message levels that are logged." msgstr "Setzt die Meldungstypen, die geloggt werden." -#: utils/misc/guc.c:3491 +#: utils/misc/guc.c:3476 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Schreibt alle Anweisungen, die einen Fehler auf dieser Stufe oder höher verursachen, in den Log." -#: utils/misc/guc.c:3502 +#: utils/misc/guc.c:3487 msgid "Sets the type of statements logged." msgstr "Setzt die Anweisungsarten, die geloggt werden." -#: utils/misc/guc.c:3512 +#: utils/misc/guc.c:3497 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "Setzt die zu verwendende Syslog-„Facility“, wenn Syslog angeschaltet ist." -#: utils/misc/guc.c:3527 +#: utils/misc/guc.c:3512 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Setzt das Sitzungsverhalten für Trigger und Regeln." -#: utils/misc/guc.c:3537 +#: utils/misc/guc.c:3522 msgid "Sets the current transaction's synchronization level." msgstr "Setzt den Synchronisationsgrad der aktuellen Transaktion." -#: utils/misc/guc.c:3547 +#: utils/misc/guc.c:3532 msgid "Allows archiving of WAL files using archive_command." msgstr "Erlaubt die Archivierung von WAL-Dateien mittels archive_command." -#: utils/misc/guc.c:3557 +#: utils/misc/guc.c:3542 msgid "Enables logging of recovery-related debugging information." msgstr "Ermöglicht das Loggen von Debug-Informationen über die Wiederherstellung." -#: utils/misc/guc.c:3573 +#: utils/misc/guc.c:3558 msgid "Collects function-level statistics on database activity." msgstr "Sammelt Statistiken auf Funktionsebene über Datenbankaktivität." -#: utils/misc/guc.c:3583 +#: utils/misc/guc.c:3568 msgid "Set the level of information written to the WAL." msgstr "Setzt den Umfang der in den WAL geschriebenen Informationen." -#: utils/misc/guc.c:3593 +#: utils/misc/guc.c:3578 msgid "Selects the dynamic shared memory implementation used." msgstr "Wählt die zu verwendende Implementierung von dynamischem Shared Memory." -#: utils/misc/guc.c:3603 +#: utils/misc/guc.c:3588 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Wählt die Methode, um das Schreiben von WAL-Änderungen auf die Festplatte zu erzwingen." -#: utils/misc/guc.c:3613 +#: utils/misc/guc.c:3598 msgid "Sets how binary values are to be encoded in XML." msgstr "Setzt, wie binäre Werte in XML kodiert werden." -#: utils/misc/guc.c:3623 +#: utils/misc/guc.c:3608 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "Setzt, ob XML-Daten in impliziten Parse- und Serialisierungsoperationen als Dokument oder Fragment betrachtet werden sollen." -#: utils/misc/guc.c:3634 +#: utils/misc/guc.c:3619 msgid "Use of huge pages on Linux." msgstr "Huge Pages auf Linux verwenden." -#: utils/misc/guc.c:3644 -msgid "Enable row security." -msgstr "" - -#: utils/misc/guc.c:3645 -#, fuzzy -#| msgid "define or change a security label applied to an object" -msgid "When enabled, row security will be applied to all users." -msgstr "definiert oder ändert ein Security-Label eines Objektes" - -#: utils/misc/guc.c:4475 +#: utils/misc/guc.c:4434 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -22136,12 +22189,12 @@ msgstr "" "Sie müssen die Kommandozeilenoption --config-file oder -D angegeben oder\n" "die Umgebungsvariable PGDATA setzen.\n" -#: utils/misc/guc.c:4494 +#: utils/misc/guc.c:4453 #, c-format msgid "%s cannot access the server configuration file \"%s\": %s\n" msgstr "%s kann nicht auf die Serverkonfigurationsdatei „%s“ zugreifen: %s\n" -#: utils/misc/guc.c:4520 +#: utils/misc/guc.c:4479 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -22151,7 +22204,7 @@ msgstr "" "zu finden sind. Sie können dies mit „data_directory“ in „%s“, mit der\n" "Kommandozeilenoption -D oder der Umgebungsvariable PGDATA angeben.\n" -#: utils/misc/guc.c:4568 +#: utils/misc/guc.c:4527 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -22161,7 +22214,7 @@ msgstr "" "Sie können dies mit „hba_file“ in „%s“, mit der\n" "Kommandozeilenoption -D oder der Umgebungsvariable PGDATA angeben.\n" -#: utils/misc/guc.c:4591 +#: utils/misc/guc.c:4550 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -22171,136 +22224,141 @@ msgstr "" "Sie können dies mit „ident_file“ in „%s“, mit der\n" "Kommandozeilenoption -D oder der Umgebungsvariable PGDATA angeben.\n" -#: utils/misc/guc.c:5265 utils/misc/guc.c:5312 +#: utils/misc/guc.c:5224 utils/misc/guc.c:5271 msgid "Value exceeds integer range." msgstr "Wert überschreitet Bereich für ganze Zahlen." -#: utils/misc/guc.c:5506 utils/misc/guc.c:5599 utils/misc/guc.c:6888 -#: utils/misc/guc.c:9551 utils/misc/guc.c:9585 +#: utils/misc/guc.c:5465 utils/misc/guc.c:5558 utils/misc/guc.c:6850 +#: utils/misc/guc.c:9536 utils/misc/guc.c:9570 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "ungültiger Wert für Parameter „%s“: „%s“" -#: utils/misc/guc.c:5535 +#: utils/misc/guc.c:5494 #, c-format msgid "parameter \"%s\" requires a numeric value" msgstr "Parameter „%s“ erfordert einen numerischen Wert" -#: utils/misc/guc.c:5544 +#: utils/misc/guc.c:5503 #, c-format msgid "%g is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g ist außerhalb des gültigen Bereichs für Parameter „%s“ (%g ... %g)" -#: utils/misc/guc.c:5697 utils/misc/guc.c:7020 -#, fuzzy, c-format -#| msgid "cannot set parameter \"%s\" within security-restricted operation" +#: utils/misc/guc.c:5656 utils/misc/guc.c:6985 +#, c-format msgid "cannot set parameters during a parallel operation" -msgstr "kann Parameter „%s“ nicht in einer sicherheitsbeschränkten Operation setzen" +msgstr "während einer parallelen Operation können keine Parameter gesetzt werden" -#: utils/misc/guc.c:5704 utils/misc/guc.c:6454 utils/misc/guc.c:6506 -#: utils/misc/guc.c:6864 utils/misc/guc.c:7597 utils/misc/guc.c:7756 -#: utils/misc/guc.c:9371 +#: utils/misc/guc.c:5663 utils/misc/guc.c:6413 utils/misc/guc.c:6465 +#: utils/misc/guc.c:6826 utils/misc/guc.c:7562 utils/misc/guc.c:7721 +#: utils/misc/guc.c:9356 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "unbekannter Konfigurationsparameter „%s“" -#: utils/misc/guc.c:5719 utils/misc/guc.c:6876 +#: utils/misc/guc.c:5678 utils/misc/guc.c:6838 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "Parameter „%s“ kann nicht geändert werden" -#: utils/misc/guc.c:5752 +#: utils/misc/guc.c:5711 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "Parameter „%s“ kann jetzt nicht geändert werden" -#: utils/misc/guc.c:5770 utils/misc/guc.c:5815 utils/misc/guc.c:9387 +#: utils/misc/guc.c:5729 utils/misc/guc.c:5774 utils/misc/guc.c:9372 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "keine Berechtigung, um Parameter „%s“ zu setzen" -#: utils/misc/guc.c:5805 +#: utils/misc/guc.c:5764 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "Parameter „%s“ kann nach Start der Verbindung nicht geändert werden" -#: utils/misc/guc.c:5853 +#: utils/misc/guc.c:5812 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "Parameter „%s“ kann nicht in einer Security-Definer-Funktion gesetzt werden" -#: utils/misc/guc.c:6462 utils/misc/guc.c:6510 utils/misc/guc.c:7760 +#: utils/misc/guc.c:6421 utils/misc/guc.c:6469 utils/misc/guc.c:7725 #, c-format msgid "must be superuser to examine \"%s\"" msgstr "nur Superuser können „%s“ ansehen" -#: utils/misc/guc.c:6576 +#: utils/misc/guc.c:6535 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s darf nur ein Argument haben" -#: utils/misc/guc.c:6824 +#: utils/misc/guc.c:6786 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "nur Superuser können den Befehl ALTER SYSTEM ausführen" -#: utils/misc/guc.c:7096 +#: utils/misc/guc.c:6899 +#, fuzzy, c-format +#| msgid "could not seek to end of file \"%s\": %m" +msgid "could not parse contents of file \"%s\"" +msgstr "konnte Positionszeiger nicht ans Ende der Datei „%s“ setzen: %m" + +#: utils/misc/guc.c:7061 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT ist nicht implementiert" -#: utils/misc/guc.c:7181 +#: utils/misc/guc.c:7146 #, c-format msgid "SET requires parameter name" msgstr "SET benötigt Parameternamen" -#: utils/misc/guc.c:7294 +#: utils/misc/guc.c:7259 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "Versuch, den Parameter „%s“ zu redefinieren" -#: utils/misc/guc.c:9004 +#: utils/misc/guc.c:8989 #, fuzzy, c-format #| msgid "parameter \"%s\" cannot be changed" msgid "parameter \"%s\" could not be set" msgstr "Parameter „%s“ kann nicht geändert werden" -#: utils/misc/guc.c:9091 +#: utils/misc/guc.c:9076 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "konnte Wert von Parameter „%s“ nicht lesen" -#: utils/misc/guc.c:9449 utils/misc/guc.c:9483 +#: utils/misc/guc.c:9434 utils/misc/guc.c:9468 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "ungültiger Wert für Parameter „%s“: %d" -#: utils/misc/guc.c:9517 +#: utils/misc/guc.c:9502 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "ungültiger Wert für Parameter „%s“: %g" -#: utils/misc/guc.c:9707 +#: utils/misc/guc.c:9692 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "„temp_buffers“ kann nicht geändert werden, nachdem in der Sitzung auf temporäre Tabellen zugriffen wurde." -#: utils/misc/guc.c:9719 +#: utils/misc/guc.c:9704 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour wird von dieser Installation nicht unterstützt" -#: utils/misc/guc.c:9732 +#: utils/misc/guc.c:9717 #, c-format msgid "SSL is not supported by this build" msgstr "SSL wird von dieser Installation nicht unterstützt" -#: utils/misc/guc.c:9744 +#: utils/misc/guc.c:9729 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Kann Parameter nicht einschalten, wenn „log_statement_stats“ an ist." -#: utils/misc/guc.c:9756 +#: utils/misc/guc.c:9741 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "Kann „log_statement_stats“ nicht einschalten, wenn „log_parser_stats“, „log_planner_stats“ oder „log_executor_stats“ an ist." @@ -22310,7 +22368,7 @@ msgstr "Kann „log_statement_stats“ nicht einschalten, wenn „log_parser_sta msgid "internal error: unrecognized run-time parameter type\n" msgstr "interner Fehler: unbekannter Parametertyp\n" -#: utils/misc/rls.c:109 +#: utils/misc/rls.c:91 #, c-format msgid "insufficient privilege to bypass row security." msgstr "" @@ -22385,7 +22443,7 @@ msgstr "Zeile ist zu lang in Zeitzonendatei „%s“, Zeile %d" msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "@INCLUDE ohne Dateiname in Zeitzonendatei „%s“, Zeile %d" -#: utils/mmgr/aset.c:500 +#: utils/mmgr/aset.c:505 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "Fehler während der Erzeugung des Speicherkontexts „%s“." @@ -22408,12 +22466,17 @@ msgstr "Cursor „%s“ existiert bereits" msgid "closing existing cursor \"%s\"" msgstr "bestehender Cursor „%s“ wird geschlossen" -#: utils/mmgr/portalmem.c:479 +#: utils/mmgr/portalmem.c:419 +#, c-format +msgid "portal \"%s\" cannot be run" +msgstr "Portal „%s“ kann nicht ausgeführt werden" + +#: utils/mmgr/portalmem.c:499 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "aktives Portal „%s“ kann nicht gelöscht werden" -#: utils/mmgr/portalmem.c:669 +#: utils/mmgr/portalmem.c:689 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "PREPARE kann nicht in einer Transaktion ausgeführt werden, die einen Cursor mit WITH HOLD erzeugt hat" @@ -22423,38 +22486,38 @@ msgstr "PREPARE kann nicht in einer Transaktion ausgeführt werden, die einen Cu msgid "could not read block %ld of temporary file: %m" msgstr "konnte Block %ld von temporärer Datei nicht lesen: %m" -#: utils/sort/tuplesort.c:3582 +#: utils/sort/tuplesort.c:3591 #, c-format msgid "could not create unique index \"%s\"" msgstr "konnte Unique Index „%s“ nicht erstellen" -#: utils/sort/tuplesort.c:3584 +#: utils/sort/tuplesort.c:3593 #, c-format msgid "Key %s is duplicated." msgstr "Schlüssel %s ist doppelt vorhanden." -#: utils/sort/tuplesort.c:3585 +#: utils/sort/tuplesort.c:3594 #, c-format msgid "Duplicate keys exist." msgstr "Es existieren doppelte Schlüssel." -#: utils/sort/tuplestore.c:508 utils/sort/tuplestore.c:518 -#: utils/sort/tuplestore.c:845 utils/sort/tuplestore.c:949 -#: utils/sort/tuplestore.c:1013 utils/sort/tuplestore.c:1030 -#: utils/sort/tuplestore.c:1232 utils/sort/tuplestore.c:1297 -#: utils/sort/tuplestore.c:1306 +#: utils/sort/tuplestore.c:515 utils/sort/tuplestore.c:525 +#: utils/sort/tuplestore.c:852 utils/sort/tuplestore.c:956 +#: utils/sort/tuplestore.c:1020 utils/sort/tuplestore.c:1037 +#: utils/sort/tuplestore.c:1239 utils/sort/tuplestore.c:1304 +#: utils/sort/tuplestore.c:1313 #, c-format msgid "could not seek in tuplestore temporary file: %m" msgstr "konnte Positionszeiger in temporärer Datei für Tuplestore nicht setzen: %m" -#: utils/sort/tuplestore.c:1453 utils/sort/tuplestore.c:1526 -#: utils/sort/tuplestore.c:1532 +#: utils/sort/tuplestore.c:1460 utils/sort/tuplestore.c:1533 +#: utils/sort/tuplestore.c:1539 #, c-format msgid "could not read from tuplestore temporary file: %m" msgstr "konnte nicht aus temporärer Datei für Tuplestore lesen: %m" -#: utils/sort/tuplestore.c:1494 utils/sort/tuplestore.c:1499 -#: utils/sort/tuplestore.c:1505 +#: utils/sort/tuplestore.c:1501 utils/sort/tuplestore.c:1506 +#: utils/sort/tuplestore.c:1512 #, c-format msgid "could not write to tuplestore temporary file: %m" msgstr "konnte nicht in temporäre Datei für Tuplestore schreiben: %m" @@ -22465,144 +22528,127 @@ msgstr "konnte nicht in temporäre Datei für Tuplestore schreiben: %m" msgid "The source transaction is not running anymore." msgstr "Die Quelltransaktion %u läuft nicht mehr." -#: utils/time/snapmgr.c:983 +#: utils/time/snapmgr.c:986 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "aus einer Subtransaktion kann kein Snapshot exportiert werden" -#: utils/time/snapmgr.c:1132 utils/time/snapmgr.c:1137 -#: utils/time/snapmgr.c:1142 utils/time/snapmgr.c:1157 -#: utils/time/snapmgr.c:1162 utils/time/snapmgr.c:1167 -#: utils/time/snapmgr.c:1266 utils/time/snapmgr.c:1282 -#: utils/time/snapmgr.c:1307 +#: utils/time/snapmgr.c:1135 utils/time/snapmgr.c:1140 +#: utils/time/snapmgr.c:1145 utils/time/snapmgr.c:1160 +#: utils/time/snapmgr.c:1165 utils/time/snapmgr.c:1170 +#: utils/time/snapmgr.c:1269 utils/time/snapmgr.c:1285 +#: utils/time/snapmgr.c:1310 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "ungültige Snapshot-Daten in Datei „%s“" -#: utils/time/snapmgr.c:1204 +#: utils/time/snapmgr.c:1207 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "SET TRANSACTION SNAPSHOT muss vor allen Anfragen aufgerufen werden" -#: utils/time/snapmgr.c:1213 +#: utils/time/snapmgr.c:1216 #, c-format msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" msgstr "eine Snapshot-importierende Transaktion muss Isolationsgrad SERIALIZABLE oder REPEATABLE READ haben" -#: utils/time/snapmgr.c:1222 utils/time/snapmgr.c:1231 +#: utils/time/snapmgr.c:1225 utils/time/snapmgr.c:1234 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "ungültiger Snapshot-Bezeichner: „%s“" -#: utils/time/snapmgr.c:1320 +#: utils/time/snapmgr.c:1323 #, c-format msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" msgstr "eine serialisierbare Transaktion kann keinen Snapshot aus einer nicht-serialisierbaren Transaktion importieren" -#: utils/time/snapmgr.c:1324 +#: utils/time/snapmgr.c:1327 #, c-format msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" msgstr "eine serialisierbare Transaktion, die nicht im Read-Only-Modus ist, kann keinen Snapshot aus einer Read-Only-Transaktion importieren" -#: utils/time/snapmgr.c:1339 +#: utils/time/snapmgr.c:1342 #, c-format msgid "cannot import a snapshot from a different database" msgstr "kann keinen Snapshot aus einer anderen Datenbank importieren" -#~ msgid "must be superuser or have the same role to terminate other server processes" -#~ msgstr "nur Superuser oder Benutzer mit der gleichen Rolle können andere Serverprozesse beenden" +#~ msgid "invalid xlog switch record at %X/%X" +#~ msgstr "ungültiger XLog-Switch-Eintrag bei %X/%X" -#~ msgid "must be superuser or have the same role to cancel queries running in other server processes" -#~ msgstr "nur Superuser oder Benutzer mit der gleichen Rolle können Anfragen stornieren, die in anderen Serverprozessen laufen" +#~ msgid "record with zero length at %X/%X" +#~ msgstr "Datensatz mit Länge Null bei %X/%X" -#~ msgid "invalid symbol" -#~ msgstr "ungültiges Symbol" +#~ msgid "invalid backup block size in record at %X/%X" +#~ msgstr "ungültige Backup-Block-Größe in Datensatz bei %X/%X" -#~ msgid "unexpected \"=\"" -#~ msgstr "unerwartetes „=“" +#~ msgid "incorrect hole size in record at %X/%X" +#~ msgstr "falsche Lochgröße in Datensatz bei %X/%X" -#~ msgid "neither input type is an array" -#~ msgstr "keiner der Eingabedatentypen ist ein Array" +#~ msgid "incorrect total length in record at %X/%X" +#~ msgstr "falsche Gesamtlänge in Datensatz bei %X/%X" -#~ msgid "could not determine input data types" -#~ msgstr "konnte Eingabedatentypen nicht bestimmen" +#~ msgid "role with OID %u does not exist" +#~ msgstr "Rolle mit OID %u existiert nicht" -#~ msgid "postmaster became multithreaded" -#~ msgstr "Postmaster ist multithreaded geworden" +#~ msgid "This name may be disallowed altogether in future versions of PostgreSQL." +#~ msgstr "Dieser Name wird möglicherweise in einer zukünftigen Version von PostgreSQL nicht mehr zugelassen." -#~ msgid "WAL archival (archive_mode=on) requires wal_level \"archive\", \"hot_standby\", or \"logical\"" -#~ msgstr "WAL-Archivierung (archive_mode=on) benötigt wal_level „archive“, „hot_standby“ oder „logical“" +#~ msgid "inherited relation \"%s\" is not a table" +#~ msgstr "geerbte Relation „%s“ ist keine Tabelle" -#~ msgid "Consider increasing the configuration parameter \"checkpoint_segments\"." -#~ msgstr "Erhöhen Sie eventuell den Konfigurationsparameter „checkpoint_segments“." +#~ msgid "interval precision specified twice" +#~ msgstr "Intervallpräzision doppelt angegeben" -#~ msgid "subquery must return a column" -#~ msgstr "Unteranfrage muss eine Spalte zurückgeben" +#~ msgid "SSL handshake failure on renegotiation, retrying" +#~ msgstr "SSL-Handshake-Fehler bei Renegotiation, versuche erneut" -#~ msgid "%s: setsysinfo failed: %s\n" -#~ msgstr "%s: setsysinfo fehlgeschlagen: %s\n" +#~ msgid "could not complete SSL handshake on renegotiation, too many failures" +#~ msgstr "konnte SSL-Handshake bei Renegotiation nicht abschließen, zu viele Fehler" #~ msgid "could not set socket to blocking mode: %m" #~ msgstr "konnte Socket nicht auf blockierenden Modus umstellen: %m" -#~ msgid "could not complete SSL handshake on renegotiation, too many failures" -#~ msgstr "konnte SSL-Handshake bei Renegotiation nicht abschließen, zu viele Fehler" +#~ msgid "subquery must return a column" +#~ msgstr "Unteranfrage muss eine Spalte zurückgeben" -#~ msgid "SSL handshake failure on renegotiation, retrying" -#~ msgstr "SSL-Handshake-Fehler bei Renegotiation, versuche erneut" +#~ msgid "postmaster became multithreaded" +#~ msgstr "Postmaster ist multithreaded geworden" -#~ msgid "interval precision specified twice" -#~ msgstr "Intervallpräzision doppelt angegeben" +#~ msgid "could not determine input data types" +#~ msgstr "konnte Eingabedatentypen nicht bestimmen" -#~ msgid "" -#~ "%.0f dead row versions cannot be removed yet.\n" -#~ "There were %.0f unused item pointers.\n" -#~ "%u pages are entirely empty.\n" -#~ "%s." -#~ msgstr "" -#~ "%.0f tote Zeilenversionen können noch nicht entfernt werden.\n" -#~ "Es gibt %.0f unbenutzte Itemzeiger.\n" -#~ "%u Seiten sind vollkommen leer.\n" -#~ "%s." - -#~ msgid "" -#~ "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" -#~ "pages: %d removed, %d remain\n" -#~ "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable\n" -#~ "buffer usage: %d hits, %d misses, %d dirtied\n" -#~ "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" -#~ "system usage: %s" -#~ msgstr "" -#~ "automatisches Vacuum von Tabelle „%s.%s.%s“: Index-Scans: %d\n" -#~ "Seiten: %d entfernt, %d noch vorhanden\n" -#~ "Tupel: %.0f entfernt, %.0f noch vorhanden, %.0f sind tot aber noch nicht entfernbar\n" -#~ "Puffer-Verwendung: %d Treffer, %d Verfehlen, %d geändert\n" -#~ "durchschn. Leserate: %.3f MB/s, durchschn. Schreibrate: %.3f MB/s\n" -#~ "Systembenutzung: %s" +#~ msgid "neither input type is an array" +#~ msgstr "keiner der Eingabedatentypen ist ein Array" -#~ msgid "inherited relation \"%s\" is not a table" -#~ msgstr "geerbte Relation „%s“ ist keine Tabelle" +#~ msgid "must be superuser or have the same role to cancel queries running in other server processes" +#~ msgstr "nur Superuser oder Benutzer mit der gleichen Rolle können Anfragen stornieren, die in anderen Serverprozessen laufen" -#~ msgid "This name may be disallowed altogether in future versions of PostgreSQL." -#~ msgstr "Dieser Name wird möglicherweise in einer zukünftigen Version von PostgreSQL nicht mehr zugelassen." +#~ msgid "must be superuser or have the same role to terminate other server processes" +#~ msgstr "nur Superuser oder Benutzer mit der gleichen Rolle können andere Serverprozesse beenden" -#~ msgid "=> is deprecated as an operator name" -#~ msgstr "=> ist als Operatorname veraltet" +#~ msgid "Set the amount of traffic to send and receive before renegotiating the encryption keys." +#~ msgstr "Setzt die Traffic-Menge, die gesendet oder empfangen wird, bevor der Verschlüsselungsschlüssel neu ausgehandelt wird." -#~ msgid "role with OID %u does not exist" -#~ msgstr "Rolle mit OID %u existiert nicht" +#~ msgid "SSL failed to renegotiate connection before limit expired" +#~ msgstr "SSL konnte Verbindung nicht vor Ablauf der Frist neu aushandeln" -#~ msgid "incorrect total length in record at %X/%X" -#~ msgstr "falsche Gesamtlänge in Datensatz bei %X/%X" +#~ msgid "SSL failure during renegotiation start" +#~ msgstr "SSL-Fehler beim Renegotiation-Start" -#~ msgid "incorrect hole size in record at %X/%X" -#~ msgstr "falsche Lochgröße in Datensatz bei %X/%X" +#~ msgid "Specify a USING expression to perform the conversion." +#~ msgstr "Geben Sie einen USING-Ausdruck für die Umwandlung an." -#~ msgid "invalid backup block size in record at %X/%X" -#~ msgstr "ungültige Backup-Block-Größe in Datensatz bei %X/%X" +#~ msgid "Sample size must be numeric value between 0 and 100 (inclusive)." +#~ msgstr "Stichprobengröße muss ein numerischer Wert zwischen 0 und 100 (einschließlich) sein." -#~ msgid "record with zero length at %X/%X" -#~ msgstr "Datensatz mit Länge Null bei %X/%X" +#~ msgid "oldest MultiXactId member offset unknown" +#~ msgstr "Offset des ältesten MultiXactId-Mitglieds ist unbekannt" -#~ msgid "invalid xlog switch record at %X/%X" -#~ msgstr "ungültiger XLog-Switch-Eintrag bei %X/%X" +#~ 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." + +#~ msgid "WAL file is from different database system: Incorrect XLOG_SEG_SIZE in page header." +#~ msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Falsche XLOG_SEG_SIZE im Seitenkopf." + +#~ msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s." +#~ msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Datenbanksystemidentifikator in WAL-Datei ist %s, Datenbanksystemidentifikator in pg_control ist %s." diff --git a/src/backend/po/es.po b/src/backend/po/es.po index 6cc7deb2ce8da..9ea918e9c9c00 100644 --- a/src/backend/po/es.po +++ b/src/backend/po/es.po @@ -58,8 +58,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL server 9.4\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:38+0000\n" -"PO-Revision-Date: 2014-12-18 18:58-0300\n" +"POT-Creation-Date: 2015-10-04 00:38+0000\n" +"PO-Revision-Date: 2015-07-06 17:44-0300\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL Español \n" "Language: es\n" @@ -103,14 +103,14 @@ msgstr "no se pudo leer el enlace simbólico «%s»" msgid "pclose failed: %s" msgstr "pclose falló: %s" -#: ../common/fe_memutils.c:33 ../common/fe_memutils.c:60 -#: ../common/fe_memutils.c:83 ../common/psprintf.c:181 ../port/path.c:598 +#: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 +#: ../common/fe_memutils.c:98 ../common/psprintf.c:181 ../port/path.c:598 #: ../port/path.c:636 ../port/path.c:653 #, c-format msgid "out of memory\n" msgstr "memoria agotada\n" -#: ../common/fe_memutils.c:77 +#: ../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" @@ -131,24 +131,27 @@ msgid "could not close directory \"%s\": %s\n" msgstr "no se pudo cerrar el directorio «%s»: %s\n" #: ../common/psprintf.c:179 ../port/path.c:596 ../port/path.c:634 -#: ../port/path.c:651 access/transam/xlog.c:6123 lib/stringinfo.c:258 -#: libpq/auth.c:823 libpq/auth.c:1179 libpq/auth.c:1247 libpq/auth.c:1647 -#: postmaster/bgworker.c:267 postmaster/bgworker.c:783 -#: postmaster/postmaster.c:2173 postmaster/postmaster.c:2204 -#: postmaster/postmaster.c:3740 postmaster/postmaster.c:4441 -#: postmaster/postmaster.c:4526 postmaster/postmaster.c:5218 -#: postmaster/postmaster.c:5450 storage/buffer/buf_init.c:154 -#: storage/buffer/localbuf.c:396 storage/file/fd.c:458 storage/file/fd.c:855 -#: storage/file/fd.c:973 storage/file/fd.c:1586 storage/ipc/procarray.c:909 -#: storage/ipc/procarray.c:1395 storage/ipc/procarray.c:1402 -#: storage/ipc/procarray.c:1751 storage/ipc/procarray.c:2335 -#: utils/adt/formatting.c:1519 utils/adt/formatting.c:1639 -#: utils/adt/formatting.c:1760 utils/adt/regexp.c:219 utils/adt/varlena.c:3653 -#: utils/adt/varlena.c:3674 utils/fmgr/dfmgr.c:224 utils/hash/dynahash.c:379 -#: utils/hash/dynahash.c:456 utils/hash/dynahash.c:970 utils/mb/mbutils.c:376 -#: utils/mb/mbutils.c:709 utils/misc/guc.c:3571 utils/misc/guc.c:3587 -#: utils/misc/guc.c:3600 utils/misc/tzparser.c:470 utils/mmgr/aset.c:499 -#: utils/mmgr/aset.c:678 utils/mmgr/aset.c:872 utils/mmgr/aset.c:1114 +#: ../port/path.c:651 access/transam/xlog.c:6038 lib/stringinfo.c:258 +#: libpq/auth.c:821 libpq/auth.c:1182 libpq/auth.c:1250 libpq/auth.c:1659 +#: postmaster/bgworker.c:289 postmaster/bgworker.c:796 +#: postmaster/postmaster.c:2284 postmaster/postmaster.c:2315 +#: postmaster/postmaster.c:3834 postmaster/postmaster.c:4522 +#: postmaster/postmaster.c:4590 postmaster/postmaster.c:5277 +#: postmaster/postmaster.c:5530 replication/logical/logical.c:167 +#: storage/buffer/localbuf.c:396 storage/file/fd.c:481 storage/file/fd.c:878 +#: storage/file/fd.c:996 storage/file/fd.c:1609 storage/ipc/procarray.c:907 +#: storage/ipc/procarray.c:1393 storage/ipc/procarray.c:1400 +#: storage/ipc/procarray.c:1793 storage/ipc/procarray.c:2377 +#: utils/adt/formatting.c:1523 utils/adt/formatting.c:1643 +#: utils/adt/formatting.c:1764 utils/adt/regexp.c:219 utils/adt/varlena.c:4199 +#: utils/adt/varlena.c:4220 utils/fmgr/dfmgr.c:220 utils/hash/dynahash.c:411 +#: utils/hash/dynahash.c:488 utils/hash/dynahash.c:1002 utils/mb/mbutils.c:376 +#: utils/mb/mbutils.c:709 utils/misc/guc.c:3702 utils/misc/guc.c:3718 +#: utils/misc/guc.c:3731 utils/misc/guc.c:6665 utils/misc/tzparser.c:470 +#: utils/mmgr/aset.c:504 utils/mmgr/mcxt.c:688 utils/mmgr/mcxt.c:723 +#: utils/mmgr/mcxt.c:760 utils/mmgr/mcxt.c:797 utils/mmgr/mcxt.c:831 +#: utils/mmgr/mcxt.c:860 utils/mmgr/mcxt.c:894 utils/mmgr/mcxt.c:974 +#: utils/mmgr/mcxt.c:1007 utils/mmgr/mcxt.c:1054 #, c-format msgid "out of memory" msgstr "memoria agotada" @@ -163,6 +166,41 @@ 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:68 +#, c-format +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: ATENCIÓN: no se pueden crear tokens restrigidos en esta plataforma\n" + +#: ../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: no se pudo abrir el token de proceso: código de error %lu\n" + +#: ../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: no se pudo emplazar los SIDs: código de error %lu\n" + +#: ../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: no se pudo crear el token restringido: código de error %lu\n" + +#: ../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: no se pudo iniciar el proceso para la orden «%s»: código de error %lu\n" + +#: ../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: no se pudo re-ejecutar con el token restringido: código de error %lu\n" + +#: ../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: no se pudo obtener el código de salida del subproceso»: código de error %lu\n" + #: ../common/rmtree.c:77 #, c-format msgid "could not stat file or directory \"%s\": %s\n" @@ -178,14 +216,14 @@ msgstr "no se pudo eliminar el directorio «%s»: %s\n" 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:47 libpq/auth.c:1594 +#: ../common/username.c:47 libpq/auth.c:1606 msgid "user does not exist" msgstr "usuario no existe" -#: ../common/username.c:61 +#: ../common/username.c:62 #, c-format -msgid "user name lookup failure: %s" -msgstr "fallo en la búsqueda de usuario: %s" +msgid "user name lookup failure: error code %lu" +msgstr "fallo en la búsqueda de nombre de usuario: código de error %lu" #: ../common/wait_error.c:47 #, c-format @@ -228,6 +266,7 @@ msgid "could not determine encoding for codeset \"%s\"" msgstr "no se pudo determinar la codificación para el codeset «%s»" #: ../port/chklocale.c:260 ../port/chklocale.c:389 +#: postmaster/postmaster.c:4819 #, c-format msgid "Please report this to ." msgstr "Por favor reporte esto a ." @@ -300,78 +339,88 @@ msgstr "código de error win32 %lu mapeado a %d" msgid "unrecognized win32 error code: %lu" msgstr "código de error win32 no reconocido: %lu" -#: access/common/heaptuple.c:679 access/common/heaptuple.c:1419 +#: access/brin/brin_pageops.c:647 access/brin/brin_pageops.c:805 +#, fuzzy, c-format +msgid "index row size %lu exceeds maximum %lu for index \"%s\"" +msgstr "el tamaño de fila de índice %zu excede el máximo %zu para el índice «%s»" + +#: access/brin/brin_revmap.c:449 +#, c-format +msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" +msgstr "" + +#: access/common/heaptuple.c:708 access/common/heaptuple.c:1450 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "el número de columnas (%d) excede el límite (%d)" -#: access/common/indextuple.c:57 +#: access/common/indextuple.c:60 #, c-format msgid "number of index columns (%d) exceeds limit (%d)" msgstr "el número de columnas del índice (%d) excede el límite (%d)" -#: access/common/indextuple.c:173 access/spgist/spgutils.c:605 +#: access/common/indextuple.c:176 access/spgist/spgutils.c:605 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "fila de índice requiere %zu bytes, tamaño máximo es %zu" -#: access/common/printtup.c:294 tcop/fastpath.c:182 tcop/fastpath.c:571 -#: tcop/postgres.c:1672 +#: access/common/printtup.c:294 tcop/fastpath.c:182 tcop/fastpath.c:544 +#: tcop/postgres.c:1730 #, c-format msgid "unsupported format code: %d" msgstr "código de formato no soportado: %d" -#: access/common/reloptions.c:396 +#: access/common/reloptions.c:419 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "el límite de tipos de parámetros de relación definidos por el usuario ha sido excedido" -#: access/common/reloptions.c:680 +#: access/common/reloptions.c:701 #, c-format msgid "RESET must not include values for parameters" msgstr "RESET no debe incluir valores de parámetros" -#: access/common/reloptions.c:713 +#: access/common/reloptions.c:734 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "espacio de nombre de parámetro «%s» no reconocido" -#: access/common/reloptions.c:959 parser/parse_clause.c:268 +#: access/common/reloptions.c:974 parser/parse_clause.c:279 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "parámetro no reconocido «%s»" -#: access/common/reloptions.c:984 +#: access/common/reloptions.c:1004 #, 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:999 +#: access/common/reloptions.c:1020 #, 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:1010 +#: access/common/reloptions.c:1032 #, 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:1015 access/common/reloptions.c:1033 +#: access/common/reloptions.c:1038 access/common/reloptions.c:1058 #, 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:1017 +#: access/common/reloptions.c:1040 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Los valores aceptables están entre «%d» y «%d»." -#: access/common/reloptions.c:1028 +#: access/common/reloptions.c:1052 #, 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:1035 +#: access/common/reloptions.c:1060 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Valores aceptables están entre «%f» y «%f»." @@ -396,58 +445,58 @@ msgstr "El atributo «%s» de tipo %s no coincide el atributo correspondiente de msgid "Attribute \"%s\" of type %s does not exist in type %s." msgstr "El atributo «%s» de tipo %s no existe en el tipo %s." -#: access/common/tupdesc.c:635 parser/parse_relation.c:1339 +#: access/common/tupdesc.c:635 parser/parse_relation.c:1514 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "la columna «%s» no puede ser declarada SETOF" -#: access/gin/ginentrypage.c:108 access/gist/gist.c:1281 -#: access/nbtree/nbtinsert.c:545 access/nbtree/nbtsort.c:485 -#: access/spgist/spgdoinsert.c:1880 +#: access/gin/ginentrypage.c:109 access/gist/gist.c:1289 +#: access/nbtree/nbtinsert.c:567 access/nbtree/nbtsort.c:488 +#: access/spgist/spgdoinsert.c:1907 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "el tamaño de fila de índice %zu excede el máximo %zu para el índice «%s»" -#: access/gin/ginscan.c:402 +#: access/gin/ginscan.c:410 #, 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:403 +#: access/gin/ginscan.c:411 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Para corregir esto, ejecute REINDEX INDEX \"%s\"." -#: access/gist/gist.c:624 access/gist/gistvacuum.c:266 +#: access/gist/gist.c:632 access/gist/gistvacuum.c:266 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "el índice «%s» contiene una tupla interna marcada como no válida" -#: access/gist/gist.c:626 access/gist/gistvacuum.c:268 +#: access/gist/gist.c:634 access/gist/gistvacuum.c:268 #, c-format msgid "This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1." msgstr "Esto es causado por una división de página incompleta durante una recuperación antes de actualizar a PostgreSQL 9.1." -#: access/gist/gist.c:627 access/gist/gistutil.c:693 -#: access/gist/gistutil.c:704 access/gist/gistvacuum.c:269 +#: access/gist/gist.c:635 access/gist/gistutil.c:735 +#: access/gist/gistutil.c:746 access/gist/gistvacuum.c:269 #: access/hash/hashutil.c:172 access/hash/hashutil.c:183 #: access/hash/hashutil.c:195 access/hash/hashutil.c:216 -#: access/nbtree/nbtpage.c:509 access/nbtree/nbtpage.c:520 +#: access/nbtree/nbtpage.c:518 access/nbtree/nbtpage.c:529 #, c-format msgid "Please REINDEX it." msgstr "Por favor aplíquele REINDEX." -#: access/gist/gistbuild.c:254 +#: access/gist/gistbuild.c:252 #, c-format msgid "invalid value for \"buffering\" option" msgstr "valor no válido para la opción «buffering»" -#: access/gist/gistbuild.c:255 +#: access/gist/gistbuild.c:253 #, c-format msgid "Valid values are \"on\", \"off\", and \"auto\"." msgstr "Los valores aceptables son «on», «off» y «auto»." -#: access/gist/gistbuildbuffers.c:780 utils/sort/logtape.c:212 +#: access/gist/gistbuildbuffers.c:778 utils/sort/logtape.c:209 #, c-format msgid "could not write block %ld of temporary file: %m" msgstr "no se pudo escribir el bloque %ld del archivo temporal: %m" @@ -462,14 +511,14 @@ msgstr "el método picksplit para la columna %d del índice «%s» falló" msgid "The index is not optimal. To optimize it, contact a developer, or try to use the column as the second one in the CREATE INDEX command." msgstr "El índice no es óptimo. Para optimizarlo, contacte un desarrollador o trate de usar la columna en segunda posición en la orden CREATE INDEX." -#: access/gist/gistutil.c:690 access/hash/hashutil.c:169 -#: access/nbtree/nbtpage.c:506 +#: access/gist/gistutil.c:732 access/hash/hashutil.c:169 +#: access/nbtree/nbtpage.c:515 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "índice «%s» contiene páginas vacías no esperadas en el bloque %u" -#: access/gist/gistutil.c:701 access/hash/hashutil.c:180 -#: access/hash/hashutil.c:192 access/nbtree/nbtpage.c:517 +#: access/gist/gistutil.c:743 access/hash/hashutil.c:180 +#: access/hash/hashutil.c:192 access/nbtree/nbtpage.c:526 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "el índice «%s» contiene una página corrupta en el bloque %u" @@ -479,7 +528,7 @@ msgstr "el índice «%s» contiene una página corrupta en el bloque %u" msgid "index row size %zu exceeds hash maximum %zu" msgstr "el tamaño de fila de índice %zu excede el máximo para hash %zu" -#: access/hash/hashinsert.c:70 access/spgist/spgdoinsert.c:1884 +#: access/hash/hashinsert.c:70 access/spgist/spgdoinsert.c:1911 #: access/spgist/spgutils.c:666 #, c-format msgid "Values larger than a buffer page cannot be indexed." @@ -505,138 +554,173 @@ msgstr "el índice «%s» no es un índice hash" msgid "index \"%s\" has wrong hash version" msgstr "el índice «%s» tiene una versión de hash incorrecta" -#: access/heap/heapam.c:1199 access/heap/heapam.c:1227 -#: access/heap/heapam.c:1259 catalog/aclchk.c:1742 +#: access/heap/heapam.c:1074 access/heap/heapam.c:1126 +#, fuzzy, c-format +msgid "cannot access temporary tables during a parallel operation" +msgstr "no se pueden crear tablas temporales durante la recuperación" + +#: access/heap/heapam.c:1243 access/heap/heapam.c:1271 +#: access/heap/heapam.c:1303 catalog/aclchk.c:1733 #, c-format msgid "\"%s\" is an index" msgstr "«%s» es un índice" -#: access/heap/heapam.c:1204 access/heap/heapam.c:1232 -#: access/heap/heapam.c:1264 catalog/aclchk.c:1749 commands/tablecmds.c:8495 -#: commands/tablecmds.c:11279 +#: access/heap/heapam.c:1248 access/heap/heapam.c:1276 +#: access/heap/heapam.c:1308 catalog/aclchk.c:1740 commands/tablecmds.c:8925 +#: commands/tablecmds.c:11925 #, c-format msgid "\"%s\" is a composite type" msgstr "«%s» es un tipo compuesto" -#: access/heap/heapam.c:4223 access/heap/heapam.c:4436 -#: access/heap/heapam.c:4493 executor/execMain.c:1992 +#: access/heap/heapam.c:2339 +#, fuzzy, c-format +msgid "cannot insert tuples during a parallel operation" +msgstr "no se pueden insertar múltiples órdenes en una sentencia preparada" + +#: access/heap/heapam.c:2760 +#, fuzzy, c-format +msgid "cannot delete tuples during a parallel operation" +msgstr "no se puede ejecutar %s durante la recuperación" + +#: access/heap/heapam.c:2806 +#, c-format +msgid "attempted to delete invisible tuple" +msgstr "" + +#: access/heap/heapam.c:3228 access/heap/heapam.c:5779 +#, fuzzy, c-format +msgid "cannot update tuples during a parallel operation" +msgstr "no se puede ejecutar %s durante la recuperación" + +#: access/heap/heapam.c:3350 +#, c-format +msgid "attempted to update invisible tuple" +msgstr "" + +#: access/heap/heapam.c:4601 access/heap/heapam.c:4639 +#: access/heap/heapam.c:4862 executor/execMain.c:2279 #, 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/hio.c:240 access/heap/rewriteheap.c:666 +#: access/heap/hio.c:253 access/heap/rewriteheap.c:666 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "fila es demasiado grande: tamaño %zu, tamaño máximo %zu" -#: access/heap/rewriteheap.c:932 +#: access/heap/rewriteheap.c:925 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "no se pudo escribir al archivo «%s», se escribió %d de %d: %m" -#: access/heap/rewriteheap.c:973 access/heap/rewriteheap.c:1185 -#: access/heap/rewriteheap.c:1282 access/transam/timeline.c:407 -#: access/transam/timeline.c:497 access/transam/xlog.c:3185 -#: access/transam/xlog.c:3315 replication/logical/snapbuild.c:1592 -#: replication/slot.c:1042 replication/slot.c:1131 storage/file/fd.c:436 -#: storage/smgr/md.c:966 storage/smgr/md.c:1197 storage/smgr/md.c:1370 -#: utils/misc/guc.c:6599 +#: access/heap/rewriteheap.c:965 access/heap/rewriteheap.c:1177 +#: access/heap/rewriteheap.c:1274 access/transam/timeline.c:407 +#: access/transam/timeline.c:497 access/transam/xlog.c:3011 +#: access/transam/xlog.c:3173 replication/logical/origin.c:613 +#: replication/logical/snapbuild.c:1592 replication/slot.c:1026 +#: replication/slot.c:1115 storage/file/fd.c:459 storage/file/fd.c:2718 +#: storage/smgr/md.c:982 storage/smgr/md.c:1213 storage/smgr/md.c:1386 +#: utils/misc/guc.c:6687 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" -#: access/heap/rewriteheap.c:1028 access/heap/rewriteheap.c:1148 +#: access/heap/rewriteheap.c:1020 access/heap/rewriteheap.c:1140 #: access/transam/timeline.c:315 access/transam/timeline.c:475 -#: access/transam/xlog.c:3141 access/transam/xlog.c:3276 -#: access/transam/xlog.c:9915 access/transam/xlog.c:10230 -#: postmaster/postmaster.c:4216 replication/slot.c:999 -#: storage/file/copydir.c:162 storage/smgr/md.c:304 utils/time/snapmgr.c:976 +#: access/transam/xlog.c:2967 access/transam/xlog.c:3116 +#: access/transam/xlog.c:10096 access/transam/xlog.c:10132 +#: access/transam/xlog.c:10454 postmaster/postmaster.c:4297 +#: replication/logical/origin.c:542 replication/slot.c:983 +#: storage/file/copydir.c:162 storage/smgr/md.c:320 utils/time/snapmgr.c:1071 #, c-format msgid "could not create file \"%s\": %m" msgstr "no se pudo crear archivo «%s»: %m" -#: access/heap/rewriteheap.c:1157 +#: access/heap/rewriteheap.c:1149 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "no se pudo truncar el archivo «%s» a %u: %m" -#: access/heap/rewriteheap.c:1164 replication/walsender.c:465 -#: storage/smgr/md.c:1782 +#: access/heap/rewriteheap.c:1156 replication/walsender.c:465 +#: storage/smgr/md.c:1798 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "no se pudo posicionar (seek) al fin del archivo «%s»: %m" -#: access/heap/rewriteheap.c:1175 access/transam/timeline.c:367 +#: access/heap/rewriteheap.c:1167 access/transam/timeline.c:367 #: access/transam/timeline.c:401 access/transam/timeline.c:491 -#: access/transam/xlog.c:3176 access/transam/xlog.c:3308 -#: postmaster/postmaster.c:4226 postmaster/postmaster.c:4236 -#: replication/logical/snapbuild.c:1576 replication/slot.c:1028 -#: storage/file/copydir.c:187 utils/init/miscinit.c:1057 -#: utils/init/miscinit.c:1066 utils/init/miscinit.c:1073 utils/misc/guc.c:6567 -#: utils/misc/guc.c:6592 utils/misc/guc.c:8290 utils/misc/guc.c:8304 -#: utils/time/snapmgr.c:981 utils/time/snapmgr.c:988 +#: access/transam/xlog.c:3002 access/transam/xlog.c:3166 +#: postmaster/postmaster.c:4307 postmaster/postmaster.c:4317 +#: replication/logical/origin.c:551 replication/logical/origin.c:587 +#: replication/logical/origin.c:603 replication/logical/snapbuild.c:1576 +#: replication/slot.c:1012 storage/file/copydir.c:187 +#: utils/init/miscinit.c:1183 utils/init/miscinit.c:1192 +#: utils/init/miscinit.c:1199 utils/misc/guc.c:6648 utils/misc/guc.c:6679 +#: utils/misc/guc.c:8466 utils/misc/guc.c:8480 utils/time/snapmgr.c:1076 +#: utils/time/snapmgr.c:1083 #, c-format msgid "could not write to file \"%s\": %m" msgstr "no se pudo escribir a archivo «%s»: %m" -#: access/heap/rewriteheap.c:1258 access/transam/xlog.c:10099 -#: access/transam/xlogarchive.c:114 access/transam/xlogarchive.c:467 -#: replication/logical/reorderbuffer.c:2352 -#: replication/logical/reorderbuffer.c:2409 +#: access/heap/rewriteheap.c:1250 access/transam/xlog.c:10321 +#: access/transam/xlogarchive.c:114 access/transam/xlogarchive.c:468 +#: replication/logical/origin.c:529 replication/logical/reorderbuffer.c:2421 +#: replication/logical/reorderbuffer.c:2478 #: replication/logical/snapbuild.c:1520 replication/logical/snapbuild.c:1895 -#: replication/slot.c:1105 storage/ipc/dsm.c:326 storage/smgr/md.c:404 -#: storage/smgr/md.c:453 storage/smgr/md.c:1317 +#: replication/slot.c:1089 storage/ipc/dsm.c:326 storage/smgr/md.c:420 +#: storage/smgr/md.c:469 storage/smgr/md.c:1333 #, c-format msgid "could not remove file \"%s\": %m" msgstr "no se pudo eliminar el archivo «%s»: %m" -#: access/heap/rewriteheap.c:1272 access/transam/timeline.c:111 +#: access/heap/rewriteheap.c:1264 access/transam/timeline.c:111 #: access/transam/timeline.c:236 access/transam/timeline.c:334 -#: access/transam/xlog.c:3117 access/transam/xlog.c:3224 -#: access/transam/xlog.c:3261 access/transam/xlog.c:3536 -#: access/transam/xlog.c:3614 replication/basebackup.c:458 -#: replication/basebackup.c:1167 replication/logical/logicalfuncs.c:152 -#: replication/logical/reorderbuffer.c:1965 -#: replication/logical/reorderbuffer.c:2172 -#: replication/logical/reorderbuffer.c:2801 +#: access/transam/xlog.c:2943 access/transam/xlog.c:3060 +#: access/transam/xlog.c:3101 access/transam/xlog.c:3392 +#: access/transam/xlog.c:3470 replication/basebackup.c:398 +#: replication/basebackup.c:1158 replication/logical/logicalfuncs.c:154 +#: replication/logical/origin.c:677 replication/logical/reorderbuffer.c:2038 +#: replication/logical/reorderbuffer.c:2242 +#: replication/logical/reorderbuffer.c:2869 #: replication/logical/snapbuild.c:1569 replication/logical/snapbuild.c:1653 -#: replication/slot.c:1120 replication/walsender.c:458 -#: replication/walsender.c:2094 storage/file/copydir.c:155 -#: storage/file/fd.c:422 storage/smgr/md.c:586 storage/smgr/md.c:844 -#: utils/error/elog.c:1797 utils/init/miscinit.c:992 -#: utils/init/miscinit.c:1121 utils/misc/guc.c:6795 utils/misc/guc.c:6813 +#: replication/slot.c:1104 replication/walsender.c:458 +#: replication/walsender.c:2080 storage/file/copydir.c:155 +#: storage/file/fd.c:445 storage/file/fd.c:2653 storage/file/fd.c:2705 +#: storage/smgr/md.c:602 storage/smgr/md.c:860 utils/error/elog.c:1854 +#: utils/init/miscinit.c:1118 utils/init/miscinit.c:1247 utils/misc/guc.c:6891 +#: utils/misc/guc.c:6923 #, c-format msgid "could not open file \"%s\": %m" msgstr "no se pudo abrir el archivo «%s»: %m" -#: access/index/indexam.c:172 catalog/objectaddress.c:855 -#: commands/indexcmds.c:1725 commands/tablecmds.c:232 -#: commands/tablecmds.c:11270 +#: access/index/indexam.c:172 catalog/objectaddress.c:1144 +#: commands/indexcmds.c:1754 commands/tablecmds.c:238 +#: commands/tablecmds.c:11916 #, c-format msgid "\"%s\" is not an index" msgstr "«%s» no es un índice" -#: access/nbtree/nbtinsert.c:396 +#: access/nbtree/nbtinsert.c:419 #, c-format msgid "duplicate key value violates unique constraint \"%s\"" msgstr "llave duplicada viola restricción de unicidad «%s»" -#: access/nbtree/nbtinsert.c:398 +#: access/nbtree/nbtinsert.c:421 #, c-format msgid "Key %s already exists." msgstr "Ya existe la llave %s." -#: access/nbtree/nbtinsert.c:466 +#: access/nbtree/nbtinsert.c:488 #, c-format msgid "failed to re-find tuple within index \"%s\"" msgstr "no se pudo volver a encontrar la tupla dentro del índice «%s»" -#: access/nbtree/nbtinsert.c:468 +#: access/nbtree/nbtinsert.c:490 #, c-format msgid "This may be because of a non-immutable index expression." msgstr "Esto puede deberse a una expresión de índice no inmutable." -#: access/nbtree/nbtinsert.c:548 access/nbtree/nbtsort.c:488 +#: access/nbtree/nbtinsert.c:570 access/nbtree/nbtsort.c:491 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -645,24 +729,24 @@ msgstr "" "Valores mayores a 1/3 de la página del buffer no pueden ser indexados.\n" "Considere un índice sobre una función que genere un hash MD5 del valor, o utilice un esquema de indexación de texto completo." -#: access/nbtree/nbtpage.c:166 access/nbtree/nbtpage.c:362 -#: access/nbtree/nbtpage.c:449 parser/parse_utilcmd.c:1620 +#: access/nbtree/nbtpage.c:168 access/nbtree/nbtpage.c:371 +#: access/nbtree/nbtpage.c:458 parser/parse_utilcmd.c:1665 #, c-format msgid "index \"%s\" is not a btree" msgstr "el índice «%s» no es un btree" -#: access/nbtree/nbtpage.c:172 access/nbtree/nbtpage.c:368 -#: access/nbtree/nbtpage.c:455 +#: access/nbtree/nbtpage.c:174 access/nbtree/nbtpage.c:377 +#: access/nbtree/nbtpage.c:464 #, c-format msgid "version mismatch in index \"%s\": file version %d, code version %d" msgstr "discordancia de versión en índice «%s»: versión de archivo %d, versión de código %d" -#: access/nbtree/nbtpage.c:1187 +#: access/nbtree/nbtpage.c:1152 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "el índice «%s» contiene una página interna parcialmente muerta" -#: access/nbtree/nbtpage.c:1189 +#: access/nbtree/nbtpage.c:1154 #, c-format msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "Esto puede ser causado por la interrupción de un VACUUM en la versión 9.3 o anteriores, antes de actualizar. Ejecute REINDEX por favor." @@ -672,13 +756,34 @@ msgstr "Esto puede ser causado por la interrupción de un VACUUM en la versión msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "el tamaño de tupla interna SP-GiST %zu excede el máximo %zu" -#: access/transam/multixact.c:990 +#: access/tablesample/bernoulli.c:152 access/tablesample/system.c:156 +#, fuzzy, c-format +msgid "sample percentage must be between 0 and 100" +msgstr "la precisión de timestamp(%d) debe estar entre %d y %d" + +#: access/transam/commit_ts.c:290 access/transam/commit_ts.c:373 +#, fuzzy, c-format +msgid "could not get commit timestamp data" +msgstr "no se pudo determinar el tipo de dato de entrada" + +#: access/transam/commit_ts.c:291 access/transam/commit_ts.c:374 +#: libpq/hba.c:1424 +#, fuzzy, c-format +msgid "Make sure the configuration parameter \"%s\" is set." +msgstr "Asegúrese que el parámetro de configuración «ssl_ca_file» esté definido." + +#: access/transam/commit_ts.c:298 +#, fuzzy, c-format +msgid "cannot retrieve commit timestamp for transaction %u" +msgstr "no se puede heredar de la tabla temporal «%s»" + +#: access/transam/multixact.c:1008 #, 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:992 access/transam/multixact.c:999 -#: access/transam/multixact.c:1014 access/transam/multixact.c:1023 +#: access/transam/multixact.c:1010 access/transam/multixact.c:1017 +#: access/transam/multixact.c:1041 access/transam/multixact.c:1050 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -687,43 +792,70 @@ msgstr "" "Ejecute VACUUM en esa base de datos.\n" "Puede que además necesite comprometer o abortar transacciones preparadas antiguas." -#: access/transam/multixact.c:997 +#: access/transam/multixact.c:1015 #, 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:1009 access/transam/multixact.c:2201 +#: access/transam/multixact.c:1036 access/transam/multixact.c:2317 #, 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:1018 access/transam/multixact.c:2210 +#: access/transam/multixact.c:1045 access/transam/multixact.c:2326 #, 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:1169 +#: access/transam/multixact.c:1106 +#, c-format +msgid "multixact \"members\" limit exceeded" +msgstr "límite de miembros de multixact alcanzado" + +#: access/transam/multixact.c:1107 +#, 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] "" +msgstr[1] "" + +#: access/transam/multixact.c:1112 +#, 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:1143 +#, c-format +msgid "database with OID %u must be vacuumed before %d more multixact members are used" +msgstr "base de datos con OID %u debe ser limpiada antes de que %d más miembros de multixact sean usados" + +#: access/transam/multixact.c:1146 +#, 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:1284 #, 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:1177 +#: access/transam/multixact.c:1292 #, 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:2166 +#: access/transam/multixact.c:2267 #, c-format msgid "MultiXactId wrap limit is %u, limited by database with OID %u" msgstr "el límite para el reciclaje de MultiXactId es %u, limitado por base de datos con OID %u" -#: access/transam/multixact.c:2206 access/transam/multixact.c:2215 -#: access/transam/varsup.c:137 access/transam/varsup.c:144 -#: access/transam/varsup.c:374 access/transam/varsup.c:381 +#: access/transam/multixact.c:2322 access/transam/multixact.c:2331 +#: access/transam/varsup.c:146 access/transam/varsup.c:153 +#: access/transam/varsup.c:384 access/transam/varsup.c:391 #, c-format msgid "" "To avoid a database shutdown, execute a database-wide VACUUM in that database.\n" @@ -732,59 +864,119 @@ 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." -#: access/transam/multixact.c:2799 +#: access/transam/multixact.c:2599 +#, c-format +msgid "oldest MultiXactId member is at offset %u" +msgstr "el miembro de multixact más antiguo está en la posición %u" + +#: access/transam/multixact.c:2603 +#, 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:2625 +#, 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:2627 +#, c-format +msgid "MultiXact member stop limit is now %u based on MultiXact %u" +msgstr "el límite de detención de miembros de multixact es ahora %u basado en el multixact %u" + +#: access/transam/multixact.c:3005 +#, 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, saltando el truncado" + +#: access/transam/multixact.c:3023 +#, c-format +msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" +msgstr "" + +#: access/transam/multixact.c:3349 #, c-format msgid "invalid MultiXactId: %u" msgstr "el MultiXactId no es válido: %u" -#: access/transam/slru.c:651 +#: access/transam/parallel.c:577 +#, fuzzy, c-format +msgid "postmaster exited during a parallel transaction" +msgstr "no se puede ejecutar %s en una transacción de sólo lectura" + +#: access/transam/parallel.c:668 +#, fuzzy, c-format +msgid "lost connection to parallel worker" +msgstr "se ha perdido la conexión al cliente" + +#: access/transam/parallel.c:838 +#, fuzzy, c-format +msgid "unable to map dynamic shared memory segment" +msgstr "demasiados segmentos de memoria compartida dinámica" + +#: access/transam/parallel.c:843 +#, fuzzy, c-format +msgid "bad magic number in dynamic shared memory segment" +msgstr "demasiados segmentos de memoria compartida dinámica" + +#: access/transam/parallel.c:856 +#, c-format +msgid "too many parallel workers already attached" +msgstr "" + +#: access/transam/parallel.c:996 +#, c-format +msgid "parallel worker, pid %d" +msgstr "" + +#: access/transam/slru.c:652 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "el archivo «%s» no existe, leyendo como ceros" -#: access/transam/slru.c:881 access/transam/slru.c:887 -#: access/transam/slru.c:894 access/transam/slru.c:901 -#: access/transam/slru.c:908 access/transam/slru.c:915 +#: access/transam/slru.c:882 access/transam/slru.c:888 +#: access/transam/slru.c:895 access/transam/slru.c:902 +#: access/transam/slru.c:909 access/transam/slru.c:916 #, c-format msgid "could not access status of transaction %u" msgstr "no se pudo encontrar el estado de la transacción %u" -#: access/transam/slru.c:882 +#: access/transam/slru.c:883 #, c-format msgid "Could not open file \"%s\": %m." msgstr "No se pudo abrir el archivo «%s»: %m." -#: access/transam/slru.c:888 +#: access/transam/slru.c:889 #, c-format msgid "Could not seek in file \"%s\" to offset %u: %m." msgstr "No se pudo posicionar (seek) en el archivo «%s» a la posición %u: %m." -#: access/transam/slru.c:895 +#: access/transam/slru.c:896 #, c-format msgid "Could not read from file \"%s\" at offset %u: %m." msgstr "No se pudo leer desde el archivo «%s» en la posición %u: %m." -#: access/transam/slru.c:902 +#: access/transam/slru.c:903 #, c-format msgid "Could not write to file \"%s\" at offset %u: %m." msgstr "No se pudo escribir al archivo «%s» en la posición %u: %m." -#: access/transam/slru.c:909 +#: access/transam/slru.c:910 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "No se pudo sincronizar (fsync) archivo «%s»: %m." -#: access/transam/slru.c:916 +#: access/transam/slru.c:917 #, c-format msgid "Could not close file \"%s\": %m." msgstr "No se pudo cerrar el archivo «%s»: %m." -#: access/transam/slru.c:1171 +#: access/transam/slru.c:1172 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "no se pudo truncar el directorio «%s»: aparente problema por reciclaje de transacciones" -#: access/transam/slru.c:1220 +#: access/transam/slru.c:1227 access/transam/slru.c:1283 #, c-format msgid "removing file \"%s\"" msgstr "eliminando el archivo «%s»" @@ -824,19 +1016,22 @@ msgstr "datos no válidos en archivo de historia «%s»" msgid "Timeline IDs must be less than child timeline's ID." msgstr "IDs de timeline deben ser menores que el ID de timeline del hijo." -#: access/transam/timeline.c:346 access/transam/xlog.c:3289 -#: access/transam/xlog.c:10081 access/transam/xlog.c:10094 -#: access/transam/xlog.c:10462 access/transam/xlog.c:10505 -#: access/transam/xlogfuncs.c:468 access/transam/xlogfuncs.c:487 -#: replication/logical/reorderbuffer.c:2819 replication/walsender.c:483 -#: storage/file/copydir.c:176 utils/adt/genfile.c:139 +#: access/transam/timeline.c:346 access/transam/xlog.c:3144 +#: access/transam/xlog.c:10303 access/transam/xlog.c:10316 +#: access/transam/xlog.c:10679 access/transam/xlog.c:10722 +#: access/transam/xlog.c:10761 access/transam/xlog.c:10804 +#: access/transam/xlogfuncs.c:478 access/transam/xlogfuncs.c:497 +#: commands/extension.c:3047 replication/logical/origin.c:684 +#: replication/logical/origin.c:714 replication/logical/reorderbuffer.c:2887 +#: replication/walsender.c:483 storage/file/copydir.c:176 +#: utils/adt/genfile.c:151 #, c-format msgid "could not read file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" #: access/transam/timeline.c:412 access/transam/timeline.c:502 -#: access/transam/xlog.c:3191 access/transam/xlog.c:3320 -#: access/transam/xlogfuncs.c:493 commands/copy.c:1518 +#: access/transam/xlog.c:3017 access/transam/xlog.c:3178 +#: access/transam/xlogfuncs.c:503 commands/copy.c:1631 #: storage/file/copydir.c:201 #, c-format msgid "could not close file \"%s\": %m" @@ -848,12 +1043,13 @@ msgid "could not link file \"%s\" to \"%s\": %m" msgstr "no se pudo enlazar (link) el archivo «%s» a «%s»: %m" #: access/transam/timeline.c:436 access/transam/timeline.c:526 -#: access/transam/xlog.c:5403 access/transam/xlog.c:6496 -#: access/transam/xlogarchive.c:458 access/transam/xlogarchive.c:475 -#: access/transam/xlogarchive.c:582 postmaster/pgarch.c:759 -#: replication/logical/snapbuild.c:1606 replication/slot.c:468 -#: replication/slot.c:942 replication/slot.c:1054 utils/misc/guc.c:6843 -#: utils/time/snapmgr.c:999 +#: access/transam/xlog.c:5299 access/transam/xlog.c:6501 +#: access/transam/xlog.c:6518 access/transam/xlog.c:7300 +#: access/transam/xlogarchive.c:458 access/transam/xlogarchive.c:476 +#: access/transam/xlogarchive.c:586 postmaster/pgarch.c:734 +#: replication/logical/origin.c:624 replication/logical/snapbuild.c:1606 +#: replication/slot.c:470 replication/slot.c:926 replication/slot.c:1038 +#: utils/misc/guc.c:6947 utils/time/snapmgr.c:1094 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "no se pudo renombrar el archivo de «%s» a «%s»: %m" @@ -893,136 +1089,136 @@ msgstr "se alcanzó el número máximo de transacciones preparadas" msgid "Increase max_prepared_transactions (currently %d)." msgstr "Incremente max_prepared_transactions (actualmente es %d)." -#: access/transam/twophase.c:505 +#: access/transam/twophase.c:504 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "transacción preparada con identificador «%s» está ocupada" -#: access/transam/twophase.c:511 +#: access/transam/twophase.c:510 #, c-format msgid "permission denied to finish prepared transaction" msgstr "permiso denegado para finalizar la transacción preparada" -#: access/transam/twophase.c:512 +#: access/transam/twophase.c:511 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "Debe ser superusuario o el usuario que preparó la transacción." -#: access/transam/twophase.c:523 +#: access/transam/twophase.c:522 #, c-format msgid "prepared transaction belongs to another database" msgstr "la transacción preparada pertenece a otra base de datos" -#: access/transam/twophase.c:524 +#: access/transam/twophase.c:523 #, c-format msgid "Connect to the database where the transaction was prepared to finish it." msgstr "Conéctese a la base de datos donde la transacción fue preparada para terminarla." -#: access/transam/twophase.c:539 +#: access/transam/twophase.c:538 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "transacción preparada con identificador «%s» no existe" -#: access/transam/twophase.c:1042 +#: access/transam/twophase.c:1048 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "el largo máximo del archivo de estado de COMMIT en dos fases fue excedido" -#: access/transam/twophase.c:1055 +#: access/transam/twophase.c:1061 #, c-format msgid "could not create two-phase state file \"%s\": %m" msgstr "no se pudo crear el archivo de estado de COMMIT en dos fases «%s»: %m" -#: access/transam/twophase.c:1069 access/transam/twophase.c:1086 -#: access/transam/twophase.c:1135 access/transam/twophase.c:1564 -#: access/transam/twophase.c:1571 +#: access/transam/twophase.c:1075 access/transam/twophase.c:1092 +#: access/transam/twophase.c:1145 access/transam/twophase.c:1575 +#: access/transam/twophase.c:1582 #, c-format msgid "could not write two-phase state file: %m" msgstr "no se pudo escribir el archivo de estado de COMMIT en dos fases: %m" -#: access/transam/twophase.c:1095 +#: access/transam/twophase.c:1101 #, c-format msgid "could not seek in two-phase state file: %m" msgstr "no se pudo posicionar (seek) en el archivo de estado de COMMIT en dos fases: %m" -#: access/transam/twophase.c:1141 access/transam/twophase.c:1589 +#: access/transam/twophase.c:1151 access/transam/twophase.c:1600 #, c-format msgid "could not close two-phase state file: %m" msgstr "no se pudo cerrar el archivo de estado de COMMIT en dos fases: %m" -#: access/transam/twophase.c:1228 access/transam/twophase.c:1670 +#: access/transam/twophase.c:1239 access/transam/twophase.c:1681 #, c-format msgid "could not open two-phase state file \"%s\": %m" msgstr "no se pudo abrir el archivo de estado de COMMIT en dos fases «%s»: %m" -#: access/transam/twophase.c:1245 +#: access/transam/twophase.c:1256 #, c-format msgid "could not stat two-phase state file \"%s\": %m" msgstr "no se pudo hacer stat al archivo de estado de COMMIT en dos fases «%s»: %m" -#: access/transam/twophase.c:1277 +#: access/transam/twophase.c:1288 #, c-format msgid "could not read two-phase state file \"%s\": %m" msgstr "no se pudo leer el archivo de estado de COMMIT en dos fases «%s»: %m" -#: access/transam/twophase.c:1373 +#: access/transam/twophase.c:1384 #, c-format msgid "two-phase state file for transaction %u is corrupt" msgstr "el archivo de estado de COMMIT en dos fases para la transacción %u está dañado" -#: access/transam/twophase.c:1526 +#: access/transam/twophase.c:1537 #, c-format msgid "could not remove two-phase state file \"%s\": %m" msgstr "no se pudo eliminar el archivo de estado de COMMIT en dos fases «%s»: %m" -#: access/transam/twophase.c:1555 +#: access/transam/twophase.c:1566 #, c-format msgid "could not recreate two-phase state file \"%s\": %m" msgstr "no se pudo recrear el archivo de estado de COMMIT en dos fases «%s»: %m" -#: access/transam/twophase.c:1583 +#: access/transam/twophase.c:1594 #, c-format msgid "could not fsync two-phase state file: %m" msgstr "no se pudo sincronizar (fsync) el archivo de estado de COMMIT en dos fases: %m" -#: access/transam/twophase.c:1679 +#: access/transam/twophase.c:1690 #, c-format msgid "could not fsync two-phase state file \"%s\": %m" msgstr "no se pudo sincronizar (fsync) el archivo de estado de COMMIT en dos fases «%s»: %m" -#: access/transam/twophase.c:1686 +#: access/transam/twophase.c:1697 #, c-format msgid "could not close two-phase state file \"%s\": %m" msgstr "no se pudo cerrar el archivo de estado de COMMIT en dos fases «%s»: %m" -#: access/transam/twophase.c:1751 +#: access/transam/twophase.c:1762 #, c-format msgid "removing future two-phase state file \"%s\"" msgstr "eliminando archivo futuro de estado de COMMIT en dos fases «%s»" -#: access/transam/twophase.c:1767 access/transam/twophase.c:1778 -#: access/transam/twophase.c:1897 access/transam/twophase.c:1908 -#: access/transam/twophase.c:1981 +#: access/transam/twophase.c:1778 access/transam/twophase.c:1789 +#: access/transam/twophase.c:1908 access/transam/twophase.c:1919 +#: access/transam/twophase.c:1992 #, c-format msgid "removing corrupt two-phase state file \"%s\"" msgstr "eliminando archivo dañado de estado de COMMIT en dos fases «%s»" -#: access/transam/twophase.c:1886 access/transam/twophase.c:1970 +#: access/transam/twophase.c:1897 access/transam/twophase.c:1981 #, c-format msgid "removing stale two-phase state file \"%s\"" msgstr "eliminando archivo obsoleto de estado de COMMIT en dos fases «%s»" -#: access/transam/twophase.c:1988 +#: access/transam/twophase.c:1999 #, c-format msgid "recovering prepared transaction %u" msgstr "recuperando transacción preparada %u" -#: access/transam/varsup.c:115 +#: access/transam/varsup.c:124 #, c-format msgid "database is not accepting commands to avoid wraparound data loss in database \"%s\"" msgstr "la base de datos no está aceptando órdenes para evitar pérdida de datos debido al problema del reciclaje de transacciones en la base de datos «%s»" -#: access/transam/varsup.c:117 access/transam/varsup.c:124 +#: access/transam/varsup.c:126 access/transam/varsup.c:133 #, c-format msgid "" "Stop the postmaster and vacuum that database in single-user mode.\n" @@ -1031,1108 +1227,1202 @@ msgstr "" "Detenga el proceso postmaster y utilice una conexión aislada (standalone) para limpiar (vacuum) esa base de datos.\n" "Puede que además necesite comprometer o abortar transacciones preparadas antiguas." -#: access/transam/varsup.c:122 +#: access/transam/varsup.c:131 #, c-format msgid "database is not accepting commands to avoid wraparound data loss in database with OID %u" msgstr "la base de datos no está aceptando órdenes para evitar pérdida de datos debido al problema del reciclaje de transacciones en la base con OID %u" -#: access/transam/varsup.c:134 access/transam/varsup.c:371 +#: access/transam/varsup.c:143 access/transam/varsup.c:381 #, c-format msgid "database \"%s\" must be vacuumed within %u transactions" msgstr "base de datos «%s» debe ser limpiada dentro de %u transacciones" -#: access/transam/varsup.c:141 access/transam/varsup.c:378 +#: access/transam/varsup.c:150 access/transam/varsup.c:388 #, c-format msgid "database with OID %u must be vacuumed within %u transactions" msgstr "base de datos con OID %u debe ser limpiada dentro de %u transacciones" -#: access/transam/varsup.c:336 +#: access/transam/varsup.c:346 #, c-format msgid "transaction ID wrap limit is %u, limited by database with OID %u" msgstr "el límite para el reciclaje de ID de transacciones es %u, limitado por base de datos con OID %u" -#: access/transam/xact.c:814 +#: access/transam/xact.c:943 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "no se pueden tener más de 2^32-2 órdenes en una transacción" -#: access/transam/xact.c:1370 +#: access/transam/xact.c:1453 #, 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:2151 +#: access/transam/xact.c:2247 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary tables" msgstr "no se puede hacer PREPARE de una transacción que ha operado en tablas temporales" -#: access/transam/xact.c:2161 +#: access/transam/xact.c:2257 #, 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:3000 +#: access/transam/xact.c:3135 #, 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:3010 +#: access/transam/xact.c:3145 #, 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:3020 +#: access/transam/xact.c:3155 #, c-format msgid "%s cannot be executed from a function or multi-command string" msgstr "la orden %s no puede ser ejecutada desde una función o una línea con múltiples órdenes" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3091 +#: access/transam/xact.c:3226 #, 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:3274 +#: access/transam/xact.c:3410 #, c-format msgid "there is already a transaction in progress" msgstr "ya hay una transacción en curso" -#: access/transam/xact.c:3442 access/transam/xact.c:3535 +#: access/transam/xact.c:3578 access/transam/xact.c:3681 #, c-format msgid "there is no transaction in progress" msgstr "no hay una transacción en curso" -#: access/transam/xact.c:3631 access/transam/xact.c:3682 -#: access/transam/xact.c:3688 access/transam/xact.c:3732 -#: access/transam/xact.c:3781 access/transam/xact.c:3787 +#: access/transam/xact.c:3589 +#, c-format +msgid "cannot commit during a parallel operation" +msgstr "" + +#: access/transam/xact.c:3692 +#, c-format +msgid "cannot abort during a parallel operation" +msgstr "" + +#: access/transam/xact.c:3734 +#, c-format +msgid "cannot define savepoints during a parallel operation" +msgstr "" + +#: access/transam/xact.c:3801 +#, fuzzy, c-format +msgid "cannot release savepoints during a parallel operation" +msgstr "no se pueden crear tablas temporales durante la recuperación" + +#: access/transam/xact.c:3812 access/transam/xact.c:3864 +#: access/transam/xact.c:3870 access/transam/xact.c:3926 +#: access/transam/xact.c:3976 access/transam/xact.c:3982 #, c-format msgid "no such savepoint" msgstr "no hay un savepoint con ese nombre" -#: access/transam/xact.c:4464 +#: access/transam/xact.c:3914 +#, c-format +msgid "cannot rollback to savepoints during a parallel operation" +msgstr "" + +#: access/transam/xact.c:4042 +#, fuzzy, c-format +msgid "cannot start subtransactions during a parallel operation" +msgstr "no se pueden tener más de 2^32-1 subtransacciones en una transacción" + +#: access/transam/xact.c:4109 +#, fuzzy, c-format +msgid "cannot commit subtransactions during a parallel operation" +msgstr "no se pueden tener más de 2^32-1 subtransacciones en una transacción" + +#: access/transam/xact.c:4715 #, 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:2416 +#: access/transam/xlog.c:2270 #, c-format msgid "could not seek in log file %s to offset %u: %m" msgstr "no se pudo posicionar (seek) en el archivo «%s» a la posición %u: %m" -#: access/transam/xlog.c:2436 +#: access/transam/xlog.c:2290 #, 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:2712 +#: access/transam/xlog.c:2553 #, c-format msgid "updated min recovery point to %X/%X on timeline %u" msgstr "el punto mínimo de recuperación fue actualizado a %X/%X en el timeline %u" -#: access/transam/xlog.c:3292 +#: access/transam/xlog.c:3148 #, c-format msgid "not enough data in file \"%s\"" msgstr "los datos del archivo «%s» son insuficientes" -#: access/transam/xlog.c:3411 +#: access/transam/xlog.c:3267 #, c-format msgid "could not link file \"%s\" to \"%s\" (initialization of log file): %m" msgstr "no se pudo enlazar (link) el archivo «%s» a «%s» (inicialización de archivo de registro): %m" -#: access/transam/xlog.c:3423 +#: access/transam/xlog.c:3279 #, c-format msgid "could not rename file \"%s\" to \"%s\" (initialization of log file): %m" msgstr "no se pudo renombrar archivo de «%s» a «%s» (inicialización de archivo de registro): %m" -#: access/transam/xlog.c:3451 +#: access/transam/xlog.c:3307 #, c-format msgid "could not open transaction log file \"%s\": %m" msgstr "no se pudo abrir el archivo de registro de transacciones «%s»: %m" -#: access/transam/xlog.c:3640 +#: access/transam/xlog.c:3496 access/transam/xlog.c:5269 #, c-format msgid "could not close log file %s: %m" msgstr "no se pudo cerrar el archivo de registro %s: %m" -#: access/transam/xlog.c:3699 replication/logical/logicalfuncs.c:147 -#: replication/walsender.c:2089 +#: access/transam/xlog.c:3553 replication/logical/logicalfuncs.c:149 +#: replication/walsender.c:2075 #, 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:3777 access/transam/xlog.c:3954 +#: access/transam/xlog.c:3613 access/transam/xlog.c:3688 +#: access/transam/xlog.c:3886 #, c-format msgid "could not open transaction log directory \"%s\": %m" msgstr "no se pudo abrir directorio de registro de transacciones «%s»: %m" -#: access/transam/xlog.c:3825 +#: access/transam/xlog.c:3769 #, c-format msgid "recycled transaction log file \"%s\"" msgstr "el archivo de registro de transacciones «%s» ha sido reciclado" -#: access/transam/xlog.c:3841 +#: access/transam/xlog.c:3781 #, c-format msgid "removing transaction log file \"%s\"" msgstr "eliminando archivo de registro de transacciones «%s»" -#: access/transam/xlog.c:3864 +#: access/transam/xlog.c:3801 #, c-format msgid "could not rename old transaction log file \"%s\": %m" msgstr "no se pudo cambiar el nombre del archivo antiguo de registro de transacciones «%s»: %m" -#: access/transam/xlog.c:3876 +#: access/transam/xlog.c:3813 #, c-format msgid "could not remove old transaction log file \"%s\": %m" msgstr "no se pudo eliminar el archivo antiguo de registro de transacciones «%s»: %m" -#: access/transam/xlog.c:3914 access/transam/xlog.c:3924 +#: access/transam/xlog.c:3846 access/transam/xlog.c:3856 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "no existe el directorio WAL «%s»" -#: access/transam/xlog.c:3930 +#: access/transam/xlog.c:3862 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "creando el directorio WAL faltante «%s»" -#: access/transam/xlog.c:3933 +#: access/transam/xlog.c:3865 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "no se pudo crear el directorio faltante «%s»: %m" -#: access/transam/xlog.c:3967 +#: access/transam/xlog.c:3896 #, c-format msgid "removing transaction log backup history file \"%s\"" msgstr "eliminando el archivo de historia del respaldo de registro de transacciones «%s»" -#: access/transam/xlog.c:4159 +#: access/transam/xlog.c:3977 #, 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:4281 +#: access/transam/xlog.c:4099 #, 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:4295 +#: access/transam/xlog.c:4113 #, 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:4314 +#: access/transam/xlog.c:4132 #, c-format msgid "new target timeline is %u" msgstr "el nuevo timeline destino es %u" -#: access/transam/xlog.c:4394 +#: access/transam/xlog.c:4212 #, c-format msgid "could not create control file \"%s\": %m" msgstr "no se pudo crear archivo de control «%s»: %m" -#: access/transam/xlog.c:4405 access/transam/xlog.c:4641 +#: access/transam/xlog.c:4223 access/transam/xlog.c:4459 #, c-format msgid "could not write to control file: %m" msgstr "no se pudo escribir en el archivo de control: %m" -#: access/transam/xlog.c:4411 access/transam/xlog.c:4647 +#: access/transam/xlog.c:4229 access/transam/xlog.c:4465 #, c-format msgid "could not fsync control file: %m" msgstr "no se pudo sincronizar (fsync) el archivo de control: %m" -#: access/transam/xlog.c:4416 access/transam/xlog.c:4652 +#: access/transam/xlog.c:4234 access/transam/xlog.c:4470 #, c-format msgid "could not close control file: %m" msgstr "no se pudo cerrar el archivo de control: %m" -#: access/transam/xlog.c:4434 access/transam/xlog.c:4630 +#: access/transam/xlog.c:4252 access/transam/xlog.c:4448 #, c-format msgid "could not open control file \"%s\": %m" msgstr "no se pudo abrir el archivo de control «%s»: %m" -#: access/transam/xlog.c:4440 +#: access/transam/xlog.c:4258 #, c-format msgid "could not read from control file: %m" msgstr "no se pudo leer desde el archivo de control: %m" -#: access/transam/xlog.c:4453 access/transam/xlog.c:4462 -#: access/transam/xlog.c:4486 access/transam/xlog.c:4493 -#: access/transam/xlog.c:4500 access/transam/xlog.c:4505 -#: access/transam/xlog.c:4512 access/transam/xlog.c:4519 -#: access/transam/xlog.c:4526 access/transam/xlog.c:4533 -#: access/transam/xlog.c:4540 access/transam/xlog.c:4547 -#: access/transam/xlog.c:4554 access/transam/xlog.c:4563 -#: access/transam/xlog.c:4570 access/transam/xlog.c:4579 -#: access/transam/xlog.c:4586 access/transam/xlog.c:4595 -#: access/transam/xlog.c:4602 utils/init/miscinit.c:1139 +#: access/transam/xlog.c:4271 access/transam/xlog.c:4280 +#: access/transam/xlog.c:4304 access/transam/xlog.c:4311 +#: access/transam/xlog.c:4318 access/transam/xlog.c:4323 +#: access/transam/xlog.c:4330 access/transam/xlog.c:4337 +#: access/transam/xlog.c:4344 access/transam/xlog.c:4351 +#: access/transam/xlog.c:4358 access/transam/xlog.c:4365 +#: access/transam/xlog.c:4372 access/transam/xlog.c:4381 +#: access/transam/xlog.c:4388 access/transam/xlog.c:4397 +#: access/transam/xlog.c:4404 access/transam/xlog.c:4413 +#: access/transam/xlog.c:4420 utils/init/miscinit.c:1265 #, 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:4454 +#: access/transam/xlog.c:4272 #, 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:4458 +#: access/transam/xlog.c:4276 #, 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:4463 +#: access/transam/xlog.c:4281 #, 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:4466 access/transam/xlog.c:4490 -#: access/transam/xlog.c:4497 access/transam/xlog.c:4502 +#: access/transam/xlog.c:4284 access/transam/xlog.c:4308 +#: access/transam/xlog.c:4315 access/transam/xlog.c:4320 #, c-format msgid "It looks like you need to initdb." msgstr "Parece que necesita ejecutar initdb." -#: access/transam/xlog.c:4477 +#: access/transam/xlog.c:4295 #, 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:4487 +#: access/transam/xlog.c:4305 #, 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:4494 +#: access/transam/xlog.c:4312 #, 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:4501 +#: access/transam/xlog.c:4319 #, 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:4506 +#: access/transam/xlog.c:4324 #, 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:4509 access/transam/xlog.c:4516 -#: access/transam/xlog.c:4523 access/transam/xlog.c:4530 -#: access/transam/xlog.c:4537 access/transam/xlog.c:4544 -#: access/transam/xlog.c:4551 access/transam/xlog.c:4558 -#: access/transam/xlog.c:4566 access/transam/xlog.c:4573 -#: access/transam/xlog.c:4582 access/transam/xlog.c:4589 -#: access/transam/xlog.c:4598 access/transam/xlog.c:4605 +#: access/transam/xlog.c:4327 access/transam/xlog.c:4334 +#: access/transam/xlog.c:4341 access/transam/xlog.c:4348 +#: access/transam/xlog.c:4355 access/transam/xlog.c:4362 +#: access/transam/xlog.c:4369 access/transam/xlog.c:4376 +#: access/transam/xlog.c:4384 access/transam/xlog.c:4391 +#: access/transam/xlog.c:4400 access/transam/xlog.c:4407 +#: access/transam/xlog.c:4416 access/transam/xlog.c:4423 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Parece que necesita recompilar o ejecutar initdb." -#: access/transam/xlog.c:4513 +#: access/transam/xlog.c:4331 #, 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:4520 +#: access/transam/xlog.c:4338 #, 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:4527 +#: access/transam/xlog.c:4345 #, c-format msgid "The database cluster was initialized with XLOG_SEG_SIZE %d, but the server was compiled with XLOG_SEG_SIZE %d." msgstr "Los archivos de la base de datos fueron inicializados con XLOG_SEG_SIZE %d, pero el servidor fue compilado con XLOG_SEG_SIZE %d." -#: access/transam/xlog.c:4534 +#: access/transam/xlog.c:4352 #, 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:4541 +#: access/transam/xlog.c:4359 #, 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:4548 +#: access/transam/xlog.c:4366 #, 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:4555 +#: access/transam/xlog.c:4373 #, 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:4564 +#: access/transam/xlog.c:4382 #, c-format msgid "The database cluster was initialized without HAVE_INT64_TIMESTAMP but the server was compiled with HAVE_INT64_TIMESTAMP." msgstr "Los archivos de la base de datos fueron inicializados sin HAVE_INT64_TIMESTAMP, pero el servidor fue compilado con HAVE_INT64_TIMESTAMP." -#: access/transam/xlog.c:4571 +#: access/transam/xlog.c:4389 #, c-format msgid "The database cluster was initialized with HAVE_INT64_TIMESTAMP but the server was compiled without HAVE_INT64_TIMESTAMP." msgstr "Los archivos de la base de datos fueron inicializados con HAVE_INT64_TIMESTAMP, pero el servidor fue compilado sin HAVE_INT64_TIMESTAMP." -#: access/transam/xlog.c:4580 +#: access/transam/xlog.c:4398 #, c-format msgid "The database cluster was initialized without USE_FLOAT4_BYVAL but the server was compiled with USE_FLOAT4_BYVAL." msgstr "Los archivos de base de datos fueron inicializados sin USE_FLOAT4_BYVAL, pero el servidor fue compilado con USE_FLOAT4_BYVAL." -#: access/transam/xlog.c:4587 +#: access/transam/xlog.c:4405 #, c-format msgid "The database cluster was initialized with USE_FLOAT4_BYVAL but the server was compiled without USE_FLOAT4_BYVAL." msgstr "Los archivos de base de datos fueron inicializados con USE_FLOAT4_BYVAL, pero el servidor fue compilado sin USE_FLOAT4_BYVAL." -#: access/transam/xlog.c:4596 +#: access/transam/xlog.c:4414 #, 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:4603 +#: access/transam/xlog.c:4421 #, 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:5004 +#: access/transam/xlog.c:4847 #, c-format msgid "could not write bootstrap transaction log file: %m" msgstr "no se pudo escribir al archivo de registro de transacciones de inicio (bootstrap): %m" -#: access/transam/xlog.c:5010 +#: access/transam/xlog.c:4853 #, c-format msgid "could not fsync bootstrap transaction log file: %m" msgstr "no se pudo sincronizar (fsync) el archivo de registro de transacciones de inicio (bootstrap): %m" -#: access/transam/xlog.c:5015 +#: access/transam/xlog.c:4858 #, c-format msgid "could not close bootstrap transaction log file: %m" msgstr "no se pudo cerrar el archivo de registro de transacciones de inicio (bootstrap): %m" -#: access/transam/xlog.c:5086 +#: access/transam/xlog.c:4933 #, c-format msgid "could not open recovery command file \"%s\": %m" msgstr "no se pudo abrir el archivo de recuperación «%s»: %m" -#: access/transam/xlog.c:5126 access/transam/xlog.c:5217 -#: access/transam/xlog.c:5228 commands/extension.c:527 -#: commands/extension.c:535 utils/misc/guc.c:5369 -#, c-format -msgid "parameter \"%s\" requires a Boolean value" -msgstr "el parámetro «%s» requiere un valor lógico (booleano)" +#: access/transam/xlog.c:4979 +#, fuzzy, c-format +msgid "invalid value for recovery parameter \"%s\"" +msgstr "valor no válido para el parámetro «%s»: %d" -#: access/transam/xlog.c:5142 +#: access/transam/xlog.c:4981 +#, fuzzy, c-format +msgid "The allowed values are \"pause\", \"promote\", and \"shutdown\"." +msgstr "Los valores aceptables son «on», «off» y «auto»." + +#: access/transam/xlog.c:5000 #, c-format msgid "recovery_target_timeline is not a valid number: \"%s\"" msgstr "recovery_target_timeline no es un número válido: «%s»" -#: access/transam/xlog.c:5158 +#: access/transam/xlog.c:5016 #, c-format msgid "recovery_target_xid is not a valid number: \"%s\"" msgstr "recovery_target_xid no es un número válido: «%s»" -#: access/transam/xlog.c:5189 +#: access/transam/xlog.c:5047 #, c-format msgid "recovery_target_name is too long (maximum %d characters)" msgstr "recovery_target_name es demasiado largo (máximo %d caracteres)" -#: access/transam/xlog.c:5203 +#: access/transam/xlog.c:5061 #, c-format msgid "invalid value for recovery parameter \"recovery_target\"" msgstr "valor no válido para el parámetro de recuperación «recovery_target»" -#: access/transam/xlog.c:5204 +#: access/transam/xlog.c:5062 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "El único valor permitido es «immediate»" -#: access/transam/xlog.c:5263 +#: access/transam/xlog.c:5075 access/transam/xlog.c:5086 +#: commands/extension.c:531 commands/extension.c:539 utils/misc/guc.c:5443 +#, c-format +msgid "parameter \"%s\" requires a Boolean value" +msgstr "el parámetro «%s» requiere un valor lógico (booleano)" + +#: access/transam/xlog.c:5121 #, c-format msgid "parameter \"%s\" requires a temporal value" msgstr "el parámetro «%s» requiere un valor de tiempo" -#: access/transam/xlog.c:5265 catalog/dependency.c:970 -#: catalog/dependency.c:971 catalog/dependency.c:977 catalog/dependency.c:978 -#: catalog/dependency.c:989 catalog/dependency.c:990 -#: catalog/objectaddress.c:764 commands/tablecmds.c:763 -#: commands/tablecmds.c:8949 commands/user.c:988 commands/view.c:475 +#: access/transam/xlog.c:5123 catalog/dependency.c:984 +#: catalog/dependency.c:985 catalog/dependency.c:991 catalog/dependency.c:992 +#: catalog/dependency.c:1003 catalog/dependency.c:1004 +#: catalog/objectaddress.c:1053 commands/tablecmds.c:789 +#: commands/tablecmds.c:9387 commands/user.c:1027 commands/view.c:482 #: libpq/auth.c:285 port/win32/security.c:51 storage/lmgr/deadlock.c:955 -#: storage/lmgr/proc.c:1184 utils/misc/guc.c:5401 utils/misc/guc.c:5526 -#: utils/misc/guc.c:8867 utils/misc/guc.c:8901 utils/misc/guc.c:8935 -#: utils/misc/guc.c:8969 utils/misc/guc.c:9004 +#: storage/lmgr/proc.c:1177 utils/misc/guc.c:5465 utils/misc/guc.c:5558 +#: utils/misc/guc.c:9437 utils/misc/guc.c:9471 utils/misc/guc.c:9505 +#: utils/misc/guc.c:9539 utils/misc/guc.c:9574 #, c-format msgid "%s" msgstr "%s" -#: access/transam/xlog.c:5271 +#: access/transam/xlog.c:5129 #, c-format msgid "unrecognized recovery parameter \"%s\"" msgstr "parámetro de recuperación no reconocido: «%s»" -#: access/transam/xlog.c:5282 +#: access/transam/xlog.c:5140 #, c-format msgid "recovery command file \"%s\" specified neither primary_conninfo nor restore_command" msgstr "el archivo de recuperación «%s» no especifica primary_conninfo ni restore_command" -#: access/transam/xlog.c:5284 +#: access/transam/xlog.c:5142 #, c-format msgid "The database server will regularly poll the pg_xlog subdirectory to check for files placed there." msgstr "El servidor de bases de datos monitoreará el subdirectorio pg_xlog con regularidad en búsqueda de archivos almacenados ahí." -#: access/transam/xlog.c:5290 +#: access/transam/xlog.c:5148 #, c-format msgid "recovery command file \"%s\" must specify restore_command when standby mode is not enabled" msgstr "el archivo de recuperación «%s» debe especificar restore_command cuando el modo standby no está activo" -#: access/transam/xlog.c:5310 +#: access/transam/xlog.c:5178 #, 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:5407 +#: access/transam/xlog.c:5303 #, c-format msgid "archive recovery complete" msgstr "recuperación completa" -#: access/transam/xlog.c:5477 access/transam/xlog.c:5671 +#: access/transam/xlog.c:5362 access/transam/xlog.c:5590 #, c-format msgid "recovery stopping after reaching consistency" msgstr "deteniendo recuperación al alcanzar un estado consistente" -#: access/transam/xlog.c:5552 +#: access/transam/xlog.c:5450 #, 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:5559 +#: access/transam/xlog.c:5457 #, 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:5601 +#: access/transam/xlog.c:5502 #, 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:5651 +#: access/transam/xlog.c:5570 #, 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:5659 +#: access/transam/xlog.c:5578 #, 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:5698 +#: access/transam/xlog.c:5617 #, c-format msgid "recovery has paused" msgstr "la recuperación está en pausa" -#: access/transam/xlog.c:5699 +#: access/transam/xlog.c:5618 #, c-format msgid "Execute pg_xlog_replay_resume() to continue." msgstr "Ejecute pg_xlog_replay_resume() para continuar." -#: access/transam/xlog.c:5914 +#: access/transam/xlog.c:5821 #, c-format msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" msgstr "hot standby no es posible puesto que %s = %d es una configuración menor que en el servidor maestro (su valor era %d)" -#: access/transam/xlog.c:5936 +#: access/transam/xlog.c:5847 #, c-format msgid "WAL was generated with wal_level=minimal, data may be missing" msgstr "WAL fue generado con wal_level=minimal, puede haber datos faltantes" -#: access/transam/xlog.c:5937 +#: access/transam/xlog.c:5848 #, c-format msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." msgstr "Esto sucede si temporalmente define wal_level=minimal sin tomar un nuevo respaldo base." -#: access/transam/xlog.c:5948 +#: access/transam/xlog.c:5859 #, c-format msgid "hot standby is not possible because wal_level was not set to \"hot_standby\" or higher on the master server" msgstr "hot standby no es posible porque wal_level no estaba configurado como «hot_standby» o superior en el servidor maestro" -#: access/transam/xlog.c:5949 +#: access/transam/xlog.c:5860 #, c-format msgid "Either set wal_level to \"hot_standby\" on the master, or turn off hot_standby here." msgstr "Defina wal_level a «hot_standby» en el maestro, o bien desactive hot_standby en este servidor." -#: access/transam/xlog.c:6004 +#: access/transam/xlog.c:5917 #, c-format msgid "control file contains invalid data" msgstr "el archivo de control contiene datos no válidos" -#: access/transam/xlog.c:6010 +#: access/transam/xlog.c:5923 #, 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:6015 +#: access/transam/xlog.c:5928 #, 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:6019 +#: access/transam/xlog.c:5932 #, 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:6023 +#: access/transam/xlog.c:5936 #, 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:6025 +#: access/transam/xlog.c:5938 #, 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:6029 +#: access/transam/xlog.c:5942 #, 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:6031 +#: access/transam/xlog.c:5944 #, 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:6035 +#: access/transam/xlog.c:5948 #, 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:6089 +#: access/transam/xlog.c:6004 #, c-format msgid "entering standby mode" msgstr "entrando al modo standby" -#: access/transam/xlog.c:6092 +#: access/transam/xlog.c:6007 #, 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:6096 +#: access/transam/xlog.c:6011 #, c-format msgid "starting point-in-time recovery to %s" msgstr "comenzando el proceso de recuperación hasta %s" -#: access/transam/xlog.c:6100 +#: access/transam/xlog.c:6015 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "comenzando el proceso de recuperación hasta «%s»" -#: access/transam/xlog.c:6104 +#: access/transam/xlog.c:6019 #, 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:6107 +#: access/transam/xlog.c:6022 #, c-format msgid "starting archive recovery" msgstr "comenzando proceso de recuperación" -#: access/transam/xlog.c:6124 +#: access/transam/xlog.c:6039 #, c-format msgid "Failed while allocating an XLog reading processor." msgstr "Falló mientras se emplazaba un procesador de lectura de XLog." -#: access/transam/xlog.c:6149 access/transam/xlog.c:6216 +#: access/transam/xlog.c:6066 access/transam/xlog.c:6194 #, c-format msgid "checkpoint record is at %X/%X" msgstr "el registro del punto de control está en %X/%X" -#: access/transam/xlog.c:6163 +#: access/transam/xlog.c:6080 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "no se pudo localizar la ubicación de redo referida por el registro de checkpoint" -#: access/transam/xlog.c:6164 access/transam/xlog.c:6171 +#: access/transam/xlog.c:6081 access/transam/xlog.c:6088 #, c-format msgid "If you are not restoring from a backup, try removing the file \"%s/backup_label\"." msgstr "Si no está restaurando un respaldo, intente eliminando «%s/backup_label»." -#: access/transam/xlog.c:6170 +#: access/transam/xlog.c:6087 #, 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:6226 access/transam/xlog.c:6241 +#: access/transam/xlog.c:6113 commands/tablespace.c:641 +#, 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:6145 access/transam/xlog.c:6151 +#, fuzzy, c-format +msgid "ignoring \"%s\" file because no \"%s\" file exists" +msgstr "la restricción «%s» para la relación «%s» ya existe" + +#: access/transam/xlog.c:6147 access/transam/xlog.c:10879 +#, fuzzy, c-format +msgid "File \"%s\" was renamed to \"%s\"." +msgstr "«%s» fue renombrado a «%s»." + +#: access/transam/xlog.c:6153 access/transam/xlog.c:10869 +#, fuzzy, c-format +msgid "File \"%s\" could not be renamed to \"%s\": %m." +msgstr "No se pudo renombrar «%s» a «%s»: %m." + +#: access/transam/xlog.c:6204 access/transam/xlog.c:6219 #, 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:6235 +#: access/transam/xlog.c:6213 #, c-format msgid "using previous checkpoint record at %X/%X" msgstr "usando el registro del punto de control anterior en %X/%X" -#: access/transam/xlog.c:6265 +#: access/transam/xlog.c:6257 #, 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:6267 +#: access/transam/xlog.c:6259 #, 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:6283 +#: access/transam/xlog.c:6275 #, 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:6292 +#: access/transam/xlog.c:6284 #, c-format msgid "redo record is at %X/%X; shutdown %s" msgstr "registro de redo en %X/%X; apagado %s" -#: access/transam/xlog.c:6296 +#: access/transam/xlog.c:6288 #, c-format msgid "next transaction ID: %u/%u; next OID: %u" msgstr "siguiente ID de transacción: %u/%u; siguiente OID: %u" -#: access/transam/xlog.c:6300 +#: access/transam/xlog.c:6292 #, c-format msgid "next MultiXactId: %u; next MultiXactOffset: %u" msgstr "siguiente MultiXactId: %u; siguiente MultiXactOffset: %u" -#: access/transam/xlog.c:6303 +#: access/transam/xlog.c:6295 #, c-format msgid "oldest unfrozen transaction ID: %u, in database %u" msgstr "ID de transacción más antigua sin congelar: %u, en base de datos %u" -#: access/transam/xlog.c:6306 +#: access/transam/xlog.c:6298 #, c-format msgid "oldest MultiXactId: %u, in database %u" msgstr "MultiXactId más antiguo: %u, en base de datos %u" -#: access/transam/xlog.c:6310 +#: access/transam/xlog.c:6301 +#, c-format +msgid "commit timestamp Xid oldest/newest: %u/%u" +msgstr "" + +#: access/transam/xlog.c:6306 #, c-format msgid "invalid next transaction ID" msgstr "el siguiente ID de transacción no es válido" -#: access/transam/xlog.c:6380 +#: access/transam/xlog.c:6381 #, 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:6391 +#: access/transam/xlog.c:6392 #, 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:6422 +#: access/transam/xlog.c:6420 #, 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:6426 +#: access/transam/xlog.c:6424 #, 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:6463 +#: access/transam/xlog.c:6468 #, 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:6464 +#: access/transam/xlog.c:6469 #, 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:6529 +#: access/transam/xlog.c:6551 #, c-format msgid "initializing for hot standby" msgstr "inicializando para hot standby" -#: access/transam/xlog.c:6661 +#: access/transam/xlog.c:6684 #, c-format msgid "redo starts at %X/%X" msgstr "redo comienza en %X/%X" -#: access/transam/xlog.c:6876 +#: access/transam/xlog.c:6898 +#, 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:6936 #, c-format msgid "redo done at %X/%X" msgstr "redo listo en %X/%X" -#: access/transam/xlog.c:6881 access/transam/xlog.c:8735 +#: access/transam/xlog.c:6941 access/transam/xlog.c:8876 #, 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:6889 +#: access/transam/xlog.c:6950 #, c-format msgid "redo is not required" msgstr "no se requiere redo" -#: access/transam/xlog.c:6947 -#, 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:6963 access/transam/xlog.c:6967 +#: access/transam/xlog.c:7025 access/transam/xlog.c:7029 #, 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:6964 +#: access/transam/xlog.c:7026 #, 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:6968 +#: access/transam/xlog.c:7030 #, 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:6971 +#: access/transam/xlog.c:7033 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL termina antes del punto de recuperación consistente" -#: access/transam/xlog.c:6998 +#: access/transam/xlog.c:7060 #, c-format msgid "selected new timeline ID: %u" msgstr "seleccionado nuevo ID de timeline: %u" -#: access/transam/xlog.c:7339 +#: access/transam/xlog.c:7476 #, 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:7536 +#: access/transam/xlog.c:7667 #, 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:7540 +#: access/transam/xlog.c:7671 #, c-format msgid "invalid secondary checkpoint link in control file" msgstr "el enlace del punto de control secundario en archivo de control no es válido" -#: access/transam/xlog.c:7544 +#: access/transam/xlog.c:7675 #, 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:7561 +#: access/transam/xlog.c:7692 #, c-format msgid "invalid primary checkpoint record" msgstr "el registro del punto de control primario no es válido" -#: access/transam/xlog.c:7565 +#: access/transam/xlog.c:7696 #, c-format msgid "invalid secondary checkpoint record" msgstr "el registro del punto de control secundario no es válido" -#: access/transam/xlog.c:7569 +#: access/transam/xlog.c:7700 #, c-format msgid "invalid checkpoint record" msgstr "el registro del punto de control no es válido" -#: access/transam/xlog.c:7580 +#: access/transam/xlog.c:7711 #, 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:7584 +#: access/transam/xlog.c:7715 #, c-format msgid "invalid resource manager ID in secondary checkpoint record" msgstr "el ID de gestor de recursos en el registro del punto de control secundario no es válido" -#: access/transam/xlog.c:7588 +#: access/transam/xlog.c:7719 #, 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:7600 +#: access/transam/xlog.c:7731 #, 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:7604 +#: access/transam/xlog.c:7735 #, c-format msgid "invalid xl_info in secondary checkpoint record" msgstr "xl_info en el registro del punto de control secundario no es válido" -#: access/transam/xlog.c:7608 +#: access/transam/xlog.c:7739 #, 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:7620 +#: access/transam/xlog.c:7750 #, 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:7624 +#: access/transam/xlog.c:7754 #, c-format msgid "invalid length of secondary checkpoint record" msgstr "la longitud del registro del punto de control secundario no es válida" -#: access/transam/xlog.c:7628 +#: access/transam/xlog.c:7758 #, 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:7788 +#: access/transam/xlog.c:7928 #, c-format msgid "shutting down" msgstr "apagando" -#: access/transam/xlog.c:7811 +#: access/transam/xlog.c:7952 #, c-format msgid "database system is shut down" msgstr "el sistema de bases de datos está apagado" -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8445 #, c-format msgid "concurrent transaction log activity while database system is shutting down" msgstr "hay actividad en el registro de transacción mientras el sistema se está apagando" -#: access/transam/xlog.c:8546 +#: access/transam/xlog.c:8696 #, c-format msgid "skipping restartpoint, recovery has already ended" msgstr "saltando el punto-de-reinicio; la recuperación ya ha terminado" -#: access/transam/xlog.c:8569 +#: access/transam/xlog.c:8719 #, c-format msgid "skipping restartpoint, already performed at %X/%X" msgstr "saltando el punto-de-reinicio; ya fue llevado a cabo en %X/%X" -#: access/transam/xlog.c:8733 +#: access/transam/xlog.c:8874 #, c-format msgid "recovery restart point at %X/%X" msgstr "punto-de-reinicio de recuperación en %X/%X" -#: access/transam/xlog.c:8878 +#: access/transam/xlog.c:9007 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "punto de recuperación «%s» creado en %X/%X" -#: access/transam/xlog.c:9102 +#: access/transam/xlog.c:9137 #, 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:9111 +#: access/transam/xlog.c:9146 #, 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:9127 +#: access/transam/xlog.c:9162 #, 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:9195 +#: access/transam/xlog.c:9233 #, 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:9256 access/transam/xlog.c:9305 -#: access/transam/xlog.c:9328 +#: access/transam/xlog.c:9289 access/transam/xlog.c:9336 +#: access/transam/xlog.c:9359 #, 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:9563 +#: access/transam/xlog.c:9636 #, c-format msgid "could not fsync log segment %s: %m" msgstr "no se pudo sincronizar (fsync) el archivo de registro %s: %m" -#: access/transam/xlog.c:9587 +#: access/transam/xlog.c:9660 #, c-format msgid "could not fsync log file %s: %m" msgstr "no se pudo sincronizar (fsync) archivo de registro «%s»: %m" -#: access/transam/xlog.c:9595 +#: access/transam/xlog.c:9668 #, c-format msgid "could not fsync write-through log file %s: %m" msgstr "no se pudo sincronizar (fsync write-through) el archivo de registro %s: %m" -#: access/transam/xlog.c:9604 +#: access/transam/xlog.c:9677 #, c-format msgid "could not fdatasync log file %s: %m" msgstr "no se pudo sincronizar (fdatasync) el archivo de registro %s: %m" -#: access/transam/xlog.c:9682 access/transam/xlog.c:10018 -#: access/transam/xlogfuncs.c:111 access/transam/xlogfuncs.c:140 -#: access/transam/xlogfuncs.c:179 access/transam/xlogfuncs.c:200 -#: access/transam/xlogfuncs.c:270 access/transam/xlogfuncs.c:326 +#: access/transam/xlog.c:9769 access/transam/xlog.c:10240 +#: access/transam/xlogfuncs.c:121 access/transam/xlogfuncs.c:150 +#: access/transam/xlogfuncs.c:189 access/transam/xlogfuncs.c:210 +#: access/transam/xlogfuncs.c:280 access/transam/xlogfuncs.c:336 #, c-format msgid "recovery is in progress" msgstr "la recuperación está en proceso" -#: access/transam/xlog.c:9683 access/transam/xlog.c:10019 -#: access/transam/xlogfuncs.c:112 access/transam/xlogfuncs.c:141 -#: access/transam/xlogfuncs.c:180 access/transam/xlogfuncs.c:201 +#: access/transam/xlog.c:9770 access/transam/xlog.c:10241 +#: access/transam/xlogfuncs.c:122 access/transam/xlogfuncs.c:151 +#: access/transam/xlogfuncs.c:190 access/transam/xlogfuncs.c:211 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "Las funciones de control de WAL no pueden ejecutarse durante la recuperación." -#: access/transam/xlog.c:9692 access/transam/xlog.c:10028 +#: access/transam/xlog.c:9779 access/transam/xlog.c:10250 #, 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:9693 access/transam/xlog.c:10029 -#: access/transam/xlogfuncs.c:147 +#: access/transam/xlog.c:9780 access/transam/xlog.c:10251 +#: access/transam/xlogfuncs.c:157 #, c-format msgid "wal_level must be set to \"archive\", \"hot_standby\", or \"logical\" at server start." msgstr "wal_level debe ser definido a «archive», «hot_standby» o «logical» al inicio del servidor." -#: access/transam/xlog.c:9698 +#: access/transam/xlog.c:9785 #, 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:9729 access/transam/xlog.c:9906 +#: access/transam/xlog.c:9817 access/transam/xlog.c:10087 +#: access/transam/xlog.c:10123 #, c-format msgid "a backup is already in progress" msgstr "ya hay un respaldo en curso" -#: access/transam/xlog.c:9730 +#: access/transam/xlog.c:9818 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Ejecute pg_stop_backup() e intente nuevamente." -#: access/transam/xlog.c:9824 +#: access/transam/xlog.c:9913 #, 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 punto-de-reinicio" -#: access/transam/xlog.c:9826 access/transam/xlog.c:10179 +#: access/transam/xlog.c:9915 access/transam/xlog.c:10405 #, c-format msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." msgstr "Esto significa que el respaldo que estaba siendo tomado en el standby está corrupto y no debería usarse. Active full_page_writes y ejecute CHECKPOINT en el maestro, luego trate de ejecutar un respaldo en línea nuevamente." -#: access/transam/xlog.c:9900 access/transam/xlog.c:10069 -#: access/transam/xlogarchive.c:106 access/transam/xlogarchive.c:265 -#: replication/basebackup.c:464 replication/basebackup.c:521 -#: replication/logical/snapbuild.c:1478 storage/file/copydir.c:72 -#: storage/file/copydir.c:115 utils/adt/dbsize.c:68 utils/adt/dbsize.c:218 -#: utils/adt/dbsize.c:298 utils/adt/genfile.c:108 utils/adt/genfile.c:280 -#: guc-file.l:885 +#: access/transam/xlog.c:9981 replication/basebackup.c:1027 +#: utils/adt/misc.c:378 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "no se pudo leer el enlace simbólico «%s»: %m" + +#: access/transam/xlog.c:9988 replication/basebackup.c:1032 +#: utils/adt/misc.c:383 +#, 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:10041 commands/tablespace.c:391 +#: commands/tablespace.c:553 replication/basebackup.c:1048 +#: utils/adt/misc.c:391 +#, c-format +msgid "tablespaces are not supported on this platform" +msgstr "tablespaces no están soportados en esta plataforma" + +#: access/transam/xlog.c:10081 access/transam/xlog.c:10117 +#: access/transam/xlog.c:10291 access/transam/xlogarchive.c:106 +#: access/transam/xlogarchive.c:265 commands/copy.c:1738 commands/copy.c:2764 +#: commands/extension.c:3026 replication/basebackup.c:404 +#: replication/basebackup.c:472 replication/logical/snapbuild.c:1478 +#: storage/file/copydir.c:72 storage/file/copydir.c:115 storage/file/fd.c:2519 +#: storage/file/fd.c:2611 utils/adt/dbsize.c:68 utils/adt/dbsize.c:218 +#: utils/adt/dbsize.c:298 utils/adt/genfile.c:114 utils/adt/genfile.c:333 +#: guc-file.l:1003 #, c-format msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" -#: access/transam/xlog.c:9907 +#: access/transam/xlog.c:10088 access/transam/xlog.c:10124 #, 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:9924 access/transam/xlog.c:10242 +#: access/transam/xlog.c:10105 access/transam/xlog.c:10141 +#: access/transam/xlog.c:10466 #, c-format msgid "could not write file \"%s\": %m" msgstr "no se pudo escribir el archivo «%s»: %m" -#: access/transam/xlog.c:10073 +#: access/transam/xlog.c:10295 #, c-format msgid "a backup is not in progress" msgstr "no hay un respaldo en curso" -#: access/transam/xlog.c:10112 access/transam/xlog.c:10125 -#: access/transam/xlog.c:10476 access/transam/xlog.c:10482 -#: access/transam/xlogfuncs.c:498 +#: access/transam/xlog.c:10340 access/transam/xlog.c:10353 +#: access/transam/xlog.c:10693 access/transam/xlog.c:10699 +#: access/transam/xlog.c:10783 access/transam/xlogfuncs.c:508 #, c-format msgid "invalid data in file \"%s\"" msgstr "datos no válidos en archivo «%s»" -#: access/transam/xlog.c:10129 replication/basebackup.c:951 +#: access/transam/xlog.c:10357 replication/basebackup.c:925 #, 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:10130 replication/basebackup.c:952 +#: access/transam/xlog.c:10358 replication/basebackup.c:926 #, 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:10177 +#: access/transam/xlog.c:10403 #, 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:10291 +#: access/transam/xlog.c:10515 #, c-format msgid "pg_stop_backup cleanup done, waiting for required WAL segments to be archived" msgstr "finalización de pg_stop_backup completa, esperando que se archiven los segmentos WAL requeridos" -#: access/transam/xlog.c:10301 +#: access/transam/xlog.c:10525 #, c-format msgid "pg_stop_backup still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "pg_stop_backup todavía espera que todos los segmentos WAL requeridos sean archivados (han pasado %d segundos)" -#: access/transam/xlog.c:10303 +#: access/transam/xlog.c:10527 #, c-format msgid "Check that your archive_command is executing properly. pg_stop_backup can be canceled safely, but the database backup will not be usable without all the WAL segments." msgstr "Verifique que su archive_command se esté ejecutando con normalidad. pg_stop_backup puede ser abortado confiablemente, 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:10310 +#: access/transam/xlog.c:10534 #, c-format msgid "pg_stop_backup complete, all required WAL segments have been archived" msgstr "pg_stop_backup completado, todos los segmentos de WAL requeridos han sido archivados" -#: access/transam/xlog.c:10314 +#: access/transam/xlog.c:10538 #, 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 mecanism para completar el respaldo" -#: access/transam/xlog.c:10527 +#: access/transam/xlog.c:10822 #, c-format msgid "xlog redo %s" msgstr "xlog redo %s" -#: access/transam/xlog.c:10567 +#: access/transam/xlog.c:10868 #, c-format -msgid "online backup mode canceled" -msgstr "el modo de respaldo en línea fue cancelado" +msgid "online backup mode was not canceled" +msgstr "el modo de respaldo en línea no fue cancelado" -#: access/transam/xlog.c:10568 +#: access/transam/xlog.c:10878 access/transam/xlog.c:10890 +#: access/transam/xlog.c:10900 #, c-format -msgid "\"%s\" was renamed to \"%s\"." -msgstr "«%s» fue renombrado a «%s»." +msgid "online backup mode canceled" +msgstr "el modo de respaldo en línea fue cancelado" -#: access/transam/xlog.c:10575 +#: access/transam/xlog.c:10891 #, c-format -msgid "online backup mode was not canceled" -msgstr "el modo de respaldo en línea no fue cancelado" +msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." +msgstr "" -#: access/transam/xlog.c:10576 +#: access/transam/xlog.c:10901 #, c-format -msgid "Could not rename \"%s\" to \"%s\": %m." -msgstr "No se pudo renombrar «%s» a «%s»: %m." +msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." +msgstr "" # XXX why talk about "log segment" instead of "file"? -#: access/transam/xlog.c:10696 replication/logical/logicalfuncs.c:169 -#: replication/walreceiver.c:937 replication/walsender.c:2106 +#: access/transam/xlog.c:11023 replication/logical/logicalfuncs.c:171 +#: replication/walreceiver.c:932 replication/walsender.c:2092 #, c-format msgid "could not seek in log segment %s to offset %u: %m" msgstr "no se pudo posicionar (seek) en segmento %s a la posición %u: %m" # XXX why talk about "log segment" instead of "file"? -#: access/transam/xlog.c:10708 +#: access/transam/xlog.c:11035 #, 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" -#: access/transam/xlog.c:11171 +#: access/transam/xlog.c:11509 #, c-format msgid "received promote request" msgstr "se recibió petición de promoción" -#: access/transam/xlog.c:11184 +#: access/transam/xlog.c:11522 #, c-format msgid "trigger file found: %s" msgstr "se encontró el archivo disparador: %s" -#: access/transam/xlog.c:11193 +#: access/transam/xlog.c:11531 #, c-format msgid "could not stat trigger file \"%s\": %m" msgstr "no se pudo hacer stat al archivo disparador «%s»: %m" @@ -2160,657 +2450,800 @@ msgstr "no se pudo recuperar el archivo «%s»: %s" msgid "%s \"%s\": %s" msgstr "%s «%s»: %s" -#: access/transam/xlogarchive.c:525 access/transam/xlogarchive.c:594 +#: access/transam/xlogarchive.c:529 access/transam/xlogarchive.c:598 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "no se pudo crear el archivo de estado «%s»: %m" -#: access/transam/xlogarchive.c:533 access/transam/xlogarchive.c:602 +#: access/transam/xlogarchive.c:537 access/transam/xlogarchive.c:606 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "no se pudo escribir el archivo de estado «%s»: %m" -#: access/transam/xlogfuncs.c:60 access/transam/xlogfuncs.c:88 +#: access/transam/xlogfuncs.c:61 access/transam/xlogfuncs.c:98 #, c-format msgid "must be superuser or replication role to run a backup" msgstr "debe ser superusuario o el rol de replicación para ejecutar un respaldo" -#: access/transam/xlogfuncs.c:106 +#: access/transam/xlogfuncs.c:67 commands/tablespace.c:705 +#: commands/tablespace.c:715 postmaster/postmaster.c:1389 +#: replication/basebackup.c:292 replication/basebackup.c:632 +#: storage/file/copydir.c:53 storage/file/copydir.c:96 storage/file/fd.c:1985 +#: storage/file/fd.c:2584 storage/ipc/dsm.c:300 utils/adt/genfile.c:439 +#: utils/adt/misc.c:291 utils/misc/tzparser.c:339 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "no se pudo abrir el directorio «%s»: %m" + +#: access/transam/xlogfuncs.c:116 #, c-format msgid "must be superuser to switch transaction log files" msgstr "debe ser superusuario para cambiar a un nuevo archivo de registro" -#: access/transam/xlogfuncs.c:135 +#: access/transam/xlogfuncs.c:145 #, c-format msgid "must be superuser to create a restore point" msgstr "debe ser superusuario para crear un punto de recuperación" -#: access/transam/xlogfuncs.c:146 +#: access/transam/xlogfuncs.c:156 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "el nivel de WAL no es suficiente para crear un punto de recuperación" -#: access/transam/xlogfuncs.c:154 +#: access/transam/xlogfuncs.c:164 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "el valor es demasiado largo para un punto de recuperación (máximo %d caracteres)" -#: access/transam/xlogfuncs.c:271 +#: access/transam/xlogfuncs.c:281 #, c-format msgid "pg_xlogfile_name_offset() cannot be executed during recovery." msgstr "pg_xlogfile_name_offset() no puede ejecutarse durante la recuperación." -#: access/transam/xlogfuncs.c:327 +#: access/transam/xlogfuncs.c:337 #, c-format msgid "pg_xlogfile_name() cannot be executed during recovery." msgstr "pg_xlogfile_name() no puede ejecutarse durante la recuperación." -#: access/transam/xlogfuncs.c:344 access/transam/xlogfuncs.c:366 +#: access/transam/xlogfuncs.c:354 access/transam/xlogfuncs.c:376 #, c-format msgid "must be superuser to control recovery" msgstr "debe ser superusuario para controlar la recuperación" -#: access/transam/xlogfuncs.c:349 access/transam/xlogfuncs.c:371 -#: access/transam/xlogfuncs.c:388 +#: access/transam/xlogfuncs.c:359 access/transam/xlogfuncs.c:381 +#: access/transam/xlogfuncs.c:398 #, c-format msgid "recovery is not in progress" msgstr "la recuperación no está en proceso" -#: access/transam/xlogfuncs.c:350 access/transam/xlogfuncs.c:372 -#: access/transam/xlogfuncs.c:389 +#: access/transam/xlogfuncs.c:360 access/transam/xlogfuncs.c:382 +#: access/transam/xlogfuncs.c:399 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "Las funciones de control de recuperación sólo pueden ejecutarse durante la recuperación." -#: bootstrap/bootstrap.c:273 postmaster/postmaster.c:759 tcop/postgres.c:3462 +#: access/transam/xlogreader.c:264 +#, c-format +msgid "invalid record offset at %X/%X" +msgstr "posición de registro no válida en %X/%X" + +#: access/transam/xlogreader.c:272 +#, c-format +msgid "contrecord is requested by %X/%X" +msgstr "contrecord solicitado por %X/%X" + +#: access/transam/xlogreader.c:312 access/transam/xlogreader.c:603 +#, c-format +msgid "invalid record length at %X/%X" +msgstr "largo de registro no válido en %X/%X" + +#: access/transam/xlogreader.c:326 +#, c-format +msgid "record length %u at %X/%X too long" +msgstr "largo de registro %u en %X/%X demasiado largo" + +#: access/transam/xlogreader.c:367 +#, c-format +msgid "there is no contrecord flag at %X/%X" +msgstr "no hay bandera de contrecord en %X/%X" + +#: access/transam/xlogreader.c:380 +#, c-format +msgid "invalid contrecord length %u at %X/%X" +msgstr "largo de contrecord %u no válido en %X/%X" + +#: access/transam/xlogreader.c:610 +#, 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:624 access/transam/xlogreader.c:641 +#, 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:678 +#, 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:711 +#, 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:725 access/transam/xlogreader.c:776 +#, 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:751 +#, c-format +msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" +msgstr "archivo WAL es de un sistema de bases de datos distinto: identificador de sistema en archivo WAL es %s, identificador en pg_control es %s" + +#: access/transam/xlogreader.c:758 +#, c-format +msgid "WAL file is from different database system: incorrect XLOG_SEG_SIZE in page header" +msgstr "archivo WAL es de un sistema de bases de datos distinto: XLOG_SEG_SIZE incorrecto en cabecera de página" + +#: access/transam/xlogreader.c:764 +#, 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:790 +#, 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:815 +#, 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:1024 +#, 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:1046 +#, 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:1053 +#, 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:1086 +#, 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:1102 +#, 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:1117 +#, 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:1132 +#, 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:1148 +#, 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:1160 +#, fuzzy, c-format +msgid "invalid block_id %u at %X/%X" +msgstr "block_id %u fuera de orden en %X/%X" + +#: access/transam/xlogreader.c:1225 +#, fuzzy, c-format +msgid "record with invalid length at %X/%X" +msgstr "registro con largo cero en %X/%X" + +#: access/transam/xlogreader.c:1314 +#, fuzzy, c-format +msgid "invalid compressed image at %X/%X, block %d" +msgstr "ID de gestor de recursos %u no válido en %X/%X" + +#: bootstrap/bootstrap.c:268 postmaster/postmaster.c:779 tcop/postgres.c:3485 #, c-format msgid "--%s requires a value" msgstr "--%s requiere un valor" -#: bootstrap/bootstrap.c:278 postmaster/postmaster.c:764 tcop/postgres.c:3467 +#: bootstrap/bootstrap.c:273 postmaster/postmaster.c:784 tcop/postgres.c:3490 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiere un valor" -#: bootstrap/bootstrap.c:289 postmaster/postmaster.c:776 -#: postmaster/postmaster.c:789 +#: bootstrap/bootstrap.c:284 postmaster/postmaster.c:796 +#: postmaster/postmaster.c:809 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Pruebe «%s --help» para mayor información.\n" -#: bootstrap/bootstrap.c:298 +#: bootstrap/bootstrap.c:293 #, c-format msgid "%s: invalid command-line arguments\n" msgstr "%s: argumentos de línea de órdenes no válidos\n" -#: catalog/aclchk.c:206 +#: catalog/aclchk.c:182 #, c-format msgid "grant options can only be granted to roles" msgstr "la opción de grant sólo puede ser otorgada a roles" -#: catalog/aclchk.c:329 +#: catalog/aclchk.c:305 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "no se otorgaron privilegios para la columna «%s» de la relación «%s»" -#: catalog/aclchk.c:334 +#: catalog/aclchk.c:310 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "no se otorgaron privilegios para «%s»" -#: catalog/aclchk.c:342 +#: catalog/aclchk.c:318 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "no todos los privilegios fueron otorgados para la columna «%s» de la relación «%s»" -#: catalog/aclchk.c:347 +#: catalog/aclchk.c:323 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "no todos los privilegios fueron otorgados para «%s»" -#: catalog/aclchk.c:358 +#: catalog/aclchk.c:334 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "ningún privilegio pudo ser revocado para la columna «%s» de la relación «%s»" -#: catalog/aclchk.c:363 +#: catalog/aclchk.c:339 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "ningún privilegio pudo ser revocado para «%s»" -#: catalog/aclchk.c:371 +#: catalog/aclchk.c:347 #, c-format msgid "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "no todos los privilegios pudieron ser revocados para la columna «%s» de la relación «%s»" -#: catalog/aclchk.c:376 +#: catalog/aclchk.c:352 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "no todos los privilegios pudieron ser revocados para «%s»" -#: catalog/aclchk.c:455 catalog/aclchk.c:933 +#: catalog/aclchk.c:434 catalog/aclchk.c:924 #, c-format msgid "invalid privilege type %s for relation" msgstr "el tipo de privilegio %s no es válido para una relación" -#: catalog/aclchk.c:459 catalog/aclchk.c:937 +#: catalog/aclchk.c:438 catalog/aclchk.c:928 #, c-format msgid "invalid privilege type %s for sequence" msgstr "el tipo de privilegio %s no es válido para una secuencia" -#: catalog/aclchk.c:463 +#: catalog/aclchk.c:442 #, c-format msgid "invalid privilege type %s for database" msgstr "el tipo de privilegio %s no es válido para una base de datos" -#: catalog/aclchk.c:467 +#: catalog/aclchk.c:446 #, c-format msgid "invalid privilege type %s for domain" msgstr "el tipo de privilegio %s no es válido para un dominio" -#: catalog/aclchk.c:471 catalog/aclchk.c:941 +#: catalog/aclchk.c:450 catalog/aclchk.c:932 #, c-format msgid "invalid privilege type %s for function" msgstr "el tipo de privilegio %s no es válido para una función" -#: catalog/aclchk.c:475 +#: catalog/aclchk.c:454 #, c-format msgid "invalid privilege type %s for language" msgstr "el tipo de privilegio %s no es válido para un lenguaje" -#: catalog/aclchk.c:479 +#: catalog/aclchk.c:458 #, c-format msgid "invalid privilege type %s for large object" msgstr "el tipo de privilegio %s no es válido para un objeto grande" -#: catalog/aclchk.c:483 +#: catalog/aclchk.c:462 #, c-format msgid "invalid privilege type %s for schema" msgstr "el tipo de privilegio %s no es válido para un esquema" -#: catalog/aclchk.c:487 +#: catalog/aclchk.c:466 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "el tipo de privilegio %s no es válido para un tablespace" -#: catalog/aclchk.c:491 catalog/aclchk.c:945 +#: catalog/aclchk.c:470 catalog/aclchk.c:936 #, c-format msgid "invalid privilege type %s for type" msgstr "el tipo de privilegio %s no es válido para un tipo" -#: catalog/aclchk.c:495 +#: catalog/aclchk.c:474 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "el tipo de privilegio %s no es válido para un conector de datos externos" -#: catalog/aclchk.c:499 +#: catalog/aclchk.c:478 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "el tipo de privilegio %s no es válido para un servidor foráneo" -#: catalog/aclchk.c:538 +#: catalog/aclchk.c:517 #, c-format msgid "column privileges are only valid for relations" msgstr "los privilegios de columna son sólo válidos para relaciones" -#: catalog/aclchk.c:688 catalog/aclchk.c:3904 catalog/aclchk.c:4681 -#: catalog/objectaddress.c:586 catalog/pg_largeobject.c:113 +#: catalog/aclchk.c:676 catalog/aclchk.c:3874 catalog/aclchk.c:4651 +#: catalog/objectaddress.c:854 catalog/pg_largeobject.c:113 #: storage/large_object/inv_api.c:291 #, c-format msgid "large object %u does not exist" msgstr "no existe el objeto grande %u" -#: catalog/aclchk.c:875 catalog/aclchk.c:883 commands/collationcmds.c:91 -#: commands/copy.c:925 commands/copy.c:943 commands/copy.c:951 -#: commands/copy.c:959 commands/copy.c:967 commands/copy.c:975 -#: commands/copy.c:983 commands/copy.c:991 commands/copy.c:999 -#: commands/copy.c:1015 commands/copy.c:1029 commands/copy.c:1048 -#: commands/copy.c:1063 commands/dbcommands.c:148 commands/dbcommands.c:156 -#: commands/dbcommands.c:164 commands/dbcommands.c:172 -#: commands/dbcommands.c:180 commands/dbcommands.c:188 -#: commands/dbcommands.c:196 commands/dbcommands.c:1372 -#: commands/dbcommands.c:1380 commands/extension.c:1246 -#: commands/extension.c:1254 commands/extension.c:1262 -#: commands/extension.c:2670 commands/foreigncmds.c:486 -#: commands/foreigncmds.c:495 commands/functioncmds.c:522 -#: commands/functioncmds.c:614 commands/functioncmds.c:622 -#: commands/functioncmds.c:630 commands/functioncmds.c:1700 -#: commands/functioncmds.c:1708 commands/sequence.c:1146 -#: commands/sequence.c:1154 commands/sequence.c:1162 commands/sequence.c:1170 -#: commands/sequence.c:1178 commands/sequence.c:1186 commands/sequence.c:1194 -#: commands/sequence.c:1202 commands/typecmds.c:297 commands/typecmds.c:1332 -#: commands/typecmds.c:1341 commands/typecmds.c:1349 commands/typecmds.c:1357 -#: commands/typecmds.c:1365 commands/user.c:135 commands/user.c:152 -#: commands/user.c:160 commands/user.c:168 commands/user.c:176 -#: commands/user.c:184 commands/user.c:192 commands/user.c:200 -#: commands/user.c:208 commands/user.c:216 commands/user.c:224 -#: commands/user.c:232 commands/user.c:496 commands/user.c:508 -#: commands/user.c:516 commands/user.c:524 commands/user.c:532 -#: commands/user.c:540 commands/user.c:548 commands/user.c:556 -#: commands/user.c:565 commands/user.c:573 +#: catalog/aclchk.c:863 catalog/aclchk.c:871 commands/collationcmds.c:92 +#: commands/copy.c:1010 commands/copy.c:1028 commands/copy.c:1036 +#: commands/copy.c:1044 commands/copy.c:1052 commands/copy.c:1060 +#: commands/copy.c:1068 commands/copy.c:1076 commands/copy.c:1084 +#: commands/copy.c:1100 commands/copy.c:1114 commands/copy.c:1133 +#: commands/copy.c:1148 commands/dbcommands.c:155 commands/dbcommands.c:163 +#: commands/dbcommands.c:171 commands/dbcommands.c:179 +#: commands/dbcommands.c:187 commands/dbcommands.c:195 +#: commands/dbcommands.c:203 commands/dbcommands.c:211 +#: commands/dbcommands.c:219 commands/dbcommands.c:1397 +#: commands/dbcommands.c:1405 commands/dbcommands.c:1413 +#: commands/dbcommands.c:1421 commands/extension.c:1244 +#: commands/extension.c:1252 commands/extension.c:1260 +#: commands/extension.c:2677 commands/foreigncmds.c:539 +#: commands/foreigncmds.c:548 commands/functioncmds.c:525 +#: commands/functioncmds.c:619 commands/functioncmds.c:627 +#: commands/functioncmds.c:635 commands/functioncmds.c:643 +#: commands/functioncmds.c:2045 commands/functioncmds.c:2053 +#: commands/sequence.c:1189 commands/sequence.c:1197 commands/sequence.c:1205 +#: commands/sequence.c:1213 commands/sequence.c:1221 commands/sequence.c:1229 +#: commands/sequence.c:1237 commands/sequence.c:1245 commands/typecmds.c:293 +#: commands/typecmds.c:1380 commands/typecmds.c:1389 commands/typecmds.c:1397 +#: commands/typecmds.c:1405 commands/typecmds.c:1413 commands/user.c:138 +#: commands/user.c:155 commands/user.c:163 commands/user.c:171 +#: commands/user.c:179 commands/user.c:187 commands/user.c:195 +#: commands/user.c:203 commands/user.c:211 commands/user.c:219 +#: commands/user.c:227 commands/user.c:235 commands/user.c:243 +#: commands/user.c:522 commands/user.c:534 commands/user.c:542 +#: commands/user.c:550 commands/user.c:558 commands/user.c:566 +#: commands/user.c:574 commands/user.c:582 commands/user.c:591 +#: commands/user.c:599 commands/user.c:607 #, c-format msgid "conflicting or redundant options" msgstr "opciones contradictorias o redundantes" -#: catalog/aclchk.c:978 +#: catalog/aclchk.c:969 #, c-format msgid "default privileges cannot be set for columns" msgstr "los privilegios por omisión no pueden definirse para columnas" -#: catalog/aclchk.c:1492 catalog/objectaddress.c:1042 commands/analyze.c:390 -#: commands/copy.c:4247 commands/sequence.c:1448 commands/tablecmds.c:4939 -#: commands/tablecmds.c:5034 commands/tablecmds.c:5084 -#: commands/tablecmds.c:5188 commands/tablecmds.c:5235 -#: commands/tablecmds.c:5319 commands/tablecmds.c:5407 -#: commands/tablecmds.c:7494 commands/tablecmds.c:7698 -#: commands/tablecmds.c:8090 commands/trigger.c:635 parser/analyze.c:1994 -#: parser/parse_relation.c:2358 parser/parse_relation.c:2420 -#: parser/parse_target.c:920 parser/parse_type.c:128 utils/adt/acl.c:2840 -#: utils/adt/ruleutils.c:1820 +#: catalog/aclchk.c:1483 catalog/objectaddress.c:1338 commands/analyze.c:378 +#: commands/copy.c:4383 commands/sequence.c:1491 commands/tablecmds.c:5149 +#: commands/tablecmds.c:5255 commands/tablecmds.c:5315 +#: commands/tablecmds.c:5428 commands/tablecmds.c:5485 +#: commands/tablecmds.c:5579 commands/tablecmds.c:5675 +#: commands/tablecmds.c:7836 commands/tablecmds.c:8041 +#: commands/tablecmds.c:8461 commands/trigger.c:643 parser/analyze.c:2160 +#: parser/parse_relation.c:2539 parser/parse_relation.c:2601 +#: parser/parse_target.c:940 parser/parse_type.c:128 utils/adt/acl.c:2839 +#: utils/adt/ruleutils.c:1836 #, 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:1757 catalog/objectaddress.c:862 commands/sequence.c:1035 -#: commands/tablecmds.c:214 commands/tablecmds.c:11244 utils/adt/acl.c:2076 -#: utils/adt/acl.c:2106 utils/adt/acl.c:2138 utils/adt/acl.c:2170 -#: utils/adt/acl.c:2198 utils/adt/acl.c:2228 +#: catalog/aclchk.c:1748 catalog/objectaddress.c:1151 commands/sequence.c:1078 +#: commands/tablecmds.c:220 commands/tablecmds.c:11890 utils/adt/acl.c:2075 +#: utils/adt/acl.c:2105 utils/adt/acl.c:2137 utils/adt/acl.c:2169 +#: utils/adt/acl.c:2197 utils/adt/acl.c:2227 #, c-format msgid "\"%s\" is not a sequence" msgstr "«%s» no es una secuencia" -#: catalog/aclchk.c:1795 +#: catalog/aclchk.c:1786 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "la secuencia «%s» sólo soporta los privilegios USAGE, SELECT, y UPDATE" -#: catalog/aclchk.c:1812 +#: catalog/aclchk.c:1803 #, c-format msgid "invalid privilege type USAGE for table" msgstr "el tipo de privilegio USAGE no es válido para tablas" -#: catalog/aclchk.c:1977 +#: catalog/aclchk.c:1968 #, c-format msgid "invalid privilege type %s for column" msgstr "el tipo de privilegio %s no es válido para una columna" -#: catalog/aclchk.c:1990 +#: catalog/aclchk.c:1981 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "la secuencia «%s» sólo soporta el privilegio SELECT" -#: catalog/aclchk.c:2574 +#: catalog/aclchk.c:2565 #, c-format msgid "language \"%s\" is not trusted" msgstr "el lenguaje «%s» no es confiable (trusted)" -#: catalog/aclchk.c:2576 +#: catalog/aclchk.c:2567 #, c-format msgid "Only superusers can use untrusted languages." msgstr "Sólo los superusuarios pueden usar lenguajes no confiables." -#: catalog/aclchk.c:3092 +#: catalog/aclchk.c:3083 #, c-format msgid "cannot set privileges of array types" msgstr "no se puede definir privilegios para tipos de array" -#: catalog/aclchk.c:3093 +#: catalog/aclchk.c:3084 #, c-format msgid "Set the privileges of the element type instead." msgstr "Defina los privilegios del tipo elemento en su lugar." -#: catalog/aclchk.c:3100 catalog/objectaddress.c:1094 commands/typecmds.c:3187 +#: catalog/aclchk.c:3091 catalog/objectaddress.c:1471 commands/typecmds.c:3142 #, c-format msgid "\"%s\" is not a domain" msgstr "«%s» no es un dominio" -#: catalog/aclchk.c:3220 +#: catalog/aclchk.c:3211 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "tipo de privilegio no reconocido: «%s»" -#: catalog/aclchk.c:3269 +#: catalog/aclchk.c:3260 #, c-format msgid "permission denied for column %s" msgstr "permiso denegado a la columna %s" -#: catalog/aclchk.c:3271 +#: catalog/aclchk.c:3262 #, c-format msgid "permission denied for relation %s" msgstr "permiso denegado a la relación %s" -#: catalog/aclchk.c:3273 commands/sequence.c:535 commands/sequence.c:748 -#: commands/sequence.c:790 commands/sequence.c:827 commands/sequence.c:1500 +#: catalog/aclchk.c:3264 commands/sequence.c:561 commands/sequence.c:786 +#: commands/sequence.c:828 commands/sequence.c:865 commands/sequence.c:1543 #, c-format msgid "permission denied for sequence %s" msgstr "permiso denegado a la secuencia %s" -#: catalog/aclchk.c:3275 +#: catalog/aclchk.c:3266 #, c-format msgid "permission denied for database %s" msgstr "permiso denegado a la base de datos %s" -#: catalog/aclchk.c:3277 +#: catalog/aclchk.c:3268 #, c-format msgid "permission denied for function %s" msgstr "permiso denegado a la función %s" -#: catalog/aclchk.c:3279 +#: catalog/aclchk.c:3270 #, c-format msgid "permission denied for operator %s" msgstr "permiso denegado al operador %s" -#: catalog/aclchk.c:3281 +#: catalog/aclchk.c:3272 #, c-format msgid "permission denied for type %s" msgstr "permiso denegado al tipo %s" -#: catalog/aclchk.c:3283 +#: catalog/aclchk.c:3274 #, c-format msgid "permission denied for language %s" msgstr "permiso denegado al lenguaje %s" -#: catalog/aclchk.c:3285 +#: catalog/aclchk.c:3276 #, c-format msgid "permission denied for large object %s" msgstr "permiso denegado al objeto grande %s" -#: catalog/aclchk.c:3287 +#: catalog/aclchk.c:3278 #, c-format msgid "permission denied for schema %s" msgstr "permiso denegado al esquema %s" -#: catalog/aclchk.c:3289 +#: catalog/aclchk.c:3280 #, c-format msgid "permission denied for operator class %s" msgstr "permiso denegado a la clase de operadores %s" -#: catalog/aclchk.c:3291 +#: catalog/aclchk.c:3282 #, c-format msgid "permission denied for operator family %s" msgstr "permiso denegado a la familia de operadores %s" -#: catalog/aclchk.c:3293 +#: catalog/aclchk.c:3284 #, c-format msgid "permission denied for collation %s" msgstr "permiso denegado al ordenamiento (collation) %s" -#: catalog/aclchk.c:3295 +#: catalog/aclchk.c:3286 #, c-format msgid "permission denied for conversion %s" msgstr "permiso denegado a la conversión %s" -#: catalog/aclchk.c:3297 +#: catalog/aclchk.c:3288 #, c-format msgid "permission denied for tablespace %s" msgstr "permiso denegado al tablespace %s" -#: catalog/aclchk.c:3299 +#: catalog/aclchk.c:3290 #, c-format msgid "permission denied for text search dictionary %s" msgstr "permiso denegado a la configuración de búsqueda en texto %s" -#: catalog/aclchk.c:3301 +#: catalog/aclchk.c:3292 #, c-format msgid "permission denied for text search configuration %s" msgstr "permiso denegado a la configuración de búsqueda en texto %s" -#: catalog/aclchk.c:3303 +#: catalog/aclchk.c:3294 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "permiso denegado al conector de datos externos %s" -#: catalog/aclchk.c:3305 +#: catalog/aclchk.c:3296 #, c-format msgid "permission denied for foreign server %s" msgstr "permiso denegado al servidor foráneo %s" -#: catalog/aclchk.c:3307 +#: catalog/aclchk.c:3298 #, c-format msgid "permission denied for event trigger %s" msgstr "permiso denegado al disparador por eventos %s" -#: catalog/aclchk.c:3309 +#: catalog/aclchk.c:3300 #, c-format msgid "permission denied for extension %s" msgstr "permiso denegado a la extensión %s" -#: catalog/aclchk.c:3315 catalog/aclchk.c:3317 +#: catalog/aclchk.c:3306 catalog/aclchk.c:3308 #, c-format msgid "must be owner of relation %s" msgstr "debe ser dueño de la relación %s" -#: catalog/aclchk.c:3319 +#: catalog/aclchk.c:3310 #, c-format msgid "must be owner of sequence %s" msgstr "debe ser dueño de la secuencia %s" -#: catalog/aclchk.c:3321 +#: catalog/aclchk.c:3312 #, c-format msgid "must be owner of database %s" msgstr "debe ser dueño de la base de datos %s" -#: catalog/aclchk.c:3323 +#: catalog/aclchk.c:3314 #, c-format msgid "must be owner of function %s" msgstr "debe ser dueño de la función %s" -#: catalog/aclchk.c:3325 +#: catalog/aclchk.c:3316 #, c-format msgid "must be owner of operator %s" msgstr "debe ser dueño del operador %s" -#: catalog/aclchk.c:3327 +#: catalog/aclchk.c:3318 #, c-format msgid "must be owner of type %s" msgstr "debe ser dueño del tipo %s" -#: catalog/aclchk.c:3329 +#: catalog/aclchk.c:3320 #, c-format msgid "must be owner of language %s" msgstr "debe ser dueño del lenguaje %s" -#: catalog/aclchk.c:3331 +#: catalog/aclchk.c:3322 #, c-format msgid "must be owner of large object %s" msgstr "debe ser dueño del objeto grande %s" -#: catalog/aclchk.c:3333 +#: catalog/aclchk.c:3324 #, c-format msgid "must be owner of schema %s" msgstr "debe ser dueño del esquema %s" -#: catalog/aclchk.c:3335 +#: catalog/aclchk.c:3326 #, c-format msgid "must be owner of operator class %s" msgstr "debe ser dueño de la clase de operadores %s" -#: catalog/aclchk.c:3337 +#: catalog/aclchk.c:3328 #, c-format msgid "must be owner of operator family %s" msgstr "debe ser dueño de la familia de operadores %s" -#: catalog/aclchk.c:3339 +#: catalog/aclchk.c:3330 #, c-format msgid "must be owner of collation %s" msgstr "debe ser dueño del ordenamiento (collation) %s" -#: catalog/aclchk.c:3341 +#: catalog/aclchk.c:3332 #, c-format msgid "must be owner of conversion %s" msgstr "debe ser dueño de la conversión %s" -#: catalog/aclchk.c:3343 +#: catalog/aclchk.c:3334 #, c-format msgid "must be owner of tablespace %s" msgstr "debe ser dueño del tablespace %s" -#: catalog/aclchk.c:3345 +#: catalog/aclchk.c:3336 #, c-format msgid "must be owner of text search dictionary %s" msgstr "debe ser dueño del diccionario de búsqueda en texto %s" -#: catalog/aclchk.c:3347 +#: catalog/aclchk.c:3338 #, c-format msgid "must be owner of text search configuration %s" msgstr "debe ser dueño de la configuración de búsqueda en texto %s" -#: catalog/aclchk.c:3349 +#: catalog/aclchk.c:3340 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "debe ser dueño del conector de datos externos %s" -#: catalog/aclchk.c:3351 +#: catalog/aclchk.c:3342 #, c-format msgid "must be owner of foreign server %s" msgstr "debe ser dueño del servidor foráneo %s" -#: catalog/aclchk.c:3353 +#: catalog/aclchk.c:3344 #, c-format msgid "must be owner of event trigger %s" msgstr "debe ser dueño del disparador por eventos %s" -#: catalog/aclchk.c:3355 +#: catalog/aclchk.c:3346 #, c-format msgid "must be owner of extension %s" msgstr "debe ser dueño de la extensión %s" -#: catalog/aclchk.c:3397 +#: catalog/aclchk.c:3388 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "permiso denegado a la columna «%s» de la relación «%s»" -#: catalog/aclchk.c:3437 -#, c-format -msgid "role with OID %u does not exist" -msgstr "no existe el rol con OID %u" - -#: catalog/aclchk.c:3536 catalog/aclchk.c:3544 +#: catalog/aclchk.c:3507 catalog/aclchk.c:3515 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "no existe el atributo %d de la relación con OID %u" -#: catalog/aclchk.c:3617 catalog/aclchk.c:4532 +#: catalog/aclchk.c:3588 catalog/aclchk.c:4502 #, c-format msgid "relation with OID %u does not exist" msgstr "no existe la relación con OID %u" -#: catalog/aclchk.c:3717 catalog/aclchk.c:4950 +#: catalog/aclchk.c:3687 catalog/aclchk.c:4920 #, c-format msgid "database with OID %u does not exist" msgstr "no existe la base de datos con OID %u" -#: catalog/aclchk.c:3771 catalog/aclchk.c:4610 tcop/fastpath.c:223 +#: catalog/aclchk.c:3741 catalog/aclchk.c:4580 tcop/fastpath.c:223 #, c-format msgid "function with OID %u does not exist" msgstr "no existe la función con OID %u" -#: catalog/aclchk.c:3825 catalog/aclchk.c:4636 +#: catalog/aclchk.c:3795 catalog/aclchk.c:4606 #, c-format msgid "language with OID %u does not exist" msgstr "no existe el lenguaje con OID %u" -#: catalog/aclchk.c:3989 catalog/aclchk.c:4708 +#: catalog/aclchk.c:3959 catalog/aclchk.c:4678 #, c-format msgid "schema with OID %u does not exist" msgstr "no existe el esquema con OID %u" -#: catalog/aclchk.c:4043 catalog/aclchk.c:4735 +#: catalog/aclchk.c:4013 catalog/aclchk.c:4705 #, c-format msgid "tablespace with OID %u does not exist" msgstr "no existe el tablespace con OID %u" -#: catalog/aclchk.c:4101 catalog/aclchk.c:4869 commands/foreigncmds.c:302 +#: catalog/aclchk.c:4071 catalog/aclchk.c:4839 commands/foreigncmds.c:325 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "no existe el conector de datos externos con OID %u" -#: catalog/aclchk.c:4162 catalog/aclchk.c:4896 commands/foreigncmds.c:409 +#: catalog/aclchk.c:4132 catalog/aclchk.c:4866 commands/foreigncmds.c:461 #, c-format msgid "foreign server with OID %u does not exist" msgstr "no existe el servidor foráneo con OID %u" -#: catalog/aclchk.c:4221 catalog/aclchk.c:4235 catalog/aclchk.c:4558 +#: catalog/aclchk.c:4191 catalog/aclchk.c:4205 catalog/aclchk.c:4528 #, c-format msgid "type with OID %u does not exist" msgstr "no existe el tipo con OID %u" -#: catalog/aclchk.c:4584 +#: catalog/aclchk.c:4554 #, c-format msgid "operator with OID %u does not exist" msgstr "no existe el operador con OID %u" -#: catalog/aclchk.c:4761 +#: catalog/aclchk.c:4731 #, c-format msgid "operator class with OID %u does not exist" msgstr "no existe la clase de operadores con OID %u" -#: catalog/aclchk.c:4788 +#: catalog/aclchk.c:4758 #, c-format msgid "operator family with OID %u does not exist" msgstr "no existe la familia de operadores con OID %u" -#: catalog/aclchk.c:4815 +#: catalog/aclchk.c:4785 #, c-format msgid "text search dictionary with OID %u does not exist" msgstr "no existe el diccionario de búsqueda en texto con OID %u" -#: catalog/aclchk.c:4842 +#: catalog/aclchk.c:4812 #, c-format msgid "text search configuration with OID %u does not exist" msgstr "no existe la configuración de búsqueda en texto con OID %u" -#: catalog/aclchk.c:4923 commands/event_trigger.c:509 +#: catalog/aclchk.c:4893 commands/event_trigger.c:586 #, c-format msgid "event trigger with OID %u does not exist" msgstr "no existe el disparador por eventos con OID %u" -#: catalog/aclchk.c:4976 +#: catalog/aclchk.c:4946 #, c-format msgid "collation with OID %u does not exist" msgstr "no existe el ordenamiento (collation) con OID %u" -#: catalog/aclchk.c:5002 +#: catalog/aclchk.c:4972 #, c-format msgid "conversion with OID %u does not exist" msgstr "no existe la conversión con OID %u" -#: catalog/aclchk.c:5043 +#: catalog/aclchk.c:5013 #, c-format msgid "extension with OID %u does not exist" msgstr "no existe la extensión con OID %u" -#: catalog/dependency.c:626 +#: catalog/dependency.c:640 #, c-format msgid "cannot drop %s because %s requires it" msgstr "no se puede eliminar %s porque %s lo requiere" -#: catalog/dependency.c:629 +#: catalog/dependency.c:643 #, c-format msgid "You can drop %s instead." msgstr "Puede eliminar %s en su lugar." -#: catalog/dependency.c:790 catalog/pg_shdepend.c:573 +#: catalog/dependency.c:804 catalog/pg_shdepend.c:574 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "no se puede eliminar %s porque es requerido por el sistema" -#: catalog/dependency.c:906 +#: catalog/dependency.c:920 #, c-format msgid "drop auto-cascades to %s" msgstr "eliminando automáticamente %s" -#: catalog/dependency.c:918 catalog/dependency.c:927 +#: catalog/dependency.c:932 catalog/dependency.c:941 #, c-format msgid "%s depends on %s" msgstr "%s depende de %s" -#: catalog/dependency.c:939 catalog/dependency.c:948 +#: catalog/dependency.c:953 catalog/dependency.c:962 #, c-format msgid "drop cascades to %s" msgstr "eliminando además %s" -#: catalog/dependency.c:956 catalog/pg_shdepend.c:684 +#: catalog/dependency.c:970 catalog/pg_shdepend.c:685 #, c-format msgid "" "\n" @@ -2825,512 +3258,637 @@ msgstr[1] "" "\n" "y otros %d objetos (vea el registro del servidor para obtener la lista)" -#: catalog/dependency.c:968 +#: catalog/dependency.c:982 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "no se puede eliminar %s porque otros objetos dependen de él" -#: catalog/dependency.c:972 catalog/dependency.c:979 +#: catalog/dependency.c:986 catalog/dependency.c:993 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Use DROP ... CASCADE para eliminar además los objetos dependientes." -#: catalog/dependency.c:976 +#: catalog/dependency.c:990 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "no se puede eliminar el o los objetos deseados porque otros objetos dependen de ellos" #. translator: %d always has a value larger than 1 -#: catalog/dependency.c:985 +#: catalog/dependency.c:999 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "eliminando además %d objeto más" msgstr[1] "eliminando además %d objetos más" -#: catalog/heap.c:274 +#: catalog/dependency.c:1622 +#, c-format +msgid "constant of the type 'regrole' cannot be used here" +msgstr "" + +#: catalog/heap.c:276 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "se ha denegado el permiso para crear «%s.%s»" -#: catalog/heap.c:276 +#: catalog/heap.c:278 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Las modificaciones al catálogo del sistema están actualmente deshabilitadas." -#: catalog/heap.c:411 commands/tablecmds.c:1402 commands/tablecmds.c:1844 -#: commands/tablecmds.c:4583 +#: catalog/heap.c:413 commands/tablecmds.c:1432 commands/tablecmds.c:1885 +#: commands/tablecmds.c:4786 #, c-format msgid "tables can have at most %d columns" msgstr "las tablas pueden tener a lo más %d columnas" -#: catalog/heap.c:428 commands/tablecmds.c:4839 +#: catalog/heap.c:430 commands/tablecmds.c:5045 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "el nombre de columna «%s» colisiona con nombre de una columna de sistema" -#: catalog/heap.c:444 +#: catalog/heap.c:446 #, c-format msgid "column name \"%s\" specified more than once" msgstr "el nombre de columna «%s» fue especificado más de una vez" -#: catalog/heap.c:494 +#: catalog/heap.c:496 #, c-format msgid "column \"%s\" has type \"unknown\"" msgstr "la columna «%s» tiene tipo «unknown» (desconocido)" -#: catalog/heap.c:495 +#: catalog/heap.c:497 #, c-format msgid "Proceeding with relation creation anyway." msgstr "Continuando con la creación de la relación de todas maneras." -#: catalog/heap.c:508 +#: catalog/heap.c:510 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "la columna «%s» tiene pseudotipo %s" -#: catalog/heap.c:538 +#: catalog/heap.c:540 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "un tipo compuesto %s no puede ser hecho miembro de sí mismo" -#: catalog/heap.c:580 commands/createas.c:343 +#: catalog/heap.c:582 commands/createas.c:373 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "no se derivó ningún ordenamiento (collate) para la columna «%s» con tipo ordenable %s" -#: catalog/heap.c:582 commands/createas.c:345 commands/indexcmds.c:1072 -#: commands/view.c:116 regex/regc_pg_locale.c:262 utils/adt/formatting.c:1510 -#: utils/adt/formatting.c:1562 utils/adt/formatting.c:1630 -#: utils/adt/formatting.c:1682 utils/adt/formatting.c:1751 -#: utils/adt/formatting.c:1815 utils/adt/like.c:212 utils/adt/selfuncs.c:5221 -#: utils/adt/varlena.c:1381 +#: catalog/heap.c:584 commands/createas.c:375 commands/indexcmds.c:1087 +#: commands/view.c:116 regex/regc_pg_locale.c:262 utils/adt/formatting.c:1514 +#: utils/adt/formatting.c:1566 utils/adt/formatting.c:1634 +#: utils/adt/formatting.c:1686 utils/adt/formatting.c:1755 +#: utils/adt/formatting.c:1819 utils/adt/like.c:213 utils/adt/selfuncs.c:5276 +#: utils/adt/varlena.c:1411 utils/adt/varlena.c:1800 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Use la cláusula COLLATE para establecer el ordenamiento explícitamente." -#: catalog/heap.c:1055 catalog/index.c:778 commands/tablecmds.c:2549 +#: catalog/heap.c:1064 catalog/index.c:793 commands/tablecmds.c:2612 #, c-format msgid "relation \"%s\" already exists" msgstr "la relación «%s» ya existe" -#: catalog/heap.c:1071 catalog/pg_type.c:403 catalog/pg_type.c:706 -#: commands/typecmds.c:239 commands/typecmds.c:739 commands/typecmds.c:1090 -#: commands/typecmds.c:1308 commands/typecmds.c:2060 +#: catalog/heap.c:1080 catalog/pg_type.c:412 catalog/pg_type.c:722 +#: commands/typecmds.c:235 commands/typecmds.c:782 commands/typecmds.c:1133 +#: commands/typecmds.c:1355 commands/typecmds.c:2109 #, c-format msgid "type \"%s\" already exists" msgstr "ya existe un tipo «%s»" -#: catalog/heap.c:1072 +#: catalog/heap.c:1081 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "Una relación tiene un tipo asociado del mismo nombre, de modo que debe usar un nombre que no entre en conflicto con un tipo existente." -#: catalog/heap.c:2257 +#: catalog/heap.c:1109 +#, fuzzy, c-format +msgid "pg_class heap OID value not set when in binary upgrade mode" +msgstr "debe ser superusuario para conectarse en modo de actualización binaria" + +#: catalog/heap.c:2289 #, c-format msgid "check constraint \"%s\" already exists" msgstr "la restricción «check» «%s» ya existe" -#: catalog/heap.c:2410 catalog/pg_constraint.c:650 commands/tablecmds.c:5734 +#: catalog/heap.c:2444 catalog/pg_constraint.c:652 commands/tablecmds.c:6020 #, 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:2420 +#: catalog/heap.c:2454 #, 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:2434 +#: catalog/heap.c:2468 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "mezclando la restricción «%s» con la definición heredada" -#: catalog/heap.c:2527 +#: catalog/heap.c:2561 #, c-format msgid "cannot use column references in default expression" msgstr "no se pueden usar referencias a columnas en una cláusula default" -#: catalog/heap.c:2538 +#: catalog/heap.c:2572 #, c-format msgid "default expression must not return a set" msgstr "expresiones default no pueden retornar conjuntos" -#: catalog/heap.c:2557 rewrite/rewriteHandler.c:1066 +#: catalog/heap.c:2591 rewrite/rewriteHandler.c:1077 #, 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:2562 commands/prepare.c:374 parser/parse_node.c:411 -#: parser/parse_target.c:509 parser/parse_target.c:758 -#: parser/parse_target.c:768 rewrite/rewriteHandler.c:1071 +#: catalog/heap.c:2596 commands/prepare.c:374 parser/parse_node.c:411 +#: parser/parse_target.c:528 parser/parse_target.c:778 +#: parser/parse_target.c:788 rewrite/rewriteHandler.c:1082 #, 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:2609 +#: catalog/heap.c:2643 #, 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:2849 +#: catalog/heap.c:2883 #, 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:2850 +#: catalog/heap.c:2884 #, 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:2855 +#: catalog/heap.c:2889 #, 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:2856 +#: catalog/heap.c:2890 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "La tabla «%s» hace referencia a «%s»." -#: catalog/heap.c:2858 +#: catalog/heap.c:2892 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Trunque la tabla «%s» al mismo tiempo, o utilice TRUNCATE ... CASCADE." -#: catalog/index.c:204 parser/parse_utilcmd.c:1393 parser/parse_utilcmd.c:1479 +#: catalog/index.c:205 parser/parse_utilcmd.c:1436 parser/parse_utilcmd.c:1522 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "no se permiten múltiples llaves primarias para la tabla «%s»" -#: catalog/index.c:222 +#: catalog/index.c:223 #, c-format msgid "primary keys cannot be expressions" msgstr "las llaves primarias no pueden ser expresiones" -#: catalog/index.c:739 catalog/index.c:1143 +#: catalog/index.c:743 catalog/index.c:1161 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "los usuarios no pueden crear índices en tablas del sistema" -#: catalog/index.c:749 +#: catalog/index.c:753 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "no se pueden crear índices de forma concurrente en tablas del sistema" -#: catalog/index.c:767 +#: catalog/index.c:771 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "no se pueden crear índices compartidos después de initdb" -#: catalog/index.c:1403 +#: catalog/index.c:785 commands/createas.c:100 commands/sequence.c:141 +#: parser/parse_utilcmd.c:185 +#, c-format +msgid "relation \"%s\" already exists, skipping" +msgstr "la relación «%s» ya existe, ignorando" + +#: catalog/index.c:821 +#, fuzzy, c-format +msgid "pg_class index OID value not set when in binary upgrade mode" +msgstr "debe ser superusuario para conectarse en modo de actualización binaria" + +#: catalog/index.c:1423 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY debe ser la primera acción en una transacción" -#: catalog/index.c:1936 +#: catalog/index.c:2007 #, c-format msgid "building index \"%s\" on table \"%s\"" msgstr "construyendo índice «%s» en la tabla «%s»" -#: catalog/index.c:3121 +#: catalog/index.c:3262 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "no se puede hacer reindex de tablas temporales de otras sesiones" -#: catalog/namespace.c:247 catalog/namespace.c:445 catalog/namespace.c:539 -#: commands/trigger.c:4486 +#: catalog/index.c:3387 +#, fuzzy, c-format +msgid "index \"%s\" was reindexed" +msgstr "la tabla «%s.%s» fue reindexada" + +#: catalog/index.c:3389 commands/vacuumlazy.c:1131 commands/vacuumlazy.c:1207 +#: commands/vacuumlazy.c:1374 commands/vacuumlazy.c:1546 #, c-format -msgid "cross-database references are not implemented: \"%s.%s.%s\"" +msgid "%s." +msgstr "%s." + +#: catalog/namespace.c:249 catalog/namespace.c:447 catalog/namespace.c:541 +#: commands/trigger.c:4528 +#, c-format +msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "no están implementadas las referencias entre bases de datos: «%s.%s.%s»" -#: catalog/namespace.c:304 +#: catalog/namespace.c:306 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "las tablas temporales no pueden especificar un nombre de esquema" -#: catalog/namespace.c:383 +#: catalog/namespace.c:385 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "no se pudo bloquear un candado en la relación «%s.%s»" -#: catalog/namespace.c:388 commands/lockcmds.c:146 +#: catalog/namespace.c:390 commands/lockcmds.c:146 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "no se pudo bloquear un candado en la relación «%s»" -#: catalog/namespace.c:412 parser/parse_relation.c:964 +#: catalog/namespace.c:414 parser/parse_relation.c:1134 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "no existe la relación «%s.%s»" -#: catalog/namespace.c:417 parser/parse_relation.c:977 -#: parser/parse_relation.c:985 utils/adt/regproc.c:974 +#: catalog/namespace.c:419 parser/parse_relation.c:1147 +#: parser/parse_relation.c:1155 utils/adt/regproc.c:1035 #, c-format msgid "relation \"%s\" does not exist" msgstr "no existe la relación «%s»" -#: catalog/namespace.c:485 catalog/namespace.c:2849 commands/extension.c:1396 -#: commands/extension.c:1402 +#: catalog/namespace.c:487 catalog/namespace.c:2852 commands/extension.c:1394 +#: commands/extension.c:1400 #, c-format msgid "no schema has been selected to create in" msgstr "no se ha seleccionado ningún esquema dentro del cual crear" -#: catalog/namespace.c:637 catalog/namespace.c:650 +#: catalog/namespace.c:639 catalog/namespace.c:652 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "no se pueden crear relaciones en esquemas temporales de otras sesiones" -#: catalog/namespace.c:641 +#: catalog/namespace.c:643 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "no se pueden crear tablas temporales en esquemas no temporales" -#: catalog/namespace.c:656 +#: catalog/namespace.c:658 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "sólo relaciones temporales pueden ser creadas en los esquemas temporales" -#: catalog/namespace.c:2151 +#: catalog/namespace.c:2154 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "no existe el analizador de búsqueda en texto «%s»" -#: catalog/namespace.c:2277 +#: catalog/namespace.c:2280 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "no existe el diccionario de búsqueda en texto «%s»" -#: catalog/namespace.c:2404 +#: catalog/namespace.c:2407 #, c-format msgid "text search template \"%s\" does not exist" msgstr "no existe la plantilla de búsqueda en texto «%s»" -#: catalog/namespace.c:2530 commands/tsearchcmds.c:1168 -#: utils/cache/ts_cache.c:616 +#: catalog/namespace.c:2533 commands/tsearchcmds.c:1197 +#: 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:2643 parser/parse_expr.c:788 parser/parse_target.c:1110 +#: catalog/namespace.c:2646 parser/parse_expr.c:789 parser/parse_target.c:1130 #, 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:2649 parser/parse_expr.c:795 parser/parse_target.c:1117 -#: gram.y:12556 gram.y:13788 +#: catalog/namespace.c:2652 parser/parse_expr.c:796 parser/parse_target.c:1137 +#: gram.y:13291 gram.y:14645 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "el nombre no es válido (demasiados puntos): %s" -#: catalog/namespace.c:2783 +#: catalog/namespace.c:2786 #, c-format msgid "%s is already in schema \"%s\"" msgstr "%s ya está en el esquema «%s»" -#: catalog/namespace.c:2791 +#: catalog/namespace.c:2794 #, 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:2797 +#: catalog/namespace.c:2800 #, 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:2870 commands/schemacmds.c:212 -#: commands/schemacmds.c:288 commands/tablecmds.c:708 +#: catalog/namespace.c:2873 commands/schemacmds.c:238 +#: commands/schemacmds.c:317 commands/tablecmds.c:734 #, c-format msgid "schema \"%s\" does not exist" msgstr "no existe el esquema «%s»" -#: catalog/namespace.c:2901 +#: catalog/namespace.c:2904 #, 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:3342 +#: catalog/namespace.c:3369 #, 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:3397 +#: catalog/namespace.c:3424 #, c-format msgid "conversion \"%s\" does not exist" msgstr "no existe la conversión «%s»" -#: catalog/namespace.c:3605 +#: catalog/namespace.c:3632 #, 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:3621 +#: catalog/namespace.c:3648 #, c-format msgid "cannot create temporary tables during recovery" msgstr "no se pueden crear tablas temporales durante la recuperación" -#: catalog/namespace.c:3865 commands/tablespace.c:1113 commands/variable.c:61 -#: replication/syncrep.c:677 utils/misc/guc.c:9034 +#: catalog/namespace.c:3654 +#, fuzzy, c-format +msgid "cannot create temporary tables in parallel mode" +msgstr "no se pueden crear tablas temporales durante la recuperación" + +#: catalog/namespace.c:3898 commands/tablespace.c:1159 commands/variable.c:62 +#: replication/syncrep.c:700 utils/misc/guc.c:9604 #, c-format msgid "List syntax is invalid." msgstr "La sintaxis de lista no es válida." -#: catalog/objectaddress.c:732 +#: catalog/objectaddress.c:1021 msgid "database name cannot be qualified" msgstr "un nombre de base de datos no puede ser calificado" -#: catalog/objectaddress.c:735 commands/extension.c:2423 +#: catalog/objectaddress.c:1024 commands/extension.c:2423 #, c-format msgid "extension name cannot be qualified" msgstr "un nombre de extensión no puede ser calificado" -#: catalog/objectaddress.c:738 +#: catalog/objectaddress.c:1027 msgid "tablespace name cannot be qualified" msgstr "un nombre de tablespace no puede ser calificado" -#: catalog/objectaddress.c:741 +#: catalog/objectaddress.c:1030 msgid "role name cannot be qualified" msgstr "un nombre de rol no puede ser calificado" -#: catalog/objectaddress.c:744 +#: catalog/objectaddress.c:1033 msgid "schema name cannot be qualified" msgstr "un nombre de esquema no puede ser calificado" -#: catalog/objectaddress.c:747 +#: catalog/objectaddress.c:1036 msgid "language name cannot be qualified" msgstr "un nombre de lenguaje no puede ser calificado" -#: catalog/objectaddress.c:750 +#: catalog/objectaddress.c:1039 msgid "foreign-data wrapper name cannot be qualified" msgstr "un nombre de conector de datos externos no puede ser calificado" -#: catalog/objectaddress.c:753 +#: catalog/objectaddress.c:1042 msgid "server name cannot be qualified" msgstr "un nombre de servidor no puede ser calificado" -#: catalog/objectaddress.c:756 +#: catalog/objectaddress.c:1045 msgid "event trigger name cannot be qualified" msgstr "un nombre de disparador por eventos no puede ser calificado" -#: catalog/objectaddress.c:869 commands/lockcmds.c:94 commands/tablecmds.c:208 -#: commands/tablecmds.c:1263 commands/tablecmds.c:4130 -#: commands/tablecmds.c:7601 +#: catalog/objectaddress.c:1158 commands/lockcmds.c:94 commands/policy.c:94 +#: commands/policy.c:381 commands/tablecmds.c:214 commands/tablecmds.c:1293 +#: commands/tablecmds.c:4326 commands/tablecmds.c:7938 #, c-format msgid "\"%s\" is not a table" msgstr "«%s» no es una tabla" -#: catalog/objectaddress.c:876 commands/tablecmds.c:220 -#: commands/tablecmds.c:4154 commands/tablecmds.c:11249 commands/view.c:154 +#: catalog/objectaddress.c:1165 commands/tablecmds.c:226 +#: commands/tablecmds.c:4350 commands/tablecmds.c:11895 commands/view.c:155 #, c-format msgid "\"%s\" is not a view" msgstr "«%s» no es una vista" -#: catalog/objectaddress.c:883 commands/matview.c:171 commands/tablecmds.c:226 -#: commands/tablecmds.c:11254 +#: catalog/objectaddress.c:1172 commands/matview.c:174 +#: commands/tablecmds.c:232 commands/tablecmds.c:11900 #, c-format msgid "\"%s\" is not a materialized view" msgstr "«%s» no es una vista materializada" -#: catalog/objectaddress.c:890 commands/tablecmds.c:244 -#: commands/tablecmds.c:4157 commands/tablecmds.c:11259 +#: catalog/objectaddress.c:1179 commands/tablecmds.c:250 +#: commands/tablecmds.c:4353 commands/tablecmds.c:11905 #, c-format msgid "\"%s\" is not a foreign table" msgstr "«%s» no es una tabla foránea" -#: catalog/objectaddress.c:1028 +#: catalog/objectaddress.c:1324 catalog/objectaddress.c:1377 #, c-format msgid "column name must be qualified" msgstr "el nombre de columna debe ser calificado" -#: catalog/objectaddress.c:1083 commands/functioncmds.c:126 -#: commands/tablecmds.c:236 commands/typecmds.c:3253 parser/parse_type.c:222 -#: parser/parse_type.c:251 parser/parse_type.c:795 utils/adt/acl.c:4374 -#: utils/adt/regproc.c:1165 +#: catalog/objectaddress.c:1420 +#, fuzzy, c-format +msgid "default value for column \"%s\" of relation \"%s\" does not exist" +msgstr "no existe la columna «%s» en la relación «%s»" + +#: catalog/objectaddress.c:1460 commands/functioncmds.c:128 +#: commands/tablecmds.c:242 commands/typecmds.c:3210 parser/parse_type.c:227 +#: parser/parse_type.c:256 parser/parse_type.c:824 utils/adt/acl.c:4373 +#: utils/adt/regproc.c:1226 #, c-format msgid "type \"%s\" does not exist" msgstr "no existe el tipo «%s»" -#: catalog/objectaddress.c:1240 libpq/be-fsstubs.c:352 +#: catalog/objectaddress.c:1577 +#, fuzzy, c-format +msgid "operator %d (%s, %s) of %s does not exist" +msgstr "operador %d (%s, %s) de %s: %s" + +#: catalog/objectaddress.c:1606 +#, fuzzy, c-format +msgid "function %d (%s, %s) of %s does not exist" +msgstr "función %d (%s, %s) de %s: %s" + +#: catalog/objectaddress.c:1655 catalog/objectaddress.c:1681 +#, fuzzy, c-format +msgid "user mapping for user \"%s\" in server \"%s\" does not exist" +msgstr "no existe un mapeo para el tipo de elemento «%s»" + +#: catalog/objectaddress.c:1670 commands/foreigncmds.c:430 +#: commands/foreigncmds.c:997 commands/foreigncmds.c:1359 +#: foreign/foreign.c:691 +#, c-format +msgid "server \"%s\" does not exist" +msgstr "no existe el servidor «%s»" + +#: catalog/objectaddress.c:1742 +#, fuzzy, c-format +msgid "unrecognized default ACL object type %c" +msgstr "tipo de locktag %d no reconocido" + +#: catalog/objectaddress.c:1743 +#, c-format +msgid "Valid object types are 'r', 'S', 'f', and 'T'." +msgstr "" + +#: catalog/objectaddress.c:1789 +#, fuzzy, c-format +msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" +msgstr "no existe el procedimiento por omisión de conversión desde la codificación «%s» a «%s»" + +#: catalog/objectaddress.c:1794 +#, fuzzy, c-format +msgid "default ACL for user \"%s\" on %s does not exist" +msgstr "no existe el usuario LDAP «%s»" + +#: catalog/objectaddress.c:1821 catalog/objectaddress.c:1877 +#: catalog/objectaddress.c:1932 +#, fuzzy, c-format +msgid "name or argument lists may not contain nulls" +msgstr "el array no debe contener nulls" + +#: catalog/objectaddress.c:1853 +#, fuzzy, c-format +msgid "unsupported object type \"%s\"" +msgstr "lenguaje no soportado: «%s»" + +#: catalog/objectaddress.c:1873 catalog/objectaddress.c:1891 +#, c-format +msgid "name list length must be exactly %d" +msgstr "" + +#: catalog/objectaddress.c:1895 +#, fuzzy, c-format +msgid "large object OID may not be null" +msgstr "el argumento %d no puede ser null" + +#: catalog/objectaddress.c:1904 +#, c-format +msgid "name list must be of length at least %d" +msgstr "" + +#: catalog/objectaddress.c:1957 catalog/objectaddress.c:1977 +#, fuzzy, c-format +msgid "argument list length must be exactly %d" +msgstr "el argumento de %s debe ser un nombre de tipo" + +#: catalog/objectaddress.c:1964 catalog/objectaddress.c:1971 +#, fuzzy, c-format +msgid "name list length must be at least %d" +msgstr "el largo para el tipo %s debe ser al menos 1" + +#: catalog/objectaddress.c:2113 libpq/be-fsstubs.c:352 #, c-format msgid "must be owner of large object %u" msgstr "debe ser dueño del objeto grande %u" -#: catalog/objectaddress.c:1255 commands/functioncmds.c:1328 +#: catalog/objectaddress.c:2128 commands/functioncmds.c:1386 #, c-format msgid "must be owner of type %s or type %s" msgstr "debe ser dueño del tipo %s o el tipo %s" -#: catalog/objectaddress.c:1286 catalog/objectaddress.c:1302 +#: catalog/objectaddress.c:2168 catalog/objectaddress.c:2184 #, c-format msgid "must be superuser" msgstr "debe ser superusuario" -#: catalog/objectaddress.c:1293 +#: catalog/objectaddress.c:2175 #, c-format msgid "must have CREATEROLE privilege" msgstr "debe tener privilegio CREATEROLE" -#: catalog/objectaddress.c:1539 +#: catalog/objectaddress.c:2254 +#, fuzzy, c-format +msgid "unrecognized object type \"%s\"" +msgstr "tipo de locktag %d no reconocido" + +#: catalog/objectaddress.c:2449 #, c-format msgid " column %s" msgstr " columna %s" -#: catalog/objectaddress.c:1545 +#: catalog/objectaddress.c:2455 #, c-format msgid "function %s" msgstr "función %s" -#: catalog/objectaddress.c:1550 +#: catalog/objectaddress.c:2460 #, c-format msgid "type %s" msgstr "tipo %s" -#: catalog/objectaddress.c:1580 +#: catalog/objectaddress.c:2490 #, c-format msgid "cast from %s to %s" msgstr "conversión de %s a %s" -#: catalog/objectaddress.c:1600 +#: catalog/objectaddress.c:2510 #, c-format msgid "collation %s" msgstr "ordenamiento (collation) %s" -#: catalog/objectaddress.c:1624 +#: catalog/objectaddress.c:2534 #, c-format msgid "constraint %s on %s" msgstr "restricción «%s» en %s" -#: catalog/objectaddress.c:1630 +#: catalog/objectaddress.c:2540 #, c-format msgid "constraint %s" msgstr "restricción %s" -#: catalog/objectaddress.c:1647 +#: catalog/objectaddress.c:2557 #, c-format msgid "conversion %s" msgstr "conversión %s" -#: catalog/objectaddress.c:1684 +#: catalog/objectaddress.c:2594 #, c-format msgid "default for %s" msgstr "valor por omisión para %s" -#: catalog/objectaddress.c:1701 +#: catalog/objectaddress.c:2603 #, c-format msgid "language %s" msgstr "lenguaje %s" -#: catalog/objectaddress.c:1707 +#: catalog/objectaddress.c:2608 #, c-format msgid "large object %u" msgstr "objeto grande %u" -#: catalog/objectaddress.c:1712 +#: catalog/objectaddress.c:2613 #, c-format msgid "operator %s" msgstr "operador %s" -#: catalog/objectaddress.c:1744 +#: catalog/objectaddress.c:2645 #, c-format msgid "operator class %s for access method %s" msgstr "clase de operadores «%s» para el método de acceso «%s»" @@ -3339,7 +3897,7 @@ msgstr "clase de operadores «%s» para el método de acceso «%s»" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:1794 +#: catalog/objectaddress.c:2695 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "operador %d (%s, %s) de %s: %s" @@ -3348,162 +3906,172 @@ msgstr "operador %d (%s, %s) de %s: %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:1844 +#: catalog/objectaddress.c:2745 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "función %d (%s, %s) de %s: %s" -#: catalog/objectaddress.c:1884 +#: catalog/objectaddress.c:2785 #, c-format msgid "rule %s on " msgstr "regla «%s» en " -#: catalog/objectaddress.c:1919 +#: catalog/objectaddress.c:2807 +#, fuzzy, c-format +msgid "transform for %s language %s" +msgstr "permiso denegado al lenguaje %s" + +#: catalog/objectaddress.c:2841 #, c-format msgid "trigger %s on " msgstr "disparador %s en " -#: catalog/objectaddress.c:1936 +#: catalog/objectaddress.c:2858 #, c-format msgid "schema %s" msgstr "esquema %s" -#: catalog/objectaddress.c:1949 +#: catalog/objectaddress.c:2871 #, c-format msgid "text search parser %s" msgstr "analizador de búsqueda en texto %s" -#: catalog/objectaddress.c:1964 +#: catalog/objectaddress.c:2886 #, c-format msgid "text search dictionary %s" msgstr "diccionario de búsqueda en texto %s" -#: catalog/objectaddress.c:1979 +#: catalog/objectaddress.c:2901 #, c-format msgid "text search template %s" msgstr "plantilla de búsqueda en texto %s" -#: catalog/objectaddress.c:1994 +#: catalog/objectaddress.c:2916 #, c-format msgid "text search configuration %s" msgstr "configuración de búsqueda en texto %s" -#: catalog/objectaddress.c:2002 +#: catalog/objectaddress.c:2924 #, c-format msgid "role %s" msgstr "rol %s" -#: catalog/objectaddress.c:2015 +#: catalog/objectaddress.c:2937 #, c-format msgid "database %s" msgstr "base de datos %s" -#: catalog/objectaddress.c:2027 +#: catalog/objectaddress.c:2949 #, c-format msgid "tablespace %s" msgstr "tablespace %s" -#: catalog/objectaddress.c:2036 +#: catalog/objectaddress.c:2958 #, c-format msgid "foreign-data wrapper %s" msgstr "conector de datos externos %s" -#: catalog/objectaddress.c:2045 +#: catalog/objectaddress.c:2967 #, c-format msgid "server %s" msgstr "servidor %s" -#: catalog/objectaddress.c:2070 +#: catalog/objectaddress.c:2995 #, c-format -msgid "user mapping for %s" -msgstr "mapeo para el usuario %s" +msgid "user mapping for %s on server %s" +msgstr "mapeo para el usuario %s en el servidor %s" -#: catalog/objectaddress.c:2104 +#: catalog/objectaddress.c:3030 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "privilegios por omisión en nuevas relaciones pertenecientes al rol %s" -#: catalog/objectaddress.c:2109 +#: catalog/objectaddress.c:3035 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "privilegios por omisión en nuevas secuencias pertenecientes al rol %s" -#: catalog/objectaddress.c:2114 +#: catalog/objectaddress.c:3040 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "privilegios por omisión en nuevas funciones pertenecientes al rol %s" -#: catalog/objectaddress.c:2119 +#: catalog/objectaddress.c:3045 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "privilegios por omisión en nuevos tipos pertenecientes al rol %s" -#: catalog/objectaddress.c:2125 +#: catalog/objectaddress.c:3051 #, c-format msgid "default privileges belonging to role %s" msgstr "privilegios por omisión pertenecientes al rol %s" -#: catalog/objectaddress.c:2133 +#: catalog/objectaddress.c:3059 #, c-format msgid " in schema %s" msgstr " en esquema %s" -#: catalog/objectaddress.c:2150 +#: catalog/objectaddress.c:3076 #, c-format msgid "extension %s" msgstr "extensión %s" -#: catalog/objectaddress.c:2163 +#: catalog/objectaddress.c:3089 #, c-format msgid "event trigger %s" msgstr "disparador por eventos %s" -#: catalog/objectaddress.c:2223 +#: catalog/objectaddress.c:3121 +#, fuzzy, c-format +msgid "policy %s on " +msgstr "regla «%s» en " + +#: catalog/objectaddress.c:3184 #, c-format msgid "table %s" msgstr "tabla %s" -#: catalog/objectaddress.c:2227 +#: catalog/objectaddress.c:3188 #, c-format msgid "index %s" msgstr "índice %s" -#: catalog/objectaddress.c:2231 +#: catalog/objectaddress.c:3192 #, c-format msgid "sequence %s" msgstr "secuencia %s" -#: catalog/objectaddress.c:2235 +#: catalog/objectaddress.c:3196 #, c-format msgid "toast table %s" msgstr "tabla toast %s" -#: catalog/objectaddress.c:2239 +#: catalog/objectaddress.c:3200 #, c-format msgid "view %s" msgstr "vista %s" -#: catalog/objectaddress.c:2243 +#: catalog/objectaddress.c:3204 #, c-format msgid "materialized view %s" msgstr "vista materializada %s" -#: catalog/objectaddress.c:2247 +#: catalog/objectaddress.c:3208 #, c-format msgid "composite type %s" msgstr "tipo compuesto %s" -#: catalog/objectaddress.c:2251 +#: catalog/objectaddress.c:3212 #, c-format msgid "foreign table %s" msgstr "tabla foránea %s" -#: catalog/objectaddress.c:2256 +#: catalog/objectaddress.c:3217 #, c-format msgid "relation %s" msgstr "relación %s" -#: catalog/objectaddress.c:2293 +#: catalog/objectaddress.c:3254 #, c-format msgid "operator family %s for access method %s" msgstr "familia de operadores %s para el método de acceso %s" @@ -3550,7 +4118,7 @@ msgstr "no se puede omitir el valor inicial cuando la función de transición es msgid "return type of inverse transition function %s is not %s" msgstr "el tipo de retorno de la función inversa de transición %s no es %s" -#: catalog/pg_aggregate.c:344 executor/nodeWindowAgg.c:2301 +#: catalog/pg_aggregate.c:344 executor/nodeWindowAgg.c:2302 #, c-format msgid "strictness of aggregate's forward and inverse transition functions must match" msgstr "la opción «strict» de las funciones de transición directa e inversa deben coincidir exactamente en la función de agregación" @@ -3560,7 +4128,7 @@ msgstr "la opción «strict» de las funciones de transición directa e inversa msgid "final function with extra arguments must not be declared STRICT" msgstr "la función final con argumentos extra no debe declararse STRICT" -#: catalog/pg_aggregate.c:410 catalog/pg_proc.c:241 catalog/pg_proc.c:248 +#: catalog/pg_aggregate.c:410 catalog/pg_proc.c:245 catalog/pg_proc.c:252 #, c-format msgid "cannot determine result data type" msgstr "no se puede determinar el tipo de dato del resultado" @@ -3570,12 +4138,12 @@ msgstr "no se puede determinar el tipo de dato del resultado" msgid "An aggregate returning a polymorphic type must have at least one polymorphic argument." msgstr "Una función de agregación que retorne un tipo de datos polimórfico debe tener al menos un argumento de tipo polimórfico." -#: catalog/pg_aggregate.c:423 catalog/pg_proc.c:254 +#: catalog/pg_aggregate.c:423 catalog/pg_proc.c:258 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "uso inseguro de pseudotipo «internal»" -#: catalog/pg_aggregate.c:424 catalog/pg_proc.c:255 +#: catalog/pg_aggregate.c:424 catalog/pg_proc.c:259 #, c-format msgid "A function returning \"internal\" must have at least one \"internal\" argument." msgstr "Una función que retorne «internal» debe tener al menos un argumento de tipo «internal»." @@ -3590,27 +4158,27 @@ msgstr "la implementación de la función de agregación en modo «moving» devu msgid "sort operator can only be specified for single-argument aggregates" msgstr "el operador de ordenamiento sólo puede ser especificado para funciones de agregación de un solo argumento" -#: catalog/pg_aggregate.c:701 commands/typecmds.c:1657 -#: commands/typecmds.c:1708 commands/typecmds.c:1739 commands/typecmds.c:1762 -#: commands/typecmds.c:1783 commands/typecmds.c:1810 commands/typecmds.c:1837 -#: commands/typecmds.c:1914 commands/typecmds.c:1956 parser/parse_func.c:357 -#: parser/parse_func.c:386 parser/parse_func.c:411 parser/parse_func.c:425 -#: parser/parse_func.c:500 parser/parse_func.c:511 parser/parse_func.c:1907 +#: catalog/pg_aggregate.c:700 commands/typecmds.c:1702 +#: commands/typecmds.c:1753 commands/typecmds.c:1784 commands/typecmds.c:1807 +#: commands/typecmds.c:1828 commands/typecmds.c:1855 commands/typecmds.c:1882 +#: commands/typecmds.c:1959 commands/typecmds.c:2001 parser/parse_func.c:364 +#: parser/parse_func.c:393 parser/parse_func.c:418 parser/parse_func.c:432 +#: parser/parse_func.c:507 parser/parse_func.c:518 parser/parse_func.c:1920 #, c-format msgid "function %s does not exist" msgstr "no existe la función %s" -#: catalog/pg_aggregate.c:707 +#: catalog/pg_aggregate.c:706 #, c-format msgid "function %s returns a set" msgstr "la función %s retorna un conjunto" -#: catalog/pg_aggregate.c:722 +#: catalog/pg_aggregate.c:721 #, c-format msgid "function %s must accept VARIADIC ANY to be used in this aggregate" msgstr "la función %s debe aceptar VARIADIC ANY para usarse en esta agregación" -#: catalog/pg_aggregate.c:746 +#: catalog/pg_aggregate.c:745 #, c-format msgid "function %s requires run-time type coercion" msgstr "la función %s requiere conversión de tipos en tiempo de ejecución" @@ -3625,42 +4193,42 @@ msgstr "la codificación «%2$s» ya tiene un ordenamiento llamado «%1$s»" msgid "collation \"%s\" already exists" msgstr "el ordenamiento «%s» ya existe" -#: catalog/pg_constraint.c:659 +#: catalog/pg_constraint.c:661 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "el dominio %2$s ya contiene una restricción llamada «%1$s»" -#: catalog/pg_constraint.c:811 +#: catalog/pg_constraint.c:813 #, c-format msgid "table \"%s\" has multiple constraints named \"%s\"" msgstr "hay múltiples restricciones llamadas «%2$s» en la tabla «%1$s»" -#: catalog/pg_constraint.c:823 +#: catalog/pg_constraint.c:825 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "no existe la restricción «%s» para la tabla «%s»" -#: catalog/pg_constraint.c:869 +#: catalog/pg_constraint.c:871 #, c-format msgid "domain \"%s\" has multiple constraints named \"%s\"" msgstr "hay múltiples restricciones llamadas «%2$s» en el dominio «%1$s»" -#: catalog/pg_constraint.c:881 +#: catalog/pg_constraint.c:883 #, c-format msgid "constraint \"%s\" for domain \"%s\" does not exist" msgstr "no existe la restricción «%s» para el dominio «%s»" -#: catalog/pg_conversion.c:67 +#: catalog/pg_conversion.c:66 #, c-format msgid "conversion \"%s\" already exists" msgstr "ya existe la conversión «%s»" -#: catalog/pg_conversion.c:80 +#: catalog/pg_conversion.c:79 #, c-format msgid "default conversion for %s to %s already exists" msgstr "ya existe una conversión por omisión desde %s a %s" -#: catalog/pg_depend.c:165 commands/extension.c:2926 +#: catalog/pg_depend.c:165 commands/extension.c:2945 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "«%s» ya es un miembro de la extensión «%s»" @@ -3695,175 +4263,180 @@ msgstr "la etiqueta de enum «%s» ya existe" msgid "\"%s\" is not an existing enum label" msgstr "«%s» no es una etiqueta de enum existente" -#: catalog/pg_enum.c:354 +#: catalog/pg_enum.c:349 +#, fuzzy, c-format +msgid "pg_enum OID value not set when in binary upgrade mode" +msgstr "debe ser superusuario para conectarse en modo de actualización binaria" + +#: catalog/pg_enum.c:359 #, c-format msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "ALTER TYPE ADD BEFORE/AFTER es incompatible con la actualización binaria" -#: catalog/pg_namespace.c:61 commands/schemacmds.c:220 +#: catalog/pg_namespace.c:61 commands/schemacmds.c:246 #, c-format msgid "schema \"%s\" already exists" msgstr "ya existe el esquema «%s»" -#: catalog/pg_operator.c:222 catalog/pg_operator.c:362 +#: catalog/pg_operator.c:222 catalog/pg_operator.c:363 #, c-format msgid "\"%s\" is not a valid operator name" msgstr "«%s» no es un nombre válido de operador" -#: catalog/pg_operator.c:371 +#: catalog/pg_operator.c:372 #, c-format msgid "only binary operators can have commutators" msgstr "sólo los operadores binarios pueden tener conmutadores" -#: catalog/pg_operator.c:375 +#: catalog/pg_operator.c:376 #, c-format msgid "only binary operators can have join selectivity" msgstr "sólo los operadores binarios pueden tener selectividad de join" -#: catalog/pg_operator.c:379 +#: catalog/pg_operator.c:380 #, c-format msgid "only binary operators can merge join" msgstr "sólo los operadores binarios pueden ser usados en merge join" -#: catalog/pg_operator.c:383 +#: catalog/pg_operator.c:384 #, c-format msgid "only binary operators can hash" msgstr "sólo los operadores binarios pueden ser usados en hash" -#: catalog/pg_operator.c:394 +#: catalog/pg_operator.c:395 #, c-format msgid "only boolean operators can have negators" msgstr "sólo los operadores booleanos pueden tener negadores" -#: catalog/pg_operator.c:398 +#: catalog/pg_operator.c:399 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "sólo los operadores booleanos pueden tener selectividad de restricción" -#: catalog/pg_operator.c:402 +#: catalog/pg_operator.c:403 #, c-format msgid "only boolean operators can have join selectivity" msgstr "sólo los operadores booleanos pueden tener selectividad de join" -#: catalog/pg_operator.c:406 +#: catalog/pg_operator.c:407 #, c-format msgid "only boolean operators can merge join" msgstr "sólo los operadores booleanos pueden ser usados en merge join" -#: catalog/pg_operator.c:410 +#: catalog/pg_operator.c:411 #, c-format msgid "only boolean operators can hash" msgstr "sólo los operadores booleanos pueden ser usados en hash" -#: catalog/pg_operator.c:422 +#: catalog/pg_operator.c:423 #, c-format msgid "operator %s already exists" msgstr "ya existe un operador %s" -#: catalog/pg_operator.c:615 +#: catalog/pg_operator.c:616 #, c-format msgid "operator cannot be its own negator or sort operator" msgstr "un operador no puede ser su propio negador u operador de ordenamiento" -#: catalog/pg_proc.c:129 parser/parse_func.c:1931 parser/parse_func.c:1971 +#: catalog/pg_proc.c:133 parser/parse_func.c:1944 parser/parse_func.c:1984 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" msgstr[0] "las funciones no pueden tener más de %d argumento" msgstr[1] "las funciones no pueden tener más de %d argumentos" -#: catalog/pg_proc.c:242 +#: catalog/pg_proc.c:246 #, c-format msgid "A function returning a polymorphic type must have at least one polymorphic argument." msgstr "Una función que retorne un tipo polimórfico debe tener al menos un argumento de tipo polimórfico." -#: catalog/pg_proc.c:249 +#: catalog/pg_proc.c:253 #, c-format msgid "A function returning \"anyrange\" must have at least one \"anyrange\" argument." msgstr "Una función que retorne «anyrange» debe tener al menos un argumento de tipo «anyrange»." -#: catalog/pg_proc.c:267 +#: catalog/pg_proc.c:271 #, c-format msgid "\"%s\" is already an attribute of type %s" msgstr "«%s» ya es un atributo de tipo %s" -#: catalog/pg_proc.c:393 +#: catalog/pg_proc.c:401 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "ya existe una función «%s» con los mismos argumentos" -#: catalog/pg_proc.c:407 catalog/pg_proc.c:430 +#: catalog/pg_proc.c:415 catalog/pg_proc.c:438 #, c-format msgid "cannot change return type of existing function" msgstr "no se puede cambiar el tipo de retorno de una función existente" -#: catalog/pg_proc.c:408 catalog/pg_proc.c:432 catalog/pg_proc.c:475 -#: catalog/pg_proc.c:499 catalog/pg_proc.c:526 +#: catalog/pg_proc.c:416 catalog/pg_proc.c:440 catalog/pg_proc.c:483 +#: catalog/pg_proc.c:507 catalog/pg_proc.c:534 #, c-format msgid "Use DROP FUNCTION %s first." msgstr "Use DROP FUNCTION %s primero." -#: catalog/pg_proc.c:431 +#: catalog/pg_proc.c:439 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "Tipo de registro definido por parámetros OUT es diferente." -#: catalog/pg_proc.c:473 +#: catalog/pg_proc.c:481 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "no se puede cambiar el nombre del parámetro de entrada «%s»" -#: catalog/pg_proc.c:498 +#: catalog/pg_proc.c:506 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "no se puede eliminar el valor por omisión de funciones existentes" -#: catalog/pg_proc.c:525 +#: catalog/pg_proc.c:533 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "no se puede cambiar el tipo de dato del valor por omisión de un parámetro" -#: catalog/pg_proc.c:538 +#: catalog/pg_proc.c:546 #, c-format msgid "function \"%s\" is an aggregate function" msgstr "la función «%s» es una función de agregación" -#: catalog/pg_proc.c:543 +#: catalog/pg_proc.c:551 #, c-format msgid "function \"%s\" is not an aggregate function" msgstr "la función «%s» no es una función de agregación" -#: catalog/pg_proc.c:551 +#: catalog/pg_proc.c:559 #, c-format msgid "function \"%s\" is a window function" msgstr "la función %s es de tipo window" -#: catalog/pg_proc.c:556 +#: catalog/pg_proc.c:564 #, c-format msgid "function \"%s\" is not a window function" msgstr "la función «%s» no es de tipo window" -#: catalog/pg_proc.c:746 +#: catalog/pg_proc.c:772 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "no hay ninguna función interna llamada «%s»" -#: catalog/pg_proc.c:844 +#: catalog/pg_proc.c:870 #, c-format msgid "SQL functions cannot return type %s" msgstr "las funciones SQL no pueden retornar el tipo %s" -#: catalog/pg_proc.c:859 +#: catalog/pg_proc.c:885 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "las funciones SQL no pueden tener argumentos de tipo %s" -#: catalog/pg_proc.c:945 executor/functions.c:1418 +#: catalog/pg_proc.c:971 executor/functions.c:1421 #, c-format msgid "SQL function \"%s\"" msgstr "función SQL «%s»" -#: catalog/pg_shdepend.c:691 +#: catalog/pg_shdepend.c:692 #, c-format msgid "" "\n" @@ -3878,82 +4451,92 @@ msgstr[1] "" "\n" "y objetos en otras %d bases de datos (vea el registro del servidor para obtener la lista)" -#: catalog/pg_shdepend.c:1003 +#: catalog/pg_shdepend.c:1004 #, c-format msgid "role %u was concurrently dropped" msgstr "el rol %u fue eliminado por una transacción concurrente" -#: catalog/pg_shdepend.c:1022 +#: catalog/pg_shdepend.c:1023 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "el tablespace %u fue eliminado por una transacción concurrente" -#: catalog/pg_shdepend.c:1037 +#: catalog/pg_shdepend.c:1038 #, c-format msgid "database %u was concurrently dropped" msgstr "la base de datos %u fue eliminado por una transacción concurrente" -#: catalog/pg_shdepend.c:1081 +#: catalog/pg_shdepend.c:1083 #, c-format msgid "owner of %s" msgstr "dueño de %s" -#: catalog/pg_shdepend.c:1083 +#: catalog/pg_shdepend.c:1085 #, c-format msgid "privileges for %s" msgstr "privilegios para %s" +#: catalog/pg_shdepend.c:1087 +#, fuzzy, c-format +msgid "target of %s" +msgstr "dueño de %s" + #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1091 +#: catalog/pg_shdepend.c:1095 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" msgstr[0] "%d objeto en %s" msgstr[1] "%d objetos en %s" -#: catalog/pg_shdepend.c:1202 +#: catalog/pg_shdepend.c:1206 #, c-format msgid "cannot drop objects owned by %s because they are required by the database system" msgstr "no se puede eliminar objetos de propiedad de %s porque son requeridos por el sistema" -#: catalog/pg_shdepend.c:1305 +#: catalog/pg_shdepend.c:1309 #, c-format msgid "cannot reassign ownership of objects owned by %s because they are required by the database system" msgstr "no se puede reasignar la propiedad de objetos de %s porque son requeridos por el sistema" -#: catalog/pg_type.c:244 +#: catalog/pg_type.c:136 catalog/pg_type.c:454 +#, fuzzy, c-format +msgid "pg_type OID value not set when in binary upgrade mode" +msgstr "debe ser superusuario para conectarse en modo de actualización binaria" + +#: catalog/pg_type.c:253 #, c-format msgid "invalid type internal size %d" msgstr "el tamaño interno de tipo %d no es válido" -#: catalog/pg_type.c:260 catalog/pg_type.c:268 catalog/pg_type.c:276 -#: catalog/pg_type.c:285 +#: catalog/pg_type.c:269 catalog/pg_type.c:277 catalog/pg_type.c:285 +#: catalog/pg_type.c:294 #, c-format msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" msgstr "el alineamiento «%c» no es válido para un tipo pasado por valor de tamaño %d" -#: catalog/pg_type.c:292 +#: catalog/pg_type.c:301 #, c-format msgid "internal size %d is invalid for passed-by-value type" msgstr "el tamaño interno %d no es válido para un tipo pasado por valor" -#: catalog/pg_type.c:301 catalog/pg_type.c:307 +#: catalog/pg_type.c:310 catalog/pg_type.c:316 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "el alineamiento «%c» no es válido para un tipo de largo variable" -#: catalog/pg_type.c:315 +#: catalog/pg_type.c:324 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "los tipos de tamaño fijo deben tener almacenamiento PLAIN" -#: catalog/pg_type.c:773 +#: catalog/pg_type.c:789 #, c-format msgid "could not form array type name for type \"%s\"" msgstr "no se pudo formar un nombre de tipo de array para el tipo «%s»" -#: catalog/toasting.c:104 commands/indexcmds.c:380 commands/tablecmds.c:4139 -#: commands/tablecmds.c:11137 +#: catalog/toasting.c:104 commands/indexcmds.c:381 commands/tablecmds.c:4335 +#: commands/tablecmds.c:11783 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "«%s» no es una tabla o vista materializada" @@ -4033,221 +4616,231 @@ msgstr "el tipo base es redundante con el tipo de entrada en la función de agre msgid "aggregate transition data type cannot be %s" msgstr "el tipo de transición de la función de agregación no puede ser %s" -#: commands/alter.c:79 commands/event_trigger.c:194 +#: commands/alter.c:80 commands/event_trigger.c:230 #, c-format msgid "event trigger \"%s\" already exists" msgstr "el disparador por eventos «%s» ya existe" -#: commands/alter.c:82 commands/foreigncmds.c:544 +#: commands/alter.c:83 commands/foreigncmds.c:597 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "el conector de datos externos «%s» ya existe" -#: commands/alter.c:85 commands/foreigncmds.c:838 +#: commands/alter.c:86 commands/foreigncmds.c:890 #, c-format msgid "server \"%s\" already exists" msgstr "el servidor «%s» ya existe" -#: commands/alter.c:88 commands/proclang.c:356 +#: commands/alter.c:89 commands/proclang.c:363 #, c-format msgid "language \"%s\" already exists" msgstr "ya existe el lenguaje «%s»" -#: commands/alter.c:111 +#: commands/alter.c:112 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "ya existe una conversión llamada «%s» en el esquema «%s»" -#: commands/alter.c:115 +#: commands/alter.c:116 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "el analizador de búsqueda en texto «%s» ya existe en el esquema «%s»" -#: commands/alter.c:119 +#: commands/alter.c:120 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "el diccionario de búsqueda en texto «%s» ya existe en el esquema «%s»" -#: commands/alter.c:123 +#: commands/alter.c:124 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "la plantilla de búsqueda en texto «%s» ya existe en el esquema «%s»" -#: commands/alter.c:127 +#: commands/alter.c:128 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "la configuración de búsqueda en texto «%s» ya existe en el esquema «%s»" -#: commands/alter.c:201 +#: commands/alter.c:202 #, c-format msgid "must be superuser to rename %s" msgstr "debe ser superusuario para cambiar el nombre de «%s»" -#: commands/alter.c:585 +#: commands/alter.c:609 #, c-format msgid "must be superuser to set schema of %s" msgstr "debe ser superusuario para definir el esquema de %s" -#: commands/analyze.c:157 +#: commands/analyze.c:145 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "omitiendo analyze de «%s»: el candado no está disponible" -#: commands/analyze.c:174 +#: commands/analyze.c:162 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "omitiendo «%s»: sólo un superusuario puede analizarla" -#: commands/analyze.c:178 +#: commands/analyze.c:166 #, 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/analyze.c:182 +#: commands/analyze.c:170 #, 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/analyze.c:242 +#: commands/analyze.c:230 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "omitiendo «%s»: no se puede analizar esta tabla foránea" -#: commands/analyze.c:253 +#: commands/analyze.c:241 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "omitiendo «%s»: no se pueden analizar objetos que no son tablas, ni tablas especiales de sistema" -#: commands/analyze.c:332 +#: commands/analyze.c:320 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "analizando la jerarquía de herencia «%s.%s»" -#: commands/analyze.c:337 +#: commands/analyze.c:325 #, c-format msgid "analyzing \"%s.%s\"" msgstr "analizando «%s.%s»" -#: commands/analyze.c:657 +#: commands/analyze.c:645 #, c-format msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" msgstr "analyze automático de la tabla «%s.%s.%s»: uso del sistema: %s" -#: commands/analyze.c:1300 +#: commands/analyze.c:1201 #, c-format msgid "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead rows; %d rows in sample, %.0f estimated total rows" msgstr "«%s»: se procesaron %d de %u páginas, que contenían %.0f filas vigentes y %.0f filas no vigentes; %d filas en la muestra, %.0f total de filas estimadas" -#: commands/analyze.c:1564 executor/execQual.c:2904 +#: commands/analyze.c:1280 +#, c-format +msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" +msgstr "" + +#: commands/analyze.c:1369 +#, c-format +msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" +msgstr "" + +#: commands/analyze.c:1417 executor/execQual.c:2900 msgid "could not convert row type" msgstr "no se pudo convertir el tipo de registro" -#: commands/async.c:545 +#: commands/async.c:553 #, c-format msgid "channel name cannot be empty" msgstr "el nombre de canal no puede ser vacío" -#: commands/async.c:550 +#: commands/async.c:558 #, c-format msgid "channel name too long" msgstr "el nombre de canal es demasiado largo" -#: commands/async.c:557 +#: commands/async.c:565 #, c-format msgid "payload string too long" msgstr "la cadena de carga es demasiado larga" -#: commands/async.c:742 +#: commands/async.c:751 #, 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:845 +#: commands/async.c:854 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "demasiadas notificaciones en la cola NOTIFY" -#: commands/async.c:1418 +#: commands/async.c:1457 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "la cola NOTIFY está %.0f%% llena" -#: commands/async.c:1420 +#: commands/async.c:1459 #, c-format msgid "The server process with PID %d is among those with the oldest transactions." msgstr "El proceso servidor con PID %d está entre aquellos con transacciones más antiguas." -#: commands/async.c:1423 +#: commands/async.c:1462 #, c-format msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "La cola NOTIFY no puede vaciarse hasta que ese proceso cierre su transacción actual." -#: commands/cluster.c:126 commands/cluster.c:363 +#: commands/cluster.c:127 commands/cluster.c:364 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "no se pueden reordenar tablas temporales de otras sesiones" -#: commands/cluster.c:156 +#: commands/cluster.c:157 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "no hay un índice de ordenamiento definido para la tabla «%s»" -#: commands/cluster.c:170 commands/tablecmds.c:8795 commands/tablecmds.c:10461 +#: commands/cluster.c:171 commands/tablecmds.c:9228 commands/tablecmds.c:10925 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "no existe el índice «%s» en la tabla «%s»" -#: commands/cluster.c:352 +#: commands/cluster.c:353 #, c-format msgid "cannot cluster a shared catalog" msgstr "no se puede reordenar un catálogo compartido" -#: commands/cluster.c:367 +#: commands/cluster.c:368 #, c-format msgid "cannot vacuum temporary tables of other sessions" msgstr "no se puede hacer vacuum a tablas temporales de otras sesiones" -#: commands/cluster.c:430 commands/tablecmds.c:10471 +#: commands/cluster.c:431 commands/tablecmds.c:10935 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "«%s» no es un índice de la tabla «%s»" -#: commands/cluster.c:438 +#: commands/cluster.c:439 #, c-format msgid "cannot cluster on index \"%s\" because access method does not support clustering" msgstr "no se puede reordenar en índice «%s» porque el método de acceso no soporta reordenamiento" -#: commands/cluster.c:450 +#: commands/cluster.c:451 #, c-format msgid "cannot cluster on partial index \"%s\"" msgstr "no se puede reordenar en índice parcial «%s»" -#: commands/cluster.c:464 +#: commands/cluster.c:465 #, c-format msgid "cannot cluster on invalid index \"%s\"" msgstr "no se puede reordenar en el índice no válido «%s»" -#: commands/cluster.c:920 +#: commands/cluster.c:918 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "reordenando «%s.%s» usando un recorrido de índice en «%s»" -#: commands/cluster.c:926 +#: commands/cluster.c:924 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "reordenando «%s.%s» usando un recorrido secuencial y ordenamiento" -#: commands/cluster.c:931 commands/vacuumlazy.c:445 +#: commands/cluster.c:929 commands/vacuumlazy.c:464 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "haciendo vacuum a «%s.%s»" -#: commands/cluster.c:1090 +#: commands/cluster.c:1088 #, c-format msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" msgstr "«%s»: se encontraron %.0f versiones eliminables de filas y %.0f no eliminables en %u páginas" -#: commands/cluster.c:1094 +#: commands/cluster.c:1092 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -4256,51 +4849,51 @@ msgstr "" "%.0f versiones muertas de filas no pueden ser eliminadas aún.\n" "%s." -#: commands/collationcmds.c:79 +#: commands/collationcmds.c:80 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "el atributo de ordenamiento (collation) «%s» no es reconocido" -#: commands/collationcmds.c:124 +#: commands/collationcmds.c:125 #, c-format msgid "parameter \"lc_collate\" must be specified" msgstr "debe especificarse el parámetro «lc_collate»" -#: commands/collationcmds.c:129 +#: commands/collationcmds.c:130 #, c-format msgid "parameter \"lc_ctype\" must be specified" msgstr "debe especificarse el parámetro «lc_ctype»" -#: commands/collationcmds.c:163 +#: commands/collationcmds.c:166 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "ya existe un ordenamiento (collation) llamado «%s» para la codificación «%s» en el esquema «%s»" -#: commands/collationcmds.c:174 +#: commands/collationcmds.c:177 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "ya existe un ordenamiento llamado «%s» en el esquema «%s»" -#: commands/comment.c:62 commands/dbcommands.c:775 commands/dbcommands.c:939 -#: commands/dbcommands.c:1042 commands/dbcommands.c:1234 -#: commands/dbcommands.c:1423 commands/dbcommands.c:1518 -#: commands/dbcommands.c:1935 utils/init/postinit.c:794 -#: utils/init/postinit.c:862 utils/init/postinit.c:879 +#: commands/comment.c:62 commands/dbcommands.c:797 commands/dbcommands.c:962 +#: commands/dbcommands.c:1067 commands/dbcommands.c:1257 +#: commands/dbcommands.c:1477 commands/dbcommands.c:1594 +#: commands/dbcommands.c:2011 utils/init/postinit.c:826 +#: utils/init/postinit.c:928 utils/init/postinit.c:945 #, c-format msgid "database \"%s\" does not exist" msgstr "no existe la base de datos «%s»" -#: commands/comment.c:101 commands/seclabel.c:114 parser/parse_utilcmd.c:686 +#: commands/comment.c:101 commands/seclabel.c:116 parser/parse_utilcmd.c:727 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "«%s» no es una tabla, vista, vista materializada, tipo compuesto, o tabla foránea" -#: commands/constraint.c:60 utils/adt/ri_triggers.c:2699 +#: commands/constraint.c:60 utils/adt/ri_triggers.c:2717 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "la función «%s» no fue ejecutada por el manejador de triggers" -#: commands/constraint.c:67 utils/adt/ri_triggers.c:2708 +#: commands/constraint.c:67 utils/adt/ri_triggers.c:2726 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "la función «%s» debe ser ejecutada AFTER ROW" @@ -4325,691 +4918,721 @@ msgstr "no existe la codificación de destino «%s»" msgid "encoding conversion function %s must return type \"void\"" msgstr "la función de conversión de codificación %s debe retornar tipo «void»" -#: commands/copy.c:360 commands/copy.c:372 commands/copy.c:406 -#: commands/copy.c:416 +#: commands/copy.c:365 commands/copy.c:377 commands/copy.c:411 +#: commands/copy.c:423 #, c-format msgid "COPY BINARY is not supported to stdout or from stdin" msgstr "COPY BINARY no está soportado a la salida estándar o desde la entrada estándar" -#: commands/copy.c:514 +#: commands/copy.c:523 #, c-format msgid "could not write to COPY program: %m" msgstr "no se pudo escribir al programa COPY: %m" -#: commands/copy.c:519 +#: commands/copy.c:528 #, c-format msgid "could not write to COPY file: %m" msgstr "no se pudo escribir archivo COPY: %m" -#: commands/copy.c:532 +#: commands/copy.c:541 #, c-format msgid "connection lost during COPY to stdout" msgstr "se perdió la conexión durante COPY a la salida estándar" -#: commands/copy.c:573 +#: commands/copy.c:582 #, c-format msgid "could not read from COPY file: %m" msgstr "no se pudo leer desde archivo COPY: %m" -#: commands/copy.c:589 commands/copy.c:608 commands/copy.c:612 -#: tcop/fastpath.c:293 tcop/postgres.c:342 tcop/postgres.c:378 +#: commands/copy.c:598 commands/copy.c:619 commands/copy.c:623 +#: tcop/postgres.c:352 tcop/postgres.c:388 tcop/postgres.c:415 #, c-format msgid "unexpected EOF on client connection with an open transaction" msgstr "se encontró fin de archivo inesperado en una conexión con una transacción abierta" -#: commands/copy.c:624 +#: commands/copy.c:636 #, c-format msgid "COPY from stdin failed: %s" msgstr "falló COPY desde la entrada estándar: %s" -#: commands/copy.c:640 +#: commands/copy.c:652 #, c-format msgid "unexpected message type 0x%02X during COPY from stdin" msgstr "se recibió un mensaje de tipo 0x%02X inesperado durante COPY desde la entrada estándar" -#: commands/copy.c:794 +#: commands/copy.c:808 #, c-format msgid "must be superuser to COPY to or from an external program" msgstr "debe ser superusuario para usar COPY desde o hacia un programa externo" -#: commands/copy.c:795 commands/copy.c:801 +#: commands/copy.c:809 commands/copy.c:815 #, c-format msgid "Anyone can COPY to stdout or from stdin. psql's \\copy command also works for anyone." msgstr "Cualquier usuario puede usar COPY hacia la salida estándar o desde la entrada estándar. La orden \\copy de psql también puede ser utilizado por cualquier usuario." -#: commands/copy.c:800 +#: commands/copy.c:814 #, c-format msgid "must be superuser to COPY to or from a file" msgstr "debe ser superusuario para usar COPY desde o hacia un archivo" -#: commands/copy.c:936 +#: commands/copy.c:880 +#, c-format +msgid "COPY FROM not supported with row level security." +msgstr "" + +#: commands/copy.c:881 +#, c-format +msgid "Use direct INSERT statements instead." +msgstr "" + +#: commands/copy.c:1021 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "el formato de COPY «%s» no es reconocido" -#: commands/copy.c:1007 commands/copy.c:1021 commands/copy.c:1035 -#: commands/copy.c:1055 +#: commands/copy.c:1092 commands/copy.c:1106 commands/copy.c:1120 +#: commands/copy.c:1140 #, 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:1068 +#: commands/copy.c:1153 #, 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:1074 +#: commands/copy.c:1159 commands/dbcommands.c:232 commands/dbcommands.c:1427 #, c-format msgid "option \"%s\" not recognized" msgstr "no se reconoce la opción «%s»" -#: commands/copy.c:1085 +#: commands/copy.c:1170 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "no se puede especificar DELIMITER en modo BINARY" -#: commands/copy.c:1090 +#: commands/copy.c:1175 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "no se puede especificar NULL en modo BINARY" -#: commands/copy.c:1112 +#: commands/copy.c:1197 #, 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:1119 +#: commands/copy.c:1204 #, 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:1125 +#: commands/copy.c:1210 #, 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:1142 +#: commands/copy.c:1227 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "el delimitador de COPY no puede ser «%s»" -#: commands/copy.c:1148 +#: commands/copy.c:1233 #, 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:1154 +#: commands/copy.c:1239 #, 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:1159 +#: commands/copy.c:1244 #, 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:1164 +#: commands/copy.c:1249 #, 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:1170 +#: commands/copy.c:1255 #, c-format msgid "COPY escape available only in CSV mode" msgstr "escape de COPY disponible sólo en modo CSV" -#: commands/copy.c:1175 +#: commands/copy.c:1260 #, 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:1181 +#: commands/copy.c:1266 #, 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:1185 +#: commands/copy.c:1270 #, 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:1191 +#: commands/copy.c:1276 #, 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:1195 +#: commands/copy.c:1280 #, 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:1201 +#: commands/copy.c:1286 #, 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:1206 +#: commands/copy.c:1291 #, 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:1212 +#: commands/copy.c:1297 #, 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:1219 +#: commands/copy.c:1304 #, 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:1281 +#: commands/copy.c:1367 #, c-format msgid "table \"%s\" does not have OIDs" msgstr "la tabla «%s» no tiene OIDs" -#: commands/copy.c:1298 +#: commands/copy.c:1384 #, c-format msgid "COPY (SELECT) WITH OIDS is not supported" msgstr "COPY (SELECT) WITH OIDS no está soportado" -#: commands/copy.c:1324 +#: commands/copy.c:1410 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) no está soportado" -#: commands/copy.c:1387 +#: commands/copy.c:1440 +#, c-format +msgid "relation referenced by COPY statement has changed" +msgstr "" + +#: commands/copy.c:1498 #, c-format msgid "FORCE QUOTE column \"%s\" not referenced by COPY" msgstr "la columna «%s» con comillas forzadas no es referenciada por COPY" -#: commands/copy.c:1409 +#: commands/copy.c:1520 #, c-format msgid "FORCE NOT NULL column \"%s\" not referenced by COPY" msgstr "la columna «%s» especificada como FORCE NOT NULL no fue mencionada en COPY" -#: commands/copy.c:1431 +#: commands/copy.c:1542 #, c-format msgid "FORCE NULL column \"%s\" not referenced by COPY" msgstr "la columna «%s» especificada como FORCE NULL no fue mencionada en COPY" -#: commands/copy.c:1495 +#: commands/copy.c:1607 #, c-format msgid "could not close pipe to external command: %m" msgstr "no se pudo cerrar la tubería a la orden externa: %m" -#: commands/copy.c:1498 +#: commands/copy.c:1611 #, c-format msgid "program \"%s\" failed" msgstr "el programa «%s» falló" -#: commands/copy.c:1547 +#: commands/copy.c:1661 #, c-format msgid "cannot copy from view \"%s\"" msgstr "no se puede copiar desde la vista «%s»" -#: commands/copy.c:1549 commands/copy.c:1555 commands/copy.c:1561 +#: commands/copy.c:1663 commands/copy.c:1669 commands/copy.c:1675 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "Intente la forma COPY (SELECT ...) TO." -#: commands/copy.c:1553 +#: commands/copy.c:1667 #, c-format msgid "cannot copy from materialized view \"%s\"" msgstr "no se puede copiar desde la vista materializada «%s»" -#: commands/copy.c:1559 +#: commands/copy.c:1673 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "no se puede copiar desde la tabla foránea «%s»" -#: commands/copy.c:1565 +#: commands/copy.c:1679 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "no se puede copiar desde la secuencia «%s»" -#: commands/copy.c:1570 +#: commands/copy.c:1684 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "no se puede copiar desde la relación «%s» porque no es una tabla" -#: commands/copy.c:1593 commands/copy.c:2616 +#: commands/copy.c:1709 commands/copy.c:2747 #, c-format msgid "could not execute command \"%s\": %m" msgstr "no se pudo ejecutar la orden «%s»: %m" -#: commands/copy.c:1608 +#: commands/copy.c:1724 #, c-format msgid "relative path not allowed for COPY to file" msgstr "no se permiten rutas relativas para COPY hacia un archivo" -#: commands/copy.c:1616 +#: commands/copy.c:1732 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "no se pudo abrir el archivo «%s» para escritura: %m" -#: commands/copy.c:1623 commands/copy.c:2634 +#: commands/copy.c:1744 commands/copy.c:2770 #, c-format msgid "\"%s\" is a directory" msgstr "«%s» es un directorio" -#: commands/copy.c:1948 +#: commands/copy.c:2069 #, c-format msgid "COPY %s, line %d, column %s" msgstr "COPY %s, línea %d, columna %s" -#: commands/copy.c:1952 commands/copy.c:1999 +#: commands/copy.c:2073 commands/copy.c:2120 #, c-format msgid "COPY %s, line %d" msgstr "COPY %s, línea %d" -#: commands/copy.c:1963 +#: commands/copy.c:2084 #, c-format msgid "COPY %s, line %d, column %s: \"%s\"" msgstr "COPY %s, línea %d, columna %s: «%s»" -#: commands/copy.c:1971 +#: commands/copy.c:2092 #, c-format msgid "COPY %s, line %d, column %s: null input" msgstr "COPY %s, línea %d, columna %s: entrada nula" -#: commands/copy.c:1993 +#: commands/copy.c:2114 #, c-format msgid "COPY %s, line %d: \"%s\"" msgstr "COPY %s, línea %d: «%s»" -#: commands/copy.c:2077 +#: commands/copy.c:2198 #, c-format msgid "cannot copy to view \"%s\"" msgstr "no se puede copiar hacia la vista «%s»" -#: commands/copy.c:2082 +#: commands/copy.c:2203 #, c-format msgid "cannot copy to materialized view \"%s\"" msgstr "no se puede copiar hacia la vista materializada «%s»" -#: commands/copy.c:2087 +#: commands/copy.c:2208 #, c-format msgid "cannot copy to foreign table \"%s\"" msgstr "no se puede copiar hacia la tabla foránea «%s»" -#: commands/copy.c:2092 +#: commands/copy.c:2213 #, c-format msgid "cannot copy to sequence \"%s\"" msgstr "no se puede copiar hacia la secuencia «%s»" -#: commands/copy.c:2097 +#: commands/copy.c:2218 #, c-format msgid "cannot copy to non-table relation \"%s\"" msgstr "no se puede copiar hacia la relación «%s» porque no es una tabla" -#: commands/copy.c:2160 +#: commands/copy.c:2281 #, c-format msgid "cannot perform FREEZE because of prior transaction activity" msgstr "no se puede ejecutar FREEZE debido a actividad anterior en la transacción" -#: commands/copy.c:2166 +#: commands/copy.c:2287 #, c-format msgid "cannot perform FREEZE because the table was not created or truncated in the current subtransaction" msgstr "no se puede ejecutar FREEZE porque la tabla no fue creada ni truncada en la subtransacción en curso" -#: commands/copy.c:2627 utils/adt/genfile.c:123 +#: commands/copy.c:2758 commands/extension.c:3037 utils/adt/genfile.c:134 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "no se pudo abrir archivo «%s» para lectura: %m" -#: commands/copy.c:2654 +#: commands/copy.c:2790 #, c-format msgid "COPY file signature not recognized" msgstr "el identificador del archivo COPY no es reconocido" -#: commands/copy.c:2659 +#: commands/copy.c:2795 #, c-format msgid "invalid COPY file header (missing flags)" msgstr "el encabezado del archivo COPY no es válido (faltan campos)" -#: commands/copy.c:2665 +#: commands/copy.c:2801 #, c-format msgid "unrecognized critical flags in COPY file header" msgstr "valores requeridos no reconocidos en encabezado de COPY" -#: commands/copy.c:2671 +#: commands/copy.c:2807 #, c-format msgid "invalid COPY file header (missing length)" msgstr "el encabezado del archivo COPY no es válido (falta el largo)" -#: commands/copy.c:2678 +#: commands/copy.c:2814 #, c-format msgid "invalid COPY file header (wrong length)" msgstr "el encabezado del archivo COPY no es válido (largo incorrecto)" -#: commands/copy.c:2811 commands/copy.c:3518 commands/copy.c:3748 +#: commands/copy.c:2947 commands/copy.c:3654 commands/copy.c:3884 #, c-format msgid "extra data after last expected column" msgstr "datos extra después de la última columna esperada" -#: commands/copy.c:2821 +#: commands/copy.c:2957 #, c-format msgid "missing data for OID column" msgstr "faltan datos para la columna OID" -#: commands/copy.c:2827 +#: commands/copy.c:2963 #, c-format msgid "null OID in COPY data" msgstr "OID nulo en datos COPY" -#: commands/copy.c:2837 commands/copy.c:2960 +#: commands/copy.c:2973 commands/copy.c:3096 #, c-format msgid "invalid OID in COPY data" msgstr "OID no válido en datos COPY" -#: commands/copy.c:2852 +#: commands/copy.c:2988 #, c-format msgid "missing data for column \"%s\"" msgstr "faltan datos en la columna «%s»" -#: commands/copy.c:2935 +#: commands/copy.c:3071 #, c-format msgid "received copy data after EOF marker" msgstr "se recibieron datos de copy después del marcador EOF" -#: commands/copy.c:2942 +#: commands/copy.c:3078 #, c-format msgid "row field count is %d, expected %d" msgstr "la cantidad de registros es %d, pero se esperaban %d" -#: commands/copy.c:3282 commands/copy.c:3299 +#: commands/copy.c:3418 commands/copy.c:3435 #, c-format msgid "literal carriage return found in data" msgstr "se encontró un retorno de carro literal en los datos" -#: commands/copy.c:3283 commands/copy.c:3300 +#: commands/copy.c:3419 commands/copy.c:3436 #, c-format msgid "unquoted carriage return found in data" msgstr "se encontró un retorno de carro fuera de comillas en los datos" -#: commands/copy.c:3285 commands/copy.c:3302 +#: commands/copy.c:3421 commands/copy.c:3438 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "Use «\\r» para representar el retorno de carro." -#: commands/copy.c:3286 commands/copy.c:3303 +#: commands/copy.c:3422 commands/copy.c:3439 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "Use un campo CSV entre comillas para representar el retorno de carro." -#: commands/copy.c:3315 +#: commands/copy.c:3451 #, c-format msgid "literal newline found in data" msgstr "se encontró un salto de línea literal en los datos" -#: commands/copy.c:3316 +#: commands/copy.c:3452 #, c-format msgid "unquoted newline found in data" msgstr "se encontró un salto de línea fuera de comillas en los datos" -#: commands/copy.c:3318 +#: commands/copy.c:3454 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "Use «\\n» para representar un salto de línea." -#: commands/copy.c:3319 +#: commands/copy.c:3455 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "Use un campo CSV entre comillas para representar un salto de línea." -#: commands/copy.c:3365 commands/copy.c:3401 +#: commands/copy.c:3501 commands/copy.c:3537 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "el marcador fin-de-copy no coincide con el estilo previo de salto de línea" -#: commands/copy.c:3374 commands/copy.c:3390 +#: commands/copy.c:3510 commands/copy.c:3526 #, c-format msgid "end-of-copy marker corrupt" msgstr "marcador fin-de-copy corrupto" -#: commands/copy.c:3832 +#: commands/copy.c:3968 #, c-format msgid "unterminated CSV quoted field" msgstr "un valor entre comillas está inconcluso" -#: commands/copy.c:3909 commands/copy.c:3928 +#: commands/copy.c:4045 commands/copy.c:4064 #, c-format msgid "unexpected EOF in COPY data" msgstr "EOF inesperado en datos de COPY" -#: commands/copy.c:3918 +#: commands/copy.c:4054 #, c-format msgid "invalid field size" msgstr "el tamaño de campo no es válido" -#: commands/copy.c:3941 +#: commands/copy.c:4077 #, c-format msgid "incorrect binary data format" msgstr "el formato de datos binarios es incorrecto" -#: commands/copy.c:4252 commands/indexcmds.c:993 commands/tablecmds.c:1427 -#: commands/tablecmds.c:2237 parser/parse_relation.c:2889 -#: utils/adt/tsvector_op.c:1417 +#: commands/copy.c:4388 commands/indexcmds.c:1008 commands/tablecmds.c:1457 +#: commands/tablecmds.c:2280 parser/parse_relation.c:3081 +#: parser/parse_relation.c:3101 utils/adt/tsvector_op.c:1417 #, c-format msgid "column \"%s\" does not exist" msgstr "no existe la columna «%s»" -#: commands/copy.c:4259 commands/tablecmds.c:1453 commands/trigger.c:644 -#: parser/parse_target.c:936 parser/parse_target.c:947 +#: commands/copy.c:4395 commands/tablecmds.c:1483 commands/trigger.c:652 +#: parser/parse_target.c:956 parser/parse_target.c:967 #, c-format msgid "column \"%s\" specified more than once" msgstr "la columna «%s» fue especificada más de una vez" -#: commands/createas.c:353 +#: commands/createas.c:383 #, c-format msgid "too many column names were specified" msgstr "se especificaron demasiados nombres de columna" -#: commands/dbcommands.c:203 +#: commands/createas.c:452 +#, fuzzy, c-format +msgid "policies not yet implemented for this command" +msgstr "DISTINCT no está implementado para funciones de ventana deslizante" + +#: commands/dbcommands.c:226 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATION ya no está soportado" -#: commands/dbcommands.c:204 +#: commands/dbcommands.c:227 #, c-format msgid "Consider using tablespaces instead." msgstr "Considere usar tablespaces." -#: commands/dbcommands.c:227 utils/adt/ascii.c:144 +#: commands/dbcommands.c:251 utils/adt/ascii.c:144 #, c-format msgid "%d is not a valid encoding code" msgstr "%d no es un código válido de codificación" -#: commands/dbcommands.c:237 utils/adt/ascii.c:126 +#: commands/dbcommands.c:261 utils/adt/ascii.c:126 #, c-format msgid "%s is not a valid encoding name" msgstr "%s no es un nombre válido de codificación" -#: commands/dbcommands.c:255 commands/dbcommands.c:1404 commands/user.c:260 -#: commands/user.c:601 +#: commands/dbcommands.c:279 commands/dbcommands.c:1458 commands/user.c:271 +#: commands/user.c:635 #, c-format msgid "invalid connection limit: %d" msgstr "límite de conexión no válido: %d" -#: commands/dbcommands.c:274 +#: commands/dbcommands.c:298 #, c-format msgid "permission denied to create database" msgstr "se ha denegado el permiso para crear la base de datos" -#: commands/dbcommands.c:297 +#: commands/dbcommands.c:321 #, c-format msgid "template database \"%s\" does not exist" msgstr "no existe la base de datos patrón «%s»" -#: commands/dbcommands.c:309 +#: commands/dbcommands.c:333 #, c-format msgid "permission denied to copy database \"%s\"" msgstr "se ha denegado el permiso para copiar la base de datos «%s»" -#: commands/dbcommands.c:325 +#: commands/dbcommands.c:349 #, c-format msgid "invalid server encoding %d" msgstr "la codificación de servidor %d no es válida" -#: commands/dbcommands.c:331 commands/dbcommands.c:336 +#: commands/dbcommands.c:355 commands/dbcommands.c:360 #, c-format msgid "invalid locale name: \"%s\"" msgstr "nombre de configuración regional no válido: «%s»" -#: commands/dbcommands.c:356 +#: commands/dbcommands.c:380 #, c-format msgid "new encoding (%s) is incompatible with the encoding of the template database (%s)" msgstr "la nueva codificación (%s) es incompatible con la codificación de la base de datos patrón (%s)" -#: commands/dbcommands.c:359 +#: commands/dbcommands.c:383 #, c-format msgid "Use the same encoding as in the template database, or use template0 as template." msgstr "Use la misma codificación que en la base de datos patrón, o bien use template0 como patrón." -#: commands/dbcommands.c:364 +#: commands/dbcommands.c:388 #, c-format msgid "new collation (%s) is incompatible with the collation of the template database (%s)" msgstr "la nueva «collation» (%s) es incompatible con la «collation» de la base de datos patrón (%s)" -#: commands/dbcommands.c:366 +#: commands/dbcommands.c:390 #, c-format msgid "Use the same collation as in the template database, or use template0 as template." msgstr "Use la misma «collation» que en la base de datos patrón, o bien use template0 como patrón." -#: commands/dbcommands.c:371 +#: commands/dbcommands.c:395 #, c-format msgid "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database (%s)" msgstr "el nuevo LC_CTYPE (%s) es incompatible con el LC_CTYPE de la base de datos patrón (%s)" -#: commands/dbcommands.c:373 +#: commands/dbcommands.c:397 #, c-format msgid "Use the same LC_CTYPE as in the template database, or use template0 as template." msgstr "Use el mismo LC_CTYPE que en la base de datos patrón, o bien use template0 como patrón." -#: commands/dbcommands.c:395 commands/dbcommands.c:1088 +#: commands/dbcommands.c:419 commands/dbcommands.c:1113 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "no puede usarse pg_global como tablespace por omisión" -#: commands/dbcommands.c:421 +#: commands/dbcommands.c:445 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "no se puede asignar el nuevo tablespace por omisión «%s»" -#: commands/dbcommands.c:423 +#: commands/dbcommands.c:447 #, c-format msgid "There is a conflict because database \"%s\" already has some tables in this tablespace." msgstr "Hay un conflicto puesto que la base de datos «%s» ya tiene algunas tablas en este tablespace." -#: commands/dbcommands.c:443 commands/dbcommands.c:959 +#: commands/dbcommands.c:467 commands/dbcommands.c:982 #, c-format msgid "database \"%s\" already exists" msgstr "la base de datos «%s» ya existe" -#: commands/dbcommands.c:457 +#: commands/dbcommands.c:481 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "la base de datos de origen «%s» está siendo utilizada por otros usuarios" -#: commands/dbcommands.c:704 commands/dbcommands.c:719 +#: commands/dbcommands.c:726 commands/dbcommands.c:741 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "la codificación «%s» no coincide con la configuración regional «%s»" -#: commands/dbcommands.c:707 +#: commands/dbcommands.c:729 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "El parámetro LC_CTYPE escogido requiere la codificación «%s»." -#: commands/dbcommands.c:722 +#: commands/dbcommands.c:744 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "El parámetro LC_COLLATE escogido requiere la codificación «%s»." -#: commands/dbcommands.c:782 +#: commands/dbcommands.c:804 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "no existe la base de datos «%s», ignorando" -#: commands/dbcommands.c:806 +#: commands/dbcommands.c:828 #, c-format msgid "cannot drop a template database" msgstr "no se puede borrar una base de datos patrón" -#: commands/dbcommands.c:812 +#: commands/dbcommands.c:834 #, c-format msgid "cannot drop the currently open database" msgstr "no se puede eliminar la base de datos activa" -#: commands/dbcommands.c:822 +#: commands/dbcommands.c:844 #, c-format msgid "database \"%s\" is used by a logical replication slot" msgstr "la base de datos «%s» está siendo usada por un slot de replicación lógica" -#: commands/dbcommands.c:824 +#: commands/dbcommands.c:846 #, c-format msgid "There is %d slot, %d of them active." msgid_plural "There are %d slots, %d of them active." msgstr[0] "Hay %d slot, %d de ellos activo" msgstr[1] "Hay %d slots, %d de ellos activos." -#: commands/dbcommands.c:838 commands/dbcommands.c:981 -#: commands/dbcommands.c:1110 +#: commands/dbcommands.c:860 commands/dbcommands.c:1004 +#: commands/dbcommands.c:1135 #, c-format msgid "database \"%s\" is being accessed by other users" msgstr "la base de datos «%s» está siendo utilizada por otros usuarios" -#: commands/dbcommands.c:950 +#: commands/dbcommands.c:973 #, c-format msgid "permission denied to rename database" msgstr "se ha denegado el permiso para cambiar el nombre a la base de datos" -#: commands/dbcommands.c:970 +#: commands/dbcommands.c:993 #, c-format msgid "current database cannot be renamed" msgstr "no se puede cambiar el nombre de la base de datos activa" -#: commands/dbcommands.c:1066 +#: commands/dbcommands.c:1091 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "no se puede cambiar el tablespace de la base de datos activa" -#: commands/dbcommands.c:1169 +#: commands/dbcommands.c:1194 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "algunas relaciones de la base de datos «%s» ya están en el tablespace «%s»" -#: commands/dbcommands.c:1171 +#: commands/dbcommands.c:1196 #, c-format msgid "You must move them back to the database's default tablespace before using this command." msgstr "Debe moverlas de vuelta al tablespace por omisión de la base de datos antes de ejecutar esta orden." -#: commands/dbcommands.c:1302 commands/dbcommands.c:1790 -#: commands/dbcommands.c:1996 commands/dbcommands.c:2044 -#: commands/tablespace.c:604 +#: commands/dbcommands.c:1325 commands/dbcommands.c:1868 +#: commands/dbcommands.c:2072 commands/dbcommands.c:2120 +#: commands/tablespace.c:606 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "algunos archivos inútiles pueden haber quedado en el directorio \"%s\"" -#: commands/dbcommands.c:1558 +#: commands/dbcommands.c:1440 +#, fuzzy, c-format +msgid "option \"%s\" cannot be specified with other options" +msgstr "el parámetro «%s» no se puede cambiar después de efectuar la conexión" + +#: commands/dbcommands.c:1494 +#, fuzzy, c-format +msgid "cannot disallow connections for current database" +msgstr "demasiadas conexiones para la base de datos «%s»" + +#: commands/dbcommands.c:1634 #, c-format msgid "permission denied to change owner of database" msgstr "se ha denegado el permiso para cambiar el dueño de la base de datos" -#: commands/dbcommands.c:1879 +#: commands/dbcommands.c:1955 #, c-format msgid "There are %d other session(s) and %d prepared transaction(s) using the database." msgstr "Hay otras %d sesiones y %d transacciones preparadas usando la base de datos." -#: commands/dbcommands.c:1882 +#: commands/dbcommands.c:1958 #, c-format msgid "There is %d other session using the database." msgid_plural "There are %d other sessions using the database." msgstr[0] "Hay %d otra sesión usando la base de datos." msgstr[1] "Hay otras %d sesiones usando la base de datos." -#: commands/dbcommands.c:1887 +#: commands/dbcommands.c:1963 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." @@ -5053,8 +5676,8 @@ msgstr "el argumento de %s debe ser un nombre de tipo" msgid "invalid argument for %s: \"%s\"" msgstr "argumento no válido para %s: «%s»" -#: commands/dropcmds.c:112 commands/functioncmds.c:1110 -#: utils/adt/ruleutils.c:1936 +#: commands/dropcmds.c:112 commands/functioncmds.c:1166 +#: utils/adt/ruleutils.c:1950 #, c-format msgid "\"%s\" is an aggregate function" msgstr "«%s» es una función de agregación" @@ -5064,389 +5687,414 @@ msgstr "«%s» es una función de agregación" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Use DROP AGGREGATE para eliminar funciones de agregación." -#: commands/dropcmds.c:165 commands/sequence.c:400 commands/tablecmds.c:2318 -#: commands/tablecmds.c:2499 commands/tablecmds.c:10625 tcop/utility.c:1006 +#: commands/dropcmds.c:165 commands/sequence.c:424 commands/tablecmds.c:2367 +#: commands/tablecmds.c:2518 commands/tablecmds.c:2560 +#: commands/tablecmds.c:11266 tcop/utility.c:1104 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "no existe la relación «%s», ignorando" -#: commands/dropcmds.c:195 commands/dropcmds.c:288 commands/tablecmds.c:713 +#: commands/dropcmds.c:195 commands/dropcmds.c:292 commands/tablecmds.c:739 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "el esquema «%s» no existe, ignorando" -#: commands/dropcmds.c:237 commands/dropcmds.c:269 commands/tablecmds.c:237 +#: commands/dropcmds.c:237 commands/dropcmds.c:272 commands/tablecmds.c:243 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "el tipo «%s» no existe, ignorando" -#: commands/dropcmds.c:276 +#: commands/dropcmds.c:280 #, c-format msgid "collation \"%s\" does not exist, skipping" msgstr "no existe el ordenamiento (collation) «%s», ignorando" -#: commands/dropcmds.c:283 +#: commands/dropcmds.c:287 #, c-format msgid "conversion \"%s\" does not exist, skipping" msgstr "no existe la conversión «%s», ignorando" -#: commands/dropcmds.c:294 +#: commands/dropcmds.c:298 #, c-format msgid "text search parser \"%s\" does not exist, skipping" msgstr "el analizador de búsqueda en texto «%s» no existe, ignorando" -#: commands/dropcmds.c:301 +#: commands/dropcmds.c:305 #, c-format msgid "text search dictionary \"%s\" does not exist, skipping" msgstr "el diccionario de búsqueda en texto «%s» no existe, ignorando" -#: commands/dropcmds.c:308 +#: commands/dropcmds.c:312 #, c-format msgid "text search template \"%s\" does not exist, skipping" msgstr "la plantilla de búsqueda en texto «%s» no existe, ignorando" -#: commands/dropcmds.c:315 +#: commands/dropcmds.c:319 #, c-format msgid "text search configuration \"%s\" does not exist, skipping" msgstr "no existe la configuración de búsqueda en texto «%s», ignorando" -#: commands/dropcmds.c:320 +#: commands/dropcmds.c:324 #, c-format msgid "extension \"%s\" does not exist, skipping" msgstr "no existe la extensión «%s», ignorando" -#: commands/dropcmds.c:327 +#: commands/dropcmds.c:331 #, c-format msgid "function %s(%s) does not exist, skipping" msgstr "no existe la función %s(%s), ignorando" -#: commands/dropcmds.c:336 +#: commands/dropcmds.c:340 #, c-format msgid "aggregate %s(%s) does not exist, skipping" msgstr "la función de agregación %s(%s) no existe, ignorando" -#: commands/dropcmds.c:345 +#: commands/dropcmds.c:349 #, c-format msgid "operator %s does not exist, skipping" msgstr "el operador %s no existe, ignorando" -#: commands/dropcmds.c:350 +#: commands/dropcmds.c:354 #, c-format msgid "language \"%s\" does not exist, skipping" msgstr "el lenguaje «%s» no existe, ignorando" -#: commands/dropcmds.c:359 +#: commands/dropcmds.c:363 #, c-format msgid "cast from type %s to type %s does not exist, skipping" msgstr "no existe la conversión del tipo %s al tipo %s, ignorando" -#: commands/dropcmds.c:368 +#: commands/dropcmds.c:372 +#, fuzzy, c-format +msgid "transform for type %s language \"%s\" does not exist, skipping" +msgstr "el lenguaje «%s» no existe, ignorando" + +#: commands/dropcmds.c:380 #, c-format msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" msgstr "disparador «%s» para la relación «%s» no existe, ignorando" -#: commands/dropcmds.c:375 +#: commands/dropcmds.c:389 +#, fuzzy, c-format +msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" +msgstr "la regla «%s» para la relación «%s» no existe, ignorando" + +#: commands/dropcmds.c:396 #, c-format msgid "event trigger \"%s\" does not exist, skipping" msgstr "el disparador por eventos «%s» no existe, ignorando" -#: commands/dropcmds.c:381 +#: commands/dropcmds.c:402 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" msgstr "la regla «%s» para la relación «%s» no existe, ignorando" -#: commands/dropcmds.c:388 +#: commands/dropcmds.c:409 #, c-format msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "no existe el conector de datos externos «%s», ignorando" -#: commands/dropcmds.c:392 +#: commands/dropcmds.c:413 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "el servidor «%s» no existe, ignorando" -#: commands/dropcmds.c:398 +#: commands/dropcmds.c:422 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\", skipping" msgstr "no existe la clase de operadores «%s» para el método de acceso «%s», ignorando" -#: commands/dropcmds.c:406 +#: commands/dropcmds.c:434 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\", skipping" msgstr "no existe la familia de operadores «%s» para el método de acceso «%s», ignorando" -#: commands/event_trigger.c:149 +#: commands/event_trigger.c:181 #, c-format msgid "permission denied to create event trigger \"%s\"" msgstr "se ha denegado el permiso para crear el disparador por eventos «%s»" -#: commands/event_trigger.c:151 +#: commands/event_trigger.c:183 #, c-format msgid "Must be superuser to create an event trigger." msgstr "Debe ser superusuario para crear un disparador por eventos." -#: commands/event_trigger.c:159 +#: commands/event_trigger.c:192 #, c-format msgid "unrecognized event name \"%s\"" msgstr "nomre de evento no reconocido «%s»" -#: commands/event_trigger.c:176 +#: commands/event_trigger.c:209 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "variable de filtro «%s» no reconocida" -#: commands/event_trigger.c:203 +#: commands/event_trigger.c:239 #, c-format msgid "function \"%s\" must return type \"event_trigger\"" msgstr "la función «%s» debe retornar tipo «event_trigger»" -#: commands/event_trigger.c:228 +#: commands/event_trigger.c:264 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "el valor de filtro «%s» no es reconocido por la variable de filtro «%s»" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:234 +#: commands/event_trigger.c:270 commands/event_trigger.c:340 #, c-format msgid "event triggers are not supported for %s" msgstr "los disparadores por eventos no están soportados para %s" -#: commands/event_trigger.c:289 +#: commands/event_trigger.c:363 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "la variable de filtro «%s» fue especificada más de una vez" -#: commands/event_trigger.c:437 commands/event_trigger.c:480 -#: commands/event_trigger.c:571 +#: commands/event_trigger.c:511 commands/event_trigger.c:555 +#: commands/event_trigger.c:648 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "no existe el disparador por eventos «%s»" -#: commands/event_trigger.c:539 +#: commands/event_trigger.c:616 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "se ha denegado el permiso para cambiar el dueño del disparador por eventos «%s»" -#: commands/event_trigger.c:541 +#: commands/event_trigger.c:618 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "El dueño de un disparador por eventos debe ser un superusuario." -#: commands/event_trigger.c:1219 +#: commands/event_trigger.c:1439 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%s sólo puede invocarse en una función de un disparador en el evento sql_drop" -#: commands/event_trigger.c:1226 commands/extension.c:1646 -#: commands/extension.c:1755 commands/extension.c:1948 commands/prepare.c:702 -#: executor/execQual.c:1739 executor/execQual.c:1764 executor/execQual.c:2139 -#: executor/execQual.c:5315 executor/functions.c:1018 foreign/foreign.c:421 -#: replication/logical/logicalfuncs.c:310 replication/slotfuncs.c:173 -#: replication/walsender.c:2746 utils/adt/jsonfuncs.c:1386 -#: utils/adt/jsonfuncs.c:1518 utils/adt/jsonfuncs.c:1708 -#: utils/adt/jsonfuncs.c:1837 utils/adt/jsonfuncs.c:2601 -#: utils/fmgr/funcapi.c:61 utils/mmgr/portalmem.c:986 +#: commands/event_trigger.c:1446 commands/event_trigger.c:1997 +#: commands/extension.c:1645 commands/extension.c:1754 +#: commands/extension.c:1947 commands/prepare.c:701 executor/execQual.c:1735 +#: executor/execQual.c:1760 executor/execQual.c:2135 executor/execQual.c:5376 +#: executor/functions.c:1021 foreign/foreign.c:491 +#: replication/logical/logicalfuncs.c:312 replication/logical/origin.c:1410 +#: replication/slotfuncs.c:173 replication/walsender.c:2742 +#: utils/adt/jsonfuncs.c:1474 utils/adt/jsonfuncs.c:1606 +#: utils/adt/jsonfuncs.c:1796 utils/adt/jsonfuncs.c:1925 +#: utils/adt/jsonfuncs.c:2693 utils/adt/pgstatfuncs.c:547 +#: utils/fmgr/funcapi.c:61 utils/misc/guc.c:8175 utils/mmgr/portalmem.c:1052 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "se llamó una función que retorna un conjunto en un contexto que no puede aceptarlo" -#: commands/event_trigger.c:1230 commands/extension.c:1650 -#: commands/extension.c:1759 commands/extension.c:1952 commands/prepare.c:706 -#: foreign/foreign.c:426 replication/logical/logicalfuncs.c:314 -#: replication/slotfuncs.c:177 replication/walsender.c:2750 -#: utils/mmgr/portalmem.c:990 +#: commands/event_trigger.c:1450 commands/event_trigger.c:2001 +#: commands/extension.c:1649 commands/extension.c:1758 +#: commands/extension.c:1951 commands/prepare.c:705 foreign/foreign.c:496 +#: replication/logical/logicalfuncs.c:316 replication/logical/origin.c:1414 +#: replication/slotfuncs.c:177 replication/walsender.c:2746 +#: utils/adt/pgstatfuncs.c:551 utils/misc/guc.c:8179 +#: utils/mmgr/portalmem.c:1056 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "se requiere un nodo «materialize», pero no está permitido en este contexto" -#: commands/explain.c:169 +#: commands/event_trigger.c:1559 commands/event_trigger.c:1580 +#, fuzzy, c-format +msgid "%s can only be called in a table_rewrite event trigger function" +msgstr "%s sólo puede invocarse en una función de un disparador en el evento sql_drop" + +#: commands/event_trigger.c:1990 +#, fuzzy, c-format +msgid "%s can only be called in an event trigger function" +msgstr "%s sólo puede invocarse en una función de un disparador en el evento sql_drop" + +#: commands/explain.c:184 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "valor no reconocido para la opción de EXPLAIN «%s»: «%s»" -#: commands/explain.c:175 +#: commands/explain.c:190 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "opción de EXPLAIN no reconocida «%s»" -#: commands/explain.c:182 +#: commands/explain.c:197 #, c-format msgid "EXPLAIN option BUFFERS requires ANALYZE" msgstr "la opción BUFFERS de EXPLAIN requiere ANALYZE" -#: commands/explain.c:191 +#: commands/explain.c:206 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "la opción TIMING de EXPLAIN requiere ANALYZE" -#: commands/extension.c:148 commands/extension.c:2628 +#: commands/extension.c:152 commands/extension.c:2635 #, c-format msgid "extension \"%s\" does not exist" msgstr "no existe la extensión «%s»" -#: commands/extension.c:247 commands/extension.c:256 commands/extension.c:268 -#: commands/extension.c:278 +#: commands/extension.c:251 commands/extension.c:260 commands/extension.c:272 +#: commands/extension.c:282 #, c-format msgid "invalid extension name: \"%s\"" msgstr "nombre de extensión no válido: «%s»" -#: commands/extension.c:248 +#: commands/extension.c:252 #, c-format msgid "Extension names must not be empty." msgstr "Los nombres de extensión no deben ser vacíos." -#: commands/extension.c:257 +#: commands/extension.c:261 #, c-format msgid "Extension names must not contain \"--\"." msgstr "Los nombres de extensión no deben contener «--»." -#: commands/extension.c:269 +#: commands/extension.c:273 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "Los nombres de extensión no deben empezar ni terminar con «-»." -#: commands/extension.c:279 +#: commands/extension.c:283 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "Los nombres de extensión no deben contener caracteres separadores de directorio." -#: commands/extension.c:294 commands/extension.c:303 commands/extension.c:312 -#: commands/extension.c:322 +#: commands/extension.c:298 commands/extension.c:307 commands/extension.c:316 +#: commands/extension.c:326 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "nombre de versión de extensión no válido: «%s»" -#: commands/extension.c:295 +#: commands/extension.c:299 #, c-format msgid "Version names must not be empty." msgstr "Los nombres de versión no deben ser vacíos." -#: commands/extension.c:304 +#: commands/extension.c:308 #, c-format msgid "Version names must not contain \"--\"." msgstr "Los nombres de versión no deben contener «--»." -#: commands/extension.c:313 +#: commands/extension.c:317 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "Los nombres de versión no deben empezar ni terminar con «-»." -#: commands/extension.c:323 +#: commands/extension.c:327 #, c-format msgid "Version names must not contain directory separator characters." msgstr "Los nombres de versión no deben contener caracteres separadores de directorio." -#: commands/extension.c:473 +#: commands/extension.c:477 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "no se pudo abrir el archivo de control de extensión «%s»: %m" -#: commands/extension.c:495 commands/extension.c:505 +#: commands/extension.c:499 commands/extension.c:509 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "el parámetro «%s» no se puede cambiar en un archivo control secundario de extensión" -#: commands/extension.c:544 +#: commands/extension.c:548 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "«%s» no es un nombre válido de codificación" -#: commands/extension.c:558 +#: commands/extension.c:562 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "el parámetro «%s» debe ser una lista de nombres de extensión" -#: commands/extension.c:565 +#: commands/extension.c:569 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "parámetro no reconocido «%s» en el archivo «%s»" -#: commands/extension.c:574 +#: commands/extension.c:578 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "el parámetro «schema» no puede ser especificado cuando «relocatable» es verdadero" -#: commands/extension.c:722 +#: commands/extension.c:719 #, c-format msgid "transaction control statements are not allowed within an extension script" msgstr "las sentencias de control de transacción no están permitidos dentro de un guión de transacción" -#: commands/extension.c:790 +#: commands/extension.c:787 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "se ha denegado el permiso para crear la extensión «%s»" -#: commands/extension.c:792 +#: commands/extension.c:789 #, c-format msgid "Must be superuser to create this extension." msgstr "Debe ser superusuario para crear esta extensión." -#: commands/extension.c:796 +#: commands/extension.c:793 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "se ha denegado el permiso para actualizar la extensión «%s»" -#: commands/extension.c:798 +#: commands/extension.c:795 #, c-format msgid "Must be superuser to update this extension." msgstr "Debe ser superusuario para actualizar esta extensión." -#: commands/extension.c:1080 +#: commands/extension.c:1077 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "la extensión «%s» no tiene ruta de actualización desde la versión «%s» hasta la versión «%s»" -#: commands/extension.c:1207 +#: commands/extension.c:1205 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "la extensión «%s» ya existe, ignorando" -#: commands/extension.c:1214 +#: commands/extension.c:1212 #, c-format msgid "extension \"%s\" already exists" msgstr "la extensión «%s» ya existe" -#: commands/extension.c:1225 +#: commands/extension.c:1223 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "los CREATE EXTENSION anidados no están soportados" -#: commands/extension.c:1280 commands/extension.c:2688 +#: commands/extension.c:1278 commands/extension.c:2695 #, c-format msgid "version to install must be specified" msgstr "la versión a instalar debe ser especificada" -#: commands/extension.c:1297 +#: commands/extension.c:1295 #, c-format msgid "FROM version must be different from installation target version \"%s\"" msgstr "la versión FROM debe ser diferente de la versión destino de instalación «%s»" -#: commands/extension.c:1352 +#: commands/extension.c:1350 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "la extensión «%s» debe ser instalada en el esquema «%s»" -#: commands/extension.c:1436 commands/extension.c:2831 +#: commands/extension.c:1434 commands/extension.c:2840 #, c-format msgid "required extension \"%s\" is not installed" msgstr "la extensión requerida «%s» no está instalada" -#: commands/extension.c:1598 +#: commands/extension.c:1597 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "no se puede eliminar la extensión «%s» porque está siendo modificada" -#: commands/extension.c:2069 +#: commands/extension.c:2068 #, c-format msgid "pg_extension_config_dump() can only be called from an SQL script executed by CREATE EXTENSION" msgstr "pg_extension_config_dump() sólo puede ser llamado desde un guión SQL ejecutado por CREATE EXTENSION" -#: commands/extension.c:2081 +#: commands/extension.c:2080 #, c-format msgid "OID %u does not refer to a table" msgstr "el OID %u no hace referencia a una tabla" -#: commands/extension.c:2086 +#: commands/extension.c:2085 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "el tabla «%s» no es un miembro de la extensión que se está creando" @@ -5466,32 +6114,37 @@ msgstr "la extensión «%s» no soporta SET SCHEMA" msgid "%s is not in the extension's schema \"%s\"" msgstr "%s no está en el esquema de la extensión, «%s»" -#: commands/extension.c:2608 +#: commands/extension.c:2615 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "los ALTER EXTENSION anidados no están soportados" -#: commands/extension.c:2699 +#: commands/extension.c:2706 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "la versión «%s» de la extensión «%s» ya está instalada" -#: commands/extension.c:2938 +#: commands/extension.c:2957 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "no se puede agregar el esquema «%s» a la extensión «%s» porque el esquema contiene la extensión" -#: commands/extension.c:2956 +#: commands/extension.c:2975 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s no es un miembro de la extensión «%s»" -#: commands/foreigncmds.c:138 commands/foreigncmds.c:147 +#: commands/extension.c:3031 +#, fuzzy, c-format +msgid "file too large" +msgstr "el tsquery es demasiado grande" + +#: commands/foreigncmds.c:150 commands/foreigncmds.c:159 #, c-format msgid "option \"%s\" not found" msgstr "opción «%s» no encontrada" -#: commands/foreigncmds.c:157 +#: commands/foreigncmds.c:169 #, c-format msgid "option \"%s\" provided more than once" msgstr "la opción «%s» fue especificada más de una vez" @@ -5511,595 +6164,669 @@ msgstr "Debe ser superusuario para cambiar el dueño de un conector de datos ext msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "El dueño de un conector de datos externos debe ser un superusuario." -#: commands/foreigncmds.c:271 commands/foreigncmds.c:655 foreign/foreign.c:600 +#: commands/foreigncmds.c:292 commands/foreigncmds.c:709 foreign/foreign.c:670 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "no existe el conector de datos externos «%s»" -#: commands/foreigncmds.c:380 commands/foreigncmds.c:944 -#: commands/foreigncmds.c:1285 foreign/foreign.c:621 -#, c-format -msgid "server \"%s\" does not exist" -msgstr "no existe el servidor «%s»" - -#: commands/foreigncmds.c:436 +#: commands/foreigncmds.c:489 #, c-format msgid "function %s must return type \"fdw_handler\"" msgstr "la función %s debe retornar tipo «fdw_handler»" -#: commands/foreigncmds.c:531 +#: commands/foreigncmds.c:584 #, 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:533 +#: commands/foreigncmds.c:586 #, 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:645 +#: commands/foreigncmds.c:699 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "permiso denegado para cambiar el conector de datos externos «%s»" -#: commands/foreigncmds.c:647 +#: commands/foreigncmds.c:701 #, 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:678 +#: commands/foreigncmds.c:732 #, 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:693 +#: commands/foreigncmds.c:747 #, 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:1106 +#: commands/foreigncmds.c:1165 #, c-format msgid "user mapping \"%s\" already exists for server %s" msgstr "ya existe un mapeo para el usuario «%s» en el servidor %s" -#: commands/foreigncmds.c:1194 commands/foreigncmds.c:1301 +#: commands/foreigncmds.c:1259 commands/foreigncmds.c:1375 #, c-format msgid "user mapping \"%s\" does not exist for the server" msgstr "no existe el mapeo para el usuario «%s» para el servidor" -#: commands/foreigncmds.c:1288 +#: commands/foreigncmds.c:1362 #, c-format msgid "server does not exist, skipping" msgstr "el servidor no existe, ignorando" -#: commands/foreigncmds.c:1306 +#: commands/foreigncmds.c:1380 #, c-format msgid "user mapping \"%s\" does not exist for the server, skipping" msgstr "el mapeo para el usuario «%s» no existe para el servidor, ignorando" -#: commands/functioncmds.c:98 +#: commands/foreigncmds.c:1532 foreign/foreign.c:360 +#, c-format +msgid "foreign-data wrapper \"%s\" has no handler" +msgstr "el conector de datos externos «%s» no tiene manejador" + +#: commands/foreigncmds.c:1538 +#, fuzzy, c-format +msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" +msgstr "no existe el conector de datos externos «%s»" + +#: commands/foreigncmds.c:1631 +#, fuzzy, c-format +msgid "importing foreign table \"%s\"" +msgstr "no se puede insertar en la tabla foránea «%s»" + +#: commands/functioncmds.c:99 #, c-format msgid "SQL function cannot return shell type %s" msgstr "una función SQL no puede retornar el tipo inconcluso %s" -#: commands/functioncmds.c:103 +#: commands/functioncmds.c:104 #, c-format msgid "return type %s is only a shell" msgstr "el tipo de retorno %s está inconcluso" -#: commands/functioncmds.c:132 parser/parse_type.c:333 +#: commands/functioncmds.c:134 parser/parse_type.c:338 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "no se puede especificar un modificador de tipo para el tipo inconcluso «%s»" -#: commands/functioncmds.c:138 +#: commands/functioncmds.c:140 #, c-format msgid "type \"%s\" is not yet defined" msgstr "el tipo «%s» no ha sido definido aún" -#: commands/functioncmds.c:139 +#: commands/functioncmds.c:141 #, c-format msgid "Creating a shell type definition." msgstr "Creando una definición de tipo inconclusa." -#: commands/functioncmds.c:236 +#: commands/functioncmds.c:239 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "las funciones SQL no pueden aceptar el tipo inconcluso %s" -#: commands/functioncmds.c:242 +#: commands/functioncmds.c:245 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "las funciones de agregación no pueden aceptar el tipo inconcluso %s" -#: commands/functioncmds.c:247 +#: commands/functioncmds.c:250 #, c-format msgid "argument type %s is only a shell" msgstr "el tipo de argumento %s está inconcluso" -#: commands/functioncmds.c:257 +#: commands/functioncmds.c:260 #, c-format msgid "type %s does not exist" msgstr "no existe el tipo %s" -#: commands/functioncmds.c:271 +#: commands/functioncmds.c:274 #, c-format msgid "aggregates cannot accept set arguments" msgstr "las funciones de agregación no pueden aceptar argumentos complejos" -#: commands/functioncmds.c:275 +#: commands/functioncmds.c:278 #, c-format msgid "functions cannot accept set arguments" msgstr "funciones no pueden aceptar argumentos de conjunto" -#: commands/functioncmds.c:285 +#: commands/functioncmds.c:288 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "el parámetro VARIADIC debe ser el último parámetro de entrada" -#: commands/functioncmds.c:313 +#: commands/functioncmds.c:316 #, c-format msgid "VARIADIC parameter must be an array" msgstr "el parámetro VARIADIC debe ser un array" -#: commands/functioncmds.c:353 +#: commands/functioncmds.c:356 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "el nombre de parámetro «%s» fue usado más de una vez" -#: commands/functioncmds.c:368 +#: commands/functioncmds.c:371 #, c-format msgid "only input parameters can have default values" msgstr "solo los parámetros de entrada pueden tener valores por omisión" -#: commands/functioncmds.c:383 +#: commands/functioncmds.c:386 #, c-format msgid "cannot use table references in parameter default value" msgstr "no se pueden usar referencias a tablas en el valor por omisión de un parámetro" -#: commands/functioncmds.c:407 +#: commands/functioncmds.c:410 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "los parámetros de entrada después de uno que tenga valor por omisión también deben tener valores por omisión" -#: commands/functioncmds.c:657 +#: commands/functioncmds.c:670 #, c-format msgid "no function body specified" msgstr "no se ha especificado un cuerpo para la función" -#: commands/functioncmds.c:667 +#: commands/functioncmds.c:680 #, c-format msgid "no language specified" msgstr "no se ha especificado el lenguaje" -#: commands/functioncmds.c:690 commands/functioncmds.c:1149 +#: commands/functioncmds.c:705 commands/functioncmds.c:1205 #, c-format msgid "COST must be positive" msgstr "COST debe ser positivo" -#: commands/functioncmds.c:698 commands/functioncmds.c:1157 +#: commands/functioncmds.c:713 commands/functioncmds.c:1213 #, c-format msgid "ROWS must be positive" msgstr "ROWS debe ser positivo" -#: commands/functioncmds.c:737 +#: commands/functioncmds.c:752 #, c-format msgid "unrecognized function attribute \"%s\" ignored" msgstr "se ignoró el atributo de función no reconocido «%s»" -#: commands/functioncmds.c:788 +#: commands/functioncmds.c:803 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "sólo se requiere un item AS para el lenguaje «%s»" -#: commands/functioncmds.c:877 commands/functioncmds.c:1734 -#: commands/proclang.c:553 +#: commands/functioncmds.c:894 commands/functioncmds.c:2079 +#: commands/proclang.c:560 #, c-format msgid "language \"%s\" does not exist" msgstr "no existe el lenguaje «%s»" -#: commands/functioncmds.c:879 commands/functioncmds.c:1736 +#: commands/functioncmds.c:896 commands/functioncmds.c:2081 #, c-format msgid "Use CREATE LANGUAGE to load the language into the database." msgstr "Usar CREATE LANGUAGE para instalar el lenguaje en la base de datos." -#: commands/functioncmds.c:914 commands/functioncmds.c:1140 +#: commands/functioncmds.c:931 commands/functioncmds.c:1197 #, c-format msgid "only superuser can define a leakproof function" msgstr "sólo un superusuario puede definir funciones «leakproof»" -#: commands/functioncmds.c:940 +#: commands/functioncmds.c:975 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "tipo de retorno de función debe ser %s debido a los parámetros OUT" -#: commands/functioncmds.c:953 +#: commands/functioncmds.c:988 #, c-format msgid "function result type must be specified" msgstr "el tipo de retorno de la función debe ser especificado" -#: commands/functioncmds.c:988 commands/functioncmds.c:1161 +#: commands/functioncmds.c:1042 commands/functioncmds.c:1217 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS no es aplicable cuando una función no retorna un conjunto" -#: commands/functioncmds.c:1314 +#: commands/functioncmds.c:1372 #, c-format msgid "source data type %s is a pseudo-type" msgstr "el tipo de origen %s es un pseudotipo" -#: commands/functioncmds.c:1320 +#: commands/functioncmds.c:1378 #, c-format msgid "target data type %s is a pseudo-type" msgstr "el tipo de retorno %s es un pseudotipo" -#: commands/functioncmds.c:1344 +#: commands/functioncmds.c:1402 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "el cast será ignorado porque el tipo de datos de origen es un dominio" -#: commands/functioncmds.c:1349 +#: commands/functioncmds.c:1407 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "el cast será ignorado porque el tipo de datos de destino es un dominio" -#: commands/functioncmds.c:1376 +#: commands/functioncmds.c:1434 #, c-format msgid "cast function must take one to three arguments" msgstr "la función de conversión lleva de uno a tres argumentos" -#: commands/functioncmds.c:1380 +#: commands/functioncmds.c:1438 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "el argumento de la función de conversión debe coincidir o ser binario-convertible con el tipo de origen" -#: commands/functioncmds.c:1384 +#: commands/functioncmds.c:1442 #, c-format msgid "second argument of cast function must be type integer" msgstr "el segundo argumento de la función de conversión debe ser entero" -#: commands/functioncmds.c:1388 +#: commands/functioncmds.c:1446 #, c-format msgid "third argument of cast function must be type boolean" msgstr "el tercer argumento de la función de conversión debe ser de tipo boolean" -#: commands/functioncmds.c:1392 +#: commands/functioncmds.c:1450 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "el tipo de salida de la función de conversión debe coincidir o ser binario-convertible con el tipo de retorno" -#: commands/functioncmds.c:1403 +#: commands/functioncmds.c:1461 #, c-format msgid "cast function must not be volatile" msgstr "la función de conversión no debe ser volatile" -#: commands/functioncmds.c:1408 +#: commands/functioncmds.c:1466 #, c-format msgid "cast function must not be an aggregate function" msgstr "la función de conversión no debe ser una función de agregación" -#: commands/functioncmds.c:1412 +#: commands/functioncmds.c:1470 #, c-format msgid "cast function must not be a window function" msgstr "la función de conversión no debe ser una función de ventana deslizante" -#: commands/functioncmds.c:1416 +#: commands/functioncmds.c:1474 #, c-format msgid "cast function must not return a set" msgstr "la función de conversión no debe retornar un conjunto" -#: commands/functioncmds.c:1442 +#: commands/functioncmds.c:1500 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "debe ser superusuario para crear una conversión sin especificar función" -#: commands/functioncmds.c:1457 +#: commands/functioncmds.c:1515 #, c-format msgid "source and target data types are not physically compatible" msgstr "los tipos de datos de origen y destino no son físicamente compatibles" -#: commands/functioncmds.c:1472 +#: commands/functioncmds.c:1530 #, c-format msgid "composite data types are not binary-compatible" msgstr "los tipos de datos compuestos no son binario-compatibles" -#: commands/functioncmds.c:1478 +#: commands/functioncmds.c:1536 #, c-format msgid "enum data types are not binary-compatible" msgstr "los tipos de datos enum no son binario-compatibles" -#: commands/functioncmds.c:1484 +#: commands/functioncmds.c:1542 #, c-format msgid "array data types are not binary-compatible" msgstr "los tipos de datos de array no son binario-compatibles" -#: commands/functioncmds.c:1501 +#: commands/functioncmds.c:1559 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "los tipos de dato de dominio no deben ser marcados binario-compatibles" -#: commands/functioncmds.c:1511 +#: commands/functioncmds.c:1569 #, c-format msgid "source data type and target data type are the same" msgstr "el tipo de origen y el tipo de retorno son el mismo" -#: commands/functioncmds.c:1544 +#: commands/functioncmds.c:1602 #, c-format msgid "cast from type %s to type %s already exists" msgstr "ya existe una conversión del tipo %s al tipo %s" -#: commands/functioncmds.c:1619 +#: commands/functioncmds.c:1677 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "no existe la conversión del tipo %s al tipo %s" -#: commands/functioncmds.c:1668 +#: commands/functioncmds.c:1716 +#, fuzzy, c-format +msgid "transform function must not be volatile" +msgstr "la función de conversión no debe ser volatile" + +#: commands/functioncmds.c:1720 +#, fuzzy, c-format +msgid "transform function must not be an aggregate function" +msgstr "la función de conversión no debe ser una función de agregación" + +#: commands/functioncmds.c:1724 +#, fuzzy, c-format +msgid "transform function must not be a window function" +msgstr "la función de conversión no debe ser una función de ventana deslizante" + +#: commands/functioncmds.c:1728 +#, fuzzy, c-format +msgid "transform function must not return a set" +msgstr "la función de conversión no debe retornar un conjunto" + +#: commands/functioncmds.c:1732 +#, fuzzy, c-format +msgid "transform function must take one argument" +msgstr "la función de conversión lleva de uno a tres argumentos" + +#: commands/functioncmds.c:1736 +#, fuzzy, c-format +msgid "first argument of transform function must be type \"internal\"" +msgstr "el segundo argumento de la función de conversión debe ser entero" + +#: commands/functioncmds.c:1773 +#, fuzzy, c-format +msgid "data type %s is a pseudo-type" +msgstr "el tipo de origen %s es un pseudotipo" + +#: commands/functioncmds.c:1779 +#, fuzzy, c-format +msgid "data type %s is a domain" +msgstr "tipo «%s» no es un dominio" + +#: commands/functioncmds.c:1819 +#, fuzzy, c-format +msgid "return data type of FROM SQL function must be \"internal\"" +msgstr "el tipo de salida de la función de conversión debe coincidir o ser binario-convertible con el tipo de retorno" + +#: commands/functioncmds.c:1844 +#, fuzzy, c-format +msgid "return data type of TO SQL function must be the transform data type" +msgstr "el tipo de salida de la función de conversión debe coincidir o ser binario-convertible con el tipo de retorno" + +#: commands/functioncmds.c:1871 +#, fuzzy, c-format +msgid "transform for type %s language \"%s\" already exists" +msgstr "ya existe el lenguaje «%s»" + +#: commands/functioncmds.c:1962 +#, fuzzy, c-format +msgid "transform for type %s language \"%s\" does not exist" +msgstr "no existe el lenguaje «%s»" + +#: commands/functioncmds.c:2013 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "ya existe una función llamada %s en el esquema «%s»" -#: commands/functioncmds.c:1721 +#: commands/functioncmds.c:2066 #, c-format msgid "no inline code specified" msgstr "no se ha especificado código" -#: commands/functioncmds.c:1766 +#: commands/functioncmds.c:2111 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "el lenguaje «%s» no soporta ejecución de código en línea" -#: commands/indexcmds.c:159 commands/indexcmds.c:486 -#: commands/opclasscmds.c:370 commands/opclasscmds.c:790 +#: commands/indexcmds.c:159 commands/indexcmds.c:487 +#: commands/opclasscmds.c:360 commands/opclasscmds.c:786 #: commands/opclasscmds.c:1749 #, c-format msgid "access method \"%s\" does not exist" msgstr "no existe el método de acceso «%s»" -#: commands/indexcmds.c:340 +#: commands/indexcmds.c:341 #, c-format msgid "must specify at least one column" msgstr "debe especificar al menos una columna" -#: commands/indexcmds.c:344 +#: commands/indexcmds.c:345 #, c-format msgid "cannot use more than %d columns in an index" msgstr "no se puede usar más de %d columnas en un índice" -#: commands/indexcmds.c:375 +#: commands/indexcmds.c:376 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "no se puede crear un índice en la tabla foránea «%s»" -#: commands/indexcmds.c:390 +#: commands/indexcmds.c:391 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "no se pueden crear índices en tablas temporales de otras sesiones" -#: commands/indexcmds.c:445 commands/tablecmds.c:525 commands/tablecmds.c:9101 +#: commands/indexcmds.c:446 commands/tablecmds.c:539 commands/tablecmds.c:9539 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "sólo relaciones compartidas pueden ser puestas en el tablespace pg_global" -#: commands/indexcmds.c:478 +#: commands/indexcmds.c:479 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "sustituyendo el método de acceso obsoleto «rtree» por «gist»" -#: commands/indexcmds.c:495 +#: commands/indexcmds.c:496 +#, c-format +msgid "hash indexes are not WAL-logged and their use is discouraged" +msgstr "" + +#: commands/indexcmds.c:501 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "el método de acceso «%s» no soporta índices únicos" -#: commands/indexcmds.c:500 +#: commands/indexcmds.c:506 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "el método de acceso «%s» no soporta índices multicolumna" -#: commands/indexcmds.c:505 +#: commands/indexcmds.c:511 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "el método de acceso «%s» no soporta restricciones por exclusión" -#: commands/indexcmds.c:584 +#: commands/indexcmds.c:590 #, c-format msgid "%s %s will create implicit index \"%s\" for table \"%s\"" msgstr "%s %s creará el índice implícito «%s» para la tabla «%s»" -#: commands/indexcmds.c:922 +#: commands/indexcmds.c:937 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "las funciones utilizadas en predicados de índice deben estar marcadas IMMUTABLE" -#: commands/indexcmds.c:988 parser/parse_utilcmd.c:1797 +#: commands/indexcmds.c:1003 parser/parse_utilcmd.c:1844 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "no existe la columna «%s» en la llave" -#: commands/indexcmds.c:1048 +#: commands/indexcmds.c:1063 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "las funciones utilizadas en expresiones de índice deben estar marcadas IMMUTABLE" -#: commands/indexcmds.c:1071 +#: commands/indexcmds.c:1086 #, c-format msgid "could not determine which collation to use for index expression" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de índice" -#: commands/indexcmds.c:1079 commands/typecmds.c:782 parser/parse_expr.c:2278 -#: parser/parse_type.c:546 parser/parse_utilcmd.c:2648 utils/adt/misc.c:520 +#: commands/indexcmds.c:1094 commands/typecmds.c:825 parser/parse_expr.c:2559 +#: parser/parse_type.c:551 parser/parse_utilcmd.c:2736 utils/adt/misc.c:546 #, c-format msgid "collations are not supported by type %s" msgstr "los ordenamientos (collation) no están soportados por el tipo %s" -#: commands/indexcmds.c:1117 +#: commands/indexcmds.c:1132 #, c-format msgid "operator %s is not commutative" msgstr "el operador %s no es conmutativo" -#: commands/indexcmds.c:1119 +#: commands/indexcmds.c:1134 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "Sólo operadores conmutativos pueden ser usados en restricciones de exclusión." -#: commands/indexcmds.c:1145 +#: commands/indexcmds.c:1160 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "el operador %s no es un miembro de la familia de operadores «%s»" -#: commands/indexcmds.c:1148 +#: commands/indexcmds.c:1163 #, c-format msgid "The exclusion operator must be related to the index operator class for the constraint." msgstr "El operador de exclusión debe estar relacionado con la clase de operadores del índice para la restricción." -#: commands/indexcmds.c:1183 +#: commands/indexcmds.c:1198 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "el método de acceso «%s» no soporta las opciones ASC/DESC" -#: commands/indexcmds.c:1188 +#: commands/indexcmds.c:1203 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "el método de acceso «%s» no soporta las opciones NULLS FIRST/LAST" -#: commands/indexcmds.c:1244 commands/typecmds.c:1887 +#: commands/indexcmds.c:1259 commands/typecmds.c:1932 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "el tipo de dato %s no tiene una clase de operadores por omisión para el método de acceso «%s»" -#: commands/indexcmds.c:1246 +#: commands/indexcmds.c:1261 #, c-format msgid "You must specify an operator class for the index or define a default operator class for the data type." msgstr "Debe especificar una clase de operadores para el índice, o definir una clase de operadores por omisión para el tipo de datos." -#: commands/indexcmds.c:1275 commands/indexcmds.c:1283 -#: commands/opclasscmds.c:214 +#: commands/indexcmds.c:1290 commands/indexcmds.c:1298 +#: commands/opclasscmds.c:204 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "no existe la clase de operadores «%s» para el método de acceso «%s»" -#: commands/indexcmds.c:1296 commands/typecmds.c:1875 +#: commands/indexcmds.c:1311 commands/typecmds.c:1920 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "la clase de operadores «%s» no acepta el tipo de datos %s" -#: commands/indexcmds.c:1386 +#: commands/indexcmds.c:1401 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "hay múltiples clases de operadores por omisión para el tipo de datos %s" -#: commands/indexcmds.c:1762 +#: commands/indexcmds.c:1792 #, c-format msgid "table \"%s\" has no indexes" msgstr "la tabla «%s» no tiene índices" -#: commands/indexcmds.c:1792 +#: commands/indexcmds.c:1847 #, 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:1881 +#: commands/indexcmds.c:1949 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "la tabla «%s.%s» fue reindexada" -#: commands/matview.c:178 +#: commands/matview.c:181 #, c-format msgid "CONCURRENTLY cannot be used when the materialized view is not populated" msgstr "no se puede usar CONCURRENTLY cuando la vista materializada no contiene datos" -#: commands/matview.c:184 +#: commands/matview.c:187 #, c-format msgid "CONCURRENTLY and WITH NO DATA options cannot be used together" msgstr "las opciones CONCURRENTLY y WITH NO DATA no pueden usarse juntas" -#: commands/matview.c:591 +#: commands/matview.c:611 #, c-format msgid "new data for \"%s\" contains duplicate rows without any null columns" msgstr "nuevos datos para «%s» contiene filas duplicadas sin columnas nulas" -#: commands/matview.c:593 +#: commands/matview.c:613 #, c-format msgid "Row: %s" msgstr "Fila: %s" -#: commands/matview.c:681 +#: commands/matview.c:701 #, c-format msgid "cannot refresh materialized view \"%s\" concurrently" msgstr "no se puede refrescar la vista materializada «%s» concurrentemente" -#: commands/matview.c:683 +#: commands/matview.c:703 #, c-format msgid "Create a unique index with no WHERE clause on one or more columns of the materialized view." msgstr "Cree un índice único sin cláusula WHERE en una o más columnas de la vista materializada." -#: commands/opclasscmds.c:135 +#: commands/opclasscmds.c:125 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\"" msgstr "no existe la familia de operadores «%s» para el método de acceso «%s»" -#: commands/opclasscmds.c:273 +#: commands/opclasscmds.c:263 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "ya exista una familia de operadores «%s» para el método de acceso «%s»" -#: commands/opclasscmds.c:409 +#: commands/opclasscmds.c:399 #, c-format msgid "must be superuser to create an operator class" msgstr "debe ser superusuario para crear una clase de operadores" -#: commands/opclasscmds.c:480 commands/opclasscmds.c:866 -#: commands/opclasscmds.c:996 +#: commands/opclasscmds.c:473 commands/opclasscmds.c:859 +#: commands/opclasscmds.c:992 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "el número de operador %d es incorrecto, debe estar entre 1 y %d" -#: commands/opclasscmds.c:531 commands/opclasscmds.c:917 -#: commands/opclasscmds.c:1011 +#: commands/opclasscmds.c:524 commands/opclasscmds.c:910 +#: commands/opclasscmds.c:1007 #, c-format msgid "invalid procedure number %d, must be between 1 and %d" msgstr "el número de procedimiento %d no es válido, debe estar entre 1 y %d" -#: commands/opclasscmds.c:561 +#: commands/opclasscmds.c:554 #, c-format msgid "storage type specified more than once" msgstr "el tipo de almacenamiento fue especificado más de una vez" -#: commands/opclasscmds.c:588 +#: commands/opclasscmds.c:581 #, c-format msgid "storage type cannot be different from data type for access method \"%s\"" msgstr "el tipo de almacenamiento no puede ser diferente del tipo de dato para el método de acceso «%s»" -#: commands/opclasscmds.c:604 +#: commands/opclasscmds.c:597 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "ya exista una clase de operadores «%s» para el método de acceso «%s»" -#: commands/opclasscmds.c:632 +#: commands/opclasscmds.c:625 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "no se pudo hacer que «%s» sea la clase de operadores por omisión para el tipo %s" -#: commands/opclasscmds.c:635 +#: commands/opclasscmds.c:628 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "Actualmente, «%s» es la clase de operadores por omisión." -#: commands/opclasscmds.c:760 +#: commands/opclasscmds.c:756 #, c-format msgid "must be superuser to create an operator family" msgstr "debe ser superusuario para crear una familia de operadores" -#: commands/opclasscmds.c:816 +#: commands/opclasscmds.c:812 #, c-format msgid "must be superuser to alter an operator family" msgstr "debe ser superusuario para alterar una familia de operadores" -#: commands/opclasscmds.c:882 +#: commands/opclasscmds.c:875 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "los tipos de los argumentos de operador deben ser especificados en ALTER OPERATOR FAMILY" -#: commands/opclasscmds.c:946 +#: commands/opclasscmds.c:939 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "STORAGE no puede ser especificado en ALTER OPERATOR FAMILY" @@ -6199,46 +6926,81 @@ msgstr "ya existe una clase de operadores «%s» para el método de acceso «%s msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "ya existe una familia de operadores «%s» para el método de acceso «%s» en el esquema «%s»" -#: commands/operatorcmds.c:97 -#, c-format -msgid "=> is deprecated as an operator name" -msgstr "=> es un nombre obsoleto de operador" - -#: commands/operatorcmds.c:98 -#, c-format -msgid "This name may be disallowed altogether in future versions of PostgreSQL." -msgstr "Este nombre puede prohibirse por completo en futuras versiones de PostgreSQL." - -#: commands/operatorcmds.c:119 commands/operatorcmds.c:127 +#: commands/operatorcmds.c:109 commands/operatorcmds.c:117 #, c-format msgid "SETOF type not allowed for operator argument" msgstr "no se permite un tipo SETOF en los argumentos de un operador" -#: commands/operatorcmds.c:155 +#: commands/operatorcmds.c:145 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "el atributo de operador «%s» no es reconocido" -#: commands/operatorcmds.c:165 +#: commands/operatorcmds.c:155 #, c-format msgid "operator procedure must be specified" msgstr "debe especificarse un procedimiento de operador" -#: commands/operatorcmds.c:176 +#: commands/operatorcmds.c:166 #, c-format msgid "at least one of leftarg or rightarg must be specified" msgstr "debe especificar al menos uno de los argumentos izquierdo o derecho" -#: commands/operatorcmds.c:244 +#: commands/operatorcmds.c:234 #, c-format msgid "restriction estimator function %s must return type \"float8\"" msgstr "la función de estimación de restricción %s debe retornar tipo «float8»" -#: commands/operatorcmds.c:283 +#: commands/operatorcmds.c:273 #, c-format msgid "join estimator function %s must return type \"float8\"" msgstr "la función de estimación de join %s debe retornar tipo «float8»" +#: commands/policy.c:87 commands/policy.c:387 commands/tablecmds.c:964 +#: commands/tablecmds.c:1306 commands/tablecmds.c:2174 +#: commands/tablecmds.c:4308 commands/tablecmds.c:6240 +#: commands/tablecmds.c:11816 commands/tablecmds.c:11851 +#: commands/trigger.c:240 commands/trigger.c:1126 commands/trigger.c:1234 +#: rewrite/rewriteDefine.c:273 rewrite/rewriteDefine.c:905 +#, c-format +msgid "permission denied: \"%s\" is a system catalog" +msgstr "permiso denegado: «%s» es un catálogo de sistema" + +#: commands/policy.c:170 +#, fuzzy, c-format +msgid "ignoring roles specified other than public" +msgstr "el tipo de almacenamiento fue especificado más de una vez" + +#: commands/policy.c:171 +#, c-format +msgid "All roles are members of the public role." +msgstr "" + +#: commands/policy.c:451 +#, fuzzy, c-format +msgid "WITH CHECK cannot be applied to SELECT or DELETE" +msgstr "%s no puede ser aplicado a VALUES" + +#: commands/policy.c:460 commands/policy.c:760 +#, c-format +msgid "only WITH CHECK expression allowed for INSERT" +msgstr "" + +#: commands/policy.c:533 commands/policy.c:886 +#, fuzzy, c-format +msgid "policy \"%s\" for table \"%s\" already exists" +msgstr "la codificación «%2$s» ya tiene un ordenamiento llamado «%1$s»" + +#: commands/policy.c:732 commands/policy.c:914 commands/policy.c:989 +#, fuzzy, c-format +msgid "policy \"%s\" for table \"%s\" does not exist" +msgstr "no existe el índice «%s» en la tabla «%s»" + +#: commands/policy.c:750 +#, c-format +msgid "only USING expression allowed for SELECT, DELETE" +msgstr "" + #: commands/portalcmds.c:61 commands/portalcmds.c:160 #: commands/portalcmds.c:212 #, c-format @@ -6246,17 +7008,12 @@ msgid "invalid cursor name: must not be empty" msgstr "el nombre de cursor no es válido: no debe ser vacío" #: commands/portalcmds.c:168 commands/portalcmds.c:222 -#: executor/execCurrent.c:67 utils/adt/xml.c:2386 utils/adt/xml.c:2553 +#: executor/execCurrent.c:67 utils/adt/xml.c:2391 utils/adt/xml.c:2558 #, c-format msgid "cursor \"%s\" does not exist" msgstr "no existe el cursor «%s»" -#: commands/portalcmds.c:341 tcop/pquery.c:740 tcop/pquery.c:1404 -#, c-format -msgid "portal \"%s\" cannot be run" -msgstr "el portal «%s» no puede ser ejecutado" - -#: commands/portalcmds.c:411 +#: commands/portalcmds.c:407 #, c-format msgid "could not reposition held cursor" msgstr "no se pudo reposicionar cursor abierto" @@ -6266,7 +7023,7 @@ msgstr "no se pudo reposicionar cursor abierto" 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:129 parser/parse_param.c:304 tcop/postgres.c:1296 +#: commands/prepare.c:129 parser/parse_param.c:304 tcop/postgres.c:1355 #, c-format msgid "could not determine data type of parameter $%d" msgstr "no se pudo determinar el tipo del parámetro $%d" @@ -6296,344 +7053,327 @@ msgstr "Se esperaban %d parámetros pero se obtuvieron %d." msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "el parámetro $%d de tipo %s no puede ser convertido al tipo esperado %s" -#: commands/prepare.c:465 +#: commands/prepare.c:464 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "la sentencia preparada «%s» ya existe" -#: commands/prepare.c:504 +#: commands/prepare.c:503 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "no existe la sentencia preparada «%s»" -#: commands/proclang.c:86 +#: commands/proclang.c:87 #, c-format msgid "using pg_pltemplate information instead of CREATE LANGUAGE parameters" msgstr "usando información de pg_pltemplate en vez de los parámetros de CREATE LANGUAGE" -#: commands/proclang.c:96 +#: commands/proclang.c:97 #, c-format msgid "must be superuser to create procedural language \"%s\"" msgstr "debe ser superusuario para crear el lenguaje procedural «%s»" -#: commands/proclang.c:116 commands/proclang.c:278 +#: commands/proclang.c:117 commands/proclang.c:285 #, c-format msgid "function %s must return type \"language_handler\"" msgstr "la función %s debe retornar tipo «language_handler»" -#: commands/proclang.c:242 +#: commands/proclang.c:249 #, c-format msgid "unsupported language \"%s\"" msgstr "lenguaje no soportado: «%s»" -#: commands/proclang.c:244 +#: commands/proclang.c:251 #, c-format msgid "The supported languages are listed in the pg_pltemplate system catalog." msgstr "Los lenguajes soportados están listados en el catálogo del sistema pg_pltemplate." -#: commands/proclang.c:252 +#: commands/proclang.c:259 #, c-format msgid "must be superuser to create custom procedural language" msgstr "debe ser superusuario para crear un lenguaje procedural personalizado" -#: commands/proclang.c:271 +#: commands/proclang.c:278 #, c-format msgid "changing return type of function %s from \"opaque\" to \"language_handler\"" msgstr "cambiando el tipo de retorno de la función %s de «opaque» a «language_handler»" -#: commands/schemacmds.c:84 commands/schemacmds.c:236 +#: commands/schemacmds.c:99 commands/schemacmds.c:262 #, c-format msgid "unacceptable schema name \"%s\"" msgstr "el nombre de schema «%s» es inaceptable" -#: commands/schemacmds.c:85 commands/schemacmds.c:237 +#: commands/schemacmds.c:100 commands/schemacmds.c:263 #, c-format msgid "The prefix \"pg_\" is reserved for system schemas." msgstr "El prefijo «pg_» está reservado para esquemas del sistema." -#: commands/schemacmds.c:99 +#: commands/schemacmds.c:114 #, c-format msgid "schema \"%s\" already exists, skipping" msgstr "el esquema «%s» ya existe, ignorando" -#: commands/seclabel.c:58 +#: commands/seclabel.c:60 #, c-format msgid "no security label providers have been loaded" msgstr "no se ha cargado ningún proveedor de etiquetas de seguridad" -#: commands/seclabel.c:62 +#: commands/seclabel.c:64 #, c-format msgid "must specify provider when multiple security label providers have been loaded" msgstr "debe especificar un proveedor de etiquetas de seguridad cuando más de uno ha sido cargados" -#: commands/seclabel.c:80 +#: commands/seclabel.c:82 #, c-format msgid "security label provider \"%s\" is not loaded" msgstr "el proveedor de etiquetas de seguridad «%s» no está cargado" -#: commands/sequence.c:123 +#: commands/sequence.c:127 #, c-format msgid "unlogged sequences are not supported" msgstr "las secuencias unlogged no están soportadas" -#: commands/sequence.c:618 +#: commands/sequence.c:651 #, c-format msgid "nextval: reached maximum value of sequence \"%s\" (%s)" msgstr "nextval: se alcanzó el valor máximo de la secuencia «%s» (%s)" -#: commands/sequence.c:641 +#: commands/sequence.c:674 #, c-format msgid "nextval: reached minimum value of sequence \"%s\" (%s)" msgstr "nextval: se alcanzó el valor mínimo de la secuencia «%s» (%s)" -#: commands/sequence.c:754 +#: commands/sequence.c:792 #, c-format msgid "currval of sequence \"%s\" is not yet defined in this session" msgstr "currval de la secuencia «%s» no está definido en esta sesión" -#: commands/sequence.c:773 commands/sequence.c:779 +#: commands/sequence.c:811 commands/sequence.c:817 #, c-format msgid "lastval is not yet defined in this session" msgstr "lastval no está definido en esta sesión" -#: commands/sequence.c:848 +#: commands/sequence.c:893 #, c-format msgid "setval: value %s is out of bounds for sequence \"%s\" (%s..%s)" msgstr "setval: el valor %s está fuera del rango de la secuencia «%s» (%s..%s)" -#: commands/sequence.c:1224 +#: commands/sequence.c:1267 #, c-format msgid "INCREMENT must not be zero" msgstr "INCREMENT no debe ser cero" -#: commands/sequence.c:1280 +#: commands/sequence.c:1323 #, c-format msgid "MINVALUE (%s) must be less than MAXVALUE (%s)" msgstr "MINVALUE (%s) debe ser menor que MAXVALUE (%s)" -#: commands/sequence.c:1305 +#: commands/sequence.c:1348 #, c-format msgid "START value (%s) cannot be less than MINVALUE (%s)" msgstr "el valor START (%s) no puede ser menor que MINVALUE (%s)" -#: commands/sequence.c:1317 +#: commands/sequence.c:1360 #, c-format msgid "START value (%s) cannot be greater than MAXVALUE (%s)" msgstr "el valor START (%s) no puede ser mayor que MAXVALUE (%s)" -#: commands/sequence.c:1347 +#: commands/sequence.c:1390 #, c-format msgid "RESTART value (%s) cannot be less than MINVALUE (%s)" msgstr "el valor RESTART (%s) no puede ser menor que MINVALUE (%s)" -#: commands/sequence.c:1359 +#: commands/sequence.c:1402 #, c-format msgid "RESTART value (%s) cannot be greater than MAXVALUE (%s)" msgstr "el valor RESTART (%s) no puede ser mayor que MAXVALUE (%s)" -#: commands/sequence.c:1374 +#: commands/sequence.c:1417 #, c-format msgid "CACHE (%s) must be greater than zero" msgstr "CACHE (%s) debe ser mayor que cero" -#: commands/sequence.c:1406 +#: commands/sequence.c:1449 #, c-format msgid "invalid OWNED BY option" msgstr "opción OWNED BY no válida" -#: commands/sequence.c:1407 +#: commands/sequence.c:1450 #, c-format msgid "Specify OWNED BY table.column or OWNED BY NONE." msgstr "Especifique OWNED BY tabla.columna o OWNED BY NONE." -#: commands/sequence.c:1430 +#: commands/sequence.c:1473 #, c-format msgid "referenced relation \"%s\" is not a table or foreign table" msgstr "la relación referida «%s» no es una tabla o tabla foránea" -#: commands/sequence.c:1437 +#: commands/sequence.c:1480 #, c-format msgid "sequence must have same owner as table it is linked to" msgstr "la secuencia debe tener el mismo dueño que la tabla a la que está enlazada" -#: commands/sequence.c:1441 +#: commands/sequence.c:1484 #, c-format msgid "sequence must be in same schema as table it is linked to" msgstr "la secuencia debe estar en el mismo esquema que la tabla a la que está enlazada" -#: commands/tablecmds.c:206 +#: commands/tablecmds.c:212 #, c-format msgid "table \"%s\" does not exist" msgstr "no existe la tabla «%s»" -#: commands/tablecmds.c:207 +#: commands/tablecmds.c:213 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "la tabla «%s» no existe, ignorando" -#: commands/tablecmds.c:209 +#: commands/tablecmds.c:215 msgid "Use DROP TABLE to remove a table." msgstr "Use DROP TABLE para eliminar una tabla." -#: commands/tablecmds.c:212 +#: commands/tablecmds.c:218 #, c-format msgid "sequence \"%s\" does not exist" msgstr "no existe la secuencia «%s»" -#: commands/tablecmds.c:213 +#: commands/tablecmds.c:219 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "la secuencia «%s» no existe, ignorando" -#: commands/tablecmds.c:215 +#: commands/tablecmds.c:221 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "Use DROP SEQUENCE para eliminar una secuencia." -#: commands/tablecmds.c:218 +#: commands/tablecmds.c:224 #, c-format msgid "view \"%s\" does not exist" msgstr "no existe la vista «%s»" -#: commands/tablecmds.c:219 +#: commands/tablecmds.c:225 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "la vista «%s» no existe, ignorando" -#: commands/tablecmds.c:221 +#: commands/tablecmds.c:227 msgid "Use DROP VIEW to remove a view." msgstr "Use DROP VIEW para eliminar una vista." -#: commands/tablecmds.c:224 +#: commands/tablecmds.c:230 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "no existe la vista materializada «%s»" -#: commands/tablecmds.c:225 +#: commands/tablecmds.c:231 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "la vista materializada «%s» no existe, ignorando" -#: commands/tablecmds.c:227 +#: commands/tablecmds.c:233 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Use DROP MATERIALIZED VIEW para eliminar una vista materializada." -#: commands/tablecmds.c:230 parser/parse_utilcmd.c:1548 +#: commands/tablecmds.c:236 parser/parse_utilcmd.c:1593 #, c-format msgid "index \"%s\" does not exist" msgstr "no existe el índice «%s»" -#: commands/tablecmds.c:231 +#: commands/tablecmds.c:237 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "el índice «%s» no existe, ignorando" -#: commands/tablecmds.c:233 +#: commands/tablecmds.c:239 msgid "Use DROP INDEX to remove an index." msgstr "Use DROP INDEX para eliminar un índice." -#: commands/tablecmds.c:238 +#: commands/tablecmds.c:244 #, c-format msgid "\"%s\" is not a type" msgstr "«%s» no es un tipo" -#: commands/tablecmds.c:239 +#: commands/tablecmds.c:245 msgid "Use DROP TYPE to remove a type." msgstr "Use DROP TYPE para eliminar un tipo." -#: commands/tablecmds.c:242 commands/tablecmds.c:8076 -#: commands/tablecmds.c:10557 +#: commands/tablecmds.c:248 commands/tablecmds.c:8447 +#: commands/tablecmds.c:11077 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "no existe la tabla foránea «%s»" -#: commands/tablecmds.c:243 +#: commands/tablecmds.c:249 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "la tabla foránea «%s» no existe, ignorando" -#: commands/tablecmds.c:245 +#: commands/tablecmds.c:251 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Use DROP FOREIGN TABLE para eliminar una tabla foránea." -#: commands/tablecmds.c:469 +#: commands/tablecmds.c:487 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT sólo puede ser usado en tablas temporales" -#: commands/tablecmds.c:473 parser/parse_utilcmd.c:521 -#: parser/parse_utilcmd.c:532 parser/parse_utilcmd.c:549 -#: parser/parse_utilcmd.c:611 -#, c-format -msgid "constraints are not supported on foreign tables" -msgstr "las restricciones no están soportadas en tablas foráneas" - -#: commands/tablecmds.c:493 +#: commands/tablecmds.c:507 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "no se puede crear una tabla temporal dentro una operación restringida por seguridad" -#: commands/tablecmds.c:789 +#: commands/tablecmds.c:815 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY no soporta eliminar múltiples objetos" -#: commands/tablecmds.c:793 +#: commands/tablecmds.c:819 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY no soporta CASCADE" -#: commands/tablecmds.c:938 commands/tablecmds.c:1276 -#: commands/tablecmds.c:2133 commands/tablecmds.c:4112 -#: commands/tablecmds.c:5942 commands/tablecmds.c:11170 -#: commands/tablecmds.c:11205 commands/trigger.c:232 commands/trigger.c:1118 -#: commands/trigger.c:1226 rewrite/rewriteDefine.c:271 -#: rewrite/rewriteDefine.c:887 -#, c-format -msgid "permission denied: \"%s\" is a system catalog" -msgstr "permiso denegado: «%s» es un catálogo de sistema" - -#: commands/tablecmds.c:1052 +#: commands/tablecmds.c:1078 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "truncando además la tabla «%s»" -#: commands/tablecmds.c:1286 +#: commands/tablecmds.c:1316 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "no se pueden truncar tablas temporales de otras sesiones" -#: commands/tablecmds.c:1491 parser/parse_utilcmd.c:1760 -#, c-format -msgid "inherited relation \"%s\" is not a table" -msgstr "la relación heredada «%s» no es una tabla" +#: commands/tablecmds.c:1522 parser/parse_utilcmd.c:1807 +#, fuzzy, c-format +msgid "inherited relation \"%s\" is not a table or foreign table" +msgstr "la relación referida «%s» no es una tabla o tabla foránea" -#: commands/tablecmds.c:1498 commands/tablecmds.c:9531 +#: commands/tablecmds.c:1529 commands/tablecmds.c:9976 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "no se puede heredar de la tabla temporal «%s»" -#: commands/tablecmds.c:1506 commands/tablecmds.c:9539 +#: commands/tablecmds.c:1537 commands/tablecmds.c:9984 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "no se puede heredar de una tabla temporal de otra sesión" -#: commands/tablecmds.c:1522 commands/tablecmds.c:9573 +#: commands/tablecmds.c:1553 commands/tablecmds.c:10018 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "se heredaría de la relación «%s» más de una vez" -#: commands/tablecmds.c:1570 +#: commands/tablecmds.c:1601 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "mezclando múltiples definiciones heredadas de la columna «%s»" -#: commands/tablecmds.c:1578 +#: commands/tablecmds.c:1609 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "columna heredada «%s» tiene conflicto de tipos" -#: commands/tablecmds.c:1580 commands/tablecmds.c:1601 -#: commands/tablecmds.c:1789 commands/tablecmds.c:1811 +#: commands/tablecmds.c:1611 commands/tablecmds.c:1632 +#: commands/tablecmds.c:1830 commands/tablecmds.c:1852 #: parser/parse_coerce.c:1592 parser/parse_coerce.c:1612 #: parser/parse_coerce.c:1632 parser/parse_coerce.c:1677 #: parser/parse_coerce.c:1714 parser/parse_param.c:218 @@ -6641,1643 +7381,1756 @@ msgstr "columna heredada «%s» tiene conflicto de tipos" msgid "%s versus %s" msgstr "%s versus %s" -#: commands/tablecmds.c:1587 +#: commands/tablecmds.c:1618 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "columna heredada «%s» tiene conflicto de ordenamiento (collation)" -#: commands/tablecmds.c:1589 commands/tablecmds.c:1799 -#: commands/tablecmds.c:4536 +#: commands/tablecmds.c:1620 commands/tablecmds.c:1840 +#: commands/tablecmds.c:4739 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "«%s» versus «%s»" -#: commands/tablecmds.c:1599 +#: commands/tablecmds.c:1630 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "columna heredada «%s» tiene conflicto de parámetros de almacenamiento" -#: commands/tablecmds.c:1712 parser/parse_utilcmd.c:853 -#: parser/parse_utilcmd.c:1195 parser/parse_utilcmd.c:1271 +#: commands/tablecmds.c:1743 parser/parse_utilcmd.c:894 +#: parser/parse_utilcmd.c:1238 parser/parse_utilcmd.c:1314 #, c-format msgid "cannot convert whole-row table reference" msgstr "no se puede convertir una referencia a la fila completa (whole-row)" -#: commands/tablecmds.c:1713 parser/parse_utilcmd.c:854 +#: commands/tablecmds.c:1744 parser/parse_utilcmd.c:895 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "La restricción «%s» contiene una referencia a la fila completa (whole-row) de la tabla «%s»." -#: commands/tablecmds.c:1779 +#: commands/tablecmds.c:1816 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "mezclando la columna «%s» con la definición heredada" -#: commands/tablecmds.c:1787 +#: commands/tablecmds.c:1820 +#, fuzzy, c-format +msgid "moving and merging column \"%s\" with inherited definition" +msgstr "mezclando la columna «%s» con la definición heredada" + +#: commands/tablecmds.c:1821 +#, c-format +msgid "User-specified column moved to the position of the inherited column." +msgstr "" + +#: commands/tablecmds.c:1828 #, c-format msgid "column \"%s\" has a type conflict" msgstr "la columna «%s» tiene conflicto de tipos" -#: commands/tablecmds.c:1797 +#: commands/tablecmds.c:1838 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "la columna «%s» tiene conflicto de ordenamientos (collation)" -#: commands/tablecmds.c:1809 +#: commands/tablecmds.c:1850 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "la columna «%s» tiene conflicto de parámetros de almacenamiento" -#: commands/tablecmds.c:1861 +#: commands/tablecmds.c:1902 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "la columna «%s» hereda valores por omisión no coincidentes" -#: commands/tablecmds.c:1863 +#: commands/tablecmds.c:1904 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Para resolver el conflicto, indique explícitamente un valor por omisión." -#: commands/tablecmds.c:1910 +#: commands/tablecmds.c:1951 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "la restricción «check» «%s» aparece más de una vez con diferentes expresiones" -#: commands/tablecmds.c:2104 +#: commands/tablecmds.c:2145 #, c-format msgid "cannot rename column of typed table" msgstr "no se puede cambiar el nombre a una columna de una tabla tipada" -#: commands/tablecmds.c:2121 +#: commands/tablecmds.c:2162 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "«%s» no es una tabla, vista, vista materializada, tipo compuesto, índice o tabla foránea" -#: commands/tablecmds.c:2213 +#: commands/tablecmds.c:2256 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "debe cambiar el nombre a la columna heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:2245 +#: commands/tablecmds.c:2288 #, c-format msgid "cannot rename system column \"%s\"" msgstr "no se puede cambiar el nombre a la columna de sistema «%s»" -#: commands/tablecmds.c:2260 +#: commands/tablecmds.c:2303 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "no se puede cambiar el nombre a la columna heredada «%s»" -#: commands/tablecmds.c:2407 +#: commands/tablecmds.c:2458 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "debe cambiar el nombre a la restricción heredada «%s» en las tablas hijas también" -#: commands/tablecmds.c:2414 +#: commands/tablecmds.c:2465 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "no se puede cambiar el nombre a la restricción heredada «%s»" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:2628 +#: commands/tablecmds.c:2691 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "no se puede hacer %s en «%s» porque está siendo usada por consultas activas en esta sesión" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:2637 +#: commands/tablecmds.c:2700 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "no se puede hacer %s en «%s» porque tiene eventos de disparador pendientes" -#: commands/tablecmds.c:3607 +#: commands/tablecmds.c:3764 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "no se puede reescribir la relación de sistema «%s»" -#: commands/tablecmds.c:3613 +#: commands/tablecmds.c:3770 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "no se puede reescribir la tabla «%s» que es usada como tabla de catálogo" -#: commands/tablecmds.c:3623 +#: commands/tablecmds.c:3780 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "no se puede reescribir tablas temporales de otras sesiones" -#: commands/tablecmds.c:3854 +#: commands/tablecmds.c:4048 #, c-format msgid "rewriting table \"%s\"" msgstr "reescribiendo tabla «%s»" -#: commands/tablecmds.c:3858 +#: commands/tablecmds.c:4052 #, c-format msgid "verifying table \"%s\"" msgstr "verificando tabla «%s»" -#: commands/tablecmds.c:3972 +#: commands/tablecmds.c:4166 #, c-format msgid "column \"%s\" contains null values" msgstr "la columna «%s» contiene valores nulos" -#: commands/tablecmds.c:3987 commands/tablecmds.c:6985 +#: commands/tablecmds.c:4181 commands/tablecmds.c:7327 #, c-format msgid "check constraint \"%s\" is violated by some row" msgstr "la restricción «check» «%s» es violada por alguna fila" -#: commands/tablecmds.c:4133 commands/trigger.c:226 -#: rewrite/rewriteDefine.c:265 rewrite/rewriteDefine.c:882 +#: commands/tablecmds.c:4329 commands/trigger.c:234 +#: rewrite/rewriteDefine.c:267 rewrite/rewriteDefine.c:900 #, c-format msgid "\"%s\" is not a table or view" msgstr "«%s» no es una tabla o vista" -#: commands/tablecmds.c:4136 +#: commands/tablecmds.c:4332 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "«%s» no es una tabla, vista, vista materializada, o índice" -#: commands/tablecmds.c:4142 +#: commands/tablecmds.c:4338 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "«%s» no es una tabla, vista materializada, o índice" -#: commands/tablecmds.c:4145 +#: commands/tablecmds.c:4341 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "«%s» no es una tabla o tabla foránea" -#: commands/tablecmds.c:4148 +#: commands/tablecmds.c:4344 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "«%s» no es una tabla, tipo compuesto, o tabla foránea" -#: commands/tablecmds.c:4151 +#: commands/tablecmds.c:4347 #, c-format msgid "\"%s\" is not a table, materialized view, composite type, or foreign table" msgstr "«%s» no es una tabla, vista materializada, tipo compuesto, o tabla foránea" -#: commands/tablecmds.c:4161 +#: commands/tablecmds.c:4357 #, c-format msgid "\"%s\" is of the wrong type" msgstr "«%s» es tipo equivocado" -#: commands/tablecmds.c:4311 commands/tablecmds.c:4318 +#: commands/tablecmds.c:4509 commands/tablecmds.c:4516 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "no se puede alterar el tipo «%s» porque la columna «%s.%s» lo usa" -#: commands/tablecmds.c:4325 +#: commands/tablecmds.c:4523 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "no se puede alterar la tabla foránea «%s» porque la columna «%s.%s» usa su tipo de registro" -#: commands/tablecmds.c:4332 +#: commands/tablecmds.c:4530 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "no se puede alterar la tabla «%s» porque la columna «%s.%s» usa su tipo de registro" -#: commands/tablecmds.c:4394 +#: commands/tablecmds.c:4592 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "no se puede cambiar el tipo «%s» porque es el tipo de una tabla tipada" -#: commands/tablecmds.c:4396 +#: commands/tablecmds.c:4594 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Use ALTER ... CASCADE para eliminar además las tablas tipadas." -#: commands/tablecmds.c:4440 +#: commands/tablecmds.c:4638 #, c-format msgid "type %s is not a composite type" msgstr "el tipo %s no es un tipo compuesto" -#: commands/tablecmds.c:4466 +#: commands/tablecmds.c:4664 #, c-format msgid "cannot add column to typed table" msgstr "no se puede agregar una columna a una tabla tipada" -#: commands/tablecmds.c:4528 commands/tablecmds.c:9727 +#: commands/tablecmds.c:4731 commands/tablecmds.c:10177 #, 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:4534 commands/tablecmds.c:9734 +#: commands/tablecmds.c:4737 commands/tablecmds.c:10184 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "la tabla hija «%s» tiene un ordenamiento (collation) diferente para la columna «%s»" -#: commands/tablecmds.c:4544 +#: commands/tablecmds.c:4747 #, c-format msgid "child table \"%s\" has a conflicting \"%s\" column" msgstr "tabla hija «%s» tiene una columna «%s» que entra en conflicto" -#: commands/tablecmds.c:4556 +#: commands/tablecmds.c:4759 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "mezclando la definición de la columna «%s» en la tabla hija «%s»" -#: commands/tablecmds.c:4777 +#: commands/tablecmds.c:4980 #, 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:4844 +#: commands/tablecmds.c:5050 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "ya existe la columna «%s» en la relación «%s»" -#: commands/tablecmds.c:4948 commands/tablecmds.c:5043 -#: commands/tablecmds.c:5091 commands/tablecmds.c:5195 -#: commands/tablecmds.c:5242 commands/tablecmds.c:5326 -#: commands/tablecmds.c:7503 commands/tablecmds.c:8098 +#: commands/tablecmds.c:5158 commands/tablecmds.c:5264 +#: commands/tablecmds.c:5322 commands/tablecmds.c:5436 +#: commands/tablecmds.c:5493 commands/tablecmds.c:5587 +#: commands/tablecmds.c:7845 commands/tablecmds.c:8470 #, c-format msgid "cannot alter system column \"%s\"" msgstr "no se puede alterar columna de sistema «%s»" -#: commands/tablecmds.c:4984 +#: commands/tablecmds.c:5194 #, c-format msgid "column \"%s\" is in a primary key" msgstr "la columna «%s» está en la llave primaria" -#: commands/tablecmds.c:5142 +#: commands/tablecmds.c:5377 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "«%s» no es una tabla, vista materializada, índice o tabla foránea" -#: commands/tablecmds.c:5169 +#: commands/tablecmds.c:5409 #, c-format msgid "statistics target %d is too low" msgstr "el valor de estadísticas %d es demasiado bajo" -#: commands/tablecmds.c:5177 +#: commands/tablecmds.c:5417 #, c-format msgid "lowering statistics target to %d" msgstr "bajando el valor de estadísticas a %d" -#: commands/tablecmds.c:5307 +#: commands/tablecmds.c:5567 #, c-format msgid "invalid storage type \"%s\"" msgstr "tipo de almacenamiento no válido «%s»" -#: commands/tablecmds.c:5338 +#: commands/tablecmds.c:5599 #, 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:5372 +#: commands/tablecmds.c:5637 #, c-format msgid "cannot drop column from typed table" msgstr "no se pueden eliminar columnas de una tabla tipada" -#: commands/tablecmds.c:5413 +#: commands/tablecmds.c:5681 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "no existe la columna «%s» en la relación «%s», ignorando" -#: commands/tablecmds.c:5426 +#: commands/tablecmds.c:5694 #, c-format msgid "cannot drop system column \"%s\"" msgstr "no se puede eliminar la columna de sistema «%s»" -#: commands/tablecmds.c:5433 +#: commands/tablecmds.c:5701 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "no se puede eliminar la columna heredada «%s»" -#: commands/tablecmds.c:5663 +#: commands/tablecmds.c:5941 #, 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:5866 +#: commands/tablecmds.c:6163 #, 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:5936 +#: commands/tablecmds.c:6234 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "la relación referida «%s» no es una tabla" -#: commands/tablecmds.c:5959 +#: commands/tablecmds.c:6257 #, 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:5966 +#: commands/tablecmds.c:6264 #, 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:5972 +#: commands/tablecmds.c:6270 #, 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:5976 +#: commands/tablecmds.c:6274 #, 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:6037 +#: commands/tablecmds.c:6335 #, 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:6144 +#: commands/tablecmds.c:6442 #, 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:6147 +#: commands/tablecmds.c:6445 #, 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:6347 commands/tablecmds.c:6470 -#: commands/tablecmds.c:7342 commands/tablecmds.c:7398 +#: commands/tablecmds.c:6652 commands/tablecmds.c:6802 +#: commands/tablecmds.c:7684 commands/tablecmds.c:7740 #, 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:6353 +#: commands/tablecmds.c:6658 #, 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:6477 +#: commands/tablecmds.c:6809 #, 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:6546 +#: commands/tablecmds.c:6877 #, 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:6608 +#: commands/tablecmds.c:6946 #, 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:6613 +#: commands/tablecmds.c:6951 #, 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:6678 +#: commands/tablecmds.c:7016 #, 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:6695 +#: commands/tablecmds.c:7033 #, 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:6760 +#: commands/tablecmds.c:7098 #, 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:6854 +#: commands/tablecmds.c:7192 #, 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:6859 +#: commands/tablecmds.c:7197 #, 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:7018 +#: commands/tablecmds.c:7360 #, c-format msgid "validating foreign key constraint \"%s\"" msgstr "validando restricción de llave foránea «%s»" -#: commands/tablecmds.c:7314 +#: commands/tablecmds.c:7656 #, 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:7348 +#: commands/tablecmds.c:7690 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "no existe la restricción «%s» en la relación «%s», ignorando" -#: commands/tablecmds.c:7487 +#: commands/tablecmds.c:7829 #, 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:7510 +#: commands/tablecmds.c:7852 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "no se puede alterar la columna heredada «%s»" -#: commands/tablecmds.c:7557 +#: commands/tablecmds.c:7901 #, c-format -msgid "transform expression must not return a set" -msgstr "la expresión de transformación no puede retornar conjuntos" +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:7904 +#, c-format +msgid "You might need to add an explicit cast." +msgstr "Puede ser necesario agregar un cast explícito." -#: commands/tablecmds.c:7576 +#: commands/tablecmds.c:7908 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "la columna «%s» no puede convertirse automáticamente al tipo %s" -#: commands/tablecmds.c:7578 +#. translator: USING is SQL, don't translate it +#: commands/tablecmds.c:7911 #, c-format -msgid "Specify a USING expression to perform the conversion." -msgstr "Especifique una expresión USING para llevar a cabo la conversión." +msgid "You might need to specify \"USING %s::%s\"." +msgstr "Puede ser necesario especificar «USING %s::%s»." -#: commands/tablecmds.c:7627 +#: commands/tablecmds.c:7964 #, 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:7708 +#: commands/tablecmds.c:8051 #, 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:7744 +#: commands/tablecmds.c:8087 #, 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:7870 +#: commands/tablecmds.c:8213 #, 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:7871 commands/tablecmds.c:7890 +#: commands/tablecmds.c:8214 commands/tablecmds.c:8233 +#: commands/tablecmds.c:8251 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s depende de la columna «%s»" -#: commands/tablecmds.c:7889 +#: commands/tablecmds.c:8232 #, 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:8465 +#: commands/tablecmds.c:8250 +#, fuzzy, 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 trigger" + +#: commands/tablecmds.c:8895 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "no se puede cambiar el dueño del índice «%s»" -#: commands/tablecmds.c:8467 +#: commands/tablecmds.c:8897 #, 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:8483 +#: commands/tablecmds.c:8913 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "no se puede cambiar el dueño de la secuencia «%s»" -#: commands/tablecmds.c:8485 commands/tablecmds.c:10644 +#: commands/tablecmds.c:8915 commands/tablecmds.c:11285 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "La secuencia «%s» está enlazada a la tabla «%s»." -#: commands/tablecmds.c:8497 commands/tablecmds.c:11280 +#: commands/tablecmds.c:8927 commands/tablecmds.c:11926 #, c-format msgid "Use ALTER TYPE instead." msgstr "Considere usar ALTER TYPE." -#: commands/tablecmds.c:8506 +#: commands/tablecmds.c:8936 #, 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:8842 +#: commands/tablecmds.c:9280 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "no se pueden tener múltiples subórdenes SET TABLESPACE" -#: commands/tablecmds.c:8915 +#: commands/tablecmds.c:9353 #, 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:8948 commands/view.c:474 +#: commands/tablecmds.c:9386 commands/view.c:481 #, 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:9094 +#: commands/tablecmds.c:9532 #, c-format msgid "cannot move system relation \"%s\"" msgstr "no se puede mover la relación de sistema «%s»" -#: commands/tablecmds.c:9110 +#: commands/tablecmds.c:9548 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "no se pueden mover tablas temporales de otras sesiones" -#: commands/tablecmds.c:9238 +#: commands/tablecmds.c:9676 #, 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:9250 +#: commands/tablecmds.c:9688 #, 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:9341 +#: commands/tablecmds.c:9779 #, c-format msgid "aborting because lock on relation \"%s\".\"%s\" is not available" msgstr "cancelando porque el candado en la relación «%s».«%s» no está disponible" -#: commands/tablecmds.c:9357 +#: commands/tablecmds.c:9795 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "no se encontraron relaciones coincidentes en el tablespace «%s»" -#: commands/tablecmds.c:9418 storage/buffer/bufmgr.c:501 +#: commands/tablecmds.c:9859 storage/buffer/bufmgr.c:801 #, c-format msgid "invalid page in block %u of relation %s" msgstr "la página no es válida en el bloque %u de la relación %s" -#: commands/tablecmds.c:9500 +#: commands/tablecmds.c:9941 #, c-format msgid "cannot change inheritance of typed table" msgstr "no se puede cambiar la herencia de una tabla tipada" -#: commands/tablecmds.c:9546 +#: commands/tablecmds.c:9991 #, 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:9600 +#: commands/tablecmds.c:10045 #, c-format msgid "circular inheritance not allowed" msgstr "la herencia circular no está permitida" -#: commands/tablecmds.c:9601 +#: commands/tablecmds.c:10046 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "«%s» ya es un hijo de «%s»." -#: commands/tablecmds.c:9609 +#: commands/tablecmds.c:10054 #, c-format msgid "table \"%s\" without OIDs cannot inherit from table \"%s\" with OIDs" msgstr "tabla «%s» sin OIDs no puede heredar de tabla «%s» con OIDs" -#: commands/tablecmds.c:9745 +#: commands/tablecmds.c:10195 #, 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:9761 +#: commands/tablecmds.c:10211 #, c-format msgid "child table is missing column \"%s\"" msgstr "tabla hija no tiene la columna «%s»" -#: commands/tablecmds.c:9844 +#: commands/tablecmds.c:10294 #, 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:9852 +#: commands/tablecmds.c:10302 #, 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:9876 +#: commands/tablecmds.c:10326 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "tabla hija no tiene la restricción «%s»" -#: commands/tablecmds.c:9956 +#: commands/tablecmds.c:10410 #, 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:10182 +#: commands/tablecmds.c:10644 #, c-format msgid "typed tables cannot inherit" msgstr "las tablas tipadas no pueden heredar" -#: commands/tablecmds.c:10213 +#: commands/tablecmds.c:10675 #, c-format msgid "table is missing column \"%s\"" msgstr "la tabla no tiene la columna «%s»" -#: commands/tablecmds.c:10223 +#: commands/tablecmds.c:10685 #, 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:10232 +#: commands/tablecmds.c:10694 #, 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:10245 +#: commands/tablecmds.c:10707 #, c-format msgid "table has extra column \"%s\"" msgstr "tabla tiene la columna extra «%s»" -#: commands/tablecmds.c:10295 +#: commands/tablecmds.c:10759 #, c-format msgid "\"%s\" is not a typed table" msgstr "«%s» no es una tabla tipada" -#: commands/tablecmds.c:10478 +#: commands/tablecmds.c:10942 #, 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:10484 +#: commands/tablecmds.c:10948 #, 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:10490 +#: commands/tablecmds.c:10954 #, 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:10496 +#: commands/tablecmds.c:10960 #, 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:10502 +#: commands/tablecmds.c:10966 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "no se puede usar el índice no válido «%s» como identidad de réplica" -#: commands/tablecmds.c:10520 +#: commands/tablecmds.c:10984 #, 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:10643 +#: commands/tablecmds.c:11152 +#, fuzzy, c-format +msgid "cannot change logged status of table %s" +msgstr "no se puede cambiar el dueño del índice «%s»" + +#: commands/tablecmds.c:11154 +#, fuzzy, c-format +msgid "Table %s is temporary." +msgstr "el tablespace «%s» no está vacío" + +#: commands/tablecmds.c:11213 +#, fuzzy, c-format +msgid "cannot change status of table %s to logged" +msgstr "no se puede cambiar la herencia de una tabla tipada" + +#: commands/tablecmds.c:11215 +#, fuzzy, c-format +msgid "Table %s references unlogged table %s." +msgstr "La tabla «%s» hace referencia a «%s»." + +#: commands/tablecmds.c:11225 +#, fuzzy, c-format +msgid "cannot change status of table %s to unlogged" +msgstr "no se puede cambiar la herencia de una tabla tipada" + +#: commands/tablecmds.c:11227 +#, fuzzy, c-format +msgid "Logged table %s is referenced by table %s." +msgstr "La llave todavía es referida desde la tabla «%s»." + +#: commands/tablecmds.c:11284 #, 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:10739 +#: commands/tablecmds.c:11385 #, 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:11264 +#: commands/tablecmds.c:11910 #, c-format msgid "\"%s\" is not a composite type" msgstr "«%s» no es un tipo compuesto" -#: commands/tablecmds.c:11294 +#: commands/tablecmds.c:11940 #, 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/tablespace.c:160 commands/tablespace.c:177 -#: commands/tablespace.c:188 commands/tablespace.c:196 -#: commands/tablespace.c:623 replication/slot.c:930 storage/file/copydir.c:47 +#: commands/tablespace.c:162 commands/tablespace.c:179 +#: commands/tablespace.c:190 commands/tablespace.c:198 +#: commands/tablespace.c:625 replication/slot.c:914 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "no se pudo crear el directorio «%s»: %m" -#: commands/tablespace.c:207 +#: commands/tablespace.c:209 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "no se pudo hacer stat al directorio «%s»: %m" -#: commands/tablespace.c:216 +#: commands/tablespace.c:218 #, c-format msgid "\"%s\" exists but is not a directory" msgstr "«%s» existe pero no es un directorio" -#: commands/tablespace.c:247 +#: commands/tablespace.c:249 #, c-format msgid "permission denied to create tablespace \"%s\"" msgstr "se ha denegado el permiso para crear el tablespace «%s»" -#: commands/tablespace.c:249 +#: commands/tablespace.c:251 #, c-format msgid "Must be superuser to create a tablespace." msgstr "Debe ser superusuario para crear tablespaces." -#: commands/tablespace.c:265 +#: commands/tablespace.c:267 #, c-format msgid "tablespace location cannot contain single quotes" msgstr "la ruta del tablespace no puede contener comillas simples" -#: commands/tablespace.c:275 +#: commands/tablespace.c:277 #, c-format msgid "tablespace location must be an absolute path" msgstr "la ubicación del tablespace debe ser una ruta absoluta" -#: commands/tablespace.c:286 +#: commands/tablespace.c:288 #, c-format msgid "tablespace location \"%s\" is too long" msgstr "la ruta «%s» del tablespace es demasiado larga" -#: commands/tablespace.c:296 commands/tablespace.c:894 +#: commands/tablespace.c:295 +#, fuzzy, c-format +msgid "tablespace location should not be inside the data directory" +msgstr "la ubicación del tablespace debe ser una ruta absoluta" + +#: commands/tablespace.c:304 commands/tablespace.c:938 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "el nombre de tablespace «%s» es inaceptable" -#: commands/tablespace.c:298 commands/tablespace.c:895 +#: commands/tablespace.c:306 commands/tablespace.c:939 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "El prefijo «pg_» está reservado para tablespaces del sistema." -#: commands/tablespace.c:308 commands/tablespace.c:907 +#: commands/tablespace.c:316 commands/tablespace.c:951 #, c-format msgid "tablespace \"%s\" already exists" msgstr "el tablespace «%s» ya existe" -#: commands/tablespace.c:386 commands/tablespace.c:551 -#: replication/basebackup.c:222 replication/basebackup.c:1064 -#: utils/adt/misc.c:365 -#, c-format -msgid "tablespaces are not supported on this platform" -msgstr "tablespaces no están soportados en esta plataforma" - -#: commands/tablespace.c:426 commands/tablespace.c:877 -#: commands/tablespace.c:956 commands/tablespace.c:1025 -#: commands/tablespace.c:1158 commands/tablespace.c:1358 +#: commands/tablespace.c:430 commands/tablespace.c:921 +#: commands/tablespace.c:1002 commands/tablespace.c:1071 +#: commands/tablespace.c:1204 commands/tablespace.c:1404 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "no existe el tablespace «%s»" -#: commands/tablespace.c:432 +#: commands/tablespace.c:436 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "el tablespace «%s» no existe, ignorando" -#: commands/tablespace.c:508 +#: commands/tablespace.c:512 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "el tablespace «%s» no está vacío" -#: commands/tablespace.c:582 +#: commands/tablespace.c:584 #, c-format msgid "directory \"%s\" does not exist" msgstr "no existe el directorio «%s»" -#: commands/tablespace.c:583 +#: commands/tablespace.c:585 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "Cree este directorio para el tablespace antes de reiniciar el servidor." -#: commands/tablespace.c:588 +#: commands/tablespace.c:590 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "no se pudo definir los permisos del directorio «%s»: %m" -#: commands/tablespace.c:618 +#: commands/tablespace.c:620 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "el directorio «%s» ya está siendo usado como tablespace" -#: commands/tablespace.c:642 commands/tablespace.c:764 -#: commands/tablespace.c:777 commands/tablespace.c:801 +#: commands/tablespace.c:744 commands/tablespace.c:757 +#: commands/tablespace.c:781 commands/tablespace.c:872 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "no se pudo eliminar el directorio «%s»: %m" -#: commands/tablespace.c:650 commands/tablespace.c:812 +#: commands/tablespace.c:793 commands/tablespace.c:881 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "no se pudo eliminar el enlace simbólico «%s»: %m" -#: commands/tablespace.c:661 -#, c-format -msgid "could not create symbolic link \"%s\": %m" -msgstr "no se pudo crear el enlace simbólico «%s»: %m" +#: commands/tablespace.c:803 commands/tablespace.c:889 +#, fuzzy, c-format +msgid "not a directory or symbolic link: \"%s\"" +msgstr "no se pudo leer el enlace simbólico «%s»" -#: commands/tablespace.c:725 commands/tablespace.c:735 -#: postmaster/postmaster.c:1284 replication/basebackup.c:349 -#: replication/basebackup.c:667 storage/file/copydir.c:53 -#: storage/file/copydir.c:96 storage/file/fd.c:1951 storage/ipc/dsm.c:300 -#: utils/adt/genfile.c:354 utils/adt/misc.c:267 utils/misc/tzparser.c:339 -#, c-format -msgid "could not open directory \"%s\": %m" -msgstr "no se pudo abrir el directorio «%s»: %m" +#: commands/tablespace.c:860 +#, fuzzy, c-format +msgid "could not stat \"%s\": %m" +msgstr "no se pudo hacer stat al archivo «%s»: %m" -#: commands/tablespace.c:1030 +#: commands/tablespace.c:1076 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "No existe el tablespace «%s»." -#: commands/tablespace.c:1457 +#: commands/tablespace.c:1503 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "algunos directorios para el tablespace %u no pudieron eliminarse" -#: commands/tablespace.c:1459 +#: commands/tablespace.c:1505 #, c-format msgid "You can remove the directories manually if necessary." msgstr "Puede eliminar los directorios manualmente, si es necesario." -#: commands/trigger.c:175 +#: commands/trigger.c:183 #, c-format msgid "\"%s\" is a table" msgstr "«%s» es una tabla" -#: commands/trigger.c:177 +#: commands/trigger.c:185 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "Las tablas no pueden tener disparadores INSTEAD OF." -#: commands/trigger.c:188 commands/trigger.c:195 +#: commands/trigger.c:196 commands/trigger.c:203 #, c-format msgid "\"%s\" is a view" msgstr "«%s» es una vista" -#: commands/trigger.c:190 +#: commands/trigger.c:198 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "Las vistas no pueden tener disparadores BEFORE o AFTER a nivel de fila." -#: commands/trigger.c:197 +#: commands/trigger.c:205 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "Las vistas no pueden tener disparadores TRUNCATE." -#: commands/trigger.c:205 commands/trigger.c:212 commands/trigger.c:219 +#: commands/trigger.c:213 commands/trigger.c:220 commands/trigger.c:227 #, c-format msgid "\"%s\" is a foreign table" msgstr "«%s» es una tabla foránea" -#: commands/trigger.c:207 +#: commands/trigger.c:215 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "Las tablas foráneas no pueden tener disparadores INSTEAD OF." -#: commands/trigger.c:214 +#: commands/trigger.c:222 #, c-format msgid "Foreign tables cannot have TRUNCATE triggers." msgstr "Las tablas foráneas no pueden tener disparadores TRUNCATE." -#: commands/trigger.c:221 +#: commands/trigger.c:229 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "Las tablas foráneas no pueden tener disparadores de restricción." -#: commands/trigger.c:284 +#: commands/trigger.c:292 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "los disparadores TRUNCATE FOR EACH ROW no están soportados" -#: commands/trigger.c:292 +#: commands/trigger.c:300 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "los disparadores INSTEAD OF deben ser FOR EACH ROW" -#: commands/trigger.c:296 +#: commands/trigger.c:304 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "los disparadores INSTEAD OF no pueden tener condiciones WHEN" -#: commands/trigger.c:300 +#: commands/trigger.c:308 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "los disparadores INSTEAD OF no pueden tener listas de columnas" -#: commands/trigger.c:359 commands/trigger.c:372 +#: commands/trigger.c:367 commands/trigger.c:380 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "la condición WHEN de un disparador por sentencias no pueden referirse a los valores de las columnas" -#: commands/trigger.c:364 +#: commands/trigger.c:372 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "la condición WHEN de un disparador en INSERT no puede referirse a valores OLD" -#: commands/trigger.c:377 +#: commands/trigger.c:385 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "la condición WHEN de un disparador en DELETE no puede referirse a valores NEW" -#: commands/trigger.c:382 +#: commands/trigger.c:390 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "la condición WHEN de un disparador BEFORE no puede referirse a columnas de sistema de NEW" -#: commands/trigger.c:427 +#: commands/trigger.c:435 #, c-format msgid "changing return type of function %s from \"opaque\" to \"trigger\"" msgstr "cambiando el tipo de retorno de la función %s de «opaque» a «trigger»" -#: commands/trigger.c:434 +#: commands/trigger.c:442 #, c-format msgid "function %s must return type \"trigger\"" msgstr "la función %s debe retornar tipo «trigger»" -#: commands/trigger.c:546 commands/trigger.c:1295 +#: commands/trigger.c:554 commands/trigger.c:1304 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "ya existe un trigger «%s» para la relación «%s»" -#: commands/trigger.c:831 +#: commands/trigger.c:839 msgid "Found referenced table's UPDATE trigger." msgstr "Se encontró el disparador UPDATE de la tabla referenciada." -#: commands/trigger.c:832 +#: commands/trigger.c:840 msgid "Found referenced table's DELETE trigger." msgstr "Se encontró el disparador DELETE de la tabla referenciada." -#: commands/trigger.c:833 +#: commands/trigger.c:841 msgid "Found referencing table's trigger." msgstr "Se encontró el disparador en la tabla que hace referencia." -#: commands/trigger.c:942 commands/trigger.c:958 +#: commands/trigger.c:950 commands/trigger.c:966 #, c-format msgid "ignoring incomplete trigger group for constraint \"%s\" %s" msgstr "ignorando el grupo de disparadores incompleto para la restricción «%s» %s" -#: commands/trigger.c:970 +#: commands/trigger.c:978 #, c-format msgid "converting trigger group into constraint \"%s\" %s" msgstr "convirtiendo el grupo de disparadores en la restricción «%s» %s" -#: commands/trigger.c:1112 commands/trigger.c:1217 +#: commands/trigger.c:1120 commands/trigger.c:1225 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "«%s» no es una tabla, vista o tabla foránea" -#: commands/trigger.c:1183 commands/trigger.c:1343 commands/trigger.c:1459 +#: commands/trigger.c:1191 commands/trigger.c:1352 commands/trigger.c:1470 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "no existe el trigger «%s» para la tabla «%s»" -#: commands/trigger.c:1424 +#: commands/trigger.c:1435 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "permiso denegado: «%s» es un trigger de sistema" -#: commands/trigger.c:1920 +#: commands/trigger.c:1931 #, c-format msgid "trigger function %u returned null value" msgstr "la función de trigger %u ha retornado un valor null" -#: commands/trigger.c:1979 commands/trigger.c:2178 commands/trigger.c:2382 -#: commands/trigger.c:2664 +#: commands/trigger.c:1990 commands/trigger.c:2189 commands/trigger.c:2393 +#: commands/trigger.c:2665 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "un trigger BEFORE STATEMENT no puede retornar un valor" -#: commands/trigger.c:2726 executor/nodeModifyTable.c:434 -#: executor/nodeModifyTable.c:712 +#: commands/trigger.c:2727 executor/nodeModifyTable.c:631 +#: executor/nodeModifyTable.c:919 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "el registro a ser actualizado ya fue modificado por una operación disparada por la orden actual" -#: commands/trigger.c:2727 executor/nodeModifyTable.c:435 -#: executor/nodeModifyTable.c:713 +#: commands/trigger.c:2728 executor/nodeModifyTable.c:632 +#: executor/nodeModifyTable.c:920 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Considere usar un disparador ANTES en lugar de un disparador BEFORE para propagar cambios a otros registros." -#: commands/trigger.c:2741 executor/execMain.c:2059 -#: executor/nodeLockRows.c:165 executor/nodeModifyTable.c:447 -#: executor/nodeModifyTable.c:725 +#: commands/trigger.c:2742 executor/execMain.c:2344 +#: executor/nodeLockRows.c:216 executor/nodeModifyTable.c:183 +#: executor/nodeModifyTable.c:644 executor/nodeModifyTable.c:932 +#: executor/nodeModifyTable.c:1099 #, 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:4538 +#: commands/trigger.c:4580 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "la restricción «%s» no es postergable" -#: commands/trigger.c:4561 +#: commands/trigger.c:4603 #, c-format msgid "constraint \"%s\" does not exist" msgstr "no existe la restricción «%s»" -#: commands/tsearchcmds.c:114 commands/tsearchcmds.c:671 +#: commands/tsearchcmds.c:115 commands/tsearchcmds.c:685 #, c-format msgid "function %s should return type %s" msgstr "la función %s debería retornar el tipo %s" -#: commands/tsearchcmds.c:186 +#: commands/tsearchcmds.c:192 #, c-format msgid "must be superuser to create text search parsers" msgstr "debe ser superusuario para crear analizadores de búsqueda en texto" -#: commands/tsearchcmds.c:234 +#: commands/tsearchcmds.c:240 #, c-format msgid "text search parser parameter \"%s\" not recognized" msgstr "el parámetro de analizador de búsqueda en texto «%s» no es reconocido" -#: commands/tsearchcmds.c:244 +#: commands/tsearchcmds.c:250 #, c-format msgid "text search parser start method is required" msgstr "el método «start» del analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:249 +#: commands/tsearchcmds.c:255 #, c-format msgid "text search parser gettoken method is required" msgstr "el método «gettoken» del analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:254 +#: commands/tsearchcmds.c:260 #, c-format msgid "text search parser end method is required" msgstr "el método «end» del analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:259 +#: commands/tsearchcmds.c:265 #, c-format msgid "text search parser lextypes method is required" msgstr "el método «lextypes» del analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:376 +#: commands/tsearchcmds.c:386 #, c-format msgid "text search template \"%s\" does not accept options" msgstr "la plantilla de búsquede en texto «%s» no acepta opciones" -#: commands/tsearchcmds.c:449 +#: commands/tsearchcmds.c:460 #, c-format msgid "text search template is required" msgstr "la plantilla de búsqueda en texto es obligatoria" -#: commands/tsearchcmds.c:735 +#: commands/tsearchcmds.c:752 #, c-format msgid "must be superuser to create text search templates" msgstr "debe ser superusuario para crear una plantilla de búsqueda en texto" -#: commands/tsearchcmds.c:772 +#: commands/tsearchcmds.c:789 #, c-format msgid "text search template parameter \"%s\" not recognized" msgstr "el parámetro de la plantilla de búsqueda en texto «%s» no es reconocido" -#: commands/tsearchcmds.c:782 +#: commands/tsearchcmds.c:799 #, c-format msgid "text search template lexize method is required" msgstr "el método «lexize» de la plantilla de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:988 +#: commands/tsearchcmds.c:1008 #, c-format msgid "text search configuration parameter \"%s\" not recognized" msgstr "el parámetro de configuración de búsqueda en texto «%s» no es reconocido" -#: commands/tsearchcmds.c:995 +#: commands/tsearchcmds.c:1015 #, c-format msgid "cannot specify both PARSER and COPY options" msgstr "no se puede especificar simultáneamente las opciones PARSER y COPY" -#: commands/tsearchcmds.c:1023 +#: commands/tsearchcmds.c:1051 #, c-format msgid "text search parser is required" msgstr "el analizador de búsqueda en texto es obligatorio" -#: commands/tsearchcmds.c:1247 +#: commands/tsearchcmds.c:1278 #, c-format msgid "token type \"%s\" does not exist" msgstr "no existe el tipo de elemento «%s»" -#: commands/tsearchcmds.c:1469 +#: commands/tsearchcmds.c:1502 #, c-format msgid "mapping for token type \"%s\" does not exist" msgstr "no existe un mapeo para el tipo de elemento «%s»" -#: commands/tsearchcmds.c:1475 +#: commands/tsearchcmds.c:1508 #, c-format msgid "mapping for token type \"%s\" does not exist, skipping" msgstr "el mapeo para el tipo de elemento «%s» no existe, ignorando" -#: commands/tsearchcmds.c:1628 commands/tsearchcmds.c:1739 +#: commands/tsearchcmds.c:1663 commands/tsearchcmds.c:1774 #, c-format msgid "invalid parameter list format: \"%s\"" msgstr "el formato de la lista de parámetros no es válido: «%s»" -#: commands/typecmds.c:184 +#: commands/typecmds.c:179 #, c-format msgid "must be superuser to create a base type" msgstr "debe ser superusuario para crear un tipo base" -#: commands/typecmds.c:290 commands/typecmds.c:1371 +#: commands/typecmds.c:286 commands/typecmds.c:1419 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "el atributo de tipo «%s» no es reconocido" -#: commands/typecmds.c:344 +#: commands/typecmds.c:340 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "la categoría de tipo «%s» no es válida: debe ser ASCII simple" -#: commands/typecmds.c:363 +#: commands/typecmds.c:359 #, c-format msgid "array element type cannot be %s" msgstr "el tipo de elemento de array no puede ser %s" -#: commands/typecmds.c:395 +#: commands/typecmds.c:391 #, c-format msgid "alignment \"%s\" not recognized" msgstr "el alineamiento «%s» no es reconocido" -#: commands/typecmds.c:412 +#: commands/typecmds.c:408 #, c-format msgid "storage \"%s\" not recognized" msgstr "el almacenamiento «%s» no es reconocido" -#: commands/typecmds.c:423 +#: commands/typecmds.c:419 #, c-format msgid "type input function must be specified" msgstr "debe especificarse la función de ingreso del tipo" -#: commands/typecmds.c:427 +#: commands/typecmds.c:423 #, c-format msgid "type output function must be specified" msgstr "debe especificarse la función de salida de tipo" -#: commands/typecmds.c:432 +#: commands/typecmds.c:428 #, c-format msgid "type modifier output function is useless without a type modifier input function" msgstr "la función de salida de modificadores de tipo es inútil sin una función de entrada de modificadores de tipo" -#: commands/typecmds.c:455 +#: commands/typecmds.c:451 #, c-format msgid "changing return type of function %s from \"opaque\" to %s" msgstr "cambiando el tipo de retorno de la función %s de «opaque» a %s" -#: commands/typecmds.c:462 +#: commands/typecmds.c:458 #, c-format msgid "type input function %s must return type %s" msgstr "la función de entrada %s del tipo debe retornar %s" -#: commands/typecmds.c:472 +#: commands/typecmds.c:468 #, c-format msgid "changing return type of function %s from \"opaque\" to \"cstring\"" msgstr "cambiando el tipo de retorno de la función %s de «opaque» a «cstring»" -#: commands/typecmds.c:479 +#: commands/typecmds.c:475 #, c-format msgid "type output function %s must return type \"cstring\"" msgstr "la función de salida %s del tipo debe retornar «cstring»" -#: commands/typecmds.c:488 +#: commands/typecmds.c:484 #, c-format msgid "type receive function %s must return type %s" msgstr "la función de recepción %s del tipo debe retornar %s" -#: commands/typecmds.c:497 +#: commands/typecmds.c:493 #, c-format msgid "type send function %s must return type \"bytea\"" msgstr "la función de envío %s del tipo debe retornar «bytea»" -#: commands/typecmds.c:762 +#: commands/typecmds.c:558 +#, fuzzy, c-format +msgid "type input function %s should not be volatile" +msgstr "la función de conversión no debe ser volatile" + +#: commands/typecmds.c:563 +#, fuzzy, c-format +msgid "type output function %s should not be volatile" +msgstr "la función de conversión no debe ser volatile" + +#: commands/typecmds.c:568 +#, fuzzy, c-format +msgid "type receive function %s should not be volatile" +msgstr "la función de recepción %s del tipo debe retornar %s" + +#: commands/typecmds.c:573 +#, fuzzy, c-format +msgid "type send function %s should not be volatile" +msgstr "la función de conversión no debe ser volatile" + +#: commands/typecmds.c:578 +#, fuzzy, c-format +msgid "type modifier input function %s should not be volatile" +msgstr "la función de conversión no debe ser volatile" + +#: commands/typecmds.c:583 +#, fuzzy, c-format +msgid "type modifier output function %s should not be volatile" +msgstr "la función de salida de modificadores de tipo es inútil sin una función de entrada de modificadores de tipo" + +#: commands/typecmds.c:805 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "«%s» no es un tipo de dato base válido para un dominio" -#: commands/typecmds.c:848 +#: commands/typecmds.c:891 #, c-format msgid "multiple default expressions" msgstr "múltiples expresiones default" -#: commands/typecmds.c:910 commands/typecmds.c:919 +#: commands/typecmds.c:953 commands/typecmds.c:962 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "las restricciones NULL/NOT NULL no coinciden" -#: commands/typecmds.c:935 +#: commands/typecmds.c:978 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "las restricciones «check» en dominios no pueden ser marcadas NO INHERIT" -#: commands/typecmds.c:944 commands/typecmds.c:2453 +#: commands/typecmds.c:987 commands/typecmds.c:2518 #, c-format msgid "unique constraints not possible for domains" msgstr "no se pueden poner restricciones de unicidad a un dominio" -#: commands/typecmds.c:950 commands/typecmds.c:2459 +#: commands/typecmds.c:993 commands/typecmds.c:2524 #, c-format msgid "primary key constraints not possible for domains" msgstr "no se pueden poner restricciones de llave primaria a un dominio" -#: commands/typecmds.c:956 commands/typecmds.c:2465 +#: commands/typecmds.c:999 commands/typecmds.c:2530 #, c-format msgid "exclusion constraints not possible for domains" msgstr "las restricciones por exclusión no son posibles para los dominios" -#: commands/typecmds.c:962 commands/typecmds.c:2471 +#: commands/typecmds.c:1005 commands/typecmds.c:2536 #, c-format msgid "foreign key constraints not possible for domains" msgstr "no se pueden poner restricciones de llave foránea a un dominio" -#: commands/typecmds.c:971 commands/typecmds.c:2480 +#: commands/typecmds.c:1014 commands/typecmds.c:2545 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "no se puede especificar la postergabilidad de las restricciones a un dominio" -#: commands/typecmds.c:1243 utils/cache/typcache.c:1071 +#: commands/typecmds.c:1289 utils/cache/typcache.c:1579 #, c-format msgid "%s is not an enum" msgstr "%s no es un enum" -#: commands/typecmds.c:1379 +#: commands/typecmds.c:1427 #, c-format msgid "type attribute \"subtype\" is required" msgstr "el atributo de tipo «subtype» es obligatorio" -#: commands/typecmds.c:1384 +#: commands/typecmds.c:1432 #, c-format msgid "range subtype cannot be %s" msgstr "el subtipo de rango no puede ser %s" -#: commands/typecmds.c:1403 +#: commands/typecmds.c:1451 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "se especificó un ordenamiento (collation) al rango, pero el subtipo no soporta ordenamiento" -#: commands/typecmds.c:1639 +#: commands/typecmds.c:1684 #, c-format msgid "changing argument type of function %s from \"opaque\" to \"cstring\"" msgstr "cambiando el tipo de argumento de la función %s de «opaque» a «cstring»" -#: commands/typecmds.c:1690 +#: commands/typecmds.c:1735 #, c-format msgid "changing argument type of function %s from \"opaque\" to %s" msgstr "cambiando el tipo de argumento de la función %s de «opaque» a %s" -#: commands/typecmds.c:1789 +#: commands/typecmds.c:1834 #, c-format msgid "typmod_in function %s must return type \"integer\"" msgstr "la función typmod_in %s debe retornar tipo «integer»" -#: commands/typecmds.c:1816 +#: commands/typecmds.c:1861 #, c-format msgid "typmod_out function %s must return type \"cstring\"" msgstr "la función typmod_out %s debe retornar «cstring»" -#: commands/typecmds.c:1843 +#: commands/typecmds.c:1888 #, c-format msgid "type analyze function %s must return type \"boolean\"" msgstr "la función de análisis %s del tipo debe retornar «boolean»" -#: commands/typecmds.c:1889 +#: commands/typecmds.c:1934 #, c-format msgid "You must specify an operator class for the range type or define a default operator class for the subtype." msgstr "Debe especificar una clase de operadores para el tipo de rango, o definir una clase de operadores por omisión para el subtipo." -#: commands/typecmds.c:1920 +#: commands/typecmds.c:1965 #, c-format msgid "range canonical function %s must return range type" msgstr "la función canónica %s del rango debe retornar tipo de rango" -#: commands/typecmds.c:1926 +#: commands/typecmds.c:1971 #, c-format msgid "range canonical function %s must be immutable" msgstr "la función canónica %s del rango debe ser inmutable" -#: commands/typecmds.c:1962 +#: commands/typecmds.c:2007 #, c-format msgid "range subtype diff function %s must return type double precision" msgstr "la función «diff» de subtipo, %s, debe retornar tipo doble precisión" -#: commands/typecmds.c:1968 +#: commands/typecmds.c:2013 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "la función «diff» de subtipo, %s, debe ser inmutable" -#: commands/typecmds.c:2287 +#: commands/typecmds.c:2040 +#, fuzzy, c-format +msgid "pg_type array OID value not set when in binary upgrade mode" +msgstr "debe ser superusuario para conectarse en modo de actualización binaria" + +#: commands/typecmds.c:2344 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "la columna «%s» de la tabla «%s» contiene valores null" -#: commands/typecmds.c:2396 commands/typecmds.c:2574 +#: commands/typecmds.c:2459 commands/typecmds.c:2642 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "no existe la restricción «%s» en el dominio «%s»" -#: commands/typecmds.c:2400 +#: commands/typecmds.c:2463 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "no existe la restricción «%s» en el dominio «%s», ignorando" -#: commands/typecmds.c:2580 +#: commands/typecmds.c:2648 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "la restricción «%s» en el dominio «%s» no es una restricción «check»" -#: commands/typecmds.c:2684 +#: commands/typecmds.c:2754 #, c-format msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "la columna «%s» de la relación «%s» contiene valores que violan la nueva restricción" -#: commands/typecmds.c:2897 commands/typecmds.c:3267 commands/typecmds.c:3425 +#: commands/typecmds.c:2967 commands/typecmds.c:3224 commands/typecmds.c:3432 #, c-format msgid "%s is not a domain" msgstr "%s no es un dominio" -#: commands/typecmds.c:2930 +#: commands/typecmds.c:3001 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "el dominio «%2$s» ya contiene una restricción llamada «%1$s»" -#: commands/typecmds.c:2980 +#: commands/typecmds.c:3051 #, c-format msgid "cannot use table references in domain check constraint" msgstr "no se pueden usar referencias a tablas en restricción «check» para un dominio" -#: commands/typecmds.c:3199 commands/typecmds.c:3279 commands/typecmds.c:3533 +#: commands/typecmds.c:3154 commands/typecmds.c:3236 commands/typecmds.c:3545 #, c-format msgid "%s is a table's row type" msgstr "%s es el tipo de registro de una tabla" -#: commands/typecmds.c:3201 commands/typecmds.c:3281 commands/typecmds.c:3535 +#: commands/typecmds.c:3156 commands/typecmds.c:3238 commands/typecmds.c:3547 #, c-format msgid "Use ALTER TABLE instead." msgstr "Considere usar ALTER TABLE." -#: commands/typecmds.c:3208 commands/typecmds.c:3288 commands/typecmds.c:3452 +#: commands/typecmds.c:3163 commands/typecmds.c:3245 commands/typecmds.c:3464 #, c-format msgid "cannot alter array type %s" msgstr "no se puede alterar el tipo de array «%s»" -#: commands/typecmds.c:3210 commands/typecmds.c:3290 commands/typecmds.c:3454 +#: commands/typecmds.c:3165 commands/typecmds.c:3247 commands/typecmds.c:3466 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "Puede alterar el tipo %s, lo cual alterará el tipo de array también." -#: commands/typecmds.c:3519 +#: commands/typecmds.c:3531 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "ya existe un tipo llamado «%s» en el esquema «%s»" -#: commands/user.c:145 +#: commands/user.c:148 #, c-format msgid "SYSID can no longer be specified" msgstr "SYSID ya no puede ser especificado" -#: commands/user.c:277 +#: commands/user.c:290 #, c-format msgid "must be superuser to create superusers" msgstr "debe ser superusuario para crear superusuarios" -#: commands/user.c:284 +#: commands/user.c:297 #, c-format msgid "must be superuser to create replication users" msgstr "debe ser superusuario para crear usuarios de replicación" -#: commands/user.c:291 +#: commands/user.c:304 commands/user.c:678 +#, fuzzy, c-format +msgid "must be superuser to change bypassrls attribute" +msgstr "debe ser superusuario para crear un tipo base" + +#: commands/user.c:311 #, c-format msgid "permission denied to create role" msgstr "se ha denegado el permiso para crear el rol" -#: commands/user.c:298 commands/user.c:1119 -#, c-format -msgid "role name \"%s\" is reserved" -msgstr "el nombre de rol «%s» está reservado" - -#: commands/user.c:311 commands/user.c:1113 +#: commands/user.c:324 commands/user.c:1153 #, c-format msgid "role \"%s\" already exists" msgstr "el rol «%s» ya existe" -#: commands/user.c:618 commands/user.c:827 commands/user.c:933 -#: commands/user.c:1088 commands/variable.c:797 commands/variable.c:869 -#: utils/adt/acl.c:5121 utils/init/miscinit.c:362 -#, c-format -msgid "role \"%s\" does not exist" -msgstr "no existe el rol «%s»" +#: commands/user.c:402 +#, fuzzy, c-format +msgid "pg_authid OID value not set when in binary upgrade mode" +msgstr "debe ser superusuario para conectarse en modo de actualización binaria" -#: commands/user.c:631 commands/user.c:846 commands/user.c:1357 -#: commands/user.c:1503 +#: commands/user.c:664 commands/user.c:878 commands/user.c:1394 +#: commands/user.c:1540 #, c-format msgid "must be superuser to alter superusers" msgstr "debe ser superusuario para alterar superusuarios" -#: commands/user.c:638 +#: commands/user.c:671 #, c-format msgid "must be superuser to alter replication users" msgstr "debe ser superusuario para alterar usuarios de replicación" -#: commands/user.c:654 commands/user.c:854 +#: commands/user.c:694 commands/user.c:886 #, c-format msgid "permission denied" msgstr "permiso denegado" -#: commands/user.c:884 +#: commands/user.c:916 #, c-format msgid "must be superuser to alter settings globally" msgstr "debe ser superusuario para alterar parámetros globalmente" -#: commands/user.c:906 +#: commands/user.c:938 #, c-format msgid "permission denied to drop role" msgstr "se ha denegado el permiso para eliminar el rol" -#: commands/user.c:938 +#: commands/user.c:962 +#, fuzzy, c-format +msgid "cannot use special role specifier in \"%s\"" +msgstr "no se puede asignar el nuevo tablespace por omisión «%s»" + +#: commands/user.c:972 commands/user.c:1128 commands/variable.c:798 +#: commands/variable.c:870 utils/adt/acl.c:5120 utils/adt/acl.c:5172 +#: utils/adt/acl.c:5205 utils/adt/acl.c:5223 utils/init/miscinit.c:478 +#, c-format +msgid "role \"%s\" does not exist" +msgstr "no existe el rol «%s»" + +#: commands/user.c:977 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "el rol «%s» no existe, ignorando" -#: commands/user.c:950 commands/user.c:954 +#: commands/user.c:989 commands/user.c:993 #, c-format msgid "current user cannot be dropped" msgstr "el usuario activo no puede ser eliminado" -#: commands/user.c:958 +#: commands/user.c:997 #, c-format msgid "session user cannot be dropped" msgstr "no se puede eliminar un usuario de la sesión" -#: commands/user.c:969 +#: commands/user.c:1008 #, c-format msgid "must be superuser to drop superusers" msgstr "debe ser superusuario para eliminar superusuarios" -#: commands/user.c:985 +#: commands/user.c:1024 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "no se puede eliminar el rol «%s» porque otros objetos dependen de él" -#: commands/user.c:1103 +#: commands/user.c:1143 #, c-format msgid "session user cannot be renamed" msgstr "no se puede cambiar el nombre a un usuario de la sesión" -#: commands/user.c:1107 +#: commands/user.c:1147 #, c-format msgid "current user cannot be renamed" msgstr "no se puede cambiar el nombre al usuario activo" -#: commands/user.c:1130 +#: commands/user.c:1163 #, c-format msgid "must be superuser to rename superusers" msgstr "debe ser superusuario para cambiar el nombre a superusuarios" -#: commands/user.c:1137 +#: commands/user.c:1170 #, c-format msgid "permission denied to rename role" msgstr "se ha denegado el permiso para cambiar el nombre al rol" -#: commands/user.c:1158 +#: commands/user.c:1191 #, c-format msgid "MD5 password cleared because of role rename" msgstr "la contraseña MD5 fue borrada debido al cambio de nombre del rol" -#: commands/user.c:1218 +#: commands/user.c:1253 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "los nombres de columna no pueden ser incluidos en GRANT/REVOKE ROLE" -#: commands/user.c:1256 +#: commands/user.c:1291 #, c-format msgid "permission denied to drop objects" msgstr "se ha denegado el permiso para eliminar objetos" -#: commands/user.c:1283 commands/user.c:1292 +#: commands/user.c:1318 commands/user.c:1327 #, c-format msgid "permission denied to reassign objects" msgstr "se ha denegado el permiso para reasignar objetos" -#: commands/user.c:1365 commands/user.c:1511 +#: commands/user.c:1402 commands/user.c:1548 #, c-format msgid "must have admin option on role \"%s\"" msgstr "debe tener opción de admin en rol «%s»" -#: commands/user.c:1382 +#: commands/user.c:1419 #, c-format msgid "must be superuser to set grantor" msgstr "debe ser superusuario para especificar el cedente (grantor)" -#: commands/user.c:1407 +#: commands/user.c:1444 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "el rol «%s» es un miembro del rol «%s»" -#: commands/user.c:1422 +#: commands/user.c:1459 #, c-format msgid "role \"%s\" is already a member of role \"%s\"" msgstr "el rol «%s» ya es un miembro del rol «%s»" -#: commands/user.c:1533 +#: commands/user.c:1570 #, c-format msgid "role \"%s\" is not a member of role \"%s\"" msgstr "el rol «%s» no es un miembro del rol «%s»" -#: commands/vacuum.c:468 +#: commands/vacuum.c:185 +#, c-format +msgid "%s cannot be executed from VACUUM or ANALYZE" +msgstr "" + +#: commands/vacuum.c:527 #, c-format msgid "oldest xmin is far in the past" msgstr "xmin más antiguo es demasiado antiguo" -#: commands/vacuum.c:469 +#: commands/vacuum.c:528 #, c-format msgid "Close open transactions soon to avoid wraparound problems." msgstr "Cierre transacciones pronto para prevenir problemas por reciclaje de transacciones." -#: commands/vacuum.c:501 +#: commands/vacuum.c:567 #, c-format msgid "oldest multixact is far in the past" msgstr "multixact más antiguo es demasiado antiguo" -#: commands/vacuum.c:502 +#: commands/vacuum.c:568 #, 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:1064 +#: commands/vacuum.c:1130 #, 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:1065 +#: commands/vacuum.c:1131 #, 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:1182 +#: commands/vacuum.c:1252 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "omitiendo el vacuum de «%s»: el candado no está disponible" -#: commands/vacuum.c:1208 +#: commands/vacuum.c:1278 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "omitiendo «%s»: sólo un superusuario puede aplicarle VACUUM" -#: commands/vacuum.c:1212 +#: commands/vacuum.c:1282 #, 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:1216 +#: commands/vacuum.c:1286 #, 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:1234 +#: commands/vacuum.c:1304 #, 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/vacuumlazy.c:346 +#: commands/vacuumlazy.c:358 +#, fuzzy, c-format +msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" +msgstr "vacuum automático de la tabla «%s.%s.%s»" + +#: commands/vacuumlazy.c:363 #, c-format -msgid "" -"automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" -"pages: %d removed, %d remain\n" -"tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable\n" -"buffer usage: %d hits, %d misses, %d dirtied\n" -"avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" -"system usage: %s" +msgid "pages: %u removed, %u remain, %u skipped due to pins\n" +msgstr "" + +#: commands/vacuumlazy.c:368 +#, c-format +msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable\n" msgstr "" -"vacuum automático de la tabla «%s.%s.%s»: recorridos de índice: %d\n" -"páginas: eliminadas %d, remanentes %d\n" -"tuplas: eliminadas %.0f, remanentes %.0f, muertas pero sin eliminar aún %.0f\n" -"uso de búfers: %d aciertos, %d fallas, %d ensuciados\n" -"tasas promedio: de lectura: %.3f MB/s, de escritura %.3f MB/s\n" -"uso del sistema: %s" -#: commands/vacuumlazy.c:680 +#: commands/vacuumlazy.c:373 +#, c-format +msgid "buffer usage: %d hits, %d misses, %d dirtied\n" +msgstr "" + +#: commands/vacuumlazy.c:377 +#, c-format +msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" +msgstr "" + +#: commands/vacuumlazy.c:379 +#, fuzzy, c-format +msgid "system usage: %s" +msgstr "sentencia: %s" + +#: commands/vacuumlazy.c:701 #, c-format msgid "relation \"%s\" page %u is uninitialized --- fixing" msgstr "la página %2$u de la relación «%1$s» no está inicializada --- arreglando" -#: commands/vacuumlazy.c:1092 +#: commands/vacuumlazy.c:1113 #, c-format msgid "\"%s\": removed %.0f row versions in %u pages" msgstr "«%s»: se eliminaron %.0f versiones de filas en %u páginas" -#: commands/vacuumlazy.c:1097 +#: commands/vacuumlazy.c:1123 +#, fuzzy, c-format +msgid "%.0f dead row versions cannot be removed yet.\n" +msgstr "" +"%.0f versiones muertas de filas no pueden ser eliminadas aún.\n" +"%s." + +#: commands/vacuumlazy.c:1125 #, c-format -msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" -msgstr "«%s»: se encontraron %.0f versiones de filas eliminables y %.0f no eliminables en %u de %u páginas" +msgid "There were %.0f unused item pointers.\n" +msgstr "" -#: commands/vacuumlazy.c:1101 +#: commands/vacuumlazy.c:1127 #, c-format -msgid "" -"%.0f dead row versions cannot be removed yet.\n" -"There were %.0f unused item pointers.\n" -"%u pages are entirely empty.\n" -"%s." +msgid "Skipped %u pages due to buffer pins.\n" msgstr "" -"%.0f versiones muertas de filas no pueden ser eliminadas aún.\n" -"Hubo %.0f punteros de ítem sin uso.\n" -"%u páginas están completamente vacías.\n" -"%s." -#: commands/vacuumlazy.c:1172 +#: commands/vacuumlazy.c:1129 #, c-format -msgid "\"%s\": removed %d row versions in %d pages" -msgstr "«%s»: se eliminaron %d versiones de filas en %d páginas" +msgid "%u pages are entirely empty.\n" +msgstr "" -#: commands/vacuumlazy.c:1175 commands/vacuumlazy.c:1342 -#: commands/vacuumlazy.c:1514 +#: commands/vacuumlazy.c:1135 #, c-format -msgid "%s." -msgstr "%s." +msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" +msgstr "«%s»: se encontraron %.0f versiones de filas eliminables y %.0f no eliminables en %u de %u páginas" + +#: commands/vacuumlazy.c:1204 +#, c-format +msgid "\"%s\": removed %d row versions in %d pages" +msgstr "«%s»: se eliminaron %d versiones de filas en %d páginas" -#: commands/vacuumlazy.c:1339 +#: commands/vacuumlazy.c:1371 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "se recorrió el índice «%s» para eliminar %d versiones de filas" -#: commands/vacuumlazy.c:1385 +#: commands/vacuumlazy.c:1417 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "el índice «%s» ahora contiene %.0f versiones de filas en %u páginas" -#: commands/vacuumlazy.c:1389 +#: commands/vacuumlazy.c:1421 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -8288,112 +9141,112 @@ msgstr "" "%u páginas de índice han sido eliminadas, %u son reusables.\n" "%s." -#: commands/vacuumlazy.c:1446 +#: commands/vacuumlazy.c:1478 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "«%s»: suspendiendo el truncado debido a una petición de candado en conflicto" -#: commands/vacuumlazy.c:1511 +#: commands/vacuumlazy.c:1543 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "«%s»: truncadas %u a %u páginas" -#: commands/vacuumlazy.c:1567 +#: commands/vacuumlazy.c:1599 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "«%s»: suspendiendo el truncado debido a una petición de candado en conflicto" -#: commands/variable.c:162 utils/misc/guc.c:9058 +#: commands/variable.c:163 utils/misc/guc.c:9628 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Palabra clave no reconocida: «%s»." -#: commands/variable.c:174 +#: commands/variable.c:175 #, c-format msgid "Conflicting \"datestyle\" specifications." msgstr "Especificaciones contradictorias de «datestyle»." -#: commands/variable.c:296 +#: commands/variable.c:297 #, c-format msgid "Cannot specify months in time zone interval." msgstr "No se pueden especificar meses en el intervalo de huso horario." -#: commands/variable.c:302 +#: commands/variable.c:303 #, c-format msgid "Cannot specify days in time zone interval." msgstr "No se pueden especificar días en el intervalo de huso horario." -#: commands/variable.c:344 commands/variable.c:426 +#: commands/variable.c:345 commands/variable.c:427 #, c-format msgid "time zone \"%s\" appears to use leap seconds" msgstr "el huso horario «%s» parece usar segundos intercalares (bisiestos)" -#: commands/variable.c:346 commands/variable.c:428 +#: commands/variable.c:347 commands/variable.c:429 #, c-format msgid "PostgreSQL does not support leap seconds." msgstr "PostgreSQL no soporta segundos intercalares." -#: commands/variable.c:355 +#: commands/variable.c:356 #, c-format msgid "UTC timezone offset is out of range." msgstr "desplazamiento de huso horario UTC fuera de rango" -#: commands/variable.c:493 +#: commands/variable.c:494 #, c-format msgid "cannot set transaction read-write mode inside a read-only transaction" msgstr "no se puede poner en modo de escritura dentro de una transacción de sólo lectura" -#: commands/variable.c:500 +#: commands/variable.c:501 #, c-format msgid "transaction read-write mode must be set before any query" msgstr "el modo de escritura debe ser activado antes de cualquier consulta" -#: commands/variable.c:507 +#: commands/variable.c:508 #, c-format msgid "cannot set transaction read-write mode during recovery" msgstr "no se puede poner en modo de escritura durante la recuperación" -#: commands/variable.c:556 +#: commands/variable.c:557 #, c-format msgid "SET TRANSACTION ISOLATION LEVEL must be called before any query" msgstr "SET TRANSACTION ISOLATION LEVEL debe ser llamado antes de cualquier consulta" -#: commands/variable.c:563 +#: commands/variable.c:564 #, c-format msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "SET TRANSACTION ISOLATION LEVEL no debe ser llamado en una subtransacción" -#: commands/variable.c:570 storage/lmgr/predicate.c:1588 +#: commands/variable.c:571 storage/lmgr/predicate.c:1586 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "no se puede utilizar el modo serializable en un hot standby" -#: commands/variable.c:571 +#: commands/variable.c:572 #, c-format msgid "You can use REPEATABLE READ instead." msgstr "Puede utilizar REPEATABLE READ en su lugar." -#: commands/variable.c:619 +#: commands/variable.c:620 #, c-format msgid "SET TRANSACTION [NOT] DEFERRABLE cannot be called within a subtransaction" msgstr "SET TRANSACTION [NOT] DEFERRABLE no puede ser llamado en una subtransacción" -#: commands/variable.c:625 +#: commands/variable.c:626 #, c-format msgid "SET TRANSACTION [NOT] DEFERRABLE must be called before any query" msgstr "SET TRANSACTION [NOT] DEFERRABLE debe ser llamado antes de cualquier consulta" -#: commands/variable.c:707 +#: commands/variable.c:708 #, c-format msgid "Conversion between %s and %s is not supported." msgstr "La conversión entre %s y %s no está soportada." -#: commands/variable.c:714 +#: commands/variable.c:715 #, c-format msgid "Cannot change \"client_encoding\" now." msgstr "No se puede cambiar «client_encoding» ahora." -#: commands/variable.c:884 +#: commands/variable.c:885 #, c-format msgid "permission denied to set role \"%s\"" msgstr "se ha denegado el permiso para definir el rol «%s»" @@ -8418,42 +9271,42 @@ msgstr "no se pudo determinar el ordenamiento (collation) a usar para la columna msgid "view must have at least one column" msgstr "una vista debe tener al menos una columna" -#: commands/view.c:260 commands/view.c:272 +#: commands/view.c:263 commands/view.c:275 #, c-format msgid "cannot drop columns from view" msgstr "no se pueden eliminar columnas de una vista" -#: commands/view.c:277 +#: commands/view.c:280 #, c-format msgid "cannot change name of view column \"%s\" to \"%s\"" msgstr "no se puede cambiar el nombre de la columna «%s» de la vista a «%s»" -#: commands/view.c:285 +#: commands/view.c:288 #, c-format msgid "cannot change data type of view column \"%s\" from %s to %s" msgstr "no se puede cambiar el tipo de dato de la columna «%s» de la vista de %s a %s" -#: commands/view.c:420 +#: commands/view.c:427 #, c-format msgid "views must not contain SELECT INTO" msgstr "una vista no puede tener SELECT INTO" -#: commands/view.c:433 +#: commands/view.c:440 #, c-format msgid "views must not contain data-modifying statements in WITH" msgstr "las vistas no deben contener sentencias que modifiquen datos en WITH" -#: commands/view.c:504 +#: commands/view.c:511 #, c-format msgid "CREATE VIEW specifies more column names than columns" msgstr "CREATE VIEW especifica más nombres de columna que columnas" -#: commands/view.c:512 +#: commands/view.c:519 #, c-format msgid "views cannot be unlogged because they do not have storage" msgstr "las vistas no pueden ser unlogged porque no tienen almacenamiento" -#: commands/view.c:526 +#: commands/view.c:533 #, c-format msgid "view \"%s\" will be a temporary view" msgstr "la vista «%s» será una vista temporal" @@ -8488,349 +9341,386 @@ msgstr "el cursor «%s» no está posicionado en una fila" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "el cursor «%s» no es un recorrido simplemente actualizable de la tabla «%s»" -#: executor/execCurrent.c:231 executor/execQual.c:1160 +#: executor/execCurrent.c:231 executor/execQual.c:1156 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "el tipo del parámetro %d (%s) no coincide aquel con que fue preparado el plan (%s)" -#: executor/execCurrent.c:243 executor/execQual.c:1172 +#: executor/execCurrent.c:243 executor/execQual.c:1168 #, c-format msgid "no value found for parameter %d" msgstr "no se encontró un valor para parámetro %d" -#: executor/execMain.c:955 +#: executor/execIndexing.c:539 +#, c-format +msgid "ON CONFLICT does not support deferred unique constraints/exclusion constraints as arbiters" +msgstr "" + +#: executor/execIndexing.c:814 +#, c-format +msgid "could not create exclusion constraint \"%s\"" +msgstr "no se pudo crear la restricción por exclusión «%s»" + +#: executor/execIndexing.c:817 +#, c-format +msgid "Key %s conflicts with key %s." +msgstr "La llave %s está en conflicto con la llave %s." + +#: executor/execIndexing.c:819 +#, c-format +msgid "Key conflicts exist." +msgstr "Existe un conflicto de llave." + +#: executor/execIndexing.c:825 +#, c-format +msgid "conflicting key value violates exclusion constraint \"%s\"" +msgstr "llave en conflicto viola restricción por exclusión «%s»" + +#: executor/execIndexing.c:828 +#, c-format +msgid "Key %s conflicts with existing key %s." +msgstr "La llave %s está en conflicto con la llave existente %s." + +#: executor/execIndexing.c:830 +#, c-format +msgid "Key conflicts with existing key." +msgstr "La llave está en conflicto con una llave existente." + +#: executor/execMain.c:1025 #, c-format msgid "cannot change sequence \"%s\"" msgstr "no se puede cambiar la secuencia «%s»" -#: executor/execMain.c:961 +#: executor/execMain.c:1031 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "no se puede cambiar la relación TOAST «%s»" -#: executor/execMain.c:979 rewrite/rewriteHandler.c:2512 +#: executor/execMain.c:1049 rewrite/rewriteHandler.c:2631 #, c-format msgid "cannot insert into view \"%s\"" msgstr "no se puede insertar en la vista «%s»" -#: executor/execMain.c:981 rewrite/rewriteHandler.c:2515 +#: executor/execMain.c:1051 rewrite/rewriteHandler.c:2634 #, 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 activar las inserciones en la vista, provea un disparador INSTEAD OF INSERT un una regla incodicional ON INSERT DO INSTEAD." -#: executor/execMain.c:987 rewrite/rewriteHandler.c:2520 +#: executor/execMain.c:1057 rewrite/rewriteHandler.c:2639 #, c-format msgid "cannot update view \"%s\"" msgstr "no se puede actualizar la vista «%s»" -#: executor/execMain.c:989 rewrite/rewriteHandler.c:2523 +#: executor/execMain.c:1059 rewrite/rewriteHandler.c:2642 #, c-format msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." msgstr "Para activar las actualizaciones en la vista, provea un disparador INSTEAD OF UPDATE o una regla incondicional ON UPDATE DO INSTEAD." -#: executor/execMain.c:995 rewrite/rewriteHandler.c:2528 +#: executor/execMain.c:1065 rewrite/rewriteHandler.c:2647 #, c-format msgid "cannot delete from view \"%s\"" msgstr "no se puede eliminar de la vista «%s»" -#: executor/execMain.c:997 rewrite/rewriteHandler.c:2531 +#: executor/execMain.c:1067 rewrite/rewriteHandler.c:2650 #, 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 activar las eliminaciones en la vista, provea un disparador INSTEAD OF DELETE o una regla incondicional ON DELETE DO INSTEAD." -#: executor/execMain.c:1008 +#: executor/execMain.c:1078 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "no se puede cambiar la vista materializada «%s»" -#: executor/execMain.c:1020 +#: executor/execMain.c:1090 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "no se puede insertar en la tabla foránea «%s»" -#: executor/execMain.c:1026 +#: executor/execMain.c:1096 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "la tabla foránea «%s» no permite inserciones" -#: executor/execMain.c:1033 +#: executor/execMain.c:1103 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "no se puede actualizar la tabla foránea «%s»" -#: executor/execMain.c:1039 +#: executor/execMain.c:1109 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "la tabla foránea «%s» no permite actualizaciones" -#: executor/execMain.c:1046 +#: executor/execMain.c:1116 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "no se puede eliminar desde la tabla foránea «%s»" -#: executor/execMain.c:1052 +#: executor/execMain.c:1122 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "la tabla foránea «%s» no permite eliminaciones" -#: executor/execMain.c:1063 +#: executor/execMain.c:1133 #, c-format msgid "cannot change relation \"%s\"" msgstr "no se puede cambiar la relación «%s»" -#: executor/execMain.c:1087 +#: executor/execMain.c:1159 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "no se puede bloquear registros de la secuencia «%s»" -#: executor/execMain.c:1094 +#: executor/execMain.c:1166 #, 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:1101 +#: executor/execMain.c:1173 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "no se puede bloquear registros en la vista «%s»" -#: executor/execMain.c:1109 +#: executor/execMain.c:1181 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "no se puede bloquear registros en la vista materializada «%s»" -#: executor/execMain.c:1116 +#: executor/execMain.c:1190 executor/execMain.c:2578 +#: executor/nodeLockRows.c:132 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "no se puede bloquear registros en la tabla foránea «%s»" -#: executor/execMain.c:1122 +#: executor/execMain.c:1196 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "no se puede bloquear registros en la tabla «%s»" -#: executor/execMain.c:1607 +#: executor/execMain.c:1696 #, c-format msgid "null value in column \"%s\" violates not-null constraint" msgstr "el valor null para la columna «%s» viola la restricción not null" -#: executor/execMain.c:1609 executor/execMain.c:1626 executor/execMain.c:1673 +#: executor/execMain.c:1698 executor/execMain.c:1724 executor/execMain.c:1813 #, c-format msgid "Failing row contains %s." msgstr "La fila que falla contiene %s." -#: executor/execMain.c:1624 +#: executor/execMain.c:1722 #, 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:1671 -#, c-format -msgid "new row violates WITH CHECK OPTION for view \"%s\"" +#: executor/execMain.c:1811 +#, fuzzy, c-format +msgid "new row violates WITH CHECK OPTION for \"%s\"" msgstr "nueva fila viola WITH CHECK OPTION de la vista «%s»" -#: executor/execQual.c:306 executor/execQual.c:334 executor/execQual.c:3157 -#: utils/adt/array_userfuncs.c:430 utils/adt/arrayfuncs.c:233 -#: utils/adt/arrayfuncs.c:531 utils/adt/arrayfuncs.c:1275 -#: utils/adt/arrayfuncs.c:2961 utils/adt/arrayfuncs.c:4986 +#: executor/execMain.c:1821 +#, c-format +msgid "new row violates row level security policy \"%s\" for \"%s\"" +msgstr "" + +#: executor/execMain.c:1826 +#, c-format +msgid "new row violates row level security policy for \"%s\"" +msgstr "" + +#: executor/execMain.c:1833 +#, c-format +msgid "new row violates row level security policy \"%s\" (USING expression) for \"%s\"" +msgstr "" + +#: executor/execMain.c:1838 +#, c-format +msgid "new row violates row level security policy (USING expression) for \"%s\"" +msgstr "" + +#: executor/execQual.c:300 executor/execQual.c:328 executor/execQual.c:3191 +#: utils/adt/array_userfuncs.c:472 utils/adt/arrayfuncs.c:263 +#: utils/adt/arrayfuncs.c:561 utils/adt/arrayfuncs.c:1291 +#: utils/adt/arrayfuncs.c:3335 utils/adt/arrayfuncs.c:5219 +#: utils/adt/arrayfuncs.c:5742 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "el número de dimensiones del array (%d) excede el máximo permitido (%d)" -#: executor/execQual.c:319 executor/execQual.c:347 +#: executor/execQual.c:313 executor/execQual.c:341 #, c-format msgid "array subscript in assignment must not be null" msgstr "subíndice de array en asignación no puede ser nulo" -#: executor/execQual.c:642 executor/execQual.c:4078 +#: executor/execQual.c:635 executor/execQual.c:4116 #, c-format msgid "attribute %d has wrong type" msgstr "el atributo %d tiene tipo erróneo" -#: executor/execQual.c:643 executor/execQual.c:4079 +#: executor/execQual.c:636 executor/execQual.c:4117 #, c-format msgid "Table has type %s, but query expects %s." msgstr "La tabla tiene tipo %s, pero la consulta esperaba %s." -#: executor/execQual.c:836 executor/execQual.c:853 executor/execQual.c:1050 -#: executor/nodeModifyTable.c:85 executor/nodeModifyTable.c:95 -#: executor/nodeModifyTable.c:112 executor/nodeModifyTable.c:120 +#: executor/execQual.c:829 executor/execQual.c:846 executor/execQual.c:1046 +#: executor/nodeModifyTable.c:95 executor/nodeModifyTable.c:105 +#: executor/nodeModifyTable.c:122 executor/nodeModifyTable.c:130 #, c-format msgid "table row type and query-specified row type do not match" msgstr "el tipo de registro de la tabla no coincide con el tipo de registro de la consulta" -#: executor/execQual.c:837 +#: executor/execQual.c:830 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." msgstr[0] "La fila de la tabla contiene %d atributo, pero la consulta esperaba %d." msgstr[1] "La fila de la tabla contiene %d atributos, pero la consulta esperaba %d." -#: executor/execQual.c:854 executor/nodeModifyTable.c:96 +#: executor/execQual.c:847 executor/nodeModifyTable.c:106 #, 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/execQual.c:1051 executor/execQual.c:1647 +#: executor/execQual.c:1047 executor/execQual.c:1643 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "Discordancia de almacenamiento físico en atributo eliminado en la posición %d." -#: executor/execQual.c:1326 parser/parse_func.c:114 parser/parse_func.c:535 -#: parser/parse_func.c:887 +#: executor/execQual.c:1322 parser/parse_func.c:115 parser/parse_func.c:542 +#: parser/parse_func.c:894 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" msgstr[0] "no se pueden pasar más de %d argumento a una función" msgstr[1] "no se pueden pasar más de %d argumentos a una función" -#: executor/execQual.c:1515 +#: executor/execQual.c:1511 #, c-format msgid "functions and operators can take at most one set argument" msgstr "las funciones y operadores pueden tomar a lo más un argumento que sea un conjunto" -#: executor/execQual.c:1565 +#: executor/execQual.c:1561 #, c-format msgid "function returning setof record called in context that cannot accept type record" msgstr "se llamó una función que retorna «setof record» en un contexto que no puede aceptar el tipo record" -#: executor/execQual.c:1620 executor/execQual.c:1636 executor/execQual.c:1646 +#: executor/execQual.c:1616 executor/execQual.c:1632 executor/execQual.c:1642 #, c-format msgid "function return row and query-specified return row do not match" msgstr "la fila de retorno especificada en la consulta no coincide con fila de retorno de la función" -#: executor/execQual.c:1621 +#: executor/execQual.c:1617 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." msgstr[0] "Fila retornada contiene %d atributo, pero la consulta esperaba %d." msgstr[1] "Fila retornada contiene %d atributos, pero la consulta esperaba %d." -#: executor/execQual.c:1637 +#: executor/execQual.c:1633 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "Tipo retornado %s en posición ordinal %d, pero la consulta esperaba %s." -#: executor/execQual.c:1879 executor/execQual.c:2310 +#: executor/execQual.c:1875 executor/execQual.c:2306 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "no se siguió el protocolo de función tabular para el modo de materialización" -#: executor/execQual.c:1899 executor/execQual.c:2317 +#: executor/execQual.c:1895 executor/execQual.c:2313 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "modo de retorno (returnMode) de la función tabular no es reconocido: %d" -#: executor/execQual.c:2227 +#: executor/execQual.c:2223 #, c-format msgid "function returning set of rows cannot return null value" msgstr "una función que retorna un conjunto de registros no puede devolver un valor null" -#: executor/execQual.c:2284 +#: executor/execQual.c:2280 #, c-format msgid "rows returned by function are not all of the same row type" msgstr "las filas retornadas por la función no tienen todas el mismo tipo de registro" -#: executor/execQual.c:2499 +#: executor/execQual.c:2495 #, c-format msgid "IS DISTINCT FROM does not support set arguments" msgstr "IS DISTINCT FROM no soporta argumentos que sean conjuntos" -#: executor/execQual.c:2576 +#: executor/execQual.c:2572 #, c-format msgid "op ANY/ALL (array) does not support set arguments" msgstr "op ANY/ALL (array) no soporta argumentos que sean conjuntos" -#: executor/execQual.c:3135 +#: executor/execQual.c:3169 #, c-format msgid "cannot merge incompatible arrays" msgstr "no se puede mezclar arrays incompatibles" -#: executor/execQual.c:3136 +#: executor/execQual.c:3170 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "El array con tipo de elemento %s no puede ser incluido en una sentencia ARRAY con tipo de elemento %s." -#: executor/execQual.c:3177 executor/execQual.c:3204 +#: executor/execQual.c:3211 executor/execQual.c:3238 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "los arrays multidimensionales deben tener expresiones de arrays con dimensiones coincidentes" -#: executor/execQual.c:3719 +#: executor/execQual.c:3753 #, c-format msgid "NULLIF does not support set arguments" msgstr "NULLIF no soporta argumentos que sean conjuntos" -#: executor/execQual.c:3949 utils/adt/domains.c:131 +#: executor/execQual.c:3986 utils/adt/domains.c:136 #, c-format msgid "domain %s does not allow null values" msgstr "el dominio %s no permite valores null" -#: executor/execQual.c:3979 utils/adt/domains.c:168 +#: executor/execQual.c:4016 utils/adt/domains.c:173 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "el valor para el dominio %s viola la restricción «check» «%s»" -#: executor/execQual.c:4337 +#: executor/execQual.c:4371 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF no está soportado para este tipo de tabla" -#: executor/execQual.c:4484 parser/parse_agg.c:434 parser/parse_agg.c:464 +#: executor/execQual.c:4518 parser/parse_agg.c:596 parser/parse_agg.c:626 #, c-format msgid "aggregate function calls cannot be nested" msgstr "no se pueden anidar llamadas a funciones de agregación" -#: executor/execQual.c:4524 parser/parse_agg.c:565 +#: executor/execQual.c:4580 parser/parse_agg.c:742 #, c-format msgid "window function calls cannot be nested" msgstr "no se pueden anidar llamadas a funciones de ventana deslizante" -#: executor/execQual.c:4736 +#: executor/execQual.c:4792 #, c-format msgid "target type is not an array" msgstr "el tipo de destino no es un array" -#: executor/execQual.c:4851 +#: executor/execQual.c:4907 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "la columna de ROW() es de tipo %s en lugar de ser de tipo %s" -#: executor/execQual.c:4986 utils/adt/arrayfuncs.c:3424 -#: utils/adt/rowtypes.c:921 +#: executor/execQual.c:5042 utils/adt/arrayfuncs.c:3777 +#: utils/adt/arrayfuncs.c:6315 utils/adt/rowtypes.c:916 #, c-format msgid "could not identify a comparison function for type %s" msgstr "no se pudo identificar una función de comparación para el tipo %s" -#: executor/execUtils.c:844 +#: executor/execUtils.c:831 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "la vista materializada «%s» no ha sido poblada" -#: executor/execUtils.c:846 +#: executor/execUtils.c:833 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "Use la orden REFRESH MATERIALIZED VIEW." -#: executor/execUtils.c:1324 -#, c-format -msgid "could not create exclusion constraint \"%s\"" -msgstr "no se pudo crear la restricción por exclusión «%s»" - -#: executor/execUtils.c:1326 -#, c-format -msgid "Key %s conflicts with key %s." -msgstr "La llave %s está en conflicto con la llave %s." - -#: executor/execUtils.c:1333 -#, c-format -msgid "conflicting key value violates exclusion constraint \"%s\"" -msgstr "llave en conflicto viola restricción por exclusión «%s»" - -#: executor/execUtils.c:1335 -#, c-format -msgid "Key %s conflicts with existing key %s." -msgstr "La llave %s está en conflicto con la llave existente %s." - #: executor/functions.c:225 #, c-format msgid "could not determine actual type of argument declared %s" @@ -8843,73 +9733,78 @@ msgid "%s is not allowed in a SQL function" msgstr "%s no está permitido en una función SQL" #. translator: %s is a SQL statement name -#: executor/functions.c:513 executor/spi.c:1343 executor/spi.c:2129 +#: executor/functions.c:513 executor/spi.c:1368 executor/spi.c:2158 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s no está permitido en una función no-«volatile»" -#: executor/functions.c:638 +#: executor/functions.c:641 #, c-format msgid "could not determine actual result type for function declared to return type %s" msgstr "no se pudo determinar el tipo de resultado para función declarada retornando tipo %s" -#: executor/functions.c:1402 +#: executor/functions.c:1405 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "función SQL «%s» en la sentencia %d" -#: executor/functions.c:1428 +#: executor/functions.c:1431 #, c-format msgid "SQL function \"%s\" during startup" msgstr "función SQL «%s» durante el inicio" -#: executor/functions.c:1587 executor/functions.c:1624 -#: executor/functions.c:1636 executor/functions.c:1749 -#: executor/functions.c:1782 executor/functions.c:1812 +#: executor/functions.c:1590 executor/functions.c:1627 +#: executor/functions.c:1639 executor/functions.c:1752 +#: executor/functions.c:1785 executor/functions.c:1815 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "el tipo de retorno de función declarada para retornar %s no concuerda" -#: executor/functions.c:1589 +#: executor/functions.c:1592 #, c-format msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." msgstr "La sentencia final de la función debe ser un SELECT o INSERT/UPDATE/DELETE RETURNING." -#: executor/functions.c:1626 +#: executor/functions.c:1629 #, c-format msgid "Final statement must return exactly one column." msgstr "La sentencia final debe retornar exactamente una columna." -#: executor/functions.c:1638 +#: executor/functions.c:1641 #, c-format msgid "Actual return type is %s." msgstr "El verdadero tipo de retorno es %s." -#: executor/functions.c:1751 +#: executor/functions.c:1754 #, c-format msgid "Final statement returns too many columns." msgstr "La sentencia final retorna demasiadas columnas." -#: executor/functions.c:1784 +#: executor/functions.c:1787 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "La sentencia final retorna %s en lugar de %s en la columna %d." -#: executor/functions.c:1814 +#: executor/functions.c:1817 #, c-format msgid "Final statement returns too few columns." msgstr "La sentencia final retorna muy pocas columnas." -#: executor/functions.c:1863 +#: executor/functions.c:1866 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "el tipo de retorno %s no es soportado en funciones SQL" -#: executor/nodeAgg.c:1865 executor/nodeWindowAgg.c:2285 +#: executor/nodeAgg.c:2450 executor/nodeWindowAgg.c:2286 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "la función de agregación %u necesita tener tipos de entrada y transición compatibles" +#: executor/nodeCustom.c:147 executor/nodeCustom.c:158 +#, fuzzy, c-format +msgid "custom-scan \"%s\" does not support MarkPos" +msgstr "la extensión «%s» no soporta SET SCHEMA" + #: executor/nodeHashjoin.c:823 executor/nodeHashjoin.c:853 #, c-format msgid "could not rewind hash-join temporary file: %m" @@ -8925,6 +9820,11 @@ msgstr "no se pudo escribir el archivo temporal de hash-join: %m" msgid "could not read from hash-join temporary file: %m" msgstr "no se pudo leer el archivo temporal de hash-join: %m" +#: executor/nodeIndexonlyscan.c:179 +#, fuzzy, c-format +msgid "lossy distance functions are not supported in index-only scans" +msgstr "no se permiten funciones de ventana deslizante en predicados de índice" + #: executor/nodeLimit.c:253 #, c-format msgid "OFFSET must not be negative" @@ -8935,33 +9835,53 @@ msgstr "OFFSET no debe ser negativo" msgid "LIMIT must not be negative" msgstr "LIMIT no debe ser negativo" -#: executor/nodeMergejoin.c:1576 +#: executor/nodeMergejoin.c:1584 #, c-format msgid "RIGHT JOIN is only supported with merge-joinable join conditions" msgstr "RIGHT JOIN sólo está soportado con condiciones que se pueden usar con merge join" -#: executor/nodeMergejoin.c:1596 +#: executor/nodeMergejoin.c:1604 #, c-format msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "FULL JOIN sólo está soportado con condiciones que se pueden usar con merge join" -#: executor/nodeModifyTable.c:86 +#: executor/nodeModifyTable.c:96 #, c-format msgid "Query has too many columns." msgstr "La consulta tiene demasiadas columnas." -#: executor/nodeModifyTable.c:113 +#: executor/nodeModifyTable.c:123 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "La consulta entrega un valor para una columna eliminada en la posición %d." -#: executor/nodeModifyTable.c:121 +#: executor/nodeModifyTable.c:131 #, c-format msgid "Query has too few columns." msgstr "La consulta tiene muy pocas columnas." -#: executor/nodeSubplan.c:304 executor/nodeSubplan.c:343 -#: executor/nodeSubplan.c:970 +#: executor/nodeModifyTable.c:1080 +#, c-format +msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" +msgstr "" + +#: executor/nodeModifyTable.c:1081 +#, c-format +msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." +msgstr "" + +#: executor/nodeSamplescan.c:307 +#, fuzzy, c-format +msgid "TABLESAMPLE parameter cannot be null" +msgstr "el argumento %d no puede ser null" + +#: executor/nodeSamplescan.c:320 +#, c-format +msgid "TABLESAMPLE REPEATABLE parameter cannot be null" +msgstr "" + +#: executor/nodeSubplan.c:345 executor/nodeSubplan.c:384 +#: executor/nodeSubplan.c:1040 #, 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" @@ -8991,43 +9911,43 @@ msgstr "la posición final del marco no debe ser null" msgid "frame ending offset must not be negative" msgstr "la posición final del marco no debe ser negativa" -#: executor/spi.c:213 +#: executor/spi.c:214 #, c-format msgid "transaction left non-empty SPI stack" msgstr "transacción dejó un stack SPI no vacío" -#: executor/spi.c:214 executor/spi.c:278 +#: executor/spi.c:215 executor/spi.c:279 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "Revise llamadas a «SPI_finish» faltantes." -#: executor/spi.c:277 +#: executor/spi.c:278 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "subtransacción dejó un stack SPI no vacío" -#: executor/spi.c:1207 +#: executor/spi.c:1229 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "no se puede abrir plan de varias consultas como cursor" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1212 +#: executor/spi.c:1234 #, c-format msgid "cannot open %s query as cursor" msgstr "no se puede abrir consulta %s como cursor" -#: executor/spi.c:1320 +#: executor/spi.c:1342 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE no está soportado" -#: executor/spi.c:1321 parser/analyze.c:2128 +#: executor/spi.c:1343 parser/analyze.c:2292 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Los cursores declarados SCROLL deben ser READ ONLY." -#: executor/spi.c:2419 +#: executor/spi.c:2450 #, c-format msgid "SQL statement \"%s\"" msgstr "sentencia SQL: «%s»" @@ -9037,17 +9957,12 @@ msgstr "sentencia SQL: «%s»" msgid "user mapping not found for \"%s\"" msgstr "no se encontró un mapeo para el usuario «%s»" -#: foreign/foreign.c:348 -#, c-format -msgid "foreign-data wrapper \"%s\" has no handler" -msgstr "el conector de datos externos «%s» no tiene manejador" - -#: foreign/foreign.c:573 +#: foreign/foreign.c:643 #, c-format msgid "invalid option \"%s\"" msgstr "el nombre de opción «%s» no es válido" -#: foreign/foreign.c:574 +#: foreign/foreign.c:644 #, c-format msgid "Valid options in this context are: %s" msgstr "Las opciones válidas en este contexto son: %s" @@ -9122,105 +10037,105 @@ msgstr "la autentificación falló para el usuario «%s»: método de autentific 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:337 +#: libpq/auth.c:330 #, c-format msgid "connection requires a valid client certificate" msgstr "la conexión requiere un certificado de cliente válido" -#: libpq/auth.c:379 +#: libpq/auth.c:372 #, 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" -#: libpq/auth.c:381 libpq/auth.c:397 libpq/auth.c:455 libpq/auth.c:473 +#: libpq/auth.c:374 libpq/auth.c:390 libpq/auth.c:448 libpq/auth.c:466 msgid "SSL off" msgstr "SSL inactivo" -#: libpq/auth.c:381 libpq/auth.c:397 libpq/auth.c:455 libpq/auth.c:473 +#: libpq/auth.c:374 libpq/auth.c:390 libpq/auth.c:448 libpq/auth.c:466 msgid "SSL on" msgstr "SSL activo" -#: libpq/auth.c:385 +#: libpq/auth.c:378 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" msgstr "pg_hba.conf rechaza la conexión de replicación para el servidor «%s», usuario «%s»" -#: libpq/auth.c:394 +#: libpq/auth.c:387 #, 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:401 +#: libpq/auth.c:394 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\"" msgstr "pg_hba.conf rechaza la conexión para el servidor «%s», usuario «%s», base de datos «%s»" -#: libpq/auth.c:430 +#: libpq/auth.c:423 #, 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:433 +#: libpq/auth.c:426 #, 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:436 +#: libpq/auth.c:429 #, 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:439 +#: libpq/auth.c:432 #, 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:444 +#: libpq/auth.c:437 #, 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." -#: libpq/auth.c:453 +#: libpq/auth.c:446 #, 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" -#: libpq/auth.c:460 +#: libpq/auth.c:453 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\"" msgstr "no hay una línea en pg_hba.conf para la conexión de replicación desde el servidor «%s», usuario «%s»" -#: libpq/auth.c:470 +#: libpq/auth.c:463 #, 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:478 +#: libpq/auth.c:471 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" msgstr "no hay una línea en pg_hba.conf para «%s», usuario «%s», base de datos «%s»" -#: libpq/auth.c:521 libpq/hba.c:1212 +#: libpq/auth.c:514 libpq/hba.c:1180 #, 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:645 +#: libpq/auth.c:640 #, 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:673 +#: libpq/auth.c:668 #, c-format msgid "invalid password packet size" msgstr "el tamaño del paquete de contraseña no es válido" -#: libpq/auth.c:677 +#: libpq/auth.c:672 #, c-format msgid "received password packet" msgstr "se recibió un paquete de clave" -#: libpq/auth.c:804 +#: libpq/auth.c:799 #, c-format msgid "GSSAPI is not supported in protocol version 2" msgstr "GSSAPI no está soportado por el protocolo versión 2" @@ -9230,309 +10145,309 @@ msgstr "GSSAPI no está soportado por el protocolo versión 2" msgid "expected GSS response, got message type %d" msgstr "se esperaba una respuesta GSS, se obtuvo mensaje de tipo %d" -#: libpq/auth.c:918 +#: libpq/auth.c:920 msgid "accepting GSS security context failed" msgstr "falló la aceptación del contexto de seguridad GSS" -#: libpq/auth.c:944 +#: libpq/auth.c:946 msgid "retrieving GSS user name failed" msgstr "falló la obtención del nombre de usuario GSS" -#: libpq/auth.c:1061 +#: libpq/auth.c:1063 #, c-format msgid "SSPI is not supported in protocol version 2" msgstr "SSPI no está soportado por el protocolo versión 2" -#: libpq/auth.c:1076 +#: libpq/auth.c:1078 msgid "could not acquire SSPI credentials" msgstr "no se pudo obtener las credenciales SSPI" -#: libpq/auth.c:1093 +#: libpq/auth.c:1096 #, 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:1165 +#: libpq/auth.c:1168 msgid "could not accept SSPI security context" msgstr "no se pudo aceptar un contexto SSPI" -#: libpq/auth.c:1227 +#: libpq/auth.c:1230 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:1470 +#: libpq/auth.c:1475 #, 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:1485 +#: libpq/auth.c:1490 #, 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:1497 +#: libpq/auth.c:1502 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "no se pudo conectar al servidor Ident «%s», port %s: %m" -#: libpq/auth.c:1517 +#: libpq/auth.c:1524 #, 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:1532 +#: libpq/auth.c:1541 #, 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:1542 +#: libpq/auth.c:1551 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "respuesta del servidor Ident en formato no válido: «%s»" -#: libpq/auth.c:1580 +#: libpq/auth.c:1591 #, 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:1584 +#: libpq/auth.c:1595 #, c-format msgid "could not get peer credentials: %m" msgstr "no se pudo recibir credenciales: %m" -#: libpq/auth.c:1593 +#: libpq/auth.c:1604 #, c-format -msgid "could not to look up local user ID %ld: %s" -msgstr "no se pudo encontrar el ID del usuario local «%ld»: %s" +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:1676 libpq/auth.c:1947 libpq/auth.c:2304 +#: libpq/auth.c:1688 libpq/auth.c:1959 libpq/auth.c:2315 #, c-format msgid "empty password returned by client" msgstr "el cliente retornó una contraseña vacía" -#: libpq/auth.c:1686 +#: libpq/auth.c:1698 #, c-format msgid "error from underlying PAM layer: %s" msgstr "se ha recibido un error de la biblioteca PAM: %s" -#: libpq/auth.c:1755 +#: libpq/auth.c:1767 #, c-format msgid "could not create PAM authenticator: %s" msgstr "no se pudo crear autenticador PAM: %s" -#: libpq/auth.c:1766 +#: libpq/auth.c:1778 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) falló: %s" -#: libpq/auth.c:1777 +#: libpq/auth.c:1789 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) falló: %s" -#: libpq/auth.c:1788 +#: libpq/auth.c:1800 #, c-format msgid "pam_authenticate failed: %s" msgstr "pam_authenticate falló: %s" -#: libpq/auth.c:1799 +#: libpq/auth.c:1811 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt falló: %s" -#: libpq/auth.c:1810 +#: libpq/auth.c:1822 #, c-format msgid "could not release PAM authenticator: %s" msgstr "no se pudo liberar autenticador PAM: %s" -#: libpq/auth.c:1843 +#: libpq/auth.c:1855 #, c-format msgid "could not initialize LDAP: %m" msgstr "no se pudo inicializar LDAP: %m" -#: libpq/auth.c:1846 +#: libpq/auth.c:1858 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "no se pudo inicializar LDAP: código de error %d" -#: libpq/auth.c:1856 +#: libpq/auth.c:1868 #, 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:1885 +#: libpq/auth.c:1897 #, c-format msgid "could not load wldap32.dll" msgstr "no se pudo cargar wldap32.dll" -#: libpq/auth.c:1893 +#: libpq/auth.c:1905 #, 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:1894 +#: libpq/auth.c:1906 #, 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:1909 +#: libpq/auth.c:1921 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "no se pudo iniciar sesión de LDAP TLS: %s" -#: libpq/auth.c:1931 +#: libpq/auth.c:1943 #, c-format msgid "LDAP server not specified" msgstr "servidor LDAP no especificado" -#: libpq/auth.c:1984 +#: libpq/auth.c:1996 #, 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:1999 +#: libpq/auth.c:2011 #, 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:2023 +#: libpq/auth.c:2035 #, 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:2034 +#: libpq/auth.c:2046 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "no existe el usuario LDAP «%s»" -#: libpq/auth.c:2035 +#: libpq/auth.c:2047 #, 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:2039 +#: libpq/auth.c:2051 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "el usuario LDAP «%s» no es única" -#: libpq/auth.c:2040 +#: libpq/auth.c:2052 #, 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:2058 +#: libpq/auth.c:2070 #, 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:2078 +#: libpq/auth.c:2090 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\": %s" msgstr "no se pudo desconectar después de buscar al usuario «%s» en el servidor «%s»: %s" -#: libpq/auth.c:2108 +#: libpq/auth.c:2120 #, 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:2136 +#: libpq/auth.c:2148 #, 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:2260 +#: libpq/auth.c:2271 #, c-format msgid "RADIUS server not specified" msgstr "servidor RADIUS no especificado" -#: libpq/auth.c:2267 +#: libpq/auth.c:2278 #, c-format msgid "RADIUS secret not specified" msgstr "secreto RADIUS no especificado" -#: libpq/auth.c:2283 libpq/hba.c:1609 +#: libpq/auth.c:2294 libpq/hba.c:1590 #, 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:2311 +#: libpq/auth.c:2322 #, c-format msgid "RADIUS authentication does not support passwords longer than 16 characters" msgstr "la autentificación RADIUS no soporta contraseñas más largas de 16 caracteres" -#: libpq/auth.c:2322 +#: libpq/auth.c:2333 #, c-format msgid "could not generate random encryption vector" msgstr "no se pudo generar un vector aleatorio de encriptación" -#: libpq/auth.c:2345 +#: libpq/auth.c:2356 #, c-format msgid "could not perform MD5 encryption of password" msgstr "no se pudo efectuar cifrado MD5 de la contraseña" -#: libpq/auth.c:2367 +#: libpq/auth.c:2378 #, c-format msgid "could not create RADIUS socket: %m" msgstr "no se pudo crear el socket RADIUS: %m" -#: libpq/auth.c:2388 +#: libpq/auth.c:2399 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "no se pudo enlazar el socket RADIUS local: %m" -#: libpq/auth.c:2398 +#: libpq/auth.c:2409 #, c-format msgid "could not send RADIUS packet: %m" msgstr "no se pudo enviar el paquete RADIUS: %m" -#: libpq/auth.c:2427 libpq/auth.c:2452 +#: libpq/auth.c:2442 libpq/auth.c:2467 #, c-format msgid "timeout waiting for RADIUS response" msgstr "se agotó el tiempo de espera de la respuesta RADIUS" -#: libpq/auth.c:2445 +#: libpq/auth.c:2460 #, 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:2474 +#: libpq/auth.c:2489 #, c-format msgid "could not read RADIUS response: %m" msgstr "no se pudo leer la respuesta RADIUS: %m" -#: libpq/auth.c:2486 libpq/auth.c:2490 +#: libpq/auth.c:2501 libpq/auth.c:2505 #, c-format msgid "RADIUS response was sent from incorrect port: %d" msgstr "la respuesta RADIUS fue enviada desde el port incorrecto: %d" -#: libpq/auth.c:2499 +#: libpq/auth.c:2514 #, c-format msgid "RADIUS response too short: %d" msgstr "la respuesta RADIUS es demasiado corta: %d" -#: libpq/auth.c:2506 +#: libpq/auth.c:2521 #, c-format msgid "RADIUS response has corrupt length: %d (actual length %d)" msgstr "la respuesta RADIUS tiene largo corrupto: %d (largo real %d)" -#: libpq/auth.c:2514 +#: libpq/auth.c:2529 #, c-format msgid "RADIUS response is to a different request: %d (should be %d)" msgstr "la respuesta RADIUS es a una petición diferente: %d (debería ser %d)" -#: libpq/auth.c:2539 +#: libpq/auth.c:2554 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "no se pudo realizar cifrado MD5 del paquete recibido" -#: libpq/auth.c:2548 +#: libpq/auth.c:2563 #, c-format msgid "RADIUS response has incorrect MD5 signature" msgstr "la respuesta RADIUS tiene firma MD5 incorrecta" -#: libpq/auth.c:2565 +#: libpq/auth.c:2580 #, c-format msgid "RADIUS response has invalid code (%d) for user \"%s\"" msgstr "la respuesta RADIUS tiene código no válido (%d) para el usuario «%s»" @@ -9610,156 +10525,137 @@ msgstr "no se pudo escribir el archivo del servidor «%s»: %m" msgid "large object read request is too large" msgstr "el tamaño de petición de lectura de objeto grande es muy grande" -#: libpq/be-fsstubs.c:857 utils/adt/genfile.c:187 utils/adt/genfile.c:232 +#: libpq/be-fsstubs.c:857 utils/adt/genfile.c:211 utils/adt/genfile.c:252 #, c-format msgid "requested length cannot be negative" msgstr "el tamaño solicitado no puede ser negativo" -#: libpq/be-secure.c:296 libpq/be-secure.c:418 -#, c-format -msgid "SSL error: %s" -msgstr "error de SSL: %s" - -#: libpq/be-secure.c:305 libpq/be-secure.c:427 libpq/be-secure.c:1046 -#, c-format -msgid "unrecognized SSL error code: %d" -msgstr "código de error SSL no reconocido: %d" - -#: libpq/be-secure.c:365 -#, c-format -msgid "SSL failure during renegotiation start" -msgstr "fallo SSL durante el inicio de renegociación" - -#: libpq/be-secure.c:380 -#, c-format -msgid "SSL handshake failure on renegotiation, retrying" -msgstr "fallo en el «handshake» durante la renegociación SSL, intentando de nuevo" - -#: libpq/be-secure.c:384 -#, c-format -msgid "could not complete SSL handshake on renegotiation, too many failures" -msgstr "no se pudo completar el «handshake» durante la renegociación SSL, demasiados fallos" - -#: libpq/be-secure.c:453 -#, c-format -msgid "SSL failed to renegotiate connection before limit expired" -msgstr "SSL no pudo renegociar conexión antes de la expiración del límite" - -#: libpq/be-secure.c:793 -#, c-format -msgid "ECDH: unrecognized curve name: %s" -msgstr "ECDH: nombre de curva no reconocida: %s" - -#: libpq/be-secure.c:798 -#, c-format -msgid "ECDH: could not create key" -msgstr "ECDH: no se pudo crear la llave" - -#: libpq/be-secure.c:835 +#: libpq/be-secure-openssl.c:184 #, c-format msgid "could not create SSL context: %s" msgstr "no se pudo crear un contexto SSL: %s" -#: libpq/be-secure.c:851 +#: libpq/be-secure-openssl.c:200 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "no se pudo cargar el archivo de certificado de servidor «%s»: %s" -#: libpq/be-secure.c:857 +#: libpq/be-secure-openssl.c:206 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "no se pudo acceder al archivo de la llave privada «%s»: %m" -#: libpq/be-secure.c:872 +#: libpq/be-secure-openssl.c:221 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "el archivo de la llave privada «%s» tiene acceso para el grupo u otros" -#: libpq/be-secure.c:874 +#: libpq/be-secure-openssl.c:223 #, c-format msgid "Permissions should be u=rw (0600) or less." msgstr "Los permisos deberían ser u=rw (0500) o menos." -#: libpq/be-secure.c:881 +#: libpq/be-secure-openssl.c:230 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "no se pudo cargar el archivo de la llave privada «%s»: %s" -#: libpq/be-secure.c:886 +#: libpq/be-secure-openssl.c:235 #, c-format msgid "check of private key failed: %s" msgstr "falló la revisión de la llave privada: %s" -#: libpq/be-secure.c:915 +#: libpq/be-secure-openssl.c:264 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "no se pudo cargar el archivo del certificado raíz «%s»: %s" -#: libpq/be-secure.c:939 +#: libpq/be-secure-openssl.c:288 #, c-format msgid "SSL certificate revocation list file \"%s\" ignored" msgstr "ignorando lista de revocación de certificados SSL «%s»" -#: libpq/be-secure.c:941 +#: libpq/be-secure-openssl.c:290 #, c-format msgid "SSL library does not support certificate revocation lists." msgstr "La libreria SSL no soporta listas de revocación de certificados." -#: libpq/be-secure.c:946 +#: libpq/be-secure-openssl.c:295 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "no se pudo cargar el archivo de lista de revocación de certificados SSL «%s»: %s" -#: libpq/be-secure.c:991 +#: libpq/be-secure-openssl.c:341 #, c-format msgid "could not initialize SSL connection: %s" msgstr "no se pudo inicializar la conexión SSL: %s" -#: libpq/be-secure.c:1000 +#: libpq/be-secure-openssl.c:349 #, c-format msgid "could not set SSL socket: %s" msgstr "no se definir un socket SSL: %s" -#: libpq/be-secure.c:1026 +#: libpq/be-secure-openssl.c:383 #, c-format msgid "could not accept SSL connection: %m" msgstr "no se pudo aceptar una conexión SSL: %m" -#: libpq/be-secure.c:1030 libpq/be-secure.c:1041 +#: libpq/be-secure-openssl.c:387 libpq/be-secure-openssl.c:398 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "no se pudo aceptar una conexión SSL: se detectó EOF" -#: libpq/be-secure.c:1035 +#: libpq/be-secure-openssl.c:392 #, c-format msgid "could not accept SSL connection: %s" msgstr "no se pudo aceptar una conexión SSL: %s" -#: libpq/be-secure.c:1091 +#: libpq/be-secure-openssl.c:403 libpq/be-secure-openssl.c:541 +#: libpq/be-secure-openssl.c:598 +#, c-format +msgid "unrecognized SSL error code: %d" +msgstr "código de error SSL no reconocido: %d" + +#: libpq/be-secure-openssl.c:447 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "el «common name» del certificado SSL contiene un carácter null" -#: libpq/be-secure.c:1102 +#: libpq/be-secure-openssl.c:458 #, c-format msgid "SSL connection from \"%s\"" msgstr "conexión SSL desde «%s»" -#: libpq/be-secure.c:1153 +#: libpq/be-secure-openssl.c:532 libpq/be-secure-openssl.c:589 +#, c-format +msgid "SSL error: %s" +msgstr "error de SSL: %s" + +#: libpq/be-secure-openssl.c:937 +#, c-format +msgid "ECDH: unrecognized curve name: %s" +msgstr "ECDH: nombre de curva no reconocida: %s" + +#: libpq/be-secure-openssl.c:942 +#, c-format +msgid "ECDH: could not create key" +msgstr "ECDH: no se pudo crear la llave" + +#: libpq/be-secure-openssl.c:966 msgid "no SSL error reported" msgstr "código de error SSL no reportado" -#: libpq/be-secure.c:1157 +#: libpq/be-secure-openssl.c:970 #, c-format msgid "SSL error code %lu" msgstr "código de error SSL %lu" -#: libpq/crypt.c:67 +#: libpq/crypt.c:60 #, c-format msgid "User \"%s\" has no password assigned." msgstr "El usuario «%s» no tiene una contraseña asignada." -#: libpq/crypt.c:160 +#: libpq/crypt.c:150 #, c-format msgid "User \"%s\" has an expired password." msgstr "El usuario «%s» tiene contraseña expirada." @@ -9779,430 +10675,430 @@ msgstr "no se pudo abrir el archivo secundario de autentificación «@%s» como msgid "authentication file line too long" msgstr "línea en el archivo de autentificación demasiado larga" -#: libpq/hba.c:410 libpq/hba.c:787 libpq/hba.c:803 libpq/hba.c:833 -#: libpq/hba.c:879 libpq/hba.c:892 libpq/hba.c:914 libpq/hba.c:923 -#: libpq/hba.c:946 libpq/hba.c:958 libpq/hba.c:977 libpq/hba.c:998 -#: libpq/hba.c:1009 libpq/hba.c:1064 libpq/hba.c:1082 libpq/hba.c:1094 -#: libpq/hba.c:1111 libpq/hba.c:1121 libpq/hba.c:1135 libpq/hba.c:1151 -#: libpq/hba.c:1166 libpq/hba.c:1177 libpq/hba.c:1213 libpq/hba.c:1245 -#: libpq/hba.c:1256 libpq/hba.c:1276 libpq/hba.c:1287 libpq/hba.c:1304 -#: libpq/hba.c:1329 libpq/hba.c:1366 libpq/hba.c:1376 libpq/hba.c:1432 -#: libpq/hba.c:1444 libpq/hba.c:1457 libpq/hba.c:1540 libpq/hba.c:1611 -#: libpq/hba.c:1629 libpq/hba.c:1650 tsearch/ts_locale.c:182 +#: libpq/hba.c:410 libpq/hba.c:757 libpq/hba.c:773 libpq/hba.c:803 +#: libpq/hba.c:849 libpq/hba.c:862 libpq/hba.c:884 libpq/hba.c:893 +#: libpq/hba.c:914 libpq/hba.c:926 libpq/hba.c:945 libpq/hba.c:966 +#: libpq/hba.c:977 libpq/hba.c:1032 libpq/hba.c:1050 libpq/hba.c:1062 +#: libpq/hba.c:1079 libpq/hba.c:1089 libpq/hba.c:1103 libpq/hba.c:1119 +#: libpq/hba.c:1134 libpq/hba.c:1145 libpq/hba.c:1181 libpq/hba.c:1213 +#: libpq/hba.c:1224 libpq/hba.c:1244 libpq/hba.c:1255 libpq/hba.c:1272 +#: libpq/hba.c:1297 libpq/hba.c:1334 libpq/hba.c:1344 libpq/hba.c:1413 +#: libpq/hba.c:1425 libpq/hba.c:1438 libpq/hba.c:1521 libpq/hba.c:1592 +#: libpq/hba.c:1610 libpq/hba.c:1631 tsearch/ts_locale.c:182 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "línea %d del archivo de configuración «%s»" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:785 +#: libpq/hba.c:755 #, c-format msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "la opción de autentificación «%s» sólo es válida para los métodos de autentificación %s" -#: libpq/hba.c:801 +#: libpq/hba.c:771 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "el método de autentificación «%s» requiere que el argumento «%s» esté definido" -#: libpq/hba.c:822 +#: libpq/hba.c:792 #, c-format msgid "missing entry in file \"%s\" at end of line %d" msgstr "falta una entrada en el archivo «%s» al final de la línea %d" -#: libpq/hba.c:832 +#: libpq/hba.c:802 #, c-format msgid "multiple values in ident field" msgstr "múltiples valores en campo «ident»" -#: libpq/hba.c:877 +#: libpq/hba.c:847 #, c-format msgid "multiple values specified for connection type" msgstr "múltiples valores especificados para tipo de conexión" -#: libpq/hba.c:878 +#: libpq/hba.c:848 #, c-format msgid "Specify exactly one connection type per line." msgstr "Especifique exactamente un tipo de conexión por línea." -#: libpq/hba.c:891 +#: libpq/hba.c:861 #, c-format msgid "local connections are not supported by this build" msgstr "las conexiones locales no están soportadas en este servidor" -#: libpq/hba.c:912 +#: libpq/hba.c:882 #, c-format msgid "hostssl requires SSL to be turned on" msgstr "hostssl requiere que SSL esté activado" -#: libpq/hba.c:913 +#: libpq/hba.c:883 #, c-format msgid "Set ssl = on in postgresql.conf." msgstr "Defina «ssl = on» en postgresql.conf." -#: libpq/hba.c:921 +#: libpq/hba.c:891 #, c-format msgid "hostssl is not supported by this build" msgstr "hostssl no está soportado en este servidor" -#: libpq/hba.c:922 +#: libpq/hba.c:892 #, c-format msgid "Compile with --with-openssl to use SSL connections." msgstr "Compile con --with-openssl para usar conexiones SSL." -#: libpq/hba.c:944 +#: libpq/hba.c:912 #, c-format msgid "invalid connection type \"%s\"" msgstr "tipo de conexión «%s» no válido" -#: libpq/hba.c:957 +#: libpq/hba.c:925 #, c-format msgid "end-of-line before database specification" msgstr "fin de línea antes de especificación de base de datos" -#: libpq/hba.c:976 +#: libpq/hba.c:944 #, c-format msgid "end-of-line before role specification" msgstr "fin de línea antes de especificación de rol" -#: libpq/hba.c:997 +#: libpq/hba.c:965 #, c-format msgid "end-of-line before IP address specification" msgstr "fin de línea antes de especificación de dirección IP" -#: libpq/hba.c:1007 +#: libpq/hba.c:975 #, c-format msgid "multiple values specified for host address" msgstr "múltiples valores especificados para la dirección de anfitrión" -#: libpq/hba.c:1008 +#: libpq/hba.c:976 #, c-format msgid "Specify one address range per line." msgstr "Especifique un rango de direcciones por línea." -#: libpq/hba.c:1062 +#: libpq/hba.c:1030 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "dirección IP «%s» no válida: %s" -#: libpq/hba.c:1080 +#: libpq/hba.c:1048 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "especificar tanto el nombre de host como la máscara CIDR no es válido: «%s»" -#: libpq/hba.c:1092 +#: libpq/hba.c:1060 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "máscara CIDR no válida en dirección «%s»" -#: libpq/hba.c:1109 +#: libpq/hba.c:1077 #, c-format msgid "end-of-line before netmask specification" msgstr "fin de línea antes de especificación de máscara de red" -#: libpq/hba.c:1110 +#: libpq/hba.c:1078 #, c-format msgid "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "Especifique un rango de direcciones en notación CIDR, o provea una netmask separadamente." -#: libpq/hba.c:1120 +#: libpq/hba.c:1088 #, c-format msgid "multiple values specified for netmask" msgstr "múltiples valores especificados para la máscara de red" -#: libpq/hba.c:1133 +#: libpq/hba.c:1101 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "máscara IP «%s» no válida: %s" -#: libpq/hba.c:1150 +#: libpq/hba.c:1118 #, c-format msgid "IP address and mask do not match" msgstr "La dirección y máscara IP no coinciden" -#: libpq/hba.c:1165 +#: libpq/hba.c:1133 #, c-format msgid "end-of-line before authentication method" msgstr "fin de línea antes de especificación de método de autentificación" -#: libpq/hba.c:1175 +#: libpq/hba.c:1143 #, c-format msgid "multiple values specified for authentication type" msgstr "múltiples valores especificados para el tipo de autentificación" -#: libpq/hba.c:1176 +#: libpq/hba.c:1144 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Especifique exactamente un tipo de autentificación por línea." -#: libpq/hba.c:1243 +#: libpq/hba.c:1211 #, c-format msgid "invalid authentication method \"%s\"" msgstr "método de autentificación «%s» no válido" -#: libpq/hba.c:1254 +#: libpq/hba.c:1222 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "método de autentificación «%s» no válido: este servidor no lo soporta" -#: libpq/hba.c:1275 +#: libpq/hba.c:1243 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "la autentificación gssapi no está soportada en conexiones locales" -#: libpq/hba.c:1286 +#: libpq/hba.c:1254 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "la autentificación peer sólo está soportada en conexiones locales" -#: libpq/hba.c:1303 +#: libpq/hba.c:1271 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "la autentificación cert sólo está soportada en conexiones hostssl" -#: libpq/hba.c:1328 +#: libpq/hba.c:1296 #, c-format msgid "authentication option not in name=value format: %s" msgstr "opción de autentificación en formato nombre=valor: %s" -#: libpq/hba.c:1365 +#: libpq/hba.c:1333 #, c-format msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, or ldapurl together with ldapprefix" msgstr "no se puede usar ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute o ldapurl junto con ldapprefix" -#: libpq/hba.c:1375 +#: libpq/hba.c:1343 #, c-format msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "el método de autentificación «ldap» requiere que los argumento «ldapbasedn», «ldapprefix» o «ldapsuffix» estén definidos" -#: libpq/hba.c:1418 +#: libpq/hba.c:1399 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi y cert" -#: libpq/hba.c:1431 +#: libpq/hba.c:1412 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert sólo puede ser configurado en líneas «hostssl»" -#: libpq/hba.c:1442 +#: libpq/hba.c:1423 #, 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/hba.c:1443 -#, c-format -msgid "Make sure the configuration parameter \"ssl_ca_file\" is set." -msgstr "Asegúrese que el parámetro de configuración «ssl_ca_file» esté definido." - -#: libpq/hba.c:1456 +#: libpq/hba.c:1437 #, c-format msgid "clientcert can not be set to 0 when using \"cert\" authentication" msgstr "clientcert no puede establecerse en 0 cuando se emplea autentificación «cert»" -#: libpq/hba.c:1483 +#: libpq/hba.c:1464 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "no se pudo interpretar la URL LDAP «%s»: %s" -#: libpq/hba.c:1491 +#: libpq/hba.c:1472 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "esquema de URL LDAP no soportado: %s" -#: libpq/hba.c:1507 +#: libpq/hba.c:1488 #, c-format msgid "filters not supported in LDAP URLs" msgstr "los filtros no están soportados en URLs LDAP" -#: libpq/hba.c:1515 +#: libpq/hba.c:1496 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "las URLs LDAP no está soportado en esta plataforma" -#: libpq/hba.c:1539 +#: libpq/hba.c:1520 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "número de puerto LDAP no válido: «%s»" -#: libpq/hba.c:1579 libpq/hba.c:1586 +#: libpq/hba.c:1560 libpq/hba.c:1567 msgid "gssapi and sspi" msgstr "gssapi y sspi" -#: libpq/hba.c:1628 +#: libpq/hba.c:1609 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "número de puerto RADIUS no válido: «%s»" -#: libpq/hba.c:1648 +#: libpq/hba.c:1629 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "nombre de opción de autentificación desconocido: «%s»" -#: libpq/hba.c:1789 guc-file.l:517 +#: libpq/hba.c:1764 guc-file.l:595 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "no se pudo abrir el archivo de configuración «%s»: %m" -#: libpq/hba.c:1839 +#: libpq/hba.c:1814 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "el archivo de configuración «%s» no contiene líneas" -#: libpq/hba.c:1935 +#: libpq/hba.c:1910 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "la expresión regular «%s» no es válida: %s" -#: libpq/hba.c:1995 +#: libpq/hba.c:1970 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "la coincidencia de expresión regular para «%s» falló: %s" -#: libpq/hba.c:2012 +#: libpq/hba.c:1989 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "la expresión regular «%s» no tiene subexpresiones según lo requiere la referencia hacia atrás en «%s»" -#: libpq/hba.c:2108 +#: libpq/hba.c:2086 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "el nombre de usuario entregado (%s) y el nombre de usuario autentificado (%s) no coinciden" -#: libpq/hba.c:2128 +#: libpq/hba.c:2106 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "no hay coincidencia en el mapa «%s» para el usuario «%s» autentificado como «%s»" -#: libpq/hba.c:2163 +#: libpq/hba.c:2141 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "no se pudo abrir el archivo de mapa de usuarios «%s»: %m" -#: libpq/pqcomm.c:314 +#: libpq/pqcomm.c:201 +#, c-format +msgid "could not set socket to nonblocking mode: %m" +msgstr "no se pudo establecer el socket en modo no bloqueante: %m" + +#: libpq/pqcomm.c:348 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "la ruta al socket de dominio Unix «%s» es demasiado larga (máximo %d bytes)" -#: libpq/pqcomm.c:335 +#: libpq/pqcomm.c:369 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "no se pudo traducir el nombre de host «%s», servicio «%s» a dirección: %s" -#: libpq/pqcomm.c:339 +#: libpq/pqcomm.c:373 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "no se pudo traducir el servicio «%s» a dirección: %s" -#: libpq/pqcomm.c:366 +#: libpq/pqcomm.c:400 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "no se pudo enlazar a todas las direcciones pedidas: MAXLISTEN (%d) fue excedido" -#: libpq/pqcomm.c:375 +#: libpq/pqcomm.c:409 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:379 +#: libpq/pqcomm.c:413 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:384 +#: libpq/pqcomm.c:418 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:389 +#: libpq/pqcomm.c:423 #, c-format msgid "unrecognized address family %d" msgstr "la familia de direcciones %d no es reconocida" #. translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:400 +#: libpq/pqcomm.c:434 #, c-format msgid "could not create %s socket: %m" msgstr "no se pudo crear el socket %s: %m" -#: libpq/pqcomm.c:425 +#: libpq/pqcomm.c:459 #, c-format msgid "setsockopt(SO_REUSEADDR) failed: %m" msgstr "setsockopt(SO_REUSEADDR) falló: %m" -#: libpq/pqcomm.c:440 +#: libpq/pqcomm.c:474 #, c-format msgid "setsockopt(IPV6_V6ONLY) failed: %m" msgstr "setsockopt(IPV6_V6ONLY) falló: %m" #. translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:459 +#: libpq/pqcomm.c:493 #, c-format msgid "could not bind %s socket: %m" msgstr "no se pudo enlazar al socket %s: %m" -#: libpq/pqcomm.c:462 +#: libpq/pqcomm.c:496 #, c-format msgid "Is another postmaster already running on port %d? If not, remove socket file \"%s\" and retry." msgstr "¿Hay otro postmaster corriendo en el puerto %d? Si no, elimine el socket «%s» y reintente." -#: libpq/pqcomm.c:465 +#: libpq/pqcomm.c:499 #, c-format msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." msgstr "¿Hay otro postmaster corriendo en el puerto %d? Si no, aguarde unos segundos y reintente." #. translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:498 +#: libpq/pqcomm.c:532 #, c-format msgid "could not listen on %s socket: %m" msgstr "no se pudo escuchar en el socket %s: %m" -#: libpq/pqcomm.c:588 +#: libpq/pqcomm.c:617 #, c-format msgid "group \"%s\" does not exist" msgstr "no existe el grupo «%s»" -#: libpq/pqcomm.c:598 +#: libpq/pqcomm.c:627 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "no se pudo definir el grupo del archivo «%s»: %m" -#: libpq/pqcomm.c:609 +#: libpq/pqcomm.c:638 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "no se pudo definir los permisos del archivo «%s»: %m" -#: libpq/pqcomm.c:639 +#: libpq/pqcomm.c:668 #, c-format msgid "could not accept new connection: %m" msgstr "no se pudo aceptar una nueva conexión: %m" -#: libpq/pqcomm.c:811 -#, c-format -msgid "could not set socket to nonblocking mode: %m" -msgstr "no se pudo establecer el socket en modo no bloqueante: %m" - -#: libpq/pqcomm.c:817 -#, c-format -msgid "could not set socket to blocking mode: %m" -msgstr "no se pudo poner el socket en modo bloqueante: %m" +#: libpq/pqcomm.c:847 +#, fuzzy, c-format +msgid "there is no client connection" +msgstr "se encontró fin de archivo inesperado en la conexión del cliente" -#: libpq/pqcomm.c:869 libpq/pqcomm.c:959 +#: libpq/pqcomm.c:898 libpq/pqcomm.c:994 #, c-format msgid "could not receive data from client: %m" msgstr "no se pudo recibir datos del cliente: %m" -#: libpq/pqcomm.c:1110 +#: libpq/pqcomm.c:1139 tcop/postgres.c:3902 +#, c-format +msgid "terminating connection because protocol sync was lost" +msgstr "terminando la conexión por pérdida de sincronía del protocolo" + +#: libpq/pqcomm.c:1205 #, c-format msgid "unexpected EOF within message length word" msgstr "EOF inesperado dentro de la palabra de tamaño del mensaje" -#: libpq/pqcomm.c:1121 +#: libpq/pqcomm.c:1216 #, c-format msgid "invalid message length" msgstr "el largo de mensaje no es válido" -#: libpq/pqcomm.c:1143 libpq/pqcomm.c:1153 +#: libpq/pqcomm.c:1238 libpq/pqcomm.c:1251 #, c-format msgid "incomplete message from client" msgstr "mensaje incompleto del cliente" -#: libpq/pqcomm.c:1283 +#: libpq/pqcomm.c:1384 #, c-format msgid "could not send data to client: %m" msgstr "no se pudo enviar datos al cliente: %m" @@ -10213,7 +11109,7 @@ msgid "no data left in message" msgstr "no hay datos restantes en el mensaje" #: libpq/pqformat.c:556 libpq/pqformat.c:574 libpq/pqformat.c:595 -#: utils/adt/arrayfuncs.c:1444 utils/adt/rowtypes.c:561 +#: utils/adt/arrayfuncs.c:1460 utils/adt/rowtypes.c:556 #, c-format msgid "insufficient data left in message" msgstr "los datos restantes del mensaje son insuficientes" @@ -10228,17 +11124,12 @@ msgstr "cadena inválida en el mensaje" msgid "invalid message format" msgstr "formato de mensaje no válido" -#: main/main.c:262 -#, c-format -msgid "%s: setsysinfo failed: %s\n" -msgstr "%s: setsysinfo falló: %s\n" - -#: main/main.c:284 +#: main/main.c:259 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartup falló: %d\n" -#: main/main.c:313 +#: main/main.c:306 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -10247,7 +11138,7 @@ msgstr "" "%s es el servidor PostgreSQL.\n" "\n" -#: main/main.c:314 +#: main/main.c:307 #, c-format msgid "" "Usage:\n" @@ -10258,119 +11149,114 @@ msgstr "" " %s [OPCION]...\n" "\n" -#: main/main.c:315 +#: main/main.c:308 #, c-format msgid "Options:\n" msgstr "Opciones:\n" -#: main/main.c:317 -#, c-format -msgid " -A 1|0 enable/disable run-time assert checking\n" -msgstr " -A 1|0 activar/desactivar el uso de aseveraciones (asserts)\n" - -#: main/main.c:319 +#: main/main.c:309 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS número de búfers de memoria compartida\n" -#: main/main.c:320 +#: main/main.c:310 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c VAR=VALOR definir parámetro de ejecución\n" -#: main/main.c:321 +#: main/main.c:311 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NOMBRE imprimir valor de parámetro de configuración, luego salir\n" -#: main/main.c:322 +#: main/main.c:312 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 nivel de depuración\n" -#: main/main.c:323 +#: main/main.c:313 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR directorio de bases de datos\n" -#: main/main.c:324 +#: main/main.c:314 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e usar estilo europeo de fechas (DMY)\n" -#: main/main.c:325 +#: main/main.c:315 #, c-format msgid " -F turn fsync off\n" msgstr " -F desactivar fsync\n" -#: main/main.c:326 +#: main/main.c:316 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h NOMBRE nombre de host o dirección IP en que escuchar\n" -#: main/main.c:327 +#: main/main.c:317 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i activar conexiones TCP/IP\n" -#: main/main.c:328 +#: main/main.c:318 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k DIRECTORIO ubicación del socket Unix\n" -#: main/main.c:330 +#: main/main.c:320 #, c-format msgid " -l enable SSL connections\n" msgstr " -l activar conexiones SSL\n" -#: main/main.c:332 +#: main/main.c:322 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N MAX-CONN número máximo de conexiones permitidas\n" -#: main/main.c:333 +#: main/main.c:323 #, c-format msgid " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" msgstr " -o OPCIONES pasar «OPCIONES» a cada proceso servidor (obsoleto)\n" -#: main/main.c:334 +#: main/main.c:324 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PUERTO número de puerto en el cual escuchar\n" -#: main/main.c:335 +#: main/main.c:325 #, c-format msgid " -s show statistics after each query\n" msgstr " -s mostrar estadísticas después de cada consulta\n" -#: main/main.c:336 +#: main/main.c:326 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S WORK-MEM definir cantidad de memoria para ordenamientos (en kB)\n" -#: main/main.c:337 +#: main/main.c:327 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de la versión, luego salir\n" -#: main/main.c:338 +#: main/main.c:328 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NOMBRE=VALOR definir parámetro de ejecución\n" -#: main/main.c:339 +#: main/main.c:329 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr "" " --describe-config\n" " mostrar parámetros de configuración y salir\n" -#: main/main.c:340 +#: main/main.c:330 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help muestra esta ayuda, luego sale\n" -#: main/main.c:342 +#: main/main.c:332 #, c-format msgid "" "\n" @@ -10379,44 +11265,44 @@ msgstr "" "\n" "Opciones de desarrollador:\n" -#: main/main.c:343 +#: main/main.c:333 #, c-format msgid " -f s|i|n|m|h forbid use of some plan types\n" msgstr " -f s|i|n|m|h impedir el uso de algunos tipos de planes\n" -#: main/main.c:344 +#: main/main.c:334 #, c-format msgid " -n do not reinitialize shared memory after abnormal exit\n" msgstr " -n no reinicializar memoria compartida después de salida anormal\n" -#: main/main.c:345 +#: main/main.c:335 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O permitir cambios en estructura de tablas de sistema\n" -#: main/main.c:346 +#: main/main.c:336 #, c-format msgid " -P disable system indexes\n" msgstr " -P desactivar índices de sistema\n" -#: main/main.c:347 +#: main/main.c:337 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex mostrar tiempos después de cada consulta\n" -#: main/main.c:348 +#: main/main.c:338 #, c-format msgid " -T send SIGSTOP to all backend processes if one dies\n" msgstr "" " -T enviar SIGSTOP a todos los procesos backend si uno de ellos\n" " muere\n" -#: main/main.c:349 +#: main/main.c:339 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr " -W NÚM espera NÚM segundos para permitir acoplar un depurador\n" -#: main/main.c:351 +#: main/main.c:341 #, c-format msgid "" "\n" @@ -10425,37 +11311,37 @@ msgstr "" "\n" "Opciones para modo mono-usuario:\n" -#: main/main.c:352 +#: main/main.c:342 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr " --single selecciona modo mono-usuario (debe ser el primer argumento)\n" -#: main/main.c:353 +#: main/main.c:343 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME nombre de base de datos (el valor por omisión es el nombre de usuario)\n" -#: main/main.c:354 +#: main/main.c:344 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 nivel de depuración\n" -#: main/main.c:355 +#: main/main.c:345 #, c-format msgid " -E echo statement before execution\n" msgstr " -E mostrar las consultas antes de su ejecución\n" -#: main/main.c:356 +#: main/main.c:346 #, c-format msgid " -j do not use newline as interactive query delimiter\n" msgstr " -j no usar saltos de línea como delimitadores de consulta\n" -#: main/main.c:357 main/main.c:362 +#: main/main.c:347 main/main.c:352 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r ARCHIVO enviar salida estándar y de error a ARCHIVO\n" -#: main/main.c:359 +#: main/main.c:349 #, c-format msgid "" "\n" @@ -10464,22 +11350,22 @@ msgstr "" "\n" "Opciones para modo de inicio (bootstrapping):\n" -#: main/main.c:360 +#: main/main.c:350 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot selecciona modo de inicio (debe ser el primer argumento)\n" -#: main/main.c:361 +#: main/main.c:351 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAME nombre de base de datos (argumento obligatorio en modo de inicio)\n" -#: main/main.c:363 +#: main/main.c:353 #, c-format msgid " -x NUM internal use\n" msgstr " -x NUM uso interno\n" -#: main/main.c:365 +#: main/main.c:355 #, c-format msgid "" "\n" @@ -10496,7 +11382,7 @@ msgstr "" "\n" "Reporte errores a \n" -#: main/main.c:379 +#: main/main.c:369 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -10510,12 +11396,12 @@ msgstr "" "Vea la documentación para obtener más información acerca de cómo\n" "iniciar correctamente el servidor.\n" -#: main/main.c:396 +#: main/main.c:386 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: los IDs de usuario real y efectivo deben coincidir\n" -#: main/main.c:403 +#: main/main.c:393 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -10530,590 +11416,783 @@ msgstr "" "Vea la documentación para obtener más información acerca de cómo\n" "iniciar correctamente el servidor.\n" -#: nodes/nodeFuncs.c:115 nodes/nodeFuncs.c:141 parser/parse_coerce.c:1782 +#: nodes/nodeFuncs.c:118 nodes/nodeFuncs.c:149 parser/parse_coerce.c:1782 #: parser/parse_coerce.c:1810 parser/parse_coerce.c:1886 -#: parser/parse_expr.c:1739 parser/parse_func.c:590 parser/parse_oper.c:948 +#: parser/parse_expr.c:1981 parser/parse_func.c:597 parser/parse_oper.c:952 #, c-format msgid "could not find array type for data type %s" msgstr "no se pudo encontrar un tipo de array para el tipo de dato %s" -#: optimizer/path/joinrels.c:722 +#: optimizer/path/allpaths.c:2272 +#, fuzzy, c-format +msgid "WHERE CURRENT OF is not supported on a view with no underlying relation" +msgstr "WHERE CURRENT OF no está soportado para este tipo de tabla" + +#: optimizer/path/allpaths.c:2277 +#, fuzzy, c-format +msgid "WHERE CURRENT OF is not supported on a view with more than one underlying relation" +msgstr "WHERE CURRENT OF no está soportado para este tipo de tabla" + +#: optimizer/path/allpaths.c:2282 +#, fuzzy, c-format +msgid "WHERE CURRENT OF is not supported on a view with grouping or aggregation" +msgstr "WHERE CURRENT OF no está soportado para este tipo de tabla" + +#: optimizer/path/joinrels.c:740 #, c-format msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" msgstr "FULL JOIN sólo está soportado con condiciones que se pueden usar con merge join o hash join" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1079 +#: optimizer/plan/initsplan.c:1083 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s no puede ser aplicado al lado nulable de un outer join" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1158 parser/analyze.c:1330 parser/analyze.c:1528 -#: parser/analyze.c:2287 +#: optimizer/plan/planner.c:1324 parser/analyze.c:1481 parser/analyze.c:1679 +#: parser/analyze.c:2460 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s no está permitido con UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:2723 +#: optimizer/plan/planner.c:3580 #, c-format msgid "could not implement GROUP BY" msgstr "no se pudo implementar GROUP BY" -#: optimizer/plan/planner.c:2724 optimizer/plan/planner.c:2892 -#: optimizer/prep/prepunion.c:825 +#: optimizer/plan/planner.c:3581 optimizer/plan/planner.c:3749 +#: optimizer/prep/prepunion.c:828 #, 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:2891 +#: optimizer/plan/planner.c:3748 #, c-format msgid "could not implement DISTINCT" msgstr "no se pudo implementar DISTINCT" -#: optimizer/plan/planner.c:3497 +#: optimizer/plan/planner.c:4354 #, c-format msgid "could not implement window PARTITION BY" msgstr "No se pudo implementar PARTITION BY de ventana" -#: optimizer/plan/planner.c:3498 +#: optimizer/plan/planner.c:4355 #, 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:3502 +#: optimizer/plan/planner.c:4359 #, c-format msgid "could not implement window ORDER BY" msgstr "no se pudo implementar ORDER BY de ventana" -#: optimizer/plan/planner.c:3503 +#: optimizer/plan/planner.c:4360 #, 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:402 +#: optimizer/plan/setrefs.c:411 #, c-format msgid "too many range table entries" msgstr "demasiadas «range table entries»" -#: optimizer/prep/prepunion.c:419 +#: optimizer/prep/prepunion.c:421 #, c-format msgid "could not implement recursive UNION" msgstr "no se pudo implementar UNION recursivo" -#: optimizer/prep/prepunion.c:420 +#: optimizer/prep/prepunion.c:422 #, c-format msgid "All column datatypes must be hashable." msgstr "Todos los tipos de dato de las columnas deben ser tipos de los que se puedan hacer un hash." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:824 +#: optimizer/prep/prepunion.c:827 #, c-format msgid "could not implement %s" msgstr "no se pudo implementar %s" -#: optimizer/util/clauses.c:4529 +#: optimizer/util/clauses.c:4597 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "función SQL «%s», durante expansión en línea" -#: optimizer/util/plancat.c:104 +#: optimizer/util/plancat.c:108 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "no se pueden crear tablas temporales o unlogged durante la recuperación" -#: parser/analyze.c:627 parser/analyze.c:1102 +#: optimizer/util/plancat.c:498 +#, c-format +msgid "system columns cannot be used in an ON CONFLICT clause" +msgstr "" + +#: optimizer/util/plancat.c:516 +#, c-format +msgid "constraint in ON CONFLICT clause has no associated index" +msgstr "" + +#: optimizer/util/plancat.c:568 +#, fuzzy, c-format +msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" +msgstr "el método de acceso «%s» no soporta restricciones por exclusión" + +#: optimizer/util/plancat.c:675 +#, fuzzy, c-format +msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" +msgstr "no hay restricción unique que coincida con las columnas dadas en la tabla referida «%s»" + +#: parser/analyze.c:639 parser/analyze.c:1253 #, c-format msgid "VALUES lists must all be the same length" msgstr "las listas VALUES deben ser todas de la misma longitud" -#: parser/analyze.c:794 +#: parser/analyze.c:811 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT tiene más expresiones que columnas de destino" -#: parser/analyze.c:812 +#: parser/analyze.c:829 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT tiene más columnas de destino que expresiones" -#: parser/analyze.c:816 +#: parser/analyze.c:833 #, c-format msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "La fuente de inserción es una expresión de fila que contiene la misma cantidad de columnas que esperaba el INSERT. ¿Usó accidentalmente paréntesis extra?" -#: parser/analyze.c:924 parser/analyze.c:1303 +#: parser/analyze.c:1074 parser/analyze.c:1454 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO no está permitido aquí" -#: parser/analyze.c:1116 +#: parser/analyze.c:1267 #, c-format msgid "DEFAULT can only appear in a VALUES list within INSERT" msgstr "DEFAULT sólo puede aparecer en listas VALUES dentro de un INSERT" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1235 parser/analyze.c:2459 +#: parser/analyze.c:1386 parser/analyze.c:2630 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s no puede ser aplicado a VALUES" -#: parser/analyze.c:1456 +#: parser/analyze.c:1607 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "cláusula UNION/INTERSECT/EXCEPT ORDER BY no válida" -#: parser/analyze.c:1457 +#: parser/analyze.c:1608 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "Sólo nombres de columna del resultado pueden usarse, no expresiones o funciones." -#: parser/analyze.c:1458 +#: parser/analyze.c:1609 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "Agregue la función o expresión a todos los SELECT, o mueva el UNION dentro de una cláusula FROM." -#: parser/analyze.c:1518 +#: parser/analyze.c:1669 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "sólo se permite INTO en el primer SELECT de UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:1582 +#: parser/analyze.c:1733 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "una sentencia miembro de UNION/INSERT/EXCEPT no puede referirse a otras relaciones del mismo nivel de la consulta" -#: parser/analyze.c:1671 +#: parser/analyze.c:1822 #, c-format msgid "each %s query must have the same number of columns" msgstr "cada consulta %s debe tener el mismo número de columnas" -#: parser/analyze.c:2051 +#: parser/analyze.c:2215 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING debe tener al menos una columna" -#: parser/analyze.c:2088 +#: parser/analyze.c:2252 #, c-format msgid "cannot specify both SCROLL and NO SCROLL" msgstr "no se puede especificar SCROLL y NO SCROLL" -#: parser/analyze.c:2106 +#: parser/analyze.c:2270 #, 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:2114 +#: parser/analyze.c:2278 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s no está soportado" -#: parser/analyze.c:2117 +#: parser/analyze.c:2281 #, 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:2125 +#: parser/analyze.c:2289 #, 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:2136 +#: parser/analyze.c:2300 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" msgstr "DECLARE INSENSITIVE CURSOR ... %s no está soportado" -#: parser/analyze.c:2139 +#: parser/analyze.c:2303 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Los cursores insensitivos deben ser READ ONLY." -#: parser/analyze.c:2205 +#: parser/analyze.c:2369 #, 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:2215 +#: parser/analyze.c:2379 #, 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:2225 +#: parser/analyze.c:2389 #, 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:2237 +#: parser/analyze.c:2401 #, 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:2294 +#: parser/analyze.c:2467 #, 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:2301 +#: parser/analyze.c:2474 #, 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:2308 +#: parser/analyze.c:2481 #, 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:2315 +#: parser/analyze.c:2488 #, 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:2322 +#: parser/analyze.c:2495 #, 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:2329 +#: parser/analyze.c:2502 #, 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:2408 +#: parser/analyze.c:2581 #, 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:2441 +#: parser/analyze.c:2612 #, 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:2450 +#: parser/analyze.c:2621 #, 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:2468 +#: parser/analyze.c:2639 #, 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:2485 +#: parser/analyze.c:2656 #, 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:201 parser/parse_oper.c:219 +#: parser/parse_agg.c:207 parser/parse_oper.c:220 #, 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:203 +#: parser/parse_agg.c:209 #, 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:254 +#: parser/parse_agg.c:244 +#, c-format +msgid "GROUPING must have fewer than 32 arguments" +msgstr "" + +#: parser/parse_agg.c:347 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:260 +#: parser/parse_agg.c:349 +#, fuzzy +msgid "grouping operations are not allowed in JOIN conditions" +msgstr "no se permiten funciones de ventana deslizante en condiciones JOIN" + +#: parser/parse_agg.c:361 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:263 +#: parser/parse_agg.c:363 +#, fuzzy +msgid "grouping operations 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:368 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:281 +#: parser/parse_agg.c:370 +#, fuzzy +msgid "grouping operations are not allowed in functions in FROM" +msgstr "no se permiten funciones de ventana deslizante en funciones en FROM" + +#: parser/parse_agg.c:378 +#, fuzzy +msgid "aggregate functions are not allowed in policy expressions" +msgstr "no se permiten funciones de agregación en una expresión de índice" + +#: parser/parse_agg.c:380 +#, fuzzy +msgid "grouping operations are not allowed in policy expressions" +msgstr "no se permiten funciones de ventana deslizante en expresiones de índice" + +#: parser/parse_agg.c:397 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:284 +#: parser/parse_agg.c:399 +#, fuzzy +msgid "grouping operations are not allowed in window RANGE" +msgstr "no se permiten funciones de agregación en RANGE de ventana deslizante" + +#: parser/parse_agg.c:404 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:315 +#: parser/parse_agg.c:406 +#, fuzzy +msgid "grouping operations are not allowed in window ROWS" +msgstr "no se permiten funciones de agregación en ROWS de ventana deslizante" + +#: parser/parse_agg.c:439 msgid "aggregate functions are not allowed in check constraints" msgstr "no se permiten funciones de agregación en restricciones «check»" -#: parser/parse_agg.c:319 +#: parser/parse_agg.c:441 +#, fuzzy +msgid "grouping operations are not allowed in check constraints" +msgstr "no se permiten funciones de ventana deslizante en restricciones «check»" + +#: parser/parse_agg.c:448 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "no se permiten funciones de agregación en expresiones DEFAULT" -#: parser/parse_agg.c:322 +#: parser/parse_agg.c:450 +#, fuzzy +msgid "grouping operations are not allowed in DEFAULT expressions" +msgstr "no se permiten funciones de ventana deslizante en expresiones DEFAULT" + +#: parser/parse_agg.c:455 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:325 +#: parser/parse_agg.c:457 +#, fuzzy +msgid "grouping operations are not allowed in index expressions" +msgstr "no se permiten funciones de ventana deslizante en expresiones de índice" + +#: parser/parse_agg.c:462 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:328 +#: parser/parse_agg.c:464 +#, fuzzy +msgid "grouping operations are not allowed in index predicates" +msgstr "no se permiten funciones de ventana deslizante en predicados de índice" + +#: parser/parse_agg.c:469 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:331 +#: parser/parse_agg.c:471 +#, fuzzy +msgid "grouping operations are not allowed in transform expressions" +msgstr "no se permiten funciones de ventana deslizante en expresiones de transformación" + +#: parser/parse_agg.c:476 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:334 +#: parser/parse_agg.c:478 +#, fuzzy +msgid "grouping operations are not allowed in EXECUTE parameters" +msgstr "no se permiten funciones de ventana deslizante en parámetros a EXECUTE" + +#: parser/parse_agg.c:483 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:485 +#, fuzzy +msgid "grouping operations are not allowed in trigger WHEN conditions" +msgstr "no se permiten funciones de ventana deslizante en condiciones WHEN de un disparador" + #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:354 parser/parse_clause.c:1407 +#: parser/parse_agg.c:508 parser/parse_clause.c:1548 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "no se permiten funciones de agregación en %s" -#: parser/parse_agg.c:457 +#. translator: %s is name of a SQL construct, eg GROUP BY +#: parser/parse_agg.c:511 +#, fuzzy, c-format +msgid "grouping operations are not allowed in %s" +msgstr "no se permiten funciones de ventana deslizante en %s" + +#: parser/parse_agg.c:619 #, 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:514 +#: parser/parse_agg.c:690 #, 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:591 +#: parser/parse_agg.c:768 msgid "window functions are not allowed in JOIN conditions" msgstr "no se permiten funciones de ventana deslizante en condiciones JOIN" -#: parser/parse_agg.c:598 +#: parser/parse_agg.c:775 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:613 +#: parser/parse_agg.c:781 +#, fuzzy +msgid "window functions are not allowed in policy expressions" +msgstr "no se permiten funciones de ventana deslizante en expresiones de índice" + +#: parser/parse_agg.c:793 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:644 +#: parser/parse_agg.c:824 msgid "window functions are not allowed in check constraints" msgstr "no se permiten funciones de ventana deslizante en restricciones «check»" -#: parser/parse_agg.c:648 +#: parser/parse_agg.c:828 msgid "window functions are not allowed in DEFAULT expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones DEFAULT" -#: parser/parse_agg.c:651 +#: parser/parse_agg.c:831 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:654 +#: parser/parse_agg.c:834 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:657 +#: parser/parse_agg.c:837 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:660 +#: parser/parse_agg.c:840 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:663 +#: parser/parse_agg.c:843 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "no se permiten funciones de ventana deslizante en condiciones WHEN de un disparador" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:683 parser/parse_clause.c:1416 +#: parser/parse_agg.c:863 parser/parse_clause.c:1557 #, c-format msgid "window functions are not allowed in %s" msgstr "no se permiten funciones de ventana deslizante en %s" -#: parser/parse_agg.c:717 parser/parse_clause.c:1827 +#: parser/parse_agg.c:897 parser/parse_clause.c:2394 #, c-format msgid "window \"%s\" does not exist" msgstr "la ventana «%s» no existe" -#: parser/parse_agg.c:879 +#: parser/parse_agg.c:982 +#, c-format +msgid "too many grouping sets present (max 4096)" +msgstr "" + +#: parser/parse_agg.c:1131 #, 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:1057 +#: parser/parse_agg.c:1324 #, 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:1060 +#: parser/parse_agg.c:1327 #, 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:1065 +#: parser/parse_agg.c:1332 #, 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_clause.c:636 +#: parser/parse_agg.c:1496 +#, c-format +msgid "arguments to GROUPING must be grouping expressions of the associated query level" +msgstr "" + +#: parser/parse_clause.c:647 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "no se permiten múltiples definiciones de columnas para la misma función" -#: parser/parse_clause.c:669 +#: parser/parse_clause.c:680 #, c-format msgid "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "ROWS FROM() con varias funciones no puede tener una lista de definición de columnas" -#: parser/parse_clause.c:670 +#: parser/parse_clause.c:681 #, c-format msgid "Put a separate column definition list for each function inside ROWS FROM()." msgstr "Ponga una lista de columnas separada para cada función dentro de ROWS FROM()." -#: parser/parse_clause.c:676 +#: parser/parse_clause.c:687 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "UNNEST() con varios argumentos no puede tener una lista de definición de columnas" -#: parser/parse_clause.c:677 +#: parser/parse_clause.c:688 #, c-format msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." msgstr "Use llamadas a UNNEST() separadas dentro de ROWS FROM() y adjunte una lista de columnas a cada una." -#: parser/parse_clause.c:684 +#: parser/parse_clause.c:695 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY no puede usarse con una lista de definición de columnas" -#: parser/parse_clause.c:685 +#: parser/parse_clause.c:696 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "Ponga una lista de columnas dentro de ROWS FROM()." -#: parser/parse_clause.c:967 +#: parser/parse_clause.c:751 +#, fuzzy, c-format +msgid "tablesample method %s does not exist" +msgstr "no existe el método de acceso «%s»" + +#: parser/parse_clause.c:759 +#, fuzzy, c-format +msgid "function %s must return type \"tsm_handler\"" +msgstr "la función %s debe retornar tipo «fdw_handler»" + +#: parser/parse_clause.c:773 +#, fuzzy, c-format +msgid "tablesample method %s requires %d argument, not %d" +msgid_plural "tablesample method %s requires %d arguments, not %d" +msgstr[0] "el método de autentificación «%s» requiere que el argumento «%s» esté definido" +msgstr[1] "el método de autentificación «%s» requiere que el argumento «%s» esté definido" + +#: parser/parse_clause.c:807 +#, fuzzy, c-format +msgid "tablesample method %s does not support REPEATABLE" +msgstr "el método de acceso «%s» no soporta las opciones ASC/DESC" + +#: parser/parse_clause.c:938 +#, c-format +msgid "TABLESAMPLE clause can only be applied to tables and materialized views" +msgstr "" + +#: parser/parse_clause.c:1108 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "la columna «%s» aparece más de una vez en la cláusula USING" -#: parser/parse_clause.c:982 +#: parser/parse_clause.c:1123 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "la columna común «%s» aparece más de una vez en la tabla izquierda" -#: parser/parse_clause.c:991 +#: parser/parse_clause.c:1132 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "la columna «%s» especificada en la cláusula USING no existe en la tabla izquierda" -#: parser/parse_clause.c:1005 +#: parser/parse_clause.c:1146 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "la columna común «%s» aparece más de una vez en la tabla derecha" -#: parser/parse_clause.c:1014 +#: parser/parse_clause.c:1155 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "la columna «%s» especificada en la cláusula USING no existe en la tabla derecha" -#: parser/parse_clause.c:1068 +#: parser/parse_clause.c:1209 #, c-format msgid "column alias list for \"%s\" has too many entries" msgstr "la lista de alias de columnas para «%s» tiene demasiadas entradas" #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1377 +#: parser/parse_clause.c:1518 #, c-format msgid "argument of %s must not contain variables" msgstr "el argumento de %s no puede contener variables" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1542 +#: parser/parse_clause.c:1683 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s «%s» es ambiguo" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1571 +#: parser/parse_clause.c:1712 #, c-format msgid "non-integer constant in %s" msgstr "constante no entera en %s" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1593 +#: parser/parse_clause.c:1734 #, c-format msgid "%s position %d is not in select list" msgstr "la posición %2$d de %1$s no está en la lista de resultados" -#: parser/parse_clause.c:1815 +#: parser/parse_clause.c:2176 +#, c-format +msgid "CUBE is limited to 12 elements" +msgstr "" + +#: parser/parse_clause.c:2382 #, c-format msgid "window \"%s\" is already defined" msgstr "la ventana «%s» ya está definida" -#: parser/parse_clause.c:1876 +#: parser/parse_clause.c:2444 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "no se puede pasar a llevar la cláusula PARTITION BY de la ventana «%s»" -#: parser/parse_clause.c:1888 +#: parser/parse_clause.c:2456 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "no se puede pasar a llevar la cláusula ORDER BY de la ventana «%s»" -#: parser/parse_clause.c:1918 parser/parse_clause.c:1924 +#: parser/parse_clause.c:2486 parser/parse_clause.c:2492 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "no se puede copiar la ventana «%s» porque tiene una cláusula «frame»" -#: parser/parse_clause.c:1926 +#: parser/parse_clause.c:2494 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Omita el uso de paréntesis en esta cláusula OVER." -#: parser/parse_clause.c:1992 +#: parser/parse_clause.c:2560 #, c-format msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" msgstr "en una agregación con DISTINCT, las expresiones en ORDER BY deben aparecer en la lista de argumentos" -#: parser/parse_clause.c:1993 +#: parser/parse_clause.c:2561 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "para SELECT DISTINCT, las expresiones en ORDER BY deben aparecer en la lista de resultados" -#: parser/parse_clause.c:2026 +#: parser/parse_clause.c:2594 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "una función de agregación con DISTINCT debe tener al menos un argumento" -#: parser/parse_clause.c:2027 +#: parser/parse_clause.c:2595 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT debe tener al menos una columna" -#: parser/parse_clause.c:2093 parser/parse_clause.c:2125 +#: parser/parse_clause.c:2661 parser/parse_clause.c:2693 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "las expresiones de SELECT DISTINCT ON deben coincidir con las expresiones iniciales de ORDER BY" -#: parser/parse_clause.c:2253 +#: parser/parse_clause.c:2772 +#, fuzzy, c-format +msgid "ASC/DESC is not allowed in ON CONFLICT clause" +msgstr "%s no está permitido con cláusulas DISTINCT" + +#: parser/parse_clause.c:2778 +#, fuzzy, c-format +msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" +msgstr "%s no está permitido con cláusulas DISTINCT" + +#: parser/parse_clause.c:2858 +#, c-format +msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" +msgstr "" + +#: parser/parse_clause.c:2859 +#, c-format +msgid "For example, ON CONFLICT ()." +msgstr "" + +#: parser/parse_clause.c:2870 +#, c-format +msgid "ON CONFLICT not supported with system catalog tables" +msgstr "" + +#: parser/parse_clause.c:2878 +#, fuzzy, c-format +msgid "ON CONFLICT not supported on table \"%s\" used as a catalog table" +msgstr "no se puede reescribir la tabla «%s» que es usada como tabla de catálogo" + +#: parser/parse_clause.c:3010 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "el operador «%s» no es un operador válido de ordenamiento" -#: parser/parse_clause.c:2255 +#: parser/parse_clause.c:3012 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "Los operadores de ordenamiento deben ser miembros «<» o «>» de una familia de operadores btree." #: parser/parse_coerce.c:933 parser/parse_coerce.c:963 #: parser/parse_coerce.c:981 parser/parse_coerce.c:996 -#: parser/parse_expr.c:1773 parser/parse_expr.c:2247 parser/parse_target.c:854 +#: parser/parse_expr.c:2015 parser/parse_expr.c:2528 parser/parse_target.c:874 #, c-format msgid "cannot cast type %s to %s" msgstr "no se puede convertir el tipo %s a %s" @@ -11221,18 +12300,18 @@ msgid "could not find range type for data type %s" msgstr "no se pudo encontrar un tipo de rango para el tipo de dato %s" #: parser/parse_collate.c:228 parser/parse_collate.c:475 -#: parser/parse_collate.c:984 +#: parser/parse_collate.c:986 #, c-format msgid "collation mismatch between implicit collations \"%s\" and \"%s\"" msgstr "discordancia de ordenamientos (collation) entre los ordenamientos implícitos «%s» y «%s»" #: parser/parse_collate.c:231 parser/parse_collate.c:478 -#: parser/parse_collate.c:987 +#: parser/parse_collate.c:989 #, c-format msgid "You can choose the collation by applying the COLLATE clause to one or both expressions." msgstr "Puede elegir el ordenamiento aplicando la cláusula COLLATE a una o ambas expresiones." -#: parser/parse_collate.c:832 +#: parser/parse_collate.c:834 #, c-format msgid "collation mismatch between explicit collations \"%s\" and \"%s\"" msgstr "discordancia de ordenamientos (collation) entre los ordenamientos explícitos «%s» y «%s»" @@ -11337,38 +12416,39 @@ msgstr "FOR UPDATE/SHARE no está implementado en una consulta recursiva" msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "la referencia recursiva a la consulta «%s» no debe aparecer más de una vez" -#: parser/parse_expr.c:389 parser/parse_relation.c:2875 +#: parser/parse_expr.c:387 parser/parse_relation.c:3080 +#: parser/parse_relation.c:3100 #, c-format msgid "column %s.%s does not exist" msgstr "no existe la columna %s.%s" -#: parser/parse_expr.c:401 +#: parser/parse_expr.c:399 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "la columna «%s» no fue encontrado en el tipo %s" -#: parser/parse_expr.c:407 +#: parser/parse_expr.c:405 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "no se pudo identificar la columna «%s» en el tipo de dato record" -#: parser/parse_expr.c:413 +#: parser/parse_expr.c:411 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "la notación de columna .%s fue aplicada al tipo %s, que no es un tipo compuesto" -#: parser/parse_expr.c:443 parser/parse_target.c:640 +#: parser/parse_expr.c:441 parser/parse_target.c:660 #, c-format msgid "row expansion via \"*\" is not supported here" msgstr "la expansión de filas a través de «*» no está soportado aquí" -#: parser/parse_expr.c:766 parser/parse_relation.c:561 -#: parser/parse_relation.c:652 parser/parse_target.c:1089 +#: parser/parse_expr.c:767 parser/parse_relation.c:666 +#: parser/parse_relation.c:766 parser/parse_target.c:1109 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "la referencia a la columna «%s» es ambigua" -#: parser/parse_expr.c:822 parser/parse_param.c:110 parser/parse_param.c:142 +#: parser/parse_expr.c:823 parser/parse_param.c:110 parser/parse_param.c:142 #: parser/parse_param.c:199 parser/parse_param.c:298 #, c-format msgid "there is no parameter $%d" @@ -11379,280 +12459,285 @@ msgstr "no hay parámetro $%d" msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF requiere que el operador = retorne boolean" -#: parser/parse_expr.c:1469 +#: parser/parse_expr.c:1468 gram.y:9731 +#, c-format +msgid "number of columns does not match number of values" +msgstr "el número de columnas no coincide con el número de valores" + +#: parser/parse_expr.c:1697 msgid "cannot use subquery in check constraint" msgstr "no se pueden usar subconsultas en una restricción «check»" -#: parser/parse_expr.c:1473 +#: parser/parse_expr.c:1701 msgid "cannot use subquery in DEFAULT expression" msgstr "no se puede usar una subconsulta en una expresión DEFAULT" -#: parser/parse_expr.c:1476 +#: parser/parse_expr.c:1704 msgid "cannot use subquery in index expression" msgstr "no se puede usar una subconsulta en una expresión de índice" -#: parser/parse_expr.c:1479 +#: parser/parse_expr.c:1707 msgid "cannot use subquery in index predicate" msgstr "no se puede usar una subconsulta en un predicado de índice" -#: parser/parse_expr.c:1482 +#: parser/parse_expr.c:1710 msgid "cannot use subquery in transform expression" msgstr "no se puede usar una subconsulta en una expresión de transformación" -#: parser/parse_expr.c:1485 +#: parser/parse_expr.c:1713 msgid "cannot use subquery in EXECUTE parameter" msgstr "no se puede usar una subconsulta en un parámetro a EXECUTE" -#: parser/parse_expr.c:1488 +#: parser/parse_expr.c:1716 msgid "cannot use subquery in trigger WHEN condition" msgstr "no se puede usar una subconsulta en la condición WHEN de un disparador" -#: parser/parse_expr.c:1545 -#, c-format -msgid "subquery must return a column" -msgstr "la subconsulta debe retornar una columna" - -#: parser/parse_expr.c:1552 +#: parser/parse_expr.c:1770 #, c-format msgid "subquery must return only one column" msgstr "la subconsulta debe retornar sólo una columna" -#: parser/parse_expr.c:1612 +#: parser/parse_expr.c:1854 #, c-format msgid "subquery has too many columns" msgstr "la subconsulta tiene demasiadas columnas" -#: parser/parse_expr.c:1617 +#: parser/parse_expr.c:1859 #, c-format msgid "subquery has too few columns" msgstr "la subconsulta tiene muy pocas columnas" -#: parser/parse_expr.c:1713 +#: parser/parse_expr.c:1955 #, 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:1714 +#: parser/parse_expr.c:1956 #, 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:1728 +#: parser/parse_expr.c:1970 #, 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:1954 +#: parser/parse_expr.c:2193 #, 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:1955 +#: parser/parse_expr.c:2194 #, 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:1970 +#: parser/parse_expr.c:2209 #, 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:2077 +#: parser/parse_expr.c:2316 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "no se puede convertir el resultado de XMLSERIALIZE a %s" -#: parser/parse_expr.c:2320 parser/parse_expr.c:2520 +#: parser/parse_expr.c:2601 parser/parse_expr.c:2797 #, c-format msgid "unequal number of entries in row expressions" msgstr "número desigual de entradas en expresiones de registro" -#: parser/parse_expr.c:2330 +#: parser/parse_expr.c:2611 #, c-format msgid "cannot compare rows of zero length" msgstr "no se pueden comparar registros de largo cero" -#: parser/parse_expr.c:2355 +#: parser/parse_expr.c:2636 #, 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:2362 +#: parser/parse_expr.c:2643 #, 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:2421 parser/parse_expr.c:2466 +#: parser/parse_expr.c:2702 parser/parse_expr.c:2743 #, 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:2423 +#: parser/parse_expr.c:2704 #, 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:2468 +#: parser/parse_expr.c:2745 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Hay múltiples candidatos igualmente plausibles." -#: parser/parse_expr.c:2560 +#: parser/parse_expr.c:2837 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM requiere que el operador = retorne boolean" -#: parser/parse_func.c:173 +#: parser/parse_expr.c:3127 parser/parse_expr.c:3145 +#, c-format +msgid "operator precedence change: %s is now lower precedence than %s" +msgstr "" + +#: parser/parse_func.c:174 #, c-format msgid "argument name \"%s\" used more than once" msgstr "el nombre de argumento «%s» fue especificado más de una vez" -#: parser/parse_func.c:184 +#: parser/parse_func.c:185 #, c-format msgid "positional argument cannot follow named argument" msgstr "un argumento posicional no puede seguir a un argumento con nombre" -#: parser/parse_func.c:263 +#: parser/parse_func.c:270 #, c-format msgid "%s(*) specified, but %s is not an aggregate function" msgstr "se especificó %s(*), pero %s no es una función de agregación" -#: parser/parse_func.c:270 +#: parser/parse_func.c:277 #, c-format msgid "DISTINCT specified, but %s is not an aggregate function" msgstr "se especificó DISTINCT, pero %s no es una función de agregación" -#: parser/parse_func.c:276 +#: parser/parse_func.c:283 #, c-format msgid "WITHIN GROUP specified, but %s is not an aggregate function" msgstr "se especificó WITHIN GROUP, pero %s no es una función de agregación" -#: parser/parse_func.c:282 +#: parser/parse_func.c:289 #, c-format msgid "ORDER BY specified, but %s is not an aggregate function" msgstr "se especificó ORDER BY, pero %s no es una función de agregación" -#: parser/parse_func.c:288 +#: parser/parse_func.c:295 #, c-format msgid "FILTER specified, but %s is not an aggregate function" msgstr "se especificó FILTER, pero %s no es una función de agregación" -#: parser/parse_func.c:294 +#: parser/parse_func.c:301 #, c-format msgid "OVER specified, but %s is not a window function nor an aggregate function" msgstr "se especificó OVER, pero %s no es una función de ventana deslizante ni una función de agregación" -#: parser/parse_func.c:324 +#: parser/parse_func.c:331 #, c-format msgid "WITHIN GROUP is required for ordered-set aggregate %s" msgstr "WITHIN GROUP es obligatorio para la función de agregación de conjuntos ordenados %s" -#: parser/parse_func.c:330 +#: parser/parse_func.c:337 #, c-format msgid "OVER is not supported for ordered-set aggregate %s" msgstr "OVER no está soportado para la función de agregación de conjuntos ordenados %s" -#: parser/parse_func.c:361 parser/parse_func.c:390 +#: parser/parse_func.c:368 parser/parse_func.c:397 #, c-format msgid "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." msgstr "Hay una función de agregación de conjuntos ordenados %s, pero requiere %d argumentos directos, no %d." -#: parser/parse_func.c:415 +#: parser/parse_func.c:422 #, c-format msgid "To use the hypothetical-set aggregate %s, the number of hypothetical direct arguments (here %d) must match the number of ordering columns (here %d)." msgstr "Para usar la función de agregación de conjunto hipotética %s, el número de argumentos hipotéticos directos (acá %d) debe coincidir con el número de columnas del ordenamiento (acá %d)." -#: parser/parse_func.c:429 +#: parser/parse_func.c:436 #, c-format msgid "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." msgstr "Hay una función de agregación de conjuntos ordenados %s, pero requiere al menos %d argumentos directos" -#: parser/parse_func.c:448 +#: parser/parse_func.c:455 #, c-format msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" msgstr "%s no es una función de agregación de conjunto ordenado, por lo que no puede tener WITHIN GROUP" -#: parser/parse_func.c:461 +#: parser/parse_func.c:468 #, c-format msgid "window function %s requires an OVER clause" msgstr "la función de ventana deslizante %s requiere una cláusula OVER" -#: parser/parse_func.c:468 +#: parser/parse_func.c:475 #, c-format msgid "window function %s cannot have WITHIN GROUP" msgstr "la función de ventana deslizante %s no puede tener WITHIN GROUP" -#: parser/parse_func.c:489 +#: parser/parse_func.c:496 #, c-format msgid "function %s is not unique" msgstr "la función %s no es única" -#: parser/parse_func.c:492 +#: parser/parse_func.c:499 #, c-format msgid "Could not choose a best candidate function. You might need to add explicit type casts." msgstr "No se pudo escoger la función más adecuada. Puede ser necesario agregar conversiones explícitas de tipos." -#: parser/parse_func.c:503 +#: parser/parse_func.c:510 #, c-format msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." msgstr "Ninguna función coincide en el nombre y tipos de argumentos. Quizás puso ORDER BY en una mala posición; ORDER BY debe aparecer después de todos los argumentos normales de la función de agregación." -#: parser/parse_func.c:514 +#: parser/parse_func.c:521 #, c-format msgid "No function matches the given name and argument types. You might need to add explicit type casts." msgstr "Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos." -#: parser/parse_func.c:616 +#: parser/parse_func.c:623 #, c-format msgid "VARIADIC argument must be an array" msgstr "el parámetro VARIADIC debe ser un array" -#: parser/parse_func.c:661 parser/parse_func.c:725 +#: parser/parse_func.c:668 parser/parse_func.c:732 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "%s(*) debe ser usado para invocar una función de agregación sin parámetros" -#: parser/parse_func.c:668 +#: parser/parse_func.c:675 #, c-format msgid "aggregates cannot return sets" msgstr "las funciones de agregación no pueden retornar conjuntos" -#: parser/parse_func.c:683 +#: parser/parse_func.c:690 #, c-format msgid "aggregates cannot use named arguments" msgstr "las funciones de agregación no pueden usar argumentos con nombre" -#: parser/parse_func.c:715 +#: parser/parse_func.c:722 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "DISTINCT no está implementado para funciones de ventana deslizante" -#: parser/parse_func.c:735 +#: parser/parse_func.c:742 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "el ORDER BY de funciones de agregación no está implementado para funciones de ventana deslizante" -#: parser/parse_func.c:744 +#: parser/parse_func.c:751 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "FILTER no está implementado para funciones de ventana deslizante" -#: parser/parse_func.c:750 +#: parser/parse_func.c:757 #, c-format msgid "window functions cannot return sets" msgstr "las funciones de ventana deslizante no pueden retornar conjuntos" -#: parser/parse_func.c:1994 +#: parser/parse_func.c:2007 #, c-format msgid "aggregate %s(*) does not exist" msgstr "no existe la función de agregación %s(*)" -#: parser/parse_func.c:1999 +#: parser/parse_func.c:2012 #, c-format msgid "aggregate %s does not exist" msgstr "no existe la función de agregación %s" -#: parser/parse_func.c:2018 +#: parser/parse_func.c:2031 #, c-format msgid "function %s is not an aggregate" msgstr "la función %s no es una función de agregación" @@ -11677,60 +12762,61 @@ msgstr "los subíndices de arrays deben tener tipo entero" msgid "array assignment requires type %s but expression is of type %s" msgstr "la asignación de array debe tener tipo %s pero la expresión es de tipo %s" -#: parser/parse_oper.c:124 parser/parse_oper.c:718 utils/adt/regproc.c:547 -#: utils/adt/regproc.c:567 utils/adt/regproc.c:751 +#: parser/parse_oper.c:125 parser/parse_oper.c:722 utils/adt/regproc.c:583 +#: utils/adt/regproc.c:603 utils/adt/regproc.c:787 #, c-format msgid "operator does not exist: %s" msgstr "el operador no existe: %s" -#: parser/parse_oper.c:221 +#: parser/parse_oper.c:222 #, c-format msgid "Use an explicit ordering operator or modify the query." msgstr "Use un operador de ordenamiento explícito o modifique la consulta." -#: parser/parse_oper.c:225 utils/adt/arrayfuncs.c:3222 -#: utils/adt/arrayfuncs.c:3741 utils/adt/arrayfuncs.c:5294 -#: utils/adt/rowtypes.c:1159 +#: parser/parse_oper.c:226 utils/adt/array_userfuncs.c:782 +#: utils/adt/array_userfuncs.c:920 utils/adt/arrayfuncs.c:3613 +#: utils/adt/arrayfuncs.c:4051 utils/adt/arrayfuncs.c:6029 +#: utils/adt/rowtypes.c:1154 #, c-format msgid "could not identify an equality operator for type %s" msgstr "no se pudo identificar un operador de igualdad para el tipo %s" -#: parser/parse_oper.c:476 +#: parser/parse_oper.c:478 #, c-format msgid "operator requires run-time type coercion: %s" msgstr "el operador requiere conversión explícita de tipos: %s" -#: parser/parse_oper.c:710 +#: parser/parse_oper.c:714 #, c-format msgid "operator is not unique: %s" msgstr "el operador no es único: %s" -#: parser/parse_oper.c:712 +#: parser/parse_oper.c:716 #, c-format msgid "Could not choose a best candidate operator. You might need to add explicit type casts." msgstr "No se pudo escoger el operador más adecuado. Puede ser necesario agregar conversiones explícitas de tipos." -#: parser/parse_oper.c:720 +#: parser/parse_oper.c:724 #, c-format msgid "No operator matches the given name and argument type(s). You might need to add explicit type casts." msgstr "Ningún operador coincide con el nombre y el tipo de los argumentos. Puede ser necesario agregar conversiones explícitas de tipos." -#: parser/parse_oper.c:779 parser/parse_oper.c:893 +#: parser/parse_oper.c:783 parser/parse_oper.c:897 #, c-format msgid "operator is only a shell: %s" msgstr "el operador está inconcluso: %s" -#: parser/parse_oper.c:881 +#: parser/parse_oper.c:885 #, c-format msgid "op ANY/ALL (array) requires array on right side" msgstr "op ANY/ALL (array) requiere un array al lado derecho" -#: parser/parse_oper.c:923 +#: parser/parse_oper.c:927 #, c-format msgid "op ANY/ALL (array) requires operator to yield boolean" msgstr "op ANY/ALL (array) requiere un operador que entregue boolean" -#: parser/parse_oper.c:928 +#: parser/parse_oper.c:932 #, c-format msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "op ANY/ALL (array) requiere un operador que no retorne un conjunto" @@ -11740,148 +12826,158 @@ msgstr "op ANY/ALL (array) requiere un operador que no retorne un conjunto" msgid "inconsistent types deduced for parameter $%d" msgstr "para el parámetro $%d se dedujeron tipos de dato inconsistentes" -#: parser/parse_relation.c:172 +#: parser/parse_relation.c:174 #, c-format msgid "table reference \"%s\" is ambiguous" msgstr "la referencia a la tabla «%s» es ambigua" -#: parser/parse_relation.c:216 +#: parser/parse_relation.c:218 #, c-format msgid "table reference %u is ambiguous" msgstr "la referencia a la tabla %u es ambigua" -#: parser/parse_relation.c:395 +#: parser/parse_relation.c:397 #, c-format msgid "table name \"%s\" specified more than once" msgstr "el nombre de tabla «%s» fue especificado más de una vez" -#: parser/parse_relation.c:422 parser/parse_relation.c:2839 +#: parser/parse_relation.c:424 parser/parse_relation.c:3020 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "referencia a la entrada de la cláusula FROM para la tabla «%s» no válida" -#: parser/parse_relation.c:425 parser/parse_relation.c:2844 +#: parser/parse_relation.c:427 parser/parse_relation.c:3025 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "Hay una entrada para la tabla «%s», pero no puede ser referenciada desde esta parte de la consulta." -#: parser/parse_relation.c:427 +#: parser/parse_relation.c:429 #, c-format msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." msgstr "El tipo de JOIN debe ser INNER o LEFT para una referencia LATERAL." -#: parser/parse_relation.c:591 +#: parser/parse_relation.c:704 #, c-format msgid "system column \"%s\" reference in check constraint is invalid" msgstr "la referencia a columna a sistema «%s» en una restricción check no es válida" -#: parser/parse_relation.c:892 parser/parse_relation.c:1169 -#: parser/parse_relation.c:1663 +#: parser/parse_relation.c:1062 parser/parse_relation.c:1342 +#: parser/parse_relation.c:1844 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "la tabla «%s» tiene %d columnas pero se especificaron %d" -#: parser/parse_relation.c:979 +#: parser/parse_relation.c:1149 #, c-format msgid "There is a WITH item named \"%s\", but it cannot be referenced from this part of the query." msgstr "Hay un elemento WITH llamado «%s», pero no puede ser referenciada desde esta parte de la consulta." -#: parser/parse_relation.c:981 +#: parser/parse_relation.c:1151 #, c-format msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." msgstr "Use WITH RECURSIVE, o reordene los elementos de WITH para eliminar referencias hacia adelante." -#: parser/parse_relation.c:1287 +#: parser/parse_relation.c:1462 #, c-format msgid "a column definition list is only allowed for functions returning \"record\"" msgstr "sólo se permite una lista de definición de columnas en funciones que retornan «record»" -#: parser/parse_relation.c:1296 +#: parser/parse_relation.c:1471 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "la lista de definición de columnas es obligatoria para funciones que retornan «record»" -#: parser/parse_relation.c:1375 +#: parser/parse_relation.c:1550 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "la función «%s» en FROM tiene el tipo de retorno no soportado %s" -#: parser/parse_relation.c:1495 +#: parser/parse_relation.c:1672 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "la lista VALUES «%s» tiene %d columnas disponibles pero se especificaron %d" -#: parser/parse_relation.c:1548 +#: parser/parse_relation.c:1727 #, c-format msgid "joins can have at most %d columns" msgstr "los joins pueden tener a lo más %d columnas" -#: parser/parse_relation.c:1636 +#: parser/parse_relation.c:1817 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "la consulta WITH «%s» no tiene una cláusula RETURNING" -#: parser/parse_relation.c:2468 parser/parse_relation.c:2623 +#: parser/parse_relation.c:2649 parser/parse_relation.c:2804 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "no existe la columna %d en la relación «%s»" -#: parser/parse_relation.c:2842 +#: parser/parse_relation.c:3023 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Probablemente quiera hacer referencia al alias de la tabla «%s»." -#: parser/parse_relation.c:2850 +#: parser/parse_relation.c:3031 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "falta una entrada para la tabla «%s» en la cláusula FROM" -#: parser/parse_relation.c:2890 +#: parser/parse_relation.c:3083 +#, fuzzy, c-format +msgid "Perhaps you meant to reference the column \"%s\".\"%s\"." +msgstr "Probablemente quiera hacer referencia al alias de la tabla «%s»." + +#: parser/parse_relation.c:3085 #, c-format msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." msgstr "Hay una columna llamada «%s» en la tabla «%s», pero no puede ser referenciada desde esta parte de la consulta." -#: parser/parse_target.c:402 parser/parse_target.c:693 +#: parser/parse_relation.c:3102 +#, fuzzy, c-format +msgid "Perhaps you meant to reference the column \"%s\".\"%s\" or the column \"%s\".\"%s\"." +msgstr "Probablemente quiera hacer referencia al alias de la tabla «%s»." + +#: parser/parse_target.c:421 parser/parse_target.c:713 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "no se puede asignar a la columna de sistema «%s»" -#: parser/parse_target.c:430 +#: parser/parse_target.c:449 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "no se puede definir un elemento de array a DEFAULT" -#: parser/parse_target.c:435 +#: parser/parse_target.c:454 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "no se puede definir un subcampo a DEFAULT" -#: parser/parse_target.c:504 +#: parser/parse_target.c:523 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "la columna «%s» es de tipo %s pero la expresión es de tipo %s" -#: parser/parse_target.c:677 +#: parser/parse_target.c:697 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a composite type" msgstr "no se puede asignar al campo «%s» de la columna «%s» porque su tipo %s no es un tipo compuesto" -#: parser/parse_target.c:686 +#: parser/parse_target.c:706 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because there is no such column in data type %s" msgstr "no se puede asignar al campo «%s» de la columna «%s» porque no existe esa columna en el tipo de dato %s" -#: parser/parse_target.c:753 +#: parser/parse_target.c:773 #, c-format msgid "array assignment to \"%s\" requires type %s but expression is of type %s" msgstr "la asignación de array a «%s» requiere tipo %s pero la expresión es de tipo %s" -#: parser/parse_target.c:763 +#: parser/parse_target.c:783 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "el subcampo «%s» es de tipo %s pero la expresión es de tipo %s" -#: parser/parse_target.c:1179 +#: parser/parse_target.c:1199 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "SELECT * sin especificar tablas no es válido" @@ -11901,224 +12997,244 @@ msgstr "la referencia a %%TYPE es inapropiada (demasiados nombres con punto): %s msgid "type reference %s converted to %s" msgstr "la referencia al tipo %s convertida a %s" -#: parser/parse_type.c:257 parser/parse_type.c:805 utils/cache/typcache.c:198 +#: parser/parse_type.c:262 parser/parse_type.c:834 utils/cache/typcache.c:230 #, c-format msgid "type \"%s\" is only a shell" msgstr "el tipo «%s» está inconcluso" -#: parser/parse_type.c:342 +#: parser/parse_type.c:347 #, c-format msgid "type modifier is not allowed for type \"%s\"" msgstr "un modificador de tipo no está permitido para el tipo «%s»" -#: parser/parse_type.c:384 +#: parser/parse_type.c:389 #, c-format msgid "type modifiers must be simple constants or identifiers" msgstr "los modificadores de tipo deben ser constantes simples o identificadores" -#: parser/parse_type.c:695 parser/parse_type.c:819 +#: parser/parse_type.c:700 parser/parse_type.c:799 #, c-format msgid "invalid type name \"%s\"" msgstr "el nombre de tipo «%s» no es válido" -#: parser/parse_utilcmd.c:177 -#, c-format -msgid "relation \"%s\" already exists, skipping" -msgstr "la relación «%s» ya existe, ignorando" - -#: parser/parse_utilcmd.c:342 +#: parser/parse_utilcmd.c:358 #, c-format msgid "array of serial is not implemented" msgstr "array de serial no está implementado" -#: parser/parse_utilcmd.c:390 +#: parser/parse_utilcmd.c:406 #, c-format msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" msgstr "%s creará una secuencia implícita «%s» para la columna serial «%s.%s»" -#: parser/parse_utilcmd.c:484 parser/parse_utilcmd.c:496 +#: parser/parse_utilcmd.c:500 parser/parse_utilcmd.c:512 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "las declaraciones NULL/NOT NULL no son coincidentes para la columna «%s» de la tabla «%s»" -#: parser/parse_utilcmd.c:508 +#: parser/parse_utilcmd.c:524 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "múltiples valores default especificados para columna «%s» de tabla «%s»" -#: parser/parse_utilcmd.c:675 +#: parser/parse_utilcmd.c:541 parser/parse_utilcmd.c:632 +#, fuzzy, c-format +msgid "primary key constraints are not supported on foreign tables" +msgstr "las restricciones no están soportadas en tablas foráneas" + +#: parser/parse_utilcmd.c:550 parser/parse_utilcmd.c:642 +#, fuzzy, c-format +msgid "unique constraints are not supported on foreign tables" +msgstr "las restricciones no están soportadas en tablas foráneas" + +#: parser/parse_utilcmd.c:567 parser/parse_utilcmd.c:666 +#, fuzzy, c-format +msgid "foreign key constraints are not supported on foreign tables" +msgstr "las restricciones no están soportadas en tablas foráneas" + +#: parser/parse_utilcmd.c:652 +#, fuzzy, c-format +msgid "exclusion constraints are not supported on foreign tables" +msgstr "las restricciones no están soportadas en tablas foráneas" + +#: parser/parse_utilcmd.c:716 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE no está soportado para la creación de tablas foráneas" -#: parser/parse_utilcmd.c:1196 parser/parse_utilcmd.c:1272 +#: parser/parse_utilcmd.c:1239 parser/parse_utilcmd.c:1315 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "El índice «%s» contiene una referencia a la fila completa (whole-row)." -#: parser/parse_utilcmd.c:1539 +#: parser/parse_utilcmd.c:1584 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "no se puede usar un índice existente en CREATE TABLE" -#: parser/parse_utilcmd.c:1559 +#: parser/parse_utilcmd.c:1604 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "el índice «%s» ya está asociado a una restricción" -#: parser/parse_utilcmd.c:1567 +#: parser/parse_utilcmd.c:1612 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "el índice «%s» no pertenece a la tabla «%s»" -#: parser/parse_utilcmd.c:1574 +#: parser/parse_utilcmd.c:1619 #, c-format msgid "index \"%s\" is not valid" msgstr "el índice «%s» no es válido" -#: parser/parse_utilcmd.c:1580 +#: parser/parse_utilcmd.c:1625 #, c-format msgid "\"%s\" is not a unique index" msgstr "«%s» no es un índice único" -#: parser/parse_utilcmd.c:1581 parser/parse_utilcmd.c:1588 -#: parser/parse_utilcmd.c:1595 parser/parse_utilcmd.c:1665 +#: parser/parse_utilcmd.c:1626 parser/parse_utilcmd.c:1633 +#: parser/parse_utilcmd.c:1640 parser/parse_utilcmd.c:1710 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "No se puede crear una restricción de llave primaria o única usando un índice así." -#: parser/parse_utilcmd.c:1587 +#: parser/parse_utilcmd.c:1632 #, c-format msgid "index \"%s\" contains expressions" msgstr "el índice «%s» contiene expresiones" -#: parser/parse_utilcmd.c:1594 +#: parser/parse_utilcmd.c:1639 #, c-format msgid "\"%s\" is a partial index" msgstr "«%s» es un índice parcial" -#: parser/parse_utilcmd.c:1606 +#: parser/parse_utilcmd.c:1651 #, c-format msgid "\"%s\" is a deferrable index" msgstr "«%s» no es un índice postergable (deferrable)" -#: parser/parse_utilcmd.c:1607 +#: parser/parse_utilcmd.c:1652 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "No se puede crear una restricción no postergable usando un índice postergable." -#: parser/parse_utilcmd.c:1664 +#: parser/parse_utilcmd.c:1709 #, c-format msgid "index \"%s\" does not have default sorting behavior" msgstr "el índice «%s» no tiene el comportamiento de ordenamiento por omisión" -#: parser/parse_utilcmd.c:1809 +#: parser/parse_utilcmd.c:1856 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "la columna «%s» aparece dos veces en llave primaria" -#: parser/parse_utilcmd.c:1815 +#: parser/parse_utilcmd.c:1862 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "la columna «%s» aparece dos veces en restricción unique" -#: parser/parse_utilcmd.c:1981 +#: parser/parse_utilcmd.c:2032 #, c-format msgid "index expression cannot return a set" msgstr "las expresiones de índice no pueden retornar conjuntos" -#: parser/parse_utilcmd.c:1992 +#: parser/parse_utilcmd.c:2043 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "las expresiones y predicados de índice sólo pueden referirse a la tabla en indexación" -#: parser/parse_utilcmd.c:2035 +#: parser/parse_utilcmd.c:2089 #, c-format msgid "rules on materialized views are not supported" msgstr "las reglas en vistas materializadas no están soportadas" -#: parser/parse_utilcmd.c:2096 +#: parser/parse_utilcmd.c:2150 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "la condición WHERE de la regla no puede contener referencias a otras relaciones" -#: parser/parse_utilcmd.c:2168 +#: parser/parse_utilcmd.c:2222 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "las reglas con condiciones WHERE sólo pueden tener acciones SELECT, INSERT, UPDATE o DELETE" -#: parser/parse_utilcmd.c:2186 parser/parse_utilcmd.c:2285 -#: rewrite/rewriteHandler.c:469 rewrite/rewriteManip.c:968 +#: parser/parse_utilcmd.c:2240 parser/parse_utilcmd.c:2339 +#: rewrite/rewriteHandler.c:478 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "las sentencias UNION/INTERSECT/EXCEPT condicionales no están implementadas" -#: parser/parse_utilcmd.c:2204 +#: parser/parse_utilcmd.c:2258 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "una regla ON SELECT no puede usar OLD" -#: parser/parse_utilcmd.c:2208 +#: parser/parse_utilcmd.c:2262 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "una regla ON SELECT no puede usar NEW" -#: parser/parse_utilcmd.c:2217 +#: parser/parse_utilcmd.c:2271 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "una regla ON INSERT no puede usar OLD" -#: parser/parse_utilcmd.c:2223 +#: parser/parse_utilcmd.c:2277 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "una regla ON DELETE no puede usar NEW" -#: parser/parse_utilcmd.c:2251 +#: parser/parse_utilcmd.c:2305 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "no se puede hacer referencia a OLD dentro de una consulta WITH" -#: parser/parse_utilcmd.c:2258 +#: parser/parse_utilcmd.c:2312 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "no se puede hacer referencia a NEW dentro de una consulta WITH" -#: parser/parse_utilcmd.c:2541 +#: parser/parse_utilcmd.c:2515 +#, c-format +msgid "transform expression must not return a set" +msgstr "la expresión de transformación no puede retornar conjuntos" + +#: parser/parse_utilcmd.c:2629 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "cláusula DEFERRABLE mal puesta" -#: parser/parse_utilcmd.c:2546 parser/parse_utilcmd.c:2561 +#: parser/parse_utilcmd.c:2634 parser/parse_utilcmd.c:2649 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "no se permiten múltiples cláusulas DEFERRABLE/NOT DEFERRABLE" -#: parser/parse_utilcmd.c:2556 +#: parser/parse_utilcmd.c:2644 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "la cláusula NOT DEFERRABLE está mal puesta" -#: parser/parse_utilcmd.c:2569 parser/parse_utilcmd.c:2595 gram.y:4577 +#: parser/parse_utilcmd.c:2657 parser/parse_utilcmd.c:2683 gram.y:4838 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "una restricción declarada INITIALLY DEFERRED debe ser DEFERRABLE" -#: parser/parse_utilcmd.c:2577 +#: parser/parse_utilcmd.c:2665 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "la cláusula INITIALLY DEFERRED está mal puesta" -#: parser/parse_utilcmd.c:2582 parser/parse_utilcmd.c:2608 +#: parser/parse_utilcmd.c:2670 parser/parse_utilcmd.c:2696 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "no se permiten múltiples cláusulas INITIALLY IMMEDIATE/DEFERRED" -#: parser/parse_utilcmd.c:2603 +#: parser/parse_utilcmd.c:2691 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "la cláusula INITIALLY IMMEDIATE está mal puesta" -#: parser/parse_utilcmd.c:2794 +#: parser/parse_utilcmd.c:2882 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE especifica un esquema (%s) diferente del que se está creando (%s)" @@ -12128,13 +13244,13 @@ msgstr "CREATE especifica un esquema (%s) diferente del que se está creando (%s msgid "identifier \"%s\" will be truncated to \"%s\"" msgstr "el identificador «%s» se truncará a «%s»" -#: port/pg_latch.c:336 port/unix_latch.c:336 +#: port/pg_latch.c:344 port/unix_latch.c:344 #, c-format msgid "poll() failed: %m" msgstr "poll() fallida: %m" -#: port/pg_latch.c:423 port/unix_latch.c:423 -#: replication/libpqwalreceiver/libpqwalreceiver.c:363 +#: port/pg_latch.c:440 port/unix_latch.c:440 +#: replication/libpqwalreceiver/libpqwalreceiver.c:374 #, c-format msgid "select() failed: %m" msgstr "select() fallida: %m" @@ -12286,17 +13402,17 @@ msgstr "no se pudo crear thread de despacho de señales: código de error %lu\n" msgid "could not create semaphore: error code %lu" msgstr "no se pudo crear semáforo: código de error %lu" -#: port/win32_sema.c:165 +#: port/win32_sema.c:167 #, c-format msgid "could not lock semaphore: error code %lu" msgstr "no se pudo bloquear semáforo: código de error %lu" -#: port/win32_sema.c:178 +#: port/win32_sema.c:187 #, c-format msgid "could not unlock semaphore: error code %lu" msgstr "no se pudo desbloquear semáforo: código de error %lu" -#: port/win32_sema.c:207 +#: port/win32_sema.c:216 #, c-format msgid "could not try-lock semaphore: error code %lu" msgstr "no se pudo intentar-bloquear (try-lock) el semáforo: código de error %lu" @@ -12331,107 +13447,107 @@ msgstr "La llamada a sistema fallida fue DuplicateHandle." msgid "Failed system call was MapViewOfFileEx." msgstr "La llamada a sistema fallida fue MapViewOfFileEx." -#: postmaster/autovacuum.c:380 +#: postmaster/autovacuum.c:377 #, c-format msgid "could not fork autovacuum launcher process: %m" msgstr "no se pudo iniciar el lanzador autovacuum: %m" -#: postmaster/autovacuum.c:425 +#: postmaster/autovacuum.c:413 #, c-format msgid "autovacuum launcher started" msgstr "lanzador de autovacuum iniciado" -#: postmaster/autovacuum.c:790 +#: postmaster/autovacuum.c:775 #, c-format msgid "autovacuum launcher shutting down" msgstr "apagando lanzador de autovacuum" -#: postmaster/autovacuum.c:1453 +#: postmaster/autovacuum.c:1443 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "no se pudo lanzar el proceso «autovacuum worker»: %m" -#: postmaster/autovacuum.c:1672 +#: postmaster/autovacuum.c:1639 #, c-format msgid "autovacuum: processing database \"%s\"" msgstr "autovacuum: procesando la base de datos «%s»" -#: postmaster/autovacuum.c:2076 +#: postmaster/autovacuum.c:2051 #, c-format msgid "autovacuum: dropping orphan temp table \"%s\".\"%s\" in database \"%s\"" msgstr "autovacuum: eliminando la tabla temporal huérfana «%s».«%s» en la base de datos «%s»" -#: postmaster/autovacuum.c:2088 +#: postmaster/autovacuum.c:2063 #, c-format msgid "autovacuum: found orphan temp table \"%s\".\"%s\" in database \"%s\"" msgstr "autovacuum: se encontró una tabla temporal huérfana «%s».«%s» en la base de datos «%s»" -#: postmaster/autovacuum.c:2353 +#: postmaster/autovacuum.c:2346 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "vacuum automático de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:2356 +#: postmaster/autovacuum.c:2349 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "análisis automático de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:2889 +#: postmaster/autovacuum.c:2877 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum no fue iniciado debido a un error de configuración" -#: postmaster/autovacuum.c:2890 +#: postmaster/autovacuum.c:2878 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Active la opción «track_counts»." -#: postmaster/bgworker.c:323 postmaster/bgworker.c:732 +#: postmaster/bgworker.c:345 postmaster/bgworker.c:745 #, c-format msgid "registering background worker \"%s\"" msgstr "registrando el «background worker» «%s»" -#: postmaster/bgworker.c:352 +#: postmaster/bgworker.c:374 #, c-format msgid "unregistering background worker \"%s\"" msgstr "des-registrando el «background worker» «%s»" -#: postmaster/bgworker.c:454 +#: postmaster/bgworker.c:483 #, c-format msgid "background worker \"%s\": must attach to shared memory in order to request a database connection" msgstr "«background worker» «%s»: debe acoplarse a memoria compartida para poder solicitar una conexión a base de datos" -#: postmaster/bgworker.c:463 +#: postmaster/bgworker.c:492 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "«background worker» «%s»: no se puede solicitar una conexión a base de datos si está iniciando en el momento de inicio de postmaster" -#: postmaster/bgworker.c:477 +#: postmaster/bgworker.c:506 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "«background worker» «%s»: intervalo de reinicio no válido" -#: postmaster/bgworker.c:522 +#: postmaster/bgworker.c:551 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "terminando el «background worker» «%s» debido a una orden del administrador" -#: postmaster/bgworker.c:739 +#: postmaster/bgworker.c:752 #, c-format msgid "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "«background worker» «%s»: debe ser registrado en shared_preload_libraries" -#: postmaster/bgworker.c:751 +#: postmaster/bgworker.c:764 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "«background worker» «%s»: sólo los «background worker» dinámicos pueden pedir notificaciones" -#: postmaster/bgworker.c:766 +#: postmaster/bgworker.c:779 #, c-format msgid "too many background workers" msgstr "demasiados «background workers»" -#: postmaster/bgworker.c:767 +#: postmaster/bgworker.c:780 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." @@ -12439,170 +13555,171 @@ msgstr[0] "Hasta %d «background worker» puede registrarse con la configuració msgstr[1] "Hasta %d «background workers» pueden registrarse con la configuración actual." # FIXME a %s would be nice here -#: postmaster/bgworker.c:771 +#: postmaster/bgworker.c:784 #, c-format msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Considere incrementar el parámetro de configuración «max_worker_processes»." -#: postmaster/checkpointer.c:481 +#: postmaster/checkpointer.c:470 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" msgstr[0] "los puntos de control están ocurriendo con demasiada frecuencia (cada %d segundo)" msgstr[1] "los puntos de control están ocurriendo con demasiada frecuencia (cada %d segundos)" -#: postmaster/checkpointer.c:485 -#, c-format -msgid "Consider increasing the configuration parameter \"checkpoint_segments\"." -msgstr "Considere incrementar el parámetro de configuración «checkpoint_segments»." +# FIXME a %s would be nice here +#: postmaster/checkpointer.c:474 +#, fuzzy, c-format +msgid "Consider increasing the configuration parameter \"max_wal_size\"." +msgstr "Considere incrementar el parámetro de configuración «max_worker_processes»." -#: postmaster/checkpointer.c:630 +#: postmaster/checkpointer.c:621 #, c-format msgid "transaction log switch forced (archive_timeout=%d)" msgstr "cambio forzado de registro de transacción (archive_timeout=%d)" -#: postmaster/checkpointer.c:1083 +#: postmaster/checkpointer.c:1081 #, c-format msgid "checkpoint request failed" msgstr "falló la petición de punto de control" -#: postmaster/checkpointer.c:1084 +#: postmaster/checkpointer.c:1082 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Vea los mensajes recientes en el registro del servidor para obtener más detalles." -#: postmaster/checkpointer.c:1280 +#: postmaster/checkpointer.c:1277 #, c-format msgid "compacted fsync request queue from %d entries to %d entries" msgstr "la cola de peticiones de fsync fue compactada de %d a %d elementos" -#: postmaster/pgarch.c:154 +#: postmaster/pgarch.c:149 #, c-format msgid "could not fork archiver: %m" msgstr "no se pudo lanzar el proceso archivador: %m" -#: postmaster/pgarch.c:481 +#: postmaster/pgarch.c:456 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "archive_mode activado, pero archive_command no está definido" -#: postmaster/pgarch.c:509 +#: postmaster/pgarch.c:484 #, c-format msgid "archiving transaction log file \"%s\" failed too many times, will try again later" msgstr "el archivado del archivo de transacción «%s» falló demasiadas veces, se reintentará nuevamente más tarde" -#: postmaster/pgarch.c:612 +#: postmaster/pgarch.c:587 #, c-format msgid "archive command failed with exit code %d" msgstr "la orden de archivado falló con código de retorno %d" -#: postmaster/pgarch.c:614 postmaster/pgarch.c:624 postmaster/pgarch.c:631 -#: postmaster/pgarch.c:637 postmaster/pgarch.c:646 +#: postmaster/pgarch.c:589 postmaster/pgarch.c:599 postmaster/pgarch.c:606 +#: postmaster/pgarch.c:612 postmaster/pgarch.c:621 #, c-format msgid "The failed archive command was: %s" msgstr "La orden fallida era: «%s»" -#: postmaster/pgarch.c:621 +#: postmaster/pgarch.c:596 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "la orden de archivado fue terminada por una excepción 0x%X" -#: postmaster/pgarch.c:623 postmaster/postmaster.c:3303 +#: postmaster/pgarch.c:598 postmaster/postmaster.c:3426 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "Vea el archivo «ntstatus.h» para una descripción del valor hexadecimal." -#: postmaster/pgarch.c:628 +#: postmaster/pgarch.c:603 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "la orden de archivado fue terminada por una señal %d: %s" -#: postmaster/pgarch.c:635 +#: postmaster/pgarch.c:610 #, c-format msgid "archive command was terminated by signal %d" msgstr "la orden de archivado fue terminada por una señal %d" -#: postmaster/pgarch.c:644 +#: postmaster/pgarch.c:619 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "la orden de archivado fue terminada con código no reconocido %d" -#: postmaster/pgarch.c:656 +#: postmaster/pgarch.c:631 #, c-format msgid "archived transaction log file \"%s\"" msgstr "el archivo de registro «%s» ha sido archivado" -#: postmaster/pgarch.c:705 +#: postmaster/pgarch.c:680 #, c-format msgid "could not open archive status directory \"%s\": %m" msgstr "no se pudo abrir el directorio de estado de archivado «%s»: %m" -#: postmaster/pgstat.c:354 +#: postmaster/pgstat.c:356 #, c-format msgid "could not resolve \"localhost\": %s" msgstr "no se pudo resolver «localhost»: %s" -#: postmaster/pgstat.c:377 +#: postmaster/pgstat.c:379 #, c-format msgid "trying another address for the statistics collector" msgstr "intentando otra dirección para el recolector de estadísticas" -#: postmaster/pgstat.c:386 +#: postmaster/pgstat.c:388 #, c-format msgid "could not create socket for statistics collector: %m" msgstr "no se pudo crear el socket para el recolector de estadísticas: %m" -#: postmaster/pgstat.c:398 +#: postmaster/pgstat.c:400 #, c-format msgid "could not bind socket for statistics collector: %m" msgstr "no se pudo enlazar (bind) el socket para el recolector de estadísticas: %m" -#: postmaster/pgstat.c:409 +#: postmaster/pgstat.c:411 #, c-format msgid "could not get address of socket for statistics collector: %m" msgstr "no se pudo obtener la dirección del socket de estadísticas: %m" -#: postmaster/pgstat.c:425 +#: postmaster/pgstat.c:427 #, c-format msgid "could not connect socket for statistics collector: %m" msgstr "no se pudo conectar el socket para el recolector de estadísticas: %m" -#: postmaster/pgstat.c:446 +#: postmaster/pgstat.c:448 #, c-format msgid "could not send test message on socket for statistics collector: %m" msgstr "no se pudo enviar el mensaje de prueba al recolector de estadísticas: %m" -#: postmaster/pgstat.c:472 +#: postmaster/pgstat.c:474 #, c-format msgid "select() failed in statistics collector: %m" msgstr "select() falló en el recolector de estadísticas: %m" -#: postmaster/pgstat.c:487 +#: postmaster/pgstat.c:489 #, c-format msgid "test message did not get through on socket for statistics collector" msgstr "el mensaje de prueba al recolector de estadísticas no ha sido recibido en el socket" -#: postmaster/pgstat.c:502 +#: postmaster/pgstat.c:504 #, c-format msgid "could not receive test message on socket for statistics collector: %m" msgstr "no se pudo recibir el mensaje de prueba en el socket del recolector de estadísticas: %m" -#: postmaster/pgstat.c:512 +#: postmaster/pgstat.c:514 #, c-format msgid "incorrect test message transmission on socket for statistics collector" msgstr "transmisión del mensaje de prueba incorrecta en el socket del recolector de estadísticas" -#: postmaster/pgstat.c:535 +#: postmaster/pgstat.c:537 #, c-format msgid "could not set statistics collector socket to nonblocking mode: %m" msgstr "no se pudo poner el socket de estadísticas en modo no bloqueante: %m" -#: postmaster/pgstat.c:545 +#: postmaster/pgstat.c:547 #, c-format msgid "disabling statistics collector for lack of working socket" msgstr "desactivando el recolector de estadísticas por falla del socket" -#: postmaster/pgstat.c:692 +#: postmaster/pgstat.c:694 #, c-format msgid "could not fork statistics collector: %m" msgstr "no se pudo crear el proceso para el recolector de estadísticas: %m" @@ -12622,198 +13739,213 @@ msgstr "destino de reset no reconocido: «%s»" msgid "Target must be \"archiver\" or \"bgwriter\"." msgstr "El destino debe ser «archiver» o «bgwriter»." -#: postmaster/pgstat.c:3280 +#: postmaster/pgstat.c:3425 #, c-format msgid "could not read statistics message: %m" msgstr "no se pudo leer un mensaje de estadísticas: %m" -#: postmaster/pgstat.c:3613 postmaster/pgstat.c:3790 +#: postmaster/pgstat.c:3756 postmaster/pgstat.c:3933 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "no se pudo abrir el archivo temporal de estadísticas «%s»: %m" -#: postmaster/pgstat.c:3681 postmaster/pgstat.c:3835 +#: postmaster/pgstat.c:3824 postmaster/pgstat.c:3978 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "no se pudo escribir el archivo temporal de estadísticas «%s»: %m" -#: postmaster/pgstat.c:3690 postmaster/pgstat.c:3844 +#: postmaster/pgstat.c:3833 postmaster/pgstat.c:3987 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "no se pudo cerrar el archivo temporal de estadísticas «%s»: %m" -#: postmaster/pgstat.c:3698 postmaster/pgstat.c:3852 +#: postmaster/pgstat.c:3841 postmaster/pgstat.c:3995 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "no se pudo cambiar el nombre al archivo temporal de estadísticas de «%s» a «%s»: %m" -#: postmaster/pgstat.c:3935 postmaster/pgstat.c:4120 postmaster/pgstat.c:4275 +#: postmaster/pgstat.c:4077 postmaster/pgstat.c:4260 postmaster/pgstat.c:4415 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "no se pudo abrir el archivo de estadísticas «%s»: %m" -#: postmaster/pgstat.c:3947 postmaster/pgstat.c:3957 postmaster/pgstat.c:3967 -#: postmaster/pgstat.c:3988 postmaster/pgstat.c:4003 postmaster/pgstat.c:4061 -#: postmaster/pgstat.c:4132 postmaster/pgstat.c:4152 postmaster/pgstat.c:4170 -#: postmaster/pgstat.c:4186 postmaster/pgstat.c:4204 postmaster/pgstat.c:4220 -#: postmaster/pgstat.c:4287 postmaster/pgstat.c:4299 postmaster/pgstat.c:4311 -#: postmaster/pgstat.c:4336 postmaster/pgstat.c:4358 +#: postmaster/pgstat.c:4089 postmaster/pgstat.c:4099 postmaster/pgstat.c:4109 +#: postmaster/pgstat.c:4130 postmaster/pgstat.c:4145 postmaster/pgstat.c:4201 +#: postmaster/pgstat.c:4272 postmaster/pgstat.c:4292 postmaster/pgstat.c:4310 +#: postmaster/pgstat.c:4326 postmaster/pgstat.c:4344 postmaster/pgstat.c:4360 +#: postmaster/pgstat.c:4427 postmaster/pgstat.c:4439 postmaster/pgstat.c:4451 +#: postmaster/pgstat.c:4476 postmaster/pgstat.c:4498 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "el archivo de estadísticas «%s» está corrupto" -#: postmaster/pgstat.c:4785 +#: postmaster/pgstat.c:4615 +#, c-format +msgid "using stale statistics instead of current ones because stats collector is not responding" +msgstr "usando estadísticas añejas en vez de actualizadas porque el recolector de estadísticas no está respondiendo" + +#: postmaster/pgstat.c:4933 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "el hash de bases de datos se corrompió durante la finalización; abortando" -#: postmaster/postmaster.c:650 +#: postmaster/postmaster.c:670 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: argumento no válido para la opción -f: «%s»\n" -#: postmaster/postmaster.c:736 +#: postmaster/postmaster.c:756 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: argumento no válido para la opción -t: «%s»\n" -#: postmaster/postmaster.c:787 +#: postmaster/postmaster.c:807 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: argumento no válido: «%s»\n" -#: postmaster/postmaster.c:822 +#: postmaster/postmaster.c:842 #, c-format msgid "%s: superuser_reserved_connections must be less than max_connections\n" msgstr "%s: superuser_reserved_connections debe ser menor que max_connections\n" -#: postmaster/postmaster.c:827 +#: postmaster/postmaster.c:847 #, c-format msgid "%s: max_wal_senders must be less than max_connections\n" msgstr "%s: max_wal_senders debe ser menor que max_connections\n" -#: postmaster/postmaster.c:832 +#: postmaster/postmaster.c:852 #, c-format -msgid "WAL archival (archive_mode=on) requires wal_level \"archive\", \"hot_standby\", or \"logical\"" -msgstr "el archivado de WAL (archive_mode=on) requiere wal_level «archive» o «hot_standby» o «logical»" +msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" +msgstr "" -#: postmaster/postmaster.c:835 +#: postmaster/postmaster.c:855 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"archive\", \"hot_standby\", or \"logical\"" msgstr "el flujo de WAL (max_wal_senders > 0) requiere wal_level «archive» o «hot_standby» o «logical»" -#: postmaster/postmaster.c:843 +#: postmaster/postmaster.c:863 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: las tablas de palabras clave de fecha no son válidas, arréglelas\n" -#: postmaster/postmaster.c:925 postmaster/postmaster.c:1023 -#: utils/init/miscinit.c:1188 +#: postmaster/postmaster.c:955 postmaster/postmaster.c:1053 +#: utils/init/miscinit.c:1314 #, 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:956 +#: postmaster/postmaster.c:986 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "no se pudo crear el socket de escucha para «%s»" -#: postmaster/postmaster.c:962 +#: postmaster/postmaster.c:992 #, c-format msgid "could not create any TCP/IP sockets" msgstr "no se pudo crear ningún socket TCP/IP" -#: postmaster/postmaster.c:1045 +#: postmaster/postmaster.c:1075 #, 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:1051 +#: postmaster/postmaster.c:1081 #, c-format msgid "could not create any Unix-domain sockets" msgstr "no se pudo crear ningún socket de dominio Unix" -#: postmaster/postmaster.c:1063 +#: postmaster/postmaster.c:1093 #, c-format msgid "no socket created for listening" msgstr "no se creó el socket de atención" -#: postmaster/postmaster.c:1103 +#: postmaster/postmaster.c:1133 #, 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:1132 +#: postmaster/postmaster.c:1162 #, 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:1136 +#: postmaster/postmaster.c:1166 #, 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:1160 +#: postmaster/postmaster.c:1217 #, c-format msgid "ending log output to stderr" msgstr "terminando la salida de registro a stderr" -#: postmaster/postmaster.c:1161 +#: postmaster/postmaster.c:1218 #, 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:1187 utils/init/postinit.c:199 +#: postmaster/postmaster.c:1244 utils/init/postinit.c:200 #, c-format msgid "could not load pg_hba.conf" msgstr "no se pudo cargar pg_hba.conf" -#: postmaster/postmaster.c:1263 +#: postmaster/postmaster.c:1270 +#, c-format +msgid "postmaster became multithreaded during startup" +msgstr "postmaster se volvió multi-hilo durante la partida" + +#: postmaster/postmaster.c:1271 +#, 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:1368 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: no se pudo localizar el ejecutable postgres correspondiente" -#: postmaster/postmaster.c:1286 utils/misc/tzparser.c:341 +#: postmaster/postmaster.c:1391 utils/misc/tzparser.c:341 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Esto puede indicar una instalación de PostgreSQL incompleta, o que el archivo «%s» ha sido movido de la ubicación adecuada." -#: postmaster/postmaster.c:1314 +#: postmaster/postmaster.c:1419 #, c-format msgid "data directory \"%s\" does not exist" msgstr "no existe el directorio de datos «%s»" -#: postmaster/postmaster.c:1319 +#: postmaster/postmaster.c:1424 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "no se pudo obtener los permisos del directorio «%s»: %m" -#: postmaster/postmaster.c:1327 +#: postmaster/postmaster.c:1432 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "el directorio de datos especificado «%s» no es un directorio" -#: postmaster/postmaster.c:1343 +#: postmaster/postmaster.c:1448 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "el directorio de datos «%s» tiene dueño equivocado" -#: postmaster/postmaster.c:1345 +#: postmaster/postmaster.c:1450 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "El servidor debe ser iniciado por el usuario dueño del directorio de datos." -#: postmaster/postmaster.c:1365 +#: postmaster/postmaster.c:1470 #, c-format msgid "data directory \"%s\" has group or world access" msgstr "el directorio de datos «%s» tiene acceso para el grupo u otros" -#: postmaster/postmaster.c:1367 +#: postmaster/postmaster.c:1472 #, c-format msgid "Permissions should be u=rwx (0700)." msgstr "Los permisos deberían ser u=rwx (0700)." -#: postmaster/postmaster.c:1378 +#: postmaster/postmaster.c:1483 #, c-format msgid "" "%s: could not find the database system\n" @@ -12824,404 +13956,414 @@ msgstr "" "Se esperaba encontrar en el directorio PGDATA «%s»,\n" "pero no se pudo abrir el archivo «%s»: %s\n" -#: postmaster/postmaster.c:1552 +#: postmaster/postmaster.c:1659 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() falló en postmaster: %m" -#: postmaster/postmaster.c:1747 postmaster/postmaster.c:1778 +#: postmaster/postmaster.c:1857 postmaster/postmaster.c:1888 #, c-format msgid "incomplete startup packet" msgstr "el paquete de inicio está incompleto" -#: postmaster/postmaster.c:1759 +#: postmaster/postmaster.c:1869 #, c-format msgid "invalid length of startup packet" msgstr "el de paquete de inicio tiene largo incorrecto" -#: postmaster/postmaster.c:1816 +#: postmaster/postmaster.c:1927 #, 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:1845 +#: postmaster/postmaster.c:1956 #, 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:1908 +#: postmaster/postmaster.c:2019 #, c-format msgid "invalid value for parameter \"replication\"" msgstr "valor no válido para la opción «replication»" -#: postmaster/postmaster.c:1909 +#: postmaster/postmaster.c:2020 #, 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:1929 +#: postmaster/postmaster.c:2040 #, 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:1957 +#: postmaster/postmaster.c:2068 #, 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:2016 +#: postmaster/postmaster.c:2127 #, c-format msgid "the database system is starting up" msgstr "el sistema de base de datos está iniciándose" -#: postmaster/postmaster.c:2021 +#: postmaster/postmaster.c:2132 #, c-format msgid "the database system is shutting down" msgstr "el sistema de base de datos está apagándose" -#: postmaster/postmaster.c:2026 +#: postmaster/postmaster.c:2137 #, 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:2031 storage/ipc/procarray.c:286 -#: storage/ipc/sinvaladt.c:305 storage/lmgr/proc.c:339 +#: postmaster/postmaster.c:2142 storage/ipc/procarray.c:284 +#: storage/ipc/sinvaladt.c:298 storage/lmgr/proc.c:334 #, c-format msgid "sorry, too many clients already" msgstr "lo siento, ya tenemos demasiados clientes" -#: postmaster/postmaster.c:2093 +#: postmaster/postmaster.c:2204 #, 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:2101 +#: postmaster/postmaster.c:2212 #, 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:2321 +#: postmaster/postmaster.c:2432 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "se recibió SIGHUP, releyendo el archivo de configuración" -#: postmaster/postmaster.c:2347 +#: postmaster/postmaster.c:2457 #, c-format msgid "pg_hba.conf not reloaded" msgstr "pg_hba.conf no ha sido recargado" -#: postmaster/postmaster.c:2351 +#: postmaster/postmaster.c:2461 #, c-format msgid "pg_ident.conf not reloaded" msgstr "pg_ident.conf no ha sido recargado" -#: postmaster/postmaster.c:2392 +#: postmaster/postmaster.c:2502 #, c-format msgid "received smart shutdown request" msgstr "se recibió petición de apagado inteligente" -#: postmaster/postmaster.c:2445 +#: postmaster/postmaster.c:2554 #, c-format msgid "received fast shutdown request" msgstr "se recibió petición de apagado rápido" -#: postmaster/postmaster.c:2471 +#: postmaster/postmaster.c:2580 #, c-format msgid "aborting any active transactions" msgstr "abortando transacciones activas" -#: postmaster/postmaster.c:2505 +#: postmaster/postmaster.c:2614 #, c-format msgid "received immediate shutdown request" msgstr "se recibió petición de apagado inmediato" -#: postmaster/postmaster.c:2569 postmaster/postmaster.c:2590 +#: postmaster/postmaster.c:2675 +#, c-format +msgid "shutdown at recovery target" +msgstr "" + +#: postmaster/postmaster.c:2691 postmaster/postmaster.c:2714 msgid "startup process" msgstr "proceso de inicio" -#: postmaster/postmaster.c:2572 +#: postmaster/postmaster.c:2694 #, 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:2630 +#: postmaster/postmaster.c:2755 #, 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:2645 +#: postmaster/postmaster.c:2770 msgid "background writer process" msgstr "proceso background writer" -#: postmaster/postmaster.c:2699 +#: postmaster/postmaster.c:2824 msgid "checkpointer process" msgstr "proceso checkpointer" -#: postmaster/postmaster.c:2715 +#: postmaster/postmaster.c:2840 msgid "WAL writer process" msgstr "proceso escritor de WAL" -#: postmaster/postmaster.c:2729 +#: postmaster/postmaster.c:2854 msgid "WAL receiver process" msgstr "proceso receptor de WAL" -#: postmaster/postmaster.c:2744 +#: postmaster/postmaster.c:2869 msgid "autovacuum launcher process" msgstr "proceso lanzador de autovacuum" -#: postmaster/postmaster.c:2759 +#: postmaster/postmaster.c:2884 msgid "archiver process" msgstr "proceso de archivado" -#: postmaster/postmaster.c:2775 +#: postmaster/postmaster.c:2900 msgid "statistics collector process" msgstr "recolector de estadísticas" -#: postmaster/postmaster.c:2789 +#: postmaster/postmaster.c:2914 msgid "system logger process" msgstr "proceso de log" -#: postmaster/postmaster.c:2851 +#: postmaster/postmaster.c:2976 msgid "worker process" msgstr "proceso «background worker»" -#: postmaster/postmaster.c:2937 postmaster/postmaster.c:2957 -#: postmaster/postmaster.c:2964 postmaster/postmaster.c:2982 +#: postmaster/postmaster.c:3059 postmaster/postmaster.c:3079 +#: postmaster/postmaster.c:3086 postmaster/postmaster.c:3104 msgid "server process" msgstr "proceso de servidor" -#: postmaster/postmaster.c:3036 +#: postmaster/postmaster.c:3158 #, 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:3291 +#: postmaster/postmaster.c:3414 #, 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:3293 postmaster/postmaster.c:3304 -#: postmaster/postmaster.c:3315 postmaster/postmaster.c:3324 -#: postmaster/postmaster.c:3334 +#: postmaster/postmaster.c:3416 postmaster/postmaster.c:3427 +#: postmaster/postmaster.c:3438 postmaster/postmaster.c:3447 +#: postmaster/postmaster.c:3457 #, 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:3301 +#: postmaster/postmaster.c:3424 #, 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:3311 +#: postmaster/postmaster.c:3434 #, 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:3322 +#: postmaster/postmaster.c:3445 #, c-format msgid "%s (PID %d) was terminated by signal %d" msgstr "%s (PID %d) fue terminado por una señal %d" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3332 +#: postmaster/postmaster.c:3455 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) terminó con código no reconocido %d" -#: postmaster/postmaster.c:3520 +#: postmaster/postmaster.c:3642 #, c-format msgid "abnormal database system shutdown" msgstr "apagado anormal del sistema de bases de datos" -#: postmaster/postmaster.c:3559 +#: postmaster/postmaster.c:3682 #, c-format msgid "all server processes terminated; reinitializing" msgstr "todos los procesos fueron terminados; reinicializando" -#: postmaster/postmaster.c:3811 +#: postmaster/postmaster.c:3894 #, 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:3853 +#: postmaster/postmaster.c:3936 msgid "could not fork new process for connection: " msgstr "no se pudo lanzar el nuevo proceso para la conexión: " -#: postmaster/postmaster.c:3960 +#: postmaster/postmaster.c:4042 #, c-format msgid "connection received: host=%s port=%s" msgstr "conexión recibida: host=%s port=%s" -#: postmaster/postmaster.c:3965 +#: postmaster/postmaster.c:4047 #, c-format msgid "connection received: host=%s" msgstr "conexión recibida: host=%s" -#: postmaster/postmaster.c:4255 +#: postmaster/postmaster.c:4336 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "no se pudo lanzar el proceso servidor «%s»: %m" -#: postmaster/postmaster.c:4804 +#: postmaster/postmaster.c:4893 #, 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:5117 +#: postmaster/postmaster.c:5176 #, c-format msgid "could not fork startup process: %m" msgstr "no se pudo lanzar el proceso de inicio: %m" -#: postmaster/postmaster.c:5121 +#: postmaster/postmaster.c:5180 #, c-format msgid "could not fork background writer process: %m" msgstr "no se pudo lanzar el background writer: %m" -#: postmaster/postmaster.c:5125 +#: postmaster/postmaster.c:5184 #, c-format msgid "could not fork checkpointer process: %m" msgstr "no se pudo lanzar el checkpointer: %m" -#: postmaster/postmaster.c:5129 +#: postmaster/postmaster.c:5188 #, c-format msgid "could not fork WAL writer process: %m" msgstr "no se pudo lanzar el proceso escritor de WAL: %m" -#: postmaster/postmaster.c:5133 +#: postmaster/postmaster.c:5192 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "no se pudo lanzar el proceso receptor de WAL: %m" -#: postmaster/postmaster.c:5137 +#: postmaster/postmaster.c:5196 #, c-format msgid "could not fork process: %m" msgstr "no se pudo lanzar el proceso: %m" -#: postmaster/postmaster.c:5299 +#: postmaster/postmaster.c:5358 postmaster/postmaster.c:5381 #, 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:5306 +#: postmaster/postmaster.c:5365 postmaster/postmaster.c:5388 #, c-format msgid "invalid processing mode in background worker" msgstr "modo de procesamiento no válido en «background worker»" -#: postmaster/postmaster.c:5358 +#: postmaster/postmaster.c:5440 #, c-format msgid "starting background worker process \"%s\"" msgstr "iniciando el proceso «background worker» «%s»" -#: postmaster/postmaster.c:5369 +#: postmaster/postmaster.c:5451 #, c-format msgid "could not fork worker process: %m" msgstr "no se pudo lanzar el proceso «background worker»: %m" -#: postmaster/postmaster.c:5758 +#: postmaster/postmaster.c:5827 #, 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:5790 +#: postmaster/postmaster.c:5859 #, 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:5819 postmaster/postmaster.c:5826 +#: postmaster/postmaster.c:5888 +#, 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:5895 #, 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:5835 +#: postmaster/postmaster.c:5904 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "no se pudo eliminar el archivo «%s»: %s\n" -#: postmaster/postmaster.c:5852 +#: postmaster/postmaster.c:5921 #, 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:5861 +#: postmaster/postmaster.c:5930 #, 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:5868 +#: postmaster/postmaster.c:5937 #, 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:6027 +#: postmaster/postmaster.c:6096 #, 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:6032 +#: postmaster/postmaster.c:6101 #, c-format msgid "could not post child completion status\n" msgstr "no se pudo publicar el estado de completitud del proceso hijo\n" -#: postmaster/syslogger.c:463 postmaster/syslogger.c:1064 +#: postmaster/syslogger.c:441 postmaster/syslogger.c:1041 #, c-format msgid "could not read from logger pipe: %m" msgstr "no se pudo leer desde la tubería de log: %m" -#: postmaster/syslogger.c:512 +#: postmaster/syslogger.c:490 #, c-format msgid "logger shutting down" msgstr "apagando proceso de log" -#: postmaster/syslogger.c:556 postmaster/syslogger.c:570 +#: postmaster/syslogger.c:534 postmaster/syslogger.c:548 #, c-format msgid "could not create pipe for syslog: %m" msgstr "no se pudo crear la tubería para syslog: %m" -#: postmaster/syslogger.c:606 +#: postmaster/syslogger.c:584 #, c-format msgid "could not fork system logger: %m" msgstr "no se pudo crear el proceso de log: %m" -#: postmaster/syslogger.c:643 +#: postmaster/syslogger.c:620 #, c-format msgid "redirecting log output to logging collector process" msgstr "redirigiendo la salida del registro al proceso recolector de registro" -#: postmaster/syslogger.c:644 +#: postmaster/syslogger.c:621 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "La salida futura del registro aparecerá en el directorio «%s»." -#: postmaster/syslogger.c:652 +#: postmaster/syslogger.c:629 #, c-format msgid "could not redirect stdout: %m" msgstr "no se pudo redirigir stdout: %m" -#: postmaster/syslogger.c:657 postmaster/syslogger.c:674 +#: postmaster/syslogger.c:634 postmaster/syslogger.c:651 #, c-format msgid "could not redirect stderr: %m" msgstr "no se pudo redirigir stderr: %m" -#: postmaster/syslogger.c:1019 +#: postmaster/syslogger.c:996 #, c-format msgid "could not write to log file: %s\n" msgstr "no se pudo escribir al archivo de log: %s\n" -#: postmaster/syslogger.c:1159 +#: postmaster/syslogger.c:1136 #, c-format msgid "could not open log file \"%s\": %m" msgstr "no se pudo abrir el archivo de registro «%s»: %m" -#: postmaster/syslogger.c:1221 postmaster/syslogger.c:1265 +#: postmaster/syslogger.c:1198 postmaster/syslogger.c:1242 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "desactivando rotación automática (use SIGHUP para reactivarla)" @@ -13231,261 +14373,338 @@ msgstr "desactivando rotación automática (use SIGHUP para reactivarla)" msgid "could not determine which collation to use for regular expression" msgstr "no se pudo determinar qué ordenamiento usar para la expresión regular" -#: replication/basebackup.c:184 replication/basebackup.c:1044 -#: utils/adt/misc.c:353 -#, c-format -msgid "could not read symbolic link \"%s\": %m" -msgstr "no se pudo leer el enlace simbólico «%s»: %m" - -#: replication/basebackup.c:191 replication/basebackup.c:1048 -#: utils/adt/misc.c:357 -#, c-format -msgid "symbolic link \"%s\" target is too long" -msgstr "la ruta «%s» del enlace simbólico es demasiado larga" - -#: replication/basebackup.c:284 +#: replication/basebackup.c:227 #, c-format msgid "could not stat control file \"%s\": %m" msgstr "no se pudo hacer stat al archivo de control «%s»: %m" -#: replication/basebackup.c:396 +#: replication/basebackup.c:336 #, c-format msgid "could not find any WAL files" msgstr "no se pudo encontrar ningún archivo de WAL" -#: replication/basebackup.c:409 replication/basebackup.c:423 -#: replication/basebackup.c:432 +#: replication/basebackup.c:349 replication/basebackup.c:363 +#: replication/basebackup.c:372 #, c-format msgid "could not find WAL file \"%s\"" msgstr "no se pudo encontrar archivo de WAL «%s»" -#: replication/basebackup.c:471 replication/basebackup.c:496 +#: replication/basebackup.c:411 replication/basebackup.c:437 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "tamaño del archivo WAL «%s» inesperado" -#: replication/basebackup.c:482 replication/basebackup.c:1186 +#: replication/basebackup.c:423 replication/basebackup.c:1177 #, c-format msgid "base backup could not send data, aborting backup" msgstr "el respaldo base no pudo enviar datos, abortando el respaldo" -#: replication/basebackup.c:569 replication/basebackup.c:578 -#: replication/basebackup.c:587 replication/basebackup.c:596 -#: replication/basebackup.c:605 replication/basebackup.c:616 +#: replication/basebackup.c:525 replication/basebackup.c:534 +#: replication/basebackup.c:543 replication/basebackup.c:552 +#: replication/basebackup.c:561 replication/basebackup.c:572 +#: replication/basebackup.c:589 #, c-format msgid "duplicate option \"%s\"" msgstr "nombre de opción «%s» duplicada" -#: replication/basebackup.c:622 utils/misc/guc.c:5409 +#: replication/basebackup.c:578 utils/misc/guc.c:5473 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d está fuera del rango aceptable para el parámetro «%s» (%d .. %d)" -#: replication/basebackup.c:879 replication/basebackup.c:972 +#: replication/basebackup.c:844 replication/basebackup.c:946 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "no se pudo hacer stat al archivo o directorio «%s»: %m" -#: replication/basebackup.c:1122 +#: replication/basebackup.c:1113 #, c-format msgid "skipping special file \"%s\"" msgstr "ignorando el archivo especial «%s»" -#: replication/basebackup.c:1176 +#: replication/basebackup.c:1167 #, c-format msgid "archive member \"%s\" too large for tar format" msgstr "el miembro de archivador «%s» es demasiado grande para el formato tar" -#: replication/libpqwalreceiver/libpqwalreceiver.c:106 +#: replication/basebackup.c:1240 +#, fuzzy, c-format +msgid "file name too long for tar format: \"%s\"" +msgstr "el miembro de archivador «%s» es demasiado grande para el formato tar" + +#: replication/basebackup.c:1245 +#, c-format +msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" +msgstr "" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:116 #, c-format msgid "could not connect to the primary server: %s" msgstr "no se pudo hacer la conexión al servidor primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:130 +#: replication/libpqwalreceiver/libpqwalreceiver.c:140 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "no se pudo recibir el identificador de sistema y el ID de timeline del servidor primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:141 -#: replication/libpqwalreceiver/libpqwalreceiver.c:294 +#: replication/libpqwalreceiver/libpqwalreceiver.c:151 +#: replication/libpqwalreceiver/libpqwalreceiver.c:305 #, c-format msgid "invalid response from primary server" msgstr "respuesta no válida del servidor primario" -#: replication/libpqwalreceiver/libpqwalreceiver.c:142 +#: replication/libpqwalreceiver/libpqwalreceiver.c:152 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "No se pudo identificar el sistema: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d o más campos." -#: replication/libpqwalreceiver/libpqwalreceiver.c:158 +#: replication/libpqwalreceiver/libpqwalreceiver.c:168 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "el identificador de sistema difiere entre el primario y el standby" -#: replication/libpqwalreceiver/libpqwalreceiver.c:159 +#: replication/libpqwalreceiver/libpqwalreceiver.c:169 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "El identificador del primario es %s, el identificador del standby es %s." -#: replication/libpqwalreceiver/libpqwalreceiver.c:201 +#: replication/libpqwalreceiver/libpqwalreceiver.c:211 #, c-format msgid "could not start WAL streaming: %s" msgstr "no se pudo iniciar el flujo de WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:219 +#: replication/libpqwalreceiver/libpqwalreceiver.c:229 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "no se pudo enviar el mensaje fin-de-flujo al primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:241 +#: replication/libpqwalreceiver/libpqwalreceiver.c:251 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "conjunto de resultados inesperado después del fin-de-flujo" -#: replication/libpqwalreceiver/libpqwalreceiver.c:253 +#: replication/libpqwalreceiver/libpqwalreceiver.c:263 #, c-format msgid "error reading result of streaming command: %s" msgstr "ocurrió un error mientras se leía la orden de flujo: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:260 +#: replication/libpqwalreceiver/libpqwalreceiver.c:271 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "resultado inesperado después de CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:283 +#: replication/libpqwalreceiver/libpqwalreceiver.c:294 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "no se pudo recibir el archivo de historia de timeline del servidor primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:295 +#: replication/libpqwalreceiver/libpqwalreceiver.c:306 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Se esperaba 1 tupla con 2 campos, se obtuvieron %d tuplas con %d campos." -#: replication/libpqwalreceiver/libpqwalreceiver.c:323 +#: replication/libpqwalreceiver/libpqwalreceiver.c:334 #, c-format msgid "socket not open" msgstr "el socket no está abierto" -#: replication/libpqwalreceiver/libpqwalreceiver.c:496 -#: replication/libpqwalreceiver/libpqwalreceiver.c:519 -#: replication/libpqwalreceiver/libpqwalreceiver.c:525 +#: replication/libpqwalreceiver/libpqwalreceiver.c:507 +#: replication/libpqwalreceiver/libpqwalreceiver.c:530 +#: replication/libpqwalreceiver/libpqwalreceiver.c:536 #, 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:544 +#: replication/libpqwalreceiver/libpqwalreceiver.c:555 #, c-format msgid "could not send data to WAL stream: %s" msgstr "no se pudo enviar datos al flujo de WAL: %s" # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/logical/logical.c:81 +#: replication/logical/logical.c:80 #, c-format msgid "logical decoding requires wal_level >= logical" msgstr "la decodificación lógica requiere wal_level >= logical" -#: replication/logical/logical.c:86 +#: replication/logical/logical.c:85 #, c-format msgid "logical decoding requires a database connection" msgstr "decodificación lógica requiere una conexión a una base de datos" -#: replication/logical/logical.c:104 +#: replication/logical/logical.c:103 #, c-format msgid "logical decoding cannot be used while in recovery" msgstr "la decodificación lógica no puede ejecutarse durante la recuperación" -#: replication/logical/logical.c:230 replication/logical/logical.c:381 +#: replication/logical/logical.c:234 replication/logical/logical.c:383 #, 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:235 replication/logical/logical.c:386 +#: replication/logical/logical.c:239 replication/logical/logical.c:388 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "el slot de replicación «%s» no fue creado en esta base de datos" -#: replication/logical/logical.c:242 +#: replication/logical/logical.c:246 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "no se puede crear un slot de replicación lógica en una transacción que ha efectuado escrituras" -#: replication/logical/logical.c:422 +#: replication/logical/logical.c:425 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "iniciando la decodificación lógica para el slot «%s»" -#: replication/logical/logical.c:424 +#: replication/logical/logical.c:427 #, c-format msgid "streaming transactions committing after %X/%X, reading WAL from %X/%X" msgstr "enviando flujo de transacciones comprometidas después de %X/%X, leyendo WAL de %X/%X" -#: replication/logical/logical.c:559 +#: replication/logical/logical.c:562 #, 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:566 +#: replication/logical/logical.c:569 #, 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/logicalfuncs.c:190 replication/walsender.c:2123 +#: replication/logical/logicalfuncs.c:192 replication/walsender.c:2109 #, c-format msgid "could not read from log segment %s, offset %u, length %lu: %m" msgstr "no se pudo leer desde el segmento %s, posición %u, largo %lu: %m" -#: replication/logical/logicalfuncs.c:209 replication/slotfuncs.c:32 +#: replication/logical/logicalfuncs.c:211 replication/slotfuncs.c:32 #, c-format msgid "must be superuser or replication role to use replication slots" msgstr "debe ser superusuario o rol de replicación para usar slots de replicación" -#: replication/logical/logicalfuncs.c:339 +#: replication/logical/logicalfuncs.c:341 #, c-format msgid "array must be one-dimensional" msgstr "el array debe ser unidimensional" -#: replication/logical/logicalfuncs.c:345 +#: replication/logical/logicalfuncs.c:347 #, c-format msgid "array must not contain nulls" msgstr "el array no debe contener nulls" -#: replication/logical/logicalfuncs.c:361 utils/adt/json.c:2198 +#: replication/logical/logicalfuncs.c:363 utils/adt/json.c:2273 +#: utils/adt/jsonb.c:1378 #, c-format msgid "array must have even number of elements" msgstr "el array debe tener un número par de elementos" -#: replication/logical/logicalfuncs.c:404 +#: replication/logical/logicalfuncs.c:406 #, c-format msgid "logical decoding output plugin \"%s\" produces binary output, but \"%s\" expects textual data" msgstr "el plugin de salida de decodificación lógica «%s» produce salida binaria, pero «%s» espera datos textuales" -#: replication/logical/reorderbuffer.c:2100 +#: replication/logical/origin.c:181 +#, fuzzy, c-format +msgid "only superusers can query or manipulate replication origins" +msgstr "debe ser superusuario para alterar usuarios de replicación" + +#: replication/logical/origin.c:186 +#, fuzzy, c-format +msgid "cannot query or manipulate replication origin when max_replication_slots = 0" +msgstr "no se puede usar un slot de replicación lógica para replicación física" + +#: replication/logical/origin.c:191 +#, fuzzy, c-format +msgid "cannot manipulate replication origins during recovery" +msgstr "no se puede ejecutar %s durante la recuperación" + +#: replication/logical/origin.c:316 +#, c-format +msgid "no free replication origin oid could be found" +msgstr "" + +#: replication/logical/origin.c:353 +#, c-format +msgid "cannot drop replication origin with oid %d, in use by pid %d" +msgstr "" + +#: replication/logical/origin.c:690 +#, fuzzy, c-format +msgid "replication checkpoint has wrong magic %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/logical/origin.c:722 +#, fuzzy, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "no se pudo leer el archivo «%s», leídos %d de %u: %m" + +#: replication/logical/origin.c:731 +#, fuzzy, c-format +msgid "no free replication state could be found, increase max_replication_slots" +msgstr "los slots de replicación sólo pueden usarse si max_replication_slots > 0" + +#: replication/logical/origin.c:749 +#, fuzzy, c-format +msgid "replication_slot_checkpoint has wrong checksum %u, expected %u" +msgstr "el archivo de slot de replicación «%s» tiene número mágico erróneo %u en lugar de %u" + +#: replication/logical/origin.c:873 +#, fuzzy, c-format +msgid "replication origin with oid %d is already active for pid %d" +msgstr "el slot de replicación «%s» ya está activo" + +#: replication/logical/origin.c:884 replication/logical/origin.c:1064 +#, fuzzy, c-format +msgid "no free replication state slot could be found for replication origin with oid %u" +msgstr "los slots de replicación sólo pueden usarse si max_replication_slots > 0" + +#: replication/logical/origin.c:886 replication/logical/origin.c:1066 +#: replication/slot.c:1241 +#, c-format +msgid "Increase max_replication_slots and try again." +msgstr "Aumente max_replication_slots y reintente." + +#: replication/logical/origin.c:1023 +#, c-format +msgid "cannot setup replication origin when one is already setup" +msgstr "" + +#: replication/logical/origin.c:1052 +#, fuzzy, c-format +msgid "replication identifier %d is already active for pid %d" +msgstr "el slot de replicación «%s» ya está activo" + +#: replication/logical/origin.c:1098 replication/logical/origin.c:1293 +#: replication/logical/origin.c:1313 +#, c-format +msgid "no replication origin is configured" +msgstr "" + +#: replication/logical/reorderbuffer.c:2170 #, 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:2196 -#: replication/logical/reorderbuffer.c:2216 +#: replication/logical/reorderbuffer.c:2266 +#: replication/logical/reorderbuffer.c:2286 #, 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:2200 -#: replication/logical/reorderbuffer.c:2220 +#: replication/logical/reorderbuffer.c:2270 +#: replication/logical/reorderbuffer.c:2290 #, 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" # FIXME almost duplicated again!? -#: replication/logical/reorderbuffer.c:2826 +#: replication/logical/reorderbuffer.c:2894 #, 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" # FIXME: snapshot? instantánea? -#: replication/logical/snapbuild.c:601 +#: replication/logical/snapbuild.c:600 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs" @@ -13554,123 +14773,118 @@ msgstr "La decodificación lógica comenzará usando el snapshot guardado." msgid "could not parse file name \"%s\"" msgstr "no se pudo interpretar el nombre de archivo «%s»" -#: replication/slot.c:173 +#: replication/slot.c:174 #, 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:182 +#: replication/slot.c:183 #, 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:195 +#: replication/slot.c:196 #, 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:197 +#: replication/slot.c:198 #, c-format -msgid "Replication slot names may only contain letters, numbers, and the underscore character." -msgstr "Los nombres de slots de replicación sólo pueden contener letras, números y el carácter «_»." +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:244 +#: replication/slot.c:245 #, c-format msgid "replication slot \"%s\" already exists" msgstr "el slot de replicación «%s» ya existe" -#: replication/slot.c:254 +#: replication/slot.c:255 #, c-format msgid "all replication slots are in use" msgstr "todos los slots de replicación están en uso" -#: replication/slot.c:255 +#: replication/slot.c:256 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Libere uno o incremente max_replication_slots." -#: replication/slot.c:347 +#: replication/slot.c:348 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "no existe el slot de replicación «%s»" -#: replication/slot.c:351 -#, c-format -msgid "replication slot \"%s\" is already active" +#: replication/slot.c:352 +#, fuzzy, c-format +msgid "replication slot \"%s\" is already active for pid %d" msgstr "el slot de replicación «%s» ya está activo" -#: replication/slot.c:499 replication/slot.c:873 replication/slot.c:1218 +#: replication/slot.c:501 replication/slot.c:857 replication/slot.c:1202 #, c-format msgid "could not remove directory \"%s\"" msgstr "no se pudo eliminar el directorio «%s»" -#: replication/slot.c:774 +#: replication/slot.c:776 #, 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:779 +#: replication/slot.c:781 #, c-format msgid "replication slots can only be used if wal_level >= archive" msgstr "los slots de replicación sólo pueden usarse si wal_level >= archive" -#: replication/slot.c:1150 replication/slot.c:1188 +#: replication/slot.c:1134 replication/slot.c:1172 #, c-format msgid "could not read file \"%s\", read %d of %u: %m" msgstr "no se pudo leer el archivo «%s», leídos %d de %u: %m" -#: replication/slot.c:1159 +#: replication/slot.c:1143 #, c-format msgid "replication slot file \"%s\" has wrong magic %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:1166 +#: replication/slot.c:1150 #, 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:1173 +#: replication/slot.c:1157 #, 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:1203 +#: replication/slot.c:1187 #, c-format msgid "replication slot file %s: checksum mismatch, is %u, should be %u" msgstr "archivo de slot de replicación %s: suma de control no coincidente, es %u, debería ser %u" -#: replication/slot.c:1256 -#, c-format -msgid "too many replication slots active before shutdown" -msgstr "demasiados slots de replicacion activos antes del apagado" - -#: replication/slot.c:1257 +#: replication/slot.c:1240 #, c-format -msgid "Increase max_replication_slots and try again." -msgstr "Aumente max_replication_slots y reintente." +msgid "too many replication slots active before shutdown" +msgstr "demasiados slots de replicacion activos antes del apagado" -#: replication/syncrep.c:208 +#: replication/syncrep.c:199 #, 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:209 replication/syncrep.c:226 +#: replication/syncrep.c:200 replication/syncrep.c:217 #, 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:225 +#: replication/syncrep.c:216 #, 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:355 +#: replication/syncrep.c:346 #, c-format msgid "standby \"%s\" now has synchronous standby priority %u" msgstr "el standby «%s» ahora tiene prioridad sincrónica %u" -#: replication/syncrep.c:457 +#: replication/syncrep.c:480 #, c-format msgid "standby \"%s\" is now the synchronous standby with priority %u" msgstr "el standby «%s» es ahora el standby sincrónico con prioridad %u" @@ -13680,57 +14894,57 @@ msgstr "el standby «%s» es ahora el standby sincrónico con prioridad %u" msgid "terminating walreceiver process due to administrator command" msgstr "terminando el proceso walreceiver debido a una orden del administrador" -#: replication/walreceiver.c:332 +#: replication/walreceiver.c:321 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "el timeline más alto del primario, %u, está más atrás que el timeline de recuperación %u" -#: replication/walreceiver.c:367 +#: replication/walreceiver.c:356 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "iniciando el flujo de WAL desde el primario en %X/%X en el timeline %u" -#: replication/walreceiver.c:372 +#: replication/walreceiver.c:361 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "reiniciando el flujo de WAL en %X/%X en el timeline %u" -#: replication/walreceiver.c:406 +#: replication/walreceiver.c:395 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "no se puede continuar el flujo de WAL; la recuperación ya ha terminado" -#: replication/walreceiver.c:443 +#: replication/walreceiver.c:432 #, c-format msgid "replication terminated by primary server" msgstr "replicación terminada por el servidor primario" -#: replication/walreceiver.c:444 +#: replication/walreceiver.c:433 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "Se alcanzó el fin de WAL en el timeline %u en la posición %X/%X." -#: replication/walreceiver.c:491 +#: replication/walreceiver.c:480 #, c-format msgid "terminating walreceiver due to timeout" msgstr "terminando el proceso walreceiver debido a que se agotó el tiempo de espera" -#: replication/walreceiver.c:531 +#: replication/walreceiver.c:520 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "el servidor primario no contiene más WAL en el timeline %u solicitado" -#: replication/walreceiver.c:546 replication/walreceiver.c:903 +#: replication/walreceiver.c:535 replication/walreceiver.c:895 #, c-format msgid "could not close log segment %s: %m" msgstr "no se pudo cerrar archivo de segmento %s: %m" -#: replication/walreceiver.c:668 +#: replication/walreceiver.c:660 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "trayendo el archivo de historia del timeline para el timeline %u desde el servidor primario" -#: replication/walreceiver.c:954 +#: replication/walreceiver.c:949 #, 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" @@ -13760,385 +14974,419 @@ msgstr "La historia de este servidor bifurcó desde el timeline %u en %X/%X." msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "el punto de inicio solicitado %X/%X está más adelante que la posición de sincronización (flush) de WAL de este servidor %X/%X" -#: replication/walsender.c:947 +#: replication/walsender.c:948 #, c-format msgid "terminating walsender process after promotion" msgstr "terminando el proceso walsender luego de la promoción" -#: replication/walsender.c:1362 replication/walsender.c:1412 -#: replication/walsender.c:1461 +#: replication/walsender.c:1275 +#, fuzzy, c-format +msgid "received replication command: %s" +msgstr "La orden fallida era: «%s»" + +#: replication/walsender.c:1368 replication/walsender.c:1384 #, c-format msgid "unexpected EOF on standby connection" msgstr "se encontró fin de archivo inesperado en la conexión standby" -#: replication/walsender.c:1381 +#: replication/walsender.c:1398 #, c-format msgid "unexpected standby message type \"%c\", after receiving CopyDone" msgstr "mensaje de standby de tipo «%c» inesperado, después de recibir CopyDone" -#: replication/walsender.c:1429 +#: replication/walsender.c:1436 #, c-format msgid "invalid standby message type \"%c\"" msgstr "el tipo «%c» de mensaje del standby no es válido" -#: replication/walsender.c:1483 +#: replication/walsender.c:1477 #, c-format msgid "unexpected message type \"%c\"" msgstr "mensaje de tipo «%c» inesperado" -#: replication/walsender.c:1770 +#: replication/walsender.c:1764 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "terminando el proceso walsender debido a que se agotó el tiempo de espera de replicación" -#: replication/walsender.c:1863 +#: replication/walsender.c:1857 #, c-format msgid "standby \"%s\" has now caught up with primary" msgstr "el standby «%s» ahora está actualizado respecto del primario" -#: replication/walsender.c:1967 +#: replication/walsender.c:1958 #, c-format msgid "number of requested standby connections exceeds max_wal_senders (currently %d)" msgstr "la cantidad de conexiones standby pedidas excede max_wal_senders (actualmente %d)" -#: rewrite/rewriteDefine.c:111 rewrite/rewriteDefine.c:942 +#: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:961 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "ya existe una regla llamada «%s» para la relación «%s»" -#: rewrite/rewriteDefine.c:295 +#: rewrite/rewriteDefine.c:297 #, c-format msgid "rule actions on OLD are not implemented" msgstr "las acciones de regla en OLD no están implementadas" -#: rewrite/rewriteDefine.c:296 +#: rewrite/rewriteDefine.c:298 #, c-format msgid "Use views or triggers instead." msgstr "Use vistas o triggers en su lugar." -#: rewrite/rewriteDefine.c:300 +#: rewrite/rewriteDefine.c:302 #, c-format msgid "rule actions on NEW are not implemented" msgstr "las acciones de regla en NEW no están implementadas" -#: rewrite/rewriteDefine.c:301 +#: rewrite/rewriteDefine.c:303 #, c-format msgid "Use triggers instead." msgstr "Use triggers en su lugar." -#: rewrite/rewriteDefine.c:314 +#: rewrite/rewriteDefine.c:316 #, c-format msgid "INSTEAD NOTHING rules on SELECT are not implemented" msgstr "las reglas INSTEAD NOTHING en SELECT no están implementadas" -#: rewrite/rewriteDefine.c:315 +#: rewrite/rewriteDefine.c:317 #, c-format msgid "Use views instead." msgstr "Use vistas en su lugar." -#: rewrite/rewriteDefine.c:323 +#: rewrite/rewriteDefine.c:325 #, c-format msgid "multiple actions for rules on SELECT are not implemented" msgstr "las reglas de múltiples acciones en SELECT no están implementadas" -#: rewrite/rewriteDefine.c:334 +#: rewrite/rewriteDefine.c:336 #, c-format msgid "rules on SELECT must have action INSTEAD SELECT" msgstr "las reglas en SELECT deben tener una acción INSTEAD SELECT" -#: rewrite/rewriteDefine.c:342 +#: rewrite/rewriteDefine.c:344 #, c-format msgid "rules on SELECT must not contain data-modifying statements in WITH" msgstr "las reglas en SELECT no deben contener sentencias que modifiquen datos en WITH" -#: rewrite/rewriteDefine.c:350 +#: rewrite/rewriteDefine.c:352 #, c-format msgid "event qualifications are not implemented for rules on SELECT" msgstr "las calificaciones de eventos no están implementadas para las reglas en SELECT" -#: rewrite/rewriteDefine.c:377 +#: rewrite/rewriteDefine.c:379 #, c-format msgid "\"%s\" is already a view" msgstr "«%s» ya es una vista" -#: rewrite/rewriteDefine.c:401 +#: rewrite/rewriteDefine.c:403 #, c-format msgid "view rule for \"%s\" must be named \"%s\"" msgstr "la regla de vista para «%s» debe llamarse «%s»" -#: rewrite/rewriteDefine.c:429 +#: rewrite/rewriteDefine.c:432 #, c-format msgid "could not convert table \"%s\" to a view because it is not empty" msgstr "no se pudo convertir la tabla «%s» en vista porque no está vacía" -#: rewrite/rewriteDefine.c:437 +#: rewrite/rewriteDefine.c:440 #, c-format msgid "could not convert table \"%s\" to a view because it has triggers" msgstr "no se pudo convertir la tabla «%s» en vista porque tiene triggers" -#: rewrite/rewriteDefine.c:439 +#: rewrite/rewriteDefine.c:442 #, c-format msgid "In particular, the table cannot be involved in any foreign key relationships." msgstr "En particular, la tabla no puede estar involucrada en relaciones de llave foránea." -#: rewrite/rewriteDefine.c:444 +#: rewrite/rewriteDefine.c:447 #, c-format msgid "could not convert table \"%s\" to a view because it has indexes" msgstr "no se pudo convertir la tabla «%s» en vista porque tiene índices" -#: rewrite/rewriteDefine.c:450 +#: rewrite/rewriteDefine.c:453 #, c-format msgid "could not convert table \"%s\" to a view because it has child tables" msgstr "no se pudo convertir la tabla «%s» en vista porque tiene tablas hijas" -#: rewrite/rewriteDefine.c:477 +#: rewrite/rewriteDefine.c:459 +#, fuzzy, c-format +msgid "could not convert table \"%s\" to a view because it has row security enabled" +msgstr "no se pudo convertir la tabla «%s» en vista porque tiene tablas hijas" + +#: rewrite/rewriteDefine.c:465 +#, fuzzy, c-format +msgid "could not convert table \"%s\" to a view because it has row security policies" +msgstr "no se pudo convertir la tabla «%s» en vista porque tiene tablas hijas" + +#: rewrite/rewriteDefine.c:492 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "no se pueden tener múltiples listas RETURNING en una regla" -#: rewrite/rewriteDefine.c:482 +#: rewrite/rewriteDefine.c:497 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "listas de RETURNING no están soportadas en reglas condicionales" -#: rewrite/rewriteDefine.c:486 +#: rewrite/rewriteDefine.c:501 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "listas de RETURNING no están soportadas en reglas que no estén marcadas INSTEAD" -#: rewrite/rewriteDefine.c:649 +#: rewrite/rewriteDefine.c:667 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "la lista de destinos en la regla de SELECT tiene demasiadas entradas" -#: rewrite/rewriteDefine.c:650 +#: rewrite/rewriteDefine.c:668 #, c-format msgid "RETURNING list has too many entries" msgstr "la lista de RETURNING tiene demasiadas entradas" -#: rewrite/rewriteDefine.c:666 +#: rewrite/rewriteDefine.c:684 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "no se puede convertir en vista una relación que contiene columnas eliminadas" -#: rewrite/rewriteDefine.c:672 +#: rewrite/rewriteDefine.c:690 #, c-format msgid "SELECT rule's target entry %d has different column name from column \"%s\"" msgstr "la entrada de destino %d de la regla de SELECT tiene un nombre de columna diferente de «%s»" -#: rewrite/rewriteDefine.c:674 +#: rewrite/rewriteDefine.c:692 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "La entrada de destino de SELECT tiene nombre «%s»." -#: rewrite/rewriteDefine.c:683 +#: rewrite/rewriteDefine.c:701 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "el destino %d de la regla de SELECT tiene un tipo diferente de la columna «%s»" -#: rewrite/rewriteDefine.c:685 +#: rewrite/rewriteDefine.c:703 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "el destino %d de la lista de RETURNING tiene un tipo diferente de la columna «%s»" -#: rewrite/rewriteDefine.c:688 rewrite/rewriteDefine.c:712 +#: rewrite/rewriteDefine.c:706 rewrite/rewriteDefine.c:730 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "La entrada de destino de SELECT tiene un tipo «%s», pero la columna tiene tipo «%s»." -#: rewrite/rewriteDefine.c:691 rewrite/rewriteDefine.c:716 +#: rewrite/rewriteDefine.c:709 rewrite/rewriteDefine.c:734 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "una entrada de la lista RETURNING tiene tipo %s, pero la columna tiene tipo %s." -#: rewrite/rewriteDefine.c:707 +#: rewrite/rewriteDefine.c:725 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "el destino %d de la regla de SELECT tiene un tamaño diferente de la columna «%s»" -#: rewrite/rewriteDefine.c:709 +#: rewrite/rewriteDefine.c:727 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "el destino %d de la lista RETURNING tiene un tamaño diferente de la columna «%s»" -#: rewrite/rewriteDefine.c:726 +#: rewrite/rewriteDefine.c:744 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "la lista de destinos de regla de SELECT tiene muy pocas entradas" -#: rewrite/rewriteDefine.c:727 +#: rewrite/rewriteDefine.c:745 #, c-format msgid "RETURNING list has too few entries" msgstr "la lista de RETURNING tiene muy pocas entradas" -#: rewrite/rewriteDefine.c:819 rewrite/rewriteDefine.c:933 +#: rewrite/rewriteDefine.c:837 rewrite/rewriteDefine.c:952 #: rewrite/rewriteSupport.c:112 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "no existe la regla «%s» para la relación «%s»" -#: rewrite/rewriteDefine.c:952 +#: rewrite/rewriteDefine.c:971 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "no se permite cambiar el nombre de una regla ON SELECT" -#: rewrite/rewriteHandler.c:512 +#: rewrite/rewriteHandler.c:521 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "el nombre de consulta WITH «%s» aparece tanto en una acción de regla y en la consulta que está siendo reescrita" -#: rewrite/rewriteHandler.c:572 +#: rewrite/rewriteHandler.c:581 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "no se puede usar RETURNING en múltiples reglas" -#: rewrite/rewriteHandler.c:910 rewrite/rewriteHandler.c:928 +#: rewrite/rewriteHandler.c:921 rewrite/rewriteHandler.c:939 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "hay múltiples asignaciones a la misma columna «%s»" -#: rewrite/rewriteHandler.c:1698 rewrite/rewriteHandler.c:3129 +#: rewrite/rewriteHandler.c:1714 rewrite/rewriteHandler.c:3307 #, 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:1995 +#: rewrite/rewriteHandler.c:1799 +#, fuzzy, c-format +msgid "infinite recursion detected in policy for relation \"%s\"" +msgstr "se detectó recursión infinita en las reglas de la relación «%s»" + +#: rewrite/rewriteHandler.c:2113 msgid "Junk view columns are not updatable." msgstr "Las columnas «basura» de vistas no son actualizables." -#: rewrite/rewriteHandler.c:2000 +#: rewrite/rewriteHandler.c:2118 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:2003 +#: rewrite/rewriteHandler.c:2121 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:2006 +#: rewrite/rewriteHandler.c:2124 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:2064 +#: rewrite/rewriteHandler.c:2182 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Las vistas que contienen DISTINCT no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2067 +#: rewrite/rewriteHandler.c:2185 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Las vistas que contienen GROUP BY no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2070 +#: rewrite/rewriteHandler.c:2188 msgid "Views containing HAVING are not automatically updatable." msgstr "Las vistas que contienen HAVING no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2073 +#: rewrite/rewriteHandler.c:2191 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:2076 +#: rewrite/rewriteHandler.c:2194 msgid "Views containing WITH are not automatically updatable." msgstr "Las vistas que contienen WITH no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2079 +#: rewrite/rewriteHandler.c:2197 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:2091 +#: rewrite/rewriteHandler.c:2209 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:2094 +#: rewrite/rewriteHandler.c:2212 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:2097 +#: rewrite/rewriteHandler.c:2215 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:2104 rewrite/rewriteHandler.c:2108 -#: rewrite/rewriteHandler.c:2115 +#: rewrite/rewriteHandler.c:2222 rewrite/rewriteHandler.c:2226 +#: rewrite/rewriteHandler.c:2233 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:2139 +#: rewrite/rewriteHandler.c:2236 +#, fuzzy +msgid "Views containing TABLESAMPLE are not automatically updatable." +msgstr "Las vistas que contienen WITH no son automáticamente actualizables." + +#: rewrite/rewriteHandler.c:2260 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:2576 +#: rewrite/rewriteHandler.c:2707 #, 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:2584 +#: rewrite/rewriteHandler.c:2715 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "no se puede actualizar la columna «%s» vista «%s»" -#: rewrite/rewriteHandler.c:2952 +#: rewrite/rewriteHandler.c:3106 #, 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:2966 +#: rewrite/rewriteHandler.c:3120 #, 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:2970 +#: rewrite/rewriteHandler.c:3124 #, 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:2975 +#: rewrite/rewriteHandler.c:3129 #, 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" -#: rewrite/rewriteHandler.c:3166 +#: rewrite/rewriteHandler.c:3344 #, 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:3168 +#: rewrite/rewriteHandler.c:3346 #, 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:3173 +#: rewrite/rewriteHandler.c:3351 #, 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:3175 +#: rewrite/rewriteHandler.c:3353 #, 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:3180 +#: rewrite/rewriteHandler.c:3358 #, 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:3182 +#: rewrite/rewriteHandler.c:3360 #, 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:3246 +#: rewrite/rewriteHandler.c:3378 +#, c-format +msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" +msgstr "" + +#: rewrite/rewriteHandler.c:3435 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH no puede ser usado en una consulta que está siendo convertida en múltiples consultas a través de reglas" -#: rewrite/rewriteManip.c:956 +#: rewrite/rewriteManip.c:1006 #, c-format msgid "conditional utility statements are not implemented" msgstr "las sentencias condicionales de utilidad no están implementadas" -#: rewrite/rewriteManip.c:1121 +#: rewrite/rewriteManip.c:1172 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "WHERE CURRENT OF no está implementado en una vista" +#: rewrite/rewriteManip.c:1437 +#, 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 "" + #: rewrite/rewriteSupport.c:154 #, c-format msgid "rule \"%s\" does not exist" @@ -14154,63 +15402,63 @@ msgstr "hay múltiples reglas llamadas «%s»" msgid "Specify a relation name as well as a rule name." msgstr "Especifique un nombre de relación además del nombre de regla." -#: snowball/dict_snowball.c:180 +#: snowball/dict_snowball.c:177 #, c-format msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" msgstr "no se encontró un analizador Snowball para el lenguaje «%s» y la codificación «%s»" -#: snowball/dict_snowball.c:203 tsearch/dict_ispell.c:73 +#: snowball/dict_snowball.c:200 tsearch/dict_ispell.c:73 #: tsearch/dict_simple.c:48 #, c-format msgid "multiple StopWords parameters" msgstr "parámetro StopWords duplicado" -#: snowball/dict_snowball.c:212 +#: snowball/dict_snowball.c:209 #, c-format msgid "multiple Language parameters" msgstr "parámetro Language duplicado" -#: snowball/dict_snowball.c:219 +#: snowball/dict_snowball.c:216 #, c-format msgid "unrecognized Snowball parameter: \"%s\"" msgstr "parámetro Snowball no reconocido: «%s»" -#: snowball/dict_snowball.c:227 +#: snowball/dict_snowball.c:224 #, c-format msgid "missing Language parameter" msgstr "falta un parámetro Language" -#: storage/buffer/bufmgr.c:139 storage/buffer/bufmgr.c:252 +#: storage/buffer/bufmgr.c:442 storage/buffer/bufmgr.c:555 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "no se pueden acceder tablas temporales de otras sesiones" -#: storage/buffer/bufmgr.c:401 +#: storage/buffer/bufmgr.c:704 #, 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:403 +#: storage/buffer/bufmgr.c:706 #, 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:493 +#: storage/buffer/bufmgr.c:793 #, 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:3178 +#: storage/buffer/bufmgr.c:3569 #, c-format msgid "could not write block %u of %s" msgstr "no se pudo escribir el bloque %u de %s" -#: storage/buffer/bufmgr.c:3180 +#: storage/buffer/bufmgr.c:3571 #, 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:3201 storage/buffer/bufmgr.c:3220 +#: storage/buffer/bufmgr.c:3592 storage/buffer/bufmgr.c:3611 #, c-format msgid "writing block %u of relation %s" msgstr "escribiendo el bloque %u de la relación %s" @@ -14220,53 +15468,53 @@ msgstr "escribiendo el bloque %u de la relación %s" msgid "no empty local buffer available" msgstr "no hay ningún búfer local disponible" -#: storage/file/fd.c:505 +#: storage/file/fd.c:528 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit falló: %m" -#: storage/file/fd.c:595 +#: storage/file/fd.c:618 #, 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:596 +#: storage/file/fd.c:619 #, 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:637 storage/file/fd.c:1671 storage/file/fd.c:1764 -#: storage/file/fd.c:1912 +#: storage/file/fd.c:660 storage/file/fd.c:1694 storage/file/fd.c:1787 +#: storage/file/fd.c:1935 #, 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:1211 +#: storage/file/fd.c:1234 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "archivo temporal: ruta «%s», tamaño %lu" -#: storage/file/fd.c:1360 +#: storage/file/fd.c:1383 #, 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:1647 storage/file/fd.c:1697 +#: storage/file/fd.c:1670 storage/file/fd.c:1720 #, 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:1737 +#: storage/file/fd.c:1760 #, 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:1888 +#: storage/file/fd.c:1911 #, 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:1961 +#: storage/file/fd.c:1997 #, c-format msgid "could not read directory \"%s\": %m" msgstr "no se pudo leer el directorio «%s»: %m" @@ -14291,7 +15539,7 @@ msgstr "Defina dynamic_shared_memory_type a un valor distinto de «none»." msgid "dynamic shared memory control segment is not valid" msgstr "el segmento de control de memoria compartida dinámica no es válido" -#: storage/ipc/dsm.c:501 +#: storage/ipc/dsm.c:516 #, c-format msgid "too many dynamic shared memory segments" msgstr "demasiados segmentos de memoria compartida dinámica" @@ -14349,11 +15597,11 @@ msgid "could not duplicate handle for \"%s\": %m" msgstr "no se pudo duplicar el «handle» para «%s»: %m" #: storage/ipc/shm_toc.c:108 storage/ipc/shm_toc.c:189 storage/ipc/shmem.c:205 -#: storage/lmgr/lock.c:872 storage/lmgr/lock.c:906 storage/lmgr/lock.c:2601 -#: storage/lmgr/lock.c:3713 storage/lmgr/lock.c:3778 storage/lmgr/lock.c:4068 -#: storage/lmgr/predicate.c:2323 storage/lmgr/predicate.c:2338 -#: storage/lmgr/predicate.c:3731 storage/lmgr/predicate.c:4874 -#: storage/lmgr/proc.c:198 utils/hash/dynahash.c:966 +#: storage/lmgr/lock.c:867 storage/lmgr/lock.c:901 storage/lmgr/lock.c:2598 +#: storage/lmgr/lock.c:3714 storage/lmgr/lock.c:3779 storage/lmgr/lock.c:4069 +#: storage/lmgr/predicate.c:2328 storage/lmgr/predicate.c:2343 +#: storage/lmgr/predicate.c:3736 storage/lmgr/predicate.c:4879 +#: storage/lmgr/proc.c:200 utils/hash/dynahash.c:998 #, c-format msgid "out of shared memory" msgstr "memoria compartida agotada" @@ -14378,12 +15626,12 @@ msgstr "el tamaño de la entrada ShmemIndex es incorrecto para la estructura «% msgid "requested shared memory size overflows size_t" msgstr "la petición de tamaño de memoria compartida desborda size_t" -#: storage/ipc/standby.c:499 tcop/postgres.c:2952 +#: storage/ipc/standby.c:500 tcop/postgres.c:2974 #, 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:500 tcop/postgres.c:2216 +#: storage/ipc/standby.c:501 tcop/postgres.c:2274 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "La transacción del usuario causó un «deadlock» con la recuperación." @@ -14403,7 +15651,7 @@ msgstr "opciones no válidas para abrir un objeto grande: %d" msgid "invalid whence setting: %d" msgstr "parámetro «whence» no válido: %d" -#: storage/large_object/inv_api.c:591 +#: storage/large_object/inv_api.c:593 #, c-format msgid "invalid large object write request size: %d" msgstr "tamaño de petición de escritura de objeto grande no válido: %d" @@ -14428,238 +15676,254 @@ 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:599 +#: storage/lmgr/lmgr.c:684 #, 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:602 +#: storage/lmgr/lmgr.c:687 #, 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:605 +#: storage/lmgr/lmgr.c:690 #, 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:608 +#: storage/lmgr/lmgr.c:693 #, 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:611 +#: storage/lmgr/lmgr.c:696 #, 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:614 +#: storage/lmgr/lmgr.c:699 #, 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:617 +#: storage/lmgr/lmgr.c:702 #, 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:620 +#: storage/lmgr/lmgr.c:705 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba una restricción por exclusión en la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:840 +#: storage/lmgr/lmgr.c:925 #, c-format msgid "relation %u of database %u" msgstr "relación %u de la base de datos %u" -#: storage/lmgr/lmgr.c:846 +#: storage/lmgr/lmgr.c:931 #, 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:852 +#: storage/lmgr/lmgr.c:937 #, 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:859 +#: storage/lmgr/lmgr.c:944 #, 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:867 +#: storage/lmgr/lmgr.c:952 #, c-format msgid "transaction %u" msgstr "transacción %u" -#: storage/lmgr/lmgr.c:872 +#: storage/lmgr/lmgr.c:957 #, c-format msgid "virtual transaction %d/%u" msgstr "transacción virtual %d/%u" -#: storage/lmgr/lmgr.c:878 +#: storage/lmgr/lmgr.c:963 +#, fuzzy, c-format +msgid "speculative token %u of transaction %u" +msgstr "no se pudo encontrar el estado de la transacción %u" + +#: storage/lmgr/lmgr.c:969 #, 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:886 +#: storage/lmgr/lmgr.c:977 #, 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:893 +#: storage/lmgr/lmgr.c:984 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "candado consultivo [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:901 +#: storage/lmgr/lmgr.c:992 #, c-format msgid "unrecognized locktag type %d" msgstr "tipo de locktag %d no reconocido" -#: storage/lmgr/lock.c:721 +#: storage/lmgr/lock.c:716 #, c-format msgid "cannot acquire lock mode %s on database objects while recovery is in progress" msgstr "no se puede adquirir candado en modo %s en objetos de la base de datos mientras la recuperación está en proceso" -#: storage/lmgr/lock.c:723 +#: storage/lmgr/lock.c:718 #, c-format msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." msgstr "Sólo candados RowExclusiveLock o menor pueden ser adquiridos en objetos de la base de datos durante la recuperación." -#: storage/lmgr/lock.c:873 storage/lmgr/lock.c:907 storage/lmgr/lock.c:2602 -#: storage/lmgr/lock.c:3714 storage/lmgr/lock.c:3779 storage/lmgr/lock.c:4069 +#: storage/lmgr/lock.c:868 storage/lmgr/lock.c:902 storage/lmgr/lock.c:2599 +#: storage/lmgr/lock.c:3715 storage/lmgr/lock.c:3780 storage/lmgr/lock.c:4070 #, c-format msgid "You might need to increase max_locks_per_transaction." msgstr "Puede ser necesario incrementar max_locks_per_transaction." -#: storage/lmgr/lock.c:3039 storage/lmgr/lock.c:3151 +#: storage/lmgr/lock.c:3040 storage/lmgr/lock.c:3152 #, c-format msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" msgstr "no se puede hacer PREPARE mientras se mantienen candados a nivel de sesión y transacción simultáneamente sobre el mismo objeto" -#: storage/lmgr/predicate.c:674 +#: storage/lmgr/lwlock.c:190 +#, c-format +msgid "%d: %s(%s %d): excl %u shared %u haswaiters %u waiters %u rOK %d" +msgstr "" + +#: storage/lmgr/lwlock.c:210 +#, fuzzy, c-format +msgid "%s(%s %d): %s" +msgstr "%s %s%s%s: %s" + +#: storage/lmgr/predicate.c:675 #, c-format msgid "not enough elements in RWConflictPool to record a read/write conflict" msgstr "no hay suficientes elementos en RWConflictPool para registrar un conflicto read/write" -#: storage/lmgr/predicate.c:675 storage/lmgr/predicate.c:703 +#: storage/lmgr/predicate.c:676 storage/lmgr/predicate.c:704 #, c-format msgid "You might need to run fewer transactions at a time or increase max_connections." msgstr "Puede ser necesario ejecutar menos transacciones al mismo tiempo, o incrementar max_connections." -#: storage/lmgr/predicate.c:702 +#: storage/lmgr/predicate.c:703 #, c-format msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "no hay suficientes elementos en RWConflictPool para registrar un potencial conflicto read/write" -#: storage/lmgr/predicate.c:907 +#: storage/lmgr/predicate.c:908 #, c-format msgid "memory for serializable conflict tracking is nearly exhausted" msgstr "la memoria para el seguimiento de conflictos de serialización está casi agotada" -#: storage/lmgr/predicate.c:908 +#: storage/lmgr/predicate.c:909 #, c-format msgid "There might be an idle transaction or a forgotten prepared transaction causing this." msgstr "Puede haber una transacción inactiva o una transacción preparada olvidada que esté causando este problema." -#: storage/lmgr/predicate.c:1190 storage/lmgr/predicate.c:1262 +#: storage/lmgr/predicate.c:1189 storage/lmgr/predicate.c:1260 #, c-format msgid "not enough shared memory for elements of data structure \"%s\" (%zu bytes requested)" msgstr "el espacio de memoria compartida es insuficiente para los elementos de la estructura «%s» (%zu bytes solicitados)" -#: storage/lmgr/predicate.c:1550 +#: storage/lmgr/predicate.c:1548 #, c-format msgid "deferrable snapshot was unsafe; trying a new one" msgstr "la instantánea postergada era insegura; intentando con una nueva" -#: storage/lmgr/predicate.c:1589 +#: storage/lmgr/predicate.c:1587 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "«default_transaction_isolation» está definido a «serializable»." -#: storage/lmgr/predicate.c:1590 +#: storage/lmgr/predicate.c:1588 #, c-format msgid "You can use \"SET default_transaction_isolation = 'repeatable read'\" to change the default." msgstr "Puede usar «SET default_transaction_isolation = 'repeatable read'» para cambiar el valor por omisión." -#: storage/lmgr/predicate.c:1629 +#: storage/lmgr/predicate.c:1627 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "una transacción que importa un snapshot no debe ser READ ONLY DEFERRABLE" -#: storage/lmgr/predicate.c:1699 utils/time/snapmgr.c:398 +#: storage/lmgr/predicate.c:1705 utils/time/snapmgr.c:431 +#: utils/time/snapmgr.c:437 #, c-format msgid "could not import the requested snapshot" msgstr "no se pudo importar el snapshot solicitado" -#: storage/lmgr/predicate.c:1700 utils/time/snapmgr.c:399 +#: storage/lmgr/predicate.c:1706 utils/time/snapmgr.c:438 #, c-format msgid "The source transaction %u is not running anymore." msgstr "La transacción de origen %u ya no está en ejecución." -#: storage/lmgr/predicate.c:2324 storage/lmgr/predicate.c:2339 -#: storage/lmgr/predicate.c:3732 +#: storage/lmgr/predicate.c:2329 storage/lmgr/predicate.c:2344 +#: storage/lmgr/predicate.c:3737 #, c-format msgid "You might need to increase max_pred_locks_per_transaction." msgstr "Puede ser necesario incrementar max_pred_locks_per_transaction." -#: storage/lmgr/predicate.c:3886 storage/lmgr/predicate.c:3975 -#: storage/lmgr/predicate.c:3983 storage/lmgr/predicate.c:4022 -#: storage/lmgr/predicate.c:4261 storage/lmgr/predicate.c:4598 -#: storage/lmgr/predicate.c:4610 storage/lmgr/predicate.c:4652 -#: storage/lmgr/predicate.c:4690 +#: storage/lmgr/predicate.c:3891 storage/lmgr/predicate.c:3980 +#: storage/lmgr/predicate.c:3988 storage/lmgr/predicate.c:4027 +#: storage/lmgr/predicate.c:4266 storage/lmgr/predicate.c:4603 +#: storage/lmgr/predicate.c:4615 storage/lmgr/predicate.c:4657 +#: storage/lmgr/predicate.c:4695 #, c-format msgid "could not serialize access due to read/write dependencies among transactions" msgstr "no se pudo serializar el acceso debido a dependencias read/write entre transacciones" -#: storage/lmgr/predicate.c:3888 storage/lmgr/predicate.c:3977 -#: storage/lmgr/predicate.c:3985 storage/lmgr/predicate.c:4024 -#: storage/lmgr/predicate.c:4263 storage/lmgr/predicate.c:4600 -#: storage/lmgr/predicate.c:4612 storage/lmgr/predicate.c:4654 -#: storage/lmgr/predicate.c:4692 +#: storage/lmgr/predicate.c:3893 storage/lmgr/predicate.c:3982 +#: storage/lmgr/predicate.c:3990 storage/lmgr/predicate.c:4029 +#: storage/lmgr/predicate.c:4268 storage/lmgr/predicate.c:4605 +#: storage/lmgr/predicate.c:4617 storage/lmgr/predicate.c:4659 +#: storage/lmgr/predicate.c:4697 #, c-format msgid "The transaction might succeed if retried." msgstr "La transacción podría tener éxito si es reintentada." -#: storage/lmgr/proc.c:1172 +#: storage/lmgr/proc.c:1164 #, c-format msgid "Process %d waits for %s on %s." msgstr "El proceso %d espera %s en %s." -#: storage/lmgr/proc.c:1182 +#: storage/lmgr/proc.c:1175 #, c-format msgid "sending cancel to blocking autovacuum PID %d" msgstr "enviando señal de cancelación a la tarea autovacuum bloqueante con PID %d" -#: storage/lmgr/proc.c:1194 utils/adt/misc.c:136 +#: storage/lmgr/proc.c:1193 utils/adt/misc.c:146 #, c-format msgid "could not send signal to process %d: %m" msgstr "no se pudo enviar la señal al proceso %d: %m" -#: storage/lmgr/proc.c:1293 +#: storage/lmgr/proc.c:1295 #, c-format msgid "process %d avoided deadlock for %s on %s by rearranging queue order after %ld.%03d ms" msgstr "el proceso %d evitó un deadlock para %s en %s reordenando la cola después de %ld.%03d ms" -#: storage/lmgr/proc.c:1308 +#: storage/lmgr/proc.c:1310 #, c-format msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "el proceso %d detectó un deadlock mientras esperaba %s en %s después de %ld.%03d ms" -#: storage/lmgr/proc.c:1317 +#: storage/lmgr/proc.c:1319 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" -msgstr "el proceso %d está aún espera %s en %s después de %ld.%03d ms" +msgstr "el proceso %d aún espera %s en %s después de %ld.%03d ms" -#: storage/lmgr/proc.c:1324 +#: storage/lmgr/proc.c:1326 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "el proceso %d adquirió %s en %s después de %ld.%03d ms" -#: storage/lmgr/proc.c:1340 +#: storage/lmgr/proc.c:1342 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "el proceso %d no pudo adquirir %s en %s después de %ld.%03d ms" @@ -14669,405 +15933,412 @@ msgstr "el proceso %d no pudo adquirir %s en %s después de %ld.%03d ms" msgid "page verification failed, calculated checksum %u but expected %u" msgstr "la suma de verificación falló, se calculó %u pero se esperaba %u" -#: storage/page/bufpage.c:200 storage/page/bufpage.c:459 -#: storage/page/bufpage.c:691 storage/page/bufpage.c:823 +#: storage/page/bufpage.c:200 storage/page/bufpage.c:490 +#: storage/page/bufpage.c:705 storage/page/bufpage.c:836 +#: storage/page/bufpage.c:936 #, c-format msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" msgstr "los punteros de página están corruptos: inferior = %u, superior = %u, especial = %u" -#: storage/page/bufpage.c:503 +#: storage/page/bufpage.c:534 #, c-format msgid "corrupted item pointer: %u" msgstr "el puntero de item está corrupto: %u" -#: storage/page/bufpage.c:514 storage/page/bufpage.c:874 +#: storage/page/bufpage.c:545 storage/page/bufpage.c:887 +#: storage/page/bufpage.c:1042 #, c-format msgid "corrupted item lengths: total %u, available space %u" msgstr "los largos de ítem están corruptos: total %u, espacio disponible %u" -#: storage/page/bufpage.c:710 storage/page/bufpage.c:847 +#: storage/page/bufpage.c:724 storage/page/bufpage.c:860 #, c-format msgid "corrupted item pointer: offset = %u, size = %u" msgstr "el puntero de ítem está corrupto: posición = %u, tamaño = %u" -#: storage/smgr/md.c:426 storage/smgr/md.c:897 +#: storage/page/bufpage.c:965 +#, fuzzy, c-format +msgid "corrupted item pointer: offset = %u, length = %u" +msgstr "el puntero de ítem está corrupto: posición = %u, tamaño = %u" + +#: storage/smgr/md.c:442 storage/smgr/md.c:913 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "no se pudo truncar el archivo «%s»: %m" -#: storage/smgr/md.c:493 +#: storage/smgr/md.c:509 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "no se pudo extender el archivo «%s» más allá de %u bloques" -#: storage/smgr/md.c:515 storage/smgr/md.c:676 storage/smgr/md.c:751 +#: storage/smgr/md.c:531 storage/smgr/md.c:692 storage/smgr/md.c:767 #, c-format msgid "could not seek to block %u in file \"%s\": %m" msgstr "no se pudo posicionar (seek) al bloque %u en el archivo «%s»: %m" -#: storage/smgr/md.c:523 +#: storage/smgr/md.c:539 #, c-format msgid "could not extend file \"%s\": %m" msgstr "no se pudo extender el archivo «%s»: %m" -#: storage/smgr/md.c:525 storage/smgr/md.c:532 storage/smgr/md.c:778 +#: storage/smgr/md.c:541 storage/smgr/md.c:548 storage/smgr/md.c:794 #, c-format msgid "Check free disk space." msgstr "Verifique el espacio libre en disco." -#: storage/smgr/md.c:529 +#: storage/smgr/md.c:545 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "no se pudo extender el archivo «%s»: sólo se escribieron %d de %d bytes en el bloque %u" -#: storage/smgr/md.c:694 +#: storage/smgr/md.c:710 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "no se pudo leer el bloque %u del archivo «%s»: %m" -#: storage/smgr/md.c:710 +#: storage/smgr/md.c:726 #, c-format msgid "could not read block %u in file \"%s\": read only %d of %d bytes" msgstr "no se pudo leer el bloque %u del archivo «%s»: se leyeron sólo %d de %d bytes" -#: storage/smgr/md.c:769 +#: storage/smgr/md.c:785 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "no se pudo escribir el bloque %u en el archivo «%s»: %m" -#: storage/smgr/md.c:774 +#: storage/smgr/md.c:790 #, c-format msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "no se pudo escribir el bloque %u en el archivo «%s»: se escribieron sólo %d de %d bytes" -#: storage/smgr/md.c:873 +#: storage/smgr/md.c:889 #, 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:922 +#: storage/smgr/md.c:938 #, 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:1202 +#: storage/smgr/md.c:1218 #, c-format msgid "could not fsync file \"%s\" but retrying: %m" msgstr "no se pudo sincronizar (fsync) archivo «%s» pero reintentando: %m" -#: storage/smgr/md.c:1365 +#: storage/smgr/md.c:1381 #, c-format msgid "could not forward fsync request because request queue is full" msgstr "no se pudo enviar una petición fsync porque la cola de peticiones está llena" -#: storage/smgr/md.c:1760 +#: storage/smgr/md.c:1776 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "no se pudo abrir el archivo «%s» (bloque buscado %u): %m" -#: tcop/fastpath.c:111 tcop/fastpath.c:502 tcop/fastpath.c:632 +#: tcop/fastpath.c:111 tcop/fastpath.c:475 tcop/fastpath.c:605 #, c-format msgid "invalid argument size %d in function call message" msgstr "el tamaño de argumento %d no es válido en el mensaje de llamada a función" -#: tcop/fastpath.c:304 tcop/postgres.c:353 tcop/postgres.c:389 -#, c-format -msgid "unexpected EOF on client connection" -msgstr "se encontró fin de archivo inesperado en la conexión del cliente" - -#: tcop/fastpath.c:318 tcop/postgres.c:944 tcop/postgres.c:1254 -#: tcop/postgres.c:1512 tcop/postgres.c:1917 tcop/postgres.c:2284 -#: tcop/postgres.c:2359 +#: tcop/fastpath.c:291 tcop/postgres.c:1003 tcop/postgres.c:1313 +#: tcop/postgres.c:1571 tcop/postgres.c:1975 tcop/postgres.c:2342 +#: tcop/postgres.c:2417 #, 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" -#: tcop/fastpath.c:346 +#: tcop/fastpath.c:319 #, c-format msgid "fastpath function call: \"%s\" (OID %u)" msgstr "llamada a función fastpath: «%s» (OID %u)" -#: tcop/fastpath.c:428 tcop/postgres.c:1114 tcop/postgres.c:1379 -#: tcop/postgres.c:1758 tcop/postgres.c:1975 +#: tcop/fastpath.c:401 tcop/postgres.c:1173 tcop/postgres.c:1438 +#: tcop/postgres.c:1816 tcop/postgres.c:2033 #, c-format msgid "duration: %s ms" msgstr "duración: %s ms" -#: tcop/fastpath.c:432 +#: tcop/fastpath.c:405 #, c-format msgid "duration: %s ms fastpath function call: \"%s\" (OID %u)" msgstr "duración: %s ms llamada a función fastpath: «%s» (OID %u)" -#: tcop/fastpath.c:470 tcop/fastpath.c:597 +#: tcop/fastpath.c:443 tcop/fastpath.c:570 #, c-format msgid "function call message contains %d arguments but function requires %d" msgstr "el mensaje de llamada a función contiene %d argumentos pero la función requiere %d" -#: tcop/fastpath.c:478 +#: tcop/fastpath.c:451 #, c-format msgid "function call message contains %d argument formats but %d arguments" msgstr "el mensaje de llamada a función contiene %d formatos de argumento pero %d argumentos" -#: tcop/fastpath.c:565 tcop/fastpath.c:648 +#: tcop/fastpath.c:538 tcop/fastpath.c:621 #, c-format msgid "incorrect binary data format in function argument %d" msgstr "el formato de datos binarios es incorrecto en argumento %d a función" -#: tcop/postgres.c:417 tcop/postgres.c:429 tcop/postgres.c:440 -#: tcop/postgres.c:452 tcop/postgres.c:4254 +#: tcop/postgres.c:363 tcop/postgres.c:399 tcop/postgres.c:426 +#, c-format +msgid "unexpected EOF on client connection" +msgstr "se encontró fin de archivo inesperado en la conexión del cliente" + +#: tcop/postgres.c:449 tcop/postgres.c:461 tcop/postgres.c:472 +#: tcop/postgres.c:484 tcop/postgres.c:4268 #, c-format msgid "invalid frontend message type %d" msgstr "el tipo de mensaje de frontend %d no es válido" -#: tcop/postgres.c:885 +#: tcop/postgres.c:944 #, c-format msgid "statement: %s" msgstr "sentencia: %s" -#: tcop/postgres.c:1119 +#: tcop/postgres.c:1178 #, c-format msgid "duration: %s ms statement: %s" msgstr "duración: %s ms sentencia: %s" -#: tcop/postgres.c:1169 +#: tcop/postgres.c:1228 #, c-format msgid "parse %s: %s" msgstr "parse %s: %s" -#: tcop/postgres.c:1227 +#: tcop/postgres.c:1286 #, 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:1384 +#: tcop/postgres.c:1443 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "duración: %s ms parse: %s: %s" -#: tcop/postgres.c:1429 +#: tcop/postgres.c:1488 #, c-format msgid "bind %s to %s" msgstr "bind %s a %s" -#: tcop/postgres.c:1448 tcop/postgres.c:2265 +#: tcop/postgres.c:1507 tcop/postgres.c:2323 #, c-format msgid "unnamed prepared statement does not exist" msgstr "no existe una sentencia preparada sin nombre" -#: tcop/postgres.c:1490 +#: tcop/postgres.c:1549 #, 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:1496 +#: tcop/postgres.c:1555 #, 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:1665 +#: tcop/postgres.c:1723 #, 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:1763 +#: tcop/postgres.c:1821 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "duración: %s ms bind %s%s%s: %s" -#: tcop/postgres.c:1811 tcop/postgres.c:2345 +#: tcop/postgres.c:1869 tcop/postgres.c:2403 #, c-format msgid "portal \"%s\" does not exist" msgstr "no existe el portal «%s»" -#: tcop/postgres.c:1896 +#: tcop/postgres.c:1954 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:1898 tcop/postgres.c:1983 +#: tcop/postgres.c:1956 tcop/postgres.c:2041 msgid "execute fetch from" msgstr "ejecutar fetch desde" -#: tcop/postgres.c:1899 tcop/postgres.c:1984 +#: tcop/postgres.c:1957 tcop/postgres.c:2042 msgid "execute" msgstr "ejecutar" -#: tcop/postgres.c:1980 +#: tcop/postgres.c:2038 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "duración: %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2106 +#: tcop/postgres.c:2164 #, c-format msgid "prepare: %s" msgstr "prepare: %s" -#: tcop/postgres.c:2169 +#: tcop/postgres.c:2227 #, c-format msgid "parameters: %s" msgstr "parámetros: %s" -#: tcop/postgres.c:2188 +#: tcop/postgres.c:2246 #, c-format msgid "abort reason: recovery conflict" msgstr "razón para abortar: conflicto en la recuperación" -#: tcop/postgres.c:2204 +#: tcop/postgres.c:2262 #, 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:2207 +#: tcop/postgres.c:2265 #, 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:2210 +#: tcop/postgres.c:2268 #, 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:2213 +#: tcop/postgres.c:2271 #, 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:2219 +#: tcop/postgres.c:2277 #, 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:2548 +#: tcop/postgres.c:2606 #, 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:2549 +#: tcop/postgres.c:2607 #, 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:2553 tcop/postgres.c:2947 +#: tcop/postgres.c:2611 tcop/postgres.c:2917 #, 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:2666 +#: tcop/postgres.c:2697 #, c-format msgid "floating-point exception" msgstr "excepción de coma flotante" -#: tcop/postgres.c:2667 +#: tcop/postgres.c:2698 #, 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:2851 +#: tcop/postgres.c:2862 +#, 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:2866 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "terminando el proceso autovacuum debido a una orden del administrador" -#: tcop/postgres.c:2857 tcop/postgres.c:2867 tcop/postgres.c:2945 +#: tcop/postgres.c:2872 tcop/postgres.c:2882 tcop/postgres.c:2915 #, 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:2873 +#: tcop/postgres.c:2888 #, c-format msgid "terminating connection due to administrator command" msgstr "terminando la conexión debido a una orden del administrador" -#: tcop/postgres.c:2885 +#: tcop/postgres.c:2898 #, c-format msgid "connection to client lost" msgstr "se ha perdido la conexión al cliente" -#: tcop/postgres.c:2900 -#, 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:2915 +#: tcop/postgres.c:2951 #, 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:2924 +#: tcop/postgres.c:2958 #, 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:2933 +#: tcop/postgres.c:2965 #, c-format msgid "canceling autovacuum task" msgstr "cancelando tarea de autovacuum" -#: tcop/postgres.c:2968 +#: tcop/postgres.c:2988 #, c-format msgid "canceling statement due to user request" msgstr "cancelando la sentencia debido a una petición del usuario" -#: tcop/postgres.c:3096 tcop/postgres.c:3118 +#: tcop/postgres.c:3098 #, c-format msgid "stack depth limit exceeded" msgstr "límite de profundidad de stack alcanzado" -#: tcop/postgres.c:3097 tcop/postgres.c:3119 +#: tcop/postgres.c:3099 #, 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:3135 +#: tcop/postgres.c:3162 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "«max_stack_depth» no debe exceder %ldkB." -#: tcop/postgres.c:3137 +#: tcop/postgres.c:3164 #, 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:3501 +#: tcop/postgres.c:3524 #, 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:3502 tcop/postgres.c:3508 +#: tcop/postgres.c:3525 tcop/postgres.c:3531 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Pruebe «%s --help» para mayor información." -#: tcop/postgres.c:3506 +#: tcop/postgres.c:3529 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: argumento de línea de órdenes no válido: %s" -#: tcop/postgres.c:3585 +#: tcop/postgres.c:3590 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: no se ha especificado base de datos ni usuario" -#: tcop/postgres.c:4162 +#: tcop/postgres.c:4176 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "subtipo %d de mensaje CLOSE no válido" -#: tcop/postgres.c:4197 +#: tcop/postgres.c:4211 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "subtipo %d de mensaje DESCRIBE no válido" -#: tcop/postgres.c:4275 +#: tcop/postgres.c:4289 #, 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:4279 +#: tcop/postgres.c:4293 #, 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:4449 +#: tcop/postgres.c:4463 #, 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" @@ -15077,35 +16348,41 @@ 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:972 +#: tcop/pquery.c:968 #, c-format msgid "cursor can only scan forward" msgstr "el cursor sólo se puede desplazar hacia adelante" -#: tcop/pquery.c:973 +#: tcop/pquery.c:969 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "Declárelo con SCROLL para permitirle desplazar hacia atrás." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:227 +#: tcop/utility.c:233 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "no se puede ejecutar %s en una transacción de sólo lectura" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:246 +#: tcop/utility.c:251 +#, fuzzy, c-format +msgid "cannot execute %s during a parallel operation" +msgstr "no se puede ejecutar %s durante la recuperación" + +#. translator: %s is name of a SQL command, eg CREATE +#: tcop/utility.c:270 #, c-format msgid "cannot execute %s during recovery" msgstr "no se puede ejecutar %s durante la recuperación" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:264 +#: tcop/utility.c:288 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "no se puede ejecutar %s durante una operación restringida por seguridad" -#: tcop/utility.c:728 +#: tcop/utility.c:742 #, c-format msgid "must be superuser to do CHECKPOINT" msgstr "debe ser superusuario para ejecutar CHECKPOINT" @@ -15244,7 +16521,7 @@ msgid "invalid regular expression: %s" msgstr "la expresión regular no es válida: %s" #: tsearch/spell.c:518 tsearch/spell.c:535 tsearch/spell.c:552 -#: tsearch/spell.c:569 tsearch/spell.c:591 gram.y:13422 gram.y:13439 +#: tsearch/spell.c:569 tsearch/spell.c:591 gram.y:14239 gram.y:14256 #, c-format msgid "syntax error" msgstr "error de sintaxis" @@ -15311,416 +16588,456 @@ msgstr "no se pudo abrir el archivo de stopwords «%s»: %m" msgid "text search parser does not support headline creation" msgstr "el analizador de búsqueda en texto no soporta creación de encabezados (headline)" -#: tsearch/wparser_def.c:2555 +#: tsearch/wparser_def.c:2557 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "parámetro de encabezado (headline) no reconocido: «%s»" -#: tsearch/wparser_def.c:2564 +#: tsearch/wparser_def.c:2566 #, c-format msgid "MinWords should be less than MaxWords" msgstr "MinWords debería ser menor que MaxWords" -#: tsearch/wparser_def.c:2568 +#: tsearch/wparser_def.c:2570 #, c-format msgid "MinWords should be positive" msgstr "MinWords debería ser positivo" -#: tsearch/wparser_def.c:2572 +#: tsearch/wparser_def.c:2574 #, c-format msgid "ShortWord should be >= 0" msgstr "ShortWord debería ser >= 0" -#: tsearch/wparser_def.c:2576 +#: tsearch/wparser_def.c:2578 #, c-format msgid "MaxFragments should be >= 0" msgstr "MaxFragments debería ser >= 0" -#: utils/adt/acl.c:170 utils/adt/name.c:91 +#: utils/adt/acl.c:169 utils/adt/name.c:91 #, c-format msgid "identifier too long" msgstr "el identificador es demasiado largo" -#: utils/adt/acl.c:171 utils/adt/name.c:92 +#: utils/adt/acl.c:170 utils/adt/name.c:92 #, c-format msgid "Identifier must be less than %d characters." msgstr "El identificador debe ser menor a %d caracteres." -#: utils/adt/acl.c:257 +#: utils/adt/acl.c:256 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "palabra clave no reconocida: «%s»" -#: utils/adt/acl.c:258 +#: utils/adt/acl.c:257 #, 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:263 +#: utils/adt/acl.c:262 #, c-format msgid "missing name" msgstr "falta un nombre" -#: utils/adt/acl.c:264 +#: utils/adt/acl.c:263 #, 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:270 +#: utils/adt/acl.c:269 #, c-format msgid "missing \"=\" sign" msgstr "falta un signo «=»" -#: utils/adt/acl.c:323 +#: utils/adt/acl.c:322 #, 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:345 +#: utils/adt/acl.c:344 #, c-format msgid "a name must follow the \"/\" sign" msgstr "debe venir un nombre después del signo «/»" -#: utils/adt/acl.c:353 +#: utils/adt/acl.c:352 #, c-format msgid "defaulting grantor to user ID %u" msgstr "usando el cedente por omisión con ID %u" -#: utils/adt/acl.c:544 +#: utils/adt/acl.c:543 #, c-format msgid "ACL array contains wrong data type" msgstr "el array ACL contiene tipo de datos incorrecto" -#: utils/adt/acl.c:548 +#: utils/adt/acl.c:547 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "los array de ACL debe ser unidimensional" -#: utils/adt/acl.c:552 +#: utils/adt/acl.c:551 #, c-format msgid "ACL arrays must not contain null values" msgstr "los arrays de ACL no pueden contener valores nulos" -#: utils/adt/acl.c:576 +#: utils/adt/acl.c:575 #, 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:1196 +#: utils/adt/acl.c:1195 #, 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:1257 +#: utils/adt/acl.c:1256 #, c-format msgid "dependent privileges exist" msgstr "existen privilegios dependientes" -#: utils/adt/acl.c:1258 +#: utils/adt/acl.c:1257 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Use CASCADE para revocarlos también." -#: utils/adt/acl.c:1537 +#: utils/adt/acl.c:1536 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert ya no está soportado" -#: utils/adt/acl.c:1547 +#: utils/adt/acl.c:1546 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove ya no está soportado" -#: utils/adt/acl.c:1633 utils/adt/acl.c:1687 +#: utils/adt/acl.c:1632 utils/adt/acl.c:1686 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "tipo de privilegio no reconocido: «%s»" -#: utils/adt/acl.c:3427 utils/adt/regproc.c:122 utils/adt/regproc.c:143 -#: utils/adt/regproc.c:318 +#: utils/adt/acl.c:3426 utils/adt/regproc.c:123 utils/adt/regproc.c:144 +#: utils/adt/regproc.c:319 #, c-format msgid "function \"%s\" does not exist" msgstr "no existe la función «%s»" -#: utils/adt/acl.c:4881 +#: utils/adt/acl.c:4880 #, c-format msgid "must be member of role \"%s\"" msgstr "debe ser miembro del rol «%s»" -#: utils/adt/array_userfuncs.c:48 +#: utils/adt/array_expanded.c:276 utils/adt/arrayfuncs.c:934 +#: utils/adt/arrayfuncs.c:1522 utils/adt/arrayfuncs.c:3225 +#: utils/adt/arrayfuncs.c:3363 utils/adt/arrayfuncs.c:5838 +#: utils/adt/arrayfuncs.c:6149 utils/adt/arrayutils.c:93 +#: utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 #, c-format -msgid "could not determine input data types" -msgstr "no se pudo determinar el tipo de datos de entrada" +msgid "array size exceeds the maximum allowed (%d)" +msgstr "el tamaño del array excede el máximo permitido (%d)" -#: utils/adt/array_userfuncs.c:82 +#: utils/adt/array_userfuncs.c:67 utils/adt/array_userfuncs.c:529 +#: utils/adt/array_userfuncs.c:609 utils/adt/json.c:1755 utils/adt/json.c:1850 +#: utils/adt/json.c:1888 utils/adt/jsonb.c:1142 utils/adt/jsonb.c:1171 +#: utils/adt/jsonb.c:1613 utils/adt/jsonb.c:1777 utils/adt/jsonb.c:1787 #, c-format -msgid "neither input type is an array" -msgstr "ninguno de los tipos de entrada es un array" +msgid "could not determine input data type" +msgstr "no se pudo determinar el tipo de dato de entrada" -#: utils/adt/array_userfuncs.c:103 utils/adt/array_userfuncs.c:113 -#: utils/adt/arrayfuncs.c:1309 utils/adt/float.c:1161 utils/adt/float.c:1220 +#: utils/adt/array_userfuncs.c:72 +#, fuzzy, c-format +msgid "input data type is not an array" +msgstr "el tipo de destino no es un array" + +#: utils/adt/array_userfuncs.c:120 utils/adt/array_userfuncs.c:174 +#: utils/adt/arrayfuncs.c:1325 utils/adt/float.c:1161 utils/adt/float.c:1220 #: utils/adt/float.c:2771 utils/adt/float.c:2787 utils/adt/int.c:623 #: utils/adt/int.c:652 utils/adt/int.c:673 utils/adt/int.c:704 #: utils/adt/int.c:737 utils/adt/int.c:759 utils/adt/int.c:907 #: utils/adt/int.c:928 utils/adt/int.c:955 utils/adt/int.c:995 #: utils/adt/int.c:1016 utils/adt/int.c:1043 utils/adt/int.c:1076 -#: utils/adt/int.c:1159 utils/adt/int8.c:1298 utils/adt/numeric.c:2304 -#: utils/adt/numeric.c:2313 utils/adt/varbit.c:1173 utils/adt/varbit.c:1565 -#: utils/adt/varlena.c:1013 utils/adt/varlena.c:2036 +#: utils/adt/int.c:1159 utils/adt/int8.c:1298 utils/adt/numeric.c:2903 +#: utils/adt/numeric.c:2912 utils/adt/varbit.c:1173 utils/adt/varbit.c:1565 +#: utils/adt/varlena.c:1045 utils/adt/varlena.c:2582 #, c-format msgid "integer out of range" msgstr "el entero está fuera de rango" -#: utils/adt/array_userfuncs.c:121 +#: utils/adt/array_userfuncs.c:127 utils/adt/array_userfuncs.c:184 #, c-format msgid "argument must be empty or one-dimensional array" msgstr "el argumento debe ser vacío o un array unidimensional" -#: utils/adt/array_userfuncs.c:224 utils/adt/array_userfuncs.c:263 -#: utils/adt/array_userfuncs.c:300 utils/adt/array_userfuncs.c:329 -#: utils/adt/array_userfuncs.c:357 +#: utils/adt/array_userfuncs.c:266 utils/adt/array_userfuncs.c:305 +#: utils/adt/array_userfuncs.c:342 utils/adt/array_userfuncs.c:371 +#: utils/adt/array_userfuncs.c:399 #, c-format msgid "cannot concatenate incompatible arrays" msgstr "no se pueden concatenar arrays incompatibles" -#: utils/adt/array_userfuncs.c:225 +#: utils/adt/array_userfuncs.c:267 #, c-format msgid "Arrays with element types %s and %s are not compatible for concatenation." msgstr "Los arrays con elementos de tipo %s y %s son incompatibles para la concatenación." -#: utils/adt/array_userfuncs.c:264 +#: utils/adt/array_userfuncs.c:306 #, c-format msgid "Arrays of %d and %d dimensions are not compatible for concatenation." msgstr "Los arrays de dimesiones %d y %d son incompatibles para la concatenación." -#: utils/adt/array_userfuncs.c:301 +#: utils/adt/array_userfuncs.c:343 #, c-format msgid "Arrays with differing element dimensions are not compatible for concatenation." msgstr "Los arrays con elementos de diferentes dimensiones son incompatibles para la concatenación." -#: utils/adt/array_userfuncs.c:330 utils/adt/array_userfuncs.c:358 +#: utils/adt/array_userfuncs.c:372 utils/adt/array_userfuncs.c:400 #, c-format msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "Los arrays con diferentes dimensiones son incompatibles para la concatenación." -#: utils/adt/array_userfuncs.c:426 utils/adt/arrayfuncs.c:1271 -#: utils/adt/arrayfuncs.c:2957 utils/adt/arrayfuncs.c:4982 +#: utils/adt/array_userfuncs.c:468 utils/adt/arrayfuncs.c:1287 +#: utils/adt/arrayfuncs.c:3331 utils/adt/arrayfuncs.c:5738 #, c-format msgid "invalid number of dimensions: %d" msgstr "número incorrecto de dimensiones: %d" -#: utils/adt/array_userfuncs.c:487 utils/adt/json.c:1694 utils/adt/json.c:1789 -#: utils/adt/json.c:1820 +#: utils/adt/array_userfuncs.c:725 utils/adt/array_userfuncs.c:876 +#, fuzzy, c-format +msgid "searching for elements in multidimensional arrays is not supported" +msgstr "la eliminación de elementos desde arrays multidimensionales no está soportada" + +#: utils/adt/array_userfuncs.c:749 #, c-format -msgid "could not determine input data type" -msgstr "no se pudo determinar el tipo de dato de entrada" +msgid "initial position should not be NULL" +msgstr "" -#: utils/adt/arrayfuncs.c:241 utils/adt/arrayfuncs.c:255 -#: utils/adt/arrayfuncs.c:266 utils/adt/arrayfuncs.c:288 -#: utils/adt/arrayfuncs.c:303 utils/adt/arrayfuncs.c:317 -#: utils/adt/arrayfuncs.c:323 utils/adt/arrayfuncs.c:330 -#: utils/adt/arrayfuncs.c:461 utils/adt/arrayfuncs.c:477 -#: utils/adt/arrayfuncs.c:488 utils/adt/arrayfuncs.c:503 -#: utils/adt/arrayfuncs.c:524 utils/adt/arrayfuncs.c:554 -#: utils/adt/arrayfuncs.c:561 utils/adt/arrayfuncs.c:569 -#: utils/adt/arrayfuncs.c:603 utils/adt/arrayfuncs.c:626 -#: utils/adt/arrayfuncs.c:646 utils/adt/arrayfuncs.c:758 -#: utils/adt/arrayfuncs.c:767 utils/adt/arrayfuncs.c:797 -#: utils/adt/arrayfuncs.c:812 utils/adt/arrayfuncs.c:865 +#: utils/adt/arrayfuncs.c:271 utils/adt/arrayfuncs.c:285 +#: utils/adt/arrayfuncs.c:296 utils/adt/arrayfuncs.c:318 +#: utils/adt/arrayfuncs.c:333 utils/adt/arrayfuncs.c:347 +#: utils/adt/arrayfuncs.c:353 utils/adt/arrayfuncs.c:360 +#: utils/adt/arrayfuncs.c:491 utils/adt/arrayfuncs.c:507 +#: utils/adt/arrayfuncs.c:518 utils/adt/arrayfuncs.c:533 +#: utils/adt/arrayfuncs.c:554 utils/adt/arrayfuncs.c:584 +#: utils/adt/arrayfuncs.c:591 utils/adt/arrayfuncs.c:599 +#: utils/adt/arrayfuncs.c:633 utils/adt/arrayfuncs.c:656 +#: utils/adt/arrayfuncs.c:676 utils/adt/arrayfuncs.c:788 +#: utils/adt/arrayfuncs.c:797 utils/adt/arrayfuncs.c:827 +#: utils/adt/arrayfuncs.c:842 utils/adt/arrayfuncs.c:895 #, c-format msgid "malformed array literal: \"%s\"" msgstr "literal de array no es válido: «%s»" -#: utils/adt/arrayfuncs.c:242 +#: utils/adt/arrayfuncs.c:272 #, c-format msgid "\"[\" must introduce explicitly-specified array dimensions." msgstr "Un «[» debe introducir dimensiones de array especificadas explícitamente." -#: utils/adt/arrayfuncs.c:256 +#: utils/adt/arrayfuncs.c:286 #, c-format msgid "Missing array dimension value." msgstr "Falta un valor de dimensión de array." -#: utils/adt/arrayfuncs.c:267 utils/adt/arrayfuncs.c:304 +#: utils/adt/arrayfuncs.c:297 utils/adt/arrayfuncs.c:334 #, c-format msgid "Missing \"%s\" after array dimensions." msgstr "Falta «%s» luego de las dimensiones de array." -#: utils/adt/arrayfuncs.c:276 utils/adt/arrayfuncs.c:2482 -#: utils/adt/arrayfuncs.c:2510 utils/adt/arrayfuncs.c:2525 +#: utils/adt/arrayfuncs.c:306 utils/adt/arrayfuncs.c:2848 +#: utils/adt/arrayfuncs.c:2876 utils/adt/arrayfuncs.c:2891 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "el límite superior no puede ser menor que el límite inferior" -#: utils/adt/arrayfuncs.c:289 +#: utils/adt/arrayfuncs.c:319 #, c-format msgid "Array value must start with \"{\" or dimension information." msgstr "El valor de array debe comenzar con «{» o información de dimensión." -#: utils/adt/arrayfuncs.c:318 +#: utils/adt/arrayfuncs.c:348 #, c-format msgid "Array contents must start with \"{\"." msgstr "El contenido del array debe empezar con «{»." -#: utils/adt/arrayfuncs.c:324 utils/adt/arrayfuncs.c:331 +#: utils/adt/arrayfuncs.c:354 utils/adt/arrayfuncs.c:361 #, c-format msgid "Specified array dimensions do not match array contents." msgstr "Las dimensiones del array especificadas no coinciden con el contenido del array." -#: utils/adt/arrayfuncs.c:462 utils/adt/arrayfuncs.c:489 -#: utils/adt/rangetypes.c:2083 utils/adt/rangetypes.c:2091 -#: utils/adt/rowtypes.c:208 utils/adt/rowtypes.c:216 +#: utils/adt/arrayfuncs.c:492 utils/adt/arrayfuncs.c:519 +#: utils/adt/rangetypes.c:2111 utils/adt/rangetypes.c:2119 +#: utils/adt/rowtypes.c:205 utils/adt/rowtypes.c:213 #, c-format msgid "Unexpected end of input." msgstr "Fin inesperado de la entrada." -#: utils/adt/arrayfuncs.c:478 utils/adt/arrayfuncs.c:525 -#: utils/adt/arrayfuncs.c:555 utils/adt/arrayfuncs.c:604 +#: utils/adt/arrayfuncs.c:508 utils/adt/arrayfuncs.c:555 +#: utils/adt/arrayfuncs.c:585 utils/adt/arrayfuncs.c:634 #, c-format msgid "Unexpected \"%c\" character." msgstr "Carácter «%c» inesperado." -#: utils/adt/arrayfuncs.c:504 utils/adt/arrayfuncs.c:627 +#: utils/adt/arrayfuncs.c:534 utils/adt/arrayfuncs.c:657 #, c-format msgid "Unexpected array element." msgstr "Elemento de array inesperado." -#: utils/adt/arrayfuncs.c:562 +#: utils/adt/arrayfuncs.c:592 #, c-format msgid "Unmatched \"%c\" character." msgstr "Carácter «%c» sin pareja" -#: utils/adt/arrayfuncs.c:570 +#: utils/adt/arrayfuncs.c:600 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "Los arrays multidimensionales deben tener sub-arrays con dimensiones coincidentes." -#: utils/adt/arrayfuncs.c:647 +#: utils/adt/arrayfuncs.c:677 #, c-format msgid "Junk after closing right brace." msgstr "Basura después de la llave derecha de cierre." -#: utils/adt/arrayfuncs.c:904 utils/adt/arrayfuncs.c:1506 -#: utils/adt/arrayfuncs.c:2841 utils/adt/arrayfuncs.c:2989 -#: utils/adt/arrayfuncs.c:5082 utils/adt/arrayfuncs.c:5414 -#: utils/adt/arrayutils.c:93 utils/adt/arrayutils.c:102 -#: utils/adt/arrayutils.c:109 -#, c-format -msgid "array size exceeds the maximum allowed (%d)" -msgstr "el tamaño del array excede el máximo permitido (%d)" - -#: utils/adt/arrayfuncs.c:1282 +#: utils/adt/arrayfuncs.c:1298 #, c-format msgid "invalid array flags" msgstr "opciones de array no válidas" -#: utils/adt/arrayfuncs.c:1290 +#: utils/adt/arrayfuncs.c:1306 #, c-format msgid "wrong element type" msgstr "el tipo de elemento es erróneo" -#: utils/adt/arrayfuncs.c:1340 utils/adt/rangetypes.c:325 -#: utils/cache/lsyscache.c:2549 +#: utils/adt/arrayfuncs.c:1356 utils/adt/rangetypes.c:325 +#: utils/cache/lsyscache.c:2586 #, c-format msgid "no binary input function available for type %s" msgstr "no hay una función binaria de entrada para el tipo %s" -#: utils/adt/arrayfuncs.c:1480 +#: utils/adt/arrayfuncs.c:1496 #, c-format msgid "improper binary format in array element %d" msgstr "el formato binario no es válido en elemento %d de array" -#: utils/adt/arrayfuncs.c:1562 utils/adt/rangetypes.c:330 -#: utils/cache/lsyscache.c:2582 +#: utils/adt/arrayfuncs.c:1577 utils/adt/rangetypes.c:330 +#: utils/cache/lsyscache.c:2619 #, c-format msgid "no binary output function available for type %s" msgstr "no hay una función binaria de salida para el tipo %s" -#: utils/adt/arrayfuncs.c:1949 +#: utils/adt/arrayfuncs.c:2048 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "no está implementada la obtención de segmentos de arrays de largo fijo" -#: utils/adt/arrayfuncs.c:2122 utils/adt/arrayfuncs.c:2144 -#: utils/adt/arrayfuncs.c:2178 utils/adt/arrayfuncs.c:2464 -#: utils/adt/arrayfuncs.c:4962 utils/adt/arrayfuncs.c:4994 -#: utils/adt/arrayfuncs.c:5011 utils/adt/json.c:2211 utils/adt/json.c:2286 +#: utils/adt/arrayfuncs.c:2226 utils/adt/arrayfuncs.c:2248 +#: utils/adt/arrayfuncs.c:2297 utils/adt/arrayfuncs.c:2533 +#: utils/adt/arrayfuncs.c:2830 utils/adt/arrayfuncs.c:5718 +#: utils/adt/arrayfuncs.c:5750 utils/adt/arrayfuncs.c:5767 +#: utils/adt/json.c:2286 utils/adt/json.c:2361 utils/adt/jsonb.c:1391 +#: utils/adt/jsonb.c:1477 utils/adt/jsonfuncs.c:3528 +#: utils/adt/jsonfuncs.c:3573 #, c-format msgid "wrong number of array subscripts" msgstr "número incorrecto de subíndices del array" -#: utils/adt/arrayfuncs.c:2127 utils/adt/arrayfuncs.c:2220 -#: utils/adt/arrayfuncs.c:2515 +#: utils/adt/arrayfuncs.c:2231 utils/adt/arrayfuncs.c:2339 +#: utils/adt/arrayfuncs.c:2597 utils/adt/arrayfuncs.c:2881 #, c-format msgid "array subscript out of range" msgstr "los subíndices de arrays están fuera de rango" -#: utils/adt/arrayfuncs.c:2132 +#: utils/adt/arrayfuncs.c:2236 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "no se puede asignar un valor nulo a un elemento de un array de longitud fija" -#: utils/adt/arrayfuncs.c:2418 +#: utils/adt/arrayfuncs.c:2784 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "no están implementadas las actualizaciones en segmentos de arrays de largo fija" -#: utils/adt/arrayfuncs.c:2454 utils/adt/arrayfuncs.c:2541 +#: utils/adt/arrayfuncs.c:2820 utils/adt/arrayfuncs.c:2907 #, c-format msgid "source array too small" msgstr "el array de origen es demasiado pequeño" -#: utils/adt/arrayfuncs.c:3096 +#: utils/adt/arrayfuncs.c:3487 #, c-format msgid "null array element not allowed in this context" msgstr "los arrays con elementos null no son permitidos en este contexto" -#: utils/adt/arrayfuncs.c:3199 utils/adt/arrayfuncs.c:3407 -#: utils/adt/arrayfuncs.c:3724 +#: utils/adt/arrayfuncs.c:3589 utils/adt/arrayfuncs.c:3760 +#: utils/adt/arrayfuncs.c:4034 #, c-format msgid "cannot compare arrays of different element types" msgstr "no se pueden comparar arrays con elementos de distintos tipos" -#: utils/adt/arrayfuncs.c:3609 utils/adt/rangetypes.c:1212 +#: utils/adt/arrayfuncs.c:3936 utils/adt/rangetypes.c:1240 #, c-format msgid "could not identify a hash function for type %s" msgstr "no se pudo identificar una función de hash para el tipo %s" -#: utils/adt/arrayfuncs.c:4860 utils/adt/arrayfuncs.c:4900 +#: utils/adt/arrayfuncs.c:5130 +#, fuzzy, c-format +msgid "data type %s is not an array type" +msgstr "el tipo de destino no es un array" + +#: utils/adt/arrayfuncs.c:5187 +#, fuzzy, c-format +msgid "cannot accumulate null arrays" +msgstr "no se pueden concatenar arrays incompatibles" + +#: utils/adt/arrayfuncs.c:5215 +#, fuzzy, c-format +msgid "cannot accumulate empty arrays" +msgstr "no se pueden concatenar arrays incompatibles" + +#: utils/adt/arrayfuncs.c:5244 utils/adt/arrayfuncs.c:5250 +#, fuzzy, c-format +msgid "cannot accumulate arrays of different dimensionality" +msgstr "no se pueden comparar arrays con elementos de distintos tipos" + +#: utils/adt/arrayfuncs.c:5616 utils/adt/arrayfuncs.c:5656 #, 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:4963 utils/adt/arrayfuncs.c:4995 +#: utils/adt/arrayfuncs.c:5719 utils/adt/arrayfuncs.c:5751 #, c-format msgid "Dimension array must be one dimensional." msgstr "El array de dimensiones debe ser unidimensional." -#: utils/adt/arrayfuncs.c:4968 utils/adt/arrayfuncs.c:5000 +#: utils/adt/arrayfuncs.c:5724 utils/adt/arrayfuncs.c:5756 #, c-format msgid "wrong range of array subscripts" msgstr "rango incorrecto en los subíndices del array" -#: utils/adt/arrayfuncs.c:4969 utils/adt/arrayfuncs.c:5001 +#: utils/adt/arrayfuncs.c:5725 utils/adt/arrayfuncs.c:5757 #, c-format msgid "Lower bound of dimension array must be one." msgstr "El límite inferior del array de dimensiones debe ser uno." -#: utils/adt/arrayfuncs.c:4974 utils/adt/arrayfuncs.c:5006 +#: utils/adt/arrayfuncs.c:5730 utils/adt/arrayfuncs.c:5762 #, c-format msgid "dimension values cannot be null" msgstr "los valores de dimensión no pueden ser null" -#: utils/adt/arrayfuncs.c:5012 +#: utils/adt/arrayfuncs.c:5768 #, 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:5279 +#: utils/adt/arrayfuncs.c:6014 #, 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:6291 +#, fuzzy, c-format +msgid "thresholds must be one-dimensional array" +msgstr "el argumento debe ser vacío o un array unidimensional" + +#: utils/adt/arrayfuncs.c:6296 +#, fuzzy, c-format +msgid "thresholds array must not contain NULLs" +msgstr "los arrays de typmod no deben contener valores nulos" + #: utils/adt/arrayutils.c:209 #, c-format msgid "typmod array must be type cstring[]" @@ -15754,12 +17071,12 @@ msgstr "la sintaxis de entrada no es válida para tipo money: «%s»" #: utils/adt/cash.c:607 utils/adt/cash.c:657 utils/adt/cash.c:708 #: utils/adt/cash.c:757 utils/adt/cash.c:809 utils/adt/cash.c:859 #: utils/adt/float.c:788 utils/adt/float.c:852 utils/adt/float.c:2530 -#: utils/adt/float.c:2593 utils/adt/geo_ops.c:4115 utils/adt/int.c:719 +#: utils/adt/float.c:2593 utils/adt/geo_ops.c:4152 utils/adt/int.c:719 #: utils/adt/int.c:861 utils/adt/int.c:969 utils/adt/int.c:1058 #: utils/adt/int.c:1097 utils/adt/int.c:1125 utils/adt/int8.c:597 #: utils/adt/int8.c:657 utils/adt/int8.c:897 utils/adt/int8.c:1005 -#: utils/adt/int8.c:1094 utils/adt/int8.c:1202 utils/adt/numeric.c:4961 -#: utils/adt/numeric.c:5244 utils/adt/timestamp.c:3357 +#: utils/adt/int8.c:1094 utils/adt/int8.c:1202 utils/adt/numeric.c:5917 +#: utils/adt/numeric.c:6200 utils/adt/timestamp.c:3350 #, c-format msgid "division by zero" msgstr "división por cero" @@ -15769,7 +17086,7 @@ msgstr "división por cero" msgid "\"char\" out of range" msgstr "«char» está fuera de rango" -#: utils/adt/date.c:68 utils/adt/timestamp.c:102 utils/adt/varbit.c:52 +#: utils/adt/date.c:68 utils/adt/timestamp.c:95 utils/adt/varbit.c:52 #: utils/adt/varchar.c:44 #, c-format msgid "invalid type modifier" @@ -15790,22 +17107,22 @@ msgstr "la precisión de TIME(%d)%s fue reducida al máximo permitido, %d" msgid "date/time value \"current\" is no longer supported" msgstr "valor de hora/fecha «current» ya no está soportado" -#: utils/adt/date.c:167 utils/adt/formatting.c:3411 +#: utils/adt/date.c:167 utils/adt/formatting.c:3523 #, c-format msgid "date out of range: \"%s\"" msgstr "fecha fuera de rango: «%s»" -#: utils/adt/date.c:217 utils/adt/json.c:1431 utils/adt/xml.c:2024 +#: utils/adt/date.c:217 utils/adt/xml.c:2029 #, c-format msgid "date out of range" msgstr "la fecha fuera de rango" -#: utils/adt/date.c:259 utils/adt/timestamp.c:600 +#: utils/adt/date.c:259 utils/adt/timestamp.c:593 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "un valor en el campo de fecha está fuera de rango: %d-%02d-%02d" -#: utils/adt/date.c:265 utils/adt/timestamp.c:606 +#: utils/adt/date.c:265 utils/adt/timestamp.c:599 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "fecha fuera de rango: %d-%02d-%02d" @@ -15821,28 +17138,28 @@ msgid "date out of range for timestamp" msgstr "fecha fuera de rango para timestamp" #: utils/adt/date.c:971 utils/adt/date.c:1017 utils/adt/date.c:1617 -#: utils/adt/date.c:1653 utils/adt/date.c:2525 utils/adt/formatting.c:3287 -#: utils/adt/formatting.c:3319 utils/adt/formatting.c:3387 -#: utils/adt/json.c:1456 utils/adt/json.c:1463 utils/adt/json.c:1483 -#: utils/adt/json.c:1490 utils/adt/nabstime.c:455 utils/adt/nabstime.c:498 -#: utils/adt/nabstime.c:528 utils/adt/nabstime.c:571 utils/adt/timestamp.c:232 -#: utils/adt/timestamp.c:275 utils/adt/timestamp.c:724 -#: utils/adt/timestamp.c:753 utils/adt/timestamp.c:792 -#: utils/adt/timestamp.c:2946 utils/adt/timestamp.c:2967 -#: utils/adt/timestamp.c:2980 utils/adt/timestamp.c:2989 -#: utils/adt/timestamp.c:3046 utils/adt/timestamp.c:3069 -#: utils/adt/timestamp.c:3082 utils/adt/timestamp.c:3093 -#: utils/adt/timestamp.c:3618 utils/adt/timestamp.c:3747 -#: utils/adt/timestamp.c:3788 utils/adt/timestamp.c:3876 -#: utils/adt/timestamp.c:3922 utils/adt/timestamp.c:4033 -#: utils/adt/timestamp.c:4357 utils/adt/timestamp.c:4496 -#: utils/adt/timestamp.c:4506 utils/adt/timestamp.c:4568 -#: utils/adt/timestamp.c:4708 utils/adt/timestamp.c:4718 -#: utils/adt/timestamp.c:4932 utils/adt/timestamp.c:4946 -#: utils/adt/timestamp.c:5025 utils/adt/timestamp.c:5032 -#: utils/adt/timestamp.c:5058 utils/adt/timestamp.c:5062 -#: utils/adt/timestamp.c:5131 utils/adt/xml.c:2046 utils/adt/xml.c:2053 -#: utils/adt/xml.c:2073 utils/adt/xml.c:2080 +#: utils/adt/date.c:1653 utils/adt/date.c:2525 utils/adt/formatting.c:3399 +#: utils/adt/formatting.c:3431 utils/adt/formatting.c:3499 +#: utils/adt/json.c:1526 utils/adt/json.c:1553 utils/adt/jsonb.c:840 +#: utils/adt/jsonb.c:869 utils/adt/nabstime.c:455 utils/adt/nabstime.c:498 +#: utils/adt/nabstime.c:528 utils/adt/nabstime.c:571 utils/adt/timestamp.c:225 +#: utils/adt/timestamp.c:268 utils/adt/timestamp.c:717 +#: utils/adt/timestamp.c:746 utils/adt/timestamp.c:785 +#: utils/adt/timestamp.c:2939 utils/adt/timestamp.c:2960 +#: utils/adt/timestamp.c:2973 utils/adt/timestamp.c:2982 +#: utils/adt/timestamp.c:3039 utils/adt/timestamp.c:3062 +#: utils/adt/timestamp.c:3075 utils/adt/timestamp.c:3086 +#: utils/adt/timestamp.c:3611 utils/adt/timestamp.c:3740 +#: utils/adt/timestamp.c:3781 utils/adt/timestamp.c:3869 +#: utils/adt/timestamp.c:3915 utils/adt/timestamp.c:4026 +#: utils/adt/timestamp.c:4350 utils/adt/timestamp.c:4466 +#: utils/adt/timestamp.c:4476 utils/adt/timestamp.c:4561 +#: utils/adt/timestamp.c:4680 utils/adt/timestamp.c:4690 +#: utils/adt/timestamp.c:5006 utils/adt/timestamp.c:5020 +#: utils/adt/timestamp.c:5145 utils/adt/timestamp.c:5152 +#: utils/adt/timestamp.c:5178 utils/adt/timestamp.c:5182 +#: utils/adt/timestamp.c:5251 utils/adt/xml.c:2051 utils/adt/xml.c:2058 +#: utils/adt/xml.c:2078 utils/adt/xml.c:2085 #, c-format msgid "timestamp out of range" msgstr "el timestamp está fuera de rango" @@ -15858,7 +17175,7 @@ msgstr "no se puede convertir un valor reservado de abstime a date" msgid "time out of range" msgstr "hora fuera de rango" -#: utils/adt/date.c:1265 utils/adt/timestamp.c:625 +#: utils/adt/date.c:1265 utils/adt/timestamp.c:618 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "un valor en el campo de hora está fuera de rango: %d:%02d:%02g" @@ -15879,14 +17196,14 @@ msgid "\"time with time zone\" units \"%s\" not recognized" msgstr "las unidades de «timestamp with time zone» «%s» no son reconocidas" #: utils/adt/date.c:2745 utils/adt/datetime.c:925 utils/adt/datetime.c:1805 -#: utils/adt/datetime.c:4566 utils/adt/timestamp.c:539 -#: utils/adt/timestamp.c:566 utils/adt/timestamp.c:4958 -#: utils/adt/timestamp.c:5142 +#: utils/adt/datetime.c:4566 utils/adt/timestamp.c:532 +#: utils/adt/timestamp.c:559 utils/adt/timestamp.c:5032 +#: utils/adt/timestamp.c:5262 #, c-format msgid "time zone \"%s\" not recognized" msgstr "el huso horario «%s» no es reconocido" -#: utils/adt/date.c:2785 utils/adt/timestamp.c:4983 utils/adt/timestamp.c:5168 +#: utils/adt/date.c:2785 utils/adt/timestamp.c:5103 utils/adt/timestamp.c:5288 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "el intervalo de huso horario «%s» no debe especificar meses o días" @@ -15927,7 +17244,7 @@ msgstr "la sintaxis de entrada no es válida para tipo %s: «%s»" msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "Este nombre de huso horario aparece en el archivo de configuración para abreviaciones de husos horarios «%s»." -#: utils/adt/datum.c:80 utils/adt/datum.c:92 +#: utils/adt/datum.c:86 utils/adt/datum.c:98 #, c-format msgid "invalid Datum pointer" msgstr "puntero a Datum no válido" @@ -15937,7 +17254,7 @@ msgstr "puntero a Datum no válido" msgid "could not open tablespace directory \"%s\": %m" msgstr "no se pudo abrir el directorio de tablespace «%s»: %m" -#: utils/adt/domains.c:83 +#: utils/adt/domains.c:85 #, c-format msgid "type %s is not a domain" msgstr "tipo «%s» no es un dominio" @@ -15959,21 +17276,26 @@ msgstr "el dato hexadecimal no es válido: tiene un número impar de dígitos" #: utils/adt/encode.c:295 #, c-format -msgid "unexpected \"=\"" -msgstr "«=» inesperado" +msgid "unexpected \"=\" while decoding base64 sequence" +msgstr "" #: utils/adt/encode.c:307 -#, c-format -msgid "invalid symbol" -msgstr "símbolo no válido" +#, fuzzy, c-format +msgid "invalid symbol '%c' while decoding base64 sequence" +msgstr "la codificación de origen «%s» no es válida" #: utils/adt/encode.c:327 -#, c-format -msgid "invalid end sequence" +#, fuzzy, c-format +msgid "invalid base64 end sequence" msgstr "secuencia de término no válida" -#: utils/adt/encode.c:441 utils/adt/encode.c:506 utils/adt/varlena.c:255 -#: utils/adt/varlena.c:296 +#: utils/adt/encode.c:328 +#, c-format +msgid "Input data is missing padding, truncated, or otherwise corrupted." +msgstr "" + +#: utils/adt/encode.c:442 utils/adt/encode.c:507 utils/adt/varlena.c:287 +#: utils/adt/varlena.c:328 #, c-format msgid "invalid input syntax for type bytea" msgstr "sintaxis de entrada no válida para tipo bytea" @@ -15989,13 +17311,13 @@ msgstr "la sintaxis de entrada no es válida para el enum %s: «%s»" msgid "invalid internal value for enum: %u" msgstr "el valor interno no es válido para enum: %u" -#: utils/adt/enum.c:357 utils/adt/enum.c:386 utils/adt/enum.c:426 -#: utils/adt/enum.c:446 +#: utils/adt/enum.c:356 utils/adt/enum.c:385 utils/adt/enum.c:425 +#: utils/adt/enum.c:445 #, c-format msgid "could not determine actual enum type" msgstr "no se pudo determinar el tipo enum efectivo" -#: utils/adt/enum.c:365 utils/adt/enum.c:394 +#: utils/adt/enum.c:364 utils/adt/enum.c:393 #, c-format msgid "enum %s contains no values" msgstr "el enum %s no contiene valores" @@ -16021,7 +17343,7 @@ msgid "\"%s\" is out of range for type real" msgstr "«%s» está fuera de rango para el tipo real" #: utils/adt/float.c:417 utils/adt/float.c:491 utils/adt/float.c:515 -#: utils/adt/numeric.c:4423 utils/adt/numeric.c:4449 +#: utils/adt/numeric.c:5373 utils/adt/numeric.c:5399 #, c-format msgid "invalid input syntax for type double precision: \"%s\"" msgstr "la sintaxis de entrada no es válida para tipo double precision: «%s»" @@ -16034,32 +17356,32 @@ msgstr "«%s» está fuera de rango para el tipo double precision" #: utils/adt/float.c:1179 utils/adt/float.c:1237 utils/adt/int.c:349 #: utils/adt/int.c:775 utils/adt/int.c:804 utils/adt/int.c:825 #: utils/adt/int.c:845 utils/adt/int.c:879 utils/adt/int.c:1174 -#: utils/adt/int8.c:1323 utils/adt/numeric.c:2401 utils/adt/numeric.c:2410 +#: utils/adt/int8.c:1323 utils/adt/numeric.c:3000 utils/adt/numeric.c:3009 #, c-format msgid "smallint out of range" msgstr "smallint está fuera de rango" -#: utils/adt/float.c:1363 utils/adt/numeric.c:5637 +#: utils/adt/float.c:1363 utils/adt/numeric.c:6593 #, 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:1405 utils/adt/numeric.c:2221 +#: utils/adt/float.c:1405 utils/adt/numeric.c:2820 #, c-format msgid "zero raised to a negative power is undefined" msgstr "cero elevado a una potencia negativa es indefinido" -#: utils/adt/float.c:1409 utils/adt/numeric.c:2227 +#: utils/adt/float.c:1409 utils/adt/numeric.c:2826 #, 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:1475 utils/adt/float.c:1505 utils/adt/numeric.c:5855 +#: utils/adt/float.c:1475 utils/adt/float.c:1505 utils/adt/numeric.c:6811 #, c-format msgid "cannot take logarithm of zero" msgstr "no se puede calcular logaritmo de cero" -#: utils/adt/float.c:1479 utils/adt/float.c:1509 utils/adt/numeric.c:5859 +#: utils/adt/float.c:1479 utils/adt/float.c:1509 utils/adt/numeric.c:6815 #, c-format msgid "cannot take logarithm of a negative number" msgstr "no se puede calcular logaritmo de un número negativo" @@ -16071,12 +17393,12 @@ msgstr "no se puede calcular logaritmo de un número negativo" msgid "input is out of range" msgstr "la entrada está fuera de rango" -#: utils/adt/float.c:2747 utils/adt/numeric.c:1274 +#: utils/adt/float.c:2747 utils/adt/numeric.c:1454 #, c-format msgid "count must be greater than zero" msgstr "count debe ser mayor que cero" -#: utils/adt/float.c:2752 utils/adt/numeric.c:1281 +#: utils/adt/float.c:2752 utils/adt/numeric.c:1461 #, 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" @@ -16086,7 +17408,7 @@ msgstr "el operando, límite inferior y límite superior no pueden ser NaN" msgid "lower and upper bounds must be finite" msgstr "los límites inferior y superior deben ser finitos" -#: utils/adt/float.c:2796 utils/adt/numeric.c:1294 +#: utils/adt/float.c:2796 utils/adt/numeric.c:1474 #, c-format msgid "lower bound cannot equal upper bound" msgstr "el límite superior no puede ser igual al límite inferior" @@ -16101,363 +17423,372 @@ msgstr "especificación de formato no válida para un valor de interval" msgid "Intervals are not tied to specific calendar dates." msgstr "Los Interval no están ... a valores determinados de fechas de calendario." -#: utils/adt/formatting.c:1055 +#: utils/adt/formatting.c:1059 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "«EEEE» debe ser el último patrón usado" -#: utils/adt/formatting.c:1063 +#: utils/adt/formatting.c:1067 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "«9» debe ir antes de «PR»" -#: utils/adt/formatting.c:1079 +#: utils/adt/formatting.c:1083 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "«0» debe ir antes de «PR»" -#: utils/adt/formatting.c:1106 +#: utils/adt/formatting.c:1110 #, c-format msgid "multiple decimal points" msgstr "hay múltiples puntos decimales" -#: utils/adt/formatting.c:1110 utils/adt/formatting.c:1193 +#: utils/adt/formatting.c:1114 utils/adt/formatting.c:1197 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "no se puede usar «V» y un punto decimal simultáneamente" -#: utils/adt/formatting.c:1122 +#: utils/adt/formatting.c:1126 #, c-format msgid "cannot use \"S\" twice" msgstr "no se puede usar «S» dos veces" -#: utils/adt/formatting.c:1126 +#: utils/adt/formatting.c:1130 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "no se puede usar «S» y «PL»/«MI»/«SG»/«PR» simultáneamente" -#: utils/adt/formatting.c:1146 +#: utils/adt/formatting.c:1150 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "no se puede usar «S» y «MI» simultáneamente" -#: utils/adt/formatting.c:1156 +#: utils/adt/formatting.c:1160 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "no se puede usar «S» y «PL» simultáneamente" -#: utils/adt/formatting.c:1166 +#: utils/adt/formatting.c:1170 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "no se puede usar «S» y «SG» simultáneamente" -#: utils/adt/formatting.c:1175 +#: utils/adt/formatting.c:1179 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "no se puede usar «PR» y «S»/«PL»/«MI»/«SG» simultáneamente" -#: utils/adt/formatting.c:1201 +#: utils/adt/formatting.c:1205 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "no se puede usar «EEEE» dos veces" -#: utils/adt/formatting.c:1207 +#: utils/adt/formatting.c:1211 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "«EEEE» es incompatible con otros formatos" -#: utils/adt/formatting.c:1208 +#: utils/adt/formatting.c:1212 #, c-format msgid "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "«EEEE» sólo puede ser usado en conjunción con patrones de dígitos y puntos decimales." -#: utils/adt/formatting.c:1408 +#: utils/adt/formatting.c:1412 #, c-format msgid "\"%s\" is not a number" msgstr "«%s» no es un número" -#: utils/adt/formatting.c:1509 utils/adt/formatting.c:1561 +#: utils/adt/formatting.c:1513 utils/adt/formatting.c:1565 #, c-format msgid "could not determine which collation to use for lower() function" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la función lower()" -#: utils/adt/formatting.c:1629 utils/adt/formatting.c:1681 +#: utils/adt/formatting.c:1633 utils/adt/formatting.c:1685 #, c-format msgid "could not determine which collation to use for upper() function" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la función upper()" -#: utils/adt/formatting.c:1750 utils/adt/formatting.c:1814 +#: utils/adt/formatting.c:1754 utils/adt/formatting.c:1818 #, c-format msgid "could not determine which collation to use for initcap() function" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la función initcap()" -#: utils/adt/formatting.c:2118 +#: utils/adt/formatting.c:2122 #, c-format msgid "invalid combination of date conventions" msgstr "combinacion invalida de convenciones de fecha" -#: utils/adt/formatting.c:2119 +#: utils/adt/formatting.c:2123 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr " No mezclar convenciones de semana Gregorianas e ISO en una plantilla formateada" -#: utils/adt/formatting.c:2136 +#: utils/adt/formatting.c:2140 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "valores en conflicto para le campo \"%s\" en cadena de formato" -#: utils/adt/formatting.c:2138 +#: utils/adt/formatting.c:2142 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Este valor se contradice con un seteo previo para el mismo tipo de campo" -#: utils/adt/formatting.c:2199 +#: utils/adt/formatting.c:2203 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "cadena de texto fuente muy corta para campo formateado \"%s\" " -#: utils/adt/formatting.c:2201 +#: utils/adt/formatting.c:2205 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "El campo requiere %d caractéres, pero solo quedan %d." -#: utils/adt/formatting.c:2204 utils/adt/formatting.c:2218 +#: utils/adt/formatting.c:2208 utils/adt/formatting.c:2222 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "Si su cadena de texto no es de ancho modificado, trate de usar el modificador \"FM\" " -#: utils/adt/formatting.c:2214 utils/adt/formatting.c:2227 -#: utils/adt/formatting.c:2357 +#: utils/adt/formatting.c:2218 utils/adt/formatting.c:2231 +#: utils/adt/formatting.c:2361 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "el valor «%s» no es válido para «%s»" -#: utils/adt/formatting.c:2216 +#: utils/adt/formatting.c:2220 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "El campo requiere %d caracteres, pero sólo %d pudieron ser analizados." -#: utils/adt/formatting.c:2229 +#: utils/adt/formatting.c:2233 #, c-format msgid "Value must be an integer." msgstr "El valor debe ser un entero." -#: utils/adt/formatting.c:2234 +#: utils/adt/formatting.c:2238 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "el valor para «%s» en la cadena de origen está fuera de rango" -#: utils/adt/formatting.c:2236 +#: utils/adt/formatting.c:2240 #, c-format msgid "Value must be in the range %d to %d." msgstr "El valor debe estar en el rango de %d a %d." -#: utils/adt/formatting.c:2359 +#: utils/adt/formatting.c:2363 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "El valor dado no concuerda con ninguno de los valores permitidos para este campo." -#: utils/adt/formatting.c:2932 +#: utils/adt/formatting.c:2551 utils/adt/formatting.c:2571 +#: utils/adt/formatting.c:2591 utils/adt/formatting.c:2611 +#: utils/adt/formatting.c:2630 utils/adt/formatting.c:2649 +#: utils/adt/formatting.c:2672 utils/adt/formatting.c:2690 +#: utils/adt/formatting.c:2708 utils/adt/formatting.c:2726 +#: utils/adt/formatting.c:2743 utils/adt/formatting.c:2760 +#, c-format +msgid "localized string format value too long" +msgstr "cadena traducida en cadena de formato es demasiado larga" + +#: utils/adt/formatting.c:3044 #, c-format msgid "\"TZ\"/\"tz\"/\"OF\" format patterns are not supported in to_date" msgstr "los patrones de formato «TZ»/«tz»/«OF» no están soportados en to_date" -#: utils/adt/formatting.c:3040 +#: utils/adt/formatting.c:3152 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "cadena de entrada no válida para «Y,YYY»" -#: utils/adt/formatting.c:3543 +#: utils/adt/formatting.c:3655 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "la hora «%d» no es válida para el reloj de 12 horas" -#: utils/adt/formatting.c:3545 +#: utils/adt/formatting.c:3657 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Use el reloj de 24 horas, o entregue una hora entre 1 y 12." -#: utils/adt/formatting.c:3640 +#: utils/adt/formatting.c:3752 #, c-format msgid "cannot calculate day of year without year information" msgstr "no se puede calcular el día del año sin conocer el año" -#: utils/adt/formatting.c:4490 +#: utils/adt/formatting.c:4601 #, c-format msgid "\"EEEE\" not supported for input" msgstr "«EEEE» no está soportado en la entrada" -#: utils/adt/formatting.c:4502 +#: utils/adt/formatting.c:4613 #, c-format msgid "\"RN\" not supported for input" msgstr "«RN» no está soportado en la entrada" -#: utils/adt/genfile.c:61 +#: utils/adt/genfile.c:62 #, c-format msgid "reference to parent directory (\"..\") not allowed" msgstr "no se permiten referencias a directorios padre («..»)" -#: utils/adt/genfile.c:72 +#: utils/adt/genfile.c:73 #, c-format msgid "absolute path not allowed" msgstr "no se permiten rutas absolutas" -#: utils/adt/genfile.c:77 +#: utils/adt/genfile.c:78 #, c-format msgid "path must be in or below the current directory" msgstr "la ruta debe estar en o debajo del directorio actual" -#: utils/adt/genfile.c:118 utils/adt/oracle_compat.c:184 +#: utils/adt/genfile.c:125 utils/adt/oracle_compat.c:184 #: utils/adt/oracle_compat.c:282 utils/adt/oracle_compat.c:758 #: utils/adt/oracle_compat.c:1059 #, c-format msgid "requested length too large" msgstr "el tamaño solicitado es demasiado grande" -#: utils/adt/genfile.c:130 +#: utils/adt/genfile.c:142 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "no se pudo posicionar (seek) el archivo «%s»: %m" -#: utils/adt/genfile.c:180 utils/adt/genfile.c:204 utils/adt/genfile.c:225 -#: utils/adt/genfile.c:249 +#: utils/adt/genfile.c:200 utils/adt/genfile.c:241 #, c-format msgid "must be superuser to read files" msgstr "debe ser superusuario para leer archivos" -#: utils/adt/genfile.c:273 +#: utils/adt/genfile.c:318 #, c-format msgid "must be superuser to get file information" msgstr "debe ser superusuario obtener información de archivos" -#: utils/adt/genfile.c:337 +#: utils/adt/genfile.c:404 #, c-format msgid "must be superuser to get directory listings" msgstr "debe ser superusuario para obtener listados de directorio" -#: utils/adt/geo_ops.c:299 utils/adt/geo_ops.c:1398 utils/adt/geo_ops.c:3460 -#: utils/adt/geo_ops.c:4236 utils/adt/geo_ops.c:5165 +#: utils/adt/geo_ops.c:300 utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3497 +#: utils/adt/geo_ops.c:4312 utils/adt/geo_ops.c:5256 #, c-format msgid "too many points requested" msgstr "se pidieron demasiados puntos" -#: utils/adt/geo_ops.c:322 +#: utils/adt/geo_ops.c:323 #, c-format msgid "could not format \"path\" value" msgstr "no se pudo dar formato a «path»" -#: utils/adt/geo_ops.c:397 +#: utils/adt/geo_ops.c:398 #, c-format msgid "invalid input syntax for type box: \"%s\"" msgstr "la sintaxis de entrada no es válida para tipo box: «%s»" -#: utils/adt/geo_ops.c:992 +#: utils/adt/geo_ops.c:993 #, c-format msgid "invalid line specification: must be two distinct points" msgstr "especificación de línea no válida: deben ser dos puntos distintos" -#: utils/adt/geo_ops.c:1001 +#: utils/adt/geo_ops.c:1002 #, c-format msgid "invalid line specification: A and B cannot both be zero" msgstr "especificación de línea no válida: A y B no pueden ser ambos cero" -#: utils/adt/geo_ops.c:1006 +#: utils/adt/geo_ops.c:1007 #, c-format msgid "invalid input syntax for type line: \"%s\"" msgstr "la sintaxis de entrada no es válida para tipo line: «%s»" -#: utils/adt/geo_ops.c:1378 utils/adt/geo_ops.c:1409 +#: utils/adt/geo_ops.c:1379 utils/adt/geo_ops.c:1410 #, c-format msgid "invalid input syntax for type path: \"%s\"" msgstr "la sintaxis de entrada no es válida para tipo «path»: «%s»" -#: utils/adt/geo_ops.c:1448 +#: utils/adt/geo_ops.c:1449 #, c-format msgid "invalid number of points in external \"path\" value" msgstr "el número de puntos no es válido en el valor «path» externo" -#: utils/adt/geo_ops.c:1791 +#: utils/adt/geo_ops.c:1792 #, c-format msgid "invalid input syntax for type point: \"%s\"" msgstr "la sintaxis de entrada no es válida para tipo point: «%s»" -#: utils/adt/geo_ops.c:2019 +#: utils/adt/geo_ops.c:2020 #, c-format msgid "invalid input syntax for type lseg: \"%s\"" msgstr "la sintaxis de entrada no es válida para tipo lseg: «%s»" -#: utils/adt/geo_ops.c:2623 +#: utils/adt/geo_ops.c:2620 #, c-format msgid "function \"dist_lb\" not implemented" msgstr "la función «dist_lb» no está implementada" -#: utils/adt/geo_ops.c:3035 +#: utils/adt/geo_ops.c:3072 #, c-format msgid "function \"close_sl\" not implemented" msgstr "la función «close_sl» no está implementada" -#: utils/adt/geo_ops.c:3137 +#: utils/adt/geo_ops.c:3174 #, c-format msgid "function \"close_lb\" not implemented" msgstr "la función «close_lb» no está implementada" -#: utils/adt/geo_ops.c:3426 +#: utils/adt/geo_ops.c:3463 #, c-format msgid "cannot create bounding box for empty polygon" msgstr "no se puede crear una caja de contorno para un polígono vacío" -#: utils/adt/geo_ops.c:3451 utils/adt/geo_ops.c:3471 +#: utils/adt/geo_ops.c:3488 utils/adt/geo_ops.c:3508 #, c-format msgid "invalid input syntax for type polygon: \"%s\"" msgstr "la sintaxis de entrada no es válida para tipo polygon: «%s»" -#: utils/adt/geo_ops.c:3511 +#: utils/adt/geo_ops.c:3548 #, c-format msgid "invalid number of points in external \"polygon\" value" msgstr "el número de puntos no es válido en «polygon» externo" -#: utils/adt/geo_ops.c:4034 +#: utils/adt/geo_ops.c:4071 #, c-format msgid "function \"poly_distance\" not implemented" msgstr "la función «poly_distance» no está implementada" -#: utils/adt/geo_ops.c:4348 +#: utils/adt/geo_ops.c:4424 #, c-format msgid "function \"path_center\" not implemented" msgstr "la función «path_center» no está implementada" -#: utils/adt/geo_ops.c:4365 +#: utils/adt/geo_ops.c:4441 #, c-format msgid "open path cannot be converted to polygon" msgstr "no se puede convertir un camino abierto en polygon" -#: utils/adt/geo_ops.c:4542 utils/adt/geo_ops.c:4552 utils/adt/geo_ops.c:4567 -#: utils/adt/geo_ops.c:4573 +#: utils/adt/geo_ops.c:4618 utils/adt/geo_ops.c:4628 utils/adt/geo_ops.c:4643 +#: utils/adt/geo_ops.c:4649 #, c-format msgid "invalid input syntax for type circle: \"%s\"" msgstr "la sintaxis de entrada no es válida para el tipo circle: «%s»" -#: utils/adt/geo_ops.c:4595 utils/adt/geo_ops.c:4603 +#: utils/adt/geo_ops.c:4671 utils/adt/geo_ops.c:4679 #, c-format msgid "could not format \"circle\" value" msgstr "no se pudo dar formato al valor «circle»" -#: utils/adt/geo_ops.c:4630 +#: utils/adt/geo_ops.c:4706 #, c-format msgid "invalid radius in external \"circle\" value" msgstr "el radio no es válido en el valor «circle» externo" -#: utils/adt/geo_ops.c:5151 +#: utils/adt/geo_ops.c:5242 #, c-format msgid "cannot convert circle with radius zero to polygon" msgstr "no se puede convertir un círculo de radio cero a polygon" -#: utils/adt/geo_ops.c:5156 +#: utils/adt/geo_ops.c:5247 #, c-format msgid "must request at least 2 points" msgstr "debe pedir al menos 2 puntos" -#: utils/adt/geo_ops.c:5200 +#: utils/adt/geo_ops.c:5291 #, c-format msgid "cannot convert empty polygon to circle" msgstr "no se puede convertir polígono vacío a circle" @@ -16477,8 +17808,8 @@ msgstr "datos de int2vector no válidos" msgid "oidvector has too many elements" msgstr "el oidvector tiene demasiados elementos" -#: utils/adt/int.c:1362 utils/adt/int8.c:1460 utils/adt/timestamp.c:5229 -#: utils/adt/timestamp.c:5310 +#: utils/adt/int.c:1362 utils/adt/int8.c:1460 utils/adt/numeric.c:1362 +#: utils/adt/timestamp.c:5349 utils/adt/timestamp.c:5430 #, c-format msgid "step size cannot equal zero" msgstr "el tamaño de paso no puede ser cero" @@ -16502,7 +17833,7 @@ msgstr "el valor «%s» está fuera de rango para el tipo bigint" #: utils/adt/int8.c:964 utils/adt/int8.c:991 utils/adt/int8.c:1031 #: utils/adt/int8.c:1052 utils/adt/int8.c:1079 utils/adt/int8.c:1112 #: utils/adt/int8.c:1140 utils/adt/int8.c:1161 utils/adt/int8.c:1188 -#: utils/adt/int8.c:1361 utils/adt/int8.c:1400 utils/adt/numeric.c:2356 +#: utils/adt/int8.c:1361 utils/adt/int8.c:1400 utils/adt/numeric.c:2955 #: utils/adt/varbit.c:1645 #, c-format msgid "bigint out of range" @@ -16513,262 +17844,631 @@ msgstr "bigint está fuera de rango" msgid "OID out of range" msgstr "OID está fuera de rango" -#: utils/adt/json.c:726 utils/adt/json.c:766 utils/adt/json.c:781 -#: utils/adt/json.c:792 utils/adt/json.c:802 utils/adt/json.c:838 -#: utils/adt/json.c:850 utils/adt/json.c:881 utils/adt/json.c:899 -#: utils/adt/json.c:911 utils/adt/json.c:923 utils/adt/json.c:1062 -#: utils/adt/json.c:1076 utils/adt/json.c:1087 utils/adt/json.c:1095 -#: utils/adt/json.c:1103 utils/adt/json.c:1111 utils/adt/json.c:1119 -#: utils/adt/json.c:1127 utils/adt/json.c:1135 utils/adt/json.c:1143 -#: utils/adt/json.c:1173 +#: utils/adt/json.c:776 utils/adt/json.c:816 utils/adt/json.c:831 +#: utils/adt/json.c:842 utils/adt/json.c:852 utils/adt/json.c:903 +#: utils/adt/json.c:934 utils/adt/json.c:952 utils/adt/json.c:964 +#: utils/adt/json.c:976 utils/adt/json.c:1115 utils/adt/json.c:1129 +#: utils/adt/json.c:1140 utils/adt/json.c:1148 utils/adt/json.c:1156 +#: utils/adt/json.c:1164 utils/adt/json.c:1172 utils/adt/json.c:1180 +#: utils/adt/json.c:1188 utils/adt/json.c:1196 utils/adt/json.c:1226 #, c-format msgid "invalid input syntax for type json" msgstr "sintaxis de entrada no válida para tipo json" -#: utils/adt/json.c:727 +#: utils/adt/json.c:777 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Los caracteres con valor 0x%02x deben ser escapados" -#: utils/adt/json.c:767 +#: utils/adt/json.c:817 #, c-format msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "«\\u» debe ser seguido por cuatro dígitos hexadecimales." -#: utils/adt/json.c:782 +#: utils/adt/json.c:832 #, 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»." -#: utils/adt/json.c:793 utils/adt/json.c:803 utils/adt/json.c:851 -#: utils/adt/json.c:912 utils/adt/json.c:924 +#: utils/adt/json.c:843 utils/adt/json.c:853 utils/adt/json.c:904 +#: utils/adt/json.c:965 utils/adt/json.c:977 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Un «low-surrogate» Unicode debe seguir a un «high-surrogate»." -#: utils/adt/json.c:839 +#: utils/adt/json.c:868 utils/adt/json.c:891 +#, c-format +msgid "unsupported Unicode escape sequence" +msgstr "secuencia de escape Unicode no soportado" + +#: utils/adt/json.c:869 +#, c-format +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 no puede ser convertido a text." + +#: utils/adt/json.c:892 #, c-format msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8." msgstr "Los valores de escape Unicode no pueden ser usados para valores de «code point» sobre 007F cuando la codificación de servidor no es UTF8." -#: utils/adt/json.c:882 utils/adt/json.c:900 +#: utils/adt/json.c:935 utils/adt/json.c:953 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "La secuencia de escape «%s» no es válida." -#: utils/adt/json.c:1063 +#: utils/adt/json.c:1116 #, c-format msgid "The input string ended unexpectedly." msgstr "La cadena de entrada terminó inesperadamente." -#: utils/adt/json.c:1077 +#: utils/adt/json.c:1130 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Se esperaba el fin de la entrada, se encontró «%s»." -#: utils/adt/json.c:1088 +#: utils/adt/json.c:1141 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Se esperaba un valor JSON, se encontró «%s»." -#: utils/adt/json.c:1096 utils/adt/json.c:1144 +#: utils/adt/json.c:1149 utils/adt/json.c:1197 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Se esperaba una cadena, se encontró «%s»." -#: utils/adt/json.c:1104 +#: utils/adt/json.c:1157 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Se esperaba un elemento de array o «]», se encontró «%s»." -#: utils/adt/json.c:1112 +#: utils/adt/json.c:1165 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "Se esperaba «,» o «]», se encontró «%s»." -#: utils/adt/json.c:1120 +#: utils/adt/json.c:1173 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Se esperaba una cadena o «}», se encontró «%s»." -#: utils/adt/json.c:1128 +#: utils/adt/json.c:1181 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "Se esperaba «:», se encontró «%s»." -#: utils/adt/json.c:1136 +#: utils/adt/json.c:1189 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "Se esperaba «,» o «}», se encontró «%s»." -#: utils/adt/json.c:1174 +#: utils/adt/json.c:1227 #, c-format msgid "Token \"%s\" is invalid." msgstr "El elemento «%s» no es válido." -#: utils/adt/json.c:1246 +#: utils/adt/json.c:1299 #, c-format msgid "JSON data, line %d: %s%s%s" msgstr "Datos JSON, línea %d: %s%s%s" -#: utils/adt/json.c:1389 +#: utils/adt/json.c:1452 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "el valor de llave debe ser escalar, no array, composite o json" -#: utils/adt/json.c:1432 -#, c-format -msgid "JSON does not support infinite date values." -msgstr "JSON no soporta valores infinitos de fecha." - -#: utils/adt/json.c:1457 utils/adt/json.c:1484 -#, c-format -msgid "JSON does not support infinite timestamp values." -msgstr "JSON no soporta valores infinitos de timestamp." +#: utils/adt/json.c:2002 +#, fuzzy, c-format +msgid "could not determine data type for argument 1" +msgstr "no se pudo determinar el tipo de dato para el argumento %d" -#: utils/adt/json.c:1951 utils/adt/json.c:1969 utils/adt/json.c:2063 -#: utils/adt/json.c:2084 utils/adt/json.c:2143 -#, c-format -msgid "could not determine data type for argument %d" +#: utils/adt/json.c:2012 +#, fuzzy, c-format +msgid "could not determine data type for argument 2" msgstr "no se pudo determinar el tipo de dato para el argumento %d" -#: utils/adt/json.c:1956 +#: utils/adt/json.c:2036 utils/adt/jsonb.c:1803 #, c-format msgid "field name must not be null" msgstr "el nombre de campo no debe ser null" -#: utils/adt/json.c:2038 +#: utils/adt/json.c:2113 #, c-format msgid "argument list must have even number of elements" msgstr "la lista de argumentos debe tener un número par de elementos" -#: utils/adt/json.c:2039 +#: utils/adt/json.c:2114 #, c-format msgid "The arguments of json_build_object() must consist of alternating keys and values." msgstr "Los argumentos de json_build_object() deben consistir de llaves y valores alternados." -#: utils/adt/json.c:2069 +#: utils/adt/json.c:2138 utils/adt/json.c:2159 utils/adt/json.c:2218 +#, c-format +msgid "could not determine data type for argument %d" +msgstr "no se pudo determinar el tipo de dato para el argumento %d" + +#: utils/adt/json.c:2144 #, c-format msgid "argument %d cannot be null" msgstr "el argumento %d no puede ser null" -#: utils/adt/json.c:2070 +#: utils/adt/json.c:2145 #, c-format msgid "Object keys should be text." msgstr "Las llaves de un objeto deben ser de texto." -#: utils/adt/json.c:2205 +#: utils/adt/json.c:2280 utils/adt/jsonb.c:1385 #, c-format msgid "array must have two columns" msgstr "un array debe tener dos columnas" -#: utils/adt/json.c:2229 utils/adt/json.c:2313 +#: utils/adt/json.c:2304 utils/adt/json.c:2388 utils/adt/jsonb.c:1409 +#: utils/adt/jsonb.c:1504 #, c-format msgid "null value not allowed for object key" msgstr "no se permite el valor nulo como llave en un objeto" -#: utils/adt/json.c:2302 +#: utils/adt/json.c:2377 utils/adt/jsonb.c:1493 +#, c-format +msgid "mismatched array dimensions" +msgstr "las dimensiones de array no coinciden" + +#: utils/adt/jsonb.c:265 +#, c-format +msgid "string too long to represent as jsonb string" +msgstr "la cadena es demasiado larga para representarla como cadena jsonb." + +#: utils/adt/jsonb.c:266 +#, c-format +msgid "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." +msgstr "Debido a una restricción de la implementación, las cadenas en jsonb no pueden exceder los %d bytes." + +#: utils/adt/jsonb.c:729 +#, fuzzy, c-format +msgid "key value must be scalar, not array, composite or json" +msgstr "el valor de llave debe ser escalar, no array, composite o json" + +#: utils/adt/jsonb.c:1198 +#, c-format +msgid "invalid number or arguments: object must be matched key value pairs" +msgstr "" + +#: utils/adt/jsonb.c:1212 +#, fuzzy, c-format +msgid "arg %d: key cannot be null" +msgstr "el argumento %d no puede ser null" + +#: utils/adt/jsonb.c:1234 utils/adt/jsonb.c:1257 utils/adt/jsonb.c:1319 +#, fuzzy, c-format +msgid "arg %d: could not determine data type" +msgstr "no se pudo determinar el tipo de dato de entrada" + +#: utils/adt/jsonb.c:1856 +#, fuzzy, c-format +msgid "object keys must be strings" +msgstr "Las llaves de un objeto deben ser de texto." + +#: utils/adt/jsonb_util.c:656 +#, 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:697 +#, 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:1525 utils/adt/jsonb_util.c:1545 +#, 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:1606 utils/adt/jsonb_util.c:1641 +#: utils/adt/jsonb_util.c:1661 +#, c-format +msgid "total size of jsonb object elements exceeds the maximum of %u bytes" +msgstr "el tamaño total de los elementos del objeto jsonb excede el máximo de %u bytes" + +#: utils/adt/jsonfuncs.c:296 utils/adt/jsonfuncs.c:461 +#: utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2497 +#: utils/adt/jsonfuncs.c:3003 +#, c-format +msgid "cannot call %s on a scalar" +msgstr "no se puede invocar %s en un escalar" + +#: utils/adt/jsonfuncs.c:301 utils/adt/jsonfuncs.c:448 +#: utils/adt/jsonfuncs.c:2486 +#, c-format +msgid "cannot call %s on an array" +msgstr "no se puede invocar %s en un array" + +#: utils/adt/jsonfuncs.c:1364 utils/adt/jsonfuncs.c:1399 +#, c-format +msgid "cannot get array length of a scalar" +msgstr "no se puede obtener el largo de array de un escalar" + +#: utils/adt/jsonfuncs.c:1368 utils/adt/jsonfuncs.c:1387 +#, c-format +msgid "cannot get array length of a non-array" +msgstr "no se puede obtener el largo de array de un no-array" + +#: utils/adt/jsonfuncs.c:1464 +#, c-format +msgid "cannot call %s on a non-object" +msgstr "no se puede invocar %s en un no-objeto" + +#: utils/adt/jsonfuncs.c:1482 utils/adt/jsonfuncs.c:2169 +#: utils/adt/jsonfuncs.c:2706 +#, c-format +msgid "function returning record called in context that cannot accept type record" +msgstr "se llamó una función que retorna un registro en un contexto que no puede aceptarlo" + +#: utils/adt/jsonfuncs.c:1725 +#, c-format +msgid "cannot deconstruct an array as an object" +msgstr "no se puede desconstruir un array como un objeto" + +#: utils/adt/jsonfuncs.c:1737 +#, c-format +msgid "cannot deconstruct a scalar" +msgstr "no se puede desconstruir un escalar" + +#: utils/adt/jsonfuncs.c:1783 +#, c-format +msgid "cannot extract elements from a scalar" +msgstr "no se pueden extraer elementos de un escalar" + +#: utils/adt/jsonfuncs.c:1787 +#, c-format +msgid "cannot extract elements from an object" +msgstr "no se pudo extraer elementos de un objeto" + +#: utils/adt/jsonfuncs.c:2043 utils/adt/jsonfuncs.c:2802 +#, c-format +msgid "cannot call %s on a non-array" +msgstr "no se puede invocar %s en un no-array" + +#: utils/adt/jsonfuncs.c:2130 utils/adt/jsonfuncs.c:2682 +#, c-format +msgid "first argument of %s must be a row type" +msgstr "el primer argumento de %s debe ser un tipo de registro" + +#: utils/adt/jsonfuncs.c:2171 +#, c-format +msgid "Try calling the function in the FROM clause using a column definition list." +msgstr "Intente invocar la función desde la cláusula FROM usando una lista de definición de columnas" + +#: utils/adt/jsonfuncs.c:2818 utils/adt/jsonfuncs.c:2985 +#, c-format +msgid "argument of %s must be an array of objects" +msgstr "el argumento de %s debe ser un array de objetos" + +#: utils/adt/jsonfuncs.c:2842 +#, c-format +msgid "cannot call %s on an object" +msgstr "no se puede invocar %s en un objeto" + +#: utils/adt/jsonfuncs.c:3409 utils/adt/jsonfuncs.c:3462 +#, fuzzy, c-format +msgid "cannot delete from scalar" +msgstr "no se puede eliminar de la vista «%s»" + +#: utils/adt/jsonfuncs.c:3467 +#, fuzzy, c-format +msgid "cannot delete from object using integer subscript" +msgstr "no se puede eliminar desde la tabla foránea «%s»" + +#: utils/adt/jsonfuncs.c:3533 +#, fuzzy, c-format +msgid "cannot set path in scalar" +msgstr "no se puede obtener el largo de array de un escalar" + +#: utils/adt/jsonfuncs.c:3578 +#, fuzzy, c-format +msgid "cannot delete path in scalar" +msgstr "no se puede desconstruir un escalar" + +#: utils/adt/jsonfuncs.c:3703 +#, fuzzy, c-format +msgid "invalid concatenation of jsonb objects" +msgstr "combinacion invalida de convenciones de fecha" + +#: utils/adt/levenshtein.c:127 +#, fuzzy, c-format +msgid "argument exceeds the maximum length of %d bytes" +msgstr "el tamaño total de los elementos del array jsonb excede el máximo de %u bytes" + +#: utils/adt/like.c:212 utils/adt/selfuncs.c:5275 +#, c-format +msgid "could not determine which collation to use for ILIKE" +msgstr "no se pudo determinar qué ordenamiento (collation) usar para ILIKE" + +#: utils/adt/like_match.c:107 utils/adt/like_match.c:167 +#, c-format +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:292 utils/adt/regexp.c:698 +#, c-format +msgid "invalid escape string" +msgstr "cadena de escape no válida" + +#: utils/adt/like_match.c:293 utils/adt/regexp.c:699 +#, c-format +msgid "Escape string must be empty or one character." +msgstr "La cadena de escape debe ser vacía o un carácter." + +#: utils/adt/lockfuncs.c:422 +#, c-format +msgid "cannot use advisory locks during a parallel operation" +msgstr "" + +#: utils/adt/mac.c:68 +#, c-format +msgid "invalid input syntax for type macaddr: \"%s\"" +msgstr "sintaxis de entrada no válida para tipo macaddr: «%s»" + +#: utils/adt/mac.c:75 +#, c-format +msgid "invalid octet value in \"macaddr\" value: \"%s\"" +msgstr "valor de octeto no válido en valor «macaddr»: «%s»" + +#: utils/adt/misc.c:116 +#, c-format +msgid "PID %d is not a PostgreSQL server process" +msgstr "PID %d no es un proceso servidor de PostgreSQL" + +#: utils/adt/misc.c:166 +#, fuzzy, c-format +msgid "must be a superuser to cancel superuser query" +msgstr "debe ser superusuario para crear superusuarios" + +#: utils/adt/misc.c:171 +#, c-format +msgid "must be a member of the role whose query is being cancelled" +msgstr "" + +#: utils/adt/misc.c:190 +#, fuzzy, c-format +msgid "must be a superuser to terminate superuser process" +msgstr "debe ser superusuario para crear superusuarios" + +#: utils/adt/misc.c:195 +#, fuzzy, c-format +msgid "must be a member of the role whose process is being terminated" +msgstr "el tabla «%s» no es un miembro de la extensión que se está creando" + +#: utils/adt/misc.c:209 +#, c-format +msgid "must be superuser to signal the postmaster" +msgstr "debe ser superusuario para enviar señales a postmaster" + +#: utils/adt/misc.c:214 +#, c-format +msgid "failed to send signal to postmaster: %m" +msgstr "no se pudo enviar señal a postmaster: %m" + +#: utils/adt/misc.c:231 +#, c-format +msgid "must be superuser to rotate log files" +msgstr "debe ser superusuario para rotar archivos de log" + +#: utils/adt/misc.c:236 +#, c-format +msgid "rotation not possible because log collection not active" +msgstr "la rotación no es posible porque la recoleccion de log no está activa" + +#: utils/adt/misc.c:273 +#, c-format +msgid "global tablespace never has databases" +msgstr "el tablespace global nunca tiene bases de datos" + +#: utils/adt/misc.c:294 +#, c-format +msgid "%u is not a tablespace OID" +msgstr "%u no es un OID de tablespace" + +#: utils/adt/misc.c:491 +msgid "unreserved" +msgstr "no reservado" + +#: utils/adt/misc.c:495 +msgid "unreserved (cannot be function or type name)" +msgstr "no reservado (no puede ser nombre de función o de tipo)" + +#: utils/adt/misc.c:499 +msgid "reserved (can be function or type name)" +msgstr "reservado (puede ser nombre de función o de tipo)" + +#: utils/adt/misc.c:503 +msgid "reserved" +msgstr "reservado" + +#: utils/adt/nabstime.c:136 +#, c-format +msgid "invalid time zone name: \"%s\"" +msgstr "nombre de huso horario no válido: «%s»" + +#: utils/adt/nabstime.c:481 utils/adt/nabstime.c:554 +#, c-format +msgid "cannot convert abstime \"invalid\" to timestamp" +msgstr "no se puede convertir el valor reservado de abstime «invalid» a timestamp" + +#: utils/adt/nabstime.c:781 +#, c-format +msgid "invalid status in external \"tinterval\" value" +msgstr "estatus no válido en valor «tinterval» externo" + +#: utils/adt/nabstime.c:855 +#, c-format +msgid "cannot convert reltime \"invalid\" to interval" +msgstr "no se puede convertir el reltime «invalid» a interval" + +#: utils/adt/nabstime.c:1550 +#, c-format +msgid "invalid input syntax for type tinterval: \"%s\"" +msgstr "sintaxis de entrada no válida para el tipo tinterval: «%s»" + +#: utils/adt/network.c:69 +#, c-format +msgid "invalid cidr value: \"%s\"" +msgstr "valor cidr no válido: «%s»" + +#: utils/adt/network.c:70 utils/adt/network.c:200 +#, c-format +msgid "Value has bits set to right of mask." +msgstr "El valor tiene bits definidos a la derecha de la máscara" + +#: utils/adt/network.c:111 utils/adt/network.c:607 utils/adt/network.c:632 +#: utils/adt/network.c:657 +#, c-format +msgid "could not format inet value: %m" +msgstr "no se pudo dar formato al valor inet: %m" + +#. translator: %s is inet or cidr +#: utils/adt/network.c:168 +#, c-format +msgid "invalid address family in external \"%s\" value" +msgstr "familia de dirección no válida en valor «%s» externo" + +#. translator: %s is inet or cidr +#: utils/adt/network.c:175 +#, c-format +msgid "invalid bits in external \"%s\" value" +msgstr "bits no válidos en valor «%s» externo" + +#. translator: %s is inet or cidr +#: utils/adt/network.c:184 +#, c-format +msgid "invalid length in external \"%s\" value" +msgstr "largo no válido en valor «%s» externo" + +#: utils/adt/network.c:199 +#, c-format +msgid "invalid external \"cidr\" value" +msgstr "valor externo «cidr» no válido" + +#: utils/adt/network.c:321 utils/adt/network.c:348 #, c-format -msgid "mismatched array dimensions" -msgstr "las dimensiones de array no coinciden" +msgid "invalid mask length: %d" +msgstr "largo de máscara no válido: %d" -#: utils/adt/jsonb.c:202 +#: utils/adt/network.c:675 #, c-format -msgid "string too long to represent as jsonb string" -msgstr "la cadena es demasiado larga para representarla como cadena jsonb." +msgid "could not format cidr value: %m" +msgstr "no se pudo dar formato al valor cidr: %m" + +#: utils/adt/network.c:917 +#, fuzzy, c-format +msgid "cannot merge addresses from different families" +msgstr "no se puede hacer OR entre valores inet de distintos tamaños" -#: utils/adt/jsonb.c:203 +#: utils/adt/network.c:1343 #, c-format -msgid "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." -msgstr "Debido a una restricción de la implementación, las cadenas en jsonb no pueden exceder los %d bytes." +msgid "cannot AND inet values of different sizes" +msgstr "no se puede hacer AND entre valores inet de distintos tamaños" -#: utils/adt/jsonb_util.c:622 +#: utils/adt/network.c:1375 #, 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)" +msgid "cannot OR inet values of different sizes" +msgstr "no se puede hacer OR entre valores inet de distintos tamaños" -#: utils/adt/jsonb_util.c:663 +#: utils/adt/network.c:1436 utils/adt/network.c:1512 #, 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)" +msgid "result is out of range" +msgstr "resultado fuera de rango" -#: utils/adt/jsonb_util.c:1490 utils/adt/jsonb_util.c:1510 +#: utils/adt/network.c:1477 #, 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" +msgid "cannot subtract inet values of different sizes" +msgstr "no se puede sustraer valores inet de distintos tamaños" -#: utils/adt/numeric.c:485 utils/adt/numeric.c:512 utils/adt/numeric.c:3704 -#: utils/adt/numeric.c:3727 utils/adt/numeric.c:3751 utils/adt/numeric.c:3758 +#: utils/adt/numeric.c:549 utils/adt/numeric.c:576 utils/adt/numeric.c:4604 +#: utils/adt/numeric.c:4627 utils/adt/numeric.c:4651 utils/adt/numeric.c:4658 #, c-format msgid "invalid input syntax for type numeric: \"%s\"" msgstr "la sintaxis de entrada no es válida para el tipo numeric: «%s»" -#: utils/adt/numeric.c:702 +#: utils/adt/numeric.c:766 #, c-format msgid "invalid length in external \"numeric\" value" msgstr "el largo no es válido en el valor «numeric» externo" -#: utils/adt/numeric.c:715 +#: utils/adt/numeric.c:779 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "el signo no es válido en el valor «numeric» externo" -#: utils/adt/numeric.c:721 +#: utils/adt/numeric.c:785 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "la escala no es válida en el valor «numeric» externo" -#: utils/adt/numeric.c:730 +#: utils/adt/numeric.c:794 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "hay un dígito no válido en el valor «numeric» externo" -#: utils/adt/numeric.c:921 utils/adt/numeric.c:935 +#: utils/adt/numeric.c:985 utils/adt/numeric.c:999 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "la precisión %d de NUMERIC debe estar entre 1 y %d" -#: utils/adt/numeric.c:926 +#: utils/adt/numeric.c:990 #, c-format msgid "NUMERIC scale %d must be between 0 and precision %d" msgstr "la escala de NUMERIC, %d, debe estar entre 0 y la precisión %d" -#: utils/adt/numeric.c:944 +#: utils/adt/numeric.c:1008 #, c-format msgid "invalid NUMERIC type modifier" msgstr "modificador de tipo NUMERIC no es válido" -#: utils/adt/numeric.c:1951 utils/adt/numeric.c:4201 utils/adt/numeric.c:6170 +#: utils/adt/numeric.c:1340 +#, fuzzy, c-format +msgid "start value cannot be NaN" +msgstr "el timestamp no puede ser NaN" + +#: utils/adt/numeric.c:1345 +#, fuzzy, c-format +msgid "stop value cannot be NaN" +msgstr "el timestamp no puede ser NaN" + +#: utils/adt/numeric.c:1355 +#, fuzzy, c-format +msgid "step size cannot be NaN" +msgstr "el tamaño de paso no puede ser cero" + +#: utils/adt/numeric.c:2550 utils/adt/numeric.c:5104 utils/adt/numeric.c:7126 #, c-format msgid "value overflows numeric format" msgstr "el valor excede el formato numeric" -#: utils/adt/numeric.c:2282 +#: utils/adt/numeric.c:2881 #, c-format msgid "cannot convert NaN to integer" msgstr "no se puede convertir NaN a entero" -#: utils/adt/numeric.c:2348 +#: utils/adt/numeric.c:2947 #, c-format msgid "cannot convert NaN to bigint" msgstr "no se puede convertir NaN a bigint" -#: utils/adt/numeric.c:2393 +#: utils/adt/numeric.c:2992 #, c-format msgid "cannot convert NaN to smallint" msgstr "no se puede convertir NaN a smallint" -#: utils/adt/numeric.c:4271 +#: utils/adt/numeric.c:5174 #, c-format msgid "numeric field overflow" msgstr "desbordamiento de campo numeric" -#: utils/adt/numeric.c:4272 +#: utils/adt/numeric.c:5175 #, 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:5727 +#: utils/adt/numeric.c:6683 #, c-format msgid "argument for function \"exp\" too big" msgstr "el argumento a la función «exp» es demasiado grande" @@ -16823,38 +18523,43 @@ msgstr "el carácter pedido no es válido para el encoding: %d" msgid "null character not permitted" msgstr "el carácter nulo no está permitido" -#: utils/adt/orderedsetaggs.c:423 utils/adt/orderedsetaggs.c:528 -#: utils/adt/orderedsetaggs.c:667 +#: utils/adt/orderedsetaggs.c:425 utils/adt/orderedsetaggs.c:530 +#: utils/adt/orderedsetaggs.c:669 #, c-format msgid "percentile value %g is not between 0 and 1" msgstr "el valor de percentil %g no está entre 0 y 1" -#: utils/adt/pg_locale.c:1039 +#: utils/adt/pg_locale.c:911 +#, c-format +msgid "Apply system library package updates." +msgstr "" + +#: utils/adt/pg_locale.c:1116 #, 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:1042 +#: utils/adt/pg_locale.c:1119 #, 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:1129 +#: utils/adt/pg_locale.c:1206 #, 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:1144 +#: utils/adt/pg_locale.c:1221 #, c-format msgid "nondefault collations are not supported on this platform" msgstr "los ordenamientos (collation) distintos del ordenamiento por omisión no están soportados en esta plataforma" -#: utils/adt/pg_locale.c:1315 +#: utils/adt/pg_locale.c:1392 #, 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:1316 +#: utils/adt/pg_locale.c:1393 #, 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." @@ -16864,6 +18569,11 @@ msgstr "La configuración regional LC_CTYPE del servidor es probablemente incomp msgid "invalid input syntax for type pg_lsn: \"%s\"" msgstr "la sintaxis de entrada no es válida para tipo pg_lsn: «%s»" +#: utils/adt/pg_upgrade_support.c:39 +#, fuzzy, c-format +msgid "function can only be called when server is in binary upgrade mode" +msgstr "debe ser superusuario para conectarse en modo de actualización binaria" + #: utils/adt/pseudotypes.c:95 #, c-format msgid "cannot accept a value of type any" @@ -16930,59 +18640,75 @@ msgid "cannot display a value of type fdw_handler" msgstr "no se puede desplegar un valor de tipo fdw_handler" #: utils/adt/pseudotypes.c:384 +#, fuzzy, c-format +msgid "cannot accept a value of type tsm_handler" +msgstr "no se puede aceptar un valor de tipo fdw_handler" + +#: utils/adt/pseudotypes.c:397 +#, fuzzy, c-format +msgid "cannot display a value of type tsm_handler" +msgstr "no se puede desplegar un valor de tipo fdw_handler" + +#: utils/adt/pseudotypes.c:411 #, c-format msgid "cannot accept a value of type internal" msgstr "no se puede aceptar un valor de tipo internal" -#: utils/adt/pseudotypes.c:397 +#: utils/adt/pseudotypes.c:424 #, c-format msgid "cannot display a value of type internal" msgstr "no se puede desplegar un valor de tipo internal" -#: utils/adt/pseudotypes.c:411 +#: utils/adt/pseudotypes.c:438 #, c-format msgid "cannot accept a value of type opaque" msgstr "no se puede aceptar un valor de tipo opaque" -#: utils/adt/pseudotypes.c:424 +#: utils/adt/pseudotypes.c:451 #, c-format msgid "cannot display a value of type opaque" msgstr "no se puede desplegar un valor de tipo opaque" -#: utils/adt/pseudotypes.c:438 +#: utils/adt/pseudotypes.c:465 #, c-format msgid "cannot accept a value of type anyelement" msgstr "no se puede aceptar un valor de tipo anyelement" -#: utils/adt/pseudotypes.c:451 +#: utils/adt/pseudotypes.c:478 #, c-format msgid "cannot display a value of type anyelement" msgstr "no se puede desplegar un valor de tipo anyelement" -#: utils/adt/pseudotypes.c:464 +#: utils/adt/pseudotypes.c:491 #, c-format msgid "cannot accept a value of type anynonarray" msgstr "no se puede aceptar un valor de tipo anynonarray" -#: utils/adt/pseudotypes.c:477 +#: utils/adt/pseudotypes.c:504 #, c-format msgid "cannot display a value of type anynonarray" msgstr "no se puede desplegar un valor de tipo anynonarray" -#: utils/adt/pseudotypes.c:490 +#: utils/adt/pseudotypes.c:517 #, c-format msgid "cannot accept a value of a shell type" msgstr "no se puede aceptar un valor de un tipo inconcluso" -#: utils/adt/pseudotypes.c:503 +#: utils/adt/pseudotypes.c:530 #, c-format msgid "cannot display a value of a shell type" msgstr "no se puede desplegar un valor de un tipo inconcluso" -#: utils/adt/pseudotypes.c:525 utils/adt/pseudotypes.c:549 -#, c-format -msgid "cannot accept a value of type pg_node_tree" -msgstr "no se puede aceptar un valor de tipo pg_node_tree" +#: utils/adt/pseudotypes.c:552 utils/adt/pseudotypes.c:577 +#: utils/adt/pseudotypes.c:605 utils/adt/pseudotypes.c:633 +#, fuzzy, c-format +msgid "cannot accept a value of type %s" +msgstr "no se puede aceptar un valor de tipo any" + +#: utils/adt/pseudotypes.c:620 utils/adt/pseudotypes.c:646 +#, fuzzy, c-format +msgid "cannot output a value of type %s" +msgstr "no se puede aceptar un valor de tipo any" #: utils/adt/rangetypes.c:396 #, c-format @@ -16999,57 +18725,57 @@ msgstr "el resultado de la diferencia de rangos no sería contiguo" msgid "result of range union would not be contiguous" msgstr "el resultado de la unión de rangos no sería contiguo" -#: utils/adt/rangetypes.c:1502 +#: utils/adt/rangetypes.c:1530 #, c-format msgid "range lower bound must be less than or equal to range upper bound" msgstr "el límite inferior del rango debe ser menor o igual al límite superior del rango" -#: utils/adt/rangetypes.c:1885 utils/adt/rangetypes.c:1898 -#: utils/adt/rangetypes.c:1912 +#: utils/adt/rangetypes.c:1913 utils/adt/rangetypes.c:1926 +#: utils/adt/rangetypes.c:1940 #, c-format msgid "invalid range bound flags" msgstr "opciones de bordes de rango no válidas" -#: utils/adt/rangetypes.c:1886 utils/adt/rangetypes.c:1899 -#: utils/adt/rangetypes.c:1913 +#: utils/adt/rangetypes.c:1914 utils/adt/rangetypes.c:1927 +#: utils/adt/rangetypes.c:1941 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "Los valores aceptables son «[]», «[)», «(]» y «()»." -#: utils/adt/rangetypes.c:1978 utils/adt/rangetypes.c:1995 -#: utils/adt/rangetypes.c:2008 utils/adt/rangetypes.c:2026 -#: utils/adt/rangetypes.c:2037 utils/adt/rangetypes.c:2081 -#: utils/adt/rangetypes.c:2089 +#: utils/adt/rangetypes.c:2006 utils/adt/rangetypes.c:2023 +#: utils/adt/rangetypes.c:2036 utils/adt/rangetypes.c:2054 +#: utils/adt/rangetypes.c:2065 utils/adt/rangetypes.c:2109 +#: utils/adt/rangetypes.c:2117 #, c-format msgid "malformed range literal: \"%s\"" msgstr "literal de rango mal formado: «%s»" -#: utils/adt/rangetypes.c:1980 +#: utils/adt/rangetypes.c:2008 #, c-format msgid "Junk after \"empty\" key word." msgstr "Basura a continuación de la palabra «empty»." -#: utils/adt/rangetypes.c:1997 +#: utils/adt/rangetypes.c:2025 #, c-format msgid "Missing left parenthesis or bracket." msgstr "Falta paréntesis o corchete izquierdo." -#: utils/adt/rangetypes.c:2010 +#: utils/adt/rangetypes.c:2038 #, c-format msgid "Missing comma after lower bound." msgstr "Coma faltante después del límite inferior." -#: utils/adt/rangetypes.c:2028 +#: utils/adt/rangetypes.c:2056 #, c-format msgid "Too many commas." msgstr "Demasiadas comas." -#: utils/adt/rangetypes.c:2039 +#: utils/adt/rangetypes.c:2067 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "Basura después del paréntesis o corchete derecho." -#: utils/adt/regexp.c:285 utils/adt/regexp.c:1234 utils/adt/varlena.c:3042 +#: utils/adt/regexp.c:285 utils/adt/regexp.c:1288 utils/adt/varlena.c:3588 #, c-format msgid "regular expression failed: %s" msgstr "la expresión regular falló: %s" @@ -17059,209 +18785,219 @@ msgstr "la expresión regular falló: %s" msgid "invalid regexp option: \"%c\"" msgstr "la opción de expresión regular no es válida: «%c»" -#: utils/adt/regexp.c:894 +#: utils/adt/regexp.c:948 #, c-format msgid "regexp_split does not support the global option" msgstr "regex_split no soporta la opción «global»" -#: utils/adt/regproc.c:127 utils/adt/regproc.c:147 +#: utils/adt/regproc.c:128 utils/adt/regproc.c:148 #, c-format msgid "more than one function named \"%s\"" msgstr "existe más de una función llamada «%s»" -#: utils/adt/regproc.c:551 utils/adt/regproc.c:571 +#: utils/adt/regproc.c:587 utils/adt/regproc.c:607 #, c-format msgid "more than one operator named %s" msgstr "existe más de un operador llamado %s" -#: utils/adt/regproc.c:738 utils/adt/regproc.c:779 gram.y:6846 +#: utils/adt/regproc.c:774 utils/adt/regproc.c:815 gram.y:7232 #, c-format msgid "missing argument" msgstr "falta un argumento" -#: utils/adt/regproc.c:739 utils/adt/regproc.c:780 gram.y:6847 +#: utils/adt/regproc.c:775 utils/adt/regproc.c:816 gram.y:7233 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Use NONE para denotar el argumento faltante de un operador unario." -#: utils/adt/regproc.c:743 utils/adt/regproc.c:784 utils/adt/regproc.c:1702 -#: utils/adt/ruleutils.c:7626 utils/adt/ruleutils.c:7749 +#: utils/adt/regproc.c:779 utils/adt/regproc.c:820 utils/adt/regproc.c:1962 +#: utils/adt/ruleutils.c:8060 utils/adt/ruleutils.c:8185 #, c-format msgid "too many arguments" msgstr "demasiados argumentos" -#: utils/adt/regproc.c:744 utils/adt/regproc.c:785 +#: utils/adt/regproc.c:780 utils/adt/regproc.c:821 #, c-format msgid "Provide two argument types for operator." msgstr "Provea dos tipos de argumento para un operador." -#: utils/adt/regproc.c:1537 utils/adt/regproc.c:1542 utils/adt/varlena.c:2313 -#: utils/adt/varlena.c:2318 +#: utils/adt/regproc.c:1797 utils/adt/regproc.c:1802 utils/adt/varlena.c:2859 +#: utils/adt/varlena.c:2864 #, c-format msgid "invalid name syntax" msgstr "la sintaxis de nombre no es válida" -#: utils/adt/regproc.c:1600 +#: utils/adt/regproc.c:1860 #, c-format msgid "expected a left parenthesis" msgstr "se esperaba un paréntesis izquierdo" -#: utils/adt/regproc.c:1616 +#: utils/adt/regproc.c:1876 #, c-format msgid "expected a right parenthesis" msgstr "se esperaba un paréntesis derecho" -#: utils/adt/regproc.c:1635 +#: utils/adt/regproc.c:1895 #, c-format msgid "expected a type name" msgstr "se esperaba un nombre de tipo" -#: utils/adt/regproc.c:1667 +#: utils/adt/regproc.c:1927 #, c-format msgid "improper type name" msgstr "el nombre de tipo no es válido" -#: utils/adt/ri_triggers.c:310 utils/adt/ri_triggers.c:367 -#: utils/adt/ri_triggers.c:786 utils/adt/ri_triggers.c:1009 -#: utils/adt/ri_triggers.c:1165 utils/adt/ri_triggers.c:1346 -#: utils/adt/ri_triggers.c:1511 utils/adt/ri_triggers.c:1687 -#: utils/adt/ri_triggers.c:1867 utils/adt/ri_triggers.c:2058 -#: utils/adt/ri_triggers.c:2116 utils/adt/ri_triggers.c:2221 -#: utils/adt/ri_triggers.c:2386 gram.y:3248 +#: utils/adt/ri_triggers.c:316 utils/adt/ri_triggers.c:373 +#: utils/adt/ri_triggers.c:792 utils/adt/ri_triggers.c:1015 +#: utils/adt/ri_triggers.c:1171 utils/adt/ri_triggers.c:1352 +#: utils/adt/ri_triggers.c:1517 utils/adt/ri_triggers.c:1693 +#: utils/adt/ri_triggers.c:1873 utils/adt/ri_triggers.c:2064 +#: utils/adt/ri_triggers.c:2122 utils/adt/ri_triggers.c:2227 +#: utils/adt/ri_triggers.c:2404 gram.y:3311 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL no está implementada" -#: utils/adt/ri_triggers.c:339 utils/adt/ri_triggers.c:2474 -#: utils/adt/ri_triggers.c:3227 +#: utils/adt/ri_triggers.c:345 utils/adt/ri_triggers.c:2492 +#: utils/adt/ri_triggers.c:3315 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "inserción o actualización en la tabla «%s» viola la llave foránea «%s»" -#: utils/adt/ri_triggers.c:342 utils/adt/ri_triggers.c:2477 +#: utils/adt/ri_triggers.c:348 utils/adt/ri_triggers.c:2495 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL no permite la mezcla de valores de clave nulos y no nulos." -#: utils/adt/ri_triggers.c:2716 +#: utils/adt/ri_triggers.c:2734 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "la función «%s» debe ser ejecutada en INSERT" -#: utils/adt/ri_triggers.c:2722 +#: utils/adt/ri_triggers.c:2740 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "la función «%s» debe ser ejecutada en UPDATE" -#: utils/adt/ri_triggers.c:2728 +#: utils/adt/ri_triggers.c:2746 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "la función «%s» debe ser ejecutada en DELETE" -#: utils/adt/ri_triggers.c:2751 +#: utils/adt/ri_triggers.c:2769 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "no hay una entrada en pg_constraint para el trigger «%s» en tabla «%s»" -#: utils/adt/ri_triggers.c:2753 +#: utils/adt/ri_triggers.c:2771 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "Elimine este trigger de integridad referencial y sus pares, y utilice ALTER TABLE ADD CONSTRAINT." -#: utils/adt/ri_triggers.c:3177 +#: utils/adt/ri_triggers.c:3225 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "la consulta de integridad referencial en «%s» de la restricción «%s» en «%s» entregó un resultado inesperado" -#: utils/adt/ri_triggers.c:3181 +#: utils/adt/ri_triggers.c:3229 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Esto probablemente es causado por una regla que reescribió la consulta." -#: utils/adt/ri_triggers.c:3230 +#: utils/adt/ri_triggers.c:3319 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "La llave (%s)=(%s) no está presente en la tabla «%s»." -#: utils/adt/ri_triggers.c:3237 +#: utils/adt/ri_triggers.c:3322 +#, c-format +msgid "Key is not present in table \"%s\"." +msgstr "La llave no está presente en la tabla «%s»." + +#: utils/adt/ri_triggers.c:3328 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "update o delete en «%s» viola la llave foránea «%s» en la tabla «%s»" -#: utils/adt/ri_triggers.c:3241 +#: utils/adt/ri_triggers.c:3333 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "La llave (%s)=(%s) todavía es referida desde la tabla «%s»." -#: utils/adt/rowtypes.c:102 utils/adt/rowtypes.c:477 +#: utils/adt/ri_triggers.c:3336 +#, c-format +msgid "Key is still referenced from table \"%s\"." +msgstr "La llave todavía es referida desde la tabla «%s»." + +#: utils/adt/rowtypes.c:100 utils/adt/rowtypes.c:472 #, c-format msgid "input of anonymous composite types is not implemented" msgstr "el ingreso de tipos compuestos anónimos no está implementado" -#: utils/adt/rowtypes.c:155 utils/adt/rowtypes.c:183 utils/adt/rowtypes.c:206 -#: utils/adt/rowtypes.c:214 utils/adt/rowtypes.c:266 utils/adt/rowtypes.c:274 +#: utils/adt/rowtypes.c:152 utils/adt/rowtypes.c:180 utils/adt/rowtypes.c:203 +#: utils/adt/rowtypes.c:211 utils/adt/rowtypes.c:263 utils/adt/rowtypes.c:271 #, c-format msgid "malformed record literal: \"%s\"" msgstr "literal de record no es válido: «%s»" -#: utils/adt/rowtypes.c:156 +#: utils/adt/rowtypes.c:153 #, c-format msgid "Missing left parenthesis." msgstr "Falta paréntesis izquierdo." -#: utils/adt/rowtypes.c:184 +#: utils/adt/rowtypes.c:181 #, c-format msgid "Too few columns." msgstr "Muy pocas columnas." -#: utils/adt/rowtypes.c:267 +#: utils/adt/rowtypes.c:264 #, c-format msgid "Too many columns." msgstr "Demasiadas columnas." -#: utils/adt/rowtypes.c:275 +#: utils/adt/rowtypes.c:272 #, c-format msgid "Junk after right parenthesis." msgstr "Basura después del paréntesis derecho." -#: utils/adt/rowtypes.c:526 +#: utils/adt/rowtypes.c:521 #, c-format msgid "wrong number of columns: %d, expected %d" msgstr "número de columnas erróneo: %d, se esperaban %d" -#: utils/adt/rowtypes.c:553 +#: utils/adt/rowtypes.c:548 #, c-format msgid "wrong data type: %u, expected %u" msgstr "tipo de dato erróneo: %u, se esperaba %u" -#: utils/adt/rowtypes.c:614 +#: utils/adt/rowtypes.c:609 #, c-format msgid "improper binary format in record column %d" msgstr "formato binario incorrecto en la columna record %d" -#: utils/adt/rowtypes.c:896 utils/adt/rowtypes.c:1134 -#: utils/adt/rowtypes.c:1388 utils/adt/rowtypes.c:1665 +#: utils/adt/rowtypes.c:891 utils/adt/rowtypes.c:1129 +#: utils/adt/rowtypes.c:1383 utils/adt/rowtypes.c:1660 #, c-format msgid "cannot compare dissimilar column types %s and %s at record column %d" msgstr "no se pueden comparar los tipos de columnas disímiles %s y %s en la columna %d" -#: utils/adt/rowtypes.c:985 utils/adt/rowtypes.c:1205 -#: utils/adt/rowtypes.c:1521 utils/adt/rowtypes.c:1761 +#: utils/adt/rowtypes.c:980 utils/adt/rowtypes.c:1200 +#: utils/adt/rowtypes.c:1516 utils/adt/rowtypes.c:1756 #, c-format msgid "cannot compare record types with different numbers of columns" msgstr "no se pueden comparar registros con cantidad distinta de columnas" -#: utils/adt/ruleutils.c:3999 +#: utils/adt/ruleutils.c:4076 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "la regla «%s» tiene el tipo de evento no soportado %d" -#: utils/adt/selfuncs.c:5205 +#: utils/adt/selfuncs.c:5260 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "no está soportada la comparación insensible a mayúsculas en bytea" -#: utils/adt/selfuncs.c:5308 +#: utils/adt/selfuncs.c:5363 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "no está soportada la comparación con expresiones regulares en bytea" @@ -17271,133 +19007,133 @@ msgstr "no está soportada la comparación con expresiones regulares en bytea" msgid "invalid input syntax for type tid: \"%s\"" msgstr "la sintaxis de entrada no es válida para tipo tid: «%s»" -#: utils/adt/timestamp.c:107 +#: utils/adt/timestamp.c:100 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "la precisión de TIMESTAMP(%d)%s no debe ser negativa" -#: utils/adt/timestamp.c:113 +#: utils/adt/timestamp.c:106 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "la precisión de TIMESTAMP(%d)%s fue reducida al máximo permitido, %d" -#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:452 +#: utils/adt/timestamp.c:171 utils/adt/timestamp.c:445 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp fuera de rango: «%s»" -#: utils/adt/timestamp.c:196 utils/adt/timestamp.c:470 -#: utils/adt/timestamp.c:925 +#: utils/adt/timestamp.c:189 utils/adt/timestamp.c:463 +#: utils/adt/timestamp.c:918 #, c-format msgid "date/time value \"%s\" is no longer supported" msgstr "el valor de date/time «%s» ya no está soportado" -#: utils/adt/timestamp.c:266 +#: utils/adt/timestamp.c:259 #, c-format msgid "timestamp cannot be NaN" msgstr "el timestamp no puede ser NaN" -#: utils/adt/timestamp.c:387 +#: utils/adt/timestamp.c:380 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "la precisión de timestamp(%d) debe estar entre %d y %d" -#: utils/adt/timestamp.c:520 +#: utils/adt/timestamp.c:513 #, c-format msgid "invalid input syntax for numeric time zone: \"%s\"" msgstr "la sintaxis de entrada no es válida para el huso horario numérico: «%s»" -#: utils/adt/timestamp.c:522 +#: utils/adt/timestamp.c:515 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "Los husos horarios numéricos deben tener «-» o «+» como su primer carácter." -#: utils/adt/timestamp.c:535 +#: utils/adt/timestamp.c:528 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "el huso horario numérico «%s» está fuera de rango" -#: utils/adt/timestamp.c:638 utils/adt/timestamp.c:648 +#: utils/adt/timestamp.c:631 utils/adt/timestamp.c:641 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestamp fuera de rango: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:919 utils/adt/timestamp.c:1490 -#: utils/adt/timestamp.c:1993 utils/adt/timestamp.c:3133 -#: utils/adt/timestamp.c:3138 utils/adt/timestamp.c:3143 -#: utils/adt/timestamp.c:3193 utils/adt/timestamp.c:3200 -#: utils/adt/timestamp.c:3207 utils/adt/timestamp.c:3227 -#: utils/adt/timestamp.c:3234 utils/adt/timestamp.c:3241 -#: utils/adt/timestamp.c:3270 utils/adt/timestamp.c:3277 -#: utils/adt/timestamp.c:3322 utils/adt/timestamp.c:3613 -#: utils/adt/timestamp.c:3742 utils/adt/timestamp.c:4133 +#: utils/adt/timestamp.c:912 utils/adt/timestamp.c:1483 +#: utils/adt/timestamp.c:1986 utils/adt/timestamp.c:3126 +#: utils/adt/timestamp.c:3131 utils/adt/timestamp.c:3136 +#: utils/adt/timestamp.c:3186 utils/adt/timestamp.c:3193 +#: utils/adt/timestamp.c:3200 utils/adt/timestamp.c:3220 +#: utils/adt/timestamp.c:3227 utils/adt/timestamp.c:3234 +#: utils/adt/timestamp.c:3263 utils/adt/timestamp.c:3270 +#: utils/adt/timestamp.c:3315 utils/adt/timestamp.c:3606 +#: utils/adt/timestamp.c:3735 utils/adt/timestamp.c:4126 #, c-format msgid "interval out of range" msgstr "interval fuera de rango" -#: utils/adt/timestamp.c:1060 utils/adt/timestamp.c:1093 +#: utils/adt/timestamp.c:1053 utils/adt/timestamp.c:1086 #, c-format msgid "invalid INTERVAL type modifier" msgstr "modificador de tipo INTERVAL no válido" -#: utils/adt/timestamp.c:1076 +#: utils/adt/timestamp.c:1069 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "la precisión de INTERVAL(%d) no debe ser negativa" -#: utils/adt/timestamp.c:1082 +#: utils/adt/timestamp.c:1075 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "la precisión de INTERVAL(%d) fue reducida al máximo permitido, %d" -#: utils/adt/timestamp.c:1434 +#: utils/adt/timestamp.c:1427 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "la precisión de interval(%d) debe estar entre %d y %d" -#: utils/adt/timestamp.c:2722 +#: utils/adt/timestamp.c:2715 #, c-format msgid "cannot subtract infinite timestamps" msgstr "no se pueden restar timestamps infinitos" -#: utils/adt/timestamp.c:3868 utils/adt/timestamp.c:4474 -#: utils/adt/timestamp.c:4514 +#: utils/adt/timestamp.c:3861 utils/adt/timestamp.c:4487 +#: utils/adt/timestamp.c:4507 #, c-format msgid "timestamp units \"%s\" not supported" msgstr "las unidades de timestamp «%s» no están soportadas" -#: utils/adt/timestamp.c:3882 utils/adt/timestamp.c:4524 +#: utils/adt/timestamp.c:3875 utils/adt/timestamp.c:4517 #, c-format msgid "timestamp units \"%s\" not recognized" msgstr "las unidades de timestamp «%s» no son reconocidas" -#: utils/adt/timestamp.c:4022 utils/adt/timestamp.c:4685 -#: utils/adt/timestamp.c:4726 +#: utils/adt/timestamp.c:4015 utils/adt/timestamp.c:4698 +#: utils/adt/timestamp.c:4719 #, c-format msgid "timestamp with time zone units \"%s\" not supported" msgstr "las unidades de timestamp with time zone «%s» no están soportadas" -#: utils/adt/timestamp.c:4039 utils/adt/timestamp.c:4735 +#: utils/adt/timestamp.c:4032 utils/adt/timestamp.c:4728 #, c-format msgid "timestamp with time zone units \"%s\" not recognized" msgstr "las unidades de timestamp with time zone «%s» no son reconocidas" -#: utils/adt/timestamp.c:4120 +#: utils/adt/timestamp.c:4113 #, c-format msgid "interval units \"%s\" not supported because months usually have fractional weeks" msgstr "las unidades de intervalo «%s» no están soportadas porque los meses normalmente tienen semanas fraccionales" -#: utils/adt/timestamp.c:4126 utils/adt/timestamp.c:4841 +#: utils/adt/timestamp.c:4119 utils/adt/timestamp.c:4834 #, c-format msgid "interval units \"%s\" not supported" msgstr "las unidades de interval «%s» no están soportadas" -#: utils/adt/timestamp.c:4142 utils/adt/timestamp.c:4868 +#: utils/adt/timestamp.c:4135 utils/adt/timestamp.c:4861 #, c-format msgid "interval units \"%s\" not recognized" msgstr "las unidades de interval «%s» no son reconocidas" -#: utils/adt/timestamp.c:4951 utils/adt/timestamp.c:5135 +#: utils/adt/timestamp.c:5025 utils/adt/timestamp.c:5255 #, c-format msgid "could not convert to time zone \"%s\"" msgstr "no se pudo convertir al huso horario «%s»" @@ -17422,43 +19158,43 @@ msgstr "suppress_redundant_updates_trigger: debe ser invocado «BEFORE UPDATE»" msgid "suppress_redundant_updates_trigger: must be called for each row" msgstr "suppress_redundant_updates_trigger: debe ser invocado «FOR EACH ROW»" -#: utils/adt/tsgistidx.c:98 +#: utils/adt/tsgistidx.c:99 #, c-format msgid "gtsvector_in not implemented" msgstr "gtsvector_in no está implementado" -#: utils/adt/tsquery.c:154 utils/adt/tsquery.c:389 +#: utils/adt/tsquery.c:155 utils/adt/tsquery.c:390 #: utils/adt/tsvector_parser.c:133 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "error de sintaxis en tsquery: «%s»" -#: utils/adt/tsquery.c:175 +#: utils/adt/tsquery.c:176 #, c-format msgid "no operand in tsquery: \"%s\"" msgstr "no hay operando en tsquery: «%s»" -#: utils/adt/tsquery.c:247 +#: utils/adt/tsquery.c:248 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "el valor es demasiado grande en tsquery: «%s»" -#: utils/adt/tsquery.c:252 +#: utils/adt/tsquery.c:253 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "el operando es muy largo en tsquery: «%s»" -#: utils/adt/tsquery.c:280 +#: utils/adt/tsquery.c:281 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "palabra demasiado larga en tsquery: «%s»" -#: utils/adt/tsquery.c:509 +#: utils/adt/tsquery.c:510 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "la consulta de búsqueda en texto no contiene lexemas: «%s»" -#: utils/adt/tsquery.c:520 utils/adt/tsquery_util.c:340 +#: utils/adt/tsquery.c:521 utils/adt/tsquery_util.c:340 #, c-format msgid "tsquery is too large" msgstr "el tsquery es demasiado grande" @@ -17473,22 +19209,22 @@ msgstr "la consulta de búsqueda en texto contiene sólo stopwords o no contiene msgid "ts_rewrite query must return two tsquery columns" msgstr "consulta ts_rewrite debe retornar dos columnas tsquery" -#: utils/adt/tsrank.c:403 +#: utils/adt/tsrank.c:410 #, c-format msgid "array of weight must be one-dimensional" msgstr "el array de pesos debe ser unidimensional" -#: utils/adt/tsrank.c:408 +#: utils/adt/tsrank.c:415 #, c-format msgid "array of weight is too short" msgstr "el array de pesos es muy corto" -#: utils/adt/tsrank.c:413 +#: utils/adt/tsrank.c:420 #, c-format msgid "array of weight must not contain nulls" msgstr "los arrays de pesos no deben contener valores nulos" -#: utils/adt/tsrank.c:422 utils/adt/tsrank.c:749 +#: utils/adt/tsrank.c:429 utils/adt/tsrank.c:756 #, c-format msgid "weight out of range" msgstr "el peso está fuera de rango" @@ -17558,6 +19294,16 @@ msgstr "no hay carácter escapado: «%s»" msgid "wrong position info in tsvector: \"%s\"" msgstr "información posicional incorrecta en tsvector: «%s»" +#: utils/adt/txid.c:339 +#, fuzzy, c-format +msgid "invalid input syntax for type txid_snapshot: \"%s\"" +msgstr "la sintaxis de entrada no es válida para tipo tid: «%s»" + +#: utils/adt/txid.c:534 +#, fuzzy, c-format +msgid "invalid external txid_snapshot data" +msgstr "valor externo «cidr» no válido" + #: utils/adt/uuid.c:128 #, c-format msgid "invalid input syntax for uuid: \"%s\"" @@ -17603,9 +19349,9 @@ msgstr "el largo largo no es válido en cadena de bits externa" msgid "bit string too long for type bit varying(%d)" msgstr "la cadena de bits es demasiado larga para el tipo bit varying(%d)" -#: utils/adt/varbit.c:1066 utils/adt/varbit.c:1168 utils/adt/varlena.c:800 -#: utils/adt/varlena.c:864 utils/adt/varlena.c:1008 utils/adt/varlena.c:1964 -#: utils/adt/varlena.c:2031 +#: utils/adt/varbit.c:1066 utils/adt/varbit.c:1168 utils/adt/varlena.c:832 +#: utils/adt/varlena.c:896 utils/adt/varlena.c:1040 utils/adt/varlena.c:2510 +#: utils/adt/varlena.c:2577 #, c-format msgid "negative substring length not allowed" msgstr "no se permite un largo negativo de subcadena" @@ -17630,7 +19376,7 @@ msgstr "no se puede hacer XOR entre cadenas de bits de distintos tamaños" msgid "bit index %d out of valid range (0..%d)" msgstr "el índice de bit %d está fuera del rango válido (0..%d)" -#: utils/adt/varbit.c:1802 utils/adt/varlena.c:2231 +#: utils/adt/varbit.c:1802 utils/adt/varlena.c:2777 #, c-format msgid "new bit must be 0 or 1" msgstr "el nuevo bit debe ser 0 o 1" @@ -17645,63 +19391,63 @@ msgstr "el valor es demasiado largo para el tipo character(%d)" msgid "value too long for type character varying(%d)" msgstr "el valor es demasiado largo para el tipo character varying(%d)" -#: utils/adt/varlena.c:1380 +#: utils/adt/varlena.c:1410 utils/adt/varlena.c:1799 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "no se pudo determinar qué ordenamiento usar para la comparación de cadenas" -#: utils/adt/varlena.c:1426 utils/adt/varlena.c:1439 +#: utils/adt/varlena.c:1468 utils/adt/varlena.c:1481 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "no se pudo convertir la cadena a UTF-16: código de error %lu" -#: utils/adt/varlena.c:1454 +#: utils/adt/varlena.c:1496 #, c-format msgid "could not compare Unicode strings: %m" msgstr "no se pudieron comparar las cadenas Unicode: %m" -#: utils/adt/varlena.c:2109 utils/adt/varlena.c:2140 utils/adt/varlena.c:2176 -#: utils/adt/varlena.c:2219 +#: utils/adt/varlena.c:2655 utils/adt/varlena.c:2686 utils/adt/varlena.c:2722 +#: utils/adt/varlena.c:2765 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "el índice %d está fuera de rango [0..%d]" -#: utils/adt/varlena.c:3138 +#: utils/adt/varlena.c:3684 #, c-format msgid "field position must be greater than zero" msgstr "la posición del campo debe ser mayor que cero" -#: utils/adt/varlena.c:4017 +#: utils/adt/varlena.c:4563 #, c-format msgid "unterminated format specifier" msgstr "especificador de formato inconcluso" -#: utils/adt/varlena.c:4149 utils/adt/varlena.c:4269 +#: utils/adt/varlena.c:4695 utils/adt/varlena.c:4815 #, c-format msgid "unrecognized conversion type specifier \"%c\"" msgstr "especificador de conversión de tipo no reconocido: «%c»" -#: utils/adt/varlena.c:4161 utils/adt/varlena.c:4218 +#: utils/adt/varlena.c:4707 utils/adt/varlena.c:4764 #, c-format msgid "too few arguments for format" msgstr "muy pocos argumentos para el formato" -#: utils/adt/varlena.c:4312 utils/adt/varlena.c:4495 +#: utils/adt/varlena.c:4858 utils/adt/varlena.c:5041 #, c-format msgid "number is out of range" msgstr "el número está fuera de rango" -#: utils/adt/varlena.c:4376 utils/adt/varlena.c:4404 +#: utils/adt/varlena.c:4922 utils/adt/varlena.c:4950 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "la conversión especifica el argumento 0, pero los argumentos se numeran desde 1" -#: utils/adt/varlena.c:4397 +#: utils/adt/varlena.c:4943 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "la posición del argumento de anchura debe terminar con «$»" -#: utils/adt/varlena.c:4442 +#: utils/adt/varlena.c:4988 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "los valores nulos no pueden ser formateados como un identificador SQL" @@ -17716,227 +19462,227 @@ msgstr "el argumento de ntile debe ser mayor que cero" msgid "argument of nth_value must be greater than zero" msgstr "el argumento de nth_value debe ser mayor que cero" -#: utils/adt/xml.c:170 +#: utils/adt/xml.c:171 #, c-format msgid "unsupported XML feature" msgstr "característica XML no soportada" -#: utils/adt/xml.c:171 +#: utils/adt/xml.c:172 #, c-format msgid "This functionality requires the server to be built with libxml support." msgstr "Esta funcionalidad requiere que el servidor haya sido construido con soporte libxml." -#: utils/adt/xml.c:172 +#: utils/adt/xml.c:173 #, c-format msgid "You need to rebuild PostgreSQL using --with-libxml." msgstr "Necesita reconstruir PostgreSQL usando --with-libxml." -#: utils/adt/xml.c:191 utils/mb/mbutils.c:523 +#: utils/adt/xml.c:192 utils/mb/mbutils.c:523 #, c-format msgid "invalid encoding name \"%s\"" msgstr "nombre de codificación «%s» no válido" -#: utils/adt/xml.c:434 utils/adt/xml.c:439 +#: utils/adt/xml.c:435 utils/adt/xml.c:440 #, c-format msgid "invalid XML comment" msgstr "comentario XML no válido" -#: utils/adt/xml.c:568 +#: utils/adt/xml.c:569 #, c-format msgid "not an XML document" msgstr "no es un documento XML" -#: utils/adt/xml.c:727 utils/adt/xml.c:750 +#: utils/adt/xml.c:728 utils/adt/xml.c:751 #, c-format msgid "invalid XML processing instruction" msgstr "instrucción de procesamiento XML no válida" -#: utils/adt/xml.c:728 +#: utils/adt/xml.c:729 #, c-format msgid "XML processing instruction target name cannot be \"%s\"." msgstr "el nombre de destino de la instrucción de procesamiento XML no puede ser «%s»." -#: utils/adt/xml.c:751 +#: utils/adt/xml.c:752 #, c-format msgid "XML processing instruction cannot contain \"?>\"." msgstr "la instrucción de procesamiento XML no puede contener «?>»." -#: utils/adt/xml.c:830 +#: utils/adt/xml.c:831 #, c-format msgid "xmlvalidate is not implemented" msgstr "xmlvalidate no está implementado" -#: utils/adt/xml.c:909 +#: utils/adt/xml.c:910 #, c-format msgid "could not initialize XML library" msgstr "no se pudo inicializar la biblioteca XML" -#: utils/adt/xml.c:910 +#: utils/adt/xml.c:911 #, c-format msgid "libxml2 has incompatible char type: sizeof(char)=%u, sizeof(xmlChar)=%u." msgstr "libxml2 tiene tipo char incompatible: sizeof(char)=%u, sizeof(xmlChar)=%u." -#: utils/adt/xml.c:996 +#: utils/adt/xml.c:997 #, c-format msgid "could not set up XML error handler" msgstr "no se pudo instalar un gestor de errores XML" -#: utils/adt/xml.c:997 +#: utils/adt/xml.c:998 #, c-format msgid "This probably indicates that the version of libxml2 being used is not compatible with the libxml2 header files that PostgreSQL was built with." msgstr "Esto probablemente indica que la versión de libxml2 en uso no es compatible con los archivos de cabecera libxml2 con los que PostgreSQL fue construido." -#: utils/adt/xml.c:1732 +#: utils/adt/xml.c:1737 msgid "Invalid character value." msgstr "Valor de carácter no válido." -#: utils/adt/xml.c:1735 +#: utils/adt/xml.c:1740 msgid "Space required." msgstr "Se requiere un espacio." -#: utils/adt/xml.c:1738 +#: utils/adt/xml.c:1743 msgid "standalone accepts only 'yes' or 'no'." msgstr "standalone acepta sólo 'yes' y 'no'." -#: utils/adt/xml.c:1741 +#: utils/adt/xml.c:1746 msgid "Malformed declaration: missing version." msgstr "Declaración mal formada: falta la versión." -#: utils/adt/xml.c:1744 +#: utils/adt/xml.c:1749 msgid "Missing encoding in text declaration." msgstr "Falta especificación de codificación en declaración de texto." -#: utils/adt/xml.c:1747 +#: utils/adt/xml.c:1752 msgid "Parsing XML declaration: '?>' expected." msgstr "Procesando declaración XML: se esperaba '?>'." -#: utils/adt/xml.c:1750 +#: utils/adt/xml.c:1755 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Código de error libxml no reconocido: %d." -#: utils/adt/xml.c:2025 +#: utils/adt/xml.c:2030 #, c-format msgid "XML does not support infinite date values." msgstr "XML no soporta valores infinitos de fecha." -#: utils/adt/xml.c:2047 utils/adt/xml.c:2074 +#: utils/adt/xml.c:2052 utils/adt/xml.c:2079 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML no soporta valores infinitos de timestamp." -#: utils/adt/xml.c:2465 +#: utils/adt/xml.c:2470 #, c-format msgid "invalid query" msgstr "consulta no válido" -#: utils/adt/xml.c:3778 +#: utils/adt/xml.c:3795 #, 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:3779 +#: utils/adt/xml.c:3796 #, 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:3803 +#: utils/adt/xml.c:3820 #, c-format msgid "empty XPath expression" msgstr "expresion XPath vacía" -#: utils/adt/xml.c:3852 +#: utils/adt/xml.c:3869 #, 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:3859 +#: utils/adt/xml.c:3876 #, 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/cache/lsyscache.c:2478 utils/cache/lsyscache.c:2511 -#: utils/cache/lsyscache.c:2544 utils/cache/lsyscache.c:2577 +#: utils/cache/lsyscache.c:2515 utils/cache/lsyscache.c:2548 +#: utils/cache/lsyscache.c:2581 utils/cache/lsyscache.c:2614 #, c-format msgid "type %s is only a shell" msgstr "el tipo %s está inconcluso" -#: utils/cache/lsyscache.c:2483 +#: utils/cache/lsyscache.c:2520 #, c-format msgid "no input function available for type %s" msgstr "no hay una función de entrada para el tipo %s" -#: utils/cache/lsyscache.c:2516 +#: utils/cache/lsyscache.c:2553 #, c-format msgid "no output function available for type %s" msgstr "no hay una función de salida para el tipo %s" -#: utils/cache/plancache.c:698 +#: utils/cache/plancache.c:725 #, c-format msgid "cached plan must not change result type" msgstr "el plan almacenado no debe cambiar el tipo de resultado" -#: utils/cache/relcache.c:4828 +#: utils/cache/relcache.c:5021 #, 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:4830 +#: utils/cache/relcache.c:5023 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Prosiguiendo de todas maneras, pero hay algo mal." -#: utils/cache/relcache.c:5044 +#: utils/cache/relcache.c:5256 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "no se pudo eliminar el archivo de cache «%s»: %m" -#: utils/cache/relmapper.c:506 +#: utils/cache/relmapper.c:508 #, c-format msgid "cannot PREPARE a transaction that modified relation mapping" msgstr "no se puede hacer PREPARE de una transacción que ha modificado el mapeo de relaciones" -#: utils/cache/relmapper.c:649 utils/cache/relmapper.c:749 +#: utils/cache/relmapper.c:651 utils/cache/relmapper.c:751 #, c-format msgid "could not open relation mapping file \"%s\": %m" msgstr "no se pudo abrir el archivo de mapeo de relaciones «%s»: %m" -#: utils/cache/relmapper.c:662 +#: utils/cache/relmapper.c:664 #, c-format msgid "could not read relation mapping file \"%s\": %m" msgstr "no se pudo leer el archivo de mapeo de relaciones «%s»: %m" -#: utils/cache/relmapper.c:672 +#: utils/cache/relmapper.c:674 #, c-format msgid "relation mapping file \"%s\" contains invalid data" msgstr "el archivo de mapeo de relaciones «%s» contiene datos no válidos" -#: utils/cache/relmapper.c:682 +#: utils/cache/relmapper.c:684 #, c-format msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "el archivo de mapeo de relaciones «%s» tiene una suma de verificación incorrecta" -#: utils/cache/relmapper.c:788 +#: utils/cache/relmapper.c:784 #, c-format msgid "could not write to relation mapping file \"%s\": %m" msgstr "no se pudo escribir el archivo de mapeo de relaciones «%s»: %m" -#: utils/cache/relmapper.c:801 +#: utils/cache/relmapper.c:797 #, c-format msgid "could not fsync relation mapping file \"%s\": %m" msgstr "no se pudo sincronizar (fsync) el archivo de mapeo de relaciones «%s»: %m" -#: utils/cache/relmapper.c:807 +#: utils/cache/relmapper.c:803 #, c-format msgid "could not close relation mapping file \"%s\": %m" msgstr "no se pudo cerrar el archivo de mapeo de relaciones «%s»: %m" -#: utils/cache/typcache.c:704 +#: utils/cache/typcache.c:1156 #, c-format msgid "type %s is not composite" msgstr "el tipo %s no es compuesto" -#: utils/cache/typcache.c:718 +#: utils/cache/typcache.c:1170 #, c-format msgid "record type has not been registered" msgstr "el tipo record no ha sido registrado" @@ -17951,189 +19697,189 @@ msgstr "TRAP: ExceptionalConditions: argumentos erróneos\n" msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" msgstr "TRAP: %s(«%s», Archivo: «%s», Línea: %d)\n" -#: utils/error/elog.c:320 utils/error/elog.c:1291 +#: utils/error/elog.c:316 utils/error/elog.c:1297 #, c-format msgid "error occurred at %s:%d before error message processing is available\n" msgstr "ocurrió un error en %s:%d antes de que el procesamiento de mensajes de error esté disponible\n" -#: utils/error/elog.c:1807 +#: utils/error/elog.c:1864 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "no se pudo reabrir «%s» para error estándar: %m" -#: utils/error/elog.c:1820 +#: utils/error/elog.c:1877 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "no se pudo reabrir «%s» para usar como salida estándar: %m" -#: utils/error/elog.c:2295 utils/error/elog.c:2312 utils/error/elog.c:2328 +#: utils/error/elog.c:2353 utils/error/elog.c:2370 utils/error/elog.c:2386 msgid "[unknown]" msgstr "[desconocido]" -#: utils/error/elog.c:2766 utils/error/elog.c:3065 utils/error/elog.c:3173 +#: utils/error/elog.c:2825 utils/error/elog.c:3124 utils/error/elog.c:3232 msgid "missing error text" msgstr "falta un texto de mensaje de error" -#: utils/error/elog.c:2769 utils/error/elog.c:2772 utils/error/elog.c:3176 -#: utils/error/elog.c:3179 +#: utils/error/elog.c:2828 utils/error/elog.c:2831 utils/error/elog.c:3235 +#: utils/error/elog.c:3238 #, c-format msgid " at character %d" msgstr " en carácter %d" -#: utils/error/elog.c:2782 utils/error/elog.c:2789 +#: utils/error/elog.c:2841 utils/error/elog.c:2848 msgid "DETAIL: " msgstr "DETALLE: " -#: utils/error/elog.c:2796 +#: utils/error/elog.c:2855 msgid "HINT: " msgstr "HINT: " -#: utils/error/elog.c:2803 +#: utils/error/elog.c:2862 msgid "QUERY: " msgstr "CONSULTA: " -#: utils/error/elog.c:2810 +#: utils/error/elog.c:2869 msgid "CONTEXT: " msgstr "CONTEXTO: " -#: utils/error/elog.c:2820 +#: utils/error/elog.c:2879 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "UBICACIÓN: %s, %s:%d\n" -#: utils/error/elog.c:2827 +#: utils/error/elog.c:2886 #, c-format msgid "LOCATION: %s:%d\n" msgstr "UBICACIÓN: %s:%d\n" -#: utils/error/elog.c:2841 +#: utils/error/elog.c:2900 msgid "STATEMENT: " msgstr "SENTENCIA: " #. translator: This string will be truncated at 47 #. characters expanded. -#: utils/error/elog.c:3294 +#: utils/error/elog.c:3353 #, c-format msgid "operating system error %d" msgstr "error %d de sistema operativo" -#: utils/error/elog.c:3489 +#: utils/error/elog.c:3548 msgid "DEBUG" msgstr "DEBUG" -#: utils/error/elog.c:3493 +#: utils/error/elog.c:3552 msgid "LOG" msgstr "LOG" -#: utils/error/elog.c:3496 +#: utils/error/elog.c:3555 msgid "INFO" msgstr "INFO" -#: utils/error/elog.c:3499 +#: utils/error/elog.c:3558 msgid "NOTICE" msgstr "NOTICE" -#: utils/error/elog.c:3502 +#: utils/error/elog.c:3561 msgid "WARNING" msgstr "WARNING" -#: utils/error/elog.c:3505 +#: utils/error/elog.c:3564 msgid "ERROR" msgstr "ERROR" -#: utils/error/elog.c:3508 +#: utils/error/elog.c:3567 msgid "FATAL" msgstr "FATAL" -#: utils/error/elog.c:3511 +#: utils/error/elog.c:3570 msgid "PANIC" msgstr "PANIC" -#: utils/fmgr/dfmgr.c:125 +#: utils/fmgr/dfmgr.c:121 #, c-format msgid "could not find function \"%s\" in file \"%s\"" msgstr "no se encuentra la función «%s» en el archivo «%s»" -#: utils/fmgr/dfmgr.c:204 utils/fmgr/dfmgr.c:413 utils/fmgr/dfmgr.c:461 +#: utils/fmgr/dfmgr.c:200 utils/fmgr/dfmgr.c:409 utils/fmgr/dfmgr.c:457 #, c-format msgid "could not access file \"%s\": %m" msgstr "no se pudo acceder al archivo «%s»: %m" -#: utils/fmgr/dfmgr.c:242 +#: utils/fmgr/dfmgr.c:238 #, c-format msgid "could not load library \"%s\": %s" msgstr "no se pudo cargar la biblioteca «%s»: %s" -#: utils/fmgr/dfmgr.c:274 +#: utils/fmgr/dfmgr.c:270 #, c-format msgid "incompatible library \"%s\": missing magic block" msgstr "biblioteca «%s» incompatible: no se encuentra el bloque mágico" -#: utils/fmgr/dfmgr.c:276 +#: utils/fmgr/dfmgr.c:272 #, c-format msgid "Extension libraries are required to use the PG_MODULE_MAGIC macro." msgstr "Se requiere que las bibliotecas de extensión usen la macro PG_MODULE_MAGIC." -#: utils/fmgr/dfmgr.c:312 +#: utils/fmgr/dfmgr.c:308 #, c-format msgid "incompatible library \"%s\": version mismatch" msgstr "biblioteca «%s» incompatible: versión no coincide" -#: utils/fmgr/dfmgr.c:314 +#: utils/fmgr/dfmgr.c:310 #, c-format msgid "Server is version %d.%d, library is version %d.%d." msgstr "Servidor tiene versión %d.%d, biblioteca es versión %d.%d." -#: utils/fmgr/dfmgr.c:333 +#: utils/fmgr/dfmgr.c:329 #, c-format msgid "Server has FUNC_MAX_ARGS = %d, library has %d." msgstr "El servidor tiene FUNC_MAX_ARGS = %d, la librería tiene %d" -#: utils/fmgr/dfmgr.c:342 +#: utils/fmgr/dfmgr.c:338 #, c-format msgid "Server has INDEX_MAX_KEYS = %d, library has %d." msgstr "El servidor tiene INDEX_MAX_KEYS = %d, la librería tiene %d" -#: utils/fmgr/dfmgr.c:351 +#: utils/fmgr/dfmgr.c:347 #, c-format msgid "Server has NAMEDATALEN = %d, library has %d." msgstr "El servidor tiene NAMEDATALEN = %d, la librería tiene %d" -#: utils/fmgr/dfmgr.c:360 +#: utils/fmgr/dfmgr.c:356 #, c-format msgid "Server has FLOAT4PASSBYVAL = %s, library has %s." msgstr "El servidor tiene FLOAT4PASSBYVAL = %s, la librería tiene %s" -#: utils/fmgr/dfmgr.c:369 +#: utils/fmgr/dfmgr.c:365 #, c-format msgid "Server has FLOAT8PASSBYVAL = %s, library has %s." msgstr "El servidor tiene FLOAT8PASSBYVAL = %s, la librería tiene %s" -#: utils/fmgr/dfmgr.c:376 +#: utils/fmgr/dfmgr.c:372 msgid "Magic block has unexpected length or padding difference." msgstr "El bloque mágico tiene un largo inesperado, o una diferencia de relleno." -#: utils/fmgr/dfmgr.c:379 +#: utils/fmgr/dfmgr.c:375 #, c-format msgid "incompatible library \"%s\": magic block mismatch" msgstr "biblioteca «%s» incompatible: bloque mágico no coincide" -#: utils/fmgr/dfmgr.c:543 +#: utils/fmgr/dfmgr.c:539 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "no está permitido el acceso a la biblioteca «%s»" -#: utils/fmgr/dfmgr.c:569 +#: utils/fmgr/dfmgr.c:565 #, c-format msgid "invalid macro name in dynamic library path: %s" msgstr "el nombre de macro no es válido en la ruta a biblioteca dinámica: %s" -#: utils/fmgr/dfmgr.c:609 +#: utils/fmgr/dfmgr.c:605 #, c-format msgid "zero-length component in parameter \"dynamic_library_path\"" msgstr "se encontró componente de largo cero en el parámetro «dynamic_library_path»" -#: utils/fmgr/dfmgr.c:628 +#: utils/fmgr/dfmgr.c:624 #, c-format msgid "component in parameter \"dynamic_library_path\" is not an absolute path" msgstr "un componente en el parámetro «dynamic_library_path» no es una ruta absoluta" @@ -18148,12 +19894,12 @@ msgstr "la función interna «%s» no está en la tabla interna de búsqueda" msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "la versión de API %d no reconocida fue reportada por la función «%s»" -#: utils/fmgr/fmgr.c:850 utils/fmgr/fmgr.c:2111 +#: utils/fmgr/fmgr.c:849 utils/fmgr/fmgr.c:2110 #, c-format msgid "function %u has too many arguments (%d, maximum is %d)" msgstr "la función %u tiene demasiados argumentos (%d, el máximo es %d)" -#: utils/fmgr/fmgr.c:2532 +#: utils/fmgr/fmgr.c:2531 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "función de validación de lenguaje %u invocada para el lenguaje %u en lugar de %u" @@ -18163,308 +19909,308 @@ msgstr "función de validación de lenguaje %u invocada para el lenguaje %u en l msgid "could not determine actual result type for function \"%s\" declared to return type %s" msgstr "no se pudo determinar el tipo verdadero de resultado para la función «%s» declarada retornando tipo %s" -#: utils/fmgr/funcapi.c:1300 utils/fmgr/funcapi.c:1331 +#: utils/fmgr/funcapi.c:1342 utils/fmgr/funcapi.c:1373 #, c-format msgid "number of aliases does not match number of columns" msgstr "el número de aliases no calza con el número de columnas" -#: utils/fmgr/funcapi.c:1325 +#: utils/fmgr/funcapi.c:1367 #, c-format msgid "no column alias was provided" msgstr "no se entregó alias de columna" -#: utils/fmgr/funcapi.c:1349 +#: utils/fmgr/funcapi.c:1391 #, c-format msgid "could not determine row description for function returning record" msgstr "no se pudo encontrar descripción de registro de función que retorna record" -#: utils/init/miscinit.c:116 +#: utils/init/miscinit.c:120 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "no se pudo cambiar al directorio «%s»: %m" -#: utils/init/miscinit.c:311 utils/misc/guc.c:5761 +#: utils/init/miscinit.c:425 utils/misc/guc.c:5818 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "no se puede definir el parámetro «%s» dentro de una operación restringida por seguridad" -#: utils/init/miscinit.c:390 +#: utils/init/miscinit.c:506 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "al rol «%s» no se le permite conectarse" -#: utils/init/miscinit.c:408 +#: utils/init/miscinit.c:524 #, c-format msgid "too many connections for role \"%s\"" msgstr "demasiadas conexiones para el rol «%s»" -#: utils/init/miscinit.c:468 +#: utils/init/miscinit.c:584 #, c-format msgid "permission denied to set session authorization" msgstr "se ha denegado el permiso para cambiar el usuario actual" -#: utils/init/miscinit.c:548 +#: utils/init/miscinit.c:667 #, c-format msgid "invalid role OID: %u" msgstr "el OID de rol no es válido: %u" -#: utils/init/miscinit.c:675 +#: utils/init/miscinit.c:797 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "no se pudo crear el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:689 +#: utils/init/miscinit.c:811 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "no se pudo abrir el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:695 +#: utils/init/miscinit.c:817 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "no se pudo leer el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:703 +#: utils/init/miscinit.c:825 #, c-format msgid "lock file \"%s\" is empty" msgstr "el archivo de bloqueo «%s» está vacío" -#: utils/init/miscinit.c:704 +#: utils/init/miscinit.c:826 #, c-format msgid "Either another server is starting, or the lock file is the remnant of a previous server startup crash." msgstr "Otro proceso servidor está iniciándose, o el archivo de bloqueo es remanente de una caída durante un inicio anterior." -#: utils/init/miscinit.c:751 +#: utils/init/miscinit.c:873 #, c-format msgid "lock file \"%s\" already exists" msgstr "el archivo de bloqueo «%s» ya existe" -#: utils/init/miscinit.c:755 +#: utils/init/miscinit.c:877 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "¿Hay otro postgres (PID %d) corriendo en el directorio de datos «%s»?" -#: utils/init/miscinit.c:757 +#: utils/init/miscinit.c:879 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "¿Hay otro postmaster (PID %d) corriendo en el directorio de datos «%s»?" -#: utils/init/miscinit.c:760 +#: utils/init/miscinit.c:882 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "¿Hay otro postgres (PID %d) usando el socket «%s»?" -#: utils/init/miscinit.c:762 +#: utils/init/miscinit.c:884 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "¿Hay otro postmaster (PID %d) usando el socket «%s»?" -#: utils/init/miscinit.c:798 +#: utils/init/miscinit.c:920 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "el bloque de memoria compartida preexistente (clave %lu, ID %lu) aún está en uso" -#: utils/init/miscinit.c:801 +#: utils/init/miscinit.c:923 #, c-format msgid "If you're sure there are no old server processes still running, remove the shared memory block or just delete the file \"%s\"." msgstr "Si está seguro que no hay procesos de servidor antiguos aún en ejecución, elimine el bloque de memoria compartida, o simplemente borre el archivo «%s»." -#: utils/init/miscinit.c:817 +#: utils/init/miscinit.c:939 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "no se pudo eliminar el archivo de bloqueo antiguo «%s»: %m" -#: utils/init/miscinit.c:819 +#: utils/init/miscinit.c:941 #, c-format msgid "The file seems accidentally left over, but it could not be removed. Please remove the file by hand and try again." msgstr "El archivo parece accidentalmente abandonado, pero no pudo ser eliminado. Por favor elimine el archivo manualmente e intente nuevamente." -#: utils/init/miscinit.c:855 utils/init/miscinit.c:866 -#: utils/init/miscinit.c:876 +#: utils/init/miscinit.c:977 utils/init/miscinit.c:988 +#: utils/init/miscinit.c:998 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "no se pudo escribir el archivo de bloqueo «%s»: %m" -#: utils/init/miscinit.c:1001 utils/misc/guc.c:8381 +#: utils/init/miscinit.c:1127 utils/misc/guc.c:8557 #, c-format msgid "could not read from file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" -#: utils/init/miscinit.c:1115 utils/init/miscinit.c:1128 +#: utils/init/miscinit.c:1241 utils/init/miscinit.c:1254 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "«%s» no es un directorio de datos válido" -#: utils/init/miscinit.c:1117 +#: utils/init/miscinit.c:1243 #, c-format msgid "File \"%s\" is missing." msgstr "Falta el archivo «%s»." -#: utils/init/miscinit.c:1130 +#: utils/init/miscinit.c:1256 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "El archivo «%s» no contiene datos válidos." -#: utils/init/miscinit.c:1132 +#: utils/init/miscinit.c:1258 #, c-format msgid "You might need to initdb." msgstr "Puede ser necesario ejecutar initdb." -#: utils/init/miscinit.c:1140 +#: utils/init/miscinit.c:1266 #, c-format msgid "The data directory was initialized by PostgreSQL version %ld.%ld, which is not compatible with this version %s." msgstr "El directorio de datos fue inicializado por PostgreSQL versión %ld.%ld, que no es compatible con esta versión %s." -#: utils/init/miscinit.c:1211 +#: utils/init/miscinit.c:1337 #, c-format msgid "loaded library \"%s\"" msgstr "biblioteca «%s» cargada" -#: utils/init/postinit.c:237 +#: utils/init/postinit.c:238 #, c-format msgid "replication connection authorized: user=%s SSL enabled (protocol=%s, cipher=%s, compression=%s)" msgstr "conexión de replicación autorizada: usuario=%s SSL activo (protocolo=%s, cifrado=%s, compresión=%s)" -#: utils/init/postinit.c:239 utils/init/postinit.c:253 +#: utils/init/postinit.c:240 utils/init/postinit.c:254 msgid "off" msgstr "desactivado" -#: utils/init/postinit.c:239 utils/init/postinit.c:253 +#: utils/init/postinit.c:240 utils/init/postinit.c:254 msgid "on" msgstr "activado" -#: utils/init/postinit.c:243 +#: utils/init/postinit.c:244 #, c-format msgid "replication connection authorized: user=%s" msgstr "conexión de replicación autorizada: usuario=%s" -#: utils/init/postinit.c:251 +#: utils/init/postinit.c:252 #, c-format msgid "connection authorized: user=%s database=%s SSL enabled (protocol=%s, cipher=%s, compression=%s)" msgstr "conexión autorizada: usuario=%s database=%s SSL activo (protocolo=%s, cifrado=%s, compresión=%s)" -#: utils/init/postinit.c:257 +#: utils/init/postinit.c:258 #, c-format msgid "connection authorized: user=%s database=%s" msgstr "conexión autorizada: usuario=%s database=%s" -#: utils/init/postinit.c:289 +#: utils/init/postinit.c:290 #, c-format msgid "database \"%s\" has disappeared from pg_database" msgstr "la base de datos «%s» ha desaparecido de pg_database" -#: utils/init/postinit.c:291 +#: utils/init/postinit.c:292 #, c-format msgid "Database OID %u now seems to belong to \"%s\"." msgstr "Base de datos con OID %u ahora parece pertenecer a «%s»." -#: utils/init/postinit.c:311 +#: utils/init/postinit.c:312 #, c-format msgid "database \"%s\" is not currently accepting connections" msgstr "la base de datos «%s» no acepta conexiones" -#: utils/init/postinit.c:324 +#: utils/init/postinit.c:325 #, c-format msgid "permission denied for database \"%s\"" msgstr "permiso denegado a la base de datos «%s»" -#: utils/init/postinit.c:325 +#: utils/init/postinit.c:326 #, c-format msgid "User does not have CONNECT privilege." msgstr "Usuario no tiene privilegios de conexión." -#: utils/init/postinit.c:342 +#: utils/init/postinit.c:343 #, c-format msgid "too many connections for database \"%s\"" msgstr "demasiadas conexiones para la base de datos «%s»" -#: utils/init/postinit.c:364 utils/init/postinit.c:371 +#: utils/init/postinit.c:365 utils/init/postinit.c:372 #, c-format msgid "database locale is incompatible with operating system" msgstr "la configuración regional es incompatible con el sistema operativo" -#: utils/init/postinit.c:365 +#: utils/init/postinit.c:366 #, c-format msgid "The database was initialized with LC_COLLATE \"%s\", which is not recognized by setlocale()." msgstr "La base de datos fue inicializada con LC_COLLATE «%s», el cual no es reconocido por setlocale()." -#: utils/init/postinit.c:367 utils/init/postinit.c:374 +#: utils/init/postinit.c:368 utils/init/postinit.c:375 #, c-format msgid "Recreate the database with another locale or install the missing locale." msgstr "Recree la base de datos con otra configuración regional, o instale la configuración regional faltante." -#: utils/init/postinit.c:372 +#: utils/init/postinit.c:373 #, c-format msgid "The database was initialized with LC_CTYPE \"%s\", which is not recognized by setlocale()." msgstr "La base de datos fueron inicializada con LC_CTYPE «%s», el cual no es reconocido por setlocale()." -#: utils/init/postinit.c:667 +#: utils/init/postinit.c:699 #, c-format msgid "no roles are defined in this database system" msgstr "no hay roles definidos en esta base de datos" -#: utils/init/postinit.c:668 +#: utils/init/postinit.c:700 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Debería ejecutar imediatamente CREATE USER \"%s\" SUPERUSER;." -#: utils/init/postinit.c:704 +#: utils/init/postinit.c:736 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "nuevas conexiones de replicación no son permitidas durante el apagado de la base de datos" -#: utils/init/postinit.c:708 +#: utils/init/postinit.c:740 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "debe ser superusuario para conectarse durante el apagado de la base de datos" -#: utils/init/postinit.c:718 +#: utils/init/postinit.c:750 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "debe ser superusuario para conectarse en modo de actualización binaria" -#: utils/init/postinit.c:732 +#: utils/init/postinit.c:764 #, c-format msgid "remaining connection slots are reserved for non-replication superuser connections" msgstr "las conexiones restantes están reservadas a superusuarios y no de replicación" -#: utils/init/postinit.c:742 +#: utils/init/postinit.c:774 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "debe ser superusuario o rol de replicación para iniciar el walsender" -#: utils/init/postinit.c:811 +#: utils/init/postinit.c:843 #, c-format msgid "database %u does not exist" msgstr "no existe la base de datos %u" -#: utils/init/postinit.c:863 +#: utils/init/postinit.c:929 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Parece haber sido eliminada o renombrada." -#: utils/init/postinit.c:881 +#: utils/init/postinit.c:947 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Falta el subdirectorio de base de datos «%s»." -#: utils/init/postinit.c:886 +#: utils/init/postinit.c:952 #, c-format msgid "could not access directory \"%s\": %m" msgstr "no se pudo acceder al directorio «%s»: %m" -#: utils/mb/conv.c:519 +#: utils/mb/conv.c:360 utils/mb/conv.c:546 #, c-format msgid "invalid encoding number: %d" msgstr "el número de codificación no es válido: %d" -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:136 -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:163 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:137 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:169 #, c-format msgid "unexpected encoding ID %d for ISO 8859 character sets" msgstr "ID de codificación %d inesperado para juegos de caracteres ISO 8859" -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:126 -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:153 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:127 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:159 #, c-format msgid "unexpected encoding ID %d for WIN character sets" msgstr "ID de codificación %d inesperado para juegos de caracteres WIN" @@ -18509,1406 +20255,1443 @@ msgstr "byte no válido para codificación «%s»: 0x%02x" msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codeset falló" -#: utils/mb/wchar.c:2009 +#: utils/mb/wchar.c:2015 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "secuencia de bytes no válida para codificación «%s»: %s" -#: utils/mb/wchar.c:2042 +#: utils/mb/wchar.c:2048 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "carácter con secuencia de bytes %s en codificación «%s» no tiene equivalente en la codificación «%s»" -#: utils/misc/guc.c:552 +#: utils/misc/guc.c:527 msgid "Ungrouped" msgstr "Sin Grupo" -#: utils/misc/guc.c:554 +#: utils/misc/guc.c:529 msgid "File Locations" msgstr "Ubicaciones de Archivos" -#: utils/misc/guc.c:556 +#: utils/misc/guc.c:531 msgid "Connections and Authentication" msgstr "Conexiones y Autentificación" -#: utils/misc/guc.c:558 +#: utils/misc/guc.c:533 msgid "Connections and Authentication / Connection Settings" msgstr "Conexiones y Autentificación / Parámetros de Conexión" -#: utils/misc/guc.c:560 +#: utils/misc/guc.c:535 msgid "Connections and Authentication / Security and Authentication" msgstr "Conexiones y Autentificación / Seguridad y Autentificación" -#: utils/misc/guc.c:562 +#: utils/misc/guc.c:537 msgid "Resource Usage" msgstr "Uso de Recursos" -#: utils/misc/guc.c:564 +#: utils/misc/guc.c:539 msgid "Resource Usage / Memory" msgstr "Uso de Recursos / Memoria" -#: utils/misc/guc.c:566 +#: utils/misc/guc.c:541 msgid "Resource Usage / Disk" msgstr "Uso de Recursos / Disco" -#: utils/misc/guc.c:568 +#: utils/misc/guc.c:543 msgid "Resource Usage / Kernel Resources" msgstr "Uso de Recursos / Recursos del Kernel" -#: utils/misc/guc.c:570 +#: utils/misc/guc.c:545 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Uso de Recursos / Retardo de Vacuum por Costos" -#: utils/misc/guc.c:572 +#: utils/misc/guc.c:547 msgid "Resource Usage / Background Writer" msgstr "Uso de Recursos / Escritor en Segundo Plano" -#: utils/misc/guc.c:574 +#: utils/misc/guc.c:549 msgid "Resource Usage / Asynchronous Behavior" msgstr "Uso de Recursos / Comportamiento Asíncrono" -#: utils/misc/guc.c:576 +#: utils/misc/guc.c:551 msgid "Write-Ahead Log" msgstr "Write-Ahead Log" -#: utils/misc/guc.c:578 +#: utils/misc/guc.c:553 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead Log / Configuraciones" -#: utils/misc/guc.c:580 +#: utils/misc/guc.c:555 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead Log / Puntos de Control (Checkpoints)" -#: utils/misc/guc.c:582 +#: utils/misc/guc.c:557 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead Log / Archivado" -#: utils/misc/guc.c:584 +#: utils/misc/guc.c:559 msgid "Replication" msgstr "Replicación" -#: utils/misc/guc.c:586 +#: utils/misc/guc.c:561 msgid "Replication / Sending Servers" msgstr "Replicación / Servidores de Envío" -#: utils/misc/guc.c:588 +#: utils/misc/guc.c:563 msgid "Replication / Master Server" msgstr "Replicación / Servidor Maestro" -#: utils/misc/guc.c:590 +#: utils/misc/guc.c:565 msgid "Replication / Standby Servers" msgstr "Replicación / Servidores Standby" -#: utils/misc/guc.c:592 +#: utils/misc/guc.c:567 msgid "Query Tuning" msgstr "Afinamiento de Consultas" -#: utils/misc/guc.c:594 +#: utils/misc/guc.c:569 msgid "Query Tuning / Planner Method Configuration" msgstr "Afinamiento de Consultas / Configuración de Métodos del Planner" -#: utils/misc/guc.c:596 +#: utils/misc/guc.c:571 msgid "Query Tuning / Planner Cost Constants" msgstr "Afinamiento de Consultas / Constantes de Costo del Planner" -#: utils/misc/guc.c:598 +#: utils/misc/guc.c:573 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Afinamiento de Consultas / Optimizador Genético de Consultas" -#: utils/misc/guc.c:600 +#: utils/misc/guc.c:575 msgid "Query Tuning / Other Planner Options" msgstr "Afinamiento de Consultas / Otras Opciones del Planner" -#: utils/misc/guc.c:602 +#: utils/misc/guc.c:577 msgid "Reporting and Logging" msgstr "Reporte y Registro" -#: utils/misc/guc.c:604 +#: utils/misc/guc.c:579 msgid "Reporting and Logging / Where to Log" msgstr "Reporte y Registro / Cuándo Registrar" -#: utils/misc/guc.c:606 +#: utils/misc/guc.c:581 msgid "Reporting and Logging / When to Log" msgstr "Reporte y Registro / Cuándo Registrar" -#: utils/misc/guc.c:608 +#: utils/misc/guc.c:583 msgid "Reporting and Logging / What to Log" msgstr "Reporte y Registro / Qué Registrar" -#: utils/misc/guc.c:610 +#: utils/misc/guc.c:585 msgid "Statistics" msgstr "Estadísticas" -#: utils/misc/guc.c:612 +#: utils/misc/guc.c:587 msgid "Statistics / Monitoring" msgstr "Estadísticas / Monitoreo" -#: utils/misc/guc.c:614 +#: utils/misc/guc.c:589 msgid "Statistics / Query and Index Statistics Collector" msgstr "Estadísticas / Recolector de Estadísticas de Consultas e Índices" -#: utils/misc/guc.c:616 +#: utils/misc/guc.c:591 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc.c:618 +#: utils/misc/guc.c:593 msgid "Client Connection Defaults" msgstr "Valores por Omisión de Conexiones" -#: utils/misc/guc.c:620 +#: utils/misc/guc.c:595 msgid "Client Connection Defaults / Statement Behavior" msgstr "Valores por Omisión de Conexiones / Comportamiento de Sentencias" -#: utils/misc/guc.c:622 +#: utils/misc/guc.c:597 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Valores por Omisión de Conexiones / Configuraciones Regionales y Formateo" -#: utils/misc/guc.c:624 +#: utils/misc/guc.c:599 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Valores por Omisión de Conexiones / Precargado de Bibliotecas Compartidas" -#: utils/misc/guc.c:626 +#: utils/misc/guc.c:601 msgid "Client Connection Defaults / Other Defaults" msgstr "Valores por Omisión de Conexiones / Otros Valores" -#: utils/misc/guc.c:628 +#: utils/misc/guc.c:603 msgid "Lock Management" msgstr "Manejo de Bloqueos" -#: utils/misc/guc.c:630 +#: utils/misc/guc.c:605 msgid "Version and Platform Compatibility" msgstr "Compatibilidad de Versión y Plataforma" -#: utils/misc/guc.c:632 +#: utils/misc/guc.c:607 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Compatibilidad de Versión y Plataforma / Versiones Anteriores de PostgreSQL" -#: utils/misc/guc.c:634 +#: utils/misc/guc.c:609 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Compatibilidad de Versión y Plataforma / Otras Plataformas y Clientes" -#: utils/misc/guc.c:636 +#: utils/misc/guc.c:611 msgid "Error Handling" msgstr "Gestión de Errores" -#: utils/misc/guc.c:638 +#: utils/misc/guc.c:613 msgid "Preset Options" msgstr "Opciones Predefinidas" -#: utils/misc/guc.c:640 +#: utils/misc/guc.c:615 msgid "Customized Options" msgstr "Opciones Personalizadas" -#: utils/misc/guc.c:642 +#: utils/misc/guc.c:617 msgid "Developer Options" msgstr "Opciones de Desarrollador" -#: utils/misc/guc.c:696 +#: utils/misc/guc.c:674 +msgid "Valid units for this parameter are \"kB\", \"MB\", \"GB\", and \"TB\"." +msgstr "Unidades válidas para este parámetro son «kB», «MB», «GB» y «TB»." + +#: utils/misc/guc.c:701 +msgid "Valid units for this parameter are \"ms\", \"s\", \"min\", \"h\", and \"d\"." +msgstr "Unidades válidas para este parámetro son «ms», «s», «min», «h» y «d»." + +#: utils/misc/guc.c:760 msgid "Enables the planner's use of sequential-scan plans." msgstr "Permitir el uso de planes de recorrido secuencial." -#: utils/misc/guc.c:705 +#: utils/misc/guc.c:769 msgid "Enables the planner's use of index-scan plans." msgstr "Permitir el uso de planes de recorrido de índice." -#: utils/misc/guc.c:714 +#: utils/misc/guc.c:778 msgid "Enables the planner's use of index-only-scan plans." msgstr "Permitir el uso de planes de recorrido de sólo-índice." -#: utils/misc/guc.c:723 +#: utils/misc/guc.c:787 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Permitir el uso de planes de recorrido de índice por mapas de bits." -#: utils/misc/guc.c:732 +#: utils/misc/guc.c:796 msgid "Enables the planner's use of TID scan plans." msgstr "Permitir el uso de planes de recorrido por TID." -#: utils/misc/guc.c:741 +#: utils/misc/guc.c:805 msgid "Enables the planner's use of explicit sort steps." msgstr "Permitir el uso de pasos explícitos de ordenamiento." -#: utils/misc/guc.c:750 +#: utils/misc/guc.c:814 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Permitir el uso de planes de agregación a través de hash." -#: utils/misc/guc.c:759 +#: utils/misc/guc.c:823 msgid "Enables the planner's use of materialization." msgstr "Permitir el uso de materialización de planes." -#: utils/misc/guc.c:768 +#: utils/misc/guc.c:832 msgid "Enables the planner's use of nested-loop join plans." msgstr "Permitir el uso de planes «nested-loop join»." -#: utils/misc/guc.c:777 +#: utils/misc/guc.c:841 msgid "Enables the planner's use of merge join plans." msgstr "Permitir el uso de planes «merge join»." -#: utils/misc/guc.c:786 +#: utils/misc/guc.c:850 msgid "Enables the planner's use of hash join plans." msgstr "Permitir el uso de planes «hash join»." -#: utils/misc/guc.c:795 +#: utils/misc/guc.c:859 msgid "Enables genetic query optimization." msgstr "Permitir el uso del optimizador genético de consultas." -#: utils/misc/guc.c:796 +#: utils/misc/guc.c:860 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Este algoritmo intenta planear las consultas sin hacer búsqueda exhaustiva." -#: utils/misc/guc.c:806 +#: utils/misc/guc.c:870 msgid "Shows whether the current user is a superuser." msgstr "Indica si el usuario actual es superusuario." -#: utils/misc/guc.c:816 +#: utils/misc/guc.c:880 msgid "Enables advertising the server via Bonjour." msgstr "Permitir la publicación del servidor vía Bonjour." -#: utils/misc/guc.c:825 +#: utils/misc/guc.c:889 +msgid "Collects transaction commit time." +msgstr "" + +#: utils/misc/guc.c:898 msgid "Enables SSL connections." msgstr "Permitir conexiones SSL." -#: utils/misc/guc.c:834 +#: utils/misc/guc.c:907 msgid "Give priority to server ciphersuite order." msgstr "Da prioridad al orden de algoritmos de cifrado especificado por el servidor." -#: utils/misc/guc.c:843 +#: utils/misc/guc.c:916 msgid "Forces synchronization of updates to disk." msgstr "Forzar la sincronización de escrituras a disco." -#: utils/misc/guc.c:844 +#: utils/misc/guc.c:917 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "El servidor usará la llamada a sistema fsync() en varios lugares para asegurarse que las actualizaciones son escritas físicamente a disco. Esto asegura que las bases de datos se recuperarán a un estado consistente después de una caída de hardware o sistema operativo." -#: utils/misc/guc.c:855 +#: utils/misc/guc.c:928 msgid "Continues processing after a checksum failure." msgstr "Continuar procesando después de una falla de suma de verificación." -#: utils/misc/guc.c:856 +#: utils/misc/guc.c:929 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "La detección de una suma de verificación que no coincide normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo ignore_checksum_failure a true hace que el sistema ignore la falla (pero aún así reporta un mensaje de warning), y continúe el procesamiento. Este comportamiento podría causar caídas del sistema u otros problemas serios. Sólo tiene efecto si las sumas de verificación están activadas." -#: utils/misc/guc.c:870 +#: utils/misc/guc.c:943 msgid "Continues processing past damaged page headers." msgstr "Continuar procesando después de detectar encabezados de página dañados." -#: utils/misc/guc.c:871 +#: utils/misc/guc.c:944 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "La detección de un encabezado de página dañado normalmente hace que PostgreSQL reporte un error, abortando la transacción en curso. Definiendo zero_damaged_pages a true hace que el sistema reporte un mensaje de warning, escriba ceros en toda la página, y continúe el procesamiento. Este comportamiento destruirá datos; en particular, todas las tuplas en la página dañada." -#: utils/misc/guc.c:884 +#: utils/misc/guc.c:957 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Escribe páginas completas a WAL cuando son modificadas después de un punto de control." -#: utils/misc/guc.c:885 +#: utils/misc/guc.c:958 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "Una escritura de página que está siendo procesada durante una caída del sistema operativo puede ser completada sólo parcialmente. Durante la recuperación, los cambios de registros (tuplas) almacenados en WAL no son suficientes para la recuperación. Esta opción activa la escritura de las páginas a WAL cuando son modificadas por primera vez después de un punto de control, de manera que una recuperación total es posible." -#: utils/misc/guc.c:898 +#: utils/misc/guc.c:971 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." msgstr "Escribir páginas completas a WAL cuando son modificadas después de un punto de control, incluso para modificaciones no críticas." -#: utils/misc/guc.c:908 +#: utils/misc/guc.c:981 +msgid "Compresses full-page writes written in WAL file." +msgstr "" + +#: utils/misc/guc.c:991 msgid "Logs each checkpoint." msgstr "Registrar cada punto de control." -#: utils/misc/guc.c:917 +#: utils/misc/guc.c:1000 msgid "Logs each successful connection." msgstr "Registrar cada conexión exitosa." -#: utils/misc/guc.c:926 +#: utils/misc/guc.c:1009 msgid "Logs end of a session, including duration." msgstr "Registrar el fin de una sesión, incluyendo su duración." -#: utils/misc/guc.c:935 -msgid "Turns on various assertion checks." -msgstr "Activar varios chequeos de integridad (assertion checks)." +#: utils/misc/guc.c:1018 +#, fuzzy +msgid "Logs each replication command." +msgstr "Registrar el plan de ejecución de cada consulta." -#: utils/misc/guc.c:936 -msgid "This is a debugging aid." -msgstr "Esto es una ayuda para la depuración." +#: utils/misc/guc.c:1027 +#, fuzzy +msgid "Shows whether the running server has assertion checks enabled." +msgstr "Indica si el usuario actual es superusuario." -#: utils/misc/guc.c:950 +#: utils/misc/guc.c:1042 msgid "Terminate session on any error." msgstr "Terminar sesión ante cualquier error." -#: utils/misc/guc.c:959 +#: utils/misc/guc.c:1051 msgid "Reinitialize server after backend crash." msgstr "Reinicializar el servidor después de una caída de un proceso servidor." -#: utils/misc/guc.c:969 +#: utils/misc/guc.c:1061 msgid "Logs the duration of each completed SQL statement." msgstr "Registrar la duración de cada sentencia SQL ejecutada." -#: utils/misc/guc.c:978 +#: utils/misc/guc.c:1070 msgid "Logs each query's parse tree." msgstr "Registrar cada arbol analizado de consulta " -#: utils/misc/guc.c:987 +#: utils/misc/guc.c:1079 msgid "Logs each query's rewritten parse tree." msgstr "Registrar cada reescritura del arból analizado de consulta" -#: utils/misc/guc.c:996 +#: utils/misc/guc.c:1088 msgid "Logs each query's execution plan." msgstr "Registrar el plan de ejecución de cada consulta." -#: utils/misc/guc.c:1005 +#: utils/misc/guc.c:1097 msgid "Indents parse and plan tree displays." msgstr "Indentar los árboles de parse y plan." -#: utils/misc/guc.c:1014 +#: utils/misc/guc.c:1106 msgid "Writes parser performance statistics to the server log." msgstr "Escribir estadísticas de parser al registro del servidor." -#: utils/misc/guc.c:1023 +#: utils/misc/guc.c:1115 msgid "Writes planner performance statistics to the server log." msgstr "Escribir estadísticas de planner al registro del servidor." -#: utils/misc/guc.c:1032 +#: utils/misc/guc.c:1124 msgid "Writes executor performance statistics to the server log." msgstr "Escribir estadísticas del executor al registro del servidor." -#: utils/misc/guc.c:1041 +#: utils/misc/guc.c:1133 msgid "Writes cumulative performance statistics to the server log." msgstr "Escribir estadísticas acumulativas al registro del servidor." -#: utils/misc/guc.c:1051 +#: utils/misc/guc.c:1143 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Registrar uso de recursos de sistema (memoria y CPU) en varias operaciones B-tree." -#: utils/misc/guc.c:1063 +#: utils/misc/guc.c:1155 msgid "Collects information about executing commands." msgstr "Recolectar estadísticas sobre órdenes en ejecución." -#: utils/misc/guc.c:1064 +#: utils/misc/guc.c:1156 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "Activa la recolección de información sobre la orden actualmente en ejecución en cada sesión, junto con el momento en el cual esa orden comenzó la ejecución." -#: utils/misc/guc.c:1074 +#: utils/misc/guc.c:1166 msgid "Collects statistics on database activity." msgstr "Recolectar estadísticas de actividad de la base de datos." -#: utils/misc/guc.c:1083 +#: utils/misc/guc.c:1175 msgid "Collects timing statistics for database I/O activity." msgstr "Recolectar estadísticas de tiempos en las operaciones de I/O de la base de datos." -#: utils/misc/guc.c:1093 +#: utils/misc/guc.c:1185 msgid "Updates the process title to show the active SQL command." msgstr "Actualiza el título del proceso para mostrar la orden SQL activo." -#: utils/misc/guc.c:1094 +#: utils/misc/guc.c:1186 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "Habilita que se actualice el título del proceso cada vez que una orden SQL es recibido por el servidor." -#: utils/misc/guc.c:1103 +#: utils/misc/guc.c:1195 msgid "Starts the autovacuum subprocess." msgstr "Iniciar el subproceso de autovacuum." -#: utils/misc/guc.c:1113 +#: utils/misc/guc.c:1205 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Generar salida de depuración para LISTEN y NOTIFY." -#: utils/misc/guc.c:1125 +#: utils/misc/guc.c:1217 msgid "Emits information about lock usage." msgstr "Emitir información acerca del uso de locks." -#: utils/misc/guc.c:1135 +#: utils/misc/guc.c:1227 msgid "Emits information about user lock usage." msgstr "Emitir información acerca del uso de locks de usuario." -#: utils/misc/guc.c:1145 +#: utils/misc/guc.c:1237 msgid "Emits information about lightweight lock usage." msgstr "Emitir información acerca del uso de «lightweight locks»." -#: utils/misc/guc.c:1155 +#: utils/misc/guc.c:1247 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Volcar información acerca de los locks existentes cuando se agota el tiempo de deadlock." -#: utils/misc/guc.c:1167 +#: utils/misc/guc.c:1259 msgid "Logs long lock waits." msgstr "Registrar esperas largas de bloqueos." -#: utils/misc/guc.c:1177 +#: utils/misc/guc.c:1269 msgid "Logs the host name in the connection logs." msgstr "Registrar el nombre del host en la conexión." -#: utils/misc/guc.c:1178 +#: utils/misc/guc.c:1270 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "Por omisión, los registros de conexión sólo muestran la dirección IP del host que establece la conexión. Si desea que se despliegue el nombre del host puede activar esta opción, pero dependiendo de su configuración de resolución de nombres esto puede imponer una penalización de rendimiento no despreciable." -#: utils/misc/guc.c:1189 +#: utils/misc/guc.c:1281 msgid "Causes subtables to be included by default in various commands." msgstr "Incluir, por omisión, subtablas en varias órdenes." -#: utils/misc/guc.c:1198 +#: utils/misc/guc.c:1290 msgid "Encrypt passwords." msgstr "Cifrar contraseñas." -#: utils/misc/guc.c:1199 +#: utils/misc/guc.c:1291 msgid "When a password is specified in CREATE USER or ALTER USER without writing either ENCRYPTED or UNENCRYPTED, this parameter determines whether the password is to be encrypted." msgstr "Cuando se entrega una contraseña en CREATE USER o ALTER USER sin especificar ENCRYPTED ni UNENCRYPTED, esta opción determina si la password deberá ser encriptada." -#: utils/misc/guc.c:1209 +#: utils/misc/guc.c:1301 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Tratar expr=NULL como expr IS NULL." -#: utils/misc/guc.c:1210 +#: utils/misc/guc.c:1302 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "Cuando está activado, expresiones de la forma expr = NULL (o NULL = expr) son tratadas como expr IS NULL, esto es, retornarán verdadero si expr es evaluada al valor nulo, y falso en caso contrario. El comportamiento correcto de expr = NULL es retornar siempre null (desconocido)." -#: utils/misc/guc.c:1222 +#: utils/misc/guc.c:1314 msgid "Enables per-database user names." msgstr "Activar el uso de nombre de usuario locales a cada base de datos." -#: utils/misc/guc.c:1232 -msgid "This parameter doesn't do anything." -msgstr "Este parámetro no hace nada." - -#: utils/misc/guc.c:1233 -msgid "It's just here so that we won't choke on SET AUTOCOMMIT TO ON from 7.3-vintage clients." -msgstr "Está aquí sólo para poder aceptar SET AUTOCOMMIT TO ON desde clientes de la línea 7.3." - -#: utils/misc/guc.c:1242 +#: utils/misc/guc.c:1323 msgid "Sets the default read-only status of new transactions." msgstr "Estado por omisión de sólo lectura de nuevas transacciones." -#: utils/misc/guc.c:1251 +#: utils/misc/guc.c:1332 msgid "Sets the current transaction's read-only status." msgstr "Activa el estado de sólo lectura de la transacción en curso." -#: utils/misc/guc.c:1261 +#: utils/misc/guc.c:1342 msgid "Sets the default deferrable status of new transactions." msgstr "Estado por omisión de postergable de nuevas transacciones." -#: utils/misc/guc.c:1270 +#: utils/misc/guc.c:1351 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "Si está activo, las transacciones serializables de sólo lectura serán pausadas hasta que puedan ejecutarse sin posibles fallas de serialización." -#: utils/misc/guc.c:1280 +#: utils/misc/guc.c:1361 +msgid "Enable row security." +msgstr "" + +#: utils/misc/guc.c:1362 +msgid "When enabled, row security will be applied to all users." +msgstr "" + +#: utils/misc/guc.c:1370 msgid "Check function bodies during CREATE FUNCTION." msgstr "Verificar definición de funciones durante CREATE FUNCTION." -#: utils/misc/guc.c:1289 +#: utils/misc/guc.c:1379 msgid "Enable input of NULL elements in arrays." msgstr "Habilita el ingreso de elementos nulos en arrays." -#: utils/misc/guc.c:1290 +#: utils/misc/guc.c:1380 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "Cuando está activo, un valor NULL sin comillas en la entrada de un array significa un valor nulo; en caso contrario es tomado literalmente." -#: utils/misc/guc.c:1300 +#: utils/misc/guc.c:1390 msgid "Create new tables with OIDs by default." msgstr "Crea nuevas tablas con OIDs por omisión." -#: utils/misc/guc.c:1309 +#: utils/misc/guc.c:1399 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "Lanzar un subproceso para capturar stderr y/o logs CSV en archivos de log." -#: utils/misc/guc.c:1318 +#: utils/misc/guc.c:1408 msgid "Truncate existing log files of same name during log rotation." msgstr "Truncar archivos de log del mismo nombre durante la rotación." -#: utils/misc/guc.c:1329 +#: utils/misc/guc.c:1419 msgid "Emit information about resource usage in sorting." msgstr "Emitir información acerca de uso de recursos durante los ordenamientos." -#: utils/misc/guc.c:1343 +#: utils/misc/guc.c:1433 msgid "Generate debugging output for synchronized scanning." msgstr "Generar salida de depuración para recorrido sincronizado." -#: utils/misc/guc.c:1358 +#: utils/misc/guc.c:1448 msgid "Enable bounded sorting using heap sort." msgstr "Activar ordenamiento acotado usando «heap sort»." -#: utils/misc/guc.c:1371 +#: utils/misc/guc.c:1461 msgid "Emit WAL-related debugging output." msgstr "Activar salida de depuración de WAL." -#: utils/misc/guc.c:1383 +#: utils/misc/guc.c:1473 msgid "Datetimes are integer based." msgstr "Las fechas y horas se basan en tipos enteros." -#: utils/misc/guc.c:1398 +#: utils/misc/guc.c:1488 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "Define que los nombres de usuario Kerberos y GSSAPI deberían ser tratados sin distinción de mayúsculas." -#: utils/misc/guc.c:1408 +#: utils/misc/guc.c:1498 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Avisa acerca de escapes de backslash en literales de cadena corrientes." -#: utils/misc/guc.c:1418 +#: utils/misc/guc.c:1508 msgid "Causes '...' strings to treat backslashes literally." msgstr "Provoca que las cadenas '...' traten las barras inclinadas inversas (\\) en forma literal." -#: utils/misc/guc.c:1429 +#: utils/misc/guc.c:1519 msgid "Enable synchronized sequential scans." msgstr "Permitir la sincronización de recorridos secuenciales." -#: utils/misc/guc.c:1439 -msgid "Allows archiving of WAL files using archive_command." -msgstr "Permite el archivado de WAL usando archive_command." - -#: utils/misc/guc.c:1449 +#: utils/misc/guc.c:1529 msgid "Allows connections and queries during recovery." msgstr "Permite conexiones y consultas durante la recuperación." -#: utils/misc/guc.c:1459 +#: utils/misc/guc.c:1539 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Permite retroalimentación desde un hot standby hacia el primario que evitará conflictos en consultas." -#: utils/misc/guc.c:1469 +#: utils/misc/guc.c:1549 msgid "Allows modifications of the structure of system tables." msgstr "Permite modificaciones de la estructura de las tablas del sistema." -#: utils/misc/guc.c:1480 +#: utils/misc/guc.c:1560 msgid "Disables reading from system indexes." msgstr "Deshabilita lectura de índices del sistema." -#: utils/misc/guc.c:1481 +#: utils/misc/guc.c:1561 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "No evita la actualización de índices, así que es seguro. Lo peor que puede ocurrir es lentitud del sistema." -#: utils/misc/guc.c:1492 +#: utils/misc/guc.c:1572 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Activa el modo de compatibilidad con versiones anteriores de las comprobaciones de privilegios de objetos grandes." -#: utils/misc/guc.c:1493 +#: utils/misc/guc.c:1573 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "Omite las comprobaciones de privilegios cuando se leen o modifican los objetos grandes, para compatibilidad con versiones de PostgreSQL anteriores a 9.0." -#: utils/misc/guc.c:1503 +#: utils/misc/guc.c:1583 +msgid "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." +msgstr "" + +#: utils/misc/guc.c:1593 msgid "When generating SQL fragments, quote all identifiers." msgstr "Al generar fragmentos SQL, entrecomillar todos los identificadores." -#: utils/misc/guc.c:1513 +#: utils/misc/guc.c:1603 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Indica si las sumas de verificación están activas en este cluster." -#: utils/misc/guc.c:1533 +#: utils/misc/guc.c:1623 msgid "Forces a switch to the next xlog file if a new file has not been started within N seconds." msgstr "Fuerza el cambio al siguiente archivo xlog si un nuevo archivo no ha sido iniciado dentro de N segundos." -#: utils/misc/guc.c:1544 +#: utils/misc/guc.c:1634 msgid "Waits N seconds on connection startup after authentication." msgstr "Espera N segundos al inicio de la conexión después de la autentificación." -#: utils/misc/guc.c:1545 utils/misc/guc.c:2047 +#: utils/misc/guc.c:1635 utils/misc/guc.c:2137 msgid "This allows attaching a debugger to the process." msgstr "Esto permite adjuntar un depurador al proceso." -#: utils/misc/guc.c:1554 +#: utils/misc/guc.c:1644 msgid "Sets the default statistics target." msgstr "Definir el valor por omisión de toma de estadísticas." -#: utils/misc/guc.c:1555 +#: utils/misc/guc.c:1645 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "Esto se aplica a columnas de tablas que no tienen un valor definido a través de ALTER TABLE SET STATISTICS." -#: utils/misc/guc.c:1564 +#: utils/misc/guc.c:1654 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Tamaño de lista de FROM a partir del cual subconsultas no serán colapsadas." -#: utils/misc/guc.c:1566 +#: utils/misc/guc.c:1656 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "El planner mezclará subconsultas en consultas de nivel superior si la lista FROM resultante es menor que esta cantidad de ítems." -#: utils/misc/guc.c:1576 +#: utils/misc/guc.c:1666 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Tamaño de lista de FROM a partir del cual constructos JOIN no serán aplanados." -#: utils/misc/guc.c:1578 +#: utils/misc/guc.c:1668 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "El planner aplanará constructos JOIN explícitos en listas de ítems FROM siempre que la lista resultante no tenga más que esta cantidad de ítems." -#: utils/misc/guc.c:1588 +#: utils/misc/guc.c:1678 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Umbral de ítems en FROM a partir del cual se usará GEQO." -#: utils/misc/guc.c:1597 +#: utils/misc/guc.c:1687 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: effort se usa para determinar los valores por defecto para otros parámetros." -#: utils/misc/guc.c:1606 +#: utils/misc/guc.c:1696 msgid "GEQO: number of individuals in the population." msgstr "GEQO: número de individuos en una población." -#: utils/misc/guc.c:1607 utils/misc/guc.c:1616 +#: utils/misc/guc.c:1697 utils/misc/guc.c:1706 msgid "Zero selects a suitable default value." msgstr "Cero selecciona un valor por omisión razonable." -#: utils/misc/guc.c:1615 +#: utils/misc/guc.c:1705 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: número de iteraciones del algoritmo." -#: utils/misc/guc.c:1626 +#: utils/misc/guc.c:1716 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Define el tiempo a esperar un lock antes de buscar un deadlock." -#: utils/misc/guc.c:1637 +#: utils/misc/guc.c:1727 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Define el máximo retardo antes de cancelar consultas cuando un servidor hot standby está procesando datos de WAL archivado." -#: utils/misc/guc.c:1648 +#: utils/misc/guc.c:1738 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "Define el máximo retardo antes de cancelar consultas cuando un servidor hot standby está procesando datos de WAL en flujo." -#: utils/misc/guc.c:1659 +#: utils/misc/guc.c:1749 msgid "Sets the maximum interval between WAL receiver status reports to the primary." msgstr "Define el intervalo máximo entre reportes de estado desde un proceso receptor de WAL hacia el primario." -#: utils/misc/guc.c:1670 +#: utils/misc/guc.c:1760 msgid "Sets the maximum wait time to receive data from the primary." msgstr "Define el máximo tiempo a esperar entre recepciones de datos desde el primario." -#: utils/misc/guc.c:1681 +#: utils/misc/guc.c:1771 msgid "Sets the maximum number of concurrent connections." msgstr "Número máximo de conexiones concurrentes." -#: utils/misc/guc.c:1691 +#: utils/misc/guc.c:1781 msgid "Sets the number of connection slots reserved for superusers." msgstr "Número de conexiones reservadas para superusuarios." -#: utils/misc/guc.c:1705 +#: utils/misc/guc.c:1795 msgid "Sets the number of shared memory buffers used by the server." msgstr "Número de búfers de memoria compartida usados por el servidor." -#: utils/misc/guc.c:1716 +#: utils/misc/guc.c:1806 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Número de búfers de memoria temporal usados por cada sesión." -#: utils/misc/guc.c:1727 +#: utils/misc/guc.c:1817 msgid "Sets the TCP port the server listens on." msgstr "Puerto TCP en el cual escuchará el servidor." -#: utils/misc/guc.c:1737 +#: utils/misc/guc.c:1827 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Privilegios de acceso al socket Unix." -#: utils/misc/guc.c:1738 +#: utils/misc/guc.c:1828 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Los sockets de dominio Unix usan la funcionalidad de permisos de archivos estándar de Unix. Se espera que el valor de esta opción sea una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. Para usar el modo octal acostumbrado, comience el número con un 0 (cero)." -#: utils/misc/guc.c:1752 +#: utils/misc/guc.c:1842 msgid "Sets the file permissions for log files." msgstr "Define los privilegios para los archivos del registro del servidor." -#: utils/misc/guc.c:1753 +#: utils/misc/guc.c:1843 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Se espera que el valor de esta opción sea una especificación numérica de modo, en la forma aceptada por las llamadas a sistema chmod y umask. Para usar el modo octal acostumbrado, comience el número con un 0 (cero)." -#: utils/misc/guc.c:1766 +#: utils/misc/guc.c:1856 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Establece el límite de memoria que se usará para espacios de trabajo de consultas." -#: utils/misc/guc.c:1767 +#: utils/misc/guc.c:1857 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "Esta es la cantidad máxima de memoria que se usará para operaciones internas de ordenamiento y tablas de hashing, antes de comenzar a usar archivos temporales en disco." -#: utils/misc/guc.c:1779 +#: utils/misc/guc.c:1869 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Establece el límite de memoria que se usará para operaciones de mantención." -#: utils/misc/guc.c:1780 +#: utils/misc/guc.c:1870 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Esto incluye operaciones como VACUUM y CREATE INDEX." -#: utils/misc/guc.c:1795 +#: utils/misc/guc.c:1885 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Establece el tamaño máximo del stack, en kilobytes." -#: utils/misc/guc.c:1806 +#: utils/misc/guc.c:1896 msgid "Limits the total size of all temporary files used by each session." msgstr "Limita el tamaño total de todos los archivos temporales usados en cada sesión." -#: utils/misc/guc.c:1807 +#: utils/misc/guc.c:1897 msgid "-1 means no limit." msgstr "-1 significa sin límite." -#: utils/misc/guc.c:1817 +#: utils/misc/guc.c:1907 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Costo de Vacuum de una página encontrada en el buffer." -#: utils/misc/guc.c:1827 +#: utils/misc/guc.c:1917 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Costo de Vacuum de una página no encontrada en el cache." -#: utils/misc/guc.c:1837 +#: utils/misc/guc.c:1927 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Costo de Vacuum de una página ensuciada por vacuum." -#: utils/misc/guc.c:1847 +#: utils/misc/guc.c:1937 msgid "Vacuum cost amount available before napping." msgstr "Costo de Vacuum disponible antes de descansar." -#: utils/misc/guc.c:1857 +#: utils/misc/guc.c:1947 msgid "Vacuum cost delay in milliseconds." msgstr "Tiempo de descanso de vacuum en milisegundos." -#: utils/misc/guc.c:1868 +#: utils/misc/guc.c:1958 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Tiempo de descanso de vacuum en milisegundos, para autovacuum." -#: utils/misc/guc.c:1879 +#: utils/misc/guc.c:1969 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Costo de Vacuum disponible antes de descansar, para autovacuum." -#: utils/misc/guc.c:1889 +#: utils/misc/guc.c:1979 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Define la cantidad máxima de archivos abiertos por cada subproceso." -#: utils/misc/guc.c:1902 +#: utils/misc/guc.c:1992 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Define la cantidad máxima de transacciones preparadas simultáneas." -#: utils/misc/guc.c:1913 +#: utils/misc/guc.c:2003 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Define el OID mínimo para hacer seguimiento de locks." -#: utils/misc/guc.c:1914 +#: utils/misc/guc.c:2004 msgid "Is used to avoid output on system tables." msgstr "Se usa para evitar salida excesiva por tablas de sistema." -#: utils/misc/guc.c:1923 +#: utils/misc/guc.c:2013 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Define el OID de una tabla con trazado incondicional de locks." -#: utils/misc/guc.c:1935 +#: utils/misc/guc.c:2025 msgid "Sets the maximum allowed duration of any statement." msgstr "Define la duración máxima permitida de sentencias." -#: utils/misc/guc.c:1936 utils/misc/guc.c:1947 +#: utils/misc/guc.c:2026 utils/misc/guc.c:2037 msgid "A value of 0 turns off the timeout." msgstr "Un valor de 0 desactiva el máximo." -#: utils/misc/guc.c:1946 +#: utils/misc/guc.c:2036 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Define la duración máxima permitida de cualquier espera por un lock." -#: utils/misc/guc.c:1957 +#: utils/misc/guc.c:2047 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Mínima edad a la cual VACUUM debería congelar (freeze) una fila de una tabla." -#: utils/misc/guc.c:1967 +#: utils/misc/guc.c:2057 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Edad a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." -#: utils/misc/guc.c:1977 +#: utils/misc/guc.c:2067 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Mínima edad a la cual VACUUM debería congelar (freeze) el multixact en una fila." -#: utils/misc/guc.c:1987 +#: utils/misc/guc.c:2077 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Edad de multixact a la cual VACUUM debería recorrer una tabla completa para congelar (freeze) las filas." -#: utils/misc/guc.c:1997 +#: utils/misc/guc.c:2087 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Número de transacciones por las cuales VACUUM y la limpieza HOT deberían postergarse." -#: utils/misc/guc.c:2010 +#: utils/misc/guc.c:2100 msgid "Sets the maximum number of locks per transaction." msgstr "Cantidad máxima de candados (locks) por transacción." -#: utils/misc/guc.c:2011 +#: utils/misc/guc.c:2101 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "El tamaño de la tabla compartida de candados se calcula usando la suposición de que a lo más max_locks_per_transaction * max_connections objetos necesitarán ser bloqueados simultáneamente." -#: utils/misc/guc.c:2022 +#: utils/misc/guc.c:2112 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Cantidad máxima de candados (locks) de predicado por transacción." -#: utils/misc/guc.c:2023 +#: utils/misc/guc.c:2113 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "El tamaño de la tabla compartida de candados se calcula usando la suposición de que a lo más max_pred_locks_per_transaction * max_connections objetos necesitarán ser bloqueados simultáneamente." -#: utils/misc/guc.c:2034 +#: utils/misc/guc.c:2124 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Define el tiempo máximo para completar proceso de autentificación." -#: utils/misc/guc.c:2046 +#: utils/misc/guc.c:2136 msgid "Waits N seconds on connection startup before authentication." msgstr "Espera N segundos al inicio de la conexión antes de la autentificación." -#: utils/misc/guc.c:2057 +#: utils/misc/guc.c:2147 msgid "Sets the number of WAL files held for standby servers." msgstr "Número de archivos WAL conservados para servidores standby." -#: utils/misc/guc.c:2067 -msgid "Sets the maximum distance in log segments between automatic WAL checkpoints." -msgstr "Define la distancia máxima, en cantidad de segmentos, entre puntos de control de WAL automáticos." +#: utils/misc/guc.c:2157 +#, fuzzy +msgid "Sets the minimum size to shrink the WAL to." +msgstr "Define el tiempo máximo a esperar la replicación de WAL." -#: utils/misc/guc.c:2077 +#: utils/misc/guc.c:2168 +#, fuzzy +msgid "Sets the WAL size that triggers a checkpoint." +msgstr "Define el tiempo máximo entre puntos de control de WAL automáticos." + +#: utils/misc/guc.c:2179 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Define el tiempo máximo entre puntos de control de WAL automáticos." -#: utils/misc/guc.c:2088 +#: utils/misc/guc.c:2190 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "Registrar si el llenado de segmentos de WAL es más frecuente que esto." -#: utils/misc/guc.c:2090 +#: utils/misc/guc.c:2192 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "Envía un mensaje a los registros del servidor si los punto de control causados por el llenado de archivos de segmento sucede con más frecuencia que este número de segundos. Un valor de 0 (cero) desactiva la opción." -#: utils/misc/guc.c:2102 +#: utils/misc/guc.c:2204 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Búfers en memoria compartida para páginas de WAL." -#: utils/misc/guc.c:2113 +#: utils/misc/guc.c:2215 msgid "WAL writer sleep time between WAL flushes." msgstr "Tiempo de descanso del escritor de WAL entre escrituras de WAL consecutivas." -#: utils/misc/guc.c:2125 +#: utils/misc/guc.c:2227 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Define la cantidad máxima de procesos «WAL sender» simultáneos." -#: utils/misc/guc.c:2136 +#: utils/misc/guc.c:2238 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Define la cantidad máxima de slots de replicación definidos simultáneamente." -#: utils/misc/guc.c:2146 +#: utils/misc/guc.c:2248 msgid "Sets the maximum time to wait for WAL replication." msgstr "Define el tiempo máximo a esperar la replicación de WAL." -#: utils/misc/guc.c:2157 +#: utils/misc/guc.c:2259 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Retardo en microsegundos entre completar una transacción y escribir WAL a disco." -#: utils/misc/guc.c:2169 +#: utils/misc/guc.c:2271 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "Mínimo de transacciones concurrentes para esperar commit_delay." -#: utils/misc/guc.c:2180 +#: utils/misc/guc.c:2282 msgid "Sets the number of digits displayed for floating-point values." msgstr "Ajustar el número de dígitos mostrados para valores de coma flotante." -#: utils/misc/guc.c:2181 +#: utils/misc/guc.c:2283 msgid "This affects real, double precision, and geometric data types. The parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate)." msgstr "Afecta los tipos real, double precision y geométricos. El valor del parámetro se agrega al número estándar de dígitos (FLT_DIG o DBL_DIG según corresponda)" -#: utils/misc/guc.c:2192 +#: utils/misc/guc.c:2294 msgid "Sets the minimum execution time above which statements will be logged." msgstr "Tiempo mínimo de ejecución a partir del cual se registran las consultas." -#: utils/misc/guc.c:2194 +#: utils/misc/guc.c:2296 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Cero registra todas las consultas. -1 desactiva esta característica." -#: utils/misc/guc.c:2204 +#: utils/misc/guc.c:2306 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Tiempo mínimo de ejecución a partir del cual se registran las acciones de autovacuum." -#: utils/misc/guc.c:2206 +#: utils/misc/guc.c:2308 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Cero registra todas las acciones. -1 desactiva el registro de autovacuum." -#: utils/misc/guc.c:2216 +#: utils/misc/guc.c:2318 msgid "Background writer sleep time between rounds." msgstr "Tiempo de descanso entre rondas del background writer" -#: utils/misc/guc.c:2227 +#: utils/misc/guc.c:2329 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Número máximo de páginas LRU a escribir en cada ronda del background writer" -#: utils/misc/guc.c:2243 +#: utils/misc/guc.c:2341 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Cantidad máxima de peticiones simultáneas que pueden ser manejadas eficientemente por el sistema de disco." -#: utils/misc/guc.c:2244 +#: utils/misc/guc.c:2342 msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." msgstr "Para arrays RAID, esto debería ser aproximadamente la cantidad de discos en el array." -#: utils/misc/guc.c:2259 +#: utils/misc/guc.c:2357 msgid "Maximum number of concurrent worker processes." msgstr "Número máximo de procesos trabajadores concurrentes." -#: utils/misc/guc.c:2269 +#: utils/misc/guc.c:2367 msgid "Automatic log file rotation will occur after N minutes." msgstr "La rotación automática de archivos de log se efectuará después de N minutos." -#: utils/misc/guc.c:2280 +#: utils/misc/guc.c:2378 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "La rotación automática de archivos de log se efectuará después de N kilobytes." -#: utils/misc/guc.c:2291 +#: utils/misc/guc.c:2389 msgid "Shows the maximum number of function arguments." msgstr "Muestra la cantidad máxima de argumentos de funciones." -#: utils/misc/guc.c:2302 +#: utils/misc/guc.c:2400 msgid "Shows the maximum number of index keys." msgstr "Muestra la cantidad máxima de claves de índices." -#: utils/misc/guc.c:2313 +#: utils/misc/guc.c:2411 msgid "Shows the maximum identifier length." msgstr "Muestra el largo máximo de identificadores." -#: utils/misc/guc.c:2324 +#: utils/misc/guc.c:2422 msgid "Shows the size of a disk block." msgstr "Muestra el tamaño de un bloque de disco." -#: utils/misc/guc.c:2335 +#: utils/misc/guc.c:2433 msgid "Shows the number of pages per disk file." msgstr "Muestra el número de páginas por archivo en disco." -#: utils/misc/guc.c:2346 +#: utils/misc/guc.c:2444 msgid "Shows the block size in the write ahead log." msgstr "Muestra el tamaño de bloque en el write-ahead log." -#: utils/misc/guc.c:2357 +#: utils/misc/guc.c:2455 +msgid "Sets the time to wait before retrying to retrieve WALafter a failed attempt." +msgstr "" + +#: utils/misc/guc.c:2467 msgid "Shows the number of pages per write ahead log segment." msgstr "Muestra el número de páginas por cada segmento de write-ahead log." -#: utils/misc/guc.c:2370 +#: utils/misc/guc.c:2480 msgid "Time to sleep between autovacuum runs." msgstr "Tiempo de descanso entre ejecuciones de autovacuum." -#: utils/misc/guc.c:2380 +#: utils/misc/guc.c:2490 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Número mínimo de updates o deletes antes de ejecutar vacuum." -#: utils/misc/guc.c:2389 +#: utils/misc/guc.c:2499 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze." -#: utils/misc/guc.c:2399 +#: utils/misc/guc.c:2509 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Edad a la cual aplicar VACUUM automáticamente a una tabla para prevenir problemas por reciclaje de ID de transacción." -#: utils/misc/guc.c:2410 +#: utils/misc/guc.c:2520 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Edad de multixact a la cual aplicar VACUUM automáticamente a una tabla para prevenir problemas por reciclaje de ID de multixacts." -#: utils/misc/guc.c:2420 +#: utils/misc/guc.c:2530 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Define la cantidad máxima de procesos «autovacuum worker» simultáneos." -#: utils/misc/guc.c:2430 +#: utils/misc/guc.c:2540 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Establece el límite de memoria que cada proceso «autovacuum worker» usará." -#: utils/misc/guc.c:2441 +#: utils/misc/guc.c:2551 msgid "Time between issuing TCP keepalives." msgstr "Tiempo entre cada emisión de TCP keepalive." -#: utils/misc/guc.c:2442 utils/misc/guc.c:2453 +#: utils/misc/guc.c:2552 utils/misc/guc.c:2563 msgid "A value of 0 uses the system default." msgstr "Un valor 0 usa el valor por omisión del sistema." -#: utils/misc/guc.c:2452 +#: utils/misc/guc.c:2562 msgid "Time between TCP keepalive retransmits." msgstr "Tiempo entre retransmisiones TCP keepalive." -#: utils/misc/guc.c:2463 -msgid "Set the amount of traffic to send and receive before renegotiating the encryption keys." -msgstr "Define la cantidad de tráfico a enviar y recibir antes de renegociar las llaves de cifrado." - -#: utils/misc/guc.c:2474 +#: utils/misc/guc.c:2573 msgid "Maximum number of TCP keepalive retransmits." msgstr "Cantidad máxima de retransmisiones TCP keepalive." -#: utils/misc/guc.c:2475 +#: utils/misc/guc.c:2574 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "Esto controla el número de retransmisiones consecutivas de keepalive que pueden ser perdidas antes que la conexión sea considerada muerta. Un valor 0 usa el valor por omisión del sistema." -#: utils/misc/guc.c:2486 +#: utils/misc/guc.c:2585 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Define el máximo de resultados permitidos por búsquedas exactas con GIN." -#: utils/misc/guc.c:2497 +#: utils/misc/guc.c:2596 msgid "Sets the planner's assumption about the size of the disk cache." msgstr "Define la suposición del tamaño del cache de disco." -#: utils/misc/guc.c:2498 +#: utils/misc/guc.c:2597 msgid "That is, the portion of the kernel's disk cache that will be used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "Esto es, la porción del cache de disco que será usado para archivos de datos de PostgreSQL. Esto se mide en cantidad de páginas, que normalmente son de 8 kB cada una." -#: utils/misc/guc.c:2511 +#: utils/misc/guc.c:2610 msgid "Shows the server version as an integer." msgstr "Muestra la versión del servidor como un número entero." -#: utils/misc/guc.c:2522 +#: utils/misc/guc.c:2621 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Registra el uso de archivos temporales que crezcan más allá de este número de kilobytes." -#: utils/misc/guc.c:2523 +#: utils/misc/guc.c:2622 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "Cero registra todos los archivos. El valor por omisión es -1 (lo cual desactiva el registro)." -#: utils/misc/guc.c:2533 +#: utils/misc/guc.c:2632 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Tamaño reservado para pg_stat_activity.query, en bytes." -#: utils/misc/guc.c:2557 +#: utils/misc/guc.c:2647 +#, fuzzy +msgid "Sets the maximum size of the pending list for GIN index." +msgstr "Define el tiempo máximo a esperar la replicación de WAL." + +#: utils/misc/guc.c:2667 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Estimación del costo de una página leída secuencialmente." -#: utils/misc/guc.c:2567 +#: utils/misc/guc.c:2677 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Estimación del costo de una página leída no secuencialmente." -#: utils/misc/guc.c:2577 +#: utils/misc/guc.c:2687 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Estimación del costo de procesar cada tupla (fila)." -#: utils/misc/guc.c:2587 +#: utils/misc/guc.c:2697 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "Estimación del costo de procesar cada fila de índice durante un recorrido de índice." -#: utils/misc/guc.c:2597 +#: utils/misc/guc.c:2707 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Estimación del costo de procesar cada operador o llamada a función." -#: utils/misc/guc.c:2608 +#: utils/misc/guc.c:2718 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Estimación de la fracción de filas de un cursor que serán extraídas." -#: utils/misc/guc.c:2619 +#: utils/misc/guc.c:2729 msgid "GEQO: selective pressure within the population." msgstr "GEQO: presión selectiva dentro de la población." -#: utils/misc/guc.c:2629 +#: utils/misc/guc.c:2739 msgid "GEQO: seed for random path selection." msgstr "GEQO: semilla para la selección aleatoria de caminos." -#: utils/misc/guc.c:2639 +#: utils/misc/guc.c:2749 msgid "Multiple of the average buffer usage to free per round." msgstr "Múltiplo del uso promedio de búfers que liberar en cada ronda." -#: utils/misc/guc.c:2649 +#: utils/misc/guc.c:2759 msgid "Sets the seed for random-number generation." msgstr "Semilla para la generación de números aleatorios." -#: utils/misc/guc.c:2660 +#: utils/misc/guc.c:2770 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Número de updates o deletes de tuplas antes de ejecutar un vacuum, como fracción de reltuples." -#: utils/misc/guc.c:2669 +#: utils/misc/guc.c:2779 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Número mínimo de inserciones, actualizaciones y eliminaciones de tuplas antes de ejecutar analyze, como fracción de reltuples." -#: utils/misc/guc.c:2679 +#: utils/misc/guc.c:2789 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "Tiempo utilizado en escribir páginas «sucias» durante los puntos de control, medido como fracción del intervalo del punto de control." -#: utils/misc/guc.c:2698 +#: utils/misc/guc.c:2808 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Orden de shell que se invocará para archivar un archivo WAL." -#: utils/misc/guc.c:2708 +#: utils/misc/guc.c:2818 msgid "Sets the client's character set encoding." msgstr "Codificación del juego de caracteres del cliente." -#: utils/misc/guc.c:2719 +#: utils/misc/guc.c:2829 msgid "Controls information prefixed to each log line." msgstr "Controla el prefijo que antecede cada línea registrada." -#: utils/misc/guc.c:2720 +#: utils/misc/guc.c:2830 msgid "If blank, no prefix is used." msgstr "si está en blanco, no se usa prefijo." -#: utils/misc/guc.c:2729 +#: utils/misc/guc.c:2839 msgid "Sets the time zone to use in log messages." msgstr "Define el huso horario usando en los mensajes registrados." -#: utils/misc/guc.c:2739 +#: utils/misc/guc.c:2849 msgid "Sets the display format for date and time values." msgstr "Formato de salida para valores de horas y fechas." -#: utils/misc/guc.c:2740 +#: utils/misc/guc.c:2850 msgid "Also controls interpretation of ambiguous date inputs." msgstr "También controla la interpretación de entradas ambiguas de fechas" -#: utils/misc/guc.c:2751 +#: utils/misc/guc.c:2861 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Define el tablespace en el cual crear tablas e índices." -#: utils/misc/guc.c:2752 +#: utils/misc/guc.c:2862 msgid "An empty string selects the database's default tablespace." msgstr "Una cadena vacía especifica el tablespace por omisión de la base de datos." -#: utils/misc/guc.c:2762 +#: utils/misc/guc.c:2872 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Define el/los tablespace/s en el cual crear tablas temporales y archivos de ordenamiento." -#: utils/misc/guc.c:2773 +#: utils/misc/guc.c:2883 msgid "Sets the path for dynamically loadable modules." msgstr "Ruta para módulos dinámicos." -#: utils/misc/guc.c:2774 +#: utils/misc/guc.c:2884 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "Si se necesita abrir un módulo dinámico y el nombre especificado no tiene un componente de directorio (es decir, no contiene un slash), el sistema buscará el archivo especificado en esta ruta." -#: utils/misc/guc.c:2787 +#: utils/misc/guc.c:2897 msgid "Sets the location of the Kerberos server key file." msgstr "Ubicación del archivo de llave del servidor Kerberos." -#: utils/misc/guc.c:2798 +#: utils/misc/guc.c:2908 msgid "Sets the Bonjour service name." msgstr "Nombre del servicio Bonjour." -#: utils/misc/guc.c:2810 +#: utils/misc/guc.c:2920 msgid "Shows the collation order locale." msgstr "Configuración regional de ordenamiento de cadenas (collation)." -#: utils/misc/guc.c:2821 +#: utils/misc/guc.c:2931 msgid "Shows the character classification and case conversion locale." msgstr "Configuración regional de clasificación de caracteres y conversión de mayúsculas." -#: utils/misc/guc.c:2832 +#: utils/misc/guc.c:2942 msgid "Sets the language in which messages are displayed." msgstr "Idioma en el que se despliegan los mensajes." -#: utils/misc/guc.c:2842 +#: utils/misc/guc.c:2952 msgid "Sets the locale for formatting monetary amounts." msgstr "Configuración regional para formatos de moneda." -#: utils/misc/guc.c:2852 +#: utils/misc/guc.c:2962 msgid "Sets the locale for formatting numbers." msgstr "Configuración regional para formatos de números." -#: utils/misc/guc.c:2862 +#: utils/misc/guc.c:2972 msgid "Sets the locale for formatting date and time values." msgstr "Configuración regional para formatos de horas y fechas." -#: utils/misc/guc.c:2872 +#: utils/misc/guc.c:2982 msgid "Lists shared libraries to preload into each backend." msgstr "Bibliotecas compartidas a precargar en cada proceso." -#: utils/misc/guc.c:2883 +#: utils/misc/guc.c:2993 msgid "Lists shared libraries to preload into server." msgstr "Bibliotecas compartidas a precargar en el servidor." -#: utils/misc/guc.c:2894 +#: utils/misc/guc.c:3004 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Bibliotecas compartidas no privilegiadas a precargar en cada proceso." -#: utils/misc/guc.c:2905 +#: utils/misc/guc.c:3015 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Orden de búsqueda en schemas para nombres que no especifican schema." -#: utils/misc/guc.c:2917 +#: utils/misc/guc.c:3027 msgid "Sets the server (database) character set encoding." msgstr "Codificación de caracteres del servidor (bases de datos)." -#: utils/misc/guc.c:2929 +#: utils/misc/guc.c:3039 msgid "Shows the server version." msgstr "Versión del servidor." -#: utils/misc/guc.c:2941 +#: utils/misc/guc.c:3051 msgid "Sets the current role." msgstr "Define el rol actual." -#: utils/misc/guc.c:2953 +#: utils/misc/guc.c:3063 msgid "Sets the session user name." msgstr "Define el nombre del usuario de sesión." -#: utils/misc/guc.c:2964 +#: utils/misc/guc.c:3074 msgid "Sets the destination for server log output." msgstr "Define el destino de la salida del registro del servidor." -#: utils/misc/guc.c:2965 +#: utils/misc/guc.c:3075 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "Los valores aceptables son combinaciones de «stderr», «syslog», «csvlog» y «eventlog», dependiendo de la plataforma." -#: utils/misc/guc.c:2976 +#: utils/misc/guc.c:3086 msgid "Sets the destination directory for log files." msgstr "Define el directorio de destino de los archivos del registro del servidor." -#: utils/misc/guc.c:2977 +#: utils/misc/guc.c:3087 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Puede ser una ruta relativa al directorio de datos o una ruta absoluta." -#: utils/misc/guc.c:2987 +#: utils/misc/guc.c:3097 msgid "Sets the file name pattern for log files." msgstr "Define el patrón para los nombres de archivo del registro del servidor." -#: utils/misc/guc.c:2998 +#: utils/misc/guc.c:3108 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Nombre de programa para identificar PostgreSQL en mensajes de syslog." -#: utils/misc/guc.c:3009 +#: utils/misc/guc.c:3119 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Nombre de programa para identificar PostgreSQL en mensajes del log de eventos." -#: utils/misc/guc.c:3020 +#: utils/misc/guc.c:3130 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Huso horario para desplegar e interpretar valores de tiempo." -#: utils/misc/guc.c:3030 +#: utils/misc/guc.c:3140 msgid "Selects a file of time zone abbreviations." msgstr "Selecciona un archivo de abreviaciones de huso horario." -#: utils/misc/guc.c:3040 +#: utils/misc/guc.c:3150 msgid "Sets the current transaction's isolation level." msgstr "Define el nivel de aislación de la transacción en curso." -#: utils/misc/guc.c:3051 +#: utils/misc/guc.c:3161 msgid "Sets the owning group of the Unix-domain socket." msgstr "Grupo dueño del socket de dominio Unix." -#: utils/misc/guc.c:3052 +#: utils/misc/guc.c:3162 msgid "The owning user of the socket is always the user that starts the server." msgstr "El usuario dueño del socket siempre es el usuario que inicia el servidor." -#: utils/misc/guc.c:3062 +#: utils/misc/guc.c:3172 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Directorios donde se crearán los sockets de dominio Unix." -#: utils/misc/guc.c:3077 +#: utils/misc/guc.c:3187 msgid "Sets the host name or IP address(es) to listen to." msgstr "Define el nombre de anfitrión o dirección IP en la cual escuchar." -#: utils/misc/guc.c:3092 +#: utils/misc/guc.c:3202 msgid "Sets the server's data directory." msgstr "Define la ubicación del directorio de datos." -#: utils/misc/guc.c:3103 +#: utils/misc/guc.c:3213 msgid "Sets the server's main configuration file." msgstr "Define la ubicación del archivo principal de configuración del servidor." -#: utils/misc/guc.c:3114 +#: utils/misc/guc.c:3224 msgid "Sets the server's \"hba\" configuration file." msgstr "Define la ubicación del archivo de configuración «hba» del servidor." -#: utils/misc/guc.c:3125 +#: utils/misc/guc.c:3235 msgid "Sets the server's \"ident\" configuration file." msgstr "Define la ubicación del archivo de configuración «ident» del servidor." -#: utils/misc/guc.c:3136 +#: utils/misc/guc.c:3246 msgid "Writes the postmaster PID to the specified file." msgstr "Registra el PID de postmaster en el archivo especificado." -#: utils/misc/guc.c:3147 +#: utils/misc/guc.c:3257 msgid "Location of the SSL server certificate file." msgstr "Ubicación del archivo de certificado SSL del servidor." -#: utils/misc/guc.c:3157 +#: utils/misc/guc.c:3267 msgid "Location of the SSL server private key file." msgstr "Ubicación del archivo de la llave SSL privada del servidor." -#: utils/misc/guc.c:3167 +#: utils/misc/guc.c:3277 msgid "Location of the SSL certificate authority file." msgstr "Ubicación del archivo de autoridad certificadora SSL." -#: utils/misc/guc.c:3177 +#: utils/misc/guc.c:3287 msgid "Location of the SSL certificate revocation list file." msgstr "Ubicación del archivo de lista de revocación de certificados SSL" -#: utils/misc/guc.c:3187 +#: utils/misc/guc.c:3297 msgid "Writes temporary statistics files to the specified directory." msgstr "Escribe los archivos temporales de estadísticas al directorio especificado." -#: utils/misc/guc.c:3198 +#: utils/misc/guc.c:3308 msgid "List of names of potential synchronous standbys." msgstr "Lista de nombres de potenciales standbys sincrónicos." -#: utils/misc/guc.c:3209 +#: utils/misc/guc.c:3319 msgid "Sets default text search configuration." msgstr "Define la configuración de búsqueda en texto por omisión." -#: utils/misc/guc.c:3219 +#: utils/misc/guc.c:3329 msgid "Sets the list of allowed SSL ciphers." msgstr "Define la lista de cifrados SSL permitidos." -#: utils/misc/guc.c:3234 +#: utils/misc/guc.c:3344 msgid "Sets the curve to use for ECDH." msgstr "Define la curva a usar para ECDH." -#: utils/misc/guc.c:3249 +#: utils/misc/guc.c:3359 msgid "Sets the application name to be reported in statistics and logs." msgstr "Define el nombre de aplicación a reportarse en estadísticas y logs." -#: utils/misc/guc.c:3269 +#: utils/misc/guc.c:3370 +msgid "Sets the name of the cluster which is included in the process title." +msgstr "" + +#: utils/misc/guc.c:3390 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Define si «\\'» está permitido en literales de cadena." -#: utils/misc/guc.c:3279 +#: utils/misc/guc.c:3400 msgid "Sets the output format for bytea." msgstr "Formato de salida para bytea." -#: utils/misc/guc.c:3289 +#: utils/misc/guc.c:3410 msgid "Sets the message levels that are sent to the client." msgstr "Nivel de mensajes enviados al cliente." -#: utils/misc/guc.c:3290 utils/misc/guc.c:3343 utils/misc/guc.c:3354 -#: utils/misc/guc.c:3410 +#: utils/misc/guc.c:3411 utils/misc/guc.c:3464 utils/misc/guc.c:3475 +#: utils/misc/guc.c:3541 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "Cada nivel incluye todos los niveles que lo siguen. Mientras más posterior el nivel, menos mensajes se enviarán." -#: utils/misc/guc.c:3300 +#: utils/misc/guc.c:3421 msgid "Enables the planner to use constraints to optimize queries." msgstr "Permitir el uso de restricciones para limitar los accesos a tablas." -#: utils/misc/guc.c:3301 +#: utils/misc/guc.c:3422 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "Las tablas no serán recorridas si sus restricciones garantizan que ninguna fila coincidirá con la consulta." -#: utils/misc/guc.c:3311 +#: utils/misc/guc.c:3432 msgid "Sets the transaction isolation level of each new transaction." msgstr "Nivel de aislación (isolation level) de transacciones nuevas." -#: utils/misc/guc.c:3321 +#: utils/misc/guc.c:3442 msgid "Sets the display format for interval values." msgstr "Formato de salida para valores de intervalos." -#: utils/misc/guc.c:3332 +#: utils/misc/guc.c:3453 msgid "Sets the verbosity of logged messages." msgstr "Verbosidad de los mensajes registrados." -#: utils/misc/guc.c:3342 +#: utils/misc/guc.c:3463 msgid "Sets the message levels that are logged." msgstr "Nivel de mensajes registrados." -#: utils/misc/guc.c:3353 +#: utils/misc/guc.c:3474 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Registrar sentencias que generan error de nivel superior o igual a éste." -#: utils/misc/guc.c:3364 +#: utils/misc/guc.c:3485 msgid "Sets the type of statements logged." msgstr "Define el tipo de sentencias que se registran." -#: utils/misc/guc.c:3374 +#: utils/misc/guc.c:3495 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "«Facility» de syslog que se usará cuando syslog esté habilitado." -#: utils/misc/guc.c:3389 +#: utils/misc/guc.c:3510 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Define el comportamiento de la sesión con respecto a disparadores y reglas de reescritura." -#: utils/misc/guc.c:3399 +#: utils/misc/guc.c:3520 msgid "Sets the current transaction's synchronization level." msgstr "Define el nivel de sincronización de la transacción en curso." -#: utils/misc/guc.c:3409 +#: utils/misc/guc.c:3530 +msgid "Allows archiving of WAL files using archive_command." +msgstr "Permite el archivado de WAL usando archive_command." + +#: utils/misc/guc.c:3540 msgid "Enables logging of recovery-related debugging information." msgstr "Recolectar información de depuración relacionada con la recuperación." -#: utils/misc/guc.c:3425 +#: utils/misc/guc.c:3556 msgid "Collects function-level statistics on database activity." msgstr "Recolectar estadísticas de actividad de funciones en la base de datos." -#: utils/misc/guc.c:3435 +#: utils/misc/guc.c:3566 msgid "Set the level of information written to the WAL." msgstr "Nivel de información escrita a WAL." -#: utils/misc/guc.c:3445 +#: utils/misc/guc.c:3576 msgid "Selects the dynamic shared memory implementation used." msgstr "Escoge la implementación de memoria compartida dinámica que se usará." -#: utils/misc/guc.c:3455 +#: utils/misc/guc.c:3586 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Selecciona el método usado para forzar escritura de WAL a disco." -#: utils/misc/guc.c:3465 +#: utils/misc/guc.c:3596 msgid "Sets how binary values are to be encoded in XML." msgstr "Define cómo se codificarán los valores binarios en XML." -#: utils/misc/guc.c:3475 +#: utils/misc/guc.c:3606 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "Define si los datos XML implícitos en operaciones de análisis y serialización serán considerados documentos o fragmentos de contenido." -#: utils/misc/guc.c:3486 +#: utils/misc/guc.c:3617 msgid "Use of huge pages on Linux." msgstr "Uso de «huge pages» en Linux." -#: utils/misc/guc.c:4301 +#: utils/misc/guc.c:4432 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -19917,12 +21700,12 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración del servidor.\n" "Debe especificar la opción --config-file o -D o definir la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:4320 +#: utils/misc/guc.c:4451 #, c-format msgid "%s cannot access the server configuration file \"%s\": %s\n" msgstr "%s no pudo examinar el archivo de configuración «%s»: %s\n" -#: utils/misc/guc.c:4348 +#: utils/misc/guc.c:4477 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -19931,7 +21714,7 @@ msgstr "" "%s no sabe dónde encontrar los archivos de sistema de la base de datos.\n" "Esto puede especificarse como «data_directory» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:4396 +#: utils/misc/guc.c:4525 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -19940,7 +21723,7 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración «hba».\n" "Esto puede especificarse como «hba_file» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:4419 +#: utils/misc/guc.c:4548 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -19949,149 +21732,146 @@ msgstr "" "%s no sabe dónde encontrar el archivo de configuración «ident».\n" "Esto puede especificarse como «ident_file» en «%s», o usando la opción -D, o a través de la variable de ambiente PGDATA.\n" -#: utils/misc/guc.c:5011 utils/misc/guc.c:5191 +#: utils/misc/guc.c:5222 utils/misc/guc.c:5269 msgid "Value exceeds integer range." msgstr "El valor excede el rango para enteros." -#: utils/misc/guc.c:5030 -msgid "Valid units for this parameter are \"kB\", \"MB\", \"GB\", and \"TB\"." -msgstr "Unidades válidas para este parámetro son «kB», «MB», «GB» y «TB»." - -#: utils/misc/guc.c:5105 -msgid "Valid units for this parameter are \"ms\", \"s\", \"min\", \"h\", and \"d\"." -msgstr "Unidades válidas para este parámetro son «ms», «s», «min», «h» y «d»." - -#: utils/misc/guc.c:5399 utils/misc/guc.c:5524 utils/misc/guc.c:6767 -#: utils/misc/guc.c:8964 utils/misc/guc.c:8998 +#: utils/misc/guc.c:5463 utils/misc/guc.c:5556 utils/misc/guc.c:6848 +#: utils/misc/guc.c:9534 utils/misc/guc.c:9568 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "valor no válido para el parámetro «%s»: «%s»" -#: utils/misc/guc.c:5437 +#: utils/misc/guc.c:5492 #, c-format msgid "parameter \"%s\" requires a numeric value" msgstr "el parámetro «%s» requiere un valor numérico" -#: utils/misc/guc.c:5446 +#: utils/misc/guc.c:5501 #, c-format msgid "%g is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g está fuera del rango aceptable para el parámetro «%s» (%g .. %g)" -#: utils/misc/guc.c:5612 utils/misc/guc.c:6334 utils/misc/guc.c:6386 -#: utils/misc/guc.c:6749 utils/misc/guc.c:7446 utils/misc/guc.c:7605 -#: utils/misc/guc.c:8784 +#: utils/misc/guc.c:5654 utils/misc/guc.c:6983 +#, fuzzy, c-format +msgid "cannot set parameters during a parallel operation" +msgstr "no se puede definir el parámetro «%s» dentro de una operación restringida por seguridad" + +#: utils/misc/guc.c:5661 utils/misc/guc.c:6411 utils/misc/guc.c:6463 +#: utils/misc/guc.c:6824 utils/misc/guc.c:7560 utils/misc/guc.c:7719 +#: utils/misc/guc.c:9354 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "parámetro de configuración no reconocido: «%s»" -#: utils/misc/guc.c:5627 utils/misc/guc.c:6760 +#: utils/misc/guc.c:5676 utils/misc/guc.c:6836 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "no se puede cambiar el parámetro «%s»" -#: utils/misc/guc.c:5650 utils/misc/guc.c:5833 utils/misc/guc.c:5919 -#: utils/misc/guc.c:6005 utils/misc/guc.c:6109 utils/misc/guc.c:6200 -#: guc-file.l:299 +#: utils/misc/guc.c:5699 utils/misc/guc.c:5891 utils/misc/guc.c:5981 +#: utils/misc/guc.c:6071 utils/misc/guc.c:6179 utils/misc/guc.c:6274 +#: guc-file.l:352 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "el parámetro «%s» no se puede cambiar sin reiniciar el servidor" -#: utils/misc/guc.c:5660 +#: utils/misc/guc.c:5709 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "el parámetro «%s» no se puede cambiar en este momento" -#: utils/misc/guc.c:5705 -#, c-format -msgid "parameter \"%s\" cannot be set after connection start" -msgstr "el parámetro «%s» no se puede cambiar después de efectuar la conexión" - -#: utils/misc/guc.c:5715 utils/misc/guc.c:8800 +#: utils/misc/guc.c:5727 utils/misc/guc.c:5772 utils/misc/guc.c:9370 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "se ha denegado el permiso para cambiar la opción «%s»" -#: utils/misc/guc.c:5753 +#: utils/misc/guc.c:5762 +#, c-format +msgid "parameter \"%s\" cannot be set after connection start" +msgstr "el parámetro «%s» no se puede cambiar después de efectuar la conexión" + +#: utils/misc/guc.c:5810 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "no se puede definir el parámetro «%s» dentro una función security-definer" -#: utils/misc/guc.c:6342 utils/misc/guc.c:6390 utils/misc/guc.c:7609 +#: utils/misc/guc.c:6419 utils/misc/guc.c:6467 utils/misc/guc.c:7723 #, c-format msgid "must be superuser to examine \"%s\"" msgstr "debe ser superusuario para examinar «%s»" -#: utils/misc/guc.c:6456 +#: utils/misc/guc.c:6533 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s lleva sólo un argumento" -#: utils/misc/guc.c:6713 +#: utils/misc/guc.c:6784 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "debe ser superusuario ejecutar la orden ALTER SYSTEM" -#: utils/misc/guc.c:6946 +#: utils/misc/guc.c:6897 +#, c-format +msgid "could not parse contents of file \"%s\"" +msgstr "no se pudo interpretar el contenido del archivo «%s»" + +#: utils/misc/guc.c:7059 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT no está implementado" -#: utils/misc/guc.c:7034 +#: utils/misc/guc.c:7144 #, c-format msgid "SET requires parameter name" msgstr "SET requiere el nombre de un parámetro" -#: utils/misc/guc.c:7148 +#: utils/misc/guc.c:7257 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "intento de cambiar la opción «%s»" -#: utils/misc/guc.c:8504 +#: utils/misc/guc.c:8987 +#, fuzzy, c-format +msgid "parameter \"%s\" could not be set" +msgstr "no se puede cambiar el parámetro «%s»" + +#: utils/misc/guc.c:9074 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "no se pudo interpretar el valor de para el parámetro «%s»" -#: utils/misc/guc.c:8862 utils/misc/guc.c:8896 +#: utils/misc/guc.c:9432 utils/misc/guc.c:9466 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "valor no válido para el parámetro «%s»: %d" -#: utils/misc/guc.c:8930 +#: utils/misc/guc.c:9500 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "valor no válido para el parámetro «%s»: %g" -#: utils/misc/guc.c:9120 +#: utils/misc/guc.c:9690 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "«temp_buffers» no puede ser cambiado después de que cualquier tabla temporal haya sido accedida en la sesión." -#: utils/misc/guc.c:9132 -#, c-format -msgid "SET AUTOCOMMIT TO OFF is no longer supported" -msgstr "SET AUTOCOMMIT TO OFF ya no está soportado" - -#: utils/misc/guc.c:9144 -#, c-format -msgid "assertion checking is not supported by this build" -msgstr "la revisión de aseveraciones (asserts) no está soportada en este servidor" - -#: utils/misc/guc.c:9157 +#: utils/misc/guc.c:9702 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour no está soportado en este servidor" -#: utils/misc/guc.c:9170 +#: utils/misc/guc.c:9715 #, c-format msgid "SSL is not supported by this build" msgstr "SSL no está soportado en este servidor" -#: utils/misc/guc.c:9182 +#: utils/misc/guc.c:9727 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "No se puede activar el parámetro cuando «log_statement_stats» está activo." -#: utils/misc/guc.c:9194 +#: utils/misc/guc.c:9739 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "No se puede activar «log_statement_stats» cuando «log_parser_stats», «log_planner_stats» o «log_executor_stats» están activos." @@ -20101,7 +21881,12 @@ msgstr "No se puede activar «log_statement_stats» cuando «log_parser_stats», msgid "internal error: unrecognized run-time parameter type\n" msgstr "error interno: tipo parámetro no reconocido\n" -#: utils/misc/timeout.c:422 +#: utils/misc/rls.c:91 +#, c-format +msgid "insufficient privilege to bypass row security." +msgstr "" + +#: utils/misc/timeout.c:388 #, c-format msgid "cannot add more timeout reasons" msgstr "no se pueden agregar más razones de timeout" @@ -20171,12 +21956,15 @@ msgstr "línea demasiado larga en archivo de huso horario «%s», línea %d" msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "@INCLUDE sin nombre de archivo en archivo de huso horario «%s», línea %d" -#: utils/mmgr/aset.c:500 +#: utils/mmgr/aset.c:505 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "Falla al crear el contexto de memoria «%s»." -#: utils/mmgr/aset.c:679 utils/mmgr/aset.c:873 utils/mmgr/aset.c:1115 +#: utils/mmgr/mcxt.c:689 utils/mmgr/mcxt.c:724 utils/mmgr/mcxt.c:761 +#: utils/mmgr/mcxt.c:798 utils/mmgr/mcxt.c:832 utils/mmgr/mcxt.c:861 +#: utils/mmgr/mcxt.c:895 utils/mmgr/mcxt.c:975 utils/mmgr/mcxt.c:1008 +#: utils/mmgr/mcxt.c:1055 #, c-format msgid "Failed on request of size %zu." msgstr "Falla en petición de tamaño %zu." @@ -20191,538 +21979,672 @@ msgstr "el cursor «%s» ya existe" msgid "closing existing cursor \"%s\"" msgstr "cerrando el cursor «%s» preexistente" -#: utils/mmgr/portalmem.c:479 +#: utils/mmgr/portalmem.c:419 +#, c-format +msgid "portal \"%s\" cannot be run" +msgstr "el portal «%s» no puede ser ejecutado" + +#: utils/mmgr/portalmem.c:499 #, c-format msgid "cannot drop active portal \"%s\"" msgstr "no se puede eliminar el portal activo «%s»" -#: utils/mmgr/portalmem.c:669 +#: utils/mmgr/portalmem.c:689 #, c-format msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "no se puede hacer PREPARE de una transacción que ha creado un cursor WITH HOLD" -#: utils/sort/logtape.c:229 +#: utils/sort/logtape.c:226 #, c-format msgid "could not read block %ld of temporary file: %m" msgstr "no se pudo leer el bloque %ld del archivo temporal: %m" -#: utils/sort/tuplesort.c:3255 +#: utils/sort/tuplesort.c:3591 #, c-format msgid "could not create unique index \"%s\"" msgstr "no se pudo crear el índice único «%s»" -#: utils/sort/tuplesort.c:3257 +#: utils/sort/tuplesort.c:3593 #, c-format msgid "Key %s is duplicated." msgstr "La llave %s está duplicada." -#: utils/sort/tuplestore.c:506 utils/sort/tuplestore.c:516 -#: utils/sort/tuplestore.c:843 utils/sort/tuplestore.c:947 -#: utils/sort/tuplestore.c:1011 utils/sort/tuplestore.c:1028 -#: utils/sort/tuplestore.c:1230 utils/sort/tuplestore.c:1295 -#: utils/sort/tuplestore.c:1304 +#: utils/sort/tuplesort.c:3594 +#, c-format +msgid "Duplicate keys exist." +msgstr "Existe una llave duplicada." + +#: utils/sort/tuplestore.c:515 utils/sort/tuplestore.c:525 +#: utils/sort/tuplestore.c:852 utils/sort/tuplestore.c:956 +#: utils/sort/tuplestore.c:1020 utils/sort/tuplestore.c:1037 +#: utils/sort/tuplestore.c:1239 utils/sort/tuplestore.c:1304 +#: utils/sort/tuplestore.c:1313 #, c-format msgid "could not seek in tuplestore temporary file: %m" msgstr "no se pudo posicionar (seek) en el archivo temporal de tuplestore: %m" -#: utils/sort/tuplestore.c:1451 utils/sort/tuplestore.c:1524 -#: utils/sort/tuplestore.c:1530 +#: utils/sort/tuplestore.c:1460 utils/sort/tuplestore.c:1533 +#: utils/sort/tuplestore.c:1539 #, c-format msgid "could not read from tuplestore temporary file: %m" msgstr "no se pudo leer el archivo temporal de tuplestore: %m" -#: utils/sort/tuplestore.c:1492 utils/sort/tuplestore.c:1497 -#: utils/sort/tuplestore.c:1503 +#: utils/sort/tuplestore.c:1501 utils/sort/tuplestore.c:1506 +#: utils/sort/tuplestore.c:1512 #, c-format msgid "could not write to tuplestore temporary file: %m" msgstr "no se pudo escribir el archivo temporal de tuplestore: %m" -#: utils/time/snapmgr.c:890 +#: utils/time/snapmgr.c:432 +#, fuzzy, c-format +msgid "The source transaction is not running anymore." +msgstr "La transacción de origen %u ya no está en ejecución." + +#: utils/time/snapmgr.c:986 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "no se puede exportar snapshots desde una subtransacción" -#: utils/time/snapmgr.c:1040 utils/time/snapmgr.c:1045 -#: utils/time/snapmgr.c:1050 utils/time/snapmgr.c:1065 -#: utils/time/snapmgr.c:1070 utils/time/snapmgr.c:1075 -#: utils/time/snapmgr.c:1174 utils/time/snapmgr.c:1190 -#: utils/time/snapmgr.c:1215 +#: utils/time/snapmgr.c:1135 utils/time/snapmgr.c:1140 +#: utils/time/snapmgr.c:1145 utils/time/snapmgr.c:1160 +#: utils/time/snapmgr.c:1165 utils/time/snapmgr.c:1170 +#: utils/time/snapmgr.c:1269 utils/time/snapmgr.c:1285 +#: utils/time/snapmgr.c:1310 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "datos no válidos en archivo de snapshot «%s»" -#: utils/time/snapmgr.c:1112 +#: utils/time/snapmgr.c:1207 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "SET TRANSACTION SNAPSHOT debe ser llamado antes de cualquier consulta" -#: utils/time/snapmgr.c:1121 +#: utils/time/snapmgr.c:1216 #, c-format msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" msgstr "una transacción que importa un snapshot no debe tener nivel de aislación SERIALIZABLE o REPEATABLE READ" -#: utils/time/snapmgr.c:1130 utils/time/snapmgr.c:1139 +#: utils/time/snapmgr.c:1225 utils/time/snapmgr.c:1234 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "identificador de snapshot no válido: «%s»" -#: utils/time/snapmgr.c:1228 +#: utils/time/snapmgr.c:1323 #, c-format msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" msgstr "una transacción serializable no puede importar un snapshot desde una transacción no serializable" -#: utils/time/snapmgr.c:1232 +#: utils/time/snapmgr.c:1327 #, c-format msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" msgstr "una transacción serializable que no es de sólo lectura no puede importar un snapshot de una transacción de sólo lectura" -#: utils/time/snapmgr.c:1247 +#: utils/time/snapmgr.c:1342 #, c-format msgid "cannot import a snapshot from a different database" msgstr "no se puede importar un snapshot desde una base de datos diferente" -#: gram.y:956 +#: gram.y:1009 #, c-format msgid "unrecognized role option \"%s\"" msgstr "opción de rol no reconocida «%s»" -#: gram.y:1238 gram.y:1253 +#: gram.y:1285 gram.y:1300 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS no puede incluir elementos de esquema" -#: gram.y:1398 +#: gram.y:1445 #, c-format msgid "current database cannot be changed" msgstr "no se puede cambiar la base de datos activa" -#: gram.y:1522 gram.y:1537 +#: gram.y:1569 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "el intervalo de huso horario debe ser HOUR o HOUR TO MINUTE" -#: gram.y:1542 gram.y:10351 gram.y:12688 -#, c-format -msgid "interval precision specified twice" -msgstr "la precisión de interval fue especificada dos veces" - -#: gram.y:2511 gram.y:2540 +#: gram.y:2570 gram.y:2599 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUT no están permitidos con PROGRAM" -#: gram.y:2802 gram.y:2809 gram.y:9589 gram.y:9597 +#: gram.y:2865 gram.y:2872 gram.y:10139 gram.y:10147 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "GLOBAL está obsoleto para la creación de tablas temporales" -#: gram.y:4482 +#: gram.y:4745 msgid "duplicate trigger events specified" msgstr "se han especificado eventos de disparador duplicados" -#: gram.y:4584 +#: gram.y:4845 #, c-format msgid "conflicting constraint properties" msgstr "propiedades de restricción contradictorias" -#: gram.y:4716 +#: gram.y:4977 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION no está implementado" -#: gram.y:4732 +#: gram.y:4993 #, c-format msgid "DROP ASSERTION is not yet implemented" msgstr "DROP ASSERTION no está implementado" -#: gram.y:5078 +#: gram.y:5339 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK ya no es requerido" -#: gram.y:5079 +#: gram.y:5340 #, c-format msgid "Update your data type." msgstr "Actualice su tipo de datos." -#: gram.y:6540 +#: gram.y:6917 #, c-format msgid "aggregates cannot have output arguments" msgstr "las funciones de agregación no pueden tener argumentos de salida" -#: gram.y:8236 gram.y:8254 +#: gram.y:8707 gram.y:8725 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION no está soportado con vistas recursivas" -#: gram.y:9234 -#, c-format -msgid "number of columns does not match number of values" -msgstr "el número de columnas no coincide con el número de valores" - -#: gram.y:9693 +#: gram.y:10247 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "la sintaxis LIMIT #,# no está soportada" -#: gram.y:9694 +#: gram.y:10248 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Use cláusulas LIMIT y OFFSET separadas." -#: gram.y:9882 gram.y:9907 +#: gram.y:10511 gram.y:10536 #, c-format msgid "VALUES in FROM must have an alias" msgstr "VALUES en FROM debe tener un alias" -#: gram.y:9883 gram.y:9908 +#: gram.y:10512 gram.y:10537 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Por ejemplo, FROM (VALUES ...) [AS] foo." -#: gram.y:9888 gram.y:9913 +#: gram.y:10517 gram.y:10542 #, c-format msgid "subquery in FROM must have an alias" msgstr "las subconsultas en FROM deben tener un alias" -#: gram.y:9889 gram.y:9914 +#: gram.y:10518 gram.y:10543 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Por ejemplo, FROM (SELECT ...) [AS] foo." -#: gram.y:10477 +#: gram.y:11117 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "la precisión para el tipo float debe ser al menos 1 bit" -#: gram.y:10486 +#: gram.y:11126 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "la precisión para el tipo float debe ser menor de 54 bits" -#: gram.y:10952 +#: gram.y:11630 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "el número de parámetros es incorrecto al lado izquierdo de la expresión OVERLAPS" -#: gram.y:10957 +#: gram.y:11635 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "el número de parámetros es incorrecto al lado derecho de la expresión OVERLAPS" -#: gram.y:11141 +#: gram.y:11812 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "el predicado UNIQUE no está implementado" -#: gram.y:11428 +#: gram.y:12144 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "no se permiten múltiples cláusulas ORDER BY con WITHIN GROUP" -#: gram.y:11433 +#: gram.y:12149 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "no se permite DISTINCT con WITHIN GROUP" -#: gram.y:11438 +#: gram.y:12154 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "no se permite VARIADIC con WITHIN GROUP" -#: gram.y:11944 +#: gram.y:12660 #, c-format msgid "RANGE PRECEDING is only supported with UNBOUNDED" msgstr "RANGE PRECEDING sólo está soportado con UNBOUNDED" -#: gram.y:11950 +#: gram.y:12666 #, c-format msgid "RANGE FOLLOWING is only supported with UNBOUNDED" msgstr "RANGE FOLLOWING sólo está soportado con UNBOUNDED" -#: gram.y:11977 gram.y:12000 +#: gram.y:12693 gram.y:12716 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "el inicio de «frame» no puede ser UNBOUNDED FOLLOWING" -#: gram.y:11982 +#: gram.y:12698 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "el «frame» que se inicia desde la siguiente fila no puede terminar en la fila actual" -#: gram.y:12005 +#: gram.y:12721 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "el fin de «frame» no puede ser UNBOUNDED PRECEDING" -#: gram.y:12011 +#: gram.y:12727 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "el «frame» que se inicia desde la fila actual no puede tener filas precedentes" -#: gram.y:12018 +#: gram.y:12734 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "el «frame» que se inicia desde la fila siguiente no puede tener filas precedentes" -#: gram.y:12657 +#: gram.y:13392 #, c-format msgid "type modifier cannot have parameter name" msgstr "el modificador de tipo no puede tener nombre de parámetro" -#: gram.y:12663 +#: gram.y:13398 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "el modificador de tipo no puede tener ORDER BY" -#: gram.y:13284 gram.y:13459 +#: gram.y:13456 gram.y:13491 +#, c-format +msgid "role name \"%s\" is reserved" +msgstr "el nombre de rol «%s» está reservado" + +#: gram.y:13462 gram.y:13468 +#, fuzzy, c-format +msgid "%s cannot be used as a role name here" +msgstr "%s no puede ser aplicado a un join" + +#: gram.y:14087 gram.y:14276 msgid "improper use of \"*\"" msgstr "uso impropio de «*»" -#: gram.y:13523 +#: gram.y:14340 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "una agregación de conjunto-ordenado con un argumento directo VARIADIC debe tener al menos un argumento agregado VARIADIC del mismo tipo de datos" -#: gram.y:13560 +#: gram.y:14377 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "no se permiten múltiples cláusulas ORDER BY" -#: gram.y:13571 +#: gram.y:14388 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "no se permiten múltiples cláusulas OFFSET" -#: gram.y:13580 +#: gram.y:14397 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "no se permiten múltiples cláusulas LIMIT" -#: gram.y:13589 +#: gram.y:14406 #, c-format msgid "multiple WITH clauses not allowed" msgstr "no se permiten múltiples cláusulas WITH" -#: gram.y:13729 +#: gram.y:14586 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "los argumentos OUT e INOUT no están permitidos en funciones TABLE" -#: gram.y:13830 +#: gram.y:14687 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "no se permiten múltiples cláusulas COLLATE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:13868 gram.y:13881 +#: gram.y:14725 gram.y:14738 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "las restricciones %s no pueden ser marcadas DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:13894 +#: gram.y:14751 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "las restricciones %s no pueden ser marcadas NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:13907 +#: gram.y:14764 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "las restricciones %s no pueden ser marcadas NO INHERIT" -#: guc-file.l:263 +#: guc-file.l:315 #, c-format msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %u" msgstr "parámetro de configuración «%s» no reconocido en el archivo «%s» línea %u" -#: guc-file.l:327 +#: guc-file.l:388 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "parámetro «%s» eliminado del archivo de configuración, volviendo al valor por omisión" -#: guc-file.l:389 +#: guc-file.l:454 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "el parámetro «%s» fue cambiado a «%s»" -#: guc-file.l:424 +#: guc-file.l:496 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "el archivo de configuración «%s» contiene errores" -#: guc-file.l:429 +#: guc-file.l:501 #, c-format msgid "configuration file \"%s\" contains errors; unaffected changes were applied" msgstr "el archivo de configuración «%s» contiene errores; los cambios no afectados fueron aplicados" -#: guc-file.l:434 +#: guc-file.l:506 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "el archivo de configuración «%s» contiene errores; no se aplicó ningún cambio" -#: guc-file.l:504 +#: guc-file.l:579 #, c-format msgid "could not open configuration file \"%s\": maximum nesting depth exceeded" msgstr "no se pudo abrir el archivo de configuración «%s»: nivel de anidamiento máximo excedido" -#: guc-file.l:524 +#: guc-file.l:606 #, c-format msgid "skipping missing configuration file \"%s\"" msgstr "saltando el archivo de configuración faltante «%s»" -#: guc-file.l:763 +#: guc-file.l:860 #, c-format msgid "syntax error in file \"%s\" line %u, near end of line" msgstr "error de sintaxis en el archivo «%s» línea %u, cerca del fin de línea" -#: guc-file.l:768 +#: guc-file.l:870 #, c-format msgid "syntax error in file \"%s\" line %u, near token \"%s\"" msgstr "error de sintaxis en el archivo «%s» línea %u, cerca de la palabra «%s»" -#: guc-file.l:784 +#: guc-file.l:890 #, c-format msgid "too many syntax errors found, abandoning file \"%s\"" msgstr "se encontraron demasiados errores de sintaxis, abandonando el archivo «%s»" -#: guc-file.l:829 +#: guc-file.l:942 #, c-format msgid "could not open configuration directory \"%s\": %m" msgstr "no se pudo abrir el directorio de configuración «%s»: %m" -#: repl_gram.y:247 repl_gram.y:274 +#: repl_gram.y:257 repl_gram.y:284 #, c-format msgid "invalid timeline %u" msgstr "timeline %u no válido" -#: repl_scanner.l:118 +#: repl_scanner.l:119 msgid "invalid streaming start location" msgstr "posición de inicio de flujo de WAL no válida" -#: repl_scanner.l:169 scan.l:661 +#: repl_scanner.l:170 scan.l:667 msgid "unterminated quoted string" msgstr "una cadena de caracteres entre comillas está inconclusa" -#: repl_scanner.l:179 +#: repl_scanner.l:180 #, c-format msgid "syntax error: unexpected character \"%s\"" msgstr "error de sintaxis: carácter «%s» inesperado" -#: scan.l:426 +#: scan.l:432 msgid "unterminated /* comment" msgstr "un comentario /* está inconcluso" -#: scan.l:455 +#: scan.l:461 msgid "unterminated bit string literal" msgstr "una cadena de bits está inconclusa" -#: scan.l:476 +#: scan.l:482 msgid "unterminated hexadecimal string literal" msgstr "una cadena hexadecimal está inconclusa" -#: scan.l:526 +#: scan.l:532 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "uso inseguro de literal de cadena con escapes Unicode" -#: scan.l:527 +#: scan.l:533 #, c-format msgid "String constants with Unicode escapes cannot be used when standard_conforming_strings is off." msgstr "Los literales de cadena con escapes Unicode no pueden usarse cuando standard_conforming_strings está desactivado." -#: scan.l:571 scan.l:767 +#: scan.l:577 scan.l:773 msgid "invalid Unicode escape character" msgstr "carácter de escape Unicode no válido" -#: scan.l:596 scan.l:604 scan.l:612 scan.l:613 scan.l:614 scan.l:1297 -#: scan.l:1324 scan.l:1328 scan.l:1366 scan.l:1370 scan.l:1392 +#: scan.l:602 scan.l:610 scan.l:618 scan.l:619 scan.l:620 scan.l:1329 +#: scan.l:1356 scan.l:1360 scan.l:1398 scan.l:1402 scan.l:1424 msgid "invalid Unicode surrogate pair" msgstr "par sustituto (surrogate) Unicode no válido" -#: scan.l:618 +#: scan.l:624 #, c-format msgid "invalid Unicode escape" msgstr "valor de escape Unicode no válido" -#: scan.l:619 +#: scan.l:625 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "Los escapes Unicode deben ser \\uXXXX o \\UXXXXXXXX." -#: scan.l:630 +#: scan.l:636 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "uso inseguro de \\' en un literal de cadena" -#: scan.l:631 +#: scan.l:637 #, c-format msgid "Use '' to write quotes in strings. \\' is insecure in client-only encodings." msgstr "Use '' para escribir comillas en cadenas. \\' es inseguro en codificaciones de sólo cliente." -#: scan.l:706 +#: scan.l:712 msgid "unterminated dollar-quoted string" msgstr "una cadena separada por $ está inconclusa" -#: scan.l:723 scan.l:747 scan.l:762 +#: scan.l:729 scan.l:753 scan.l:768 msgid "zero-length delimited identifier" msgstr "un identificador delimitado tiene largo cero" -#: scan.l:782 +#: scan.l:788 msgid "unterminated quoted identifier" msgstr "un identificador entre comillas está inconcluso" -#: scan.l:886 +#: scan.l:919 msgid "operator too long" msgstr "el operador es demasiado largo" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1044 +#: scan.l:1072 #, c-format msgid "%s at end of input" msgstr "%s al final de la entrada" #. translator: first %s is typically the translation of "syntax error" -#: scan.l:1052 +#: scan.l:1080 #, c-format msgid "%s at or near \"%s\"" msgstr "%s en o cerca de «%s»" -#: scan.l:1213 scan.l:1245 +#: scan.l:1245 scan.l:1277 msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8" msgstr "Los valores de escape Unicode no puede ser usados para valores de «code point» sobre 007F cuando la codificación de servidor no es UTF8" -#: scan.l:1241 scan.l:1384 +#: scan.l:1273 scan.l:1416 msgid "invalid Unicode escape value" msgstr "valor de escape Unicode no válido" -#: scan.l:1440 +#: scan.l:1472 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "uso no estandar de \\' en un literal de cadena" -#: scan.l:1441 +#: scan.l:1473 #, c-format msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." msgstr "Use '' para escribir comillas en cadenas, o use la sintaxis de escape de cadenas (E'...')." -#: scan.l:1450 +#: scan.l:1482 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "uso no estandar de \\\\ en un literal de cadena" -#: scan.l:1451 +#: scan.l:1483 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "Use '' para escribir comillas en cadenas, o use la sintaxis de escape de cadenas (E'\\\\')." -#: scan.l:1465 +#: scan.l:1497 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "uso no estandar de escape en un literal de cadena" -#: scan.l:1466 +#: scan.l:1498 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Use la sintaxis de escape para cadenas, por ej. E'\\r\\n'." + +#~ msgid "role with OID %u does not exist" +#~ msgstr "no existe el rol con OID %u" + +#~ msgid "=> is deprecated as an operator name" +#~ msgstr "=> es un nombre obsoleto de operador" + +#~ msgid "This name may be disallowed altogether in future versions of PostgreSQL." +#~ msgstr "Este nombre puede prohibirse por completo en futuras versiones de PostgreSQL." + +#~ msgid "inherited relation \"%s\" is not a table" +#~ msgstr "la relación heredada «%s» no es una tabla" + +#~ msgid "Specify a USING expression to perform the conversion." +#~ msgstr "Especifique una expresión USING para llevar a cabo la conversión." + +#~ msgid "" +#~ "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" +#~ "pages: %d removed, %d remain\n" +#~ "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable\n" +#~ "buffer usage: %d hits, %d misses, %d dirtied\n" +#~ "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" +#~ "system usage: %s" +#~ msgstr "" +#~ "vacuum automático de la tabla «%s.%s.%s»: recorridos de índice: %d\n" +#~ "páginas: eliminadas %d, remanentes %d\n" +#~ "tuplas: eliminadas %.0f, remanentes %.0f, muertas pero sin eliminar aún %.0f\n" +#~ "uso de búfers: %d aciertos, %d fallas, %d ensuciados\n" +#~ "tasas promedio: de lectura: %.3f MB/s, de escritura %.3f MB/s\n" +#~ "uso del sistema: %s" + +#~ msgid "" +#~ "%.0f dead row versions cannot be removed yet.\n" +#~ "There were %.0f unused item pointers.\n" +#~ "%u pages are entirely empty.\n" +#~ "%s." +#~ msgstr "" +#~ "%.0f versiones muertas de filas no pueden ser eliminadas aún.\n" +#~ "Hubo %.0f punteros de ítem sin uso.\n" +#~ "%u páginas están completamente vacías.\n" +#~ "%s." + +#~ msgid "SSL failure during renegotiation start" +#~ msgstr "fallo SSL durante el inicio de renegociación" + +#~ msgid "SSL handshake failure on renegotiation, retrying" +#~ msgstr "fallo en el «handshake» durante la renegociación SSL, intentando de nuevo" + +#~ msgid "could not complete SSL handshake on renegotiation, too many failures" +#~ msgstr "no se pudo completar el «handshake» durante la renegociación SSL, demasiados fallos" + +#~ msgid "SSL failed to renegotiate connection before limit expired" +#~ msgstr "SSL no pudo renegociar conexión antes de la expiración del límite" + +#~ msgid "could not set socket to blocking mode: %m" +#~ msgstr "no se pudo poner el socket en modo bloqueante: %m" + +#~ msgid "%s: setsysinfo failed: %s\n" +#~ msgstr "%s: setsysinfo falló: %s\n" + +#~ msgid " -A 1|0 enable/disable run-time assert checking\n" +#~ msgstr " -A 1|0 activar/desactivar el uso de aseveraciones (asserts)\n" + +#~ msgid "subquery must return a column" +#~ msgstr "la subconsulta debe retornar una columna" + +#~ msgid "Consider increasing the configuration parameter \"checkpoint_segments\"." +#~ msgstr "Considere incrementar el parámetro de configuración «checkpoint_segments»." + +#~ msgid "WAL archival (archive_mode=on) requires wal_level \"archive\", \"hot_standby\", or \"logical\"" +#~ msgstr "el archivado de WAL (archive_mode=on) requiere wal_level «archive» o «hot_standby» o «logical»" + +#~ msgid "could not determine input data types" +#~ msgstr "no se pudo determinar el tipo de datos de entrada" + +#~ msgid "neither input type is an array" +#~ msgstr "ninguno de los tipos de entrada es un array" + +#~ msgid "unexpected \"=\"" +#~ msgstr "«=» inesperado" + +#~ msgid "invalid symbol" +#~ msgstr "símbolo no válido" + +#~ msgid "JSON does not support infinite date values." +#~ msgstr "JSON no soporta valores infinitos de fecha." + +#~ msgid "JSON does not support infinite timestamp values." +#~ msgstr "JSON no soporta valores infinitos de timestamp." + +#~ msgid "cannot accept a value of type pg_node_tree" +#~ msgstr "no se puede aceptar un valor de tipo pg_node_tree" + +#~ msgid "Turns on various assertion checks." +#~ msgstr "Activar varios chequeos de integridad (assertion checks)." + +#~ msgid "This is a debugging aid." +#~ msgstr "Esto es una ayuda para la depuración." + +#~ msgid "This parameter doesn't do anything." +#~ msgstr "Este parámetro no hace nada." + +#~ msgid "It's just here so that we won't choke on SET AUTOCOMMIT TO ON from 7.3-vintage clients." +#~ msgstr "Está aquí sólo para poder aceptar SET AUTOCOMMIT TO ON desde clientes de la línea 7.3." + +#~ msgid "Sets the maximum distance in log segments between automatic WAL checkpoints." +#~ msgstr "Define la distancia máxima, en cantidad de segmentos, entre puntos de control de WAL automáticos." + +#~ msgid "Set the amount of traffic to send and receive before renegotiating the encryption keys." +#~ msgstr "Define la cantidad de tráfico a enviar y recibir antes de renegociar las llaves de cifrado." + +#~ msgid "SET AUTOCOMMIT TO OFF is no longer supported" +#~ msgstr "SET AUTOCOMMIT TO OFF ya no está soportado" + +#~ msgid "assertion checking is not supported by this build" +#~ msgstr "la revisión de aseveraciones (asserts) no está soportada en este servidor" + +#~ msgid "interval precision specified twice" +#~ msgstr "la precisión de interval fue especificada dos veces" diff --git a/src/backend/po/it.po b/src/backend/po/it.po index 5fbc1a2f008eb..923bbe0a5f5bf 100644 --- a/src/backend/po/it.po +++ b/src/backend/po/it.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: postgres (PostgreSQL) 9.4\n" +"Project-Id-Version: postgres (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-06 18:08+0000\n" -"PO-Revision-Date: 2014-12-06 18:26+0100\n" +"POT-Creation-Date: 2015-08-15 18:38+0000\n" +"PO-Revision-Date: 2015-08-16 10:42+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -63,14 +63,14 @@ msgstr "lettura del link simbolico \"%s\" fallita" msgid "pclose failed: %s" msgstr "pclose fallita: %s" -#: ../common/fe_memutils.c:33 ../common/fe_memutils.c:60 -#: ../common/fe_memutils.c:83 ../common/psprintf.c:181 ../port/path.c:598 +#: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 +#: ../common/fe_memutils.c:98 ../common/psprintf.c:181 ../port/path.c:598 #: ../port/path.c:636 ../port/path.c:653 #, c-format msgid "out of memory\n" msgstr "memoria esaurita\n" -#: ../common/fe_memutils.c:77 +#: ../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "impossibile duplicare il puntatore nullo (errore interno)\n" @@ -91,24 +91,27 @@ msgid "could not close directory \"%s\": %s\n" msgstr "chiusura della directory \"%s\" fallita: %s\n" #: ../common/psprintf.c:179 ../port/path.c:596 ../port/path.c:634 -#: ../port/path.c:651 access/transam/xlog.c:6123 lib/stringinfo.c:258 -#: libpq/auth.c:823 libpq/auth.c:1179 libpq/auth.c:1247 libpq/auth.c:1647 -#: postmaster/bgworker.c:267 postmaster/bgworker.c:783 -#: postmaster/postmaster.c:2173 postmaster/postmaster.c:2204 -#: postmaster/postmaster.c:3740 postmaster/postmaster.c:4441 -#: postmaster/postmaster.c:4526 postmaster/postmaster.c:5218 -#: postmaster/postmaster.c:5450 storage/buffer/buf_init.c:154 -#: storage/buffer/localbuf.c:396 storage/file/fd.c:458 storage/file/fd.c:855 -#: storage/file/fd.c:973 storage/file/fd.c:1586 storage/ipc/procarray.c:909 -#: storage/ipc/procarray.c:1395 storage/ipc/procarray.c:1402 -#: storage/ipc/procarray.c:1751 storage/ipc/procarray.c:2335 -#: utils/adt/formatting.c:1519 utils/adt/formatting.c:1639 -#: utils/adt/formatting.c:1760 utils/adt/regexp.c:219 utils/adt/varlena.c:3653 -#: utils/adt/varlena.c:3674 utils/fmgr/dfmgr.c:224 utils/hash/dynahash.c:379 -#: utils/hash/dynahash.c:456 utils/hash/dynahash.c:970 utils/mb/mbutils.c:376 -#: utils/mb/mbutils.c:709 utils/misc/guc.c:3571 utils/misc/guc.c:3587 -#: utils/misc/guc.c:3600 utils/misc/tzparser.c:470 utils/mmgr/aset.c:499 -#: utils/mmgr/aset.c:678 utils/mmgr/aset.c:872 utils/mmgr/aset.c:1114 +#: ../port/path.c:651 access/transam/xlog.c:6050 lib/stringinfo.c:258 +#: libpq/auth.c:821 libpq/auth.c:1182 libpq/auth.c:1250 libpq/auth.c:1659 +#: postmaster/bgworker.c:289 postmaster/bgworker.c:796 +#: postmaster/postmaster.c:2266 postmaster/postmaster.c:2297 +#: postmaster/postmaster.c:3860 postmaster/postmaster.c:4548 +#: postmaster/postmaster.c:4616 postmaster/postmaster.c:5330 +#: postmaster/postmaster.c:5584 replication/logical/logical.c:167 +#: storage/buffer/localbuf.c:396 storage/file/fd.c:481 storage/file/fd.c:878 +#: storage/file/fd.c:996 storage/file/fd.c:1609 storage/ipc/procarray.c:1033 +#: storage/ipc/procarray.c:1519 storage/ipc/procarray.c:1526 +#: storage/ipc/procarray.c:1919 storage/ipc/procarray.c:2503 +#: utils/adt/formatting.c:1523 utils/adt/formatting.c:1643 +#: utils/adt/formatting.c:1764 utils/adt/regexp.c:219 utils/adt/varlena.c:4199 +#: utils/adt/varlena.c:4220 utils/fmgr/dfmgr.c:220 utils/hash/dynahash.c:411 +#: utils/hash/dynahash.c:488 utils/hash/dynahash.c:1002 utils/mb/mbutils.c:376 +#: utils/mb/mbutils.c:709 utils/misc/guc.c:3721 utils/misc/guc.c:3737 +#: utils/misc/guc.c:3750 utils/misc/guc.c:6684 utils/misc/tzparser.c:470 +#: utils/mmgr/aset.c:504 utils/mmgr/mcxt.c:685 utils/mmgr/mcxt.c:720 +#: utils/mmgr/mcxt.c:757 utils/mmgr/mcxt.c:794 utils/mmgr/mcxt.c:828 +#: utils/mmgr/mcxt.c:857 utils/mmgr/mcxt.c:891 utils/mmgr/mcxt.c:971 +#: utils/mmgr/mcxt.c:1004 utils/mmgr/mcxt.c:1051 #, c-format msgid "out of memory" msgstr "memoria esaurita" @@ -123,6 +126,41 @@ msgstr "Nome del fork non valido" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Nomi di fork validi sono \"main\", \"fsm\", \"vm\" e \"init\"." +#: ../common/restricted_token.c:68 +#, c-format +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: ATTENZIONE: non è possibile creare token ristretti su questa piattaforma\n" + +#: ../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: apertura del token di processo fallita: codice di errore %lu\n" + +#: ../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: allocazione dei SID fallita: codice di errore: %lu\n" + +#: ../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: creazione del token ristretto fallita: codice di errore %lu\n" + +#: ../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: avvio del processo fallito per il comando \"%s\": codice di errore %lu\n" + +#: ../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: ri-esecuzione con token ristretto fallita: codice di errore %lu\n" + +#: ../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: lettura del codice di uscita del sottoprocesso fallita: codice di errore %lu\n" + #: ../common/rmtree.c:77 #, c-format msgid "could not stat file or directory \"%s\": %s\n" @@ -138,14 +176,14 @@ msgstr "rimozione del file o directory \"%s\" fallita: %s\n" msgid "could not look up effective user ID %ld: %s" msgstr "ID utente effettivo %ld non trovato: %s" -#: ../common/username.c:47 libpq/auth.c:1594 +#: ../common/username.c:47 libpq/auth.c:1606 msgid "user does not exist" msgstr "l'utente non esiste" -#: ../common/username.c:61 +#: ../common/username.c:62 #, c-format -msgid "user name lookup failure: %s" -msgstr "errore nella ricerca del nome: %s" +msgid "user name lookup failure: error code %lu" +msgstr "ricerca del nome utente fallita: codice di errore %lu" #: ../common/wait_error.c:47 #, c-format @@ -188,6 +226,7 @@ msgid "could not determine encoding for codeset \"%s\"" msgstr "determinazione della codifica per il codeset \"%s\" fallita" #: ../port/chklocale.c:260 ../port/chklocale.c:389 +#: postmaster/postmaster.c:4845 #, c-format msgid "Please report this to ." msgstr "Per favore segnala questo problema a ." @@ -260,78 +299,88 @@ msgstr "codice di errore win32 %lu mappato su %d" msgid "unrecognized win32 error code: %lu" msgstr "codice di errore win32 sconosciuto: %lu" -#: access/common/heaptuple.c:679 access/common/heaptuple.c:1419 +#: access/brin/brin_pageops.c:647 access/brin/brin_pageops.c:805 +#, c-format +msgid "index row size %lu exceeds maximum %lu for index \"%s\"" +msgstr "la dimensione %lu della riga dell'indice supera il massimo %lu per l'indice \"%s\"" + +#: access/brin/brin_revmap.c:448 +#, c-format +msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" +msgstr "tipo di pagina inaspettato 0x%04X nell'indice BRIN \"%s\" blocco %u" + +#: access/common/heaptuple.c:708 access/common/heaptuple.c:1339 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "il numero di colonne (%d) eccede il limite (%d)" -#: access/common/indextuple.c:57 +#: access/common/indextuple.c:60 #, c-format msgid "number of index columns (%d) exceeds limit (%d)" msgstr "il numero delle colonne dell'indice (%d) eccede il limite (%d)" -#: access/common/indextuple.c:173 access/spgist/spgutils.c:605 +#: access/common/indextuple.c:176 access/spgist/spgutils.c:605 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "la riga dell'indice richiede %zu byte, la dimensione massima è %zu" -#: access/common/printtup.c:294 tcop/fastpath.c:182 tcop/fastpath.c:571 -#: tcop/postgres.c:1672 +#: access/common/printtup.c:294 tcop/fastpath.c:182 tcop/fastpath.c:544 +#: tcop/postgres.c:1730 #, c-format msgid "unsupported format code: %d" msgstr "codice di formato non supportato: %d" -#: access/common/reloptions.c:396 +#: access/common/reloptions.c:465 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "è stato superato il limite per i tipi di parametro per la relazione definita dall'utente" -#: access/common/reloptions.c:680 +#: access/common/reloptions.c:747 #, c-format msgid "RESET must not include values for parameters" msgstr "RESET non deve contenere valori per i parametri" -#: access/common/reloptions.c:713 +#: access/common/reloptions.c:780 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "parametro del namespace \"%s\" sconosciuto" -#: access/common/reloptions.c:959 parser/parse_clause.c:268 +#: access/common/reloptions.c:1020 parser/parse_clause.c:279 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "parametro \"%s\" non identificato" -#: access/common/reloptions.c:984 +#: access/common/reloptions.c:1050 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "parametro \"%s\" specificato più di una volta" -#: access/common/reloptions.c:999 +#: access/common/reloptions.c:1066 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "valore non valido per l'opzione booleana \"%s\": %s" -#: access/common/reloptions.c:1010 +#: access/common/reloptions.c:1078 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "valore non valido per l'opzione intera \"%s\": %s" -#: access/common/reloptions.c:1015 access/common/reloptions.c:1033 +#: access/common/reloptions.c:1084 access/common/reloptions.c:1104 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "il valore %s non rientra nei limiti previsti per l'opzione \"%s\"" -#: access/common/reloptions.c:1017 +#: access/common/reloptions.c:1086 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "I valori validi sono quelli compresi fra \"%d\" e \"%d\"." -#: access/common/reloptions.c:1028 +#: access/common/reloptions.c:1098 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "valore non valido per l'opzione in virgola mobile \"%s\": %s" -#: access/common/reloptions.c:1035 +#: access/common/reloptions.c:1106 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "I valori validi sono quelli compresi fra \"%f\" e \"%f\"." @@ -356,58 +405,58 @@ msgstr "L'attributo \"%s\" di tipo %s non combacia con l'attributo corrispondent msgid "Attribute \"%s\" of type %s does not exist in type %s." msgstr "L'attributo \"%s\" di tipo %s non esiste nel tipo %s." -#: access/common/tupdesc.c:635 parser/parse_relation.c:1339 +#: access/common/tupdesc.c:635 parser/parse_relation.c:1511 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "la colonna \"%s\" non può essere dichiarata SETOF" -#: access/gin/ginentrypage.c:108 access/gist/gist.c:1281 -#: access/nbtree/nbtinsert.c:545 access/nbtree/nbtsort.c:485 -#: access/spgist/spgdoinsert.c:1880 +#: access/gin/ginentrypage.c:109 access/gist/gist.c:1289 +#: access/nbtree/nbtinsert.c:567 access/nbtree/nbtsort.c:488 +#: access/spgist/spgdoinsert.c:1907 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "la dimensione %zu della riga dell'indice supera il massimo %zu per l'indice \"%s\"" -#: access/gin/ginscan.c:402 +#: access/gin/ginscan.c:410 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" msgstr "i vecchi indici GIN non supportano le scansioni sull'intero indice né le ricerche di null" -#: access/gin/ginscan.c:403 +#: access/gin/ginscan.c:411 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Per correggere questo problema esegui REINDEX INDEX \"%s\"." -#: access/gist/gist.c:624 access/gist/gistvacuum.c:266 +#: access/gist/gist.c:632 access/gist/gistvacuum.c:266 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "l'indice \"%s\" contiene una tupla interna marcata come invalida" -#: access/gist/gist.c:626 access/gist/gistvacuum.c:268 +#: access/gist/gist.c:634 access/gist/gistvacuum.c:268 #, c-format msgid "This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1." msgstr "Ciò è causato da una separazione di pagina incompleta al ripristino del crash prima dell'aggiornamento a PostgreSQL 9.1." -#: access/gist/gist.c:627 access/gist/gistutil.c:693 -#: access/gist/gistutil.c:704 access/gist/gistvacuum.c:269 +#: access/gist/gist.c:635 access/gist/gistutil.c:735 +#: access/gist/gistutil.c:746 access/gist/gistvacuum.c:269 #: access/hash/hashutil.c:172 access/hash/hashutil.c:183 #: access/hash/hashutil.c:195 access/hash/hashutil.c:216 -#: access/nbtree/nbtpage.c:509 access/nbtree/nbtpage.c:520 +#: access/nbtree/nbtpage.c:518 access/nbtree/nbtpage.c:529 #, c-format msgid "Please REINDEX it." msgstr "Si richiede l'esecuzione di REINDEX." -#: access/gist/gistbuild.c:254 +#: access/gist/gistbuild.c:252 #, c-format msgid "invalid value for \"buffering\" option" msgstr "valore non valido per l'opzione \"buffering\"" -#: access/gist/gistbuild.c:255 +#: access/gist/gistbuild.c:253 #, c-format msgid "Valid values are \"on\", \"off\", and \"auto\"." msgstr "I valori validi sono \"on\", \"off\" ed \"auto\"." -#: access/gist/gistbuildbuffers.c:780 utils/sort/logtape.c:212 +#: access/gist/gistbuildbuffers.c:778 utils/sort/logtape.c:209 #, c-format msgid "could not write block %ld of temporary file: %m" msgstr "scrittura del blocco %ld del file temporaneo fallita: %m" @@ -422,14 +471,14 @@ msgstr "il metodo picksplit per la colonna %d dell'indice \"%s\" è fallito" msgid "The index is not optimal. To optimize it, contact a developer, or try to use the column as the second one in the CREATE INDEX command." msgstr "L'indice non è ottimale. Per ottimizzarlo si contatti uno sviluppatore o si usi la colonna ponendola in seconda posizione nel comando CREATE INDEX." -#: access/gist/gistutil.c:690 access/hash/hashutil.c:169 -#: access/nbtree/nbtpage.c:506 +#: access/gist/gistutil.c:732 access/hash/hashutil.c:169 +#: access/nbtree/nbtpage.c:515 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "l'indice \"%s\" contiene una pagina inaspettata completamente a zero al blocco %u" -#: access/gist/gistutil.c:701 access/hash/hashutil.c:180 -#: access/hash/hashutil.c:192 access/nbtree/nbtpage.c:517 +#: access/gist/gistutil.c:743 access/hash/hashutil.c:180 +#: access/hash/hashutil.c:192 access/nbtree/nbtpage.c:526 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "l'indice \"%s\" contiene una pagina corrotta al blocco %u" @@ -439,7 +488,7 @@ msgstr "l'indice \"%s\" contiene una pagina corrotta al blocco %u" msgid "index row size %zu exceeds hash maximum %zu" msgstr "la dimensione %zu della riga dell'indice supera il massimo dell'hash %zu" -#: access/hash/hashinsert.c:70 access/spgist/spgdoinsert.c:1884 +#: access/hash/hashinsert.c:70 access/spgist/spgdoinsert.c:1911 #: access/spgist/spgutils.c:666 #, c-format msgid "Values larger than a buffer page cannot be indexed." @@ -465,138 +514,173 @@ msgstr "l'indice \"%s\" non è un indice hash" msgid "index \"%s\" has wrong hash version" msgstr "l'indice \"%s\" ha una versione errata dell'hash" -#: access/heap/heapam.c:1199 access/heap/heapam.c:1227 -#: access/heap/heapam.c:1259 catalog/aclchk.c:1742 +#: access/heap/heapam.c:1074 access/heap/heapam.c:1126 +#, c-format +msgid "cannot access temporary tables during a parallel operation" +msgstr "non è possibile accedere alle tabelle temporanee durante un'operazione parallela" + +#: access/heap/heapam.c:1243 access/heap/heapam.c:1271 +#: access/heap/heapam.c:1303 catalog/aclchk.c:1733 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\" è un indice" -#: access/heap/heapam.c:1204 access/heap/heapam.c:1232 -#: access/heap/heapam.c:1264 catalog/aclchk.c:1749 commands/tablecmds.c:8495 -#: commands/tablecmds.c:11279 +#: access/heap/heapam.c:1248 access/heap/heapam.c:1276 +#: access/heap/heapam.c:1308 catalog/aclchk.c:1740 commands/tablecmds.c:8943 +#: commands/tablecmds.c:11943 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\" è un tipo composito" -#: access/heap/heapam.c:4223 access/heap/heapam.c:4436 -#: access/heap/heapam.c:4493 executor/execMain.c:1992 +#: access/heap/heapam.c:2339 +#, c-format +msgid "cannot insert tuples during a parallel operation" +msgstr "non è possibile inserire tuple durante un'operazione parallela" + +#: access/heap/heapam.c:2760 +#, c-format +msgid "cannot delete tuples during a parallel operation" +msgstr "non è possibile eliminare tuple durante un'operazione parallela" + +#: access/heap/heapam.c:2806 +#, c-format +msgid "attempted to delete invisible tuple" +msgstr "tentativo di eliminare tuple invisibili" + +#: access/heap/heapam.c:3228 access/heap/heapam.c:5779 +#, c-format +msgid "cannot update tuples during a parallel operation" +msgstr "non è possibile aggiornare tuple durante un'operazione parallela" + +#: access/heap/heapam.c:3350 +#, c-format +msgid "attempted to update invisible tuple" +msgstr "tentativo di aggiornare tuple invisibili" + +#: access/heap/heapam.c:4601 access/heap/heapam.c:4639 +#: access/heap/heapam.c:4862 executor/execMain.c:2267 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "lock di riga nella relazione \"%s\" fallito" -#: access/heap/hio.c:240 access/heap/rewriteheap.c:666 +#: access/heap/hio.c:253 access/heap/rewriteheap.c:666 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "la riga è troppo grande: la dimensione %zu supera il massimo %zu" -#: access/heap/rewriteheap.c:932 +#: access/heap/rewriteheap.c:925 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "scrittura nel file \"%s\" fallita, scritti %d di %d: %m" -#: access/heap/rewriteheap.c:973 access/heap/rewriteheap.c:1185 -#: access/heap/rewriteheap.c:1282 access/transam/timeline.c:407 -#: access/transam/timeline.c:497 access/transam/xlog.c:3185 -#: access/transam/xlog.c:3315 replication/logical/snapbuild.c:1592 -#: replication/slot.c:1042 replication/slot.c:1131 storage/file/fd.c:436 -#: storage/smgr/md.c:966 storage/smgr/md.c:1197 storage/smgr/md.c:1370 -#: utils/misc/guc.c:6599 +#: access/heap/rewriteheap.c:965 access/heap/rewriteheap.c:1177 +#: access/heap/rewriteheap.c:1274 access/transam/timeline.c:407 +#: access/transam/timeline.c:497 access/transam/xlog.c:3011 +#: access/transam/xlog.c:3173 replication/logical/origin.c:613 +#: replication/logical/snapbuild.c:1592 replication/slot.c:1097 +#: replication/slot.c:1186 storage/file/fd.c:459 storage/file/fd.c:2718 +#: storage/smgr/md.c:982 storage/smgr/md.c:1213 storage/smgr/md.c:1386 +#: utils/misc/guc.c:6706 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "fsync del file \"%s\" fallito: %m" -#: access/heap/rewriteheap.c:1028 access/heap/rewriteheap.c:1148 +#: access/heap/rewriteheap.c:1020 access/heap/rewriteheap.c:1140 #: access/transam/timeline.c:315 access/transam/timeline.c:475 -#: access/transam/xlog.c:3141 access/transam/xlog.c:3276 -#: access/transam/xlog.c:9915 access/transam/xlog.c:10230 -#: postmaster/postmaster.c:4216 replication/slot.c:999 -#: storage/file/copydir.c:162 storage/smgr/md.c:304 utils/time/snapmgr.c:976 +#: access/transam/xlog.c:2967 access/transam/xlog.c:3116 +#: access/transam/xlog.c:10149 access/transam/xlog.c:10185 +#: access/transam/xlog.c:10507 postmaster/postmaster.c:4323 +#: replication/logical/origin.c:542 replication/slot.c:1054 +#: storage/file/copydir.c:162 storage/smgr/md.c:320 utils/time/snapmgr.c:1071 #, c-format msgid "could not create file \"%s\": %m" msgstr "creazione del file \"%s\" fallita: %m" -#: access/heap/rewriteheap.c:1157 +#: access/heap/rewriteheap.c:1149 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "troncamento del file \"%s\" a %u fallito: %m" -#: access/heap/rewriteheap.c:1164 replication/walsender.c:465 -#: storage/smgr/md.c:1782 +#: access/heap/rewriteheap.c:1156 replication/walsender.c:465 +#: storage/smgr/md.c:1798 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "non è stato possibile spostarsi alla fine del file \"%s\": %m" -#: access/heap/rewriteheap.c:1175 access/transam/timeline.c:367 +#: access/heap/rewriteheap.c:1167 access/transam/timeline.c:367 #: access/transam/timeline.c:401 access/transam/timeline.c:491 -#: access/transam/xlog.c:3176 access/transam/xlog.c:3308 -#: postmaster/postmaster.c:4226 postmaster/postmaster.c:4236 -#: replication/logical/snapbuild.c:1576 replication/slot.c:1028 -#: storage/file/copydir.c:187 utils/init/miscinit.c:1057 -#: utils/init/miscinit.c:1066 utils/init/miscinit.c:1073 utils/misc/guc.c:6567 -#: utils/misc/guc.c:6592 utils/misc/guc.c:8290 utils/misc/guc.c:8304 -#: utils/time/snapmgr.c:981 utils/time/snapmgr.c:988 +#: access/transam/xlog.c:3002 access/transam/xlog.c:3166 +#: postmaster/postmaster.c:4333 postmaster/postmaster.c:4343 +#: replication/logical/origin.c:551 replication/logical/origin.c:587 +#: replication/logical/origin.c:603 replication/logical/snapbuild.c:1576 +#: replication/slot.c:1083 storage/file/copydir.c:187 +#: utils/init/miscinit.c:1195 utils/init/miscinit.c:1204 +#: utils/init/miscinit.c:1211 utils/misc/guc.c:6667 utils/misc/guc.c:6698 +#: utils/misc/guc.c:8516 utils/misc/guc.c:8530 utils/time/snapmgr.c:1076 +#: utils/time/snapmgr.c:1083 #, c-format msgid "could not write to file \"%s\": %m" msgstr "scrittura nel file \"%s\" fallita: %m" -#: access/heap/rewriteheap.c:1258 access/transam/xlog.c:10099 -#: access/transam/xlogarchive.c:114 access/transam/xlogarchive.c:467 -#: replication/logical/reorderbuffer.c:2352 -#: replication/logical/reorderbuffer.c:2409 +#: access/heap/rewriteheap.c:1250 access/transam/xlog.c:10374 +#: access/transam/xlogarchive.c:114 access/transam/xlogarchive.c:468 +#: replication/logical/origin.c:529 replication/logical/reorderbuffer.c:2421 +#: replication/logical/reorderbuffer.c:2478 #: replication/logical/snapbuild.c:1520 replication/logical/snapbuild.c:1895 -#: replication/slot.c:1105 storage/ipc/dsm.c:326 storage/smgr/md.c:404 -#: storage/smgr/md.c:453 storage/smgr/md.c:1317 +#: replication/slot.c:1160 storage/ipc/dsm.c:326 storage/smgr/md.c:420 +#: storage/smgr/md.c:469 storage/smgr/md.c:1333 #, c-format msgid "could not remove file \"%s\": %m" msgstr "rimozione del file \"%s\" fallita: %m" -#: access/heap/rewriteheap.c:1272 access/transam/timeline.c:111 +#: access/heap/rewriteheap.c:1264 access/transam/timeline.c:111 #: access/transam/timeline.c:236 access/transam/timeline.c:334 -#: access/transam/xlog.c:3117 access/transam/xlog.c:3224 -#: access/transam/xlog.c:3261 access/transam/xlog.c:3536 -#: access/transam/xlog.c:3614 replication/basebackup.c:458 -#: replication/basebackup.c:1167 replication/logical/logicalfuncs.c:152 -#: replication/logical/reorderbuffer.c:1965 -#: replication/logical/reorderbuffer.c:2172 -#: replication/logical/reorderbuffer.c:2801 +#: access/transam/xlog.c:2943 access/transam/xlog.c:3060 +#: access/transam/xlog.c:3101 access/transam/xlog.c:3392 +#: access/transam/xlog.c:3470 replication/basebackup.c:398 +#: replication/basebackup.c:1158 replication/logical/logicalfuncs.c:154 +#: replication/logical/origin.c:677 replication/logical/reorderbuffer.c:2038 +#: replication/logical/reorderbuffer.c:2242 +#: replication/logical/reorderbuffer.c:2869 #: replication/logical/snapbuild.c:1569 replication/logical/snapbuild.c:1653 -#: replication/slot.c:1120 replication/walsender.c:458 -#: replication/walsender.c:2094 storage/file/copydir.c:155 -#: storage/file/fd.c:422 storage/smgr/md.c:586 storage/smgr/md.c:844 -#: utils/error/elog.c:1797 utils/init/miscinit.c:992 -#: utils/init/miscinit.c:1121 utils/misc/guc.c:6795 utils/misc/guc.c:6813 +#: replication/slot.c:1175 replication/walsender.c:458 +#: replication/walsender.c:2080 storage/file/copydir.c:155 +#: storage/file/fd.c:445 storage/file/fd.c:2653 storage/file/fd.c:2705 +#: storage/smgr/md.c:602 storage/smgr/md.c:860 utils/error/elog.c:1854 +#: utils/init/miscinit.c:1130 utils/init/miscinit.c:1259 utils/misc/guc.c:6910 +#: utils/misc/guc.c:6942 #, c-format msgid "could not open file \"%s\": %m" msgstr "apertura del file \"%s\" fallita: %m" -#: access/index/indexam.c:172 catalog/objectaddress.c:855 -#: commands/indexcmds.c:1725 commands/tablecmds.c:232 -#: commands/tablecmds.c:11270 +#: access/index/indexam.c:172 catalog/objectaddress.c:1144 +#: commands/indexcmds.c:1754 commands/tablecmds.c:238 +#: commands/tablecmds.c:11934 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\" non è un indice" -#: access/nbtree/nbtinsert.c:396 +#: access/nbtree/nbtinsert.c:419 #, c-format msgid "duplicate key value violates unique constraint \"%s\"" msgstr "un valore chiave duplicato viola il vincolo univoco \"%s\"" -#: access/nbtree/nbtinsert.c:398 +#: access/nbtree/nbtinsert.c:421 #, c-format msgid "Key %s already exists." msgstr "La chiave %s esiste già." -#: access/nbtree/nbtinsert.c:466 +#: access/nbtree/nbtinsert.c:488 #, c-format msgid "failed to re-find tuple within index \"%s\"" msgstr "non ho ritrovato la tupla nell'indice \"%s\"" -#: access/nbtree/nbtinsert.c:468 +#: access/nbtree/nbtinsert.c:490 #, c-format msgid "This may be because of a non-immutable index expression." msgstr "Ciò potrebbe essere causato da un'espressione dell'indice non immutabile." -#: access/nbtree/nbtinsert.c:548 access/nbtree/nbtsort.c:488 +#: access/nbtree/nbtinsert.c:570 access/nbtree/nbtsort.c:491 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -605,24 +689,24 @@ msgstr "" "Non si possono indicizzare valori più grandi di 1/3 di pagina di buffer.\n" "Si consiglia un indice funzionale su un hash MD5 del valore o l'uso del full text indexing." -#: access/nbtree/nbtpage.c:166 access/nbtree/nbtpage.c:362 -#: access/nbtree/nbtpage.c:449 parser/parse_utilcmd.c:1620 +#: access/nbtree/nbtpage.c:168 access/nbtree/nbtpage.c:371 +#: access/nbtree/nbtpage.c:458 parser/parse_utilcmd.c:1665 #, c-format msgid "index \"%s\" is not a btree" msgstr "l'indice \"%s\" non è un btree" -#: access/nbtree/nbtpage.c:172 access/nbtree/nbtpage.c:368 -#: access/nbtree/nbtpage.c:455 +#: access/nbtree/nbtpage.c:174 access/nbtree/nbtpage.c:377 +#: access/nbtree/nbtpage.c:464 #, c-format msgid "version mismatch in index \"%s\": file version %d, code version %d" msgstr "le versioni non corrispondono per l'indice \"%s\": la versione sul file è %d, quella del codice %d" -#: access/nbtree/nbtpage.c:1187 +#: access/nbtree/nbtpage.c:1152 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "l'indice \"%s\" contiene una pagina interna mezza morta" -#: access/nbtree/nbtpage.c:1189 +#: access/nbtree/nbtpage.c:1154 #, c-format msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "Ciò può essere causato da un VACUUM interrotto in una versione 9.3 o precedente, prima dell'aggiornamento. Si consiglia un REINDEX." @@ -632,13 +716,34 @@ msgstr "Ciò può essere causato da un VACUUM interrotto in una versione 9.3 o p msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "La dimensione %zu della tupla interna SP-GiST supera il massimo %zu" -#: access/transam/multixact.c:990 +#: access/tablesample/bernoulli.c:152 access/tablesample/system.c:156 +#, c-format +msgid "sample percentage must be between 0 and 100" +msgstr "la percentuale dei campioni dev'essere tra 0 e 100" + +#: access/transam/commit_ts.c:273 access/transam/commit_ts.c:359 +#, c-format +msgid "could not get commit timestamp data" +msgstr "non è stato possibile ottenere i dati dell'ora di commit" + +#: access/transam/commit_ts.c:274 access/transam/commit_ts.c:360 +#: libpq/hba.c:1424 +#, c-format +msgid "Make sure the configuration parameter \"%s\" is set." +msgstr "Assicurati che il parametro di configurazione \"%s\" sia impostato." + +#: access/transam/commit_ts.c:281 +#, c-format +msgid "cannot retrieve commit timestamp for transaction %u" +msgstr "non è stato possibile ottenere l'ora di commit per la transazione %u" + +#: access/transam/multixact.c:1013 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" msgstr "il database non sta accettando comandi che generano nuovi MultiXactIds per evitare perdite di dati per wraparound nel database \"%s\"" -#: access/transam/multixact.c:992 access/transam/multixact.c:999 -#: access/transam/multixact.c:1014 access/transam/multixact.c:1023 +#: access/transam/multixact.c:1015 access/transam/multixact.c:1022 +#: access/transam/multixact.c:1046 access/transam/multixact.c:1055 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -647,43 +752,70 @@ msgstr "" "Esegui un VACUUM sull'intero database.\n" "Potresti anche dover eseguire il commit o il rollback di vecchie transazioni preparate." -#: access/transam/multixact.c:997 +#: access/transam/multixact.c:1020 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" msgstr "il database non sta accettando comandi che generano nuovi MultiXactIds per evitare perdite di dati per wraparound nel database con OID %u" -#: access/transam/multixact.c:1009 access/transam/multixact.c:2201 +#: access/transam/multixact.c:1041 access/transam/multixact.c:2305 #, 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] "il database \"%s\" deve ricevere un vacuum prima che altri %u MultiXactIds siano usati" msgstr[1] "il database \"%s\" deve ricevere un vacuum prima che altri %u MultiXactIds siano usati" -#: access/transam/multixact.c:1018 access/transam/multixact.c:2210 +#: access/transam/multixact.c:1050 access/transam/multixact.c:2314 #, 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] "il database con OID %u deve ricevere un vacuum prima che altri %u MultiXactIds siano usati" msgstr[1] "il database con OID %u deve ricevere un vacuum prima che altri %u MultiXactIds siano usati" -#: access/transam/multixact.c:1169 +#: access/transam/multixact.c:1111 +#, c-format +msgid "multixact \"members\" limit exceeded" +msgstr "limite \"membri\" multixact superato" + +#: access/transam/multixact.c:1112 +#, 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] "Questo comando creerebbe un multixact con %u membri, ma lo spazio restante è sufficiente solo per %u membro." +msgstr[1] "Questo comando creerebbe un multixact con %u membri, ma lo spazio restante è sufficiente solo per %u membri." + +#: access/transam/multixact.c:1117 +#, 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 "Esegui un VACUUM su tutto il database con OID %u con impostazioni di vacuum_multixact_freeze_min_age e vacuum_multixact_freeze_table_age ridotte." + +#: access/transam/multixact.c:1148 +#, c-format +msgid "database with OID %u must be vacuumed before %d more multixact members are used" +msgstr "il database con OID %u deve ricevere un vacuum prima che altri %d membri multixact possano essere usati" + +#: access/transam/multixact.c:1151 +#, 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 "Esegui un VACUUM su quel database intero con impostazioni di vacuum_multixact_freeze_min_age e vacuum_multixact_freeze_table_age ridotte." + +#: access/transam/multixact.c:1289 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "il MultiXactId %u non esiste più -- sembra ci sia stato un wraparound" -#: access/transam/multixact.c:1177 +#: access/transam/multixact.c:1297 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "il MultiXactId %u non è stato ancora creato -- sembra ci sia stato un wraparound" -#: access/transam/multixact.c:2166 +#: access/transam/multixact.c:2267 #, c-format msgid "MultiXactId wrap limit is %u, limited by database with OID %u" msgstr "il limite di wrap di MultiXactId è %u, limitato dal database con OID %u" -#: access/transam/multixact.c:2206 access/transam/multixact.c:2215 -#: access/transam/varsup.c:137 access/transam/varsup.c:144 -#: access/transam/varsup.c:374 access/transam/varsup.c:381 +#: access/transam/multixact.c:2310 access/transam/multixact.c:2319 +#: access/transam/varsup.c:146 access/transam/varsup.c:153 +#: access/transam/varsup.c:384 access/transam/varsup.c:391 #, c-format msgid "" "To avoid a database shutdown, execute a database-wide VACUUM in that database.\n" @@ -692,11 +824,71 @@ msgstr "" "Per evitare lo spegnimento del database, si deve eseguire un VACUUM su tutto il database.\n" "Potrebbe essere necessario inoltre effettuare il COMMIT o il ROLLBACK di vecchie transazioni preparate." -#: access/transam/multixact.c:2799 +#: access/transam/multixact.c:2578 +#, c-format +msgid "MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk" +msgstr "le protezioni di wraparound dei membri MultiXact sono disabilitate perché il il MultiXact più vecchio che abbia ricevuto un checkpoint %u non esiste sul disco" + +#: access/transam/multixact.c:2601 +#, c-format +msgid "MultiXact member wraparound protections are now enabled" +msgstr "le protezioni di wraparound dei membri MultiXact ora sono abilitate" + +#: access/transam/multixact.c:2603 +#, c-format +msgid "MultiXact member stop limit is now %u based on MultiXact %u" +msgstr "il limite di arresto dei membri MultiXact è ora %u basato sul MultiXact %u" + +#: access/transam/multixact.c:2690 +#, c-format +msgid "oldest MultiXactId member is at offset %u" +msgstr "il membro MultiXactId più vecchio è all'offset %u" + +#: access/transam/multixact.c:2694 +#, c-format +msgid "oldest MultiXactId member offset unknown" +msgstr "il membro MultiXactId più vecchio è ad un offset sconosciuto" + +#: access/transam/multixact.c:3043 +#, c-format +msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" +msgstr "MultiXact più vecchio %u non trovato, il primo è il MultiXact %u, troncamento non eseguito" + +#: access/transam/multixact.c:3275 #, c-format msgid "invalid MultiXactId: %u" msgstr "MultiXactId non valido: %u" +#: access/transam/parallel.c:574 +#, c-format +msgid "postmaster exited during a parallel transaction" +msgstr "il postmaster è terminato durante una transazione parallela" + +#: access/transam/parallel.c:665 +#, c-format +msgid "lost connection to parallel worker" +msgstr "connessione al worker parallelo perduta" + +#: access/transam/parallel.c:835 +#, c-format +msgid "unable to map dynamic shared memory segment" +msgstr "mappatura del segmento di memoria dinamica condivisa non riuscito" + +#: access/transam/parallel.c:840 +#, c-format +msgid "bad magic number in dynamic shared memory segment" +msgstr "numero magico sbagliato nel segmento di memoria dinamica condivisa" + +#: access/transam/parallel.c:853 +#, c-format +msgid "too many parallel workers already attached" +msgstr "troppi lavoratori in parallelo già attaccati" + +#: access/transam/parallel.c:993 +#, c-format +msgid "parallel worker, pid %d" +msgstr "lavoratore parallelo, pid %d" + #: access/transam/slru.c:651 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" @@ -784,19 +976,22 @@ msgstr "dati non validi nel file dello storico \"%s\"" msgid "Timeline IDs must be less than child timeline's ID." msgstr "Gli ID della timeline devono avere valori inferiori degli ID della timeline figlia" -#: access/transam/timeline.c:346 access/transam/xlog.c:3289 -#: access/transam/xlog.c:10081 access/transam/xlog.c:10094 -#: access/transam/xlog.c:10462 access/transam/xlog.c:10505 -#: access/transam/xlogfuncs.c:468 access/transam/xlogfuncs.c:487 -#: replication/logical/reorderbuffer.c:2819 replication/walsender.c:483 -#: storage/file/copydir.c:176 utils/adt/genfile.c:139 +#: access/transam/timeline.c:346 access/transam/xlog.c:3144 +#: access/transam/xlog.c:10356 access/transam/xlog.c:10369 +#: access/transam/xlog.c:10732 access/transam/xlog.c:10775 +#: access/transam/xlog.c:10814 access/transam/xlog.c:10857 +#: access/transam/xlogfuncs.c:478 access/transam/xlogfuncs.c:497 +#: commands/extension.c:3047 replication/logical/origin.c:684 +#: replication/logical/origin.c:714 replication/logical/reorderbuffer.c:2887 +#: replication/walsender.c:483 storage/file/copydir.c:176 +#: utils/adt/genfile.c:151 #, c-format msgid "could not read file \"%s\": %m" msgstr "lettura de file \"%s\" fallita: %m" #: access/transam/timeline.c:412 access/transam/timeline.c:502 -#: access/transam/xlog.c:3191 access/transam/xlog.c:3320 -#: access/transam/xlogfuncs.c:493 commands/copy.c:1518 +#: access/transam/xlog.c:3017 access/transam/xlog.c:3178 +#: access/transam/xlogfuncs.c:503 commands/copy.c:1631 #: storage/file/copydir.c:201 #, c-format msgid "could not close file \"%s\": %m" @@ -808,12 +1003,13 @@ msgid "could not link file \"%s\" to \"%s\": %m" msgstr "creazione del collegamento il file \"%s\" a \"%s\" fallita: %m" #: access/transam/timeline.c:436 access/transam/timeline.c:526 -#: access/transam/xlog.c:5403 access/transam/xlog.c:6496 -#: access/transam/xlogarchive.c:458 access/transam/xlogarchive.c:475 -#: access/transam/xlogarchive.c:582 postmaster/pgarch.c:759 -#: replication/logical/snapbuild.c:1606 replication/slot.c:468 -#: replication/slot.c:942 replication/slot.c:1054 utils/misc/guc.c:6843 -#: utils/time/snapmgr.c:999 +#: access/transam/xlog.c:5299 access/transam/xlog.c:6516 +#: access/transam/xlog.c:6533 access/transam/xlog.c:7315 +#: access/transam/xlogarchive.c:458 access/transam/xlogarchive.c:476 +#: access/transam/xlogarchive.c:586 postmaster/pgarch.c:734 +#: replication/logical/origin.c:624 replication/logical/snapbuild.c:1606 +#: replication/slot.c:471 replication/slot.c:997 replication/slot.c:1109 +#: utils/misc/guc.c:6966 utils/time/snapmgr.c:1094 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "non è stato possibile rinominare il file \"%s\" in \"%s\": %m" @@ -823,166 +1019,166 @@ msgstr "non è stato possibile rinominare il file \"%s\" in \"%s\": %m" msgid "requested timeline %u is not in this server's history" msgstr "la timeline richiesta %u non è nella storia di questo server" -#: access/transam/twophase.c:330 +#: access/transam/twophase.c:328 #, c-format msgid "transaction identifier \"%s\" is too long" msgstr "l'identificativo di transazione \"%s\" è troppo lungo" -#: access/transam/twophase.c:337 +#: access/transam/twophase.c:335 #, c-format msgid "prepared transactions are disabled" msgstr "le transazione preparate sono disabilitate" -#: access/transam/twophase.c:338 +#: access/transam/twophase.c:336 #, c-format msgid "Set max_prepared_transactions to a nonzero value." msgstr "Imposta max_prepared_transactions ad un valore non nullo." -#: access/transam/twophase.c:357 +#: access/transam/twophase.c:355 #, c-format msgid "transaction identifier \"%s\" is already in use" msgstr "l'identificativo di transazione \"%s\" è già in uso" -#: access/transam/twophase.c:366 +#: access/transam/twophase.c:364 #, c-format msgid "maximum number of prepared transactions reached" msgstr "è stato raggiunto il numero massimo di transazioni preparate" -#: access/transam/twophase.c:367 +#: access/transam/twophase.c:365 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "Incrementa il valore di max_prepared_transactions (il valore attuale è %d)" -#: access/transam/twophase.c:505 +#: access/transam/twophase.c:502 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "la transazione preparata con identificativo \"%s\" è in uso" -#: access/transam/twophase.c:511 +#: access/transam/twophase.c:508 #, c-format msgid "permission denied to finish prepared transaction" msgstr "non è consentito portare a termine la transazione preparata" -#: access/transam/twophase.c:512 +#: access/transam/twophase.c:509 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "È consentito solo a un superutente o all'utente che ha preparato la transazione." -#: access/transam/twophase.c:523 +#: access/transam/twophase.c:520 #, c-format msgid "prepared transaction belongs to another database" msgstr "la transazione preparata appartiene ad un altro database" -#: access/transam/twophase.c:524 +#: access/transam/twophase.c:521 #, c-format msgid "Connect to the database where the transaction was prepared to finish it." msgstr "Connettersi al database in cui la transazione è stata preparata per portarla a termine." -#: access/transam/twophase.c:539 +#: access/transam/twophase.c:536 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "la transazione preparata con identificativo \"%s\" non esiste" -#: access/transam/twophase.c:1042 +#: access/transam/twophase.c:1046 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "è stata superata la lunghezza massima del file dello stato a due fasi" -#: access/transam/twophase.c:1055 +#: access/transam/twophase.c:1059 #, c-format msgid "could not create two-phase state file \"%s\": %m" msgstr "creazione del file dello stato a due fasi \"%s\" fallito: %m" -#: access/transam/twophase.c:1069 access/transam/twophase.c:1086 -#: access/transam/twophase.c:1135 access/transam/twophase.c:1564 -#: access/transam/twophase.c:1571 +#: access/transam/twophase.c:1073 access/transam/twophase.c:1090 +#: access/transam/twophase.c:1143 access/transam/twophase.c:1573 +#: access/transam/twophase.c:1580 #, c-format msgid "could not write two-phase state file: %m" msgstr "scrittura nel file dello stato a due fasi fallito: %m" -#: access/transam/twophase.c:1095 +#: access/transam/twophase.c:1099 #, c-format msgid "could not seek in two-phase state file: %m" msgstr "spostamento nel file dello stato a due fasi %m fallito" -#: access/transam/twophase.c:1141 access/transam/twophase.c:1589 +#: access/transam/twophase.c:1149 access/transam/twophase.c:1598 #, c-format msgid "could not close two-phase state file: %m" msgstr "chiusura del file dello stato a due fasi fallita: %m" -#: access/transam/twophase.c:1228 access/transam/twophase.c:1670 +#: access/transam/twophase.c:1237 access/transam/twophase.c:1679 #, c-format msgid "could not open two-phase state file \"%s\": %m" msgstr "apertura del file dello stato a due fasi \"%s\" fallita: %m" -#: access/transam/twophase.c:1245 +#: access/transam/twophase.c:1254 #, c-format msgid "could not stat two-phase state file \"%s\": %m" msgstr "non è stato possibile ottenere informazioni sul file dello stato a due fasi \"%s\": %m" -#: access/transam/twophase.c:1277 +#: access/transam/twophase.c:1286 #, c-format msgid "could not read two-phase state file \"%s\": %m" msgstr "lettura del file dello stato a due fasi \"%s\" fallita: %m" -#: access/transam/twophase.c:1373 +#: access/transam/twophase.c:1382 #, c-format msgid "two-phase state file for transaction %u is corrupt" msgstr "il file dello stato a due fasi per la transazione %u è corrotto" -#: access/transam/twophase.c:1526 +#: access/transam/twophase.c:1535 #, c-format msgid "could not remove two-phase state file \"%s\": %m" msgstr "rimozione del file dello stato a due fasi \"%s\" fallita: %m" -#: access/transam/twophase.c:1555 +#: access/transam/twophase.c:1564 #, c-format msgid "could not recreate two-phase state file \"%s\": %m" msgstr "ricreazione del file dello stato a due fasi \"%s\" fallita: %m" -#: access/transam/twophase.c:1583 +#: access/transam/twophase.c:1592 #, c-format msgid "could not fsync two-phase state file: %m" msgstr "fsync del file dello stato a due fasi: %m" -#: access/transam/twophase.c:1679 +#: access/transam/twophase.c:1688 #, c-format msgid "could not fsync two-phase state file \"%s\": %m" msgstr "fsync del file dello stato a due fasi \"%s\" fallito: %m" -#: access/transam/twophase.c:1686 +#: access/transam/twophase.c:1695 #, c-format msgid "could not close two-phase state file \"%s\": %m" msgstr "chiusura del file dello stato a due fasi \"%s\" fallita: %m" -#: access/transam/twophase.c:1751 +#: access/transam/twophase.c:1760 #, c-format msgid "removing future two-phase state file \"%s\"" msgstr "rimozione del file dello stato a due fasi nel futuro \"%s\"" -#: access/transam/twophase.c:1767 access/transam/twophase.c:1778 -#: access/transam/twophase.c:1897 access/transam/twophase.c:1908 -#: access/transam/twophase.c:1981 +#: access/transam/twophase.c:1776 access/transam/twophase.c:1787 +#: access/transam/twophase.c:1906 access/transam/twophase.c:1917 +#: access/transam/twophase.c:1990 #, c-format msgid "removing corrupt two-phase state file \"%s\"" msgstr "rimozione del file dello stato a due fasi corrotto \"%s\"" -#: access/transam/twophase.c:1886 access/transam/twophase.c:1970 +#: access/transam/twophase.c:1895 access/transam/twophase.c:1979 #, c-format msgid "removing stale two-phase state file \"%s\"" msgstr "rimozione del file dello stato a due fasi obsoleto \"%s\"" -#: access/transam/twophase.c:1988 +#: access/transam/twophase.c:1997 #, c-format msgid "recovering prepared transaction %u" msgstr "recupero della transazione preparata %u" -#: access/transam/varsup.c:115 +#: access/transam/varsup.c:124 #, c-format msgid "database is not accepting commands to avoid wraparound data loss in database \"%s\"" msgstr "il database non accetta comandi per evitare perdita di dati per wraparound \"%s\"" -#: access/transam/varsup.c:117 access/transam/varsup.c:124 +#: access/transam/varsup.c:126 access/transam/varsup.c:133 #, c-format msgid "" "Stop the postmaster and vacuum that database in single-user mode.\n" @@ -991,1112 +1187,1206 @@ msgstr "" "Arresta il processo postmaster ed effettua un VACUUM su quel database in modalità a singolo utente.\n" "Potrebbe essere necessario inoltre effettuare il COMMIT o il ROLLBACK di vecchie transazioni preparate." -#: access/transam/varsup.c:122 +#: access/transam/varsup.c:131 #, c-format msgid "database is not accepting commands to avoid wraparound data loss in database with OID %u" msgstr "il database non accetta comandi per evitare perdita di dati per wraparound nel database con OID %u" -#: access/transam/varsup.c:134 access/transam/varsup.c:371 +#: access/transam/varsup.c:143 access/transam/varsup.c:381 #, c-format msgid "database \"%s\" must be vacuumed within %u transactions" msgstr "è necessario eseguire il VACUUM sul database \"%s\" entro %u transazioni" -#: access/transam/varsup.c:141 access/transam/varsup.c:378 +#: access/transam/varsup.c:150 access/transam/varsup.c:388 #, c-format msgid "database with OID %u must be vacuumed within %u transactions" msgstr "è necessario eseguire il VACUUM sul database con OID %u entro %u transazioni" -#: access/transam/varsup.c:336 +#: access/transam/varsup.c:346 #, c-format msgid "transaction ID wrap limit is %u, limited by database with OID %u" msgstr "il limite di sovrascrittura degli ID di transazione è %u, definito dal database con OID %u" -#: access/transam/xact.c:814 +#: access/transam/xact.c:943 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "non è possibile effettuare più di 2^32-2 comandi in una transazione" -#: access/transam/xact.c:1370 +#: access/transam/xact.c:1441 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "il numero massimo di sottotransazioni committed (%d) è stato superato" -#: access/transam/xact.c:2151 +#: access/transam/xact.c:2235 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary tables" msgstr "non è possibile eseguire PREPARE in una transazione che ha operato su tabelle temporanee" -#: access/transam/xact.c:2161 +#: access/transam/xact.c:2245 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "non è possibile eseguire PREPARE in una transazione che ha esportato snapshot" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3000 +#: access/transam/xact.c:3123 #, c-format msgid "%s cannot run inside a transaction block" msgstr "non è possibile eseguire %s all'interno di un blocco di transazione" # translator: %s represents an SQL statement name #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3010 +#: access/transam/xact.c:3133 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "non è possibile eseguire %s all'interno di una sottotransazione" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3020 +#: access/transam/xact.c:3143 #, c-format msgid "%s cannot be executed from a function or multi-command string" msgstr "una funzione o una stringa multi-comando non può eseguire %s" # translator: %s represents an SQL statement name #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3091 +#: access/transam/xact.c:3214 #, c-format msgid "%s can only be used in transaction blocks" msgstr "si può usare %s solo entro blocchi di transazione" -#: access/transam/xact.c:3274 +#: access/transam/xact.c:3398 #, c-format msgid "there is already a transaction in progress" msgstr "c'è già una transazione in corso" -#: access/transam/xact.c:3442 access/transam/xact.c:3535 +#: access/transam/xact.c:3566 access/transam/xact.c:3669 #, c-format msgid "there is no transaction in progress" msgstr "non c'è alcuna transazione in corso" -#: access/transam/xact.c:3631 access/transam/xact.c:3682 -#: access/transam/xact.c:3688 access/transam/xact.c:3732 -#: access/transam/xact.c:3781 access/transam/xact.c:3787 +#: access/transam/xact.c:3577 +#, c-format +msgid "cannot commit during a parallel operation" +msgstr "non è possibile effettuare un commit durante un'operazione parallela" + +#: access/transam/xact.c:3680 +#, c-format +msgid "cannot abort during a parallel operation" +msgstr "non è possibile interrompere durante un'operazione parallela" + +#: access/transam/xact.c:3722 +#, c-format +msgid "cannot define savepoints during a parallel operation" +msgstr "non è possibile definire un punto di salvataggio durante un'operazione parallela" + +#: access/transam/xact.c:3789 +#, c-format +msgid "cannot release savepoints during a parallel operation" +msgstr "non è possibile rilasciare un punto di salvataggio durante un'operazione parallela" + +#: access/transam/xact.c:3800 access/transam/xact.c:3852 +#: access/transam/xact.c:3858 access/transam/xact.c:3914 +#: access/transam/xact.c:3964 access/transam/xact.c:3970 #, c-format msgid "no such savepoint" msgstr "punto di salvataggio inesistente" -#: access/transam/xact.c:4464 +#: access/transam/xact.c:3902 +#, c-format +msgid "cannot rollback to savepoints during a parallel operation" +msgstr "non è possibile effettuare un rollback durante un'operazione parallela" + +#: access/transam/xact.c:4030 +#, c-format +msgid "cannot start subtransactions during a parallel operation" +msgstr "non è possibile iniziare una sub-transazione durante un'operazione parallela" + +#: access/transam/xact.c:4097 +#, c-format +msgid "cannot commit subtransactions during a parallel operation" +msgstr "non è possibile effettuare il commit di una sub-transazione durante un'operazione parallela" + +#: access/transam/xact.c:4702 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "non è possibile avere più di 2^32-1 comandi in una sottotransazione" -#: access/transam/xlog.c:2416 +#: access/transam/xlog.c:2270 #, c-format msgid "could not seek in log file %s to offset %u: %m" msgstr "spostamento nel file di log %s alla posizione %u fallito: %m" -#: access/transam/xlog.c:2436 +#: access/transam/xlog.c:2290 #, c-format msgid "could not write to log file %s at offset %u, length %zu: %m" msgstr "scrittura nel file di log %s in posizione %u, lunghezza %zu fallita: %m" -#: access/transam/xlog.c:2712 +#: access/transam/xlog.c:2553 #, c-format msgid "updated min recovery point to %X/%X on timeline %u" msgstr "punto di recupero minimo aggiornato a %X/%X sulla timeline %u" -#: access/transam/xlog.c:3292 +#: access/transam/xlog.c:3148 #, c-format msgid "not enough data in file \"%s\"" msgstr "il file \"%s\" non contiene abbastanza dati" -#: access/transam/xlog.c:3411 +#: access/transam/xlog.c:3267 #, c-format msgid "could not link file \"%s\" to \"%s\" (initialization of log file): %m" msgstr "collegamento del file \"%s\" a \"%s\" (inizializzazione del file di log) fallito: %m" -#: access/transam/xlog.c:3423 +#: access/transam/xlog.c:3279 #, c-format msgid "could not rename file \"%s\" to \"%s\" (initialization of log file): %m" msgstr "non è stato possibile rinominare il file \"%s\" in \"%s\" (inizializzazione del file di log): %m" -#: access/transam/xlog.c:3451 +#: access/transam/xlog.c:3307 #, c-format msgid "could not open transaction log file \"%s\": %m" msgstr "apertura del file di log delle transazioni \"%s\" fallita: %m" -#: access/transam/xlog.c:3640 +#: access/transam/xlog.c:3496 access/transam/xlog.c:5269 #, c-format msgid "could not close log file %s: %m" msgstr "chiusura del file di log %s fallita: %m" -#: access/transam/xlog.c:3699 replication/logical/logicalfuncs.c:147 -#: replication/walsender.c:2089 +#: access/transam/xlog.c:3553 replication/logical/logicalfuncs.c:149 +#: replication/walsender.c:2075 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "il segmento WAL richiesto %s è stato già rimosso" # da non tradursi # DV: perché? (trovato tradotto, tra l'altro) -#: access/transam/xlog.c:3777 access/transam/xlog.c:3954 +#: access/transam/xlog.c:3613 access/transam/xlog.c:3688 +#: access/transam/xlog.c:3886 #, c-format msgid "could not open transaction log directory \"%s\": %m" msgstr "apertura della directory dei log delle transazioni \"%s\" fallita: %m" -#: access/transam/xlog.c:3825 +#: access/transam/xlog.c:3769 #, c-format msgid "recycled transaction log file \"%s\"" msgstr "il file di log delle transazioni \"%s\" è stato riciclato" -#: access/transam/xlog.c:3841 +#: access/transam/xlog.c:3781 #, c-format msgid "removing transaction log file \"%s\"" msgstr "eliminazione del file di log delle transazioni \"%s\"" -#: access/transam/xlog.c:3864 +#: access/transam/xlog.c:3801 #, c-format msgid "could not rename old transaction log file \"%s\": %m" msgstr "non è stato possibile rinominare il vecchio file di log delle transazioni \"%s\": %m" -#: access/transam/xlog.c:3876 +#: access/transam/xlog.c:3813 #, c-format msgid "could not remove old transaction log file \"%s\": %m" msgstr "chiusura del vecchio file di log delle transazioni \"%s\" fallita: %m" -#: access/transam/xlog.c:3914 access/transam/xlog.c:3924 +#: access/transam/xlog.c:3846 access/transam/xlog.c:3856 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "la directory dei file WAL \"%s\" necessaria non esiste" -#: access/transam/xlog.c:3930 +#: access/transam/xlog.c:3862 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "creazione della directory dei file WAL mancante \"%s\"" -#: access/transam/xlog.c:3933 +#: access/transam/xlog.c:3865 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "creazione della directory mancante \"%s\" fallita: %m" -#: access/transam/xlog.c:3967 +#: access/transam/xlog.c:3896 #, c-format msgid "removing transaction log backup history file \"%s\"" msgstr "rimozione del file storico di backup del log delle transazioni \"%s\"" -#: access/transam/xlog.c:4159 +#: access/transam/xlog.c:3977 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "ID di timeline %u inatteso nel segmento di log %s, offset %u" -#: access/transam/xlog.c:4281 +#: access/transam/xlog.c:4099 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "la nuova timeline %u non è figlia della timeline %u del database" -#: access/transam/xlog.c:4295 +#: access/transam/xlog.c:4113 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "la nuova timeline %u si è staccata dalla timeline attuale %u prima del punto di recupero corrente %X/%X" -#: access/transam/xlog.c:4314 +#: access/transam/xlog.c:4132 #, c-format msgid "new target timeline is %u" msgstr "la nuova timeline di destinazione %u" -#: access/transam/xlog.c:4394 +#: access/transam/xlog.c:4212 #, c-format msgid "could not create control file \"%s\": %m" msgstr "creazione del file di controllo \"%s\" fallita: %m" -#: access/transam/xlog.c:4405 access/transam/xlog.c:4641 +#: access/transam/xlog.c:4223 access/transam/xlog.c:4459 #, c-format msgid "could not write to control file: %m" msgstr "scrittura nel file di controllo fallita: %m" -#: access/transam/xlog.c:4411 access/transam/xlog.c:4647 +#: access/transam/xlog.c:4229 access/transam/xlog.c:4465 #, c-format msgid "could not fsync control file: %m" msgstr "fsync del file di controllo fallito: %m" -#: access/transam/xlog.c:4416 access/transam/xlog.c:4652 +#: access/transam/xlog.c:4234 access/transam/xlog.c:4470 #, c-format msgid "could not close control file: %m" msgstr "chiusura del file di controllo fallita: %m" -#: access/transam/xlog.c:4434 access/transam/xlog.c:4630 +#: access/transam/xlog.c:4252 access/transam/xlog.c:4448 #, c-format msgid "could not open control file \"%s\": %m" msgstr "apertura del file di controllo \"%s\" fallita: %m" -#: access/transam/xlog.c:4440 +#: access/transam/xlog.c:4258 #, c-format msgid "could not read from control file: %m" msgstr "lettura dal file di controllo fallita: %m" -#: access/transam/xlog.c:4453 access/transam/xlog.c:4462 -#: access/transam/xlog.c:4486 access/transam/xlog.c:4493 -#: access/transam/xlog.c:4500 access/transam/xlog.c:4505 -#: access/transam/xlog.c:4512 access/transam/xlog.c:4519 -#: access/transam/xlog.c:4526 access/transam/xlog.c:4533 -#: access/transam/xlog.c:4540 access/transam/xlog.c:4547 -#: access/transam/xlog.c:4554 access/transam/xlog.c:4563 -#: access/transam/xlog.c:4570 access/transam/xlog.c:4579 -#: access/transam/xlog.c:4586 access/transam/xlog.c:4595 -#: access/transam/xlog.c:4602 utils/init/miscinit.c:1139 +#: access/transam/xlog.c:4271 access/transam/xlog.c:4280 +#: access/transam/xlog.c:4304 access/transam/xlog.c:4311 +#: access/transam/xlog.c:4318 access/transam/xlog.c:4323 +#: access/transam/xlog.c:4330 access/transam/xlog.c:4337 +#: access/transam/xlog.c:4344 access/transam/xlog.c:4351 +#: access/transam/xlog.c:4358 access/transam/xlog.c:4365 +#: access/transam/xlog.c:4372 access/transam/xlog.c:4381 +#: access/transam/xlog.c:4388 access/transam/xlog.c:4397 +#: access/transam/xlog.c:4404 access/transam/xlog.c:4413 +#: access/transam/xlog.c:4420 utils/init/miscinit.c:1277 #, c-format msgid "database files are incompatible with server" msgstr "i file del database sono incompatibili col server" -#: access/transam/xlog.c:4454 +#: access/transam/xlog.c:4272 #, 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 "Il cluster di database è stato inizializzato con PG_CONTROL_VERSION %d (0x%08x), ma il server è stato compilato con PG_CONTROL_VERSION %d (0x%08x)." -#: access/transam/xlog.c:4458 +#: access/transam/xlog.c:4276 #, c-format msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." msgstr "Questo potrebbe essere un problema di ordinamento di byte che non combacia. Sembra sia necessario eseguire initdb." -#: access/transam/xlog.c:4463 +#: access/transam/xlog.c:4281 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." msgstr "Il cluster di database è stato inizializzato con PG_CONTROL_VERSION %d, ma il server è stato compilato con PG_CONTROL_VERSION %d." -#: access/transam/xlog.c:4466 access/transam/xlog.c:4490 -#: access/transam/xlog.c:4497 access/transam/xlog.c:4502 +#: access/transam/xlog.c:4284 access/transam/xlog.c:4308 +#: access/transam/xlog.c:4315 access/transam/xlog.c:4320 #, c-format msgid "It looks like you need to initdb." msgstr "Sembra sia necessario eseguire initdb." -#: access/transam/xlog.c:4477 +#: access/transam/xlog.c:4295 #, c-format msgid "incorrect checksum in control file" msgstr "il checksum nel file di controllo non è corretto" -#: access/transam/xlog.c:4487 +#: access/transam/xlog.c:4305 #, c-format msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." msgstr "Il cluster di database è stato inizializzato con CATALOG_VERSION_NO %d, ma il server è stato compilato con CATALOG_VERSION_NO %d." -#: access/transam/xlog.c:4494 +#: access/transam/xlog.c:4312 #, c-format msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." msgstr "Il cluster di database è stato inizializzato con MAXALIGN %d, ma il server è stato compilato con MAXALIGN %d." -#: access/transam/xlog.c:4501 +#: access/transam/xlog.c:4319 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "Il cluster di database sta usando un formato per i numeri in virgola mobile diverso da quello usato dall'eseguibile del server." -#: access/transam/xlog.c:4506 +#: access/transam/xlog.c:4324 #, c-format msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." msgstr "Il cluster di database è stato inizializzato con BLCKSZ %d, ma il server è stato compilato con BLCKSZ %d." -#: access/transam/xlog.c:4509 access/transam/xlog.c:4516 -#: access/transam/xlog.c:4523 access/transam/xlog.c:4530 -#: access/transam/xlog.c:4537 access/transam/xlog.c:4544 -#: access/transam/xlog.c:4551 access/transam/xlog.c:4558 -#: access/transam/xlog.c:4566 access/transam/xlog.c:4573 -#: access/transam/xlog.c:4582 access/transam/xlog.c:4589 -#: access/transam/xlog.c:4598 access/transam/xlog.c:4605 +#: access/transam/xlog.c:4327 access/transam/xlog.c:4334 +#: access/transam/xlog.c:4341 access/transam/xlog.c:4348 +#: access/transam/xlog.c:4355 access/transam/xlog.c:4362 +#: access/transam/xlog.c:4369 access/transam/xlog.c:4376 +#: access/transam/xlog.c:4384 access/transam/xlog.c:4391 +#: access/transam/xlog.c:4400 access/transam/xlog.c:4407 +#: access/transam/xlog.c:4416 access/transam/xlog.c:4423 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Si consiglia di ricompilare il sistema o di eseguire initdb." -#: access/transam/xlog.c:4513 +#: access/transam/xlog.c:4331 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "Il cluster di database è stato inizializzato con RELSEG_SIZE %d, ma il server è stato compilato con RELSEG_SIZE %d." -#: access/transam/xlog.c:4520 +#: access/transam/xlog.c:4338 #, c-format msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." msgstr "Il cluster di database è stato inizializzato con XLOG_BLOCKSZ %d, ma il server è stato compilato con XLOG_BLOCKSZ %d." -#: access/transam/xlog.c:4527 +#: access/transam/xlog.c:4345 #, c-format msgid "The database cluster was initialized with XLOG_SEG_SIZE %d, but the server was compiled with XLOG_SEG_SIZE %d." msgstr "Il cluster di database è stato inizializzato con XLOG_SEG_SIZE %d, ma il server è stato compilato con XLOG_SEG_SIZE %d." -#: access/transam/xlog.c:4534 +#: access/transam/xlog.c:4352 #, c-format msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." msgstr "Il cluster di database è stato inizializzato con NAMEDATALEN %d, ma il server è stato compilato con NAMEDATALEN %d." -#: access/transam/xlog.c:4541 +#: access/transam/xlog.c:4359 #, c-format msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." msgstr "Il cluster di database è stato inizializzato con INDEX_MAX_KEYS %d, ma il server è stato compilato con INDEX_MAX_KEYS %d." -#: access/transam/xlog.c:4548 +#: access/transam/xlog.c:4366 #, 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 "Il cluster di database è stato inizializzato con TOAST_MAX_CHUNK_SIZE %d, ma il server è stato compilato con TOAST_MAX_CHUNK_SIZE %d." -#: access/transam/xlog.c:4555 +#: access/transam/xlog.c:4373 #, c-format msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." msgstr "Il cluster di database è stato inizializzato con LOBLKSIZE %d, ma il server è stato compilato con LOBLKSIZE %d." -#: access/transam/xlog.c:4564 +#: access/transam/xlog.c:4382 #, c-format msgid "The database cluster was initialized without HAVE_INT64_TIMESTAMP but the server was compiled with HAVE_INT64_TIMESTAMP." msgstr "Il cluster di database è stato inizializzato senza HAVE_INT64_TIMESTAMP ma il server è stato compilato con HAVE_INT64_TIMESTAMP." -#: access/transam/xlog.c:4571 +#: access/transam/xlog.c:4389 #, c-format msgid "The database cluster was initialized with HAVE_INT64_TIMESTAMP but the server was compiled without HAVE_INT64_TIMESTAMP." msgstr "Il cluster di database è stato inizializzato con HAVE_INT64_TIMESTAMP ma il server è stato compilato senza HAVE_INT64_TIMESTAMP." -#: access/transam/xlog.c:4580 +#: access/transam/xlog.c:4398 #, c-format msgid "The database cluster was initialized without USE_FLOAT4_BYVAL but the server was compiled with USE_FLOAT4_BYVAL." msgstr "Il cluster di database è stato inizializzato senza USE_FLOAT4_BYVAL, ma il server è stato compilato con USE_FLOAT4_BYVAL." -#: access/transam/xlog.c:4587 +#: access/transam/xlog.c:4405 #, c-format msgid "The database cluster was initialized with USE_FLOAT4_BYVAL but the server was compiled without USE_FLOAT4_BYVAL." msgstr "Il cluster di database è stato inizializzato con USE_FLOAT4_BYVAL, ma il server è stato compilato senza USE_FLOAT4_BYVAL." -#: access/transam/xlog.c:4596 +#: access/transam/xlog.c:4414 #, c-format msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." msgstr "Il cluster di database è stato inizializzato senza USE_FLOAT8_BYVAL, ma il server è stato compilato con USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4603 +#: access/transam/xlog.c:4421 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "Il cluster di database è stato inizializzato con USE_FLOAT8_BYVAL, ma il server è stato compilato senza USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:5004 +#: access/transam/xlog.c:4847 #, c-format msgid "could not write bootstrap transaction log file: %m" msgstr "scrittura nel file di log della transazione di bootstrap fallita: %m" -#: access/transam/xlog.c:5010 +#: access/transam/xlog.c:4853 #, c-format msgid "could not fsync bootstrap transaction log file: %m" msgstr "fsync del file di log della transazione di bootstrap fallito: %m" -#: access/transam/xlog.c:5015 +#: access/transam/xlog.c:4858 #, c-format msgid "could not close bootstrap transaction log file: %m" msgstr "chiusura del file di log della transazione di bootstrap fallita: %m" -#: access/transam/xlog.c:5086 +#: access/transam/xlog.c:4933 #, c-format msgid "could not open recovery command file \"%s\": %m" msgstr "apertura del file di ripristino \"%s\" fallita: %m" -#: access/transam/xlog.c:5126 access/transam/xlog.c:5217 -#: access/transam/xlog.c:5228 commands/extension.c:527 -#: commands/extension.c:535 utils/misc/guc.c:5369 +#: access/transam/xlog.c:4979 #, c-format -msgid "parameter \"%s\" requires a Boolean value" -msgstr "il parametro \"%s\" richiede un valore booleano" +msgid "invalid value for recovery parameter \"%s\"" +msgstr "valore non valido per il parametro di ripristino \"%s\"" + +#: access/transam/xlog.c:4981 +#, c-format +msgid "The allowed values are \"pause\", \"promote\" and \"shutdown\"." +msgstr "I valori ammessi sono \"pause\", \"promote\" e \"shutdown\"." # da non tradurre # DV: perché (già tradotto peraltro) -#: access/transam/xlog.c:5142 +#: access/transam/xlog.c:5000 #, c-format msgid "recovery_target_timeline is not a valid number: \"%s\"" msgstr "recovery_target_timeline non ha un valore numerico valido: \"%s\"" -#: access/transam/xlog.c:5158 +#: access/transam/xlog.c:5016 #, c-format msgid "recovery_target_xid is not a valid number: \"%s\"" msgstr "recovery_target_xid non ha un valore numerico valido: \"%s\"" -#: access/transam/xlog.c:5189 +#: access/transam/xlog.c:5047 #, c-format msgid "recovery_target_name is too long (maximum %d characters)" msgstr "il recovery_target_name è troppo lungo (massimo %d caratteri)" -#: access/transam/xlog.c:5203 +#: access/transam/xlog.c:5061 #, c-format msgid "invalid value for recovery parameter \"recovery_target\"" msgstr "valore per il parametro \"recovery_target\" non valido" -#: access/transam/xlog.c:5204 +#: access/transam/xlog.c:5062 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Il solo valore permesso è \"immediate\"." -#: access/transam/xlog.c:5263 +#: access/transam/xlog.c:5075 access/transam/xlog.c:5086 +#: commands/extension.c:531 commands/extension.c:539 utils/misc/guc.c:5462 +#, c-format +msgid "parameter \"%s\" requires a Boolean value" +msgstr "il parametro \"%s\" richiede un valore booleano" + +#: access/transam/xlog.c:5121 #, c-format msgid "parameter \"%s\" requires a temporal value" msgstr "il parametro \"%s\" richiede un valore temporale" -#: access/transam/xlog.c:5265 catalog/dependency.c:970 -#: catalog/dependency.c:971 catalog/dependency.c:977 catalog/dependency.c:978 -#: catalog/dependency.c:989 catalog/dependency.c:990 -#: catalog/objectaddress.c:764 commands/tablecmds.c:763 -#: commands/tablecmds.c:8949 commands/user.c:988 commands/view.c:475 +#: access/transam/xlog.c:5123 catalog/dependency.c:984 +#: catalog/dependency.c:985 catalog/dependency.c:991 catalog/dependency.c:992 +#: catalog/dependency.c:1003 catalog/dependency.c:1004 +#: catalog/objectaddress.c:1053 commands/tablecmds.c:790 +#: commands/tablecmds.c:9405 commands/user.c:1027 commands/view.c:482 #: libpq/auth.c:285 port/win32/security.c:51 storage/lmgr/deadlock.c:955 -#: storage/lmgr/proc.c:1184 utils/misc/guc.c:5401 utils/misc/guc.c:5526 -#: utils/misc/guc.c:8867 utils/misc/guc.c:8901 utils/misc/guc.c:8935 -#: utils/misc/guc.c:8969 utils/misc/guc.c:9004 +#: storage/lmgr/proc.c:1179 utils/misc/guc.c:5484 utils/misc/guc.c:5577 +#: utils/misc/guc.c:9487 utils/misc/guc.c:9521 utils/misc/guc.c:9555 +#: utils/misc/guc.c:9589 utils/misc/guc.c:9624 #, c-format msgid "%s" msgstr "%s" -#: access/transam/xlog.c:5271 +#: access/transam/xlog.c:5129 #, c-format msgid "unrecognized recovery parameter \"%s\"" msgstr "parametro di ripristino \"%s\" sconosciuto" -#: access/transam/xlog.c:5282 +#: access/transam/xlog.c:5140 #, c-format msgid "recovery command file \"%s\" specified neither primary_conninfo nor restore_command" msgstr "il file dei comandi di ripristino \"%s\" non specifica né primary_conninfo né restore_command" -#: access/transam/xlog.c:5284 +#: access/transam/xlog.c:5142 #, c-format msgid "The database server will regularly poll the pg_xlog subdirectory to check for files placed there." msgstr "Il server database ispezionerà regolarmente la sottodirectory pg_xlog per controllare se vi vengono aggiunti dei file." -#: access/transam/xlog.c:5290 +#: access/transam/xlog.c:5148 #, c-format msgid "recovery command file \"%s\" must specify restore_command when standby mode is not enabled" msgstr "il file dei comandi di ripristino \"%s\" deve specificare restore_command quando la modalità standby non è abilitata" -#: access/transam/xlog.c:5310 +#: access/transam/xlog.c:5178 #, c-format msgid "recovery target timeline %u does not exist" msgstr "la timeline destinazione di recupero %u non esiste" -#: access/transam/xlog.c:5407 +#: access/transam/xlog.c:5303 #, c-format msgid "archive recovery complete" msgstr "il ripristino dell'archivio è stato completato" -#: access/transam/xlog.c:5477 access/transam/xlog.c:5671 +#: access/transam/xlog.c:5362 access/transam/xlog.c:5590 #, c-format msgid "recovery stopping after reaching consistency" msgstr "il ripristino è stato interrotto dopo aver raggiunto la consistenza" -#: access/transam/xlog.c:5552 +#: access/transam/xlog.c:5450 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "il ripristino è stato interrotto prima del commit della transazione %u, orario %s" -#: access/transam/xlog.c:5559 +#: access/transam/xlog.c:5457 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "il ripristino è stato interrotto prima dell'abort della transazione %u alle %s" -#: access/transam/xlog.c:5601 +#: access/transam/xlog.c:5502 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "il ripristino è stato interrotto al punto di ripristino \"%s\" alle %s" -#: access/transam/xlog.c:5651 +#: access/transam/xlog.c:5570 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "il ripristino è stato interrotto dopo il commit della transazione %u alle %s" -#: access/transam/xlog.c:5659 +#: access/transam/xlog.c:5578 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "il ripristino è stato interrotto dopo l'abort della transazione %u alle %s" -#: access/transam/xlog.c:5698 +#: access/transam/xlog.c:5617 #, c-format msgid "recovery has paused" msgstr "ripristino in pausa" -#: access/transam/xlog.c:5699 +#: access/transam/xlog.c:5618 #, c-format msgid "Execute pg_xlog_replay_resume() to continue." msgstr "Esegui pg_xlog_replay_resume() per continuare." -#: access/transam/xlog.c:5914 +#: access/transam/xlog.c:5821 #, c-format msgid "hot standby is not possible because %s = %d is a lower setting than on the master server (its value was %d)" msgstr "L'hot standby non è possibile perché %s = %d è un'impostazione inferiore a quella del server master (il cui valore era %d)" -#: access/transam/xlog.c:5936 +#: access/transam/xlog.c:5836 +#, c-format +msgid "hot standby is not possible because it requires \"%s\" to be same on master and standby (master has \"%s\", standby has \"%s\")" +msgstr "l'hot standby non è possibile perché richiede che \"%s\" sia lo stesso sia sul master che sullo standby (master ha \"%s\", standby ha \"%s\")" + +#: access/transam/xlog.c:5856 #, c-format msgid "WAL was generated with wal_level=minimal, data may be missing" msgstr "il WAL è stato generato con wal_level=minimal, alcuni dati potrebbero mancare" -#: access/transam/xlog.c:5937 +#: access/transam/xlog.c:5857 #, c-format msgid "This happens if you temporarily set wal_level=minimal without taking a new base backup." msgstr "Questo avviene se imposti temporaneamente wal_level=minimal senza effettuare un nuovo backup di base." -#: access/transam/xlog.c:5948 +#: access/transam/xlog.c:5868 #, c-format msgid "hot standby is not possible because wal_level was not set to \"hot_standby\" or higher on the master server" msgstr "l'hot standby non è possibile perché il wal_level non è stato impostato a \"hot_standby\" o superiore sul server master" -#: access/transam/xlog.c:5949 +#: access/transam/xlog.c:5869 #, c-format msgid "Either set wal_level to \"hot_standby\" on the master, or turn off hot_standby here." msgstr "Puoi impostare il wal_level a \"hot_standby\" sul master, oppure disattivare hot_standby qui." -#: access/transam/xlog.c:6004 +#: access/transam/xlog.c:5929 #, c-format msgid "control file contains invalid data" msgstr "il file di controllo contiene dati non validi" -#: access/transam/xlog.c:6010 +#: access/transam/xlog.c:5935 #, c-format msgid "database system was shut down at %s" msgstr "il database è stato arrestato alle %s" -#: access/transam/xlog.c:6015 +#: access/transam/xlog.c:5940 #, c-format msgid "database system was shut down in recovery at %s" msgstr "il database è stato arrestato durante il ripristino alle %s" -#: access/transam/xlog.c:6019 +#: access/transam/xlog.c:5944 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "l'arresto del database è stato interrotto; l'ultimo segno di vita risale alle %s" -#: access/transam/xlog.c:6023 +#: access/transam/xlog.c:5948 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "il database è stato interrotto alle %s mentre era in fase di ripristino" -#: access/transam/xlog.c:6025 +#: access/transam/xlog.c:5950 #, c-format msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." msgstr "Questo probabilmente significa che alcuni dati sono corrotti e dovrai usare il backup più recente per il ripristino." -#: access/transam/xlog.c:6029 +#: access/transam/xlog.c:5954 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "il database è stato interrotto all'orario di log %s mentre era in fase di ripristino" -#: access/transam/xlog.c:6031 +#: access/transam/xlog.c:5956 #, 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 "Se ciò è avvenuto più di una volta, alcuni dati potrebbero essere corrotti e potresti dover scegliere un obiettivo di ripristino precedente." -#: access/transam/xlog.c:6035 +#: access/transam/xlog.c:5960 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "il database è stato interrotto; l'ultimo segno di vita risale alle %s" -#: access/transam/xlog.c:6089 +#: access/transam/xlog.c:6016 #, c-format msgid "entering standby mode" msgstr "inizio modalità standby" -#: access/transam/xlog.c:6092 +#: access/transam/xlog.c:6019 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "avvio del ripristino point-in-time allo XID %u" -#: access/transam/xlog.c:6096 +#: access/transam/xlog.c:6023 #, c-format msgid "starting point-in-time recovery to %s" msgstr "avvio del ripristino point-in-time alle %s" -#: access/transam/xlog.c:6100 +#: access/transam/xlog.c:6027 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "avvio del ripristino point-in-time a \"%s\"" -#: access/transam/xlog.c:6104 +#: access/transam/xlog.c:6031 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "avvio del ripristino point-in-time al precedente punto consistente" -#: access/transam/xlog.c:6107 +#: access/transam/xlog.c:6034 #, c-format msgid "starting archive recovery" msgstr "avvio del ripristino dell'archivio" -#: access/transam/xlog.c:6124 +#: access/transam/xlog.c:6051 #, c-format msgid "Failed while allocating an XLog reading processor." msgstr "Errore nell'alllocazione di un processore di lettura XLog." -#: access/transam/xlog.c:6149 access/transam/xlog.c:6216 +#: access/transam/xlog.c:6078 access/transam/xlog.c:6206 #, c-format msgid "checkpoint record is at %X/%X" msgstr "il record di checkpoint si trova in %X/%X" -#: access/transam/xlog.c:6163 +#: access/transam/xlog.c:6092 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "localizzazione della posizione di redo referenziata dal record di checkpoint fallita" -#: access/transam/xlog.c:6164 access/transam/xlog.c:6171 +#: access/transam/xlog.c:6093 access/transam/xlog.c:6100 #, c-format msgid "If you are not restoring from a backup, try removing the file \"%s/backup_label\"." msgstr "Se non si sta effettuando il ripristino da backup, prova a rimuovere il file \"%s/backup_label\"." -#: access/transam/xlog.c:6170 +#: access/transam/xlog.c:6099 #, c-format msgid "could not locate required checkpoint record" msgstr "localizzazione del record di checkpoint richiesto fallita" -#: access/transam/xlog.c:6226 access/transam/xlog.c:6241 +#: access/transam/xlog.c:6125 commands/tablespace.c:640 +#, c-format +msgid "could not create symbolic link \"%s\": %m" +msgstr "creazione del link simbolico \"%s\" fallita: %m" + +#: access/transam/xlog.c:6157 access/transam/xlog.c:6163 +#, c-format +msgid "ignoring \"%s\" file because no \"%s\" file exists" +msgstr "\"%s\" verrà ignorato perché il file \"%s\" non esiste" + +#: access/transam/xlog.c:6159 access/transam/xlog.c:10921 +#: access/transam/xlog.c:10944 +#, c-format +msgid "\"%s\" was renamed to \"%s\"." +msgstr "\"%s\" è stato rinominato in \"%s\"." + +#: access/transam/xlog.c:6165 +#, c-format +msgid "Could not rename file \"%s\" to \"%s\": %m." +msgstr "Cambio del nome del file da \"%s\" a \"%s\" fallito: %m." + +#: access/transam/xlog.c:6216 access/transam/xlog.c:6231 #, c-format msgid "could not locate a valid checkpoint record" msgstr "localizzazione di un record di checkpoint valido fallita" -#: access/transam/xlog.c:6235 +#: access/transam/xlog.c:6225 #, c-format msgid "using previous checkpoint record at %X/%X" msgstr "si sta usando il precedente record di checkpoint in %X/%X" -#: access/transam/xlog.c:6265 +#: access/transam/xlog.c:6269 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "la timeline richiesta %u non è figlia della storia di questo server" -#: access/transam/xlog.c:6267 +#: access/transam/xlog.c:6271 #, 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 "L'ultimo checkpoint è a %X/%X sulla timeline %u, ma nella storia della timeline richiesta, il server si è separato da quella timeline a %X/%X." -#: access/transam/xlog.c:6283 +#: access/transam/xlog.c:6287 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "la timeline richiesta %u non contiene il punto di recupero minimo %X/%X sulla timeline %u" -#: access/transam/xlog.c:6292 +#: access/transam/xlog.c:6296 #, c-format msgid "redo record is at %X/%X; shutdown %s" msgstr "il record di redo è alle %X/%X; arresto %s" -#: access/transam/xlog.c:6296 +#: access/transam/xlog.c:6300 #, c-format msgid "next transaction ID: %u/%u; next OID: %u" msgstr "prossimo ID di transazione: %u/%u; prossimo OID: %u" -#: access/transam/xlog.c:6300 +#: access/transam/xlog.c:6304 #, c-format msgid "next MultiXactId: %u; next MultiXactOffset: %u" msgstr "prossimo MultiXactId: %u; prossimo MultiXactOffset: %u" -#: access/transam/xlog.c:6303 +#: access/transam/xlog.c:6307 #, c-format msgid "oldest unfrozen transaction ID: %u, in database %u" msgstr "ID della più vecchia transazione non congelata: %u, nel database %u" -#: access/transam/xlog.c:6306 +#: access/transam/xlog.c:6310 #, c-format msgid "oldest MultiXactId: %u, in database %u" msgstr "il MultiXactId più vecchio: %u, nel database %u" -#: access/transam/xlog.c:6310 +#: access/transam/xlog.c:6313 +#, c-format +msgid "commit timestamp Xid oldest/newest: %u/%u" +msgstr "ora di commit degli Xid più vecchio/più nuovo: %u/%u" + +#: access/transam/xlog.c:6318 #, c-format msgid "invalid next transaction ID" msgstr "l'ID della prossima transazione non è valido" -#: access/transam/xlog.c:6380 +#: access/transam/xlog.c:6396 #, c-format msgid "invalid redo in checkpoint record" msgstr "il redo nel record di checkpoint non è valido" -#: access/transam/xlog.c:6391 +#: access/transam/xlog.c:6407 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "record di redo non valido nel checkpoint di arresto" -#: access/transam/xlog.c:6422 +#: access/transam/xlog.c:6435 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "il database non è stato arrestato correttamente; ripristino automatico in corso" -#: access/transam/xlog.c:6426 +#: access/transam/xlog.c:6439 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "il recupero dal crash comincia nella timeline %u e si conclude nella timeline %u" -#: access/transam/xlog.c:6463 +#: access/transam/xlog.c:6483 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label contiene dati non consistenti col file di controllo" -#: access/transam/xlog.c:6464 +#: access/transam/xlog.c:6484 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Questo vuol dire che il backup è corrotto e sarà necessario usare un altro backup per il ripristino." -#: access/transam/xlog.c:6529 +#: access/transam/xlog.c:6566 #, c-format msgid "initializing for hot standby" msgstr "inizializzazione per l'hot standby" -#: access/transam/xlog.c:6661 +#: access/transam/xlog.c:6699 #, c-format msgid "redo starts at %X/%X" msgstr "il redo inizia in %X/%X" -#: access/transam/xlog.c:6876 +#: access/transam/xlog.c:6913 +#, c-format +msgid "requested recovery stop point is before consistent recovery point" +msgstr "lo stop point di ripristino è posto prima di un punto di ripristino consistente" + +#: access/transam/xlog.c:6951 #, c-format msgid "redo done at %X/%X" msgstr "redo concluso in %X/%X" -#: access/transam/xlog.c:6881 access/transam/xlog.c:8735 +#: access/transam/xlog.c:6956 access/transam/xlog.c:8917 #, c-format msgid "last completed transaction was at log time %s" msgstr "l'ultima transazione è stata completata all'orario di log %s" -#: access/transam/xlog.c:6889 +#: access/transam/xlog.c:6965 #, c-format msgid "redo is not required" msgstr "redo non richiesto" -#: access/transam/xlog.c:6947 -#, c-format -msgid "requested recovery stop point is before consistent recovery point" -msgstr "lo stop point di ripristino è posto prima di un punto di ripristino consistente" - -#: access/transam/xlog.c:6963 access/transam/xlog.c:6967 +#: access/transam/xlog.c:7040 access/transam/xlog.c:7044 #, c-format msgid "WAL ends before end of online backup" msgstr "il WAL termina prima della fine del backup online" -#: access/transam/xlog.c:6964 +#: access/transam/xlog.c:7041 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Tutti i file WAL generati mentre il backup online veniva effettuato devono essere disponibili al momento del ripristino." -#: access/transam/xlog.c:6968 +#: access/transam/xlog.c:7045 #, 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 backup online iniziato con pg_start_backup() deve essere terminato con pg_stop_backup(), e tutti i file WAL fino a quel punto devono essere disponibili per il ripristino." -#: access/transam/xlog.c:6971 +#: access/transam/xlog.c:7048 #, c-format msgid "WAL ends before consistent recovery point" msgstr "il WAL termina prima di un punto di ripristino consistente" -#: access/transam/xlog.c:6998 +#: access/transam/xlog.c:7075 #, c-format msgid "selected new timeline ID: %u" msgstr "l'ID della nuova timeline selezionata è %u" -#: access/transam/xlog.c:7339 +#: access/transam/xlog.c:7491 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "è stato raggiunto uno stato di ripristino consistente a %X/%X" -#: access/transam/xlog.c:7536 +#: access/transam/xlog.c:7682 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "il link nel file di controllo al checkpoint primario non è valido" -#: access/transam/xlog.c:7540 +#: access/transam/xlog.c:7686 #, c-format msgid "invalid secondary checkpoint link in control file" msgstr "il link nel file di controllo al checkpoint secondario non è valido" -#: access/transam/xlog.c:7544 +#: access/transam/xlog.c:7690 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "il link al checkpoint nel file backup_label non è valido" -#: access/transam/xlog.c:7561 +#: access/transam/xlog.c:7707 #, c-format msgid "invalid primary checkpoint record" msgstr "il record del checkpoint primario non è valido" -#: access/transam/xlog.c:7565 +#: access/transam/xlog.c:7711 #, c-format msgid "invalid secondary checkpoint record" msgstr "il record del checkpoint secondario non è valido" -#: access/transam/xlog.c:7569 +#: access/transam/xlog.c:7715 #, c-format msgid "invalid checkpoint record" msgstr "il record del checkpoint non è valido" -#: access/transam/xlog.c:7580 +#: access/transam/xlog.c:7726 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "l'ID del resource manager nel record del checkpoint primario non è valido" -#: access/transam/xlog.c:7584 +#: access/transam/xlog.c:7730 #, c-format msgid "invalid resource manager ID in secondary checkpoint record" msgstr "l'ID del resource manager nel record del checkpoint secondario non è valido" -#: access/transam/xlog.c:7588 +#: access/transam/xlog.c:7734 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "l'ID del resource manager nel record del checkpoint non è valido" -#: access/transam/xlog.c:7600 +#: access/transam/xlog.c:7746 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "l'xl_info nel record del checkpoint primario non è valido" -#: access/transam/xlog.c:7604 +#: access/transam/xlog.c:7750 #, c-format msgid "invalid xl_info in secondary checkpoint record" msgstr "l'xl_info nel record del checkpoint secondario non è valido" -#: access/transam/xlog.c:7608 +#: access/transam/xlog.c:7754 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "l'xl_info nel record del checkpoint non è valido" -#: access/transam/xlog.c:7620 +#: access/transam/xlog.c:7765 #, c-format msgid "invalid length of primary checkpoint record" msgstr "la lunghezza del record del checkpoint primario non è valida" -#: access/transam/xlog.c:7624 +#: access/transam/xlog.c:7769 #, c-format msgid "invalid length of secondary checkpoint record" msgstr "la lunghezza del record del checkpoint secondario non è valida" -#: access/transam/xlog.c:7628 +#: access/transam/xlog.c:7773 #, c-format msgid "invalid length of checkpoint record" msgstr "la lunghezza del record del checkpoint non è valida" -#: access/transam/xlog.c:7788 +#: access/transam/xlog.c:7943 #, c-format msgid "shutting down" msgstr "arresto in corso" -#: access/transam/xlog.c:7811 +#: access/transam/xlog.c:7967 #, c-format msgid "database system is shut down" msgstr "il database è stato arrestato" -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8460 #, c-format msgid "concurrent transaction log activity while database system is shutting down" msgstr "rilevata attività concorrente sul log delle transazioni durante l'arresto del database" -#: access/transam/xlog.c:8546 +#: access/transam/xlog.c:8722 #, c-format msgid "skipping restartpoint, recovery has already ended" msgstr "si tralascia il restartpoint, il ripristino è ormai terminato" -#: access/transam/xlog.c:8569 +#: access/transam/xlog.c:8745 #, c-format msgid "skipping restartpoint, already performed at %X/%X" msgstr "si tralascia il restartpoint, già eseguito in %X/%X" -#: access/transam/xlog.c:8733 +#: access/transam/xlog.c:8915 #, c-format msgid "recovery restart point at %X/%X" msgstr "punto di avvio del ripristino in %X/%X" -#: access/transam/xlog.c:8878 +#: access/transam/xlog.c:9048 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "punto di ripristino \"%s\" creato in %X/%X" -#: access/transam/xlog.c:9102 +#: access/transam/xlog.c:9178 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "timeline precedente con ID %u non prevista (l'ID della timeline corrente è %u) nel record di checkpoint" -#: access/transam/xlog.c:9111 +#: access/transam/xlog.c:9187 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "timeline ID %u imprevista (dopo %u) nel record di checkpoint" -#: access/transam/xlog.c:9127 +#: access/transam/xlog.c:9203 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "timeline ID %u imprevista nel record di checkpoint, prima di raggiungere il punto di recupero minimo %X/%X sulla timeline %u" -#: access/transam/xlog.c:9195 +#: access/transam/xlog.c:9273 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "il backup online è stato annullato, il ripristino non può continuare" -#: access/transam/xlog.c:9256 access/transam/xlog.c:9305 -#: access/transam/xlog.c:9328 +#: access/transam/xlog.c:9329 access/transam/xlog.c:9373 +#: access/transam/xlog.c:9396 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "l'ID della timeline %u (che dovrebbe essere %u) non era prevista nel record di checkpoint" -#: access/transam/xlog.c:9563 +#: access/transam/xlog.c:9689 #, c-format msgid "could not fsync log segment %s: %m" msgstr "fsync del segmento di log %s fallito: %m" -#: access/transam/xlog.c:9587 +#: access/transam/xlog.c:9713 #, c-format msgid "could not fsync log file %s: %m" msgstr "fsync del file di log %s fallito: %m" -#: access/transam/xlog.c:9595 +#: access/transam/xlog.c:9721 #, c-format msgid "could not fsync write-through log file %s: %m" msgstr "fsync write-through del file di log %s fallito: %m" -#: access/transam/xlog.c:9604 +#: access/transam/xlog.c:9730 #, c-format msgid "could not fdatasync log file %s: %m" msgstr "fdatasync del file di log %s fallito: %m" -#: access/transam/xlog.c:9682 access/transam/xlog.c:10018 -#: access/transam/xlogfuncs.c:111 access/transam/xlogfuncs.c:140 -#: access/transam/xlogfuncs.c:179 access/transam/xlogfuncs.c:200 -#: access/transam/xlogfuncs.c:270 access/transam/xlogfuncs.c:326 +#: access/transam/xlog.c:9822 access/transam/xlog.c:10293 +#: access/transam/xlogfuncs.c:121 access/transam/xlogfuncs.c:150 +#: access/transam/xlogfuncs.c:189 access/transam/xlogfuncs.c:210 +#: access/transam/xlogfuncs.c:280 access/transam/xlogfuncs.c:336 #, c-format msgid "recovery is in progress" msgstr "il ripristino è in corso" -#: access/transam/xlog.c:9683 access/transam/xlog.c:10019 -#: access/transam/xlogfuncs.c:112 access/transam/xlogfuncs.c:141 -#: access/transam/xlogfuncs.c:180 access/transam/xlogfuncs.c:201 +#: access/transam/xlog.c:9823 access/transam/xlog.c:10294 +#: access/transam/xlogfuncs.c:122 access/transam/xlogfuncs.c:151 +#: access/transam/xlogfuncs.c:190 access/transam/xlogfuncs.c:211 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "le funzioni di controllo WAL non possono essere eseguite durante il ripristino." -#: access/transam/xlog.c:9692 access/transam/xlog.c:10028 +#: access/transam/xlog.c:9832 access/transam/xlog.c:10303 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "livello WAL non sufficiente per creare un backup online" -#: access/transam/xlog.c:9693 access/transam/xlog.c:10029 -#: access/transam/xlogfuncs.c:147 +#: access/transam/xlog.c:9833 access/transam/xlog.c:10304 +#: access/transam/xlogfuncs.c:157 #, c-format msgid "wal_level must be set to \"archive\", \"hot_standby\", or \"logical\" at server start." msgstr "Il wal_level deve essere impostato ad \"archive\", \"hot_standby\" oppure \"logical\" all'avvio del server." -#: access/transam/xlog.c:9698 +#: access/transam/xlog.c:9838 #, c-format msgid "backup label too long (max %d bytes)" msgstr "etichetta di backup troppo lunga (massimo %d byte)" -#: access/transam/xlog.c:9729 access/transam/xlog.c:9906 +#: access/transam/xlog.c:9870 access/transam/xlog.c:10140 +#: access/transam/xlog.c:10176 #, c-format msgid "a backup is already in progress" msgstr "c'è già un backup in corso" -#: access/transam/xlog.c:9730 +#: access/transam/xlog.c:9871 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Esegui pg_stop_backup() e prova di nuovo." -#: access/transam/xlog.c:9824 +#: access/transam/xlog.c:9966 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "un WAL generato con full_page_writes=off è stato riprodotto dopo l'ultimo restartpoint" -#: access/transam/xlog.c:9826 access/transam/xlog.c:10179 +#: access/transam/xlog.c:9968 access/transam/xlog.c:10458 #, c-format msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the master, and then try an online backup again." msgstr "Ciò vuol dire che il backup che sta venendo preso sullo standby è corrotto e non dovrebbe essere usato. Abilita full_page_writes ed esegui CHECKPOINT sul master, poi prova ad effettuare nuovamente un backup online.\"" -#: access/transam/xlog.c:9900 access/transam/xlog.c:10069 -#: access/transam/xlogarchive.c:106 access/transam/xlogarchive.c:265 -#: replication/basebackup.c:464 replication/basebackup.c:521 -#: replication/logical/snapbuild.c:1478 storage/file/copydir.c:72 -#: storage/file/copydir.c:115 utils/adt/dbsize.c:68 utils/adt/dbsize.c:218 -#: utils/adt/dbsize.c:298 utils/adt/genfile.c:108 utils/adt/genfile.c:280 -#: guc-file.l:885 +#: access/transam/xlog.c:10034 replication/basebackup.c:1027 +#: utils/adt/misc.c:378 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "lettura del link simbolico \"%s\" fallita: %m" + +#: access/transam/xlog.c:10041 replication/basebackup.c:1032 +#: utils/adt/misc.c:383 +#, c-format +msgid "symbolic link \"%s\" target is too long" +msgstr "la destinazione del link simbolico \"%s\" è troppo lunga" + +#: access/transam/xlog.c:10094 commands/tablespace.c:389 +#: commands/tablespace.c:552 replication/basebackup.c:1048 +#: utils/adt/misc.c:391 +#, c-format +msgid "tablespaces are not supported on this platform" +msgstr "i tablespace non sono supportati su questa piattaforma" + +#: access/transam/xlog.c:10134 access/transam/xlog.c:10170 +#: access/transam/xlog.c:10344 access/transam/xlogarchive.c:106 +#: access/transam/xlogarchive.c:265 commands/copy.c:1738 commands/copy.c:2764 +#: commands/extension.c:3026 replication/basebackup.c:404 +#: replication/basebackup.c:472 replication/logical/snapbuild.c:1478 +#: storage/file/copydir.c:72 storage/file/copydir.c:115 storage/file/fd.c:2519 +#: storage/file/fd.c:2611 utils/adt/dbsize.c:68 utils/adt/dbsize.c:218 +#: utils/adt/dbsize.c:298 utils/adt/genfile.c:114 utils/adt/genfile.c:333 +#: guc-file.l:1003 #, c-format msgid "could not stat file \"%s\": %m" msgstr "non è stato possibile ottenere informazioni sul file \"%s\": %m" -#: access/transam/xlog.c:9907 +#: access/transam/xlog.c:10141 access/transam/xlog.c:10177 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "Se si è certi che non ci sono backup in corso, rimuovi il file \"%s\" e prova di nuovo." -#: access/transam/xlog.c:9924 access/transam/xlog.c:10242 +#: access/transam/xlog.c:10158 access/transam/xlog.c:10194 +#: access/transam/xlog.c:10519 #, c-format msgid "could not write file \"%s\": %m" msgstr "scrittura nel file \"%s\" fallita: %m" -#: access/transam/xlog.c:10073 +#: access/transam/xlog.c:10348 #, c-format msgid "a backup is not in progress" msgstr "nessuno backup in esecuzione" -#: access/transam/xlog.c:10112 access/transam/xlog.c:10125 -#: access/transam/xlog.c:10476 access/transam/xlog.c:10482 -#: access/transam/xlogfuncs.c:498 +#: access/transam/xlog.c:10393 access/transam/xlog.c:10406 +#: access/transam/xlog.c:10746 access/transam/xlog.c:10752 +#: access/transam/xlog.c:10836 access/transam/xlogfuncs.c:508 #, c-format msgid "invalid data in file \"%s\"" msgstr "i dati nel file \"%s\" non sono validi" -#: access/transam/xlog.c:10129 replication/basebackup.c:951 +#: access/transam/xlog.c:10410 replication/basebackup.c:925 #, c-format msgid "the standby was promoted during online backup" msgstr "lo standby è stato promosso durante il backup online" -#: access/transam/xlog.c:10130 replication/basebackup.c:952 +#: access/transam/xlog.c:10411 replication/basebackup.c:926 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "Ciò vuol dire che il backup che stava venendo salvato è corrotto e non dovrebbe essere usato. Prova ad effettuare un altro backup online." -#: access/transam/xlog.c:10177 +#: access/transam/xlog.c:10456 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "un WAL generato con full_page_writes=off è stato riprodotto durante il backup online" -#: access/transam/xlog.c:10291 +#: access/transam/xlog.c:10568 #, c-format msgid "pg_stop_backup cleanup done, waiting for required WAL segments to be archived" msgstr "pulizia di pg_stop_backup effettuata, in attesa che i segmenti WAL richiesti vengano archiviati" -#: access/transam/xlog.c:10301 +#: access/transam/xlog.c:10578 #, c-format msgid "pg_stop_backup still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "pg_stop_backup è ancora in attesa che tutti i segmenti WAL richiesti siano stati archiviati (sono passati %d secondi)" -#: access/transam/xlog.c:10303 +#: access/transam/xlog.c:10580 #, c-format msgid "Check that your archive_command is executing properly. pg_stop_backup can be canceled safely, but the database backup will not be usable without all the WAL segments." msgstr "Controlla che il tuo archive_command venga eseguito correttamente. pg_stop_backup può essere interrotto in sicurezza ma il backup del database non sarà utilizzabile senza tutti i segmenti WAL." -#: access/transam/xlog.c:10310 +#: access/transam/xlog.c:10587 #, c-format msgid "pg_stop_backup complete, all required WAL segments have been archived" msgstr "pg_stop_backup completo, tutti i segmenti WAL richiesti sono stati archiviati" -#: access/transam/xlog.c:10314 +#: access/transam/xlog.c:10591 #, 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'archiviazione WAL non è abilitata; devi verificare che tutti i segmenti WAL richiesti vengano copiati in qualche altro modo per completare il backup" -#: access/transam/xlog.c:10527 +#: access/transam/xlog.c:10875 #, c-format msgid "xlog redo %s" msgstr "xlog redo %s" -#: access/transam/xlog.c:10567 +#: access/transam/xlog.c:10920 access/transam/xlog.c:10943 #, c-format msgid "online backup mode canceled" msgstr "modalità backup online annullata" -#: access/transam/xlog.c:10568 -#, c-format -msgid "\"%s\" was renamed to \"%s\"." -msgstr "\"%s\" è stato rinominato in \"%s\"." - -#: access/transam/xlog.c:10575 +#: access/transam/xlog.c:10928 access/transam/xlog.c:10951 #, c-format msgid "online backup mode was not canceled" msgstr "la modalità di backup online non è stata annullata" -#: access/transam/xlog.c:10576 +#: access/transam/xlog.c:10929 access/transam/xlog.c:10952 #, c-format msgid "Could not rename \"%s\" to \"%s\": %m." msgstr "Non è stato possibile rinominare \"%s\" in \"%s\": %m." -#: access/transam/xlog.c:10696 replication/logical/logicalfuncs.c:169 -#: replication/walreceiver.c:937 replication/walsender.c:2106 +#: access/transam/xlog.c:11072 replication/logical/logicalfuncs.c:171 +#: replication/walreceiver.c:932 replication/walsender.c:2092 #, c-format msgid "could not seek in log segment %s to offset %u: %m" msgstr "spostamento nel segmento di log %s alla posizione %u fallito: %m" -#: access/transam/xlog.c:10708 +#: access/transam/xlog.c:11084 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "lettura del segmento di log %s, posizione %u fallita: %m" -#: access/transam/xlog.c:11171 +#: access/transam/xlog.c:11558 #, c-format msgid "received promote request" msgstr "richiesta di promozione ricevuta" -#: access/transam/xlog.c:11184 +#: access/transam/xlog.c:11571 #, c-format msgid "trigger file found: %s" msgstr "trovato il file trigger: %s" -#: access/transam/xlog.c:11193 +#: access/transam/xlog.c:11580 #, c-format msgid "could not stat trigger file \"%s\": %m" msgstr "non è stato possibile ottenere informazioni sul file trigger \"%s\": %m" @@ -2124,657 +2414,800 @@ msgstr "non è stato possibile ripristinare il file \"%s\" dall'archivio: %s" msgid "%s \"%s\": %s" msgstr "%s \"%s\": %s" -#: access/transam/xlogarchive.c:525 access/transam/xlogarchive.c:594 +#: access/transam/xlogarchive.c:529 access/transam/xlogarchive.c:598 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "creazione del file di stato dell'archivio \"%s\" fallita: %m" -#: access/transam/xlogarchive.c:533 access/transam/xlogarchive.c:602 +#: access/transam/xlogarchive.c:537 access/transam/xlogarchive.c:606 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "scrittura del file di stato dell'archivio \"%s\" fallita: %m" -#: access/transam/xlogfuncs.c:60 access/transam/xlogfuncs.c:88 +#: access/transam/xlogfuncs.c:61 access/transam/xlogfuncs.c:98 #, c-format msgid "must be superuser or replication role to run a backup" msgstr "solo un superutente o il ruolo di replica può eseguire un backup" -#: access/transam/xlogfuncs.c:106 +#: access/transam/xlogfuncs.c:67 commands/tablespace.c:704 +#: commands/tablespace.c:714 postmaster/postmaster.c:1371 +#: replication/basebackup.c:292 replication/basebackup.c:632 +#: storage/file/copydir.c:53 storage/file/copydir.c:96 storage/file/fd.c:1985 +#: storage/file/fd.c:2584 storage/ipc/dsm.c:300 utils/adt/genfile.c:439 +#: utils/adt/misc.c:291 utils/misc/tzparser.c:339 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "apertura della directory \"%s\" fallita: %m" + +#: access/transam/xlogfuncs.c:116 #, c-format msgid "must be superuser to switch transaction log files" msgstr "solo un superutente può cambiare i file di log delle transazioni" -#: access/transam/xlogfuncs.c:135 +#: access/transam/xlogfuncs.c:145 #, c-format msgid "must be superuser to create a restore point" msgstr "Solo un superutente può creare un punto di ripristino" -#: access/transam/xlogfuncs.c:146 +#: access/transam/xlogfuncs.c:156 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "livello WAL non sufficiente per creare un punto di ripristino" -#: access/transam/xlogfuncs.c:154 +#: access/transam/xlogfuncs.c:164 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "il valore è troppo lungo per un punto di ripristino (massimo %d caratteri)" -#: access/transam/xlogfuncs.c:271 +#: access/transam/xlogfuncs.c:281 #, c-format msgid "pg_xlogfile_name_offset() cannot be executed during recovery." msgstr "pg_xlogfile_name_offset() non può essere eseguito durante il recupero." -#: access/transam/xlogfuncs.c:327 +#: access/transam/xlogfuncs.c:337 #, c-format msgid "pg_xlogfile_name() cannot be executed during recovery." msgstr "pg_xlogfile_name() non può essere eseguito durante il recupero." -#: access/transam/xlogfuncs.c:344 access/transam/xlogfuncs.c:366 +#: access/transam/xlogfuncs.c:354 access/transam/xlogfuncs.c:376 #, c-format msgid "must be superuser to control recovery" msgstr "solo un superutente può controllare il recupero" -#: access/transam/xlogfuncs.c:349 access/transam/xlogfuncs.c:371 -#: access/transam/xlogfuncs.c:388 +#: access/transam/xlogfuncs.c:359 access/transam/xlogfuncs.c:381 +#: access/transam/xlogfuncs.c:398 #, c-format msgid "recovery is not in progress" msgstr "il recupero non è in corso" -#: access/transam/xlogfuncs.c:350 access/transam/xlogfuncs.c:372 -#: access/transam/xlogfuncs.c:389 +#: access/transam/xlogfuncs.c:360 access/transam/xlogfuncs.c:382 +#: access/transam/xlogfuncs.c:399 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "Le funzioni di controllo del recupero possono essere eseguite solo durante un recupero." -#: bootstrap/bootstrap.c:273 postmaster/postmaster.c:759 tcop/postgres.c:3462 +#: access/transam/xlogreader.c:264 +#, c-format +msgid "invalid record offset at %X/%X" +msgstr "offset del record non valido a %X/%X" + +#: access/transam/xlogreader.c:272 +#, c-format +msgid "contrecord is requested by %X/%X" +msgstr "contrecord richiesto da %X/%X" + +#: access/transam/xlogreader.c:312 access/transam/xlogreader.c:603 +#, c-format +msgid "invalid record length at %X/%X" +msgstr "lunghezza del record non valida a %X/%X" + +#: access/transam/xlogreader.c:326 +#, c-format +msgid "record length %u at %X/%X too long" +msgstr "lunghezza del record %u a %X/%X eccessiva" + +#: access/transam/xlogreader.c:367 +#, c-format +msgid "there is no contrecord flag at %X/%X" +msgstr "non c'è un flag di contrecord a %X/%X" + +#: access/transam/xlogreader.c:380 +#, c-format +msgid "invalid contrecord length %u at %X/%X" +msgstr "lunghezza di contrecord %u non valida a %X/%X" + +#: access/transam/xlogreader.c:610 +#, c-format +msgid "invalid resource manager ID %u at %X/%X" +msgstr "ID di gestione risorse %u non valido a %X/%X" + +#: access/transam/xlogreader.c:624 access/transam/xlogreader.c:641 +#, c-format +msgid "record with incorrect prev-link %X/%X at %X/%X" +msgstr "record con link-precedente %X/%X non corretto a %X/%X" + +#: access/transam/xlogreader.c:678 +#, c-format +msgid "incorrect resource manager data checksum in record at %X/%X" +msgstr "checksum dei dati del manager di risorse non corretto nel record a %X/%X" + +#: access/transam/xlogreader.c:711 +#, c-format +msgid "invalid magic number %04X in log segment %s, offset %u" +msgstr "numero magico %04X non valido nel segmento di log %s, offset %u" + +#: access/transam/xlogreader.c:725 access/transam/xlogreader.c:776 +#, c-format +msgid "invalid info bits %04X in log segment %s, offset %u" +msgstr "bit di info %04X non validi nel segmento di log %s, offset %u" + +#: access/transam/xlogreader.c:751 +#, c-format +msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s." +msgstr "Il file di WAL è di un database diverso: l'identificatore del file di WAL del database è %s, l'identificatore di pg_control del database è %s." + +#: access/transam/xlogreader.c:758 +#, c-format +msgid "WAL file is from different database system: Incorrect XLOG_SEG_SIZE in page header." +msgstr "Il file di WAL è di un database diverso: XLOG_SEG_SIZE non corretto nell'header di pagina." + +#: access/transam/xlogreader.c:764 +#, c-format +msgid "WAL file is from different database system: Incorrect XLOG_BLCKSZ in page header." +msgstr "Il file di WAL è di un database diverso: XLOG_BLCKSZ non corretto nell'header di pagina." + +#: access/transam/xlogreader.c:790 +#, c-format +msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" +msgstr "pageaddr inaspettato %X/%X nel segmento di log %s, offset %u" + +#: access/transam/xlogreader.c:815 +#, c-format +msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" +msgstr "ID della timeline %u (dopo %u) fuori sequenza nel segmento di log %s, offset %u" + +#: access/transam/xlogreader.c:1024 +#, c-format +msgid "out-of-order block_id %u at %X/%X" +msgstr "block_id fuori sequenza %u a %X/%X" + +#: access/transam/xlogreader.c:1046 +#, c-format +msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" +msgstr "BKPBLOCK_HAS_DATA impostato, ma dati non inclusi a %X/%X" + +#: access/transam/xlogreader.c:1053 +#, c-format +msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" +msgstr "BKPBLOCK_HAS_DATA non impostato, ma la lunghezza dei dati è %u a %X/%X" + +#: access/transam/xlogreader.c:1086 +#, c-format +msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" +msgstr "BKPIMAGE_HAS_HOLE impostato, ma offset buco %u lunghezza %u lunghezza dell'immagine del blocco %u a %X/%X" + +#: access/transam/xlogreader.c:1102 +#, c-format +msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" +msgstr "BKPIMAGE_HAS_HOLE non impostato, ma offset buco %u lunghezza %u a %X/%X" + +#: access/transam/xlogreader.c:1117 +#, c-format +msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" +msgstr "BKPIMAGE_IS_COMPRESSED impostato, ma la lunghezza dell'immagine del blocco è %u a %X/%X" + +#: access/transam/xlogreader.c:1132 +#, c-format +msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" +msgstr "né BKPIMAGE_HAS_HOLE né BKPIMAGE_IS_COMPRESSED impostati, ma la lunghezza dell'immagine del blocco è %u a %X/%X" + +#: access/transam/xlogreader.c:1148 +#, c-format +msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" +msgstr "BKPBLOCK_SAME_REL impostato ma non c'è un rel precedente a %X/%X" + +#: access/transam/xlogreader.c:1160 +#, c-format +msgid "invalid block_id %u at %X/%X" +msgstr "block_id %u non valido a %X/%X" + +#: access/transam/xlogreader.c:1225 +#, c-format +msgid "record with invalid length at %X/%X" +msgstr "record con lunghezza non valida a %X/%X" + +#: access/transam/xlogreader.c:1314 +#, c-format +msgid "invalid compressed image at %X/%X, block %d" +msgstr "immagine compressa non valida a %X/%X, blocco %d" + +#: bootstrap/bootstrap.c:268 postmaster/postmaster.c:782 tcop/postgres.c:3480 #, c-format msgid "--%s requires a value" msgstr "--%s richiede un valore" -#: bootstrap/bootstrap.c:278 postmaster/postmaster.c:764 tcop/postgres.c:3467 +#: bootstrap/bootstrap.c:273 postmaster/postmaster.c:787 tcop/postgres.c:3485 #, c-format msgid "-c %s requires a value" msgstr "-c %s richiede un valore" -#: bootstrap/bootstrap.c:289 postmaster/postmaster.c:776 -#: postmaster/postmaster.c:789 +#: bootstrap/bootstrap.c:284 postmaster/postmaster.c:799 +#: postmaster/postmaster.c:812 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Prova \"%s --help\" per maggiori informazioni.\n" -#: bootstrap/bootstrap.c:298 +#: bootstrap/bootstrap.c:293 #, c-format msgid "%s: invalid command-line arguments\n" msgstr "%s: parametri della riga di comando non validi\n" -#: catalog/aclchk.c:206 +#: catalog/aclchk.c:182 #, c-format msgid "grant options can only be granted to roles" msgstr "le opzioni di concessione possono essere concesse solo ai ruoli" -#: catalog/aclchk.c:329 +#: catalog/aclchk.c:305 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "nessun privilegio è stato concesso per la colonna \"%s\" della relazione \"%s\"" -#: catalog/aclchk.c:334 +#: catalog/aclchk.c:310 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "nessun privilegio è stato concesso per \"%s\"" -#: catalog/aclchk.c:342 +#: catalog/aclchk.c:318 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "non tutti i privilegi sono stati concessi per la colonna \"%s\" della relazione \"%s\"" -#: catalog/aclchk.c:347 +#: catalog/aclchk.c:323 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "non tutti i privilegi sono stati concessi per \"%s\"" -#: catalog/aclchk.c:358 +#: catalog/aclchk.c:334 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "non è stato possibile revocare alcun privilegio per la colonna \"%s\" della relazione \"%s\"" -#: catalog/aclchk.c:363 +#: catalog/aclchk.c:339 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "non è stato possibile revocare alcun privilegio per \"%s\"" -#: catalog/aclchk.c:371 +#: catalog/aclchk.c:347 #, c-format msgid "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "non è stato possibile revocare tutti i privilegi per la colonna \"%s\" della relazione \"%s\"" -#: catalog/aclchk.c:376 +#: catalog/aclchk.c:352 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "non è stato possibile revocare tutti i privilegi per \"%s\"" -#: catalog/aclchk.c:455 catalog/aclchk.c:933 +#: catalog/aclchk.c:434 catalog/aclchk.c:924 #, c-format msgid "invalid privilege type %s for relation" msgstr "tipo di privilegio %s non valido per la relazione" -#: catalog/aclchk.c:459 catalog/aclchk.c:937 +#: catalog/aclchk.c:438 catalog/aclchk.c:928 #, c-format msgid "invalid privilege type %s for sequence" msgstr "tipo di privilegio %s non valido per la sequenza" -#: catalog/aclchk.c:463 +#: catalog/aclchk.c:442 #, c-format msgid "invalid privilege type %s for database" msgstr "tipo di privilegio %s non valido per il database" -#: catalog/aclchk.c:467 +#: catalog/aclchk.c:446 #, c-format msgid "invalid privilege type %s for domain" msgstr "tipo di privilegio %s non valido per il dominio" -#: catalog/aclchk.c:471 catalog/aclchk.c:941 +#: catalog/aclchk.c:450 catalog/aclchk.c:932 #, c-format msgid "invalid privilege type %s for function" msgstr "tipo di privilegio %s non valido per la funzione" -#: catalog/aclchk.c:475 +#: catalog/aclchk.c:454 #, c-format msgid "invalid privilege type %s for language" msgstr "tipo di privilegio %s non valido per il linguaggio" -#: catalog/aclchk.c:479 +#: catalog/aclchk.c:458 #, c-format msgid "invalid privilege type %s for large object" msgstr "tipo di privilegio %s non valido per il large object" -#: catalog/aclchk.c:483 +#: catalog/aclchk.c:462 #, c-format msgid "invalid privilege type %s for schema" msgstr "tipo di privilegio %s non valido per lo schema" -#: catalog/aclchk.c:487 +#: catalog/aclchk.c:466 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "tipo di privilegio %s non valido per il tablespace" -#: catalog/aclchk.c:491 catalog/aclchk.c:945 +#: catalog/aclchk.c:470 catalog/aclchk.c:936 #, c-format msgid "invalid privilege type %s for type" msgstr "tipo di privilegio %s non valido per il tipo" -#: catalog/aclchk.c:495 +#: catalog/aclchk.c:474 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "tipo di privilegio %s non valido per il wrapper di dati esterni" -#: catalog/aclchk.c:499 +#: catalog/aclchk.c:478 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "tipo di privilegio %s non valido per il server esterno" -#: catalog/aclchk.c:538 +#: catalog/aclchk.c:517 #, c-format msgid "column privileges are only valid for relations" msgstr "i privilegi della colonna sono validi solo per le relazioni" -#: catalog/aclchk.c:688 catalog/aclchk.c:3904 catalog/aclchk.c:4681 -#: catalog/objectaddress.c:586 catalog/pg_largeobject.c:113 +#: catalog/aclchk.c:676 catalog/aclchk.c:3874 catalog/aclchk.c:4651 +#: catalog/objectaddress.c:854 catalog/pg_largeobject.c:113 #: storage/large_object/inv_api.c:291 #, c-format msgid "large object %u does not exist" msgstr "il large object %u non esiste" -#: catalog/aclchk.c:875 catalog/aclchk.c:883 commands/collationcmds.c:91 -#: commands/copy.c:925 commands/copy.c:943 commands/copy.c:951 -#: commands/copy.c:959 commands/copy.c:967 commands/copy.c:975 -#: commands/copy.c:983 commands/copy.c:991 commands/copy.c:999 -#: commands/copy.c:1015 commands/copy.c:1029 commands/copy.c:1048 -#: commands/copy.c:1063 commands/dbcommands.c:148 commands/dbcommands.c:156 -#: commands/dbcommands.c:164 commands/dbcommands.c:172 -#: commands/dbcommands.c:180 commands/dbcommands.c:188 -#: commands/dbcommands.c:196 commands/dbcommands.c:1372 -#: commands/dbcommands.c:1380 commands/extension.c:1246 -#: commands/extension.c:1254 commands/extension.c:1262 -#: commands/extension.c:2670 commands/foreigncmds.c:486 -#: commands/foreigncmds.c:495 commands/functioncmds.c:522 -#: commands/functioncmds.c:614 commands/functioncmds.c:622 -#: commands/functioncmds.c:630 commands/functioncmds.c:1700 -#: commands/functioncmds.c:1708 commands/sequence.c:1146 -#: commands/sequence.c:1154 commands/sequence.c:1162 commands/sequence.c:1170 -#: commands/sequence.c:1178 commands/sequence.c:1186 commands/sequence.c:1194 -#: commands/sequence.c:1202 commands/typecmds.c:297 commands/typecmds.c:1332 -#: commands/typecmds.c:1341 commands/typecmds.c:1349 commands/typecmds.c:1357 -#: commands/typecmds.c:1365 commands/user.c:135 commands/user.c:152 -#: commands/user.c:160 commands/user.c:168 commands/user.c:176 -#: commands/user.c:184 commands/user.c:192 commands/user.c:200 -#: commands/user.c:208 commands/user.c:216 commands/user.c:224 -#: commands/user.c:232 commands/user.c:496 commands/user.c:508 -#: commands/user.c:516 commands/user.c:524 commands/user.c:532 -#: commands/user.c:540 commands/user.c:548 commands/user.c:556 -#: commands/user.c:565 commands/user.c:573 +#: catalog/aclchk.c:863 catalog/aclchk.c:871 commands/collationcmds.c:92 +#: commands/copy.c:1010 commands/copy.c:1028 commands/copy.c:1036 +#: commands/copy.c:1044 commands/copy.c:1052 commands/copy.c:1060 +#: commands/copy.c:1068 commands/copy.c:1076 commands/copy.c:1084 +#: commands/copy.c:1100 commands/copy.c:1114 commands/copy.c:1133 +#: commands/copy.c:1148 commands/dbcommands.c:155 commands/dbcommands.c:163 +#: commands/dbcommands.c:171 commands/dbcommands.c:179 +#: commands/dbcommands.c:187 commands/dbcommands.c:195 +#: commands/dbcommands.c:203 commands/dbcommands.c:211 +#: commands/dbcommands.c:219 commands/dbcommands.c:1397 +#: commands/dbcommands.c:1405 commands/dbcommands.c:1413 +#: commands/dbcommands.c:1421 commands/extension.c:1244 +#: commands/extension.c:1252 commands/extension.c:1260 +#: commands/extension.c:2677 commands/foreigncmds.c:539 +#: commands/foreigncmds.c:548 commands/functioncmds.c:525 +#: commands/functioncmds.c:619 commands/functioncmds.c:627 +#: commands/functioncmds.c:635 commands/functioncmds.c:643 +#: commands/functioncmds.c:2045 commands/functioncmds.c:2053 +#: commands/sequence.c:1189 commands/sequence.c:1197 commands/sequence.c:1205 +#: commands/sequence.c:1213 commands/sequence.c:1221 commands/sequence.c:1229 +#: commands/sequence.c:1237 commands/sequence.c:1245 commands/typecmds.c:293 +#: commands/typecmds.c:1380 commands/typecmds.c:1389 commands/typecmds.c:1397 +#: commands/typecmds.c:1405 commands/typecmds.c:1413 commands/user.c:138 +#: commands/user.c:155 commands/user.c:163 commands/user.c:171 +#: commands/user.c:179 commands/user.c:187 commands/user.c:195 +#: commands/user.c:203 commands/user.c:211 commands/user.c:219 +#: commands/user.c:227 commands/user.c:235 commands/user.c:243 +#: commands/user.c:522 commands/user.c:534 commands/user.c:542 +#: commands/user.c:550 commands/user.c:558 commands/user.c:566 +#: commands/user.c:574 commands/user.c:582 commands/user.c:591 +#: commands/user.c:599 commands/user.c:607 #, c-format msgid "conflicting or redundant options" msgstr "opzioni contraddittorie o ridondanti" -#: catalog/aclchk.c:978 +#: catalog/aclchk.c:969 #, c-format msgid "default privileges cannot be set for columns" msgstr "i privilegi predefiniti non possono essere impostati sulle colonne" -#: catalog/aclchk.c:1492 catalog/objectaddress.c:1042 commands/analyze.c:390 -#: commands/copy.c:4247 commands/sequence.c:1448 commands/tablecmds.c:4939 -#: commands/tablecmds.c:5034 commands/tablecmds.c:5084 -#: commands/tablecmds.c:5188 commands/tablecmds.c:5235 -#: commands/tablecmds.c:5319 commands/tablecmds.c:5407 -#: commands/tablecmds.c:7494 commands/tablecmds.c:7698 -#: commands/tablecmds.c:8090 commands/trigger.c:635 parser/analyze.c:1994 -#: parser/parse_relation.c:2358 parser/parse_relation.c:2420 -#: parser/parse_target.c:920 parser/parse_type.c:128 utils/adt/acl.c:2840 -#: utils/adt/ruleutils.c:1820 +#: catalog/aclchk.c:1483 catalog/objectaddress.c:1338 commands/analyze.c:378 +#: commands/copy.c:4383 commands/sequence.c:1491 commands/tablecmds.c:5167 +#: commands/tablecmds.c:5273 commands/tablecmds.c:5333 +#: commands/tablecmds.c:5446 commands/tablecmds.c:5503 +#: commands/tablecmds.c:5597 commands/tablecmds.c:5693 +#: commands/tablecmds.c:7854 commands/tablecmds.c:8059 +#: commands/tablecmds.c:8479 commands/trigger.c:643 parser/analyze.c:2112 +#: parser/parse_relation.c:2536 parser/parse_relation.c:2598 +#: parser/parse_target.c:940 parser/parse_type.c:128 utils/adt/acl.c:2839 +#: utils/adt/ruleutils.c:1836 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "la colonna \"%s\" della relazione \"%s\" non esiste" -#: catalog/aclchk.c:1757 catalog/objectaddress.c:862 commands/sequence.c:1035 -#: commands/tablecmds.c:214 commands/tablecmds.c:11244 utils/adt/acl.c:2076 -#: utils/adt/acl.c:2106 utils/adt/acl.c:2138 utils/adt/acl.c:2170 -#: utils/adt/acl.c:2198 utils/adt/acl.c:2228 +#: catalog/aclchk.c:1748 catalog/objectaddress.c:1151 commands/sequence.c:1078 +#: commands/tablecmds.c:220 commands/tablecmds.c:11908 utils/adt/acl.c:2075 +#: utils/adt/acl.c:2105 utils/adt/acl.c:2137 utils/adt/acl.c:2169 +#: utils/adt/acl.c:2197 utils/adt/acl.c:2227 #, c-format msgid "\"%s\" is not a sequence" msgstr "\"%s\" non è una sequenza" -#: catalog/aclchk.c:1795 +#: catalog/aclchk.c:1786 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "la sequenza \"%s\" supporta solo i privilegi USAGE, SELECT e UPDATE" -#: catalog/aclchk.c:1812 +#: catalog/aclchk.c:1803 #, c-format msgid "invalid privilege type USAGE for table" msgstr "tipo di privilegio USAGE non valido per la tabella" -#: catalog/aclchk.c:1977 +#: catalog/aclchk.c:1968 #, c-format msgid "invalid privilege type %s for column" msgstr "tipo di privilegio %s non valido per la colonna" -#: catalog/aclchk.c:1990 +#: catalog/aclchk.c:1981 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "la sequenza \"%s\" supporta solo i privilegi di SELECT sulla colonna" -#: catalog/aclchk.c:2574 +#: catalog/aclchk.c:2565 #, c-format msgid "language \"%s\" is not trusted" msgstr "il linguaggio \"%s\" non è fidato" -#: catalog/aclchk.c:2576 +#: catalog/aclchk.c:2567 #, c-format msgid "Only superusers can use untrusted languages." msgstr "Solo un superutente può usare linguaggi non fidati." -#: catalog/aclchk.c:3092 +#: catalog/aclchk.c:3083 #, c-format msgid "cannot set privileges of array types" msgstr "non è possibile impostare privilegi su tipi array" -#: catalog/aclchk.c:3093 +#: catalog/aclchk.c:3084 #, c-format msgid "Set the privileges of the element type instead." msgstr "Puoi impostare i privilegi del tipo dell'elemento." -#: catalog/aclchk.c:3100 catalog/objectaddress.c:1094 commands/typecmds.c:3187 +#: catalog/aclchk.c:3091 catalog/objectaddress.c:1471 commands/typecmds.c:3142 #, c-format msgid "\"%s\" is not a domain" msgstr "\"%s\" non è un dominio" -#: catalog/aclchk.c:3220 +#: catalog/aclchk.c:3211 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "tipo di privilegio \"%s\" sconosciuto" -#: catalog/aclchk.c:3269 +#: catalog/aclchk.c:3260 #, c-format msgid "permission denied for column %s" msgstr "permesso negato per la colonna %s" -#: catalog/aclchk.c:3271 +#: catalog/aclchk.c:3262 #, c-format msgid "permission denied for relation %s" msgstr "permesso negato per la relazione %s" -#: catalog/aclchk.c:3273 commands/sequence.c:535 commands/sequence.c:748 -#: commands/sequence.c:790 commands/sequence.c:827 commands/sequence.c:1500 +#: catalog/aclchk.c:3264 commands/sequence.c:561 commands/sequence.c:786 +#: commands/sequence.c:828 commands/sequence.c:865 commands/sequence.c:1543 #, c-format msgid "permission denied for sequence %s" msgstr "permesso negato per la sequenza %s" -#: catalog/aclchk.c:3275 +#: catalog/aclchk.c:3266 #, c-format msgid "permission denied for database %s" msgstr "permesso negato per il database %s" -#: catalog/aclchk.c:3277 +#: catalog/aclchk.c:3268 #, c-format msgid "permission denied for function %s" msgstr "permesso negato per la funzione %s" -#: catalog/aclchk.c:3279 +#: catalog/aclchk.c:3270 #, c-format msgid "permission denied for operator %s" msgstr "permesso negato per l'operatore %s" -#: catalog/aclchk.c:3281 +#: catalog/aclchk.c:3272 #, c-format msgid "permission denied for type %s" msgstr "permesso negato per il tipo %s" -#: catalog/aclchk.c:3283 +#: catalog/aclchk.c:3274 #, c-format msgid "permission denied for language %s" msgstr "permesso negato per il linguaggio %s" -#: catalog/aclchk.c:3285 +#: catalog/aclchk.c:3276 #, c-format msgid "permission denied for large object %s" msgstr "permesso negato per large object %s" -#: catalog/aclchk.c:3287 +#: catalog/aclchk.c:3278 #, c-format msgid "permission denied for schema %s" msgstr "permesso negato per lo schema %s" -#: catalog/aclchk.c:3289 +#: catalog/aclchk.c:3280 #, c-format msgid "permission denied for operator class %s" msgstr "permesso negato per la classe di operatori %s" -#: catalog/aclchk.c:3291 +#: catalog/aclchk.c:3282 #, c-format msgid "permission denied for operator family %s" msgstr "permesso negato per la famiglia di operatori %s" -#: catalog/aclchk.c:3293 +#: catalog/aclchk.c:3284 #, c-format msgid "permission denied for collation %s" msgstr "permesso negato per l'ordinamento %s" -#: catalog/aclchk.c:3295 +#: catalog/aclchk.c:3286 #, c-format msgid "permission denied for conversion %s" msgstr "permesso negato per la conversione %s" -#: catalog/aclchk.c:3297 +#: catalog/aclchk.c:3288 #, c-format msgid "permission denied for tablespace %s" msgstr "permesso negato per il tablespace %s" -#: catalog/aclchk.c:3299 +#: catalog/aclchk.c:3290 #, c-format msgid "permission denied for text search dictionary %s" msgstr "permesso negato per il dizionario di ricerca di testo %s" -#: catalog/aclchk.c:3301 +#: catalog/aclchk.c:3292 #, c-format msgid "permission denied for text search configuration %s" msgstr "permesso negato per la configurazione di ricerca di testo %s" -#: catalog/aclchk.c:3303 +#: catalog/aclchk.c:3294 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "permesso negato per il wrapper di dati esterni %s" -#: catalog/aclchk.c:3305 +#: catalog/aclchk.c:3296 #, c-format msgid "permission denied for foreign server %s" msgstr "permesso negato per il server esterno %s" -#: catalog/aclchk.c:3307 +#: catalog/aclchk.c:3298 #, c-format msgid "permission denied for event trigger %s" msgstr "permesso negato per il trigger di evento %s" -#: catalog/aclchk.c:3309 +#: catalog/aclchk.c:3300 #, c-format msgid "permission denied for extension %s" msgstr "permesso negato per l'estensione %s" -#: catalog/aclchk.c:3315 catalog/aclchk.c:3317 +#: catalog/aclchk.c:3306 catalog/aclchk.c:3308 #, c-format msgid "must be owner of relation %s" msgstr "bisogna essere proprietari della relazione %s" -#: catalog/aclchk.c:3319 +#: catalog/aclchk.c:3310 #, c-format msgid "must be owner of sequence %s" msgstr "bisogna essere proprietari della sequenza %s" -#: catalog/aclchk.c:3321 +#: catalog/aclchk.c:3312 #, c-format msgid "must be owner of database %s" msgstr "bisogna essere proprietari del database %s" -#: catalog/aclchk.c:3323 +#: catalog/aclchk.c:3314 #, c-format msgid "must be owner of function %s" msgstr "bisogna essere proprietari della funzione %s" -#: catalog/aclchk.c:3325 +#: catalog/aclchk.c:3316 #, c-format msgid "must be owner of operator %s" msgstr "bisogna essere proprietari dell'operatore %s" -#: catalog/aclchk.c:3327 +#: catalog/aclchk.c:3318 #, c-format msgid "must be owner of type %s" msgstr "bisogna essere proprietari del tipo %s" -#: catalog/aclchk.c:3329 +#: catalog/aclchk.c:3320 #, c-format msgid "must be owner of language %s" msgstr "bisogna essere proprietari del linguaggio %s" -#: catalog/aclchk.c:3331 +#: catalog/aclchk.c:3322 #, c-format msgid "must be owner of large object %s" msgstr "bisogna essere proprietari del large object %s" -#: catalog/aclchk.c:3333 +#: catalog/aclchk.c:3324 #, c-format msgid "must be owner of schema %s" msgstr "bisogna essere proprietari dello schema %s" -#: catalog/aclchk.c:3335 +#: catalog/aclchk.c:3326 #, c-format msgid "must be owner of operator class %s" msgstr "bisogna essere proprietari della classe di operatore %s" -#: catalog/aclchk.c:3337 +#: catalog/aclchk.c:3328 #, c-format msgid "must be owner of operator family %s" msgstr "bisogna essere proprietari della famiglia di operatori %s" -#: catalog/aclchk.c:3339 +#: catalog/aclchk.c:3330 #, c-format msgid "must be owner of collation %s" msgstr "bisogna essere proprietari dell'ordinamento %s" -#: catalog/aclchk.c:3341 +#: catalog/aclchk.c:3332 #, c-format msgid "must be owner of conversion %s" msgstr "bisogna essere proprietari della conversione %s" -#: catalog/aclchk.c:3343 +#: catalog/aclchk.c:3334 #, c-format msgid "must be owner of tablespace %s" msgstr "bisogna essere proprietari del tablespace %s" -#: catalog/aclchk.c:3345 +#: catalog/aclchk.c:3336 #, c-format msgid "must be owner of text search dictionary %s" msgstr "bisogna essere proprietari del dizionario di ricerca di testo %s" -#: catalog/aclchk.c:3347 +#: catalog/aclchk.c:3338 #, c-format msgid "must be owner of text search configuration %s" msgstr "bisogna essere proprietari della configurazione di ricerca di testo %s" -#: catalog/aclchk.c:3349 +#: catalog/aclchk.c:3340 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "bisogna essere proprietari del wrapper di dati esterni %s" -#: catalog/aclchk.c:3351 +#: catalog/aclchk.c:3342 #, c-format msgid "must be owner of foreign server %s" msgstr "bisogna essere proprietari del server esterno %s" -#: catalog/aclchk.c:3353 +#: catalog/aclchk.c:3344 #, c-format msgid "must be owner of event trigger %s" msgstr "bisogna essere proprietari del trigger di evento %s" -#: catalog/aclchk.c:3355 +#: catalog/aclchk.c:3346 #, c-format msgid "must be owner of extension %s" msgstr "bisogna essere proprietari dell'estensione %s" -#: catalog/aclchk.c:3397 +#: catalog/aclchk.c:3388 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "permesso negato per la colonna \"%s\" della relazione \"%s\"" -#: catalog/aclchk.c:3437 -#, c-format -msgid "role with OID %u does not exist" -msgstr "il ruolo con OID %u non esiste" - -#: catalog/aclchk.c:3536 catalog/aclchk.c:3544 +#: catalog/aclchk.c:3507 catalog/aclchk.c:3515 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "l'attributo %d della relazione con OID %u non esiste" -#: catalog/aclchk.c:3617 catalog/aclchk.c:4532 +#: catalog/aclchk.c:3588 catalog/aclchk.c:4502 #, c-format msgid "relation with OID %u does not exist" msgstr "la relazione con OID %u non esiste" -#: catalog/aclchk.c:3717 catalog/aclchk.c:4950 +#: catalog/aclchk.c:3687 catalog/aclchk.c:4920 #, c-format msgid "database with OID %u does not exist" msgstr "il database con OID %u non esiste" -#: catalog/aclchk.c:3771 catalog/aclchk.c:4610 tcop/fastpath.c:223 +#: catalog/aclchk.c:3741 catalog/aclchk.c:4580 tcop/fastpath.c:223 #, c-format msgid "function with OID %u does not exist" msgstr "la funzione con OID %u non esiste" -#: catalog/aclchk.c:3825 catalog/aclchk.c:4636 +#: catalog/aclchk.c:3795 catalog/aclchk.c:4606 #, c-format msgid "language with OID %u does not exist" msgstr "il linguaggio con OID %u non esiste" -#: catalog/aclchk.c:3989 catalog/aclchk.c:4708 +#: catalog/aclchk.c:3959 catalog/aclchk.c:4678 #, c-format msgid "schema with OID %u does not exist" msgstr "lo schema con OID %u non esiste" -#: catalog/aclchk.c:4043 catalog/aclchk.c:4735 +#: catalog/aclchk.c:4013 catalog/aclchk.c:4705 #, c-format msgid "tablespace with OID %u does not exist" msgstr "il tablespace con l'OID %u non esiste" -#: catalog/aclchk.c:4101 catalog/aclchk.c:4869 commands/foreigncmds.c:302 +#: catalog/aclchk.c:4071 catalog/aclchk.c:4839 commands/foreigncmds.c:325 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "il wrapper di dati esterni con OID %u non esiste" -#: catalog/aclchk.c:4162 catalog/aclchk.c:4896 commands/foreigncmds.c:409 +#: catalog/aclchk.c:4132 catalog/aclchk.c:4866 commands/foreigncmds.c:461 #, c-format msgid "foreign server with OID %u does not exist" msgstr "il server esterno con OID %u non esiste" -#: catalog/aclchk.c:4221 catalog/aclchk.c:4235 catalog/aclchk.c:4558 +#: catalog/aclchk.c:4191 catalog/aclchk.c:4205 catalog/aclchk.c:4528 #, c-format msgid "type with OID %u does not exist" msgstr "il tipo con OID %u non esiste" -#: catalog/aclchk.c:4584 +#: catalog/aclchk.c:4554 #, c-format msgid "operator with OID %u does not exist" msgstr "l'operatore con OID %u non esiste" -#: catalog/aclchk.c:4761 +#: catalog/aclchk.c:4731 #, c-format msgid "operator class with OID %u does not exist" msgstr "la classe di operatori con OID %u non esiste" -#: catalog/aclchk.c:4788 +#: catalog/aclchk.c:4758 #, c-format msgid "operator family with OID %u does not exist" msgstr "la famiglia di operatori con OID %u non esiste" -#: catalog/aclchk.c:4815 +#: catalog/aclchk.c:4785 #, c-format msgid "text search dictionary with OID %u does not exist" msgstr "il dizionario di ricerca di testo con OID %u non esiste" -#: catalog/aclchk.c:4842 +#: catalog/aclchk.c:4812 #, c-format msgid "text search configuration with OID %u does not exist" msgstr "la configurazione di ricerca di testo con OID %u non esiste" -#: catalog/aclchk.c:4923 commands/event_trigger.c:509 +#: catalog/aclchk.c:4893 commands/event_trigger.c:586 #, c-format msgid "event trigger with OID %u does not exist" msgstr "il trigger di evento con OID %u non esiste" -#: catalog/aclchk.c:4976 +#: catalog/aclchk.c:4946 #, c-format msgid "collation with OID %u does not exist" msgstr "l'ordinamento con OID %u non esiste" -#: catalog/aclchk.c:5002 +#: catalog/aclchk.c:4972 #, c-format msgid "conversion with OID %u does not exist" msgstr "la conversione con OID %u non esiste" -#: catalog/aclchk.c:5043 +#: catalog/aclchk.c:5013 #, c-format msgid "extension with OID %u does not exist" msgstr "l'estensione con OID %u non esiste" -#: catalog/dependency.c:626 +#: catalog/dependency.c:640 #, c-format msgid "cannot drop %s because %s requires it" msgstr "non è possibile eliminare %s perché %s lo richiede" -#: catalog/dependency.c:629 +#: catalog/dependency.c:643 #, c-format msgid "You can drop %s instead." msgstr "È invece possibile eliminare %s." -#: catalog/dependency.c:790 catalog/pg_shdepend.c:573 +#: catalog/dependency.c:804 catalog/pg_shdepend.c:574 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "non è possibile eliminare %s perché richiesto dal sistema database" -#: catalog/dependency.c:906 +#: catalog/dependency.c:920 #, c-format msgid "drop auto-cascades to %s" msgstr "l'eliminazione elimina anche %s in cascata automatica" -#: catalog/dependency.c:918 catalog/dependency.c:927 +#: catalog/dependency.c:932 catalog/dependency.c:941 #, c-format msgid "%s depends on %s" msgstr "%s dipende da %s" -#: catalog/dependency.c:939 catalog/dependency.c:948 +#: catalog/dependency.c:953 catalog/dependency.c:962 #, c-format msgid "drop cascades to %s" msgstr "l'eliminazione elimina anche %s in cascata" -#: catalog/dependency.c:956 catalog/pg_shdepend.c:684 +#: catalog/dependency.c:970 catalog/pg_shdepend.c:685 #, c-format msgid "" "\n" @@ -2789,512 +3222,637 @@ msgstr[1] "" "\n" "e %d altri oggetti (vedere il log del server per la lista)" -#: catalog/dependency.c:968 +#: catalog/dependency.c:982 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "non è possibile eliminare %s perché altri oggetti dipendono da esso" -#: catalog/dependency.c:972 catalog/dependency.c:979 +#: catalog/dependency.c:986 catalog/dependency.c:993 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Usa DROP ... CASCADE per eliminare anche gli oggetti dipendenti." -#: catalog/dependency.c:976 +#: catalog/dependency.c:990 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "non è possibile eliminare gli oggetti desiderati perché altri oggetti dipendono da essi" #. translator: %d always has a value larger than 1 -#: catalog/dependency.c:985 +#: catalog/dependency.c:999 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" msgstr[0] "l'eliminazione elimina in cascata %d altro oggetto" msgstr[1] "l'eliminazione elimina in cascata %d altri oggetti" -#: catalog/heap.c:274 +#: catalog/dependency.c:1622 +#, c-format +msgid "constant of the type 'regrole' cannot be used here" +msgstr "le costanti di tipo 'regrole' non possono essere usate qui" + +#: catalog/heap.c:276 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "permesso di creare \"%s.%s\" negato" -#: catalog/heap.c:276 +#: catalog/heap.c:278 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Le modifiche al catalogo di sistema non sono attualmente consentite." -#: catalog/heap.c:411 commands/tablecmds.c:1402 commands/tablecmds.c:1844 -#: commands/tablecmds.c:4583 +#: catalog/heap.c:413 commands/tablecmds.c:1433 commands/tablecmds.c:1886 +#: commands/tablecmds.c:4789 #, c-format msgid "tables can have at most %d columns" msgstr "le tabelle possono avere al massimo %d colonne" -#: catalog/heap.c:428 commands/tablecmds.c:4839 +#: catalog/heap.c:430 commands/tablecmds.c:5050 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "il nome della colonna \"%s\" è in conflitto con il nome di una colonna di sistema" -#: catalog/heap.c:444 +#: catalog/heap.c:446 #, c-format msgid "column name \"%s\" specified more than once" msgstr "nome di colonna \"%s\" specificato più di una volta" -#: catalog/heap.c:494 +#: catalog/heap.c:496 #, c-format msgid "column \"%s\" has type \"unknown\"" msgstr "la colonna \"%s\" è di tipo \"unknown\"" -#: catalog/heap.c:495 +#: catalog/heap.c:497 #, c-format msgid "Proceeding with relation creation anyway." msgstr "Si procede comunque alla creazione della relazione." -#: catalog/heap.c:508 +#: catalog/heap.c:510 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "la colonna \"%s\" ha pseudo-tipo %s" -#: catalog/heap.c:538 +#: catalog/heap.c:540 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "il tipo composito %s non può essere fatto membro di sé stesso" -#: catalog/heap.c:580 commands/createas.c:343 +#: catalog/heap.c:582 commands/createas.c:373 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "nessun ordinamento è stato derivato per la colonna \"%s\" con tipo ordinabile %s" -#: catalog/heap.c:582 commands/createas.c:345 commands/indexcmds.c:1072 -#: commands/view.c:116 regex/regc_pg_locale.c:262 utils/adt/formatting.c:1510 -#: utils/adt/formatting.c:1562 utils/adt/formatting.c:1630 -#: utils/adt/formatting.c:1682 utils/adt/formatting.c:1751 -#: utils/adt/formatting.c:1815 utils/adt/like.c:212 utils/adt/selfuncs.c:5221 -#: utils/adt/varlena.c:1381 +#: catalog/heap.c:584 commands/createas.c:375 commands/indexcmds.c:1087 +#: commands/view.c:116 regex/regc_pg_locale.c:262 utils/adt/formatting.c:1514 +#: utils/adt/formatting.c:1566 utils/adt/formatting.c:1634 +#: utils/adt/formatting.c:1686 utils/adt/formatting.c:1755 +#: utils/adt/formatting.c:1819 utils/adt/like.c:212 utils/adt/selfuncs.c:5231 +#: utils/adt/varlena.c:1411 utils/adt/varlena.c:1800 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Usa la clausola COLLATE per impostare esplicitamente l'ordinamento." -#: catalog/heap.c:1055 catalog/index.c:778 commands/tablecmds.c:2549 +#: catalog/heap.c:1064 catalog/index.c:793 commands/tablecmds.c:2613 #, c-format msgid "relation \"%s\" already exists" msgstr "la relazione \"%s\" esiste già" -#: catalog/heap.c:1071 catalog/pg_type.c:403 catalog/pg_type.c:706 -#: commands/typecmds.c:239 commands/typecmds.c:739 commands/typecmds.c:1090 -#: commands/typecmds.c:1308 commands/typecmds.c:2060 +#: catalog/heap.c:1080 catalog/pg_type.c:412 catalog/pg_type.c:722 +#: commands/typecmds.c:235 commands/typecmds.c:782 commands/typecmds.c:1133 +#: commands/typecmds.c:1355 commands/typecmds.c:2109 #, c-format msgid "type \"%s\" already exists" msgstr "il tipo \"%s\" esiste già" -#: catalog/heap.c:1072 +#: catalog/heap.c:1081 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "Una relazione ha un tipo associato con lo stesso nome, quindi devi usare nomi che non siano in conflitto con alcun tipo esistente." -#: catalog/heap.c:2257 +#: catalog/heap.c:1109 +#, c-format +msgid "pg_class heap OID value not set when in binary upgrade mode" +msgstr "valore OID heap pg_class non impostato in modalità di aggiornamento binaria" + +#: catalog/heap.c:2289 #, c-format msgid "check constraint \"%s\" already exists" msgstr "il vincolo di controllo \"%s\" esiste già" -#: catalog/heap.c:2410 catalog/pg_constraint.c:650 commands/tablecmds.c:5734 +#: catalog/heap.c:2444 catalog/pg_constraint.c:652 commands/tablecmds.c:6038 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "il vincolo \"%s\" per la relazione \"%s\" esiste già" -#: catalog/heap.c:2420 +#: catalog/heap.c:2454 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "il vincolo \"%s\" è in conflitto con il vincolo non ereditato sulla relazione \"%s\"" -#: catalog/heap.c:2434 +#: catalog/heap.c:2468 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "unione del vincolo \"%s\" con una definizione ereditata" -#: catalog/heap.c:2527 +#: catalog/heap.c:2561 #, c-format msgid "cannot use column references in default expression" msgstr "non si possono usare riferimenti a colonne nell'espressione predefinita" -#: catalog/heap.c:2538 +#: catalog/heap.c:2572 #, c-format msgid "default expression must not return a set" msgstr "le espressioni predefinite non devono restituire un insieme" -#: catalog/heap.c:2557 rewrite/rewriteHandler.c:1066 +#: catalog/heap.c:2591 rewrite/rewriteHandler.c:1077 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "la colonna \"%s\" è di tipo %s ma l'espressione predefinita è di tipo %s" -#: catalog/heap.c:2562 commands/prepare.c:374 parser/parse_node.c:411 -#: parser/parse_target.c:509 parser/parse_target.c:758 -#: parser/parse_target.c:768 rewrite/rewriteHandler.c:1071 +#: catalog/heap.c:2596 commands/prepare.c:374 parser/parse_node.c:411 +#: parser/parse_target.c:528 parser/parse_target.c:778 +#: parser/parse_target.c:788 rewrite/rewriteHandler.c:1082 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Devi riscrivere o convertire il tipo dell'espressione" -#: catalog/heap.c:2609 +#: catalog/heap.c:2643 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "solo la tabella \"%s\" può essere referenziata nel vincolo di controllo" -#: catalog/heap.c:2849 +#: catalog/heap.c:2883 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "la combinazione di COMMIT con una chiave esterna non è supportata" -#: catalog/heap.c:2850 +#: catalog/heap.c:2884 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "La tabella \"%s\" referenzia \"%s\", ma non hanno la stessa impostazione ON COMMIT." -#: catalog/heap.c:2855 +#: catalog/heap.c:2889 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "non è possibile troncare una tabella referenziata da un vincolo di chiave esterna" -#: catalog/heap.c:2856 +#: catalog/heap.c:2890 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "La tabella \"%s\" referenzia \"%s\"." -#: catalog/heap.c:2858 +#: catalog/heap.c:2892 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Troncare la tabella \"%s\" nello stesso tempo o usare TRUNCATE ... CASCADE." -#: catalog/index.c:204 parser/parse_utilcmd.c:1393 parser/parse_utilcmd.c:1479 +#: catalog/index.c:205 parser/parse_utilcmd.c:1436 parser/parse_utilcmd.c:1522 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "non è possibile avere più di una chiave primaria per la tabella \"%s\"" -#: catalog/index.c:222 +#: catalog/index.c:223 #, c-format msgid "primary keys cannot be expressions" msgstr "le chiavi primarie non possono essere delle espressioni" -#: catalog/index.c:739 catalog/index.c:1143 +#: catalog/index.c:743 catalog/index.c:1161 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "non sono supportati indici definiti dall'utente sulle tabelle del catalogo di sistema" -#: catalog/index.c:749 +#: catalog/index.c:753 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "la creazione concorrente di indici sulle tabelle del catalogo di sistema non è supportata" -#: catalog/index.c:767 +#: catalog/index.c:771 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "indici condivisi non possono essere creati dopo initdb" -#: catalog/index.c:1403 +#: catalog/index.c:785 commands/createas.c:100 commands/sequence.c:141 +#: parser/parse_utilcmd.c:185 +#, c-format +msgid "relation \"%s\" already exists, skipping" +msgstr "la relazione \"%s\" esiste già, saltata" + +#: catalog/index.c:821 +#, c-format +msgid "pg_class index OID value not set when in binary upgrade mode" +msgstr "valore OID indice pg_class non impostato in modalità di aggiornamento binaria" + +#: catalog/index.c:1423 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY deve essere la prima azione della transazione" -#: catalog/index.c:1936 +#: catalog/index.c:2007 #, c-format msgid "building index \"%s\" on table \"%s\"" msgstr "creazione dell'indice \"%s\" sulla tabella \"%s\"" -#: catalog/index.c:3121 +#: catalog/index.c:3262 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "non è possibile reindicizzare le tabelle temporanee di altre sessioni" -#: catalog/namespace.c:247 catalog/namespace.c:445 catalog/namespace.c:539 -#: commands/trigger.c:4486 +#: catalog/index.c:3387 +#, c-format +msgid "index \"%s\" was reindexed" +msgstr "l'indice \"%s\" è stato reindicizzato" + +#: catalog/index.c:3389 commands/vacuumlazy.c:1131 commands/vacuumlazy.c:1207 +#: commands/vacuumlazy.c:1374 commands/vacuumlazy.c:1546 +#, c-format +msgid "%s." +msgstr "%s." + +#: catalog/namespace.c:249 catalog/namespace.c:447 catalog/namespace.c:541 +#: commands/trigger.c:4528 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "i riferimenti tra database diversi non sono implementati: \"%s.%s.%s\"" -#: catalog/namespace.c:304 +#: catalog/namespace.c:306 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "Le tabelle temporanee non possono specificare un nome di schema" -#: catalog/namespace.c:383 +#: catalog/namespace.c:385 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "lock della relazione \"%s.%s\" fallito" -#: catalog/namespace.c:388 commands/lockcmds.c:146 +#: catalog/namespace.c:390 commands/lockcmds.c:146 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "lock della relazione \"%s\" fallito" -#: catalog/namespace.c:412 parser/parse_relation.c:964 +#: catalog/namespace.c:414 parser/parse_relation.c:1131 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "la relazione \"%s.%s\" non esiste" -#: catalog/namespace.c:417 parser/parse_relation.c:977 -#: parser/parse_relation.c:985 utils/adt/regproc.c:974 +#: catalog/namespace.c:419 parser/parse_relation.c:1144 +#: parser/parse_relation.c:1152 utils/adt/regproc.c:1035 #, c-format msgid "relation \"%s\" does not exist" msgstr "la relazione \"%s\" non esiste" -#: catalog/namespace.c:485 catalog/namespace.c:2849 commands/extension.c:1396 -#: commands/extension.c:1402 +#: catalog/namespace.c:487 catalog/namespace.c:2852 commands/extension.c:1394 +#: commands/extension.c:1400 #, c-format msgid "no schema has been selected to create in" msgstr "nessuna schema selezionato per crearci dentro" -#: catalog/namespace.c:637 catalog/namespace.c:650 +#: catalog/namespace.c:639 catalog/namespace.c:652 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "non si possono creare relazioni in schemi temporanei di altre sessioni" -#: catalog/namespace.c:641 +#: catalog/namespace.c:643 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "non si possono creare relazioni temporanee in schemi non temporanei" -#: catalog/namespace.c:656 +#: catalog/namespace.c:658 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "solo relazioni temporanee possono essere create in schemi temporanei" -#: catalog/namespace.c:2151 +#: catalog/namespace.c:2154 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "l'analizzatore di ricerca di testo \"%s\" non esiste" -#: catalog/namespace.c:2277 +#: catalog/namespace.c:2280 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "il dizionario di ricerca di testo \"%s\" non esiste" -#: catalog/namespace.c:2404 +#: catalog/namespace.c:2407 #, c-format msgid "text search template \"%s\" does not exist" msgstr "il modello di ricerca di testo \"%s\" non esiste" -#: catalog/namespace.c:2530 commands/tsearchcmds.c:1168 -#: utils/cache/ts_cache.c:616 +#: catalog/namespace.c:2533 commands/tsearchcmds.c:1197 +#: utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "la configurazione di ricerca di testo \"%s\" non esiste" -#: catalog/namespace.c:2643 parser/parse_expr.c:788 parser/parse_target.c:1110 +#: catalog/namespace.c:2646 parser/parse_expr.c:789 parser/parse_target.c:1130 #, c-format msgid "cross-database references are not implemented: %s" msgstr "i riferimenti tra database diversi non sono implementati: %s" -#: catalog/namespace.c:2649 parser/parse_expr.c:795 parser/parse_target.c:1117 -#: gram.y:12556 gram.y:13788 +#: catalog/namespace.c:2652 parser/parse_expr.c:796 parser/parse_target.c:1137 +#: gram.y:13339 gram.y:14693 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "nome qualificato improprio (troppi nomi puntati): %s" -#: catalog/namespace.c:2783 +#: catalog/namespace.c:2786 #, c-format msgid "%s is already in schema \"%s\"" msgstr "%s è già nello schema \"%s\"" -#: catalog/namespace.c:2791 +#: catalog/namespace.c:2794 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "non posso spostare oggetti dentro o fuori gli schemi temporanei" -#: catalog/namespace.c:2797 +#: catalog/namespace.c:2800 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "non posso spostare oggetti dentro o fuori lo schema TOAST" -#: catalog/namespace.c:2870 commands/schemacmds.c:212 -#: commands/schemacmds.c:288 commands/tablecmds.c:708 +#: catalog/namespace.c:2873 commands/schemacmds.c:238 +#: commands/schemacmds.c:317 commands/tablecmds.c:735 #, c-format msgid "schema \"%s\" does not exist" msgstr "lo schema \"%s\" non esiste" -#: catalog/namespace.c:2901 +#: catalog/namespace.c:2904 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "nome di relazione improprio (troppi nomi puntati): %s" -#: catalog/namespace.c:3342 +#: catalog/namespace.c:3369 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "l'ordinamento \"%s\" per la codifica \"%s\" non esiste" -#: catalog/namespace.c:3397 +#: catalog/namespace.c:3424 #, c-format msgid "conversion \"%s\" does not exist" msgstr "la conversione \"%s\" non esiste" -#: catalog/namespace.c:3605 +#: catalog/namespace.c:3632 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "permesso di creare tabelle temporanee nel database \"%s\" negato" -#: catalog/namespace.c:3621 +#: catalog/namespace.c:3648 #, c-format msgid "cannot create temporary tables during recovery" msgstr "non è possibile creare tabelle temporanee durante il recupero" -#: catalog/namespace.c:3865 commands/tablespace.c:1113 commands/variable.c:61 -#: replication/syncrep.c:677 utils/misc/guc.c:9034 +#: catalog/namespace.c:3654 +#, c-format +msgid "cannot create temporary tables in parallel mode" +msgstr "non è possibile creare tabelle temporanee in modalità parallela" + +#: catalog/namespace.c:3898 commands/tablespace.c:1158 commands/variable.c:62 +#: replication/syncrep.c:700 utils/misc/guc.c:9654 #, c-format msgid "List syntax is invalid." msgstr "La sintassi della lista non è valida." -#: catalog/objectaddress.c:732 +#: catalog/objectaddress.c:1021 msgid "database name cannot be qualified" msgstr "il nome del database non può essere qualificato" -#: catalog/objectaddress.c:735 commands/extension.c:2423 +#: catalog/objectaddress.c:1024 commands/extension.c:2423 #, c-format msgid "extension name cannot be qualified" msgstr "il nome dell'estensione non può essere qualificato" -#: catalog/objectaddress.c:738 +#: catalog/objectaddress.c:1027 msgid "tablespace name cannot be qualified" msgstr "il nome del tablespace non può essere qualificato" -#: catalog/objectaddress.c:741 +#: catalog/objectaddress.c:1030 msgid "role name cannot be qualified" msgstr "il nome del ruolo non può essere qualificato" -#: catalog/objectaddress.c:744 +#: catalog/objectaddress.c:1033 msgid "schema name cannot be qualified" msgstr "il nome dello schema non può essere qualificato" -#: catalog/objectaddress.c:747 +#: catalog/objectaddress.c:1036 msgid "language name cannot be qualified" msgstr "il nome del linguaggio non può essere qualificato" -#: catalog/objectaddress.c:750 +#: catalog/objectaddress.c:1039 msgid "foreign-data wrapper name cannot be qualified" msgstr "il nome del wrapper di dati esterni non può essere qualificato" -#: catalog/objectaddress.c:753 +#: catalog/objectaddress.c:1042 msgid "server name cannot be qualified" msgstr "il nome del server non può essere qualificato" -#: catalog/objectaddress.c:756 +#: catalog/objectaddress.c:1045 msgid "event trigger name cannot be qualified" msgstr "il nome del trigger di evento non può essere qualificato" -#: catalog/objectaddress.c:869 commands/lockcmds.c:94 commands/tablecmds.c:208 -#: commands/tablecmds.c:1263 commands/tablecmds.c:4130 -#: commands/tablecmds.c:7601 +#: catalog/objectaddress.c:1158 commands/lockcmds.c:94 commands/policy.c:94 +#: commands/policy.c:422 commands/tablecmds.c:214 commands/tablecmds.c:1294 +#: commands/tablecmds.c:4323 commands/tablecmds.c:7956 #, c-format msgid "\"%s\" is not a table" msgstr "\"%s\" non è una tabella" -#: catalog/objectaddress.c:876 commands/tablecmds.c:220 -#: commands/tablecmds.c:4154 commands/tablecmds.c:11249 commands/view.c:154 +#: catalog/objectaddress.c:1165 commands/tablecmds.c:226 +#: commands/tablecmds.c:4347 commands/tablecmds.c:11913 commands/view.c:155 #, c-format msgid "\"%s\" is not a view" msgstr "\"%s\" non è una vista" -#: catalog/objectaddress.c:883 commands/matview.c:171 commands/tablecmds.c:226 -#: commands/tablecmds.c:11254 +#: catalog/objectaddress.c:1172 commands/matview.c:174 +#: commands/tablecmds.c:232 commands/tablecmds.c:11918 #, c-format msgid "\"%s\" is not a materialized view" msgstr "\"%s\" non è una vista materializzata" -#: catalog/objectaddress.c:890 commands/tablecmds.c:244 -#: commands/tablecmds.c:4157 commands/tablecmds.c:11259 +#: catalog/objectaddress.c:1179 commands/tablecmds.c:250 +#: commands/tablecmds.c:4350 commands/tablecmds.c:11923 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" non è una tabella esterna" -#: catalog/objectaddress.c:1028 +#: catalog/objectaddress.c:1324 catalog/objectaddress.c:1377 #, c-format msgid "column name must be qualified" msgstr "il nome della colonna deve essere qualificato" -#: catalog/objectaddress.c:1083 commands/functioncmds.c:126 -#: commands/tablecmds.c:236 commands/typecmds.c:3253 parser/parse_type.c:222 -#: parser/parse_type.c:251 parser/parse_type.c:795 utils/adt/acl.c:4374 -#: utils/adt/regproc.c:1165 +#: catalog/objectaddress.c:1420 +#, c-format +msgid "default value for column \"%s\" of relation \"%s\" does not exist" +msgstr "il valore di default per la colonna \"%s\" della relazione \"%s\" non esiste" + +#: catalog/objectaddress.c:1460 commands/functioncmds.c:128 +#: commands/tablecmds.c:242 commands/typecmds.c:3210 parser/parse_type.c:227 +#: parser/parse_type.c:256 parser/parse_type.c:824 utils/adt/acl.c:4373 +#: utils/adt/regproc.c:1226 #, c-format msgid "type \"%s\" does not exist" msgstr "il tipo \"%s\" non esiste" -#: catalog/objectaddress.c:1240 libpq/be-fsstubs.c:352 +#: catalog/objectaddress.c:1577 #, c-format -msgid "must be owner of large object %u" -msgstr "occorre essere proprietari del large object %u" +msgid "operator %d (%s, %s) of %s does not exist" +msgstr "l'operatore %d (%s, %s) di %s non esiste" -#: catalog/objectaddress.c:1255 commands/functioncmds.c:1328 +#: catalog/objectaddress.c:1606 #, c-format -msgid "must be owner of type %s or type %s" -msgstr "occorre essere proprietari del tipo %s o del tipo %s" +msgid "function %d (%s, %s) of %s does not exist" +msgstr "la funzione %d (%s, %s) di %s non esiste" -#: catalog/objectaddress.c:1286 catalog/objectaddress.c:1302 +#: catalog/objectaddress.c:1655 catalog/objectaddress.c:1681 #, c-format -msgid "must be superuser" -msgstr "occorre essere superutenti" +msgid "user mapping for user \"%s\" in server \"%s\" does not exist" +msgstr "la mappatura per l'utente \"%s\" nel server \"%s\" non esiste" -#: catalog/objectaddress.c:1293 +#: catalog/objectaddress.c:1670 commands/foreigncmds.c:430 +#: commands/foreigncmds.c:997 commands/foreigncmds.c:1359 +#: foreign/foreign.c:691 #, c-format -msgid "must have CREATEROLE privilege" -msgstr "occorre avere privilegio CREATEROLE" +msgid "server \"%s\" does not exist" +msgstr "il server \"%s\" non esiste" -#: catalog/objectaddress.c:1539 +#: catalog/objectaddress.c:1742 +#, c-format +msgid "unrecognized default ACL object type %c" +msgstr "tipo di oggetto ACL di default %c non riconosciuto" + +#: catalog/objectaddress.c:1743 +#, c-format +msgid "Valid object types are 'r', 'S', 'f', and 'T'." +msgstr "I tipi di oggetti validi sono 'r', 'S', 'f' e 'T'" + +#: catalog/objectaddress.c:1789 +#, c-format +msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" +msgstr "l'ACL di default per l'utente \"%s\" nello schema \"%s\" su %s non esiste" + +#: catalog/objectaddress.c:1794 +#, c-format +msgid "default ACL for user \"%s\" on %s does not exist" +msgstr "l'ACL di default per l'utente \"%s\" su %s non esiste" + +#: catalog/objectaddress.c:1821 catalog/objectaddress.c:1877 +#: catalog/objectaddress.c:1932 +#, c-format +msgid "name or argument lists may not contain nulls" +msgstr "il nome o la lista di argomenti non può contenere valori nulli" + +#: catalog/objectaddress.c:1853 +#, c-format +msgid "unsupported object type \"%s\"" +msgstr "tipo di oggetto \"%s\" non supportato" + +#: catalog/objectaddress.c:1873 catalog/objectaddress.c:1891 +#, c-format +msgid "name list length must be exactly %d" +msgstr "la lunghezza della lista dei nomi dev'essere %d" + +#: catalog/objectaddress.c:1895 +#, c-format +msgid "large object OID may not be null" +msgstr "l'OID di large object non può essere nullo" + +#: catalog/objectaddress.c:1904 +#, c-format +msgid "name list must be of length at least %d" +msgstr "la lunghezza della lista dei nomi dev'essere almeno %d" + +#: catalog/objectaddress.c:1957 catalog/objectaddress.c:1977 +#, c-format +msgid "argument list length must be exactly %d" +msgstr "la lunghezza della lista degli argomenti deve essere %d" + +#: catalog/objectaddress.c:1964 catalog/objectaddress.c:1971 +#, c-format +msgid "name list length must be at least %d" +msgstr "la lunghezza della lista dei nomi deve essere almeno %d" + +#: catalog/objectaddress.c:2113 libpq/be-fsstubs.c:352 +#, c-format +msgid "must be owner of large object %u" +msgstr "occorre essere proprietari del large object %u" + +#: catalog/objectaddress.c:2128 commands/functioncmds.c:1386 +#, c-format +msgid "must be owner of type %s or type %s" +msgstr "occorre essere proprietari del tipo %s o del tipo %s" + +#: catalog/objectaddress.c:2168 catalog/objectaddress.c:2184 +#, c-format +msgid "must be superuser" +msgstr "occorre essere superutenti" + +#: catalog/objectaddress.c:2175 +#, c-format +msgid "must have CREATEROLE privilege" +msgstr "occorre avere privilegio CREATEROLE" + +#: catalog/objectaddress.c:2254 +#, c-format +msgid "unrecognized object type \"%s\"" +msgstr "tipo di oggetto \"%s\" non riconosciuto" + +#: catalog/objectaddress.c:2449 #, c-format msgid " column %s" msgstr " colonna %s" -#: catalog/objectaddress.c:1545 +#: catalog/objectaddress.c:2455 #, c-format msgid "function %s" msgstr "funzione %s" -#: catalog/objectaddress.c:1550 +#: catalog/objectaddress.c:2460 #, c-format msgid "type %s" msgstr "tipo %s" -#: catalog/objectaddress.c:1580 +#: catalog/objectaddress.c:2490 #, c-format msgid "cast from %s to %s" msgstr "conversione da %s a %s" -#: catalog/objectaddress.c:1600 +#: catalog/objectaddress.c:2510 #, c-format msgid "collation %s" msgstr "ordinamento %s" -#: catalog/objectaddress.c:1624 +#: catalog/objectaddress.c:2534 #, c-format msgid "constraint %s on %s" msgstr "vincolo %s su %s" -#: catalog/objectaddress.c:1630 +#: catalog/objectaddress.c:2540 #, c-format msgid "constraint %s" msgstr "vincolo %s" -#: catalog/objectaddress.c:1647 +#: catalog/objectaddress.c:2557 #, c-format msgid "conversion %s" msgstr "conversione %s" -#: catalog/objectaddress.c:1684 +#: catalog/objectaddress.c:2594 #, c-format msgid "default for %s" msgstr "predefinito per %s" -#: catalog/objectaddress.c:1701 +#: catalog/objectaddress.c:2603 #, c-format msgid "language %s" msgstr "linguaggio %s" -#: catalog/objectaddress.c:1707 +#: catalog/objectaddress.c:2608 #, c-format msgid "large object %u" msgstr "large object %u" -#: catalog/objectaddress.c:1712 +#: catalog/objectaddress.c:2613 #, c-format msgid "operator %s" msgstr "operatore %s" -#: catalog/objectaddress.c:1744 +#: catalog/objectaddress.c:2645 #, c-format msgid "operator class %s for access method %s" msgstr "classe di operatori %s per il metodo di accesso %s" @@ -3303,7 +3861,7 @@ msgstr "classe di operatori %s per il metodo di accesso %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:1794 +#: catalog/objectaddress.c:2695 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "operatore %d (%s, %s) della %s: %s" @@ -3312,162 +3870,172 @@ msgstr "operatore %d (%s, %s) della %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:1844 +#: catalog/objectaddress.c:2745 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "funzione %d (%s, %s) della %s: %s" -#: catalog/objectaddress.c:1884 +#: catalog/objectaddress.c:2785 #, c-format msgid "rule %s on " msgstr "regola %s on " -#: catalog/objectaddress.c:1919 +#: catalog/objectaddress.c:2807 +#, c-format +msgid "transform for %s language %s" +msgstr "trasformazione per %s linguaggio %s" + +#: catalog/objectaddress.c:2841 #, c-format msgid "trigger %s on " msgstr "trigger %s su " -#: catalog/objectaddress.c:1936 +#: catalog/objectaddress.c:2858 #, c-format msgid "schema %s" msgstr "schema %s" -#: catalog/objectaddress.c:1949 +#: catalog/objectaddress.c:2871 #, c-format msgid "text search parser %s" msgstr "analizzatore di ricerca di testo %s" -#: catalog/objectaddress.c:1964 +#: catalog/objectaddress.c:2886 #, c-format msgid "text search dictionary %s" msgstr "dizionario di ricerca di testo %s" -#: catalog/objectaddress.c:1979 +#: catalog/objectaddress.c:2901 #, c-format msgid "text search template %s" msgstr "modello di ricerca di testo %s" -#: catalog/objectaddress.c:1994 +#: catalog/objectaddress.c:2916 #, c-format msgid "text search configuration %s" msgstr "configurazione di ricerca di testo %s" -#: catalog/objectaddress.c:2002 +#: catalog/objectaddress.c:2924 #, c-format msgid "role %s" msgstr "regola %s" -#: catalog/objectaddress.c:2015 +#: catalog/objectaddress.c:2937 #, c-format msgid "database %s" msgstr "database %s" -#: catalog/objectaddress.c:2027 +#: catalog/objectaddress.c:2949 #, c-format msgid "tablespace %s" msgstr "tablespace %s" -#: catalog/objectaddress.c:2036 +#: catalog/objectaddress.c:2958 #, c-format msgid "foreign-data wrapper %s" msgstr "wrapper di dati esterni %s" -#: catalog/objectaddress.c:2045 +#: catalog/objectaddress.c:2967 #, c-format msgid "server %s" msgstr "server %s" -#: catalog/objectaddress.c:2070 +#: catalog/objectaddress.c:2995 #, c-format -msgid "user mapping for %s" -msgstr "mappatura utenti per %s" +msgid "user mapping for %s on server %s" +msgstr "mappatura utenti per %s sul server %s" -#: catalog/objectaddress.c:2104 +#: catalog/objectaddress.c:3030 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "privilegi predefiniti sulle nuove relazioni appartenenti al ruolo %s" -#: catalog/objectaddress.c:2109 +#: catalog/objectaddress.c:3035 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "privilegi predefiniti sulle nuove sequenze appartenenti al ruolo %s" -#: catalog/objectaddress.c:2114 +#: catalog/objectaddress.c:3040 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "privilegi predefiniti sulle nuove funzioni appartenenti al ruolo %s" -#: catalog/objectaddress.c:2119 +#: catalog/objectaddress.c:3045 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "privilegi predefiniti sui nuovi tipi appartenenti al ruolo %s" -#: catalog/objectaddress.c:2125 +#: catalog/objectaddress.c:3051 #, c-format msgid "default privileges belonging to role %s" msgstr "privilegi predefiniti appartenenti al ruolo %s" -#: catalog/objectaddress.c:2133 +#: catalog/objectaddress.c:3059 #, c-format msgid " in schema %s" msgstr " nello schema %s" -#: catalog/objectaddress.c:2150 +#: catalog/objectaddress.c:3076 #, c-format msgid "extension %s" msgstr "estensione %s" -#: catalog/objectaddress.c:2163 +#: catalog/objectaddress.c:3089 #, c-format msgid "event trigger %s" msgstr "trigger di evento %s" -#: catalog/objectaddress.c:2223 +#: catalog/objectaddress.c:3121 +#, c-format +msgid "policy %s on " +msgstr "politica %s su " + +#: catalog/objectaddress.c:3184 #, c-format msgid "table %s" msgstr "tabella %s" -#: catalog/objectaddress.c:2227 +#: catalog/objectaddress.c:3188 #, c-format msgid "index %s" msgstr "indice %s" -#: catalog/objectaddress.c:2231 +#: catalog/objectaddress.c:3192 #, c-format msgid "sequence %s" msgstr "sequenza %s" -#: catalog/objectaddress.c:2235 +#: catalog/objectaddress.c:3196 #, c-format msgid "toast table %s" msgstr "tabella toast %s" -#: catalog/objectaddress.c:2239 +#: catalog/objectaddress.c:3200 #, c-format msgid "view %s" msgstr "vista %s" -#: catalog/objectaddress.c:2243 +#: catalog/objectaddress.c:3204 #, c-format msgid "materialized view %s" msgstr "vista materializzata %s" -#: catalog/objectaddress.c:2247 +#: catalog/objectaddress.c:3208 #, c-format msgid "composite type %s" msgstr "tipo composito %s" -#: catalog/objectaddress.c:2251 +#: catalog/objectaddress.c:3212 #, c-format msgid "foreign table %s" msgstr "tabella esterna %s" -#: catalog/objectaddress.c:2256 +#: catalog/objectaddress.c:3217 #, c-format msgid "relation %s" msgstr "relazione %s" -#: catalog/objectaddress.c:2293 +#: catalog/objectaddress.c:3254 #, c-format msgid "operator family %s for access method %s" msgstr "famiglia di operatori %s per il metodo d'accesso %s" @@ -3514,7 +4082,7 @@ msgstr "non si può omettere initval quando la funzione di transizione è strict msgid "return type of inverse transition function %s is not %s" msgstr "il tipo restituito dalla funzione di transizione inversa %s non è %s" -#: catalog/pg_aggregate.c:344 executor/nodeWindowAgg.c:2301 +#: catalog/pg_aggregate.c:344 executor/nodeWindowAgg.c:2305 #, c-format msgid "strictness of aggregate's forward and inverse transition functions must match" msgstr "le ristrettezze della trasformazione diretta ed inversa di un aggregato devono combaciare" @@ -3524,7 +4092,7 @@ msgstr "le ristrettezze della trasformazione diretta ed inversa di un aggregato msgid "final function with extra arguments must not be declared STRICT" msgstr "la funzione finale con argomenti aggiuntivi non deve essere dichiarata STRICT" -#: catalog/pg_aggregate.c:410 catalog/pg_proc.c:241 catalog/pg_proc.c:248 +#: catalog/pg_aggregate.c:410 catalog/pg_proc.c:245 catalog/pg_proc.c:252 #, c-format msgid "cannot determine result data type" msgstr "non è possibile determinare il tipo di dati del risultato" @@ -3534,12 +4102,12 @@ msgstr "non è possibile determinare il tipo di dati del risultato" msgid "An aggregate returning a polymorphic type must have at least one polymorphic argument." msgstr "Una funzione di aggregazione che restituisce un tipo polimorfico deve avere almeno un argomento polimorfico." -#: catalog/pg_aggregate.c:423 catalog/pg_proc.c:254 +#: catalog/pg_aggregate.c:423 catalog/pg_proc.c:258 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "uso dello pseudo-tipo \"internal\" non sicuro" -#: catalog/pg_aggregate.c:424 catalog/pg_proc.c:255 +#: catalog/pg_aggregate.c:424 catalog/pg_proc.c:259 #, c-format msgid "A function returning \"internal\" must have at least one \"internal\" argument." msgstr "Una funzione che restituisce \"internal\" deve avere almeno un argomento \"internal\"." @@ -3554,27 +4122,27 @@ msgstr "l'implementazione dell'aggregazione mobile restituisce il tipo %s ma l'i msgid "sort operator can only be specified for single-argument aggregates" msgstr "l'operatore di ordinamento può essere specificato sono per aggregati con un solo argomento" -#: catalog/pg_aggregate.c:701 commands/typecmds.c:1657 -#: commands/typecmds.c:1708 commands/typecmds.c:1739 commands/typecmds.c:1762 -#: commands/typecmds.c:1783 commands/typecmds.c:1810 commands/typecmds.c:1837 -#: commands/typecmds.c:1914 commands/typecmds.c:1956 parser/parse_func.c:357 -#: parser/parse_func.c:386 parser/parse_func.c:411 parser/parse_func.c:425 -#: parser/parse_func.c:500 parser/parse_func.c:511 parser/parse_func.c:1907 +#: catalog/pg_aggregate.c:700 commands/typecmds.c:1702 +#: commands/typecmds.c:1753 commands/typecmds.c:1784 commands/typecmds.c:1807 +#: commands/typecmds.c:1828 commands/typecmds.c:1855 commands/typecmds.c:1882 +#: commands/typecmds.c:1959 commands/typecmds.c:2001 parser/parse_func.c:364 +#: parser/parse_func.c:393 parser/parse_func.c:418 parser/parse_func.c:432 +#: parser/parse_func.c:507 parser/parse_func.c:518 parser/parse_func.c:1920 #, c-format msgid "function %s does not exist" msgstr "la funzione %s non esiste" -#: catalog/pg_aggregate.c:707 +#: catalog/pg_aggregate.c:706 #, c-format msgid "function %s returns a set" msgstr "la funzione %s restituisce un insieme" -#: catalog/pg_aggregate.c:722 +#: catalog/pg_aggregate.c:721 #, c-format msgid "function %s must accept VARIADIC ANY to be used in this aggregate" msgstr "la funzione %s deve accettare VARIADIC ANY per essere usata in questo aggregato" -#: catalog/pg_aggregate.c:746 +#: catalog/pg_aggregate.c:745 #, c-format msgid "function %s requires run-time type coercion" msgstr "la funzione %s richiede una coercizione di tipo a run-time" @@ -3589,42 +4157,42 @@ msgstr "l'ordinamento \"%s\" per la codifica \"%s\" esiste già" msgid "collation \"%s\" already exists" msgstr "l'ordinamento \"%s\" esiste già" -#: catalog/pg_constraint.c:659 +#: catalog/pg_constraint.c:661 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "il vincolo \"%s\" per il dominio %s esiste già" -#: catalog/pg_constraint.c:811 +#: catalog/pg_constraint.c:813 #, c-format msgid "table \"%s\" has multiple constraints named \"%s\"" msgstr "la tabella \"%s\" ha più di un vincolo di nome \"%s\"" -#: catalog/pg_constraint.c:823 +#: catalog/pg_constraint.c:825 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "il vincolo \"%s\" per la tabella \"%s\" non esiste" -#: catalog/pg_constraint.c:869 +#: catalog/pg_constraint.c:871 #, c-format msgid "domain \"%s\" has multiple constraints named \"%s\"" msgstr "il dominio \"%s\" ha più di un vincolo di nome \"%s\"" -#: catalog/pg_constraint.c:881 +#: catalog/pg_constraint.c:883 #, c-format msgid "constraint \"%s\" for domain \"%s\" does not exist" msgstr "il vincolo \"%s\" per la il dominio \"%s\" non esiste" -#: catalog/pg_conversion.c:67 +#: catalog/pg_conversion.c:66 #, c-format msgid "conversion \"%s\" already exists" msgstr "la conversione \"%s\" esiste già" -#: catalog/pg_conversion.c:80 +#: catalog/pg_conversion.c:79 #, c-format msgid "default conversion for %s to %s already exists" msgstr "la conversione predefinita da %s a %s esiste già" -#: catalog/pg_depend.c:165 commands/extension.c:2926 +#: catalog/pg_depend.c:165 commands/extension.c:2945 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s fa già parte dell'estensione \"%s\"" @@ -3659,175 +4227,180 @@ msgstr "l'etichetta di enum \"%s\" esiste già" msgid "\"%s\" is not an existing enum label" msgstr "\"%s\" non è un'etichetta enumerata esistente" -#: catalog/pg_enum.c:354 +#: catalog/pg_enum.c:349 +#, c-format +msgid "pg_enum OID value not set when in binary upgrade mode" +msgstr "valore di OID di pg_enum non impostato in modalità di aggiornamento binario" + +#: catalog/pg_enum.c:359 #, c-format msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "ALTER TYPE ADD BEFORE/AFTER non è compatibile con gli aggiornamenti binari" -#: catalog/pg_namespace.c:61 commands/schemacmds.c:220 +#: catalog/pg_namespace.c:61 commands/schemacmds.c:246 #, c-format msgid "schema \"%s\" already exists" msgstr "lo schema \"%s\" esiste già" -#: catalog/pg_operator.c:222 catalog/pg_operator.c:362 +#: catalog/pg_operator.c:222 catalog/pg_operator.c:363 #, c-format msgid "\"%s\" is not a valid operator name" msgstr "\"%s\" non è un nome di operatore valido" -#: catalog/pg_operator.c:371 +#: catalog/pg_operator.c:372 #, c-format msgid "only binary operators can have commutators" msgstr "solo gli operatori binari possono avere commutatori" -#: catalog/pg_operator.c:375 +#: catalog/pg_operator.c:376 commands/operatorcmds.c:464 #, c-format msgid "only binary operators can have join selectivity" msgstr "solo gli operatori binari possono avere selettività di unione" -#: catalog/pg_operator.c:379 +#: catalog/pg_operator.c:380 #, c-format msgid "only binary operators can merge join" msgstr "solo gli operatori binari possono fare dei merge-join" -#: catalog/pg_operator.c:383 +#: catalog/pg_operator.c:384 #, c-format msgid "only binary operators can hash" msgstr "solo gli operatori binari possono supportare l'hash" -#: catalog/pg_operator.c:394 +#: catalog/pg_operator.c:395 #, c-format msgid "only boolean operators can have negators" msgstr "solo gli operatori booleani possono avere un negatore" -#: catalog/pg_operator.c:398 +#: catalog/pg_operator.c:399 commands/operatorcmds.c:472 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "solo gli operatori booleani possono avere restrizione di selettività" -#: catalog/pg_operator.c:402 +#: catalog/pg_operator.c:403 commands/operatorcmds.c:476 #, c-format msgid "only boolean operators can have join selectivity" msgstr "solo gli operatori booleani possono avere selettività di unione" -#: catalog/pg_operator.c:406 +#: catalog/pg_operator.c:407 #, c-format msgid "only boolean operators can merge join" msgstr "solo gli operatori booleani possono fare dei merge-join" -#: catalog/pg_operator.c:410 +#: catalog/pg_operator.c:411 #, c-format msgid "only boolean operators can hash" msgstr "solo gli operatori booleani possono supportare l'hash" -#: catalog/pg_operator.c:422 +#: catalog/pg_operator.c:423 #, c-format msgid "operator %s already exists" msgstr "l'operatore %s esiste già " -#: catalog/pg_operator.c:615 +#: catalog/pg_operator.c:616 #, c-format msgid "operator cannot be its own negator or sort operator" msgstr "l'operatore non può negare o ordinare se stesso" -#: catalog/pg_proc.c:129 parser/parse_func.c:1931 parser/parse_func.c:1971 +#: catalog/pg_proc.c:133 parser/parse_func.c:1944 parser/parse_func.c:1984 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" msgstr[0] "le funzioni non possono avere più di %d argomento" msgstr[1] "le funzioni non possono avere più di %d argomenti" -#: catalog/pg_proc.c:242 +#: catalog/pg_proc.c:246 #, c-format msgid "A function returning a polymorphic type must have at least one polymorphic argument." msgstr "Una funzione che restituisce un tipo polimorfico deve avere almeno un argomento polimorfico." -#: catalog/pg_proc.c:249 +#: catalog/pg_proc.c:253 #, c-format msgid "A function returning \"anyrange\" must have at least one \"anyrange\" argument." msgstr "Una funzione che restituisce \"anyrange\" deve avere almeno un argomento \"anyrange\"." -#: catalog/pg_proc.c:267 +#: catalog/pg_proc.c:271 #, c-format msgid "\"%s\" is already an attribute of type %s" msgstr "\"%s\" è già un attributo del tipo %s" -#: catalog/pg_proc.c:393 +#: catalog/pg_proc.c:401 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "la funzione \"%s\" esiste già, con gli stessi tipi di argomenti" -#: catalog/pg_proc.c:407 catalog/pg_proc.c:430 +#: catalog/pg_proc.c:415 catalog/pg_proc.c:438 #, c-format msgid "cannot change return type of existing function" msgstr "non è possibile cambiare il tipo restituito da una funzione esistente" -#: catalog/pg_proc.c:408 catalog/pg_proc.c:432 catalog/pg_proc.c:475 -#: catalog/pg_proc.c:499 catalog/pg_proc.c:526 +#: catalog/pg_proc.c:416 catalog/pg_proc.c:440 catalog/pg_proc.c:483 +#: catalog/pg_proc.c:507 catalog/pg_proc.c:534 #, c-format msgid "Use DROP FUNCTION %s first." msgstr "Usa prima DROP FUNCTION %s." -#: catalog/pg_proc.c:431 +#: catalog/pg_proc.c:439 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "Il tipo della riga definito dai parametri di OUT è diverso." -#: catalog/pg_proc.c:473 +#: catalog/pg_proc.c:481 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "non è possibile cambiare nome del parametro di ingresso \"%s\"" -#: catalog/pg_proc.c:498 +#: catalog/pg_proc.c:506 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "non è possibile rimuovere i valori predefiniti dei parametri da funzioni esistenti" -#: catalog/pg_proc.c:525 +#: catalog/pg_proc.c:533 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "non è possibile cambiare tipo di dati dei valori predefiniti di parametri esistenti" -#: catalog/pg_proc.c:538 +#: catalog/pg_proc.c:546 #, c-format msgid "function \"%s\" is an aggregate function" msgstr "la funzione \"%s\" è una funzione di aggregazione" -#: catalog/pg_proc.c:543 +#: catalog/pg_proc.c:551 #, c-format msgid "function \"%s\" is not an aggregate function" msgstr "la funzione \"%s\" non è una funzione di aggregazione" -#: catalog/pg_proc.c:551 +#: catalog/pg_proc.c:559 #, c-format msgid "function \"%s\" is a window function" msgstr "la funzione \"%s\" è una funzione finestra" -#: catalog/pg_proc.c:556 +#: catalog/pg_proc.c:564 #, c-format msgid "function \"%s\" is not a window function" msgstr "la funzione \"%s\" non è una funzione finestra" -#: catalog/pg_proc.c:746 +#: catalog/pg_proc.c:772 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "non c'è nessuna funzione predefinita chiamata \"%s\"" -#: catalog/pg_proc.c:844 +#: catalog/pg_proc.c:870 #, c-format msgid "SQL functions cannot return type %s" msgstr "Le funzioni SQL non possono restituire il tipo %s" -#: catalog/pg_proc.c:859 +#: catalog/pg_proc.c:885 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "le funzioni SQL non possono avere argomenti di tipo %s" -#: catalog/pg_proc.c:945 executor/functions.c:1418 +#: catalog/pg_proc.c:971 executor/functions.c:1421 #, c-format msgid "SQL function \"%s\"" msgstr "funzione SQL \"%s\"" -#: catalog/pg_shdepend.c:691 +#: catalog/pg_shdepend.c:692 #, c-format msgid "" "\n" @@ -3842,82 +4415,92 @@ msgstr[1] "" "\n" "ed oggetti in %d altri database (guarda il log per la lista)" -#: catalog/pg_shdepend.c:1003 +#: catalog/pg_shdepend.c:1004 #, c-format msgid "role %u was concurrently dropped" msgstr "la regola %u è stata eliminata concorrentemente" -#: catalog/pg_shdepend.c:1022 +#: catalog/pg_shdepend.c:1023 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "Il tablespace %u è stato eliminato concorrentemente" -#: catalog/pg_shdepend.c:1037 +#: catalog/pg_shdepend.c:1038 #, c-format msgid "database %u was concurrently dropped" msgstr "Il database %u è stato eliminato concorrentemente" -#: catalog/pg_shdepend.c:1081 +#: catalog/pg_shdepend.c:1083 #, c-format msgid "owner of %s" msgstr "proprietario di %s" -#: catalog/pg_shdepend.c:1083 +#: catalog/pg_shdepend.c:1085 #, c-format msgid "privileges for %s" msgstr "privilegi per %s" +#: catalog/pg_shdepend.c:1087 +#, c-format +msgid "target of %s" +msgstr "obiettivo di %s" + #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1091 +#: catalog/pg_shdepend.c:1095 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" msgstr[0] "%d oggetto nel %s" msgstr[1] "%d oggetti nel %s" -#: catalog/pg_shdepend.c:1202 +#: catalog/pg_shdepend.c:1206 #, c-format msgid "cannot drop objects owned by %s because they are required by the database system" msgstr "non è possibile eliminare oggetti di proprietà di %s perché richiesti dal database" -#: catalog/pg_shdepend.c:1305 +#: catalog/pg_shdepend.c:1309 #, c-format msgid "cannot reassign ownership of objects owned by %s because they are required by the database system" msgstr "non è possibile modificare il proprietario degli oggetti di proprietà di %s perché richiesti dal database" -#: catalog/pg_type.c:244 +#: catalog/pg_type.c:136 catalog/pg_type.c:454 +#, c-format +msgid "pg_type OID value not set when in binary upgrade mode" +msgstr "valore di OID di pg_type non impostato in modalità di aggiornamento binaria" + +#: catalog/pg_type.c:253 #, c-format msgid "invalid type internal size %d" msgstr "dimensione interna del tipo %d non valida" -#: catalog/pg_type.c:260 catalog/pg_type.c:268 catalog/pg_type.c:276 -#: catalog/pg_type.c:285 +#: catalog/pg_type.c:269 catalog/pg_type.c:277 catalog/pg_type.c:285 +#: catalog/pg_type.c:294 #, c-format msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" msgstr "l'allineamento \"%c\" non è valido per tipi passati per valore di grandezza %d" -#: catalog/pg_type.c:292 +#: catalog/pg_type.c:301 #, c-format msgid "internal size %d is invalid for passed-by-value type" msgstr "la dimensione interna %d non è valida per tipi passati per valore" -#: catalog/pg_type.c:301 catalog/pg_type.c:307 +#: catalog/pg_type.c:310 catalog/pg_type.c:316 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "l'allineamento \"%c\" non è valido per il tipi a lunghezza variabile" -#: catalog/pg_type.c:315 +#: catalog/pg_type.c:324 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "i tipi a dimensione fissa devono avere immagazzinamento PLAIN" -#: catalog/pg_type.c:773 +#: catalog/pg_type.c:789 #, c-format msgid "could not form array type name for type \"%s\"" msgstr "creazione del nome per il tipo array del tipo \"%s\" fallita" -#: catalog/toasting.c:104 commands/indexcmds.c:380 commands/tablecmds.c:4139 -#: commands/tablecmds.c:11137 +#: catalog/toasting.c:104 commands/indexcmds.c:381 commands/tablecmds.c:4332 +#: commands/tablecmds.c:11801 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" non è una tabella né una vista materializzata" @@ -3997,126 +4580,136 @@ msgstr "il basetype è ridondante se il tipo di input è specificato per un aggr msgid "aggregate transition data type cannot be %s" msgstr "il tipo di dato della transizione dell'aggregato non può essere %s" -#: commands/alter.c:79 commands/event_trigger.c:194 +#: commands/alter.c:80 commands/event_trigger.c:230 #, c-format msgid "event trigger \"%s\" already exists" msgstr "il trigger di evento \"%s\" esiste già" -#: commands/alter.c:82 commands/foreigncmds.c:544 +#: commands/alter.c:83 commands/foreigncmds.c:597 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "il wrapper di dati esterni \"%s\" esiste già" -#: commands/alter.c:85 commands/foreigncmds.c:838 +#: commands/alter.c:86 commands/foreigncmds.c:890 #, c-format msgid "server \"%s\" already exists" msgstr "il server \"%s\" esiste già" -#: commands/alter.c:88 commands/proclang.c:356 +#: commands/alter.c:89 commands/proclang.c:363 #, c-format msgid "language \"%s\" already exists" msgstr "il linguaggio \"%s\" esiste già" -#: commands/alter.c:111 +#: commands/alter.c:112 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "la conversione \"%s\" già esiste nello schema \"%s\"" -#: commands/alter.c:115 +#: commands/alter.c:116 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "l'analizzatore di ricerca di testo \"%s\" esiste già nello schema \"%s\"" -#: commands/alter.c:119 +#: commands/alter.c:120 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "il dizionario di ricerca di testo \"%s\" esiste già nello schema \"%s\"" -#: commands/alter.c:123 +#: commands/alter.c:124 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "il modello di ricerca di testo \"%s\" esiste già nello schema \"%s\"" -#: commands/alter.c:127 +#: commands/alter.c:128 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "la configurazione di ricerca di testo \"%s\" esiste già nello schema \"%s\"" -#: commands/alter.c:201 +#: commands/alter.c:202 #, c-format msgid "must be superuser to rename %s" msgstr "occorre essere un superutente per rinominare %s" -#: commands/alter.c:585 +#: commands/alter.c:609 #, c-format msgid "must be superuser to set schema of %s" msgstr "occorre essere un superutente per impostare lo schema di %s" -#: commands/analyze.c:157 +#: commands/analyze.c:145 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "analisi di \"%s\" saltata --- lock non disponibile" -#: commands/analyze.c:174 +#: commands/analyze.c:162 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "\"%s\" saltato --- solo un superutente può analizzarlo" -#: commands/analyze.c:178 +#: commands/analyze.c:166 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "\"%s\" saltato --- solo un superutente o il proprietario del database possono analizzarlo." -#: commands/analyze.c:182 +#: commands/analyze.c:170 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "\"%s\" saltato --- solo il proprietario del database o della tabella possono analizzarlo" -#: commands/analyze.c:242 +#: commands/analyze.c:230 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "\"%s\" saltato --- non è possibile analizzare questa tabella esterna" -#: commands/analyze.c:253 +#: commands/analyze.c:241 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "\"%s\" saltato --- non è possibile analizzare non-tabelle o le tabelle speciali di sistema" -#: commands/analyze.c:332 +#: commands/analyze.c:320 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "analisi dell'albero di ereditarietà di \"%s.%s\"" -#: commands/analyze.c:337 +#: commands/analyze.c:325 #, c-format msgid "analyzing \"%s.%s\"" msgstr "analisi di \"%s.%s\"" -#: commands/analyze.c:657 +#: commands/analyze.c:645 #, c-format msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" msgstr "analisi automatica della tabella \"%s.%s.%s\" uso del sistema: %s" -#: commands/analyze.c:1300 +#: commands/analyze.c:1201 #, 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\": esaminate %d pagine su %u, contenenti %.0f righe vive e %.0f righe morte; %d righe nel campione, %.0f righe totali stimate" -#: commands/analyze.c:1564 executor/execQual.c:2904 +#: commands/analyze.c:1280 +#, c-format +msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" +msgstr "analyze dell'albero di ereditarietà \"%s.%s\" saltato --- questo albero non ha tabelle figlie" + +#: commands/analyze.c:1369 +#, c-format +msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" +msgstr "analyze dell'albero di ereditarietà \"%s.%s\" saltato --- questo albero non ha tabelle figlie analizzabili" + +#: commands/analyze.c:1417 executor/execQual.c:2900 msgid "could not convert row type" msgstr "conversione del tipo riga fallita" -#: commands/async.c:545 +#: commands/async.c:544 #, c-format msgid "channel name cannot be empty" msgstr "Il nome del canale non può essere vuoto" -#: commands/async.c:550 +#: commands/async.c:549 #, c-format msgid "channel name too long" msgstr "il nome del canale è troppo lungo" -#: commands/async.c:557 +#: commands/async.c:556 #, c-format msgid "payload string too long" msgstr "la stringa del carico è troppo lunga" @@ -4131,87 +4724,87 @@ msgstr "non è possibile eseguire PREPARE in una transazione che ha eseguito LIS msgid "too many notifications in the NOTIFY queue" msgstr "troppe notifiche nella coda di NOTIFY" -#: commands/async.c:1418 +#: commands/async.c:1445 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "la coda di NOTIFY è piena al %.0f%%" -#: commands/async.c:1420 +#: commands/async.c:1447 #, c-format msgid "The server process with PID %d is among those with the oldest transactions." msgstr "Il processo server con PID %d è tra quelli con le transazioni più vecchie." -#: commands/async.c:1423 +#: commands/async.c:1450 #, c-format msgid "The NOTIFY queue cannot be emptied until that process ends its current transaction." msgstr "La coda di NOTIFY non può essere svuotata finché quel processo non avrà terminato la sua transazione corrente." -#: commands/cluster.c:126 commands/cluster.c:363 +#: commands/cluster.c:127 commands/cluster.c:364 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "non è possibile raggruppare tabelle temporanee di altre sessioni" -#: commands/cluster.c:156 +#: commands/cluster.c:157 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "non esiste un indice già raggruppato per la tabella \"%s\"" -#: commands/cluster.c:170 commands/tablecmds.c:8795 commands/tablecmds.c:10461 +#: commands/cluster.c:171 commands/tablecmds.c:9246 commands/tablecmds.c:10943 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "l'indice \"%s\" per la tabella \"%s\" non esiste" -#: commands/cluster.c:352 +#: commands/cluster.c:353 #, c-format msgid "cannot cluster a shared catalog" msgstr "non è possibile raggruppare un catalogo condiviso" -#: commands/cluster.c:367 +#: commands/cluster.c:368 #, c-format msgid "cannot vacuum temporary tables of other sessions" msgstr "non è possibile ripulire tabelle temporanee di altre sessioni" -#: commands/cluster.c:430 commands/tablecmds.c:10471 +#: commands/cluster.c:431 commands/tablecmds.c:10953 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" non è un indice per la tabella \"%s\"" -#: commands/cluster.c:438 +#: commands/cluster.c:439 #, c-format msgid "cannot cluster on index \"%s\" because access method does not support clustering" msgstr "non è possibile raggruppare sull'indice \"%s\" perché il metodo di accesso non supporta il raggruppamento" -#: commands/cluster.c:450 +#: commands/cluster.c:451 #, c-format msgid "cannot cluster on partial index \"%s\"" msgstr "non è possibile raggruppare sull'indice parziale \"%s\"" -#: commands/cluster.c:464 +#: commands/cluster.c:465 #, c-format msgid "cannot cluster on invalid index \"%s\"" msgstr "non è possibile raggruppare sull'indice non valido \"%s\"" -#: commands/cluster.c:920 +#: commands/cluster.c:918 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "raggruppamento di \"%s.%s\" usando una scansione sull'indice \"%s\"" -#: commands/cluster.c:926 +#: commands/cluster.c:924 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "raggruppamento di \"%s.%s\" usando una scansione sequenziale e ordinamento" -#: commands/cluster.c:931 commands/vacuumlazy.c:445 +#: commands/cluster.c:929 commands/vacuumlazy.c:464 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "pulizia di \"%s.%s\"" -#: commands/cluster.c:1090 +#: commands/cluster.c:1088 #, c-format msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" msgstr "\"%s\": trovate %.0f versioni di riga removibili, %.0f non removibili in %u pagine" -#: commands/cluster.c:1094 +#: commands/cluster.c:1092 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -4220,51 +4813,51 @@ msgstr "" "%.0f versioni di riga morte non possono ancora essere rimosse.\n" "%s." -#: commands/collationcmds.c:79 +#: commands/collationcmds.c:80 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "attributo dell'ordinamento \"%s\" non riconosciuto" -#: commands/collationcmds.c:124 +#: commands/collationcmds.c:125 #, c-format msgid "parameter \"lc_collate\" must be specified" msgstr "il parametro \"lc_collate\" deve essere specificato" -#: commands/collationcmds.c:129 +#: commands/collationcmds.c:130 #, c-format msgid "parameter \"lc_ctype\" must be specified" msgstr "il parametro \"lc_ctype\" deve essere specificato" -#: commands/collationcmds.c:163 +#: commands/collationcmds.c:166 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "l'ordinamento \"%s\" per la codifica \"%s\" già esiste nello schema \"%s\"" -#: commands/collationcmds.c:174 +#: commands/collationcmds.c:177 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "l'ordinamento \"%s\" già esiste nello schema \"%s\"" -#: commands/comment.c:62 commands/dbcommands.c:775 commands/dbcommands.c:939 -#: commands/dbcommands.c:1042 commands/dbcommands.c:1234 -#: commands/dbcommands.c:1423 commands/dbcommands.c:1518 -#: commands/dbcommands.c:1935 utils/init/postinit.c:794 -#: utils/init/postinit.c:862 utils/init/postinit.c:879 +#: commands/comment.c:62 commands/dbcommands.c:797 commands/dbcommands.c:962 +#: commands/dbcommands.c:1067 commands/dbcommands.c:1257 +#: commands/dbcommands.c:1477 commands/dbcommands.c:1594 +#: commands/dbcommands.c:2011 utils/init/postinit.c:839 +#: utils/init/postinit.c:941 utils/init/postinit.c:958 #, c-format msgid "database \"%s\" does not exist" msgstr "il database \"%s\" non esiste" -#: commands/comment.c:101 commands/seclabel.c:114 parser/parse_utilcmd.c:686 +#: commands/comment.c:101 commands/seclabel.c:116 parser/parse_utilcmd.c:727 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "\"%s\" non è una tabella, vista, vista materializzata, tipo composito né una tabella esterna" -#: commands/constraint.c:60 utils/adt/ri_triggers.c:2699 +#: commands/constraint.c:60 utils/adt/ri_triggers.c:2713 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "la funzione \"%s\" non è stata invocata dal trigger manager" -#: commands/constraint.c:67 utils/adt/ri_triggers.c:2708 +#: commands/constraint.c:67 utils/adt/ri_triggers.c:2722 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "la funzione \"%s\" deve essere eseguita AFTER ROW" @@ -4289,691 +4882,721 @@ msgstr "la codifica di destinazione \"%s\" non esiste" msgid "encoding conversion function %s must return type \"void\"" msgstr "la funzioni di conversione dell'encoding %s deve restituire il tipo \"void\"" -#: commands/copy.c:360 commands/copy.c:372 commands/copy.c:406 -#: commands/copy.c:416 +#: commands/copy.c:365 commands/copy.c:377 commands/copy.c:411 +#: commands/copy.c:423 #, c-format msgid "COPY BINARY is not supported to stdout or from stdin" msgstr "COPY BINARY non è supportato verso stdout o da stdin" -#: commands/copy.c:514 +#: commands/copy.c:523 #, c-format msgid "could not write to COPY program: %m" msgstr "scrittura nel programma COPY fallita: %m" -#: commands/copy.c:519 +#: commands/copy.c:528 #, c-format msgid "could not write to COPY file: %m" msgstr "scrittura nel file COPY fallita: %m" -#: commands/copy.c:532 +#: commands/copy.c:541 #, c-format msgid "connection lost during COPY to stdout" msgstr "connessione persa durante COPY verso stdout" -#: commands/copy.c:573 +#: commands/copy.c:582 #, c-format msgid "could not read from COPY file: %m" msgstr "lettura dal file COPY fallita: %m" -#: commands/copy.c:589 commands/copy.c:608 commands/copy.c:612 -#: tcop/fastpath.c:293 tcop/postgres.c:342 tcop/postgres.c:378 +#: commands/copy.c:598 commands/copy.c:619 commands/copy.c:623 +#: tcop/postgres.c:352 tcop/postgres.c:388 tcop/postgres.c:415 #, c-format msgid "unexpected EOF on client connection with an open transaction" msgstr "fine-file inaspettato sulla connessione del client con una transazione aperta" -#: commands/copy.c:624 +#: commands/copy.c:636 #, c-format msgid "COPY from stdin failed: %s" msgstr "COPY da stdin fallita: %s" -#: commands/copy.c:640 +#: commands/copy.c:652 #, c-format msgid "unexpected message type 0x%02X during COPY from stdin" msgstr "messaggio del tipo inaspettato 0x%02X durante COPY da stdin" -#: commands/copy.c:794 +#: commands/copy.c:808 #, c-format msgid "must be superuser to COPY to or from an external program" msgstr "occorre essere un superutente per effettuare COPY da o verso un programma esterno" -#: commands/copy.c:795 commands/copy.c:801 +#: commands/copy.c:809 commands/copy.c:815 #, c-format msgid "Anyone can COPY to stdout or from stdin. psql's \\copy command also works for anyone." msgstr "Chiunque può eseguire COPY verso stdout e da stdin. Anche il comando \\copy di psql funziona per chiunque." -#: commands/copy.c:800 +#: commands/copy.c:814 #, c-format msgid "must be superuser to COPY to or from a file" msgstr "bisogna essere un superutente per eseguire un COPY da o verso un file" -#: commands/copy.c:936 +#: commands/copy.c:880 +#, c-format +msgid "COPY FROM not supported with row level security." +msgstr "COPY FROM non supportato con questo livello di sicurezza di righe." + +#: commands/copy.c:881 +#, c-format +msgid "Use direct INSERT statements instead." +msgstr "Usa istruzioni INSERT dirette invece." + +#: commands/copy.c:1021 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "Formato di COPY \"%s\" non riconosciuto" -#: commands/copy.c:1007 commands/copy.c:1021 commands/copy.c:1035 -#: commands/copy.c:1055 +#: commands/copy.c:1092 commands/copy.c:1106 commands/copy.c:1120 +#: commands/copy.c:1140 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "l'argomento dell'opzione \"%s\" dev'essere una lista di nomi di colonne" -#: commands/copy.c:1068 +#: commands/copy.c:1153 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "l'argomento dell'opzione \"%s\" dev'essere un nome di codifica valido" -#: commands/copy.c:1074 +#: commands/copy.c:1159 commands/dbcommands.c:232 commands/dbcommands.c:1427 #, c-format msgid "option \"%s\" not recognized" msgstr "opzione \"%s\" non riconosciuta" -#: commands/copy.c:1085 +#: commands/copy.c:1170 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "non è possibile specificare DELIMITER in BINARY mode" -#: commands/copy.c:1090 +#: commands/copy.c:1175 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "non è possibile specificare NULL in BINARY mode" -#: commands/copy.c:1112 +#: commands/copy.c:1197 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "il delimitatore di COPY deve essere un solo carattere di un solo byte" -#: commands/copy.c:1119 +#: commands/copy.c:1204 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "Il delimitatore di COPY non può essere una \"nuova riga\" o un \"ritorno carrello\"" -#: commands/copy.c:1125 +#: commands/copy.c:1210 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "la rappresentazione dei null in COPY non può usare \"nuova riga\" o \"ritorno carrello\"" -#: commands/copy.c:1142 +#: commands/copy.c:1227 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "il delimitatore di COPY non può essere \"%s\"" -#: commands/copy.c:1148 +#: commands/copy.c:1233 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "l'HEADER di COPY è disponibile solo in modalità CSV" -#: commands/copy.c:1154 +#: commands/copy.c:1239 #, c-format msgid "COPY quote available only in CSV mode" msgstr "il quoting di COPY è disponibile solo in modalità CSV" -#: commands/copy.c:1159 +#: commands/copy.c:1244 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "il quote di COPY dev'essere un solo carattere di un byte" -#: commands/copy.c:1164 +#: commands/copy.c:1249 #, c-format msgid "COPY delimiter and quote must be different" msgstr "il delimitatore e il quote di COPY devono essere diversi" -#: commands/copy.c:1170 +#: commands/copy.c:1255 #, c-format msgid "COPY escape available only in CSV mode" msgstr "l'escape di COPY è disponibile solo in modalità CSV" -#: commands/copy.c:1175 +#: commands/copy.c:1260 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "l'escape di COPY deve essere un solo carattere di un byte" -#: commands/copy.c:1181 +#: commands/copy.c:1266 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "il \"force quote\" di COPY è disponibile solo in modalità CSV" -#: commands/copy.c:1185 +#: commands/copy.c:1270 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "il \"force quote\" di COPY è disponibile solo in modalità CSV" -#: commands/copy.c:1191 +#: commands/copy.c:1276 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "il \"force not null\" di COPY è disponibile solo in modalità CSV" -#: commands/copy.c:1195 +#: commands/copy.c:1280 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "il \"force not null\" di COPY è disponibile solo in COPY FROM" -#: commands/copy.c:1201 +#: commands/copy.c:1286 #, c-format msgid "COPY force null available only in CSV mode" msgstr "il \"force null\" di COPY è disponibile solo in modalità CSV" -#: commands/copy.c:1206 +#: commands/copy.c:1291 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "il \"force null\" di COPY è disponibile solo usando COPY FROM" -#: commands/copy.c:1212 +#: commands/copy.c:1297 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "il delimitatore di COPY non deve apparire nella specificazione di NULL" -#: commands/copy.c:1219 +#: commands/copy.c:1304 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "Il carattere quote del CSV non deve apparire nella specificazione di NULL" -#: commands/copy.c:1281 +#: commands/copy.c:1367 #, c-format msgid "table \"%s\" does not have OIDs" msgstr "la tabella \"%s\" non ha OID" -#: commands/copy.c:1298 +#: commands/copy.c:1384 #, c-format msgid "COPY (SELECT) WITH OIDS is not supported" msgstr "COPY (SELECT) WITH OIDS non è supportata" -#: commands/copy.c:1324 +#: commands/copy.c:1410 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) non è supportata" -#: commands/copy.c:1387 +#: commands/copy.c:1440 +#, c-format +msgid "relation referenced by COPY statement has changed" +msgstr "la relazione referenziata dall'istruzione COPY è cambiata" + +#: commands/copy.c:1498 #, c-format msgid "FORCE QUOTE column \"%s\" not referenced by COPY" msgstr "la colonna FORCE QUOTE \"%s\" non è referenziata da COPY" -#: commands/copy.c:1409 +#: commands/copy.c:1520 #, c-format msgid "FORCE NOT NULL column \"%s\" not referenced by COPY" msgstr "la colonna FORCE NOT NULL \"%s\" non è referenziata da COPY" -#: commands/copy.c:1431 +#: commands/copy.c:1542 #, c-format msgid "FORCE NULL column \"%s\" not referenced by COPY" msgstr "la colonna FORCE NULL \"%s\" non è referenziata da COPY" -#: commands/copy.c:1495 +#: commands/copy.c:1607 #, c-format msgid "could not close pipe to external command: %m" msgstr "chiusura della pipe per verso il comando esterno fallita: %m" -#: commands/copy.c:1498 +#: commands/copy.c:1611 #, c-format msgid "program \"%s\" failed" msgstr "programma \"%s\" fallito" -#: commands/copy.c:1547 +#: commands/copy.c:1661 #, c-format msgid "cannot copy from view \"%s\"" msgstr "non è possibile copiare dalla vista \"%s\"" -#: commands/copy.c:1549 commands/copy.c:1555 commands/copy.c:1561 +#: commands/copy.c:1663 commands/copy.c:1669 commands/copy.c:1675 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "Prova la variante COPY (SELECT ...) TO." -#: commands/copy.c:1553 +#: commands/copy.c:1667 #, c-format msgid "cannot copy from materialized view \"%s\"" msgstr "non è possibile copiare dalla vista materializzata \"%s\"" -#: commands/copy.c:1559 +#: commands/copy.c:1673 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "non è possibile copiare dalla tabella esterna \"%s\"" -#: commands/copy.c:1565 +#: commands/copy.c:1679 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "non è possibile copiare dalla sequenza \"%s\"" -#: commands/copy.c:1570 +#: commands/copy.c:1684 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "non è possibile copiare dalla relazione \"%s\" perché non è una tabella" -#: commands/copy.c:1593 commands/copy.c:2616 +#: commands/copy.c:1709 commands/copy.c:2747 #, c-format msgid "could not execute command \"%s\": %m" msgstr "esecuzione del comando \"%s\" fallita: %m" -#: commands/copy.c:1608 +#: commands/copy.c:1724 #, c-format msgid "relative path not allowed for COPY to file" msgstr "i percorsi relativi non sono consentiti per il COPY verso un file" -#: commands/copy.c:1616 +#: commands/copy.c:1732 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "apertura del file \"%s\" in scrittura fallita: %m" -#: commands/copy.c:1623 commands/copy.c:2634 +#: commands/copy.c:1744 commands/copy.c:2770 #, c-format msgid "\"%s\" is a directory" msgstr "\"%s\" è una directory" -#: commands/copy.c:1948 +#: commands/copy.c:2069 #, c-format msgid "COPY %s, line %d, column %s" msgstr "COPY %s, riga %d, colonna %s" -#: commands/copy.c:1952 commands/copy.c:1999 +#: commands/copy.c:2073 commands/copy.c:2120 #, c-format msgid "COPY %s, line %d" msgstr "COPY %s, riga %d" -#: commands/copy.c:1963 +#: commands/copy.c:2084 #, c-format msgid "COPY %s, line %d, column %s: \"%s\"" msgstr "COPY %s, riga %d, colonna %s: \"%s\"" -#: commands/copy.c:1971 +#: commands/copy.c:2092 #, c-format msgid "COPY %s, line %d, column %s: null input" msgstr "COPY %s, riga %d, colonna %s: input nullo" -#: commands/copy.c:1993 +#: commands/copy.c:2114 #, c-format msgid "COPY %s, line %d: \"%s\"" msgstr "COPY %s, riga %d: \"%s\"" -#: commands/copy.c:2077 +#: commands/copy.c:2198 #, c-format msgid "cannot copy to view \"%s\"" msgstr "non è possibile copiare verso la vista \"%s\"" -#: commands/copy.c:2082 +#: commands/copy.c:2203 #, c-format msgid "cannot copy to materialized view \"%s\"" msgstr "non è possibile copiare verso la vista materializzata \"%s\"" -#: commands/copy.c:2087 +#: commands/copy.c:2208 #, c-format msgid "cannot copy to foreign table \"%s\"" msgstr "non è possibile copiare verso la tabella esterna \"%s\"" -#: commands/copy.c:2092 +#: commands/copy.c:2213 #, c-format msgid "cannot copy to sequence \"%s\"" msgstr "non è possibile copiare verso sequenza \"%s\"" -#: commands/copy.c:2097 +#: commands/copy.c:2218 #, c-format msgid "cannot copy to non-table relation \"%s\"" msgstr "non è possibile copiare verso la relazione \"%s\" perché non è una tabella" -#: commands/copy.c:2160 +#: commands/copy.c:2281 #, c-format msgid "cannot perform FREEZE because of prior transaction activity" msgstr "non è possibile eseguire FREEZE a causa di precedente attività della transazione" -#: commands/copy.c:2166 +#: commands/copy.c:2287 #, c-format msgid "cannot perform FREEZE because the table was not created or truncated in the current subtransaction" msgstr "non è possibile eseguire FREEZE perché la tabella non è stata creata o troncata nella sottotransazione corrente" -#: commands/copy.c:2627 utils/adt/genfile.c:123 +#: commands/copy.c:2758 commands/extension.c:3037 utils/adt/genfile.c:134 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "apertura del file \"%s\" in lettura fallita: %m" -#: commands/copy.c:2654 +#: commands/copy.c:2790 #, c-format msgid "COPY file signature not recognized" msgstr "formato del file COPY non riconosciuto" -#: commands/copy.c:2659 +#: commands/copy.c:2795 #, c-format msgid "invalid COPY file header (missing flags)" msgstr "intestazione del file COPY non valida (flag mancanti)" -#: commands/copy.c:2665 +#: commands/copy.c:2801 #, c-format msgid "unrecognized critical flags in COPY file header" msgstr "alcune flag critici non sono stati riconosciuti nell'intestazione del file COPY" -#: commands/copy.c:2671 +#: commands/copy.c:2807 #, c-format msgid "invalid COPY file header (missing length)" msgstr "intestazione del file COPY non valida (manca la lunghezza)" -#: commands/copy.c:2678 +#: commands/copy.c:2814 #, c-format msgid "invalid COPY file header (wrong length)" msgstr "intestazione del file COPY non valida (lunghezza errata)" -#: commands/copy.c:2811 commands/copy.c:3518 commands/copy.c:3748 +#: commands/copy.c:2947 commands/copy.c:3654 commands/copy.c:3884 #, c-format msgid "extra data after last expected column" msgstr "ci sono dati in eccesso dopo l'ultima colonna attesa" -#: commands/copy.c:2821 +#: commands/copy.c:2957 #, c-format msgid "missing data for OID column" msgstr "dati per la colonna OID mancanti" -#: commands/copy.c:2827 +#: commands/copy.c:2963 #, c-format msgid "null OID in COPY data" msgstr "OID nullo nei dati da COPY" -#: commands/copy.c:2837 commands/copy.c:2960 +#: commands/copy.c:2973 commands/copy.c:3096 #, c-format msgid "invalid OID in COPY data" msgstr "OID non valido nei dati da COPY" -#: commands/copy.c:2852 +#: commands/copy.c:2988 #, c-format msgid "missing data for column \"%s\"" msgstr "dati mancanti per la colonna \"%s\"" -#: commands/copy.c:2935 +#: commands/copy.c:3071 #, c-format msgid "received copy data after EOF marker" msgstr "dati da copiare ricevuti dopo il segnalatore di fine file" -#: commands/copy.c:2942 +#: commands/copy.c:3078 #, c-format msgid "row field count is %d, expected %d" msgstr "il numero di campi è %d, ne erano attesi %d" -#: commands/copy.c:3282 commands/copy.c:3299 +#: commands/copy.c:3418 commands/copy.c:3435 #, c-format msgid "literal carriage return found in data" msgstr "\"ritorno carrello\" trovato nei dati" -#: commands/copy.c:3283 commands/copy.c:3300 +#: commands/copy.c:3419 commands/copy.c:3436 #, c-format msgid "unquoted carriage return found in data" msgstr "\"ritorno carrello\" non quotato trovato nei dati" -#: commands/copy.c:3285 commands/copy.c:3302 +#: commands/copy.c:3421 commands/copy.c:3438 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "Usa \"\\r\" per rappresentare i caratteri \"ritorno carrello\"." -#: commands/copy.c:3286 commands/copy.c:3303 +#: commands/copy.c:3422 commands/copy.c:3439 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "Usa un campo CSV quotato per rappresentare i caratteri \"ritorno carrello\"." -#: commands/copy.c:3315 +#: commands/copy.c:3451 #, c-format msgid "literal newline found in data" msgstr "\"nuova riga\" letterale trovato nei dati" -#: commands/copy.c:3316 +#: commands/copy.c:3452 #, c-format msgid "unquoted newline found in data" msgstr "\"nuova riga\" non quotato trovato nei dati" -#: commands/copy.c:3318 +#: commands/copy.c:3454 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "Usa \"\\n\" per rappresentare i caratteri \"nuova riga\"." -#: commands/copy.c:3319 +#: commands/copy.c:3455 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "Usa un campo CSV quotato per rappresentare i caratteri \"nuova riga\"." -#: commands/copy.c:3365 commands/copy.c:3401 +#: commands/copy.c:3501 commands/copy.c:3537 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "il marcatore di fine copia non combacia con il precedente stile \"nuova riga\"" -#: commands/copy.c:3374 commands/copy.c:3390 +#: commands/copy.c:3510 commands/copy.c:3526 #, c-format msgid "end-of-copy marker corrupt" msgstr "il marcatore di fine copia è corrotto" -#: commands/copy.c:3832 +#: commands/copy.c:3968 #, c-format msgid "unterminated CSV quoted field" msgstr "campo CSV tra virgolette non terminato" -#: commands/copy.c:3909 commands/copy.c:3928 +#: commands/copy.c:4045 commands/copy.c:4064 #, c-format msgid "unexpected EOF in COPY data" msgstr "fine file inattesa dei dati da COPY" -#: commands/copy.c:3918 +#: commands/copy.c:4054 #, c-format msgid "invalid field size" msgstr "dimensione del campo non valida" -#: commands/copy.c:3941 +#: commands/copy.c:4077 #, c-format msgid "incorrect binary data format" msgstr "formato di dati binari non corretto" -#: commands/copy.c:4252 commands/indexcmds.c:993 commands/tablecmds.c:1427 -#: commands/tablecmds.c:2237 parser/parse_relation.c:2889 -#: utils/adt/tsvector_op.c:1417 +#: commands/copy.c:4388 commands/indexcmds.c:1008 commands/tablecmds.c:1458 +#: commands/tablecmds.c:2281 parser/parse_relation.c:3078 +#: parser/parse_relation.c:3098 utils/adt/tsvector_op.c:1417 #, c-format msgid "column \"%s\" does not exist" msgstr "la colonna \"%s\" non esiste" -#: commands/copy.c:4259 commands/tablecmds.c:1453 commands/trigger.c:644 -#: parser/parse_target.c:936 parser/parse_target.c:947 +#: commands/copy.c:4395 commands/tablecmds.c:1484 commands/trigger.c:652 +#: parser/parse_target.c:956 parser/parse_target.c:967 #, c-format msgid "column \"%s\" specified more than once" msgstr "la colonna \"%s\" è stata specificata più di una volta" -#: commands/createas.c:353 +#: commands/createas.c:383 #, c-format msgid "too many column names were specified" msgstr "troppi nomi di colonne specificati" -#: commands/dbcommands.c:203 +#: commands/createas.c:452 +#, c-format +msgid "policies not yet implemented for this command" +msgstr "politiche per questo comando non ancora implementate" + +#: commands/dbcommands.c:226 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATION non è più supportato" -#: commands/dbcommands.c:204 +#: commands/dbcommands.c:227 #, c-format msgid "Consider using tablespaces instead." msgstr "Puoi prendere in considerazione l'uso dei tablespace." -#: commands/dbcommands.c:227 utils/adt/ascii.c:144 +#: commands/dbcommands.c:251 utils/adt/ascii.c:144 #, c-format msgid "%d is not a valid encoding code" msgstr "%d non è un codice di codifica valido" -#: commands/dbcommands.c:237 utils/adt/ascii.c:126 +#: commands/dbcommands.c:261 utils/adt/ascii.c:126 #, c-format msgid "%s is not a valid encoding name" msgstr "%s non è un nome di codifica valido" -#: commands/dbcommands.c:255 commands/dbcommands.c:1404 commands/user.c:260 -#: commands/user.c:601 +#: commands/dbcommands.c:279 commands/dbcommands.c:1458 commands/user.c:271 +#: commands/user.c:635 #, c-format msgid "invalid connection limit: %d" msgstr "limite di connessioni non valido: %d" -#: commands/dbcommands.c:274 +#: commands/dbcommands.c:298 #, c-format msgid "permission denied to create database" msgstr "permesso di creare il database negato" -#: commands/dbcommands.c:297 +#: commands/dbcommands.c:321 #, c-format msgid "template database \"%s\" does not exist" msgstr "il modello di database \"%s\" non esiste" -#: commands/dbcommands.c:309 +#: commands/dbcommands.c:333 #, c-format msgid "permission denied to copy database \"%s\"" msgstr "permesso di copiare il database \"%s\" negato" -#: commands/dbcommands.c:325 +#: commands/dbcommands.c:349 #, c-format msgid "invalid server encoding %d" msgstr "codifica del server non valida: %d" -#: commands/dbcommands.c:331 commands/dbcommands.c:336 +#: commands/dbcommands.c:355 commands/dbcommands.c:360 #, c-format msgid "invalid locale name: \"%s\"" msgstr "nome locale non valido \"%s\"" -#: commands/dbcommands.c:356 +#: commands/dbcommands.c:380 #, c-format msgid "new encoding (%s) is incompatible with the encoding of the template database (%s)" msgstr "la nuova codifica (%s) è incompatibile con la codifica del modello di database (%s)" -#: commands/dbcommands.c:359 +#: commands/dbcommands.c:383 #, c-format msgid "Use the same encoding as in the template database, or use template0 as template." msgstr "Usa la stessa codifica del modello di database, o usa template0 come modello." -#: commands/dbcommands.c:364 +#: commands/dbcommands.c:388 #, c-format msgid "new collation (%s) is incompatible with the collation of the template database (%s)" msgstr "il nuovo ordinamento (%s) non è compatibile con l'ordinamento del modello del database (%s)" -#: commands/dbcommands.c:366 +#: commands/dbcommands.c:390 #, c-format msgid "Use the same collation as in the template database, or use template0 as template." msgstr "Usa lo stesso ordinamento del modello di database, o usa template0 come modello." -#: commands/dbcommands.c:371 +#: commands/dbcommands.c:395 #, c-format msgid "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database (%s)" msgstr "il nuovo LC_CTYPE (%s) è incompatibile con l'LC_CTYPE del modello del database (%s)" -#: commands/dbcommands.c:373 +#: commands/dbcommands.c:397 #, c-format msgid "Use the same LC_CTYPE as in the template database, or use template0 as template." msgstr "Usa lo stesso LC_CTYPE del modello di database, o usa template0 come modello." -#: commands/dbcommands.c:395 commands/dbcommands.c:1088 +#: commands/dbcommands.c:419 commands/dbcommands.c:1113 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "pg_global non può essere usato come tablespace predefinito" -#: commands/dbcommands.c:421 +#: commands/dbcommands.c:445 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "non è possibile assegnare il nuovo tablespace predefinito \"%s\"" -#: commands/dbcommands.c:423 +#: commands/dbcommands.c:447 #, c-format msgid "There is a conflict because database \"%s\" already has some tables in this tablespace." msgstr "C'è un conflitto perché il database \"%s\" ha già alcune tabelle in questo tablespace." -#: commands/dbcommands.c:443 commands/dbcommands.c:959 +#: commands/dbcommands.c:467 commands/dbcommands.c:982 #, c-format msgid "database \"%s\" already exists" msgstr "il database \"%s\" esiste già" -#: commands/dbcommands.c:457 +#: commands/dbcommands.c:481 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "il database sorgente \"%s\" ha attualmente altri utenti collegati" -#: commands/dbcommands.c:704 commands/dbcommands.c:719 +#: commands/dbcommands.c:726 commands/dbcommands.c:741 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "la codifica \"%s\" non corrisponde al locale \"%s\"" -#: commands/dbcommands.c:707 +#: commands/dbcommands.c:729 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "L'impostazione LC_CTYPE scelta richiede la codifica \"%s\"." -#: commands/dbcommands.c:722 +#: commands/dbcommands.c:744 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "L'impostazione LC_COLLATE scelta richiede la codifica \"%s\"." -#: commands/dbcommands.c:782 +#: commands/dbcommands.c:804 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "il database \"%s\" non esiste, saltato" -#: commands/dbcommands.c:806 +#: commands/dbcommands.c:828 #, c-format msgid "cannot drop a template database" msgstr "non è possibile eliminare un modello di database" -#: commands/dbcommands.c:812 +#: commands/dbcommands.c:834 #, c-format msgid "cannot drop the currently open database" msgstr "non si può eliminare il database aperto attualmente" -#: commands/dbcommands.c:822 +#: commands/dbcommands.c:844 #, c-format msgid "database \"%s\" is used by a logical replication slot" msgstr "il database \"%s\" è usato da uno slot di replica logica" -#: commands/dbcommands.c:824 +#: commands/dbcommands.c:846 #, c-format msgid "There is %d slot, %d of them active." msgid_plural "There are %d slots, %d of them active." msgstr[0] "Ci sono %d slot, di cui %d attivi." msgstr[1] "Ci sono %d slot, di cui %d attivi." -#: commands/dbcommands.c:838 commands/dbcommands.c:981 -#: commands/dbcommands.c:1110 +#: commands/dbcommands.c:860 commands/dbcommands.c:1004 +#: commands/dbcommands.c:1135 #, c-format msgid "database \"%s\" is being accessed by other users" msgstr "il database \"%s\" è attualmente utilizzato da altri utenti" -#: commands/dbcommands.c:950 +#: commands/dbcommands.c:973 #, c-format msgid "permission denied to rename database" msgstr "permesso di rinominare il database negato" -#: commands/dbcommands.c:970 +#: commands/dbcommands.c:993 #, c-format msgid "current database cannot be renamed" msgstr "il database corrente non può essere rinominato" -#: commands/dbcommands.c:1066 +#: commands/dbcommands.c:1091 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "non è possibile cambiare il tablespace del database attualmente aperto" -#: commands/dbcommands.c:1169 +#: commands/dbcommands.c:1194 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "alcune relazioni del database \"%s\" sono già nel tablespace \"%s\"" -#: commands/dbcommands.c:1171 +#: commands/dbcommands.c:1196 #, c-format msgid "You must move them back to the database's default tablespace before using this command." msgstr "Occorre spostarle di nuovo nel tablespace di default del database prima di usare questo comando." -#: commands/dbcommands.c:1302 commands/dbcommands.c:1790 -#: commands/dbcommands.c:1996 commands/dbcommands.c:2044 -#: commands/tablespace.c:604 +#: commands/dbcommands.c:1325 commands/dbcommands.c:1868 +#: commands/dbcommands.c:2072 commands/dbcommands.c:2120 +#: commands/tablespace.c:605 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "alcuni file inutili possono essere stati lasciati nella vecchia directory del database \"%s\"" -#: commands/dbcommands.c:1558 +#: commands/dbcommands.c:1440 +#, c-format +msgid "option \"%s\" cannot be specified with other options" +msgstr "l'opzione \"%s\" non può essere specificata con altre opzioni" + +#: commands/dbcommands.c:1494 +#, c-format +msgid "cannot disallow connections for current database" +msgstr "non è possibile rifiutare connessioni per il database corrente" + +#: commands/dbcommands.c:1634 #, c-format msgid "permission denied to change owner of database" msgstr "permesso di cambiare il proprietario del database negato" -#: commands/dbcommands.c:1879 +#: commands/dbcommands.c:1955 #, c-format msgid "There are %d other session(s) and %d prepared transaction(s) using the database." msgstr "Ci sono altre %d sessioni e %d transazioni preparate che stanno usando il database." -#: commands/dbcommands.c:1882 +#: commands/dbcommands.c:1958 #, c-format msgid "There is %d other session using the database." msgid_plural "There are %d other sessions using the database." msgstr[0] "Ci sono %d altra sessione che sta usando il database." msgstr[1] "Ci sono altre %d sessioni che stanno usando il database." -#: commands/dbcommands.c:1887 +#: commands/dbcommands.c:1963 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." @@ -5017,8 +5640,8 @@ msgstr "l'argomento di %s deve essere il nome di un tipo" msgid "invalid argument for %s: \"%s\"" msgstr "argomento non valido per %s: \"%s\"" -#: commands/dropcmds.c:112 commands/functioncmds.c:1110 -#: utils/adt/ruleutils.c:1936 +#: commands/dropcmds.c:112 commands/functioncmds.c:1166 +#: utils/adt/ruleutils.c:1950 #, c-format msgid "\"%s\" is an aggregate function" msgstr "\"%s\" è una funzione di aggregazione" @@ -5028,389 +5651,414 @@ msgstr "\"%s\" è una funzione di aggregazione" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Usa DROP AGGREGATE per rimuovere le funzioni di aggregazione." -#: commands/dropcmds.c:165 commands/sequence.c:400 commands/tablecmds.c:2318 -#: commands/tablecmds.c:2499 commands/tablecmds.c:10625 tcop/utility.c:1006 +#: commands/dropcmds.c:165 commands/sequence.c:424 commands/tablecmds.c:2368 +#: commands/tablecmds.c:2519 commands/tablecmds.c:2561 +#: commands/tablecmds.c:11284 tcop/utility.c:1105 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "la relazione \"%s\" non esiste, saltata" -#: commands/dropcmds.c:195 commands/dropcmds.c:288 commands/tablecmds.c:713 +#: commands/dropcmds.c:195 commands/dropcmds.c:292 commands/tablecmds.c:740 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "lo schema \"%s\" non esiste, saltato" -#: commands/dropcmds.c:237 commands/dropcmds.c:269 commands/tablecmds.c:237 +#: commands/dropcmds.c:237 commands/dropcmds.c:272 commands/tablecmds.c:243 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "il tipo \"%s\" non esiste, saltato" -#: commands/dropcmds.c:276 +#: commands/dropcmds.c:280 #, c-format msgid "collation \"%s\" does not exist, skipping" msgstr "l'ordinamento \"%s\" non esiste, saltato" -#: commands/dropcmds.c:283 +#: commands/dropcmds.c:287 #, c-format msgid "conversion \"%s\" does not exist, skipping" msgstr "la conversione \"%s\" non esiste, saltata" -#: commands/dropcmds.c:294 +#: commands/dropcmds.c:298 #, c-format msgid "text search parser \"%s\" does not exist, skipping" msgstr "l'analizzatore di ricerca di testo \"%s\" non esiste, saltato" -#: commands/dropcmds.c:301 +#: commands/dropcmds.c:305 #, c-format msgid "text search dictionary \"%s\" does not exist, skipping" msgstr "il dizionario di ricerca di testo \"%s\" non esiste, saltato" -#: commands/dropcmds.c:308 +#: commands/dropcmds.c:312 #, c-format msgid "text search template \"%s\" does not exist, skipping" msgstr "il modello di ricerca di testo \"%s\" non esiste, saltato" -#: commands/dropcmds.c:315 +#: commands/dropcmds.c:319 #, c-format msgid "text search configuration \"%s\" does not exist, skipping" msgstr "la combinazione di ricerca di testo \"%s\" non esiste, saltato" -#: commands/dropcmds.c:320 +#: commands/dropcmds.c:324 #, c-format msgid "extension \"%s\" does not exist, skipping" msgstr "l'estensione \"%s\" non esiste, saltata" -#: commands/dropcmds.c:327 +#: commands/dropcmds.c:331 #, c-format msgid "function %s(%s) does not exist, skipping" msgstr "la funzione %s(%s) non esiste, saltata" -#: commands/dropcmds.c:336 +#: commands/dropcmds.c:340 #, c-format msgid "aggregate %s(%s) does not exist, skipping" msgstr "la funzione di aggregazione %s(%s) non esiste, saltato" -#: commands/dropcmds.c:345 +#: commands/dropcmds.c:349 #, c-format msgid "operator %s does not exist, skipping" msgstr "l'operatore %s non esiste, saltato" -#: commands/dropcmds.c:350 +#: commands/dropcmds.c:354 #, c-format msgid "language \"%s\" does not exist, skipping" msgstr "il linguaggio \"%s\" non esiste, saltato" -#: commands/dropcmds.c:359 +#: commands/dropcmds.c:363 #, c-format msgid "cast from type %s to type %s does not exist, skipping" msgstr "la conversione dal tipo %s al tipo %s non esiste, saltata" -#: commands/dropcmds.c:368 +#: commands/dropcmds.c:372 +#, c-format +msgid "transform for type %s language \"%s\" does not exist, skipping" +msgstr "la trasformazione per il tipo %s linguaggio \"%s\" non esiste, saltata" + +#: commands/dropcmds.c:380 #, c-format msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" msgstr "il trigger \"%s\" per la relazione \"%s\" non esiste, saltato" -#: commands/dropcmds.c:375 +#: commands/dropcmds.c:389 +#, c-format +msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" +msgstr "la politica \"%s\" per la relazione \"%s\" non esiste, saltata" + +#: commands/dropcmds.c:396 #, c-format msgid "event trigger \"%s\" does not exist, skipping" msgstr "il trigger di evento \"%s\" non esiste, saltato" -#: commands/dropcmds.c:381 +#: commands/dropcmds.c:402 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" msgstr "la regola \"%s\" per la relazione \"%s\" non esiste, saltata" -#: commands/dropcmds.c:388 +#: commands/dropcmds.c:409 #, c-format msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "il wrapper di dati remoti \"%s\" non esiste, saltato" -#: commands/dropcmds.c:392 +#: commands/dropcmds.c:413 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "il server \"%s\" non esiste, saltato" -#: commands/dropcmds.c:398 +#: commands/dropcmds.c:422 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\", skipping" msgstr "la classe di operatori \"%s\" non esiste per il metodo di accesso \"%s\", saltata" -#: commands/dropcmds.c:406 +#: commands/dropcmds.c:434 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\", skipping" msgstr "la famiglia di operatori \"%s\" non esiste per il metodo di accesso \"%s\", saltata" -#: commands/event_trigger.c:149 +#: commands/event_trigger.c:181 #, c-format msgid "permission denied to create event trigger \"%s\"" msgstr "permesso di creare il trigger di evento \"%s\" negato" -#: commands/event_trigger.c:151 +#: commands/event_trigger.c:183 #, c-format msgid "Must be superuser to create an event trigger." msgstr "Solo un superutente può creare un trigger di evento." -#: commands/event_trigger.c:159 +#: commands/event_trigger.c:192 #, c-format msgid "unrecognized event name \"%s\"" msgstr "nome dell'evento \"%s\" sconosciuto" -#: commands/event_trigger.c:176 +#: commands/event_trigger.c:209 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "variabile filtro \"%s\" sconosciuta" -#: commands/event_trigger.c:203 +#: commands/event_trigger.c:239 #, c-format msgid "function \"%s\" must return type \"event_trigger\"" msgstr "la funzione \"%s\" deve restituire il tipo \"event_trigger\"" -#: commands/event_trigger.c:228 +#: commands/event_trigger.c:264 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "valore del filtro \"%s\" sconosciuto per la variabile filtro \"%s\"" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:234 +#: commands/event_trigger.c:270 commands/event_trigger.c:340 #, c-format msgid "event triggers are not supported for %s" msgstr "trigger di eventi non supportati per %s" -#: commands/event_trigger.c:289 +#: commands/event_trigger.c:363 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "la variabile filtro \"%s\" è specificata più di una volta" -#: commands/event_trigger.c:437 commands/event_trigger.c:480 -#: commands/event_trigger.c:571 +#: commands/event_trigger.c:511 commands/event_trigger.c:555 +#: commands/event_trigger.c:648 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "il trigger di evento \"%s\" non esiste" -#: commands/event_trigger.c:539 +#: commands/event_trigger.c:616 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "permesso di cambiare il proprietario del trigger di evento \"%s\" negato" -#: commands/event_trigger.c:541 +#: commands/event_trigger.c:618 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "Il proprietario di un trigger di evento deve essere un superutente." -#: commands/event_trigger.c:1219 +#: commands/event_trigger.c:1439 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%s può essere chiamata solo in una funzione trigger di evento sql_drop" -#: commands/event_trigger.c:1226 commands/extension.c:1646 -#: commands/extension.c:1755 commands/extension.c:1948 commands/prepare.c:702 -#: executor/execQual.c:1739 executor/execQual.c:1764 executor/execQual.c:2139 -#: executor/execQual.c:5315 executor/functions.c:1018 foreign/foreign.c:421 -#: replication/logical/logicalfuncs.c:310 replication/slotfuncs.c:173 -#: replication/walsender.c:2746 utils/adt/jsonfuncs.c:1386 -#: utils/adt/jsonfuncs.c:1518 utils/adt/jsonfuncs.c:1708 -#: utils/adt/jsonfuncs.c:1837 utils/adt/jsonfuncs.c:2601 -#: utils/fmgr/funcapi.c:61 utils/mmgr/portalmem.c:986 +#: commands/event_trigger.c:1446 commands/event_trigger.c:1997 +#: commands/extension.c:1645 commands/extension.c:1754 +#: commands/extension.c:1947 commands/prepare.c:701 executor/execQual.c:1735 +#: executor/execQual.c:1760 executor/execQual.c:2135 executor/execQual.c:5356 +#: executor/functions.c:1021 foreign/foreign.c:491 +#: replication/logical/logicalfuncs.c:312 replication/logical/origin.c:1410 +#: replication/slotfuncs.c:189 replication/walsender.c:2742 +#: utils/adt/jsonfuncs.c:1474 utils/adt/jsonfuncs.c:1606 +#: utils/adt/jsonfuncs.c:1796 utils/adt/jsonfuncs.c:1925 +#: utils/adt/jsonfuncs.c:2693 utils/adt/pgstatfuncs.c:547 +#: utils/fmgr/funcapi.c:61 utils/misc/guc.c:8225 utils/mmgr/portalmem.c:986 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "la funzione che restituisce insiemi è chiamata in un contesto che non può accettare un insieme" -#: commands/event_trigger.c:1230 commands/extension.c:1650 -#: commands/extension.c:1759 commands/extension.c:1952 commands/prepare.c:706 -#: foreign/foreign.c:426 replication/logical/logicalfuncs.c:314 -#: replication/slotfuncs.c:177 replication/walsender.c:2750 +#: commands/event_trigger.c:1450 commands/event_trigger.c:2001 +#: commands/extension.c:1649 commands/extension.c:1758 +#: commands/extension.c:1951 commands/prepare.c:705 foreign/foreign.c:496 +#: replication/logical/logicalfuncs.c:316 replication/logical/origin.c:1414 +#: replication/slotfuncs.c:193 replication/walsender.c:2746 +#: utils/adt/pgstatfuncs.c:551 utils/misc/guc.c:8229 #: utils/mmgr/portalmem.c:990 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "necessaria modalità materializzata, ma non ammessa in questo contesto" -#: commands/explain.c:169 +#: commands/event_trigger.c:1559 commands/event_trigger.c:1580 +#, c-format +msgid "%s can only be called in a table_rewrite event trigger function" +msgstr "%s può essere chiamata solo in una funzione trigger di evento table_rewrite" + +#: commands/event_trigger.c:1990 +#, c-format +msgid "%s can only be called in an event trigger function" +msgstr "%s può essere chiamata solo in una funzione trigger di evento" + +#: commands/explain.c:184 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "valore sconosciuto per l'opzione di EXPLAIN \"%s\": \"%s\"" -#: commands/explain.c:175 +#: commands/explain.c:190 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "opzione di EXPLAIN non riconosciuta \"%s\"" -#: commands/explain.c:182 +#: commands/explain.c:197 #, c-format msgid "EXPLAIN option BUFFERS requires ANALYZE" msgstr "l'opzione BUFFERS di EXPLAIN richiede ANALYZE" -#: commands/explain.c:191 +#: commands/explain.c:206 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "l'opzione TIMING di EXPLAIN richiede ANALYZE" -#: commands/extension.c:148 commands/extension.c:2628 +#: commands/extension.c:152 commands/extension.c:2635 #, c-format msgid "extension \"%s\" does not exist" msgstr "l'estensione \"%s\" non esiste" -#: commands/extension.c:247 commands/extension.c:256 commands/extension.c:268 -#: commands/extension.c:278 +#: commands/extension.c:251 commands/extension.c:260 commands/extension.c:272 +#: commands/extension.c:282 #, c-format msgid "invalid extension name: \"%s\"" msgstr "nome di estensione non valido: \"%s\"" -#: commands/extension.c:248 +#: commands/extension.c:252 #, c-format msgid "Extension names must not be empty." msgstr "I nomi delle estensioni non possono essere vuoti." -#: commands/extension.c:257 +#: commands/extension.c:261 #, c-format msgid "Extension names must not contain \"--\"." msgstr "I nomi delle estensioni non possono contenere \"--\"." -#: commands/extension.c:269 +#: commands/extension.c:273 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "I nomi delle estensioni non possono iniziare o finire con \"-\"." -#: commands/extension.c:279 +#: commands/extension.c:283 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "I nomi delle estensioni non possono contenere caratteri separatore directory." -#: commands/extension.c:294 commands/extension.c:303 commands/extension.c:312 -#: commands/extension.c:322 +#: commands/extension.c:298 commands/extension.c:307 commands/extension.c:316 +#: commands/extension.c:326 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "nome di versione dell'estensione non valido: \"%s\"" -#: commands/extension.c:295 +#: commands/extension.c:299 #, c-format msgid "Version names must not be empty." msgstr "I nomi di versione non possono essere vuoti." -#: commands/extension.c:304 +#: commands/extension.c:308 #, c-format msgid "Version names must not contain \"--\"." msgstr "I nomi di versione non possono contenere \"--\"." -#: commands/extension.c:313 +#: commands/extension.c:317 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "I nomi di versione non possono iniziare o finire con \"-\"." -#: commands/extension.c:323 +#: commands/extension.c:327 #, c-format msgid "Version names must not contain directory separator characters." msgstr "I nomi di versione non possono contenere caratteri separatore directory." -#: commands/extension.c:473 +#: commands/extension.c:477 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "apertura del file di controllo dell'estensione \"%s\" fallita: %m" -#: commands/extension.c:495 commands/extension.c:505 +#: commands/extension.c:499 commands/extension.c:509 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "il parametro \"%s\" non può essere impostato in un file di controllo secondario di estensione" -#: commands/extension.c:544 +#: commands/extension.c:548 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\" non è un nome di codifica valido" -#: commands/extension.c:558 +#: commands/extension.c:562 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "il parametro \"%s\" dev'essere una lista di nomi di estensioni" -#: commands/extension.c:565 +#: commands/extension.c:569 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "parametro sconosciuto \"%s\" nel file \"%s\"" -#: commands/extension.c:574 +#: commands/extension.c:578 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "il parametro \"schema\" non può essere specificato quando \"relocatable\" è abilitato" -#: commands/extension.c:722 +#: commands/extension.c:719 #, c-format msgid "transaction control statements are not allowed within an extension script" msgstr "le istruzioni di controllo di transazione non sono valide in uno script di estensione" -#: commands/extension.c:790 +#: commands/extension.c:787 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "permesso di creare l'estensione \"%s\" negato" -#: commands/extension.c:792 +#: commands/extension.c:789 #, c-format msgid "Must be superuser to create this extension." msgstr "Solo un superutente può creare questa estensione." -#: commands/extension.c:796 +#: commands/extension.c:793 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "permesso di modificare l'estensione \"%s\" negato" -#: commands/extension.c:798 +#: commands/extension.c:795 #, c-format msgid "Must be superuser to update this extension." msgstr "Solo un superutente può modificare questa estensione." -#: commands/extension.c:1080 +#: commands/extension.c:1077 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "l'estensione \"%s\" non ha un percorso di aggiornamento dalla versione \"%s\" alla versione \"%s\"" -#: commands/extension.c:1207 +#: commands/extension.c:1205 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "l'estensione \"%s\" esiste già, saltata" -#: commands/extension.c:1214 +#: commands/extension.c:1212 #, c-format msgid "extension \"%s\" already exists" msgstr "l'estensione \"%s\" esiste già" -#: commands/extension.c:1225 +#: commands/extension.c:1223 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "CREATE EXTENSION annidati non sono supportati" -#: commands/extension.c:1280 commands/extension.c:2688 +#: commands/extension.c:1278 commands/extension.c:2695 #, c-format msgid "version to install must be specified" msgstr "il nome di versione da installare deve essere specificato" -#: commands/extension.c:1297 +#: commands/extension.c:1295 #, c-format msgid "FROM version must be different from installation target version \"%s\"" msgstr "la versione FROM dev'essere diversa dalla versione \"%s\" oggetto dell'installazione" -#: commands/extension.c:1352 +#: commands/extension.c:1350 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "l'estensione \"%s\" dev'essere installata nello schema \"%s\"" -#: commands/extension.c:1436 commands/extension.c:2831 +#: commands/extension.c:1434 commands/extension.c:2840 #, c-format msgid "required extension \"%s\" is not installed" msgstr "l'estensione richiesta \"%s\" non è installata" -#: commands/extension.c:1598 +#: commands/extension.c:1597 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "non è possibile eliminare l'estensione \"%s\" perché sta venendo modificata" -#: commands/extension.c:2069 +#: commands/extension.c:2068 #, c-format msgid "pg_extension_config_dump() can only be called from an SQL script executed by CREATE EXTENSION" msgstr "pg_extension_config_dump() può essere richiamata solo da uno script SQL eseguito da CREATE EXTENSION" -#: commands/extension.c:2081 +#: commands/extension.c:2080 #, c-format msgid "OID %u does not refer to a table" msgstr "l'OID %u non si riferisce ad una tabella" -#: commands/extension.c:2086 +#: commands/extension.c:2085 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "la tabella \"%s\" non è membra dell'estensione in fase di creazione" @@ -5430,32 +6078,37 @@ msgstr "l'estensione \"%s\" non supporta SET SCHEMA" msgid "%s is not in the extension's schema \"%s\"" msgstr "%s non è nello schema dell'estensione \"%s\"" -#: commands/extension.c:2608 +#: commands/extension.c:2615 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "ALTER EXTENSION annidati non sono supportati" -#: commands/extension.c:2699 +#: commands/extension.c:2706 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "la versione \"%s\" dell'estensione \"%s\" è già installata" -#: commands/extension.c:2938 +#: commands/extension.c:2957 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "non è possibile aggiungere lo schema \"%s\" all'estensione \"%s\" perché lo schema contiene l'estensione" -#: commands/extension.c:2956 +#: commands/extension.c:2975 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s non fa parte dell'estensione \"%s\"" -#: commands/foreigncmds.c:138 commands/foreigncmds.c:147 +#: commands/extension.c:3031 +#, c-format +msgid "file too large" +msgstr "file troppo largo" + +#: commands/foreigncmds.c:150 commands/foreigncmds.c:159 #, c-format msgid "option \"%s\" not found" msgstr "opzione \"%s\" non trovata" -#: commands/foreigncmds.c:157 +#: commands/foreigncmds.c:169 #, c-format msgid "option \"%s\" provided more than once" msgstr "opzione \"%s\" fornita più di una volta" @@ -5475,595 +6128,669 @@ msgstr "Solo un superutente può cambiare proprietario di un wrapper di dati est msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "Il proprietario di un wrapper di dati esterni dev'essere un superutente." -#: commands/foreigncmds.c:271 commands/foreigncmds.c:655 foreign/foreign.c:600 +#: commands/foreigncmds.c:292 commands/foreigncmds.c:709 foreign/foreign.c:670 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "il wrapper di dati esterni \"%s\" non esiste" -#: commands/foreigncmds.c:380 commands/foreigncmds.c:944 -#: commands/foreigncmds.c:1285 foreign/foreign.c:621 -#, c-format -msgid "server \"%s\" does not exist" -msgstr "il server \"%s\" non esiste" - -#: commands/foreigncmds.c:436 +#: commands/foreigncmds.c:489 #, c-format msgid "function %s must return type \"fdw_handler\"" msgstr "la funzione %s deve restituire un tipo \"fdw_handler\"" -#: commands/foreigncmds.c:531 +#: commands/foreigncmds.c:584 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "permesso di creare il wrapper di dati esterni \"%s\" negato" -#: commands/foreigncmds.c:533 +#: commands/foreigncmds.c:586 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "Solo un superutente può creare un wrapper di dati esterni." -#: commands/foreigncmds.c:645 +#: commands/foreigncmds.c:699 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "permesso di modificare il wrapper di dati esterni \"%s\" negato" -#: commands/foreigncmds.c:647 +#: commands/foreigncmds.c:701 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "Solo un superutente può modificare un wrapper di dati esterni." -#: commands/foreigncmds.c:678 +#: commands/foreigncmds.c:732 #, c-format msgid "changing the foreign-data wrapper handler can change behavior of existing foreign tables" msgstr "cambiare il gestore del wrapper di dati esterni può cambiare il comportamento di tabelle esterne esistenti" -#: commands/foreigncmds.c:693 +#: commands/foreigncmds.c:747 #, c-format msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" msgstr "cambiare il validatore del wrapper di dati esterni può rendere non valide le opzioni degli oggetti dipendenti" -#: commands/foreigncmds.c:1106 +#: commands/foreigncmds.c:1165 #, c-format msgid "user mapping \"%s\" already exists for server %s" msgstr "la mappatura utenti \"%s\" esiste già per il server %s" -#: commands/foreigncmds.c:1194 commands/foreigncmds.c:1301 +#: commands/foreigncmds.c:1259 commands/foreigncmds.c:1375 #, c-format msgid "user mapping \"%s\" does not exist for the server" msgstr "la mappatura utenti \"%s\" non esiste per il server" -#: commands/foreigncmds.c:1288 +#: commands/foreigncmds.c:1362 #, c-format msgid "server does not exist, skipping" msgstr "il server non esiste, saltato" -#: commands/foreigncmds.c:1306 +#: commands/foreigncmds.c:1380 #, c-format msgid "user mapping \"%s\" does not exist for the server, skipping" msgstr "la mappatura utenti \"%s\" non esiste per il server, saltata" -#: commands/functioncmds.c:98 +#: commands/foreigncmds.c:1532 foreign/foreign.c:360 +#, c-format +msgid "foreign-data wrapper \"%s\" has no handler" +msgstr "il wrapper di dati remoti \"%s\" non ha un handler" + +#: commands/foreigncmds.c:1538 +#, c-format +msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" +msgstr "il wrapper di dati remoti \"%s\" non supporta IMPORT FOREIGN SCHEMA" + +#: commands/foreigncmds.c:1631 +#, c-format +msgid "importing foreign table \"%s\"" +msgstr "importazione della tabella remota \"%s\"" + +#: commands/functioncmds.c:99 #, c-format msgid "SQL function cannot return shell type %s" msgstr "la funzione SQL non può restituire il tipo non completamente definito %s" -#: commands/functioncmds.c:103 +#: commands/functioncmds.c:104 #, c-format msgid "return type %s is only a shell" msgstr "il tipo restituito %s non è completamente definito" -#: commands/functioncmds.c:132 parser/parse_type.c:333 +#: commands/functioncmds.c:134 parser/parse_type.c:338 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "il modificatore di tipo non può essere specificato per il tipo non completamente definito \"%s\"" -#: commands/functioncmds.c:138 +#: commands/functioncmds.c:140 #, c-format msgid "type \"%s\" is not yet defined" msgstr "il tipo \"%s\" non è ancora definito" -#: commands/functioncmds.c:139 +#: commands/functioncmds.c:141 #, c-format msgid "Creating a shell type definition." msgstr "Creazione di un tipo non completamente definito." -#: commands/functioncmds.c:236 +#: commands/functioncmds.c:239 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "la funzione SQL non può accettare il tipo non completamente definito %s" -#: commands/functioncmds.c:242 +#: commands/functioncmds.c:245 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "l'aggregato non può accettare il tipo non completamente definito %s" -#: commands/functioncmds.c:247 +#: commands/functioncmds.c:250 #, c-format msgid "argument type %s is only a shell" msgstr "il tipo %s dell'argomento non è completamente definito" -#: commands/functioncmds.c:257 +#: commands/functioncmds.c:260 #, c-format msgid "type %s does not exist" msgstr "il tipo %s non esiste" -#: commands/functioncmds.c:271 +#: commands/functioncmds.c:274 #, c-format msgid "aggregates cannot accept set arguments" msgstr "gli aggregati non accettano insiemi come argomenti" -#: commands/functioncmds.c:275 +#: commands/functioncmds.c:278 #, c-format msgid "functions cannot accept set arguments" msgstr "le funzioni non accettano insiemi come argomenti" -#: commands/functioncmds.c:285 +#: commands/functioncmds.c:288 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "il parametro VARIADIC deve essere l'ultimo dei parametri di input" -#: commands/functioncmds.c:313 +#: commands/functioncmds.c:316 #, c-format msgid "VARIADIC parameter must be an array" msgstr "il parametro VARIADIC dev'essere un array" -#: commands/functioncmds.c:353 +#: commands/functioncmds.c:356 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "il nome di parametro \"%s\" è usato più di una volta" -#: commands/functioncmds.c:368 +#: commands/functioncmds.c:371 #, c-format msgid "only input parameters can have default values" msgstr "solo i parametri di input possono avere un valore di default" -#: commands/functioncmds.c:383 +#: commands/functioncmds.c:386 #, c-format msgid "cannot use table references in parameter default value" msgstr "non si possono usare riferimenti a tabelle nel valore predefinito dei parametri" -#: commands/functioncmds.c:407 +#: commands/functioncmds.c:410 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "i parametri di input che seguono uno con valore predefinito devono avere anch'essi un valore predefinito" -#: commands/functioncmds.c:657 +#: commands/functioncmds.c:670 #, c-format msgid "no function body specified" msgstr "non è stato specificato alcun corpo della funzione" -#: commands/functioncmds.c:667 +#: commands/functioncmds.c:680 #, c-format msgid "no language specified" msgstr "nessun linguaggio specificato" -#: commands/functioncmds.c:690 commands/functioncmds.c:1149 +#: commands/functioncmds.c:705 commands/functioncmds.c:1205 #, c-format msgid "COST must be positive" msgstr "COST dev'essere positivo" -#: commands/functioncmds.c:698 commands/functioncmds.c:1157 +#: commands/functioncmds.c:713 commands/functioncmds.c:1213 #, c-format msgid "ROWS must be positive" msgstr "ROWS dev'essere positivo" -#: commands/functioncmds.c:737 +#: commands/functioncmds.c:752 #, c-format msgid "unrecognized function attribute \"%s\" ignored" msgstr "attributo di funzione sconosciuto \"%s\" ignorato" -#: commands/functioncmds.c:788 +#: commands/functioncmds.c:803 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "solo un elemento AS è necessario per il linguaggio \"%s\"" -#: commands/functioncmds.c:877 commands/functioncmds.c:1734 -#: commands/proclang.c:553 +#: commands/functioncmds.c:894 commands/functioncmds.c:2079 +#: commands/proclang.c:560 #, c-format msgid "language \"%s\" does not exist" msgstr "il linguaggio \"%s\" non esiste" -#: commands/functioncmds.c:879 commands/functioncmds.c:1736 +#: commands/functioncmds.c:896 commands/functioncmds.c:2081 #, c-format msgid "Use CREATE LANGUAGE to load the language into the database." msgstr "Usa CREATE LANGUAGE per caricare il linguaggio nel database." -#: commands/functioncmds.c:914 commands/functioncmds.c:1140 +#: commands/functioncmds.c:931 commands/functioncmds.c:1197 #, c-format msgid "only superuser can define a leakproof function" msgstr "solo un superutente può definire una funzione stagna" -#: commands/functioncmds.c:940 +#: commands/functioncmds.c:975 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "il risultato della funzione deve essere %s per i parametri OUT" -#: commands/functioncmds.c:953 +#: commands/functioncmds.c:988 #, c-format msgid "function result type must be specified" msgstr "il tipo di risultato della funzione dev'essere specificato" -#: commands/functioncmds.c:988 commands/functioncmds.c:1161 +#: commands/functioncmds.c:1042 commands/functioncmds.c:1217 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS è non applicabile quando la funzione non restituisce un insieme" -#: commands/functioncmds.c:1314 +#: commands/functioncmds.c:1372 #, c-format msgid "source data type %s is a pseudo-type" msgstr "il tipo di dati di origine %s è uno pseudo-tipo" -#: commands/functioncmds.c:1320 +#: commands/functioncmds.c:1378 #, c-format msgid "target data type %s is a pseudo-type" msgstr "il tipo di dati di destinazione %s è uno pseudo-tipo" -#: commands/functioncmds.c:1344 +#: commands/functioncmds.c:1402 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "la conversione verrà ignorata perché il tipo di dato di origine è un dominio" -#: commands/functioncmds.c:1349 +#: commands/functioncmds.c:1407 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "la conversione verrà ignorata perché il tipo di dato di destinazione è un dominio" -#: commands/functioncmds.c:1376 +#: commands/functioncmds.c:1434 #, c-format msgid "cast function must take one to three arguments" msgstr "la funzione di conversione deve prendere da uno a tre argomenti" -#: commands/functioncmds.c:1380 +#: commands/functioncmds.c:1438 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "l'argomento della funzione di conversione deve combaciare o essere convertibile a livello binario dal tipo di dato di origine" -#: commands/functioncmds.c:1384 +#: commands/functioncmds.c:1442 #, c-format msgid "second argument of cast function must be type integer" msgstr "il secondo argomento della funzione di conversione deve essere un tipo intero" -#: commands/functioncmds.c:1388 +#: commands/functioncmds.c:1446 #, c-format msgid "third argument of cast function must be type boolean" msgstr "il terzo argomento della funzione di conversione deve essere un tipo booleano" -#: commands/functioncmds.c:1392 +#: commands/functioncmds.c:1450 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "il tipo di dato restituito dalla funzione di conversione deve combaciare o essere convertibile a livello binario nel tipo di dato di destinazione" -#: commands/functioncmds.c:1403 +#: commands/functioncmds.c:1461 #, c-format msgid "cast function must not be volatile" msgstr "la funzione di conversione non può essere volatile" -#: commands/functioncmds.c:1408 +#: commands/functioncmds.c:1466 #, c-format msgid "cast function must not be an aggregate function" msgstr "la funzione di conversione non può essere una funzione di aggregazione" -#: commands/functioncmds.c:1412 +#: commands/functioncmds.c:1470 #, c-format msgid "cast function must not be a window function" msgstr "la funzione di conversione non può essere una funzione finestra" -#: commands/functioncmds.c:1416 +#: commands/functioncmds.c:1474 #, c-format msgid "cast function must not return a set" msgstr "la funzione di conversione non può restituire un insieme" -#: commands/functioncmds.c:1442 +#: commands/functioncmds.c:1500 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "occorre essere un superutente per creare un cast WITHOUT FUNCTION" -#: commands/functioncmds.c:1457 +#: commands/functioncmds.c:1515 #, c-format msgid "source and target data types are not physically compatible" msgstr "i tipi di dati di origine e di destinazione non sono fisicamente compatibili" -#: commands/functioncmds.c:1472 +#: commands/functioncmds.c:1530 #, c-format msgid "composite data types are not binary-compatible" msgstr "i tipi di dati compositi non sono compatibili a livello binario" -#: commands/functioncmds.c:1478 +#: commands/functioncmds.c:1536 #, c-format msgid "enum data types are not binary-compatible" msgstr "le enumerazioni non sono compatibili a livello binario" -#: commands/functioncmds.c:1484 +#: commands/functioncmds.c:1542 #, c-format msgid "array data types are not binary-compatible" msgstr "i tipi di dati array non sono compatibili a livello binario" -#: commands/functioncmds.c:1501 +#: commands/functioncmds.c:1559 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "i tipi di dominio non devono essere marcati come compatibili a livello binario" -#: commands/functioncmds.c:1511 +#: commands/functioncmds.c:1569 #, c-format msgid "source data type and target data type are the same" msgstr "i tipi di dati di origine e di destinazione sono gli stessi" -#: commands/functioncmds.c:1544 +#: commands/functioncmds.c:1602 #, c-format msgid "cast from type %s to type %s already exists" msgstr "la conversione dal tipo %s al tipo %s esiste già" -#: commands/functioncmds.c:1619 +#: commands/functioncmds.c:1677 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "la conversione dal tipo %s al tipo %s non esiste" -#: commands/functioncmds.c:1668 +#: commands/functioncmds.c:1716 +#, c-format +msgid "transform function must not be volatile" +msgstr "la funzione di trasformazione non può essere volatile" + +#: commands/functioncmds.c:1720 +#, c-format +msgid "transform function must not be an aggregate function" +msgstr "la funzione di trasformazione non può essere una funzione aggregata" + +#: commands/functioncmds.c:1724 +#, c-format +msgid "transform function must not be a window function" +msgstr "la funzione di trasformazione non può essere una funzione finestra" + +#: commands/functioncmds.c:1728 +#, c-format +msgid "transform function must not return a set" +msgstr "la funzione di trasformazione non può restituire un insieme" + +#: commands/functioncmds.c:1732 +#, c-format +msgid "transform function must take one argument" +msgstr "la funzione di trasformazione deve poter ricevere un solo argomento" + +#: commands/functioncmds.c:1736 +#, c-format +msgid "first argument of transform function must be type \"internal\"" +msgstr "il primo argomento della funzione di trasformazione dev'essere di tipo \"internal\"" + +#: commands/functioncmds.c:1773 +#, c-format +msgid "data type %s is a pseudo-type" +msgstr "il tipo di dato %s è uno pseudo-tipo" + +#: commands/functioncmds.c:1779 +#, c-format +msgid "data type %s is a domain" +msgstr "il tipo di dato %s è un dominio" + +#: commands/functioncmds.c:1819 +#, c-format +msgid "return data type of FROM SQL function must be \"internal\"" +msgstr "il tipo di dato restituito da una funzione FROM SQL dev'essere \"internal\"" + +#: commands/functioncmds.c:1844 +#, c-format +msgid "return data type of TO SQL function must be the transform data type" +msgstr "il tipo di dati restituito da una funzione TO SQL dev'essere il tipo di dato della trasformazione" + +#: commands/functioncmds.c:1871 +#, c-format +msgid "transform for type %s language \"%s\" already exists" +msgstr "la trasformazione per il tipo %s linguaggio \"%s\" esiste già" + +#: commands/functioncmds.c:1962 +#, c-format +msgid "transform for type %s language \"%s\" does not exist" +msgstr "la trasformazione per il tipo %s linguaggio \"%s\" non esiste" + +#: commands/functioncmds.c:2013 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "la funzione %s esiste già nello schema \"%s\"" -#: commands/functioncmds.c:1721 +#: commands/functioncmds.c:2066 #, c-format msgid "no inline code specified" msgstr "nessun codice inline specificato" -#: commands/functioncmds.c:1766 +#: commands/functioncmds.c:2111 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "il linguaggio \"%s\" non supporta l'esecuzione di codice inline" -#: commands/indexcmds.c:159 commands/indexcmds.c:486 -#: commands/opclasscmds.c:370 commands/opclasscmds.c:790 +#: commands/indexcmds.c:159 commands/indexcmds.c:487 +#: commands/opclasscmds.c:360 commands/opclasscmds.c:786 #: commands/opclasscmds.c:1749 #, c-format msgid "access method \"%s\" does not exist" msgstr "Il metodo di accesso \"%s\" non esiste" -#: commands/indexcmds.c:340 +#: commands/indexcmds.c:341 #, c-format msgid "must specify at least one column" msgstr "occorre specificare almeno una colonna" -#: commands/indexcmds.c:344 +#: commands/indexcmds.c:345 #, c-format msgid "cannot use more than %d columns in an index" msgstr "non è possibile usare più di %d colonne in un indice" -#: commands/indexcmds.c:375 +#: commands/indexcmds.c:376 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "non è possibile creare indici sulla tabella esterna \"%s\"" -#: commands/indexcmds.c:390 +#: commands/indexcmds.c:391 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "non è possibile creare indici su tabelle temporanee di altre sessioni" -#: commands/indexcmds.c:445 commands/tablecmds.c:525 commands/tablecmds.c:9101 +#: commands/indexcmds.c:446 commands/tablecmds.c:540 commands/tablecmds.c:9557 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "solo le relazioni condivise possono essere poste nel tablespace pg_global" -#: commands/indexcmds.c:478 +#: commands/indexcmds.c:479 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "sostituzione del metodo di accesso \"gist\" per il metodo obsoleto \"rtree\"" -#: commands/indexcmds.c:495 +#: commands/indexcmds.c:496 +#, c-format +msgid "hash indexes are not WAL-logged and their use is discouraged" +msgstr "gli indici hash non sono inviati con il log WAL e il loro uso è scoraggiato" + +#: commands/indexcmds.c:501 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "il metodo di accesso \"%s\" non supporta gli indici univoci" -#: commands/indexcmds.c:500 +#: commands/indexcmds.c:506 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "il metodo di accesso \"%s\" non supporta gli indici multicolonna" -#: commands/indexcmds.c:505 +#: commands/indexcmds.c:511 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "il metodo di accesso \"%s\" non supporta i vincoli di esclusione" -#: commands/indexcmds.c:584 +#: commands/indexcmds.c:590 #, c-format msgid "%s %s will create implicit index \"%s\" for table \"%s\"" msgstr "%s %s creerà un indice implicito \"%s\" per la tabella \"%s\"" -#: commands/indexcmds.c:922 +#: commands/indexcmds.c:937 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "le funzioni nel predicato dell'indice devono essere marcate IMMUTABLE" -#: commands/indexcmds.c:988 parser/parse_utilcmd.c:1797 +#: commands/indexcmds.c:1003 parser/parse_utilcmd.c:1844 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "la colonna \"%s\" nominata nella chiave non esiste" -#: commands/indexcmds.c:1048 +#: commands/indexcmds.c:1063 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "le funzioni nell'espressione dell'indice devono essere marcate IMMUTABLE" -#: commands/indexcmds.c:1071 +#: commands/indexcmds.c:1086 #, c-format msgid "could not determine which collation to use for index expression" msgstr "non è stato possibile determinare quale ordinamento usare per l'espressione dell'indice" -#: commands/indexcmds.c:1079 commands/typecmds.c:782 parser/parse_expr.c:2278 -#: parser/parse_type.c:546 parser/parse_utilcmd.c:2648 utils/adt/misc.c:520 +#: commands/indexcmds.c:1094 commands/typecmds.c:825 parser/parse_expr.c:2559 +#: parser/parse_type.c:551 parser/parse_utilcmd.c:2736 utils/adt/misc.c:546 #, c-format msgid "collations are not supported by type %s" msgstr "gli ordinamenti non sono supportati dal tipo %s" -#: commands/indexcmds.c:1117 +#: commands/indexcmds.c:1132 #, c-format msgid "operator %s is not commutative" msgstr "l'operatore %s non è commutativo" -#: commands/indexcmds.c:1119 +#: commands/indexcmds.c:1134 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "Solo operatori commutativi possono essere usati nei vincoli di esclusione." -#: commands/indexcmds.c:1145 +#: commands/indexcmds.c:1160 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "l'operatore %s non è membro della famiglia di operatori \"%s\"" -#: commands/indexcmds.c:1148 +#: commands/indexcmds.c:1163 #, c-format msgid "The exclusion operator must be related to the index operator class for the constraint." msgstr "L'operatore di esclusione dev'essere correlato alla classe di operatori dell'indice per il vincolo." -#: commands/indexcmds.c:1183 +#: commands/indexcmds.c:1198 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "il metodo di accesso \"%s\" non supporta le opzioni ASC/DESC" -#: commands/indexcmds.c:1188 +#: commands/indexcmds.c:1203 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "il metodo di accesso \"%s\" non supporta le opzioni NULLS FIRST/LAST" -#: commands/indexcmds.c:1244 commands/typecmds.c:1887 +#: commands/indexcmds.c:1259 commands/typecmds.c:1932 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "il tipo di dati %s non ha una classe di operatori predefinita per il metodo di accesso \"%s\"" -#: commands/indexcmds.c:1246 +#: commands/indexcmds.c:1261 #, c-format msgid "You must specify an operator class for the index or define a default operator class for the data type." msgstr "Devi specificare una classe di operatori per l'indice o definire una classe di operatori predefinita per il tipo di dati" -#: commands/indexcmds.c:1275 commands/indexcmds.c:1283 -#: commands/opclasscmds.c:214 +#: commands/indexcmds.c:1290 commands/indexcmds.c:1298 +#: commands/opclasscmds.c:204 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "la classe di operatori \"%s\" non esiste per il metodo di accesso \"%s\"" -#: commands/indexcmds.c:1296 commands/typecmds.c:1875 +#: commands/indexcmds.c:1311 commands/typecmds.c:1920 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "la classe di operatori \"%s\" non accetta il tipo di dati %s" -#: commands/indexcmds.c:1386 +#: commands/indexcmds.c:1401 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "il tipo di dati %s ha più di una classe di operatori predefinita" -#: commands/indexcmds.c:1762 +#: commands/indexcmds.c:1792 #, c-format msgid "table \"%s\" has no indexes" msgstr "la tabella \"%s\" non ha indici" -#: commands/indexcmds.c:1792 +#: commands/indexcmds.c:1847 #, c-format msgid "can only reindex the currently open database" msgstr "è possibile reindicizzare solo il database corrente" -#: commands/indexcmds.c:1881 +#: commands/indexcmds.c:1949 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "la tabella \"%s.%s\" è stata reindicizzata" -#: commands/matview.c:178 +#: commands/matview.c:181 #, c-format msgid "CONCURRENTLY cannot be used when the materialized view is not populated" msgstr "non si può usare CONCURRENTLY quando la vista materializzata non è popolata" -#: commands/matview.c:184 +#: commands/matview.c:187 #, c-format msgid "CONCURRENTLY and WITH NO DATA options cannot be used together" msgstr "le opzioni CONCURRENTLY e WITH NO DATA non possono essere usate insieme" -#: commands/matview.c:591 +#: commands/matview.c:611 #, c-format msgid "new data for \"%s\" contains duplicate rows without any null columns" msgstr "i nuovi dati per \"%s\" contengono righe duplicate senza alcuna colonna null" -#: commands/matview.c:593 +#: commands/matview.c:613 #, c-format msgid "Row: %s" msgstr "Riga: %s" -#: commands/matview.c:681 +#: commands/matview.c:701 #, c-format msgid "cannot refresh materialized view \"%s\" concurrently" msgstr "non è possibile aggiornare la vista materializzata \"%s\" concorrentemente" -#: commands/matview.c:683 +#: commands/matview.c:703 #, c-format msgid "Create a unique index with no WHERE clause on one or more columns of the materialized view." msgstr "Crea un indice unico senza clausola WHERE su una o più colonna della vista materializzata." -#: commands/opclasscmds.c:135 +#: commands/opclasscmds.c:125 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\"" msgstr "la famiglia di operatori \"%s\" non esiste per il metodo di accesso \"%s\"" -#: commands/opclasscmds.c:273 +#: commands/opclasscmds.c:263 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "la famiglia di operatori \"%s\" per il metodo di accesso \"%s\" esiste già " -#: commands/opclasscmds.c:409 +#: commands/opclasscmds.c:399 #, c-format msgid "must be superuser to create an operator class" msgstr "devi essere un superutente per creare una classe di operatori" -#: commands/opclasscmds.c:480 commands/opclasscmds.c:866 -#: commands/opclasscmds.c:996 +#: commands/opclasscmds.c:473 commands/opclasscmds.c:859 +#: commands/opclasscmds.c:992 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "numero di operatore %d non valido, deve essere tra 1 e %d" -#: commands/opclasscmds.c:531 commands/opclasscmds.c:917 -#: commands/opclasscmds.c:1011 +#: commands/opclasscmds.c:524 commands/opclasscmds.c:910 +#: commands/opclasscmds.c:1007 #, c-format msgid "invalid procedure number %d, must be between 1 and %d" msgstr "numero di procedura %d non valido, deve essere tra 1 e %d" -#: commands/opclasscmds.c:561 +#: commands/opclasscmds.c:554 #, c-format msgid "storage type specified more than once" msgstr "tipo di immagazzinamento specificato più di una volta" -#: commands/opclasscmds.c:588 +#: commands/opclasscmds.c:581 #, c-format msgid "storage type cannot be different from data type for access method \"%s\"" msgstr "il tipo di immagazzinamento non deve essere diverso dal tipo di dato per il metodo di accesso \"%s\"" -#: commands/opclasscmds.c:604 +#: commands/opclasscmds.c:597 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "la classe di operatori \"%s\" per il metodo di accesso \"%s\" esiste già" -#: commands/opclasscmds.c:632 +#: commands/opclasscmds.c:625 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "non è stato possibile rendere la classe di operatori \"%s\" predefinita per il tipo %s" -#: commands/opclasscmds.c:635 +#: commands/opclasscmds.c:628 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "La classe di operatori \"%s\" è già predefinita." -#: commands/opclasscmds.c:760 +#: commands/opclasscmds.c:756 #, c-format msgid "must be superuser to create an operator family" msgstr "solo un superutente può creare una famiglia di operatori" -#: commands/opclasscmds.c:816 +#: commands/opclasscmds.c:812 #, c-format msgid "must be superuser to alter an operator family" msgstr "solo un superutente può modificare una famiglia di operatori" -#: commands/opclasscmds.c:882 +#: commands/opclasscmds.c:875 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "i tipi degli argomenti dell'operatore devono essere specificati in ALTER OPERATOR FAMILY" -#: commands/opclasscmds.c:946 +#: commands/opclasscmds.c:939 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "STORAGE non può essere specificato in ALTER OPERATOR FAMILY" @@ -6163,46 +6890,86 @@ msgstr "la classe di operatori \"%s\" per il metodo di accesso \"%s\" esiste gi msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "la famiglia di operatori \"%s\" per il metodo di accesso \"%s\" esiste già nello schema \"%s\"" -#: commands/operatorcmds.c:97 -#, c-format -msgid "=> is deprecated as an operator name" -msgstr "=> è deprecato come nome di operatore" - -#: commands/operatorcmds.c:98 -#, c-format -msgid "This name may be disallowed altogether in future versions of PostgreSQL." -msgstr "Questo nome potrebbe essere vietato del tutto in una prossima versione di PostgreSQL" - -#: commands/operatorcmds.c:119 commands/operatorcmds.c:127 +#: commands/operatorcmds.c:113 commands/operatorcmds.c:121 #, c-format msgid "SETOF type not allowed for operator argument" msgstr "il tipo SETOF non è permesso come argomento dell'operatore." -#: commands/operatorcmds.c:155 +#: commands/operatorcmds.c:151 commands/operatorcmds.c:436 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "attributo dell'operatore \"%s\" non riconosciuto" -#: commands/operatorcmds.c:165 +#: commands/operatorcmds.c:162 #, c-format msgid "operator procedure must be specified" msgstr "la procedura dell'operatore deve essere specificata" -#: commands/operatorcmds.c:176 +#: commands/operatorcmds.c:173 #, c-format msgid "at least one of leftarg or rightarg must be specified" msgstr "almeno uno tra leftarg e rightarg deve essere specificato" -#: commands/operatorcmds.c:244 +#: commands/operatorcmds.c:277 #, c-format msgid "restriction estimator function %s must return type \"float8\"" msgstr "la funzione di stima di restrizione %s deve restituire il tipo \"float8\"" -#: commands/operatorcmds.c:283 +#: commands/operatorcmds.c:323 #, c-format msgid "join estimator function %s must return type \"float8\"" msgstr "la funzione di stima del join %s deve restituire il tipo \"float8\"" +#: commands/operatorcmds.c:430 +#, c-format +msgid "operator attribute \"%s\" can not be changed" +msgstr "l'attributo dell'operatore \"%s\" non può essere cambiato" + +#: commands/policy.c:87 commands/policy.c:428 commands/tablecmds.c:965 +#: commands/tablecmds.c:1307 commands/tablecmds.c:2175 +#: commands/tablecmds.c:4305 commands/tablecmds.c:6258 +#: commands/tablecmds.c:11834 commands/tablecmds.c:11869 +#: commands/trigger.c:240 commands/trigger.c:1126 commands/trigger.c:1234 +#: rewrite/rewriteDefine.c:273 rewrite/rewriteDefine.c:905 +#, c-format +msgid "permission denied: \"%s\" is a system catalog" +msgstr "permesso negato: \"%s\" è un catalogo di sistema" + +#: commands/policy.c:170 +#, c-format +msgid "ignoring roles specified other than public" +msgstr "i ruoli specificati a parte quello pubblico verranno ignorati" + +#: commands/policy.c:171 +#, c-format +msgid "All roles are members of the public role." +msgstr "Tutti i ruoli sono membri del ruolo pubblico." + +#: commands/policy.c:492 +#, c-format +msgid "WITH CHECK cannot be applied to SELECT or DELETE" +msgstr "WITH CHECK non può essere applicato a SELECT o a DELETE" + +#: commands/policy.c:501 commands/policy.c:801 +#, c-format +msgid "only WITH CHECK expression allowed for INSERT" +msgstr "solo le espressioni WITH CHECK sono consentite per INSERT" + +#: commands/policy.c:574 commands/policy.c:927 +#, c-format +msgid "policy \"%s\" for table \"%s\" already exists" +msgstr "la politica \"%s\" per la tabella \"%s\" esiste già" + +#: commands/policy.c:773 commands/policy.c:955 commands/policy.c:1030 +#, c-format +msgid "policy \"%s\" for table \"%s\" does not exist" +msgstr "la politica \"%s\" per la tabella \"%s\" non esiste" + +#: commands/policy.c:791 +#, c-format +msgid "only USING expression allowed for SELECT, DELETE" +msgstr "solo le espressioni USING sono permesse per SELECT e DELETE" + #: commands/portalcmds.c:61 commands/portalcmds.c:160 #: commands/portalcmds.c:212 #, c-format @@ -6210,7 +6977,7 @@ msgid "invalid cursor name: must not be empty" msgstr "nome di cursore non valido: non deve essere vuoto" #: commands/portalcmds.c:168 commands/portalcmds.c:222 -#: executor/execCurrent.c:67 utils/adt/xml.c:2386 utils/adt/xml.c:2553 +#: executor/execCurrent.c:67 utils/adt/xml.c:2391 utils/adt/xml.c:2558 #, c-format msgid "cursor \"%s\" does not exist" msgstr "il cursore \"%s\" non esiste" @@ -6230,7 +6997,7 @@ msgstr "riposizionamento del cursore held fallito" msgid "invalid statement name: must not be empty" msgstr "nome di istruzione non valido: non deve essere vuoto" -#: commands/prepare.c:129 parser/parse_param.c:304 tcop/postgres.c:1296 +#: commands/prepare.c:129 parser/parse_param.c:304 tcop/postgres.c:1355 #, c-format msgid "could not determine data type of parameter $%d" msgstr "non è stato possibile determinare il tipo di dato del parametro $%d" @@ -6260,344 +7027,327 @@ msgstr "Erano attesi %d parametri ma ottenuti %d." msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "il parametro $%d di tipo %s non può essere forzato al tipo previsto %s" -#: commands/prepare.c:465 +#: commands/prepare.c:464 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "l'istruzione preparata \"%s\" esiste già" -#: commands/prepare.c:504 +#: commands/prepare.c:503 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "l'istruzione preparata \"%s\" non esiste" -#: commands/proclang.c:86 +#: commands/proclang.c:87 #, c-format msgid "using pg_pltemplate information instead of CREATE LANGUAGE parameters" msgstr "vengono usate le informazioni di pg_pltemplate invece dei parametri di CREATE LANGUAGE" -#: commands/proclang.c:96 +#: commands/proclang.c:97 #, c-format msgid "must be superuser to create procedural language \"%s\"" msgstr "solo i superutenti possono creare il linguaggio procedurale \"%s\"" -#: commands/proclang.c:116 commands/proclang.c:278 +#: commands/proclang.c:117 commands/proclang.c:285 #, c-format msgid "function %s must return type \"language_handler\"" msgstr "la funzione %s deve restituire un tipo \"language_handler\"" -#: commands/proclang.c:242 +#: commands/proclang.c:249 #, c-format msgid "unsupported language \"%s\"" msgstr "linguaggio non supportato \"%s\"" -#: commands/proclang.c:244 +#: commands/proclang.c:251 #, c-format msgid "The supported languages are listed in the pg_pltemplate system catalog." msgstr "I linguaggi supportati sono elencate nel catalogo di sistema pg_pltemplate" -#: commands/proclang.c:252 +#: commands/proclang.c:259 #, c-format msgid "must be superuser to create custom procedural language" msgstr "solo i superutenti possono creare un linguaggio procedurale personalizzato" -#: commands/proclang.c:271 +#: commands/proclang.c:278 #, c-format msgid "changing return type of function %s from \"opaque\" to \"language_handler\"" msgstr "cambio del tipo restituito dalla funzione %s da \"opaque\" a \"language_handler\"" -#: commands/schemacmds.c:84 commands/schemacmds.c:236 +#: commands/schemacmds.c:99 commands/schemacmds.c:262 #, c-format msgid "unacceptable schema name \"%s\"" msgstr "nome dello schema \"%s\" non accettabile" -#: commands/schemacmds.c:85 commands/schemacmds.c:237 +#: commands/schemacmds.c:100 commands/schemacmds.c:263 #, c-format msgid "The prefix \"pg_\" is reserved for system schemas." msgstr "Il prefisso \"pg_\" è riservato agli schemi di sistema." -#: commands/schemacmds.c:99 +#: commands/schemacmds.c:114 #, c-format msgid "schema \"%s\" already exists, skipping" msgstr "lo schema \"%s\" esiste già, saltato" -#: commands/seclabel.c:58 +#: commands/seclabel.c:60 #, c-format msgid "no security label providers have been loaded" msgstr "nessun fornitore di etichette di sicurezza è stato caricato" -#: commands/seclabel.c:62 +#: commands/seclabel.c:64 #, c-format msgid "must specify provider when multiple security label providers have been loaded" msgstr "occorre specificare un fornitore quando più di un fornitore di etichette di sicurezza è stato caricato" -#: commands/seclabel.c:80 +#: commands/seclabel.c:82 #, c-format msgid "security label provider \"%s\" is not loaded" msgstr "il fornitore di etichette di sicurezza \"%s\" non è stato caricato" -#: commands/sequence.c:123 +#: commands/sequence.c:127 #, c-format msgid "unlogged sequences are not supported" msgstr "le sequenze non loggate non sono supportate" -#: commands/sequence.c:618 +#: commands/sequence.c:651 #, c-format msgid "nextval: reached maximum value of sequence \"%s\" (%s)" msgstr "nextval: è stato raggiunto il valore massimo della sequenza \"%s\" (%s)" -#: commands/sequence.c:641 +#: commands/sequence.c:674 #, c-format msgid "nextval: reached minimum value of sequence \"%s\" (%s)" msgstr "nextval: è stato raggiunto il valore minimo della sequenza \"%s\" (%s)" -#: commands/sequence.c:754 +#: commands/sequence.c:792 #, c-format msgid "currval of sequence \"%s\" is not yet defined in this session" msgstr "il valore corrente della sequenza \"%s\" non è stato ancora definito in questa sessione" -#: commands/sequence.c:773 commands/sequence.c:779 +#: commands/sequence.c:811 commands/sequence.c:817 #, c-format msgid "lastval is not yet defined in this session" msgstr "lastval non è stato ancora definito in questa sessione" -#: commands/sequence.c:848 +#: commands/sequence.c:893 #, c-format msgid "setval: value %s is out of bounds for sequence \"%s\" (%s..%s)" msgstr "setval: il valore %s non rientra nei margini della sequenza \"%s\" (%s..%s)" -#: commands/sequence.c:1224 +#: commands/sequence.c:1267 #, c-format msgid "INCREMENT must not be zero" msgstr "INCREMENT non può essere zero" -#: commands/sequence.c:1280 +#: commands/sequence.c:1323 #, c-format msgid "MINVALUE (%s) must be less than MAXVALUE (%s)" msgstr "MINVALUE (%s) deve essere minore del MAXVALUE (%s)" -#: commands/sequence.c:1305 +#: commands/sequence.c:1348 #, c-format msgid "START value (%s) cannot be less than MINVALUE (%s)" msgstr "il valore di START (%s) non può essere inferiore a quello di MINVALUE (%s)" -#: commands/sequence.c:1317 +#: commands/sequence.c:1360 #, c-format msgid "START value (%s) cannot be greater than MAXVALUE (%s)" msgstr "il valore di START (%s) non può essere superiore a quello di MAXVALUE (%s)" -#: commands/sequence.c:1347 +#: commands/sequence.c:1390 #, c-format msgid "RESTART value (%s) cannot be less than MINVALUE (%s)" msgstr "il valore di RESTART (%s) non può essere inferiore a quello di MINVALUE (%s)" -#: commands/sequence.c:1359 +#: commands/sequence.c:1402 #, c-format msgid "RESTART value (%s) cannot be greater than MAXVALUE (%s)" msgstr "il valore di RESTART (%s) non può essere superiore a quello di MAXVALUE (%s)" -#: commands/sequence.c:1374 +#: commands/sequence.c:1417 #, c-format msgid "CACHE (%s) must be greater than zero" msgstr "CACHE (%s) dev'essere maggiore di zero" -#: commands/sequence.c:1406 +#: commands/sequence.c:1449 #, c-format msgid "invalid OWNED BY option" msgstr "opzione OWNED BY non valida" -#: commands/sequence.c:1407 +#: commands/sequence.c:1450 #, c-format msgid "Specify OWNED BY table.column or OWNED BY NONE." msgstr "Specifica OWNED BY tabella.colonna oppure OWNED BY NONE." -#: commands/sequence.c:1430 +#: commands/sequence.c:1473 #, c-format msgid "referenced relation \"%s\" is not a table or foreign table" msgstr "la relazione referenziata \"%s\" non è una tabella né una tabella esterna" -#: commands/sequence.c:1437 +#: commands/sequence.c:1480 #, c-format msgid "sequence must have same owner as table it is linked to" msgstr "la sequenza deve avere lo stesso proprietario della tabella a cui è collegata" -#: commands/sequence.c:1441 +#: commands/sequence.c:1484 #, c-format msgid "sequence must be in same schema as table it is linked to" msgstr "la sequenza deve essere nello stesso schema della tabella a cui è collegata" -#: commands/tablecmds.c:206 +#: commands/tablecmds.c:212 #, c-format msgid "table \"%s\" does not exist" msgstr "la tabella \"%s\" non esiste" -#: commands/tablecmds.c:207 +#: commands/tablecmds.c:213 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "la tabella \"%s\" non esiste, saltata" -#: commands/tablecmds.c:209 +#: commands/tablecmds.c:215 msgid "Use DROP TABLE to remove a table." msgstr "Usa DROP TABLE per eliminare una tabella." -#: commands/tablecmds.c:212 +#: commands/tablecmds.c:218 #, c-format msgid "sequence \"%s\" does not exist" msgstr "la sequenza \"%s\" non esiste" -#: commands/tablecmds.c:213 +#: commands/tablecmds.c:219 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "la sequenza \"%s\" non esiste, saltata" -#: commands/tablecmds.c:215 +#: commands/tablecmds.c:221 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "Usa DROP SEQUENCE per eliminare una sequenza." -#: commands/tablecmds.c:218 +#: commands/tablecmds.c:224 #, c-format msgid "view \"%s\" does not exist" msgstr "la vista \"%s\" non esiste" -#: commands/tablecmds.c:219 +#: commands/tablecmds.c:225 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "la vista \"%s\" non esiste, saltata" -#: commands/tablecmds.c:221 +#: commands/tablecmds.c:227 msgid "Use DROP VIEW to remove a view." msgstr "Usa DROP VIEW per eliminare una vista." -#: commands/tablecmds.c:224 +#: commands/tablecmds.c:230 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "la vista materializzata \"%s\" non esiste" -#: commands/tablecmds.c:225 +#: commands/tablecmds.c:231 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "la vista materializzata \"%s\" non esiste, saltata" -#: commands/tablecmds.c:227 +#: commands/tablecmds.c:233 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Usa DROP MATERIALIZED VIEW per rimuovere una vista materializzata." -#: commands/tablecmds.c:230 parser/parse_utilcmd.c:1548 +#: commands/tablecmds.c:236 parser/parse_utilcmd.c:1593 #, c-format msgid "index \"%s\" does not exist" msgstr "l'indice \"%s\" non esiste" -#: commands/tablecmds.c:231 +#: commands/tablecmds.c:237 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "l'indice \"%s\" non esiste, saltato" -#: commands/tablecmds.c:233 +#: commands/tablecmds.c:239 msgid "Use DROP INDEX to remove an index." msgstr "Usa DROP INDEX per eliminare un indice." -#: commands/tablecmds.c:238 +#: commands/tablecmds.c:244 #, c-format msgid "\"%s\" is not a type" msgstr "\"%s\" non è un tipo" -#: commands/tablecmds.c:239 +#: commands/tablecmds.c:245 msgid "Use DROP TYPE to remove a type." msgstr "Usa DROP TYPE per eliminare un tipo." -#: commands/tablecmds.c:242 commands/tablecmds.c:8076 -#: commands/tablecmds.c:10557 +#: commands/tablecmds.c:248 commands/tablecmds.c:8465 +#: commands/tablecmds.c:11095 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "la tabella esterna \"%s\" non esiste" -#: commands/tablecmds.c:243 +#: commands/tablecmds.c:249 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "la tabella esterna \"%s\" non esiste, saltata" -#: commands/tablecmds.c:245 +#: commands/tablecmds.c:251 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Usa DROP FOREIGN TABLE per eliminare una tabella esterna." -#: commands/tablecmds.c:469 +#: commands/tablecmds.c:488 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT può essere usato solo con le tabelle temporanee" -#: commands/tablecmds.c:473 parser/parse_utilcmd.c:521 -#: parser/parse_utilcmd.c:532 parser/parse_utilcmd.c:549 -#: parser/parse_utilcmd.c:611 -#, c-format -msgid "constraints are not supported on foreign tables" -msgstr "i vincoli sulle tabelle esterne non sono supportati" - -#: commands/tablecmds.c:493 +#: commands/tablecmds.c:508 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "non è possibile creare la tabella temporanea nell'ambito di operazioni a sicurezza ristretta" -#: commands/tablecmds.c:789 +#: commands/tablecmds.c:816 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY non supporta l'eliminazione di più di un oggetto" -#: commands/tablecmds.c:793 +#: commands/tablecmds.c:820 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY non supporta CASCADE" -#: commands/tablecmds.c:938 commands/tablecmds.c:1276 -#: commands/tablecmds.c:2133 commands/tablecmds.c:4112 -#: commands/tablecmds.c:5942 commands/tablecmds.c:11170 -#: commands/tablecmds.c:11205 commands/trigger.c:232 commands/trigger.c:1118 -#: commands/trigger.c:1226 rewrite/rewriteDefine.c:271 -#: rewrite/rewriteDefine.c:887 -#, c-format -msgid "permission denied: \"%s\" is a system catalog" -msgstr "permesso negato: \"%s\" è un catalogo di sistema" - -#: commands/tablecmds.c:1052 +#: commands/tablecmds.c:1079 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "truncate si propaga in cascata alla tabella \"%s\"" -#: commands/tablecmds.c:1286 +#: commands/tablecmds.c:1317 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "non è possibile troncare tabelle temporanee di altre sessioni" -#: commands/tablecmds.c:1491 parser/parse_utilcmd.c:1760 +#: commands/tablecmds.c:1523 parser/parse_utilcmd.c:1807 #, c-format -msgid "inherited relation \"%s\" is not a table" -msgstr "la relazione ereditata \"%s\" non è una tabella" +msgid "inherited relation \"%s\" is not a table or foreign table" +msgstr "la relazione ereditata \"%s\" non è una tabella o tabella esterna" -#: commands/tablecmds.c:1498 commands/tablecmds.c:9531 +#: commands/tablecmds.c:1530 commands/tablecmds.c:9994 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "non è possibile ereditare dalla relazione temporanea \"%s\"" -#: commands/tablecmds.c:1506 commands/tablecmds.c:9539 +#: commands/tablecmds.c:1538 commands/tablecmds.c:10002 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "non è possibile ereditare da una relazione temporanea di un'altra sessione" -#: commands/tablecmds.c:1522 commands/tablecmds.c:9573 +#: commands/tablecmds.c:1554 commands/tablecmds.c:10036 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "la relazione \"%s\" sarebbe ereditata più di una volta" -#: commands/tablecmds.c:1570 +#: commands/tablecmds.c:1602 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "unione delle definizioni multiple ereditate della colonna \"%s\"" -#: commands/tablecmds.c:1578 +#: commands/tablecmds.c:1610 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "la colonna ereditata \"%s\" ha un conflitto di tipo" -#: commands/tablecmds.c:1580 commands/tablecmds.c:1601 -#: commands/tablecmds.c:1789 commands/tablecmds.c:1811 +#: commands/tablecmds.c:1612 commands/tablecmds.c:1633 +#: commands/tablecmds.c:1831 commands/tablecmds.c:1853 #: parser/parse_coerce.c:1592 parser/parse_coerce.c:1612 #: parser/parse_coerce.c:1632 parser/parse_coerce.c:1677 #: parser/parse_coerce.c:1714 parser/parse_param.c:218 @@ -6605,1643 +7355,1759 @@ msgstr "la colonna ereditata \"%s\" ha un conflitto di tipo" msgid "%s versus %s" msgstr "tra %s e %s" -#: commands/tablecmds.c:1587 +#: commands/tablecmds.c:1619 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "la colonna ereditata \"%s\" ha un conflitto di ordinamento" -#: commands/tablecmds.c:1589 commands/tablecmds.c:1799 -#: commands/tablecmds.c:4536 +#: commands/tablecmds.c:1621 commands/tablecmds.c:1841 +#: commands/tablecmds.c:4736 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "tra \"%s\" e \"%s\"" -#: commands/tablecmds.c:1599 +#: commands/tablecmds.c:1631 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "la colonna ereditata \"%s\" ha un conflitto di parametro di memorizzazione" -#: commands/tablecmds.c:1712 parser/parse_utilcmd.c:853 -#: parser/parse_utilcmd.c:1195 parser/parse_utilcmd.c:1271 +#: commands/tablecmds.c:1744 parser/parse_utilcmd.c:894 +#: parser/parse_utilcmd.c:1238 parser/parse_utilcmd.c:1314 #, c-format msgid "cannot convert whole-row table reference" msgstr "non è possibile convertire riferimenti ad una riga intera di tabella" -#: commands/tablecmds.c:1713 parser/parse_utilcmd.c:854 +#: commands/tablecmds.c:1745 parser/parse_utilcmd.c:895 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "Il vincolo \"%s\" contiene un riferimento alla riga intera alla tabella \"%s\"." -#: commands/tablecmds.c:1779 +#: commands/tablecmds.c:1817 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "unione della colonna \"%s\" con la definizione ereditata" -#: commands/tablecmds.c:1787 +#: commands/tablecmds.c:1821 +#, c-format +msgid "moving and merging column \"%s\" with inherited definition" +msgstr "spostamento e unione della colonna \"%s\" con la definizione ereditata" + +#: commands/tablecmds.c:1822 +#, c-format +msgid "User-specified column moved to the position of the inherited column." +msgstr "Colonna specificata dall'utente spostata nella posizione della colonna ereditata." + +#: commands/tablecmds.c:1829 #, c-format msgid "column \"%s\" has a type conflict" msgstr "la colonna \"%s\" ha un conflitto di tipi" -#: commands/tablecmds.c:1797 +#: commands/tablecmds.c:1839 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "la colonna \"%s\" ha un conflitto di ordinamento" -#: commands/tablecmds.c:1809 +#: commands/tablecmds.c:1851 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "la colonna \"%s\" ha un conflitto di parametri di memorizzazione" -#: commands/tablecmds.c:1861 +#: commands/tablecmds.c:1903 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "la colonna \"%s\" eredita valori predefiniti in conflitto tra loro" -#: commands/tablecmds.c:1863 +#: commands/tablecmds.c:1905 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Per risolvere il conflitto, specificare esplicitamente un valore predefinito." -#: commands/tablecmds.c:1910 +#: commands/tablecmds.c:1952 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "il nome del vincolo di controllo \"%s\" compare più di una volta ma con espressioni diverse" -#: commands/tablecmds.c:2104 +#: commands/tablecmds.c:2146 #, c-format msgid "cannot rename column of typed table" msgstr "non è possibile rinominare la colonna di una tabella con tipo" -#: commands/tablecmds.c:2121 +#: commands/tablecmds.c:2163 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "\"%s\" non è una tabella, vista, vista materializzata, tipo composito, indice né una tabella esterna" -#: commands/tablecmds.c:2213 +#: commands/tablecmds.c:2257 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "la colonna ereditata \"%s\" dev'essere rinominata anche nelle tabelle figlie" -#: commands/tablecmds.c:2245 +#: commands/tablecmds.c:2289 #, c-format msgid "cannot rename system column \"%s\"" msgstr "non è possibile rinominare la colonna di sistema \"%s\"" -#: commands/tablecmds.c:2260 +#: commands/tablecmds.c:2304 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "non è possibile rinominare la colonna ereditata \"%s\"" -#: commands/tablecmds.c:2407 +#: commands/tablecmds.c:2459 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "i vincoli ereditati \"%s\" devono essere rinominati anche nelle tabelle figlie" -#: commands/tablecmds.c:2414 +#: commands/tablecmds.c:2466 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "non è possibile rinominare il vincolo ereditato \"%s\"" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:2628 +#: commands/tablecmds.c:2692 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "non è possibile effettuare %s \"%s\" perché è in uso da query attive in questa sessione" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:2637 +#: commands/tablecmds.c:2701 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "non è possibile effettuare %s \"%s\" perché ha eventi trigger in sospeso" -#: commands/tablecmds.c:3607 +#: commands/tablecmds.c:3761 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "non è possibile riscrivere la relazione di sistema \"%s\"" -#: commands/tablecmds.c:3613 +#: commands/tablecmds.c:3767 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "non è possibile riscrivere la tabella \"%s\" usata come tabella di catalogo" -#: commands/tablecmds.c:3623 +#: commands/tablecmds.c:3777 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "non è possibile riscrivere tabelle temporanee di altre sessioni" -#: commands/tablecmds.c:3854 +#: commands/tablecmds.c:4045 #, c-format msgid "rewriting table \"%s\"" msgstr "riscrittura della tabella \"%s\"" -#: commands/tablecmds.c:3858 +#: commands/tablecmds.c:4049 #, c-format msgid "verifying table \"%s\"" msgstr "verifica della tabella \"%s\"" -#: commands/tablecmds.c:3972 +#: commands/tablecmds.c:4163 #, c-format msgid "column \"%s\" contains null values" msgstr "la colonna \"%s\" contiene valori null" -#: commands/tablecmds.c:3987 commands/tablecmds.c:6985 +#: commands/tablecmds.c:4178 commands/tablecmds.c:7345 #, c-format msgid "check constraint \"%s\" is violated by some row" msgstr "il vincolo di controllo \"%s\" è violato da alcune righe" -#: commands/tablecmds.c:4133 commands/trigger.c:226 -#: rewrite/rewriteDefine.c:265 rewrite/rewriteDefine.c:882 +#: commands/tablecmds.c:4326 commands/trigger.c:234 +#: rewrite/rewriteDefine.c:267 rewrite/rewriteDefine.c:900 #, c-format msgid "\"%s\" is not a table or view" msgstr "\"%s\" non è una tabella né una vista" -#: commands/tablecmds.c:4136 +#: commands/tablecmds.c:4329 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "\"%s\" non è una tabella, una vista, una vista materializzata né un indice" -#: commands/tablecmds.c:4142 +#: commands/tablecmds.c:4335 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "\"%s\" non è una tabella, una vista materializzata né un indice" -#: commands/tablecmds.c:4145 +#: commands/tablecmds.c:4338 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "\"%s\" non è una tabella né una tabella esterna" -#: commands/tablecmds.c:4148 +#: commands/tablecmds.c:4341 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "\"%s\" non è una tabella, un tipo composito né una tabella esterna" -#: commands/tablecmds.c:4151 +#: commands/tablecmds.c:4344 #, c-format msgid "\"%s\" is not a table, materialized view, composite type, or foreign table" msgstr "\"%s\" non è una tabella, una vista materializzata, un tipo composito né una tabella esterna" -#: commands/tablecmds.c:4161 +#: commands/tablecmds.c:4354 #, c-format msgid "\"%s\" is of the wrong type" msgstr "\"%s\" è del tipo sbagliato" -#: commands/tablecmds.c:4311 commands/tablecmds.c:4318 +#: commands/tablecmds.c:4506 commands/tablecmds.c:4513 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "non è possibile modificare il tipo \"%s\" perché la colonna \"%s.%s\" lo usa" -#: commands/tablecmds.c:4325 +#: commands/tablecmds.c:4520 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "non è possibile modificare la tabella esterna \"%s\" perché la colonna \"%s.%s\" usa il suo tipo di riga" -#: commands/tablecmds.c:4332 +#: commands/tablecmds.c:4527 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "non è possibile modificare la tabella \"%s\" perché la colonna \"%s.%s\" usa il suo tipo di riga" -#: commands/tablecmds.c:4394 +#: commands/tablecmds.c:4589 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "non è possibile modificare il tipo \"%s\" perché è il tipo di una tabella con tipo" -#: commands/tablecmds.c:4396 +#: commands/tablecmds.c:4591 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Usa DROP ... CASCADE per eliminare anche le tabelle con tipo." -#: commands/tablecmds.c:4440 +#: commands/tablecmds.c:4635 #, c-format msgid "type %s is not a composite type" msgstr "il tipo %s non è un tipo composito" -#: commands/tablecmds.c:4466 +#: commands/tablecmds.c:4661 #, c-format msgid "cannot add column to typed table" msgstr "non è possibile aggiungere una colonna ad una tabella con tipo" -#: commands/tablecmds.c:4528 commands/tablecmds.c:9727 +#: commands/tablecmds.c:4728 commands/tablecmds.c:10195 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "la tabella figlia \"%s\" ha tipo diverso per la colonna \"%s\"" -#: commands/tablecmds.c:4534 commands/tablecmds.c:9734 +#: commands/tablecmds.c:4734 commands/tablecmds.c:10202 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "la tabella figlia \"%s\" ha ordinamento diverso per la colonna \"%s\"" -#: commands/tablecmds.c:4544 +#: commands/tablecmds.c:4744 #, c-format msgid "child table \"%s\" has a conflicting \"%s\" column" msgstr "la tabella figlia \"%s\" ha la colonna \"%s\" in conflitto" -#: commands/tablecmds.c:4556 +#: commands/tablecmds.c:4756 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "unione delle definizioni della colonna \"%s\" per la tabella figlia \"%s\"" -#: commands/tablecmds.c:4777 +#: commands/tablecmds.c:4983 #, c-format msgid "column must be added to child tables too" msgstr "la colonna deve essere aggiunta anche alle tabelle figlie" -#: commands/tablecmds.c:4844 +#: commands/tablecmds.c:5058 +#, c-format +msgid "column \"%s\" of relation \"%s\" already exists, skipping" +msgstr "la colonna \"%s\" della relazione \"%s\" esiste già, saltata" + +#: commands/tablecmds.c:5065 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "la colonna \"%s\" della relazione \"%s\" esiste già" -#: commands/tablecmds.c:4948 commands/tablecmds.c:5043 -#: commands/tablecmds.c:5091 commands/tablecmds.c:5195 -#: commands/tablecmds.c:5242 commands/tablecmds.c:5326 -#: commands/tablecmds.c:7503 commands/tablecmds.c:8098 +#: commands/tablecmds.c:5176 commands/tablecmds.c:5282 +#: commands/tablecmds.c:5340 commands/tablecmds.c:5454 +#: commands/tablecmds.c:5511 commands/tablecmds.c:5605 +#: commands/tablecmds.c:7863 commands/tablecmds.c:8488 #, c-format msgid "cannot alter system column \"%s\"" msgstr "non è possibile modificare la colonna di sistema \"%s\"" -#: commands/tablecmds.c:4984 +#: commands/tablecmds.c:5212 #, c-format msgid "column \"%s\" is in a primary key" msgstr "la colonna \"%s\" è in una chiave primaria" -#: commands/tablecmds.c:5142 +#: commands/tablecmds.c:5395 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "\"%s\" non è una tabella, una vista materializzata, un indice né una tabella esterna" -#: commands/tablecmds.c:5169 +#: commands/tablecmds.c:5427 #, c-format msgid "statistics target %d is too low" msgstr "il target delle statistiche %d è troppo basso" -#: commands/tablecmds.c:5177 +#: commands/tablecmds.c:5435 #, c-format msgid "lowering statistics target to %d" msgstr "target delle statistiche abbassato a %d" -#: commands/tablecmds.c:5307 +#: commands/tablecmds.c:5585 #, c-format msgid "invalid storage type \"%s\"" msgstr "tipo di immagazzinamento non valido \"%s\"" -#: commands/tablecmds.c:5338 +#: commands/tablecmds.c:5617 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "il tipo di dato della colonna %s può avere solo immagazzinamento PLAIN" -#: commands/tablecmds.c:5372 +#: commands/tablecmds.c:5655 #, c-format msgid "cannot drop column from typed table" msgstr "non è possibile eliminare la colonna da una tabella con tipo" -#: commands/tablecmds.c:5413 +#: commands/tablecmds.c:5699 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "la colonna \"%s\" della relazione \"%s\" non esiste, saltato" -#: commands/tablecmds.c:5426 +#: commands/tablecmds.c:5712 #, c-format msgid "cannot drop system column \"%s\"" msgstr "non è possibile eliminare la colonna di sistema \"%s\"" -#: commands/tablecmds.c:5433 +#: commands/tablecmds.c:5719 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "non è possibile eliminare la colonna ereditata \"%s\"" -#: commands/tablecmds.c:5663 +#: commands/tablecmds.c:5959 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX rinominerà l'indice \"%s\" in \"%s\"" -#: commands/tablecmds.c:5866 +#: commands/tablecmds.c:6181 #, c-format msgid "constraint must be added to child tables too" msgstr "il vincolo deve essere aggiunto anche alle tabelle figlie" -#: commands/tablecmds.c:5936 +#: commands/tablecmds.c:6252 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "la relazione referenziata \"%s\" non è una tabella" -#: commands/tablecmds.c:5959 +#: commands/tablecmds.c:6275 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "i vincoli su tabelle permanenti possono referenziare solo tabelle permanenti" -#: commands/tablecmds.c:5966 +#: commands/tablecmds.c:6282 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "i vincoli su tabelle non loggate possono referenziare solo tabelle permanenti o non loggate" -#: commands/tablecmds.c:5972 +#: commands/tablecmds.c:6288 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "i vincoli su tabelle temporanee possono referenziare solo tabelle temporanee" -#: commands/tablecmds.c:5976 +#: commands/tablecmds.c:6292 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "i vincoli su tabelle temporanee devono riferirsi a tabelle temporanee di questa sessione" -#: commands/tablecmds.c:6037 +#: commands/tablecmds.c:6353 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "i numeri di colonne referenzianti e referenziate per la chiave esterna non combaciano" -#: commands/tablecmds.c:6144 +#: commands/tablecmds.c:6460 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "non è possibile implementare il vincolo di chiave esterna \"%s\"" -#: commands/tablecmds.c:6147 +#: commands/tablecmds.c:6463 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Le colonne chiave \"%s\" e \"%s\" hanno tipi incompatibili: %s e %s." -#: commands/tablecmds.c:6347 commands/tablecmds.c:6470 -#: commands/tablecmds.c:7342 commands/tablecmds.c:7398 +#: commands/tablecmds.c:6670 commands/tablecmds.c:6820 +#: commands/tablecmds.c:7702 commands/tablecmds.c:7758 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "il vincolo \"%s\" della relazione \"%s\" non esiste" -#: commands/tablecmds.c:6353 +#: commands/tablecmds.c:6676 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "il vincolo \"%s\" della relazione \"%s\" non è una chiave esterna" -#: commands/tablecmds.c:6477 +#: commands/tablecmds.c:6827 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "il vincolo \"%s\" della relazione \"%s\" non è una chiave esterna o un vincolo di controllo" -#: commands/tablecmds.c:6546 +#: commands/tablecmds.c:6895 #, c-format msgid "constraint must be validated on child tables too" msgstr "i vincoli devono essere validati anche sulle tabelle figlie" -#: commands/tablecmds.c:6608 +#: commands/tablecmds.c:6964 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "la colonna \"%s\" referenziata dal vincolo di chiave esterna non esiste" -#: commands/tablecmds.c:6613 +#: commands/tablecmds.c:6969 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "non possono esserci più di %d chiavi in una chiave esterna" -#: commands/tablecmds.c:6678 +#: commands/tablecmds.c:7034 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "non è possibile usare una chiave primaria deferita per la tabella referenziata \"%s\"" -#: commands/tablecmds.c:6695 +#: commands/tablecmds.c:7051 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "la tabella referenziata \"%s\" non ha una chiave primaria" -#: commands/tablecmds.c:6760 +#: commands/tablecmds.c:7116 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "la lista di colonne referenziate dalla chiave esterna non deve contenere duplicati" -#: commands/tablecmds.c:6854 +#: commands/tablecmds.c:7210 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "non è possibile usare un vincolo univoco deferito per la tabella referenziata \"%s\"" -#: commands/tablecmds.c:6859 +#: commands/tablecmds.c:7215 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "non c'è alcun vincolo univoco che corrisponda alle chiavi indicate per la tabella referenziata \"%s\"" -#: commands/tablecmds.c:7018 +#: commands/tablecmds.c:7378 #, c-format msgid "validating foreign key constraint \"%s\"" msgstr "validazione del vincolo di chiave esterna \"%s\"" -#: commands/tablecmds.c:7314 +#: commands/tablecmds.c:7674 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "non è possibile eliminare il vincolo ereditato \"%s\" della relazione \"%s\"" -#: commands/tablecmds.c:7348 +#: commands/tablecmds.c:7708 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "il vincolo \"%s\" della relazione \"%s\" non esiste, saltato" -#: commands/tablecmds.c:7487 +#: commands/tablecmds.c:7847 #, c-format msgid "cannot alter column type of typed table" msgstr "non è possibile modificare il tipo di colonna di una tabella con tipo" -#: commands/tablecmds.c:7510 +#: commands/tablecmds.c:7870 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "non è possibile modificare la colonna ereditata \"%s\"" -#: commands/tablecmds.c:7557 +#: commands/tablecmds.c:7919 #, c-format -msgid "transform expression must not return a set" -msgstr "l'espressione di trasformazione non può restituire un insieme" +msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" +msgstr "il risultato della clausola USING per la colonna \"%s\" non può essere convertito automaticamente al tipo %s" -#: commands/tablecmds.c:7576 +#: commands/tablecmds.c:7922 +#, c-format +msgid "You might need to add an explicit cast." +msgstr "Potresti dover aggiungere una conversione esplicita." + +#: commands/tablecmds.c:7926 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "la colonna \"%s\" non può essere convertita automaticamente al tipo %s" -#: commands/tablecmds.c:7578 +#. translator: USING is SQL, don't translate it +#: commands/tablecmds.c:7929 #, c-format -msgid "Specify a USING expression to perform the conversion." -msgstr "Specifica una espressione USING per effettuare la conversione." +msgid "You might need to specify \"USING %s::%s\"." +msgstr "Potresti dover specificare \"USING %s::%s\"." -#: commands/tablecmds.c:7627 +#: commands/tablecmds.c:7982 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "il tipo della colonna ereditata \"%s\" deve essere cambiato anche nelle tabelle figlie" -#: commands/tablecmds.c:7708 +#: commands/tablecmds.c:8069 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "non è possibile cambiare il tipo della colonna \"%s\" due volte" -#: commands/tablecmds.c:7744 +#: commands/tablecmds.c:8105 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "il valore predefinito della colonna \"%s\" non può essere convertito automaticamente al tipo %s" -#: commands/tablecmds.c:7870 +#: commands/tablecmds.c:8231 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "non è possibile cambiare il tipo di una colonna usata in una vista o una regola" -#: commands/tablecmds.c:7871 commands/tablecmds.c:7890 +#: commands/tablecmds.c:8232 commands/tablecmds.c:8251 +#: commands/tablecmds.c:8269 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s dipende dalla colonna \"%s\"" -#: commands/tablecmds.c:7889 +#: commands/tablecmds.c:8250 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "non è possibile cambiare il tipo di una colonna usata nella definizione di un trigger" -#: commands/tablecmds.c:8465 +#: commands/tablecmds.c:8268 +#, c-format +msgid "cannot alter type of a column used in a policy definition" +msgstr "non è possibile cambiare il tipo di una colonna usata nella definizione di una politica" + +#: commands/tablecmds.c:8913 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "non è possibile cambiare il proprietario dell'indice \"%s\"" -#: commands/tablecmds.c:8467 +#: commands/tablecmds.c:8915 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Cambia il proprietario della tabella dell'indice invece." -#: commands/tablecmds.c:8483 +#: commands/tablecmds.c:8931 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "non è possibile cambiare il proprietario della sequenza \"%s\"" -#: commands/tablecmds.c:8485 commands/tablecmds.c:10644 +#: commands/tablecmds.c:8933 commands/tablecmds.c:11303 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "La sequenza \"%s\" è collegata alla tabella \"%s\"." -#: commands/tablecmds.c:8497 commands/tablecmds.c:11280 +#: commands/tablecmds.c:8945 commands/tablecmds.c:11944 #, c-format msgid "Use ALTER TYPE instead." msgstr "È possibile usare ALTER TYPE invece." -#: commands/tablecmds.c:8506 +#: commands/tablecmds.c:8954 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "\"%s\" non è una tabella, una vista, una sequenza né una tabella esterna" -#: commands/tablecmds.c:8842 +#: commands/tablecmds.c:9298 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "non è possibile avere più di un sottocomando SET TABLESPACE" -#: commands/tablecmds.c:8915 +#: commands/tablecmds.c:9371 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "\"%s\" non è una tabella, una vista, una vista materializzata né una tabella TOAST" -#: commands/tablecmds.c:8948 commands/view.c:474 +#: commands/tablecmds.c:9404 commands/view.c:481 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION è supportato solo su viste aggiornabili automaticamente" -#: commands/tablecmds.c:9094 +#: commands/tablecmds.c:9550 #, c-format msgid "cannot move system relation \"%s\"" msgstr "non è possibile spostare la relazione \"%s\"" -#: commands/tablecmds.c:9110 +#: commands/tablecmds.c:9566 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "non è possibile spostare tabelle temporanee di altre sessioni" -#: commands/tablecmds.c:9238 +#: commands/tablecmds.c:9694 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "solo tabelle, indici e viste materializzate esistono nei tablespace" -#: commands/tablecmds.c:9250 +#: commands/tablecmds.c:9706 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "non è possibile spostare relazioni dentro o fuori il tablespace pg_global" -#: commands/tablecmds.c:9341 +#: commands/tablecmds.c:9797 #, c-format msgid "aborting because lock on relation \"%s\".\"%s\" is not available" msgstr "interruzione perché non c'è un lock disponibile sulla relazione \"%s\".\"%s\"" -#: commands/tablecmds.c:9357 +#: commands/tablecmds.c:9813 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "nessuna relazione corrispondente trovata nel tablespace \"%s\"" -#: commands/tablecmds.c:9418 storage/buffer/bufmgr.c:501 +#: commands/tablecmds.c:9877 storage/buffer/bufmgr.c:801 #, c-format msgid "invalid page in block %u of relation %s" msgstr "pagina non valida nel blocco %u della relazione %s" -#: commands/tablecmds.c:9500 +#: commands/tablecmds.c:9959 #, c-format msgid "cannot change inheritance of typed table" msgstr "non è possibile cambiare ereditarietà di tabelle con tipo" -#: commands/tablecmds.c:9546 +#: commands/tablecmds.c:10009 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "non è possibile ereditare tabelle temporanee di un'altra sessione" -#: commands/tablecmds.c:9600 +#: commands/tablecmds.c:10063 #, c-format msgid "circular inheritance not allowed" msgstr "l'ereditarietà circolare non è consentita" -#: commands/tablecmds.c:9601 +#: commands/tablecmds.c:10064 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" è già figlia di \"%s\"." -#: commands/tablecmds.c:9609 +#: commands/tablecmds.c:10072 #, c-format msgid "table \"%s\" without OIDs cannot inherit from table \"%s\" with OIDs" msgstr "la tabella \"%s\" senza OID non può ereditare dalla tabella \"%s\" con OID" -#: commands/tablecmds.c:9745 +#: commands/tablecmds.c:10213 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "la colonna \"%s\" nella tabella figlia dev'essere marcata NOT NULL" -#: commands/tablecmds.c:9761 +#: commands/tablecmds.c:10229 #, c-format msgid "child table is missing column \"%s\"" msgstr "la tabella figlia non ha la colonna \"%s\"" -#: commands/tablecmds.c:9844 +#: commands/tablecmds.c:10312 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "la tabella figlia \"%s\" ha una definizione diversa del vincolo di controllo \"%s\"" -#: commands/tablecmds.c:9852 +#: commands/tablecmds.c:10320 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "il vincolo \"%s\" è in conflitto con un vincolo non ereditato nella tabella figlia \"%s\"" -#: commands/tablecmds.c:9876 +#: commands/tablecmds.c:10344 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "la tabella figlia non ha il vincolo \"%s\"" -#: commands/tablecmds.c:9956 +#: commands/tablecmds.c:10428 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "la relazione \"%s\" non è genitore della relazione \"%s\"" -#: commands/tablecmds.c:10182 +#: commands/tablecmds.c:10662 #, c-format msgid "typed tables cannot inherit" msgstr "le tabelle con tipo non possono essere ereditate" -#: commands/tablecmds.c:10213 +#: commands/tablecmds.c:10693 #, c-format msgid "table is missing column \"%s\"" msgstr "la tabella non ha la colonna \"%s\"" -#: commands/tablecmds.c:10223 +#: commands/tablecmds.c:10703 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "la tabella ha la colonna \"%s\" laddove il tipo richiede \"%s\"" -#: commands/tablecmds.c:10232 +#: commands/tablecmds.c:10712 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "la tabella \"%s\" ha tipo diverso per la colonna \"%s\"" -#: commands/tablecmds.c:10245 +#: commands/tablecmds.c:10725 #, c-format msgid "table has extra column \"%s\"" msgstr "la tabella ha la colonna \"%s\" in eccesso" -#: commands/tablecmds.c:10295 +#: commands/tablecmds.c:10777 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" non è una tabella con tipo" -#: commands/tablecmds.c:10478 +#: commands/tablecmds.c:10960 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "non è possibile usare l'indice non univoco \"%s\" come identità di replica" -#: commands/tablecmds.c:10484 +#: commands/tablecmds.c:10966 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "non è possibile usare l'indice non immediato \"%s\" come identità di replica" -#: commands/tablecmds.c:10490 +#: commands/tablecmds.c:10972 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "non è possibile usare l'indice su espressione \"%s\" come identità di replica" -#: commands/tablecmds.c:10496 +#: commands/tablecmds.c:10978 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "non è possibile usare l'indice parziale \"%s\" come identità di replica" -#: commands/tablecmds.c:10502 +#: commands/tablecmds.c:10984 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "non è possibile usare l'indice non valido \"%s\" come identità di replica" -#: commands/tablecmds.c:10520 +#: commands/tablecmds.c:11002 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "l'indice \"%s\" non può essere usato come identità di replica perché la colonna \"%s\" può essere NULL" -#: commands/tablecmds.c:10643 +#: commands/tablecmds.c:11170 +#, c-format +msgid "cannot change logged status of table %s" +msgstr "non è possibile cambiare lo stato di log della tabella %s" + +#: commands/tablecmds.c:11172 +#, c-format +msgid "Table %s is temporary." +msgstr "La tabella %s è temporanea." + +#: commands/tablecmds.c:11231 +#, c-format +msgid "cannot change status of table %s to logged" +msgstr "non è possibile cambiare lo stato della tabella %s a loggata" + +#: commands/tablecmds.c:11233 +#, c-format +msgid "Table %s references unlogged table %s." +msgstr "La tabella %s è referenziata dalla tabella non loggata %s." + +#: commands/tablecmds.c:11243 +#, c-format +msgid "cannot change status of table %s to unlogged" +msgstr "non è possibile cambiare lo stato della tabella %s a non loggata" + +#: commands/tablecmds.c:11245 +#, c-format +msgid "Logged table %s is referenced by table %s." +msgstr "La tabella loggata %s è referenziata dalla tabella %s." + +#: commands/tablecmds.c:11302 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "non è possibile spostare una sequenza con proprietario in uno schema diverso" -#: commands/tablecmds.c:10739 +#: commands/tablecmds.c:11403 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "la relazione \"%s\" esiste già nello schema \"%s\"" -#: commands/tablecmds.c:11264 +#: commands/tablecmds.c:11928 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\" non è un tipo composito" -#: commands/tablecmds.c:11294 +#: commands/tablecmds.c:11958 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "\"%s\" non è una tabella, una vista, una vista materializzata, una sequenza né una tabella esterna" -#: commands/tablespace.c:160 commands/tablespace.c:177 -#: commands/tablespace.c:188 commands/tablespace.c:196 -#: commands/tablespace.c:623 replication/slot.c:930 storage/file/copydir.c:47 +#: commands/tablespace.c:162 commands/tablespace.c:179 +#: commands/tablespace.c:190 commands/tablespace.c:198 +#: commands/tablespace.c:624 replication/slot.c:985 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "creazione della directory \"%s\" fallita: %m" -#: commands/tablespace.c:207 +#: commands/tablespace.c:209 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "non è stato possibile ottenere informazioni sulla directory \"%s\": %m" -#: commands/tablespace.c:216 +#: commands/tablespace.c:218 #, c-format msgid "\"%s\" exists but is not a directory" msgstr "\"%s\" esiste ma non è una directory" -#: commands/tablespace.c:247 +#: commands/tablespace.c:249 #, c-format msgid "permission denied to create tablespace \"%s\"" msgstr "permesso di creare il tablespace \"%s\" negato" -#: commands/tablespace.c:249 +#: commands/tablespace.c:251 #, c-format msgid "Must be superuser to create a tablespace." msgstr "Solo un superutente può incrementare questo valore." -#: commands/tablespace.c:265 +#: commands/tablespace.c:267 #, c-format msgid "tablespace location cannot contain single quotes" msgstr "la posizione del tablespace non può contenere apici" -#: commands/tablespace.c:275 +#: commands/tablespace.c:277 #, c-format msgid "tablespace location must be an absolute path" msgstr "la posizione del tablespace dev'essere un percorso assoluto" -#: commands/tablespace.c:286 +#: commands/tablespace.c:288 #, c-format msgid "tablespace location \"%s\" is too long" msgstr "la posizione del tablespace \"%s\" è troppo lunga" -#: commands/tablespace.c:296 commands/tablespace.c:894 +#: commands/tablespace.c:295 +#, c-format +msgid "tablespace location should not be inside the data directory" +msgstr "la locazione del tablespace non dev'essere all'interno della directory dei dati" + +#: commands/tablespace.c:304 commands/tablespace.c:937 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "il nome del tablespace \"%s\" non è accettabile" -#: commands/tablespace.c:298 commands/tablespace.c:895 +#: commands/tablespace.c:306 commands/tablespace.c:938 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "Il prefisso \"pg_\" è riservato per i tablespace di sistema." -#: commands/tablespace.c:308 commands/tablespace.c:907 +#: commands/tablespace.c:316 commands/tablespace.c:950 #, c-format msgid "tablespace \"%s\" already exists" msgstr "il tablespace \"%s\" esiste già" -#: commands/tablespace.c:386 commands/tablespace.c:551 -#: replication/basebackup.c:222 replication/basebackup.c:1064 -#: utils/adt/misc.c:365 -#, c-format -msgid "tablespaces are not supported on this platform" -msgstr "i tablespace non sono supportati su questa piattaforma" - -#: commands/tablespace.c:426 commands/tablespace.c:877 -#: commands/tablespace.c:956 commands/tablespace.c:1025 -#: commands/tablespace.c:1158 commands/tablespace.c:1358 +#: commands/tablespace.c:429 commands/tablespace.c:920 +#: commands/tablespace.c:1001 commands/tablespace.c:1070 +#: commands/tablespace.c:1203 commands/tablespace.c:1403 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "il tablespace \"%s\" non esiste" -#: commands/tablespace.c:432 +#: commands/tablespace.c:435 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "il tablespace \"%s\" non esiste, saltato" -#: commands/tablespace.c:508 +#: commands/tablespace.c:511 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "il tablespace \"%s\" non è vuoto" -#: commands/tablespace.c:582 +#: commands/tablespace.c:583 #, c-format msgid "directory \"%s\" does not exist" msgstr "la directory \"%s\" non esiste" -#: commands/tablespace.c:583 +#: commands/tablespace.c:584 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "Crea questa directory per il tablespace prima di riavviare il server." -#: commands/tablespace.c:588 +#: commands/tablespace.c:589 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "impostazione dei permessi sulla directory \"%s\" fallita: %m" -#: commands/tablespace.c:618 +#: commands/tablespace.c:619 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "la directory \"%s\" già è in uso come tablespace" -#: commands/tablespace.c:642 commands/tablespace.c:764 -#: commands/tablespace.c:777 commands/tablespace.c:801 +#: commands/tablespace.c:743 commands/tablespace.c:756 +#: commands/tablespace.c:780 commands/tablespace.c:871 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "rimozione della directory \"%s\" fallita: %m" -#: commands/tablespace.c:650 commands/tablespace.c:812 +#: commands/tablespace.c:792 commands/tablespace.c:880 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "rimozione del link simbolico \"%s\" fallita: %m" -#: commands/tablespace.c:661 +#: commands/tablespace.c:802 commands/tablespace.c:888 #, c-format -msgid "could not create symbolic link \"%s\": %m" -msgstr "creazione del link simbolico \"%s\" fallita: %m" +msgid "not a directory or symbolic link: \"%s\"" +msgstr "non è una directory o un link simbolico: \"%s\"" -#: commands/tablespace.c:725 commands/tablespace.c:735 -#: postmaster/postmaster.c:1284 replication/basebackup.c:349 -#: replication/basebackup.c:667 storage/file/copydir.c:53 -#: storage/file/copydir.c:96 storage/file/fd.c:1951 storage/ipc/dsm.c:300 -#: utils/adt/genfile.c:354 utils/adt/misc.c:267 utils/misc/tzparser.c:339 +#: commands/tablespace.c:859 #, c-format -msgid "could not open directory \"%s\": %m" -msgstr "apertura della directory \"%s\" fallita: %m" +msgid "could not stat \"%s\": %m" +msgstr "richiesta informazioni su \"%s\" non riuscita: %m" -#: commands/tablespace.c:1030 +#: commands/tablespace.c:1075 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "Il tablespace \"%s\" non esiste." -#: commands/tablespace.c:1457 +#: commands/tablespace.c:1502 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "rimozioni delle directory per il tablespace %u fallita" -#: commands/tablespace.c:1459 +#: commands/tablespace.c:1504 #, c-format msgid "You can remove the directories manually if necessary." msgstr "Puoi rimuovere le directory manualmente se necessario." -#: commands/trigger.c:175 +#: commands/trigger.c:183 #, c-format msgid "\"%s\" is a table" msgstr "\"%s\" non è una tabella" -#: commands/trigger.c:177 +#: commands/trigger.c:185 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "Le tabelle non possono avere trigger INSTEAD OF." -#: commands/trigger.c:188 commands/trigger.c:195 +#: commands/trigger.c:196 commands/trigger.c:203 #, c-format msgid "\"%s\" is a view" msgstr "\"%s\" è una vista" -#: commands/trigger.c:190 +#: commands/trigger.c:198 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "Le viste non possono avere trigger di riga BEFORE o AFTER." -#: commands/trigger.c:197 +#: commands/trigger.c:205 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "Le viste non possono avere trigger TRUNCATE." -#: commands/trigger.c:205 commands/trigger.c:212 commands/trigger.c:219 +#: commands/trigger.c:213 commands/trigger.c:220 commands/trigger.c:227 #, c-format msgid "\"%s\" is a foreign table" msgstr "\"%s\" è una tabella esterna" -#: commands/trigger.c:207 +#: commands/trigger.c:215 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "Le tabelle esterne non possono avere trigger INSTEAD OF." -#: commands/trigger.c:214 +#: commands/trigger.c:222 #, c-format msgid "Foreign tables cannot have TRUNCATE triggers." msgstr "Le tabelle esterne non possono avere trigger TRUNCATE." -#: commands/trigger.c:221 +#: commands/trigger.c:229 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "Le tabelle esterne non possono avere trigger di vincolo." -#: commands/trigger.c:284 +#: commands/trigger.c:292 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "i trigger TRUNCATE FOR EACH ROW non sono supportati" -#: commands/trigger.c:292 +#: commands/trigger.c:300 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "i trigger INSTEAD OF devono essere FOR EACH ROW" -#: commands/trigger.c:296 +#: commands/trigger.c:304 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "i trigger INSTEAD OF non possono avere condizioni WHEN" -#: commands/trigger.c:300 +#: commands/trigger.c:308 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "i trigger INSTEAD OF non possono avere liste di colonne" -#: commands/trigger.c:359 commands/trigger.c:372 +#: commands/trigger.c:367 commands/trigger.c:380 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "la condizione WHEN del trigger di istruzione non può riferirsi a valori di colonna" -#: commands/trigger.c:364 +#: commands/trigger.c:372 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "la condizione WHEN dei trigger INSERT non può usare OLD" -#: commands/trigger.c:377 +#: commands/trigger.c:385 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "la condizione WHEN del trigger DELETE non può usare NEW" -#: commands/trigger.c:382 +#: commands/trigger.c:390 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "la condizione WHEN del trigger BEFORE non può usare le colonne di sistema NEW" -#: commands/trigger.c:427 +#: commands/trigger.c:435 #, c-format msgid "changing return type of function %s from \"opaque\" to \"trigger\"" msgstr "modifica del tipo restituito dalla funzione %s da \"opaque\" a \"trigger\"" -#: commands/trigger.c:434 +#: commands/trigger.c:442 #, c-format msgid "function %s must return type \"trigger\"" msgstr "la funzione %s deve restituire il tipo \"trigger\"" -#: commands/trigger.c:546 commands/trigger.c:1295 +#: commands/trigger.c:554 commands/trigger.c:1304 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "il trigger \"%s\" per la relazione \"%s\" esiste già" -#: commands/trigger.c:831 +#: commands/trigger.c:839 msgid "Found referenced table's UPDATE trigger." msgstr "Trovato trigger UPDATE della tabella referenziata." -#: commands/trigger.c:832 +#: commands/trigger.c:840 msgid "Found referenced table's DELETE trigger." msgstr "Trovato trigger DELETE della tabella referenziata." -#: commands/trigger.c:833 +#: commands/trigger.c:841 msgid "Found referencing table's trigger." msgstr "Trovato trigger della tabella referenziante." -#: commands/trigger.c:942 commands/trigger.c:958 +#: commands/trigger.c:950 commands/trigger.c:966 #, c-format msgid "ignoring incomplete trigger group for constraint \"%s\" %s" msgstr "ignorato gruppo di trigger incompleto per il vincolo \"%s\" %s" -#: commands/trigger.c:970 +#: commands/trigger.c:978 #, c-format msgid "converting trigger group into constraint \"%s\" %s" msgstr "conversione del gruppo di trigger nel vincolo \"%s\" %s" -#: commands/trigger.c:1112 commands/trigger.c:1217 +#: commands/trigger.c:1120 commands/trigger.c:1225 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "\"%s\" non è una tabella, una vista né una tabella esterna" -#: commands/trigger.c:1183 commands/trigger.c:1343 commands/trigger.c:1459 +#: commands/trigger.c:1191 commands/trigger.c:1352 commands/trigger.c:1470 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "il trigger \"%s\" per la tabella \"%s\" non esiste" -#: commands/trigger.c:1424 +#: commands/trigger.c:1435 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "permesso negato: \"%s\" è un trigger di sistema" -#: commands/trigger.c:1920 +#: commands/trigger.c:1931 #, c-format msgid "trigger function %u returned null value" msgstr "la funzione trigger %u ha restituito un valore null" -#: commands/trigger.c:1979 commands/trigger.c:2178 commands/trigger.c:2382 -#: commands/trigger.c:2664 +#: commands/trigger.c:1990 commands/trigger.c:2189 commands/trigger.c:2393 +#: commands/trigger.c:2665 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "il trigger BEFORE STATEMENT non può restituire un valore" -#: commands/trigger.c:2726 executor/nodeModifyTable.c:434 -#: executor/nodeModifyTable.c:712 +#: commands/trigger.c:2727 executor/nodeModifyTable.c:631 +#: executor/nodeModifyTable.c:919 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "la tupla da aggiornare era stata già modificata da un'operazione fatta eseguire da un comando corrente" -#: commands/trigger.c:2727 executor/nodeModifyTable.c:435 -#: executor/nodeModifyTable.c:713 +#: commands/trigger.c:2728 executor/nodeModifyTable.c:632 +#: executor/nodeModifyTable.c:920 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Considera l'utilizzo di un trigger AFTER invece di un trigger BEFORE per propagare i cambiamenti ad altre righe." -#: commands/trigger.c:2741 executor/execMain.c:2059 -#: executor/nodeLockRows.c:165 executor/nodeModifyTable.c:447 -#: executor/nodeModifyTable.c:725 +#: commands/trigger.c:2742 executor/execMain.c:2332 +#: executor/nodeLockRows.c:216 executor/nodeModifyTable.c:183 +#: executor/nodeModifyTable.c:644 executor/nodeModifyTable.c:932 +#: executor/nodeModifyTable.c:1099 #, c-format msgid "could not serialize access due to concurrent update" msgstr "serializzazione dell'accesso fallita a causa di modifiche concorrenti" -#: commands/trigger.c:4538 +#: commands/trigger.c:4580 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "il vincolo \"%s\" non è deferibile" -#: commands/trigger.c:4561 +#: commands/trigger.c:4603 #, c-format msgid "constraint \"%s\" does not exist" msgstr "il vincolo \"%s\" non esiste" -#: commands/tsearchcmds.c:114 commands/tsearchcmds.c:671 +#: commands/tsearchcmds.c:115 commands/tsearchcmds.c:685 #, c-format msgid "function %s should return type %s" msgstr "la funzione %s dovrebbe restituire il tipo %s" -#: commands/tsearchcmds.c:186 +#: commands/tsearchcmds.c:192 #, c-format msgid "must be superuser to create text search parsers" msgstr "solo un superutente può creare analizzatori di ricerca di testo" -#: commands/tsearchcmds.c:234 +#: commands/tsearchcmds.c:240 #, c-format msgid "text search parser parameter \"%s\" not recognized" msgstr "parametro dell'analizzatore di ricerca di testo \"%s\" non riconosciuto" -#: commands/tsearchcmds.c:244 +#: commands/tsearchcmds.c:250 #, c-format msgid "text search parser start method is required" msgstr "il metodo start dell'analizzatore di ricerca di testo è richiesto" -#: commands/tsearchcmds.c:249 +#: commands/tsearchcmds.c:255 #, c-format msgid "text search parser gettoken method is required" msgstr "il metodo gettoken dell'analizzatore di ricerca di testo è richiesto" -#: commands/tsearchcmds.c:254 +#: commands/tsearchcmds.c:260 #, c-format msgid "text search parser end method is required" msgstr "il metodo end dell'analizzatore di ricerca di testo è richiesto" -#: commands/tsearchcmds.c:259 +#: commands/tsearchcmds.c:265 #, c-format msgid "text search parser lextypes method is required" msgstr "il metodo lextype dell'analizzatore di ricerca di testo è richiesto" -#: commands/tsearchcmds.c:376 +#: commands/tsearchcmds.c:386 #, c-format msgid "text search template \"%s\" does not accept options" msgstr "il modello di ricerca di testo \"%s\" non accetta opzioni" -#: commands/tsearchcmds.c:449 +#: commands/tsearchcmds.c:460 #, c-format msgid "text search template is required" msgstr "il modello di ricerca di testo è richiesto" -#: commands/tsearchcmds.c:735 +#: commands/tsearchcmds.c:752 #, c-format msgid "must be superuser to create text search templates" msgstr "solo un superutente può creare modelli di ricerca di testo" -#: commands/tsearchcmds.c:772 +#: commands/tsearchcmds.c:789 #, c-format msgid "text search template parameter \"%s\" not recognized" msgstr "parametro del modello di ricerca di testo \"%s\" non riconosciuto" -#: commands/tsearchcmds.c:782 +#: commands/tsearchcmds.c:799 #, c-format msgid "text search template lexize method is required" msgstr "il metodo lexize del modello di ricerca di testo è richiesto" -#: commands/tsearchcmds.c:988 +#: commands/tsearchcmds.c:1008 #, c-format msgid "text search configuration parameter \"%s\" not recognized" msgstr "parametro della configurazione di ricerca di testo \"%s\" non riconosciuto" -#: commands/tsearchcmds.c:995 +#: commands/tsearchcmds.c:1015 #, c-format msgid "cannot specify both PARSER and COPY options" msgstr "non è possibile specificare sia l'opzione PARSER che COPY" -#: commands/tsearchcmds.c:1023 +#: commands/tsearchcmds.c:1051 #, c-format msgid "text search parser is required" msgstr "l'analizzatore per la ricerca di testo è richiesto" -#: commands/tsearchcmds.c:1247 +#: commands/tsearchcmds.c:1278 #, c-format msgid "token type \"%s\" does not exist" msgstr "il tipo di token \"%s\" non esiste" -#: commands/tsearchcmds.c:1469 +#: commands/tsearchcmds.c:1502 #, c-format msgid "mapping for token type \"%s\" does not exist" msgstr "la mappatura per il token \"%s\" non esiste" -#: commands/tsearchcmds.c:1475 +#: commands/tsearchcmds.c:1508 #, c-format msgid "mapping for token type \"%s\" does not exist, skipping" msgstr "la mappatura per il token \"%s\" non esiste, saltato" -#: commands/tsearchcmds.c:1628 commands/tsearchcmds.c:1739 +#: commands/tsearchcmds.c:1663 commands/tsearchcmds.c:1774 #, c-format msgid "invalid parameter list format: \"%s\"" msgstr "formato di lista di parametri non valido: \"%s\"" -#: commands/typecmds.c:184 +#: commands/typecmds.c:179 #, c-format msgid "must be superuser to create a base type" msgstr "solo un superutente può creare un tipo di base" -#: commands/typecmds.c:290 commands/typecmds.c:1371 +#: commands/typecmds.c:286 commands/typecmds.c:1419 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "attributo del tipo \"%s\" non riconosciuto" -#: commands/typecmds.c:344 +#: commands/typecmds.c:340 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "categoria non valida \"%s\": dev'essere semplice ASCII" -#: commands/typecmds.c:363 +#: commands/typecmds.c:359 #, c-format msgid "array element type cannot be %s" msgstr "il tipo di elemento dell'array non può essere %s" -#: commands/typecmds.c:395 +#: commands/typecmds.c:391 #, c-format msgid "alignment \"%s\" not recognized" msgstr "allineamento \"%s\" non riconosciuto" -#: commands/typecmds.c:412 +#: commands/typecmds.c:408 #, c-format msgid "storage \"%s\" not recognized" msgstr "immagazzinamento \"%s\" non riconosciuto" -#: commands/typecmds.c:423 +#: commands/typecmds.c:419 #, c-format msgid "type input function must be specified" msgstr "la funzione di input del tipo deve essere specificata" -#: commands/typecmds.c:427 +#: commands/typecmds.c:423 #, c-format msgid "type output function must be specified" msgstr "la funzione di output del tipo deve essere specificata" -#: commands/typecmds.c:432 +#: commands/typecmds.c:428 #, c-format msgid "type modifier output function is useless without a type modifier input function" msgstr "la funzione di output del modificatore di tipo è inutile senza una funzione di input" -#: commands/typecmds.c:455 +#: commands/typecmds.c:451 #, c-format msgid "changing return type of function %s from \"opaque\" to %s" msgstr "modifica del tipo restituito dalla funzione %s da \"opaque\" a %s" -#: commands/typecmds.c:462 +#: commands/typecmds.c:458 #, c-format msgid "type input function %s must return type %s" msgstr "la funzione %s di input di tipo deve restituire il tipo %s" -#: commands/typecmds.c:472 +#: commands/typecmds.c:468 #, c-format msgid "changing return type of function %s from \"opaque\" to \"cstring\"" msgstr "modifica del tipo restituito dalla funzione %s da \"opaque\" a \"cstring\"" -#: commands/typecmds.c:479 +#: commands/typecmds.c:475 #, c-format msgid "type output function %s must return type \"cstring\"" msgstr "la funzione %s di output di tipo deve restituire il tipo \"cstring\"" -#: commands/typecmds.c:488 +#: commands/typecmds.c:484 #, c-format msgid "type receive function %s must return type %s" msgstr "la funzione receive %s del tipo deve restituire il tipo %s" -#: commands/typecmds.c:497 +#: commands/typecmds.c:493 #, c-format msgid "type send function %s must return type \"bytea\"" msgstr "la funzione send %s del tipo deve restituire il tipo \"bytea\"" -#: commands/typecmds.c:762 +#: commands/typecmds.c:558 +#, c-format +msgid "type input function %s should not be volatile" +msgstr "la funzione di input %s del tipo non può essere volatile" + +#: commands/typecmds.c:563 +#, c-format +msgid "type output function %s should not be volatile" +msgstr "la funzione di output %s del tipo non può essere volatile" + +#: commands/typecmds.c:568 +#, c-format +msgid "type receive function %s should not be volatile" +msgstr "la funzione receive %s del tipo non può essere volatile" + +#: commands/typecmds.c:573 +#, c-format +msgid "type send function %s should not be volatile" +msgstr "la funzione send %s del tipo non può essere volatile" + +#: commands/typecmds.c:578 +#, c-format +msgid "type modifier input function %s should not be volatile" +msgstr "la funzione di input del modificatore %s del tipo non può essere volatile" + +#: commands/typecmds.c:583 +#, c-format +msgid "type modifier output function %s should not be volatile" +msgstr "la funzione di output del modificatore %s del tipo non può essere volatile" + +#: commands/typecmds.c:805 #, c-format msgid "\"%s\" is not a valid base type for a domain" msgstr "\"%s\" non è un tipo di base valido per un dominio" -#: commands/typecmds.c:848 +#: commands/typecmds.c:891 #, c-format msgid "multiple default expressions" msgstr "più di una espressione di default" -#: commands/typecmds.c:910 commands/typecmds.c:919 +#: commands/typecmds.c:953 commands/typecmds.c:962 #, c-format msgid "conflicting NULL/NOT NULL constraints" msgstr "vincoli NULL/NOT NULL in conflitto" -#: commands/typecmds.c:935 +#: commands/typecmds.c:978 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" msgstr "i vincoli di controllo per i domini non possono essere NO INHERIT" -#: commands/typecmds.c:944 commands/typecmds.c:2453 +#: commands/typecmds.c:987 commands/typecmds.c:2518 #, c-format msgid "unique constraints not possible for domains" msgstr "i vincoli univoci non sono ammessi per i domini" -#: commands/typecmds.c:950 commands/typecmds.c:2459 +#: commands/typecmds.c:993 commands/typecmds.c:2524 #, c-format msgid "primary key constraints not possible for domains" msgstr "i vincoli di chiave primaria non sono ammessi per i domini" -#: commands/typecmds.c:956 commands/typecmds.c:2465 +#: commands/typecmds.c:999 commands/typecmds.c:2530 #, c-format msgid "exclusion constraints not possible for domains" msgstr "i vincoli di esclusione non sono ammessi per i domini" -#: commands/typecmds.c:962 commands/typecmds.c:2471 +#: commands/typecmds.c:1005 commands/typecmds.c:2536 #, c-format msgid "foreign key constraints not possible for domains" msgstr "i vincoli di chiave esterna non sono ammessi per i domini" -#: commands/typecmds.c:971 commands/typecmds.c:2480 +#: commands/typecmds.c:1014 commands/typecmds.c:2545 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "specificare la deferibilità dei vincoli non è ammesso per i domini" -#: commands/typecmds.c:1243 utils/cache/typcache.c:1071 +#: commands/typecmds.c:1289 utils/cache/typcache.c:1579 #, c-format msgid "%s is not an enum" msgstr "%s non è una enumerazione" -#: commands/typecmds.c:1379 +#: commands/typecmds.c:1427 #, c-format msgid "type attribute \"subtype\" is required" msgstr "l'attributo \"subtype\" del tipo è richiesto" -#: commands/typecmds.c:1384 +#: commands/typecmds.c:1432 #, c-format msgid "range subtype cannot be %s" msgstr "il sottotipo dell'intervallo non può essere %s" -#: commands/typecmds.c:1403 +#: commands/typecmds.c:1451 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "è stato specificato un ordinamento per gli intervalli ma il sottotipo non supporta ordinamenti" -#: commands/typecmds.c:1639 +#: commands/typecmds.c:1684 #, c-format msgid "changing argument type of function %s from \"opaque\" to \"cstring\"" msgstr "modifica del tipo di argomento della funzione %s da \"opaque\" a \"cstring\"" -#: commands/typecmds.c:1690 +#: commands/typecmds.c:1735 #, c-format msgid "changing argument type of function %s from \"opaque\" to %s" msgstr "modifica del tipo di argomento della funzione %s da \"opaque\" a %s" -#: commands/typecmds.c:1789 +#: commands/typecmds.c:1834 #, c-format msgid "typmod_in function %s must return type \"integer\"" msgstr "la funzione typmod_in %s deve restituire il tipo \"integer\"" -#: commands/typecmds.c:1816 +#: commands/typecmds.c:1861 #, c-format msgid "typmod_out function %s must return type \"cstring\"" msgstr "la funzione typmod_out %s deve restituire il tipo \"cstring\"" -#: commands/typecmds.c:1843 +#: commands/typecmds.c:1888 #, c-format msgid "type analyze function %s must return type \"boolean\"" msgstr "la funzione analyze %s del tipo deve restituire il tipo \"boolean\"" -#: commands/typecmds.c:1889 +#: commands/typecmds.c:1934 #, c-format msgid "You must specify an operator class for the range type or define a default operator class for the subtype." msgstr "Occorre specificare una classe di operatori per l'intervallo o definire una classe di operatori predefinita per il sottotipo." -#: commands/typecmds.c:1920 +#: commands/typecmds.c:1965 #, c-format msgid "range canonical function %s must return range type" msgstr "la funzione canonica %s dell'intervallo deve restituire un intervallo" -#: commands/typecmds.c:1926 +#: commands/typecmds.c:1971 #, c-format msgid "range canonical function %s must be immutable" msgstr "la funzione canonica %s dell'intervallo deve essere immutabile" -#: commands/typecmds.c:1962 +#: commands/typecmds.c:2007 #, c-format msgid "range subtype diff function %s must return type double precision" msgstr "la funzione di differenza sottotipo %s deve restituire il tipo doppia precisione" -#: commands/typecmds.c:1968 +#: commands/typecmds.c:2013 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "la funzione di differenza sottotipo %s deve essere immutabile" -#: commands/typecmds.c:2287 +#: commands/typecmds.c:2040 +#, c-format +msgid "pg_type array OID value not set when in binary upgrade mode" +msgstr "valore di OID array di pg_type non impostato in modalità di aggiornamento binaria" + +#: commands/typecmds.c:2344 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "la colonna \"%s\" della tabella \"%s\" contiene valori null" -#: commands/typecmds.c:2396 commands/typecmds.c:2574 +#: commands/typecmds.c:2459 commands/typecmds.c:2642 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "il vincolo \"%s\" del dominio \"%s\" non esiste" -#: commands/typecmds.c:2400 +#: commands/typecmds.c:2463 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "il vincolo \"%s\" del dominio \"%s\" non esiste, saltato" -#: commands/typecmds.c:2580 +#: commands/typecmds.c:2648 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "il vincolo \"%s\" del dominio \"%s\" non è un vincolo di controllo" -#: commands/typecmds.c:2684 +#: commands/typecmds.c:2754 #, c-format msgid "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "la colonna \"%s\" della tabella \"%s\" contiene valori che violano il nuovo vincolo" -#: commands/typecmds.c:2897 commands/typecmds.c:3267 commands/typecmds.c:3425 +#: commands/typecmds.c:2967 commands/typecmds.c:3224 commands/typecmds.c:3432 #, c-format msgid "%s is not a domain" msgstr "%s non è un dominio" -#: commands/typecmds.c:2930 +#: commands/typecmds.c:3001 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "il vincolo \"%s\" del dominio \"%s\" esiste già" -#: commands/typecmds.c:2980 +#: commands/typecmds.c:3051 #, c-format msgid "cannot use table references in domain check constraint" msgstr "non è possibile usare riferimenti a tabelle nel vincolo di controllo del dominio" -#: commands/typecmds.c:3199 commands/typecmds.c:3279 commands/typecmds.c:3533 +#: commands/typecmds.c:3154 commands/typecmds.c:3236 commands/typecmds.c:3545 #, c-format msgid "%s is a table's row type" msgstr "%s è il tipo della riga di una tabella" -#: commands/typecmds.c:3201 commands/typecmds.c:3281 commands/typecmds.c:3535 +#: commands/typecmds.c:3156 commands/typecmds.c:3238 commands/typecmds.c:3547 #, c-format msgid "Use ALTER TABLE instead." msgstr "Usa ALTER TABLE invece." -#: commands/typecmds.c:3208 commands/typecmds.c:3288 commands/typecmds.c:3452 +#: commands/typecmds.c:3163 commands/typecmds.c:3245 commands/typecmds.c:3464 #, c-format msgid "cannot alter array type %s" msgstr "non è possibile modificare il tipo di array %s" -#: commands/typecmds.c:3210 commands/typecmds.c:3290 commands/typecmds.c:3454 +#: commands/typecmds.c:3165 commands/typecmds.c:3247 commands/typecmds.c:3466 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "puoi modificare il tipo %s, il che modificherà il tipo dell'array come conseguenza." -#: commands/typecmds.c:3519 +#: commands/typecmds.c:3531 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "il tipo \"%s\" esiste già nello schema \"%s\"" -#: commands/user.c:145 +#: commands/user.c:148 #, c-format msgid "SYSID can no longer be specified" msgstr "SYSID non può più essere specificato" -#: commands/user.c:277 +#: commands/user.c:290 #, c-format msgid "must be superuser to create superusers" msgstr "solo i superutenti possono creare superutenti" -#: commands/user.c:284 +#: commands/user.c:297 #, c-format msgid "must be superuser to create replication users" msgstr "solo i superutenti possono creare utenti di replica" -#: commands/user.c:291 +#: commands/user.c:304 commands/user.c:678 #, c-format -msgid "permission denied to create role" -msgstr "permesso di creare il ruolo negato" +msgid "must be superuser to change bypassrls attribute" +msgstr "solo i superutenti possono cambiare l'attributo bypassrls" -#: commands/user.c:298 commands/user.c:1119 +#: commands/user.c:311 #, c-format -msgid "role name \"%s\" is reserved" -msgstr "il nome di ruolo \"%s\" è riservato" +msgid "permission denied to create role" +msgstr "permesso di creare il ruolo negato" -#: commands/user.c:311 commands/user.c:1113 +#: commands/user.c:324 commands/user.c:1153 #, c-format msgid "role \"%s\" already exists" msgstr "il ruolo \"%s\" esiste già" -#: commands/user.c:618 commands/user.c:827 commands/user.c:933 -#: commands/user.c:1088 commands/variable.c:797 commands/variable.c:869 -#: utils/adt/acl.c:5121 utils/init/miscinit.c:362 +#: commands/user.c:402 #, c-format -msgid "role \"%s\" does not exist" -msgstr "il ruolo \"%s\" non esiste" +msgid "pg_authid OID value not set when in binary upgrade mode" +msgstr "valore di OID di pg_authid non impostato in modalità di aggiornamento binaria" -#: commands/user.c:631 commands/user.c:846 commands/user.c:1357 -#: commands/user.c:1503 +#: commands/user.c:664 commands/user.c:878 commands/user.c:1394 +#: commands/user.c:1540 #, c-format msgid "must be superuser to alter superusers" msgstr "solo i superutenti possono modificare superutenti" -#: commands/user.c:638 +#: commands/user.c:671 #, c-format msgid "must be superuser to alter replication users" msgstr "solo i superutenti possono modificare utenti di replica" -#: commands/user.c:654 commands/user.c:854 +#: commands/user.c:694 commands/user.c:886 #, c-format msgid "permission denied" msgstr "permesso negato" -#: commands/user.c:884 +#: commands/user.c:916 #, c-format msgid "must be superuser to alter settings globally" msgstr "solo i superutenti possono alterare impostazioni globalmente" -#: commands/user.c:906 +#: commands/user.c:938 #, c-format msgid "permission denied to drop role" msgstr "permesso di eliminare il ruolo negato" -#: commands/user.c:938 +#: commands/user.c:962 +#, c-format +msgid "cannot use special role specifier in \"%s\"" +msgstr "non è possibile usare lo specificatore di ruolo speciale in \"%s\"" + +#: commands/user.c:972 commands/user.c:1128 commands/variable.c:798 +#: commands/variable.c:870 utils/adt/acl.c:5120 utils/adt/acl.c:5172 +#: utils/adt/acl.c:5205 utils/adt/acl.c:5223 utils/init/miscinit.c:490 +#, c-format +msgid "role \"%s\" does not exist" +msgstr "il ruolo \"%s\" non esiste" + +#: commands/user.c:977 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "il ruolo \"%s\" non esiste, saltato" -#: commands/user.c:950 commands/user.c:954 +#: commands/user.c:989 commands/user.c:993 #, c-format msgid "current user cannot be dropped" msgstr "l'utente corrente non può essere eliminato" -#: commands/user.c:958 +#: commands/user.c:997 #, c-format msgid "session user cannot be dropped" msgstr "l'utente della sessione non può essere eliminato" -#: commands/user.c:969 +#: commands/user.c:1008 #, c-format msgid "must be superuser to drop superusers" msgstr "solo i superutenti possono eliminare superutenti" -#: commands/user.c:985 +#: commands/user.c:1024 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "il ruolo \"%s\" non può essere eliminato perché alcuni oggetti ne dipendono" -#: commands/user.c:1103 +#: commands/user.c:1143 #, c-format msgid "session user cannot be renamed" msgstr "l'utente della sessione non può essere rinominato" -#: commands/user.c:1107 +#: commands/user.c:1147 #, c-format msgid "current user cannot be renamed" msgstr "l'utente corrente non può essere eliminato" -#: commands/user.c:1130 +#: commands/user.c:1163 #, c-format msgid "must be superuser to rename superusers" msgstr "solo i superutenti possono rinominare superutenti" -#: commands/user.c:1137 +#: commands/user.c:1170 #, c-format msgid "permission denied to rename role" msgstr "permesso di rinominare il ruolo negato" -#: commands/user.c:1158 +#: commands/user.c:1191 #, c-format msgid "MD5 password cleared because of role rename" msgstr "L'MD5 della password è stato cancellato perché il ruolo è stato rinominato" -#: commands/user.c:1218 +#: commands/user.c:1253 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "la colonna dei nomi non può essere inclusa in GRANT/REVOKE ROLE" -#: commands/user.c:1256 +#: commands/user.c:1291 #, c-format msgid "permission denied to drop objects" msgstr "permesso di eliminare gli oggetti negato" -#: commands/user.c:1283 commands/user.c:1292 +#: commands/user.c:1318 commands/user.c:1327 #, c-format msgid "permission denied to reassign objects" msgstr "permesso di riassegnare gli oggetti negato" -#: commands/user.c:1365 commands/user.c:1511 +#: commands/user.c:1402 commands/user.c:1548 #, c-format msgid "must have admin option on role \"%s\"" msgstr "occorre avere l'opzione admin sul ruolo \"%s\"" -#: commands/user.c:1382 +#: commands/user.c:1419 #, c-format msgid "must be superuser to set grantor" msgstr "solo i superutenti possono impostare chi ha concesso il privilegio" -#: commands/user.c:1407 +#: commands/user.c:1444 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "il ruolo \"%s\" è membro del ruolo \"%s\"" -#: commands/user.c:1422 +#: commands/user.c:1459 #, c-format msgid "role \"%s\" is already a member of role \"%s\"" msgstr "il ruolo \"%s\" è già membro del ruolo \"%s\"" -#: commands/user.c:1533 +#: commands/user.c:1570 #, c-format msgid "role \"%s\" is not a member of role \"%s\"" msgstr "il ruolo \"%s\" non è membro del ruolo \"%s\"" -#: commands/vacuum.c:468 +#: commands/vacuum.c:185 +#, c-format +msgid "%s cannot be executed from VACUUM or ANALYZE" +msgstr "%s non può essere eseguito da VACUUM o ANALYZE" + +#: commands/vacuum.c:527 #, c-format msgid "oldest xmin is far in the past" msgstr "il più vecchio xmin è molto lontano nel tempo" -#: commands/vacuum.c:469 +#: commands/vacuum.c:528 #, c-format msgid "Close open transactions soon to avoid wraparound problems." msgstr "Chiudi presto le transazioni per evitare problemi di wraparound." -#: commands/vacuum.c:501 +#: commands/vacuum.c:567 #, c-format msgid "oldest multixact is far in the past" msgstr "il multixact più vecchio è remoto" -#: commands/vacuum.c:502 +#: commands/vacuum.c:568 #, c-format msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "Chiudi presto le transazioni con multixact per evitare problemi di wraparound." -#: commands/vacuum.c:1064 +#: commands/vacuum.c:1130 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "alcuni database non sono stati ripuliti per più di 2 miliardi di transazioni" -#: commands/vacuum.c:1065 +#: commands/vacuum.c:1131 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "Potresti aver già subito perdita di dati dovuta al wraparound delle transazioni." -#: commands/vacuum.c:1182 +#: commands/vacuum.c:1252 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "pulizia di \"%s\" saltata --- lock non disponibile" -#: commands/vacuum.c:1208 +#: commands/vacuum.c:1278 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "\"%s\" saltato --- solo i superutenti possono pulirla" -#: commands/vacuum.c:1212 +#: commands/vacuum.c:1282 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "\"%s\" saltato --- solo i superutenti o il proprietario del database possono pulirla" -#: commands/vacuum.c:1216 +#: commands/vacuum.c:1286 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "\"%s\" saltato --- solo il proprietario del database o della tabella possono pulirla" -#: commands/vacuum.c:1234 +#: commands/vacuum.c:1304 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "\"%s\" saltato --- non è possibile ripulire non-tabelle o tabelle speciali di sistema" -#: commands/vacuumlazy.c:346 +#: commands/vacuumlazy.c:358 #, c-format -msgid "" -"automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" -"pages: %d removed, %d remain\n" -"tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable\n" -"buffer usage: %d hits, %d misses, %d dirtied\n" -"avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" -"system usage: %s" -msgstr "" -"vacuum automatico della tabella \"%s.%s.%s\": scansioni di indici: %d\n" -"pagine: %d rimosse, %d restanti\n" -"tuple: %.0f rimosse, %.0f restanti, %.0f sono morte ma non ancora removibili\n" -"uso dei buffer: %d colpiti, %d mancati, %d sporcati\n" -"velocità di lettura media: %.3f MB/s, velocità di scrittura media: %.3f MB/s\n" -"utilizzo di sistema: %s" +msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" +msgstr "vacuum automatico della tabella \"%s.%s.%s\": scan di indici: %d\n" + +#: commands/vacuumlazy.c:363 +#, c-format +msgid "pages: %u removed, %u remain, %u skipped due to pins\n" +msgstr "pagine: %u rimosse, %u restanti, %u saltate perché bloccate\n" + +#: commands/vacuumlazy.c:368 +#, c-format +msgid "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable\n" +msgstr "tuple: %.0f rimosse, %.0f restanti, %.0f sono morte ma non ancora removibili\n" + +#: commands/vacuumlazy.c:373 +#, c-format +msgid "buffer usage: %d hits, %d misses, %d dirtied\n" +msgstr "uso dei buffer: %d colpiti, %d mancati, %d sporcati\n" + +#: commands/vacuumlazy.c:377 +#, c-format +msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" +msgstr "velocità di lettura media: %.3f MB/s, velocità di scrittura media: %.3f MB/s\n" + +#: commands/vacuumlazy.c:379 +#, c-format +msgid "system usage: %s" +msgstr "utilizzo di sistema: %s" -#: commands/vacuumlazy.c:680 +#: commands/vacuumlazy.c:701 #, c-format msgid "relation \"%s\" page %u is uninitialized --- fixing" msgstr "la relazione \"%s\" pagina %u non è inizializzata --- in correzione" -#: commands/vacuumlazy.c:1092 +#: commands/vacuumlazy.c:1113 #, c-format msgid "\"%s\": removed %.0f row versions in %u pages" msgstr "\"%s\": %.0f versioni di riga rimosse in %u pagine" -#: commands/vacuumlazy.c:1097 +#: commands/vacuumlazy.c:1123 #, c-format -msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" -msgstr "\"%s\": trovate %.0f versioni di riga removibili, %.0f non removibili in %u pagine su %u" +msgid "%.0f dead row versions cannot be removed yet.\n" +msgstr "%.0f versioni di righe morte non possono essere ancora rimosse.\n" -#: commands/vacuumlazy.c:1101 +#: commands/vacuumlazy.c:1125 #, c-format -msgid "" -"%.0f dead row versions cannot be removed yet.\n" -"There were %.0f unused item pointers.\n" -"%u pages are entirely empty.\n" -"%s." -msgstr "" -"%.0f versioni di riga morte non possono essere ancora rimosse.\n" -"C'erano %.0f puntatori ad oggetti non usati.\n" -"%u pagine sono completamente vuote.\n" -"%s." +msgid "There were %.0f unused item pointers.\n" +msgstr "C'erano %.0f puntatori ad elementi non usati.\n" -#: commands/vacuumlazy.c:1172 +#: commands/vacuumlazy.c:1127 #, c-format -msgid "\"%s\": removed %d row versions in %d pages" -msgstr "\"%s\": %d versioni di riga rimosse in %d pagine" +msgid "Skipped %u pages due to buffer pins.\n" +msgstr "%u pagine saltate a causa di blocchi dei buffer.\n" -#: commands/vacuumlazy.c:1175 commands/vacuumlazy.c:1342 -#: commands/vacuumlazy.c:1514 +#: commands/vacuumlazy.c:1129 #, c-format -msgid "%s." -msgstr "%s." +msgid "%u pages are entirely empty.\n" +msgstr "%u pagine sono completamente vuote.\n" + +#: commands/vacuumlazy.c:1135 +#, c-format +msgid "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages" +msgstr "\"%s\": trovate %.0f versioni di riga removibili, %.0f non removibili in %u pagine su %u" -#: commands/vacuumlazy.c:1339 +#: commands/vacuumlazy.c:1204 +#, c-format +msgid "\"%s\": removed %d row versions in %d pages" +msgstr "\"%s\": %d versioni di riga rimosse in %d pagine" + +#: commands/vacuumlazy.c:1371 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "effettuata la scansione dell'indice \"%s\" per rimuovere %d versioni di riga" -#: commands/vacuumlazy.c:1385 +#: commands/vacuumlazy.c:1417 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "l'indice \"%s\" ora contiene %.0f versioni di riga in %u pagine" -#: commands/vacuumlazy.c:1389 +#: commands/vacuumlazy.c:1421 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -8252,112 +9118,112 @@ msgstr "" "%u pagine dell'indice sono state cancellate, %u sono attualmente riusabili.\n" "%s." -#: commands/vacuumlazy.c:1446 +#: commands/vacuumlazy.c:1478 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "\"%s\": truncate interrotto a causa di una richiesta di lock in conflitto" -#: commands/vacuumlazy.c:1511 +#: commands/vacuumlazy.c:1543 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "\"%s\": %u pagine ridotte a %u" -#: commands/vacuumlazy.c:1567 +#: commands/vacuumlazy.c:1599 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "\"%s\": annullamento del troncamento a causa di richieste di lock in conflitto" -#: commands/variable.c:162 utils/misc/guc.c:9058 +#: commands/variable.c:163 utils/misc/guc.c:9678 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Parola chiave non riconosciuta: \"%s\"." -#: commands/variable.c:174 +#: commands/variable.c:175 #, c-format msgid "Conflicting \"datestyle\" specifications." msgstr "Specifiche di \"datestyle\" in conflitto." -#: commands/variable.c:296 +#: commands/variable.c:297 #, c-format msgid "Cannot specify months in time zone interval." msgstr "Non è possibile specificare i mesi nell'intervallo del fuso orario." -#: commands/variable.c:302 +#: commands/variable.c:303 #, c-format msgid "Cannot specify days in time zone interval." msgstr "Non è possibile specificare i giorni nell'intervallo del fuso orario." -#: commands/variable.c:344 commands/variable.c:426 +#: commands/variable.c:345 commands/variable.c:427 #, c-format msgid "time zone \"%s\" appears to use leap seconds" msgstr "sembra che il fuso orario \"%s\" utilizzi il secondo intercalare" -#: commands/variable.c:346 commands/variable.c:428 +#: commands/variable.c:347 commands/variable.c:429 #, c-format msgid "PostgreSQL does not support leap seconds." msgstr "PostgreSQL non supporta il secondo intercalare." -#: commands/variable.c:355 +#: commands/variable.c:356 #, c-format msgid "UTC timezone offset is out of range." msgstr "L'offset del fuso orario da UTC è fuori dall'intervallo massimo." -#: commands/variable.c:493 +#: commands/variable.c:494 #, c-format msgid "cannot set transaction read-write mode inside a read-only transaction" msgstr "non è possibile impostare una transazione in lettura/scrittura dentro una in sola lettura" -#: commands/variable.c:500 +#: commands/variable.c:501 #, c-format msgid "transaction read-write mode must be set before any query" msgstr "la modalità read-write dev'essere impostata prima di qualsiasi query" -#: commands/variable.c:507 +#: commands/variable.c:508 #, c-format msgid "cannot set transaction read-write mode during recovery" msgstr "non è possibile impostare la transazione in lettura/scrittura durante il ripristino" -#: commands/variable.c:556 +#: commands/variable.c:557 #, c-format msgid "SET TRANSACTION ISOLATION LEVEL must be called before any query" msgstr "SET TRANSACTION ISOLATION LEVEL dev'essere invocato prima di qualsiasi query" -#: commands/variable.c:563 +#: commands/variable.c:564 #, c-format msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "SET TRANSACTION ISOLATION LEVEL non può essere invocato in una sotto-transazione" -#: commands/variable.c:570 storage/lmgr/predicate.c:1588 +#: commands/variable.c:571 storage/lmgr/predicate.c:1586 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "non è possibile usare la modalità SERIALIZABLE in un hot standby" -#: commands/variable.c:571 +#: commands/variable.c:572 #, c-format msgid "You can use REPEATABLE READ instead." msgstr "Puoi utilizzare REPEATABLE READ invece." -#: commands/variable.c:619 +#: commands/variable.c:620 #, c-format msgid "SET TRANSACTION [NOT] DEFERRABLE cannot be called within a subtransaction" msgstr "SET TRANSACTION [NOT] DEFERRABLE non può essere invocato in una sotto-transazione" -#: commands/variable.c:625 +#: commands/variable.c:626 #, c-format msgid "SET TRANSACTION [NOT] DEFERRABLE must be called before any query" msgstr "SET TRANSACTION [NOT] DEFERRABLE dev'essere invocato prima di qualsiasi query" -#: commands/variable.c:707 +#: commands/variable.c:708 #, c-format msgid "Conversion between %s and %s is not supported." msgstr "La conversione fra %s e %s non è supportata." -#: commands/variable.c:714 +#: commands/variable.c:715 #, c-format msgid "Cannot change \"client_encoding\" now." msgstr "Non è possibile cambiare \"client_encoding\" ora." -#: commands/variable.c:884 +#: commands/variable.c:885 #, c-format msgid "permission denied to set role \"%s\"" msgstr "permesso di impostare il ruolo \"%s\" negato" @@ -8382,42 +9248,42 @@ msgstr "non è stato possibile determinare quale ordinamento usare per la colonn msgid "view must have at least one column" msgstr "la vista deve avere almeno una colonna" -#: commands/view.c:260 commands/view.c:272 +#: commands/view.c:263 commands/view.c:275 #, c-format msgid "cannot drop columns from view" msgstr "non è possibile eliminare colonne da una vista" -#: commands/view.c:277 +#: commands/view.c:280 #, c-format msgid "cannot change name of view column \"%s\" to \"%s\"" msgstr "non è possibile cambiare nome della colonna di vista \"%s\" in \"%s\"" -#: commands/view.c:285 +#: commands/view.c:288 #, c-format msgid "cannot change data type of view column \"%s\" from %s to %s" msgstr "non è possibile cambiare tipo di dato della colonna di vista \"%s\" da %s a %s" -#: commands/view.c:420 +#: commands/view.c:427 #, c-format msgid "views must not contain SELECT INTO" msgstr "le viste non possono contenere SELECT INTO" -#: commands/view.c:433 +#: commands/view.c:440 #, c-format msgid "views must not contain data-modifying statements in WITH" msgstr "una vista non può contenere istruzioni di modifica dei dati in un WITH" -#: commands/view.c:504 +#: commands/view.c:511 #, c-format msgid "CREATE VIEW specifies more column names than columns" msgstr "CREATE VIEW specifica più nomi di colonne che colonne" -#: commands/view.c:512 +#: commands/view.c:519 #, c-format msgid "views cannot be unlogged because they do not have storage" msgstr "le viste non possono essere non loggate perché non sono immagazzinate" -#: commands/view.c:526 +#: commands/view.c:533 #, c-format msgid "view \"%s\" will be a temporary view" msgstr "la vista \"%s\" sarà una vista temporanea" @@ -8452,349 +9318,371 @@ msgstr "il cursore \"%s\" non è posizionato su una riga" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "il cursore \"%s\" non è una scansione semplice aggiornabile della tabella \"%s\"" -#: executor/execCurrent.c:231 executor/execQual.c:1160 +#: executor/execCurrent.c:231 executor/execQual.c:1156 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "il tipo del parametro %d (%s) non combacia con quello usato alla preparazione del piano (%s)" -#: executor/execCurrent.c:243 executor/execQual.c:1172 +#: executor/execCurrent.c:243 executor/execQual.c:1168 #, c-format msgid "no value found for parameter %d" msgstr "nessun valore trovato per il parametro %d" -#: executor/execMain.c:955 +#: executor/execIndexing.c:539 +#, c-format +msgid "ON CONFLICT does not support deferred unique constraints/exclusion constraints as arbiters" +msgstr "ON CONFLICT non supporta vincoli/esclusioni unici deferiti come arbitri" + +#: executor/execIndexing.c:814 +#, c-format +msgid "could not create exclusion constraint \"%s\"" +msgstr "creazione del vincolo di esclusione \"%s\" fallita" + +#: executor/execIndexing.c:817 +#, c-format +msgid "Key %s conflicts with key %s." +msgstr "La chiave %s è in conflitto con la chiave %s." + +#: executor/execIndexing.c:819 +#, c-format +msgid "Key conflicts exist." +msgstr "Ci sono conflitti di chiave." + +#: executor/execIndexing.c:825 +#, c-format +msgid "conflicting key value violates exclusion constraint \"%s\"" +msgstr "le chiavi in conflitto violano il vincolo di esclusione \"%s\"" + +#: executor/execIndexing.c:828 +#, c-format +msgid "Key %s conflicts with existing key %s." +msgstr "La chiave %s è in conflitto con la chiave esistente %s." + +#: executor/execIndexing.c:830 +#, c-format +msgid "Key conflicts with existing key." +msgstr "Conflitti di chiave con chiave esistente." + +#: executor/execMain.c:1025 #, c-format msgid "cannot change sequence \"%s\"" msgstr "non è possibile modificare la sequenza \"%s\"" -#: executor/execMain.c:961 +#: executor/execMain.c:1031 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "non è possibile modificare la relazione TOAST \"%s\"" -#: executor/execMain.c:979 rewrite/rewriteHandler.c:2512 +#: executor/execMain.c:1049 rewrite/rewriteHandler.c:2612 #, c-format msgid "cannot insert into view \"%s\"" msgstr "non è possibile inserire nella vista \"%s\"" -#: executor/execMain.c:981 rewrite/rewriteHandler.c:2515 +#: executor/execMain.c:1051 rewrite/rewriteHandler.c:2615 #, c-format msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." msgstr "Per consentire inserimenti nella vista occorre fornire un trigger INSTEAD OF INSERT oppure una regola ON INSERT DO INSTEAD senza condizioni." -#: executor/execMain.c:987 rewrite/rewriteHandler.c:2520 +#: executor/execMain.c:1057 rewrite/rewriteHandler.c:2620 #, c-format msgid "cannot update view \"%s\"" msgstr "non è possibile modificare la vista \"%s\"" -#: executor/execMain.c:989 rewrite/rewriteHandler.c:2523 +#: executor/execMain.c:1059 rewrite/rewriteHandler.c:2623 #, c-format msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." msgstr "Per consentire modifiche alla vista occorre fornire un trigger INSTEAD OF UPDATE oppure una regola ON UPDATE DO INSTEAD senza condizioni." -#: executor/execMain.c:995 rewrite/rewriteHandler.c:2528 +#: executor/execMain.c:1065 rewrite/rewriteHandler.c:2628 #, c-format msgid "cannot delete from view \"%s\"" msgstr "non è possibile cancellare dalla vista \"%s\"" -#: executor/execMain.c:997 rewrite/rewriteHandler.c:2531 +#: executor/execMain.c:1067 rewrite/rewriteHandler.c:2631 #, c-format msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." msgstr "Per consentire eliminazioni dalla vista occorre fornire un trigger INSTEAD OF DELETE oppure una regola ON DELETE DO INSTEAD senza condizioni." -#: executor/execMain.c:1008 +#: executor/execMain.c:1078 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "non è possibile modificare la vista materializzata \"%s\"" -#: executor/execMain.c:1020 +#: executor/execMain.c:1090 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "non è possibile inserire nella tabella esterna \"%s\"" -#: executor/execMain.c:1026 +#: executor/execMain.c:1096 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "la tabella esterna \"%s\" non consente inserimenti" -#: executor/execMain.c:1033 +#: executor/execMain.c:1103 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "non è possibile modificare la tabella esterna \"%s\"" -#: executor/execMain.c:1039 +#: executor/execMain.c:1109 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "la tabella esterna \"%s\" non consente modifiche" -#: executor/execMain.c:1046 +#: executor/execMain.c:1116 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "non è possibile eliminare dalla tabella esterna \"%s\"" -#: executor/execMain.c:1052 +#: executor/execMain.c:1122 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "la tabella esterna \"%s\" non consente cancellazioni" -#: executor/execMain.c:1063 +#: executor/execMain.c:1133 #, c-format msgid "cannot change relation \"%s\"" msgstr "non è possibile modificare la relazione \"%s\"" -#: executor/execMain.c:1087 +#: executor/execMain.c:1159 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "non è possibile bloccare righe nella sequenza \"%s\"" -#: executor/execMain.c:1094 +#: executor/execMain.c:1166 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "non è possibile bloccare righe nella relazione TOAST \"%s\"" -#: executor/execMain.c:1101 +#: executor/execMain.c:1173 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "non è possibile bloccare righe vista \"%s\"" -#: executor/execMain.c:1109 +#: executor/execMain.c:1181 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "non è possibile bloccare righe nella vista materializzata \"%s\"" -#: executor/execMain.c:1116 +#: executor/execMain.c:1190 executor/execMain.c:2566 +#: executor/nodeLockRows.c:132 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "non è possibile bloccare righe nella tabella esterna \"%s\"" -#: executor/execMain.c:1122 +#: executor/execMain.c:1196 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "non è possibile bloccare righe nella relazione \"%s\"" -#: executor/execMain.c:1607 +#: executor/execMain.c:1696 #, c-format msgid "null value in column \"%s\" violates not-null constraint" msgstr "valori null nella colonna \"%s\" violano il vincolo non-null" -#: executor/execMain.c:1609 executor/execMain.c:1626 executor/execMain.c:1673 +#: executor/execMain.c:1698 executor/execMain.c:1724 executor/execMain.c:1813 #, c-format msgid "Failing row contains %s." msgstr "La riga in errore contiene %s." -#: executor/execMain.c:1624 +#: executor/execMain.c:1722 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "la nuova riga per la relazione \"%s\" viola il vincolo di controllo \"%s\"" -#: executor/execMain.c:1671 +#: executor/execMain.c:1811 #, c-format -msgid "new row violates WITH CHECK OPTION for view \"%s\"" -msgstr "la nuova riga viola WITH CHECK OPTION per la vista \"%s\"" +msgid "new row violates WITH CHECK OPTION for \"%s\"" +msgstr "la nuova riga viola WITH CHECK OPTION per \"%s\"" -#: executor/execQual.c:306 executor/execQual.c:334 executor/execQual.c:3157 -#: utils/adt/array_userfuncs.c:430 utils/adt/arrayfuncs.c:233 -#: utils/adt/arrayfuncs.c:531 utils/adt/arrayfuncs.c:1275 -#: utils/adt/arrayfuncs.c:2961 utils/adt/arrayfuncs.c:4986 +#: executor/execMain.c:1820 +#, c-format +msgid "new row violates row level security policy for \"%s\"" +msgstr "la nuova riga viola la politica di sicurezza a livello di riga per \"%s\"" + +#: executor/execMain.c:1826 +#, c-format +msgid "new row violates row level security policy (USING expression) for \"%s\"" +msgstr "la nuova riga viola la politica di sicurezza a livello di riga (espressione USING) per \"%s\"" + +#: executor/execQual.c:300 executor/execQual.c:328 executor/execQual.c:3191 +#: utils/adt/array_userfuncs.c:472 utils/adt/arrayfuncs.c:260 +#: utils/adt/arrayfuncs.c:558 utils/adt/arrayfuncs.c:1288 +#: utils/adt/arrayfuncs.c:3332 utils/adt/arrayfuncs.c:5216 +#: utils/adt/arrayfuncs.c:5739 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "il numero di dimensioni dell'array (%d) eccede il massimo consentito (%d)" -#: executor/execQual.c:319 executor/execQual.c:347 +#: executor/execQual.c:313 executor/execQual.c:341 #, c-format msgid "array subscript in assignment must not be null" msgstr "l'indice di un array nell'assegnamento non può essere nullo" -#: executor/execQual.c:642 executor/execQual.c:4078 +#: executor/execQual.c:635 executor/execQual.c:4116 #, c-format msgid "attribute %d has wrong type" msgstr "l'attributo %d è di tipo errato" -#: executor/execQual.c:643 executor/execQual.c:4079 +#: executor/execQual.c:636 executor/execQual.c:4117 #, c-format msgid "Table has type %s, but query expects %s." msgstr "La tabella ha il tipo %s, ma la query prevede %s." -#: executor/execQual.c:836 executor/execQual.c:853 executor/execQual.c:1050 -#: executor/nodeModifyTable.c:85 executor/nodeModifyTable.c:95 -#: executor/nodeModifyTable.c:112 executor/nodeModifyTable.c:120 +#: executor/execQual.c:829 executor/execQual.c:846 executor/execQual.c:1046 +#: executor/nodeModifyTable.c:95 executor/nodeModifyTable.c:105 +#: executor/nodeModifyTable.c:122 executor/nodeModifyTable.c:130 #, c-format msgid "table row type and query-specified row type do not match" msgstr "il tipo della riga della tabella e il tipo di riga specificato dalla query non corrispondono" -#: executor/execQual.c:837 +#: executor/execQual.c:830 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." msgstr[0] "La riga della tabella contiene %d attributo, ma la query ne prevede %d." msgstr[1] "La riga della tabella contiene %d attributi, ma la query ne prevede %d." -#: executor/execQual.c:854 executor/nodeModifyTable.c:96 +#: executor/execQual.c:847 executor/nodeModifyTable.c:106 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "La tabella ha il tipo %s in posizione %d, ma la query prevede %s." -#: executor/execQual.c:1051 executor/execQual.c:1647 +#: executor/execQual.c:1047 executor/execQual.c:1643 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "Il tipo di immagazzinamento fisico non corrisponde per l'attributo eliminato in posizione %d." -#: executor/execQual.c:1326 parser/parse_func.c:114 parser/parse_func.c:535 -#: parser/parse_func.c:887 +#: executor/execQual.c:1322 parser/parse_func.c:115 parser/parse_func.c:542 +#: parser/parse_func.c:894 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" msgstr[0] "non è possibile passare più di %d argomento ad una funzione" msgstr[1] "non è possibile passare più di %d argomenti ad una funzione" -#: executor/execQual.c:1515 +#: executor/execQual.c:1511 #, c-format msgid "functions and operators can take at most one set argument" msgstr "le funzioni e operatori possono accettare al più un insieme di argomenti" -#: executor/execQual.c:1565 +#: executor/execQual.c:1561 #, c-format msgid "function returning setof record called in context that cannot accept type record" msgstr "funzione che restituisce un insieme di record invocata in un contesto che non accetta il tipo record" -#: executor/execQual.c:1620 executor/execQual.c:1636 executor/execQual.c:1646 +#: executor/execQual.c:1616 executor/execQual.c:1632 executor/execQual.c:1642 #, c-format msgid "function return row and query-specified return row do not match" msgstr "il tipo di riga restituito dalla funzione e il valore specificato dalla query non combaciano" -#: executor/execQual.c:1621 +#: executor/execQual.c:1617 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." msgstr[0] "La riga restituita contiene %d attributo, ma la query ne prevede %d." msgstr[1] "La riga restituita contiene %d attributi, ma la query ne prevede %d." -#: executor/execQual.c:1637 +#: executor/execQual.c:1633 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "Tipo %s restituito in posizione %d, ma la query prevede %s." -#: executor/execQual.c:1879 executor/execQual.c:2310 +#: executor/execQual.c:1875 executor/execQual.c:2306 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "il protocollo tabella-funzione del modo di materializzazione non è stato seguito" -#: executor/execQual.c:1899 executor/execQual.c:2317 +#: executor/execQual.c:1895 executor/execQual.c:2313 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "returnMode tabella-funzione sconosciuto: %d" -#: executor/execQual.c:2227 +#: executor/execQual.c:2223 #, c-format msgid "function returning set of rows cannot return null value" msgstr "una funzione che restituisce un insieme di righe non può restituire un valore null" -#: executor/execQual.c:2284 +#: executor/execQual.c:2280 #, c-format msgid "rows returned by function are not all of the same row type" msgstr "le righe restituite dalla funzione non sono tutte dello stesso tipo" -#: executor/execQual.c:2499 +#: executor/execQual.c:2495 #, c-format msgid "IS DISTINCT FROM does not support set arguments" msgstr "IS DISTINCT FROM non supporta argomenti di tipo insieme" -#: executor/execQual.c:2576 +#: executor/execQual.c:2572 #, c-format msgid "op ANY/ALL (array) does not support set arguments" msgstr "l'operatore ANY/ALL (array) non supporta argomenti di tipo insieme" -#: executor/execQual.c:3135 +#: executor/execQual.c:3169 #, c-format msgid "cannot merge incompatible arrays" msgstr "non è possibile unire array non compatibili" -#: executor/execQual.c:3136 +#: executor/execQual.c:3170 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "Un array con tipo di elementi %s non può essere incluso nel costrutto ARRAY con elementi di tipo %s." -#: executor/execQual.c:3177 executor/execQual.c:3204 +#: executor/execQual.c:3211 executor/execQual.c:3238 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "gli array multidimensionali devono avere espressioni array di dimensioni corrispondenti" -#: executor/execQual.c:3719 +#: executor/execQual.c:3753 #, c-format msgid "NULLIF does not support set arguments" msgstr "NULLIF non supporta argomenti di tipo insieme" -#: executor/execQual.c:3949 utils/adt/domains.c:131 +#: executor/execQual.c:3986 utils/adt/domains.c:136 #, c-format msgid "domain %s does not allow null values" msgstr "il DOMAIN %s non consente valori nulli" -#: executor/execQual.c:3979 utils/adt/domains.c:168 +#: executor/execQual.c:4016 utils/adt/domains.c:173 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "il valore per il DOMAIN %s viola il vincolo di controllo \"%s\"" -#: executor/execQual.c:4337 +#: executor/execQual.c:4371 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF non è supportato per questo tipo di tabella" -#: executor/execQual.c:4484 parser/parse_agg.c:434 parser/parse_agg.c:464 -#, c-format -msgid "aggregate function calls cannot be nested" -msgstr "le chiamate a funzioni di aggregazione non possono essere annidate" - -#: executor/execQual.c:4524 parser/parse_agg.c:565 +#: executor/execQual.c:4560 parser/parse_agg.c:742 #, c-format msgid "window function calls cannot be nested" msgstr "le chiamate a funzioni finestra non possono essere annidate" -#: executor/execQual.c:4736 +#: executor/execQual.c:4772 #, c-format msgid "target type is not an array" msgstr "il tipo di destinazione non è un array" -#: executor/execQual.c:4851 +#: executor/execQual.c:4887 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "la colonna ROW() è di tipo %s invece di %s" -#: executor/execQual.c:4986 utils/adt/arrayfuncs.c:3424 -#: utils/adt/rowtypes.c:921 +#: executor/execQual.c:5022 utils/adt/arrayfuncs.c:3774 +#: utils/adt/arrayfuncs.c:6312 utils/adt/rowtypes.c:921 #, c-format msgid "could not identify a comparison function for type %s" msgstr "non è stato possibile trovare un operatore di confronto per il tipo %s" -#: executor/execUtils.c:844 +#: executor/execUtils.c:831 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "la vista materializzata \"%s\" non è stata popolata" -#: executor/execUtils.c:846 +#: executor/execUtils.c:833 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "Usa il comando REFRESH MATERIALIZED VIEW." -#: executor/execUtils.c:1324 -#, c-format -msgid "could not create exclusion constraint \"%s\"" -msgstr "creazione del vincolo di esclusione \"%s\" fallita" - -#: executor/execUtils.c:1326 -#, c-format -msgid "Key %s conflicts with key %s." -msgstr "La chiave %s è in conflitto con la chiave %s." - -#: executor/execUtils.c:1333 -#, c-format -msgid "conflicting key value violates exclusion constraint \"%s\"" -msgstr "le chiavi in conflitto violano il vincolo di esclusione \"%s\"" - -#: executor/execUtils.c:1335 -#, c-format -msgid "Key %s conflicts with existing key %s." -msgstr "La chiave %s è in conflitto con la chiave esistente %s." - #: executor/functions.c:225 #, c-format msgid "could not determine actual type of argument declared %s" @@ -8807,73 +9695,83 @@ msgid "%s is not allowed in a SQL function" msgstr "%s non è consentito in una funzione SQL" #. translator: %s is a SQL statement name -#: executor/functions.c:513 executor/spi.c:1343 executor/spi.c:2129 +#: executor/functions.c:513 executor/spi.c:1368 executor/spi.c:2157 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s non è consentito in una funzione non volatile" -#: executor/functions.c:638 +#: executor/functions.c:641 #, c-format msgid "could not determine actual result type for function declared to return type %s" msgstr "non è stato possibile determinare il tipo reale restituito dalla funzione dichiarata con tipo restituito %s" -#: executor/functions.c:1402 +#: executor/functions.c:1405 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "funzione SQL \"%s\" istruzione %d" -#: executor/functions.c:1428 +#: executor/functions.c:1431 #, c-format msgid "SQL function \"%s\" during startup" msgstr "funzione SQL \"%s\" durante l'avvio" -#: executor/functions.c:1587 executor/functions.c:1624 -#: executor/functions.c:1636 executor/functions.c:1749 -#: executor/functions.c:1782 executor/functions.c:1812 +#: executor/functions.c:1590 executor/functions.c:1627 +#: executor/functions.c:1639 executor/functions.c:1752 +#: executor/functions.c:1785 executor/functions.c:1815 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "il tipo restituito non combacia nella funzione dichiarata con tipo restituito %s" -#: executor/functions.c:1589 +#: executor/functions.c:1592 #, c-format msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." msgstr "L'istruzione finale della funzione deve essere SELECT oppure INSERT/UPDATE/DELETE RETURNING." -#: executor/functions.c:1626 +#: executor/functions.c:1629 #, c-format msgid "Final statement must return exactly one column." msgstr "L'istruzione finale deve restituire esattamente una colonna." -#: executor/functions.c:1638 +#: executor/functions.c:1641 #, c-format msgid "Actual return type is %s." msgstr "Il tipo restituito realmente è %s." -#: executor/functions.c:1751 +#: executor/functions.c:1754 #, c-format msgid "Final statement returns too many columns." msgstr "L'istruzione finale restituisce troppe colonne." -#: executor/functions.c:1784 +#: executor/functions.c:1787 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "L'istruzione finale restituisce %s invece di %s alla colonna %d." -#: executor/functions.c:1814 +#: executor/functions.c:1817 #, c-format msgid "Final statement returns too few columns." msgstr "L'istruzione finale restituisce troppe poche colonne." -#: executor/functions.c:1863 +#: executor/functions.c:1866 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "il tipo di risultato %s non è supportato per le funzioni SQL" -#: executor/nodeAgg.c:1865 executor/nodeWindowAgg.c:2285 +#: executor/nodeAgg.c:2622 executor/nodeWindowAgg.c:2289 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "l'aggregato %u deve avere tipi di input e transizione compatibili" +#: executor/nodeAgg.c:2658 parser/parse_agg.c:596 parser/parse_agg.c:626 +#, c-format +msgid "aggregate function calls cannot be nested" +msgstr "le chiamate a funzioni di aggregazione non possono essere annidate" + +#: executor/nodeCustom.c:147 executor/nodeCustom.c:158 +#, c-format +msgid "custom-scan \"%s\" does not support MarkPos" +msgstr "lo scan personalizzato \"%s\" non supporta MarkPos" + #: executor/nodeHashjoin.c:823 executor/nodeHashjoin.c:853 #, c-format msgid "could not rewind hash-join temporary file: %m" @@ -8889,6 +9787,11 @@ msgstr "scrittura nel file temporaneo per l'hash-join fallita: %m" msgid "could not read from hash-join temporary file: %m" msgstr "lettura dal file temporaneo per l'hash-join fallita: %m" +#: executor/nodeIndexonlyscan.c:179 +#, c-format +msgid "lossy distance functions are not supported in index-only scans" +msgstr "le funzioni di distanza lossy non sono supportate nelle scansioni dei soli indici" + #: executor/nodeLimit.c:253 #, c-format msgid "OFFSET must not be negative" @@ -8899,33 +9802,53 @@ msgstr "OFFSET non può essere negativo" msgid "LIMIT must not be negative" msgstr "LIMIT non può essere negativo" -#: executor/nodeMergejoin.c:1576 +#: executor/nodeMergejoin.c:1584 #, c-format msgid "RIGHT JOIN is only supported with merge-joinable join conditions" msgstr "RIGHT JOIN è supportato solo con condizioni di join che supportano merge" -#: executor/nodeMergejoin.c:1596 +#: executor/nodeMergejoin.c:1604 #, c-format msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "FULL JOIN è supportato solo con condizioni di join che supportano merge" -#: executor/nodeModifyTable.c:86 +#: executor/nodeModifyTable.c:96 #, c-format msgid "Query has too many columns." msgstr "La query ha troppe colonne." -#: executor/nodeModifyTable.c:113 +#: executor/nodeModifyTable.c:123 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "La query produce un valore per una colonna eliminata in posizione %d." -#: executor/nodeModifyTable.c:121 +#: executor/nodeModifyTable.c:131 #, c-format msgid "Query has too few columns." msgstr "La query ha troppe poche colonne." -#: executor/nodeSubplan.c:304 executor/nodeSubplan.c:343 -#: executor/nodeSubplan.c:970 +#: executor/nodeModifyTable.c:1080 +#, c-format +msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" +msgstr "il comando ON CONFLICT DO UPDATE non può toccare le righe una seconda volta" + +#: executor/nodeModifyTable.c:1081 +#, c-format +msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." +msgstr "Assicurati che non ci siano righe proposte per l'inserimento nello stesso comando che abbiano valori vincolati uguali." + +#: executor/nodeSamplescan.c:307 +#, c-format +msgid "TABLESAMPLE parameter cannot be null" +msgstr "il parametro TABLESAMPLE non può essere null" + +#: executor/nodeSamplescan.c:320 +#, c-format +msgid "TABLESAMPLE REPEATABLE parameter cannot be null" +msgstr "il parametro TABLESAMPLE REPEATABLE non può essere null" + +#: executor/nodeSubplan.c:345 executor/nodeSubplan.c:384 +#: executor/nodeSubplan.c:1040 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "più di una riga restituita da una sottoquery usata come espressione" @@ -8955,43 +9878,43 @@ msgstr "l'offset di fine della finestra dev'essere non nullo" msgid "frame ending offset must not be negative" msgstr "l'offset di fine della finestra non può essere negativo" -#: executor/spi.c:213 +#: executor/spi.c:214 #, c-format msgid "transaction left non-empty SPI stack" msgstr "la transazione ha lasciato lo stack SPI non vuoto" -#: executor/spi.c:214 executor/spi.c:278 +#: executor/spi.c:215 executor/spi.c:279 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "Verifica che non ci siano chiamate \"SPI_finish\" mancanti." -#: executor/spi.c:277 +#: executor/spi.c:278 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "la sottotransazione ha lasciato lo stack SPI non vuoto" -#: executor/spi.c:1207 +#: executor/spi.c:1229 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "non è possibile aprire un piano multi-query come cursore" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1212 +#: executor/spi.c:1234 #, c-format msgid "cannot open %s query as cursor" msgstr "non è possibile aprire una query %s come cursore" -#: executor/spi.c:1320 +#: executor/spi.c:1342 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE non è supportato" -#: executor/spi.c:1321 parser/analyze.c:2128 +#: executor/spi.c:1343 parser/analyze.c:2244 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Un cursore scorribile dev'essere READ ONLY." -#: executor/spi.c:2419 +#: executor/spi.c:2449 #, c-format msgid "SQL statement \"%s\"" msgstr "istruzione SQL \"%s\"" @@ -9001,17 +9924,12 @@ msgstr "istruzione SQL \"%s\"" msgid "user mapping not found for \"%s\"" msgstr "mappatura utenti non trovata per \"%s\"" -#: foreign/foreign.c:348 -#, c-format -msgid "foreign-data wrapper \"%s\" has no handler" -msgstr "il wrapper di dati remoti \"%s\" non ha un handler" - -#: foreign/foreign.c:573 +#: foreign/foreign.c:643 #, c-format msgid "invalid option \"%s\"" msgstr "opzione \"%s\" non valida" -#: foreign/foreign.c:574 +#: foreign/foreign.c:644 #, c-format msgid "Valid options in this context are: %s" msgstr "Le opzioni valide in questo contesto sono: %s" @@ -9086,105 +10004,105 @@ msgstr "autenticazione fallita per l'utente \"%s\": metodo di autenticazione non msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "La connessione si abbina con la riga %d di pg_hba.log: \"%s\"" -#: libpq/auth.c:337 +#: libpq/auth.c:330 #, c-format msgid "connection requires a valid client certificate" msgstr "la connessione richiede un certificato valido per il client" -#: libpq/auth.c:379 +#: libpq/auth.c:372 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" msgstr "pg_hba.conf rifiuta connessioni di replica per l'host \"%s\", utente \"%s\", %s" -#: libpq/auth.c:381 libpq/auth.c:397 libpq/auth.c:455 libpq/auth.c:473 +#: libpq/auth.c:374 libpq/auth.c:390 libpq/auth.c:448 libpq/auth.c:466 msgid "SSL off" msgstr "SSL non abilitato" -#: libpq/auth.c:381 libpq/auth.c:397 libpq/auth.c:455 libpq/auth.c:473 +#: libpq/auth.c:374 libpq/auth.c:390 libpq/auth.c:448 libpq/auth.c:466 msgid "SSL on" msgstr "SSL abilitato" -#: libpq/auth.c:385 +#: libpq/auth.c:378 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" msgstr "pg_hba.conf rifiuta connessioni di replica per l'host \"%s\", utente \"%s\"" -#: libpq/auth.c:394 +#: libpq/auth.c:387 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "pg_hba.conf rifiuta connessioni per l'host \"%s\", utente \"%s\", database \"%s\", %s" -#: libpq/auth.c:401 +#: libpq/auth.c:394 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\"" msgstr "pg_hba.conf rifiuta connessioni per l'host \"%s\", user \"%s\", database \"%s\"" -#: libpq/auth.c:430 +#: libpq/auth.c:423 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "Indirizzo IP del client risolto in \"%s\", il forward lookup combacia." -#: libpq/auth.c:433 +#: libpq/auth.c:426 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "Indirizzo IP del client risolto in \"%s\", forward lookup non controllato." -#: libpq/auth.c:436 +#: libpq/auth.c:429 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "Indirizzo IP del client risolto in \"%s\", il forward lookup non combacia." -#: libpq/auth.c:439 +#: libpq/auth.c:432 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "Conversione del nome host \"%s\" in indirizzo IP non riuscita: %s." -#: libpq/auth.c:444 +#: libpq/auth.c:437 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "Risoluzione dell'indirizzo IP del client in nome host non riuscita: %s." -#: libpq/auth.c:453 +#: libpq/auth.c:446 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" msgstr "nessuna voce in pg_hba.conf per connessioni di replica da host \"%s\", utente \"%s\", database \"%s\"" -#: libpq/auth.c:460 +#: libpq/auth.c:453 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\"" msgstr "nessuna voce in pg_hba.conf per connessioni di replica da host \"%s\", user \"%s\"" -#: libpq/auth.c:470 +#: libpq/auth.c:463 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "nessuna voce in pg_hba.conf per l'host \"%s\", utente \"%s\", database \"%s\", %s" -#: libpq/auth.c:478 +#: libpq/auth.c:471 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" msgstr "nessuna voce in pg_hba.conf per l'host \"%s\", utente \"%s\", database \"%s\"" -#: libpq/auth.c:521 libpq/hba.c:1212 +#: libpq/auth.c:514 libpq/hba.c:1180 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "l'autenticazione MD5 non è supportata quando \"db_user_namespace\" è abilitato" -#: libpq/auth.c:645 +#: libpq/auth.c:640 #, c-format msgid "expected password response, got message type %d" msgstr "era attesa una risposta password, ricevuto messaggio di tipo %d" -#: libpq/auth.c:673 +#: libpq/auth.c:668 #, c-format msgid "invalid password packet size" msgstr "dimensione del pacchetto password non valida" -#: libpq/auth.c:677 +#: libpq/auth.c:672 #, c-format msgid "received password packet" msgstr "pacchetto password ricevuto" -#: libpq/auth.c:804 +#: libpq/auth.c:799 #, c-format msgid "GSSAPI is not supported in protocol version 2" msgstr "GSSAPI non è supportato con la versione 2 del protocollo" @@ -9194,309 +10112,309 @@ msgstr "GSSAPI non è supportato con la versione 2 del protocollo" msgid "expected GSS response, got message type %d" msgstr "era attesa una risposta GSS, ricevuto messaggio di tipo %d" -#: libpq/auth.c:918 +#: libpq/auth.c:920 msgid "accepting GSS security context failed" msgstr "contesto di sicurezza accettazione GSS fallito" -#: libpq/auth.c:944 +#: libpq/auth.c:946 msgid "retrieving GSS user name failed" msgstr "la richiesta del GSS user name è fallita" -#: libpq/auth.c:1061 +#: libpq/auth.c:1063 #, c-format msgid "SSPI is not supported in protocol version 2" msgstr "SSPI non è supportato con la versione 2 del protocollo" -#: libpq/auth.c:1076 +#: libpq/auth.c:1078 msgid "could not acquire SSPI credentials" msgstr "non è stato possibile ottenere le credenziali SSPI" -#: libpq/auth.c:1093 +#: libpq/auth.c:1096 #, c-format msgid "expected SSPI response, got message type %d" msgstr "era attesa una risposta SSPI, ricevuto messaggio di tipo %d" -#: libpq/auth.c:1165 +#: libpq/auth.c:1168 msgid "could not accept SSPI security context" msgstr "non è stato possibile accettare il contesto di sicurezza SSPI" -#: libpq/auth.c:1227 +#: libpq/auth.c:1230 msgid "could not get token from SSPI security context" msgstr "non è stato possibile ottenere il token dal contesto di sicurezza SSPI" -#: libpq/auth.c:1470 +#: libpq/auth.c:1475 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "creazione del socket per la connessione Ident fallita: %m" -#: libpq/auth.c:1485 +#: libpq/auth.c:1490 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "bind sull'indirizzo locale \"%s\" fallito: %m" -#: libpq/auth.c:1497 +#: libpq/auth.c:1502 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "connessione al server Ident all'indirizzo \"%s\", porta %s fallita: %m" -#: libpq/auth.c:1517 +#: libpq/auth.c:1524 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "invio della query al server Ident all'indirizzo \"%s\", porta %s fallito: %m" -#: libpq/auth.c:1532 +#: libpq/auth.c:1541 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "ricezione della risposta dal server Ident all'indirizzo \"%s\", porta %s fallita: %m" -#: libpq/auth.c:1542 +#: libpq/auth.c:1551 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "risposta dal server Ident formattata in maniera non corretta: \"%s\"" -#: libpq/auth.c:1580 +#: libpq/auth.c:1591 #, c-format msgid "peer authentication is not supported on this platform" msgstr "il metodo di autenticazione peer non è supportato su questa piattaforma" -#: libpq/auth.c:1584 +#: libpq/auth.c:1595 #, c-format msgid "could not get peer credentials: %m" msgstr "non è stato possibile recuperare le credenziali del peer: %m" -#: libpq/auth.c:1593 +#: libpq/auth.c:1604 #, c-format -msgid "could not to look up local user ID %ld: %s" -msgstr "ricerca dell'id utente locale %ld non riuscita: %s" +msgid "could not look up local user ID %ld: %s" +msgstr "ricerca dell'ID utente locale %ld fallita: %s" -#: libpq/auth.c:1676 libpq/auth.c:1947 libpq/auth.c:2304 +#: libpq/auth.c:1688 libpq/auth.c:1959 libpq/auth.c:2315 #, c-format msgid "empty password returned by client" msgstr "il client ha restituito una password vuota" -#: libpq/auth.c:1686 +#: libpq/auth.c:1698 #, c-format msgid "error from underlying PAM layer: %s" msgstr "errore dal livello PAM sottostante: %s" -#: libpq/auth.c:1755 +#: libpq/auth.c:1767 #, c-format msgid "could not create PAM authenticator: %s" msgstr "creazione dell'autenticatore PAM fallita: %s" -#: libpq/auth.c:1766 +#: libpq/auth.c:1778 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) fallita: %s" -#: libpq/auth.c:1777 +#: libpq/auth.c:1789 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) fallita: %s" -#: libpq/auth.c:1788 +#: libpq/auth.c:1800 #, c-format msgid "pam_authenticate failed: %s" msgstr "pam_authenticate fallita: %s" -#: libpq/auth.c:1799 +#: libpq/auth.c:1811 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt fallita: %s" -#: libpq/auth.c:1810 +#: libpq/auth.c:1822 #, c-format msgid "could not release PAM authenticator: %s" msgstr "rilascio dell'autenticatore PAM fallito: %s" -#: libpq/auth.c:1843 +#: libpq/auth.c:1855 #, c-format msgid "could not initialize LDAP: %m" msgstr "inizializzazione LDAP fallita: %m" -#: libpq/auth.c:1846 +#: libpq/auth.c:1858 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "inizializzazione LDAP fallita: codice errore %d" -#: libpq/auth.c:1856 +#: libpq/auth.c:1868 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "impostazione della versione del protocollo LDAP fallita: %s" -#: libpq/auth.c:1885 +#: libpq/auth.c:1897 #, c-format msgid "could not load wldap32.dll" msgstr "caricamento wldap32.dll fallito" -#: libpq/auth.c:1893 +#: libpq/auth.c:1905 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "caricamento della funzione _ldap_start_tls_sA in wldap32.dll fallito" -#: libpq/auth.c:1894 +#: libpq/auth.c:1906 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "LDAP su SSL non è supportato su questa piattaforma." -#: libpq/auth.c:1909 +#: libpq/auth.c:1921 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "avvio della sessione TLS LDAP fallito: %s" -#: libpq/auth.c:1931 +#: libpq/auth.c:1943 #, c-format msgid "LDAP server not specified" msgstr "server LDAP non specificato" -#: libpq/auth.c:1984 +#: libpq/auth.c:1996 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "carattere non valido nel nome utente per l'autenticazione LDAP" -#: libpq/auth.c:1999 +#: libpq/auth.c:2011 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "bind iniziale LDAP fallito per ldapbinddn \"%s\" sul server \"%s\": %s" -#: libpq/auth.c:2023 +#: libpq/auth.c:2035 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "ricerca in LDAP del filtro \"%s\" sul server \"%s\" fallita: %s" -#: libpq/auth.c:2034 +#: libpq/auth.c:2046 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "l'utente LDAP \"%s\" non esiste" -#: libpq/auth.c:2035 +#: libpq/auth.c:2047 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "La ricerca LDAP del filtro \"%s\" sul server \"%s\" non ha restituito risultati." -#: libpq/auth.c:2039 +#: libpq/auth.c:2051 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "L'utente LDAP \"%s\" non è unico" -#: libpq/auth.c:2040 +#: libpq/auth.c:2052 #, 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 ricerca LDAP del filtro \"%s\" sul server \"%s\" ha restituito %d risultato." msgstr[1] "La ricerca LDAP del filtro \"%s\" sul server \"%s\" ha restituito %d risultati." -#: libpq/auth.c:2058 +#: libpq/auth.c:2070 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "dn per il primo risultato di \"%s\" non trovato sul server \"%s\": %s" -#: libpq/auth.c:2078 +#: libpq/auth.c:2090 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\": %s" msgstr "unbind fallito dopo aver cercato l'utente \"%s\" sul server \"%s\": %s" -#: libpq/auth.c:2108 +#: libpq/auth.c:2120 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "login LDAP fallito per l'utente \"%s\" sul server \"%s\": %s" -#: libpq/auth.c:2136 +#: libpq/auth.c:2148 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "autenticazione con certificato fallita per l'utente \"%s\": il certificato del client non contiene alcun nome utente" -#: libpq/auth.c:2260 +#: libpq/auth.c:2271 #, c-format msgid "RADIUS server not specified" msgstr "server RADIUS non specificato" -#: libpq/auth.c:2267 +#: libpq/auth.c:2278 #, c-format msgid "RADIUS secret not specified" msgstr "segreto RADIUS non specificato" -#: libpq/auth.c:2283 libpq/hba.c:1609 +#: libpq/auth.c:2294 libpq/hba.c:1590 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "conversione del nome del server RADIUS \"%s\" in indirizzo fallita: %s" -#: libpq/auth.c:2311 +#: libpq/auth.c:2322 #, c-format msgid "RADIUS authentication does not support passwords longer than 16 characters" msgstr "l'autenticazione RADIUS non supporta password più lunghe di 16 caratteri" -#: libpq/auth.c:2322 +#: libpq/auth.c:2333 #, c-format msgid "could not generate random encryption vector" msgstr "generazione del vettore di criptaggio casuale fallita" -#: libpq/auth.c:2345 +#: libpq/auth.c:2356 #, c-format msgid "could not perform MD5 encryption of password" msgstr "criptaggio MD5 della password fallito" -#: libpq/auth.c:2367 +#: libpq/auth.c:2378 #, c-format msgid "could not create RADIUS socket: %m" msgstr "creazione del socket RADIUS fallita: %m" -#: libpq/auth.c:2388 +#: libpq/auth.c:2399 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "bind del socket RADIUS fallito: %m" -#: libpq/auth.c:2398 +#: libpq/auth.c:2409 #, c-format msgid "could not send RADIUS packet: %m" msgstr "invio del pacchetto RADIUS fallito: %m" -#: libpq/auth.c:2427 libpq/auth.c:2452 +#: libpq/auth.c:2442 libpq/auth.c:2467 #, c-format msgid "timeout waiting for RADIUS response" msgstr "tempo scaduto in attesa della risposta RADIUS" -#: libpq/auth.c:2445 +#: libpq/auth.c:2460 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "controllo dello stato sul socket RADIUS fallito: %m" -#: libpq/auth.c:2474 +#: libpq/auth.c:2489 #, c-format msgid "could not read RADIUS response: %m" msgstr "lettura della risposta RADIUS fallita: %m" -#: libpq/auth.c:2486 libpq/auth.c:2490 +#: libpq/auth.c:2501 libpq/auth.c:2505 #, c-format msgid "RADIUS response was sent from incorrect port: %d" msgstr "la risposta RADIUS è stata inviata da una porta sbagliata: %d" -#: libpq/auth.c:2499 +#: libpq/auth.c:2514 #, c-format msgid "RADIUS response too short: %d" msgstr "risposta RADIUS troppo breve: %d" -#: libpq/auth.c:2506 +#: libpq/auth.c:2521 #, c-format msgid "RADIUS response has corrupt length: %d (actual length %d)" msgstr "la risposta RADIUS ha una lunghezza corrotta: %d (lunghezza reale %d)" -#: libpq/auth.c:2514 +#: libpq/auth.c:2529 #, c-format msgid "RADIUS response is to a different request: %d (should be %d)" msgstr "la risposta RADIUS è a una richiesta differente: %d (dovrebbe essere %d)" -#: libpq/auth.c:2539 +#: libpq/auth.c:2554 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "criptaggio MD5 dei pacchetti ricevuti fallito" -#: libpq/auth.c:2548 +#: libpq/auth.c:2563 #, c-format msgid "RADIUS response has incorrect MD5 signature" msgstr "la firma MD5 della risposta RADIUS non è corretta" -#: libpq/auth.c:2565 +#: libpq/auth.c:2580 #, c-format msgid "RADIUS response has invalid code (%d) for user \"%s\"" msgstr "il codice della risposta RADIUS (%d) per l'utente \"%s\" non è corretto" @@ -9574,156 +10492,137 @@ msgstr "scrittura del file del server \"%s\" fallita: %m" msgid "large object read request is too large" msgstr "la richiesta di lettura per il large object è troppo grande" -#: libpq/be-fsstubs.c:857 utils/adt/genfile.c:187 utils/adt/genfile.c:232 +#: libpq/be-fsstubs.c:857 utils/adt/genfile.c:211 utils/adt/genfile.c:252 #, c-format msgid "requested length cannot be negative" msgstr "la lunghezza richiesta non può essere negativa" -#: libpq/be-secure.c:296 libpq/be-secure.c:418 -#, c-format -msgid "SSL error: %s" -msgstr "errore SSL: %s" - -#: libpq/be-secure.c:305 libpq/be-secure.c:427 libpq/be-secure.c:1046 -#, c-format -msgid "unrecognized SSL error code: %d" -msgstr "codice di errore SSL sconosciuto: %d" - -#: libpq/be-secure.c:365 -#, c-format -msgid "SSL failure during renegotiation start" -msgstr "errore SSL durante l'avvio della rinegoziazione" - -#: libpq/be-secure.c:380 -#, c-format -msgid "SSL handshake failure on renegotiation, retrying" -msgstr "errore di handshake SSL su rinegoziazione, sto riprovando" - -#: libpq/be-secure.c:384 -#, c-format -msgid "could not complete SSL handshake on renegotiation, too many failures" -msgstr "completamento dell'handshake SSL su rinegoziazione non riuscito, troppi fallimenti" - -#: libpq/be-secure.c:453 -#, c-format -msgid "SSL failed to renegotiate connection before limit expired" -msgstr "SSL non è riuscito a rinegoziare la connessione prima di raggiungere il limite" - -#: libpq/be-secure.c:793 -#, c-format -msgid "ECDH: unrecognized curve name: %s" -msgstr "ECDH: nome della curva non riconosciuto: %s" - -#: libpq/be-secure.c:798 -#, c-format -msgid "ECDH: could not create key" -msgstr "ECDH: chiave non creata" - -#: libpq/be-secure.c:835 +#: libpq/be-secure-openssl.c:184 #, c-format msgid "could not create SSL context: %s" msgstr "creazione del contesto SSL fallita: %s" -#: libpq/be-secure.c:851 +#: libpq/be-secure-openssl.c:200 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "caricamento del file di certificato del server \"%s\" fallito: %s" -#: libpq/be-secure.c:857 +#: libpq/be-secure-openssl.c:206 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "accesso fallito al file della chiave privata \"%s\": %m" -#: libpq/be-secure.c:872 +#: libpq/be-secure-openssl.c:221 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "il file della chiave primaria \"%s\" ha accesso al gruppo o a chiunque" -#: libpq/be-secure.c:874 +#: libpq/be-secure-openssl.c:223 #, c-format msgid "Permissions should be u=rw (0600) or less." msgstr "Il permesso dovrebbe essere u=rw (0600) o inferiore." -#: libpq/be-secure.c:881 +#: libpq/be-secure-openssl.c:230 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "caricamento del file della chiave privata \"%s\" fallito: %s" -#: libpq/be-secure.c:886 +#: libpq/be-secure-openssl.c:235 #, c-format msgid "check of private key failed: %s" msgstr "controllo della chiave privata fallito: %s" -#: libpq/be-secure.c:915 +#: libpq/be-secure-openssl.c:264 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "caricamento del file del certificato radice \"%s\" fallito: %s" -#: libpq/be-secure.c:939 +#: libpq/be-secure-openssl.c:288 #, c-format msgid "SSL certificate revocation list file \"%s\" ignored" msgstr "il file di lista di revoche di certificati SSL \"%s\" è stato ignorato" -#: libpq/be-secure.c:941 +#: libpq/be-secure-openssl.c:290 #, c-format msgid "SSL library does not support certificate revocation lists." msgstr "La libreria SSL non supporta le liste di revoca dei certificati." -#: libpq/be-secure.c:946 +#: libpq/be-secure-openssl.c:295 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "caricamento del file di lista di revoche di certificati SSL \"%s\" fallito: %s" -#: libpq/be-secure.c:991 +#: libpq/be-secure-openssl.c:341 #, c-format msgid "could not initialize SSL connection: %s" msgstr "inizializzazione della connessione SSL fallita: %s" -#: libpq/be-secure.c:1000 +#: libpq/be-secure-openssl.c:349 #, c-format msgid "could not set SSL socket: %s" msgstr "impostazione del socket SSL fallita: %s" -#: libpq/be-secure.c:1026 +#: libpq/be-secure-openssl.c:383 #, c-format msgid "could not accept SSL connection: %m" msgstr "accettazione della connessione SSL fallita: %m" -#: libpq/be-secure.c:1030 libpq/be-secure.c:1041 +#: libpq/be-secure-openssl.c:387 libpq/be-secure-openssl.c:398 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "accettazione della connessione SSL fallita: fine file individuata" -#: libpq/be-secure.c:1035 +#: libpq/be-secure-openssl.c:392 #, c-format msgid "could not accept SSL connection: %s" msgstr "accettazione della connessione SSL fallita: %s" -#: libpq/be-secure.c:1091 +#: libpq/be-secure-openssl.c:403 libpq/be-secure-openssl.c:541 +#: libpq/be-secure-openssl.c:598 +#, c-format +msgid "unrecognized SSL error code: %d" +msgstr "codice di errore SSL sconosciuto: %d" + +#: libpq/be-secure-openssl.c:447 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "Il nome comune del certificato SSL contiene un null" -#: libpq/be-secure.c:1102 +#: libpq/be-secure-openssl.c:458 #, c-format msgid "SSL connection from \"%s\"" msgstr "connessione SSL da \"%s\"" -#: libpq/be-secure.c:1153 +#: libpq/be-secure-openssl.c:532 libpq/be-secure-openssl.c:589 +#, c-format +msgid "SSL error: %s" +msgstr "errore SSL: %s" + +#: libpq/be-secure-openssl.c:937 +#, c-format +msgid "ECDH: unrecognized curve name: %s" +msgstr "ECDH: nome della curva non riconosciuto: %s" + +#: libpq/be-secure-openssl.c:942 +#, c-format +msgid "ECDH: could not create key" +msgstr "ECDH: chiave non creata" + +#: libpq/be-secure-openssl.c:966 msgid "no SSL error reported" msgstr "nessun errore SSL riportato" -#: libpq/be-secure.c:1157 +#: libpq/be-secure-openssl.c:970 #, c-format msgid "SSL error code %lu" msgstr "codice di errore SSL: %lu" -#: libpq/crypt.c:67 +#: libpq/crypt.c:60 #, c-format msgid "User \"%s\" has no password assigned." msgstr "L'utente \"%s\" non ha una password assegnata." -#: libpq/crypt.c:160 +#: libpq/crypt.c:150 #, c-format msgid "User \"%s\" has an expired password." msgstr "L'utente \"%s\" ha la password scaduta." @@ -9743,430 +10642,430 @@ msgstr "apertura del file secondario di autenticazione \"@%s\" come \"%s\" falli msgid "authentication file line too long" msgstr "riga del file di autenticazione troppo lunga" -#: libpq/hba.c:410 libpq/hba.c:787 libpq/hba.c:803 libpq/hba.c:833 -#: libpq/hba.c:879 libpq/hba.c:892 libpq/hba.c:914 libpq/hba.c:923 -#: libpq/hba.c:946 libpq/hba.c:958 libpq/hba.c:977 libpq/hba.c:998 -#: libpq/hba.c:1009 libpq/hba.c:1064 libpq/hba.c:1082 libpq/hba.c:1094 -#: libpq/hba.c:1111 libpq/hba.c:1121 libpq/hba.c:1135 libpq/hba.c:1151 -#: libpq/hba.c:1166 libpq/hba.c:1177 libpq/hba.c:1213 libpq/hba.c:1245 -#: libpq/hba.c:1256 libpq/hba.c:1276 libpq/hba.c:1287 libpq/hba.c:1304 -#: libpq/hba.c:1329 libpq/hba.c:1366 libpq/hba.c:1376 libpq/hba.c:1432 -#: libpq/hba.c:1444 libpq/hba.c:1457 libpq/hba.c:1540 libpq/hba.c:1611 -#: libpq/hba.c:1629 libpq/hba.c:1650 tsearch/ts_locale.c:182 +#: libpq/hba.c:410 libpq/hba.c:757 libpq/hba.c:773 libpq/hba.c:803 +#: libpq/hba.c:849 libpq/hba.c:862 libpq/hba.c:884 libpq/hba.c:893 +#: libpq/hba.c:914 libpq/hba.c:926 libpq/hba.c:945 libpq/hba.c:966 +#: libpq/hba.c:977 libpq/hba.c:1032 libpq/hba.c:1050 libpq/hba.c:1062 +#: libpq/hba.c:1079 libpq/hba.c:1089 libpq/hba.c:1103 libpq/hba.c:1119 +#: libpq/hba.c:1134 libpq/hba.c:1145 libpq/hba.c:1181 libpq/hba.c:1213 +#: libpq/hba.c:1224 libpq/hba.c:1244 libpq/hba.c:1255 libpq/hba.c:1272 +#: libpq/hba.c:1297 libpq/hba.c:1334 libpq/hba.c:1344 libpq/hba.c:1413 +#: libpq/hba.c:1425 libpq/hba.c:1438 libpq/hba.c:1521 libpq/hba.c:1592 +#: libpq/hba.c:1610 libpq/hba.c:1631 tsearch/ts_locale.c:182 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "riga %d del file di configurazione \"%s\"" #. translator: the second %s is a list of auth methods -#: libpq/hba.c:785 +#: libpq/hba.c:755 #, c-format msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "l'opzione di autenticazione \"%s\" è valida solo per i metodi di autenticazione %s" -#: libpq/hba.c:801 +#: libpq/hba.c:771 #, c-format msgid "authentication method \"%s\" requires argument \"%s\" to be set" msgstr "il metodo di autenticazione \"%s\" richiede che l'argomenti \"%s\" sia impostato" -#: libpq/hba.c:822 +#: libpq/hba.c:792 #, c-format msgid "missing entry in file \"%s\" at end of line %d" msgstr "voce mancante nel file \"%s\" alla fine della riga %d" -#: libpq/hba.c:832 +#: libpq/hba.c:802 #, c-format msgid "multiple values in ident field" msgstr "più di un valore nel campo ident" -#: libpq/hba.c:877 +#: libpq/hba.c:847 #, c-format msgid "multiple values specified for connection type" msgstr "più di un valore specificato per il tipo di connessione" -#: libpq/hba.c:878 +#: libpq/hba.c:848 #, c-format msgid "Specify exactly one connection type per line." msgstr "Specifica esattamente un tipo di connessione per riga." -#: libpq/hba.c:891 +#: libpq/hba.c:861 #, c-format msgid "local connections are not supported by this build" msgstr "le connessioni locali non sono supportate in questo binario" -#: libpq/hba.c:912 +#: libpq/hba.c:882 #, c-format msgid "hostssl requires SSL to be turned on" msgstr "hostssl richiede che SSL sia abilitato" -#: libpq/hba.c:913 +#: libpq/hba.c:883 #, c-format msgid "Set ssl = on in postgresql.conf." msgstr "Imposta ssl = on in postgresql.conf." -#: libpq/hba.c:921 +#: libpq/hba.c:891 #, c-format msgid "hostssl is not supported by this build" msgstr "hostssl non è supportato in questo binario" -#: libpq/hba.c:922 +#: libpq/hba.c:892 #, c-format msgid "Compile with --with-openssl to use SSL connections." msgstr "Compila con --with-openssl per usare connessioni SSL." -#: libpq/hba.c:944 +#: libpq/hba.c:912 #, c-format msgid "invalid connection type \"%s\"" msgstr "tipo di connessione \"%s\" non valido" -#: libpq/hba.c:957 +#: libpq/hba.c:925 #, c-format msgid "end-of-line before database specification" msgstr "fine riga prima della specificazione del database" -#: libpq/hba.c:976 +#: libpq/hba.c:944 #, c-format msgid "end-of-line before role specification" msgstr "fine riga prima della specificazione del ruolo" -#: libpq/hba.c:997 +#: libpq/hba.c:965 #, c-format msgid "end-of-line before IP address specification" msgstr "fine riga prima della specificazione dell'indirizzo IP" -#: libpq/hba.c:1007 +#: libpq/hba.c:975 #, c-format msgid "multiple values specified for host address" msgstr "più di un valore specificato per l'indirizzo host" -#: libpq/hba.c:1008 +#: libpq/hba.c:976 #, c-format msgid "Specify one address range per line." msgstr "Specifica un intervallo di indirizzi per riga." -#: libpq/hba.c:1062 +#: libpq/hba.c:1030 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "indirizzo IP non valido \"%s\": %s" -#: libpq/hba.c:1080 +#: libpq/hba.c:1048 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "specificare sia un nome host che una maschera CIDR non è consentito: \"%s\"" -#: libpq/hba.c:1092 +#: libpq/hba.c:1060 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "maschera CIDR non valida nell'indirizzo \"%s\"" -#: libpq/hba.c:1109 +#: libpq/hba.c:1077 #, c-format msgid "end-of-line before netmask specification" msgstr "fine riga prima della specificazione della maschera di rete" -#: libpq/hba.c:1110 +#: libpq/hba.c:1078 #, c-format msgid "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "Specifica un intervallo di indirizzi in notazione CIDR, oppure fornisci una maschera di rete separata." -#: libpq/hba.c:1120 +#: libpq/hba.c:1088 #, c-format msgid "multiple values specified for netmask" msgstr "più di un valore specificato per la maschera di rete" -#: libpq/hba.c:1133 +#: libpq/hba.c:1101 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "maschera IP non valida \"%s\": %s" -#: libpq/hba.c:1150 +#: libpq/hba.c:1118 #, c-format msgid "IP address and mask do not match" msgstr "l'indirizzo IP e la maschera non combaciano" -#: libpq/hba.c:1165 +#: libpq/hba.c:1133 #, c-format msgid "end-of-line before authentication method" msgstr "fine riga prima del metodo di autenticazione" -#: libpq/hba.c:1175 +#: libpq/hba.c:1143 #, c-format msgid "multiple values specified for authentication type" msgstr "più di un valore specificato per il tipo di autenticazione" -#: libpq/hba.c:1176 +#: libpq/hba.c:1144 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Specifica esattamente un tipo di autenticazione per riga." -#: libpq/hba.c:1243 +#: libpq/hba.c:1211 #, c-format msgid "invalid authentication method \"%s\"" msgstr "metodo di autenticazione \"%s\" non valido" -#: libpq/hba.c:1254 +#: libpq/hba.c:1222 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "metodo di autenticazione \"%s\" non valido: non supportato in questo binario" -#: libpq/hba.c:1275 +#: libpq/hba.c:1243 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "l'autenticazione gssapi non è supportata su socket locali" -#: libpq/hba.c:1286 +#: libpq/hba.c:1254 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "l'autenticazione peer è supportata solo su socket locali" -#: libpq/hba.c:1303 +#: libpq/hba.c:1271 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "l'autenticazione cert è supportata solo su connessioni hostssl" -#: libpq/hba.c:1328 +#: libpq/hba.c:1296 #, c-format msgid "authentication option not in name=value format: %s" msgstr "opzione di autenticazione non in formato nome=valore: %s" -#: libpq/hba.c:1365 +#: libpq/hba.c:1333 #, c-format msgid "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, or ldapurl together with ldapprefix" msgstr "non si possono usare ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute né ldapurl insieme a ldapprefix" -#: libpq/hba.c:1375 +#: libpq/hba.c:1343 #, c-format msgid "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix\", or \"ldapsuffix\" to be set" msgstr "il metodo di autenticazione \"ldap\" richiede che gli argomenti \"ldapbasedn\", \"ldapprefix\" o \"ldapsuffix\" siano impostati" -#: libpq/hba.c:1418 +#: libpq/hba.c:1399 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi e cert" -#: libpq/hba.c:1431 +#: libpq/hba.c:1412 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "il clientcert può essere configurato solo per le righe \"hostssl\"" -#: libpq/hba.c:1442 +#: libpq/hba.c:1423 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "il certificato del client può essere controllato solo se un root certificate store è disponibile" -#: libpq/hba.c:1443 -#, c-format -msgid "Make sure the configuration parameter \"ssl_ca_file\" is set." -msgstr "Assicurati che il parametro di configurazione \"ssl_ca_file\" sia impostato." - -#: libpq/hba.c:1456 +#: libpq/hba.c:1437 #, c-format msgid "clientcert can not be set to 0 when using \"cert\" authentication" msgstr "clientcert non può essere impostato a 0 quando si usa l'autenticazione \"cert\"" -#: libpq/hba.c:1483 +#: libpq/hba.c:1464 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "impossibile interpretare la URL LDAP \"%s\": %s" -#: libpq/hba.c:1491 +#: libpq/hba.c:1472 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "schema di URL LDAP non supportato: %s" -#: libpq/hba.c:1507 +#: libpq/hba.c:1488 #, c-format msgid "filters not supported in LDAP URLs" msgstr "i filtri non sono supportati nelle URL LDAP" -#: libpq/hba.c:1515 +#: libpq/hba.c:1496 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "URL LDAP non supportate su questa piattaforma" -#: libpq/hba.c:1539 +#: libpq/hba.c:1520 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "numero di porta LDAP non valido: \"%s\"" -#: libpq/hba.c:1579 libpq/hba.c:1586 +#: libpq/hba.c:1560 libpq/hba.c:1567 msgid "gssapi and sspi" msgstr "gssapi e sspi" -#: libpq/hba.c:1628 +#: libpq/hba.c:1609 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "numero di porta RADIUS non valido: \"%s\"" -#: libpq/hba.c:1648 +#: libpq/hba.c:1629 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "nome di opzione di autenticazione sconosciuto: \"%s\"" -#: libpq/hba.c:1789 guc-file.l:517 +#: libpq/hba.c:1764 guc-file.l:595 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "apertura del file di configurazione \"%s\" fallita: %m" -#: libpq/hba.c:1839 +#: libpq/hba.c:1815 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "il file di configurazione \"%s\" non contiene alcuna voce" -#: libpq/hba.c:1935 +#: libpq/hba.c:1911 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "espressione regolare non valida \"%s\": %s" -#: libpq/hba.c:1995 +#: libpq/hba.c:1971 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "corrispondenza dell'espressione regolare \"%s\" fallita: %s" -#: libpq/hba.c:2012 +#: libpq/hba.c:1990 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "l'espressione regolare \"%s\" non ha la sottoespressione richiesta dal riferimento in \"%s\"" -#: libpq/hba.c:2108 +#: libpq/hba.c:2087 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "il nome utente fornito (%s) e il nome utente autenticato (%s) non combaciano" -#: libpq/hba.c:2128 +#: libpq/hba.c:2107 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "nessuna corrispondenza nella mappa utenti \"%s\" per l'utente \"%s\" autenticato come \"%s\"" -#: libpq/hba.c:2163 +#: libpq/hba.c:2142 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "apertura del file usermap \"%s\" fallita: %m" -#: libpq/pqcomm.c:314 +#: libpq/pqcomm.c:201 +#, c-format +msgid "could not set socket to nonblocking mode: %m" +msgstr "impossibile impostare il socket in modalità non bloccante: %m" + +#: libpq/pqcomm.c:348 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "Il percorso del socket di dominio unix \"%s\" è troppo lungo (massimo %d byte)" -#: libpq/pqcomm.c:335 +#: libpq/pqcomm.c:369 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "conversione del nome host \"%s\", servizio \"%s\" in indirizzo fallita: %s" -#: libpq/pqcomm.c:339 +#: libpq/pqcomm.c:373 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "conversione del servizio \"%s\" in indirizzo fallita: %s" -#: libpq/pqcomm.c:366 +#: libpq/pqcomm.c:400 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "bind a tutti gli indirizzi richiesti fallito: MAXLISTEN (%d) superato" -#: libpq/pqcomm.c:375 +#: libpq/pqcomm.c:409 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:379 +#: libpq/pqcomm.c:413 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:384 +#: libpq/pqcomm.c:418 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:389 +#: libpq/pqcomm.c:423 #, c-format msgid "unrecognized address family %d" msgstr "famiglia di indirizzi %d sconosciuto" #. translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:400 +#: libpq/pqcomm.c:434 #, c-format msgid "could not create %s socket: %m" msgstr "non è stato possibile creare il socket %s: %m" -#: libpq/pqcomm.c:425 +#: libpq/pqcomm.c:459 #, c-format msgid "setsockopt(SO_REUSEADDR) failed: %m" msgstr "setsockopt(SO_REUSEADDR) fallito: %m" -#: libpq/pqcomm.c:440 +#: libpq/pqcomm.c:474 #, c-format msgid "setsockopt(IPV6_V6ONLY) failed: %m" msgstr "setsockopt(IPV6_V6ONLY) fallito: %m" #. translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:459 +#: libpq/pqcomm.c:493 #, c-format msgid "could not bind %s socket: %m" msgstr "bind del socket %s fallito: %m" -#: libpq/pqcomm.c:462 +#: libpq/pqcomm.c:496 #, c-format msgid "Is another postmaster already running on port %d? If not, remove socket file \"%s\" and retry." msgstr "C'è già un altro postmaster in funzione sulla porta %d? Se non c'è, rimuovi il file socket \"%s\" e riprova." -#: libpq/pqcomm.c:465 +#: libpq/pqcomm.c:499 #, c-format msgid "Is another postmaster already running on port %d? If not, wait a few seconds and retry." msgstr "C'è già un altro postmaster in funzione sulla porta %d? Se non c'è, aspetta alcuni secondi e riprova." #. translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:498 +#: libpq/pqcomm.c:532 #, c-format msgid "could not listen on %s socket: %m" msgstr "ascolto sul socket %s fallito: %m" -#: libpq/pqcomm.c:588 +#: libpq/pqcomm.c:617 #, c-format msgid "group \"%s\" does not exist" msgstr "il gruppo \"%s\" non esiste" -#: libpq/pqcomm.c:598 +#: libpq/pqcomm.c:627 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "impostazione del gruppo del file \"%s\" fallita: %m" -#: libpq/pqcomm.c:609 +#: libpq/pqcomm.c:638 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "impostazione dei permessi del file \"%s\" fallita: %m" -#: libpq/pqcomm.c:639 +#: libpq/pqcomm.c:668 #, c-format msgid "could not accept new connection: %m" msgstr "impossibile accettare la nuova connessione: %m" -#: libpq/pqcomm.c:811 +#: libpq/pqcomm.c:879 #, c-format -msgid "could not set socket to nonblocking mode: %m" -msgstr "impossibile impostare il socket in modalità non bloccante: %m" - -#: libpq/pqcomm.c:817 -#, c-format -msgid "could not set socket to blocking mode: %m" -msgstr "impostazione del socket in modalità bloccante fallita: %m" +msgid "there is no client connection" +msgstr "c'è alcuna connessione client" -#: libpq/pqcomm.c:869 libpq/pqcomm.c:959 +#: libpq/pqcomm.c:930 libpq/pqcomm.c:1026 #, c-format msgid "could not receive data from client: %m" msgstr "ricezione dati dal client fallita: %m" -#: libpq/pqcomm.c:1110 +#: libpq/pqcomm.c:1171 tcop/postgres.c:3897 +#, c-format +msgid "terminating connection because protocol sync was lost" +msgstr "la connessione verrà terminata perché la sincronizzazione del protocollo è stata persa" + +#: libpq/pqcomm.c:1237 #, c-format msgid "unexpected EOF within message length word" msgstr "fine file inattesa nella word della lunghezza del messaggio" -#: libpq/pqcomm.c:1121 +#: libpq/pqcomm.c:1248 #, c-format msgid "invalid message length" msgstr "lunghezza del messaggio non valida" -#: libpq/pqcomm.c:1143 libpq/pqcomm.c:1153 +#: libpq/pqcomm.c:1270 libpq/pqcomm.c:1283 #, c-format msgid "incomplete message from client" msgstr "messaggio incompleto dal client" -#: libpq/pqcomm.c:1283 +#: libpq/pqcomm.c:1416 #, c-format msgid "could not send data to client: %m" msgstr "invio dati al client fallito: %m" @@ -10177,7 +11076,7 @@ msgid "no data left in message" msgstr "nessun dato rimasto nel messaggio" #: libpq/pqformat.c:556 libpq/pqformat.c:574 libpq/pqformat.c:595 -#: utils/adt/arrayfuncs.c:1444 utils/adt/rowtypes.c:561 +#: utils/adt/arrayfuncs.c:1457 utils/adt/rowtypes.c:561 #, c-format msgid "insufficient data left in message" msgstr "i dati rimasti nel messaggio non sono sufficienti" @@ -10192,17 +11091,12 @@ msgstr "stringa non valida nel messaggio" msgid "invalid message format" msgstr "formato del messaggio non valido" -#: main/main.c:262 -#, c-format -msgid "%s: setsysinfo failed: %s\n" -msgstr "%s: setsysinfo fallita: %s\n" - -#: main/main.c:284 +#: main/main.c:259 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartup fallita: %d\n" -#: main/main.c:313 +#: main/main.c:306 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -10211,7 +11105,7 @@ msgstr "" "%s è il server PostgreSQL.\n" "\n" -#: main/main.c:314 +#: main/main.c:307 #, c-format msgid "" "Usage:\n" @@ -10222,119 +11116,114 @@ msgstr "" " %s [OPZIONE]...\n" "\n" -#: main/main.c:315 +#: main/main.c:308 #, c-format msgid "Options:\n" msgstr "Opzioni:\n" -#: main/main.c:317 -#, c-format -msgid " -A 1|0 enable/disable run-time assert checking\n" -msgstr " -A 1|0 abilita/disabilita il controllo delle asserzioni in esecuzione\n" - -#: main/main.c:319 +#: main/main.c:309 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS numero di buffer condivisi\n" -#: main/main.c:320 +#: main/main.c:310 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NOME=VALORE imposta un parametro di esecuzione\n" -#: main/main.c:321 +#: main/main.c:311 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NAME stampa il valore del parametro di esecuzione ed esci\n" -#: main/main.c:322 +#: main/main.c:312 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 livello di debugging\n" -#: main/main.c:323 +#: main/main.c:313 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR directory del database\n" -#: main/main.c:324 +#: main/main.c:314 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e usa il formato date europeo (GMA)\n" -#: main/main.c:325 +#: main/main.c:315 #, c-format msgid " -F turn fsync off\n" msgstr " -F disabilita fsync\n" -#: main/main.c:326 +#: main/main.c:316 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h HOSTNAME nome host o indirizzo IP su cui ascoltare\n" -#: main/main.c:327 +#: main/main.c:317 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i abilita le connessioni TCP/IP\n" -#: main/main.c:328 +#: main/main.c:318 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k DIRECTORY posizione dei socket di dominio Unix\n" -#: main/main.c:330 +#: main/main.c:320 #, c-format msgid " -l enable SSL connections\n" msgstr " -l abilita la connessione SSL\n" -#: main/main.c:332 +#: main/main.c:322 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N MAX-CONNECT numero massimo di connessioni consentite\n" -#: main/main.c:333 +#: main/main.c:323 #, c-format msgid " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" msgstr " -o OPZIONI passa \"OPZIONI\" ad ogni processo server (obsoleto)\n" -#: main/main.c:334 +#: main/main.c:324 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT numero di porta sul quale ascoltare\n" -#: main/main.c:335 +#: main/main.c:325 #, c-format msgid " -s show statistics after each query\n" msgstr " -s mostra le statistiche dopo ogni query\n" -#: main/main.c:336 +#: main/main.c:326 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr "" " -S WORK-MEM imposta la dimensione della memoria per gli ordinamenti\n" " (in kB)\n" -#: main/main.c:337 +#: main/main.c:327 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informazioni sulla versione ed esci\n" -#: main/main.c:338 +#: main/main.c:328 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NOME=VALORE imposta un parametro di esecuzione\n" -#: main/main.c:339 +#: main/main.c:329 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config descrivi i parametri di configurazione ed esci\n" -#: main/main.c:340 +#: main/main.c:330 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra questo aiuto ed esci\n" -#: main/main.c:342 +#: main/main.c:332 #, c-format msgid "" "\n" @@ -10343,48 +11232,48 @@ msgstr "" "\n" "Opzioni per gli sviluppatori:\n" -#: main/main.c:343 +#: main/main.c:333 #, c-format msgid " -f s|i|n|m|h forbid use of some plan types\n" msgstr " -f s|i|n|m|h vieta l'uso di alcuni tipi di piani\n" -#: main/main.c:344 +#: main/main.c:334 #, c-format msgid " -n do not reinitialize shared memory after abnormal exit\n" msgstr "" " -n non reinizializzare la memoria condivisa dopo un'uscita\n" " anormale\n" -#: main/main.c:345 +#: main/main.c:335 #, c-format msgid " -O allow system table structure changes\n" msgstr "" " -O consenti cambiamenti alla struttura delle tabelle\n" " di sistema\n" -#: main/main.c:346 +#: main/main.c:336 #, c-format msgid " -P disable system indexes\n" msgstr " -P disabilita gli indici di sistema\n" -#: main/main.c:347 +#: main/main.c:337 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex mostra i tempi impiegati dopo ogni query\n" -#: main/main.c:348 +#: main/main.c:338 #, c-format msgid " -T send SIGSTOP to all backend processes if one dies\n" msgstr " -T invia SIGSTOP a tutti i processi backend se uno muore\n" -#: main/main.c:349 +#: main/main.c:339 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr "" " -W NUM attendi NUM secondi per consentire ad un debugger\n" " di collegarsi\n" -#: main/main.c:351 +#: main/main.c:341 #, c-format msgid "" "\n" @@ -10393,41 +11282,41 @@ msgstr "" "\n" "Opzione per la modalità a singolo utente:\n" -#: main/main.c:352 +#: main/main.c:342 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr "" " --single imposta la modalità utente singolo (deve essere il primo\n" " argomento)\n" -#: main/main.c:353 +#: main/main.c:343 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME nome del database (il predefinito è il nome dell'utente)\n" -#: main/main.c:354 +#: main/main.c:344 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 scavalca il livello di debugging\n" -#: main/main.c:355 +#: main/main.c:345 #, c-format msgid " -E echo statement before execution\n" msgstr " -E stampa le istruzioni prima dell'esecuzione\n" -#: main/main.c:356 +#: main/main.c:346 #, c-format msgid " -j do not use newline as interactive query delimiter\n" msgstr "" " -j non usare \"a capo\" come delimitatore delle query\n" " interattivo\n" -#: main/main.c:357 main/main.c:362 +#: main/main.c:347 main/main.c:352 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r NOMEFILE invia stdout e stderr al file in argomento\n" -#: main/main.c:359 +#: main/main.c:349 #, c-format msgid "" "\n" @@ -10436,26 +11325,26 @@ msgstr "" "\n" "Opzioni per la modalità di inizializzazione:\n" -#: main/main.c:360 +#: main/main.c:350 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr "" " --boot seleziona la modalità di inizializzazione (dev'essere\n" " il primo argomento)\n" -#: main/main.c:361 +#: main/main.c:351 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr "" " DBNAME nome del database (obbligatorio in modalità di\n" " inizializzazione)\n" -#: main/main.c:363 +#: main/main.c:353 #, c-format msgid " -x NUM internal use\n" msgstr " -x NUM uso interno\n" -#: main/main.c:365 +#: main/main.c:355 #, c-format msgid "" "\n" @@ -10472,7 +11361,7 @@ msgstr "" "\n" "Puoi segnalare eventuali bug a .\n" -#: main/main.c:379 +#: main/main.c:369 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -10485,12 +11374,12 @@ msgstr "" "prevenire possibili problemi di sicurezza. Consulta la documentazione\n" "per avere maggiori informazioni su come avviare il server correttamente.\n" -#: main/main.c:396 +#: main/main.c:386 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: utente gli ID reale e quello effettivo devono coincidere\n" -#: main/main.c:403 +#: main/main.c:393 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -10505,591 +11394,769 @@ msgstr "" "prevenire possibili problemi di sicurezza. Consulta la documentazione\n" "per avere maggiori informazioni su come avviare il server correttamente.\n" -#: nodes/nodeFuncs.c:115 nodes/nodeFuncs.c:141 parser/parse_coerce.c:1782 +#: nodes/nodeFuncs.c:118 nodes/nodeFuncs.c:149 parser/parse_coerce.c:1782 #: parser/parse_coerce.c:1810 parser/parse_coerce.c:1886 -#: parser/parse_expr.c:1739 parser/parse_func.c:590 parser/parse_oper.c:948 +#: parser/parse_expr.c:1981 parser/parse_func.c:597 parser/parse_oper.c:952 #, c-format msgid "could not find array type for data type %s" msgstr "non è stato possibile trovare il tipo di array per il tipo di dati %s" -#: optimizer/path/joinrels.c:722 +#: optimizer/path/allpaths.c:2272 +#, c-format +msgid "WHERE CURRENT OF is not supported on a view with no underlying relation" +msgstr "WHERE CURRENT OF non è supportato per una vista senza una relazione sottostante" + +#: optimizer/path/allpaths.c:2277 +#, c-format +msgid "WHERE CURRENT OF is not supported on a view with more than one underlying relation" +msgstr "WHERE CURRENT OF non è supportato per una vista con più di una relazione sottostante" + +#: optimizer/path/allpaths.c:2282 +#, c-format +msgid "WHERE CURRENT OF is not supported on a view with grouping or aggregation" +msgstr "WHERE CURRENT OF non è supportato per una vista con raggruppamenti o aggregazioni" + +#: optimizer/path/joinrels.c:740 #, c-format msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" msgstr "FULL JOIN è supportato solo con condizioni di join realizzabili con merge o hash" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1079 +#: optimizer/plan/initsplan.c:1083 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s non può essere applicato sul lato che può essere nullo di un join esterno" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1158 parser/analyze.c:1330 parser/analyze.c:1528 -#: parser/analyze.c:2287 +#: optimizer/plan/planner.c:1347 parser/analyze.c:1433 parser/analyze.c:1631 +#: parser/analyze.c:2412 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s non è consentito con UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:2723 +#: optimizer/plan/planner.c:3603 #, c-format msgid "could not implement GROUP BY" msgstr "non è stato possibile implementare GROUP BY" -#: optimizer/plan/planner.c:2724 optimizer/plan/planner.c:2892 -#: optimizer/prep/prepunion.c:825 +#: optimizer/plan/planner.c:3604 optimizer/plan/planner.c:3772 +#: optimizer/prep/prepunion.c:828 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "Alcuni dei tipi di dati supportano solo l'hashing, mentre altri supportano solo l'ordinamento." -#: optimizer/plan/planner.c:2891 +#: optimizer/plan/planner.c:3771 #, c-format msgid "could not implement DISTINCT" msgstr "non è stato possibile implementare DISTINCT" -#: optimizer/plan/planner.c:3497 +#: optimizer/plan/planner.c:4377 #, c-format msgid "could not implement window PARTITION BY" msgstr "non è stato possibile implementare PARTITION BY della finestra" -#: optimizer/plan/planner.c:3498 +#: optimizer/plan/planner.c:4378 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "La colonna di partizionamento della finestra dev'essere un tipo di dato ordinabile." -#: optimizer/plan/planner.c:3502 +#: optimizer/plan/planner.c:4382 #, c-format msgid "could not implement window ORDER BY" msgstr "non è stato possibile implementare ORDER BY della finestra" -#: optimizer/plan/planner.c:3503 +#: optimizer/plan/planner.c:4383 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "La colonna di ordinamento della finestra dev'essere un tipo di dato ordinabile." -#: optimizer/plan/setrefs.c:402 +#: optimizer/plan/setrefs.c:411 #, c-format msgid "too many range table entries" msgstr "troppi intervalli di tabella" -#: optimizer/prep/prepunion.c:419 +#: optimizer/prep/prepunion.c:421 #, c-format msgid "could not implement recursive UNION" msgstr "non è stato possibile implementare la UNION ricorsiva" -#: optimizer/prep/prepunion.c:420 +#: optimizer/prep/prepunion.c:422 #, c-format msgid "All column datatypes must be hashable." msgstr "Tutti i tipi di dati devono supportare l'hash." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:824 +#: optimizer/prep/prepunion.c:827 #, c-format msgid "could not implement %s" msgstr "non è stato possibile implementare %s" -#: optimizer/util/clauses.c:4529 +#: optimizer/util/clauses.c:4597 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "funzione SQL \"%s\" durante l'inlining" -#: optimizer/util/plancat.c:104 +#: optimizer/util/plancat.c:108 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "non è possibile accedere a relazioni temporanee o non loggate durante il ripristino" -#: parser/analyze.c:627 parser/analyze.c:1102 +#: optimizer/util/plancat.c:498 +#, c-format +msgid "system columns cannot be used in an ON CONFLICT clause" +msgstr "le colonne di sistema non possono essere usate in una clausola ON CONFLICT" + +#: optimizer/util/plancat.c:516 +#, c-format +msgid "constraint in ON CONFLICT clause has no associated index" +msgstr "il vincolo nella clausola ON CONFLICT non ha indici associati" + +#: optimizer/util/plancat.c:568 +#, c-format +msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" +msgstr "ON CONFLICT DO UPDATE non supportato con vincoli di esclusione" + +#: optimizer/util/plancat.c:675 +#, c-format +msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" +msgstr "non c'è alcun vincolo di unicità o esclusione che combaci con la specifica ON CONFLICT" + +#: parser/analyze.c:639 parser/analyze.c:1205 #, c-format msgid "VALUES lists must all be the same length" msgstr "le liste VALUES devono essere tutte della stessa lunghezza" -#: parser/analyze.c:794 +#: parser/analyze.c:811 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT ha più espressioni che colonne di destinazione" -#: parser/analyze.c:812 +#: parser/analyze.c:829 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT ha più colonne di destinazione che espressioni" -#: parser/analyze.c:816 +#: parser/analyze.c:833 #, c-format msgid "The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?" msgstr "L'origine dell'inserimento è un'espressione riga con lo stesso numero di colonne attese da INSERT. Forse hai usato accidentalmente parentesi in eccesso?" -#: parser/analyze.c:924 parser/analyze.c:1303 +#: parser/analyze.c:1026 parser/analyze.c:1406 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO non è permesso qui" -#: parser/analyze.c:1116 +#: parser/analyze.c:1219 #, c-format msgid "DEFAULT can only appear in a VALUES list within INSERT" msgstr "DEFAULT può apparire solo nella lista di VALUES usata in un INSERT" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1235 parser/analyze.c:2459 +#: parser/analyze.c:1338 parser/analyze.c:2582 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s non è consentito con VALUES" -#: parser/analyze.c:1456 +#: parser/analyze.c:1559 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "clausola UNION/INTERSECT/EXCEPT ORDER BY non valida" -#: parser/analyze.c:1457 +#: parser/analyze.c:1560 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "Possono essere usati solo nomi di colonne risultanti, non espressioni o funzioni." -#: parser/analyze.c:1458 +#: parser/analyze.c:1561 #, c-format msgid "Add the expression/function to every SELECT, or move the UNION into a FROM clause." msgstr "Aggiungi l'espressione/funzione ad ogni SELECT, oppure sposta la UNION in una clausola FROM." -#: parser/analyze.c:1518 +#: parser/analyze.c:1621 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTO è permesso solo nella prima SELECT di UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:1582 +#: parser/analyze.c:1685 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "l'istruzione membro di UNION/INTERSECT/EXCEPT non può riferirsi al altre relazione allo stesso livello della query" -#: parser/analyze.c:1671 +#: parser/analyze.c:1774 #, c-format msgid "each %s query must have the same number of columns" msgstr "ogni query in %s deve avere lo stesso numero di colonne" -#: parser/analyze.c:2051 +#: parser/analyze.c:2167 #, c-format msgid "RETURNING must have at least one column" msgstr "RETURNING deve avere almeno una colonna" -#: parser/analyze.c:2088 +#: parser/analyze.c:2204 #, c-format msgid "cannot specify both SCROLL and NO SCROLL" msgstr "non è possibile specificare sia SCROLL che NO SCROLL" -#: parser/analyze.c:2106 +#: parser/analyze.c:2222 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR non può contenere istruzioni di modifica dei dati nel WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2114 +#: parser/analyze.c:2230 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s non è supportato" -#: parser/analyze.c:2117 +#: parser/analyze.c:2233 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "I cursori trattenibili devono essere READ ONLY." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2125 +#: parser/analyze.c:2241 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s non è supportato" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2136 +#: parser/analyze.c:2252 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" msgstr "DECLARE INSENSITIVE CURSOR ... %s non è supportato" -#: parser/analyze.c:2139 +#: parser/analyze.c:2255 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "I cursori Insensitive devono essere READ ONLY." -#: parser/analyze.c:2205 +#: parser/analyze.c:2321 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "le viste materializzate non possono usare istruzioni di modifica dei dati nel WITH" -#: parser/analyze.c:2215 +#: parser/analyze.c:2331 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "le viste materializzate non possono usare tabelle temporanee o viste" -#: parser/analyze.c:2225 +#: parser/analyze.c:2341 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "le viste materializzate non possono essere definite con parametri impostati" -#: parser/analyze.c:2237 +#: parser/analyze.c:2353 #, c-format msgid "materialized views cannot be UNLOGGED" msgstr "le viste materializzate non possono essere UNLOGGED" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2294 +#: parser/analyze.c:2419 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s non è consentito con la clausola DISTINCT" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2301 +#: parser/analyze.c:2426 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s non è consentito con la clausola GROUP BY" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2308 +#: parser/analyze.c:2433 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s non è consentito con la clausola HAVING" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2315 +#: parser/analyze.c:2440 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s non è consentito con funzioni di aggregazione" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2322 +#: parser/analyze.c:2447 #, c-format msgid "%s is not allowed with window functions" msgstr "%s non è consentito con funzioni finestra" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2329 +#: parser/analyze.c:2454 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s non è consentito con la le funzioni che restituiscono insiemi nella lista di destinazione" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2408 +#: parser/analyze.c:2533 #, c-format msgid "%s must specify unqualified relation names" msgstr "%s deve specificare nomi di tabelle non qualificati" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2441 +#: parser/analyze.c:2564 #, c-format msgid "%s cannot be applied to a join" msgstr "%s non può essere applicato ad un join" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2450 +#: parser/analyze.c:2573 #, c-format msgid "%s cannot be applied to a function" msgstr "%s non può essere applicato ad una funzione" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2468 +#: parser/analyze.c:2591 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s non può essere applicato ad una query WITH" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2485 +#: parser/analyze.c:2608 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "la relazione \"%s\" nella clausola %s non è stata trovata nella clausola FROM" -#: parser/parse_agg.c:201 parser/parse_oper.c:219 +#: parser/parse_agg.c:207 parser/parse_oper.c:220 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "non è stato possibile identificare un operatore di ordinamento per il tipo %s" -#: parser/parse_agg.c:203 +#: parser/parse_agg.c:209 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "Gli aggregati con DISTINCT devono essere in grado di ordinare i loro input." -#: parser/parse_agg.c:254 +#: parser/parse_agg.c:244 +#, c-format +msgid "GROUPING must have fewer than 32 arguments" +msgstr "GROUPING deve avere meno di 32 argomenti" + +#: parser/parse_agg.c:347 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "le funzioni di aggregazione non sono ammesse nelle condizioni di JOIN" -#: parser/parse_agg.c:260 +#: parser/parse_agg.c:349 +msgid "grouping operations are not allowed in JOIN conditions" +msgstr "le operazioni di raggruppamento non sono ammesse nelle condizioni di JOIN" + +#: parser/parse_agg.c:361 msgid "aggregate functions are not allowed in FROM clause of their own query level" msgstr "le funzioni di aggregazione non sono ammesse nella clausola FROM del loro stesso livello della query" -#: parser/parse_agg.c:263 +#: parser/parse_agg.c:363 +msgid "grouping operations are not allowed in FROM clause of their own query level" +msgstr "le operazioni di raggruppamento non sono ammesse nella clausola FROM del proprio livello di query" + +#: parser/parse_agg.c:368 msgid "aggregate functions are not allowed in functions in FROM" msgstr "le funzioni di aggregazione non sono ammesse nelle funzioni in FROM" -#: parser/parse_agg.c:281 +#: parser/parse_agg.c:370 +msgid "grouping operations are not allowed in functions in FROM" +msgstr "le operazioni di raggruppamento non sono ammesse nelle funzioni in FROM" + +#: parser/parse_agg.c:378 +msgid "aggregate functions are not allowed in policy expressions" +msgstr "le funzioni di aggregazione non sono ammesse nell'espressione di una politica" + +#: parser/parse_agg.c:380 +msgid "grouping operations are not allowed in policy expressions" +msgstr "le funzioni di raggruppamento non sono ammesse nell'espressione di una politica" + +#: parser/parse_agg.c:397 msgid "aggregate functions are not allowed in window RANGE" msgstr "le funzioni di aggregazione non sono ammesse nel RANGE della finestra" -#: parser/parse_agg.c:284 +#: parser/parse_agg.c:399 +msgid "grouping operations are not allowed in window RANGE" +msgstr "le operazioni di taggruppamento non sono ammesse nel RANGE della finestra" + +#: parser/parse_agg.c:404 msgid "aggregate functions are not allowed in window ROWS" msgstr "le funzioni di aggregazione non sono ammesse nel ROWS della finestra" -#: parser/parse_agg.c:315 +#: parser/parse_agg.c:406 +msgid "grouping operations are not allowed in window ROWS" +msgstr "le operazioni di raggruppamento non sono ammesse nel ROWS della finestra" + +#: parser/parse_agg.c:439 msgid "aggregate functions are not allowed in check constraints" msgstr "le funzioni di aggregazione non sono ammesse nei vincoli di controllo" -#: parser/parse_agg.c:319 +#: parser/parse_agg.c:441 +msgid "grouping operations are not allowed in check constraints" +msgstr "le operazioni di raggruppamento non sono ammesse nei vincoli di controllo" + +#: parser/parse_agg.c:448 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "le funzioni di aggregazione non sono ammesse nelle espressioni DEFAULT" -#: parser/parse_agg.c:322 +#: parser/parse_agg.c:450 +msgid "grouping operations are not allowed in DEFAULT expressions" +msgstr "le operazioni di raggruppamento non sono ammesse nelle espressioni DEFAULT" + +#: parser/parse_agg.c:455 msgid "aggregate functions are not allowed in index expressions" msgstr "le funzioni di aggregazione non sono ammesse nelle espressioni degli indici" -#: parser/parse_agg.c:325 +#: parser/parse_agg.c:457 +msgid "grouping operations are not allowed in index expressions" +msgstr "le operazioni di raggruppamento non sono ammesse nelle espressioni degli indici" + +#: parser/parse_agg.c:462 msgid "aggregate functions are not allowed in index predicates" msgstr "le funzioni di aggregazione non sono ammesse nei predicati degli indici" -#: parser/parse_agg.c:328 +#: parser/parse_agg.c:464 +msgid "grouping operations are not allowed in index predicates" +msgstr "le operazioni di raggruppamento non sono ammesse nei predicati degli indici" + +#: parser/parse_agg.c:469 msgid "aggregate functions are not allowed in transform expressions" msgstr "le funzioni di aggregazione non sono ammesse nelle espressioni di trasformazione" -#: parser/parse_agg.c:331 +#: parser/parse_agg.c:471 +msgid "grouping operations are not allowed in transform expressions" +msgstr "le operazioni di raggruppamento non sono ammesse nelle espressioni di trasformazione" + +#: parser/parse_agg.c:476 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "le funzioni di aggregazione non sono ammesse nei parametri di EXECUTE" -#: parser/parse_agg.c:334 +#: parser/parse_agg.c:478 +msgid "grouping operations are not allowed in EXECUTE parameters" +msgstr "le operazioni di raggruppamento non sono ammesse nei parametri di EXECUTE" + +#: parser/parse_agg.c:483 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "le funzioni di aggregazione non sono ammesse nelle condizioni WHEN dei trigger" +#: parser/parse_agg.c:485 +msgid "grouping operations are not allowed in trigger WHEN conditions" +msgstr "le operazioni di raggruppamento non sono ammesse nelle condizioni WHEN dei trigger" + #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:354 parser/parse_clause.c:1407 +#: parser/parse_agg.c:508 parser/parse_clause.c:1548 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "le funzioni di aggregazione non sono ammesse in %s" -#: parser/parse_agg.c:457 +#. translator: %s is name of a SQL construct, eg GROUP BY +#: parser/parse_agg.c:511 +#, c-format +msgid "grouping operations are not allowed in %s" +msgstr "le operazioni di raggruppamento non sono ammesse in %s" + +#: parser/parse_agg.c:619 #, c-format msgid "outer-level aggregate cannot contain a lower-level variable in its direct arguments" msgstr "gli aggregati di livello esterno non possono contenere una variabile di livello inferiore tra gli argomenti diretti" -#: parser/parse_agg.c:514 +#: parser/parse_agg.c:690 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "le chiamate a funzioni di aggregazione non possono contenere chiamate a funzioni finestra" -#: parser/parse_agg.c:591 +#: parser/parse_agg.c:768 msgid "window functions are not allowed in JOIN conditions" msgstr "le funzioni finestra non sono ammesse nelle condizioni JOIN" -#: parser/parse_agg.c:598 +#: parser/parse_agg.c:775 msgid "window functions are not allowed in functions in FROM" msgstr "le funzioni finestra non sono ammesse nelle funzioni in FROM" -#: parser/parse_agg.c:613 +#: parser/parse_agg.c:781 +msgid "window functions are not allowed in policy expressions" +msgstr "le funzioni finestra non sono ammesse nell'espressione di una politica" + +#: parser/parse_agg.c:793 msgid "window functions are not allowed in window definitions" msgstr "le funzioni finestra non sono ammesse nelle definizioni di finestre" -#: parser/parse_agg.c:644 +#: parser/parse_agg.c:824 msgid "window functions are not allowed in check constraints" msgstr "le funzioni finestra non sono ammesse nei vincoli di controllo" -#: parser/parse_agg.c:648 +#: parser/parse_agg.c:828 msgid "window functions are not allowed in DEFAULT expressions" msgstr "le funzioni finestra non sono ammesse nelle espressioni DEFAULT" -#: parser/parse_agg.c:651 +#: parser/parse_agg.c:831 msgid "window functions are not allowed in index expressions" msgstr "le funzioni finestra non sono ammesse nelle espressioni degli indici" -#: parser/parse_agg.c:654 +#: parser/parse_agg.c:834 msgid "window functions are not allowed in index predicates" msgstr "le funzioni finestra non sono ammesse nei predicati degli indici" -#: parser/parse_agg.c:657 +#: parser/parse_agg.c:837 msgid "window functions are not allowed in transform expressions" msgstr "le funzioni finestra non sono ammesse nelle espressioni di trasformazione" -#: parser/parse_agg.c:660 +#: parser/parse_agg.c:840 msgid "window functions are not allowed in EXECUTE parameters" msgstr "le funzioni finestra non sono ammesse nei parametri di EXECUTE" -#: parser/parse_agg.c:663 +#: parser/parse_agg.c:843 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "le funzioni finestra non sono ammesse nelle condizioni WHEN dei trigger" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:683 parser/parse_clause.c:1416 +#: parser/parse_agg.c:863 parser/parse_clause.c:1557 #, c-format msgid "window functions are not allowed in %s" msgstr "le funzioni finestra non sono ammesse in %s" -#: parser/parse_agg.c:717 parser/parse_clause.c:1827 +#: parser/parse_agg.c:897 parser/parse_clause.c:2394 #, c-format msgid "window \"%s\" does not exist" msgstr "la finestra \"%s\" non esiste" -#: parser/parse_agg.c:879 +#: parser/parse_agg.c:982 +#, c-format +msgid "too many grouping sets present (max 4096)" +msgstr "troppi insiemi di raggruppamento presenti (il massimo è 4096)" + +#: parser/parse_agg.c:1131 #, c-format msgid "aggregate functions are not allowed in a recursive query's recursive term" msgstr "le funzioni di aggregazione non sono ammesse nel termine ricorsivo di una query ricorsiva" -#: parser/parse_agg.c:1057 +#: parser/parse_agg.c:1324 #, c-format msgid "column \"%s.%s\" must appear in the GROUP BY clause or be used in an aggregate function" msgstr "la colonna \"%s.%s\" deve comparire nella clausola GROUP BY o essere usata in una funzione di aggregazione" -#: parser/parse_agg.c:1060 +#: parser/parse_agg.c:1327 #, c-format msgid "Direct arguments of an ordered-set aggregate must use only grouped columns." msgstr "Gli argomenti diretti di un aggregato su insieme ordinato devono usare solo colonne raggruppate." -#: parser/parse_agg.c:1065 +#: parser/parse_agg.c:1332 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "la sottoquery usa la colonna non raggruppata \"%s.%s\" dalla query esterna" -#: parser/parse_clause.c:636 +#: parser/parse_agg.c:1496 +#, c-format +msgid "arguments to GROUPING must be grouping expressions of the associated query level" +msgstr "gli argomenti di GROUPING devono essere espressioni di raggruppamento del livello della query associato" + +#: parser/parse_clause.c:647 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "non è consentita più di una lista di definizione di colonne multiple per la stessa funzione" -#: parser/parse_clause.c:669 +#: parser/parse_clause.c:680 #, c-format msgid "ROWS FROM() with multiple functions cannot have a column definition list" msgstr "ROWS FROM() con più di una funzione non può avere una lista di definizioni di colonne" -#: parser/parse_clause.c:670 +#: parser/parse_clause.c:681 #, c-format msgid "Put a separate column definition list for each function inside ROWS FROM()." msgstr "Specifica una lista di definizioni colonna separata per ogni funzione dentro ROWS FROM()" -#: parser/parse_clause.c:676 +#: parser/parse_clause.c:687 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "UNNEST() con più di un argomento non può avere una lista di definizioni di colonne" -#: parser/parse_clause.c:677 +#: parser/parse_clause.c:688 #, c-format msgid "Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one." msgstr "Usa una invocazione di UNNEST() separata in ROWS FROM() e collega una lista di definizioni di colonne ad ognuna di esse." -#: parser/parse_clause.c:684 +#: parser/parse_clause.c:695 #, c-format msgid "WITH ORDINALITY cannot be used with a column definition list" msgstr "WITH ORDINALITY non può essere usata con una lista di definizioni di colonne" -#: parser/parse_clause.c:685 +#: parser/parse_clause.c:696 #, c-format msgid "Put the column definition list inside ROWS FROM()." msgstr "Specifica la lista di definizioni di colonne dentro ROWS FROM()." -#: parser/parse_clause.c:967 +#: parser/parse_clause.c:751 +#, c-format +msgid "tablesample method %s does not exist" +msgstr "il metodo di campionamento tabella %s non esiste" + +#: parser/parse_clause.c:759 +#, c-format +msgid "function %s must return type \"tsm_handler\"" +msgstr "la funzione %s deve restituire il tipo \"tsm_handler\"" + +#: parser/parse_clause.c:773 +#, c-format +msgid "tablesample method %s requires %d argument, not %d" +msgid_plural "tablesample method %s requires %d arguments, not %d" +msgstr[0] "il metodo di campionamento %s richiede %d argumenti, not %d" +msgstr[1] "il metodo di campionamento %s richiede %d argumenti, not %d" + +#: parser/parse_clause.c:807 +#, c-format +msgid "tablesample method %s does not support REPEATABLE" +msgstr "il metodo di campionamento %s non supporta REPEATABLE" + +#: parser/parse_clause.c:938 +#, c-format +msgid "TABLESAMPLE clause can only be applied to tables and materialized views" +msgstr "la clausola TABLESAMPLE può essere applicata solo a tabelle e viste materializzate" + +#: parser/parse_clause.c:1108 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "il nome della colonna \"%s\" compare più di una volta nella clausola USING" -#: parser/parse_clause.c:982 +#: parser/parse_clause.c:1123 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "il nome comune della colonna \"%s\" compare più di una volta nella tabella di sinistra" -#: parser/parse_clause.c:991 +#: parser/parse_clause.c:1132 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "la colonna \"%s\" specificata nella clausola USING non esiste nella tabella di sinistra" -#: parser/parse_clause.c:1005 +#: parser/parse_clause.c:1146 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "il nome comune della colonna \"%s\" compare più di una volta nella tabella di destra" -#: parser/parse_clause.c:1014 +#: parser/parse_clause.c:1155 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "la colonna \"%s\" specificata nella clausola USING non esiste nella tabella di destra" -#: parser/parse_clause.c:1068 +#: parser/parse_clause.c:1209 #, c-format msgid "column alias list for \"%s\" has too many entries" msgstr "la lista di alias delle colonne per \"%s\" ha troppi elementi" #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1377 +#: parser/parse_clause.c:1518 #, c-format msgid "argument of %s must not contain variables" msgstr "l'argomento di %s non può contenere variabili" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1542 +#: parser/parse_clause.c:1683 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "%s \"%s\" è ambiguo" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1571 +#: parser/parse_clause.c:1712 #, c-format msgid "non-integer constant in %s" msgstr "costante non intera in %s" # translator: %s is name of a SQL construct, eg ORDER BY #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1593 +#: parser/parse_clause.c:1734 #, c-format msgid "%s position %d is not in select list" msgstr "%s in posizione %d non è nella lista SELECT" -#: parser/parse_clause.c:1815 +#: parser/parse_clause.c:2176 +#, c-format +msgid "CUBE is limited to 12 elements" +msgstr "CUBE è limitato a 12 elementi" + +#: parser/parse_clause.c:2382 #, c-format msgid "window \"%s\" is already defined" msgstr "la finestra \"%s\" è già definita" -#: parser/parse_clause.c:1876 +#: parser/parse_clause.c:2444 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "non è possibile scavalcare la clausola PARTITION BY della finestra \"%s\"" -#: parser/parse_clause.c:1888 +#: parser/parse_clause.c:2456 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "non è possibile scavalcare la clausola ORDER BY della finestra \"%s\"" -#: parser/parse_clause.c:1918 parser/parse_clause.c:1924 +#: parser/parse_clause.c:2486 parser/parse_clause.c:2492 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "non è possibile copiare la finestra \"%s\" perché ha una clausola frame" -#: parser/parse_clause.c:1926 +#: parser/parse_clause.c:2494 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Omettere le parentesi in questa clausola OVER." -#: parser/parse_clause.c:1992 +#: parser/parse_clause.c:2560 #, c-format msgid "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list" msgstr "in un aggregato con DISTINCT, le espressioni ORDER BY devono figurare nella lista di argomenti" -#: parser/parse_clause.c:1993 +#: parser/parse_clause.c:2561 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "per SELECT DISTINCT, le espressioni ORDER BY devono figurare nella lista di argomenti" -#: parser/parse_clause.c:2026 +#: parser/parse_clause.c:2594 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "un aggregato con DISTINCT deve avere almeno un argomento" -#: parser/parse_clause.c:2027 +#: parser/parse_clause.c:2595 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "SELECT DISTINCT deve avere almeno una colonna" -#: parser/parse_clause.c:2093 parser/parse_clause.c:2125 +#: parser/parse_clause.c:2661 parser/parse_clause.c:2693 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "le espressioni SELECT DISTINCT ON devono coincidere con l'espressione ORDER BY iniziale" -#: parser/parse_clause.c:2253 +#: parser/parse_clause.c:2772 +#, c-format +msgid "ASC/DESC is not allowed in ON CONFLICT clause" +msgstr "ASC/DESC non è permesso nelle clausole ON CONFLICT" + +#: parser/parse_clause.c:2778 +#, c-format +msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" +msgstr "NULLS FIRST/LAST non è permesso nelle clausole ON CONFLICT" + +#: parser/parse_clause.c:2858 +#, c-format +msgid "ON CONFLICT DO UPDATE requires inference specification or constraint name" +msgstr "ON CONFLICT DO UPDATE richiede una specifica di inferenza o il nome di un vincolo" + +#: parser/parse_clause.c:2859 +#, c-format +msgid "For example, ON CONFLICT ()." +msgstr "Per esempio, ON CONFLICT ()." + +#: parser/parse_clause.c:2870 +#, c-format +msgid "ON CONFLICT not supported with system catalog tables" +msgstr "ON CONFLICT non supportato sulle tabelle del catalogo di sistema" + +#: parser/parse_clause.c:2878 +#, c-format +msgid "ON CONFLICT not supported on table \"%s\" used as a catalog table" +msgstr "ON CONFLICT non supportato sulla tabella \"%s\" usata da una tabella di catalogo" + +#: parser/parse_clause.c:3010 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "l'operatore %s non è un operatore di ordinamento valido" -#: parser/parse_clause.c:2255 +#: parser/parse_clause.c:3012 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." msgstr "Gli operatori di ordinamento devono essere i membri \"<\" oppure \">\" di una famiglia di operatori btree." #: parser/parse_coerce.c:933 parser/parse_coerce.c:963 #: parser/parse_coerce.c:981 parser/parse_coerce.c:996 -#: parser/parse_expr.c:1773 parser/parse_expr.c:2247 parser/parse_target.c:854 +#: parser/parse_expr.c:2015 parser/parse_expr.c:2528 parser/parse_target.c:874 #, c-format msgid "cannot cast type %s to %s" msgstr "non è possibile convertire il tipo %s in %s" @@ -11197,18 +12264,18 @@ msgid "could not find range type for data type %s" msgstr "tipo dell'intervallo non trovato per il tipo di dato %s" #: parser/parse_collate.c:228 parser/parse_collate.c:475 -#: parser/parse_collate.c:984 +#: parser/parse_collate.c:986 #, c-format msgid "collation mismatch between implicit collations \"%s\" and \"%s\"" msgstr "mancata corrispondenza degli ordinamenti impliciti \"%s\" e \"%s\"" #: parser/parse_collate.c:231 parser/parse_collate.c:478 -#: parser/parse_collate.c:987 +#: parser/parse_collate.c:989 #, c-format msgid "You can choose the collation by applying the COLLATE clause to one or both expressions." msgstr "Puoi scegliere l'ordinamento applicando la clausola COLLATE ad una o ad entrambe le espressioni." -#: parser/parse_collate.c:832 +#: parser/parse_collate.c:834 #, c-format msgid "collation mismatch between explicit collations \"%s\" and \"%s\"" msgstr "mancata corrispondenza degli ordinamenti espliciti \"%s\" e \"%s\"" @@ -11313,38 +12380,39 @@ msgstr "FOR UPDATE/SHARE non è implementato in una query ricorsiva" msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "il riferimento ricorsivo alla query \"%s\" non può apparire più di una volta" -#: parser/parse_expr.c:389 parser/parse_relation.c:2875 +#: parser/parse_expr.c:387 parser/parse_relation.c:3077 +#: parser/parse_relation.c:3097 #, c-format msgid "column %s.%s does not exist" msgstr "la colonna %s.%s non esiste" -#: parser/parse_expr.c:401 +#: parser/parse_expr.c:399 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "la colonna \"%s\" non è stata trovata nel tipo di dato %s" -#: parser/parse_expr.c:407 +#: parser/parse_expr.c:405 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "la colonna \"%s\" non identificata nel tipo di dato record" -#: parser/parse_expr.c:413 +#: parser/parse_expr.c:411 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "la notazione della colonna .%s sembra essere di tipo %s, che non è un tipo composito" -#: parser/parse_expr.c:443 parser/parse_target.c:640 +#: parser/parse_expr.c:441 parser/parse_target.c:660 #, c-format msgid "row expansion via \"*\" is not supported here" msgstr "l'espansione della riga tramite \"*\" non è supportata qui" -#: parser/parse_expr.c:766 parser/parse_relation.c:561 -#: parser/parse_relation.c:652 parser/parse_target.c:1089 +#: parser/parse_expr.c:767 parser/parse_relation.c:666 +#: parser/parse_relation.c:763 parser/parse_target.c:1109 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "il riferimento alla colonna \"%s\" è ambiguo" -#: parser/parse_expr.c:822 parser/parse_param.c:110 parser/parse_param.c:142 +#: parser/parse_expr.c:823 parser/parse_param.c:110 parser/parse_param.c:142 #: parser/parse_param.c:199 parser/parse_param.c:298 #, c-format msgid "there is no parameter $%d" @@ -11355,280 +12423,285 @@ msgstr "parametro $%d non presente" msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF richiede che l'operatore = restituisca un valore booleano" -#: parser/parse_expr.c:1469 +#: parser/parse_expr.c:1468 gram.y:9779 +#, c-format +msgid "number of columns does not match number of values" +msgstr "il numero di colonne non corrisponde al numero di valori" + +#: parser/parse_expr.c:1697 msgid "cannot use subquery in check constraint" msgstr "non si può usare una sottoquery nel vincolo di controllo" -#: parser/parse_expr.c:1473 +#: parser/parse_expr.c:1701 msgid "cannot use subquery in DEFAULT expression" msgstr "non si può usare una sottoquery in un'espressione DEFAULT" -#: parser/parse_expr.c:1476 +#: parser/parse_expr.c:1704 msgid "cannot use subquery in index expression" msgstr "non si possono usare sottoquery nell'espressione dell'indice" -#: parser/parse_expr.c:1479 +#: parser/parse_expr.c:1707 msgid "cannot use subquery in index predicate" msgstr "non è possibile usare sottoquery nel predicato dell'indice" -#: parser/parse_expr.c:1482 +#: parser/parse_expr.c:1710 msgid "cannot use subquery in transform expression" msgstr "non è possibile usare sottoquery in un'espressione di trasformazione" -#: parser/parse_expr.c:1485 +#: parser/parse_expr.c:1713 msgid "cannot use subquery in EXECUTE parameter" msgstr "non si possono usare sottoquery nel parametro EXECUTE" -#: parser/parse_expr.c:1488 +#: parser/parse_expr.c:1716 msgid "cannot use subquery in trigger WHEN condition" msgstr "non è possibile usare sottoquery nella condizione WHEN del trigger" -#: parser/parse_expr.c:1545 -#, c-format -msgid "subquery must return a column" -msgstr "la sottoquery deve restituire una colonna" - -#: parser/parse_expr.c:1552 +#: parser/parse_expr.c:1770 #, c-format msgid "subquery must return only one column" msgstr "la sottoquery deve restituire solo una colonna" -#: parser/parse_expr.c:1612 +#: parser/parse_expr.c:1854 #, c-format msgid "subquery has too many columns" msgstr "la sottoquery ha troppe colonne" -#: parser/parse_expr.c:1617 +#: parser/parse_expr.c:1859 #, c-format msgid "subquery has too few columns" msgstr "la sottoquery ha troppe poche colonne" -#: parser/parse_expr.c:1713 +#: parser/parse_expr.c:1955 #, c-format msgid "cannot determine type of empty array" msgstr "non è possibile determinare il tipo di un array vuoto" -#: parser/parse_expr.c:1714 +#: parser/parse_expr.c:1956 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "Effettua una conversione esplicita al tipo desiderato, ad esempio ARRAY[]::integer[]." -#: parser/parse_expr.c:1728 +#: parser/parse_expr.c:1970 #, c-format msgid "could not find element type for data type %s" msgstr "tipo dell'elemento non trovato per il tipo di dato %s" -#: parser/parse_expr.c:1954 +#: parser/parse_expr.c:2193 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "il valore dell'attributo XML senza nome dev'essere un riferimento ad una colonna" -#: parser/parse_expr.c:1955 +#: parser/parse_expr.c:2194 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "il valore dell'elemento XML senza nome dev'essere un riferimento ad una colonna" -#: parser/parse_expr.c:1970 +#: parser/parse_expr.c:2209 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "l'attributo XML di nome \"%s\" compare più di una volta" -#: parser/parse_expr.c:2077 +#: parser/parse_expr.c:2316 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "non è possibile convertire il risultato di XMLSERIALIZE a %s" -#: parser/parse_expr.c:2320 parser/parse_expr.c:2520 +#: parser/parse_expr.c:2601 parser/parse_expr.c:2797 #, c-format msgid "unequal number of entries in row expressions" msgstr "numero di elementi differente nelle espressioni di riga" -#: parser/parse_expr.c:2330 +#: parser/parse_expr.c:2611 #, c-format msgid "cannot compare rows of zero length" msgstr "non possono comparire righe di lunghezza zero" -#: parser/parse_expr.c:2355 +#: parser/parse_expr.c:2636 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "l'operatore di comparazione tra righe deve restituire il tipo booleano, non il tipo %s" -#: parser/parse_expr.c:2362 +#: parser/parse_expr.c:2643 #, c-format msgid "row comparison operator must not return a set" msgstr "l'operatore di comparazione tra righe non può restituire un insieme" -#: parser/parse_expr.c:2421 parser/parse_expr.c:2466 +#: parser/parse_expr.c:2702 parser/parse_expr.c:2743 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "non è stato possibile determinare un'interpretazione dell'operatore di comparazione tra righe %s" -#: parser/parse_expr.c:2423 +#: parser/parse_expr.c:2704 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "Gli operatori di comparazione tra righe devono essere associati a famiglie di operatori btree." -#: parser/parse_expr.c:2468 +#: parser/parse_expr.c:2745 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "C'è più di un candidato egualmente plausibile." -#: parser/parse_expr.c:2560 +#: parser/parse_expr.c:2837 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM richiede che l'operatore = restituisca un valore booleano" -#: parser/parse_func.c:173 +#: parser/parse_expr.c:3127 parser/parse_expr.c:3145 +#, c-format +msgid "operator precedence change: %s is now lower precedence than %s" +msgstr "cambio di precedenza di operatori: %s ora ha precedenza inferiore di %s" + +#: parser/parse_func.c:174 #, c-format msgid "argument name \"%s\" used more than once" msgstr "il nome dell'argomento \"%s\" è usato più di una volta" -#: parser/parse_func.c:184 +#: parser/parse_func.c:185 #, c-format msgid "positional argument cannot follow named argument" msgstr "gli argomenti posizionali non possono seguire gli argomenti con nome" -#: parser/parse_func.c:263 +#: parser/parse_func.c:270 #, c-format msgid "%s(*) specified, but %s is not an aggregate function" msgstr "%s(*) specificato, ma %s non è una funzione di aggregazione" -#: parser/parse_func.c:270 +#: parser/parse_func.c:277 #, c-format msgid "DISTINCT specified, but %s is not an aggregate function" msgstr "DISTINCT specificato, ma %s non è una funzione di aggregazione" -#: parser/parse_func.c:276 +#: parser/parse_func.c:283 #, c-format msgid "WITHIN GROUP specified, but %s is not an aggregate function" msgstr "WITHIN GROUP specificato, ma %s non è una funzione di aggregazione" -#: parser/parse_func.c:282 +#: parser/parse_func.c:289 #, c-format msgid "ORDER BY specified, but %s is not an aggregate function" msgstr "ORDER BY specificato, ma %s non è una funzione di aggregazione" -#: parser/parse_func.c:288 +#: parser/parse_func.c:295 #, c-format msgid "FILTER specified, but %s is not an aggregate function" msgstr "FILTER specificato, ma %s non è una funzione di aggregazione" -#: parser/parse_func.c:294 +#: parser/parse_func.c:301 #, c-format msgid "OVER specified, but %s is not a window function nor an aggregate function" msgstr "OVER specificato, ma %s non è una funzione finestra né una funzione di aggregazione" -#: parser/parse_func.c:324 +#: parser/parse_func.c:331 #, c-format msgid "WITHIN GROUP is required for ordered-set aggregate %s" msgstr "WITHIN GROUP è richiesto per l'aggregato su insieme ordinato %s" -#: parser/parse_func.c:330 +#: parser/parse_func.c:337 #, c-format msgid "OVER is not supported for ordered-set aggregate %s" msgstr "OVER non è supportato per l'aggregato su insieme ordinato %s" -#: parser/parse_func.c:361 parser/parse_func.c:390 +#: parser/parse_func.c:368 parser/parse_func.c:397 #, c-format msgid "There is an ordered-set aggregate %s, but it requires %d direct arguments, not %d." msgstr "Esiste un aggregato su insieme ordinato %s, ma richiede %d argomenti diretti, non %d." -#: parser/parse_func.c:415 +#: parser/parse_func.c:422 #, c-format msgid "To use the hypothetical-set aggregate %s, the number of hypothetical direct arguments (here %d) must match the number of ordering columns (here %d)." msgstr "Per usare l'aggregato su insieme ipotetico %s il numero di argomenti ipotetici diretti (qui %d) deve combaciare con quello di colonne di ordinamento (qui %d)." -#: parser/parse_func.c:429 +#: parser/parse_func.c:436 #, c-format msgid "There is an ordered-set aggregate %s, but it requires at least %d direct arguments." msgstr "Esiste un aggregato su insieme ordinato %s, ma richiede almeno %d argomenti diretti." -#: parser/parse_func.c:448 +#: parser/parse_func.c:455 #, c-format msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" msgstr "%s non è un aggregato su insieme ordinato, per cui non può avere WITHIN GROUP" -#: parser/parse_func.c:461 +#: parser/parse_func.c:468 #, c-format msgid "window function %s requires an OVER clause" msgstr "la funzione finestra %s richiede una clausola OVER" -#: parser/parse_func.c:468 +#: parser/parse_func.c:475 #, c-format msgid "window function %s cannot have WITHIN GROUP" msgstr "la funzione di aggregazione %s non può avere WITHIN GROUP" -#: parser/parse_func.c:489 +#: parser/parse_func.c:496 #, c-format msgid "function %s is not unique" msgstr "la funzione %s non è unica" -#: parser/parse_func.c:492 +#: parser/parse_func.c:499 #, c-format msgid "Could not choose a best candidate function. You might need to add explicit type casts." msgstr "Non è stato possibile scegliere la funzione migliore. Potrebbe essere necessario convertire i tipi esplicitamente." -#: parser/parse_func.c:503 +#: parser/parse_func.c:510 #, c-format msgid "No aggregate function matches the given name and argument types. Perhaps you misplaced ORDER BY; ORDER BY must appear after all regular arguments of the aggregate." msgstr "Nessuna funzione di aggregazione trovata con nome e tipi di argomenti forniti. Forse hai posizionato ORDER BY male: ORDER BY deve apparire dopo tutti gli argomenti regolari della funzione di aggregazione." -#: parser/parse_func.c:514 +#: parser/parse_func.c:521 #, c-format msgid "No function matches the given name and argument types. You might need to add explicit type casts." msgstr "Nessuna funzione trovata con nome e tipi di argomenti forniti. Potrebbe essere necessario convertire i tipi esplicitamente." -#: parser/parse_func.c:616 +#: parser/parse_func.c:623 #, c-format msgid "VARIADIC argument must be an array" msgstr "l'argomento VARIADIC deve essere un array" -#: parser/parse_func.c:661 parser/parse_func.c:725 +#: parser/parse_func.c:668 parser/parse_func.c:732 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "%s(*) dev'essere usato per richiamare una funzione di aggregazione senza parametri" -#: parser/parse_func.c:668 +#: parser/parse_func.c:675 #, c-format msgid "aggregates cannot return sets" msgstr "le funzioni di aggregazione non possono restituire insiemi" -#: parser/parse_func.c:683 +#: parser/parse_func.c:690 #, c-format msgid "aggregates cannot use named arguments" msgstr "le funzioni di aggregazione non possono usare argomenti con nome" -#: parser/parse_func.c:715 +#: parser/parse_func.c:722 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "DISTINCT non è implementato per funzioni finestra" -#: parser/parse_func.c:735 +#: parser/parse_func.c:742 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "ORDER BY delle funzioni di aggregazione non è implementato per funzioni finestra" -#: parser/parse_func.c:744 +#: parser/parse_func.c:751 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "FILTER non è implementato per funzioni finestra non aggregate" -#: parser/parse_func.c:750 +#: parser/parse_func.c:757 #, c-format msgid "window functions cannot return sets" msgstr "le funzioni finestra non possono restituire insiemi" -#: parser/parse_func.c:1994 +#: parser/parse_func.c:2007 #, c-format msgid "aggregate %s(*) does not exist" msgstr "la funzione di aggregazione %s(*) non esiste" -#: parser/parse_func.c:1999 +#: parser/parse_func.c:2012 #, c-format msgid "aggregate %s does not exist" msgstr "la funzione di aggregazione %s non esiste" -#: parser/parse_func.c:2018 +#: parser/parse_func.c:2031 #, c-format msgid "function %s is not an aggregate" msgstr "la funzione %s non è una funzione di aggregazione" @@ -11653,60 +12726,61 @@ msgstr "l'indice di un array dev'essere di tipo intero" msgid "array assignment requires type %s but expression is of type %s" msgstr "l'assegnamento all'array richiede il tipo %s ma l'espressione è di tipo %s" -#: parser/parse_oper.c:124 parser/parse_oper.c:718 utils/adt/regproc.c:547 -#: utils/adt/regproc.c:567 utils/adt/regproc.c:751 +#: parser/parse_oper.c:125 parser/parse_oper.c:722 utils/adt/regproc.c:583 +#: utils/adt/regproc.c:603 utils/adt/regproc.c:787 #, c-format msgid "operator does not exist: %s" msgstr "l'operatore non esiste: %s" -#: parser/parse_oper.c:221 +#: parser/parse_oper.c:222 #, c-format msgid "Use an explicit ordering operator or modify the query." msgstr "Usa un operatore di ordinamento esplicito, oppure modifica la query." -#: parser/parse_oper.c:225 utils/adt/arrayfuncs.c:3222 -#: utils/adt/arrayfuncs.c:3741 utils/adt/arrayfuncs.c:5294 +#: parser/parse_oper.c:226 utils/adt/array_userfuncs.c:782 +#: utils/adt/array_userfuncs.c:920 utils/adt/arrayfuncs.c:3610 +#: utils/adt/arrayfuncs.c:4048 utils/adt/arrayfuncs.c:6026 #: utils/adt/rowtypes.c:1159 #, c-format msgid "could not identify an equality operator for type %s" msgstr "operatore di uguaglianza per il tipo %s non trovato" -#: parser/parse_oper.c:476 +#: parser/parse_oper.c:478 #, c-format msgid "operator requires run-time type coercion: %s" msgstr "l'operatore richiede una coercizione di tipo a run-time: %s" -#: parser/parse_oper.c:710 +#: parser/parse_oper.c:714 #, c-format msgid "operator is not unique: %s" msgstr "l'operatore non è unico: %s" -#: parser/parse_oper.c:712 +#: parser/parse_oper.c:716 #, c-format msgid "Could not choose a best candidate operator. You might need to add explicit type casts." msgstr "Non è stato possibile scegliere l'operatore migliore. Potrebbe essere necessario convertire i tipi esplicitamente." -#: parser/parse_oper.c:720 +#: parser/parse_oper.c:724 #, c-format msgid "No operator matches the given name and argument type(s). You might need to add explicit type casts." msgstr "Nessun operatore trovato con nome e tipi di argomenti forniti. Potrebbe essere necessario convertire i tipi esplicitamente." -#: parser/parse_oper.c:779 parser/parse_oper.c:893 +#: parser/parse_oper.c:783 parser/parse_oper.c:897 #, c-format msgid "operator is only a shell: %s" msgstr "l'operatore non è completamente definito: %s" -#: parser/parse_oper.c:881 +#: parser/parse_oper.c:885 #, c-format msgid "op ANY/ALL (array) requires array on right side" msgstr "op ANY/ALL (array) richiede un array sul lato destro" -#: parser/parse_oper.c:923 +#: parser/parse_oper.c:927 #, c-format msgid "op ANY/ALL (array) requires operator to yield boolean" msgstr "op ANY/ALL (array) richiede che l'operatore restituisca un valore booleano" -#: parser/parse_oper.c:928 +#: parser/parse_oper.c:932 #, c-format msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "op ANY/ALL (array) richiede che l'operatore non restituisca un insieme" @@ -11716,148 +12790,158 @@ msgstr "op ANY/ALL (array) richiede che l'operatore non restituisca un insieme" msgid "inconsistent types deduced for parameter $%d" msgstr "tipi di dati dedotti per il parametro $%d non consistenti" -#: parser/parse_relation.c:172 +#: parser/parse_relation.c:174 #, c-format msgid "table reference \"%s\" is ambiguous" msgstr "il riferimento alla tabella \"%s\" è ambiguo" -#: parser/parse_relation.c:216 +#: parser/parse_relation.c:218 #, c-format msgid "table reference %u is ambiguous" msgstr "il riferimento alla tabella %u è ambiguo" -#: parser/parse_relation.c:395 +#: parser/parse_relation.c:397 #, c-format msgid "table name \"%s\" specified more than once" msgstr "la tabella di nome \"%s\" è stata specificata più di una volta" -#: parser/parse_relation.c:422 parser/parse_relation.c:2839 +#: parser/parse_relation.c:424 parser/parse_relation.c:3017 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "riferimento non valido all'elemento della clausola FROM per la tabella \"%s\"" -#: parser/parse_relation.c:425 parser/parse_relation.c:2844 +#: parser/parse_relation.c:427 parser/parse_relation.c:3022 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "C'è un elemento per la tabella \"%s\", ma non può essere referenziato da questa parte della query." -#: parser/parse_relation.c:427 +#: parser/parse_relation.c:429 #, c-format msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." msgstr "Il tipo del JOIN deve essere INNER oppure LEFT per un riferimento LATERAL." -#: parser/parse_relation.c:591 +#: parser/parse_relation.c:701 #, c-format msgid "system column \"%s\" reference in check constraint is invalid" msgstr "la colonna di sistema \"%s\" referenziata nel vincolo di controllo non è valida" -#: parser/parse_relation.c:892 parser/parse_relation.c:1169 -#: parser/parse_relation.c:1663 +#: parser/parse_relation.c:1059 parser/parse_relation.c:1339 +#: parser/parse_relation.c:1841 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "la tabella \"%s\" ha %d colonne disponibili ma %d colonne specificate" -#: parser/parse_relation.c:979 +#: parser/parse_relation.c:1146 #, c-format msgid "There is a WITH item named \"%s\", but it cannot be referenced from this part of the query." msgstr "C'è un elemento di WITH di nome \"%s\", ma non può essere referenziato da questa parte della query." -#: parser/parse_relation.c:981 +#: parser/parse_relation.c:1148 #, c-format msgid "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." msgstr "Usa WITH RECURSIVE, oppure riordina gli elementi di WITH per rimuovere i riferimenti in avanti." -#: parser/parse_relation.c:1287 +#: parser/parse_relation.c:1459 #, c-format msgid "a column definition list is only allowed for functions returning \"record\"" msgstr "la lista di definizione di colonne è consentita solo per funzioni che restituiscono \"record\"" -#: parser/parse_relation.c:1296 +#: parser/parse_relation.c:1468 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "la lista di definizione di colonne è necessaria per funzioni che restituiscono \"record\"" -#: parser/parse_relation.c:1375 +#: parser/parse_relation.c:1547 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "la funzione \"%s\" in FROM restituisce il tipo non supportato %s" -#: parser/parse_relation.c:1495 +#: parser/parse_relation.c:1669 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "le liste VALUES \"%s\" hanno %d colonne disponibili ma %d colonne specificate" -#: parser/parse_relation.c:1548 +#: parser/parse_relation.c:1724 #, c-format msgid "joins can have at most %d columns" msgstr "i join possono avere al più %d colonne" -#: parser/parse_relation.c:1636 +#: parser/parse_relation.c:1814 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "la query WITH \"%s\" non ha una clausola RETURNING" -#: parser/parse_relation.c:2468 parser/parse_relation.c:2623 +#: parser/parse_relation.c:2646 parser/parse_relation.c:2801 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "la colonna %d della relazione \"%s\" non esiste" -#: parser/parse_relation.c:2842 +#: parser/parse_relation.c:3020 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Forse intendevi utilizzare l'alias \"%s\" della tabella." -#: parser/parse_relation.c:2850 +#: parser/parse_relation.c:3028 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "elemento FROM per la tabella \"%s\" mancante" -#: parser/parse_relation.c:2890 +#: parser/parse_relation.c:3080 +#, c-format +msgid "Perhaps you meant to reference the column \"%s\".\"%s\"." +msgstr "Forse intendevi referenziare la colonna \"%s\".\"%s\"." + +#: parser/parse_relation.c:3082 #, c-format msgid "There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query." msgstr "Esiste una colonna di nome \"%s\" nella tabella \"%s\", ma non può essere referenziata da questa parte della query." -#: parser/parse_target.c:402 parser/parse_target.c:693 +#: parser/parse_relation.c:3099 +#, c-format +msgid "Perhaps you meant to reference the column \"%s\".\"%s\" or the column \"%s\".\"%s\"." +msgstr "Forse intendevi referenziare la colonna \"%s\".\"%s\" o la colonna \"%s\".\"%s\"." + +#: parser/parse_target.c:421 parser/parse_target.c:713 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "non è possibile assegnare alla colonna di sistema \"%s\"" -#: parser/parse_target.c:430 +#: parser/parse_target.c:449 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "non è possibile impostare gli elementi di un array a DEFAULT" -#: parser/parse_target.c:435 +#: parser/parse_target.c:454 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "non è possibile impostare un sottocampo a DEFAULT" -#: parser/parse_target.c:504 +#: parser/parse_target.c:523 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "la colonna \"%s\" è di tipo %s ma l'espressione è di tipo %s" -#: parser/parse_target.c:677 +#: parser/parse_target.c:697 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a composite type" msgstr "non è possibile assegnare al campo \"%s\" della colonna \"%s\" perché il suo tipo %s non è un tipo composito" -#: parser/parse_target.c:686 +#: parser/parse_target.c:706 #, c-format msgid "cannot assign to field \"%s\" of column \"%s\" because there is no such column in data type %s" msgstr "non è possibile assegnare al campo \"%s\" della colonna \"%s\" perché non questa colonna non compare nel tipo di dato %s" -#: parser/parse_target.c:753 +#: parser/parse_target.c:773 #, c-format msgid "array assignment to \"%s\" requires type %s but expression is of type %s" msgstr "l'assegnamento array a \"%s\" richiede il tipo %s ma l'espressione è di tipo %s" -#: parser/parse_target.c:763 +#: parser/parse_target.c:783 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "il sottocampo \"%s\" è di tipo %s ma l'espressione è di tipo %s" -#: parser/parse_target.c:1179 +#: parser/parse_target.c:1199 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "SELECT * senza tabelle specificate non è consentito" @@ -11877,224 +12961,244 @@ msgstr "riferimento %%TYPE improprio (troppi nomi puntati): %s" msgid "type reference %s converted to %s" msgstr "riferimento al tipo %s convertito in %s" -#: parser/parse_type.c:257 parser/parse_type.c:805 utils/cache/typcache.c:198 +#: parser/parse_type.c:262 parser/parse_type.c:834 utils/cache/typcache.c:230 #, c-format msgid "type \"%s\" is only a shell" msgstr "il tipo \"%s\" non è completamente definito" -#: parser/parse_type.c:342 +#: parser/parse_type.c:347 #, c-format msgid "type modifier is not allowed for type \"%s\"" msgstr "modificatore di tipo non ammesso per il tipo \"%s\"" -#: parser/parse_type.c:384 +#: parser/parse_type.c:389 #, c-format msgid "type modifiers must be simple constants or identifiers" msgstr "i modificatori di tipo devono essere costanti o identificatori semplici" -#: parser/parse_type.c:695 parser/parse_type.c:819 +#: parser/parse_type.c:700 parser/parse_type.c:799 #, c-format msgid "invalid type name \"%s\"" msgstr "nome di tipo \"%s\" non valido" -#: parser/parse_utilcmd.c:177 -#, c-format -msgid "relation \"%s\" already exists, skipping" -msgstr "la relazione \"%s\" esiste già, saltata" - -#: parser/parse_utilcmd.c:342 +#: parser/parse_utilcmd.c:358 #, c-format msgid "array of serial is not implemented" msgstr "gli array di serial non sono implementati" -#: parser/parse_utilcmd.c:390 +#: parser/parse_utilcmd.c:406 #, c-format msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" msgstr "%s creerà la sequenza implicita \"%s\" per la colonna serial \"%s.%s\"" -#: parser/parse_utilcmd.c:484 parser/parse_utilcmd.c:496 +#: parser/parse_utilcmd.c:500 parser/parse_utilcmd.c:512 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "dichiarazioni NULL/NOT NULL in conflitto per la colonna \"%s\" della tabella \"%s\"" -#: parser/parse_utilcmd.c:508 +#: parser/parse_utilcmd.c:524 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "più di un valore predefinito specificato per la colonna \"%s\" della tabella \"%s\"" -#: parser/parse_utilcmd.c:675 +#: parser/parse_utilcmd.c:541 parser/parse_utilcmd.c:632 +#, c-format +msgid "primary key constraints are not supported on foreign tables" +msgstr "i vincoli di chiave primaria non sono supportati sulle tabelle esterne" + +#: parser/parse_utilcmd.c:550 parser/parse_utilcmd.c:642 +#, c-format +msgid "unique constraints are not supported on foreign tables" +msgstr "i vincoli di unicità non sono supportati sulle tabelle esterne" + +#: parser/parse_utilcmd.c:567 parser/parse_utilcmd.c:666 +#, c-format +msgid "foreign key constraints are not supported on foreign tables" +msgstr "i vincoli di chiave esterna non sono supportati sulle tabelle esterne" + +#: parser/parse_utilcmd.c:652 +#, c-format +msgid "exclusion constraints are not supported on foreign tables" +msgstr "i vincoli esclusione non sono supportati sulle tabelle esterne" + +#: parser/parse_utilcmd.c:716 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE non è supportato nella creazione di tabelle esterne" -#: parser/parse_utilcmd.c:1196 parser/parse_utilcmd.c:1272 +#: parser/parse_utilcmd.c:1239 parser/parse_utilcmd.c:1315 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "L'indice \"%s\" contiene un riferimento all'intera riga della tabella." -#: parser/parse_utilcmd.c:1539 +#: parser/parse_utilcmd.c:1584 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "non è possibile usare un indice preesistente in CREATE TABLE" -#: parser/parse_utilcmd.c:1559 +#: parser/parse_utilcmd.c:1604 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "l'indice \"%s\" è già associato ad un vincolo" -#: parser/parse_utilcmd.c:1567 +#: parser/parse_utilcmd.c:1612 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "l'indice \"%s\" non appartiene alla tabella \"%s\"" -#: parser/parse_utilcmd.c:1574 +#: parser/parse_utilcmd.c:1619 #, c-format msgid "index \"%s\" is not valid" msgstr "l'indice \"%s\" non è valido" -#: parser/parse_utilcmd.c:1580 +#: parser/parse_utilcmd.c:1625 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\" non è un indice univoco" -#: parser/parse_utilcmd.c:1581 parser/parse_utilcmd.c:1588 -#: parser/parse_utilcmd.c:1595 parser/parse_utilcmd.c:1665 +#: parser/parse_utilcmd.c:1626 parser/parse_utilcmd.c:1633 +#: parser/parse_utilcmd.c:1640 parser/parse_utilcmd.c:1710 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "Non è possibile creare una chiave primaria o un vincolo univoco usando tale indice." -#: parser/parse_utilcmd.c:1587 +#: parser/parse_utilcmd.c:1632 #, c-format msgid "index \"%s\" contains expressions" msgstr "l'indice \"%s\" contiene espressioni" -#: parser/parse_utilcmd.c:1594 +#: parser/parse_utilcmd.c:1639 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" è un indice parziale" -#: parser/parse_utilcmd.c:1606 +#: parser/parse_utilcmd.c:1651 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" è un indice deferibile" -#: parser/parse_utilcmd.c:1607 +#: parser/parse_utilcmd.c:1652 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "Non è possibile creare un vincolo non deferibile usando un indice deferibile." -#: parser/parse_utilcmd.c:1664 +#: parser/parse_utilcmd.c:1709 #, c-format msgid "index \"%s\" does not have default sorting behavior" msgstr "l'indice \"%s\" non ha un ordinamento predefinito" -#: parser/parse_utilcmd.c:1809 +#: parser/parse_utilcmd.c:1856 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "la colonna \"%s\" appare due volte nel vincolo di chiave primaria" -#: parser/parse_utilcmd.c:1815 +#: parser/parse_utilcmd.c:1862 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "la colonna \"%s\" appare due volte nel vincolo univoco" -#: parser/parse_utilcmd.c:1981 +#: parser/parse_utilcmd.c:2032 #, c-format msgid "index expression cannot return a set" msgstr "l'espressione dell'indice non può restituire un insieme" -#: parser/parse_utilcmd.c:1992 +#: parser/parse_utilcmd.c:2043 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "le espressioni e i predicati dell'indice possono riferirsi solo alla tabella indicizzata" -#: parser/parse_utilcmd.c:2035 +#: parser/parse_utilcmd.c:2089 #, c-format msgid "rules on materialized views are not supported" msgstr "le regole sulle viste materializzate non sono supportate" -#: parser/parse_utilcmd.c:2096 +#: parser/parse_utilcmd.c:2150 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "le condizioni WHERE delle regole non possono avere riferimenti ad altre relazioni" -#: parser/parse_utilcmd.c:2168 +#: parser/parse_utilcmd.c:2222 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "le regole con una condizione WHERE possono avere solo azione SELECT, INSERT, UPDATE o DELETE" -#: parser/parse_utilcmd.c:2186 parser/parse_utilcmd.c:2285 -#: rewrite/rewriteHandler.c:469 rewrite/rewriteManip.c:968 +#: parser/parse_utilcmd.c:2240 parser/parse_utilcmd.c:2339 +#: rewrite/rewriteHandler.c:478 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "le istruzioni UNION/INTERSECT/EXCEPT condizionali non sono implementate" -#: parser/parse_utilcmd.c:2204 +#: parser/parse_utilcmd.c:2258 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "la regola ON SELECT non può usare OLD" -#: parser/parse_utilcmd.c:2208 +#: parser/parse_utilcmd.c:2262 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "la regola ON SELECT non può usare NEW" -#: parser/parse_utilcmd.c:2217 +#: parser/parse_utilcmd.c:2271 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "la regola ON INSERT non può usare OLD" -#: parser/parse_utilcmd.c:2223 +#: parser/parse_utilcmd.c:2277 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "La regola ON DELETE non può usare NEW" -#: parser/parse_utilcmd.c:2251 +#: parser/parse_utilcmd.c:2305 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "non ci si può riferire ad OLD nella query WITH" -#: parser/parse_utilcmd.c:2258 +#: parser/parse_utilcmd.c:2312 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "non ci si può riferire a NEW nella query WITH" -#: parser/parse_utilcmd.c:2541 +#: parser/parse_utilcmd.c:2515 +#, c-format +msgid "transform expression must not return a set" +msgstr "l'espressione di trasformazione non può restituire un insieme" + +#: parser/parse_utilcmd.c:2629 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "clausola DEFERRABLE mal posizionata" -#: parser/parse_utilcmd.c:2546 parser/parse_utilcmd.c:2561 +#: parser/parse_utilcmd.c:2634 parser/parse_utilcmd.c:2649 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "clausole DEFERRABLE/NOT DEFERRABLE multiple non consentite" -#: parser/parse_utilcmd.c:2556 +#: parser/parse_utilcmd.c:2644 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "clausola NOT DEFERRABLE mal posizionata" -#: parser/parse_utilcmd.c:2569 parser/parse_utilcmd.c:2595 gram.y:4577 +#: parser/parse_utilcmd.c:2657 parser/parse_utilcmd.c:2683 gram.y:4859 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "un vincolo dichiarato INITIALLY DEFERRED dev'essere DEFERRABLE" -#: parser/parse_utilcmd.c:2577 +#: parser/parse_utilcmd.c:2665 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "clausola INITIALLY DEFERRED mal posizionata" -#: parser/parse_utilcmd.c:2582 parser/parse_utilcmd.c:2608 +#: parser/parse_utilcmd.c:2670 parser/parse_utilcmd.c:2696 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "clausole INITIALLY IMMEDIATE/DEFERRED multiple non sono consentite" -#: parser/parse_utilcmd.c:2603 +#: parser/parse_utilcmd.c:2691 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "clausola INITIALLY IMMEDIATE mal posizionata" -#: parser/parse_utilcmd.c:2794 +#: parser/parse_utilcmd.c:2882 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE specifica uno schema (%s) differente da quello che sta venendo creato (%s)" @@ -12104,13 +13208,13 @@ msgstr "CREATE specifica uno schema (%s) differente da quello che sta venendo cr msgid "identifier \"%s\" will be truncated to \"%s\"" msgstr "l'identificativo \"%s\" sarà troncato a \"%s\"" -#: port/pg_latch.c:336 port/unix_latch.c:336 +#: port/pg_latch.c:344 port/unix_latch.c:344 #, c-format msgid "poll() failed: %m" msgstr "poll() fallito: %m" -#: port/pg_latch.c:423 port/unix_latch.c:423 -#: replication/libpqwalreceiver/libpqwalreceiver.c:363 +#: port/pg_latch.c:440 port/unix_latch.c:440 +#: replication/libpqwalreceiver/libpqwalreceiver.c:374 #, c-format msgid "select() failed: %m" msgstr "select() fallita: %m" @@ -12261,17 +13365,17 @@ msgstr "creazione del thread per la distribuzione dei segnali fallita: codice er msgid "could not create semaphore: error code %lu" msgstr "creazione del semaforo fallita: codice errore %lu" -#: port/win32_sema.c:165 +#: port/win32_sema.c:167 #, c-format msgid "could not lock semaphore: error code %lu" msgstr "lock del semaforo fallito: codice errore %lu" -#: port/win32_sema.c:178 +#: port/win32_sema.c:187 #, c-format msgid "could not unlock semaphore: error code %lu" msgstr "unlock del semaforo fallito: codice errore %lu" -#: port/win32_sema.c:207 +#: port/win32_sema.c:216 #, c-format msgid "could not try-lock semaphore: error code %lu" msgstr "try-lock del semaforo fallito: codice errore %lu" @@ -12306,277 +13410,277 @@ msgstr "La chiamata di sistema fallita era DuplicateHandle." msgid "Failed system call was MapViewOfFileEx." msgstr "La chiamata di sistema fallita era MapViewOfFileEx." -#: postmaster/autovacuum.c:380 +#: postmaster/autovacuum.c:377 #, c-format msgid "could not fork autovacuum launcher process: %m" msgstr "fork del processo di esecuzione di autovacuum fallito: %m" -#: postmaster/autovacuum.c:425 +#: postmaster/autovacuum.c:413 #, c-format msgid "autovacuum launcher started" msgstr "esecutore di autovacuum avviato" -#: postmaster/autovacuum.c:790 +#: postmaster/autovacuum.c:775 #, c-format msgid "autovacuum launcher shutting down" msgstr "arresto dell'esecutore di autovacuum" -#: postmaster/autovacuum.c:1453 +#: postmaster/autovacuum.c:1443 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "fork del processo di lavoro di autovacuum fallito: %m" -#: postmaster/autovacuum.c:1672 +#: postmaster/autovacuum.c:1639 #, c-format msgid "autovacuum: processing database \"%s\"" msgstr "autovacuum: elaborazione del database \"%s\"" -#: postmaster/autovacuum.c:2076 +#: postmaster/autovacuum.c:2051 #, c-format msgid "autovacuum: dropping orphan temp table \"%s\".\"%s\" in database \"%s\"" msgstr "autovacuum: eliminazione della tabella temporanea orfana \"%s\".\"%s\" nel database \"%s\"" -#: postmaster/autovacuum.c:2088 +#: postmaster/autovacuum.c:2063 #, c-format msgid "autovacuum: found orphan temp table \"%s\".\"%s\" in database \"%s\"" msgstr "autovacuum: trovata tabella temporanea orfana \"%s\".\"%s\" nel database \"%s\"" -#: postmaster/autovacuum.c:2353 +#: postmaster/autovacuum.c:2346 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "pulizia automatica della tabella \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2356 +#: postmaster/autovacuum.c:2349 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "analisi automatica della tabella \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2889 +#: postmaster/autovacuum.c:2877 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum non avviato a causa di configurazione errata" -#: postmaster/autovacuum.c:2890 +#: postmaster/autovacuum.c:2878 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Abilita l'opzione \"track_counts\"." -#: postmaster/bgworker.c:323 postmaster/bgworker.c:732 +#: postmaster/bgworker.c:345 postmaster/bgworker.c:745 #, c-format msgid "registering background worker \"%s\"" msgstr "registrazione del processo di lavoro in background \"%s\"" -#: postmaster/bgworker.c:352 +#: postmaster/bgworker.c:374 #, c-format msgid "unregistering background worker \"%s\"" msgstr "annullamento registrazione del processo di lavoro in background \"%s\"" -#: postmaster/bgworker.c:454 +#: postmaster/bgworker.c:483 #, c-format msgid "background worker \"%s\": must attach to shared memory in order to request a database connection" msgstr "processo di lavoro in background \"%s\": occorre collegarsi al segmento di memoria per richiedere una connessione al database" -#: postmaster/bgworker.c:463 +#: postmaster/bgworker.c:492 #, c-format msgid "background worker \"%s\": cannot request database access if starting at postmaster start" msgstr "processo di lavoro in background \"%s\": non è possibile richiedere accesso al database se avviato all'avvio di postmaster" -#: postmaster/bgworker.c:477 +#: postmaster/bgworker.c:506 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "processo di lavoro in background \"%s\": intervallo di riavvio non valido" -#: postmaster/bgworker.c:522 +#: postmaster/bgworker.c:551 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "interruzione del processo di lavoro in background \"%s\" a causa di comando amministrativo" -#: postmaster/bgworker.c:739 +#: postmaster/bgworker.c:752 #, c-format msgid "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "processo di lavoro in background \"%s\": deve essere registrato in shared_preload_libraries" -#: postmaster/bgworker.c:751 +#: postmaster/bgworker.c:764 #, c-format msgid "background worker \"%s\": only dynamic background workers can request notification" msgstr "processo di lavoro in background \"%s\": solo i processi dinamici possono richiedere notifiche" -#: postmaster/bgworker.c:766 +#: postmaster/bgworker.c:779 #, c-format msgid "too many background workers" msgstr "troppi processi di lavoro in background" -#: postmaster/bgworker.c:767 +#: postmaster/bgworker.c:780 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "Up to %d background workers can be registered with the current settings." msgstr[0] "Le impostazioni correnti consentono la registrazione di un massimo di %d processi di lavoro in background." msgstr[1] "Le impostazioni correnti consentono la registrazione di un massimo di %d processi di lavoro in background." -#: postmaster/bgworker.c:771 +#: postmaster/bgworker.c:784 #, c-format msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Considera di incrementare il parametro di configurazione \"max_worker_processes\"." -#: postmaster/checkpointer.c:481 +#: postmaster/checkpointer.c:470 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" msgstr[0] "i checkpoint stanno avvenendo troppo frequentemente (a distanza di %d secondo)" msgstr[1] "i checkpoint stanno avvenendo troppo frequentemente (a distanza di %d secondi)" -#: postmaster/checkpointer.c:485 +#: postmaster/checkpointer.c:474 #, c-format -msgid "Consider increasing the configuration parameter \"checkpoint_segments\"." -msgstr "Considera di incrementare il parametro di configurazione \"checkpoint_segments\"." +msgid "Consider increasing the configuration parameter \"max_wal_size\"." +msgstr "Considera di incrementare il parametro di configurazione \"max_wal_size\"." -#: postmaster/checkpointer.c:630 +#: postmaster/checkpointer.c:621 #, c-format msgid "transaction log switch forced (archive_timeout=%d)" msgstr "passaggio al prossimo log delle transazioni forzato (archive_timeout=%d)" -#: postmaster/checkpointer.c:1083 +#: postmaster/checkpointer.c:1081 #, c-format msgid "checkpoint request failed" msgstr "richiesta di checkpoint fallita" -#: postmaster/checkpointer.c:1084 +#: postmaster/checkpointer.c:1082 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Consulta i messaggi recenti nel log del server per i dettagli." -#: postmaster/checkpointer.c:1280 +#: postmaster/checkpointer.c:1277 #, c-format msgid "compacted fsync request queue from %d entries to %d entries" msgstr "coda di richieste di fsync ridotta da %d a %d elementi" -#: postmaster/pgarch.c:154 +#: postmaster/pgarch.c:149 #, c-format msgid "could not fork archiver: %m" msgstr "non è possibile fare un fork dell'archiver: %m" -#: postmaster/pgarch.c:481 +#: postmaster/pgarch.c:456 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "archive_mode abilitato, ma archive_command non è impostato" -#: postmaster/pgarch.c:509 +#: postmaster/pgarch.c:484 #, c-format msgid "archiving transaction log file \"%s\" failed too many times, will try again later" msgstr "archiviazione del file di log delle transazioni \"%s\" fallita troppe volte, verrà riprovato più tardi" -#: postmaster/pgarch.c:612 +#: postmaster/pgarch.c:587 #, c-format msgid "archive command failed with exit code %d" msgstr "comando di archiviazione fallito con codice di uscita %d" -#: postmaster/pgarch.c:614 postmaster/pgarch.c:624 postmaster/pgarch.c:631 -#: postmaster/pgarch.c:637 postmaster/pgarch.c:646 +#: postmaster/pgarch.c:589 postmaster/pgarch.c:599 postmaster/pgarch.c:606 +#: postmaster/pgarch.c:612 postmaster/pgarch.c:621 #, c-format msgid "The failed archive command was: %s" msgstr "Il comando di archiviazione fallito era: %s" -#: postmaster/pgarch.c:621 +#: postmaster/pgarch.c:596 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "comando di archiviazione terminato da eccezione 0x%X" -#: postmaster/pgarch.c:623 postmaster/postmaster.c:3303 +#: postmaster/pgarch.c:598 postmaster/postmaster.c:3417 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "Consulta il file include C \"ntstatus.h\" per una spiegazione del valore esadecimale." -#: postmaster/pgarch.c:628 +#: postmaster/pgarch.c:603 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "comando di archiviazione terminato dal segnale %d: %s" -#: postmaster/pgarch.c:635 +#: postmaster/pgarch.c:610 #, c-format msgid "archive command was terminated by signal %d" msgstr "comando di archiviazione terminato dal segnale %d" -#: postmaster/pgarch.c:644 +#: postmaster/pgarch.c:619 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "processo di archiviazione uscito con stato sconosciuto %d" -#: postmaster/pgarch.c:656 +#: postmaster/pgarch.c:631 #, c-format msgid "archived transaction log file \"%s\"" msgstr "file di log delle transazioni archiviato \"%s\"" -#: postmaster/pgarch.c:705 +#: postmaster/pgarch.c:680 #, c-format msgid "could not open archive status directory \"%s\": %m" msgstr "apertura della directory dello stato dell'archivio \"%s\" fallita: %m" -#: postmaster/pgstat.c:354 +#: postmaster/pgstat.c:356 #, c-format msgid "could not resolve \"localhost\": %s" msgstr "risoluzione di \"localhost\" fallita: %s" -#: postmaster/pgstat.c:377 +#: postmaster/pgstat.c:379 #, c-format msgid "trying another address for the statistics collector" msgstr "si sta tentando di usare un diverso indirizzo per il raccoglitore di statistiche" -#: postmaster/pgstat.c:386 +#: postmaster/pgstat.c:388 #, c-format msgid "could not create socket for statistics collector: %m" msgstr "creazione del socket per il raccoglitore di statistiche fallita: %m" -#: postmaster/pgstat.c:398 +#: postmaster/pgstat.c:400 #, c-format msgid "could not bind socket for statistics collector: %m" msgstr "bind del socket per il raccoglitore di statistiche fallito: %m" -#: postmaster/pgstat.c:409 +#: postmaster/pgstat.c:411 #, c-format msgid "could not get address of socket for statistics collector: %m" msgstr "non è stato possibile ottenere l'indirizzo del socket per il raccoglitore di statistiche: %m" -#: postmaster/pgstat.c:425 +#: postmaster/pgstat.c:427 #, c-format msgid "could not connect socket for statistics collector: %m" msgstr "connessione al socket per il raccoglitore statistiche fallita: %m" -#: postmaster/pgstat.c:446 +#: postmaster/pgstat.c:448 #, c-format msgid "could not send test message on socket for statistics collector: %m" msgstr "invio del messaggio di prova al socket per il raccoglitore di statistiche fallito: %m" -#: postmaster/pgstat.c:472 +#: postmaster/pgstat.c:474 #, c-format msgid "select() failed in statistics collector: %m" msgstr "select() fallita nel raccoglitore di statistiche: %m" -#: postmaster/pgstat.c:487 +#: postmaster/pgstat.c:489 #, c-format msgid "test message did not get through on socket for statistics collector" msgstr "il messaggio di prova non ha raggiunto il socket per il raccoglitore di statistiche" -#: postmaster/pgstat.c:502 +#: postmaster/pgstat.c:504 #, c-format msgid "could not receive test message on socket for statistics collector: %m" msgstr "ricezione del messaggio di prova sul socket per il raccoglitore di statistiche fallito: %m" -#: postmaster/pgstat.c:512 +#: postmaster/pgstat.c:514 #, c-format msgid "incorrect test message transmission on socket for statistics collector" msgstr "trasmissione errata del messaggio di prova per il raccoglitore di statistiche" -#: postmaster/pgstat.c:535 +#: postmaster/pgstat.c:537 #, c-format msgid "could not set statistics collector socket to nonblocking mode: %m" msgstr "impostazione del socket per il raccoglitore di statistiche in modalità non bloccante fallita: %m" -#: postmaster/pgstat.c:545 +#: postmaster/pgstat.c:547 #, c-format msgid "disabling statistics collector for lack of working socket" msgstr "raccoglitore di statistiche disabilitato per mancanza di un socket funzionante" -#: postmaster/pgstat.c:692 +#: postmaster/pgstat.c:694 #, c-format msgid "could not fork statistics collector: %m" msgstr "fork del raccoglitore di statistiche fallito: %m" @@ -12596,198 +13700,213 @@ msgstr "obiettivo del reset sconosciuto: \"%s\"" msgid "Target must be \"archiver\" or \"bgwriter\"." msgstr "L'obiettivo deve essere \"archiver\" o \"bgwriter\"." -#: postmaster/pgstat.c:3280 +#: postmaster/pgstat.c:3425 #, c-format msgid "could not read statistics message: %m" msgstr "lettura del messaggio delle statistiche fallito: %m" -#: postmaster/pgstat.c:3613 postmaster/pgstat.c:3790 +#: postmaster/pgstat.c:3756 postmaster/pgstat.c:3933 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "apertura del file temporaneo delle statistiche \"%s\" fallita: %m" -#: postmaster/pgstat.c:3681 postmaster/pgstat.c:3835 +#: postmaster/pgstat.c:3824 postmaster/pgstat.c:3978 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "scrittura del file temporaneo delle statistiche \"%s\" fallita: %m" -#: postmaster/pgstat.c:3690 postmaster/pgstat.c:3844 +#: postmaster/pgstat.c:3833 postmaster/pgstat.c:3987 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "chiusura del file temporaneo delle statistiche \"%s\" fallita: %m" -#: postmaster/pgstat.c:3698 postmaster/pgstat.c:3852 +#: postmaster/pgstat.c:3841 postmaster/pgstat.c:3995 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "non è stato possibile rinominare il file temporaneo delle statistiche \"%s\" in \"%s\": %m" -#: postmaster/pgstat.c:3935 postmaster/pgstat.c:4120 postmaster/pgstat.c:4275 +#: postmaster/pgstat.c:4077 postmaster/pgstat.c:4260 postmaster/pgstat.c:4415 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "apertura del file delle statistiche \"%s\" fallita: %m" -#: postmaster/pgstat.c:3947 postmaster/pgstat.c:3957 postmaster/pgstat.c:3967 -#: postmaster/pgstat.c:3988 postmaster/pgstat.c:4003 postmaster/pgstat.c:4061 -#: postmaster/pgstat.c:4132 postmaster/pgstat.c:4152 postmaster/pgstat.c:4170 -#: postmaster/pgstat.c:4186 postmaster/pgstat.c:4204 postmaster/pgstat.c:4220 -#: postmaster/pgstat.c:4287 postmaster/pgstat.c:4299 postmaster/pgstat.c:4311 -#: postmaster/pgstat.c:4336 postmaster/pgstat.c:4358 +#: postmaster/pgstat.c:4089 postmaster/pgstat.c:4099 postmaster/pgstat.c:4109 +#: postmaster/pgstat.c:4130 postmaster/pgstat.c:4145 postmaster/pgstat.c:4201 +#: postmaster/pgstat.c:4272 postmaster/pgstat.c:4292 postmaster/pgstat.c:4310 +#: postmaster/pgstat.c:4326 postmaster/pgstat.c:4344 postmaster/pgstat.c:4360 +#: postmaster/pgstat.c:4427 postmaster/pgstat.c:4439 postmaster/pgstat.c:4451 +#: postmaster/pgstat.c:4476 postmaster/pgstat.c:4498 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "file delle statistiche corrotto \"%s\"" -#: postmaster/pgstat.c:4785 +#: postmaster/pgstat.c:4615 +#, c-format +msgid "using stale statistics instead of current ones because stats collector is not responding" +msgstr "verranno utilizzate statistiche vecchie invece di quelle correnti perché il processo di raccolta statistiche non risponde" + +#: postmaster/pgstat.c:4933 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "tabella hash del database corrotta durante la pulizia --- interruzione" -#: postmaster/postmaster.c:650 +#: postmaster/postmaster.c:673 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: argomento non valido per l'opzione -f: \"%s\"\n" -#: postmaster/postmaster.c:736 +#: postmaster/postmaster.c:759 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: argomento non valido per l'opzione -t: \"%s\"\n" -#: postmaster/postmaster.c:787 +#: postmaster/postmaster.c:810 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: argomento non valido: \"%s\"\n" -#: postmaster/postmaster.c:822 +#: postmaster/postmaster.c:845 #, c-format msgid "%s: superuser_reserved_connections must be less than max_connections\n" msgstr "%s: superuser_reserved_connections dev'essere minore di max_connections\n" -#: postmaster/postmaster.c:827 +#: postmaster/postmaster.c:850 #, c-format msgid "%s: max_wal_senders must be less than max_connections\n" msgstr "%s: max_wal_senders dev'essere minore di max_connections\n" -#: postmaster/postmaster.c:832 +#: postmaster/postmaster.c:855 #, c-format -msgid "WAL archival (archive_mode=on) requires wal_level \"archive\", \"hot_standby\", or \"logical\"" -msgstr "l'archiviazione WAL (archive_mode=on) richiede wal_level \"archive\", \"hot_standby\" oppure \"logical\"" +msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" +msgstr "l'archiviazione dei WAL non può essere attivata quando wal_level è \"minimal\"" -#: postmaster/postmaster.c:835 +#: postmaster/postmaster.c:858 #, c-format msgid "WAL streaming (max_wal_senders > 0) requires wal_level \"archive\", \"hot_standby\", or \"logical\"" msgstr "lo streaming WAL (max_wal_senders > 0) richiede wal_level \"archive\", \"hot_standby\" oppure \"logical\"" -#: postmaster/postmaster.c:843 +#: postmaster/postmaster.c:866 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: datetoken tables non valido, per favore correggilo\n" -#: postmaster/postmaster.c:925 postmaster/postmaster.c:1023 -#: utils/init/miscinit.c:1188 +#: postmaster/postmaster.c:958 postmaster/postmaster.c:1056 +#: utils/init/miscinit.c:1326 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "sintassi di lista non valida nel parametro \"%s\"" -#: postmaster/postmaster.c:956 +#: postmaster/postmaster.c:989 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "creazione del socket di ascolto per \"%s\" fallita" -#: postmaster/postmaster.c:962 +#: postmaster/postmaster.c:995 #, c-format msgid "could not create any TCP/IP sockets" msgstr "non è stato possibile creare alcun socket TCP/IP" -#: postmaster/postmaster.c:1045 +#: postmaster/postmaster.c:1078 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "creazione del socket di dominio Unix fallita nella directory \"%s\"" -#: postmaster/postmaster.c:1051 +#: postmaster/postmaster.c:1084 #, c-format msgid "could not create any Unix-domain sockets" msgstr "creazione del socket di dominio Unix fallita" -#: postmaster/postmaster.c:1063 +#: postmaster/postmaster.c:1096 #, c-format msgid "no socket created for listening" msgstr "nessun socket per l'ascolto è stato creato" -#: postmaster/postmaster.c:1103 +#: postmaster/postmaster.c:1136 #, c-format msgid "could not create I/O completion port for child queue" msgstr "creazione della porta di completamento I/O per la coda dei figli fallita" -#: postmaster/postmaster.c:1132 +#: postmaster/postmaster.c:1165 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: modifica dei permessi del file PID esterno \"%s\" fallita: %s\n" -#: postmaster/postmaster.c:1136 +#: postmaster/postmaster.c:1169 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: scrittura del file PID esterno \"%s\" fallita: %s\n" -#: postmaster/postmaster.c:1160 +#: postmaster/postmaster.c:1199 #, c-format msgid "ending log output to stderr" msgstr "terminazione dell'output del log su stderr" -#: postmaster/postmaster.c:1161 +#: postmaster/postmaster.c:1200 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "L'output dei prossimi log andrà su \"%s\"." -#: postmaster/postmaster.c:1187 utils/init/postinit.c:199 +#: postmaster/postmaster.c:1226 utils/init/postinit.c:213 #, c-format msgid "could not load pg_hba.conf" msgstr "caricamento di pg_hba.conf fallito" -#: postmaster/postmaster.c:1263 +#: postmaster/postmaster.c:1252 +#, c-format +msgid "postmaster became multithreaded during startup" +msgstr "il postmaster è diventato multithread durante l'avvio" + +#: postmaster/postmaster.c:1253 +#, c-format +msgid "Set the LC_ALL environment variable to a valid locale." +msgstr "Imposta la variabile d'ambiente LC_ALL non corrisponde ad un locale valido." + +#: postmaster/postmaster.c:1350 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: eseguibile postgres corrispondente non trovato" -#: postmaster/postmaster.c:1286 utils/misc/tzparser.c:341 +#: postmaster/postmaster.c:1373 utils/misc/tzparser.c:341 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Questo potrebbe indicare una installazione di PostgreSQL incompleta, o che il file \"%s\" sia stato spostato dalla sua posizione corretta." -#: postmaster/postmaster.c:1314 +#: postmaster/postmaster.c:1401 #, c-format msgid "data directory \"%s\" does not exist" msgstr "la directory dei dati \"%s\" non esiste" -#: postmaster/postmaster.c:1319 +#: postmaster/postmaster.c:1406 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "lettura dei permessi della directory \"%s\" fallita: %m" -#: postmaster/postmaster.c:1327 +#: postmaster/postmaster.c:1414 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "la directory dei dati specificata \"%s\" non è una directory" -#: postmaster/postmaster.c:1343 +#: postmaster/postmaster.c:1430 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "la directory dei dati \"%s\" ha il proprietario errato" -#: postmaster/postmaster.c:1345 +#: postmaster/postmaster.c:1432 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "Il server deve essere avviato dall'utente che possiede la directory dei dati." -#: postmaster/postmaster.c:1365 +#: postmaster/postmaster.c:1452 #, c-format msgid "data directory \"%s\" has group or world access" msgstr "la directory dei dati \"%s\" è accessibile dal gruppo o da tutti" -#: postmaster/postmaster.c:1367 +#: postmaster/postmaster.c:1454 #, c-format msgid "Permissions should be u=rwx (0700)." msgstr "I permessi dovrebbero essere u=rwx (0700)." -#: postmaster/postmaster.c:1378 +#: postmaster/postmaster.c:1465 #, c-format msgid "" "%s: could not find the database system\n" @@ -12798,404 +13917,414 @@ msgstr "" "Sarebbe dovuto essere nella directory \"%s\",\n" "ma l'apertura del file \"%s\" è fallita: %s\n" -#: postmaster/postmaster.c:1552 +#: postmaster/postmaster.c:1641 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() fallita in postmaster: %m" -#: postmaster/postmaster.c:1747 postmaster/postmaster.c:1778 +#: postmaster/postmaster.c:1839 postmaster/postmaster.c:1870 #, c-format msgid "incomplete startup packet" msgstr "pacchetto di avvio incompleto" -#: postmaster/postmaster.c:1759 +#: postmaster/postmaster.c:1851 #, c-format msgid "invalid length of startup packet" msgstr "dimensione del pacchetto di avvio non valida" -#: postmaster/postmaster.c:1816 +#: postmaster/postmaster.c:1909 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "invio della risposta di negoziazione SSL fallito: %m" -#: postmaster/postmaster.c:1845 +#: postmaster/postmaster.c:1938 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "protocollo frontend non supportato %u.%u: il server supporta da %u.0 a %u.%u" -#: postmaster/postmaster.c:1908 +#: postmaster/postmaster.c:2001 #, c-format msgid "invalid value for parameter \"replication\"" msgstr "valore non valido per il parametro \"replication\"" -#: postmaster/postmaster.c:1909 +#: postmaster/postmaster.c:2002 #, c-format msgid "Valid values are: false, 0, true, 1, database." msgstr "I valori validi sono: false, 0, true, 1, database." -#: postmaster/postmaster.c:1929 +#: postmaster/postmaster.c:2022 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "formato del pacchetto di avvio non valido: atteso il terminatore all'ultimo byte" -#: postmaster/postmaster.c:1957 +#: postmaster/postmaster.c:2050 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "nessun utente PostgreSQL specificato nel pacchetto di avvio" -#: postmaster/postmaster.c:2016 +#: postmaster/postmaster.c:2109 #, c-format msgid "the database system is starting up" msgstr "il database si sta avviando" -#: postmaster/postmaster.c:2021 +#: postmaster/postmaster.c:2114 #, c-format msgid "the database system is shutting down" msgstr "il database si sta spegnendo" -#: postmaster/postmaster.c:2026 +#: postmaster/postmaster.c:2119 #, c-format msgid "the database system is in recovery mode" msgstr "il database è in modalità di ripristino" -#: postmaster/postmaster.c:2031 storage/ipc/procarray.c:286 -#: storage/ipc/sinvaladt.c:305 storage/lmgr/proc.c:339 +#: postmaster/postmaster.c:2124 storage/ipc/procarray.c:287 +#: storage/ipc/sinvaladt.c:298 storage/lmgr/proc.c:337 #, c-format msgid "sorry, too many clients already" msgstr "spiacente, troppi client già connessi" -#: postmaster/postmaster.c:2093 +#: postmaster/postmaster.c:2186 #, c-format msgid "wrong key in cancel request for process %d" msgstr "chiave sbagliata nella richiesta di annullamento per il processo %d" -#: postmaster/postmaster.c:2101 +#: postmaster/postmaster.c:2194 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "il PID %d nella richiesta di annullamento non corrisponde ad alcun processo" -#: postmaster/postmaster.c:2321 +#: postmaster/postmaster.c:2414 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUP ricevuto, sto ricaricando i file di configurazione" -#: postmaster/postmaster.c:2347 +#: postmaster/postmaster.c:2440 #, c-format msgid "pg_hba.conf not reloaded" msgstr "pg_hba.conf non è stato ricaricato" -#: postmaster/postmaster.c:2351 +#: postmaster/postmaster.c:2444 #, c-format msgid "pg_ident.conf not reloaded" msgstr "pg_ident.conf non è stato ricaricato" -#: postmaster/postmaster.c:2392 +#: postmaster/postmaster.c:2485 #, c-format msgid "received smart shutdown request" msgstr "richiesta di arresto smart ricevuta" -#: postmaster/postmaster.c:2445 +#: postmaster/postmaster.c:2538 #, c-format msgid "received fast shutdown request" msgstr "richiesta di arresto fast ricevuta" -#: postmaster/postmaster.c:2471 +#: postmaster/postmaster.c:2564 #, c-format msgid "aborting any active transactions" msgstr "interruzione di tutte le transazioni attive" -#: postmaster/postmaster.c:2505 +#: postmaster/postmaster.c:2598 #, c-format msgid "received immediate shutdown request" msgstr "richiesta di arresto immediate ricevuta" -#: postmaster/postmaster.c:2569 postmaster/postmaster.c:2590 +#: postmaster/postmaster.c:2659 +#, c-format +msgid "shutdown at recovery target" +msgstr "arresto all'obiettivo di recupero" + +#: postmaster/postmaster.c:2675 postmaster/postmaster.c:2698 msgid "startup process" msgstr "avvio del processo" -#: postmaster/postmaster.c:2572 +#: postmaster/postmaster.c:2678 #, c-format msgid "aborting startup due to startup process failure" msgstr "avvio interrotto a causa del fallimento del processo di avvio" -#: postmaster/postmaster.c:2630 +#: postmaster/postmaster.c:2739 #, c-format msgid "database system is ready to accept connections" msgstr "il database è pronto ad accettare connessioni" -#: postmaster/postmaster.c:2645 +#: postmaster/postmaster.c:2754 msgid "background writer process" msgstr "processo di scrittura in background" -#: postmaster/postmaster.c:2699 +#: postmaster/postmaster.c:2808 msgid "checkpointer process" msgstr "processo di creazione checkpoint" -#: postmaster/postmaster.c:2715 +#: postmaster/postmaster.c:2824 msgid "WAL writer process" msgstr "processo di scrittura WAL" -#: postmaster/postmaster.c:2729 +#: postmaster/postmaster.c:2838 msgid "WAL receiver process" msgstr "processo di ricezione WAL" -#: postmaster/postmaster.c:2744 +#: postmaster/postmaster.c:2853 msgid "autovacuum launcher process" msgstr "processo del lanciatore di autovacuum" -#: postmaster/postmaster.c:2759 +#: postmaster/postmaster.c:2868 msgid "archiver process" msgstr "processo di archiviazione" -#: postmaster/postmaster.c:2775 +#: postmaster/postmaster.c:2884 msgid "statistics collector process" msgstr "processo del raccoglitore di statistiche" -#: postmaster/postmaster.c:2789 +#: postmaster/postmaster.c:2898 msgid "system logger process" msgstr "processo del logger di sistema" -#: postmaster/postmaster.c:2851 +#: postmaster/postmaster.c:2960 msgid "worker process" msgstr "processo di lavoro" -#: postmaster/postmaster.c:2937 postmaster/postmaster.c:2957 -#: postmaster/postmaster.c:2964 postmaster/postmaster.c:2982 +#: postmaster/postmaster.c:3047 postmaster/postmaster.c:3067 +#: postmaster/postmaster.c:3074 postmaster/postmaster.c:3092 msgid "server process" msgstr "processo del server" -#: postmaster/postmaster.c:3036 +#: postmaster/postmaster.c:3146 #, c-format msgid "terminating any other active server processes" msgstr "interruzione di tutti gli altri processi attivi del server" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3291 +#: postmaster/postmaster.c:3405 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) è uscito con codice di uscita %d" -#: postmaster/postmaster.c:3293 postmaster/postmaster.c:3304 -#: postmaster/postmaster.c:3315 postmaster/postmaster.c:3324 -#: postmaster/postmaster.c:3334 +#: postmaster/postmaster.c:3407 postmaster/postmaster.c:3418 +#: postmaster/postmaster.c:3429 postmaster/postmaster.c:3438 +#: postmaster/postmaster.c:3448 #, c-format msgid "Failed process was running: %s" msgstr "Il processo fallito stava eseguendo: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3301 +#: postmaster/postmaster.c:3415 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) è stato terminato dall'eccezione 0x%X" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3311 +#: postmaster/postmaster.c:3425 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) è stato terminato dal segnale %d: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3322 +#: postmaster/postmaster.c:3436 #, c-format msgid "%s (PID %d) was terminated by signal %d" msgstr "%s (PID %d) è stato terminato dal segnale %d" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3332 +#: postmaster/postmaster.c:3446 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) uscito con stato sconosciuto %d" -#: postmaster/postmaster.c:3520 +#: postmaster/postmaster.c:3634 #, c-format msgid "abnormal database system shutdown" msgstr "spegnimento anormale del database" -#: postmaster/postmaster.c:3559 +#: postmaster/postmaster.c:3674 #, c-format msgid "all server processes terminated; reinitializing" msgstr "tutti i processi server sono terminati; re-inizializzazione" -#: postmaster/postmaster.c:3811 +#: postmaster/postmaster.c:3920 #, c-format msgid "could not fork new process for connection: %m" msgstr "fork del nuovo processo per la connessione fallito: %m" -#: postmaster/postmaster.c:3853 +#: postmaster/postmaster.c:3962 msgid "could not fork new process for connection: " msgstr "fork del nuovo processo per la connessione fallito: " -#: postmaster/postmaster.c:3960 +#: postmaster/postmaster.c:4068 #, c-format msgid "connection received: host=%s port=%s" msgstr "connessione ricevuta: host=%s porta=%s" -#: postmaster/postmaster.c:3965 +#: postmaster/postmaster.c:4073 #, c-format msgid "connection received: host=%s" msgstr "connessione ricevuta: host=%s" -#: postmaster/postmaster.c:4255 +#: postmaster/postmaster.c:4362 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "esecuzione del processo del server \"%s\" fallita: %m" -#: postmaster/postmaster.c:4804 +#: postmaster/postmaster.c:4919 #, c-format msgid "database system is ready to accept read only connections" msgstr "il database è pronto ad accettare connessioni in sola lettura" -#: postmaster/postmaster.c:5117 +#: postmaster/postmaster.c:5229 #, c-format msgid "could not fork startup process: %m" msgstr "fork del processo di avvio fallito: %m" -#: postmaster/postmaster.c:5121 +#: postmaster/postmaster.c:5233 #, c-format msgid "could not fork background writer process: %m" msgstr "fork del processo di scrittura in background fallito: %m" -#: postmaster/postmaster.c:5125 +#: postmaster/postmaster.c:5237 #, c-format msgid "could not fork checkpointer process: %m" msgstr "fork del processo di creazione dei checkpoint fallito: %m" -#: postmaster/postmaster.c:5129 +#: postmaster/postmaster.c:5241 #, c-format msgid "could not fork WAL writer process: %m" msgstr "fork del processo di scrittura dei WAL fallito: %m" -#: postmaster/postmaster.c:5133 +#: postmaster/postmaster.c:5245 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "fork del processo di ricezione dei WAL fallito: %m" -#: postmaster/postmaster.c:5137 +#: postmaster/postmaster.c:5249 #, c-format msgid "could not fork process: %m" msgstr "fork del processo fallito: %m" -#: postmaster/postmaster.c:5299 +#: postmaster/postmaster.c:5411 postmaster/postmaster.c:5434 #, c-format msgid "database connection requirement not indicated during registration" msgstr "requisiti di connessione a database non indicati durante la registrazione" -#: postmaster/postmaster.c:5306 +#: postmaster/postmaster.c:5418 postmaster/postmaster.c:5441 #, c-format msgid "invalid processing mode in background worker" msgstr "modalità di processo non valida nel processo di lavoro in background" -#: postmaster/postmaster.c:5358 +#: postmaster/postmaster.c:5493 #, c-format msgid "starting background worker process \"%s\"" msgstr "avvio del processo di lavoro in background \"%s\"" -#: postmaster/postmaster.c:5369 +#: postmaster/postmaster.c:5504 #, c-format msgid "could not fork worker process: %m" msgstr "fork del processo di lavoro in background fallito: %m" -#: postmaster/postmaster.c:5758 +#: postmaster/postmaster.c:5892 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "duplicazione del socket %d da usare nel backend fallita: codice errore %d" -#: postmaster/postmaster.c:5790 +#: postmaster/postmaster.c:5924 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "creazione del socket ereditato fallita: codice errore %d\n" -#: postmaster/postmaster.c:5819 postmaster/postmaster.c:5826 +#: postmaster/postmaster.c:5953 +#, c-format +msgid "could not open backend variables file \"%s\": %s\n" +msgstr "apertura del file delle variabili del backend \"%s\" fallita: %s\n" + +#: postmaster/postmaster.c:5960 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "lettura dal file delle variabili del backend \"%s\" fallita: %s\n" -#: postmaster/postmaster.c:5835 +#: postmaster/postmaster.c:5969 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "rimozione del file \"%s\" fallita: %s\n" -#: postmaster/postmaster.c:5852 +#: postmaster/postmaster.c:5986 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "non è stato possibile mappare la vista delle variabili del backend: codice errore %lu\n" -#: postmaster/postmaster.c:5861 +#: postmaster/postmaster.c:5995 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "non è stato possibile rimuovere la mappa della vista delle variabili del backend: codice errore %lu\n" -#: postmaster/postmaster.c:5868 +#: postmaster/postmaster.c:6002 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "chiusura dell'handle dei parametri variabili del backend fallita: codice errore %lu\n" -#: postmaster/postmaster.c:6027 +#: postmaster/postmaster.c:6161 #, c-format msgid "could not read exit code for process\n" msgstr "lettura del codice di uscita del processo fallita\n" -#: postmaster/postmaster.c:6032 +#: postmaster/postmaster.c:6166 #, c-format msgid "could not post child completion status\n" msgstr "invio dello stato di completamento del figlio fallito\n" -#: postmaster/syslogger.c:463 postmaster/syslogger.c:1064 +#: postmaster/syslogger.c:441 postmaster/syslogger.c:1041 #, c-format msgid "could not read from logger pipe: %m" msgstr "lettura dalla pipe del logger fallita: %m" -#: postmaster/syslogger.c:512 +#: postmaster/syslogger.c:490 #, c-format msgid "logger shutting down" msgstr "spegnimento del logger" -#: postmaster/syslogger.c:556 postmaster/syslogger.c:570 +#: postmaster/syslogger.c:534 postmaster/syslogger.c:548 #, c-format msgid "could not create pipe for syslog: %m" msgstr "creazione della pipe per il syslog fallita: %m" -#: postmaster/syslogger.c:606 +#: postmaster/syslogger.c:584 #, c-format msgid "could not fork system logger: %m" msgstr "fork del logger di sistema fallito: %m" -#: postmaster/syslogger.c:643 +#: postmaster/syslogger.c:620 #, c-format msgid "redirecting log output to logging collector process" msgstr "redirezione dell'output ti log al processo di raccolta dei log" -#: postmaster/syslogger.c:644 +#: postmaster/syslogger.c:621 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "I prossimi output di log appariranno nella directory \"%s\"." -#: postmaster/syslogger.c:652 +#: postmaster/syslogger.c:629 #, c-format msgid "could not redirect stdout: %m" msgstr "redirezione di stdout fallita: %m" -#: postmaster/syslogger.c:657 postmaster/syslogger.c:674 +#: postmaster/syslogger.c:634 postmaster/syslogger.c:651 #, c-format msgid "could not redirect stderr: %m" msgstr "redirezione di stderr fallita: %m" -#: postmaster/syslogger.c:1019 +#: postmaster/syslogger.c:996 #, c-format msgid "could not write to log file: %s\n" msgstr "scrittura nel file di log fallita: %s\n" -#: postmaster/syslogger.c:1159 +#: postmaster/syslogger.c:1136 #, c-format msgid "could not open log file \"%s\": %m" msgstr "apertura del file di log \"%s\" fallita: %m" -#: postmaster/syslogger.c:1221 postmaster/syslogger.c:1265 +#: postmaster/syslogger.c:1198 postmaster/syslogger.c:1242 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "rotazione automatica disabilitata (usa SIGHUP per abilitarla di nuovo)" @@ -13205,257 +14334,334 @@ msgstr "rotazione automatica disabilitata (usa SIGHUP per abilitarla di nuovo)" msgid "could not determine which collation to use for regular expression" msgstr "non è stato possibile determinare quale ordinamento usare per le espressioni regolari" -#: replication/basebackup.c:184 replication/basebackup.c:1044 -#: utils/adt/misc.c:353 -#, c-format -msgid "could not read symbolic link \"%s\": %m" -msgstr "lettura del link simbolico \"%s\" fallita: %m" - -#: replication/basebackup.c:191 replication/basebackup.c:1048 -#: utils/adt/misc.c:357 -#, c-format -msgid "symbolic link \"%s\" target is too long" -msgstr "la destinazione del link simbolico \"%s\" è troppo lunga" - -#: replication/basebackup.c:284 +#: replication/basebackup.c:227 #, c-format msgid "could not stat control file \"%s\": %m" msgstr "non è stato possibile ottenere informazioni sul file di controllo \"%s\": %m" -#: replication/basebackup.c:396 +#: replication/basebackup.c:336 #, c-format msgid "could not find any WAL files" msgstr "nessun file WAL trovato" -#: replication/basebackup.c:409 replication/basebackup.c:423 -#: replication/basebackup.c:432 +#: replication/basebackup.c:349 replication/basebackup.c:363 +#: replication/basebackup.c:372 #, c-format msgid "could not find WAL file \"%s\"" msgstr "file WAL \"%s\" non trovato" -#: replication/basebackup.c:471 replication/basebackup.c:496 +#: replication/basebackup.c:411 replication/basebackup.c:437 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "dimensione inaspettata del file WAL \"%s\"" -#: replication/basebackup.c:482 replication/basebackup.c:1186 +#: replication/basebackup.c:423 replication/basebackup.c:1177 #, c-format msgid "base backup could not send data, aborting backup" msgstr "invio dati da parte del backup di base fallito, backup interrotto" -#: replication/basebackup.c:569 replication/basebackup.c:578 -#: replication/basebackup.c:587 replication/basebackup.c:596 -#: replication/basebackup.c:605 replication/basebackup.c:616 +#: replication/basebackup.c:525 replication/basebackup.c:534 +#: replication/basebackup.c:543 replication/basebackup.c:552 +#: replication/basebackup.c:561 replication/basebackup.c:572 +#: replication/basebackup.c:589 #, c-format msgid "duplicate option \"%s\"" msgstr "opzione duplicata \"%s\"" -#: replication/basebackup.c:622 utils/misc/guc.c:5409 +#: replication/basebackup.c:578 utils/misc/guc.c:5492 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d non è compreso nell'intervallo di validità del il parametro \"%s\" (%d .. %d)" -#: replication/basebackup.c:879 replication/basebackup.c:972 +#: replication/basebackup.c:844 replication/basebackup.c:946 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "non è stato possibile ottenere informazioni sul file o directory \"%s\": %m" -#: replication/basebackup.c:1122 +#: replication/basebackup.c:1113 #, c-format msgid "skipping special file \"%s\"" msgstr "file speciale \"%s\" saltato" -#: replication/basebackup.c:1176 +#: replication/basebackup.c:1167 #, c-format msgid "archive member \"%s\" too large for tar format" msgstr "il membro \"%s\" dell'archivio è troppo grande per il formato tar" -#: replication/libpqwalreceiver/libpqwalreceiver.c:106 +#: replication/basebackup.c:1240 +#, c-format +msgid "file name too long for tar format: \"%s\"" +msgstr "nome del file troppo lungo per il formato tar: \"%s\"" + +#: replication/basebackup.c:1245 +#, c-format +msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" +msgstr "obiettivo del link simbolico troppo lungo per il formato tar: nome del file \"%s\", obiettivo \"%s\"" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:116 #, c-format msgid "could not connect to the primary server: %s" msgstr "connessione al server primario fallita: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:130 +#: replication/libpqwalreceiver/libpqwalreceiver.c:140 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "ricezione fallita dell'identificativo del database e l'ID della timeline dal server primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:141 -#: replication/libpqwalreceiver/libpqwalreceiver.c:294 +#: replication/libpqwalreceiver/libpqwalreceiver.c:151 +#: replication/libpqwalreceiver/libpqwalreceiver.c:305 #, c-format msgid "invalid response from primary server" msgstr "risposta non valida dal server primario" -#: replication/libpqwalreceiver/libpqwalreceiver.c:142 +#: replication/libpqwalreceiver/libpqwalreceiver.c:152 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "Identificazione del sistema non riuscita: ricevute %d righe and %d campi, attese %d righe e %d o più campi." -#: replication/libpqwalreceiver/libpqwalreceiver.c:158 +#: replication/libpqwalreceiver/libpqwalreceiver.c:168 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "l'identificativo del database è diverso tra il primario e lo standby" -#: replication/libpqwalreceiver/libpqwalreceiver.c:159 +#: replication/libpqwalreceiver/libpqwalreceiver.c:169 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "L'identificativo del primario è %s, quello dello standby è %s." -#: replication/libpqwalreceiver/libpqwalreceiver.c:201 +#: replication/libpqwalreceiver/libpqwalreceiver.c:211 #, c-format msgid "could not start WAL streaming: %s" msgstr "avvio dello streaming dei WAL fallito: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:219 +#: replication/libpqwalreceiver/libpqwalreceiver.c:229 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "invio del messaggio di fine stream al primario fallito: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:241 +#: replication/libpqwalreceiver/libpqwalreceiver.c:251 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "risultato imprevisto dopo la fine stream" -#: replication/libpqwalreceiver/libpqwalreceiver.c:253 +#: replication/libpqwalreceiver/libpqwalreceiver.c:263 #, c-format msgid "error reading result of streaming command: %s" msgstr "errore nella lettura del risultato del comando di streaming: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:260 +#: replication/libpqwalreceiver/libpqwalreceiver.c:271 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "risultato imprevisto dopo CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:283 +#: replication/libpqwalreceiver/libpqwalreceiver.c:294 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "errore nella ricezione del file di storia della timeline dal server primario: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:295 +#: replication/libpqwalreceiver/libpqwalreceiver.c:306 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Attesa una tupla con 2 campi, ricevute %d tuple con %d campi." -#: replication/libpqwalreceiver/libpqwalreceiver.c:323 +#: replication/libpqwalreceiver/libpqwalreceiver.c:334 #, c-format msgid "socket not open" msgstr "socket non aperto" -#: replication/libpqwalreceiver/libpqwalreceiver.c:496 -#: replication/libpqwalreceiver/libpqwalreceiver.c:519 -#: replication/libpqwalreceiver/libpqwalreceiver.c:525 +#: replication/libpqwalreceiver/libpqwalreceiver.c:507 +#: replication/libpqwalreceiver/libpqwalreceiver.c:530 +#: replication/libpqwalreceiver/libpqwalreceiver.c:536 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "ricezione dati dallo stream WAL fallita: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:544 +#: replication/libpqwalreceiver/libpqwalreceiver.c:555 #, c-format msgid "could not send data to WAL stream: %s" msgstr "invio dati allo stream WAL fallito: %s" -#: replication/logical/logical.c:81 +#: replication/logical/logical.c:80 #, c-format msgid "logical decoding requires wal_level >= logical" msgstr "la decodifica logica richiede wal_level >= logical" -#: replication/logical/logical.c:86 +#: replication/logical/logical.c:85 #, c-format msgid "logical decoding requires a database connection" msgstr "la decodifica logica richiede una connessione al database" -#: replication/logical/logical.c:104 +#: replication/logical/logical.c:103 #, c-format msgid "logical decoding cannot be used while in recovery" msgstr "la decodifica logica non può essere usata in modalità di recupero" -#: replication/logical/logical.c:230 replication/logical/logical.c:381 +#: replication/logical/logical.c:234 replication/logical/logical.c:338 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "non si possono usare slot di replica fisica per la decodifica logica" -#: replication/logical/logical.c:235 replication/logical/logical.c:386 +#: replication/logical/logical.c:239 replication/logical/logical.c:343 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "lo slot di replica \"%s\" non è stato creato in questo database" -#: replication/logical/logical.c:242 +#: replication/logical/logical.c:246 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "non si possono creare slot di replica logica in transazioni che hanno effettuato scritture" -#: replication/logical/logical.c:422 +#: replication/logical/logical.c:380 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "avvio della decodifica logica per lo slot \"%s\"" -#: replication/logical/logical.c:424 +#: replication/logical/logical.c:382 #, c-format msgid "streaming transactions committing after %X/%X, reading WAL from %X/%X" msgstr "commit dello streaming delle transazioni dopo %X/%X, lettura del wal a partire da %X/%X" -#: replication/logical/logical.c:559 +#: replication/logical/logical.c:517 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "slot \"%s\", plugin di output \"%s\", nel callback %s, LSN associato %X/%X" -#: replication/logical/logical.c:566 +#: replication/logical/logical.c:524 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "slot \"%s\", plugin di output \"%s\", nel callback %s" -#: replication/logical/logicalfuncs.c:190 replication/walsender.c:2123 +#: replication/logical/logicalfuncs.c:192 replication/walsender.c:2109 #, c-format msgid "could not read from log segment %s, offset %u, length %lu: %m" msgstr "lettura del segmento di log %s, posizione %u, lunghezza %lu fallita: %m" -#: replication/logical/logicalfuncs.c:209 replication/slotfuncs.c:32 +#: replication/logical/logicalfuncs.c:211 replication/slotfuncs.c:32 #, c-format msgid "must be superuser or replication role to use replication slots" msgstr "solo un superutente o il ruolo di replica può usare uno slot di replica" -#: replication/logical/logicalfuncs.c:339 +#: replication/logical/logicalfuncs.c:341 #, c-format msgid "array must be one-dimensional" msgstr "l'array deve essere monodimensionale" -#: replication/logical/logicalfuncs.c:345 +#: replication/logical/logicalfuncs.c:347 #, c-format msgid "array must not contain nulls" msgstr "l'array non deve contenere NULL" -#: replication/logical/logicalfuncs.c:361 utils/adt/json.c:2198 +#: replication/logical/logicalfuncs.c:363 utils/adt/json.c:2250 +#: utils/adt/jsonb.c:1369 #, c-format msgid "array must have even number of elements" msgstr "l'array deve avere un numero pari di elementi" -#: replication/logical/logicalfuncs.c:404 +#: replication/logical/logicalfuncs.c:406 #, c-format msgid "logical decoding output plugin \"%s\" produces binary output, but \"%s\" expects textual data" msgstr "il plugin di output di decodifica logica \"%s\" produce dati binari, ma \"%s\" si aspetta dati testuali" -#: replication/logical/reorderbuffer.c:2100 +#: replication/logical/origin.c:181 +#, c-format +msgid "only superusers can query or manipulate replication origins" +msgstr "solo i superutenti possono interrogare o replicare le origini di replica" + +#: replication/logical/origin.c:186 +#, c-format +msgid "cannot query or manipulate replication origin when max_replication_slots = 0" +msgstr "non è possibile interrogare o manipolare le origini di replica quando max_replication_slots = 0" + +#: replication/logical/origin.c:191 +#, c-format +msgid "cannot manipulate replication origins during recovery" +msgstr "non è possibile manipolare le origini di replica durante il recupero" + +#: replication/logical/origin.c:316 +#, c-format +msgid "no free replication origin oid could be found" +msgstr "non è stato trovato alcun oid di origine di replica libero" + +#: replication/logical/origin.c:353 +#, c-format +msgid "cannot drop replication origin with oid %d, in use by pid %d" +msgstr "impossibile eliminare l'origine di replica con oid %d, in uso dal pid %d" + +#: replication/logical/origin.c:690 +#, c-format +msgid "replication checkpoint has wrong magic %u instead of %u" +msgstr "il checkpoint di replica ha numero magico sbagliato %u invece di %u" + +#: replication/logical/origin.c:722 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "lettura del file \"%s\" fallita: letti %d di %zu" + +#: replication/logical/origin.c:731 +#, c-format +msgid "no free replication state could be found, increase max_replication_slots" +msgstr "nessuno stato di replica libero trovato, incrementa \"max_replication_slots\"" + +#: replication/logical/origin.c:749 +#, c-format +msgid "replication_slot_checkpoint has wrong checksum %u, expected %u" +msgstr "replication_slot_checkpoint ha il checksum sbagliato %u, atteso %u" + +#: replication/logical/origin.c:873 +#, c-format +msgid "replication origin with oid %d is already active for pid %d" +msgstr "l'origine di replica con oid %d è già attiva per il pid %d" + +#: replication/logical/origin.c:884 replication/logical/origin.c:1064 +#, c-format +msgid "no free replication state slot could be found for replication origin with oid %u" +msgstr "nessuno slot di stato di replica trovato per l'origine di replica con oid %u" + +#: replication/logical/origin.c:886 replication/logical/origin.c:1066 +#: replication/slot.c:1312 +#, c-format +msgid "Increase max_replication_slots and try again." +msgstr "Incrementa max_replication_slots e prova di nuovo." + +#: replication/logical/origin.c:1023 +#, c-format +msgid "cannot setup replication origin when one is already setup" +msgstr "non è possibile impostare l'origine di replica quando una è già impostata" + +#: replication/logical/origin.c:1052 +#, c-format +msgid "replication identiefer %d is already active for pid %d" +msgstr "l'identificatore di replica %d è già attivo per il pid %d" + +#: replication/logical/origin.c:1098 replication/logical/origin.c:1293 +#: replication/logical/origin.c:1313 +#, c-format +msgid "no replication origin is configured" +msgstr "nessuna origine di replica configurata" + +#: replication/logical/reorderbuffer.c:2170 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "scrittura nel file di dati per lo XID %u non riuscita: %m" -#: replication/logical/reorderbuffer.c:2196 -#: replication/logical/reorderbuffer.c:2216 +#: replication/logical/reorderbuffer.c:2266 +#: replication/logical/reorderbuffer.c:2286 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "lettura dal file spill reorderbuffer non riuscita: %m" -#: replication/logical/reorderbuffer.c:2200 -#: replication/logical/reorderbuffer.c:2220 +#: replication/logical/reorderbuffer.c:2270 +#: replication/logical/reorderbuffer.c:2290 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "lettura dal file spill reorderbuffer non riuscita: letti %d byte invece di %u" -#: replication/logical/reorderbuffer.c:2826 +#: replication/logical/reorderbuffer.c:2894 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "lettura dal file \"%s\" non riuscita: letti %d byte invece di %d" -#: replication/logical/snapbuild.c:601 +#: replication/logical/snapbuild.c:600 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs" @@ -13521,122 +14727,117 @@ msgstr "La decodifica logica inizierà usando uno snapshot salvato." msgid "could not parse file name \"%s\"" msgstr "interpretazione del nome di file \"%s\" fallita" -#: replication/slot.c:173 +#: replication/slot.c:175 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "il nome dello slot di replica \"%s\" è troppo corto" -#: replication/slot.c:182 +#: replication/slot.c:184 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "il nome dello slot di replica \"%s\" è troppo lungo" -#: replication/slot.c:195 +#: replication/slot.c:197 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "il nome dello slot di replica \"%s\" contiene caratteri non validi" -#: replication/slot.c:197 +#: replication/slot.c:199 #, c-format msgid "Replication slot names may only contain letters, numbers, and the underscore character." msgstr "I nomi degli slot di replica possono contenere solo lettere, numeri e il carattere underscore." -#: replication/slot.c:244 +#: replication/slot.c:246 #, c-format msgid "replication slot \"%s\" already exists" msgstr "lo slot di replica \"%s\" esiste già" -#: replication/slot.c:254 +#: replication/slot.c:256 #, c-format msgid "all replication slots are in use" msgstr "tutti gli slot di replica sono in uso" -#: replication/slot.c:255 +#: replication/slot.c:257 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Liberane uno o incrementa max_replication_slots." -#: replication/slot.c:347 +#: replication/slot.c:349 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "lo slot di replica \"%s\" non esiste" -#: replication/slot.c:351 +#: replication/slot.c:353 #, c-format -msgid "replication slot \"%s\" is already active" -msgstr "lo slot di replica \"%s\" è già attivo" +msgid "replication slot \"%s\" is already active for pid %d" +msgstr "lo slot di replica \"%s\" è già attivo per il pid %d" -#: replication/slot.c:499 replication/slot.c:873 replication/slot.c:1218 +#: replication/slot.c:502 replication/slot.c:928 replication/slot.c:1273 #, c-format msgid "could not remove directory \"%s\"" msgstr "eliminazione della directory \"%s\" fallita" -#: replication/slot.c:774 +#: replication/slot.c:777 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "gli slot di replica possono essere usati solo se max_replication_slots > 0" -#: replication/slot.c:779 +#: replication/slot.c:782 #, c-format msgid "replication slots can only be used if wal_level >= archive" msgstr "gli slot di replica possono essere usati solo se wal_level >= archive" -#: replication/slot.c:1150 replication/slot.c:1188 +#: replication/slot.c:1205 replication/slot.c:1243 #, c-format msgid "could not read file \"%s\", read %d of %u: %m" msgstr "lettura del file \"%s\" fallita, letti %d su %u: %m" -#: replication/slot.c:1159 +#: replication/slot.c:1214 #, c-format msgid "replication slot file \"%s\" has wrong magic %u instead of %u" msgstr "il file dello slot di replica \"%s\" ha il numero magico sbagliato %u invece di %u" -#: replication/slot.c:1166 +#: replication/slot.c:1221 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "il file dello slot di replica \"%s\" ha la versione non supportata %u" -#: replication/slot.c:1173 +#: replication/slot.c:1228 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "il file dello slot di replica \"%s\" ha la lunghezza corrotta %u" -#: replication/slot.c:1203 +#: replication/slot.c:1258 #, c-format msgid "replication slot file %s: checksum mismatch, is %u, should be %u" msgstr "file dello slot di replica %s: il checksum %u non combacia, sarebbe dovuto essere %u" -#: replication/slot.c:1256 +#: replication/slot.c:1311 #, c-format msgid "too many replication slots active before shutdown" msgstr "troppi slot di replica attivi prima dell'arresto" -#: replication/slot.c:1257 -#, c-format -msgid "Increase max_replication_slots and try again." -msgstr "Incrementa max_replication_slots e prova di nuovo." - -#: replication/syncrep.c:208 +#: replication/syncrep.c:199 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "annullamento dell'attesa di replica sincrona ed interruzione della connessione su comando dell'amministratore" -#: replication/syncrep.c:209 replication/syncrep.c:226 +#: replication/syncrep.c:200 replication/syncrep.c:217 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "La transazione ha già effettuato il commit localmente, ma potrebbe non essere stata replicata agli standby." -#: replication/syncrep.c:225 +#: replication/syncrep.c:216 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "annullamento dell'attesa di replica sincrona su richiesta utente" -#: replication/syncrep.c:355 +#: replication/syncrep.c:346 #, c-format msgid "standby \"%s\" now has synchronous standby priority %u" msgstr "lo standby \"%s\" ha ora priorità di standby sincrono %u" -#: replication/syncrep.c:457 +#: replication/syncrep.c:480 #, c-format msgid "standby \"%s\" is now the synchronous standby with priority %u" msgstr "lo standby \"%s\" è ora in standby sincrono con priorità %u" @@ -13646,57 +14847,57 @@ msgstr "lo standby \"%s\" è ora in standby sincrono con priorità %u" msgid "terminating walreceiver process due to administrator command" msgstr "interruzione del processo walreceiver su comando dell'amministratore" -#: replication/walreceiver.c:332 +#: replication/walreceiver.c:321 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "la timeline massima %u del primario è dietro la timeline di recupero %u" -#: replication/walreceiver.c:367 +#: replication/walreceiver.c:356 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "streaming WAL avviato dal primario a %X/%X sulla timeline %u" -#: replication/walreceiver.c:372 +#: replication/walreceiver.c:361 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "streaming WAL riavviato sulla timeline %X/%X sulla timeline %u" -#: replication/walreceiver.c:406 +#: replication/walreceiver.c:395 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "non è possibile continuare lo streaming dei WAL, il recupero è già terminato" -#: replication/walreceiver.c:443 +#: replication/walreceiver.c:432 #, c-format msgid "replication terminated by primary server" msgstr "replica terminata dal server primario" -#: replication/walreceiver.c:444 +#: replication/walreceiver.c:433 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "Fine del WAL raggiunta sulla timeline %u a %X/%X." -#: replication/walreceiver.c:491 +#: replication/walreceiver.c:480 #, c-format msgid "terminating walreceiver due to timeout" msgstr "walreceiver terminato a causa di timeout" -#: replication/walreceiver.c:531 +#: replication/walreceiver.c:520 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "il server primario non contiene più alcun WAL sulla timeline richiesta %u" -#: replication/walreceiver.c:546 replication/walreceiver.c:903 +#: replication/walreceiver.c:535 replication/walreceiver.c:895 #, c-format msgid "could not close log segment %s: %m" msgstr "chiusura del segmento di log %s fallita: %m" -#: replication/walreceiver.c:668 +#: replication/walreceiver.c:660 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "recupero del file di storia della timeline %u dal server primario" -#: replication/walreceiver.c:954 +#: replication/walreceiver.c:949 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "scrittura nel segmento di log %s in posizione %u, lunghezza %lu fallita: %m" @@ -13726,384 +14927,417 @@ msgstr "La storia di questo server si è separata dalla timeline %u a %X/%X." msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "il punto di avvio richiesto %X/%X è più avanti della posizione di flush del WAL %X/%X di questo server" -#: replication/walsender.c:947 +#: replication/walsender.c:948 #, c-format msgid "terminating walsender process after promotion" msgstr "interruzione del processo walsender dopo la promozione" -#: replication/walsender.c:1362 replication/walsender.c:1412 -#: replication/walsender.c:1461 +#: replication/walsender.c:1275 +#, c-format +msgid "received replication command: %s" +msgstr "ricevuto comando di replica: %s" + +#: replication/walsender.c:1368 replication/walsender.c:1384 #, c-format msgid "unexpected EOF on standby connection" msgstr "fine del file inaspettato sulla connessione di standby" -#: replication/walsender.c:1381 +#: replication/walsender.c:1398 #, c-format msgid "unexpected standby message type \"%c\", after receiving CopyDone" msgstr "tipo di messaggio di standby \"%c\" imprevisto, dopo la ricezione di CopyDone" -#: replication/walsender.c:1429 +#: replication/walsender.c:1436 #, c-format msgid "invalid standby message type \"%c\"" msgstr "tipo di messaggio \"%c\" di standby non valido" -#: replication/walsender.c:1483 +#: replication/walsender.c:1477 #, c-format msgid "unexpected message type \"%c\"" msgstr "tipo di messaggio \"%c\" inatteso" -#: replication/walsender.c:1770 +#: replication/walsender.c:1764 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "interruzione del processo walsender a causa di timeout di replica" -#: replication/walsender.c:1863 +#: replication/walsender.c:1857 #, c-format msgid "standby \"%s\" has now caught up with primary" msgstr "lo standby \"%s\" ha ora raggiunto il primario" -#: replication/walsender.c:1967 +#: replication/walsender.c:1958 #, c-format msgid "number of requested standby connections exceeds max_wal_senders (currently %d)" msgstr "il numero di richieste di connessioni di standby supera max_wal_senders (attualmente %d)" -#: rewrite/rewriteDefine.c:111 rewrite/rewriteDefine.c:942 +#: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:961 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "la regola \"%s\" per la relazione \"%s\" esiste già" -#: rewrite/rewriteDefine.c:295 +#: rewrite/rewriteDefine.c:297 #, c-format msgid "rule actions on OLD are not implemented" msgstr "le regole di azione su OLD non sono implementate" -#: rewrite/rewriteDefine.c:296 +#: rewrite/rewriteDefine.c:298 #, c-format msgid "Use views or triggers instead." msgstr "Usa le viste o i trigger invece." -#: rewrite/rewriteDefine.c:300 +#: rewrite/rewriteDefine.c:302 #, c-format msgid "rule actions on NEW are not implemented" msgstr "le regole di azione su NEW non sono implementate" -#: rewrite/rewriteDefine.c:301 +#: rewrite/rewriteDefine.c:303 #, c-format msgid "Use triggers instead." msgstr "Usa i trigger invece." -#: rewrite/rewriteDefine.c:314 +#: rewrite/rewriteDefine.c:316 #, c-format msgid "INSTEAD NOTHING rules on SELECT are not implemented" msgstr "le regole INSTEAD NOTHING su SELECT non sono implementate" -#: rewrite/rewriteDefine.c:315 +#: rewrite/rewriteDefine.c:317 #, c-format msgid "Use views instead." msgstr "Usa le viste invece." -#: rewrite/rewriteDefine.c:323 +#: rewrite/rewriteDefine.c:325 #, c-format msgid "multiple actions for rules on SELECT are not implemented" msgstr "avere più di una azione per le regole su SELECT non è implementato" -#: rewrite/rewriteDefine.c:334 +#: rewrite/rewriteDefine.c:336 #, c-format msgid "rules on SELECT must have action INSTEAD SELECT" msgstr "le regole su SELECT devono avere un'azione INSTEAD SELECT" -#: rewrite/rewriteDefine.c:342 +#: rewrite/rewriteDefine.c:344 #, c-format msgid "rules on SELECT must not contain data-modifying statements in WITH" msgstr "le regole su SELECT non possono contenere istruzioni di modifica dei dati nel WITH" -#: rewrite/rewriteDefine.c:350 +#: rewrite/rewriteDefine.c:352 #, c-format msgid "event qualifications are not implemented for rules on SELECT" msgstr "le qualificazioni di evento non sono implementate per le regole su SELECT" -#: rewrite/rewriteDefine.c:377 +#: rewrite/rewriteDefine.c:379 #, c-format msgid "\"%s\" is already a view" msgstr "\"%s\" è già una vista" -#: rewrite/rewriteDefine.c:401 +#: rewrite/rewriteDefine.c:403 #, c-format msgid "view rule for \"%s\" must be named \"%s\"" msgstr "la regola della vista \"%s\" deve essere chiamata \"%s\"" -#: rewrite/rewriteDefine.c:429 +#: rewrite/rewriteDefine.c:432 #, c-format msgid "could not convert table \"%s\" to a view because it is not empty" msgstr "conversione della tabella \"%s\" in vista fallita perché non è vuota" -#: rewrite/rewriteDefine.c:437 +#: rewrite/rewriteDefine.c:440 #, c-format msgid "could not convert table \"%s\" to a view because it has triggers" msgstr "conversione della tabella \"%s\" in vista fallita perché ha dei trigger" -#: rewrite/rewriteDefine.c:439 +#: rewrite/rewriteDefine.c:442 #, c-format msgid "In particular, the table cannot be involved in any foreign key relationships." msgstr "In particolare, la tabella non può prendere parte in alcuna relazione di chiave esterna." -#: rewrite/rewriteDefine.c:444 +#: rewrite/rewriteDefine.c:447 #, c-format msgid "could not convert table \"%s\" to a view because it has indexes" msgstr "conversione della tabella \"%s\" in vista fallita perché ha indici" -#: rewrite/rewriteDefine.c:450 +#: rewrite/rewriteDefine.c:453 #, c-format msgid "could not convert table \"%s\" to a view because it has child tables" msgstr "conversione della tabella \"%s\" in vista fallita perché ha tabelle figlie" -#: rewrite/rewriteDefine.c:477 +#: rewrite/rewriteDefine.c:459 +#, c-format +msgid "could not convert table \"%s\" to a view because it has row security enabled" +msgstr "conversione della tabella \"%s\" in vista fallita perché ha la sicurezza delle righe abilitata" + +#: rewrite/rewriteDefine.c:465 +#, c-format +msgid "could not convert table \"%s\" to a view because it has row security policies" +msgstr "conversione della tabella \"%s\" in vista fallita perché ha politiche di sicurezza delle righe" + +#: rewrite/rewriteDefine.c:492 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "non è possibile avere più di una lista RETURNING in una regola" -#: rewrite/rewriteDefine.c:482 +#: rewrite/rewriteDefine.c:497 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "le liste RETURNING non sono supportate in regole condizionali" -#: rewrite/rewriteDefine.c:486 +#: rewrite/rewriteDefine.c:501 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "le liste RETURNING non sono supportate in regole che non siano INSTEAD" -#: rewrite/rewriteDefine.c:649 +#: rewrite/rewriteDefine.c:667 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "la lista di destinazione della regola SELECT ha troppi elementi" -#: rewrite/rewriteDefine.c:650 +#: rewrite/rewriteDefine.c:668 #, c-format msgid "RETURNING list has too many entries" msgstr "la lista RETURNING ha troppi elementi" -#: rewrite/rewriteDefine.c:666 +#: rewrite/rewriteDefine.c:684 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "non è possibile convertire una relazione contenente colonne eliminate in una vista" -#: rewrite/rewriteDefine.c:672 +#: rewrite/rewriteDefine.c:690 #, c-format msgid "SELECT rule's target entry %d has different column name from column \"%s\"" msgstr "elemento di destinazione %d della regola SELECT ha nome di colonna diverso dalla colonna \"%s\"" -#: rewrite/rewriteDefine.c:674 +#: rewrite/rewriteDefine.c:692 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "L'elemento di destinazione di SELECT si chiama \"%s\"." -#: rewrite/rewriteDefine.c:683 +#: rewrite/rewriteDefine.c:701 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "l'elemento %d di destinazione della regola SELECT è di tipo diverso dalla colonna \"%s\"" -#: rewrite/rewriteDefine.c:685 +#: rewrite/rewriteDefine.c:703 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "l'elemento %d della lista RETURNING è di tipo diverso dalla colonna \"%s\"" -#: rewrite/rewriteDefine.c:688 rewrite/rewriteDefine.c:712 +#: rewrite/rewriteDefine.c:706 rewrite/rewriteDefine.c:730 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "L'elemento di destinazione di SELECT è di tipo %s, ma la colonna è di tipo %s." -#: rewrite/rewriteDefine.c:691 rewrite/rewriteDefine.c:716 +#: rewrite/rewriteDefine.c:709 rewrite/rewriteDefine.c:734 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "la lista di elementi di RETURNING è di tipo %s, ma la colonna è di tipo %s." -#: rewrite/rewriteDefine.c:707 +#: rewrite/rewriteDefine.c:725 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "l'elemento %d di destinazione della regola SELECT ha dimensione diversa dalla colonna \"%s\"" -#: rewrite/rewriteDefine.c:709 +#: rewrite/rewriteDefine.c:727 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "l'elemento %d della lista RETURNING ha dimensione diversa dalla colonna \"%s\"" -#: rewrite/rewriteDefine.c:726 +#: rewrite/rewriteDefine.c:744 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "la lista di destinazione della regola SELECT ha troppi pochi elementi" -#: rewrite/rewriteDefine.c:727 +#: rewrite/rewriteDefine.c:745 #, c-format msgid "RETURNING list has too few entries" msgstr "la lista RETURNING ha troppi pochi elementi" -#: rewrite/rewriteDefine.c:819 rewrite/rewriteDefine.c:933 +#: rewrite/rewriteDefine.c:837 rewrite/rewriteDefine.c:952 #: rewrite/rewriteSupport.c:112 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "la regola \"%s\" per la relazione \"%s\" non esiste" -#: rewrite/rewriteDefine.c:952 +#: rewrite/rewriteDefine.c:971 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "non è consentire rinominare una regola ON SELECT" -#: rewrite/rewriteHandler.c:512 +#: rewrite/rewriteHandler.c:521 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "la query WITH \"%s\" appare sia in una regola di azione che nella query che deve essere riscritta" -#: rewrite/rewriteHandler.c:572 +#: rewrite/rewriteHandler.c:581 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "non è possibile avere liste RETURNING in più di una regola" -#: rewrite/rewriteHandler.c:910 rewrite/rewriteHandler.c:928 +#: rewrite/rewriteHandler.c:921 rewrite/rewriteHandler.c:939 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "più di un assegnamento alla stessa colonna \"%s\"" -#: rewrite/rewriteHandler.c:1698 rewrite/rewriteHandler.c:3129 +#: rewrite/rewriteHandler.c:1714 rewrite/rewriteHandler.c:3272 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "ricorsione infinita individuata nelle regole per la relazione \"%s\"" -#: rewrite/rewriteHandler.c:1995 +#: rewrite/rewriteHandler.c:1797 +#, c-format +msgid "infinite recursion detected in policy for relation \"%s\"" +msgstr "ricorsione infinita individuata nella politica per la relazione \"%s\"" + +#: rewrite/rewriteHandler.c:2094 msgid "Junk view columns are not updatable." msgstr "Le colonne junk di una vista non sono aggiornabili." -#: rewrite/rewriteHandler.c:2000 +#: rewrite/rewriteHandler.c:2099 msgid "View columns that are not columns of their base relation are not updatable." msgstr "Le colonne di vista che non sono colonne della loro relazione di base non sono aggiornabili." -#: rewrite/rewriteHandler.c:2003 +#: rewrite/rewriteHandler.c:2102 msgid "View columns that refer to system columns are not updatable." msgstr "Le colonne di vista che si riferiscono a colonne di sistema non sono aggiornabili." -#: rewrite/rewriteHandler.c:2006 +#: rewrite/rewriteHandler.c:2105 msgid "View columns that return whole-row references are not updatable." msgstr "Le colonne di vista che restituiscono riferimenti a righe intere non sono aggiornabili." -#: rewrite/rewriteHandler.c:2064 +#: rewrite/rewriteHandler.c:2163 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Le viste contenenti DISTINCT non sono aggiornabili automaticamente." -#: rewrite/rewriteHandler.c:2067 +#: rewrite/rewriteHandler.c:2166 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Le viste contenenti GROUP BY non sono aggiornabili automaticamente." -#: rewrite/rewriteHandler.c:2070 +#: rewrite/rewriteHandler.c:2169 msgid "Views containing HAVING are not automatically updatable." msgstr "Le viste contenenti HAVING non sono aggiornabili automaticamente." -#: rewrite/rewriteHandler.c:2073 +#: rewrite/rewriteHandler.c:2172 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "Le viste che contengono UNION, INTERSECT o EXCEPT non sono automaticamente aggiornabili." -#: rewrite/rewriteHandler.c:2076 +#: rewrite/rewriteHandler.c:2175 msgid "Views containing WITH are not automatically updatable." msgstr "Le viste contenenti WITH non sono aggiornabili automaticamente." -#: rewrite/rewriteHandler.c:2079 +#: rewrite/rewriteHandler.c:2178 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Le viste contenenti LIMIT o OFFSET non sono aggiornabili automaticamente." -#: rewrite/rewriteHandler.c:2091 +#: rewrite/rewriteHandler.c:2190 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Le viste che restituiscono funzioni di aggregazione non sono aggiornabili automaticamente." -#: rewrite/rewriteHandler.c:2094 +#: rewrite/rewriteHandler.c:2193 msgid "Views that return window functions are not automatically updatable." msgstr "Le viste che restituiscono funzioni finestra non sono aggiornabili automaticamente." -#: rewrite/rewriteHandler.c:2097 +#: rewrite/rewriteHandler.c:2196 msgid "Views that return set-returning functions are not automatically updatable." msgstr "Le viste che restituiscono funzioni insieme non sono aggiornabili automaticamente" -#: rewrite/rewriteHandler.c:2104 rewrite/rewriteHandler.c:2108 -#: rewrite/rewriteHandler.c:2115 +#: rewrite/rewriteHandler.c:2203 rewrite/rewriteHandler.c:2207 +#: rewrite/rewriteHandler.c:2214 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "Le viste che non leggono da una singola tabella o vista non sono aggiornabili automaticamente." -#: rewrite/rewriteHandler.c:2139 +#: rewrite/rewriteHandler.c:2217 +msgid "Views containing TABLESAMPLE are not automatically updatable." +msgstr "Le viste che contengono TABLESAMPLE non sono automaticamente aggiornabili." + +#: rewrite/rewriteHandler.c:2241 msgid "Views that have no updatable columns are not automatically updatable." msgstr "Le viste che non hanno colonne aggiornabili non sono automaticamente aggiornabili." -#: rewrite/rewriteHandler.c:2576 +#: rewrite/rewriteHandler.c:2688 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "non si può inserire nella colonna \"%s\" della vista \"%s\"" -#: rewrite/rewriteHandler.c:2584 +#: rewrite/rewriteHandler.c:2696 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "non si può modificare la colonna \"%s\" della vista \"%s\"" -#: rewrite/rewriteHandler.c:2952 +#: rewrite/rewriteHandler.c:3071 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "le regole DO INSTEAD NOTHING non sono supportate per istruzioni di modifica dei dati nel WITH" -#: rewrite/rewriteHandler.c:2966 +#: rewrite/rewriteHandler.c:3085 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "le regole DO INSTEAD NOTHING condizionali non sono supportate per istruzioni di modifica dei dati nel WITH" -#: rewrite/rewriteHandler.c:2970 +#: rewrite/rewriteHandler.c:3089 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "le regole DO ALSO non sono supportate per istruzioni di modifica dei dati nel WITH" -#: rewrite/rewriteHandler.c:2975 +#: rewrite/rewriteHandler.c:3094 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "le regole DO INSTEAD multi-istruzione non sono supportate per istruzioni di modifica dei dati nel WITH" -#: rewrite/rewriteHandler.c:3166 +#: rewrite/rewriteHandler.c:3309 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "non è possibile eseguire INSERT RETURNING sulla relazione \"%s\"" -#: rewrite/rewriteHandler.c:3168 +#: rewrite/rewriteHandler.c:3311 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "È necessaria una regola ON INSERT DO INSTEAD non condizionale con una clausola RETURNING." -#: rewrite/rewriteHandler.c:3173 +#: rewrite/rewriteHandler.c:3316 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "non è possibile eseguire UPDATE RETURNING sulla relazione \"%s\"" -#: rewrite/rewriteHandler.c:3175 +#: rewrite/rewriteHandler.c:3318 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "È necessaria una regola ON UPDATE DO INSTEAD non condizionale con una clausola RETURNING." -#: rewrite/rewriteHandler.c:3180 +#: rewrite/rewriteHandler.c:3323 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "non è possibile eseguire DELETE RETURNING sulla relazione \"%s\"" -#: rewrite/rewriteHandler.c:3182 +#: rewrite/rewriteHandler.c:3325 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "È necessaria una regola ON DELETE DO INSTEAD non condizionale con una clausola RETURNING." -#: rewrite/rewriteHandler.c:3246 +#: rewrite/rewriteHandler.c:3343 +#, c-format +msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" +msgstr "INSERT con clausola ON CONFLICT non può essere usato in tabelle con una regola su INSERT o UPDATE" + +#: rewrite/rewriteHandler.c:3400 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH non può essere usato in una query che viene riscritta da regole in più di una query" -#: rewrite/rewriteManip.c:956 +#: rewrite/rewriteManip.c:1006 #, c-format msgid "conditional utility statements are not implemented" msgstr "i comandi di utilità condizionali non sono implementati" -#: rewrite/rewriteManip.c:1121 +#: rewrite/rewriteManip.c:1172 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "WHERE CURRENT OF su una vista non è implementato" +#: rewrite/rewriteManip.c:1437 +#, 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 "la variabile NEW nelle regole ON UPDATE non può riferirsi a colonne che fanno parte di un assegnamento multiplo nel comando UPDATE soggetto" + #: rewrite/rewriteSupport.c:154 #, c-format msgid "rule \"%s\" does not exist" @@ -14119,63 +15353,63 @@ msgstr "esiste più di una regola chiamata \"%s\"" msgid "Specify a relation name as well as a rule name." msgstr "Specifica sia un nome di relazione che un nome di regola." -#: snowball/dict_snowball.c:180 +#: snowball/dict_snowball.c:177 #, c-format msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" msgstr "non è disponibile uno stemmer Snowball per la lingua \"%s\" e la codifica \"%s\"" -#: snowball/dict_snowball.c:203 tsearch/dict_ispell.c:73 +#: snowball/dict_snowball.c:200 tsearch/dict_ispell.c:73 #: tsearch/dict_simple.c:48 #, c-format msgid "multiple StopWords parameters" msgstr "più di un parametro StopWords" -#: snowball/dict_snowball.c:212 +#: snowball/dict_snowball.c:209 #, c-format msgid "multiple Language parameters" msgstr "più di un parametro Language" -#: snowball/dict_snowball.c:219 +#: snowball/dict_snowball.c:216 #, c-format msgid "unrecognized Snowball parameter: \"%s\"" msgstr "parametro Snowball sconosciuto: \"%s\"" -#: snowball/dict_snowball.c:227 +#: snowball/dict_snowball.c:224 #, c-format msgid "missing Language parameter" msgstr "parametro Language mancante" -#: storage/buffer/bufmgr.c:139 storage/buffer/bufmgr.c:252 +#: storage/buffer/bufmgr.c:442 storage/buffer/bufmgr.c:555 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "non è possibile accedere a tabelle temporanee di altre sessioni" -#: storage/buffer/bufmgr.c:401 +#: storage/buffer/bufmgr.c:704 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "dati oltre fine file inaspettati nel blocco %u della relazione %s" -#: storage/buffer/bufmgr.c:403 +#: storage/buffer/bufmgr.c:706 #, c-format msgid "This has been seen to occur with buggy kernels; consider updating your system." msgstr "Questo fenomeno è stato riportato con kernel difettosi: considera l'aggiornamento del tuo sistema." -#: storage/buffer/bufmgr.c:493 +#: storage/buffer/bufmgr.c:793 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "pagina non valida nel blocco %u della relazione %s; azzeramento della pagina" -#: storage/buffer/bufmgr.c:3178 +#: storage/buffer/bufmgr.c:3569 #, c-format msgid "could not write block %u of %s" msgstr "scrittura del blocco %u di %s fallita" -#: storage/buffer/bufmgr.c:3180 +#: storage/buffer/bufmgr.c:3571 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Più di un fallimento --- l'errore in scrittura potrebbe essere permanente." -#: storage/buffer/bufmgr.c:3201 storage/buffer/bufmgr.c:3220 +#: storage/buffer/bufmgr.c:3592 storage/buffer/bufmgr.c:3611 #, c-format msgid "writing block %u of relation %s" msgstr "scrittura del blocco %u della relazione %s" @@ -14185,53 +15419,53 @@ msgstr "scrittura del blocco %u della relazione %s" msgid "no empty local buffer available" msgstr "nessun buffer locale vuoto disponibile" -#: storage/file/fd.c:505 +#: storage/file/fd.c:528 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit fallito: %m" -#: storage/file/fd.c:595 +#: storage/file/fd.c:618 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "descrittori di file non sufficienti per avviare il processo server" -#: storage/file/fd.c:596 +#: storage/file/fd.c:619 #, c-format msgid "System allows %d, we need at least %d." msgstr "Il sistema ne consente %d, ne occorrono almeno %d." -#: storage/file/fd.c:637 storage/file/fd.c:1671 storage/file/fd.c:1764 -#: storage/file/fd.c:1912 +#: storage/file/fd.c:660 storage/file/fd.c:1694 storage/file/fd.c:1787 +#: storage/file/fd.c:1935 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "descrittori di file esauriti: %m; sto rilasciando e riprovando" -#: storage/file/fd.c:1211 +#: storage/file/fd.c:1234 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "file temporaneo: percorso \"%s\", dimensione %lu" -#: storage/file/fd.c:1360 +#: storage/file/fd.c:1383 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "la dimensione del file temporaneo supera temp_file_limit (%dkB)" -#: storage/file/fd.c:1647 storage/file/fd.c:1697 +#: storage/file/fd.c:1670 storage/file/fd.c:1720 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "maxAllocatedDescs (%d) superato tentando di aprire il file \"%s\"" -#: storage/file/fd.c:1737 +#: storage/file/fd.c:1760 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "maxAllocatedDescs (%d) superato tentando di eseguire il comando \"%s\"" -#: storage/file/fd.c:1888 +#: storage/file/fd.c:1911 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "maxAllocatedDescs (%d) superato tentando di aprire la directory \"%s\"" -#: storage/file/fd.c:1961 +#: storage/file/fd.c:1997 #, c-format msgid "could not read directory \"%s\": %m" msgstr "lettura della directory \"%s\" fallita: %m" @@ -14256,7 +15490,7 @@ msgstr "Imposta dynamic_shared_memory_type ad un valore diverso da \"none\"." msgid "dynamic shared memory control segment is not valid" msgstr "il segmento di controllo della memoria dinamica condivisa non è valido" -#: storage/ipc/dsm.c:501 +#: storage/ipc/dsm.c:516 #, c-format msgid "too many dynamic shared memory segments" msgstr "troppi segmenti di memoria dinamica condivisa" @@ -14314,11 +15548,11 @@ msgid "could not duplicate handle for \"%s\": %m" msgstr "duplicazione dell'handle per \"%s\" fallita: %m" #: storage/ipc/shm_toc.c:108 storage/ipc/shm_toc.c:189 storage/ipc/shmem.c:205 -#: storage/lmgr/lock.c:872 storage/lmgr/lock.c:906 storage/lmgr/lock.c:2601 -#: storage/lmgr/lock.c:3713 storage/lmgr/lock.c:3778 storage/lmgr/lock.c:4068 -#: storage/lmgr/predicate.c:2323 storage/lmgr/predicate.c:2338 -#: storage/lmgr/predicate.c:3731 storage/lmgr/predicate.c:4874 -#: storage/lmgr/proc.c:198 utils/hash/dynahash.c:966 +#: storage/lmgr/lock.c:867 storage/lmgr/lock.c:901 storage/lmgr/lock.c:2596 +#: storage/lmgr/lock.c:3712 storage/lmgr/lock.c:3777 storage/lmgr/lock.c:4067 +#: storage/lmgr/predicate.c:2328 storage/lmgr/predicate.c:2343 +#: storage/lmgr/predicate.c:3736 storage/lmgr/predicate.c:4879 +#: storage/lmgr/proc.c:201 utils/hash/dynahash.c:998 #, c-format msgid "out of shared memory" msgstr "memoria condivisa esaurita" @@ -14343,12 +15577,12 @@ msgstr "dimensione elemento ShmemIndex errata per la struttura di dati \"%s\": a msgid "requested shared memory size overflows size_t" msgstr "la dimensione richiesta di memoria condivisa supera size_t" -#: storage/ipc/standby.c:499 tcop/postgres.c:2952 +#: storage/ipc/standby.c:500 tcop/postgres.c:2974 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "annullamento dell'istruzione a causa di un conflitto con il ripristino" -#: storage/ipc/standby.c:500 tcop/postgres.c:2216 +#: storage/ipc/standby.c:501 tcop/postgres.c:2274 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "La transazione utente ha causato un deadlock del buffer con il ripristino." @@ -14368,7 +15602,7 @@ msgstr "flag non validi per l'apertura di un large object: %d" msgid "invalid whence setting: %d" msgstr "impostazione \"da dove\" non valida: %d" -#: storage/large_object/inv_api.c:591 +#: storage/large_object/inv_api.c:593 #, c-format msgid "invalid large object write request size: %d" msgstr "dimensione della richiesta di scrittura large object non valida: %d" @@ -14393,237 +15627,253 @@ msgstr "rilevato deadlock" msgid "See server log for query details." msgstr "Vedi i log del server per i dettagli della query." -#: storage/lmgr/lmgr.c:599 +#: storage/lmgr/lmgr.c:684 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "durante la modifica della tupla (%u,%u) nella relazione \"%s\"" -#: storage/lmgr/lmgr.c:602 +#: storage/lmgr/lmgr.c:687 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "durante l'eliminazione della tupla (%u,%u) nella relazione \"%s\"" -#: storage/lmgr/lmgr.c:605 +#: storage/lmgr/lmgr.c:690 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "durante il blocco della tupla (%u,%u) nella relazione \"%s\"" -#: storage/lmgr/lmgr.c:608 +#: storage/lmgr/lmgr.c:693 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "durante il blocco della versione modificata (%u,%u) della tupla nella relazione \"%s\"" -#: storage/lmgr/lmgr.c:611 +#: storage/lmgr/lmgr.c:696 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "durante l'inserimento della tupla di indice (%u,%u) nella relazione \"%s\"" -#: storage/lmgr/lmgr.c:614 +#: storage/lmgr/lmgr.c:699 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "durante il controllo di univocità della tupla (%u,%u) nella relazione \"%s\"" -#: storage/lmgr/lmgr.c:617 +#: storage/lmgr/lmgr.c:702 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "durante il ricontrollo della tupla modificata (%u,%u) nella relazione \"%s\"" -#: storage/lmgr/lmgr.c:620 +#: storage/lmgr/lmgr.c:705 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "durante il controllo del vincolo di esclusione sulla tupla (%u,%u) nella relazione \"%s\"" -#: storage/lmgr/lmgr.c:840 +#: storage/lmgr/lmgr.c:925 #, c-format msgid "relation %u of database %u" msgstr "la relazione %u del database %u" -#: storage/lmgr/lmgr.c:846 +#: storage/lmgr/lmgr.c:931 #, c-format msgid "extension of relation %u of database %u" msgstr "l'estensione della relazione %u del database %u" -#: storage/lmgr/lmgr.c:852 +#: storage/lmgr/lmgr.c:937 #, c-format msgid "page %u of relation %u of database %u" msgstr "la pagina %u della relazione %u del database %u" -#: storage/lmgr/lmgr.c:859 +#: storage/lmgr/lmgr.c:944 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "la tupla (%u,%u) della relazione %u del database %u" -#: storage/lmgr/lmgr.c:867 +#: storage/lmgr/lmgr.c:952 #, c-format msgid "transaction %u" msgstr "la transazione %u" -#: storage/lmgr/lmgr.c:872 +#: storage/lmgr/lmgr.c:957 #, c-format msgid "virtual transaction %d/%u" msgstr "la transazione virtuale %d/%u" -#: storage/lmgr/lmgr.c:878 +#: storage/lmgr/lmgr.c:963 +#, c-format +msgid "speculative token %u of transaction %u" +msgstr "token speculativo %u della transazione %u" + +#: storage/lmgr/lmgr.c:969 #, c-format msgid "object %u of class %u of database %u" msgstr "l'oggetto %u di classe %u del database %u" -#: storage/lmgr/lmgr.c:886 +#: storage/lmgr/lmgr.c:977 #, c-format msgid "user lock [%u,%u,%u]" msgstr "il lock utente [%u,%u,%u]" -#: storage/lmgr/lmgr.c:893 +#: storage/lmgr/lmgr.c:984 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "l'advisory lock [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:901 +#: storage/lmgr/lmgr.c:992 #, c-format msgid "unrecognized locktag type %d" msgstr "tipo di locktag %d sconosciuto" -#: storage/lmgr/lock.c:721 +#: storage/lmgr/lock.c:716 #, c-format msgid "cannot acquire lock mode %s on database objects while recovery is in progress" msgstr "non è possibile acquisire lock in modo %s sugli oggetti del database mentre è in corso il ripristino" -#: storage/lmgr/lock.c:723 +#: storage/lmgr/lock.c:718 #, c-format msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." msgstr "Solo RowExclusiveLock o inferiore può essere acquisito sugli oggetti database durante il ripristino." -#: storage/lmgr/lock.c:873 storage/lmgr/lock.c:907 storage/lmgr/lock.c:2602 -#: storage/lmgr/lock.c:3714 storage/lmgr/lock.c:3779 storage/lmgr/lock.c:4069 +#: storage/lmgr/lock.c:868 storage/lmgr/lock.c:902 storage/lmgr/lock.c:2597 +#: storage/lmgr/lock.c:3713 storage/lmgr/lock.c:3778 storage/lmgr/lock.c:4068 #, c-format msgid "You might need to increase max_locks_per_transaction." msgstr "Potrebbe essere necessario incrementare max_locks_per_transaction." -#: storage/lmgr/lock.c:3039 storage/lmgr/lock.c:3151 +#: storage/lmgr/lock.c:3038 storage/lmgr/lock.c:3150 #, c-format msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" msgstr "non è possibile eseguire PREPARE tenendo sia lock a livello di sessione che di transazione sullo stesso oggetto" -#: storage/lmgr/predicate.c:674 +#: storage/lmgr/lwlock.c:190 +#, c-format +msgid "%d: %s(%s %d): excl %u shared %u haswaiters %u waiters %u rOK %d" +msgstr "%d: %s(%s %d): excl %u shared %u haswaiters %u waiters %u rOK %d" + +#: storage/lmgr/lwlock.c:210 +#, c-format +msgid "%s(%s %d): %s" +msgstr "%s(%s %d): %s" + +#: storage/lmgr/predicate.c:675 #, c-format msgid "not enough elements in RWConflictPool to record a read/write conflict" msgstr "elementi non sufficienti in RWConflictPool per registrare un conflitto di lettura/scrittura" -#: storage/lmgr/predicate.c:675 storage/lmgr/predicate.c:703 +#: storage/lmgr/predicate.c:676 storage/lmgr/predicate.c:704 #, c-format msgid "You might need to run fewer transactions at a time or increase max_connections." msgstr "Potrebbe essere necessario eseguire meno transazioni per volta oppure incrementare max_connections." -#: storage/lmgr/predicate.c:702 +#: storage/lmgr/predicate.c:703 #, c-format msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "elementi non sufficienti in RWConflictPool per registrare un potenziale conflitto di lettura/scrittura" -#: storage/lmgr/predicate.c:907 +#: storage/lmgr/predicate.c:908 #, c-format msgid "memory for serializable conflict tracking is nearly exhausted" msgstr "la memoria per il tracciamento dei conflitti di serializzazione è quasi esaurita" -#: storage/lmgr/predicate.c:908 +#: storage/lmgr/predicate.c:909 #, c-format msgid "There might be an idle transaction or a forgotten prepared transaction causing this." msgstr "Ciò potrebbe essere causato da una transazione inattiva o una transazione preparata dimenticata." -#: storage/lmgr/predicate.c:1190 storage/lmgr/predicate.c:1262 +#: storage/lmgr/predicate.c:1189 storage/lmgr/predicate.c:1260 #, c-format msgid "not enough shared memory for elements of data structure \"%s\" (%zu bytes requested)" msgstr "memoria condivisa non sufficiente per gli elementi della struttura di dati \"%s\" (%zu byte richiesti)" -#: storage/lmgr/predicate.c:1550 +#: storage/lmgr/predicate.c:1548 #, c-format msgid "deferrable snapshot was unsafe; trying a new one" msgstr "lo snapshot deferibile era insicuro; ne sto provando uno nuovo" -#: storage/lmgr/predicate.c:1589 +#: storage/lmgr/predicate.c:1587 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "\"default_transaction_isolation\" è impostato a \"serializable\"." -#: storage/lmgr/predicate.c:1590 +#: storage/lmgr/predicate.c:1588 #, c-format msgid "You can use \"SET default_transaction_isolation = 'repeatable read'\" to change the default." msgstr "Puoi usare \"SET default_transaction_isolation = 'repeatable read'\" per cambiare il valore predefinito." -#: storage/lmgr/predicate.c:1629 +#: storage/lmgr/predicate.c:1627 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "una transazione che importa uno snapshot non può essere READ ONLY DEFERRABLE" -#: storage/lmgr/predicate.c:1699 utils/time/snapmgr.c:398 +#: storage/lmgr/predicate.c:1705 utils/time/snapmgr.c:431 +#: utils/time/snapmgr.c:437 #, c-format msgid "could not import the requested snapshot" msgstr "non è stato possibile importare lo snapshot richiesto" -#: storage/lmgr/predicate.c:1700 utils/time/snapmgr.c:399 +#: storage/lmgr/predicate.c:1706 utils/time/snapmgr.c:438 #, c-format msgid "The source transaction %u is not running anymore." msgstr "La transazione di origine %u non è più in esecuzione." -#: storage/lmgr/predicate.c:2324 storage/lmgr/predicate.c:2339 -#: storage/lmgr/predicate.c:3732 +#: storage/lmgr/predicate.c:2329 storage/lmgr/predicate.c:2344 +#: storage/lmgr/predicate.c:3737 #, c-format msgid "You might need to increase max_pred_locks_per_transaction." msgstr "Potrebbe essere necessario incrementare max_pred_locks_per_transaction." -#: storage/lmgr/predicate.c:3886 storage/lmgr/predicate.c:3975 -#: storage/lmgr/predicate.c:3983 storage/lmgr/predicate.c:4022 -#: storage/lmgr/predicate.c:4261 storage/lmgr/predicate.c:4598 -#: storage/lmgr/predicate.c:4610 storage/lmgr/predicate.c:4652 -#: storage/lmgr/predicate.c:4690 +#: storage/lmgr/predicate.c:3891 storage/lmgr/predicate.c:3980 +#: storage/lmgr/predicate.c:3988 storage/lmgr/predicate.c:4027 +#: storage/lmgr/predicate.c:4266 storage/lmgr/predicate.c:4603 +#: storage/lmgr/predicate.c:4615 storage/lmgr/predicate.c:4657 +#: storage/lmgr/predicate.c:4695 #, c-format msgid "could not serialize access due to read/write dependencies among transactions" msgstr "serializzazione dell'accesso fallita a causa di dipendenze di lettura/scrittura tra le transazioni" -#: storage/lmgr/predicate.c:3888 storage/lmgr/predicate.c:3977 -#: storage/lmgr/predicate.c:3985 storage/lmgr/predicate.c:4024 -#: storage/lmgr/predicate.c:4263 storage/lmgr/predicate.c:4600 -#: storage/lmgr/predicate.c:4612 storage/lmgr/predicate.c:4654 -#: storage/lmgr/predicate.c:4692 +#: storage/lmgr/predicate.c:3893 storage/lmgr/predicate.c:3982 +#: storage/lmgr/predicate.c:3990 storage/lmgr/predicate.c:4029 +#: storage/lmgr/predicate.c:4268 storage/lmgr/predicate.c:4605 +#: storage/lmgr/predicate.c:4617 storage/lmgr/predicate.c:4659 +#: storage/lmgr/predicate.c:4697 #, c-format msgid "The transaction might succeed if retried." msgstr "La transazione potrebbe riuscire se ritentata." -#: storage/lmgr/proc.c:1172 +#: storage/lmgr/proc.c:1166 #, c-format msgid "Process %d waits for %s on %s." msgstr "Processo %d in attesa di %s su %s." -#: storage/lmgr/proc.c:1182 +#: storage/lmgr/proc.c:1177 #, c-format msgid "sending cancel to blocking autovacuum PID %d" msgstr "invio di annullamento per bloccare l'autovacuum con PID %d" -#: storage/lmgr/proc.c:1194 utils/adt/misc.c:136 +#: storage/lmgr/proc.c:1195 utils/adt/misc.c:146 #, c-format msgid "could not send signal to process %d: %m" msgstr "invio del segnale al processo %d fallito: %m" -#: storage/lmgr/proc.c:1293 +#: storage/lmgr/proc.c:1297 #, c-format msgid "process %d avoided deadlock for %s on %s by rearranging queue order after %ld.%03d ms" msgstr "il processo %d ha evitato un deadlock per %s su %s modificando l'ordine della coda dopo %ld.%03d ms" -#: storage/lmgr/proc.c:1308 +#: storage/lmgr/proc.c:1312 #, c-format msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "il processo %d ha individuato un deadlock mentre era in attesa di %s su %s dopo %ld.%03d ms" -#: storage/lmgr/proc.c:1317 +#: storage/lmgr/proc.c:1321 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "il processo %d è ancora un attesa di %s su %s dopo %ld.%03d ms" -#: storage/lmgr/proc.c:1324 +#: storage/lmgr/proc.c:1328 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "il processo %d ha acquisito %s su %s dopo %ld.%03d ms" -#: storage/lmgr/proc.c:1340 +#: storage/lmgr/proc.c:1344 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "il processo %d ha fallito l'acquisizione di %s su %s dopo %ld.%03d ms" @@ -14633,375 +15883,382 @@ msgstr "il processo %d ha fallito l'acquisizione di %s su %s dopo %ld.%03d ms" msgid "page verification failed, calculated checksum %u but expected %u" msgstr "verifica della pagina fallita, somma di controllo calcolata %u ma era attesa %u" -#: storage/page/bufpage.c:200 storage/page/bufpage.c:459 -#: storage/page/bufpage.c:691 storage/page/bufpage.c:823 +#: storage/page/bufpage.c:200 storage/page/bufpage.c:490 +#: storage/page/bufpage.c:705 storage/page/bufpage.c:836 +#: storage/page/bufpage.c:936 #, c-format msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" msgstr "puntatore di pagina corrotto: lower = %u, upper = %u, special = %u" -#: storage/page/bufpage.c:503 +#: storage/page/bufpage.c:534 #, c-format msgid "corrupted item pointer: %u" msgstr "puntatore di elemento corrotto: %u" -#: storage/page/bufpage.c:514 storage/page/bufpage.c:874 +#: storage/page/bufpage.c:545 storage/page/bufpage.c:887 +#: storage/page/bufpage.c:1042 #, c-format msgid "corrupted item lengths: total %u, available space %u" msgstr "lunghezza dell'elemento corrotta: totale %u, spazio disponibile %u" -#: storage/page/bufpage.c:710 storage/page/bufpage.c:847 +#: storage/page/bufpage.c:724 storage/page/bufpage.c:860 #, c-format msgid "corrupted item pointer: offset = %u, size = %u" msgstr "puntatore di elemento corrotto: offset = %u, size = %u" -#: storage/smgr/md.c:426 storage/smgr/md.c:897 +#: storage/page/bufpage.c:965 +#, c-format +msgid "corrupted item pointer: offset = %u, length = %u" +msgstr "puntatore di elemento corrotto: offset = %u, lunghezza = %u" + +#: storage/smgr/md.c:442 storage/smgr/md.c:913 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "troncamento del file \"%s\" fallito: %m" -#: storage/smgr/md.c:493 +#: storage/smgr/md.c:509 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "estendere il file \"%s\" oltre %u blocchi" -#: storage/smgr/md.c:515 storage/smgr/md.c:676 storage/smgr/md.c:751 +#: storage/smgr/md.c:531 storage/smgr/md.c:692 storage/smgr/md.c:767 #, c-format msgid "could not seek to block %u in file \"%s\": %m" msgstr "spostamento al blocco %u nel file \"%s\" fallito: %m" -#: storage/smgr/md.c:523 +#: storage/smgr/md.c:539 #, c-format msgid "could not extend file \"%s\": %m" msgstr "non è stato possibile estendere il file \"%s\": %m" -#: storage/smgr/md.c:525 storage/smgr/md.c:532 storage/smgr/md.c:778 +#: storage/smgr/md.c:541 storage/smgr/md.c:548 storage/smgr/md.c:794 #, c-format msgid "Check free disk space." msgstr "Controlla lo spazio libero sul disco." -#: storage/smgr/md.c:529 +#: storage/smgr/md.c:545 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "non è stato possibile estendere il file \"%s\": scritti soli %d byte di %d nel blocco %u" -#: storage/smgr/md.c:694 +#: storage/smgr/md.c:710 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "lettura del blocco %u nel file \"%s\" fallita: %m" -#: storage/smgr/md.c:710 +#: storage/smgr/md.c:726 #, c-format msgid "could not read block %u in file \"%s\": read only %d of %d bytes" msgstr "lettura del blocco %u nel file \"%s\" fallita: letti soli %d byte di %d" -#: storage/smgr/md.c:769 +#: storage/smgr/md.c:785 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "scrittura del blocco %u nel file \"%s\" fallita: %m" -#: storage/smgr/md.c:774 +#: storage/smgr/md.c:790 #, c-format msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "lettura del blocco %u nel file \"%s\" fallita: scritti solo %d byte di %d" -#: storage/smgr/md.c:873 +#: storage/smgr/md.c:889 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "troncamento del file \"%s\" a %u blocchi fallito: ora è di soli %u blocchi" -#: storage/smgr/md.c:922 +#: storage/smgr/md.c:938 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "troncamento del file \"%s\" a %u blocchi fallito: %m" -#: storage/smgr/md.c:1202 +#: storage/smgr/md.c:1218 #, c-format msgid "could not fsync file \"%s\" but retrying: %m" msgstr "fsync del file \"%s\" fallito ma sto ritentando: %m" -#: storage/smgr/md.c:1365 +#: storage/smgr/md.c:1381 #, c-format msgid "could not forward fsync request because request queue is full" msgstr "inoltro della richiesta di fsync fallito perché la coda di richieste è piena" -#: storage/smgr/md.c:1760 +#: storage/smgr/md.c:1776 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "apertura del file \"%s\" fallita (blocco di destinazione %u): %m" -#: tcop/fastpath.c:111 tcop/fastpath.c:502 tcop/fastpath.c:632 -#, c-format -msgid "invalid argument size %d in function call message" -msgstr "La dimensione dell'argomento %d non è valida nel messaggi di chiamata di funzione" - -#: tcop/fastpath.c:304 tcop/postgres.c:353 tcop/postgres.c:389 -#, c-format -msgid "unexpected EOF on client connection" -msgstr "fine file inaspettata nella connessione al client" +#: tcop/fastpath.c:111 tcop/fastpath.c:475 tcop/fastpath.c:605 +#, c-format +msgid "invalid argument size %d in function call message" +msgstr "La dimensione dell'argomento %d non è valida nel messaggi di chiamata di funzione" -#: tcop/fastpath.c:318 tcop/postgres.c:944 tcop/postgres.c:1254 -#: tcop/postgres.c:1512 tcop/postgres.c:1917 tcop/postgres.c:2284 -#: tcop/postgres.c:2359 +#: tcop/fastpath.c:291 tcop/postgres.c:1003 tcop/postgres.c:1313 +#: tcop/postgres.c:1571 tcop/postgres.c:1975 tcop/postgres.c:2342 +#: tcop/postgres.c:2417 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "la transazione corrente è interrotta, i comandi saranno ignorati fino alla fine del blocco della transazione" -#: tcop/fastpath.c:346 +#: tcop/fastpath.c:319 #, c-format msgid "fastpath function call: \"%s\" (OID %u)" msgstr "chiamata funzione fastpath: \"%s\" (OID %u)" -#: tcop/fastpath.c:428 tcop/postgres.c:1114 tcop/postgres.c:1379 -#: tcop/postgres.c:1758 tcop/postgres.c:1975 +#: tcop/fastpath.c:401 tcop/postgres.c:1173 tcop/postgres.c:1438 +#: tcop/postgres.c:1816 tcop/postgres.c:2033 #, c-format msgid "duration: %s ms" msgstr "durata: %s ms" -#: tcop/fastpath.c:432 +#: tcop/fastpath.c:405 #, c-format msgid "duration: %s ms fastpath function call: \"%s\" (OID %u)" msgstr "durata: %s ms chiamata funzione fastpath: \"%s\" (OID %u)" -#: tcop/fastpath.c:470 tcop/fastpath.c:597 +#: tcop/fastpath.c:443 tcop/fastpath.c:570 #, c-format msgid "function call message contains %d arguments but function requires %d" msgstr "la chiamata alla funzione contiene %d parametri ma la funzione ne richiede %d" -#: tcop/fastpath.c:478 +#: tcop/fastpath.c:451 #, c-format msgid "function call message contains %d argument formats but %d arguments" msgstr "la chiamata alla funzione contiene %d formati di parametri ma %d parametri" -#: tcop/fastpath.c:565 tcop/fastpath.c:648 +#: tcop/fastpath.c:538 tcop/fastpath.c:621 #, c-format msgid "incorrect binary data format in function argument %d" msgstr "formato dei dati binari non corretto nell'argomento %d della funzione" -#: tcop/postgres.c:417 tcop/postgres.c:429 tcop/postgres.c:440 -#: tcop/postgres.c:452 tcop/postgres.c:4254 +#: tcop/postgres.c:363 tcop/postgres.c:399 tcop/postgres.c:426 +#, c-format +msgid "unexpected EOF on client connection" +msgstr "fine file inaspettata nella connessione al client" + +#: tcop/postgres.c:449 tcop/postgres.c:461 tcop/postgres.c:472 +#: tcop/postgres.c:484 tcop/postgres.c:4263 #, c-format msgid "invalid frontend message type %d" msgstr "messaggio frontend di tipo %d non valido" -#: tcop/postgres.c:885 +#: tcop/postgres.c:944 #, c-format msgid "statement: %s" msgstr "istruzione: %s" -#: tcop/postgres.c:1119 +#: tcop/postgres.c:1178 #, c-format msgid "duration: %s ms statement: %s" msgstr "durata: %s ms istruzione: %s" -#: tcop/postgres.c:1169 +#: tcop/postgres.c:1228 #, c-format msgid "parse %s: %s" msgstr "analisi di %s: %s" -#: tcop/postgres.c:1227 +#: tcop/postgres.c:1286 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "non è possibile inserire comandi multipli in una istruzione preparata" -#: tcop/postgres.c:1384 +#: tcop/postgres.c:1443 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "durata: %s ms analisi di %s: %s" -#: tcop/postgres.c:1429 +#: tcop/postgres.c:1488 #, c-format msgid "bind %s to %s" msgstr "bind di %s a %s" -#: tcop/postgres.c:1448 tcop/postgres.c:2265 +#: tcop/postgres.c:1507 tcop/postgres.c:2323 #, c-format msgid "unnamed prepared statement does not exist" msgstr "l'istruzione preparata senza nome non esiste" -#: tcop/postgres.c:1490 +#: tcop/postgres.c:1549 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "il messaggio di bind ha %d formati di parametri ma %d parametri" -#: tcop/postgres.c:1496 +#: tcop/postgres.c:1555 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "il messaggio di bind fornisce %d paramatri, ma l'istruzione preparata \"%s\" ne richiede %d" -#: tcop/postgres.c:1665 +#: tcop/postgres.c:1723 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "formato del dato binario errato nel parametro di bind %d" -#: tcop/postgres.c:1763 +#: tcop/postgres.c:1821 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "durata: %s ms bind %s%s%s: %s" -#: tcop/postgres.c:1811 tcop/postgres.c:2345 +#: tcop/postgres.c:1869 tcop/postgres.c:2403 #, c-format msgid "portal \"%s\" does not exist" msgstr "il portale \"%s\" non esiste" -#: tcop/postgres.c:1896 +#: tcop/postgres.c:1954 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:1898 tcop/postgres.c:1983 +#: tcop/postgres.c:1956 tcop/postgres.c:2041 msgid "execute fetch from" msgstr "esecuzione di fetch da" -#: tcop/postgres.c:1899 tcop/postgres.c:1984 +#: tcop/postgres.c:1957 tcop/postgres.c:2042 msgid "execute" msgstr "esecuzione di" -#: tcop/postgres.c:1980 +#: tcop/postgres.c:2038 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "durata: %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2106 +#: tcop/postgres.c:2164 #, c-format msgid "prepare: %s" msgstr "preparazione: %s" -#: tcop/postgres.c:2169 +#: tcop/postgres.c:2227 #, c-format msgid "parameters: %s" msgstr "parametri: %s" -#: tcop/postgres.c:2188 +#: tcop/postgres.c:2246 #, c-format msgid "abort reason: recovery conflict" msgstr "motivo dell'interruzione: conflitto di recupero" -#: tcop/postgres.c:2204 +#: tcop/postgres.c:2262 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "L'utente stava trattenendo un pin di shared buffer troppo a lungo." -#: tcop/postgres.c:2207 +#: tcop/postgres.c:2265 #, c-format msgid "User was holding a relation lock for too long." msgstr "L'utente stava trattenendo un lock di relazione troppo a lungo." -#: tcop/postgres.c:2210 +#: tcop/postgres.c:2268 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "L'utente stava usando o potrebbe aver usato un tablespace che deve essere eliminato." -#: tcop/postgres.c:2213 +#: tcop/postgres.c:2271 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "L'utente potrebbe aver avuto bisogno di vedere versioni di righe che devono essere rimosse." -#: tcop/postgres.c:2219 +#: tcop/postgres.c:2277 #, c-format msgid "User was connected to a database that must be dropped." msgstr "L'utente era connesso ad un database che deve essere eliminato." -#: tcop/postgres.c:2548 +#: tcop/postgres.c:2606 #, c-format msgid "terminating connection because of crash of another server process" msgstr "la connessione è stata terminata a causa del crash di un altro processo del server" -#: tcop/postgres.c:2549 +#: tcop/postgres.c:2607 #, 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 "Il postmaster ha obbligato questo processo del server di attuare il roll back della transazione corrente e di uscire, perché un altro processo del server è terminato anormalmente e con possibile corruzione della memoria condivisa." -#: tcop/postgres.c:2553 tcop/postgres.c:2947 +#: tcop/postgres.c:2611 tcop/postgres.c:2917 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "In un momento sarai in grado di riconnetterti al database e di ripetere il comando." -#: tcop/postgres.c:2666 +#: tcop/postgres.c:2697 #, c-format msgid "floating-point exception" msgstr "eccezione floating-point" -#: tcop/postgres.c:2667 +#: tcop/postgres.c:2698 #, 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 "Un'operazione in floating-point non valida è stata segnalata. Questo probabilmente sta a significare che il risultato è un valore fuori limite o l'operazione non è valida, ad esempio una divisione per zero." -#: tcop/postgres.c:2851 +#: tcop/postgres.c:2862 +#, c-format +msgid "canceling authentication due to timeout" +msgstr "annullamento dell'autenticazione a causa di timeout" + +#: tcop/postgres.c:2866 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "interruzione del processo autovacuum su comando dell'amministratore" -#: tcop/postgres.c:2857 tcop/postgres.c:2867 tcop/postgres.c:2945 +#: tcop/postgres.c:2872 tcop/postgres.c:2882 tcop/postgres.c:2915 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "interruzione della connessione a causa di conflitto con il ripristino" -#: tcop/postgres.c:2873 +#: tcop/postgres.c:2888 #, c-format msgid "terminating connection due to administrator command" msgstr "interruzione della connessione su comando dell'amministratore" -#: tcop/postgres.c:2885 +#: tcop/postgres.c:2898 #, c-format msgid "connection to client lost" msgstr "connessione al client persa" -#: tcop/postgres.c:2900 -#, c-format -msgid "canceling authentication due to timeout" -msgstr "annullamento dell'autenticazione a causa di timeout" - -#: tcop/postgres.c:2915 +#: tcop/postgres.c:2951 #, c-format msgid "canceling statement due to lock timeout" msgstr "annullamento dell'istruzione a causa di timeout di lock" -#: tcop/postgres.c:2924 +#: tcop/postgres.c:2958 #, c-format msgid "canceling statement due to statement timeout" msgstr "annullamento dell'istruzione a causa di timeout" -#: tcop/postgres.c:2933 +#: tcop/postgres.c:2965 #, c-format msgid "canceling autovacuum task" msgstr "annullamento del task di autovacuum" -#: tcop/postgres.c:2968 +#: tcop/postgres.c:2988 #, c-format msgid "canceling statement due to user request" msgstr "annullamento dell'istruzione su richiesta dell'utente" -#: tcop/postgres.c:3096 tcop/postgres.c:3118 +#: tcop/postgres.c:3118 tcop/postgres.c:3140 #, c-format msgid "stack depth limit exceeded" msgstr "limite di profondità dello stack superato" -#: tcop/postgres.c:3097 tcop/postgres.c:3119 +#: tcop/postgres.c:3119 tcop/postgres.c:3141 #, c-format msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." msgstr "Incrementa il parametro di configurazione \"max_stack_depth\" (attualmente %dkB), dopo esserti assicurato che il limite dello stack della piattaforma sia adeguato." -#: tcop/postgres.c:3135 +#: tcop/postgres.c:3157 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "\"max_stack_depth\" non deve superare %ldkB" -#: tcop/postgres.c:3137 +#: tcop/postgres.c:3159 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "Incrementa il limite dello stack della piattaforma usando \"ulimit -s\" on un comando equivalente." -#: tcop/postgres.c:3501 +#: tcop/postgres.c:3519 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "argomento della riga di comando non valido per il processo server: %s" -#: tcop/postgres.c:3502 tcop/postgres.c:3508 +#: tcop/postgres.c:3520 tcop/postgres.c:3526 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Prova \"%s --help\" per maggiori informazioni." -#: tcop/postgres.c:3506 +#: tcop/postgres.c:3524 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: argomento della riga di comando non valido: %s" @@ -15011,27 +16268,27 @@ msgstr "%s: argomento della riga di comando non valido: %s" msgid "%s: no database nor user name specified" msgstr "%s: nessun database né nome utente specificato" -#: tcop/postgres.c:4162 +#: tcop/postgres.c:4171 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "sottotipo %d del messaggio CLOSE non valido" -#: tcop/postgres.c:4197 +#: tcop/postgres.c:4206 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "sottotipo %d del messaggio DESCRIBE non valido" -#: tcop/postgres.c:4275 +#: tcop/postgres.c:4284 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "le chiamate di funzione fastpath non sono supportate in una connessione di replica" -#: tcop/postgres.c:4279 +#: tcop/postgres.c:4288 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "il protocollo di query esteso non è supportato in una connessione di replica" -#: tcop/postgres.c:4449 +#: tcop/postgres.c:4458 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "disconnessione: tempo della sessione: %d:%02d:%02d.%03d utente=%s database=%s host=%s%s%s" @@ -15052,24 +16309,30 @@ msgid "Declare it with SCROLL option to enable backward scan." msgstr "Dichiaralo con l'opzione SCROLL per abilitare le scansioni all'indietro." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:227 +#: tcop/utility.c:234 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "non è possibile eseguire %s in una transazione a sola lettura" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:246 +#: tcop/utility.c:252 +#, c-format +msgid "cannot execute %s during a parallel operation" +msgstr "non è possibile eseguire %s durante un'operazione parallela" + +#. translator: %s is name of a SQL command, eg CREATE +#: tcop/utility.c:271 #, c-format msgid "cannot execute %s during recovery" msgstr "non è possibile eseguire %s durante il recupero" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:264 +#: tcop/utility.c:289 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "non è possibile eseguire %s nell'ambito di operazioni a sicurezza ristretta" -#: tcop/utility.c:728 +#: tcop/utility.c:743 #, c-format msgid "must be superuser to do CHECKPOINT" msgstr "solo un superutente può eseguire CHECKPOINT" @@ -15205,7 +16468,7 @@ msgid "invalid regular expression: %s" msgstr "espressione regolare non valida: %s" #: tsearch/spell.c:518 tsearch/spell.c:535 tsearch/spell.c:552 -#: tsearch/spell.c:569 tsearch/spell.c:591 gram.y:13422 gram.y:13439 +#: tsearch/spell.c:569 tsearch/spell.c:591 gram.y:14287 gram.y:14304 #, c-format msgid "syntax error" msgstr "errore di sintassi" @@ -15272,416 +16535,456 @@ msgstr "apertura del file delle stop word \"%s\" fallita: %m" msgid "text search parser does not support headline creation" msgstr "l'analizzatore di ricerca di testo non supporta la creazione di intestazioni" -#: tsearch/wparser_def.c:2555 +#: tsearch/wparser_def.c:2557 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "parametro di intestazione sconosciuto: \"%s\"" -#: tsearch/wparser_def.c:2564 +#: tsearch/wparser_def.c:2566 #, c-format msgid "MinWords should be less than MaxWords" msgstr "MinWords dovrebbe essere minore di MaxWords" -#: tsearch/wparser_def.c:2568 +#: tsearch/wparser_def.c:2570 #, c-format msgid "MinWords should be positive" msgstr "MinWords dovrebbe essere positivo" -#: tsearch/wparser_def.c:2572 +#: tsearch/wparser_def.c:2574 #, c-format msgid "ShortWord should be >= 0" msgstr "ShortWord dovrebbe essere >= 0" -#: tsearch/wparser_def.c:2576 +#: tsearch/wparser_def.c:2578 #, c-format msgid "MaxFragments should be >= 0" msgstr "MaxFragments dovrebbe essere >= 0" -#: utils/adt/acl.c:170 utils/adt/name.c:91 +#: utils/adt/acl.c:169 utils/adt/name.c:91 #, c-format msgid "identifier too long" msgstr "l'identificativo è troppo lungo" -#: utils/adt/acl.c:171 utils/adt/name.c:92 +#: utils/adt/acl.c:170 utils/adt/name.c:92 #, c-format msgid "Identifier must be less than %d characters." msgstr "Gli identificatori devono essere più corti di %d caratteri." -#: utils/adt/acl.c:257 +#: utils/adt/acl.c:256 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "parola chiave sconosciuta: \"%s\"" -#: utils/adt/acl.c:258 +#: utils/adt/acl.c:257 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "la parola chiave ACL deve essere \"group\" o \"user\"." -#: utils/adt/acl.c:263 +#: utils/adt/acl.c:262 #, c-format msgid "missing name" msgstr "manca il nome" -#: utils/adt/acl.c:264 +#: utils/adt/acl.c:263 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "le parole chiave \"group\" o \"user\" devono essere seguite da un nome." -#: utils/adt/acl.c:270 +#: utils/adt/acl.c:269 #, c-format msgid "missing \"=\" sign" msgstr "manca il simbolo \"=\"" -#: utils/adt/acl.c:323 +#: utils/adt/acl.c:322 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "il carattere di modo non è valido: deve essere uno fra \"%s\"" -#: utils/adt/acl.c:345 +#: utils/adt/acl.c:344 #, c-format msgid "a name must follow the \"/\" sign" msgstr "il simbolo \"/\" deve essere seguito da un nome" -#: utils/adt/acl.c:353 +#: utils/adt/acl.c:352 #, c-format msgid "defaulting grantor to user ID %u" msgstr "l'user ID %u è ora chi concede i ruoli in maniera predefinita" -#: utils/adt/acl.c:544 +#: utils/adt/acl.c:543 #, c-format msgid "ACL array contains wrong data type" msgstr "l'array di ACL array contiene tipi di dati errati" -#: utils/adt/acl.c:548 +#: utils/adt/acl.c:547 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "gli array di ACL devono avere una sola dimensione" -#: utils/adt/acl.c:552 +#: utils/adt/acl.c:551 #, c-format msgid "ACL arrays must not contain null values" msgstr "gli array di ACL non possono contenere valori nulli" -#: utils/adt/acl.c:576 +#: utils/adt/acl.c:575 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "ci sono caratteri spuri al termine della specifica dell'ACL" -#: utils/adt/acl.c:1196 +#: utils/adt/acl.c:1195 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "le opzioni di concessione non possono essere concesse a chi le ha concesse a te" -#: utils/adt/acl.c:1257 +#: utils/adt/acl.c:1256 #, c-format msgid "dependent privileges exist" msgstr "esistono privilegi dipendenti" -#: utils/adt/acl.c:1258 +#: utils/adt/acl.c:1257 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Usa CASCADE per revocare anch'essi." -#: utils/adt/acl.c:1537 +#: utils/adt/acl.c:1536 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert non è più supportato" -#: utils/adt/acl.c:1547 +#: utils/adt/acl.c:1546 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove non è più supportato" -#: utils/adt/acl.c:1633 utils/adt/acl.c:1687 +#: utils/adt/acl.c:1632 utils/adt/acl.c:1686 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "tipo di privilegio sconosciuto: \"%s\"" -#: utils/adt/acl.c:3427 utils/adt/regproc.c:122 utils/adt/regproc.c:143 -#: utils/adt/regproc.c:318 +#: utils/adt/acl.c:3426 utils/adt/regproc.c:123 utils/adt/regproc.c:144 +#: utils/adt/regproc.c:319 #, c-format msgid "function \"%s\" does not exist" msgstr "la funzione \"%s\" non esiste" -#: utils/adt/acl.c:4881 +#: utils/adt/acl.c:4880 #, c-format msgid "must be member of role \"%s\"" msgstr "occorre far parte del ruolo \"%s\"" -#: utils/adt/array_userfuncs.c:48 +#: utils/adt/array_expanded.c:276 utils/adt/arrayfuncs.c:931 +#: utils/adt/arrayfuncs.c:1519 utils/adt/arrayfuncs.c:3222 +#: utils/adt/arrayfuncs.c:3360 utils/adt/arrayfuncs.c:5835 +#: utils/adt/arrayfuncs.c:6146 utils/adt/arrayutils.c:93 +#: utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 #, c-format -msgid "could not determine input data types" -msgstr "non è stato possibile determinare i tipi di dati di input" +msgid "array size exceeds the maximum allowed (%d)" +msgstr "la dimensione dell'array supera il massimo consentito (%d)" + +#: utils/adt/array_userfuncs.c:67 utils/adt/array_userfuncs.c:529 +#: utils/adt/array_userfuncs.c:609 utils/adt/json.c:1746 utils/adt/json.c:1841 +#: utils/adt/json.c:1872 utils/adt/jsonb.c:1133 utils/adt/jsonb.c:1162 +#: utils/adt/jsonb.c:1593 utils/adt/jsonb.c:1754 utils/adt/jsonb.c:1777 +#, c-format +msgid "could not determine input data type" +msgstr "non è stato possibile determinare il tipo di dato di input" -#: utils/adt/array_userfuncs.c:82 +#: utils/adt/array_userfuncs.c:72 #, c-format -msgid "neither input type is an array" -msgstr "nessuno dei tipi in input è un array" +msgid "input data type is not an array" +msgstr "il tipo di dati in input non è un array" -#: utils/adt/array_userfuncs.c:103 utils/adt/array_userfuncs.c:113 -#: utils/adt/arrayfuncs.c:1309 utils/adt/float.c:1161 utils/adt/float.c:1220 +#: utils/adt/array_userfuncs.c:120 utils/adt/array_userfuncs.c:174 +#: utils/adt/arrayfuncs.c:1322 utils/adt/float.c:1161 utils/adt/float.c:1220 #: utils/adt/float.c:2771 utils/adt/float.c:2787 utils/adt/int.c:623 #: utils/adt/int.c:652 utils/adt/int.c:673 utils/adt/int.c:704 #: utils/adt/int.c:737 utils/adt/int.c:759 utils/adt/int.c:907 #: utils/adt/int.c:928 utils/adt/int.c:955 utils/adt/int.c:995 #: utils/adt/int.c:1016 utils/adt/int.c:1043 utils/adt/int.c:1076 -#: utils/adt/int.c:1159 utils/adt/int8.c:1298 utils/adt/numeric.c:2304 -#: utils/adt/numeric.c:2313 utils/adt/varbit.c:1173 utils/adt/varbit.c:1565 -#: utils/adt/varlena.c:1013 utils/adt/varlena.c:2036 +#: utils/adt/int.c:1159 utils/adt/int8.c:1298 utils/adt/numeric.c:2903 +#: utils/adt/numeric.c:2912 utils/adt/varbit.c:1173 utils/adt/varbit.c:1565 +#: utils/adt/varlena.c:1045 utils/adt/varlena.c:2582 #, c-format msgid "integer out of range" msgstr "intero fuori dall'intervallo" -#: utils/adt/array_userfuncs.c:121 +#: utils/adt/array_userfuncs.c:127 utils/adt/array_userfuncs.c:184 #, c-format msgid "argument must be empty or one-dimensional array" msgstr "l'argomento deve essere vuoto o un array con una sola dimensione" -#: utils/adt/array_userfuncs.c:224 utils/adt/array_userfuncs.c:263 -#: utils/adt/array_userfuncs.c:300 utils/adt/array_userfuncs.c:329 -#: utils/adt/array_userfuncs.c:357 +#: utils/adt/array_userfuncs.c:266 utils/adt/array_userfuncs.c:305 +#: utils/adt/array_userfuncs.c:342 utils/adt/array_userfuncs.c:371 +#: utils/adt/array_userfuncs.c:399 #, c-format msgid "cannot concatenate incompatible arrays" msgstr "non è possibile concatenare array non compatibili" -#: utils/adt/array_userfuncs.c:225 +#: utils/adt/array_userfuncs.c:267 #, c-format msgid "Arrays with element types %s and %s are not compatible for concatenation." msgstr "Array con elementi di tipi %s e %s non sono compatibili per il concatenamento." -#: utils/adt/array_userfuncs.c:264 +#: utils/adt/array_userfuncs.c:306 #, c-format msgid "Arrays of %d and %d dimensions are not compatible for concatenation." msgstr "Array con dimensioni %d e %d non sono compatibili per il concatenamento." -#: utils/adt/array_userfuncs.c:301 +#: utils/adt/array_userfuncs.c:343 #, c-format msgid "Arrays with differing element dimensions are not compatible for concatenation." msgstr "Array con elementi dalle dimensioni diverse non sono compatibili per il concatenamento." -#: utils/adt/array_userfuncs.c:330 utils/adt/array_userfuncs.c:358 +#: utils/adt/array_userfuncs.c:372 utils/adt/array_userfuncs.c:400 #, c-format msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "Array con dimensioni diverse non sono compatibili per il concatenamento." -#: utils/adt/array_userfuncs.c:426 utils/adt/arrayfuncs.c:1271 -#: utils/adt/arrayfuncs.c:2957 utils/adt/arrayfuncs.c:4982 +#: utils/adt/array_userfuncs.c:468 utils/adt/arrayfuncs.c:1284 +#: utils/adt/arrayfuncs.c:3328 utils/adt/arrayfuncs.c:5735 #, c-format msgid "invalid number of dimensions: %d" msgstr "numero di dimensioni non valido: %d" -#: utils/adt/array_userfuncs.c:487 utils/adt/json.c:1694 utils/adt/json.c:1789 -#: utils/adt/json.c:1820 +#: utils/adt/array_userfuncs.c:725 utils/adt/array_userfuncs.c:876 #, c-format -msgid "could not determine input data type" -msgstr "non è stato possibile determinare il tipo di dato di input" +msgid "searching for elements in multidimensional arrays is not supported" +msgstr "la ricerca di elementi in array multidimensionali non è supportata" -#: utils/adt/arrayfuncs.c:241 utils/adt/arrayfuncs.c:255 -#: utils/adt/arrayfuncs.c:266 utils/adt/arrayfuncs.c:288 -#: utils/adt/arrayfuncs.c:303 utils/adt/arrayfuncs.c:317 -#: utils/adt/arrayfuncs.c:323 utils/adt/arrayfuncs.c:330 -#: utils/adt/arrayfuncs.c:461 utils/adt/arrayfuncs.c:477 -#: utils/adt/arrayfuncs.c:488 utils/adt/arrayfuncs.c:503 -#: utils/adt/arrayfuncs.c:524 utils/adt/arrayfuncs.c:554 -#: utils/adt/arrayfuncs.c:561 utils/adt/arrayfuncs.c:569 -#: utils/adt/arrayfuncs.c:603 utils/adt/arrayfuncs.c:626 -#: utils/adt/arrayfuncs.c:646 utils/adt/arrayfuncs.c:758 -#: utils/adt/arrayfuncs.c:767 utils/adt/arrayfuncs.c:797 -#: utils/adt/arrayfuncs.c:812 utils/adt/arrayfuncs.c:865 +#: utils/adt/array_userfuncs.c:749 +#, c-format +msgid "initial position should not be NULL" +msgstr "la posizione iniziale non può essere NULL" + +#: utils/adt/arrayfuncs.c:268 utils/adt/arrayfuncs.c:282 +#: utils/adt/arrayfuncs.c:293 utils/adt/arrayfuncs.c:315 +#: utils/adt/arrayfuncs.c:330 utils/adt/arrayfuncs.c:344 +#: utils/adt/arrayfuncs.c:350 utils/adt/arrayfuncs.c:357 +#: utils/adt/arrayfuncs.c:488 utils/adt/arrayfuncs.c:504 +#: utils/adt/arrayfuncs.c:515 utils/adt/arrayfuncs.c:530 +#: utils/adt/arrayfuncs.c:551 utils/adt/arrayfuncs.c:581 +#: utils/adt/arrayfuncs.c:588 utils/adt/arrayfuncs.c:596 +#: utils/adt/arrayfuncs.c:630 utils/adt/arrayfuncs.c:653 +#: utils/adt/arrayfuncs.c:673 utils/adt/arrayfuncs.c:785 +#: utils/adt/arrayfuncs.c:794 utils/adt/arrayfuncs.c:824 +#: utils/adt/arrayfuncs.c:839 utils/adt/arrayfuncs.c:892 #, c-format msgid "malformed array literal: \"%s\"" msgstr "il letterale array non è definito in modo corretto: \"%s\"" -#: utils/adt/arrayfuncs.c:242 +#: utils/adt/arrayfuncs.c:269 #, c-format msgid "\"[\" must introduce explicitly-specified array dimensions." msgstr "\"[\" deve introdurre un array con dimensioni specificate esplicitamente." -#: utils/adt/arrayfuncs.c:256 +#: utils/adt/arrayfuncs.c:283 #, c-format msgid "Missing array dimension value." msgstr "Valore delle dimensioni dell'array mancante." -#: utils/adt/arrayfuncs.c:267 utils/adt/arrayfuncs.c:304 +#: utils/adt/arrayfuncs.c:294 utils/adt/arrayfuncs.c:331 #, c-format msgid "Missing \"%s\" after array dimensions." msgstr "Manca \"%s\" dopo le dimensioni dell'array." -#: utils/adt/arrayfuncs.c:276 utils/adt/arrayfuncs.c:2482 -#: utils/adt/arrayfuncs.c:2510 utils/adt/arrayfuncs.c:2525 +#: utils/adt/arrayfuncs.c:303 utils/adt/arrayfuncs.c:2845 +#: utils/adt/arrayfuncs.c:2873 utils/adt/arrayfuncs.c:2888 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "il limite massimo non può essere minore del limite minimo" -#: utils/adt/arrayfuncs.c:289 +#: utils/adt/arrayfuncs.c:316 #, c-format msgid "Array value must start with \"{\" or dimension information." msgstr "L'array deve iniziare con \"{\" oppure con le informazioni di dimensione." -#: utils/adt/arrayfuncs.c:318 +#: utils/adt/arrayfuncs.c:345 #, c-format msgid "Array contents must start with \"{\"." msgstr "Il contenuto dell'array deve cominciare con \"{\"." -#: utils/adt/arrayfuncs.c:324 utils/adt/arrayfuncs.c:331 +#: utils/adt/arrayfuncs.c:351 utils/adt/arrayfuncs.c:358 #, c-format msgid "Specified array dimensions do not match array contents." msgstr "Le dimensioni specificate per l'array non combaciano con il contenuto." -#: utils/adt/arrayfuncs.c:462 utils/adt/arrayfuncs.c:489 -#: utils/adt/rangetypes.c:2083 utils/adt/rangetypes.c:2091 +#: utils/adt/arrayfuncs.c:489 utils/adt/arrayfuncs.c:516 +#: utils/adt/rangetypes.c:2111 utils/adt/rangetypes.c:2119 #: utils/adt/rowtypes.c:208 utils/adt/rowtypes.c:216 #, c-format msgid "Unexpected end of input." msgstr "L'input è terminato in modo inatteso." -#: utils/adt/arrayfuncs.c:478 utils/adt/arrayfuncs.c:525 -#: utils/adt/arrayfuncs.c:555 utils/adt/arrayfuncs.c:604 +#: utils/adt/arrayfuncs.c:505 utils/adt/arrayfuncs.c:552 +#: utils/adt/arrayfuncs.c:582 utils/adt/arrayfuncs.c:631 #, c-format msgid "Unexpected \"%c\" character." msgstr "Carattere \"%c\" inatteso." -#: utils/adt/arrayfuncs.c:504 utils/adt/arrayfuncs.c:627 +#: utils/adt/arrayfuncs.c:531 utils/adt/arrayfuncs.c:654 #, c-format msgid "Unexpected array element." msgstr "Elemento dell'array inatteso." -#: utils/adt/arrayfuncs.c:562 +#: utils/adt/arrayfuncs.c:589 #, c-format msgid "Unmatched \"%c\" character." msgstr "Il carattere \"%c\" non combacia." -#: utils/adt/arrayfuncs.c:570 +#: utils/adt/arrayfuncs.c:597 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "Gli array multidimensionali devono avere sotto-array con dimensioni corrispondenti." -#: utils/adt/arrayfuncs.c:647 +#: utils/adt/arrayfuncs.c:674 #, c-format msgid "Junk after closing right brace." msgstr "Caratteri spuri dopo la parentesi chiusa." -#: utils/adt/arrayfuncs.c:904 utils/adt/arrayfuncs.c:1506 -#: utils/adt/arrayfuncs.c:2841 utils/adt/arrayfuncs.c:2989 -#: utils/adt/arrayfuncs.c:5082 utils/adt/arrayfuncs.c:5414 -#: utils/adt/arrayutils.c:93 utils/adt/arrayutils.c:102 -#: utils/adt/arrayutils.c:109 -#, c-format -msgid "array size exceeds the maximum allowed (%d)" -msgstr "la dimensione dell'array supera il massimo consentito (%d)" - -#: utils/adt/arrayfuncs.c:1282 +#: utils/adt/arrayfuncs.c:1295 #, c-format msgid "invalid array flags" msgstr "i flag dell'array non sono validi" -#: utils/adt/arrayfuncs.c:1290 +#: utils/adt/arrayfuncs.c:1303 #, c-format msgid "wrong element type" msgstr "il tipo di elemento è errato" -#: utils/adt/arrayfuncs.c:1340 utils/adt/rangetypes.c:325 -#: utils/cache/lsyscache.c:2549 +#: utils/adt/arrayfuncs.c:1353 utils/adt/rangetypes.c:325 +#: utils/cache/lsyscache.c:2586 #, c-format msgid "no binary input function available for type %s" msgstr "non esiste una funzione di input binario per il tipo %s" -#: utils/adt/arrayfuncs.c:1480 +#: utils/adt/arrayfuncs.c:1493 #, c-format msgid "improper binary format in array element %d" msgstr "il formato binario nell'elemento dell'array %d non è corretto" -#: utils/adt/arrayfuncs.c:1562 utils/adt/rangetypes.c:330 -#: utils/cache/lsyscache.c:2582 +#: utils/adt/arrayfuncs.c:1574 utils/adt/rangetypes.c:330 +#: utils/cache/lsyscache.c:2619 #, c-format msgid "no binary output function available for type %s" msgstr "non esiste una funzione di output binario per il tipo %s" -#: utils/adt/arrayfuncs.c:1949 +#: utils/adt/arrayfuncs.c:2045 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "le sezioni di array a lunghezza fissa non sono implementate" -#: utils/adt/arrayfuncs.c:2122 utils/adt/arrayfuncs.c:2144 -#: utils/adt/arrayfuncs.c:2178 utils/adt/arrayfuncs.c:2464 -#: utils/adt/arrayfuncs.c:4962 utils/adt/arrayfuncs.c:4994 -#: utils/adt/arrayfuncs.c:5011 utils/adt/json.c:2211 utils/adt/json.c:2286 +#: utils/adt/arrayfuncs.c:2223 utils/adt/arrayfuncs.c:2245 +#: utils/adt/arrayfuncs.c:2294 utils/adt/arrayfuncs.c:2530 +#: utils/adt/arrayfuncs.c:2827 utils/adt/arrayfuncs.c:5715 +#: utils/adt/arrayfuncs.c:5747 utils/adt/arrayfuncs.c:5764 +#: utils/adt/json.c:2263 utils/adt/json.c:2338 utils/adt/jsonb.c:1382 +#: utils/adt/jsonb.c:1468 utils/adt/jsonfuncs.c:3522 +#: utils/adt/jsonfuncs.c:3567 #, c-format msgid "wrong number of array subscripts" msgstr "il numero di indici di array è errato" -#: utils/adt/arrayfuncs.c:2127 utils/adt/arrayfuncs.c:2220 -#: utils/adt/arrayfuncs.c:2515 +#: utils/adt/arrayfuncs.c:2228 utils/adt/arrayfuncs.c:2336 +#: utils/adt/arrayfuncs.c:2594 utils/adt/arrayfuncs.c:2878 #, c-format msgid "array subscript out of range" msgstr "indice dell'array fuori dall'intervallo" -#: utils/adt/arrayfuncs.c:2132 +#: utils/adt/arrayfuncs.c:2233 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "non è possibile assegnare un valore nullo a un elemento di un array a dimensione fissa" -#: utils/adt/arrayfuncs.c:2418 +#: utils/adt/arrayfuncs.c:2781 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "la modifica di sezioni di array a lunghezza fissa non è implementate" -#: utils/adt/arrayfuncs.c:2454 utils/adt/arrayfuncs.c:2541 +#: utils/adt/arrayfuncs.c:2817 utils/adt/arrayfuncs.c:2904 #, c-format msgid "source array too small" msgstr "l'array di origine è troppo piccolo" -#: utils/adt/arrayfuncs.c:3096 +#: utils/adt/arrayfuncs.c:3484 #, c-format msgid "null array element not allowed in this context" msgstr "in questo contesto non è consentito un elemento di array nullo" -#: utils/adt/arrayfuncs.c:3199 utils/adt/arrayfuncs.c:3407 -#: utils/adt/arrayfuncs.c:3724 +#: utils/adt/arrayfuncs.c:3586 utils/adt/arrayfuncs.c:3757 +#: utils/adt/arrayfuncs.c:4031 #, c-format msgid "cannot compare arrays of different element types" msgstr "non è possibile confrontare array con elementi di tipo diverso" -#: utils/adt/arrayfuncs.c:3609 utils/adt/rangetypes.c:1212 +#: utils/adt/arrayfuncs.c:3933 utils/adt/rangetypes.c:1240 #, c-format msgid "could not identify a hash function for type %s" msgstr "non è stato possibile trovare una funzione di hash per il tipo %s" -#: utils/adt/arrayfuncs.c:4860 utils/adt/arrayfuncs.c:4900 +#: utils/adt/arrayfuncs.c:5127 +#, c-format +msgid "data type %s is not an array type" +msgstr "il tipo di dati %s non è un tipo array" + +#: utils/adt/arrayfuncs.c:5184 +#, c-format +msgid "cannot accumulate null arrays" +msgstr "non è possibile accumulare array nulli" + +#: utils/adt/arrayfuncs.c:5212 +#, c-format +msgid "cannot accumulate empty arrays" +msgstr "non è possibile accumulare array vuoti" + +#: utils/adt/arrayfuncs.c:5241 utils/adt/arrayfuncs.c:5247 +#, c-format +msgid "cannot accumulate arrays of different dimensionality" +msgstr "non è possibile accumulare array di dimensioni diverse" + +#: utils/adt/arrayfuncs.c:5613 utils/adt/arrayfuncs.c:5653 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "la dimensione dell'array o il suo limite inferiore non possono essere nulli" -#: utils/adt/arrayfuncs.c:4963 utils/adt/arrayfuncs.c:4995 +#: utils/adt/arrayfuncs.c:5716 utils/adt/arrayfuncs.c:5748 #, c-format msgid "Dimension array must be one dimensional." msgstr "L'array delle dimensioni deve avere una sola dimensione." -#: utils/adt/arrayfuncs.c:4968 utils/adt/arrayfuncs.c:5000 +#: utils/adt/arrayfuncs.c:5721 utils/adt/arrayfuncs.c:5753 #, c-format msgid "wrong range of array subscripts" msgstr "il range degli indici dell'array non è corretto" -#: utils/adt/arrayfuncs.c:4969 utils/adt/arrayfuncs.c:5001 +#: utils/adt/arrayfuncs.c:5722 utils/adt/arrayfuncs.c:5754 #, c-format msgid "Lower bound of dimension array must be one." msgstr "Il valore minimo dell'array delle dimensioni deve essere uno." -#: utils/adt/arrayfuncs.c:4974 utils/adt/arrayfuncs.c:5006 +#: utils/adt/arrayfuncs.c:5727 utils/adt/arrayfuncs.c:5759 #, c-format msgid "dimension values cannot be null" msgstr "i valori di dimensione non possono essere nulli" -#: utils/adt/arrayfuncs.c:5012 +#: utils/adt/arrayfuncs.c:5765 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "L'array dei valori inferiori ha dimensione differente dal numero di dimensioni dell'array." -#: utils/adt/arrayfuncs.c:5279 +#: utils/adt/arrayfuncs.c:6011 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "la rimozione di elementi da array multidimensionali non è supportata" +#: utils/adt/arrayfuncs.c:6288 +#, c-format +msgid "thresholds must be one-dimensional array" +msgstr "la soglia dev'essere un array monodimensionale" + +#: utils/adt/arrayfuncs.c:6293 +#, c-format +msgid "thresholds array must not contain NULLs" +msgstr "l'array delle soglie non può contenere NULL" + #: utils/adt/arrayutils.c:209 #, c-format msgid "typmod array must be type cstring[]" @@ -15715,12 +17018,12 @@ msgstr "sintassi di input non valida per il tipo money: \"%s\"" #: utils/adt/cash.c:607 utils/adt/cash.c:657 utils/adt/cash.c:708 #: utils/adt/cash.c:757 utils/adt/cash.c:809 utils/adt/cash.c:859 #: utils/adt/float.c:788 utils/adt/float.c:852 utils/adt/float.c:2530 -#: utils/adt/float.c:2593 utils/adt/geo_ops.c:4115 utils/adt/int.c:719 +#: utils/adt/float.c:2593 utils/adt/geo_ops.c:4152 utils/adt/int.c:719 #: utils/adt/int.c:861 utils/adt/int.c:969 utils/adt/int.c:1058 #: utils/adt/int.c:1097 utils/adt/int.c:1125 utils/adt/int8.c:597 #: utils/adt/int8.c:657 utils/adt/int8.c:897 utils/adt/int8.c:1005 -#: utils/adt/int8.c:1094 utils/adt/int8.c:1202 utils/adt/numeric.c:4961 -#: utils/adt/numeric.c:5244 utils/adt/timestamp.c:3357 +#: utils/adt/int8.c:1094 utils/adt/int8.c:1202 utils/adt/numeric.c:5911 +#: utils/adt/numeric.c:6194 utils/adt/timestamp.c:3350 #, c-format msgid "division by zero" msgstr "divisione per zero" @@ -15730,7 +17033,7 @@ msgstr "divisione per zero" msgid "\"char\" out of range" msgstr "\"char\" fuori dall'intervallo consentito" -#: utils/adt/date.c:68 utils/adt/timestamp.c:102 utils/adt/varbit.c:52 +#: utils/adt/date.c:68 utils/adt/timestamp.c:95 utils/adt/varbit.c:52 #: utils/adt/varchar.c:44 #, c-format msgid "invalid type modifier" @@ -15751,22 +17054,22 @@ msgstr "la precisione di TIME(%d)%s è stata ridotta al massimo consentito (%d)" msgid "date/time value \"current\" is no longer supported" msgstr "il valore \"current\" per i tipi date/time non è più supportato" -#: utils/adt/date.c:167 utils/adt/formatting.c:3411 +#: utils/adt/date.c:167 utils/adt/formatting.c:3523 #, c-format msgid "date out of range: \"%s\"" msgstr "data fuori dall'intervallo consentito: \"%s\"" -#: utils/adt/date.c:217 utils/adt/json.c:1431 utils/adt/xml.c:2024 +#: utils/adt/date.c:217 utils/adt/xml.c:2029 #, c-format msgid "date out of range" msgstr "data fuori dall'intervallo consentito" -#: utils/adt/date.c:259 utils/adt/timestamp.c:600 +#: utils/adt/date.c:259 utils/adt/timestamp.c:593 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "valori del campo data fuori dall'intervallo consentito: %d-%02d-%02d" -#: utils/adt/date.c:265 utils/adt/timestamp.c:606 +#: utils/adt/date.c:265 utils/adt/timestamp.c:599 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "data fuori dall'intervallo consentito: %d-%02d-%02d" @@ -15782,28 +17085,28 @@ msgid "date out of range for timestamp" msgstr "data fuori dall'intervallo consentito per timestamp" #: utils/adt/date.c:971 utils/adt/date.c:1017 utils/adt/date.c:1617 -#: utils/adt/date.c:1653 utils/adt/date.c:2525 utils/adt/formatting.c:3287 -#: utils/adt/formatting.c:3319 utils/adt/formatting.c:3387 -#: utils/adt/json.c:1456 utils/adt/json.c:1463 utils/adt/json.c:1483 -#: utils/adt/json.c:1490 utils/adt/nabstime.c:455 utils/adt/nabstime.c:498 -#: utils/adt/nabstime.c:528 utils/adt/nabstime.c:571 utils/adt/timestamp.c:232 -#: utils/adt/timestamp.c:275 utils/adt/timestamp.c:724 -#: utils/adt/timestamp.c:753 utils/adt/timestamp.c:792 -#: utils/adt/timestamp.c:2946 utils/adt/timestamp.c:2967 -#: utils/adt/timestamp.c:2980 utils/adt/timestamp.c:2989 -#: utils/adt/timestamp.c:3046 utils/adt/timestamp.c:3069 -#: utils/adt/timestamp.c:3082 utils/adt/timestamp.c:3093 -#: utils/adt/timestamp.c:3618 utils/adt/timestamp.c:3747 -#: utils/adt/timestamp.c:3788 utils/adt/timestamp.c:3876 -#: utils/adt/timestamp.c:3922 utils/adt/timestamp.c:4033 -#: utils/adt/timestamp.c:4357 utils/adt/timestamp.c:4496 -#: utils/adt/timestamp.c:4506 utils/adt/timestamp.c:4568 -#: utils/adt/timestamp.c:4708 utils/adt/timestamp.c:4718 -#: utils/adt/timestamp.c:4932 utils/adt/timestamp.c:4946 -#: utils/adt/timestamp.c:5025 utils/adt/timestamp.c:5032 -#: utils/adt/timestamp.c:5058 utils/adt/timestamp.c:5062 -#: utils/adt/timestamp.c:5131 utils/adt/xml.c:2046 utils/adt/xml.c:2053 -#: utils/adt/xml.c:2073 utils/adt/xml.c:2080 +#: utils/adt/date.c:1653 utils/adt/date.c:2525 utils/adt/formatting.c:3399 +#: utils/adt/formatting.c:3431 utils/adt/formatting.c:3499 +#: utils/adt/json.c:1517 utils/adt/json.c:1544 utils/adt/jsonb.c:831 +#: utils/adt/jsonb.c:860 utils/adt/nabstime.c:455 utils/adt/nabstime.c:498 +#: utils/adt/nabstime.c:528 utils/adt/nabstime.c:571 utils/adt/timestamp.c:225 +#: utils/adt/timestamp.c:268 utils/adt/timestamp.c:717 +#: utils/adt/timestamp.c:746 utils/adt/timestamp.c:785 +#: utils/adt/timestamp.c:2939 utils/adt/timestamp.c:2960 +#: utils/adt/timestamp.c:2973 utils/adt/timestamp.c:2982 +#: utils/adt/timestamp.c:3039 utils/adt/timestamp.c:3062 +#: utils/adt/timestamp.c:3075 utils/adt/timestamp.c:3086 +#: utils/adt/timestamp.c:3611 utils/adt/timestamp.c:3740 +#: utils/adt/timestamp.c:3781 utils/adt/timestamp.c:3869 +#: utils/adt/timestamp.c:3915 utils/adt/timestamp.c:4026 +#: utils/adt/timestamp.c:4350 utils/adt/timestamp.c:4489 +#: utils/adt/timestamp.c:4499 utils/adt/timestamp.c:4561 +#: utils/adt/timestamp.c:4701 utils/adt/timestamp.c:4711 +#: utils/adt/timestamp.c:5006 utils/adt/timestamp.c:5020 +#: utils/adt/timestamp.c:5145 utils/adt/timestamp.c:5152 +#: utils/adt/timestamp.c:5178 utils/adt/timestamp.c:5182 +#: utils/adt/timestamp.c:5251 utils/adt/xml.c:2051 utils/adt/xml.c:2058 +#: utils/adt/xml.c:2078 utils/adt/xml.c:2085 #, c-format msgid "timestamp out of range" msgstr "timestamp fuori dall'intervallo consentito" @@ -15819,7 +17122,7 @@ msgstr "non è possibile convertire un valore speciale per abstime in una data" msgid "time out of range" msgstr "ora fuori dall'intervallo consentito" -#: utils/adt/date.c:1265 utils/adt/timestamp.c:625 +#: utils/adt/date.c:1265 utils/adt/timestamp.c:618 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "campo temporale fuori dall'intervallo consentito: %d:%02d:%02g" @@ -15840,14 +17143,14 @@ msgid "\"time with time zone\" units \"%s\" not recognized" msgstr "unità \"%s\" di \"time with time zone\" non è riconosciuta" #: utils/adt/date.c:2745 utils/adt/datetime.c:925 utils/adt/datetime.c:1805 -#: utils/adt/datetime.c:4566 utils/adt/timestamp.c:539 -#: utils/adt/timestamp.c:566 utils/adt/timestamp.c:4958 -#: utils/adt/timestamp.c:5142 +#: utils/adt/datetime.c:4566 utils/adt/timestamp.c:532 +#: utils/adt/timestamp.c:559 utils/adt/timestamp.c:5032 +#: utils/adt/timestamp.c:5262 #, c-format msgid "time zone \"%s\" not recognized" msgstr "fuso orario \"%s\" non riconosciuto" -#: utils/adt/date.c:2785 utils/adt/timestamp.c:4983 utils/adt/timestamp.c:5168 +#: utils/adt/date.c:2785 utils/adt/timestamp.c:5103 utils/adt/timestamp.c:5288 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "l'intervallo di fusi orari \"%s\" non può contenere mesi o giorni" @@ -15888,7 +17191,7 @@ msgstr "sintassi di input non valida per il tipo %s: \"%s\"" msgid "This time zone name appears in the configuration file for time zone abbreviation \"%s\"." msgstr "Il nome del fuso orario figura nel file di configurazione delle abbreviazioni di fuso orario \"%s\"." -#: utils/adt/datum.c:80 utils/adt/datum.c:92 +#: utils/adt/datum.c:86 utils/adt/datum.c:98 #, c-format msgid "invalid Datum pointer" msgstr "puntatore al Datum non valido" @@ -15898,7 +17201,7 @@ msgstr "puntatore al Datum non valido" msgid "could not open tablespace directory \"%s\": %m" msgstr "apertura della directory del tablespace \"%s\" fallita: %m" -#: utils/adt/domains.c:83 +#: utils/adt/domains.c:85 #, c-format msgid "type %s is not a domain" msgstr "il tipo %s non è un dominio" @@ -15920,21 +17223,26 @@ msgstr "i dati esadecimali non sono validi: numero dispari di cifre" #: utils/adt/encode.c:295 #, c-format -msgid "unexpected \"=\"" -msgstr "il simbolo \"=\" non era previsto" +msgid "unexpected \"=\" while decoding base64 sequence" +msgstr "carattere \"=\" inaspettato decodificando la sequenza base64" #: utils/adt/encode.c:307 #, c-format -msgid "invalid symbol" -msgstr "il simbolo non è valido" +msgid "invalid symbol '%c' while decoding base64 sequence" +msgstr "simbolo '%c' inaspettato decodificando la sequenza base64" #: utils/adt/encode.c:327 #, c-format -msgid "invalid end sequence" -msgstr "la sequenza finale non è valida" +msgid "invalid base64 end sequence" +msgstr "fine sequenza base64 non valida" + +#: utils/adt/encode.c:328 +#, c-format +msgid "Input data is missing padding, truncated, or otherwise corrupted." +msgstr "I dati di input mancano di padding, sono troncati o comunque corrotti." -#: utils/adt/encode.c:441 utils/adt/encode.c:506 utils/adt/varlena.c:255 -#: utils/adt/varlena.c:296 +#: utils/adt/encode.c:442 utils/adt/encode.c:507 utils/adt/varlena.c:287 +#: utils/adt/varlena.c:328 #, c-format msgid "invalid input syntax for type bytea" msgstr "la sintassi in input per il tipo bytea non è valida" @@ -15950,13 +17258,13 @@ msgstr "la sintassi per l'enumerazione %s non è valida: \"%s\"" msgid "invalid internal value for enum: %u" msgstr "il valore interno per l'enumerazione non è valido: %u" -#: utils/adt/enum.c:357 utils/adt/enum.c:386 utils/adt/enum.c:426 -#: utils/adt/enum.c:446 +#: utils/adt/enum.c:356 utils/adt/enum.c:385 utils/adt/enum.c:425 +#: utils/adt/enum.c:445 #, c-format msgid "could not determine actual enum type" msgstr "determinazione del tipo reale di enumerazione fallita" -#: utils/adt/enum.c:365 utils/adt/enum.c:394 +#: utils/adt/enum.c:364 utils/adt/enum.c:393 #, c-format msgid "enum %s contains no values" msgstr "l'enumerazione %s non contiene valori" @@ -15982,7 +17290,7 @@ msgid "\"%s\" is out of range for type real" msgstr "\"%s\" è fuori dall'intervallo consentito per il tipo real" #: utils/adt/float.c:417 utils/adt/float.c:491 utils/adt/float.c:515 -#: utils/adt/numeric.c:4423 utils/adt/numeric.c:4449 +#: utils/adt/numeric.c:5373 utils/adt/numeric.c:5399 #, c-format msgid "invalid input syntax for type double precision: \"%s\"" msgstr "la sintassi in input per il tipo double precision non è valida: \"%s\"" @@ -15995,32 +17303,32 @@ msgstr "\"%s\" è fuori dall'intervallo consentito per il tipo double precision" #: utils/adt/float.c:1179 utils/adt/float.c:1237 utils/adt/int.c:349 #: utils/adt/int.c:775 utils/adt/int.c:804 utils/adt/int.c:825 #: utils/adt/int.c:845 utils/adt/int.c:879 utils/adt/int.c:1174 -#: utils/adt/int8.c:1323 utils/adt/numeric.c:2401 utils/adt/numeric.c:2410 +#: utils/adt/int8.c:1323 utils/adt/numeric.c:3000 utils/adt/numeric.c:3009 #, c-format msgid "smallint out of range" msgstr "il valore è fuori dall'intervallo consentito per il tipo smallint" -#: utils/adt/float.c:1363 utils/adt/numeric.c:5637 +#: utils/adt/float.c:1363 utils/adt/numeric.c:6587 #, c-format msgid "cannot take square root of a negative number" msgstr "non è possibile estrarre la radice quadrata di un numero negativo" -#: utils/adt/float.c:1405 utils/adt/numeric.c:2221 +#: utils/adt/float.c:1405 utils/adt/numeric.c:2820 #, c-format msgid "zero raised to a negative power is undefined" msgstr "zero elevato a potenza negativa non è definito" -#: utils/adt/float.c:1409 utils/adt/numeric.c:2227 +#: utils/adt/float.c:1409 utils/adt/numeric.c:2826 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "un numero negativo elevato a potenza non intera è un valore di tipo complesso" -#: utils/adt/float.c:1475 utils/adt/float.c:1505 utils/adt/numeric.c:5855 +#: utils/adt/float.c:1475 utils/adt/float.c:1505 utils/adt/numeric.c:6805 #, c-format msgid "cannot take logarithm of zero" msgstr "non è possibile calcolare il logaritmo di zero" -#: utils/adt/float.c:1479 utils/adt/float.c:1509 utils/adt/numeric.c:5859 +#: utils/adt/float.c:1479 utils/adt/float.c:1509 utils/adt/numeric.c:6809 #, c-format msgid "cannot take logarithm of a negative number" msgstr "non è possibile calcolare il logaritmo di un numero negativo" @@ -16032,12 +17340,12 @@ msgstr "non è possibile calcolare il logaritmo di un numero negativo" msgid "input is out of range" msgstr "il valore di input è fuori dall'intervallo consentito" -#: utils/adt/float.c:2747 utils/adt/numeric.c:1274 +#: utils/adt/float.c:2747 utils/adt/numeric.c:1454 #, c-format msgid "count must be greater than zero" msgstr "il valore count dev'essere maggiore di zero" -#: utils/adt/float.c:2752 utils/adt/numeric.c:1281 +#: utils/adt/float.c:2752 utils/adt/numeric.c:1461 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "l'operando e i valori minimo e massimo non possono essere NaN" @@ -16047,7 +17355,7 @@ msgstr "l'operando e i valori minimo e massimo non possono essere NaN" msgid "lower and upper bounds must be finite" msgstr "i valori minimo e massimo devono essere finiti" -#: utils/adt/float.c:2796 utils/adt/numeric.c:1294 +#: utils/adt/float.c:2796 utils/adt/numeric.c:1474 #, c-format msgid "lower bound cannot equal upper bound" msgstr "il valore minimo non può essere uguale a quello massimo" @@ -16062,363 +17370,372 @@ msgstr "la specifica di formato per un intervallo non è valida" msgid "Intervals are not tied to specific calendar dates." msgstr "Gli intervalli non sono legati a specifiche date di calendario." -#: utils/adt/formatting.c:1055 +#: utils/adt/formatting.c:1059 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "\"EEEE\" dev'essere l'ultimo pattern usato" -#: utils/adt/formatting.c:1063 +#: utils/adt/formatting.c:1067 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "\"9\" dev'essere più avanti di \"PR\"" -#: utils/adt/formatting.c:1079 +#: utils/adt/formatting.c:1083 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "\"0\" dev'essere più avanti di \"PR\"" -#: utils/adt/formatting.c:1106 +#: utils/adt/formatting.c:1110 #, c-format msgid "multiple decimal points" msgstr "troppi punti decimali" -#: utils/adt/formatting.c:1110 utils/adt/formatting.c:1193 +#: utils/adt/formatting.c:1114 utils/adt/formatting.c:1197 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "non è possibile usare \"V\" ed un punto decimale insieme" -#: utils/adt/formatting.c:1122 +#: utils/adt/formatting.c:1126 #, c-format msgid "cannot use \"S\" twice" msgstr "non è possibile usare \"S\" due volte" -#: utils/adt/formatting.c:1126 +#: utils/adt/formatting.c:1130 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "non è possibile usare sia \"S\" che \"PL\"/\"MI\"/\"SG\"/\"PR\" insieme" -#: utils/adt/formatting.c:1146 +#: utils/adt/formatting.c:1150 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "non è possibile usare sia \"S\" che \"MI\" insieme" -#: utils/adt/formatting.c:1156 +#: utils/adt/formatting.c:1160 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "non è possibile usare sia \"S\" che \"PL\" insieme" -#: utils/adt/formatting.c:1166 +#: utils/adt/formatting.c:1170 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "non è possibile usare sia \"S\" che \"SG\" insieme" -#: utils/adt/formatting.c:1175 +#: utils/adt/formatting.c:1179 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "non è possibile usare sia \"PR\" che \"S\"/\"PL\"/\"MI\"/\"SG\" insieme" -#: utils/adt/formatting.c:1201 +#: utils/adt/formatting.c:1205 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "non è possibile usare \"EEEE\" due volte" -#: utils/adt/formatting.c:1207 +#: utils/adt/formatting.c:1211 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "\"EEEE\" non è compatibile con altri formati" -#: utils/adt/formatting.c:1208 +#: utils/adt/formatting.c:1212 #, c-format msgid "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "\"EEEE\" può essere usato soltanto insieme a pattern di cifre e punti decimali." -#: utils/adt/formatting.c:1408 +#: utils/adt/formatting.c:1412 #, c-format msgid "\"%s\" is not a number" msgstr "\"%s\" non è un numero" -#: utils/adt/formatting.c:1509 utils/adt/formatting.c:1561 +#: utils/adt/formatting.c:1513 utils/adt/formatting.c:1565 #, c-format msgid "could not determine which collation to use for lower() function" msgstr "non è stato possibile determinare quale ordinamento usare per la funzione lower()" -#: utils/adt/formatting.c:1629 utils/adt/formatting.c:1681 +#: utils/adt/formatting.c:1633 utils/adt/formatting.c:1685 #, c-format msgid "could not determine which collation to use for upper() function" msgstr "non è stato possibile determinare quale ordinamento usare per la funzione upper()" -#: utils/adt/formatting.c:1750 utils/adt/formatting.c:1814 +#: utils/adt/formatting.c:1754 utils/adt/formatting.c:1818 #, c-format msgid "could not determine which collation to use for initcap() function" msgstr "non è stato possibile determinare quale ordinamento usare per la funzione initcap()" -#: utils/adt/formatting.c:2118 +#: utils/adt/formatting.c:2122 #, c-format msgid "invalid combination of date conventions" msgstr "la combinazione di convenzioni di date non è valida" -#: utils/adt/formatting.c:2119 +#: utils/adt/formatting.c:2123 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr "Non è possibile usare la convenzione gregoriana e ISO per settimane in un modello di formattazione." -#: utils/adt/formatting.c:2136 +#: utils/adt/formatting.c:2140 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "sono presenti valori contraddittori per il campo \"%s\" nella stringa di formattazione" -#: utils/adt/formatting.c:2138 +#: utils/adt/formatting.c:2142 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Questo valore contraddice una impostazione precedente per lo stesso tipo di campo" -#: utils/adt/formatting.c:2199 +#: utils/adt/formatting.c:2203 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "la stringa di origine è troppo corta per il campo di formattazione \"%s\"" -#: utils/adt/formatting.c:2201 +#: utils/adt/formatting.c:2205 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "Il campo necessita di %d caratteri ma ne restano solo %d." -#: utils/adt/formatting.c:2204 utils/adt/formatting.c:2218 +#: utils/adt/formatting.c:2208 utils/adt/formatting.c:2222 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "Se la stringa di partenza non ha lunghezza fissa, prova ad usare il modificatore \"FM\"." -#: utils/adt/formatting.c:2214 utils/adt/formatting.c:2227 -#: utils/adt/formatting.c:2357 +#: utils/adt/formatting.c:2218 utils/adt/formatting.c:2231 +#: utils/adt/formatting.c:2361 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "valore \"%s\" per \"%s\" non valido" -#: utils/adt/formatting.c:2216 +#: utils/adt/formatting.c:2220 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "Il campo necessita di %d caratteri, ma è stato possibile analizzarne solo %d." -#: utils/adt/formatting.c:2229 +#: utils/adt/formatting.c:2233 #, c-format msgid "Value must be an integer." msgstr "Il valore deve essere un integer." -#: utils/adt/formatting.c:2234 +#: utils/adt/formatting.c:2238 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "il valore \"%s\" nella stringa di origine è fuori dall'intervallo consentito" -#: utils/adt/formatting.c:2236 +#: utils/adt/formatting.c:2240 #, c-format msgid "Value must be in the range %d to %d." msgstr "Il valore deve essere compreso fra %d e %d." -#: utils/adt/formatting.c:2359 +#: utils/adt/formatting.c:2363 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "Il valore fornito non corrisponde a nessuno di quelli consentiti per questo campo." -#: utils/adt/formatting.c:2932 +#: utils/adt/formatting.c:2551 utils/adt/formatting.c:2571 +#: utils/adt/formatting.c:2591 utils/adt/formatting.c:2611 +#: utils/adt/formatting.c:2630 utils/adt/formatting.c:2649 +#: utils/adt/formatting.c:2672 utils/adt/formatting.c:2690 +#: utils/adt/formatting.c:2708 utils/adt/formatting.c:2726 +#: utils/adt/formatting.c:2743 utils/adt/formatting.c:2760 +#, c-format +msgid "localized string format value too long" +msgstr "valore del formato della stringa localizzata troppo lungo" + +#: utils/adt/formatting.c:3044 #, c-format msgid "\"TZ\"/\"tz\"/\"OF\" format patterns are not supported in to_date" msgstr "i pattern di formato \"TZ\"/\"tz\"/\"OF\" non sono supportati in to_date" -#: utils/adt/formatting.c:3040 +#: utils/adt/formatting.c:3152 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "stringa di input non valida per \"Y,YYY\"" -#: utils/adt/formatting.c:3543 +#: utils/adt/formatting.c:3655 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "l'ora \"%d\" non è valida su un orologio a 12 ore" -#: utils/adt/formatting.c:3545 +#: utils/adt/formatting.c:3657 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Usa l'orologio a 24 ore o fornisci un'ora compresa fra 1 e 12." -#: utils/adt/formatting.c:3640 +#: utils/adt/formatting.c:3752 #, c-format msgid "cannot calculate day of year without year information" msgstr "non è possibile calcolare il giorno dell'anno senza informazioni sull'anno" -#: utils/adt/formatting.c:4490 +#: utils/adt/formatting.c:4601 #, c-format msgid "\"EEEE\" not supported for input" msgstr "l'uso di \"EEEE\" non è supportato per l'input" -#: utils/adt/formatting.c:4502 +#: utils/adt/formatting.c:4613 #, c-format msgid "\"RN\" not supported for input" msgstr "l'uso di \"RN\" non è supportato per l'input" -#: utils/adt/genfile.c:61 +#: utils/adt/genfile.c:62 #, c-format msgid "reference to parent directory (\"..\") not allowed" msgstr "i riferimenti alla directory padre (\"..\") non sono consentiti" -#: utils/adt/genfile.c:72 +#: utils/adt/genfile.c:73 #, c-format msgid "absolute path not allowed" msgstr "i percorsi assoluti non sono consentiti" -#: utils/adt/genfile.c:77 +#: utils/adt/genfile.c:78 #, c-format msgid "path must be in or below the current directory" msgstr "il percorso dev'essere nella directory corrente o in una sua sottodirectory" -#: utils/adt/genfile.c:118 utils/adt/oracle_compat.c:184 +#: utils/adt/genfile.c:125 utils/adt/oracle_compat.c:184 #: utils/adt/oracle_compat.c:282 utils/adt/oracle_compat.c:758 #: utils/adt/oracle_compat.c:1059 #, c-format msgid "requested length too large" msgstr "la lunghezza richiesta è eccessiva" -#: utils/adt/genfile.c:130 +#: utils/adt/genfile.c:142 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "spostamento nel file \"%s\" fallito: %m" -#: utils/adt/genfile.c:180 utils/adt/genfile.c:204 utils/adt/genfile.c:225 -#: utils/adt/genfile.c:249 +#: utils/adt/genfile.c:200 utils/adt/genfile.c:241 #, c-format msgid "must be superuser to read files" msgstr "solo un superutente può leggere i file" -#: utils/adt/genfile.c:273 +#: utils/adt/genfile.c:318 #, c-format msgid "must be superuser to get file information" msgstr "solo un superutente può ottenere informazioni sul file" -#: utils/adt/genfile.c:337 +#: utils/adt/genfile.c:404 #, c-format msgid "must be superuser to get directory listings" msgstr "solo un superutente può elencare il contenuto della directory" -#: utils/adt/geo_ops.c:299 utils/adt/geo_ops.c:1398 utils/adt/geo_ops.c:3460 -#: utils/adt/geo_ops.c:4236 utils/adt/geo_ops.c:5165 +#: utils/adt/geo_ops.c:300 utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3497 +#: utils/adt/geo_ops.c:4312 utils/adt/geo_ops.c:5256 #, c-format msgid "too many points requested" msgstr "il numero di punti richiesti è eccessivo" -#: utils/adt/geo_ops.c:322 +#: utils/adt/geo_ops.c:323 #, c-format msgid "could not format \"path\" value" msgstr "formattazione del valore \"path\" fallita" -#: utils/adt/geo_ops.c:397 +#: utils/adt/geo_ops.c:398 #, c-format msgid "invalid input syntax for type box: \"%s\"" msgstr "sintassi di input non valida per il tipo box: \"%s\"" -#: utils/adt/geo_ops.c:992 +#: utils/adt/geo_ops.c:993 #, c-format msgid "invalid line specification: must be two distinct points" msgstr "specificazione di linea non valida: devono essere due punti distinti" -#: utils/adt/geo_ops.c:1001 +#: utils/adt/geo_ops.c:1002 #, c-format msgid "invalid line specification: A and B cannot both be zero" msgstr "specificazione di linea non valida: A e B non possono essere entrambi zero" -#: utils/adt/geo_ops.c:1006 +#: utils/adt/geo_ops.c:1007 #, c-format msgid "invalid input syntax for type line: \"%s\"" msgstr "sintassi di input non valida per il tipo line: \"%s\"" -#: utils/adt/geo_ops.c:1378 utils/adt/geo_ops.c:1409 +#: utils/adt/geo_ops.c:1379 utils/adt/geo_ops.c:1410 #, c-format msgid "invalid input syntax for type path: \"%s\"" msgstr "sintassi di input non valida per il tipo path: \"%s\"" -#: utils/adt/geo_ops.c:1448 +#: utils/adt/geo_ops.c:1449 #, c-format msgid "invalid number of points in external \"path\" value" msgstr "il numero di punti nel valore del \"path\" esterno non è valido" -#: utils/adt/geo_ops.c:1791 +#: utils/adt/geo_ops.c:1792 #, c-format msgid "invalid input syntax for type point: \"%s\"" msgstr "sintassi di input non valida per il tipo point: \"%s\"" -#: utils/adt/geo_ops.c:2019 +#: utils/adt/geo_ops.c:2020 #, c-format msgid "invalid input syntax for type lseg: \"%s\"" msgstr "sintassi di input non valida per il tipo lseg: \"%s\"" -#: utils/adt/geo_ops.c:2623 +#: utils/adt/geo_ops.c:2620 #, c-format msgid "function \"dist_lb\" not implemented" msgstr "la funzione \"dist_lb\" non è implementata" -#: utils/adt/geo_ops.c:3035 +#: utils/adt/geo_ops.c:3072 #, c-format msgid "function \"close_sl\" not implemented" msgstr "la funzione \"close_sl\" non è implementata" -#: utils/adt/geo_ops.c:3137 +#: utils/adt/geo_ops.c:3174 #, c-format msgid "function \"close_lb\" not implemented" msgstr "la funzione \"close_lb\" non è implementata" -#: utils/adt/geo_ops.c:3426 +#: utils/adt/geo_ops.c:3463 #, c-format msgid "cannot create bounding box for empty polygon" msgstr "non è possibile creare un bounding box per il poligono vuoto" -#: utils/adt/geo_ops.c:3451 utils/adt/geo_ops.c:3471 +#: utils/adt/geo_ops.c:3488 utils/adt/geo_ops.c:3508 #, c-format msgid "invalid input syntax for type polygon: \"%s\"" msgstr "sintassi di input non valida per il tipo polygon: \"%s\"" -#: utils/adt/geo_ops.c:3511 +#: utils/adt/geo_ops.c:3548 #, c-format msgid "invalid number of points in external \"polygon\" value" msgstr "il numero di punti nel valore \"polygon\" esterno non è valido" -#: utils/adt/geo_ops.c:4034 +#: utils/adt/geo_ops.c:4071 #, c-format msgid "function \"poly_distance\" not implemented" msgstr "la funzione \"poly_distance\" non è implementata" -#: utils/adt/geo_ops.c:4348 +#: utils/adt/geo_ops.c:4424 #, c-format msgid "function \"path_center\" not implemented" msgstr "la funzione \"path_center\" non è implementata" -#: utils/adt/geo_ops.c:4365 +#: utils/adt/geo_ops.c:4441 #, c-format msgid "open path cannot be converted to polygon" msgstr "un path aperto non può essere convertito in un poligono" -#: utils/adt/geo_ops.c:4542 utils/adt/geo_ops.c:4552 utils/adt/geo_ops.c:4567 -#: utils/adt/geo_ops.c:4573 +#: utils/adt/geo_ops.c:4618 utils/adt/geo_ops.c:4628 utils/adt/geo_ops.c:4643 +#: utils/adt/geo_ops.c:4649 #, c-format msgid "invalid input syntax for type circle: \"%s\"" msgstr "sintassi di input non valida per il tipo circle: \"%s\"" -#: utils/adt/geo_ops.c:4595 utils/adt/geo_ops.c:4603 +#: utils/adt/geo_ops.c:4671 utils/adt/geo_ops.c:4679 #, c-format msgid "could not format \"circle\" value" msgstr "formattazione del valore \"circle\" fallita" -#: utils/adt/geo_ops.c:4630 +#: utils/adt/geo_ops.c:4706 #, c-format msgid "invalid radius in external \"circle\" value" msgstr "il raggio nel valore esterno di \"circle\" non è valido" -#: utils/adt/geo_ops.c:5151 +#: utils/adt/geo_ops.c:5242 #, c-format msgid "cannot convert circle with radius zero to polygon" msgstr "non è possibile convertire un cerchio con raggio nullo in un poligono" -#: utils/adt/geo_ops.c:5156 +#: utils/adt/geo_ops.c:5247 #, c-format msgid "must request at least 2 points" msgstr "devono essere richiesti almeno 2 punti" -#: utils/adt/geo_ops.c:5200 +#: utils/adt/geo_ops.c:5291 #, c-format msgid "cannot convert empty polygon to circle" msgstr "non è possibile convertire un poligono vuoto in un cerchio" @@ -16438,8 +17755,8 @@ msgstr "dati int2vector non validi" msgid "oidvector has too many elements" msgstr "ci sono troppi elementi nell'oidvector" -#: utils/adt/int.c:1362 utils/adt/int8.c:1460 utils/adt/timestamp.c:5229 -#: utils/adt/timestamp.c:5310 +#: utils/adt/int.c:1362 utils/adt/int8.c:1460 utils/adt/numeric.c:1362 +#: utils/adt/timestamp.c:5349 utils/adt/timestamp.c:5430 #, c-format msgid "step size cannot equal zero" msgstr "il valore del passo non può essere uguale a zero" @@ -16463,7 +17780,7 @@ msgstr "il valore \"%s\" è fuori dall'intervallo consentito per il tipo bigint" #: utils/adt/int8.c:964 utils/adt/int8.c:991 utils/adt/int8.c:1031 #: utils/adt/int8.c:1052 utils/adt/int8.c:1079 utils/adt/int8.c:1112 #: utils/adt/int8.c:1140 utils/adt/int8.c:1161 utils/adt/int8.c:1188 -#: utils/adt/int8.c:1361 utils/adt/int8.c:1400 utils/adt/numeric.c:2356 +#: utils/adt/int8.c:1361 utils/adt/int8.c:1400 utils/adt/numeric.c:2955 #: utils/adt/varbit.c:1645 #, c-format msgid "bigint out of range" @@ -16474,276 +17791,331 @@ msgstr "bigint fuori dall'intervallo consentito" msgid "OID out of range" msgstr "OID fuori dall'intervallo consentito" -#: utils/adt/json.c:726 utils/adt/json.c:766 utils/adt/json.c:781 -#: utils/adt/json.c:792 utils/adt/json.c:802 utils/adt/json.c:838 -#: utils/adt/json.c:850 utils/adt/json.c:881 utils/adt/json.c:899 -#: utils/adt/json.c:911 utils/adt/json.c:923 utils/adt/json.c:1062 -#: utils/adt/json.c:1076 utils/adt/json.c:1087 utils/adt/json.c:1095 -#: utils/adt/json.c:1103 utils/adt/json.c:1111 utils/adt/json.c:1119 -#: utils/adt/json.c:1127 utils/adt/json.c:1135 utils/adt/json.c:1143 -#: utils/adt/json.c:1173 +#: utils/adt/json.c:767 utils/adt/json.c:807 utils/adt/json.c:822 +#: utils/adt/json.c:833 utils/adt/json.c:843 utils/adt/json.c:894 +#: utils/adt/json.c:925 utils/adt/json.c:943 utils/adt/json.c:955 +#: utils/adt/json.c:967 utils/adt/json.c:1106 utils/adt/json.c:1120 +#: utils/adt/json.c:1131 utils/adt/json.c:1139 utils/adt/json.c:1147 +#: utils/adt/json.c:1155 utils/adt/json.c:1163 utils/adt/json.c:1171 +#: utils/adt/json.c:1179 utils/adt/json.c:1187 utils/adt/json.c:1217 #, c-format msgid "invalid input syntax for type json" msgstr "sintassi di input per il tipo json non valida" -#: utils/adt/json.c:727 +#: utils/adt/json.c:768 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Il carattere con valore 0x%02x deve essere sottoposto ad escape." -#: utils/adt/json.c:767 +#: utils/adt/json.c:808 #, c-format msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "\"\\u\" deve essere seguito da quattro cifre esadecimali." -#: utils/adt/json.c:782 +#: utils/adt/json.c:823 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "un carattere surrogato alto Unicode non può seguire un altro surrogato alto" -#: utils/adt/json.c:793 utils/adt/json.c:803 utils/adt/json.c:851 -#: utils/adt/json.c:912 utils/adt/json.c:924 +#: utils/adt/json.c:834 utils/adt/json.c:844 utils/adt/json.c:895 +#: utils/adt/json.c:956 utils/adt/json.c:968 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "un carattere surrogato basso Unicode deve seguire un surrogato alto" -#: utils/adt/json.c:839 +#: utils/adt/json.c:859 utils/adt/json.c:882 +#, c-format +msgid "unsupported Unicode escape sequence" +msgstr "sequenza di escape Unicode non supportata" + +#: utils/adt/json.c:860 +#, c-format +msgid "\\u0000 cannot be converted to text." +msgstr "\\u0000 non può essere convertito in testo." + +#: utils/adt/json.c:883 #, c-format msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8." msgstr "i codici escape Unicode non possono essere usati per caratteri con codice superiore ad 007F quando l'encoding del server non è UTF8" -#: utils/adt/json.c:882 utils/adt/json.c:900 +#: utils/adt/json.c:926 utils/adt/json.c:944 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "La sequenza di escape \"\\%s\" non è valida." -#: utils/adt/json.c:1063 +#: utils/adt/json.c:1107 #, c-format msgid "The input string ended unexpectedly." msgstr "La stringa di input è terminata inaspettatamente." -#: utils/adt/json.c:1077 +#: utils/adt/json.c:1121 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Era prevista la fine dell'input, trovato \"%s\" invece." -#: utils/adt/json.c:1088 +#: utils/adt/json.c:1132 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Era previsto un valore JSON, trovato \"%s\" invece." -#: utils/adt/json.c:1096 utils/adt/json.c:1144 +#: utils/adt/json.c:1140 utils/adt/json.c:1188 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Era prevista una stringa, trovato \"%s\" invece." -#: utils/adt/json.c:1104 +#: utils/adt/json.c:1148 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Era previsto un elemento di array oppure \"]\", trovato \"%s\" invece." -#: utils/adt/json.c:1112 +#: utils/adt/json.c:1156 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "Era previsto \",\" oppure \"]\", trovato \"%s\" invece." -#: utils/adt/json.c:1120 +#: utils/adt/json.c:1164 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Era prevista una stringa oppure \"}\", trovato \"%s\" invece." -#: utils/adt/json.c:1128 +#: utils/adt/json.c:1172 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "Era previsto \":\", trovato \"%s\" invece." -#: utils/adt/json.c:1136 +#: utils/adt/json.c:1180 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "Era previsto \",\" oppure \"}\", trovato \"%s\" invece." -#: utils/adt/json.c:1174 +#: utils/adt/json.c:1218 #, c-format msgid "Token \"%s\" is invalid." msgstr "Il token \"%s\" non è valido." -#: utils/adt/json.c:1246 +#: utils/adt/json.c:1290 #, c-format msgid "JSON data, line %d: %s%s%s" msgstr "dati JSON, riga %d: %s%s%s" -#: utils/adt/json.c:1389 +#: utils/adt/json.c:1443 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "la chiave deve essere uno scalare, non array, composito né json" -#: utils/adt/json.c:1432 -#, c-format -msgid "JSON does not support infinite date values." -msgstr "JSON non supporta il valore infinito come data." - -#: utils/adt/json.c:1457 utils/adt/json.c:1484 -#, c-format -msgid "JSON does not support infinite timestamp values." -msgstr "JSON non supporta il timestamp infinito." - -#: utils/adt/json.c:1951 utils/adt/json.c:1969 utils/adt/json.c:2063 -#: utils/adt/json.c:2084 utils/adt/json.c:2143 +#: utils/adt/json.c:2003 utils/adt/json.c:2021 utils/adt/json.c:2115 +#: utils/adt/json.c:2136 utils/adt/json.c:2195 #, c-format msgid "could not determine data type for argument %d" msgstr "impossibile determinare il tipo di dato per l'argomento %d" -#: utils/adt/json.c:1956 +#: utils/adt/json.c:2008 utils/adt/jsonb.c:1759 #, c-format msgid "field name must not be null" msgstr "il nome del campo non può essere nullo" -#: utils/adt/json.c:2038 +#: utils/adt/json.c:2090 #, c-format msgid "argument list must have even number of elements" msgstr "la lista di argomenti deve avere un numero pari di elementi" -#: utils/adt/json.c:2039 +#: utils/adt/json.c:2091 #, c-format msgid "The arguments of json_build_object() must consist of alternating keys and values." msgstr "Gli argomenti di json_build_object() devono consistere in una serie alternata di chiavi e valori." -#: utils/adt/json.c:2069 +#: utils/adt/json.c:2121 #, c-format msgid "argument %d cannot be null" msgstr "l'argomento %d non può essere nullo" -#: utils/adt/json.c:2070 +#: utils/adt/json.c:2122 #, c-format msgid "Object keys should be text." msgstr "Le chiavi degli oggetti devono essere testo." -#: utils/adt/json.c:2205 +#: utils/adt/json.c:2257 utils/adt/jsonb.c:1376 #, c-format msgid "array must have two columns" msgstr "l'array deve avere due colonne" -#: utils/adt/json.c:2229 utils/adt/json.c:2313 +#: utils/adt/json.c:2281 utils/adt/json.c:2365 utils/adt/jsonb.c:1400 +#: utils/adt/jsonb.c:1495 #, c-format msgid "null value not allowed for object key" msgstr "valori null non ammessi per le chiavi di oggetti" -#: utils/adt/json.c:2302 +#: utils/adt/json.c:2354 utils/adt/jsonb.c:1484 #, c-format msgid "mismatched array dimensions" msgstr "le dimensioni degli array non combaciano" -#: utils/adt/jsonb.c:202 +#: utils/adt/jsonb.c:256 #, c-format msgid "string too long to represent as jsonb string" msgstr "la stringa è troppo lunga per essere rappresentata come stringa jsonb" -#: utils/adt/jsonb.c:203 +#: utils/adt/jsonb.c:257 #, c-format msgid "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." msgstr "A causa di una restrizione nell'implementazione le stringhe jsonb non possono superare i %d byte." -#: utils/adt/jsonb_util.c:622 +#: utils/adt/jsonb.c:720 +#, c-format +msgid "key value must be scalar, not array, composite or json" +msgstr "il valore della chiave dev'essere scalare, non array, composito o json" + +#: utils/adt/jsonb.c:1189 +#, c-format +msgid "invalid number or arguments: object must be matched key value pairs" +msgstr "numero di argomenti non valido: gli oggetti devono essere coppie chiave-valore appaiate" + +#: utils/adt/jsonb.c:1203 +#, c-format +msgid "arg %d: key cannot be null" +msgstr "argomento %d: la chiave non può essere null" + +#: utils/adt/jsonb.c:1225 utils/adt/jsonb.c:1248 utils/adt/jsonb.c:1310 +#, c-format +msgid "arg %d: could not determine data type" +msgstr "argomento %d: impossibile determinare il tipo di dati" + +#: utils/adt/jsonb.c:1837 +#, c-format +msgid "object keys must be strings" +msgstr "le chiavi dell'oggetto devono essere stringhe" + +#: utils/adt/jsonb_util.c:656 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "il numero di coppie dell'oggetto jsonb supera il massimo consentito (%zu)" -#: utils/adt/jsonb_util.c:663 +#: utils/adt/jsonb_util.c:697 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "il numero di elementi dell'array jsonb supera il massimo consentito (%zu)" -#: utils/adt/jsonb_util.c:1490 utils/adt/jsonb_util.c:1510 +#: utils/adt/jsonb_util.c:1525 utils/adt/jsonb_util.c:1545 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "la dimensione totale degli elementi dell'array jsonb supera il massimo di %u byte" -#: utils/adt/jsonb_util.c:1571 utils/adt/jsonb_util.c:1606 -#: utils/adt/jsonb_util.c:1626 +#: utils/adt/jsonb_util.c:1606 utils/adt/jsonb_util.c:1641 +#: utils/adt/jsonb_util.c:1661 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "la dimensione totale degli elementi dell'oggetto jsonb supera il massimo di %u byte" -#: utils/adt/jsonfuncs.c:263 utils/adt/jsonfuncs.c:428 -#: utils/adt/jsonfuncs.c:1968 utils/adt/jsonfuncs.c:2405 -#: utils/adt/jsonfuncs.c:2911 +#: utils/adt/jsonfuncs.c:296 utils/adt/jsonfuncs.c:461 +#: utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2497 +#: utils/adt/jsonfuncs.c:3003 #, c-format msgid "cannot call %s on a scalar" msgstr "non è possibile eseguire %s su uno scalare" -#: utils/adt/jsonfuncs.c:268 utils/adt/jsonfuncs.c:415 -#: utils/adt/jsonfuncs.c:2394 +#: utils/adt/jsonfuncs.c:301 utils/adt/jsonfuncs.c:448 +#: utils/adt/jsonfuncs.c:2486 #, c-format msgid "cannot call %s on an array" msgstr "non è possibile eseguire %s su un array" -#: utils/adt/jsonfuncs.c:1276 utils/adt/jsonfuncs.c:1311 +#: utils/adt/jsonfuncs.c:1364 utils/adt/jsonfuncs.c:1399 #, c-format msgid "cannot get array length of a scalar" msgstr "non è possibile ottenere la lunghezza di uno scalare" -#: utils/adt/jsonfuncs.c:1280 utils/adt/jsonfuncs.c:1299 +#: utils/adt/jsonfuncs.c:1368 utils/adt/jsonfuncs.c:1387 #, c-format msgid "cannot get array length of a non-array" msgstr "non è possibile ottenere la lunghezza di un oggetto che non è un array" -#: utils/adt/jsonfuncs.c:1376 +#: utils/adt/jsonfuncs.c:1464 #, c-format msgid "cannot call %s on a non-object" msgstr "non è possibile eseguire %s su un argomento che non è un oggetto" -#: utils/adt/jsonfuncs.c:1394 utils/adt/jsonfuncs.c:2081 -#: utils/adt/jsonfuncs.c:2614 +#: utils/adt/jsonfuncs.c:1482 utils/adt/jsonfuncs.c:2169 +#: utils/adt/jsonfuncs.c:2706 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "funzione che restituisce record eseguita in un contesto che non può accettare il tipo record" -#: utils/adt/jsonfuncs.c:1637 +#: utils/adt/jsonfuncs.c:1725 #, c-format msgid "cannot deconstruct an array as an object" msgstr "non è possibile decostruire un array come un oggetto" -#: utils/adt/jsonfuncs.c:1649 +#: utils/adt/jsonfuncs.c:1737 #, c-format msgid "cannot deconstruct a scalar" msgstr "non è possibile decostruire uno scalare" -#: utils/adt/jsonfuncs.c:1695 +#: utils/adt/jsonfuncs.c:1783 #, c-format msgid "cannot extract elements from a scalar" msgstr "non è possibile estrarre elementi da uno scalare" -#: utils/adt/jsonfuncs.c:1699 +#: utils/adt/jsonfuncs.c:1787 #, c-format msgid "cannot extract elements from an object" msgstr "non è possibile estrarre elementi da un oggetto" -#: utils/adt/jsonfuncs.c:1955 utils/adt/jsonfuncs.c:2710 +#: utils/adt/jsonfuncs.c:2043 utils/adt/jsonfuncs.c:2802 #, c-format msgid "cannot call %s on a non-array" msgstr "non è possibile eseguire %s su un argomento che non è un array" -#: utils/adt/jsonfuncs.c:2042 utils/adt/jsonfuncs.c:2590 +#: utils/adt/jsonfuncs.c:2130 utils/adt/jsonfuncs.c:2682 #, c-format msgid "first argument of %s must be a row type" msgstr "il primo elemento di %s deve essere di tipo riga" -#: utils/adt/jsonfuncs.c:2083 +#: utils/adt/jsonfuncs.c:2171 #, c-format msgid "Try calling the function in the FROM clause using a column definition list." msgstr "Prova ad eseguire la funzione nella clausola FROM usando una lista di definizioni di colonne." -#: utils/adt/jsonfuncs.c:2726 utils/adt/jsonfuncs.c:2893 +#: utils/adt/jsonfuncs.c:2818 utils/adt/jsonfuncs.c:2985 #, c-format msgid "argument of %s must be an array of objects" msgstr "l'argomento di %s deve essere un array di oggetti" -#: utils/adt/jsonfuncs.c:2750 +#: utils/adt/jsonfuncs.c:2842 #, c-format msgid "cannot call %s on an object" msgstr "non è possibile eseguire %s su un oggetto" -#: utils/adt/like.c:211 utils/adt/selfuncs.c:5220 +#: utils/adt/jsonfuncs.c:3403 utils/adt/jsonfuncs.c:3456 +#, c-format +msgid "cannot delete from scalar" +msgstr "non è possibile eliminare da uno scalare" + +#: utils/adt/jsonfuncs.c:3461 +#, c-format +msgid "cannot delete from object using integer subscript" +msgstr "non è possibile eliminare da un oggetto usando numeri interi come indici" + +#: utils/adt/jsonfuncs.c:3527 +#, c-format +msgid "cannot set path in scalar" +msgstr "non è possibile impostare un percorso in uno scalare" + +#: utils/adt/jsonfuncs.c:3572 +#, c-format +msgid "cannot delete path in scalar" +msgstr "non è possibile eliminare un percorso in uno scalare" + +#: utils/adt/jsonfuncs.c:3697 +#, c-format +msgid "invalid concatenation of jsonb objects" +msgstr "concatenazione invalida di oggetti jsonb" + +#: utils/adt/levenshtein.c:127 +#, c-format +msgid "argument exceeds the maximum length of %d bytes" +msgstr "l'argomento supera la lunghezza massima di %d byte" + +#: utils/adt/like.c:211 utils/adt/selfuncs.c:5230 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "non è stato possibile determinare quale ordinamento usare per ILIKE" @@ -16753,84 +18125,99 @@ msgstr "non è stato possibile determinare quale ordinamento usare per ILIKE" msgid "LIKE pattern must not end with escape character" msgstr "i pattern per LIKE non possono terminare con un carattere di escape" -#: utils/adt/like_match.c:289 utils/adt/regexp.c:694 +#: utils/adt/like_match.c:289 utils/adt/regexp.c:698 #, c-format msgid "invalid escape string" msgstr "la stringa di escape non è valida" -#: utils/adt/like_match.c:290 utils/adt/regexp.c:695 +#: utils/adt/like_match.c:290 utils/adt/regexp.c:699 #, c-format msgid "Escape string must be empty or one character." msgstr "La stringa di escape deve essere vuota o contenere un solo carattere." -#: utils/adt/mac.c:65 +#: utils/adt/lockfuncs.c:422 +#, c-format +msgid "cannot use advisory locks during a parallel operation" +msgstr "non si possono usare advisory lock in un'operazione parallela" + +#: utils/adt/mac.c:68 #, c-format msgid "invalid input syntax for type macaddr: \"%s\"" msgstr "sintassi di input non valida per il tipo macaddr: \"%s\"" -#: utils/adt/mac.c:72 +#: utils/adt/mac.c:75 #, c-format msgid "invalid octet value in \"macaddr\" value: \"%s\"" msgstr "ottetto non valido nel valore \"macaddr\": \"%s\"" -#: utils/adt/misc.c:111 +#: utils/adt/misc.c:116 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "il PID %d non è un processo del server PostgreSQL" -#: utils/adt/misc.c:154 +#: utils/adt/misc.c:166 #, c-format -msgid "must be superuser or have the same role to cancel queries running in other server processes" -msgstr "solo un superutente oppure lo stesso ruolo può cancellare le query in esecuzione in altri processi del server" +msgid "must be a superuser to cancel superuser query" +msgstr "solo un superutente può cancellare la query di un superutente" #: utils/adt/misc.c:171 #, c-format -msgid "must be superuser or have the same role to terminate other server processes" -msgstr "solo un superutente oppure lo stesso ruolo può interrompere altri processi" +msgid "must be a member of the role whose query is being cancelled" +msgstr "occorre essere membro del ruolo la cui query deve essere cancellata" -#: utils/adt/misc.c:185 +#: utils/adt/misc.c:190 +#, c-format +msgid "must be a superuser to terminate superuser process" +msgstr "solo un superutente può terminare il processo di un superutente" + +#: utils/adt/misc.c:195 +#, c-format +msgid "must be a member of the role whose process is being terminated" +msgstr "occorre essere membro del ruolo il cui processe deve essere terminato" + +#: utils/adt/misc.c:209 #, c-format msgid "must be superuser to signal the postmaster" msgstr "solo un superutente può inviare segnali al postmaster" -#: utils/adt/misc.c:190 +#: utils/adt/misc.c:214 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "invio del segnale al postmaster fallito: %m" -#: utils/adt/misc.c:207 +#: utils/adt/misc.c:231 #, c-format msgid "must be superuser to rotate log files" msgstr "solo un superutente può eseguire la rotazione dei file di log" -#: utils/adt/misc.c:212 +#: utils/adt/misc.c:236 #, c-format msgid "rotation not possible because log collection not active" msgstr "non è stato possibile eseguire la rotazione perché la raccolta dei log non è attiva" -#: utils/adt/misc.c:249 +#: utils/adt/misc.c:273 #, c-format msgid "global tablespace never has databases" msgstr "il tablespace globale non contiene mai dei database" -#: utils/adt/misc.c:270 +#: utils/adt/misc.c:294 #, c-format msgid "%u is not a tablespace OID" msgstr "%u non è l'OID di un tablespace" -#: utils/adt/misc.c:465 +#: utils/adt/misc.c:491 msgid "unreserved" msgstr "non riservato" -#: utils/adt/misc.c:469 +#: utils/adt/misc.c:495 msgid "unreserved (cannot be function or type name)" msgstr "non riservato (non può essere una funzione o il nome di un tipo)" -#: utils/adt/misc.c:473 +#: utils/adt/misc.c:499 msgid "reserved (can be function or type name)" msgstr "riservato (può essere una funzione o il nome di un tipo)" -#: utils/adt/misc.c:477 +#: utils/adt/misc.c:503 msgid "reserved" msgstr "riservato" @@ -16869,8 +18256,8 @@ msgstr "il valore \"%s\" non è valido per cidr" msgid "Value has bits set to right of mask." msgstr "Il valore ha dei bit settati a destra della maschera." -#: utils/adt/network.c:111 utils/adt/network.c:580 utils/adt/network.c:605 -#: utils/adt/network.c:630 +#: utils/adt/network.c:111 utils/adt/network.c:607 utils/adt/network.c:632 +#: utils/adt/network.c:657 #, c-format msgid "could not format inet value: %m" msgstr "formattazione del valore inet fallita: %m" @@ -16903,103 +18290,123 @@ msgstr "valore \"cidr\" esterno non valido" msgid "invalid mask length: %d" msgstr "la lunghezza della maschera non è valida: %d" -#: utils/adt/network.c:648 +#: utils/adt/network.c:675 #, c-format msgid "could not format cidr value: %m" msgstr "formattazione del valore cidr fallita: %m" -#: utils/adt/network.c:1264 +#: utils/adt/network.c:917 +#, c-format +msgid "cannot merge addresses from different families" +msgstr "non è possibile unire indirizzi di famiglie diverse" + +#: utils/adt/network.c:1343 #, c-format msgid "cannot AND inet values of different sizes" msgstr "non è possibile eseguire l'AND fra valori di tipo inet di dimensione diversa" -#: utils/adt/network.c:1296 +#: utils/adt/network.c:1375 #, c-format msgid "cannot OR inet values of different sizes" msgstr "non è possibile eseguire l'OR fra valori di tipo inet di dimensione diversa" -#: utils/adt/network.c:1357 utils/adt/network.c:1433 +#: utils/adt/network.c:1436 utils/adt/network.c:1512 #, c-format msgid "result is out of range" msgstr "il risultato è fuori dall'intervallo consentito" -#: utils/adt/network.c:1398 +#: utils/adt/network.c:1477 #, c-format msgid "cannot subtract inet values of different sizes" msgstr "non è possibile sottrarre valori di tipo inet di dimensione diversa" -#: utils/adt/numeric.c:485 utils/adt/numeric.c:512 utils/adt/numeric.c:3704 -#: utils/adt/numeric.c:3727 utils/adt/numeric.c:3751 utils/adt/numeric.c:3758 +#: utils/adt/numeric.c:549 utils/adt/numeric.c:576 utils/adt/numeric.c:4604 +#: utils/adt/numeric.c:4627 utils/adt/numeric.c:4651 utils/adt/numeric.c:4658 #, c-format msgid "invalid input syntax for type numeric: \"%s\"" msgstr "la sintassi di input non è valida per il tipo numeric: \"%s\"" -#: utils/adt/numeric.c:702 +#: utils/adt/numeric.c:766 #, c-format msgid "invalid length in external \"numeric\" value" msgstr "la lunghezza nel valore \"numeric\" esterno non è valida" -#: utils/adt/numeric.c:715 +#: utils/adt/numeric.c:779 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "il segno nel valore \"numeric\" esterno non è valido" -#: utils/adt/numeric.c:721 +#: utils/adt/numeric.c:785 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "la scala nel valore \"numeric\" esterno non è valida" -#: utils/adt/numeric.c:730 +#: utils/adt/numeric.c:794 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "una delle cifre nel valore \"numeric\" esterno non è valida" -#: utils/adt/numeric.c:921 utils/adt/numeric.c:935 +#: utils/adt/numeric.c:985 utils/adt/numeric.c:999 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "la precisione di NUMERIC (%d) deve essere compresa fra 1 e %d" -#: utils/adt/numeric.c:926 +#: utils/adt/numeric.c:990 #, c-format msgid "NUMERIC scale %d must be between 0 and precision %d" msgstr "il numero di cifre decimali di NUMERIC (%d) deve essere compreso fra 0 e la precisione %d" -#: utils/adt/numeric.c:944 +#: utils/adt/numeric.c:1008 #, c-format msgid "invalid NUMERIC type modifier" msgstr "modificatore del tipo NUMERIC non valido" -#: utils/adt/numeric.c:1951 utils/adt/numeric.c:4201 utils/adt/numeric.c:6170 +#: utils/adt/numeric.c:1340 +#, c-format +msgid "start value cannot be NaN" +msgstr "il valore d'inizio non può essere NaN" + +#: utils/adt/numeric.c:1345 +#, c-format +msgid "stop value cannot be NaN" +msgstr "il valore di fine non può essere NaN" + +#: utils/adt/numeric.c:1355 +#, c-format +msgid "step size cannot be NaN" +msgstr "la dimensione dell'intervallo non può essere NaN" + +#: utils/adt/numeric.c:2550 utils/adt/numeric.c:5104 utils/adt/numeric.c:7120 #, c-format msgid "value overflows numeric format" msgstr "il valore causa un overflow nel formato numeric" -#: utils/adt/numeric.c:2282 +#: utils/adt/numeric.c:2881 #, c-format msgid "cannot convert NaN to integer" msgstr "non è possibile convertire NaN in un integer" -#: utils/adt/numeric.c:2348 +#: utils/adt/numeric.c:2947 #, c-format msgid "cannot convert NaN to bigint" msgstr "non è possibile convertire NaN in un bigint" -#: utils/adt/numeric.c:2393 +#: utils/adt/numeric.c:2992 #, c-format msgid "cannot convert NaN to smallint" msgstr "non è possibile convertire NaN in uno smallint" -#: utils/adt/numeric.c:4271 +#: utils/adt/numeric.c:5174 #, c-format msgid "numeric field overflow" msgstr "il campo numeric causa un overflow" -#: utils/adt/numeric.c:4272 +#: utils/adt/numeric.c:5175 #, c-format msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." msgstr "Un campo con precisione %d e %d cifre decimali deve arrotondarsi ad un valore assoluto inferiore a %s%d." -#: utils/adt/numeric.c:5727 +#: utils/adt/numeric.c:6677 #, c-format msgid "argument for function \"exp\" too big" msgstr "il valore dell'argomento per la funzione \"exp\" è troppo grande" @@ -17054,38 +18461,43 @@ msgstr "il carattere richiesto non è valido per la codifica: %d" msgid "null character not permitted" msgstr "non sono consentiti caratteri nulli" -#: utils/adt/orderedsetaggs.c:423 utils/adt/orderedsetaggs.c:528 -#: utils/adt/orderedsetaggs.c:667 +#: utils/adt/orderedsetaggs.c:425 utils/adt/orderedsetaggs.c:530 +#: utils/adt/orderedsetaggs.c:669 #, c-format msgid "percentile value %g is not between 0 and 1" msgstr "il valore percentile %g non è tra 0 e 1" -#: utils/adt/pg_locale.c:1039 +#: utils/adt/pg_locale.c:911 +#, c-format +msgid "Apply system library package updates." +msgstr "Applica gli aggiornamenti ai pacchetti di sistema." + +#: utils/adt/pg_locale.c:1116 #, c-format msgid "could not create locale \"%s\": %m" msgstr "creazione del locale \"%s\" fallita: %m" -#: utils/adt/pg_locale.c:1042 +#: utils/adt/pg_locale.c:1119 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "Il sistema operativo non ha trovato dati di locale per il locale di nome \"%s\"." -#: utils/adt/pg_locale.c:1129 +#: utils/adt/pg_locale.c:1206 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "le collazioni con tipi diversi di ordinamento e ctype non sono supportati su questa piattaforma" -#: utils/adt/pg_locale.c:1144 +#: utils/adt/pg_locale.c:1221 #, c-format msgid "nondefault collations are not supported on this platform" msgstr "le collazioni non predefinite non sono supportate su questa piattaforma" -#: utils/adt/pg_locale.c:1315 +#: utils/adt/pg_locale.c:1392 #, c-format msgid "invalid multibyte character for locale" msgstr "carattere multibyte non valido per il locale" -#: utils/adt/pg_locale.c:1316 +#: utils/adt/pg_locale.c:1393 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "Il locale LC_CTYPE del server probabilmente non è compatibile con la codifica del database." @@ -17095,6 +18507,11 @@ msgstr "Il locale LC_CTYPE del server probabilmente non è compatibile con la co msgid "invalid input syntax for type pg_lsn: \"%s\"" msgstr "sintassi di input non valida per il tipo pg_lsn: \"%s\"" +#: utils/adt/pg_upgrade_support.c:39 +#, c-format +msgid "function can only be called when server is in binary upgrade mode" +msgstr "la funzione può essere richiamata solo quando il server è in modalità di aggiornamento binario" + #: utils/adt/pseudotypes.c:95 #, c-format msgid "cannot accept a value of type any" @@ -17162,58 +18579,74 @@ msgstr "non è possibile mostrare un valore di tipo fdw_handler" #: utils/adt/pseudotypes.c:384 #, c-format +msgid "cannot accept a value of type tsm_handler" +msgstr "non è possibile accettare un valore di tipo tsm_handler" + +#: utils/adt/pseudotypes.c:397 +#, c-format +msgid "cannot display a value of type tsm_handler" +msgstr "non è possibile mostrare un valore di tipo tsm_handler" + +#: utils/adt/pseudotypes.c:411 +#, c-format msgid "cannot accept a value of type internal" msgstr "non è possibile accettare un valore di tipo internal" -#: utils/adt/pseudotypes.c:397 +#: utils/adt/pseudotypes.c:424 #, c-format msgid "cannot display a value of type internal" msgstr "non è possibile mostrare un valore di tipo internal" -#: utils/adt/pseudotypes.c:411 +#: utils/adt/pseudotypes.c:438 #, c-format msgid "cannot accept a value of type opaque" msgstr "non è possibile accettare un valore di tipo opaque" -#: utils/adt/pseudotypes.c:424 +#: utils/adt/pseudotypes.c:451 #, c-format msgid "cannot display a value of type opaque" msgstr "non è possibile mostrare un valore di tipo opaque" -#: utils/adt/pseudotypes.c:438 +#: utils/adt/pseudotypes.c:465 #, c-format msgid "cannot accept a value of type anyelement" msgstr "non è possibile accettare un valore di tipo anyelement" -#: utils/adt/pseudotypes.c:451 +#: utils/adt/pseudotypes.c:478 #, c-format msgid "cannot display a value of type anyelement" msgstr "non è possibile mostrare un valore di tipo anyelement" -#: utils/adt/pseudotypes.c:464 +#: utils/adt/pseudotypes.c:491 #, c-format msgid "cannot accept a value of type anynonarray" msgstr "non è possibile accettare un valore di tipo anynonarray" -#: utils/adt/pseudotypes.c:477 +#: utils/adt/pseudotypes.c:504 #, c-format msgid "cannot display a value of type anynonarray" msgstr "non è possibile mostrare un valore di tipo anynonarray" -#: utils/adt/pseudotypes.c:490 +#: utils/adt/pseudotypes.c:517 #, c-format msgid "cannot accept a value of a shell type" msgstr "non è possibile accettare un valore di un tipo non completamente definito" -#: utils/adt/pseudotypes.c:503 +#: utils/adt/pseudotypes.c:530 #, c-format msgid "cannot display a value of a shell type" msgstr "non è possibile mostrare un valore di un tipo non completamente definito" -#: utils/adt/pseudotypes.c:525 utils/adt/pseudotypes.c:549 +#: utils/adt/pseudotypes.c:552 utils/adt/pseudotypes.c:577 +#: utils/adt/pseudotypes.c:605 utils/adt/pseudotypes.c:633 #, c-format -msgid "cannot accept a value of type pg_node_tree" -msgstr "non è possibile accettare un valore di tipo pg_node_tree" +msgid "cannot accept a value of type %s" +msgstr "non è possibile accettare un valore del tipo %s" + +#: utils/adt/pseudotypes.c:620 utils/adt/pseudotypes.c:646 +#, c-format +msgid "cannot output a value of type %s" +msgstr "non è possibile mostrare un valore del tipo %s" #: utils/adt/rangetypes.c:396 #, c-format @@ -17230,57 +18663,57 @@ msgstr "il risultato della differenza di intervalli non sarebbe continuo" msgid "result of range union would not be contiguous" msgstr "il risultato dell'unione di intervalli non sarebbe continuo" -#: utils/adt/rangetypes.c:1502 +#: utils/adt/rangetypes.c:1530 #, c-format msgid "range lower bound must be less than or equal to range upper bound" msgstr "il limite inferiore dell'intervallo dev'essere minore o uguale del limite superiore" -#: utils/adt/rangetypes.c:1885 utils/adt/rangetypes.c:1898 -#: utils/adt/rangetypes.c:1912 +#: utils/adt/rangetypes.c:1913 utils/adt/rangetypes.c:1926 +#: utils/adt/rangetypes.c:1940 #, c-format msgid "invalid range bound flags" msgstr "flag di limiti dell'intervallo non valido" -#: utils/adt/rangetypes.c:1886 utils/adt/rangetypes.c:1899 -#: utils/adt/rangetypes.c:1913 +#: utils/adt/rangetypes.c:1914 utils/adt/rangetypes.c:1927 +#: utils/adt/rangetypes.c:1941 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "I valori validi sono \"[]\", \"[)\", \"(]\" e \"()\"." -#: utils/adt/rangetypes.c:1978 utils/adt/rangetypes.c:1995 -#: utils/adt/rangetypes.c:2008 utils/adt/rangetypes.c:2026 -#: utils/adt/rangetypes.c:2037 utils/adt/rangetypes.c:2081 -#: utils/adt/rangetypes.c:2089 +#: utils/adt/rangetypes.c:2006 utils/adt/rangetypes.c:2023 +#: utils/adt/rangetypes.c:2036 utils/adt/rangetypes.c:2054 +#: utils/adt/rangetypes.c:2065 utils/adt/rangetypes.c:2109 +#: utils/adt/rangetypes.c:2117 #, c-format msgid "malformed range literal: \"%s\"" msgstr "letterale di intervallo non definito correttamente: \"%s\"" -#: utils/adt/rangetypes.c:1980 +#: utils/adt/rangetypes.c:2008 #, c-format msgid "Junk after \"empty\" key word." msgstr "Dati spuri dopo la parola chiave \"empty\"." -#: utils/adt/rangetypes.c:1997 +#: utils/adt/rangetypes.c:2025 #, c-format msgid "Missing left parenthesis or bracket." msgstr "Manca la parentesi aperta." -#: utils/adt/rangetypes.c:2010 +#: utils/adt/rangetypes.c:2038 #, c-format msgid "Missing comma after lower bound." msgstr "Manca la virgola dopo il limite inferiore." -#: utils/adt/rangetypes.c:2028 +#: utils/adt/rangetypes.c:2056 #, c-format msgid "Too many commas." msgstr "Troppe virgole." -#: utils/adt/rangetypes.c:2039 +#: utils/adt/rangetypes.c:2067 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "Caratteri spuri dopo la parentesi chiusa." -#: utils/adt/regexp.c:285 utils/adt/regexp.c:1234 utils/adt/varlena.c:3042 +#: utils/adt/regexp.c:285 utils/adt/regexp.c:1288 utils/adt/varlena.c:3588 #, c-format msgid "regular expression failed: %s" msgstr "l'espressione regolare %s è fallita" @@ -17290,140 +18723,150 @@ msgstr "l'espressione regolare %s è fallita" msgid "invalid regexp option: \"%c\"" msgstr "l'opzione regexp \"%c\" non è valida" -#: utils/adt/regexp.c:894 +#: utils/adt/regexp.c:948 #, c-format msgid "regexp_split does not support the global option" msgstr "l'opzione global (g) non è supportata per regexp_split" -#: utils/adt/regproc.c:127 utils/adt/regproc.c:147 +#: utils/adt/regproc.c:128 utils/adt/regproc.c:148 #, c-format msgid "more than one function named \"%s\"" msgstr "più di una funzione si chiama \"%s\"" -#: utils/adt/regproc.c:551 utils/adt/regproc.c:571 +#: utils/adt/regproc.c:587 utils/adt/regproc.c:607 #, c-format msgid "more than one operator named %s" msgstr "più di un operatore si chiama %s" -#: utils/adt/regproc.c:738 utils/adt/regproc.c:779 gram.y:6846 +#: utils/adt/regproc.c:774 utils/adt/regproc.c:815 gram.y:7253 #, c-format msgid "missing argument" msgstr "argomento mancante" -#: utils/adt/regproc.c:739 utils/adt/regproc.c:780 gram.y:6847 +#: utils/adt/regproc.c:775 utils/adt/regproc.c:816 gram.y:7254 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Usa NONE per indicare l'argomento mancante in un operatore unario." -#: utils/adt/regproc.c:743 utils/adt/regproc.c:784 utils/adt/regproc.c:1702 -#: utils/adt/ruleutils.c:7626 utils/adt/ruleutils.c:7749 +#: utils/adt/regproc.c:779 utils/adt/regproc.c:820 utils/adt/regproc.c:1962 +#: utils/adt/ruleutils.c:8060 utils/adt/ruleutils.c:8185 #, c-format msgid "too many arguments" msgstr "troppi argomenti" -#: utils/adt/regproc.c:744 utils/adt/regproc.c:785 +#: utils/adt/regproc.c:780 utils/adt/regproc.c:821 #, c-format msgid "Provide two argument types for operator." msgstr "Fornisci due tipi di argomento per l'operatore." -#: utils/adt/regproc.c:1537 utils/adt/regproc.c:1542 utils/adt/varlena.c:2313 -#: utils/adt/varlena.c:2318 +#: utils/adt/regproc.c:1797 utils/adt/regproc.c:1802 utils/adt/varlena.c:2859 +#: utils/adt/varlena.c:2864 #, c-format msgid "invalid name syntax" msgstr "la sintassi per il nome non è valida" -#: utils/adt/regproc.c:1600 +#: utils/adt/regproc.c:1860 #, c-format msgid "expected a left parenthesis" msgstr "era attesa un parentesi tonda aperta" -#: utils/adt/regproc.c:1616 +#: utils/adt/regproc.c:1876 #, c-format msgid "expected a right parenthesis" msgstr "era attesa un parentesi tonda chiusa" -#: utils/adt/regproc.c:1635 +#: utils/adt/regproc.c:1895 #, c-format msgid "expected a type name" msgstr "era atteso il nome di un tipo" -#: utils/adt/regproc.c:1667 +#: utils/adt/regproc.c:1927 #, c-format msgid "improper type name" msgstr "il nome del tipo non è corretto" -#: utils/adt/ri_triggers.c:310 utils/adt/ri_triggers.c:367 -#: utils/adt/ri_triggers.c:786 utils/adt/ri_triggers.c:1009 -#: utils/adt/ri_triggers.c:1165 utils/adt/ri_triggers.c:1346 -#: utils/adt/ri_triggers.c:1511 utils/adt/ri_triggers.c:1687 -#: utils/adt/ri_triggers.c:1867 utils/adt/ri_triggers.c:2058 -#: utils/adt/ri_triggers.c:2116 utils/adt/ri_triggers.c:2221 -#: utils/adt/ri_triggers.c:2386 gram.y:3248 +#: utils/adt/ri_triggers.c:312 utils/adt/ri_triggers.c:369 +#: utils/adt/ri_triggers.c:788 utils/adt/ri_triggers.c:1011 +#: utils/adt/ri_triggers.c:1167 utils/adt/ri_triggers.c:1348 +#: utils/adt/ri_triggers.c:1513 utils/adt/ri_triggers.c:1689 +#: utils/adt/ri_triggers.c:1869 utils/adt/ri_triggers.c:2060 +#: utils/adt/ri_triggers.c:2118 utils/adt/ri_triggers.c:2223 +#: utils/adt/ri_triggers.c:2400 gram.y:3332 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "il MATCH PARTIAL non è stato ancora implementato" -#: utils/adt/ri_triggers.c:339 utils/adt/ri_triggers.c:2474 -#: utils/adt/ri_triggers.c:3227 +#: utils/adt/ri_triggers.c:341 utils/adt/ri_triggers.c:2488 +#: utils/adt/ri_triggers.c:3299 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "la INSERT o l'UPDATE sulla tabella \"%s\" viola il vincolo di chiave esterna \"%s\"" -#: utils/adt/ri_triggers.c:342 utils/adt/ri_triggers.c:2477 +#: utils/adt/ri_triggers.c:344 utils/adt/ri_triggers.c:2491 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL non consente l'uso di valori chiave nulli e non nulli insieme." -#: utils/adt/ri_triggers.c:2716 +#: utils/adt/ri_triggers.c:2730 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "la funzione \"%s\" deve essere eseguita per un INSERT" -#: utils/adt/ri_triggers.c:2722 +#: utils/adt/ri_triggers.c:2736 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "la funzione \"%s\" deve essere eseguita per un UPDATE" -#: utils/adt/ri_triggers.c:2728 +#: utils/adt/ri_triggers.c:2742 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "la funzione \"%s\" deve essere eseguita per una DELETE" -#: utils/adt/ri_triggers.c:2751 +#: utils/adt/ri_triggers.c:2765 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "non ci sono elementi pg_constraint per il trigger \"%s\" sulla tabella \"%s\"" -#: utils/adt/ri_triggers.c:2753 +#: utils/adt/ri_triggers.c:2767 #, c-format msgid "Remove this referential integrity trigger and its mates, then do ALTER TABLE ADD CONSTRAINT." msgstr "Rimuovi questo trigger di integrità referenziale e relativi elementi collegati, poi esegui ALTER TABLE ADD CONSTRAINT." -#: utils/adt/ri_triggers.c:3177 +#: utils/adt/ri_triggers.c:3209 #, c-format msgid "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave unexpected result" msgstr "la query di integrità referenziale su \"%s\" dal vincolo \"%s\" su \"%s\" ha restituito un risultato inatteso" -#: utils/adt/ri_triggers.c:3181 +#: utils/adt/ri_triggers.c:3213 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Ciò è probabilmente dovuto ad una RULE che ha riscritto la query." -#: utils/adt/ri_triggers.c:3230 +#: utils/adt/ri_triggers.c:3303 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "La chiave (%s)=(%s) non è presente nella tabella \"%s\"." -#: utils/adt/ri_triggers.c:3237 +#: utils/adt/ri_triggers.c:3306 +#, c-format +msgid "Key is not present in table \"%s\"." +msgstr "La chiave non è presente nella tabella \"%s\"." + +#: utils/adt/ri_triggers.c:3312 #, c-format msgid "update or delete on table \"%s\" violates foreign key constraint \"%s\" on table \"%s\"" msgstr "l'istruzione UPDATE o DELETE sulla tabella \"%s\" viola il vincolo di chiave esterna \"%s\" sulla tabella \"%s\"" -#: utils/adt/ri_triggers.c:3241 +#: utils/adt/ri_triggers.c:3317 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "La chiave (%s)=(%s) è ancora referenziata dalla tabella \"%s\"." +#: utils/adt/ri_triggers.c:3320 +#, c-format +msgid "Key is still referenced from table \"%s\"." +msgstr "La chiave è ancora referenziata dalla tabella \"%s\"." + #: utils/adt/rowtypes.c:102 utils/adt/rowtypes.c:477 #, c-format msgid "input of anonymous composite types is not implemented" @@ -17482,17 +18925,17 @@ msgstr "non è possibile confrontare i tipi di colonne dissimili %s e %s alla co msgid "cannot compare record types with different numbers of columns" msgstr "non è possibile confrontare tipi di record con diverso numero di colonne" -#: utils/adt/ruleutils.c:3999 +#: utils/adt/ruleutils.c:4076 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "la regola \"%s\" ha un tipo di evento non supportato %d" -#: utils/adt/selfuncs.c:5205 +#: utils/adt/selfuncs.c:5215 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "il confronto case insensitive sul tipo bytea non è supportato" -#: utils/adt/selfuncs.c:5308 +#: utils/adt/selfuncs.c:5318 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "il confronto con espressioni regolari sul tipo bytea non è supportato" @@ -17502,133 +18945,133 @@ msgstr "il confronto con espressioni regolari sul tipo bytea non è supportato" msgid "invalid input syntax for type tid: \"%s\"" msgstr "sintassi di input non valida per il tipo tid: \"%s\"" -#: utils/adt/timestamp.c:107 +#: utils/adt/timestamp.c:100 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "la precisione di TIMESTAMP(%d)%s non può essere negativa" -#: utils/adt/timestamp.c:113 +#: utils/adt/timestamp.c:106 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "la precisione di TIMESTAMP(%d)%s è stata ridotta al massimo consentito %d" -#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:452 +#: utils/adt/timestamp.c:171 utils/adt/timestamp.c:445 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp fuori dall'intervallo consentito: \"%s\"" -#: utils/adt/timestamp.c:196 utils/adt/timestamp.c:470 -#: utils/adt/timestamp.c:925 +#: utils/adt/timestamp.c:189 utils/adt/timestamp.c:463 +#: utils/adt/timestamp.c:918 #, c-format msgid "date/time value \"%s\" is no longer supported" msgstr "il valore \"%s\" per i tipi date/time non è più supportato" -#: utils/adt/timestamp.c:266 +#: utils/adt/timestamp.c:259 #, c-format msgid "timestamp cannot be NaN" msgstr "il timestamp non può essere NaN" -#: utils/adt/timestamp.c:387 +#: utils/adt/timestamp.c:380 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "la precisione di timestamp(%d) deve essere compresa fra %d e %d" -#: utils/adt/timestamp.c:520 +#: utils/adt/timestamp.c:513 #, c-format msgid "invalid input syntax for numeric time zone: \"%s\"" msgstr "sintassi di input non valida per il fuso orario numerico: \"%s\"" -#: utils/adt/timestamp.c:522 +#: utils/adt/timestamp.c:515 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "Il primo carattere dei fusi orari numerici deve essere \"-\" o \"+\"." -#: utils/adt/timestamp.c:535 +#: utils/adt/timestamp.c:528 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "fuso orario numerico \"%s\" fuori dall'intervallo consentito" -#: utils/adt/timestamp.c:638 utils/adt/timestamp.c:648 +#: utils/adt/timestamp.c:631 utils/adt/timestamp.c:641 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestamp fuori dall'intervallo consentito: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:919 utils/adt/timestamp.c:1490 -#: utils/adt/timestamp.c:1993 utils/adt/timestamp.c:3133 -#: utils/adt/timestamp.c:3138 utils/adt/timestamp.c:3143 -#: utils/adt/timestamp.c:3193 utils/adt/timestamp.c:3200 -#: utils/adt/timestamp.c:3207 utils/adt/timestamp.c:3227 -#: utils/adt/timestamp.c:3234 utils/adt/timestamp.c:3241 -#: utils/adt/timestamp.c:3270 utils/adt/timestamp.c:3277 -#: utils/adt/timestamp.c:3322 utils/adt/timestamp.c:3613 -#: utils/adt/timestamp.c:3742 utils/adt/timestamp.c:4133 +#: utils/adt/timestamp.c:912 utils/adt/timestamp.c:1483 +#: utils/adt/timestamp.c:1986 utils/adt/timestamp.c:3126 +#: utils/adt/timestamp.c:3131 utils/adt/timestamp.c:3136 +#: utils/adt/timestamp.c:3186 utils/adt/timestamp.c:3193 +#: utils/adt/timestamp.c:3200 utils/adt/timestamp.c:3220 +#: utils/adt/timestamp.c:3227 utils/adt/timestamp.c:3234 +#: utils/adt/timestamp.c:3263 utils/adt/timestamp.c:3270 +#: utils/adt/timestamp.c:3315 utils/adt/timestamp.c:3606 +#: utils/adt/timestamp.c:3735 utils/adt/timestamp.c:4126 #, c-format msgid "interval out of range" msgstr "il valore di interval è fuori dall'intervallo consentito" -#: utils/adt/timestamp.c:1060 utils/adt/timestamp.c:1093 +#: utils/adt/timestamp.c:1053 utils/adt/timestamp.c:1086 #, c-format msgid "invalid INTERVAL type modifier" msgstr "il modificatore di tipo su INTERVAL non è valido" -#: utils/adt/timestamp.c:1076 +#: utils/adt/timestamp.c:1069 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "la precisione di INTERVAL(%d) non può essere negativa" -#: utils/adt/timestamp.c:1082 +#: utils/adt/timestamp.c:1075 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "la precisione di INTERVAL(%d) è stata ridotta al massimo consentito %d" -#: utils/adt/timestamp.c:1434 +#: utils/adt/timestamp.c:1427 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "la precisione di INTERVAL(%d) deve essere compresa fra %d e %d" -#: utils/adt/timestamp.c:2722 +#: utils/adt/timestamp.c:2715 #, c-format msgid "cannot subtract infinite timestamps" msgstr "non è possibile sottrarre valori infiniti di TIMESTAMP" -#: utils/adt/timestamp.c:3868 utils/adt/timestamp.c:4474 -#: utils/adt/timestamp.c:4514 +#: utils/adt/timestamp.c:3861 utils/adt/timestamp.c:4467 +#: utils/adt/timestamp.c:4507 #, c-format msgid "timestamp units \"%s\" not supported" msgstr "unità \"%s\" di timestamp non supportata" -#: utils/adt/timestamp.c:3882 utils/adt/timestamp.c:4524 +#: utils/adt/timestamp.c:3875 utils/adt/timestamp.c:4517 #, c-format msgid "timestamp units \"%s\" not recognized" msgstr "unità \"%s\" di timestamp non riconosciuta" -#: utils/adt/timestamp.c:4022 utils/adt/timestamp.c:4685 -#: utils/adt/timestamp.c:4726 +#: utils/adt/timestamp.c:4015 utils/adt/timestamp.c:4678 +#: utils/adt/timestamp.c:4719 #, c-format msgid "timestamp with time zone units \"%s\" not supported" msgstr "unità \"%s\" di timestamp with time zone non supportata" -#: utils/adt/timestamp.c:4039 utils/adt/timestamp.c:4735 +#: utils/adt/timestamp.c:4032 utils/adt/timestamp.c:4728 #, c-format msgid "timestamp with time zone units \"%s\" not recognized" msgstr "unità \"%s\" di timestamp with time zone non riconosciuta" -#: utils/adt/timestamp.c:4120 +#: utils/adt/timestamp.c:4113 #, c-format msgid "interval units \"%s\" not supported because months usually have fractional weeks" msgstr "le unità di intervallo \"%s\" non sono supportate perché generalmente i mesi hanno settimane frazionali" -#: utils/adt/timestamp.c:4126 utils/adt/timestamp.c:4841 +#: utils/adt/timestamp.c:4119 utils/adt/timestamp.c:4834 #, c-format msgid "interval units \"%s\" not supported" msgstr "unità \"%s\" di interval non supportata" -#: utils/adt/timestamp.c:4142 utils/adt/timestamp.c:4868 +#: utils/adt/timestamp.c:4135 utils/adt/timestamp.c:4861 #, c-format msgid "interval units \"%s\" not recognized" msgstr "unità \"%s\" di interval non riconosciuta" -#: utils/adt/timestamp.c:4951 utils/adt/timestamp.c:5135 +#: utils/adt/timestamp.c:5025 utils/adt/timestamp.c:5255 #, c-format msgid "could not convert to time zone \"%s\"" msgstr "conversione al fuso orario \"%s\" fallita" @@ -17653,43 +19096,43 @@ msgstr "la funzione trigger suppress_redundant_updates deve essere invocata prim msgid "suppress_redundant_updates_trigger: must be called for each row" msgstr "la funzione trigger suppress_redundant_updates deve essere invocata su ogni riga" -#: utils/adt/tsgistidx.c:98 +#: utils/adt/tsgistidx.c:99 #, c-format msgid "gtsvector_in not implemented" msgstr "la funzione gtsvector_in non è implementata" -#: utils/adt/tsquery.c:154 utils/adt/tsquery.c:389 +#: utils/adt/tsquery.c:155 utils/adt/tsquery.c:390 #: utils/adt/tsvector_parser.c:133 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "errore di sintassi in tsquery: \"%s\"" -#: utils/adt/tsquery.c:175 +#: utils/adt/tsquery.c:176 #, c-format msgid "no operand in tsquery: \"%s\"" msgstr "non ci sono operandi in tsquery: \"%s\"" -#: utils/adt/tsquery.c:247 +#: utils/adt/tsquery.c:248 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "il valore in tsquery è troppo grande: \"%s\"" -#: utils/adt/tsquery.c:252 +#: utils/adt/tsquery.c:253 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "l'operando in tsquery è troppo lungo: \"%s\"" -#: utils/adt/tsquery.c:280 +#: utils/adt/tsquery.c:281 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "la parola in tsquery è troppo lunga: \"%s\"" -#: utils/adt/tsquery.c:509 +#: utils/adt/tsquery.c:510 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "la query di ricerca di testo non contiene alcun lessema: \"%s\"" -#: utils/adt/tsquery.c:520 utils/adt/tsquery_util.c:340 +#: utils/adt/tsquery.c:521 utils/adt/tsquery_util.c:340 #, c-format msgid "tsquery is too large" msgstr "tsquery troppo grande" @@ -17704,22 +19147,22 @@ msgstr "la query di ricerca di testo contiene solo stop word o non contiene less msgid "ts_rewrite query must return two tsquery columns" msgstr "la query ts_rewrite deve restituire due colonne tsquery" -#: utils/adt/tsrank.c:403 +#: utils/adt/tsrank.c:410 #, c-format msgid "array of weight must be one-dimensional" msgstr "l'array dei pesi deve avere una sola dimensione" -#: utils/adt/tsrank.c:408 +#: utils/adt/tsrank.c:415 #, c-format msgid "array of weight is too short" msgstr "l'array dei pesi è troppo corto" -#: utils/adt/tsrank.c:413 +#: utils/adt/tsrank.c:420 #, c-format msgid "array of weight must not contain nulls" msgstr "l'array dei pesi non può contenere valori nulli" -#: utils/adt/tsrank.c:422 utils/adt/tsrank.c:749 +#: utils/adt/tsrank.c:429 utils/adt/tsrank.c:756 #, c-format msgid "weight out of range" msgstr "il peso è fuori dall'intervallo consentito" @@ -17789,6 +19232,16 @@ msgstr "non c'è alcun carattere sottoposto ad escape: \"%s\"" msgid "wrong position info in tsvector: \"%s\"" msgstr "le informazioni di posizione nel tsvector sono errate: \"%s\"" +#: utils/adt/txid.c:339 +#, c-format +msgid "invalid input syntax for type txid_snapshot: \"%s\"" +msgstr "sintassi di input non valida per il tipo txid_snapshot: \"%s\"" + +#: utils/adt/txid.c:534 +#, c-format +msgid "invalid external txid_snapshot data" +msgstr "dati txid_snapshot esterni non validi" + #: utils/adt/uuid.c:128 #, c-format msgid "invalid input syntax for uuid: \"%s\"" @@ -17834,9 +19287,9 @@ msgstr "la lunghezza della stringa esterna di bit non è valida" msgid "bit string too long for type bit varying(%d)" msgstr "la stringa di bit è troppo lunga per il tipo bit varying(%d)" -#: utils/adt/varbit.c:1066 utils/adt/varbit.c:1168 utils/adt/varlena.c:800 -#: utils/adt/varlena.c:864 utils/adt/varlena.c:1008 utils/adt/varlena.c:1964 -#: utils/adt/varlena.c:2031 +#: utils/adt/varbit.c:1066 utils/adt/varbit.c:1168 utils/adt/varlena.c:832 +#: utils/adt/varlena.c:896 utils/adt/varlena.c:1040 utils/adt/varlena.c:2510 +#: utils/adt/varlena.c:2577 #, c-format msgid "negative substring length not allowed" msgstr "non è consentita una stringa con lunghezza negativa" @@ -17861,7 +19314,7 @@ msgstr "non è possibile eseguire lo XOR fra stringhe di bit di dimensioni diver msgid "bit index %d out of valid range (0..%d)" msgstr "l'indice %d è fuori dall'intervallo valido (0..%d)" -#: utils/adt/varbit.c:1802 utils/adt/varlena.c:2231 +#: utils/adt/varbit.c:1802 utils/adt/varlena.c:2777 #, c-format msgid "new bit must be 0 or 1" msgstr "il nuovo bit deve essere 0 o 1" @@ -17876,63 +19329,63 @@ msgstr "il valore è troppo lungo per il tipo character(%d)" msgid "value too long for type character varying(%d)" msgstr "il valore è troppo lungo per il tipo character varying(%d)" -#: utils/adt/varlena.c:1380 +#: utils/adt/varlena.c:1410 utils/adt/varlena.c:1799 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "non è stato possibile determinare quale ordinamento usare per la comparazione tra stringhe" -#: utils/adt/varlena.c:1426 utils/adt/varlena.c:1439 +#: utils/adt/varlena.c:1468 utils/adt/varlena.c:1481 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "conversione della stringa in UTF-16 fallita: codice errore %lu" -#: utils/adt/varlena.c:1454 +#: utils/adt/varlena.c:1496 #, c-format msgid "could not compare Unicode strings: %m" msgstr "comparazione delle stringhe Unicode fallita: %m" -#: utils/adt/varlena.c:2109 utils/adt/varlena.c:2140 utils/adt/varlena.c:2176 -#: utils/adt/varlena.c:2219 +#: utils/adt/varlena.c:2655 utils/adt/varlena.c:2686 utils/adt/varlena.c:2722 +#: utils/adt/varlena.c:2765 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "l'indice %d è fuori dall'intervallo valido, 0..%d" -#: utils/adt/varlena.c:3138 +#: utils/adt/varlena.c:3684 #, c-format msgid "field position must be greater than zero" msgstr "il campo deve essere maggiore di zero" -#: utils/adt/varlena.c:4017 +#: utils/adt/varlena.c:4563 #, c-format msgid "unterminated format specifier" msgstr "specificatore di formato non terminato" -#: utils/adt/varlena.c:4149 utils/adt/varlena.c:4269 +#: utils/adt/varlena.c:4695 utils/adt/varlena.c:4815 #, c-format msgid "unrecognized conversion type specifier \"%c\"" msgstr "specificatore di tipo \"%c\" non riconosciuto" -#: utils/adt/varlena.c:4161 utils/adt/varlena.c:4218 +#: utils/adt/varlena.c:4707 utils/adt/varlena.c:4764 #, c-format msgid "too few arguments for format" msgstr "troppi pochi argomenti per il formato" -#: utils/adt/varlena.c:4312 utils/adt/varlena.c:4495 +#: utils/adt/varlena.c:4858 utils/adt/varlena.c:5041 #, c-format msgid "number is out of range" msgstr "il numero è al di fuori dell'intervallo consentito" -#: utils/adt/varlena.c:4376 utils/adt/varlena.c:4404 +#: utils/adt/varlena.c:4922 utils/adt/varlena.c:4950 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "il formato specifica l'argomento 0, ma gli argomenti sono numerati a partire da 1" -#: utils/adt/varlena.c:4397 +#: utils/adt/varlena.c:4943 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "la posizione dell'argomento di larghezza deve finire con \"$\"" -#: utils/adt/varlena.c:4442 +#: utils/adt/varlena.c:4988 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "i valori vuoti non possono essere formattati come un identificativo SQL" @@ -17947,227 +19400,227 @@ msgstr "l'argomento della funzione ntile deve essere maggiore di zero" msgid "argument of nth_value must be greater than zero" msgstr "l'argomento della funzione nth_value deve essere maggiore di zero" -#: utils/adt/xml.c:170 +#: utils/adt/xml.c:171 #, c-format msgid "unsupported XML feature" msgstr "caratteristica XML non supportata" -#: utils/adt/xml.c:171 +#: utils/adt/xml.c:172 #, c-format msgid "This functionality requires the server to be built with libxml support." msgstr "Per questa funzionalità è necessario che il server sia compilato con il supporto a libxml." -#: utils/adt/xml.c:172 +#: utils/adt/xml.c:173 #, c-format msgid "You need to rebuild PostgreSQL using --with-libxml." msgstr "Occorre configurare PostgreSQL con l'opzione --with-libxml e ricompilarlo." -#: utils/adt/xml.c:191 utils/mb/mbutils.c:523 +#: utils/adt/xml.c:192 utils/mb/mbutils.c:523 #, c-format msgid "invalid encoding name \"%s\"" msgstr "nome di codifica non valido \"%s\"" -#: utils/adt/xml.c:434 utils/adt/xml.c:439 +#: utils/adt/xml.c:435 utils/adt/xml.c:440 #, c-format msgid "invalid XML comment" msgstr "commento XML non valido" -#: utils/adt/xml.c:568 +#: utils/adt/xml.c:569 #, c-format msgid "not an XML document" msgstr "non è un documento XML" -#: utils/adt/xml.c:727 utils/adt/xml.c:750 +#: utils/adt/xml.c:728 utils/adt/xml.c:751 #, c-format msgid "invalid XML processing instruction" msgstr "istruzione di elaborazione XML non valida" -#: utils/adt/xml.c:728 +#: utils/adt/xml.c:729 #, c-format msgid "XML processing instruction target name cannot be \"%s\"." msgstr "Il nome di destinazione di un'istruzione di elaborazione XML non può essere \"%s\"." -#: utils/adt/xml.c:751 +#: utils/adt/xml.c:752 #, c-format msgid "XML processing instruction cannot contain \"?>\"." msgstr "Un'istruzione di elaborazione XML non può contenere \"?>\"." -#: utils/adt/xml.c:830 +#: utils/adt/xml.c:831 #, c-format msgid "xmlvalidate is not implemented" msgstr "la funzione xmlvalidate non è implementata" -#: utils/adt/xml.c:909 +#: utils/adt/xml.c:910 #, c-format msgid "could not initialize XML library" msgstr "inizializzazione della libreria XML fallita" -#: utils/adt/xml.c:910 +#: utils/adt/xml.c:911 #, c-format msgid "libxml2 has incompatible char type: sizeof(char)=%u, sizeof(xmlChar)=%u." msgstr "La libreria libxml2 ha un tipo char non compatibile: sizeof(char)=%u, sizeof(xmlChar)=%u." -#: utils/adt/xml.c:996 +#: utils/adt/xml.c:997 #, c-format msgid "could not set up XML error handler" msgstr "impostazione del gestore di errori XML fallita" -#: utils/adt/xml.c:997 +#: utils/adt/xml.c:998 #, 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 "Questo vuol dire probabilmente che la versione di libxml2 in uso non è compatibile con i file di header libxml2 con cui PostgreSQL è stato compilato." -#: utils/adt/xml.c:1732 +#: utils/adt/xml.c:1737 msgid "Invalid character value." msgstr "Valore di carattere non valido." -#: utils/adt/xml.c:1735 +#: utils/adt/xml.c:1740 msgid "Space required." msgstr "È necessario uno spazio." -#: utils/adt/xml.c:1738 +#: utils/adt/xml.c:1743 msgid "standalone accepts only 'yes' or 'no'." msgstr "Solo 'yes' o 'no' sono accettati da standalone." -#: utils/adt/xml.c:1741 +#: utils/adt/xml.c:1746 msgid "Malformed declaration: missing version." msgstr "La dichiarazione non è definita correttamente: manca la versione." -#: utils/adt/xml.c:1744 +#: utils/adt/xml.c:1749 msgid "Missing encoding in text declaration." msgstr "Manca la codifica nella dichiarazione del testo." -#: utils/adt/xml.c:1747 +#: utils/adt/xml.c:1752 msgid "Parsing XML declaration: '?>' expected." msgstr "Durante l'analisi XML è stato riscontrato che manca '?>'." -#: utils/adt/xml.c:1750 +#: utils/adt/xml.c:1755 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Codice di errore di libxml sconosciuto: %d." -#: utils/adt/xml.c:2025 +#: utils/adt/xml.c:2030 #, c-format msgid "XML does not support infinite date values." msgstr "XML non supporta i valori infiniti per il tipo date." -#: utils/adt/xml.c:2047 utils/adt/xml.c:2074 +#: utils/adt/xml.c:2052 utils/adt/xml.c:2079 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML non supporta i valori infiniti per il tipo timestamp." -#: utils/adt/xml.c:2465 +#: utils/adt/xml.c:2470 #, c-format msgid "invalid query" msgstr "query non valida" -#: utils/adt/xml.c:3778 +#: utils/adt/xml.c:3795 #, c-format msgid "invalid array for XML namespace mapping" msgstr "l'array per il mapping del namespace XML non è valido" -#: utils/adt/xml.c:3779 +#: utils/adt/xml.c:3796 #, c-format msgid "The array must be two-dimensional with length of the second axis equal to 2." msgstr "L'array deve avere due dimensioni e la lunghezza del secondo asse deve essere pari a 2." -#: utils/adt/xml.c:3803 +#: utils/adt/xml.c:3820 #, c-format msgid "empty XPath expression" msgstr "l'espressione XPath è vuota" -#: utils/adt/xml.c:3852 +#: utils/adt/xml.c:3869 #, c-format msgid "neither namespace name nor URI may be null" msgstr "né il nome del namespace né l'URI possono essere nulli" -#: utils/adt/xml.c:3859 +#: utils/adt/xml.c:3876 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "registrazione del namespace XML con nome \"%s\" ed URI \"%s\" fallita" -#: utils/cache/lsyscache.c:2478 utils/cache/lsyscache.c:2511 -#: utils/cache/lsyscache.c:2544 utils/cache/lsyscache.c:2577 +#: utils/cache/lsyscache.c:2515 utils/cache/lsyscache.c:2548 +#: utils/cache/lsyscache.c:2581 utils/cache/lsyscache.c:2614 #, c-format msgid "type %s is only a shell" msgstr "il tipo %s non è completamente definito" -#: utils/cache/lsyscache.c:2483 +#: utils/cache/lsyscache.c:2520 #, c-format msgid "no input function available for type %s" msgstr "nessuna funzione di input disponibile per il tipo %s" -#: utils/cache/lsyscache.c:2516 +#: utils/cache/lsyscache.c:2553 #, c-format msgid "no output function available for type %s" msgstr "nessuna funzione di output disponibile per il tipo %s" -#: utils/cache/plancache.c:698 +#: utils/cache/plancache.c:733 #, c-format msgid "cached plan must not change result type" msgstr "il cached plan non deve cambiare il tipo del risultato" -#: utils/cache/relcache.c:4828 +#: utils/cache/relcache.c:4994 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "creazione del file di inizializzazione della cache delle relazioni \"%s\" fallita: %m" -#: utils/cache/relcache.c:4830 +#: utils/cache/relcache.c:4996 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Proseguo in ogni caso, ma c'è qualcosa che non funziona." -#: utils/cache/relcache.c:5044 +#: utils/cache/relcache.c:5229 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "rimozione del file di cache \"%s\" fallita: %m" -#: utils/cache/relmapper.c:506 +#: utils/cache/relmapper.c:508 #, c-format msgid "cannot PREPARE a transaction that modified relation mapping" msgstr "non è possibile eseguire PREPARE in una transazione che ha modificato la mappa delle relazioni" -#: utils/cache/relmapper.c:649 utils/cache/relmapper.c:749 +#: utils/cache/relmapper.c:651 utils/cache/relmapper.c:751 #, c-format msgid "could not open relation mapping file \"%s\": %m" msgstr "apertura del file della mappa delle relazioni \"%s\" fallita: %m" -#: utils/cache/relmapper.c:662 +#: utils/cache/relmapper.c:664 #, c-format msgid "could not read relation mapping file \"%s\": %m" msgstr "lettura del file della mappa delle relazioni \"%s\" fallita: %m" -#: utils/cache/relmapper.c:672 +#: utils/cache/relmapper.c:674 #, c-format msgid "relation mapping file \"%s\" contains invalid data" msgstr "il file della mappa delle relazioni \"%s\" contiene dati non validi" -#: utils/cache/relmapper.c:682 +#: utils/cache/relmapper.c:684 #, c-format msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "il file della mappa delle relazioni \"%s\" ha un checksum non valido" -#: utils/cache/relmapper.c:788 +#: utils/cache/relmapper.c:784 #, c-format msgid "could not write to relation mapping file \"%s\": %m" msgstr "scrittura nel file della mappa delle relazioni \"%s\" fallita: %m" -#: utils/cache/relmapper.c:801 +#: utils/cache/relmapper.c:797 #, c-format msgid "could not fsync relation mapping file \"%s\": %m" msgstr "fsync del file della mappa delle relazioni \"%s\" fallito: %m" -#: utils/cache/relmapper.c:807 +#: utils/cache/relmapper.c:803 #, c-format msgid "could not close relation mapping file \"%s\": %m" msgstr "chiusura del file della mappa delle relazioni \"%s\" fallita: %m" -#: utils/cache/typcache.c:704 +#: utils/cache/typcache.c:1156 #, c-format msgid "type %s is not composite" msgstr "il tipo %s non è composito" -#: utils/cache/typcache.c:718 +#: utils/cache/typcache.c:1170 #, c-format msgid "record type has not been registered" msgstr "il tipo del record non è stato registrato" @@ -18182,189 +19635,189 @@ msgstr "TRAP: ExceptionalCondition: argomenti non corretti\n" msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" msgstr "TRAP: %s(\"%s\", File: \"%s\", Linea: %d)\n" -#: utils/error/elog.c:320 utils/error/elog.c:1291 +#: utils/error/elog.c:316 utils/error/elog.c:1297 #, c-format msgid "error occurred at %s:%d before error message processing is available\n" msgstr "l'errore è avvenuto a %s:%d prima che fosse possibile processare i messaggi d'errore\n" -#: utils/error/elog.c:1807 +#: utils/error/elog.c:1864 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "riapertura del file \"%s\" come stderr fallita: %m" -#: utils/error/elog.c:1820 +#: utils/error/elog.c:1877 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "riapertura del file \"%s\" come stdout fallita: %m" -#: utils/error/elog.c:2295 utils/error/elog.c:2312 utils/error/elog.c:2328 +#: utils/error/elog.c:2353 utils/error/elog.c:2370 utils/error/elog.c:2386 msgid "[unknown]" msgstr "[sconosciuto]" -#: utils/error/elog.c:2766 utils/error/elog.c:3065 utils/error/elog.c:3173 +#: utils/error/elog.c:2825 utils/error/elog.c:3124 utils/error/elog.c:3232 msgid "missing error text" msgstr "testo dell'errore mancante" -#: utils/error/elog.c:2769 utils/error/elog.c:2772 utils/error/elog.c:3176 -#: utils/error/elog.c:3179 +#: utils/error/elog.c:2828 utils/error/elog.c:2831 utils/error/elog.c:3235 +#: utils/error/elog.c:3238 #, c-format msgid " at character %d" msgstr " al carattere %d" -#: utils/error/elog.c:2782 utils/error/elog.c:2789 +#: utils/error/elog.c:2841 utils/error/elog.c:2848 msgid "DETAIL: " msgstr "DETTAGLI: " -#: utils/error/elog.c:2796 +#: utils/error/elog.c:2855 msgid "HINT: " msgstr "SUGGERIMENTO: " -#: utils/error/elog.c:2803 +#: utils/error/elog.c:2862 msgid "QUERY: " msgstr "QUERY: " -#: utils/error/elog.c:2810 +#: utils/error/elog.c:2869 msgid "CONTEXT: " msgstr "CONTESTO: " -#: utils/error/elog.c:2820 +#: utils/error/elog.c:2879 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "POSIZIONE: %s, %s:%d\n" -#: utils/error/elog.c:2827 +#: utils/error/elog.c:2886 #, c-format msgid "LOCATION: %s:%d\n" msgstr "POSIZIONE: %s:%d\n" -#: utils/error/elog.c:2841 +#: utils/error/elog.c:2900 msgid "STATEMENT: " msgstr "ISTRUZIONE: " #. translator: This string will be truncated at 47 #. characters expanded. -#: utils/error/elog.c:3294 +#: utils/error/elog.c:3353 #, c-format msgid "operating system error %d" msgstr "errore del sistema operativo %d" -#: utils/error/elog.c:3489 +#: utils/error/elog.c:3548 msgid "DEBUG" msgstr "DEBUG" -#: utils/error/elog.c:3493 +#: utils/error/elog.c:3552 msgid "LOG" msgstr "LOG" -#: utils/error/elog.c:3496 +#: utils/error/elog.c:3555 msgid "INFO" msgstr "INFO" -#: utils/error/elog.c:3499 +#: utils/error/elog.c:3558 msgid "NOTICE" msgstr "NOTIFICA" -#: utils/error/elog.c:3502 +#: utils/error/elog.c:3561 msgid "WARNING" msgstr "ATTENZIONE" -#: utils/error/elog.c:3505 +#: utils/error/elog.c:3564 msgid "ERROR" msgstr "ERRORE" -#: utils/error/elog.c:3508 +#: utils/error/elog.c:3567 msgid "FATAL" msgstr "FATALE" -#: utils/error/elog.c:3511 +#: utils/error/elog.c:3570 msgid "PANIC" msgstr "PANICO" -#: utils/fmgr/dfmgr.c:125 +#: utils/fmgr/dfmgr.c:121 #, c-format msgid "could not find function \"%s\" in file \"%s\"" msgstr "funzione \"%s\" non trovata nel file \"%s\"" -#: utils/fmgr/dfmgr.c:204 utils/fmgr/dfmgr.c:413 utils/fmgr/dfmgr.c:461 +#: utils/fmgr/dfmgr.c:200 utils/fmgr/dfmgr.c:409 utils/fmgr/dfmgr.c:457 #, c-format msgid "could not access file \"%s\": %m" msgstr "accesso al file \"%s\" fallito: %m" -#: utils/fmgr/dfmgr.c:242 +#: utils/fmgr/dfmgr.c:238 #, c-format msgid "could not load library \"%s\": %s" msgstr "caricamento della libreria \"%s\" fallito: %s" -#: utils/fmgr/dfmgr.c:274 +#: utils/fmgr/dfmgr.c:270 #, c-format msgid "incompatible library \"%s\": missing magic block" msgstr "libreria \"%s\" incompatibile: manca il magic block" -#: utils/fmgr/dfmgr.c:276 +#: utils/fmgr/dfmgr.c:272 #, c-format msgid "Extension libraries are required to use the PG_MODULE_MAGIC macro." msgstr "Le librerie di estensione devono usare la macro PG_MODULE_MAGIC." -#: utils/fmgr/dfmgr.c:312 +#: utils/fmgr/dfmgr.c:308 #, c-format msgid "incompatible library \"%s\": version mismatch" msgstr "libreria incompatibile \"%s\": versione non corrispondente" -#: utils/fmgr/dfmgr.c:314 +#: utils/fmgr/dfmgr.c:310 #, c-format msgid "Server is version %d.%d, library is version %d.%d." msgstr "Il server ha versione %d.%d, la libreria versione %d.%d." -#: utils/fmgr/dfmgr.c:333 +#: utils/fmgr/dfmgr.c:329 #, c-format msgid "Server has FUNC_MAX_ARGS = %d, library has %d." msgstr "Il server ha FUNC_MAX_ARGS = %d, la libreria ha %d." -#: utils/fmgr/dfmgr.c:342 +#: utils/fmgr/dfmgr.c:338 #, c-format msgid "Server has INDEX_MAX_KEYS = %d, library has %d." msgstr "Il server ha INDEX_MAX_KEYS = %d, la libreria ha %d." -#: utils/fmgr/dfmgr.c:351 +#: utils/fmgr/dfmgr.c:347 #, c-format msgid "Server has NAMEDATALEN = %d, library has %d." msgstr "Il server ha NAMEDATALEN = %d, la libreria %d." -#: utils/fmgr/dfmgr.c:360 +#: utils/fmgr/dfmgr.c:356 #, c-format msgid "Server has FLOAT4PASSBYVAL = %s, library has %s." msgstr "Il server ha FLOAT4PASSBYVAL = %s, la libreria %s." -#: utils/fmgr/dfmgr.c:369 +#: utils/fmgr/dfmgr.c:365 #, c-format msgid "Server has FLOAT8PASSBYVAL = %s, library has %s." msgstr "Il server ha FLOAT8PASSBYVAL = %s, la libreria %s." -#: utils/fmgr/dfmgr.c:376 +#: utils/fmgr/dfmgr.c:372 msgid "Magic block has unexpected length or padding difference." msgstr "Il magic block ha una lunghezza imprevista o una differenza di allineamento." -#: utils/fmgr/dfmgr.c:379 +#: utils/fmgr/dfmgr.c:375 #, c-format msgid "incompatible library \"%s\": magic block mismatch" msgstr "la libreria \"%s\" non è compatibile: magic block non corrispondente" -#: utils/fmgr/dfmgr.c:543 +#: utils/fmgr/dfmgr.c:539 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "l'accesso alla libreria \"%s\" non è consentito" -#: utils/fmgr/dfmgr.c:569 +#: utils/fmgr/dfmgr.c:565 #, c-format msgid "invalid macro name in dynamic library path: %s" msgstr "nome della macro non valido nel percorso della libreria dinamica: %s" -#: utils/fmgr/dfmgr.c:609 +#: utils/fmgr/dfmgr.c:605 #, c-format msgid "zero-length component in parameter \"dynamic_library_path\"" msgstr "componente di lunghezza zero nel parametro \"dynamic_library_path\"" -#: utils/fmgr/dfmgr.c:628 +#: utils/fmgr/dfmgr.c:624 #, c-format msgid "component in parameter \"dynamic_library_path\" is not an absolute path" msgstr "il componente nel parametro \"dynamic_library_path\" non è un percorso assoluto." @@ -18379,12 +19832,12 @@ msgstr "la funzione interna \"%s\" non è nella tabella interna di lookup" msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "versione API sconosciuto %d riportata dalla funzione info \"%s\"" -#: utils/fmgr/fmgr.c:850 utils/fmgr/fmgr.c:2111 +#: utils/fmgr/fmgr.c:849 utils/fmgr/fmgr.c:2110 #, c-format msgid "function %u has too many arguments (%d, maximum is %d)" msgstr "la funzione %u ha troppo argomenti (%d, il massimo è %d)" -#: utils/fmgr/fmgr.c:2532 +#: utils/fmgr/fmgr.c:2531 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "funzione di validazione del linguaggio %u chiamata per il linguaggio %u invece di %u" @@ -18394,308 +19847,308 @@ msgstr "funzione di validazione del linguaggio %u chiamata per il linguaggio %u msgid "could not determine actual result type for function \"%s\" declared to return type %s" msgstr "non è stato possibile determinare il tipo reale di risultato della funzione \"%s\" dichiarata con tipo restituito %s" -#: utils/fmgr/funcapi.c:1300 utils/fmgr/funcapi.c:1331 +#: utils/fmgr/funcapi.c:1342 utils/fmgr/funcapi.c:1373 #, c-format msgid "number of aliases does not match number of columns" msgstr "il numero di alias non corrisponde al numero delle colonne" -#: utils/fmgr/funcapi.c:1325 +#: utils/fmgr/funcapi.c:1367 #, c-format msgid "no column alias was provided" msgstr "non è stato fornito nessun alias colonna" -#: utils/fmgr/funcapi.c:1349 +#: utils/fmgr/funcapi.c:1391 #, c-format msgid "could not determine row description for function returning record" msgstr "non è stato possibile determinare la descrizione della riga per la funzione che restituisce record" -#: utils/init/miscinit.c:116 +#: utils/init/miscinit.c:120 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "spostamento nella directory \"%s\" fallito: %m" -#: utils/init/miscinit.c:311 utils/misc/guc.c:5761 +#: utils/init/miscinit.c:437 utils/misc/guc.c:5837 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "non è possibile impostare il parametro \"%s\" nell'ambito di operazioni a sicurezza ristretta" -#: utils/init/miscinit.c:390 +#: utils/init/miscinit.c:518 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "al ruolo \"%s\" non è consentito effettuare il login" -#: utils/init/miscinit.c:408 +#: utils/init/miscinit.c:536 #, c-format msgid "too many connections for role \"%s\"" msgstr "troppe connessioni per il ruolo \"%s\"" -#: utils/init/miscinit.c:468 +#: utils/init/miscinit.c:596 #, c-format msgid "permission denied to set session authorization" msgstr "permesso di impostare l'autorizzazione della sessione negato" -#: utils/init/miscinit.c:548 +#: utils/init/miscinit.c:679 #, c-format msgid "invalid role OID: %u" msgstr "OID del ruolo non valido: %u" -#: utils/init/miscinit.c:675 +#: utils/init/miscinit.c:809 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "creazione del file di lock \"%s\" fallita: %m" -#: utils/init/miscinit.c:689 +#: utils/init/miscinit.c:823 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "apertura del file di lock \"%s\" fallita: %m" -#: utils/init/miscinit.c:695 +#: utils/init/miscinit.c:829 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "lettura dal file di lock \"%s\" fallita: %m" -#: utils/init/miscinit.c:703 +#: utils/init/miscinit.c:837 #, c-format msgid "lock file \"%s\" is empty" msgstr "il file di lock \"%s\" è vuoto" -#: utils/init/miscinit.c:704 +#: utils/init/miscinit.c:838 #, c-format msgid "Either another server is starting, or the lock file is the remnant of a previous server startup crash." msgstr "O c'è un altro server in avvio, oppure il file di lock è rimasto da un precedente crash in avvio del server." -#: utils/init/miscinit.c:751 +#: utils/init/miscinit.c:885 #, c-format msgid "lock file \"%s\" already exists" msgstr "il file di lock \"%s\" esiste già" -#: utils/init/miscinit.c:755 +#: utils/init/miscinit.c:889 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "C'è un altro postgres (PID %d) in esecuzione nella directory dei dati \"%s\"?" -#: utils/init/miscinit.c:757 +#: utils/init/miscinit.c:891 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "C'è un altro postmaster (PID %d) in esecuzione nella directory dei dati \"%s\"?" -#: utils/init/miscinit.c:760 +#: utils/init/miscinit.c:894 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "C'è un altro postgres (PID %d) che sta usando il file socket \"%s\"?" -#: utils/init/miscinit.c:762 +#: utils/init/miscinit.c:896 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "C'è un altro postmaster (PID %d) che sta usando il file socket \"%s\"?" -#: utils/init/miscinit.c:798 +#: utils/init/miscinit.c:932 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "il blocco di memoria condivisa preesistente (key %lu, ID %lu) è ancora in uso" -#: utils/init/miscinit.c:801 +#: utils/init/miscinit.c:935 #, c-format msgid "If you're sure there are no old server processes still running, remove the shared memory block or just delete the file \"%s\"." msgstr "Se sei sicuro che non ci siano vecchi processi server ancora in esecuzione, rimuovi il blocco di memoria condivisa, o semplicemente cancella il file \"%s\"." -#: utils/init/miscinit.c:817 +#: utils/init/miscinit.c:951 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "rimozione del vecchio file di lock \"%s\" fallita: %m" -#: utils/init/miscinit.c:819 +#: utils/init/miscinit.c:953 #, 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 "Sembra che il file sia stato abbandonato accidentalmente, ma non può essere rimosso. Per favore rimuovilo manualmente e riprova." -#: utils/init/miscinit.c:855 utils/init/miscinit.c:866 -#: utils/init/miscinit.c:876 +#: utils/init/miscinit.c:989 utils/init/miscinit.c:1000 +#: utils/init/miscinit.c:1010 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "scrittura del file di lock \"%s\" fallita: %m" -#: utils/init/miscinit.c:1001 utils/misc/guc.c:8381 +#: utils/init/miscinit.c:1139 utils/misc/guc.c:8607 #, c-format msgid "could not read from file \"%s\": %m" msgstr "lettura dal file \"%s\" fallita: %m" -#: utils/init/miscinit.c:1115 utils/init/miscinit.c:1128 +#: utils/init/miscinit.c:1253 utils/init/miscinit.c:1266 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "\"%s\" non è una directory di dati valida" -#: utils/init/miscinit.c:1117 +#: utils/init/miscinit.c:1255 #, c-format msgid "File \"%s\" is missing." msgstr "Il file \"%s\" è mancante." -#: utils/init/miscinit.c:1130 +#: utils/init/miscinit.c:1268 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Il file \"%s\" non contiene dati validi." -#: utils/init/miscinit.c:1132 +#: utils/init/miscinit.c:1270 #, c-format msgid "You might need to initdb." msgstr "Potrebbe essere necessario eseguire initdb." -#: utils/init/miscinit.c:1140 +#: utils/init/miscinit.c:1278 #, c-format msgid "The data directory was initialized by PostgreSQL version %ld.%ld, which is not compatible with this version %s." msgstr "La directory dati è stata inizializzata da PostgreSQL versione %ld.%ld, che non è compatibile con questa versione %s." -#: utils/init/miscinit.c:1211 +#: utils/init/miscinit.c:1349 #, c-format msgid "loaded library \"%s\"" msgstr "libreria \"%s\" caricata" -#: utils/init/postinit.c:237 +#: utils/init/postinit.c:251 #, c-format msgid "replication connection authorized: user=%s SSL enabled (protocol=%s, cipher=%s, compression=%s)" msgstr "connessione di replica autorizzata: utente=%s SSL abilitato (protocollo=%s, cifrario=%s, compressione=%s)" -#: utils/init/postinit.c:239 utils/init/postinit.c:253 +#: utils/init/postinit.c:253 utils/init/postinit.c:267 msgid "off" msgstr "disattivato" -#: utils/init/postinit.c:239 utils/init/postinit.c:253 +#: utils/init/postinit.c:253 utils/init/postinit.c:267 msgid "on" msgstr "attivato" -#: utils/init/postinit.c:243 +#: utils/init/postinit.c:257 #, c-format msgid "replication connection authorized: user=%s" msgstr "connessione di replica autorizzata: utente=%s" -#: utils/init/postinit.c:251 +#: utils/init/postinit.c:265 #, c-format msgid "connection authorized: user=%s database=%s SSL enabled (protocol=%s, cipher=%s, compression=%s)" msgstr "connessione autorizzata: utente=%s database=%s SSL abilitato (protocollo=%s, cifrario=%s, compressione=%s)" -#: utils/init/postinit.c:257 +#: utils/init/postinit.c:271 #, c-format msgid "connection authorized: user=%s database=%s" msgstr "connessione autorizzata: utente=%s database=%s" -#: utils/init/postinit.c:289 +#: utils/init/postinit.c:303 #, c-format msgid "database \"%s\" has disappeared from pg_database" msgstr "il database \"%s\" è scomparso da database pg_database" -#: utils/init/postinit.c:291 +#: utils/init/postinit.c:305 #, c-format msgid "Database OID %u now seems to belong to \"%s\"." msgstr "L'OID %u del database ora sembra appartenere a \"%s\"." -#: utils/init/postinit.c:311 +#: utils/init/postinit.c:325 #, c-format msgid "database \"%s\" is not currently accepting connections" msgstr "il database \"%s\" attualmente non accetta connessioni" -#: utils/init/postinit.c:324 +#: utils/init/postinit.c:338 #, c-format msgid "permission denied for database \"%s\"" msgstr "permesso negato per il database \"%s\"" -#: utils/init/postinit.c:325 +#: utils/init/postinit.c:339 #, c-format msgid "User does not have CONNECT privilege." msgstr "L'utente non ha il privilegio CONNECT." -#: utils/init/postinit.c:342 +#: utils/init/postinit.c:356 #, c-format msgid "too many connections for database \"%s\"" msgstr "troppe connessioni al database \"%s\"" -#: utils/init/postinit.c:364 utils/init/postinit.c:371 +#: utils/init/postinit.c:378 utils/init/postinit.c:385 #, c-format msgid "database locale is incompatible with operating system" msgstr "il locale del database è incompatibile col sistema operativo" -#: utils/init/postinit.c:365 +#: utils/init/postinit.c:379 #, c-format msgid "The database was initialized with LC_COLLATE \"%s\", which is not recognized by setlocale()." msgstr "Il database di database è stato inizializzato con LC_COLLATE \"%s\", che non è riconosciuto da setlocale()." -#: utils/init/postinit.c:367 utils/init/postinit.c:374 +#: utils/init/postinit.c:381 utils/init/postinit.c:388 #, c-format msgid "Recreate the database with another locale or install the missing locale." msgstr "Crea di nuovo il database con un altro locale oppure installa il locale mancante." -#: utils/init/postinit.c:372 +#: utils/init/postinit.c:386 #, c-format msgid "The database was initialized with LC_CTYPE \"%s\", which is not recognized by setlocale()." msgstr "Il database è stato inizializzato con LC_CTYPE \"%s\", che non è riconosciuto da setlocale()." -#: utils/init/postinit.c:667 +#: utils/init/postinit.c:712 #, c-format msgid "no roles are defined in this database system" msgstr "nessun ruolo definito in questo database" -#: utils/init/postinit.c:668 +#: utils/init/postinit.c:713 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Dovresti eseguire immediatamente CREATE USER \"%s\" SUPERUSER;." -#: utils/init/postinit.c:704 +#: utils/init/postinit.c:749 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "non sono accettate nuove connessioni di replica durante lo spegnimento del database" -#: utils/init/postinit.c:708 +#: utils/init/postinit.c:753 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "solo un superutente può connettersi durante lo spegnimento del database" -#: utils/init/postinit.c:718 +#: utils/init/postinit.c:763 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "solo un superutente può connettersi in modalità di aggiornamento binario" -#: utils/init/postinit.c:732 +#: utils/init/postinit.c:777 #, c-format msgid "remaining connection slots are reserved for non-replication superuser connections" msgstr "i rimanenti slot di connessione sono riservati a connessioni di superutenti non di replica" -#: utils/init/postinit.c:742 +#: utils/init/postinit.c:787 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "solo un superutente o il ruolo di replica può avviare walsender" -#: utils/init/postinit.c:811 +#: utils/init/postinit.c:856 #, c-format msgid "database %u does not exist" msgstr "il database %u non esiste" -#: utils/init/postinit.c:863 +#: utils/init/postinit.c:942 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Sembra sia stato appena eliminato o rinominato." -#: utils/init/postinit.c:881 +#: utils/init/postinit.c:960 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "La sottodirectory del database \"%s\" risulta mancante." -#: utils/init/postinit.c:886 +#: utils/init/postinit.c:965 #, c-format msgid "could not access directory \"%s\": %m" msgstr "accesso alla directory \"%s\" fallito: %m" -#: utils/mb/conv.c:519 +#: utils/mb/conv.c:360 utils/mb/conv.c:546 #, c-format msgid "invalid encoding number: %d" msgstr "il numero di codifica non è valido: %d" -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:136 -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:163 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:137 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:169 #, c-format msgid "unexpected encoding ID %d for ISO 8859 character sets" msgstr "ID di codifica %d non previsto per il set di caratteri ISO 8859" -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:126 -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:153 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:127 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:159 #, c-format msgid "unexpected encoding ID %d for WIN character sets" msgstr "ID di codifica %d non previsto per il set di caratteri WIN" @@ -18740,1406 +20193,1438 @@ msgstr "byte non valido per la codifica \"%s\": 0x%02x" msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codeset fallito" -#: utils/mb/wchar.c:2009 +#: utils/mb/wchar.c:2015 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "sequenza di byte non valida per la codifica \"%s\": %s" -#: utils/mb/wchar.c:2042 +#: utils/mb/wchar.c:2048 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "il carattere con sequenza di byte %s nella codifica \"%s\" non ha un equivalente nella codifica \"%s\"" -#: utils/misc/guc.c:552 +#: utils/misc/guc.c:545 msgid "Ungrouped" msgstr "Varie" -#: utils/misc/guc.c:554 +#: utils/misc/guc.c:547 msgid "File Locations" msgstr "Posizione dei File" -#: utils/misc/guc.c:556 +#: utils/misc/guc.c:549 msgid "Connections and Authentication" msgstr "Connessioni ed Autenticazione" -#: utils/misc/guc.c:558 +#: utils/misc/guc.c:551 msgid "Connections and Authentication / Connection Settings" msgstr "Connessioni ed Autenticazione / Impostazioni di Connessione" -#: utils/misc/guc.c:560 +#: utils/misc/guc.c:553 msgid "Connections and Authentication / Security and Authentication" msgstr "Connessioni ed Autenticazione / Sicurezza ed Autenticazione" -#: utils/misc/guc.c:562 +#: utils/misc/guc.c:555 msgid "Resource Usage" msgstr "Uso delle Risorse" -#: utils/misc/guc.c:564 +#: utils/misc/guc.c:557 msgid "Resource Usage / Memory" msgstr "Uso delle Risorse / Memoria" -#: utils/misc/guc.c:566 +#: utils/misc/guc.c:559 msgid "Resource Usage / Disk" msgstr "Uso delle Risorse / Disco" -#: utils/misc/guc.c:568 +#: utils/misc/guc.c:561 msgid "Resource Usage / Kernel Resources" msgstr "Uso delle Risorse / Risorse del Kernel" -#: utils/misc/guc.c:570 +#: utils/misc/guc.c:563 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Uso delle Risorse / Intervallo di Vacuum Basato sul Costo" -#: utils/misc/guc.c:572 +#: utils/misc/guc.c:565 msgid "Resource Usage / Background Writer" msgstr "Uso delle Risorse / Scrittura in Background" -#: utils/misc/guc.c:574 +#: utils/misc/guc.c:567 msgid "Resource Usage / Asynchronous Behavior" msgstr "Uso delle Risorse / Comportamento Asincrono" -#: utils/misc/guc.c:576 +#: utils/misc/guc.c:569 msgid "Write-Ahead Log" msgstr "Write-Ahead Log" -#: utils/misc/guc.c:578 +#: utils/misc/guc.c:571 msgid "Write-Ahead Log / Settings" msgstr "Write-Ahead Log / Impostazioni" -#: utils/misc/guc.c:580 +#: utils/misc/guc.c:573 msgid "Write-Ahead Log / Checkpoints" msgstr "Write-Ahead Log / Checkpoint" -#: utils/misc/guc.c:582 +#: utils/misc/guc.c:575 msgid "Write-Ahead Log / Archiving" msgstr "Write-Ahead Log / Archiviazione" -#: utils/misc/guc.c:584 +#: utils/misc/guc.c:577 msgid "Replication" msgstr "Replica" -#: utils/misc/guc.c:586 +#: utils/misc/guc.c:579 msgid "Replication / Sending Servers" msgstr "Replica / Server di Invio" -#: utils/misc/guc.c:588 +#: utils/misc/guc.c:581 msgid "Replication / Master Server" msgstr "Replica / Server Master" -#: utils/misc/guc.c:590 +#: utils/misc/guc.c:583 msgid "Replication / Standby Servers" msgstr "Replica / Serve in Standby" -#: utils/misc/guc.c:592 +#: utils/misc/guc.c:585 msgid "Query Tuning" msgstr "Tuning delle Query" -#: utils/misc/guc.c:594 +#: utils/misc/guc.c:587 msgid "Query Tuning / Planner Method Configuration" msgstr "Tuning delle Query / Configurazione dei Metodi del Planner" -#: utils/misc/guc.c:596 +#: utils/misc/guc.c:589 msgid "Query Tuning / Planner Cost Constants" msgstr "Tuning delle Query / Costanti di Costo del Planner" -#: utils/misc/guc.c:598 +#: utils/misc/guc.c:591 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Tuning delle Query / Ottimizzatore Genetico delle Query" -#: utils/misc/guc.c:600 +#: utils/misc/guc.c:593 msgid "Query Tuning / Other Planner Options" msgstr "Tuning delle Query / Altre Opzioni del Planner" -#: utils/misc/guc.c:602 +#: utils/misc/guc.c:595 msgid "Reporting and Logging" msgstr "Report e Log" -#: utils/misc/guc.c:604 +#: utils/misc/guc.c:597 msgid "Reporting and Logging / Where to Log" msgstr "Report e Log / Dove inviare i Log" -#: utils/misc/guc.c:606 +#: utils/misc/guc.c:599 msgid "Reporting and Logging / When to Log" msgstr "Report e Log / Quando inviare i Log" -#: utils/misc/guc.c:608 +#: utils/misc/guc.c:601 msgid "Reporting and Logging / What to Log" msgstr "Report e Log / Cosa indicare nei Log" -#: utils/misc/guc.c:610 +#: utils/misc/guc.c:603 msgid "Statistics" msgstr "Statistiche" -#: utils/misc/guc.c:612 +#: utils/misc/guc.c:605 msgid "Statistics / Monitoring" msgstr "Statistiche / Monitoring" -#: utils/misc/guc.c:614 +#: utils/misc/guc.c:607 msgid "Statistics / Query and Index Statistics Collector" msgstr "Statistiche / Raccolta delle Statistiche su Query e Indici" -#: utils/misc/guc.c:616 +#: utils/misc/guc.c:609 msgid "Autovacuum" msgstr "Autovacuum" -#: utils/misc/guc.c:618 +#: utils/misc/guc.c:611 msgid "Client Connection Defaults" msgstr "Valori Predefiniti Connessioni Client" -#: utils/misc/guc.c:620 +#: utils/misc/guc.c:613 msgid "Client Connection Defaults / Statement Behavior" msgstr "Valori Predefiniti Connessioni Client / Comportamento Istruzioni" -#: utils/misc/guc.c:622 +#: utils/misc/guc.c:615 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Valori Predefiniti Connessioni Client / Locale e Formattazione" -#: utils/misc/guc.c:624 +#: utils/misc/guc.c:617 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Valori Predefiniti Connessioni Client / Precaricamento Librerie Condivise" -#: utils/misc/guc.c:626 +#: utils/misc/guc.c:619 msgid "Client Connection Defaults / Other Defaults" msgstr "Valori Predefiniti Connessioni Client / Altri Default" -#: utils/misc/guc.c:628 +#: utils/misc/guc.c:621 msgid "Lock Management" msgstr "Gestione dei Lock" -#: utils/misc/guc.c:630 +#: utils/misc/guc.c:623 msgid "Version and Platform Compatibility" msgstr "Versione e Compatibilità della Piattaforma" -#: utils/misc/guc.c:632 +#: utils/misc/guc.c:625 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Versione e Compatibilità della Piattaforma / Versioni Precedenti di PostgreSQL" -#: utils/misc/guc.c:634 +#: utils/misc/guc.c:627 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Versione e Compatibilità della Piattaforma / Altre Piattaforme e Client" -#: utils/misc/guc.c:636 +#: utils/misc/guc.c:629 msgid "Error Handling" msgstr "Gestione degli Errori" -#: utils/misc/guc.c:638 +#: utils/misc/guc.c:631 msgid "Preset Options" msgstr "Opzioni Preimpostate" -#: utils/misc/guc.c:640 +#: utils/misc/guc.c:633 msgid "Customized Options" msgstr "Opzioni Personalizzate" -#: utils/misc/guc.c:642 +#: utils/misc/guc.c:635 msgid "Developer Options" msgstr "Opzioni di Sviluppo" -#: utils/misc/guc.c:696 +#: utils/misc/guc.c:692 +msgid "Valid units for this parameter are \"kB\", \"MB\", \"GB\", and \"TB\"." +msgstr "Le unità di misura valide sono \"kB\", \"MB\", \"GB\", and \"TB\"." + +#: utils/misc/guc.c:719 +msgid "Valid units for this parameter are \"ms\", \"s\", \"min\", \"h\", and \"d\"." +msgstr "Le unità di misura valide sono \"ms\", \"s\", \"min\", \"h\" e \"d\"." + +#: utils/misc/guc.c:778 msgid "Enables the planner's use of sequential-scan plans." msgstr "Abilita l'uso da parte del planner dei piani di scansione sequenziale." -#: utils/misc/guc.c:705 +#: utils/misc/guc.c:787 msgid "Enables the planner's use of index-scan plans." msgstr "Abilita l'uso da parte del planner dei piani di scansione degli indici." -#: utils/misc/guc.c:714 +#: utils/misc/guc.c:796 msgid "Enables the planner's use of index-only-scan plans." msgstr "Abilita l'uso da parte del planner dei piani di scansione dei soli indici." -#: utils/misc/guc.c:723 +#: utils/misc/guc.c:805 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Abilita l'uso da parte del planner dei piani di scansione bitmap." -#: utils/misc/guc.c:732 +#: utils/misc/guc.c:814 msgid "Enables the planner's use of TID scan plans." msgstr "Abilita l'uso da parte del planner dei piani di scansione TID." -#: utils/misc/guc.c:741 +#: utils/misc/guc.c:823 msgid "Enables the planner's use of explicit sort steps." msgstr "Abilita l'uso da parte del planner di passaggi di ordinamento esplicito." -#: utils/misc/guc.c:750 +#: utils/misc/guc.c:832 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Abilita l'uso da parte del planner di piani di aggregazione basati su hash." -#: utils/misc/guc.c:759 +#: utils/misc/guc.c:841 msgid "Enables the planner's use of materialization." msgstr "Abilita l'uso da parte del planner di materializzazione." -#: utils/misc/guc.c:768 +#: utils/misc/guc.c:850 msgid "Enables the planner's use of nested-loop join plans." msgstr "Abilita l'uso da parte del planner di piani di join annidati." -#: utils/misc/guc.c:777 +#: utils/misc/guc.c:859 msgid "Enables the planner's use of merge join plans." msgstr "Abilita l'uso da parte del planner di piani di join ad unione." -#: utils/misc/guc.c:786 +#: utils/misc/guc.c:868 msgid "Enables the planner's use of hash join plans." msgstr "Abilita l'uso da parte del planner di piani di join basati su hash." -#: utils/misc/guc.c:795 +#: utils/misc/guc.c:877 msgid "Enables genetic query optimization." msgstr "Abilita l'ottimizzatore genetico di query." -#: utils/misc/guc.c:796 +#: utils/misc/guc.c:878 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Questo algoritmo cerca di realizzare piani senza effettuare una ricerca esaustiva." -#: utils/misc/guc.c:806 +#: utils/misc/guc.c:888 msgid "Shows whether the current user is a superuser." msgstr "Mostra se l'utente attuale è un superutente o meno." -#: utils/misc/guc.c:816 +#: utils/misc/guc.c:898 msgid "Enables advertising the server via Bonjour." msgstr "Abilita la pubblicazione del server via Bonjour." -#: utils/misc/guc.c:825 +#: utils/misc/guc.c:907 +msgid "Collects transaction commit time." +msgstr "Raccogli l'ora di commit delle transazioni." + +#: utils/misc/guc.c:916 msgid "Enables SSL connections." msgstr "Abilita le connessioni SSL." -#: utils/misc/guc.c:834 +#: utils/misc/guc.c:925 msgid "Give priority to server ciphersuite order." msgstr "Dai priorità all'ordine di cifrari del server." -#: utils/misc/guc.c:843 +#: utils/misc/guc.c:934 msgid "Forces synchronization of updates to disk." msgstr "Forza la sincronizzazione degli aggiornamenti sul disco." -#: utils/misc/guc.c:844 +#: utils/misc/guc.c:935 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This insures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "Il server userà in diversi punti la chiamata di sistema fsync() per assicurarsi che gli aggiornamenti vengano scritti fisicamente sul disco. Questo assicura che un cluster di database possa essere recuperato in uno stato consistente dopo un crash di sistema o dell'hardware." -#: utils/misc/guc.c:855 +#: utils/misc/guc.c:946 msgid "Continues processing after a checksum failure." msgstr "Condinua l'elaborazione dopo un errore in una somma di controllo." -#: utils/misc/guc.c:856 +#: utils/misc/guc.c:947 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "La rilevazione di un errore in una somma di controllo di solito fa generare a PostgreSQL un errore che fa abortire la transazione corrente. Impostare ignore_checksum_failure a \"true\" fa sì che il sistema ignori l'errore (che viene riportato come un avviso), consentendo al processo di continuare. Questo comportamento potrebbe causare crash o altri problemi gravi. Ha effetto solo se se somme di controllo sono abilitate." -#: utils/misc/guc.c:870 +#: utils/misc/guc.c:961 msgid "Continues processing past damaged page headers." msgstr "Continua l'esecuzione oltre le intestazioni di pagina danneggiate." -#: utils/misc/guc.c:871 +#: utils/misc/guc.c:962 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 "Il rilevamento di una intestazione di pagina danneggiata normalmente fa sì che PostgreSQL segnali un errore, interrompendo la transazione corrente. L'attivazione di zero_damaged_pages fa sì che il sistema invece riporti un warning, azzeri la pagina danneggiata e continui l'esecuzione. Questo comportamento può distruggere dei dati, in particolare tutte quelle righe situate nella pagina danneggiata." -#: utils/misc/guc.c:884 +#: utils/misc/guc.c:975 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Scrivi pagine intere nel WAL non appena modificate dopo un checkpoint." -#: utils/misc/guc.c:885 +#: utils/misc/guc.c:976 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 "La scrittura di una pagina durante un crash del sistema operativo potrebbe essere stata scritta su disco solo parzialmente. Durante il ripristino, le variazioni di riga memorizzate nel WAL non sono sufficienti al ripristino. Questa operazione scrive le pagine nel WAL appena modificate dopo un checkpoint nel WAL in maniera da rendere possibile un ripristino completo." -#: utils/misc/guc.c:898 +#: utils/misc/guc.c:989 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." msgstr "Scrivi pagine complete nel WAL appena modificate dopo un checkpoint, anche dopo modifiche non critiche." -#: utils/misc/guc.c:908 +#: utils/misc/guc.c:999 +msgid "Compresses full-page writes written in WAL file." +msgstr "Comprimi le scritture di pagine complete scritte nel file WAL." + +#: utils/misc/guc.c:1009 msgid "Logs each checkpoint." msgstr "Registra nel log ogni checkpoint." -#: utils/misc/guc.c:917 +#: utils/misc/guc.c:1018 msgid "Logs each successful connection." msgstr "Registra nel log tutte le connessioni avvenute con successo." -#: utils/misc/guc.c:926 +#: utils/misc/guc.c:1027 msgid "Logs end of a session, including duration." msgstr "Registra nel log la fine delle sessioni, compresa la sua durata." -#: utils/misc/guc.c:935 -msgid "Turns on various assertion checks." -msgstr "Abilita vari controlli di asserzione." +#: utils/misc/guc.c:1036 +msgid "Logs each replication command." +msgstr "Registra nel log ogni comando di replica." -#: utils/misc/guc.c:936 -msgid "This is a debugging aid." -msgstr "Questo è un ausilio al debug." +#: utils/misc/guc.c:1045 +msgid "Shows whether the running server has assertion checks enabled." +msgstr "Mostra se il server in esecuzione ha i controlli di assert attivi." -#: utils/misc/guc.c:950 +#: utils/misc/guc.c:1060 msgid "Terminate session on any error." msgstr "Termina la sessione su qualunque errore." -#: utils/misc/guc.c:959 +#: utils/misc/guc.c:1069 msgid "Reinitialize server after backend crash." msgstr "Reinizializza il server dopo un crash del backend." -#: utils/misc/guc.c:969 +#: utils/misc/guc.c:1079 msgid "Logs the duration of each completed SQL statement." msgstr "Registra nel log la durata di ogni istruzione SQL completata." -#: utils/misc/guc.c:978 +#: utils/misc/guc.c:1088 msgid "Logs each query's parse tree." msgstr "Registra nel log l'albero di parsing di tutte le query." -#: utils/misc/guc.c:987 +#: utils/misc/guc.c:1097 msgid "Logs each query's rewritten parse tree." msgstr "Registra nel log l'albero di parsing riscritto di tutte le query." -#: utils/misc/guc.c:996 +#: utils/misc/guc.c:1106 msgid "Logs each query's execution plan." msgstr "Registra nel log il piano di esecuzione di tutte le query." -#: utils/misc/guc.c:1005 +#: utils/misc/guc.c:1115 msgid "Indents parse and plan tree displays." msgstr "Indenta gli alberi di parsing e dei piani di esecuzione." -#: utils/misc/guc.c:1014 +#: utils/misc/guc.c:1124 msgid "Writes parser performance statistics to the server log." msgstr "Registra nel log del server le statistiche sulle prestazioni del parser." -#: utils/misc/guc.c:1023 +#: utils/misc/guc.c:1133 msgid "Writes planner performance statistics to the server log." msgstr "Registra nel log del server le statistiche sulle prestazioni del planner." -#: utils/misc/guc.c:1032 +#: utils/misc/guc.c:1142 msgid "Writes executor performance statistics to the server log." msgstr "Registra nel log del server le statistiche sulle prestazioni dell'esecutore." -#: utils/misc/guc.c:1041 +#: utils/misc/guc.c:1151 msgid "Writes cumulative performance statistics to the server log." msgstr "Registra nel log del server le statistiche sulle prestazioni cumulative." -#: utils/misc/guc.c:1051 +#: utils/misc/guc.c:1161 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Registra nel log statistiche sull'uso di risorse di sistema (memoria e CPU) su varie operazioni B-tree." -#: utils/misc/guc.c:1063 +#: utils/misc/guc.c:1173 msgid "Collects information about executing commands." msgstr "Raccogli informazioni sull'esecuzione dei comandi." -#: utils/misc/guc.c:1064 +#: utils/misc/guc.c:1174 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 "Abilita la raccolta di informazioni sui comandi in esecuzione per ogni sessione, insieme all'orario in cui l'esecuzione del comando è iniziata." -#: utils/misc/guc.c:1074 +#: utils/misc/guc.c:1184 msgid "Collects statistics on database activity." msgstr "Raccogli statistiche sull'attività del database." -#: utils/misc/guc.c:1083 +#: utils/misc/guc.c:1193 msgid "Collects timing statistics for database I/O activity." msgstr "Raccogli statistiche sull'attività di I/O del database." -#: utils/misc/guc.c:1093 +#: utils/misc/guc.c:1203 msgid "Updates the process title to show the active SQL command." msgstr "Aggiorna il titolo del processo per indicare il comando SQL in esecuzione." -#: utils/misc/guc.c:1094 +#: utils/misc/guc.c:1204 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "Abilita l'aggiornamento del titolo del processo ogni volta che un nuovo comando SQL viene ricevuto dal server." -#: utils/misc/guc.c:1103 +#: utils/misc/guc.c:1213 msgid "Starts the autovacuum subprocess." msgstr "Avvia il sottoprocesso autovacuum." -#: utils/misc/guc.c:1113 +#: utils/misc/guc.c:1223 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Genera un output di debug per LISTEN e NOTIFY." -#: utils/misc/guc.c:1125 +#: utils/misc/guc.c:1235 msgid "Emits information about lock usage." msgstr "Emette informazioni sull'uso dei lock." -#: utils/misc/guc.c:1135 +#: utils/misc/guc.c:1245 msgid "Emits information about user lock usage." msgstr "Emette informazioni sull'uso dei lock utente." -#: utils/misc/guc.c:1145 +#: utils/misc/guc.c:1255 msgid "Emits information about lightweight lock usage." msgstr "Emette informazioni sull'uso dei lock leggeri." -#: utils/misc/guc.c:1155 +#: utils/misc/guc.c:1265 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Emette informazioni su tutti i lock attivi quando avviene un timeout di lock." -#: utils/misc/guc.c:1167 +#: utils/misc/guc.c:1277 msgid "Logs long lock waits." msgstr "Inserisci nel log le attese lunghe su lock." -#: utils/misc/guc.c:1177 +#: utils/misc/guc.c:1287 msgid "Logs the host name in the connection logs." msgstr "Inserisci nel log lo host name delle connessioni." -#: utils/misc/guc.c:1178 +#: utils/misc/guc.c:1288 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 "Normalmente, viene inserito nel log solo l'indirizzo IP dell'host connesso. Se vuoi mostrare anche il nome host puoi attivando questa parametro ma, a seconda di come è definito il sistema di risoluzione dei nomi, ciò potrebbe comportare una penalizzazione delle prestazioni non trascurabile." -#: utils/misc/guc.c:1189 +#: utils/misc/guc.c:1299 msgid "Causes subtables to be included by default in various commands." msgstr "Fa in modo che le sotto-tabelle vengano incluse in maniera predefinita in vari comandi." -#: utils/misc/guc.c:1198 +#: utils/misc/guc.c:1308 msgid "Encrypt passwords." msgstr "Cripta le password." -#: utils/misc/guc.c:1199 +#: utils/misc/guc.c:1309 msgid "When a password is specified in CREATE USER or ALTER USER without writing either ENCRYPTED or UNENCRYPTED, this parameter determines whether the password is to be encrypted." msgstr "Quando si indica una password in CREATE USER o ALTER USER senza indicare ENCRYPTED o UNENCRYPTED, questo parametro determina se la password debba essere criptata o meno." -#: utils/misc/guc.c:1209 +#: utils/misc/guc.c:1319 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Tratta l'espressione \"expr=NULL\" come \"expr IS NULL\"." -#: utils/misc/guc.c:1210 +#: utils/misc/guc.c:1320 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 "Se abilitato, le espressioni nella forma expr = NULL (o NULL = expr) vengono trattate come expr IS NULL, in modo cioè che restituiscano TRUE se expr viene valutato con valore NULL e falso in ogni altro caso. Il comportamento corretto prevede che expr = NULL valga sempre NULL (sconosciuto)." -#: utils/misc/guc.c:1222 +#: utils/misc/guc.c:1332 msgid "Enables per-database user names." msgstr "Abilita nomi di utenti diversificati per ogni database." -#: utils/misc/guc.c:1232 -msgid "This parameter doesn't do anything." -msgstr "Questo parametro non comporta alcuna azione." - -#: utils/misc/guc.c:1233 -msgid "It's just here so that we won't choke on SET AUTOCOMMIT TO ON from 7.3-vintage clients." -msgstr "Si trova qui in modo da non creare problemi con la SET AUTOCOMMIT TO ON con i client vecchio tipo v7.3." - -#: utils/misc/guc.c:1242 +#: utils/misc/guc.c:1341 msgid "Sets the default read-only status of new transactions." msgstr "Imposta lo stato predefinito di sola lettura per le nuove transazioni." -#: utils/misc/guc.c:1251 +#: utils/misc/guc.c:1350 msgid "Sets the current transaction's read-only status." msgstr "Imposta lo stato di sola lettura per la transazione corrente." -#: utils/misc/guc.c:1261 +#: utils/misc/guc.c:1360 msgid "Sets the default deferrable status of new transactions." msgstr "Imposta lo stato predefinito deferibile per le nuove transazioni." -#: utils/misc/guc.c:1270 +#: utils/misc/guc.c:1369 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "Indica se deferire una transazione serializzabile in sola lettura finché possa essere eseguita senza possibili fallimenti di serializzazione." -#: utils/misc/guc.c:1280 +#: utils/misc/guc.c:1379 msgid "Check function bodies during CREATE FUNCTION." msgstr "Esegui un controllo sulla definizione del corpo durante la CREATE FUNCTION." -#: utils/misc/guc.c:1289 +#: utils/misc/guc.c:1388 msgid "Enable input of NULL elements in arrays." msgstr "Abilita l'input di elementi NULL negli array." -#: utils/misc/guc.c:1290 +#: utils/misc/guc.c:1389 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "Se abilitato, un NULL senza apici come valore di input in un array indica un valore nullo; altrimenti è preso letteralmente." -#: utils/misc/guc.c:1300 +#: utils/misc/guc.c:1399 msgid "Create new tables with OIDs by default." msgstr "Crea le nuove tabella con gli OID in maniera predefinita." -#: utils/misc/guc.c:1309 +#: utils/misc/guc.c:1408 msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "Avvia un sottoprocesso per catturare in un file di log l'output di stderr e/o di csvlog." -#: utils/misc/guc.c:1318 +#: utils/misc/guc.c:1417 msgid "Truncate existing log files of same name during log rotation." msgstr "Tronca un file di log esistente con lo stesso nome durante la rotazione dei log." -#: utils/misc/guc.c:1329 +#: utils/misc/guc.c:1428 msgid "Emit information about resource usage in sorting." msgstr "Genera informazioni sull'uso delle risorse durante gli ordinamenti." -#: utils/misc/guc.c:1343 +#: utils/misc/guc.c:1442 msgid "Generate debugging output for synchronized scanning." msgstr "Genera output di debug per le scansioni sincronizzate." -#: utils/misc/guc.c:1358 +#: utils/misc/guc.c:1457 msgid "Enable bounded sorting using heap sort." msgstr "Abilita il bounded sorting usando lo heap sort." -#: utils/misc/guc.c:1371 +#: utils/misc/guc.c:1470 msgid "Emit WAL-related debugging output." msgstr "Genera output di debug relativo al WAL." -#: utils/misc/guc.c:1383 +#: utils/misc/guc.c:1482 msgid "Datetimes are integer based." msgstr "I valori di data e tempo sono basati su interi." -#: utils/misc/guc.c:1398 +#: utils/misc/guc.c:1497 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "Imposta se i nomi di utente con Kerberos e GSSAPI debbano essere trattati come case-insensitive." -#: utils/misc/guc.c:1408 +#: utils/misc/guc.c:1507 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Avverti sull'uso degli escape con backslash nei letterali stringa ordinarie." -#: utils/misc/guc.c:1418 +#: utils/misc/guc.c:1517 msgid "Causes '...' strings to treat backslashes literally." msgstr "Fa sì che le stringhe '...' trattino i backslash letteralmente." -#: utils/misc/guc.c:1429 +#: utils/misc/guc.c:1528 msgid "Enable synchronized sequential scans." msgstr "Abilita le scansioni sequenziali sincronizzate." -#: utils/misc/guc.c:1439 -msgid "Allows archiving of WAL files using archive_command." -msgstr "Consente l'archiviazione dei file WAL con l'uso di archive_command." - -#: utils/misc/guc.c:1449 +#: utils/misc/guc.c:1538 msgid "Allows connections and queries during recovery." msgstr "Consente connessioni e query durante il recupero" -#: utils/misc/guc.c:1459 +#: utils/misc/guc.c:1548 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Consente un feedback da un hot standby al primario che eviterà conflitti di query" -#: utils/misc/guc.c:1469 +#: utils/misc/guc.c:1558 msgid "Allows modifications of the structure of system tables." msgstr "Consente le modifiche alla struttura delle tabelle di sistema." -#: utils/misc/guc.c:1480 +#: utils/misc/guc.c:1569 msgid "Disables reading from system indexes." msgstr "Disabilita la lettura dagli indici di sistema." -#: utils/misc/guc.c:1481 +#: utils/misc/guc.c:1570 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "Non impedisce l'aggiornamento degli indici ed è perciò utilizzabile tranquillamente. Al peggio causa rallentamenti." -#: utils/misc/guc.c:1492 +#: utils/misc/guc.c:1581 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Abilita la modalità compatibile col passato del controllo dei privilegi sui large object." -#: utils/misc/guc.c:1493 +#: utils/misc/guc.c:1582 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "Evita il controllo dei privilegi quando si leggono o modificano large object, per compatibilità con versioni di PostgreSQL precedenti la 9.0." -#: utils/misc/guc.c:1503 +#: utils/misc/guc.c:1592 +msgid "Emit a warning for constructs that changed meaning since PostgreSQL 9.4." +msgstr "Emetti un avviso per i costrutti che hanno cambiato significato da PostgreSQL 9.4." + +#: utils/misc/guc.c:1602 msgid "When generating SQL fragments, quote all identifiers." msgstr "Quando vengono generati frammenti SQL, metti tra virgolette tutti gli identificatori." -#: utils/misc/guc.c:1513 +#: utils/misc/guc.c:1612 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Mostra se i checksum di dati sono attivi in questo cluster." -#: utils/misc/guc.c:1533 +#: utils/misc/guc.c:1632 msgid "Forces a switch to the next xlog file if a new file has not been started within N seconds." msgstr "Forza il passaggio al successivo file xlog se un nuovo file non è avviato entro N secondi." -#: utils/misc/guc.c:1544 +#: utils/misc/guc.c:1643 msgid "Waits N seconds on connection startup after authentication." msgstr "Attendi N secondi all'avvio della connessione dopo l'autenticazione." -#: utils/misc/guc.c:1545 utils/misc/guc.c:2047 +#: utils/misc/guc.c:1644 utils/misc/guc.c:2146 msgid "This allows attaching a debugger to the process." msgstr "Ciò consente di agganciare un debugger al processo." -#: utils/misc/guc.c:1554 +#: utils/misc/guc.c:1653 msgid "Sets the default statistics target." msgstr "Definisce la destinazione delle statistiche di default." -#: utils/misc/guc.c:1555 +#: utils/misc/guc.c:1654 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "Questo vale per le colonne di tabelle che non hanno definito una destinazione specifica per colonne per mezzo di un ALTER TABLE SET STATISTICS." -#: utils/misc/guc.c:1564 +#: utils/misc/guc.c:1663 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Definisce la dimensione della lista FROM oltre la quale le sottoquery non vengono ridotte." -#: utils/misc/guc.c:1566 +#: utils/misc/guc.c:1665 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "Il planner fonderà le sottoquery nelle query superiori se la lista FROM risultante avrebbe non più di questi elementi." -#: utils/misc/guc.c:1576 +#: utils/misc/guc.c:1675 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Definisce la dimensione della lista FROM oltre la quale i costrutti JOIN non vengono più appiattiti." -#: utils/misc/guc.c:1578 +#: utils/misc/guc.c:1677 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 "Il planner appiattisce i costrutti di JOIN espliciti in liste di elementi FROM ogni volta che ne risulterebbe una lista con non più di questi elementi." -#: utils/misc/guc.c:1588 +#: utils/misc/guc.c:1687 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Definisce la soglia di elementi FROM oltre la quale viene usato il GEQO." -#: utils/misc/guc.c:1597 +#: utils/misc/guc.c:1696 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: prova a definire i default per gli altri parametri di GEQO." -#: utils/misc/guc.c:1606 +#: utils/misc/guc.c:1705 msgid "GEQO: number of individuals in the population." msgstr "GEQO: numero di individui nella popolazione." -#: utils/misc/guc.c:1607 utils/misc/guc.c:1616 +#: utils/misc/guc.c:1706 utils/misc/guc.c:1715 msgid "Zero selects a suitable default value." msgstr "Lo zero selezione un valore ammissibile come default." -#: utils/misc/guc.c:1615 +#: utils/misc/guc.c:1714 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: numero di iterazioni dell'algoritmo." -#: utils/misc/guc.c:1626 +#: utils/misc/guc.c:1725 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Definisce il tempo di attesa su un lock prima di verificare si tratti di un deadlock." -#: utils/misc/guc.c:1637 +#: utils/misc/guc.c:1736 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Imposta l'intervallo massimo prima di annullare le query quando un server in hot standby sta processando dati da un WAL archiviato." -#: utils/misc/guc.c:1648 +#: utils/misc/guc.c:1747 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "Imposta l'intervallo massimo prima di annullare le query quando un server in hot standby sta processando dati da un WAL streamed." -#: utils/misc/guc.c:1659 +#: utils/misc/guc.c:1758 msgid "Sets the maximum interval between WAL receiver status reports to the primary." msgstr "Imposta l'intervallo massimo tra i rapporti di stato del ricevitore dei WAL al primario." -#: utils/misc/guc.c:1670 +#: utils/misc/guc.c:1769 msgid "Sets the maximum wait time to receive data from the primary." msgstr "Imposta un tempo massimo di attesa per la ricezione di dati dal primario." -#: utils/misc/guc.c:1681 +#: utils/misc/guc.c:1780 msgid "Sets the maximum number of concurrent connections." msgstr "Imposta il numero massimo di connessioni concorrenti." -#: utils/misc/guc.c:1691 +#: utils/misc/guc.c:1790 msgid "Sets the number of connection slots reserved for superusers." msgstr "Imposta il numero di slot per connessioni riservate ai superutenti." -#: utils/misc/guc.c:1705 +#: utils/misc/guc.c:1804 msgid "Sets the number of shared memory buffers used by the server." msgstr "Imposta il numero di buffer di memoria condivisa usati dal server." -#: utils/misc/guc.c:1716 +#: utils/misc/guc.c:1815 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Definisce il numero massimo di buffer temporanei usati da ogni sessione." -#: utils/misc/guc.c:1727 +#: utils/misc/guc.c:1826 msgid "Sets the TCP port the server listens on." msgstr "Imposta il numero di porta TCP sulla quale il server è in ascolto." -#: utils/misc/guc.c:1737 +#: utils/misc/guc.c:1836 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Imposta i permessi di accesso del socket di dominio Unix." -#: utils/misc/guc.c:1738 +#: utils/misc/guc.c:1837 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 "I socket di dominio Unix utilizzano i normali permessi dei file system Unix. Il valore del parametro deve essere la specifica numerica dei permessi nella stessa forma accettata dalle chiamate di sistema chmod e umask. (Per usare il classico formato ottale, il valore numerico deve iniziare con 0 (zero).)" -#: utils/misc/guc.c:1752 +#: utils/misc/guc.c:1851 msgid "Sets the file permissions for log files." msgstr "Imposta i permessi dei file di log." -#: utils/misc/guc.c:1753 +#: utils/misc/guc.c:1852 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 "Il valore del parametro deve essere la specifica numerica dei permessi nella stessa forma accettata dalle chiamate di sistema chmod e umask. (Per usare il classico formato ottale, il valore numerico deve iniziare con 0 (zero).)" -#: utils/misc/guc.c:1766 +#: utils/misc/guc.c:1865 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Imposta la quantità massima di memoria utilizzabile per gli spazi di lavoro delle query." -#: utils/misc/guc.c:1767 +#: utils/misc/guc.c:1866 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "Questa quantità di memoria può essere utilizzata per ogni operazione di ordinamento interno e per ogni tabella hash prima di passare ai file temporanei su disco." -#: utils/misc/guc.c:1779 +#: utils/misc/guc.c:1878 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Imposta la quantità massima di memoria utilizzabile per le operazioni di manutenzione." -#: utils/misc/guc.c:1780 +#: utils/misc/guc.c:1879 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Queste includono operazioni quali VACUUM e CREATE INDEX." -#: utils/misc/guc.c:1795 +#: utils/misc/guc.c:1894 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Imposta la profondità massima dello stack, in kilobyte." -#: utils/misc/guc.c:1806 +#: utils/misc/guc.c:1905 msgid "Limits the total size of all temporary files used by each session." msgstr "Limita la dimensione totale di tutti i file temporanei usata da ogni sessione" -#: utils/misc/guc.c:1807 +#: utils/misc/guc.c:1906 msgid "-1 means no limit." msgstr "-1 vuol dire senza limiti." -#: utils/misc/guc.c:1817 +#: utils/misc/guc.c:1916 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Costo del VACUUM per una pagina trovata nella cache dei buffer." -#: utils/misc/guc.c:1827 +#: utils/misc/guc.c:1926 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Costo del VACUUM per una pagina non trovata nella cache dei buffer." -#: utils/misc/guc.c:1837 +#: utils/misc/guc.c:1936 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Costo del VACUUM per una pagina resa sporca dal VACUUM." -#: utils/misc/guc.c:1847 +#: utils/misc/guc.c:1946 msgid "Vacuum cost amount available before napping." msgstr "Costo totale del VACUUM prima della pausa." -#: utils/misc/guc.c:1857 +#: utils/misc/guc.c:1956 msgid "Vacuum cost delay in milliseconds." msgstr "Il costo del VACUUM come ritardo in millisecondi." -#: utils/misc/guc.c:1868 +#: utils/misc/guc.c:1967 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Il costo del VACUUM come ritardo in millisecondi, per l'autovacuum." -#: utils/misc/guc.c:1879 +#: utils/misc/guc.c:1978 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Il costo totale del VACUUM prima della pausa, per l'autovacuum." -#: utils/misc/guc.c:1889 +#: utils/misc/guc.c:1988 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Imposta il numero massimo di file aperti contemporaneamente per ogni processo server." -#: utils/misc/guc.c:1902 +#: utils/misc/guc.c:2001 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Imposta il numero massimo di transazioni preparate contemporanee." -#: utils/misc/guc.c:1913 +#: utils/misc/guc.c:2012 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Imposta l'OID minimo delle tabelle per tracciare i lock." -#: utils/misc/guc.c:1914 +#: utils/misc/guc.c:2013 msgid "Is used to avoid output on system tables." msgstr "È usato per evitare l'output su tabelle di sistema." -#: utils/misc/guc.c:1923 +#: utils/misc/guc.c:2022 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Imposta l'OID delle tabelle con tracciamento dei lock non facoltativo." -#: utils/misc/guc.c:1935 +#: utils/misc/guc.c:2034 msgid "Sets the maximum allowed duration of any statement." msgstr "Imposta la durata massima consentita per qualsiasi istruzione." -#: utils/misc/guc.c:1936 utils/misc/guc.c:1947 +#: utils/misc/guc.c:2035 utils/misc/guc.c:2046 msgid "A value of 0 turns off the timeout." msgstr "Il valore 0 disabilita il timeout." -#: utils/misc/guc.c:1946 +#: utils/misc/guc.c:2045 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Imposta la durata massima consentita di qualsiasi attesa per un lock." -#: utils/misc/guc.c:1957 +#: utils/misc/guc.c:2056 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Anzianità minima alla quale il VACUUM deve congelare una riga di tabella." -#: utils/misc/guc.c:1967 +#: utils/misc/guc.c:2066 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Anzianità alla quale il VACUUM deve scandire l'intera tabella per congelarne le tuple." -#: utils/misc/guc.c:1977 +#: utils/misc/guc.c:2076 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Anzianità minima alla quale VACUUM deve congelare un MultiXactId in una riga di tabella." -#: utils/misc/guc.c:1987 +#: utils/misc/guc.c:2086 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Anzianità del multixact alla quale VACUUM deve scandire tutta la tabella per congelare le tuple." -#: utils/misc/guc.c:1997 +#: utils/misc/guc.c:2096 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Numero di transazioni per cui VACUUM e pulizia HOT devono essere deferibili, se impostata." -#: utils/misc/guc.c:2010 +#: utils/misc/guc.c:2109 msgid "Sets the maximum number of locks per transaction." msgstr "Definisce il numero massimo di lock per transazione." -#: utils/misc/guc.c:2011 +#: utils/misc/guc.c:2110 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "La tabella degli shared lock è dimensionata secondo l'assunzione che al massimo max_locks_per_transaction * max_connections distinti oggetti avranno bisogni di essere lockati in un determinato istante." -#: utils/misc/guc.c:2022 +#: utils/misc/guc.c:2121 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Imposta il numero massimo di lock di predicato per transazione." -#: utils/misc/guc.c:2023 +#: utils/misc/guc.c:2122 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "La tabella dei lock di predicato è dimensionata secondo l'assunzione che al massimo max_pred_locks_per_transaction * max_connections distinti oggetti avranno bisogni di essere lockati in un determinato istante." -#: utils/misc/guc.c:2034 +#: utils/misc/guc.c:2133 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Imposta il tempo massimo consentito per completare l'autenticazione del client." -#: utils/misc/guc.c:2046 +#: utils/misc/guc.c:2145 msgid "Waits N seconds on connection startup before authentication." msgstr "Attendi N secondi all'avvio della connessione prima dell'autenticazione." -#: utils/misc/guc.c:2057 +#: utils/misc/guc.c:2156 msgid "Sets the number of WAL files held for standby servers." msgstr "Imposta il numero di file WAL trattenuti dai server in standby." -#: utils/misc/guc.c:2067 -msgid "Sets the maximum distance in log segments between automatic WAL checkpoints." -msgstr "Imposta la distanza massima in segmenti di log fra due checkpoint del WAL automatico." +#: utils/misc/guc.c:2166 +msgid "Sets the minimum size to shrink the WAL to." +msgstr "Imposta la dimensione minima a cui ridurre il file WAL." -#: utils/misc/guc.c:2077 +#: utils/misc/guc.c:2177 +msgid "Sets the WAL size that triggers a checkpoint." +msgstr "Imosta la dimensione del WAL che fa scattare un checkpoint." + +#: utils/misc/guc.c:2188 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Imposta il tempo massimo intercorrente fra due checkpoint automatici del WAL." -#: utils/misc/guc.c:2088 +#: utils/misc/guc.c:2199 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "Abilita gli avvertimenti se i segmenti dei checkpoint sono riempiti più frequentemente di questo valore." -#: utils/misc/guc.c:2090 +#: utils/misc/guc.c:2201 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 "Scrive un messaggio nel log del server se i checkpoint dovuti al riempimento dei file dei segmenti dei checkpoint avvengono più frequentemente di questo numero di secondi. Il valore 0 (zero) disabilita questi avvisi." -#: utils/misc/guc.c:2102 +#: utils/misc/guc.c:2213 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Imposta il numero di buffer delle pagine su disco in shared memory per il WAL." -#: utils/misc/guc.c:2113 +#: utils/misc/guc.c:2224 msgid "WAL writer sleep time between WAL flushes." msgstr "Tempo di pausa del WAL writer tra due flush dei WAL." -#: utils/misc/guc.c:2125 +#: utils/misc/guc.c:2236 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Imposta il numero massimo di processi WAL sender in esecuzione simultanea." -#: utils/misc/guc.c:2136 +#: utils/misc/guc.c:2247 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Imposta il numero massimo di slot di replica definiti simultaneamente." -#: utils/misc/guc.c:2146 +#: utils/misc/guc.c:2257 msgid "Sets the maximum time to wait for WAL replication." msgstr "Imposta il tempo di attesa massimo per una replica WAL." -#: utils/misc/guc.c:2157 +#: utils/misc/guc.c:2268 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Imposta il ritardo in microsecondi tra il commit della transazione e il flushing del WAL su disco." -#: utils/misc/guc.c:2169 +#: utils/misc/guc.c:2280 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "Imposta il numero minimo di transazioni concorrenti aperte prima di eseguire un commit_delay" -#: utils/misc/guc.c:2180 +#: utils/misc/guc.c:2291 msgid "Sets the number of digits displayed for floating-point values." msgstr "Imposta il numero di cifre visualizzate per i valori in virgola mobile." -#: utils/misc/guc.c:2181 +#: utils/misc/guc.c:2292 msgid "This affects real, double precision, and geometric data types. The parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate)." msgstr "Ciò ha effetto sui tipi di dati real, double precision e geometrici. Il valore del parametro è sommato al numero standard di cifre (FLT_DIG o DBL_DIG a seconda dei casi)." -#: utils/misc/guc.c:2192 +#: utils/misc/guc.c:2303 msgid "Sets the minimum execution time above which statements will be logged." msgstr "Imposta il tempo minimo di esecuzione oltre il quale le istruzioni vengono registrate nel log." -#: utils/misc/guc.c:2194 +#: utils/misc/guc.c:2305 msgid "Zero prints all queries. -1 turns this feature off." msgstr "Il valore 0 (zero) fa sì che tutte le query siano registrate. Il valore -1 disabilita questa caratteristica." -#: utils/misc/guc.c:2204 +#: utils/misc/guc.c:2315 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Imposta il tempo minimo di esecuzione oltre il quale le azioni dell'autovacuum vengono registrate nel log." -#: utils/misc/guc.c:2206 +#: utils/misc/guc.c:2317 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "Il valore 0 (zero) fa sì che tutte le azioni siano registrate. Il valore -1 disabilita il logging dell'autovacuum." -#: utils/misc/guc.c:2216 +#: utils/misc/guc.c:2327 msgid "Background writer sleep time between rounds." msgstr "Il tempo di pausa fra due tornate del background writer." -#: utils/misc/guc.c:2227 +#: utils/misc/guc.c:2338 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Il numero massimo di pagine LRU che il background writer scarica ad ogni tornata." -#: utils/misc/guc.c:2243 +#: utils/misc/guc.c:2350 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Il numero di richieste simultanee che possono essere gestite con efficienza dal sottosistema a dischi." -#: utils/misc/guc.c:2244 +#: utils/misc/guc.c:2351 msgid "For RAID arrays, this should be approximately the number of drive spindles in the array." msgstr "Per i sistemi RAID, questo valore è pari all'incirca al numero di dischi fisici nell'array." -#: utils/misc/guc.c:2259 +#: utils/misc/guc.c:2366 msgid "Maximum number of concurrent worker processes." msgstr "Numero massimo di processi worker concorrenti." -#: utils/misc/guc.c:2269 +#: utils/misc/guc.c:2376 msgid "Automatic log file rotation will occur after N minutes." msgstr "La rotazione automatica dei log avviene dopo N minuti." -#: utils/misc/guc.c:2280 +#: utils/misc/guc.c:2387 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "La rotazione automatica dei log avviene dopo N kilobyte." -#: utils/misc/guc.c:2291 +#: utils/misc/guc.c:2398 msgid "Shows the maximum number of function arguments." msgstr "Mostra il numero massimo di argomenti delle funzioni." -#: utils/misc/guc.c:2302 +#: utils/misc/guc.c:2409 msgid "Shows the maximum number of index keys." msgstr "Mostra il numero massimo di chiavi degli indici." -#: utils/misc/guc.c:2313 +#: utils/misc/guc.c:2420 msgid "Shows the maximum identifier length." msgstr "Mostra la lunghezza massima per gli identificatori." -#: utils/misc/guc.c:2324 +#: utils/misc/guc.c:2431 msgid "Shows the size of a disk block." msgstr "Mostra la dimensione di un blocco su disco." -#: utils/misc/guc.c:2335 +#: utils/misc/guc.c:2442 msgid "Shows the number of pages per disk file." msgstr "Mostra il numero di pagine per file su disco." -#: utils/misc/guc.c:2346 +#: utils/misc/guc.c:2453 msgid "Shows the block size in the write ahead log." msgstr "Mostra la dimensione del log di write ahead." -#: utils/misc/guc.c:2357 +#: utils/misc/guc.c:2464 +msgid "Sets the time to wait before retrying to retrieve WALafter a failed attempt." +msgstr "Imposta il tempo di attesa prima di riprovare a recuperare un WAL dopo un tentativo fallito." + +#: utils/misc/guc.c:2476 msgid "Shows the number of pages per write ahead log segment." msgstr "Mostra il numero di pagine per un segmento del log di write ahead." -#: utils/misc/guc.c:2370 +#: utils/misc/guc.c:2489 msgid "Time to sleep between autovacuum runs." msgstr "Tempo di pausa fra due esecuzioni di autovacuum." -#: utils/misc/guc.c:2380 +#: utils/misc/guc.c:2499 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Numero minimo di modifiche o cancellazioni di tuple prima dell'esecuzione di un autovacuum." -#: utils/misc/guc.c:2389 +#: utils/misc/guc.c:2508 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Numero minimo di inserimenti, modifiche o cancellazioni di tuple prima dell'esecuzione di un analyze." -#: utils/misc/guc.c:2399 +#: utils/misc/guc.c:2518 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Anzianità alla quale eseguire un autovacuum su una tabella per prevenire il wraparound dell'ID delle transazioni." -#: utils/misc/guc.c:2410 +#: utils/misc/guc.c:2529 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Anzianità multixaxt a cui eseguire l'autovacuum di una tabella per prevenire il wraparound del multixact." -#: utils/misc/guc.c:2420 +#: utils/misc/guc.c:2539 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Imposta il numero massimo dei processi worker dell'autovacuum in esecuzione contemporanea." -#: utils/misc/guc.c:2430 +#: utils/misc/guc.c:2549 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Imposta la memoria massima utilizzabile da ogni processo autovacuum." -#: utils/misc/guc.c:2441 +#: utils/misc/guc.c:2560 msgid "Time between issuing TCP keepalives." msgstr "Tempo di attesa fra due keepalive TCP." -#: utils/misc/guc.c:2442 utils/misc/guc.c:2453 +#: utils/misc/guc.c:2561 utils/misc/guc.c:2572 msgid "A value of 0 uses the system default." msgstr "Il valore 0 (zero) fa sì che si applichi il valore predefinito di sistema." -#: utils/misc/guc.c:2452 +#: utils/misc/guc.c:2571 msgid "Time between TCP keepalive retransmits." msgstr "Tempo che intercorre fra due ritrasmissioni del keepalive TCP." -#: utils/misc/guc.c:2463 -msgid "Set the amount of traffic to send and receive before renegotiating the encryption keys." -msgstr "Imposta l'ammontare di traffico da inviare e ricevere prima di rinegoziare le chiavi di criptaggio." - -#: utils/misc/guc.c:2474 +#: utils/misc/guc.c:2582 msgid "Maximum number of TCP keepalive retransmits." msgstr "Numero massimo di ritrasmissioni del keepalive TCP." -#: utils/misc/guc.c:2475 +#: utils/misc/guc.c:2583 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 "Ciò controlla il numero di ritrasmissioni consecutive del keepalive che possono andare perdute prima che una connessione sia considerata morta. Il valore 0 (zero) fa sì che si applichi il valore predefinito di sistema." -#: utils/misc/guc.c:2486 +#: utils/misc/guc.c:2594 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Imposta il risultato massimo consentito per le ricerche esatte tramite GIN." -#: utils/misc/guc.c:2497 +#: utils/misc/guc.c:2605 msgid "Sets the planner's assumption about the size of the disk cache." msgstr "Imposta le assunzioni del planner in merito alla dimensione della cache dei dischi." -#: utils/misc/guc.c:2498 +#: utils/misc/guc.c:2606 msgid "That is, the portion of the kernel's disk cache that will be used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "Cioè la porzione della cache dei dischi nel kernel che sarà usata per i file dati di PostgreSQL. Viene misurata in pagine disco, che normalmente sono da 8 KB ciascuna." -#: utils/misc/guc.c:2511 +#: utils/misc/guc.c:2619 msgid "Shows the server version as an integer." msgstr "Mostra la versione del server come un intero." -#: utils/misc/guc.c:2522 +#: utils/misc/guc.c:2630 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Registra nel log l'uso di file temporanei più grandi di questo numero di kilobyte." -#: utils/misc/guc.c:2523 +#: utils/misc/guc.c:2631 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "Il valore 0 (zero) fa registrare tutti i file. Il default è -1 (che disabilita la registrazione)." -#: utils/misc/guc.c:2533 +#: utils/misc/guc.c:2641 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Imposta la dimensione in byte riservata a pg_stat_activity.query." -#: utils/misc/guc.c:2557 +#: utils/misc/guc.c:2656 +msgid "Sets the maximum size of the pending list for GIN index." +msgstr "Imposta la dimensione massima della lista di attesa per gli indici GIN." + +#: utils/misc/guc.c:2676 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Imposta la stima del planner del costo di una pagina di disco letta sequenzialmente." -#: utils/misc/guc.c:2567 +#: utils/misc/guc.c:2686 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Imposta la stima del planner del costo di una pagina di disco letta non sequenzialmente." -#: utils/misc/guc.c:2577 +#: utils/misc/guc.c:2696 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Imposta la stima del planner del costo di elaborazione di ogni tupla (riga)." -#: utils/misc/guc.c:2587 +#: utils/misc/guc.c:2706 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "Imposta la stima del il planner del costo di elaborazione di un singolo elemento di indice durante una scansione di indice." -#: utils/misc/guc.c:2597 +#: utils/misc/guc.c:2716 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Imposta la stima del planner del costo di elaborazione di un singolo operatore o chiamata di funzione." -#: utils/misc/guc.c:2608 +#: utils/misc/guc.c:2727 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Imposta la stima del planner della frazione delle righe di un cursore che verranno lette." -#: utils/misc/guc.c:2619 +#: utils/misc/guc.c:2738 msgid "GEQO: selective pressure within the population." msgstr "GEQO: pressione selettiva all'interno della popolazione." -#: utils/misc/guc.c:2629 +#: utils/misc/guc.c:2748 msgid "GEQO: seed for random path selection." msgstr "GEQO: seme per la selezione casuale dei percorsi." -#: utils/misc/guc.c:2639 +#: utils/misc/guc.c:2758 msgid "Multiple of the average buffer usage to free per round." msgstr "Multiplo dell'utilizzo medio dei buffer da liberarsi ad ogni giro." -#: utils/misc/guc.c:2649 +#: utils/misc/guc.c:2768 msgid "Sets the seed for random-number generation." msgstr "Imposta il seme per la generazione di numeri casuali." -#: utils/misc/guc.c:2660 +#: utils/misc/guc.c:2779 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Il numero di modifiche o cancellazioni di tuple prima di un VACUUM, come frazione di reltuples." -#: utils/misc/guc.c:2669 +#: utils/misc/guc.c:2788 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Numero di inserimenti, modifiche o cancellazioni di tuple prima di un ANALYZE, come frazione di reltuples." -#: utils/misc/guc.c:2679 +#: utils/misc/guc.c:2798 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "Il tempo speso nell'eseguire il flush dei buffer sporchi durante i checkpoint, come frazione dell'intervallo di checkpoint." -#: utils/misc/guc.c:2698 +#: utils/misc/guc.c:2817 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Imposta il comando di shell che verrà eseguito per archiviare un file WAL." -#: utils/misc/guc.c:2708 +#: utils/misc/guc.c:2827 msgid "Sets the client's character set encoding." msgstr "Imposta la codifica dei caratteri del client." -#: utils/misc/guc.c:2719 +#: utils/misc/guc.c:2838 msgid "Controls information prefixed to each log line." msgstr "Controlla l'informazione usata come prefisso per ogni riga di log." -#: utils/misc/guc.c:2720 +#: utils/misc/guc.c:2839 msgid "If blank, no prefix is used." msgstr "Se lasciata vuota non sarà usato alcun prefisso." -#: utils/misc/guc.c:2729 +#: utils/misc/guc.c:2848 msgid "Sets the time zone to use in log messages." msgstr "Imposta il fuso orario da usarsi nei messaggi di log." -#: utils/misc/guc.c:2739 +#: utils/misc/guc.c:2858 msgid "Sets the display format for date and time values." msgstr "Imposta il formato per la visualizzazione dei valori di data e ora." -#: utils/misc/guc.c:2740 +#: utils/misc/guc.c:2859 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Controlla anche l'interpretazione di input ambigui per le date." -#: utils/misc/guc.c:2751 +#: utils/misc/guc.c:2870 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Imposta il tablespace di default in cui create tabelle e indici." -#: utils/misc/guc.c:2752 +#: utils/misc/guc.c:2871 msgid "An empty string selects the database's default tablespace." msgstr "Una stringa vuota selezione il tablespace predefinito del database." -#: utils/misc/guc.c:2762 +#: utils/misc/guc.c:2881 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Definisce i(l) tablespace da usarsi per le tabelle temporanee e i file di ordinamento." -#: utils/misc/guc.c:2773 +#: utils/misc/guc.c:2892 msgid "Sets the path for dynamically loadable modules." msgstr "Definisce il percorso per i moduli caricabili dinamicamente." -#: utils/misc/guc.c:2774 +#: utils/misc/guc.c:2893 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 "Se si deve aprire un modulo caricabile dinamicamente e il nome specificato non contiene un percorso di directory (se non contiene uno slash) il sistema cercherà il file specificato in questo percorso." -#: utils/misc/guc.c:2787 +#: utils/misc/guc.c:2906 msgid "Sets the location of the Kerberos server key file." msgstr "Imposta la posizione del key file del server Kerberos." -#: utils/misc/guc.c:2798 +#: utils/misc/guc.c:2917 msgid "Sets the Bonjour service name." msgstr "Imposta il nome del servizio Bonjour." -#: utils/misc/guc.c:2810 +#: utils/misc/guc.c:2929 msgid "Shows the collation order locale." msgstr "Mostra la localizzazione dell'ordine di collazione." -#: utils/misc/guc.c:2821 +#: utils/misc/guc.c:2940 msgid "Shows the character classification and case conversion locale." msgstr "Mostra la localizzazione per la classificazione dei caratteri e la conversione maiuscole/minuscole." -#: utils/misc/guc.c:2832 +#: utils/misc/guc.c:2951 msgid "Sets the language in which messages are displayed." msgstr "Mostra la lingua in cui i messaggi sono visualizzati." -#: utils/misc/guc.c:2842 +#: utils/misc/guc.c:2961 msgid "Sets the locale for formatting monetary amounts." msgstr "Imposta la localizzazione per la formattazione delle quantità monetarie." -#: utils/misc/guc.c:2852 +#: utils/misc/guc.c:2971 msgid "Sets the locale for formatting numbers." msgstr "Imposta la localizzazione per la formattazione dei numeri." -#: utils/misc/guc.c:2862 +#: utils/misc/guc.c:2981 msgid "Sets the locale for formatting date and time values." msgstr "Imposta la localizzazione per la formattazione per i valori di tipo data e ora." -#: utils/misc/guc.c:2872 +#: utils/misc/guc.c:2991 msgid "Lists shared libraries to preload into each backend." msgstr "Imposta la lista delle librerie condivise da precaricare on ogni backend." -#: utils/misc/guc.c:2883 +#: utils/misc/guc.c:3002 msgid "Lists shared libraries to preload into server." msgstr "Imposta la lista delle librerie condivise da precaricare nel server." -#: utils/misc/guc.c:2894 +#: utils/misc/guc.c:3013 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Imposta la lista delle librarie condivise non privilegiate da precaricare in ogni backend." -#: utils/misc/guc.c:2905 +#: utils/misc/guc.c:3024 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Imposta l'ordine di ricerca degli schema per i nomi che non hanno un qualifica di schema." -#: utils/misc/guc.c:2917 +#: utils/misc/guc.c:3036 msgid "Sets the server (database) character set encoding." msgstr "Imposta la codifica del set di caratteri per il server (database)." -#: utils/misc/guc.c:2929 +#: utils/misc/guc.c:3048 msgid "Shows the server version." msgstr "Mostra la versione del server." -#: utils/misc/guc.c:2941 +#: utils/misc/guc.c:3060 msgid "Sets the current role." msgstr "Mostra il ruolo corrente." -#: utils/misc/guc.c:2953 +#: utils/misc/guc.c:3072 msgid "Sets the session user name." msgstr "Mostra il nome dell'utente della sessione." -#: utils/misc/guc.c:2964 +#: utils/misc/guc.c:3083 msgid "Sets the destination for server log output." msgstr "Imposta la destinazione per l'output dei log del server." -#: utils/misc/guc.c:2965 +#: utils/misc/guc.c:3084 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "I valori validi sono combinazioni di \"stderr\", \"syslog\", \"csvlog\" ed \"eventlog\", a seconda delle piattaforme." -#: utils/misc/guc.c:2976 +#: utils/misc/guc.c:3095 msgid "Sets the destination directory for log files." msgstr "Imposta la directory di destinazione dei file di log." -#: utils/misc/guc.c:2977 +#: utils/misc/guc.c:3096 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Può essere specificata sia come relativa alla directory data sia come percorso assoluto." -#: utils/misc/guc.c:2987 +#: utils/misc/guc.c:3106 msgid "Sets the file name pattern for log files." msgstr "Imposta il pattern dei nomi dei file di log." -#: utils/misc/guc.c:2998 +#: utils/misc/guc.c:3117 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Imposta il nome del programma da utilizzato per identificare i messaggi di PostgreSQL in syslog." -#: utils/misc/guc.c:3009 +#: utils/misc/guc.c:3128 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Imposta il nome del programma da usarsi per identificare i messaggi di PostgreSQL nel registro degli eventi." -#: utils/misc/guc.c:3020 +#: utils/misc/guc.c:3139 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Imposta il fuso orario per visualizzare ed interpretare gli orari." -#: utils/misc/guc.c:3030 +#: utils/misc/guc.c:3149 msgid "Selects a file of time zone abbreviations." msgstr "Seleziona un file contenente le abbreviazioni dei fusi orari." -#: utils/misc/guc.c:3040 +#: utils/misc/guc.c:3159 msgid "Sets the current transaction's isolation level." msgstr "Imposta il livello di isolamento per la transazione in corso." -#: utils/misc/guc.c:3051 +#: utils/misc/guc.c:3170 msgid "Sets the owning group of the Unix-domain socket." msgstr "Imposta il gruppo di appartenenza per i socket di dominio Unix." -#: utils/misc/guc.c:3052 +#: utils/misc/guc.c:3171 msgid "The owning user of the socket is always the user that starts the server." msgstr "L'utente che possiede il socket è sempre l'utente che ha avviato il server." -#: utils/misc/guc.c:3062 +#: utils/misc/guc.c:3181 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Imposta la directory dove i socket di dominio Unix verranno creati." -#: utils/misc/guc.c:3077 +#: utils/misc/guc.c:3196 msgid "Sets the host name or IP address(es) to listen to." msgstr "Imposta il nome host o gli indirizzi IP su cui ascoltare." -#: utils/misc/guc.c:3092 +#: utils/misc/guc.c:3211 msgid "Sets the server's data directory." msgstr "Imposta la posizione della directory dati" -#: utils/misc/guc.c:3103 +#: utils/misc/guc.c:3222 msgid "Sets the server's main configuration file." msgstr "Imposta il file primario di configurazione del server." -#: utils/misc/guc.c:3114 +#: utils/misc/guc.c:3233 msgid "Sets the server's \"hba\" configuration file." msgstr "Imposta il file di configurazione \"hba\" del server." -#: utils/misc/guc.c:3125 +#: utils/misc/guc.c:3244 msgid "Sets the server's \"ident\" configuration file." msgstr "Imposta il file di configurazione \"ident\" del server." -#: utils/misc/guc.c:3136 +#: utils/misc/guc.c:3255 msgid "Writes the postmaster PID to the specified file." msgstr "Scrivi il PID del postmaster nel file specificato." -#: utils/misc/guc.c:3147 +#: utils/misc/guc.c:3266 msgid "Location of the SSL server certificate file." msgstr "Posizione del file di certificati del server SSL." -#: utils/misc/guc.c:3157 +#: utils/misc/guc.c:3276 msgid "Location of the SSL server private key file." msgstr "Posizione del file della chiave primaria del server SSL." -#: utils/misc/guc.c:3167 +#: utils/misc/guc.c:3286 msgid "Location of the SSL certificate authority file." msgstr "Posizione del file di autorità dei certificati del server SSL." -#: utils/misc/guc.c:3177 +#: utils/misc/guc.c:3296 msgid "Location of the SSL certificate revocation list file." msgstr "Posizione del file della lista di revoche di certificati SSL." -#: utils/misc/guc.c:3187 +#: utils/misc/guc.c:3306 msgid "Writes temporary statistics files to the specified directory." msgstr "Scrive i file di statistiche temporanee nella directory specificata." -#: utils/misc/guc.c:3198 +#: utils/misc/guc.c:3317 msgid "List of names of potential synchronous standbys." msgstr "Elenco dei nomi dei potenziali standby sincroni." -#: utils/misc/guc.c:3209 +#: utils/misc/guc.c:3328 msgid "Sets default text search configuration." msgstr "Imposta la configurazione di ricerca di testo predefinita." -#: utils/misc/guc.c:3219 +#: utils/misc/guc.c:3338 msgid "Sets the list of allowed SSL ciphers." msgstr "Imposta la lista di codici SSL consentiti." -#: utils/misc/guc.c:3234 +#: utils/misc/guc.c:3353 msgid "Sets the curve to use for ECDH." msgstr "Imposta la curva da usare per l'ECHD." -#: utils/misc/guc.c:3249 +#: utils/misc/guc.c:3368 msgid "Sets the application name to be reported in statistics and logs." msgstr "Imposta il nome dell'applicazione da riportare nelle statistiche e nei log." -#: utils/misc/guc.c:3269 +#: utils/misc/guc.c:3379 +msgid "Sets the name of the cluster which is included in the process title." +msgstr "Imposta il nome del cluster incluso nel titolo del processo." + +#: utils/misc/guc.c:3399 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Imposta se \"\\'\" è consentito nei letterali stringa." -#: utils/misc/guc.c:3279 +#: utils/misc/guc.c:3409 msgid "Sets the output format for bytea." msgstr "Imposta il formato di output di bytea." -#: utils/misc/guc.c:3289 +#: utils/misc/guc.c:3419 msgid "Sets the message levels that are sent to the client." msgstr "Imposta quali livelli di messaggi sono inviati al client" -#: utils/misc/guc.c:3290 utils/misc/guc.c:3343 utils/misc/guc.c:3354 -#: utils/misc/guc.c:3410 +#: utils/misc/guc.c:3420 utils/misc/guc.c:3473 utils/misc/guc.c:3484 +#: utils/misc/guc.c:3550 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "Ogni livello include tutti i livelli che lo seguono. Più avanti il livello, meno messaggi sono inviati." -#: utils/misc/guc.c:3300 +#: utils/misc/guc.c:3430 msgid "Enables the planner to use constraints to optimize queries." msgstr "Permette al planner di usare i vincoli per ottimizzare le query." -#: utils/misc/guc.c:3301 +#: utils/misc/guc.c:3431 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "La scansioni delle tabelle saranno evitate se i loro vincoli garantiscono che nessuna riga corrisponda con la query." -#: utils/misc/guc.c:3311 +#: utils/misc/guc.c:3441 msgid "Sets the transaction isolation level of each new transaction." msgstr "Imposta il livello di isolamento predefinito per ogni nuova transazione." -#: utils/misc/guc.c:3321 +#: utils/misc/guc.c:3451 msgid "Sets the display format for interval values." msgstr "Imposta il formato di visualizzazione per intervalli." -#: utils/misc/guc.c:3332 +#: utils/misc/guc.c:3462 msgid "Sets the verbosity of logged messages." msgstr "Imposta la prolissità dei messaggi registrati." -#: utils/misc/guc.c:3342 +#: utils/misc/guc.c:3472 msgid "Sets the message levels that are logged." msgstr "Imposta i livelli dei messaggi registrati." -#: utils/misc/guc.c:3353 +#: utils/misc/guc.c:3483 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Fa in modo che tutti gli eventi che generano errore a questo livello o a un livello superiore siano registrati nel log." -#: utils/misc/guc.c:3364 +#: utils/misc/guc.c:3494 msgid "Sets the type of statements logged." msgstr "Imposta il tipo di istruzioni registrato nel log." -#: utils/misc/guc.c:3374 +#: utils/misc/guc.c:3504 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "Imposta la \"facility\" da usare quando syslog è abilitato." -#: utils/misc/guc.c:3389 +#: utils/misc/guc.c:3519 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Imposta il comportamento delle sessioni per i trigger e le regole di riscrittura." -#: utils/misc/guc.c:3399 +#: utils/misc/guc.c:3529 msgid "Sets the current transaction's synchronization level." msgstr "Imposta il livello di sincronizzazione della transazione corrente." -#: utils/misc/guc.c:3409 +#: utils/misc/guc.c:3539 +msgid "Allows archiving of WAL files using archive_command." +msgstr "Consente l'archiviazione dei file WAL con l'uso di archive_command." + +#: utils/misc/guc.c:3549 msgid "Enables logging of recovery-related debugging information." msgstr "Abilita il logging di informazioni di debug relative al recupero." -#: utils/misc/guc.c:3425 +#: utils/misc/guc.c:3565 msgid "Collects function-level statistics on database activity." msgstr "Raccogli statistiche al livello di funzioni sull'attività del database." -#: utils/misc/guc.c:3435 +#: utils/misc/guc.c:3575 msgid "Set the level of information written to the WAL." msgstr "Imposta il livello delle informazioni scritte nel WAL." -#: utils/misc/guc.c:3445 +#: utils/misc/guc.c:3585 msgid "Selects the dynamic shared memory implementation used." msgstr "Seleziona l'implementazione di memoria dinamica condivisa utilizzata." -#: utils/misc/guc.c:3455 +#: utils/misc/guc.c:3595 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Seleziona il metodo usato per forzare aggiornamenti WAL su disco." -#: utils/misc/guc.c:3465 +#: utils/misc/guc.c:3605 msgid "Sets how binary values are to be encoded in XML." msgstr "imposta come i valori binari devono essere codificati nel formato XML." -#: utils/misc/guc.c:3475 +#: utils/misc/guc.c:3615 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "Imposta se qualunque dato XML nelle operazioni di parsing e serializzazione implicite debba essere considerato come un documento o frammento di un contenuto." -#: utils/misc/guc.c:3486 +#: utils/misc/guc.c:3626 msgid "Use of huge pages on Linux." msgstr "Uso delle pagine huge su Linux." -#: utils/misc/guc.c:4301 +#: utils/misc/guc.c:3636 +msgid "Enable row security." +msgstr "Abilita la sicurezza delle righe." + +#: utils/misc/guc.c:3637 +msgid "When enabled, row security will be applied to all users." +msgstr "Quando abilitata, la sicurezza delle righe verrà applicata a tutti gli utenti." + +#: utils/misc/guc.c:4451 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -20148,12 +21633,12 @@ msgstr "" "%s non sa dove trovare il file di configurazione del server.\n" "Devi specificare le opzioni --config-file o -D, oppure impostare la variabile d'ambiente PGDATA.\n" -#: utils/misc/guc.c:4320 +#: utils/misc/guc.c:4470 #, c-format msgid "%s cannot access the server configuration file \"%s\": %s\n" msgstr "%s non può accedere al file di configurazione del server \"%s\": %s\n" -#: utils/misc/guc.c:4348 +#: utils/misc/guc.c:4496 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -20162,7 +21647,7 @@ msgstr "" "%s non sa dove trovare i dati di sistema del database.\n" "Possono essere specificati come \"data_directory\" in \"%s\", oppure dall'opzione -D, oppure dalla variabile d'ambiente PGDATA.\n" -#: utils/misc/guc.c:4396 +#: utils/misc/guc.c:4544 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -20171,7 +21656,7 @@ msgstr "" "%s non sa dove trovare il file di configurazione \"hba\".\n" "Può essere specificato come \"hba_file\" in \"%s\", oppure dall'opzione -D, oppure dalla variabile d'ambiente PGDATA.\n" -#: utils/misc/guc.c:4419 +#: utils/misc/guc.c:4567 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -20180,149 +21665,146 @@ msgstr "" "%s non sa dove trovare il file di configurazione \"ident\".\n" "Può essere specificato come \"ident_file\" in \"%s\", oppure dall'opzione -D, oppure dalla variabile d'ambiente PGDATA.\n" -#: utils/misc/guc.c:5011 utils/misc/guc.c:5191 +#: utils/misc/guc.c:5241 utils/misc/guc.c:5288 msgid "Value exceeds integer range." msgstr "Il valore non rientra nel limite possibile per gli interi." -#: utils/misc/guc.c:5030 -msgid "Valid units for this parameter are \"kB\", \"MB\", \"GB\", and \"TB\"." -msgstr "Le unità di misura valide sono \"kB\", \"MB\", \"GB\", and \"TB\"." - -#: utils/misc/guc.c:5105 -msgid "Valid units for this parameter are \"ms\", \"s\", \"min\", \"h\", and \"d\"." -msgstr "Le unità di misura valide sono \"ms\", \"s\", \"min\", \"h\" e \"d\"." - -#: utils/misc/guc.c:5399 utils/misc/guc.c:5524 utils/misc/guc.c:6767 -#: utils/misc/guc.c:8964 utils/misc/guc.c:8998 +#: utils/misc/guc.c:5482 utils/misc/guc.c:5575 utils/misc/guc.c:6867 +#: utils/misc/guc.c:9584 utils/misc/guc.c:9618 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "valore non valido per il parametro \"%s\": \"%s\"" -#: utils/misc/guc.c:5437 +#: utils/misc/guc.c:5511 #, c-format msgid "parameter \"%s\" requires a numeric value" msgstr "il parametro \"%s\" richiede un valore numerico" -#: utils/misc/guc.c:5446 +#: utils/misc/guc.c:5520 #, c-format msgid "%g is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g non è compreso nell'intervallo di validità del il parametro \"%s\" (%g .. %g)" -#: utils/misc/guc.c:5612 utils/misc/guc.c:6334 utils/misc/guc.c:6386 -#: utils/misc/guc.c:6749 utils/misc/guc.c:7446 utils/misc/guc.c:7605 -#: utils/misc/guc.c:8784 +#: utils/misc/guc.c:5673 utils/misc/guc.c:7002 +#, c-format +msgid "cannot set parameters during a parallel operation" +msgstr "non è possibile impostare parametri durante un'operazione parallela" + +#: utils/misc/guc.c:5680 utils/misc/guc.c:6430 utils/misc/guc.c:6482 +#: utils/misc/guc.c:6843 utils/misc/guc.c:7579 utils/misc/guc.c:7747 +#: utils/misc/guc.c:9404 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "parametro di configurazione \"%s\" sconosciuto" -#: utils/misc/guc.c:5627 utils/misc/guc.c:6760 +#: utils/misc/guc.c:5695 utils/misc/guc.c:6855 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "il parametro \"%s\" non può essere cambiato" -#: utils/misc/guc.c:5650 utils/misc/guc.c:5833 utils/misc/guc.c:5919 -#: utils/misc/guc.c:6005 utils/misc/guc.c:6109 utils/misc/guc.c:6200 -#: guc-file.l:299 +#: utils/misc/guc.c:5718 utils/misc/guc.c:5910 utils/misc/guc.c:6000 +#: utils/misc/guc.c:6090 utils/misc/guc.c:6198 utils/misc/guc.c:6293 +#: guc-file.l:352 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "il parametro \"%s\" non può essere cambiato senza riavviare il server" -#: utils/misc/guc.c:5660 +#: utils/misc/guc.c:5728 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "il parametro \"%s\" non può essere cambiato ora" -#: utils/misc/guc.c:5705 -#, c-format -msgid "parameter \"%s\" cannot be set after connection start" -msgstr "il parametro \"%s\" non può essere impostato dopo l'avvio della connessione" - -#: utils/misc/guc.c:5715 utils/misc/guc.c:8800 +#: utils/misc/guc.c:5746 utils/misc/guc.c:5791 utils/misc/guc.c:9420 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "permesso di impostare il parametro \"%s\" negato" -#: utils/misc/guc.c:5753 +#: utils/misc/guc.c:5781 +#, c-format +msgid "parameter \"%s\" cannot be set after connection start" +msgstr "il parametro \"%s\" non può essere impostato dopo l'avvio della connessione" + +#: utils/misc/guc.c:5829 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "il parametro \"%s\" non può essere impostato da una funzione che ha i privilegi del creatore" -#: utils/misc/guc.c:6342 utils/misc/guc.c:6390 utils/misc/guc.c:7609 +#: utils/misc/guc.c:6438 utils/misc/guc.c:6486 utils/misc/guc.c:7753 #, c-format msgid "must be superuser to examine \"%s\"" msgstr "solo un superutente può esaminare \"%s\"" -#: utils/misc/guc.c:6456 +#: utils/misc/guc.c:6552 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s accetta un unico argomento" -#: utils/misc/guc.c:6713 +#: utils/misc/guc.c:6803 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "solo un superutente può eseguire il comando ALTER SYSTEM" -#: utils/misc/guc.c:6946 +#: utils/misc/guc.c:6916 +#, c-format +msgid "could not parse contents of file \"%s\"" +msgstr "non è possibile analizzare il contenuto del file \"%s\"" + +#: utils/misc/guc.c:7078 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT non è implementato" -#: utils/misc/guc.c:7034 +#: utils/misc/guc.c:7163 #, c-format msgid "SET requires parameter name" msgstr "SET richiede il nome del parametro" -#: utils/misc/guc.c:7148 +#: utils/misc/guc.c:7276 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "tentativo di ridefinire il parametro \"%s\"" -#: utils/misc/guc.c:8504 +#: utils/misc/guc.c:9037 +#, c-format +msgid "parameter \"%s\" could not be set" +msgstr "il parametro \"%s\" non può essere impostato" + +#: utils/misc/guc.c:9124 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "non è stato possibile interpretare l'impostazione del parametro \"%s\"" -#: utils/misc/guc.c:8862 utils/misc/guc.c:8896 +#: utils/misc/guc.c:9482 utils/misc/guc.c:9516 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "valore non valido per il parametro \"%s\": %d" -#: utils/misc/guc.c:8930 +#: utils/misc/guc.c:9550 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "valore non valido per il parametro \"%s\": %g" -#: utils/misc/guc.c:9120 +#: utils/misc/guc.c:9740 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "\"temp_buffers\" non può essere modificato dopo che la sessione ha utilizzato qualsiasi tabella temporanea." -#: utils/misc/guc.c:9132 -#, c-format -msgid "SET AUTOCOMMIT TO OFF is no longer supported" -msgstr "SET AUTOCOMMIT TO OFF non è più supportato" - -#: utils/misc/guc.c:9144 -#, c-format -msgid "assertion checking is not supported by this build" -msgstr "il controllo delle asserzioni non è supportato in questo binario" - -#: utils/misc/guc.c:9157 +#: utils/misc/guc.c:9752 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour non è supportato in questo binario" -#: utils/misc/guc.c:9170 +#: utils/misc/guc.c:9765 #, c-format msgid "SSL is not supported by this build" msgstr "SSL non è supportato in questo binario" -#: utils/misc/guc.c:9182 +#: utils/misc/guc.c:9777 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Non è possibile abilitare il parametro quando \"log_statement_stats\" è abilitato." -#: utils/misc/guc.c:9194 +#: utils/misc/guc.c:9789 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "Non è possibile abilitare \"log_statement_stats\" quando \"log_parser_stats\", \"log_planner_stats\" o \"log_executor_stats\" sono abilitati." @@ -20332,7 +21814,12 @@ msgstr "Non è possibile abilitare \"log_statement_stats\" quando \"log_parser_s msgid "internal error: unrecognized run-time parameter type\n" msgstr "errore interno: tipo di parametro sconosciuto\n" -#: utils/misc/timeout.c:422 +#: utils/misc/rls.c:125 +#, c-format +msgid "insufficient privilege to bypass row security." +msgstr "privilegi insufficienti per scavalcare la sicurezza di riga." + +#: utils/misc/timeout.c:388 #, c-format msgid "cannot add more timeout reasons" msgstr "non è possibile aggiungere altri motivi di timeout" @@ -20402,12 +21889,15 @@ msgstr "la riga è troppo lunga nel file di fusi orari \"%s\", riga %d" msgid "@INCLUDE without file name in time zone file \"%s\", line %d" msgstr "@INCLUDE senza nome del file nel file di fusi orari \"%s\", riga %d" -#: utils/mmgr/aset.c:500 +#: utils/mmgr/aset.c:505 #, c-format msgid "Failed while creating memory context \"%s\"." msgstr "Errore durante la creazione del contesto di memoria \"%s\"." -#: utils/mmgr/aset.c:679 utils/mmgr/aset.c:873 utils/mmgr/aset.c:1115 +#: utils/mmgr/mcxt.c:686 utils/mmgr/mcxt.c:721 utils/mmgr/mcxt.c:758 +#: utils/mmgr/mcxt.c:795 utils/mmgr/mcxt.c:829 utils/mmgr/mcxt.c:858 +#: utils/mmgr/mcxt.c:892 utils/mmgr/mcxt.c:972 utils/mmgr/mcxt.c:1005 +#: utils/mmgr/mcxt.c:1052 #, c-format msgid "Failed on request of size %zu." msgstr "Errore durante la richiesta di dimensione %zu." @@ -20432,529 +21922,539 @@ msgstr "non è possibile eliminare il portale attivo \"%s\"" msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "non è possibile eseguire PREPARE in una transazione che ha creato un cursore WITH HOLD" -#: utils/sort/logtape.c:229 +#: utils/sort/logtape.c:226 #, c-format msgid "could not read block %ld of temporary file: %m" msgstr "lettura del blocco %ld dal file temporaneo fallita: %m" -#: utils/sort/tuplesort.c:3255 +#: utils/sort/tuplesort.c:3591 #, c-format msgid "could not create unique index \"%s\"" msgstr "creazione dell'indice univoco \"%s\" fallita" -#: utils/sort/tuplesort.c:3257 +#: utils/sort/tuplesort.c:3593 #, c-format msgid "Key %s is duplicated." msgstr "La chiave %s è duplicata." -#: utils/sort/tuplestore.c:506 utils/sort/tuplestore.c:516 -#: utils/sort/tuplestore.c:843 utils/sort/tuplestore.c:947 -#: utils/sort/tuplestore.c:1011 utils/sort/tuplestore.c:1028 -#: utils/sort/tuplestore.c:1230 utils/sort/tuplestore.c:1295 -#: utils/sort/tuplestore.c:1304 +#: utils/sort/tuplesort.c:3594 +#, c-format +msgid "Duplicate keys exist." +msgstr "Esistono chiavi duplicate." + +#: utils/sort/tuplestore.c:515 utils/sort/tuplestore.c:525 +#: utils/sort/tuplestore.c:852 utils/sort/tuplestore.c:956 +#: utils/sort/tuplestore.c:1020 utils/sort/tuplestore.c:1037 +#: utils/sort/tuplestore.c:1239 utils/sort/tuplestore.c:1304 +#: utils/sort/tuplestore.c:1313 #, c-format msgid "could not seek in tuplestore temporary file: %m" msgstr "ricerca nel file temporaneo tuplestore fallita: %m" -#: utils/sort/tuplestore.c:1451 utils/sort/tuplestore.c:1524 -#: utils/sort/tuplestore.c:1530 +#: utils/sort/tuplestore.c:1460 utils/sort/tuplestore.c:1533 +#: utils/sort/tuplestore.c:1539 #, c-format msgid "could not read from tuplestore temporary file: %m" msgstr "lettura dal file temporaneo tuplestore fallita: %m" -#: utils/sort/tuplestore.c:1492 utils/sort/tuplestore.c:1497 -#: utils/sort/tuplestore.c:1503 +#: utils/sort/tuplestore.c:1501 utils/sort/tuplestore.c:1506 +#: utils/sort/tuplestore.c:1512 #, c-format msgid "could not write to tuplestore temporary file: %m" msgstr "scrittura nel file temporaneo tuplestore fallita: %m" +#: utils/time/snapmgr.c:432 +#, c-format +msgid "The source transaction is not running anymore." +msgstr "La transazione di origine non è più in esecuzione." + # translator: %s represents an SQL statement name -#: utils/time/snapmgr.c:890 +#: utils/time/snapmgr.c:986 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "non è possibile esportare uno snapshot da una sotto-transazione" -#: utils/time/snapmgr.c:1040 utils/time/snapmgr.c:1045 -#: utils/time/snapmgr.c:1050 utils/time/snapmgr.c:1065 -#: utils/time/snapmgr.c:1070 utils/time/snapmgr.c:1075 -#: utils/time/snapmgr.c:1174 utils/time/snapmgr.c:1190 -#: utils/time/snapmgr.c:1215 +#: utils/time/snapmgr.c:1135 utils/time/snapmgr.c:1140 +#: utils/time/snapmgr.c:1145 utils/time/snapmgr.c:1160 +#: utils/time/snapmgr.c:1165 utils/time/snapmgr.c:1170 +#: utils/time/snapmgr.c:1269 utils/time/snapmgr.c:1285 +#: utils/time/snapmgr.c:1310 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "dati dello snapshot non validi nel file \"%s\"" -#: utils/time/snapmgr.c:1112 +#: utils/time/snapmgr.c:1207 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "SET TRANSACTION SNAPSHOT dev'essere invocato prima di qualunque query" -#: utils/time/snapmgr.c:1121 +#: utils/time/snapmgr.c:1216 #, c-format msgid "a snapshot-importing transaction must have isolation level SERIALIZABLE or REPEATABLE READ" msgstr "una transazione che importa uno snapshot deve avere livello di isolamento SERIALIZABLE o REPEATABLE READ" -#: utils/time/snapmgr.c:1130 utils/time/snapmgr.c:1139 +#: utils/time/snapmgr.c:1225 utils/time/snapmgr.c:1234 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "identificativo di snapshot non valido: \"%s\"" -#: utils/time/snapmgr.c:1228 +#: utils/time/snapmgr.c:1323 #, c-format msgid "a serializable transaction cannot import a snapshot from a non-serializable transaction" msgstr "una transazione serializzabile non può importare uno snapshot da una transazione non serializzabile" -#: utils/time/snapmgr.c:1232 +#: utils/time/snapmgr.c:1327 #, c-format msgid "a non-read-only serializable transaction cannot import a snapshot from a read-only transaction" msgstr "una transazione non di sola lettura non può importare uno snapshot da una transazione di sola lettura" -#: utils/time/snapmgr.c:1247 +#: utils/time/snapmgr.c:1342 #, c-format msgid "cannot import a snapshot from a different database" msgstr "non è possibile importare uno snapshot da un database diverso" -#: gram.y:956 +#: gram.y:1010 #, c-format msgid "unrecognized role option \"%s\"" msgstr "opzione di ruolo \"%s\" sconosciuta" -#: gram.y:1238 gram.y:1253 +#: gram.y:1286 gram.y:1301 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS non può includere elementi dello schema" -#: gram.y:1398 +#: gram.y:1446 #, c-format msgid "current database cannot be changed" msgstr "il database corrente non può essere cambiato" -#: gram.y:1522 gram.y:1537 +#: gram.y:1570 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "l'intervallo della time zone deve essere HOUR o HOUR TO MINUTE" -#: gram.y:1542 gram.y:10351 gram.y:12688 -#, c-format -msgid "interval precision specified twice" -msgstr "intervallo di precisione specificato due volte" - -#: gram.y:2511 gram.y:2540 +#: gram.y:2591 gram.y:2620 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUT non sono consentiti con PROGRAM" -#: gram.y:2802 gram.y:2809 gram.y:9589 gram.y:9597 +#: gram.y:2886 gram.y:2893 gram.y:10187 gram.y:10195 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "GLOBAL è deprecato nella creazione di tabelle temporanee" -#: gram.y:4482 +#: gram.y:4766 msgid "duplicate trigger events specified" msgstr "evento del trigger specificato più volte" -#: gram.y:4584 +#: gram.y:4866 #, c-format msgid "conflicting constraint properties" msgstr "proprietà del vincolo in conflitto" -#: gram.y:4716 +#: gram.y:4998 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION non è stata ancora implementata" -#: gram.y:4732 +#: gram.y:5014 #, c-format msgid "DROP ASSERTION is not yet implemented" msgstr "DROP ASSERTION non è stata ancora implementata" -#: gram.y:5078 +#: gram.y:5360 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK non è più richiesto" -#: gram.y:5079 +#: gram.y:5361 #, c-format msgid "Update your data type." msgstr "Aggiorna il tuo tipo di dato." -#: gram.y:6540 +#: gram.y:6938 #, c-format msgid "aggregates cannot have output arguments" msgstr "gli aggregati non possono avere argomenti di output" -#: gram.y:8236 gram.y:8254 +#: gram.y:8755 gram.y:8773 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION non supportato su viste ricorsive" -#: gram.y:9234 -#, c-format -msgid "number of columns does not match number of values" -msgstr "il numero di colonne non corrisponde al numero di valori" - -#: gram.y:9693 +#: gram.y:10295 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "La sintassi LIMIT #,# non è supportata" -#: gram.y:9694 +#: gram.y:10296 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Usa separatamente le clausole LIMIT ed OFFSET." -#: gram.y:9882 gram.y:9907 +#: gram.y:10559 gram.y:10584 #, c-format msgid "VALUES in FROM must have an alias" msgstr "VALUES nel FROM deve avere un alias" -#: gram.y:9883 gram.y:9908 +#: gram.y:10560 gram.y:10585 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Per esempio, FROM (VALUES ...) [AS] foo." -#: gram.y:9888 gram.y:9913 +#: gram.y:10565 gram.y:10590 #, c-format msgid "subquery in FROM must have an alias" msgstr "la sottoquery in FROM deve avere un alias" -#: gram.y:9889 gram.y:9914 +#: gram.y:10566 gram.y:10591 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Per esempio, FROM (SELECT ...) [AS] foo." -#: gram.y:10477 +#: gram.y:11165 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "la precisione per il tipo float dev'essere di almeno un bit" -#: gram.y:10486 +#: gram.y:11174 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "la precisione per il tipo float dev'essere inferiore a 54 bit" -#: gram.y:10952 +#: gram.y:11678 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "numero errato di parametri a sinistra dell'espressione OVERLAPS" -#: gram.y:10957 +#: gram.y:11683 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "numero errato di parametri a destra dell'espressione OVERLAPS" -#: gram.y:11141 +#: gram.y:11860 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "il predicato UNIQUE non è stato ancora implementato" -#: gram.y:11428 +#: gram.y:12192 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "non si può usare più di una clausola ORDER BY con WITHIN GROUOP" -#: gram.y:11433 +#: gram.y:12197 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "non si può usare DISTINCT con WITHIN GROUP" -#: gram.y:11438 +#: gram.y:12202 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "non si può usare VARIADIC con WITHIN GROUP" -#: gram.y:11944 +#: gram.y:12708 #, c-format msgid "RANGE PRECEDING is only supported with UNBOUNDED" msgstr "RANGE PRECEDING è supportato solo con UNBOUNDED" -#: gram.y:11950 +#: gram.y:12714 #, c-format msgid "RANGE FOLLOWING is only supported with UNBOUNDED" msgstr "RANGE FOLLOWING è supportato solo con UNBOUNDED" -#: gram.y:11977 gram.y:12000 +#: gram.y:12741 gram.y:12764 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "l'inizio della finestra non può essere UNBOUNDED FOLLOWING" -#: gram.y:11982 +#: gram.y:12746 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "una finestra che inizia dalla riga seguente non può terminare alla riga corrente" -#: gram.y:12005 +#: gram.y:12769 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "la fine della finestra non può essere UNBOUNDED PRECEDING" -#: gram.y:12011 +#: gram.y:12775 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "una finestra che inizia dalla riga corrente non può avere righe precedenti" -#: gram.y:12018 +#: gram.y:12782 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "una finestra che inizia dalla riga seguente non può avere righe precedenti" -#: gram.y:12657 +#: gram.y:13440 #, c-format msgid "type modifier cannot have parameter name" msgstr "un modificatore di tipo non può avere un nome di parametro" -#: gram.y:12663 +#: gram.y:13446 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "un modificatore di tipo non può avere ORDER BY" -#: gram.y:13284 gram.y:13459 +#: gram.y:13504 gram.y:13539 +#, c-format +msgid "role name \"%s\" is reserved" +msgstr "il nome di ruolo \"%s\" è riservato" + +#: gram.y:13510 gram.y:13516 +#, c-format +msgid "%s cannot be used as a role name here" +msgstr "%s non può essere usato come nome di ruolo qui" + +#: gram.y:14135 gram.y:14324 msgid "improper use of \"*\"" msgstr "uso improprio di \"*\"" -#: gram.y:13523 +#: gram.y:14388 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "un aggregato su insiemi ordinati con un argomento diretto VARIADIC deve avere un argomento aggregato VARIADIC sullo stesso tipo" -#: gram.y:13560 +#: gram.y:14425 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "non è possibile avere più di una clausola ORDER BY" -#: gram.y:13571 +#: gram.y:14436 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "non è possibile avere più di una clausola OFFSET" -#: gram.y:13580 +#: gram.y:14445 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "non è possibile avere più di una clausola LIMIT" -#: gram.y:13589 +#: gram.y:14454 #, c-format msgid "multiple WITH clauses not allowed" msgstr "non è possibile avere più di una clausola WITH" -#: gram.y:13729 +#: gram.y:14634 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "gli argomenti OUT e INOUT non sono permessi nelle funzioni TABLE" -#: gram.y:13830 +#: gram.y:14735 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "non è possibile avere più di una clausola COLLATE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:13868 gram.y:13881 +#: gram.y:14773 gram.y:14786 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "un vincolo %s non può essere marcato DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:13894 +#: gram.y:14799 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "un vincolo %s non può essere marcato NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:13907 +#: gram.y:14812 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "un vincolo %s non può essere marcato NO INHERIT" -#: guc-file.l:263 +#: guc-file.l:315 #, c-format msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %u" msgstr "parametro di configurazione \"%s\" sconosciuto nel file \"%s\" riga %u" -#: guc-file.l:327 +#: guc-file.l:388 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "il parametro \"%s\" è stato rimosso dal file di configurazione, valore predefinito ripristinato" -#: guc-file.l:389 +#: guc-file.l:454 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "il parametro \"%s\" è stato modificato a \"%s\"" -#: guc-file.l:424 +#: guc-file.l:496 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "il file di configurazione \"%s\" contiene errori" -#: guc-file.l:429 +#: guc-file.l:501 #, c-format msgid "configuration file \"%s\" contains errors; unaffected changes were applied" msgstr "il file di configurazione \"%s\" contiene errori; i cambiamenti senza errori sono stati applicati" -#: guc-file.l:434 +#: guc-file.l:506 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "il file di configurazione \"%s\" contiene errori; nessun cambiamento effettuato" -#: guc-file.l:504 +#: guc-file.l:579 #, c-format msgid "could not open configuration file \"%s\": maximum nesting depth exceeded" msgstr "apertura del file di configurazione \"%s\" fallita: massima profondità di annidamento raggiunta" -#: guc-file.l:524 +#: guc-file.l:606 #, c-format msgid "skipping missing configuration file \"%s\"" msgstr "file di configurazione mancante \"%s\" saltato" -#: guc-file.l:763 +#: guc-file.l:860 #, c-format msgid "syntax error in file \"%s\" line %u, near end of line" msgstr "errore di sintassi nel file \"%s\" riga %u, vicino alla fine della riga" -#: guc-file.l:768 +#: guc-file.l:870 #, c-format msgid "syntax error in file \"%s\" line %u, near token \"%s\"" msgstr "errore di sintassi nel file \"%s\" riga %u, vicino al token \"%s\"" -#: guc-file.l:784 +#: guc-file.l:890 #, c-format msgid "too many syntax errors found, abandoning file \"%s\"" msgstr "troppi errori di sintassi, file \"%s\" abbandonato" -#: guc-file.l:829 +#: guc-file.l:942 #, c-format msgid "could not open configuration directory \"%s\": %m" msgstr "apertura della directory di configurazione \"%s\" fallita: %m" -#: repl_gram.y:247 repl_gram.y:274 +#: repl_gram.y:257 repl_gram.y:284 #, c-format msgid "invalid timeline %u" msgstr "timeline %u non valida" -#: repl_scanner.l:118 +#: repl_scanner.l:119 msgid "invalid streaming start location" msgstr "posizione di avvio dello streaming non valida" -#: repl_scanner.l:169 scan.l:661 +#: repl_scanner.l:170 scan.l:667 msgid "unterminated quoted string" msgstr "stringa tra virgolette non terminata" -#: repl_scanner.l:179 +#: repl_scanner.l:180 #, c-format msgid "syntax error: unexpected character \"%s\"" msgstr "errore di sintassi: carattere \"%s\" inaspettato" -#: scan.l:426 +#: scan.l:432 msgid "unterminated /* comment" msgstr "commento /* non terminato" -#: scan.l:455 +#: scan.l:461 msgid "unterminated bit string literal" msgstr "letterale di stringa di bit non terminato" -#: scan.l:476 +#: scan.l:482 msgid "unterminated hexadecimal string literal" msgstr "letterale di stringa esadecimale non terminato" -#: scan.l:526 +#: scan.l:532 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "uso non sicuro di stringa costante con gli escape Unicode" -#: scan.l:527 +#: scan.l:533 #, c-format msgid "String constants with Unicode escapes cannot be used when standard_conforming_strings is off." msgstr "Le stringhe costanti con escape Unicode non possono essere usate quando standard_conforming_strings è disabilitato." -#: scan.l:571 scan.l:767 +#: scan.l:577 scan.l:773 msgid "invalid Unicode escape character" msgstr "carattere escape Unicode non valido" -#: scan.l:596 scan.l:604 scan.l:612 scan.l:613 scan.l:614 scan.l:1297 -#: scan.l:1324 scan.l:1328 scan.l:1366 scan.l:1370 scan.l:1392 +#: scan.l:602 scan.l:610 scan.l:618 scan.l:619 scan.l:620 scan.l:1329 +#: scan.l:1356 scan.l:1360 scan.l:1398 scan.l:1402 scan.l:1424 msgid "invalid Unicode surrogate pair" msgstr "coppia surrogata Unicode non valida" -#: scan.l:618 +#: scan.l:624 #, c-format msgid "invalid Unicode escape" msgstr "escape Unicode non valido" -#: scan.l:619 +#: scan.l:625 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "Gli escape Unicode devono essere \\uXXXX or \\UXXXXXXXX." -#: scan.l:630 +#: scan.l:636 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "uso non sicuro di \\' in una stringa letterale" -#: scan.l:631 +#: scan.l:637 #, c-format msgid "Use '' to write quotes in strings. \\' is insecure in client-only encodings." msgstr "Usa '' per scrivere gli apici in una stringa. \\' non è sicuro in codifiche solo client." -#: scan.l:706 +#: scan.l:712 msgid "unterminated dollar-quoted string" msgstr "stringa delimitata da dollari non terminata" -#: scan.l:723 scan.l:747 scan.l:762 +#: scan.l:729 scan.l:753 scan.l:768 msgid "zero-length delimited identifier" msgstr "identificativo delimitato di lunghezza zero" -#: scan.l:782 +#: scan.l:788 msgid "unterminated quoted identifier" msgstr "identificativo tra virgolette non terminato" -#: scan.l:886 +#: scan.l:919 msgid "operator too long" msgstr "operatore troppo lungo" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1044 +#: scan.l:1072 #, c-format msgid "%s at end of input" msgstr "%s alla fine dell'input" #. translator: first %s is typically the translation of "syntax error" -#: scan.l:1052 +#: scan.l:1080 #, c-format msgid "%s at or near \"%s\"" msgstr "%s a o presso \"%s\"" -#: scan.l:1213 scan.l:1245 +#: scan.l:1245 scan.l:1277 msgid "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8" msgstr "i valori escape Unicode non possono essere usati per code point superiori a 007F se la codifica del server non è UTF8" -#: scan.l:1241 scan.l:1384 +#: scan.l:1273 scan.l:1416 msgid "invalid Unicode escape value" msgstr "valore escape Unicode non valido" -#: scan.l:1440 +#: scan.l:1472 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "uso non standard di \\' in una stringa letterale" -#: scan.l:1441 +#: scan.l:1473 #, c-format msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." msgstr "Usa '' per scrivere gli apici nelle stringhe, oppure usa la sintassi di escape delle stringhe (E'...')." -#: scan.l:1450 +#: scan.l:1482 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "uso non standard di \\\\ in una stringa letterale" -#: scan.l:1451 +#: scan.l:1483 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "Usa la sintassi di escape delle stringhe per i backslash, cioè E'\\\\'." -#: scan.l:1465 +#: scan.l:1497 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "uso non standard dell'escape in una stringa letterale" -#: scan.l:1466 +#: scan.l:1498 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Usa la sintassi di escape per le stringhe per effettuare gli escape, cioè, E'\\r\\n'." diff --git a/src/backend/po/ru.po b/src/backend/po/ru.po index 0e6507cdc83f1..04128a2d7a407 100644 --- a/src/backend/po/ru.po +++ b/src/backend/po/ru.po @@ -27,8 +27,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9 current\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-03-14 18:38+0000\n" -"PO-Revision-Date: 2015-03-15 07:02+0300\n" +"POT-Creation-Date: 2015-07-27 18:08+0000\n" +"PO-Revision-Date: 2015-07-27 23:00+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -76,14 +76,14 @@ msgstr "не удалось прочитать символическую ссы msgid "pclose failed: %s" msgstr "ошибка pclose: %s" -#: ../common/fe_memutils.c:33 ../common/fe_memutils.c:60 -#: ../common/fe_memutils.c:83 ../common/psprintf.c:181 ../port/path.c:598 +#: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 +#: ../common/fe_memutils.c:98 ../common/psprintf.c:181 ../port/path.c:598 #: ../port/path.c:636 ../port/path.c:653 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../common/fe_memutils.c:77 +#: ../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" @@ -104,26 +104,27 @@ msgid "could not close directory \"%s\": %s\n" msgstr "не удалось закрыть каталог \"%s\": %s\n" #: ../common/psprintf.c:179 ../port/path.c:596 ../port/path.c:634 -#: ../port/path.c:651 access/transam/xlog.c:6123 lib/stringinfo.c:258 -#: libpq/auth.c:824 libpq/auth.c:1182 libpq/auth.c:1250 libpq/auth.c:1652 -#: postmaster/bgworker.c:267 postmaster/bgworker.c:783 -#: postmaster/postmaster.c:2205 postmaster/postmaster.c:2236 -#: postmaster/postmaster.c:3772 postmaster/postmaster.c:4473 -#: postmaster/postmaster.c:4558 postmaster/postmaster.c:5262 -#: postmaster/postmaster.c:5494 replication/logical/logical.c:168 -#: storage/buffer/buf_init.c:154 storage/buffer/localbuf.c:396 -#: storage/file/fd.c:458 storage/file/fd.c:855 storage/file/fd.c:973 -#: storage/file/fd.c:1586 storage/ipc/procarray.c:909 -#: storage/ipc/procarray.c:1395 storage/ipc/procarray.c:1402 -#: storage/ipc/procarray.c:1751 storage/ipc/procarray.c:2335 +#: ../port/path.c:651 access/transam/xlog.c:6024 lib/stringinfo.c:258 +#: libpq/auth.c:821 libpq/auth.c:1182 libpq/auth.c:1250 libpq/auth.c:1659 +#: postmaster/bgworker.c:289 postmaster/bgworker.c:796 +#: postmaster/postmaster.c:2219 postmaster/postmaster.c:2250 +#: postmaster/postmaster.c:3813 postmaster/postmaster.c:4501 +#: postmaster/postmaster.c:4569 postmaster/postmaster.c:5283 +#: postmaster/postmaster.c:5537 replication/logical/logical.c:170 +#: storage/buffer/localbuf.c:396 storage/file/fd.c:481 storage/file/fd.c:878 +#: storage/file/fd.c:996 storage/file/fd.c:1609 storage/ipc/procarray.c:907 +#: storage/ipc/procarray.c:1393 storage/ipc/procarray.c:1400 +#: storage/ipc/procarray.c:1793 storage/ipc/procarray.c:2377 #: utils/adt/formatting.c:1523 utils/adt/formatting.c:1643 -#: utils/adt/formatting.c:1764 utils/adt/regexp.c:219 utils/adt/varlena.c:3653 -#: utils/adt/varlena.c:3674 utils/fmgr/dfmgr.c:224 utils/hash/dynahash.c:379 -#: utils/hash/dynahash.c:456 utils/hash/dynahash.c:970 utils/mb/mbutils.c:376 -#: utils/mb/mbutils.c:709 utils/misc/guc.c:3563 utils/misc/guc.c:3579 -#: utils/misc/guc.c:3592 utils/misc/guc.c:6544 utils/misc/tzparser.c:470 -#: utils/mmgr/aset.c:499 utils/mmgr/aset.c:678 utils/mmgr/aset.c:872 -#: utils/mmgr/aset.c:1114 +#: utils/adt/formatting.c:1764 utils/adt/regexp.c:219 utils/adt/varlena.c:4199 +#: utils/adt/varlena.c:4220 utils/fmgr/dfmgr.c:220 utils/hash/dynahash.c:411 +#: utils/hash/dynahash.c:488 utils/hash/dynahash.c:1002 utils/mb/mbutils.c:376 +#: utils/mb/mbutils.c:709 utils/misc/guc.c:3732 utils/misc/guc.c:3748 +#: utils/misc/guc.c:3761 utils/misc/guc.c:6695 utils/misc/tzparser.c:470 +#: utils/mmgr/aset.c:499 utils/mmgr/mcxt.c:688 utils/mmgr/mcxt.c:723 +#: utils/mmgr/mcxt.c:760 utils/mmgr/mcxt.c:797 utils/mmgr/mcxt.c:831 +#: utils/mmgr/mcxt.c:860 utils/mmgr/mcxt.c:894 utils/mmgr/mcxt.c:974 +#: utils/mmgr/mcxt.c:1007 utils/mmgr/mcxt.c:1054 #, c-format msgid "out of memory" msgstr "нехватка памяти" @@ -138,6 +139,43 @@ msgstr "неверное имя слоя" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Допустимые имена слоёв: \"main\", \"fsm\", \"vm\" и \"init\"." +#: ../common/restricted_token.c:68 +#, c-format +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: ПРЕДУПРЕЖДЕНИЕ: в этой ОС нельзя создавать ограниченные маркеры\n" + +#: ../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: не удалось открыть маркер процесса (код ошибки: %lu)\n" + +#: ../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: не удалось подготовить структуры SID (код ошибки: %lu)\n" + +#: ../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: не удалось создать ограниченный маркер (код ошибки: %lu)\n" + +#: ../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "" +"%s: не удалось запустить процесс для команды \"%s\" (код ошибки: %lu)\n" + +#: ../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "" +"%s: не удалось перезапуститься с ограниченным маркером (код ошибки: %lu)\n" + +#: ../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: не удалось получить код выхода от подпроцесса (код ошибки: %lu)\n" + #: ../common/rmtree.c:77 #, c-format msgid "could not stat file or directory \"%s\": %s\n" @@ -153,14 +191,14 @@ msgstr "ошибка при удалении файла или каталога msgid "could not look up effective user ID %ld: %s" msgstr "выяснить эффективный идентификатор пользователя (%ld) не удалось: %s" -#: ../common/username.c:47 libpq/auth.c:1599 +#: ../common/username.c:47 libpq/auth.c:1606 msgid "user does not exist" msgstr "пользователь не существует" #: ../common/username.c:62 #, c-format msgid "user name lookup failure: error code %lu" -msgstr "распознать имя пользователя не удалось: код ошибки %lu" +msgstr "распознать имя пользователя не удалось (код ошибки: %lu)" #: ../common/wait_error.c:47 #, c-format @@ -203,6 +241,7 @@ msgid "could not determine encoding for codeset \"%s\"" msgstr "не удалось определить кодировку для набора символов \"%s\"" #: ../port/chklocale.c:260 ../port/chklocale.c:389 +#: postmaster/postmaster.c:4798 #, c-format msgid "Please report this to ." msgstr "" @@ -281,78 +320,98 @@ msgstr "код ошибки win32 %lu преобразован в %d" msgid "unrecognized win32 error code: %lu" msgstr "нераспознанный код ошибки win32: %lu" -#: access/common/heaptuple.c:679 access/common/heaptuple.c:1419 +#: access/brin/brin.c:1082 +#, c-format +msgid "" +"brin_summarize_new_values() cannot run in a transaction that has already " +"obtained a snapshot" +msgstr "" +"brin_summarize_new_values() не может работать в транзакции, в которой уже " +"получен снимок" + +#: access/brin/brin_pageops.c:645 +#, c-format +msgid "index row size %lu exceeds maximum %lu for index \"%s\"" +msgstr "" +"размер строки индекса (%lu) больше предельного размера (%lu) (индекс \"%s\")" + +#: access/brin/brin_revmap.c:448 +#, c-format +msgid "unexpected page type 0x%04X in BRIN index \"%s\" block %u" +msgstr "неожиданный тип страницы 0x%04X в BRIN-индексе \"%s\" (блок: %u)" + +#: access/common/heaptuple.c:708 access/common/heaptuple.c:1339 #, c-format msgid "number of columns (%d) exceeds limit (%d)" msgstr "число колонок (%d) превышает предел (%d)" -#: access/common/indextuple.c:57 +#: access/common/indextuple.c:60 #, c-format msgid "number of index columns (%d) exceeds limit (%d)" msgstr "число колонок индекса (%d) превышает предел (%d)" -#: access/common/indextuple.c:173 access/spgist/spgutils.c:605 +#: access/common/indextuple.c:176 access/spgist/spgutils.c:605 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "строка индекса требует байт: %zu, при максимуме: %zu" #: access/common/printtup.c:294 tcop/fastpath.c:182 tcop/fastpath.c:544 -#: tcop/postgres.c:1699 +#: tcop/postgres.c:1730 #, c-format msgid "unsupported format code: %d" msgstr "неподдерживаемый код формата: %d" -#: access/common/reloptions.c:396 +#: access/common/reloptions.c:419 #, c-format msgid "user-defined relation parameter types limit exceeded" msgstr "превышен предел пользовательских типов реляционных параметров" -#: access/common/reloptions.c:680 +#: access/common/reloptions.c:701 #, c-format msgid "RESET must not include values for parameters" msgstr "В RESET не должно передаваться значение параметров" -#: access/common/reloptions.c:713 +#: access/common/reloptions.c:734 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "нераспознанное пространство имён параметров \"%s\"" -#: access/common/reloptions.c:959 parser/parse_clause.c:268 +#: access/common/reloptions.c:974 parser/parse_clause.c:279 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "нераспознанный параметр \"%s\"" -#: access/common/reloptions.c:984 +#: access/common/reloptions.c:1004 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "параметр \"%s\" указан неоднократно" -#: access/common/reloptions.c:999 +#: access/common/reloptions.c:1019 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "неверное значение для логического параметра \"%s\": %s" -#: access/common/reloptions.c:1010 +#: access/common/reloptions.c:1030 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "неверное значение для целочисленного параметра \"%s\": %s" -#: access/common/reloptions.c:1015 access/common/reloptions.c:1033 +#: access/common/reloptions.c:1035 access/common/reloptions.c:1053 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "значение %s вне допустимых пределов параметра \"%s\"" -#: access/common/reloptions.c:1017 +#: access/common/reloptions.c:1037 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Допускаются значения только от \"%d\" до \"%d\"." -#: access/common/reloptions.c:1028 +#: access/common/reloptions.c:1048 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "неверное значение для численного параметра \"%s\": %s" -#: access/common/reloptions.c:1035 +#: access/common/reloptions.c:1055 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Допускаются значения только от \"%f\" до \"%f\"." @@ -382,14 +441,14 @@ msgstr "" msgid "Attribute \"%s\" of type %s does not exist in type %s." msgstr "Атрибут \"%s\" типа %s не существует в типе %s." -#: access/common/tupdesc.c:635 parser/parse_relation.c:1339 +#: access/common/tupdesc.c:635 parser/parse_relation.c:1511 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "колонка \"%s\" не может быть объявлена как SETOF" -#: access/gin/ginentrypage.c:108 access/gist/gist.c:1281 -#: access/nbtree/nbtinsert.c:549 access/nbtree/nbtsort.c:485 -#: access/spgist/spgdoinsert.c:1880 +#: access/gin/ginentrypage.c:109 access/gist/gist.c:1289 +#: access/nbtree/nbtinsert.c:567 access/nbtree/nbtsort.c:488 +#: access/spgist/spgdoinsert.c:1907 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "" @@ -406,12 +465,12 @@ msgstr "" msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Для исправления выполните REINDEX INDEX \"%s\"." -#: access/gist/gist.c:624 access/gist/gistvacuum.c:266 +#: access/gist/gist.c:632 access/gist/gistvacuum.c:266 #, c-format msgid "index \"%s\" contains an inner tuple marked as invalid" msgstr "индекс \"%s\" содержит внутренний кортеж, отмеченный как ошибочный" -#: access/gist/gist.c:626 access/gist/gistvacuum.c:268 +#: access/gist/gist.c:634 access/gist/gistvacuum.c:268 #, c-format msgid "" "This is caused by an incomplete page split at crash recovery before " @@ -420,26 +479,26 @@ msgstr "" "Это вызвано неполным разделением страницы при восстановлении после сбоя в " "PostgreSQL до версии 9.1." -#: access/gist/gist.c:627 access/gist/gistutil.c:693 -#: access/gist/gistutil.c:704 access/gist/gistvacuum.c:269 +#: access/gist/gist.c:635 access/gist/gistutil.c:735 +#: access/gist/gistutil.c:746 access/gist/gistvacuum.c:269 #: access/hash/hashutil.c:172 access/hash/hashutil.c:183 #: access/hash/hashutil.c:195 access/hash/hashutil.c:216 -#: access/nbtree/nbtpage.c:509 access/nbtree/nbtpage.c:520 +#: access/nbtree/nbtpage.c:518 access/nbtree/nbtpage.c:529 #, c-format msgid "Please REINDEX it." msgstr "Пожалуйста, выполните REINDEX для него." -#: access/gist/gistbuild.c:254 +#: access/gist/gistbuild.c:252 #, c-format msgid "invalid value for \"buffering\" option" msgstr "неверное значение для параметра \"buffering\"" -#: access/gist/gistbuild.c:255 +#: access/gist/gistbuild.c:253 #, c-format msgid "Valid values are \"on\", \"off\", and \"auto\"." msgstr "Допускаются только значения \"on\", \"off\" и \"auto\"." -#: access/gist/gistbuildbuffers.c:780 utils/sort/logtape.c:212 +#: access/gist/gistbuildbuffers.c:778 utils/sort/logtape.c:209 #, c-format msgid "could not write block %ld of temporary file: %m" msgstr "не удалось записать блок %ld временного файла: %m" @@ -459,14 +518,14 @@ msgstr "" "разработчиками или попробуйте указать эту колонку в команде CREATE INDEX " "второй." -#: access/gist/gistutil.c:690 access/hash/hashutil.c:169 -#: access/nbtree/nbtpage.c:506 +#: access/gist/gistutil.c:732 access/hash/hashutil.c:169 +#: access/nbtree/nbtpage.c:515 #, c-format msgid "index \"%s\" contains unexpected zero page at block %u" msgstr "в индексе \"%s\" неожиданно оказалась нулевая страница в блоке %u" -#: access/gist/gistutil.c:701 access/hash/hashutil.c:180 -#: access/hash/hashutil.c:192 access/nbtree/nbtpage.c:517 +#: access/gist/gistutil.c:743 access/hash/hashutil.c:180 +#: access/hash/hashutil.c:192 access/nbtree/nbtpage.c:526 #, c-format msgid "index \"%s\" contains corrupted page at block %u" msgstr "индекс \"%s\" содержит испорченную страницу в блоке %u" @@ -476,7 +535,7 @@ msgstr "индекс \"%s\" содержит испорченную страни msgid "index row size %zu exceeds hash maximum %zu" msgstr "размер строки индекса (%zu) больше предельного размера хэша (%zu)" -#: access/hash/hashinsert.c:70 access/spgist/spgdoinsert.c:1884 +#: access/hash/hashinsert.c:70 access/spgist/spgdoinsert.c:1911 #: access/spgist/spgutils.c:666 #, c-format msgid "Values larger than a buffer page cannot be indexed." @@ -502,138 +561,163 @@ msgstr "индекс \"%s\" не является хэш-индексом" msgid "index \"%s\" has wrong hash version" msgstr "индекс \"%s\" имеет неправильную версию хэша" -#: access/heap/heapam.c:1203 access/heap/heapam.c:1231 -#: access/heap/heapam.c:1263 catalog/aclchk.c:1742 +#: access/heap/heapam.c:1074 access/heap/heapam.c:1126 +#, c-format +msgid "cannot access temporary tables during a parallel operation" +msgstr "обращаться к временным таблицам во время параллельных операций нельзя" + +#: access/heap/heapam.c:1243 access/heap/heapam.c:1271 +#: access/heap/heapam.c:1303 catalog/aclchk.c:1733 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\" - это индекс" -#: access/heap/heapam.c:1208 access/heap/heapam.c:1236 -#: access/heap/heapam.c:1268 catalog/aclchk.c:1749 commands/tablecmds.c:8495 -#: commands/tablecmds.c:11279 +#: access/heap/heapam.c:1248 access/heap/heapam.c:1276 +#: access/heap/heapam.c:1308 catalog/aclchk.c:1740 commands/tablecmds.c:8925 +#: commands/tablecmds.c:11925 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\" - это составной тип" -#: access/heap/heapam.c:4394 access/heap/heapam.c:4451 -#: access/heap/heapam.c:4696 executor/execMain.c:2102 +#: access/heap/heapam.c:2339 +#, c-format +msgid "cannot insert tuples during a parallel operation" +msgstr "вставлять кортежи во время параллельных операций нельзя" + +#: access/heap/heapam.c:2760 +#, c-format +msgid "cannot delete tuples during a parallel operation" +msgstr "удалять кортежи во время параллельных операций нельзя" + +#: access/heap/heapam.c:3226 access/heap/heapam.c:5775 +#, c-format +msgid "cannot update tuples during a parallel operation" +msgstr "изменять кортежи во время параллельных операций нельзя" + +#: access/heap/heapam.c:4597 access/heap/heapam.c:4635 +#: access/heap/heapam.c:4858 executor/execMain.c:2267 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "не удалось получить блокировку строки в таблице \"%s\"" -#: access/heap/hio.c:240 access/heap/rewriteheap.c:666 +#: access/heap/hio.c:253 access/heap/rewriteheap.c:666 #, c-format msgid "row is too big: size %zu, maximum size %zu" msgstr "размер строки (%zu) превышает предел (%zu)" -#: access/heap/rewriteheap.c:932 +#: access/heap/rewriteheap.c:925 #, c-format msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "не удалось записать в файл \"%s\" (записано байт: %d из %d): %m" -#: access/heap/rewriteheap.c:973 access/heap/rewriteheap.c:1185 -#: access/heap/rewriteheap.c:1282 access/transam/timeline.c:407 -#: access/transam/timeline.c:497 access/transam/xlog.c:3185 -#: access/transam/xlog.c:3315 replication/logical/snapbuild.c:1592 -#: replication/slot.c:1025 replication/slot.c:1114 storage/file/fd.c:436 -#: storage/smgr/md.c:966 storage/smgr/md.c:1197 storage/smgr/md.c:1370 -#: utils/misc/guc.c:6566 +#: access/heap/rewriteheap.c:965 access/heap/rewriteheap.c:1177 +#: access/heap/rewriteheap.c:1274 access/transam/timeline.c:407 +#: access/transam/timeline.c:497 access/transam/xlog.c:2986 +#: access/transam/xlog.c:3148 replication/logical/origin.c:609 +#: replication/logical/snapbuild.c:1592 replication/slot.c:1026 +#: replication/slot.c:1115 storage/file/fd.c:459 storage/file/fd.c:2718 +#: storage/smgr/md.c:982 storage/smgr/md.c:1213 storage/smgr/md.c:1386 +#: utils/misc/guc.c:6717 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" -#: access/heap/rewriteheap.c:1028 access/heap/rewriteheap.c:1148 +#: access/heap/rewriteheap.c:1020 access/heap/rewriteheap.c:1140 #: access/transam/timeline.c:315 access/transam/timeline.c:475 -#: access/transam/xlog.c:3141 access/transam/xlog.c:3276 -#: access/transam/xlog.c:9922 access/transam/xlog.c:10237 -#: postmaster/postmaster.c:4248 replication/slot.c:982 -#: storage/file/copydir.c:162 storage/smgr/md.c:304 utils/time/snapmgr.c:976 +#: access/transam/xlog.c:2942 access/transam/xlog.c:3091 +#: access/transam/xlog.c:10096 access/transam/xlog.c:10132 +#: access/transam/xlog.c:10454 postmaster/postmaster.c:4276 +#: replication/logical/origin.c:538 replication/slot.c:983 +#: storage/file/copydir.c:162 storage/smgr/md.c:320 utils/time/snapmgr.c:1071 #, c-format msgid "could not create file \"%s\": %m" msgstr "создать файл \"%s\" не удалось: %m" -#: access/heap/rewriteheap.c:1157 +#: access/heap/rewriteheap.c:1149 #, c-format msgid "could not truncate file \"%s\" to %u: %m" msgstr "не удалось обрезать файл \"%s\" до нужного размера (%u): %m" -#: access/heap/rewriteheap.c:1164 replication/walsender.c:464 -#: storage/smgr/md.c:1782 +#: access/heap/rewriteheap.c:1156 replication/walsender.c:465 +#: storage/smgr/md.c:1798 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "не удалось перейти к концу файла \"%s\": %m" -#: access/heap/rewriteheap.c:1175 access/transam/timeline.c:367 +#: access/heap/rewriteheap.c:1167 access/transam/timeline.c:367 #: access/transam/timeline.c:401 access/transam/timeline.c:491 -#: access/transam/xlog.c:3176 access/transam/xlog.c:3308 -#: postmaster/postmaster.c:4258 postmaster/postmaster.c:4268 -#: replication/logical/snapbuild.c:1576 replication/slot.c:1011 -#: storage/file/copydir.c:187 utils/init/miscinit.c:1057 -#: utils/init/miscinit.c:1066 utils/init/miscinit.c:1073 utils/misc/guc.c:6527 -#: utils/misc/guc.c:6558 utils/misc/guc.c:8268 utils/misc/guc.c:8282 -#: utils/time/snapmgr.c:981 utils/time/snapmgr.c:988 +#: access/transam/xlog.c:2977 access/transam/xlog.c:3141 +#: postmaster/postmaster.c:4286 postmaster/postmaster.c:4296 +#: replication/logical/origin.c:547 replication/logical/origin.c:583 +#: replication/logical/origin.c:599 replication/logical/snapbuild.c:1576 +#: replication/slot.c:1012 storage/file/copydir.c:187 +#: utils/init/miscinit.c:1179 utils/init/miscinit.c:1188 +#: utils/init/miscinit.c:1195 utils/misc/guc.c:6678 utils/misc/guc.c:6709 +#: utils/misc/guc.c:8527 utils/misc/guc.c:8541 utils/time/snapmgr.c:1076 +#: utils/time/snapmgr.c:1083 #, c-format msgid "could not write to file \"%s\": %m" msgstr "записать в файл \"%s\" не удалось: %m" -#: access/heap/rewriteheap.c:1258 access/transam/xlog.c:10106 -#: access/transam/xlogarchive.c:114 access/transam/xlogarchive.c:467 -#: replication/logical/reorderbuffer.c:2353 -#: replication/logical/reorderbuffer.c:2410 +#: access/heap/rewriteheap.c:1250 access/transam/xlog.c:10321 +#: access/transam/xlogarchive.c:114 access/transam/xlogarchive.c:468 +#: replication/logical/origin.c:525 replication/logical/reorderbuffer.c:2421 +#: replication/logical/reorderbuffer.c:2478 #: replication/logical/snapbuild.c:1520 replication/logical/snapbuild.c:1895 -#: replication/slot.c:1088 storage/ipc/dsm.c:326 storage/smgr/md.c:404 -#: storage/smgr/md.c:453 storage/smgr/md.c:1317 +#: replication/slot.c:1089 storage/ipc/dsm.c:326 storage/smgr/md.c:420 +#: storage/smgr/md.c:469 storage/smgr/md.c:1333 #, c-format msgid "could not remove file \"%s\": %m" msgstr "не удалось стереть файл \"%s\": %m" -#: access/heap/rewriteheap.c:1272 access/transam/timeline.c:111 +#: access/heap/rewriteheap.c:1264 access/transam/timeline.c:111 #: access/transam/timeline.c:236 access/transam/timeline.c:334 -#: access/transam/xlog.c:3117 access/transam/xlog.c:3224 -#: access/transam/xlog.c:3261 access/transam/xlog.c:3536 -#: access/transam/xlog.c:3614 replication/basebackup.c:458 -#: replication/basebackup.c:1191 replication/logical/logicalfuncs.c:152 -#: replication/logical/reorderbuffer.c:1966 -#: replication/logical/reorderbuffer.c:2173 -#: replication/logical/reorderbuffer.c:2802 +#: access/transam/xlog.c:2918 access/transam/xlog.c:3035 +#: access/transam/xlog.c:3076 access/transam/xlog.c:3367 +#: access/transam/xlog.c:3445 replication/basebackup.c:398 +#: replication/basebackup.c:1158 replication/logical/logicalfuncs.c:154 +#: replication/logical/origin.c:673 replication/logical/reorderbuffer.c:2038 +#: replication/logical/reorderbuffer.c:2242 +#: replication/logical/reorderbuffer.c:2869 #: replication/logical/snapbuild.c:1569 replication/logical/snapbuild.c:1653 -#: replication/slot.c:1103 replication/walsender.c:457 -#: replication/walsender.c:2082 storage/file/copydir.c:155 -#: storage/file/fd.c:422 storage/smgr/md.c:586 storage/smgr/md.c:844 -#: utils/error/elog.c:1811 utils/init/miscinit.c:992 -#: utils/init/miscinit.c:1121 utils/misc/guc.c:6766 utils/misc/guc.c:6795 +#: replication/slot.c:1104 replication/walsender.c:458 +#: replication/walsender.c:2080 storage/file/copydir.c:155 +#: storage/file/fd.c:445 storage/file/fd.c:2653 storage/file/fd.c:2705 +#: storage/smgr/md.c:602 storage/smgr/md.c:860 utils/error/elog.c:1854 +#: utils/init/miscinit.c:1114 utils/init/miscinit.c:1243 utils/misc/guc.c:6921 +#: utils/misc/guc.c:6953 #, c-format msgid "could not open file \"%s\": %m" msgstr "не удалось открыть файл \"%s\": %m" -#: access/index/indexam.c:172 catalog/objectaddress.c:855 -#: commands/indexcmds.c:1725 commands/tablecmds.c:232 -#: commands/tablecmds.c:11270 +#: access/index/indexam.c:172 catalog/objectaddress.c:1144 +#: commands/indexcmds.c:1754 commands/tablecmds.c:238 +#: commands/tablecmds.c:11916 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\" - это не индекс" -#: access/nbtree/nbtinsert.c:401 +#: access/nbtree/nbtinsert.c:419 #, c-format msgid "duplicate key value violates unique constraint \"%s\"" msgstr "повторяющееся значение ключа нарушает ограничение уникальности \"%s\"" -#: access/nbtree/nbtinsert.c:403 +#: access/nbtree/nbtinsert.c:421 #, c-format msgid "Key %s already exists." msgstr "Ключ \"%s\" уже существует." -#: access/nbtree/nbtinsert.c:470 +#: access/nbtree/nbtinsert.c:488 #, c-format msgid "failed to re-find tuple within index \"%s\"" msgstr "не удалось повторно найти кортеж в индексе \"%s\"" -#: access/nbtree/nbtinsert.c:472 +#: access/nbtree/nbtinsert.c:490 #, c-format msgid "This may be because of a non-immutable index expression." msgstr "Возможно, это вызвано переменной природой индексного выражения." -#: access/nbtree/nbtinsert.c:552 access/nbtree/nbtsort.c:488 +#: access/nbtree/nbtinsert.c:570 access/nbtree/nbtsort.c:491 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -645,25 +729,25 @@ msgstr "" "Возможно, вам стоит применить индекс функции с MD5-хэшем значения или " "полнотекстовую индексацию." -#: access/nbtree/nbtpage.c:166 access/nbtree/nbtpage.c:362 -#: access/nbtree/nbtpage.c:449 parser/parse_utilcmd.c:1620 +#: access/nbtree/nbtpage.c:168 access/nbtree/nbtpage.c:371 +#: access/nbtree/nbtpage.c:458 parser/parse_utilcmd.c:1665 #, c-format msgid "index \"%s\" is not a btree" msgstr "индекс \"%s\" не является b-деревом" -#: access/nbtree/nbtpage.c:172 access/nbtree/nbtpage.c:368 -#: access/nbtree/nbtpage.c:455 +#: access/nbtree/nbtpage.c:174 access/nbtree/nbtpage.c:377 +#: access/nbtree/nbtpage.c:464 #, c-format msgid "version mismatch in index \"%s\": file version %d, code version %d" msgstr "" "несовпадение версии в индексе \"%s\": версия файла: %d, версия кода: %d" -#: access/nbtree/nbtpage.c:1187 +#: access/nbtree/nbtpage.c:1152 #, c-format msgid "index \"%s\" contains a half-dead internal page" msgstr "индекс \"%s\" содержит полумёртвую внутреннюю страницу" -#: access/nbtree/nbtpage.c:1189 +#: access/nbtree/nbtpage.c:1154 #, c-format msgid "" "This can be caused by an interrupted VACUUM in version 9.3 or older, before " @@ -677,7 +761,28 @@ msgstr "" msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "внутренний размер кортежа SP-GiST (%zu) превышает максимум (%zu)" -#: access/transam/multixact.c:990 +#: access/tablesample/bernoulli.c:152 access/tablesample/system.c:156 +#, c-format +msgid "sample percentage must be between 0 and 100" +msgstr "процент выборки должен задаваться числом от 0 до 100" + +#: access/transam/commit_ts.c:273 access/transam/commit_ts.c:359 +#, c-format +msgid "could not get commit timestamp data" +msgstr "не удалось получить отметку времени фиксации" + +#: access/transam/commit_ts.c:274 access/transam/commit_ts.c:360 +#: libpq/hba.c:1424 +#, c-format +msgid "Make sure the configuration parameter \"%s\" is set." +msgstr "Убедитесь, что в конфигурации установлен параметр \"%s\"." + +#: access/transam/commit_ts.c:281 +#, c-format +msgid "cannot retrieve commit timestamp for transaction %u" +msgstr "не удалось получить метку времени фиксации транзакции %u" + +#: access/transam/multixact.c:1013 #, c-format msgid "" "database is not accepting commands that generate new MultiXactIds to avoid " @@ -686,8 +791,8 @@ msgstr "" "база данных не принимает команды, создающие новые MultiXactId, во избежание " "потери данных из-за наложения в базе данных \"%s\"" -#: access/transam/multixact.c:992 access/transam/multixact.c:999 -#: access/transam/multixact.c:1014 access/transam/multixact.c:1023 +#: access/transam/multixact.c:1015 access/transam/multixact.c:1022 +#: access/transam/multixact.c:1046 access/transam/multixact.c:1055 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -697,7 +802,7 @@ msgstr "" "Возможно, вам также придётся зафиксировать или откатить старые\n" "подготовленные транзакции." -#: access/transam/multixact.c:997 +#: access/transam/multixact.c:1020 #, c-format msgid "" "database is not accepting commands that generate new MultiXactIds to avoid " @@ -706,7 +811,7 @@ msgstr "" "база данных не принимает команды, создающие новые MultiXactId, во избежание " "потери данных из-за наложения в базе данных с OID %u" -#: access/transam/multixact.c:1009 access/transam/multixact.c:2201 +#: access/transam/multixact.c:1041 access/transam/multixact.c:2305 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "" @@ -721,7 +826,7 @@ msgstr[2] "" "база данных \"%s\" должна быть очищена, прежде чем будут использованы " "оставшиеся MultiXactId (%u)" -#: access/transam/multixact.c:1018 access/transam/multixact.c:2210 +#: access/transam/multixact.c:1050 access/transam/multixact.c:2314 #, c-format msgid "" "database with OID %u must be vacuumed before %u more MultiXactId is used" @@ -737,26 +842,78 @@ msgstr[2] "" "база данных с OID %u должна быть очищена, прежде чем будут использованы " "оставшиеся MultiXactId (%u)" -#: access/transam/multixact.c:1169 +#: access/transam/multixact.c:1111 +#, c-format +msgid "multixact \"members\" limit exceeded" +msgstr "слишком много членов мультитранзакции" + +#: access/transam/multixact.c:1112 +#, c-format +msgid "" +"This command would create a multixact with %u members, but the remaining " +"space is only enough for %u member." +msgid_plural "" +"This command would create a multixact with %u members, but the remaining " +"space is only enough for %u members." +msgstr[0] "" +"Мультитранзакция, создаваемая этой командой, должна включать членов: %u, но " +"оставшегося места хватает только для %u." +msgstr[1] "" +"Мультитранзакция, создаваемая этой командой, должна включать членов: %u, но " +"оставшегося места хватает только для %u." +msgstr[2] "" +"Мультитранзакция, создаваемая этой командой, должна включать членов: %u, но " +"оставшегося места хватает только для %u." + +#: access/transam/multixact.c:1117 +#, 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." + +#: access/transam/multixact.c:1148 +#, c-format +msgid "" +"database with OID %u must be vacuumed before %d more multixact members are " +"used" +msgstr "" +"база данных с OID %u должна быть очищена, пока не использованы оставшиеся " +"члены мультитранзакций: %d" + +#: access/transam/multixact.c:1151 +#, 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." + +#: access/transam/multixact.c:1289 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u прекратил существование: видимо, произошло наложение" -#: access/transam/multixact.c:1177 +#: access/transam/multixact.c:1297 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %u ещё не был создан: видимо, произошло наложение" -#: access/transam/multixact.c:2166 +#: access/transam/multixact.c:2267 #, c-format msgid "MultiXactId wrap limit is %u, limited by database with OID %u" msgstr "" "предел наложения MultiXactId равен %u, источник ограничения - база данных с " "OID %u" -#: access/transam/multixact.c:2206 access/transam/multixact.c:2215 -#: access/transam/varsup.c:137 access/transam/varsup.c:144 -#: access/transam/varsup.c:374 access/transam/varsup.c:381 +#: access/transam/multixact.c:2310 access/transam/multixact.c:2319 +#: access/transam/varsup.c:146 access/transam/varsup.c:153 +#: access/transam/varsup.c:384 access/transam/varsup.c:391 #, c-format msgid "" "To avoid a database shutdown, execute a database-wide VACUUM in that " @@ -767,11 +924,80 @@ msgstr "" "Возможно, вам также придётся зафиксировать или откатить старые\n" "подготовленные транзакции." -#: access/transam/multixact.c:2799 +#: access/transam/multixact.c:2578 +#, 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:2601 +#, c-format +msgid "MultiXact member wraparound protections are now enabled" +msgstr "Защита от наложения мультитранзакций сейчас включена" + +#: access/transam/multixact.c:2603 +#, c-format +msgid "MultiXact member stop limit is now %u based on MultiXact %u" +msgstr "" +"Граница членов мультитранзакции сейчас: %u (при старейшей мультитранзакции " +"%u)" + +#: access/transam/multixact.c:2690 +#, c-format +msgid "oldest MultiXactId member is at offset %u" +msgstr "смещение членов старейшей мультитранзакции: %u" + +#: access/transam/multixact.c:2694 +#, c-format +msgid "oldest MultiXactId member offset unknown" +msgstr "смещение членов старейшей мультитранзакции неизвестно" + +#: access/transam/multixact.c:3043 +#, c-format +msgid "" +"oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" +msgstr "" +"старейшая мультитранзакция %u не найдена, новейшая мультитранзакция: %u, " +"усечение пропускается" + +#: access/transam/multixact.c:3275 #, c-format msgid "invalid MultiXactId: %u" msgstr "неверный MultiXactId: %u" +#: access/transam/parallel.c:574 +#, c-format +msgid "postmaster exited during a parallel transaction" +msgstr "postmaster завершился в процессе параллельной транзакции" + +#: access/transam/parallel.c:665 +#, c-format +msgid "lost connection to parallel worker" +msgstr "потеряно подключение к параллельному исполнителю" + +#: access/transam/parallel.c:835 +#, c-format +msgid "unable to map dynamic shared memory segment" +msgstr "не удалось отобразить динамический сегмент разделяемой памяти" + +#: access/transam/parallel.c:840 +#, c-format +msgid "bad magic number in dynamic shared memory segment" +msgstr "неверное магическое число в динамическом сегменте разделяемой памяти" + +#: access/transam/parallel.c:853 +#, c-format +msgid "too many parallel workers already attached" +msgstr "уже подключено слишком много параллельных исполнителей" + +#: access/transam/parallel.c:993 +#, c-format +msgid "parallel worker, pid %d" +msgstr "параллельный исполнитель, pid %d" + #: access/transam/slru.c:651 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" @@ -792,17 +1018,17 @@ msgstr "Не удалось открыть файл \"%s\": %m." #: access/transam/slru.c:888 #, c-format msgid "Could not seek in file \"%s\" to offset %u: %m." -msgstr "не удалось переместиться в файле \"%s\" к смещению %u: %m" +msgstr "Не удалось переместиться в файле \"%s\" к смещению %u: %m." #: access/transam/slru.c:895 #, c-format msgid "Could not read from file \"%s\" at offset %u: %m." -msgstr "не удалось прочитать файл \"%s\" (по смещению %u): %m" +msgstr "Не удалось прочитать файл \"%s\" (по смещению %u): %m." #: access/transam/slru.c:902 #, c-format msgid "Could not write to file \"%s\" at offset %u: %m." -msgstr "не удалось записать в файл \"%s\" (по смещению %u): %m" +msgstr "Не удалось записать в файл \"%s\" (по смещению %u): %m." #: access/transam/slru.c:909 #, c-format @@ -812,7 +1038,7 @@ msgstr "Не удалось синхронизировать с ФС файл \" #: access/transam/slru.c:916 #, c-format msgid "Could not close file \"%s\": %m." -msgstr "не удалось закрыть файл \"%s\": %m" +msgstr "Не удалось закрыть файл \"%s\": %m." #: access/transam/slru.c:1171 #, c-format @@ -827,12 +1053,12 @@ msgstr "удаляется файл \"%s\"" #: access/transam/timeline.c:148 access/transam/timeline.c:153 #, c-format msgid "syntax error in history file: %s" -msgstr "ошибка синтаксиса в файле истории: %s" +msgstr "синтаксическая ошибка в файле истории: %s" #: access/transam/timeline.c:149 #, c-format msgid "Expected a numeric timeline ID." -msgstr "Ожидается числовое значение ID линии времени." +msgstr "Ожидается числовой идентификатор линии времени." #: access/transam/timeline.c:154 #, c-format @@ -847,7 +1073,7 @@ msgstr "неверные данные в файле истории: %s" #: access/transam/timeline.c:159 #, c-format msgid "Timeline IDs must be in increasing sequence." -msgstr "ID линии времени должны идти в порядке возрастания." +msgstr "Идентификаторы линий времени должны возрастать." #: access/transam/timeline.c:179 #, c-format @@ -858,22 +1084,24 @@ msgstr "неверные данные в файле истории \"%s\"" #, c-format msgid "Timeline IDs must be less than child timeline's ID." msgstr "" -"ID линии времени должны быть меньше, чем ID линии времени, ответвившейся от " -"неё." +"Идентификаторы линий времени должны быть меньше идентификатора линии-потомка." -#: access/transam/timeline.c:346 access/transam/xlog.c:3289 -#: access/transam/xlog.c:10088 access/transam/xlog.c:10101 -#: access/transam/xlog.c:10469 access/transam/xlog.c:10512 -#: access/transam/xlogfuncs.c:468 access/transam/xlogfuncs.c:487 -#: replication/logical/reorderbuffer.c:2820 replication/walsender.c:482 -#: storage/file/copydir.c:176 utils/adt/genfile.c:139 +#: access/transam/timeline.c:346 access/transam/xlog.c:3119 +#: access/transam/xlog.c:10303 access/transam/xlog.c:10316 +#: access/transam/xlog.c:10679 access/transam/xlog.c:10722 +#: access/transam/xlog.c:10761 access/transam/xlog.c:10804 +#: access/transam/xlogfuncs.c:478 access/transam/xlogfuncs.c:497 +#: commands/extension.c:3047 replication/logical/origin.c:680 +#: replication/logical/origin.c:710 replication/logical/reorderbuffer.c:2887 +#: replication/walsender.c:483 storage/file/copydir.c:176 +#: utils/adt/genfile.c:151 #, c-format msgid "could not read file \"%s\": %m" msgstr "не удалось прочитать файл \"%s\": %m" #: access/transam/timeline.c:412 access/transam/timeline.c:502 -#: access/transam/xlog.c:3191 access/transam/xlog.c:3320 -#: access/transam/xlogfuncs.c:493 commands/copy.c:1529 +#: access/transam/xlog.c:2992 access/transam/xlog.c:3153 +#: access/transam/xlogfuncs.c:503 commands/copy.c:1620 #: storage/file/copydir.c:201 #, c-format msgid "could not close file \"%s\": %m" @@ -885,12 +1113,13 @@ msgid "could not link file \"%s\" to \"%s\": %m" msgstr "для файла \"%s\" не удалось создать ссылку \"%s\": %m" #: access/transam/timeline.c:436 access/transam/timeline.c:526 -#: access/transam/xlog.c:5403 access/transam/xlog.c:6503 -#: access/transam/xlogarchive.c:458 access/transam/xlogarchive.c:475 -#: access/transam/xlogarchive.c:582 postmaster/pgarch.c:759 -#: replication/logical/snapbuild.c:1606 replication/slot.c:469 -#: replication/slot.c:925 replication/slot.c:1037 utils/misc/guc.c:6819 -#: utils/time/snapmgr.c:999 +#: access/transam/xlog.c:5274 access/transam/xlog.c:6463 +#: access/transam/xlog.c:6480 access/transam/xlog.c:7262 +#: access/transam/xlogarchive.c:458 access/transam/xlogarchive.c:476 +#: access/transam/xlogarchive.c:586 postmaster/pgarch.c:734 +#: replication/logical/origin.c:620 replication/logical/snapbuild.c:1606 +#: replication/slot.c:470 replication/slot.c:926 replication/slot.c:1038 +#: utils/misc/guc.c:6977 utils/time/snapmgr.c:1094 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" @@ -900,59 +1129,59 @@ msgstr "не удалось переименовать файл \"%s\" в \"%s\" msgid "requested timeline %u is not in this server's history" msgstr "в истории сервера нет запрошенной линии времени %u" -#: access/transam/twophase.c:330 +#: access/transam/twophase.c:328 #, c-format msgid "transaction identifier \"%s\" is too long" msgstr "идентификатор транзакции \"%s\" слишком длинный" -#: access/transam/twophase.c:337 +#: access/transam/twophase.c:335 #, c-format msgid "prepared transactions are disabled" msgstr "подготовленные транзакции отключены" -#: access/transam/twophase.c:338 +#: access/transam/twophase.c:336 #, c-format msgid "Set max_prepared_transactions to a nonzero value." msgstr "Установите ненулевое значение параметра max_prepared_transactions." -#: access/transam/twophase.c:357 +#: access/transam/twophase.c:355 #, c-format msgid "transaction identifier \"%s\" is already in use" msgstr "идентификатор транзакции \"%s\" уже используется" -#: access/transam/twophase.c:366 +#: access/transam/twophase.c:364 #, c-format msgid "maximum number of prepared transactions reached" msgstr "достигнут предел числа подготовленных транзакций" -#: access/transam/twophase.c:367 +#: access/transam/twophase.c:365 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "Увеличьте параметр max_prepared_transactions (текущее значение %d)." -#: access/transam/twophase.c:505 +#: access/transam/twophase.c:502 #, c-format msgid "prepared transaction with identifier \"%s\" is busy" msgstr "подготовленная транзакция с идентификатором \"%s\" занята" -#: access/transam/twophase.c:511 +#: access/transam/twophase.c:508 #, c-format msgid "permission denied to finish prepared transaction" msgstr "нет доступа для завершения подготовленной транзакции " -#: access/transam/twophase.c:512 +#: access/transam/twophase.c:509 #, c-format msgid "Must be superuser or the user that prepared the transaction." msgstr "" "Это разрешено только суперпользователю и пользователю, подготовившему " "транзакцию." -#: access/transam/twophase.c:523 +#: access/transam/twophase.c:520 #, c-format msgid "prepared transaction belongs to another database" msgstr "подготовленная транзакция относится к другой базе данных" -#: access/transam/twophase.c:524 +#: access/transam/twophase.c:521 #, c-format msgid "" "Connect to the database where the transaction was prepared to finish it." @@ -961,106 +1190,106 @@ msgstr "" "подготовлена." # [SM]: TO REVIEW -#: access/transam/twophase.c:539 +#: access/transam/twophase.c:536 #, c-format msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "подготовленной транзакции с идентификатором \"%s\" нет" -#: access/transam/twophase.c:1042 +#: access/transam/twophase.c:1046 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "превышен предельный размер файла состояния 2PC" -#: access/transam/twophase.c:1055 +#: access/transam/twophase.c:1059 #, c-format msgid "could not create two-phase state file \"%s\": %m" msgstr "не удалось создать файл состояния 2PC \"%s\": %m" -#: access/transam/twophase.c:1069 access/transam/twophase.c:1086 -#: access/transam/twophase.c:1135 access/transam/twophase.c:1564 -#: access/transam/twophase.c:1571 +#: access/transam/twophase.c:1073 access/transam/twophase.c:1090 +#: access/transam/twophase.c:1143 access/transam/twophase.c:1573 +#: access/transam/twophase.c:1580 #, c-format msgid "could not write two-phase state file: %m" msgstr "не удалось записать в файл состояния 2PC: %m" -#: access/transam/twophase.c:1095 +#: access/transam/twophase.c:1099 #, c-format msgid "could not seek in two-phase state file: %m" msgstr "не удалось переместиться в файле состояния 2PC: %m" -#: access/transam/twophase.c:1141 access/transam/twophase.c:1589 +#: access/transam/twophase.c:1149 access/transam/twophase.c:1598 #, c-format msgid "could not close two-phase state file: %m" msgstr "не удалось закрыть файл состояния 2PC: %m" -#: access/transam/twophase.c:1228 access/transam/twophase.c:1670 +#: access/transam/twophase.c:1237 access/transam/twophase.c:1679 #, c-format msgid "could not open two-phase state file \"%s\": %m" msgstr "не удалось открыть файл состояния 2PC \"%s\": %m" -#: access/transam/twophase.c:1245 +#: access/transam/twophase.c:1254 #, c-format msgid "could not stat two-phase state file \"%s\": %m" msgstr "не удалось получить информацию о файле состояния 2PC \"%s\": %m" -#: access/transam/twophase.c:1277 +#: access/transam/twophase.c:1286 #, c-format msgid "could not read two-phase state file \"%s\": %m" msgstr "не удалось прочитать файл состояния 2PC \"%s\": %m" -#: access/transam/twophase.c:1373 +#: access/transam/twophase.c:1382 #, c-format msgid "two-phase state file for transaction %u is corrupt" msgstr "в файле состояния 2PC испорчена информация о транзакции %u" -#: access/transam/twophase.c:1526 +#: access/transam/twophase.c:1535 #, c-format msgid "could not remove two-phase state file \"%s\": %m" msgstr "не удалось стереть файл состояния 2PC \"%s\": %m" -#: access/transam/twophase.c:1555 +#: access/transam/twophase.c:1564 #, c-format msgid "could not recreate two-phase state file \"%s\": %m" msgstr "не удалось пересоздать файл состояния 2PC \"%s\": %m" -#: access/transam/twophase.c:1583 +#: access/transam/twophase.c:1592 #, c-format msgid "could not fsync two-phase state file: %m" msgstr "не удалось синхронизировать с ФС файл состояния 2PC: %m" -#: access/transam/twophase.c:1679 +#: access/transam/twophase.c:1688 #, c-format msgid "could not fsync two-phase state file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл состояния 2PC \"%s\": %m" -#: access/transam/twophase.c:1686 +#: access/transam/twophase.c:1695 #, c-format msgid "could not close two-phase state file \"%s\": %m" msgstr "не удалось закрыть файл состояния 2PC \"%s\": %m" -#: access/transam/twophase.c:1751 +#: access/transam/twophase.c:1760 #, c-format msgid "removing future two-phase state file \"%s\"" msgstr "удаление будущего файла состояния 2PC \"%s\"" -#: access/transam/twophase.c:1767 access/transam/twophase.c:1778 -#: access/transam/twophase.c:1897 access/transam/twophase.c:1908 -#: access/transam/twophase.c:1981 +#: access/transam/twophase.c:1776 access/transam/twophase.c:1787 +#: access/transam/twophase.c:1906 access/transam/twophase.c:1917 +#: access/transam/twophase.c:1990 #, c-format msgid "removing corrupt two-phase state file \"%s\"" msgstr "удаление испорченного файла состояния 2PC \"%s\"" -#: access/transam/twophase.c:1886 access/transam/twophase.c:1970 +#: access/transam/twophase.c:1895 access/transam/twophase.c:1979 #, c-format msgid "removing stale two-phase state file \"%s\"" msgstr "удаление устаревшего файла состояния 2PC \"%s\"" -#: access/transam/twophase.c:1988 +#: access/transam/twophase.c:1997 #, c-format msgid "recovering prepared transaction %u" msgstr "восстановление подготовленной транзакции %u" -#: access/transam/varsup.c:115 +#: access/transam/varsup.c:124 #, c-format msgid "" "database is not accepting commands to avoid wraparound data loss in database " @@ -1069,7 +1298,7 @@ msgstr "" "база данных не принимает команды во избежание потери данных из-за наложения " "в базе данных \"%s\"" -#: access/transam/varsup.c:117 access/transam/varsup.c:124 +#: access/transam/varsup.c:126 access/transam/varsup.c:133 #, c-format msgid "" "Stop the postmaster and vacuum that database in single-user mode.\n" @@ -1080,7 +1309,7 @@ msgstr "" "Возможно, вам также придётся зафиксировать или откатить старые\n" "подготовленные транзакции." -#: access/transam/varsup.c:122 +#: access/transam/varsup.c:131 #, c-format msgid "" "database is not accepting commands to avoid wraparound data loss in database " @@ -1089,60 +1318,60 @@ msgstr "" "база данных не принимает команды во избежание потери данных из-за наложения " "в базе данных с OID %u" -#: access/transam/varsup.c:134 access/transam/varsup.c:371 +#: access/transam/varsup.c:143 access/transam/varsup.c:381 #, c-format msgid "database \"%s\" must be vacuumed within %u transactions" msgstr "" "база данных \"%s\" должна быть очищена (предельное число транзакций: %u)" -#: access/transam/varsup.c:141 access/transam/varsup.c:378 +#: access/transam/varsup.c:150 access/transam/varsup.c:388 #, c-format msgid "database with OID %u must be vacuumed within %u transactions" msgstr "" "база данных с OID %u должна быть очищена (предельное число транзакций: %u)" -#: access/transam/varsup.c:336 +#: access/transam/varsup.c:346 #, c-format msgid "transaction ID wrap limit is %u, limited by database with OID %u" msgstr "" "предел наложения ID транзакций равен %u, источник ограничения - база данных " "с OID %u" -#: access/transam/xact.c:814 +#: access/transam/xact.c:943 #, c-format msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "в одной транзакции не может быть больше 2^32-2 команд" -#: access/transam/xact.c:1375 +#: access/transam/xact.c:1441 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "превышен предел числа зафиксированных подтранзакций (%d)" -#: access/transam/xact.c:2156 +#: access/transam/xact.c:2235 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary tables" msgstr "" "выполнить PREPARE для транзакции, оперирующей с временными таблицами, нельзя" -#: access/transam/xact.c:2166 +#: access/transam/xact.c:2245 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "нельзя выполнить PREPARE для транзакции, снимки которой экспортированы" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3005 +#: access/transam/xact.c:3123 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s не может выполняться внутри блока транзакции" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3015 +#: access/transam/xact.c:3133 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s не может выполняться внутри подтранзакции" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3025 +#: access/transam/xact.c:3143 #, c-format msgid "%s cannot be executed from a function or multi-command string" msgstr "" @@ -1150,140 +1379,176 @@ msgstr "" "команд" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3096 +#: access/transam/xact.c:3214 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s может выполняться только внутри блоков транзакций" -#: access/transam/xact.c:3279 +#: access/transam/xact.c:3398 #, c-format msgid "there is already a transaction in progress" msgstr "транзакция уже выполняется" -#: access/transam/xact.c:3447 access/transam/xact.c:3540 +#: access/transam/xact.c:3566 access/transam/xact.c:3669 #, c-format msgid "there is no transaction in progress" msgstr "нет незавершённой транзакции" -#: access/transam/xact.c:3636 access/transam/xact.c:3687 -#: access/transam/xact.c:3693 access/transam/xact.c:3737 -#: access/transam/xact.c:3786 access/transam/xact.c:3792 +#: access/transam/xact.c:3577 +#, c-format +msgid "cannot commit during a parallel operation" +msgstr "фиксировать транзакции во время параллельных операций нельзя" + +#: access/transam/xact.c:3680 +#, c-format +msgid "cannot abort during a parallel operation" +msgstr "прерывание во время параллельных операций невозможно" + +#: access/transam/xact.c:3722 +#, c-format +msgid "cannot define savepoints during a parallel operation" +msgstr "определять точки сохранения во время параллельных операций нельзя" + +#: access/transam/xact.c:3789 +#, c-format +msgid "cannot release savepoints during a parallel operation" +msgstr "высвобождать точки сохранения во время параллельных операций нельзя" + +#: access/transam/xact.c:3800 access/transam/xact.c:3852 +#: access/transam/xact.c:3858 access/transam/xact.c:3914 +#: access/transam/xact.c:3964 access/transam/xact.c:3970 #, c-format msgid "no such savepoint" msgstr "нет такой точки сохранения" -#: access/transam/xact.c:4469 +#: access/transam/xact.c:3902 +#, c-format +msgid "cannot rollback to savepoints during a parallel operation" +msgstr "откатиться к точке сохранения во время параллельных операций нельзя" + +#: access/transam/xact.c:4030 +#, c-format +msgid "cannot start subtransactions during a parallel operation" +msgstr "запускать подтранзакции во время параллельных операций нельзя" + +#: access/transam/xact.c:4097 +#, c-format +msgid "cannot commit subtransactions during a parallel operation" +msgstr "фиксировать подтранзакции во время параллельных операций нельзя" + +#: access/transam/xact.c:4702 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "в одной транзакции не может быть больше 2^32-1 подтранзакций" -#: access/transam/xlog.c:2416 +#: access/transam/xlog.c:2245 #, c-format msgid "could not seek in log file %s to offset %u: %m" msgstr "не удалось переместиться в файле журнала %s к смещению %u: %m" -#: access/transam/xlog.c:2436 +#: access/transam/xlog.c:2265 #, 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:2712 +#: access/transam/xlog.c:2528 #, c-format msgid "updated min recovery point to %X/%X on timeline %u" msgstr "минимальная точка восстановления изменена на %X/%X на линии времени %u" -#: access/transam/xlog.c:3292 +#: access/transam/xlog.c:3123 #, c-format msgid "not enough data in file \"%s\"" msgstr "недостаточно данных в файле\"%s\"" -#: access/transam/xlog.c:3411 +#: access/transam/xlog.c:3242 #, c-format msgid "could not link file \"%s\" to \"%s\" (initialization of log file): %m" msgstr "" "для файла \"%s\" не удалось создать ссылку \"%s\" (при инициализации файла " "журнала): %m" -#: access/transam/xlog.c:3423 +#: access/transam/xlog.c:3254 #, c-format msgid "could not rename file \"%s\" to \"%s\" (initialization of log file): %m" msgstr "" "не удалось переименовать файл \"%s\" в \"%s\" (при инициализации файла " "журнала): %m" -#: access/transam/xlog.c:3451 +#: access/transam/xlog.c:3282 #, c-format msgid "could not open transaction log file \"%s\": %m" msgstr "не удалось открыть файл журнала транзакций \"%s\": %m" -#: access/transam/xlog.c:3640 +#: access/transam/xlog.c:3471 access/transam/xlog.c:5244 #, c-format msgid "could not close log file %s: %m" msgstr "не удалось закрыть файл журнала \"%s\": %m" -#: access/transam/xlog.c:3699 replication/logical/logicalfuncs.c:147 -#: replication/walsender.c:2077 +#: access/transam/xlog.c:3528 replication/logical/logicalfuncs.c:149 +#: replication/walsender.c:2075 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "запрошенный сегмент WAL %s уже удалён" -#: access/transam/xlog.c:3777 access/transam/xlog.c:3954 +#: access/transam/xlog.c:3588 access/transam/xlog.c:3663 +#: access/transam/xlog.c:3861 #, c-format msgid "could not open transaction log directory \"%s\": %m" msgstr "не удалось открыть каталог журнала транзакций \"%s\": %m" -#: access/transam/xlog.c:3825 +#: access/transam/xlog.c:3744 #, c-format msgid "recycled transaction log file \"%s\"" msgstr "файл журнала транзакций \"%s\" используется повторно" -#: access/transam/xlog.c:3841 +#: access/transam/xlog.c:3756 #, c-format msgid "removing transaction log file \"%s\"" msgstr "файл журнала транзакций \"%s\" удаляется" -#: access/transam/xlog.c:3864 +#: access/transam/xlog.c:3776 #, c-format msgid "could not rename old transaction log file \"%s\": %m" msgstr "не удалось переименовать старый файл журнала транзакций \"%s\": %m" -#: access/transam/xlog.c:3876 +#: access/transam/xlog.c:3788 #, c-format msgid "could not remove old transaction log file \"%s\": %m" msgstr "не удалось стереть старый файл журнала транзакций \"%s\": %m" -#: access/transam/xlog.c:3914 access/transam/xlog.c:3924 +#: access/transam/xlog.c:3821 access/transam/xlog.c:3831 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "требуемый каталог WAL \"%s\" не существует" -#: access/transam/xlog.c:3930 +#: access/transam/xlog.c:3837 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "создаётся отсутствующий каталог WAL \"%s\"" -#: access/transam/xlog.c:3933 +#: access/transam/xlog.c:3840 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "не удалось создать отсутствующий каталог \"%s\": %m" -#: access/transam/xlog.c:3967 +#: access/transam/xlog.c:3871 #, c-format msgid "removing transaction log backup history file \"%s\"" msgstr "удаляется файл истории копирования журнала: \"%s\"" -#: access/transam/xlog.c:4159 +#: access/transam/xlog.c:3952 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "неожиданный ID линии времени %u в сегменте журнала %s, смещение %u" -#: access/transam/xlog.c:4281 +#: access/transam/xlog.c:4074 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "" "новая линия времени %u не является ответвлением линии времени системы БД %u" -#: access/transam/xlog.c:4295 +#: access/transam/xlog.c:4088 #, c-format msgid "" "new timeline %u forked off current database system timeline %u before " @@ -1292,56 +1557,56 @@ msgstr "" "новая линия времени %u ответвилась от текущей линии времени базы данных %u " "до текущей точки восстановления %X/%X" -#: access/transam/xlog.c:4314 +#: access/transam/xlog.c:4107 #, c-format msgid "new target timeline is %u" msgstr "новая целевая линия времени %u" -#: access/transam/xlog.c:4394 +#: access/transam/xlog.c:4187 #, c-format msgid "could not create control file \"%s\": %m" msgstr "не удалось создать файл \"%s\": %m" -#: access/transam/xlog.c:4405 access/transam/xlog.c:4641 +#: access/transam/xlog.c:4198 access/transam/xlog.c:4434 #, c-format msgid "could not write to control file: %m" msgstr "не удалось записать в файл pg_control: %m" -#: access/transam/xlog.c:4411 access/transam/xlog.c:4647 +#: access/transam/xlog.c:4204 access/transam/xlog.c:4440 #, c-format msgid "could not fsync control file: %m" msgstr "не удалось синхронизировать с ФС файл pg_control: %m" -#: access/transam/xlog.c:4416 access/transam/xlog.c:4652 +#: access/transam/xlog.c:4209 access/transam/xlog.c:4445 #, c-format msgid "could not close control file: %m" msgstr "не удалось закрыть файл pg_control: %m" -#: access/transam/xlog.c:4434 access/transam/xlog.c:4630 +#: access/transam/xlog.c:4227 access/transam/xlog.c:4423 #, c-format msgid "could not open control file \"%s\": %m" msgstr "не удалось открыть файл \"%s\": %m" -#: access/transam/xlog.c:4440 +#: access/transam/xlog.c:4233 #, c-format msgid "could not read from control file: %m" msgstr "не удалось прочитать файл pg_control: %m" -#: access/transam/xlog.c:4453 access/transam/xlog.c:4462 -#: access/transam/xlog.c:4486 access/transam/xlog.c:4493 -#: access/transam/xlog.c:4500 access/transam/xlog.c:4505 -#: access/transam/xlog.c:4512 access/transam/xlog.c:4519 -#: access/transam/xlog.c:4526 access/transam/xlog.c:4533 -#: access/transam/xlog.c:4540 access/transam/xlog.c:4547 -#: access/transam/xlog.c:4554 access/transam/xlog.c:4563 -#: access/transam/xlog.c:4570 access/transam/xlog.c:4579 -#: access/transam/xlog.c:4586 access/transam/xlog.c:4595 -#: access/transam/xlog.c:4602 utils/init/miscinit.c:1139 +#: access/transam/xlog.c:4246 access/transam/xlog.c:4255 +#: access/transam/xlog.c:4279 access/transam/xlog.c:4286 +#: access/transam/xlog.c:4293 access/transam/xlog.c:4298 +#: access/transam/xlog.c:4305 access/transam/xlog.c:4312 +#: access/transam/xlog.c:4319 access/transam/xlog.c:4326 +#: access/transam/xlog.c:4333 access/transam/xlog.c:4340 +#: access/transam/xlog.c:4347 access/transam/xlog.c:4356 +#: access/transam/xlog.c:4363 access/transam/xlog.c:4372 +#: access/transam/xlog.c:4379 access/transam/xlog.c:4388 +#: access/transam/xlog.c:4395 utils/init/miscinit.c:1261 #, c-format msgid "database files are incompatible with server" msgstr "файлы базы данных не совместимы с сервером" -#: access/transam/xlog.c:4454 +#: access/transam/xlog.c:4247 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), " @@ -1350,7 +1615,7 @@ msgstr "" "Кластер баз данных был инициализирован с PG_CONTROL_VERSION %d (0x%08x), но " "сервер скомпилирован с PG_CONTROL_VERSION %d (0x%08x)." -#: access/transam/xlog.c:4458 +#: access/transam/xlog.c:4251 #, c-format msgid "" "This could be a problem of mismatched byte ordering. It looks like you need " @@ -1359,7 +1624,7 @@ msgstr "" "Возможно, проблема вызвана разным порядком байт. Кажется, вам надо выполнить " "initdb." -#: access/transam/xlog.c:4463 +#: access/transam/xlog.c:4256 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d, but the " @@ -1368,18 +1633,18 @@ msgstr "" "Кластер баз данных был инициализирован с PG_CONTROL_VERSION %d, но сервер " "скомпилирован с PG_CONTROL_VERSION %d." -#: access/transam/xlog.c:4466 access/transam/xlog.c:4490 -#: access/transam/xlog.c:4497 access/transam/xlog.c:4502 +#: access/transam/xlog.c:4259 access/transam/xlog.c:4283 +#: access/transam/xlog.c:4290 access/transam/xlog.c:4295 #, c-format msgid "It looks like you need to initdb." msgstr "Кажется, вам надо выполнить initdb." -#: access/transam/xlog.c:4477 +#: access/transam/xlog.c:4270 #, c-format msgid "incorrect checksum in control file" msgstr "ошибка контрольной суммы в файле pg_control" -#: access/transam/xlog.c:4487 +#: access/transam/xlog.c:4280 #, c-format msgid "" "The database cluster was initialized with CATALOG_VERSION_NO %d, but the " @@ -1388,7 +1653,7 @@ msgstr "" "Кластер баз данных был инициализирован с CATALOG_VERSION_NO %d, но сервер " "скомпилирован с CATALOG_VERSION_NO %d." -#: access/transam/xlog.c:4494 +#: access/transam/xlog.c:4287 #, c-format msgid "" "The database cluster was initialized with MAXALIGN %d, but the server was " @@ -1397,7 +1662,7 @@ msgstr "" "Кластер баз данных был инициализирован с MAXALIGN %d, но сервер " "скомпилирован с MAXALIGN %d." -#: access/transam/xlog.c:4501 +#: access/transam/xlog.c:4294 #, c-format msgid "" "The database cluster appears to use a different floating-point number format " @@ -1406,7 +1671,7 @@ msgstr "" "Кажется, в кластере баз данных и в программе сервера используются разные " "форматы чисел с плавающей точкой." -#: access/transam/xlog.c:4506 +#: access/transam/xlog.c:4299 #, c-format msgid "" "The database cluster was initialized with BLCKSZ %d, but the server was " @@ -1415,18 +1680,18 @@ msgstr "" "Кластер баз данных был инициализирован с BLCKSZ %d, но сервер скомпилирован " "с BLCKSZ %d." -#: access/transam/xlog.c:4509 access/transam/xlog.c:4516 -#: access/transam/xlog.c:4523 access/transam/xlog.c:4530 -#: access/transam/xlog.c:4537 access/transam/xlog.c:4544 -#: access/transam/xlog.c:4551 access/transam/xlog.c:4558 -#: access/transam/xlog.c:4566 access/transam/xlog.c:4573 -#: access/transam/xlog.c:4582 access/transam/xlog.c:4589 -#: access/transam/xlog.c:4598 access/transam/xlog.c:4605 +#: access/transam/xlog.c:4302 access/transam/xlog.c:4309 +#: access/transam/xlog.c:4316 access/transam/xlog.c:4323 +#: access/transam/xlog.c:4330 access/transam/xlog.c:4337 +#: access/transam/xlog.c:4344 access/transam/xlog.c:4351 +#: access/transam/xlog.c:4359 access/transam/xlog.c:4366 +#: access/transam/xlog.c:4375 access/transam/xlog.c:4382 +#: access/transam/xlog.c:4391 access/transam/xlog.c:4398 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Кажется, вам надо перекомпилировать сервер или выполнить initdb." -#: access/transam/xlog.c:4513 +#: access/transam/xlog.c:4306 #, c-format msgid "" "The database cluster was initialized with RELSEG_SIZE %d, but the server was " @@ -1435,7 +1700,7 @@ msgstr "" "Кластер баз данных был инициализирован с RELSEG_SIZE %d, но сервер " "скомпилирован с RELSEG_SIZE %d." -#: access/transam/xlog.c:4520 +#: access/transam/xlog.c:4313 #, c-format msgid "" "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was " @@ -1444,7 +1709,7 @@ msgstr "" "Кластер баз данных был инициализирован с XLOG_BLCKSZ %d, но сервер " "скомпилирован с XLOG_BLCKSZ %d." -#: access/transam/xlog.c:4527 +#: access/transam/xlog.c:4320 #, c-format msgid "" "The database cluster was initialized with XLOG_SEG_SIZE %d, but the server " @@ -1453,7 +1718,7 @@ msgstr "" "Кластер баз данных был инициализирован с XLOG_SEG_SIZE %d, но сервер " "скомпилирован с XLOG_SEG_SIZE %d." -#: access/transam/xlog.c:4534 +#: access/transam/xlog.c:4327 #, c-format msgid "" "The database cluster was initialized with NAMEDATALEN %d, but the server was " @@ -1462,7 +1727,7 @@ msgstr "" "Кластер баз данных был инициализирован с NAMEDATALEN %d, но сервер " "скомпилирован с NAMEDATALEN %d." -#: access/transam/xlog.c:4541 +#: access/transam/xlog.c:4334 #, c-format msgid "" "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server " @@ -1471,7 +1736,7 @@ msgstr "" "Кластер баз данных был инициализирован с INDEX_MAX_KEYS %d, но сервер " "скомпилирован с INDEX_MAX_KEYS %d." -#: access/transam/xlog.c:4548 +#: access/transam/xlog.c:4341 #, c-format msgid "" "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the " @@ -1480,7 +1745,7 @@ msgstr "" "Кластер баз данных был инициализирован с TOAST_MAX_CHUNK_SIZE %d, но сервер " "скомпилирован с TOAST_MAX_CHUNK_SIZE %d." -#: access/transam/xlog.c:4555 +#: access/transam/xlog.c:4348 #, c-format msgid "" "The database cluster was initialized with LOBLKSIZE %d, but the server was " @@ -1489,7 +1754,7 @@ msgstr "" "Кластер баз данных был инициализирован с LOBLKSIZE %d, но сервер " "скомпилирован с LOBLKSIZE %d." -#: access/transam/xlog.c:4564 +#: access/transam/xlog.c:4357 #, c-format msgid "" "The database cluster was initialized without HAVE_INT64_TIMESTAMP but the " @@ -1498,7 +1763,7 @@ msgstr "" "Кластер баз данных был инициализирован без HAVE_INT64_TIMESTAMP, но сервер " "скомпилирован с HAVE_INT64_TIMESTAMP." -#: access/transam/xlog.c:4571 +#: access/transam/xlog.c:4364 #, c-format msgid "" "The database cluster was initialized with HAVE_INT64_TIMESTAMP but the " @@ -1507,7 +1772,7 @@ msgstr "" "Кластер баз данных был инициализирован с HAVE_INT64_TIMESTAMP, но сервер " "скомпилирован без HAVE_INT64_TIMESTAMP." -#: access/transam/xlog.c:4580 +#: access/transam/xlog.c:4373 #, c-format msgid "" "The database cluster was initialized without USE_FLOAT4_BYVAL but the server " @@ -1516,7 +1781,7 @@ msgstr "" "Кластер баз данных был инициализирован без USE_FLOAT4_BYVAL, но сервер " "скомпилирован с USE_FLOAT4_BYVAL." -#: access/transam/xlog.c:4587 +#: access/transam/xlog.c:4380 #, c-format msgid "" "The database cluster was initialized with USE_FLOAT4_BYVAL but the server " @@ -1525,7 +1790,7 @@ msgstr "" "Кластер баз данных был инициализирован с USE_FLOAT4_BYVAL, но сервер " "скомпилирован без USE_FLOAT4_BYVAL." -#: access/transam/xlog.c:4596 +#: access/transam/xlog.c:4389 #, c-format msgid "" "The database cluster was initialized without USE_FLOAT8_BYVAL but the server " @@ -1534,7 +1799,7 @@ msgstr "" "Кластер баз данных был инициализирован без USE_FLOAT8_BYVAL, но сервер " "скомпилирован с USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4603 +#: access/transam/xlog.c:4396 #, c-format msgid "" "The database cluster was initialized with USE_FLOAT8_BYVAL but the server " @@ -1543,82 +1808,91 @@ msgstr "" "Кластер баз данных был инициализирован с USE_FLOAT8_BYVAL, но сервер был " "скомпилирован без USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:5004 +#: access/transam/xlog.c:4822 #, c-format msgid "could not write bootstrap transaction log file: %m" msgstr "не удалось записать начальный файл журнала транзакций: %m" -#: access/transam/xlog.c:5010 +#: access/transam/xlog.c:4828 #, c-format msgid "could not fsync bootstrap transaction log file: %m" msgstr "не удалось синхронизировать с ФС начальный файл журнала транзакций: %m" -#: access/transam/xlog.c:5015 +#: access/transam/xlog.c:4833 #, c-format msgid "could not close bootstrap transaction log file: %m" msgstr "не удалось закрыть начальный файл журнала транзакций: %m" -#: access/transam/xlog.c:5086 +#: access/transam/xlog.c:4908 #, c-format msgid "could not open recovery command file \"%s\": %m" msgstr "не удалось открыть файл команд восстановления \"%s\": %m" -#: access/transam/xlog.c:5126 access/transam/xlog.c:5217 -#: access/transam/xlog.c:5228 commands/extension.c:527 -#: commands/extension.c:535 utils/misc/guc.c:5355 +#: access/transam/xlog.c:4954 #, c-format -msgid "parameter \"%s\" requires a Boolean value" -msgstr "параметр \"%s\" требует логическое значение" +msgid "invalid value for recovery parameter \"%s\"" +msgstr "неверное значение для параметра восстановления \"%s\"" -#: access/transam/xlog.c:5142 +#: access/transam/xlog.c:4956 +#, c-format +msgid "The allowed values are \"pause\", \"promote\" and \"shutdown\"." +msgstr "Допускаются только значения: \"pause\", \"promote\" и \"shutdown\"." + +#: access/transam/xlog.c:4975 #, c-format msgid "recovery_target_timeline is not a valid number: \"%s\"" msgstr "recovery_target_timeline не является допустимым числом: \"%s\"" -#: access/transam/xlog.c:5158 +#: access/transam/xlog.c:4991 #, c-format msgid "recovery_target_xid is not a valid number: \"%s\"" msgstr "recovery_target_xid не является допустимым числом: \"%s\"" -#: access/transam/xlog.c:5189 +#: access/transam/xlog.c:5022 #, c-format msgid "recovery_target_name is too long (maximum %d characters)" msgstr "длина recovery_target_name превышает предел (%d)" -#: access/transam/xlog.c:5203 +#: access/transam/xlog.c:5036 #, c-format msgid "invalid value for recovery parameter \"recovery_target\"" msgstr "неверное значение параметра \"recovery_target\"" -#: access/transam/xlog.c:5204 +#: access/transam/xlog.c:5037 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Единственное допустимое значение: \"immediate\"." -#: access/transam/xlog.c:5263 +#: access/transam/xlog.c:5050 access/transam/xlog.c:5061 +#: commands/extension.c:531 commands/extension.c:539 utils/misc/guc.c:5473 +#, c-format +msgid "parameter \"%s\" requires a Boolean value" +msgstr "параметр \"%s\" требует логическое значение" + +#: access/transam/xlog.c:5096 #, c-format msgid "parameter \"%s\" requires a temporal value" msgstr "параметр \"%s\" требует временное значение" -#: access/transam/xlog.c:5265 catalog/dependency.c:970 -#: catalog/dependency.c:971 catalog/dependency.c:977 catalog/dependency.c:978 -#: catalog/dependency.c:989 catalog/dependency.c:990 -#: catalog/objectaddress.c:764 commands/tablecmds.c:763 -#: commands/tablecmds.c:8949 commands/user.c:988 commands/view.c:475 +#: access/transam/xlog.c:5098 catalog/dependency.c:984 +#: catalog/dependency.c:985 catalog/dependency.c:991 catalog/dependency.c:992 +#: catalog/dependency.c:1003 catalog/dependency.c:1004 +#: catalog/objectaddress.c:1053 commands/tablecmds.c:789 +#: commands/tablecmds.c:9387 commands/user.c:1027 commands/view.c:482 #: libpq/auth.c:285 port/win32/security.c:51 storage/lmgr/deadlock.c:955 -#: storage/lmgr/proc.c:1191 utils/misc/guc.c:5377 utils/misc/guc.c:5470 -#: utils/misc/guc.c:8845 utils/misc/guc.c:8879 utils/misc/guc.c:8913 -#: utils/misc/guc.c:8947 utils/misc/guc.c:8982 +#: storage/lmgr/proc.c:1176 utils/misc/guc.c:5495 utils/misc/guc.c:5588 +#: utils/misc/guc.c:9498 utils/misc/guc.c:9532 utils/misc/guc.c:9566 +#: utils/misc/guc.c:9600 utils/misc/guc.c:9635 #, c-format msgid "%s" msgstr "%s" -#: access/transam/xlog.c:5271 +#: access/transam/xlog.c:5104 #, c-format msgid "unrecognized recovery parameter \"%s\"" msgstr "нераспознанный параметр восстановления \"%s\"" -#: access/transam/xlog.c:5282 +#: access/transam/xlog.c:5115 #, c-format msgid "" "recovery command file \"%s\" specified neither primary_conninfo nor " @@ -1627,7 +1901,7 @@ msgstr "" "в файле команд восстановления \"%s\" не указан параметр primary_conninfo или " "restore_command" -#: access/transam/xlog.c:5284 +#: access/transam/xlog.c:5117 #, c-format msgid "" "The database server will regularly poll the pg_xlog subdirectory to check " @@ -1636,7 +1910,7 @@ msgstr "" "Сервер БД будет регулярно опрашивать подкаталог pg_xlog и проверять " "содержащиеся в нём файлы." -#: access/transam/xlog.c:5290 +#: access/transam/xlog.c:5123 #, c-format msgid "" "recovery command file \"%s\" must specify restore_command when standby mode " @@ -1645,62 +1919,62 @@ msgstr "" "в файле команд восстановления \"%s\" может отсутствовать restore_command, " "только если это резервный сервер" -#: access/transam/xlog.c:5310 +#: access/transam/xlog.c:5153 #, c-format msgid "recovery target timeline %u does not exist" msgstr "целевая линия времени для восстановления %u не существует" -#: access/transam/xlog.c:5407 +#: access/transam/xlog.c:5278 #, c-format msgid "archive recovery complete" msgstr "восстановление архива завершено" -#: access/transam/xlog.c:5477 access/transam/xlog.c:5671 +#: access/transam/xlog.c:5337 access/transam/xlog.c:5565 #, c-format msgid "recovery stopping after reaching consistency" msgstr "" "восстановление останавливается после достижения согласованного состояния" -#: access/transam/xlog.c:5552 +#: access/transam/xlog.c:5425 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "" "восстановление останавливается перед фиксированием транзакции %u, время %s" -#: access/transam/xlog.c:5559 +#: access/transam/xlog.c:5432 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "" "восстановление останавливается перед прерыванием транзакции %u, время %s" -#: access/transam/xlog.c:5601 +#: access/transam/xlog.c:5477 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "восстановление останавливается в точке восстановления \"%s\", время %s" -#: access/transam/xlog.c:5651 +#: access/transam/xlog.c:5545 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "" "восстановление останавливается после фиксирования транзакции %u, время %s" -#: access/transam/xlog.c:5659 +#: access/transam/xlog.c:5553 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "" "восстановление останавливается после прерывания транзакции %u, время %s" -#: access/transam/xlog.c:5698 +#: access/transam/xlog.c:5592 #, c-format msgid "recovery has paused" msgstr "восстановление приостановлено" -#: access/transam/xlog.c:5699 +#: access/transam/xlog.c:5593 #, c-format msgid "Execute pg_xlog_replay_resume() to continue." msgstr "Выполните pg_xlog_replay_resume() для продолжения." -#: access/transam/xlog.c:5914 +#: access/transam/xlog.c:5796 #, c-format msgid "" "hot standby is not possible because %s = %d is a lower setting than on the " @@ -1709,12 +1983,21 @@ msgstr "" "режим горячего резерва невозможен, так как параметр %s = %d, меньше чем на " "главном сервере (на нём было значение %d)" -#: access/transam/xlog.c:5936 +#: access/transam/xlog.c:5811 +#, c-format +msgid "" +"hot standby is not possible because it requires \"%s\" to be same on master " +"and standby (master has \"%s\", standby has \"%s\")" +msgstr "" +"горячий резерв невозможен, так как значения параметра \"%s\" на главном и " +"резервном серверах различаются (на главном: \"%s\", на резервном: \"%s\")" + +#: access/transam/xlog.c:5831 #, c-format msgid "WAL was generated with wal_level=minimal, data may be missing" msgstr "WAL был создан с параметром wal_level=minimal, возможна потеря данных" -#: access/transam/xlog.c:5937 +#: access/transam/xlog.c:5832 #, c-format msgid "" "This happens if you temporarily set wal_level=minimal without taking a new " @@ -1723,7 +2006,7 @@ msgstr "" "Это происходит, если вы на время установили wal_level=minimal и не сделали " "резервную копию базу данных." -#: access/transam/xlog.c:5948 +#: access/transam/xlog.c:5843 #, c-format msgid "" "hot standby is not possible because wal_level was not set to \"hot_standby\" " @@ -1732,7 +2015,7 @@ msgstr "" "режим горячего резерва невозможен, так как на главном сервере установлен " "неподходящий wal_level (должен быть \"hot_standby\" или выше)" -#: access/transam/xlog.c:5949 +#: access/transam/xlog.c:5844 #, c-format msgid "" "Either set wal_level to \"hot_standby\" on the master, or turn off " @@ -1741,32 +2024,32 @@ msgstr "" "Либо установите для wal_level значение \"hot_standby\" на главном сервере, " "либо выключите hot_standby здесь." -#: access/transam/xlog.c:6004 +#: access/transam/xlog.c:5903 #, c-format msgid "control file contains invalid data" msgstr "файл pg_control содержит неверные данные" -#: access/transam/xlog.c:6010 +#: access/transam/xlog.c:5909 #, c-format msgid "database system was shut down at %s" msgstr "система БД была выключена: %s" -#: access/transam/xlog.c:6015 +#: access/transam/xlog.c:5914 #, c-format msgid "database system was shut down in recovery at %s" msgstr "система БД была выключена в процессе восстановления: %s" -#: access/transam/xlog.c:6019 +#: access/transam/xlog.c:5918 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "выключение системы БД было прервано; последний момент работы: %s" -#: access/transam/xlog.c:6023 +#: access/transam/xlog.c:5922 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "работа системы БД была прервана во время восстановления: %s" -#: access/transam/xlog.c:6025 +#: access/transam/xlog.c:5924 #, c-format msgid "" "This probably means that some data is corrupted and you will have to use the " @@ -1775,14 +2058,14 @@ msgstr "" "Это скорее всего означает, что некоторые данные повреждены и вам придётся " "восстановить БД из последней резервной копии." -#: access/transam/xlog.c:6029 +#: access/transam/xlog.c:5928 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "" "работа системы БД была прервана в процессе восстановления, время в журнале: " "%s" -#: access/transam/xlog.c:6031 +#: access/transam/xlog.c:5930 #, c-format msgid "" "If this has occurred more than once some data might be corrupted and you " @@ -1791,58 +2074,58 @@ msgstr "" "Если это происходит постоянно, возможно, какие-то данные были испорчены и " "для восстановления стоит выбрать более раннюю точку." -#: access/transam/xlog.c:6035 +#: access/transam/xlog.c:5934 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "работа системы БД была прервана; последний момент работы: %s" -#: access/transam/xlog.c:6089 +#: access/transam/xlog.c:5990 #, c-format msgid "entering standby mode" msgstr "переход в режим резервного сервера" -#: access/transam/xlog.c:6092 +#: access/transam/xlog.c:5993 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "начинается восстановление точки во времени до XID %u" -#: access/transam/xlog.c:6096 +#: access/transam/xlog.c:5997 #, c-format msgid "starting point-in-time recovery to %s" msgstr "начинается восстановление точки во времени до %s" -#: access/transam/xlog.c:6100 +#: access/transam/xlog.c:6001 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "начинается восстановление точки во времени до \"%s\"" -#: access/transam/xlog.c:6104 +#: access/transam/xlog.c:6005 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "" "начинается восстановление точки во времени до первой точки согласованности" -#: access/transam/xlog.c:6107 +#: access/transam/xlog.c:6008 #, c-format msgid "starting archive recovery" msgstr "начинается восстановление архива" -#: access/transam/xlog.c:6124 +#: access/transam/xlog.c:6025 #, c-format msgid "Failed while allocating an XLog reading processor." msgstr "Не удалось разместить обработчик журнала транзакций." -#: access/transam/xlog.c:6149 access/transam/xlog.c:6216 +#: access/transam/xlog.c:6052 access/transam/xlog.c:6153 #, c-format msgid "checkpoint record is at %X/%X" msgstr "запись о контрольной точке по смещению %X/%X" -#: access/transam/xlog.c:6163 +#: access/transam/xlog.c:6066 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "не удалось найти положение REDO, указанное записью контрольной точки" -#: access/transam/xlog.c:6164 access/transam/xlog.c:6171 +#: access/transam/xlog.c:6067 access/transam/xlog.c:6074 #, c-format msgid "" "If you are not restoring from a backup, try removing the file \"%s/" @@ -1851,27 +2134,32 @@ msgstr "" "Если вы не восстанавливаете БД из резервной копии, попробуйте удалить файл " "\"%s/backup_label\"." -#: access/transam/xlog.c:6170 +#: access/transam/xlog.c:6073 #, c-format msgid "could not locate required checkpoint record" msgstr "не удалось считать нужную запись контрольной точки" -#: access/transam/xlog.c:6226 access/transam/xlog.c:6241 +#: access/transam/xlog.c:6099 commands/tablespace.c:640 +#, c-format +msgid "could not create symbolic link \"%s\": %m" +msgstr "не удалось создать символическую ссылку \"%s\": %m" + +#: access/transam/xlog.c:6163 access/transam/xlog.c:6178 #, c-format msgid "could not locate a valid checkpoint record" msgstr "не удалось считать правильную запись контрольной точки" -#: access/transam/xlog.c:6235 +#: access/transam/xlog.c:6172 #, c-format msgid "using previous checkpoint record at %X/%X" msgstr "используется предыдущая запись контрольной точки по смещению %X/%X" -#: access/transam/xlog.c:6265 +#: access/transam/xlog.c:6216 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "в истории сервера нет ответвления запрошенной линии времени %u" -#: access/transam/xlog.c:6267 +#: access/transam/xlog.c:6218 #, c-format msgid "" "Latest checkpoint is at %X/%X on timeline %u, but in the history of the " @@ -1880,7 +2168,7 @@ msgstr "" "Последняя контрольная точка: %X/%X на линии времени %u, но в истории " "запрошенной линии времени сервер ответвился с этой линии в %X/%X." -#: access/transam/xlog.c:6283 +#: access/transam/xlog.c:6234 #, c-format msgid "" "requested timeline %u does not contain minimum recovery point %X/%X on " @@ -1889,47 +2177,52 @@ msgstr "" "запрошенная линия времени %u не содержит минимальную точку восстановления %X/" "%X на линии времени %u" -#: access/transam/xlog.c:6292 +#: access/transam/xlog.c:6243 #, c-format msgid "redo record is at %X/%X; shutdown %s" msgstr "запись REDO по смещению %X/%X; выключение: %s" -#: access/transam/xlog.c:6296 +#: access/transam/xlog.c:6247 #, c-format msgid "next transaction ID: %u/%u; next OID: %u" msgstr "ID следующей транзакции: %u/%u; следующий OID: %u" -#: access/transam/xlog.c:6300 +#: access/transam/xlog.c:6251 #, c-format msgid "next MultiXactId: %u; next MultiXactOffset: %u" msgstr "следующий MultiXactId: %u; следующий MultiXactOffset: %u" -#: access/transam/xlog.c:6303 +#: access/transam/xlog.c:6254 #, c-format msgid "oldest unfrozen transaction ID: %u, in database %u" msgstr "ID старейшей незамороженной транзакции: %u, база данных %u" -#: access/transam/xlog.c:6306 +#: access/transam/xlog.c:6257 #, c-format msgid "oldest MultiXactId: %u, in database %u" msgstr "старейший MultiXactId: %u, база данных %u" -#: access/transam/xlog.c:6310 +#: access/transam/xlog.c:6260 +#, c-format +msgid "commit timestamp Xid oldest/newest: %u/%u" +msgstr "старейшая/новейшая транзакция с меткой времени: %u/%u" + +#: access/transam/xlog.c:6265 #, c-format msgid "invalid next transaction ID" msgstr "неверный ID следующей транзакции" -#: access/transam/xlog.c:6380 +#: access/transam/xlog.c:6343 #, c-format msgid "invalid redo in checkpoint record" msgstr "неверная запись REDO в контрольной точке" -#: access/transam/xlog.c:6391 +#: access/transam/xlog.c:6354 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "неверная запись REDO в контрольной точке выключения" -#: access/transam/xlog.c:6422 +#: access/transam/xlog.c:6382 #, c-format msgid "" "database system was not properly shut down; automatic recovery in progress" @@ -1937,19 +2230,19 @@ msgstr "" "система БД была остановлена нештатно; производится автоматическое " "восстановление" -#: access/transam/xlog.c:6426 +#: access/transam/xlog.c:6386 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "" "восстановление после сбоя начинается на линии времени %u, целевая линия " "времени: %u" -#: access/transam/xlog.c:6470 +#: access/transam/xlog.c:6430 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label содержит данные, не согласованные с файлом pg_control" -#: access/transam/xlog.c:6471 +#: access/transam/xlog.c:6431 #, c-format msgid "" "This means that the backup is corrupted and you will have to use another " @@ -1958,44 +2251,44 @@ msgstr "" "Это означает, что резервная копия повреждена и для восстановления БД " "придётся использовать другую копию." -#: access/transam/xlog.c:6536 +#: access/transam/xlog.c:6513 #, c-format msgid "initializing for hot standby" msgstr "инициализация для горячего резерва" -#: access/transam/xlog.c:6668 +#: access/transam/xlog.c:6646 #, c-format msgid "redo starts at %X/%X" msgstr "запись REDO начинается со смещения %X/%X" -#: access/transam/xlog.c:6883 +#: access/transam/xlog.c:6860 +#, c-format +msgid "requested recovery stop point is before consistent recovery point" +msgstr "" +"запрошенная точка остановки восстановления предшествует согласованной точке " +"восстановления" + +#: access/transam/xlog.c:6898 #, c-format msgid "redo done at %X/%X" msgstr "записи REDO обработаны до смещения %X/%X" -#: access/transam/xlog.c:6888 access/transam/xlog.c:8742 +#: access/transam/xlog.c:6903 access/transam/xlog.c:8864 #, c-format msgid "last completed transaction was at log time %s" msgstr "последняя завершённая транзакция была выполнена в %s" -#: access/transam/xlog.c:6896 +#: access/transam/xlog.c:6912 #, c-format msgid "redo is not required" msgstr "данные REDO не требуются" -#: access/transam/xlog.c:6954 -#, c-format -msgid "requested recovery stop point is before consistent recovery point" -msgstr "" -"запрошенная точка остановки восстановления предшествует согласованной точке " -"восстановления" - -#: access/transam/xlog.c:6970 access/transam/xlog.c:6974 +#: access/transam/xlog.c:6987 access/transam/xlog.c:6991 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL закончился без признака окончания копирования" -#: access/transam/xlog.c:6971 +#: access/transam/xlog.c:6988 #, c-format msgid "" "All WAL generated while online backup was taken must be available at " @@ -2004,7 +2297,7 @@ msgstr "" "Все журналы WAL, созданные во время резервного копирования \"на ходу\", " "должны быть в наличии для восстановления." -#: access/transam/xlog.c:6975 +#: access/transam/xlog.c:6992 #, c-format msgid "" "Online backup started with pg_start_backup() must be ended with " @@ -2014,107 +2307,107 @@ msgstr "" "должно закончиться pg_stop_backup(), и для восстановления должны быть " "доступны все журналы WAL." -#: access/transam/xlog.c:6978 +#: access/transam/xlog.c:6995 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL закончился до согласованной точки восстановления" -#: access/transam/xlog.c:7005 +#: access/transam/xlog.c:7022 #, c-format msgid "selected new timeline ID: %u" msgstr "выбранный ID новой линии времени: %u" -#: access/transam/xlog.c:7346 +#: access/transam/xlog.c:7438 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "согласованное состояние восстановления достигнуто по смещению %X/%X" -#: access/transam/xlog.c:7543 +#: access/transam/xlog.c:7629 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "неверная ссылка на первичную контрольную точку в файле pg_control" -#: access/transam/xlog.c:7547 +#: access/transam/xlog.c:7633 #, c-format msgid "invalid secondary checkpoint link in control file" msgstr "неверная ссылка на вторичную контрольную точку в файле pg_control" -#: access/transam/xlog.c:7551 +#: access/transam/xlog.c:7637 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "неверная ссылка на контрольную точку в файле backup_label" -#: access/transam/xlog.c:7568 +#: access/transam/xlog.c:7654 #, c-format msgid "invalid primary checkpoint record" msgstr "неверная запись первичной контрольной точки" -#: access/transam/xlog.c:7572 +#: access/transam/xlog.c:7658 #, c-format msgid "invalid secondary checkpoint record" msgstr "неверная запись вторичной контрольной точки" -#: access/transam/xlog.c:7576 +#: access/transam/xlog.c:7662 #, c-format msgid "invalid checkpoint record" msgstr "неверная запись контрольной точки" -#: access/transam/xlog.c:7587 +#: access/transam/xlog.c:7673 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "неверный ID менеджера ресурсов в записи первичной контрольной точки" -#: access/transam/xlog.c:7591 +#: access/transam/xlog.c:7677 #, c-format msgid "invalid resource manager ID in secondary checkpoint record" msgstr "неверный ID менеджера ресурсов в записи вторичной контрольной точки" -#: access/transam/xlog.c:7595 +#: access/transam/xlog.c:7681 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "неверный ID менеджера ресурсов в записи контрольной точки" -#: access/transam/xlog.c:7607 +#: access/transam/xlog.c:7693 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "неверные флаги xl_info в записи первичной контрольной точки" -#: access/transam/xlog.c:7611 +#: access/transam/xlog.c:7697 #, c-format msgid "invalid xl_info in secondary checkpoint record" msgstr "неверные флаги xl_info в записи вторичной контрольной точки" -#: access/transam/xlog.c:7615 +#: access/transam/xlog.c:7701 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "неверные флаги xl_info в записи контрольной точки" -#: access/transam/xlog.c:7627 +#: access/transam/xlog.c:7712 #, c-format msgid "invalid length of primary checkpoint record" msgstr "неверная длина записи первичной контрольной точки" -#: access/transam/xlog.c:7631 +#: access/transam/xlog.c:7716 #, c-format msgid "invalid length of secondary checkpoint record" msgstr "неверная длина записи вторичной контрольной точки" -#: access/transam/xlog.c:7635 +#: access/transam/xlog.c:7720 #, c-format msgid "invalid length of checkpoint record" msgstr "неверная длина записи контрольной точки" -#: access/transam/xlog.c:7795 +#: access/transam/xlog.c:7890 #, c-format msgid "shutting down" msgstr "выключение" -#: access/transam/xlog.c:7818 +#: access/transam/xlog.c:7914 #, c-format msgid "database system is shut down" msgstr "система БД выключена" -#: access/transam/xlog.c:8284 +#: access/transam/xlog.c:8407 #, c-format msgid "" "concurrent transaction log activity while database system is shutting down" @@ -2122,29 +2415,29 @@ msgstr "" "во время выключения системы баз данных отмечена активность в журнале " "транзакций" -#: access/transam/xlog.c:8553 +#: access/transam/xlog.c:8669 #, c-format msgid "skipping restartpoint, recovery has already ended" msgstr "" "создание точки перезапуска пропускается, восстановление уже закончилось" -#: access/transam/xlog.c:8576 +#: access/transam/xlog.c:8692 #, c-format msgid "skipping restartpoint, already performed at %X/%X" msgstr "" "создание точки перезапуска пропускается, она уже создана по смещению %X/%X" -#: access/transam/xlog.c:8740 +#: access/transam/xlog.c:8862 #, c-format msgid "recovery restart point at %X/%X" msgstr "точка перезапуска восстановления по смещению %X/%X" -#: access/transam/xlog.c:8885 +#: access/transam/xlog.c:8995 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "точка восстановления \"%s\" создана по смещению %X/%X" -#: access/transam/xlog.c:9109 +#: access/transam/xlog.c:9125 #, c-format msgid "" "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint " @@ -2153,12 +2446,12 @@ msgstr "" "неожиданный ID предыдущей линии времени %u (ID текущей линии времени %u) в " "записи контрольной точки" -#: access/transam/xlog.c:9118 +#: access/transam/xlog.c:9134 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "неожиданный ID линии времени %u (после %u) в записи контрольной точки" -#: access/transam/xlog.c:9134 +#: access/transam/xlog.c:9150 #, c-format msgid "" "unexpected timeline ID %u in checkpoint record, before reaching minimum " @@ -2167,65 +2460,65 @@ msgstr "" "неожиданный ID линии времени %u в записи контрольной точки, до достижения " "минимальной к.т. %X/%X на линии времени %u" -#: access/transam/xlog.c:9202 +#: access/transam/xlog.c:9220 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "" "резервное копирование \"на ходу\" было отменено, продолжить восстановление " "нельзя" -#: access/transam/xlog.c:9263 access/transam/xlog.c:9312 -#: access/transam/xlog.c:9335 +#: access/transam/xlog.c:9276 access/transam/xlog.c:9320 +#: access/transam/xlog.c:9343 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "" "неожиданный ID линии времени %u (должен быть %u) в записи точки " "восстановления" -#: access/transam/xlog.c:9570 +#: access/transam/xlog.c:9636 #, c-format msgid "could not fsync log segment %s: %m" msgstr "не удалось синхронизировать с ФС сегмент журнала %s: %m" -#: access/transam/xlog.c:9594 +#: access/transam/xlog.c:9660 #, c-format msgid "could not fsync log file %s: %m" msgstr "не удалось синхронизировать с ФС файл журнала %s: %m" -#: access/transam/xlog.c:9602 +#: access/transam/xlog.c:9668 #, c-format msgid "could not fsync write-through log file %s: %m" msgstr "не удалось синхронизировать с ФС файл журнала сквозной записи %s: %m" -#: access/transam/xlog.c:9611 +#: access/transam/xlog.c:9677 #, c-format msgid "could not fdatasync log file %s: %m" msgstr "" "не удалось синхронизировать с ФС данные (fdatasync) файла журнала %s: %m" -#: access/transam/xlog.c:9689 access/transam/xlog.c:10025 -#: access/transam/xlogfuncs.c:111 access/transam/xlogfuncs.c:140 -#: access/transam/xlogfuncs.c:179 access/transam/xlogfuncs.c:200 -#: access/transam/xlogfuncs.c:270 access/transam/xlogfuncs.c:326 +#: access/transam/xlog.c:9769 access/transam/xlog.c:10240 +#: access/transam/xlogfuncs.c:121 access/transam/xlogfuncs.c:150 +#: access/transam/xlogfuncs.c:189 access/transam/xlogfuncs.c:210 +#: access/transam/xlogfuncs.c:280 access/transam/xlogfuncs.c:336 #, c-format msgid "recovery is in progress" msgstr "идёт процесс восстановления" -#: access/transam/xlog.c:9690 access/transam/xlog.c:10026 -#: access/transam/xlogfuncs.c:112 access/transam/xlogfuncs.c:141 -#: access/transam/xlogfuncs.c:180 access/transam/xlogfuncs.c:201 +#: access/transam/xlog.c:9770 access/transam/xlog.c:10241 +#: access/transam/xlogfuncs.c:122 access/transam/xlogfuncs.c:151 +#: access/transam/xlogfuncs.c:190 access/transam/xlogfuncs.c:211 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "Функции управления WAL нельзя использовать в процессе восстановления." -#: access/transam/xlog.c:9699 access/transam/xlog.c:10035 +#: access/transam/xlog.c:9779 access/transam/xlog.c:10250 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "" "Выбранный уровень WAL недостаточен для резервного копирования \"на ходу\"" -#: access/transam/xlog.c:9700 access/transam/xlog.c:10036 -#: access/transam/xlogfuncs.c:147 +#: access/transam/xlog.c:9780 access/transam/xlog.c:10251 +#: access/transam/xlogfuncs.c:157 #, c-format msgid "" "wal_level must be set to \"archive\", \"hot_standby\", or \"logical\" at " @@ -2234,22 +2527,23 @@ msgstr "" "Установите wal_level \"archive\", \"hot_standby\" или \"logical\" при " "запуске сервера." -#: access/transam/xlog.c:9705 +#: access/transam/xlog.c:9785 #, c-format msgid "backup label too long (max %d bytes)" msgstr "длина метки резервной копии превышает предел (%d байт)" -#: access/transam/xlog.c:9736 access/transam/xlog.c:9913 +#: access/transam/xlog.c:9817 access/transam/xlog.c:10087 +#: access/transam/xlog.c:10123 #, c-format msgid "a backup is already in progress" msgstr "резервное копирование уже запущено" -#: access/transam/xlog.c:9737 +#: access/transam/xlog.c:9818 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Выполните pg_stop_backup() и повторите операцию." -#: access/transam/xlog.c:9831 +#: access/transam/xlog.c:9913 #, c-format msgid "" "WAL generated with full_page_writes=off was replayed since last restartpoint" @@ -2257,7 +2551,7 @@ msgstr "" "После последней точки перезапуска был воспроизведён WAL, созданный в режиме " "full_page_writes=off." -#: access/transam/xlog.c:9833 access/transam/xlog.c:10186 +#: access/transam/xlog.c:9915 access/transam/xlog.c:10405 #, c-format msgid "" "This means that the backup being taken on the standby is corrupt and should " @@ -2269,18 +2563,38 @@ msgstr "" "CHECKPOINT на главном сервере, а затем попробуйте резервное копирование \"на " "ходу\" ещё раз." -#: access/transam/xlog.c:9907 access/transam/xlog.c:10076 -#: access/transam/xlogarchive.c:106 access/transam/xlogarchive.c:265 -#: replication/basebackup.c:464 replication/basebackup.c:532 +#: access/transam/xlog.c:9981 replication/basebackup.c:1027 +#: utils/adt/misc.c:378 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "не удалось прочитать символическую ссылку \"%s\": %m" + +#: access/transam/xlog.c:9988 replication/basebackup.c:1032 +#: utils/adt/misc.c:383 +#, c-format +msgid "symbolic link \"%s\" target is too long" +msgstr "целевой путь символической ссылки \"%s\" слишком длинный" + +#: access/transam/xlog.c:10041 commands/tablespace.c:389 +#: commands/tablespace.c:552 replication/basebackup.c:1048 +#: utils/adt/misc.c:391 +#, c-format +msgid "tablespaces are not supported on this platform" +msgstr "табличные пространства не поддерживаются на этой платформе" + +#: access/transam/xlog.c:10081 access/transam/xlog.c:10117 +#: access/transam/xlog.c:10291 access/transam/xlogarchive.c:106 +#: access/transam/xlogarchive.c:265 commands/extension.c:3026 +#: replication/basebackup.c:404 replication/basebackup.c:472 #: replication/logical/snapbuild.c:1478 storage/file/copydir.c:72 -#: storage/file/copydir.c:115 utils/adt/dbsize.c:68 utils/adt/dbsize.c:218 -#: utils/adt/dbsize.c:298 utils/adt/genfile.c:108 utils/adt/genfile.c:280 -#: guc-file.l:852 +#: storage/file/copydir.c:115 storage/file/fd.c:2519 storage/file/fd.c:2611 +#: utils/adt/dbsize.c:68 utils/adt/dbsize.c:218 utils/adt/dbsize.c:298 +#: utils/adt/genfile.c:114 utils/adt/genfile.c:333 guc-file.l:1003 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не удалось получить информацию о файле \"%s\": %m" -#: access/transam/xlog.c:9914 +#: access/transam/xlog.c:10088 access/transam/xlog.c:10124 #, c-format msgid "" "If you're sure there is no backup in progress, remove file \"%s\" and try " @@ -2289,30 +2603,31 @@ msgstr "" "Если вы считаете, что информация о резервном копировании неверна, удалите " "файл \"%s\" и попробуйте снова." -#: access/transam/xlog.c:9931 access/transam/xlog.c:10249 +#: access/transam/xlog.c:10105 access/transam/xlog.c:10141 +#: access/transam/xlog.c:10466 #, c-format msgid "could not write file \"%s\": %m" msgstr "не удалось записать файл \"%s\": %m" -#: access/transam/xlog.c:10080 +#: access/transam/xlog.c:10295 #, c-format msgid "a backup is not in progress" msgstr "резервное копирование не запущено" -#: access/transam/xlog.c:10119 access/transam/xlog.c:10132 -#: access/transam/xlog.c:10483 access/transam/xlog.c:10489 -#: access/transam/xlogfuncs.c:498 +#: access/transam/xlog.c:10340 access/transam/xlog.c:10353 +#: access/transam/xlog.c:10693 access/transam/xlog.c:10699 +#: access/transam/xlog.c:10783 access/transam/xlogfuncs.c:508 #, c-format msgid "invalid data in file \"%s\"" msgstr "неверные данные в файле \"%s\"" -#: access/transam/xlog.c:10136 replication/basebackup.c:966 +#: access/transam/xlog.c:10357 replication/basebackup.c:925 #, c-format msgid "the standby was promoted during online backup" msgstr "" "дежурный сервер был повышен в процессе резервного копирования \"на ходу\"" -#: access/transam/xlog.c:10137 replication/basebackup.c:967 +#: access/transam/xlog.c:10358 replication/basebackup.c:926 #, c-format msgid "" "This means that the backup being taken is corrupt and should not be used. " @@ -2321,7 +2636,7 @@ msgstr "" "Это означает, что создаваемая резервная копия испорчена и использовать её не " "следует. Попробуйте резервное копирование \"на ходу\" ещё раз." -#: access/transam/xlog.c:10184 +#: access/transam/xlog.c:10403 #, c-format msgid "" "WAL generated with full_page_writes=off was replayed during online backup" @@ -2329,7 +2644,7 @@ msgstr "" "В процессе резервного копирования \"на ходу\" был воспроизведён WAL, " "созданный в режиме full_page_writes=off" -#: access/transam/xlog.c:10298 +#: access/transam/xlog.c:10515 #, c-format msgid "" "pg_stop_backup cleanup done, waiting for required WAL segments to be archived" @@ -2337,7 +2652,7 @@ msgstr "" "очистка в pg_stop_backup выполнена, ожидаются требуемые сегменты WAL для " "архивации" -#: access/transam/xlog.c:10308 +#: access/transam/xlog.c:10525 #, c-format msgid "" "pg_stop_backup still waiting for all required WAL segments to be archived " @@ -2346,7 +2661,7 @@ msgstr "" "pg_stop_backup всё ещё ждёт все требуемые сегменты WAL для архивации (прошло " "%d сек.)" -#: access/transam/xlog.c:10310 +#: access/transam/xlog.c:10527 #, c-format msgid "" "Check that your archive_command is executing properly. pg_stop_backup can " @@ -2357,13 +2672,13 @@ msgstr "" "можно отменить безопасно, но резервная копия базы данных будет непригодна " "без всех сегментов WAL." -#: access/transam/xlog.c:10317 +#: access/transam/xlog.c:10534 #, c-format msgid "pg_stop_backup complete, all required WAL segments have been archived" msgstr "" "команда pg_stop_backup завершена, все требуемые сегменты WAL заархивированы" -#: access/transam/xlog.c:10321 +#: access/transam/xlog.c:10538 #, c-format msgid "" "WAL archiving is not enabled; you must ensure that all required WAL segments " @@ -2372,53 +2687,53 @@ msgstr "" "архивация WAL не настроена; вы должны обеспечить копирование всех требуемых " "сегментов WAL другими средствами для получения резервной копии" -#: access/transam/xlog.c:10534 +#: access/transam/xlog.c:10822 #, c-format msgid "xlog redo %s" msgstr "XLOG-запись REDO: %s" -#: access/transam/xlog.c:10574 +#: access/transam/xlog.c:10867 access/transam/xlog.c:10890 #, c-format msgid "online backup mode canceled" msgstr "режим копирования \"на ходу\" отменён" -#: access/transam/xlog.c:10575 +#: access/transam/xlog.c:10868 access/transam/xlog.c:10891 #, c-format msgid "\"%s\" was renamed to \"%s\"." msgstr "Файл \"%s\" был переименован в \"%s\"." -#: access/transam/xlog.c:10582 +#: access/transam/xlog.c:10875 access/transam/xlog.c:10898 #, c-format msgid "online backup mode was not canceled" msgstr "режим копирования \"на ходу\" не был отменён" -#: access/transam/xlog.c:10583 +#: access/transam/xlog.c:10876 access/transam/xlog.c:10899 #, c-format msgid "Could not rename \"%s\" to \"%s\": %m." msgstr "Не удалось переименовать файл \"%s\" в \"%s\": %m." -#: access/transam/xlog.c:10703 replication/logical/logicalfuncs.c:169 -#: replication/walreceiver.c:937 replication/walsender.c:2094 +#: access/transam/xlog.c:11019 replication/logical/logicalfuncs.c:171 +#: replication/walreceiver.c:932 replication/walsender.c:2092 #, c-format msgid "could not seek in log segment %s to offset %u: %m" msgstr "не удалось переместиться в сегменте журнала %s к смещению %u: %m" -#: access/transam/xlog.c:10715 +#: access/transam/xlog.c:11031 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "не удалось прочитать сегмент журнала %s, смещение %u: %m" -#: access/transam/xlog.c:11178 +#: access/transam/xlog.c:11505 #, c-format msgid "received promote request" msgstr "получен запрос повышения статуса" -#: access/transam/xlog.c:11191 +#: access/transam/xlog.c:11518 #, c-format msgid "trigger file found: %s" msgstr "найден файл триггера: %s" -#: access/transam/xlog.c:11200 +#: access/transam/xlog.c:11527 #, c-format msgid "could not stat trigger file \"%s\": %m" msgstr "не удалось получить информацию о файле триггера \"%s\": %m" @@ -2446,158 +2761,142 @@ msgstr "восстановить файл \"%s\" из архива не удал msgid "%s \"%s\": %s" msgstr "%s \"%s\": %s" -#: access/transam/xlogarchive.c:525 access/transam/xlogarchive.c:594 +#: access/transam/xlogarchive.c:529 access/transam/xlogarchive.c:598 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "не удалось создать файл состояния архива \"%s\": %m" -#: access/transam/xlogarchive.c:533 access/transam/xlogarchive.c:602 +#: access/transam/xlogarchive.c:537 access/transam/xlogarchive.c:606 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "не удалось записать файл состояния архива \"%s\": %m" -#: access/transam/xlogfuncs.c:60 access/transam/xlogfuncs.c:88 +#: access/transam/xlogfuncs.c:61 access/transam/xlogfuncs.c:98 #, c-format msgid "must be superuser or replication role to run a backup" msgstr "" "запускать резервное копирование может только суперпользователь или роль " "репликации" -#: access/transam/xlogfuncs.c:106 +#: access/transam/xlogfuncs.c:67 commands/tablespace.c:704 +#: commands/tablespace.c:714 postmaster/postmaster.c:1324 +#: replication/basebackup.c:292 replication/basebackup.c:632 +#: storage/file/copydir.c:53 storage/file/copydir.c:96 storage/file/fd.c:1985 +#: storage/file/fd.c:2584 storage/ipc/dsm.c:300 utils/adt/genfile.c:439 +#: utils/adt/misc.c:291 utils/misc/tzparser.c:339 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не удалось открыть каталог \"%s\": %m" + +#: access/transam/xlogfuncs.c:116 #, c-format msgid "must be superuser to switch transaction log files" msgstr "" "для переключения файлов журнала транзакций нужно быть суперпользователем" -#: access/transam/xlogfuncs.c:135 +#: access/transam/xlogfuncs.c:145 #, c-format msgid "must be superuser to create a restore point" msgstr "для создания точки восстановления нужно быть суперпользователем" -#: access/transam/xlogfuncs.c:146 +#: access/transam/xlogfuncs.c:156 #, c-format msgid "WAL level not sufficient for creating a restore point" msgstr "Выбранный уровень WAL не достаточен для создания точки восстановления" -#: access/transam/xlogfuncs.c:154 +#: access/transam/xlogfuncs.c:164 #, c-format msgid "value too long for restore point (maximum %d characters)" msgstr "значение для точки восстановления превышает предел (%d симв.)" -#: access/transam/xlogfuncs.c:271 +#: access/transam/xlogfuncs.c:281 #, c-format msgid "pg_xlogfile_name_offset() cannot be executed during recovery." msgstr "" "Функцию pg_xlogfile_name_offset() нельзя вызывать во время восстановления." -#: access/transam/xlogfuncs.c:327 +#: access/transam/xlogfuncs.c:337 #, c-format msgid "pg_xlogfile_name() cannot be executed during recovery." msgstr "Функцию pg_xlogfile_name() нельзя вызывать в процессе восстановления." -#: access/transam/xlogfuncs.c:344 access/transam/xlogfuncs.c:366 +#: access/transam/xlogfuncs.c:354 access/transam/xlogfuncs.c:376 #, c-format msgid "must be superuser to control recovery" msgstr "для управления восстановлением нужно быть суперпользователем" -#: access/transam/xlogfuncs.c:349 access/transam/xlogfuncs.c:371 -#: access/transam/xlogfuncs.c:388 +#: access/transam/xlogfuncs.c:359 access/transam/xlogfuncs.c:381 +#: access/transam/xlogfuncs.c:398 #, c-format msgid "recovery is not in progress" msgstr "восстановление не выполняется" -#: access/transam/xlogfuncs.c:350 access/transam/xlogfuncs.c:372 -#: access/transam/xlogfuncs.c:389 +#: access/transam/xlogfuncs.c:360 access/transam/xlogfuncs.c:382 +#: access/transam/xlogfuncs.c:399 #, c-format msgid "Recovery control functions can only be executed during recovery." msgstr "" "Функции управления восстановлением можно использовать только в процессе " "восстановления." -#: access/transam/xlogreader.c:249 +#: access/transam/xlogreader.c:264 #, c-format msgid "invalid record offset at %X/%X" msgstr "неверное смещение записи: %X/%X" -#: access/transam/xlogreader.c:257 +#: access/transam/xlogreader.c:272 #, c-format msgid "contrecord is requested by %X/%X" msgstr "по смещению %X/%X запрошено продолжение записи" -#: access/transam/xlogreader.c:297 access/transam/xlogreader.c:608 -#: access/transam/xlogreader.c:682 +#: access/transam/xlogreader.c:312 access/transam/xlogreader.c:603 #, c-format msgid "invalid record length at %X/%X" msgstr "неверная длина записи по смещению %X/%X" -#: access/transam/xlogreader.c:311 +#: access/transam/xlogreader.c:326 #, c-format msgid "record length %u at %X/%X too long" msgstr "длина записи %u по смещению %X/%X слишком велика" -#: access/transam/xlogreader.c:352 +#: access/transam/xlogreader.c:367 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "нет флага contrecord в позиции %X/%X" -#: access/transam/xlogreader.c:365 +#: access/transam/xlogreader.c:380 #, c-format msgid "invalid contrecord length %u at %X/%X" msgstr "неверная длина contrecord (%u) в позиции %X/%X" -#: access/transam/xlogreader.c:591 -#, c-format -msgid "invalid xlog switch record at %X/%X" -msgstr "неверная запись переключения xlog по смещению %X/%X" - -#: access/transam/xlogreader.c:599 -#, c-format -msgid "record with zero length at %X/%X" -msgstr "запись нулевой длины по смещению %X/%X" - -#: access/transam/xlogreader.c:615 +#: access/transam/xlogreader.c:610 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "неверный ID менеджера ресурсов %u по смещению %X/%X" -#: access/transam/xlogreader.c:629 access/transam/xlogreader.c:646 +#: access/transam/xlogreader.c:624 access/transam/xlogreader.c:641 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "запись с неверной ссылкой назад %X/%X по смещению %X/%X" -#: access/transam/xlogreader.c:702 access/transam/xlogreader.c:720 -#, c-format -msgid "invalid backup block size in record at %X/%X" -msgstr "неверный размер блока копии в позиции %X/%X" - -#: access/transam/xlogreader.c:711 -#, c-format -msgid "incorrect hole size in record at %X/%X" -msgstr "неправильный размер пропуска в записи по смещению %X/%X" - -#: access/transam/xlogreader.c:733 -#, c-format -msgid "incorrect total length in record at %X/%X" -msgstr "некорректная общая длина в записи по смещению %X/%X" - -#: access/transam/xlogreader.c:745 +#: access/transam/xlogreader.c:678 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "" "некорректная контрольная сумма данных менеджера ресурсов в записи по " "смещению %X/%X" -#: access/transam/xlogreader.c:778 +#: access/transam/xlogreader.c:711 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "неверное магическое число %04X в сегменте журнала %s, смещение %u" -#: access/transam/xlogreader.c:792 access/transam/xlogreader.c:843 +#: access/transam/xlogreader.c:725 access/transam/xlogreader.c:776 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "неверные информационные биты %04X в сегменте журнала %s, смещение %u" -#: access/transam/xlogreader.c:818 +#: access/transam/xlogreader.c:751 #, c-format msgid "" "WAL file is from different database system: WAL file database system " @@ -2606,7 +2905,7 @@ msgstr "" "Файл WAL принадлежит другой СУБД: в нём указан идентификатор системы БД %s, " "а идентификатор системы pg_control: %s." -#: access/transam/xlogreader.c:825 +#: access/transam/xlogreader.c:758 #, c-format msgid "" "WAL file is from different database system: Incorrect XLOG_SEG_SIZE in page " @@ -2615,7 +2914,7 @@ msgstr "" "Файл WAL принадлежит другой СУБД: некорректный XLOG_SEG_SIZE в заголовке " "страницы." -#: access/transam/xlogreader.c:831 +#: access/transam/xlogreader.c:764 #, c-format msgid "" "WAL file is from different database system: Incorrect XLOG_BLCKSZ in page " @@ -2624,611 +2923,679 @@ msgstr "" "Файл WAL принадлежит другой СУБД: некорректный XLOG_BLCKSZ в заголовке " "страницы." -#: access/transam/xlogreader.c:857 +#: access/transam/xlogreader.c:790 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "неожиданный pageaddr %X/%X в сегменте журнала %s, смещение %u" -#: access/transam/xlogreader.c:882 +#: access/transam/xlogreader.c:815 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "" "нарушение последовательности ID линии времени %u (после %u) в сегменте " "журнала %s, смещение %u" -#: bootstrap/bootstrap.c:273 postmaster/postmaster.c:763 tcop/postgres.c:3500 +#: access/transam/xlogreader.c:1024 +#, c-format +msgid "out-of-order block_id %u at %X/%X" +msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%X" + +#: access/transam/xlogreader.c:1046 +#, c-format +msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" +msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%X нет" + +#: access/transam/xlogreader.c:1053 +#, 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:1086 +#, 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:1102 +#, 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:1117 +#, 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:1132 +#, 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:1148 +#, c-format +msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" +msgstr "" +"BKPBLOCK_SAME_REL установлен, но предыдущее значение не задано в позиции %X/" +"%X" + +#: access/transam/xlogreader.c:1160 +#, c-format +msgid "invalid block_id %u at %X/%X" +msgstr "неверный идентификатор блока %u в позиции %X/%X" + +#: access/transam/xlogreader.c:1225 +#, c-format +msgid "record with invalid length at %X/%X" +msgstr "запись с неверной длиной в позиции %X/%X" + +#: access/transam/xlogreader.c:1314 +#, c-format +msgid "invalid compressed image at %X/%X, block %d" +msgstr "неверный сжатый образ в позиции %X/%X, блок %d" + +#: bootstrap/bootstrap.c:268 postmaster/postmaster.c:781 tcop/postgres.c:3480 #, c-format msgid "--%s requires a value" msgstr "для --%s требуется значение" -#: bootstrap/bootstrap.c:278 postmaster/postmaster.c:768 tcop/postgres.c:3505 +#: bootstrap/bootstrap.c:273 postmaster/postmaster.c:786 tcop/postgres.c:3485 #, c-format msgid "-c %s requires a value" msgstr "для -c %s требуется значение" -#: bootstrap/bootstrap.c:289 postmaster/postmaster.c:780 -#: postmaster/postmaster.c:793 +#: bootstrap/bootstrap.c:284 postmaster/postmaster.c:798 +#: postmaster/postmaster.c:811 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: bootstrap/bootstrap.c:298 +#: bootstrap/bootstrap.c:293 #, c-format msgid "%s: invalid command-line arguments\n" msgstr "%s: неверные аргументы командной строки\n" -#: catalog/aclchk.c:206 +#: catalog/aclchk.c:182 #, c-format msgid "grant options can only be granted to roles" msgstr "право назначения прав можно давать только ролям" -#: catalog/aclchk.c:329 +#: catalog/aclchk.c:305 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "для колонки \"%s\" отношения \"%s\" не были назначены никакие права" -#: catalog/aclchk.c:334 +#: catalog/aclchk.c:310 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "для объекта \"%s\" не были назначены никакие права" -#: catalog/aclchk.c:342 +#: catalog/aclchk.c:318 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "" "для колонки \"%s\" отношения \"%s\" были назначены не все запрошенные права" -#: catalog/aclchk.c:347 +#: catalog/aclchk.c:323 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "для объекта \"%s\" были назначены не все запрошенные права" -#: catalog/aclchk.c:358 +#: catalog/aclchk.c:334 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "для колонки \"%s\" отношения \"%s\" не были отозваны никакие права" -#: catalog/aclchk.c:363 +#: catalog/aclchk.c:339 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "для объекта \"%s\" не были отозваны никакие права" -#: catalog/aclchk.c:371 +#: catalog/aclchk.c:347 #, c-format msgid "" "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "для колонки \"%s\" отношения \"%s\" были отозваны не все права" -#: catalog/aclchk.c:376 +#: catalog/aclchk.c:352 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "для объекта \"%s\" были отозваны не все права" -#: catalog/aclchk.c:455 catalog/aclchk.c:933 +#: catalog/aclchk.c:434 catalog/aclchk.c:924 #, c-format msgid "invalid privilege type %s for relation" msgstr "право %s неприменимо для отношений" -#: catalog/aclchk.c:459 catalog/aclchk.c:937 +#: catalog/aclchk.c:438 catalog/aclchk.c:928 #, c-format msgid "invalid privilege type %s for sequence" msgstr "право %s неприменимо для последовательностей" -#: catalog/aclchk.c:463 +#: catalog/aclchk.c:442 #, c-format msgid "invalid privilege type %s for database" msgstr "право %s неприменимо для баз данных" -#: catalog/aclchk.c:467 +#: catalog/aclchk.c:446 #, c-format msgid "invalid privilege type %s for domain" msgstr "право %s неприменимо для домена" -#: catalog/aclchk.c:471 catalog/aclchk.c:941 +#: catalog/aclchk.c:450 catalog/aclchk.c:932 #, c-format msgid "invalid privilege type %s for function" msgstr "право %s неприменимо для функций" -#: catalog/aclchk.c:475 +#: catalog/aclchk.c:454 #, c-format msgid "invalid privilege type %s for language" msgstr "право %s неприменимо для языков" -#: catalog/aclchk.c:479 +#: catalog/aclchk.c:458 #, c-format msgid "invalid privilege type %s for large object" msgstr "право %s неприменимо для больших объектов" -#: catalog/aclchk.c:483 +#: catalog/aclchk.c:462 #, c-format msgid "invalid privilege type %s for schema" msgstr "право %s неприменимо для схем" -#: catalog/aclchk.c:487 +#: catalog/aclchk.c:466 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "право %s неприменимо для табличных пространств" -#: catalog/aclchk.c:491 catalog/aclchk.c:945 +#: catalog/aclchk.c:470 catalog/aclchk.c:936 #, c-format msgid "invalid privilege type %s for type" msgstr "право %s неприменимо для типа" -#: catalog/aclchk.c:495 +#: catalog/aclchk.c:474 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "право %s неприменимо для обёрток сторонних данных" -#: catalog/aclchk.c:499 +#: catalog/aclchk.c:478 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "право %s неприменимо для сторонних серверов" -#: catalog/aclchk.c:538 +#: catalog/aclchk.c:517 #, c-format msgid "column privileges are only valid for relations" msgstr "права для колонок применимы только к отношениям" -#: catalog/aclchk.c:688 catalog/aclchk.c:3904 catalog/aclchk.c:4681 -#: catalog/objectaddress.c:586 catalog/pg_largeobject.c:113 +#: catalog/aclchk.c:676 catalog/aclchk.c:3874 catalog/aclchk.c:4651 +#: catalog/objectaddress.c:854 catalog/pg_largeobject.c:113 #: storage/large_object/inv_api.c:291 #, c-format msgid "large object %u does not exist" msgstr "большой объект %u не существует" -#: catalog/aclchk.c:875 catalog/aclchk.c:883 commands/collationcmds.c:91 -#: commands/copy.c:936 commands/copy.c:954 commands/copy.c:962 -#: commands/copy.c:970 commands/copy.c:978 commands/copy.c:986 -#: commands/copy.c:994 commands/copy.c:1002 commands/copy.c:1010 -#: commands/copy.c:1026 commands/copy.c:1040 commands/copy.c:1059 -#: commands/copy.c:1074 commands/dbcommands.c:148 commands/dbcommands.c:156 -#: commands/dbcommands.c:164 commands/dbcommands.c:172 -#: commands/dbcommands.c:180 commands/dbcommands.c:188 -#: commands/dbcommands.c:196 commands/dbcommands.c:1372 -#: commands/dbcommands.c:1380 commands/extension.c:1246 -#: commands/extension.c:1254 commands/extension.c:1262 -#: commands/extension.c:2670 commands/foreigncmds.c:486 -#: commands/foreigncmds.c:495 commands/functioncmds.c:522 -#: commands/functioncmds.c:614 commands/functioncmds.c:622 -#: commands/functioncmds.c:630 commands/functioncmds.c:1700 -#: commands/functioncmds.c:1708 commands/sequence.c:1169 -#: commands/sequence.c:1177 commands/sequence.c:1185 commands/sequence.c:1193 -#: commands/sequence.c:1201 commands/sequence.c:1209 commands/sequence.c:1217 -#: commands/sequence.c:1225 commands/typecmds.c:297 commands/typecmds.c:1332 -#: commands/typecmds.c:1341 commands/typecmds.c:1349 commands/typecmds.c:1357 -#: commands/typecmds.c:1365 commands/user.c:135 commands/user.c:152 -#: commands/user.c:160 commands/user.c:168 commands/user.c:176 -#: commands/user.c:184 commands/user.c:192 commands/user.c:200 -#: commands/user.c:208 commands/user.c:216 commands/user.c:224 -#: commands/user.c:232 commands/user.c:496 commands/user.c:508 -#: commands/user.c:516 commands/user.c:524 commands/user.c:532 -#: commands/user.c:540 commands/user.c:548 commands/user.c:556 -#: commands/user.c:565 commands/user.c:573 +#: catalog/aclchk.c:863 catalog/aclchk.c:871 commands/collationcmds.c:92 +#: commands/copy.c:1001 commands/copy.c:1019 commands/copy.c:1027 +#: commands/copy.c:1035 commands/copy.c:1043 commands/copy.c:1051 +#: commands/copy.c:1059 commands/copy.c:1067 commands/copy.c:1075 +#: commands/copy.c:1091 commands/copy.c:1105 commands/copy.c:1124 +#: commands/copy.c:1139 commands/dbcommands.c:155 commands/dbcommands.c:163 +#: commands/dbcommands.c:171 commands/dbcommands.c:179 +#: commands/dbcommands.c:187 commands/dbcommands.c:195 +#: commands/dbcommands.c:203 commands/dbcommands.c:211 +#: commands/dbcommands.c:219 commands/dbcommands.c:1397 +#: commands/dbcommands.c:1405 commands/dbcommands.c:1413 +#: commands/dbcommands.c:1421 commands/extension.c:1244 +#: commands/extension.c:1252 commands/extension.c:1260 +#: commands/extension.c:2677 commands/foreigncmds.c:539 +#: commands/foreigncmds.c:548 commands/functioncmds.c:525 +#: commands/functioncmds.c:619 commands/functioncmds.c:627 +#: commands/functioncmds.c:635 commands/functioncmds.c:643 +#: commands/functioncmds.c:2045 commands/functioncmds.c:2053 +#: commands/sequence.c:1189 commands/sequence.c:1197 commands/sequence.c:1205 +#: commands/sequence.c:1213 commands/sequence.c:1221 commands/sequence.c:1229 +#: commands/sequence.c:1237 commands/sequence.c:1245 commands/typecmds.c:293 +#: commands/typecmds.c:1380 commands/typecmds.c:1389 commands/typecmds.c:1397 +#: commands/typecmds.c:1405 commands/typecmds.c:1413 commands/user.c:138 +#: commands/user.c:155 commands/user.c:163 commands/user.c:171 +#: commands/user.c:179 commands/user.c:187 commands/user.c:195 +#: commands/user.c:203 commands/user.c:211 commands/user.c:219 +#: commands/user.c:227 commands/user.c:235 commands/user.c:243 +#: commands/user.c:522 commands/user.c:534 commands/user.c:542 +#: commands/user.c:550 commands/user.c:558 commands/user.c:566 +#: commands/user.c:574 commands/user.c:582 commands/user.c:591 +#: commands/user.c:599 commands/user.c:607 #, c-format msgid "conflicting or redundant options" msgstr "конфликтующие или избыточные параметры" -#: catalog/aclchk.c:978 +#: catalog/aclchk.c:969 #, c-format msgid "default privileges cannot be set for columns" msgstr "права по умолчанию нельзя определить для колонок" -#: catalog/aclchk.c:1492 catalog/objectaddress.c:1042 commands/analyze.c:390 -#: commands/copy.c:4266 commands/sequence.c:1471 commands/tablecmds.c:4939 -#: commands/tablecmds.c:5034 commands/tablecmds.c:5084 -#: commands/tablecmds.c:5188 commands/tablecmds.c:5235 -#: commands/tablecmds.c:5319 commands/tablecmds.c:5407 -#: commands/tablecmds.c:7494 commands/tablecmds.c:7698 -#: commands/tablecmds.c:8090 commands/trigger.c:641 parser/analyze.c:1994 -#: parser/parse_relation.c:2358 parser/parse_relation.c:2420 -#: parser/parse_target.c:920 parser/parse_type.c:128 utils/adt/acl.c:2840 -#: utils/adt/ruleutils.c:1820 +#: catalog/aclchk.c:1483 catalog/objectaddress.c:1338 commands/analyze.c:378 +#: commands/copy.c:4364 commands/sequence.c:1491 commands/tablecmds.c:5149 +#: commands/tablecmds.c:5255 commands/tablecmds.c:5315 +#: commands/tablecmds.c:5428 commands/tablecmds.c:5485 +#: commands/tablecmds.c:5579 commands/tablecmds.c:5675 +#: commands/tablecmds.c:7836 commands/tablecmds.c:8041 +#: commands/tablecmds.c:8461 commands/trigger.c:643 parser/analyze.c:2112 +#: parser/parse_relation.c:2536 parser/parse_relation.c:2598 +#: parser/parse_target.c:940 parser/parse_type.c:128 utils/adt/acl.c:2839 +#: utils/adt/ruleutils.c:1836 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "колонка \"%s\" в таблице \"%s\" не существует" -#: catalog/aclchk.c:1757 catalog/objectaddress.c:862 commands/sequence.c:1058 -#: commands/tablecmds.c:214 commands/tablecmds.c:11244 utils/adt/acl.c:2076 -#: utils/adt/acl.c:2106 utils/adt/acl.c:2138 utils/adt/acl.c:2170 -#: utils/adt/acl.c:2198 utils/adt/acl.c:2228 +#: catalog/aclchk.c:1748 catalog/objectaddress.c:1151 commands/sequence.c:1078 +#: commands/tablecmds.c:220 commands/tablecmds.c:11890 utils/adt/acl.c:2075 +#: utils/adt/acl.c:2105 utils/adt/acl.c:2137 utils/adt/acl.c:2169 +#: utils/adt/acl.c:2197 utils/adt/acl.c:2227 #, c-format msgid "\"%s\" is not a sequence" msgstr "\"%s\" - это не последовательность" -#: catalog/aclchk.c:1795 +#: catalog/aclchk.c:1786 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "" "для последовательности \"%s\" применимы только права USAGE, SELECT и UPDATE" -#: catalog/aclchk.c:1812 +#: catalog/aclchk.c:1803 #, c-format msgid "invalid privilege type USAGE for table" msgstr "право USAGE неприменимо для таблиц" -#: catalog/aclchk.c:1977 +#: catalog/aclchk.c:1968 #, c-format msgid "invalid privilege type %s for column" msgstr "право %s неприменимо для колонок" -#: catalog/aclchk.c:1990 +#: catalog/aclchk.c:1981 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "для последовательности \"%s\" применимо только право SELECT" # TO REVIEW -#: catalog/aclchk.c:2574 +#: catalog/aclchk.c:2565 #, c-format msgid "language \"%s\" is not trusted" msgstr "язык \"%s\" не является доверенным" -#: catalog/aclchk.c:2576 +#: catalog/aclchk.c:2567 #, c-format msgid "Only superusers can use untrusted languages." msgstr "Использовать недоверенные языки могут только суперпользователи." -#: catalog/aclchk.c:3092 +#: catalog/aclchk.c:3083 #, c-format msgid "cannot set privileges of array types" msgstr "для типов массивов нельзя определить права" -#: catalog/aclchk.c:3093 +#: catalog/aclchk.c:3084 #, c-format msgid "Set the privileges of the element type instead." msgstr "Вместо этого установите права для типа элемента." -#: catalog/aclchk.c:3100 catalog/objectaddress.c:1094 commands/typecmds.c:3187 +#: catalog/aclchk.c:3091 catalog/objectaddress.c:1471 commands/typecmds.c:3142 #, c-format msgid "\"%s\" is not a domain" msgstr "\"%s\" - это не домен" -#: catalog/aclchk.c:3220 +#: catalog/aclchk.c:3211 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "нераспознанное право: \"%s\"" -#: catalog/aclchk.c:3269 +#: catalog/aclchk.c:3260 #, c-format msgid "permission denied for column %s" msgstr "нет доступа к колонке %s" -#: catalog/aclchk.c:3271 +#: catalog/aclchk.c:3262 #, c-format msgid "permission denied for relation %s" msgstr "нет доступа к отношению %s" -#: catalog/aclchk.c:3273 commands/sequence.c:544 commands/sequence.c:767 -#: commands/sequence.c:809 commands/sequence.c:846 commands/sequence.c:1523 +#: catalog/aclchk.c:3264 commands/sequence.c:561 commands/sequence.c:786 +#: commands/sequence.c:828 commands/sequence.c:865 commands/sequence.c:1543 #, c-format msgid "permission denied for sequence %s" msgstr "нет доступа к последовательности %s" -#: catalog/aclchk.c:3275 +#: catalog/aclchk.c:3266 #, c-format msgid "permission denied for database %s" msgstr "нет доступа к базе данных %s" -#: catalog/aclchk.c:3277 +#: catalog/aclchk.c:3268 #, c-format msgid "permission denied for function %s" msgstr "нет доступа к функции %s" -#: catalog/aclchk.c:3279 +#: catalog/aclchk.c:3270 #, c-format msgid "permission denied for operator %s" msgstr "нет доступа к оператору %s" -#: catalog/aclchk.c:3281 +#: catalog/aclchk.c:3272 #, c-format msgid "permission denied for type %s" msgstr "нет доступа к типу %s" -#: catalog/aclchk.c:3283 +#: catalog/aclchk.c:3274 #, c-format msgid "permission denied for language %s" msgstr "нет доступа к языку %s" -#: catalog/aclchk.c:3285 +#: catalog/aclchk.c:3276 #, c-format msgid "permission denied for large object %s" msgstr "нет доступа к большому объекту %s" -#: catalog/aclchk.c:3287 +#: catalog/aclchk.c:3278 #, c-format msgid "permission denied for schema %s" msgstr "нет доступа к схеме %s" -#: catalog/aclchk.c:3289 +#: catalog/aclchk.c:3280 #, c-format msgid "permission denied for operator class %s" msgstr "нет доступа к классу операторов %s" -#: catalog/aclchk.c:3291 +#: catalog/aclchk.c:3282 #, c-format msgid "permission denied for operator family %s" msgstr "нет доступа к семейству операторов %s" -#: catalog/aclchk.c:3293 +#: catalog/aclchk.c:3284 #, c-format msgid "permission denied for collation %s" msgstr "нет доступа к правилу сортировки %s" -#: catalog/aclchk.c:3295 +#: catalog/aclchk.c:3286 #, c-format msgid "permission denied for conversion %s" msgstr "нет доступа к преобразованию %s" -#: catalog/aclchk.c:3297 +#: catalog/aclchk.c:3288 #, c-format msgid "permission denied for tablespace %s" msgstr "нет доступа к табличному пространству %s" -#: catalog/aclchk.c:3299 +#: catalog/aclchk.c:3290 #, c-format msgid "permission denied for text search dictionary %s" msgstr "нет доступа к словарю текстового поиска %s" -#: catalog/aclchk.c:3301 +#: catalog/aclchk.c:3292 #, c-format msgid "permission denied for text search configuration %s" msgstr "нет доступа к конфигурации текстового поиска %s" -#: catalog/aclchk.c:3303 +#: catalog/aclchk.c:3294 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "нет доступа к обёртке сторонних данных %s" -#: catalog/aclchk.c:3305 +#: catalog/aclchk.c:3296 #, c-format msgid "permission denied for foreign server %s" msgstr "нет доступа к стороннему серверу %s" -#: catalog/aclchk.c:3307 +#: catalog/aclchk.c:3298 #, c-format msgid "permission denied for event trigger %s" msgstr "нет доступа к событийному триггеру %s" -#: catalog/aclchk.c:3309 +#: catalog/aclchk.c:3300 #, c-format msgid "permission denied for extension %s" msgstr "нет доступа к расширению %s" -#: catalog/aclchk.c:3315 catalog/aclchk.c:3317 +#: catalog/aclchk.c:3306 catalog/aclchk.c:3308 #, c-format msgid "must be owner of relation %s" msgstr "нужно быть владельцем отношения %s" -#: catalog/aclchk.c:3319 +#: catalog/aclchk.c:3310 #, c-format msgid "must be owner of sequence %s" msgstr "нужно быть владельцем последовательности %s" -#: catalog/aclchk.c:3321 +#: catalog/aclchk.c:3312 #, c-format msgid "must be owner of database %s" msgstr "нужно быть владельцем базы %s" -#: catalog/aclchk.c:3323 +#: catalog/aclchk.c:3314 #, c-format msgid "must be owner of function %s" msgstr "нужно быть владельцем функции %s" -#: catalog/aclchk.c:3325 +#: catalog/aclchk.c:3316 #, c-format msgid "must be owner of operator %s" msgstr "нужно быть владельцем оператора %s" -#: catalog/aclchk.c:3327 +#: catalog/aclchk.c:3318 #, c-format msgid "must be owner of type %s" msgstr "нужно быть владельцем типа %s" -#: catalog/aclchk.c:3329 +#: catalog/aclchk.c:3320 #, c-format msgid "must be owner of language %s" msgstr "нужно быть владельцем языка %s" -#: catalog/aclchk.c:3331 +#: catalog/aclchk.c:3322 #, c-format msgid "must be owner of large object %s" msgstr "нужно быть владельцем большого объекта %s" -#: catalog/aclchk.c:3333 +#: catalog/aclchk.c:3324 #, c-format msgid "must be owner of schema %s" msgstr "нужно быть владельцем схемы %s" -#: catalog/aclchk.c:3335 +#: catalog/aclchk.c:3326 #, c-format msgid "must be owner of operator class %s" msgstr "нужно быть владельцем класса операторов %s" -#: catalog/aclchk.c:3337 +#: catalog/aclchk.c:3328 #, c-format msgid "must be owner of operator family %s" msgstr "нужно быть владельцем семейства операторов %s" -#: catalog/aclchk.c:3339 +#: catalog/aclchk.c:3330 #, c-format msgid "must be owner of collation %s" msgstr "нужно быть владельцем правила сортировки %s" -#: catalog/aclchk.c:3341 +#: catalog/aclchk.c:3332 #, c-format msgid "must be owner of conversion %s" msgstr "нужно быть владельцем преобразования %s" -#: catalog/aclchk.c:3343 +#: catalog/aclchk.c:3334 #, c-format msgid "must be owner of tablespace %s" msgstr "нужно быть владельцем табличного пространства %s" -#: catalog/aclchk.c:3345 +#: catalog/aclchk.c:3336 #, c-format msgid "must be owner of text search dictionary %s" msgstr "нужно быть владельцем словаря текстового поиска %s" -#: catalog/aclchk.c:3347 +#: catalog/aclchk.c:3338 #, c-format msgid "must be owner of text search configuration %s" msgstr "нужно быть владельцем конфигурации текстового поиска %s" -#: catalog/aclchk.c:3349 +#: catalog/aclchk.c:3340 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "нужно быть владельцем обёртки сторонних данных %s" -#: catalog/aclchk.c:3351 +#: catalog/aclchk.c:3342 #, c-format msgid "must be owner of foreign server %s" msgstr "нужно быть \"владельцем\" стороннего сервера %s" -#: catalog/aclchk.c:3353 +#: catalog/aclchk.c:3344 #, c-format msgid "must be owner of event trigger %s" msgstr "нужно быть владельцем событийного триггера %s" -#: catalog/aclchk.c:3355 +#: catalog/aclchk.c:3346 #, c-format msgid "must be owner of extension %s" msgstr "нужно быть владельцем расширения %s" -#: catalog/aclchk.c:3397 +#: catalog/aclchk.c:3388 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "нет доступа к колонке \"%s\" отношения \"%s\"" -#: catalog/aclchk.c:3437 -#, c-format -msgid "role with OID %u does not exist" -msgstr "роль с OID %u не существует" - -#: catalog/aclchk.c:3536 catalog/aclchk.c:3544 +#: catalog/aclchk.c:3507 catalog/aclchk.c:3515 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "атрибут %d отношения с OID %u не существует" -#: catalog/aclchk.c:3617 catalog/aclchk.c:4532 +#: catalog/aclchk.c:3588 catalog/aclchk.c:4502 #, c-format msgid "relation with OID %u does not exist" msgstr "отношение с OID %u не существует" -#: catalog/aclchk.c:3717 catalog/aclchk.c:4950 +#: catalog/aclchk.c:3687 catalog/aclchk.c:4920 #, c-format msgid "database with OID %u does not exist" msgstr "база данных с OID %u не существует" -#: catalog/aclchk.c:3771 catalog/aclchk.c:4610 tcop/fastpath.c:223 +#: catalog/aclchk.c:3741 catalog/aclchk.c:4580 tcop/fastpath.c:223 #, c-format msgid "function with OID %u does not exist" msgstr "функция с OID %u не существует" -#: catalog/aclchk.c:3825 catalog/aclchk.c:4636 +#: catalog/aclchk.c:3795 catalog/aclchk.c:4606 #, c-format msgid "language with OID %u does not exist" msgstr "язык с OID %u не существует" -#: catalog/aclchk.c:3989 catalog/aclchk.c:4708 +#: catalog/aclchk.c:3959 catalog/aclchk.c:4678 #, c-format msgid "schema with OID %u does not exist" msgstr "схема с OID %u не существует" -#: catalog/aclchk.c:4043 catalog/aclchk.c:4735 +#: catalog/aclchk.c:4013 catalog/aclchk.c:4705 #, c-format msgid "tablespace with OID %u does not exist" msgstr "табличное пространство с OID %u не существует" -#: catalog/aclchk.c:4101 catalog/aclchk.c:4869 commands/foreigncmds.c:302 +#: catalog/aclchk.c:4071 catalog/aclchk.c:4839 commands/foreigncmds.c:325 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "обёртка сторонних данных с OID %u не существует" -#: catalog/aclchk.c:4162 catalog/aclchk.c:4896 commands/foreigncmds.c:409 +#: catalog/aclchk.c:4132 catalog/aclchk.c:4866 commands/foreigncmds.c:461 #, c-format msgid "foreign server with OID %u does not exist" msgstr "сторонний сервер с OID %u не существует" -#: catalog/aclchk.c:4221 catalog/aclchk.c:4235 catalog/aclchk.c:4558 +#: catalog/aclchk.c:4191 catalog/aclchk.c:4205 catalog/aclchk.c:4528 #, c-format msgid "type with OID %u does not exist" msgstr "тип с OID %u не существует" -#: catalog/aclchk.c:4584 +#: catalog/aclchk.c:4554 #, c-format msgid "operator with OID %u does not exist" msgstr "оператор с OID %u не существует" -#: catalog/aclchk.c:4761 +#: catalog/aclchk.c:4731 #, c-format msgid "operator class with OID %u does not exist" msgstr "класс операторов с OID %u не существует" -#: catalog/aclchk.c:4788 +#: catalog/aclchk.c:4758 #, c-format msgid "operator family with OID %u does not exist" msgstr "семейство операторов с OID %u не существует" -#: catalog/aclchk.c:4815 +#: catalog/aclchk.c:4785 #, c-format msgid "text search dictionary with OID %u does not exist" msgstr "словарь текстового поиска с OID %u не существует" -#: catalog/aclchk.c:4842 +#: catalog/aclchk.c:4812 #, c-format msgid "text search configuration with OID %u does not exist" msgstr "конфигурация текстового поиска с OID %u не существует" -#: catalog/aclchk.c:4923 commands/event_trigger.c:509 +#: catalog/aclchk.c:4893 commands/event_trigger.c:586 #, c-format msgid "event trigger with OID %u does not exist" msgstr "событийный триггер с OID %u не существует" -#: catalog/aclchk.c:4976 +#: catalog/aclchk.c:4946 #, c-format msgid "collation with OID %u does not exist" msgstr "правило сортировки с OID %u не существует" -#: catalog/aclchk.c:5002 +#: catalog/aclchk.c:4972 #, c-format msgid "conversion with OID %u does not exist" msgstr "преобразование с OID %u не существует" -#: catalog/aclchk.c:5043 +#: catalog/aclchk.c:5013 #, c-format msgid "extension with OID %u does not exist" msgstr "расширение с OID %u не существует" -#: catalog/dependency.c:626 +#: catalog/dependency.c:640 #, c-format msgid "cannot drop %s because %s requires it" msgstr "удалить объект %s нельзя, так как он нужен объекту %s" -#: catalog/dependency.c:629 +#: catalog/dependency.c:643 #, c-format msgid "You can drop %s instead." msgstr "Однако можно удалить %s." -#: catalog/dependency.c:790 catalog/pg_shdepend.c:573 +#: catalog/dependency.c:804 catalog/pg_shdepend.c:574 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "удалить объект %s нельзя, так как он нужен системе баз данных" -#: catalog/dependency.c:906 +#: catalog/dependency.c:920 #, c-format msgid "drop auto-cascades to %s" msgstr "удаление автоматически распространяется на объект %s" -#: catalog/dependency.c:918 catalog/dependency.c:927 +#: catalog/dependency.c:932 catalog/dependency.c:941 #, c-format msgid "%s depends on %s" msgstr "%s зависит от объекта %s" -#: catalog/dependency.c:939 catalog/dependency.c:948 +#: catalog/dependency.c:953 catalog/dependency.c:962 #, c-format msgid "drop cascades to %s" msgstr "удаление распространяется на объект %s" -#: catalog/dependency.c:956 catalog/pg_shdepend.c:684 +#: catalog/dependency.c:970 catalog/pg_shdepend.c:685 #, c-format msgid "" "\n" @@ -3246,24 +3613,24 @@ msgstr[2] "" "\n" "и ещё %d объектов (см. список в протоколе сервера)" -#: catalog/dependency.c:968 +#: catalog/dependency.c:982 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "удалить объект %s нельзя, так как от него зависят другие объекты" -#: catalog/dependency.c:972 catalog/dependency.c:979 +#: catalog/dependency.c:986 catalog/dependency.c:993 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Для удаления зависимых объектов используйте DROP ... CASCADE." -#: catalog/dependency.c:976 +#: catalog/dependency.c:990 #, 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:985 +#: catalog/dependency.c:999 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" @@ -3271,82 +3638,87 @@ msgstr[0] "удаление распространяется на ещё %d об msgstr[1] "удаление распространяется на ещё %d объекта" msgstr[2] "удаление распространяется на ещё %d объектов" -#: catalog/heap.c:274 +#: catalog/dependency.c:1622 +#, c-format +msgid "constant of the type 'regrole' cannot be used here" +msgstr "константу типа 'regrole' здесь использовать нельзя" + +#: catalog/heap.c:276 #, c-format msgid "permission denied to create \"%s.%s\"" msgstr "нет прав для создания отношения \"%s.%s\"" -#: catalog/heap.c:276 +#: catalog/heap.c:278 #, c-format msgid "System catalog modifications are currently disallowed." msgstr "Изменение системного каталога в текущем состоянии запрещено." -#: catalog/heap.c:411 commands/tablecmds.c:1402 commands/tablecmds.c:1844 -#: commands/tablecmds.c:4583 +#: catalog/heap.c:413 commands/tablecmds.c:1432 commands/tablecmds.c:1885 +#: commands/tablecmds.c:4786 #, c-format msgid "tables can have at most %d columns" msgstr "максимальное число колонок в таблице: %d" -#: catalog/heap.c:428 commands/tablecmds.c:4839 +#: catalog/heap.c:430 commands/tablecmds.c:5045 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "имя колонки \"%s\" конфликтует с системной колонкой" -#: catalog/heap.c:444 +#: catalog/heap.c:446 #, c-format msgid "column name \"%s\" specified more than once" msgstr "имя колонки \"%s\" указано неоднократно" -#: catalog/heap.c:494 +#: catalog/heap.c:496 #, c-format msgid "column \"%s\" has type \"unknown\"" msgstr "колонка \"%s\" имеет неизвестный тип (UNKNOWN)" -#: catalog/heap.c:495 +#: catalog/heap.c:497 #, c-format msgid "Proceeding with relation creation anyway." msgstr "Несмотря на это, создание отношения продолжается." -#: catalog/heap.c:508 +#: catalog/heap.c:510 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "колонка \"%s\" имеет псевдотип %s" -#: catalog/heap.c:538 +#: catalog/heap.c:540 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "составной тип %s не может содержать себя же" -#: catalog/heap.c:580 commands/createas.c:343 +#: catalog/heap.c:582 commands/createas.c:373 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "" "для колонки \"%s\" с сортируемым типом %s не удалось получить правило " "сортировки" -#: catalog/heap.c:582 commands/createas.c:345 commands/indexcmds.c:1072 +#: catalog/heap.c:584 commands/createas.c:375 commands/indexcmds.c:1087 #: commands/view.c:116 regex/regc_pg_locale.c:262 utils/adt/formatting.c:1514 #: utils/adt/formatting.c:1566 utils/adt/formatting.c:1634 #: utils/adt/formatting.c:1686 utils/adt/formatting.c:1755 -#: utils/adt/formatting.c:1819 utils/adt/like.c:212 utils/adt/selfuncs.c:5221 -#: utils/adt/varlena.c:1381 +#: utils/adt/formatting.c:1819 utils/adt/like.c:212 utils/adt/selfuncs.c:5231 +#: utils/adt/varlena.c:1411 utils/adt/varlena.c:1800 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Задайте правило сравнения явно в предложении COLLATE." -#: catalog/heap.c:1056 catalog/index.c:778 commands/tablecmds.c:2549 +#: catalog/heap.c:1064 catalog/index.c:793 commands/tablecmds.c:2612 #, c-format msgid "relation \"%s\" already exists" msgstr "отношение \"%s\" уже существует" -#: catalog/heap.c:1072 catalog/pg_type.c:403 catalog/pg_type.c:706 -#: commands/typecmds.c:239 commands/typecmds.c:739 commands/typecmds.c:1090 -#: commands/typecmds.c:1308 commands/typecmds.c:2060 +#: catalog/heap.c:1080 catalog/pg_type.c:412 catalog/pg_type.c:722 +#: commands/typecmds.c:235 commands/typecmds.c:782 commands/typecmds.c:1133 +#: commands/typecmds.c:1355 commands/typecmds.c:2109 #, c-format msgid "type \"%s\" already exists" msgstr "тип \"%s\" уже существует" -#: catalog/heap.c:1073 +#: catalog/heap.c:1081 #, c-format msgid "" "A relation has an associated type of the same name, so you must use a name " @@ -3355,61 +3727,66 @@ msgstr "" "С отношением уже связан тип с таким же именем; выберите имя, не " "конфликтующее с существующими типами." -#: catalog/heap.c:2258 +#: catalog/heap.c:1109 +#, c-format +msgid "pg_class heap OID value not set when in binary upgrade mode" +msgstr "значение OID кучи в pg_class не задано в режиме двоичного обновления" + +#: catalog/heap.c:2289 #, c-format msgid "check constraint \"%s\" already exists" msgstr "ограничение-проверка \"%s\" уже существует" -#: catalog/heap.c:2411 catalog/pg_constraint.c:650 commands/tablecmds.c:5734 +#: catalog/heap.c:2444 catalog/pg_constraint.c:652 commands/tablecmds.c:6020 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "ограничение \"%s\" для отношения \"%s\" уже существует" -#: catalog/heap.c:2421 +#: catalog/heap.c:2454 #, c-format msgid "" "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "" "ограничение \"%s\" конфликтует с ненаследуемым ограничением таблицы \"%s\"" -#: catalog/heap.c:2435 +#: catalog/heap.c:2468 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "слияние ограничения \"%s\" с унаследованным определением" -#: catalog/heap.c:2528 +#: catalog/heap.c:2561 #, c-format msgid "cannot use column references in default expression" msgstr "в выражении по умолчанию нельзя ссылаться на колонки" -#: catalog/heap.c:2539 +#: catalog/heap.c:2572 #, c-format msgid "default expression must not return a set" msgstr "выражение по умолчанию не может возвращать множество" -#: catalog/heap.c:2558 rewrite/rewriteHandler.c:1066 +#: catalog/heap.c:2591 rewrite/rewriteHandler.c:1077 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "колонка \"%s\" имеет тип %s, но тип выражения по умолчанию %s" -#: catalog/heap.c:2563 commands/prepare.c:374 parser/parse_node.c:411 -#: parser/parse_target.c:509 parser/parse_target.c:758 -#: parser/parse_target.c:768 rewrite/rewriteHandler.c:1071 +#: catalog/heap.c:2596 commands/prepare.c:374 parser/parse_node.c:411 +#: parser/parse_target.c:528 parser/parse_target.c:778 +#: parser/parse_target.c:788 rewrite/rewriteHandler.c:1082 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Перепишите выражение или преобразуйте его тип." -#: catalog/heap.c:2610 +#: catalog/heap.c:2643 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "в ограничении-проверке можно ссылаться только на таблицу \"%s\"" -#: catalog/heap.c:2850 +#: catalog/heap.c:2883 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "неподдерживаемое сочетание внешнего ключа с ON COMMIT" -#: catalog/heap.c:2851 +#: catalog/heap.c:2884 #, c-format msgid "" "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT " @@ -3417,358 +3794,478 @@ msgid "" msgstr "" "Таблица \"%s\" ссылается на \"%s\", и для них задан разный режим ON COMMIT." -#: catalog/heap.c:2856 +#: catalog/heap.c:2889 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "опустошить таблицу, на которую ссылается внешний ключ, нельзя" -#: catalog/heap.c:2857 +#: catalog/heap.c:2890 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Таблица \"%s\" ссылается на \"%s\"." -#: catalog/heap.c:2859 +#: catalog/heap.c:2892 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "" "Опустошите таблицу \"%s\" параллельно или используйте TRUNCATE ... CASCADE." -#: catalog/index.c:204 parser/parse_utilcmd.c:1393 parser/parse_utilcmd.c:1479 +#: catalog/index.c:205 parser/parse_utilcmd.c:1436 parser/parse_utilcmd.c:1522 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "таблица \"%s\" не может иметь несколько первичных ключей" -#: catalog/index.c:222 +#: catalog/index.c:223 #, c-format msgid "primary keys cannot be expressions" msgstr "первичные ключи не могут быть выражениями" -#: catalog/index.c:739 catalog/index.c:1143 +#: catalog/index.c:743 catalog/index.c:1161 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "" "пользовательские индексы в таблицах системного каталога не поддерживаются" -#: catalog/index.c:749 +#: catalog/index.c:753 #, c-format msgid "concurrent index creation on system catalog tables is not supported" msgstr "" "параллельное создание индекса в таблицах системного каталога не " "поддерживается" -#: catalog/index.c:767 +#: catalog/index.c:771 #, c-format msgid "shared indexes cannot be created after initdb" msgstr "нельзя создать разделяемые индексы после initdb" -#: catalog/index.c:1403 +#: catalog/index.c:785 commands/createas.c:100 commands/sequence.c:141 +#: parser/parse_utilcmd.c:185 +#, c-format +msgid "relation \"%s\" already exists, skipping" +msgstr "отношение \"%s\" уже существует, пропускается" + +#: catalog/index.c:821 +#, c-format +msgid "pg_class index OID value not set when in binary upgrade mode" +msgstr "" +"значение OID индекса в pg_class не задано в режиме двоичного обновления" + +#: catalog/index.c:1423 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY должен быть первым действием в транзакции" -#: catalog/index.c:1936 +#: catalog/index.c:2007 #, c-format msgid "building index \"%s\" on table \"%s\"" msgstr "создание индекса \"%s\" для таблицы \"%s\"" -#: catalog/index.c:3121 +#: catalog/index.c:3228 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "переиндексировать временные таблицы других сеансов нельзя" -#: catalog/namespace.c:247 catalog/namespace.c:445 catalog/namespace.c:539 -#: commands/trigger.c:4492 +#: catalog/index.c:3353 +#, c-format +msgid "index \"%s\" was reindexed" +msgstr "индекс \"%s\" был перестроен" + +#: catalog/index.c:3355 commands/vacuumlazy.c:1131 commands/vacuumlazy.c:1207 +#: commands/vacuumlazy.c:1374 commands/vacuumlazy.c:1546 +#, c-format +msgid "%s." +msgstr "%s." + +#: catalog/namespace.c:249 catalog/namespace.c:447 catalog/namespace.c:541 +#: commands/trigger.c:4528 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "ссылки между базами не реализованы: \"%s.%s.%s\"" -#: catalog/namespace.c:304 +#: catalog/namespace.c:306 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "для временных таблиц имя схемы не указывается" -#: catalog/namespace.c:383 +#: catalog/namespace.c:385 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "не удалось получить блокировку таблицы \"%s.%s\"" -#: catalog/namespace.c:388 commands/lockcmds.c:146 +#: catalog/namespace.c:390 commands/lockcmds.c:146 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "не удалось получить блокировку таблицы \"%s\"" -#: catalog/namespace.c:412 parser/parse_relation.c:964 +#: catalog/namespace.c:414 parser/parse_relation.c:1131 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "отношение \"%s.%s\" не существует" -#: catalog/namespace.c:417 parser/parse_relation.c:977 -#: parser/parse_relation.c:985 utils/adt/regproc.c:974 +#: catalog/namespace.c:419 parser/parse_relation.c:1144 +#: parser/parse_relation.c:1152 utils/adt/regproc.c:1035 #, c-format msgid "relation \"%s\" does not exist" msgstr "отношение \"%s\" не существует" -#: catalog/namespace.c:485 catalog/namespace.c:2849 commands/extension.c:1396 -#: commands/extension.c:1402 +#: catalog/namespace.c:487 catalog/namespace.c:2852 commands/extension.c:1394 +#: commands/extension.c:1400 #, c-format msgid "no schema has been selected to create in" msgstr "схема для создания объектов не выбрана" -#: catalog/namespace.c:637 catalog/namespace.c:650 +#: catalog/namespace.c:639 catalog/namespace.c:652 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "во временных схемах других сеансов нельзя создавать отношения" -#: catalog/namespace.c:641 +#: catalog/namespace.c:643 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "создавать временные отношения можно только во временных схемах" -#: catalog/namespace.c:656 +#: catalog/namespace.c:658 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "во временных схемах можно создавать только временные отношения" -#: catalog/namespace.c:2151 +#: catalog/namespace.c:2154 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "анализатор текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2277 +#: catalog/namespace.c:2280 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "словарь текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2404 +#: catalog/namespace.c:2407 #, c-format msgid "text search template \"%s\" does not exist" msgstr "шаблон текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2530 commands/tsearchcmds.c:1168 -#: utils/cache/ts_cache.c:616 +#: catalog/namespace.c:2533 commands/tsearchcmds.c:1197 +#: utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "конфигурация текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2643 parser/parse_expr.c:788 parser/parse_target.c:1110 +#: catalog/namespace.c:2646 parser/parse_expr.c:789 parser/parse_target.c:1130 #, c-format msgid "cross-database references are not implemented: %s" msgstr "ссылки между базами не реализованы: %s" -#: catalog/namespace.c:2649 parser/parse_expr.c:795 parser/parse_target.c:1117 -#: gram.y:12556 gram.y:13788 +#: catalog/namespace.c:2652 parser/parse_expr.c:796 parser/parse_target.c:1137 +#: gram.y:13320 gram.y:14674 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "неверное полное имя (слишком много компонентов): %s" -#: catalog/namespace.c:2783 +#: catalog/namespace.c:2786 #, c-format msgid "%s is already in schema \"%s\"" msgstr "объект %s уже существует в схеме \"%s\"" -#: catalog/namespace.c:2791 +#: catalog/namespace.c:2794 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "перемещать объекты в/из внутренних схем нельзя" -#: catalog/namespace.c:2797 +#: catalog/namespace.c:2800 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "перемещать объекты в/из схем TOAST нельзя" -#: catalog/namespace.c:2870 commands/schemacmds.c:212 -#: commands/schemacmds.c:288 commands/tablecmds.c:708 +#: catalog/namespace.c:2873 commands/schemacmds.c:238 +#: commands/schemacmds.c:317 commands/tablecmds.c:734 #, c-format msgid "schema \"%s\" does not exist" msgstr "схема \"%s\" не существует" -#: catalog/namespace.c:2901 +#: catalog/namespace.c:2904 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "неверное имя отношения (слишком много компонентов): %s" -#: catalog/namespace.c:3342 +#: catalog/namespace.c:3369 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "правило сортировки \"%s\" для кодировки \"%s\" не существует" -#: catalog/namespace.c:3397 +#: catalog/namespace.c:3424 #, c-format msgid "conversion \"%s\" does not exist" msgstr "преобразование \"%s\" не существует" -#: catalog/namespace.c:3605 +#: catalog/namespace.c:3632 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "нет прав для создания временных таблиц в базе \"%s\"" -#: catalog/namespace.c:3621 +#: catalog/namespace.c:3648 #, c-format msgid "cannot create temporary tables during recovery" msgstr "создавать временные таблицы в процессе восстановления нельзя" -#: catalog/namespace.c:3865 commands/tablespace.c:1113 commands/variable.c:61 -#: replication/syncrep.c:677 utils/misc/guc.c:9012 +#: catalog/namespace.c:3654 +#, c-format +msgid "cannot create temporary tables in parallel mode" +msgstr "создавать временные таблицы в параллельном режиме нельзя" + +#: catalog/namespace.c:3898 commands/tablespace.c:1158 commands/variable.c:62 +#: replication/syncrep.c:700 utils/misc/guc.c:9665 #, c-format msgid "List syntax is invalid." msgstr "Ошибка синтаксиса в списке." -#: catalog/objectaddress.c:732 +#: catalog/objectaddress.c:1021 msgid "database name cannot be qualified" msgstr "имя базы данных не может быть составным" -#: catalog/objectaddress.c:735 commands/extension.c:2423 +#: catalog/objectaddress.c:1024 commands/extension.c:2423 #, c-format msgid "extension name cannot be qualified" msgstr "имя расширения не может быть составным" -#: catalog/objectaddress.c:738 +#: catalog/objectaddress.c:1027 msgid "tablespace name cannot be qualified" msgstr "имя табличного пространства не может быть составным" -#: catalog/objectaddress.c:741 +#: catalog/objectaddress.c:1030 msgid "role name cannot be qualified" msgstr "имя роли не может быть составным" -#: catalog/objectaddress.c:744 +#: catalog/objectaddress.c:1033 msgid "schema name cannot be qualified" msgstr "имя схемы не может быть составным" -#: catalog/objectaddress.c:747 +#: catalog/objectaddress.c:1036 msgid "language name cannot be qualified" msgstr "имя языка не может быть составным" -#: catalog/objectaddress.c:750 +#: catalog/objectaddress.c:1039 msgid "foreign-data wrapper name cannot be qualified" msgstr "имя обёртки сторонних данных не может быть составным" -#: catalog/objectaddress.c:753 +#: catalog/objectaddress.c:1042 msgid "server name cannot be qualified" msgstr "имя сервера не может быть составным" -#: catalog/objectaddress.c:756 +#: catalog/objectaddress.c:1045 msgid "event trigger name cannot be qualified" msgstr "имя событийного триггера не может быть составным" -#: catalog/objectaddress.c:869 commands/lockcmds.c:94 commands/tablecmds.c:208 -#: commands/tablecmds.c:1263 commands/tablecmds.c:4130 -#: commands/tablecmds.c:7601 +#: catalog/objectaddress.c:1158 commands/lockcmds.c:94 commands/policy.c:93 +#: commands/policy.c:423 commands/tablecmds.c:214 commands/tablecmds.c:1293 +#: commands/tablecmds.c:4326 commands/tablecmds.c:7938 #, c-format msgid "\"%s\" is not a table" msgstr "\"%s\" - это не таблица" -#: catalog/objectaddress.c:876 commands/tablecmds.c:220 -#: commands/tablecmds.c:4154 commands/tablecmds.c:11249 commands/view.c:154 +#: catalog/objectaddress.c:1165 commands/tablecmds.c:226 +#: commands/tablecmds.c:4350 commands/tablecmds.c:11895 commands/view.c:155 #, c-format msgid "\"%s\" is not a view" msgstr "\"%s\" - это не представление" -#: catalog/objectaddress.c:883 commands/matview.c:171 commands/tablecmds.c:226 -#: commands/tablecmds.c:11254 +#: catalog/objectaddress.c:1172 commands/matview.c:174 +#: commands/tablecmds.c:232 commands/tablecmds.c:11900 #, c-format msgid "\"%s\" is not a materialized view" msgstr "\"%s\" - это не материализованное представление" -#: catalog/objectaddress.c:890 commands/tablecmds.c:244 -#: commands/tablecmds.c:4157 commands/tablecmds.c:11259 +#: catalog/objectaddress.c:1179 commands/tablecmds.c:250 +#: commands/tablecmds.c:4353 commands/tablecmds.c:11905 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" - это не сторонняя таблица" -#: catalog/objectaddress.c:1028 +#: catalog/objectaddress.c:1324 catalog/objectaddress.c:1377 #, c-format msgid "column name must be qualified" msgstr "имя колонки нужно указать в полной форме" -#: catalog/objectaddress.c:1083 commands/functioncmds.c:126 -#: commands/tablecmds.c:236 commands/typecmds.c:3253 parser/parse_type.c:222 -#: parser/parse_type.c:251 parser/parse_type.c:795 utils/adt/acl.c:4374 -#: utils/adt/regproc.c:1165 +#: catalog/objectaddress.c:1420 +#, c-format +msgid "default value for column \"%s\" of relation \"%s\" does not exist" +msgstr "" +"значение по умолчанию для колонки \"%s\" отношения \"%s\" не существует" + +#: catalog/objectaddress.c:1460 commands/functioncmds.c:128 +#: commands/tablecmds.c:242 commands/typecmds.c:3210 parser/parse_type.c:227 +#: parser/parse_type.c:256 parser/parse_type.c:824 utils/adt/acl.c:4373 +#: utils/adt/regproc.c:1226 #, c-format msgid "type \"%s\" does not exist" msgstr "тип \"%s\" не существует" -#: catalog/objectaddress.c:1240 libpq/be-fsstubs.c:352 +#: catalog/objectaddress.c:1577 #, c-format -msgid "must be owner of large object %u" -msgstr "нужно быть владельцем большого объекта %u" +msgid "operator %d (%s, %s) of %s does not exist" +msgstr "оператор %d (%s, %s) из семейства %s не существует" -#: catalog/objectaddress.c:1255 commands/functioncmds.c:1328 +#: catalog/objectaddress.c:1606 #, c-format -msgid "must be owner of type %s or type %s" -msgstr "это разрешено только владельцу типа %s или %s" +msgid "function %d (%s, %s) of %s does not exist" +msgstr "функция %d (%s, %s) из семейства %s не существует" -#: catalog/objectaddress.c:1286 catalog/objectaddress.c:1302 +#: catalog/objectaddress.c:1655 catalog/objectaddress.c:1681 #, c-format -msgid "must be superuser" -msgstr "требуются права суперпользователя" +msgid "user mapping for user \"%s\" in server \"%s\" does not exist" +msgstr "сопоставление для пользователя \"%s\" на сервере \"%s\" не существует" -#: catalog/objectaddress.c:1293 +#: catalog/objectaddress.c:1670 commands/foreigncmds.c:430 +#: commands/foreigncmds.c:997 commands/foreigncmds.c:1359 +#: foreign/foreign.c:691 #, c-format -msgid "must have CREATEROLE privilege" -msgstr "требуется право CREATEROLE" +msgid "server \"%s\" does not exist" +msgstr "сервер \"%s\" не существует" -#: catalog/objectaddress.c:1539 +#: catalog/objectaddress.c:1742 #, c-format -msgid " column %s" -msgstr " колонка %s" +msgid "unrecognized default ACL object type %c" +msgstr "нераспознанный тип объекта ACL по умолчанию: %c" -#: catalog/objectaddress.c:1545 +#: catalog/objectaddress.c:1743 #, c-format -msgid "function %s" -msgstr "функция %s" +msgid "Valid object types are 'r', 'S', 'f', and 'T'." +msgstr "Допустимые значения: 'r', 'S', 'f' и 'T'." -#: catalog/objectaddress.c:1550 +#: catalog/objectaddress.c:1789 #, c-format -msgid "type %s" -msgstr "тип %s" +msgid "default ACL for user \"%s\" in schema \"%s\" on %s does not exist" +msgstr "" +"ACL по умолчанию для пользователя \"%s\" в схеме \"%s\" для объекта %s не " +"существует" -#: catalog/objectaddress.c:1580 +#: catalog/objectaddress.c:1794 #, c-format -msgid "cast from %s to %s" -msgstr "преобразование типа из %s в %s" +msgid "default ACL for user \"%s\" on %s does not exist" +msgstr "" +"ACL по умолчанию для пользователя \"%s\" и для объекта %s не существует" -#: catalog/objectaddress.c:1600 +#: catalog/objectaddress.c:1821 catalog/objectaddress.c:1877 +#: catalog/objectaddress.c:1932 #, c-format -msgid "collation %s" -msgstr "правило сортировки %s" +msgid "name or argument lists may not contain nulls" +msgstr "списки имён и аргументов не должны содержать NULL" -#: catalog/objectaddress.c:1624 +#: catalog/objectaddress.c:1853 +#, c-format +msgid "unsupported object type \"%s\"" +msgstr "неподдерживаемый тип объекта: \"%s\"" + +#: catalog/objectaddress.c:1873 catalog/objectaddress.c:1891 +#, c-format +msgid "name list length must be exactly %d" +msgstr "длина списка имён должна быть равна %d" + +#: catalog/objectaddress.c:1895 +#, c-format +msgid "large object OID may not be null" +msgstr "OID большого объекта не может быть NULL" + +#: catalog/objectaddress.c:1904 +#, c-format +msgid "name list must be of length at least %d" +msgstr "длина списка имён должна быть не меньше %d" + +#: catalog/objectaddress.c:1957 catalog/objectaddress.c:1977 +#, c-format +msgid "argument list length must be exactly %d" +msgstr "длина списка аргументов должна быть равна %d" + +#: catalog/objectaddress.c:1964 catalog/objectaddress.c:1971 +#, c-format +msgid "name list length must be at least %d" +msgstr "длина списка аргументов должна быть не меньше %d" + +#: catalog/objectaddress.c:2113 libpq/be-fsstubs.c:352 +#, c-format +msgid "must be owner of large object %u" +msgstr "нужно быть владельцем большого объекта %u" + +#: catalog/objectaddress.c:2128 commands/functioncmds.c:1386 +#, c-format +msgid "must be owner of type %s or type %s" +msgstr "это разрешено только владельцу типа %s или %s" + +#: catalog/objectaddress.c:2168 catalog/objectaddress.c:2184 +#, c-format +msgid "must be superuser" +msgstr "требуются права суперпользователя" + +#: catalog/objectaddress.c:2175 +#, c-format +msgid "must have CREATEROLE privilege" +msgstr "требуется право CREATEROLE" + +#: catalog/objectaddress.c:2254 +#, c-format +msgid "unrecognized object type \"%s\"" +msgstr "нераспознанный тип объекта \"%s\"" + +#: catalog/objectaddress.c:2449 +#, c-format +msgid " column %s" +msgstr " колонка %s" + +#: catalog/objectaddress.c:2455 +#, c-format +msgid "function %s" +msgstr "функция %s" + +#: catalog/objectaddress.c:2460 +#, c-format +msgid "type %s" +msgstr "тип %s" + +#: catalog/objectaddress.c:2490 +#, c-format +msgid "cast from %s to %s" +msgstr "приведение %s к %s" + +#: catalog/objectaddress.c:2510 +#, c-format +msgid "collation %s" +msgstr "правило сортировки %s" + +#: catalog/objectaddress.c:2534 #, c-format msgid "constraint %s on %s" msgstr "ограничение %s в отношении %s" -#: catalog/objectaddress.c:1630 +#: catalog/objectaddress.c:2540 #, c-format msgid "constraint %s" msgstr "ограничение %s" -#: catalog/objectaddress.c:1647 +#: catalog/objectaddress.c:2557 #, c-format msgid "conversion %s" msgstr "преобразование %s" -#: catalog/objectaddress.c:1684 +#: catalog/objectaddress.c:2594 #, c-format msgid "default for %s" msgstr "значение по умолчанию, %s" -#: catalog/objectaddress.c:1701 +#: catalog/objectaddress.c:2603 #, c-format msgid "language %s" msgstr "язык %s" -#: catalog/objectaddress.c:1707 +#: catalog/objectaddress.c:2608 #, c-format msgid "large object %u" msgstr "большой объект %u" -#: catalog/objectaddress.c:1712 +#: catalog/objectaddress.c:2613 #, c-format msgid "operator %s" msgstr "оператор %s" -#: catalog/objectaddress.c:1744 +#: catalog/objectaddress.c:2645 #, c-format msgid "operator class %s for access method %s" msgstr "класс операторов %s для метода доступа %s" @@ -3777,7 +4274,7 @@ msgstr "класс операторов %s для метода доступа %s #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:1794 +#: catalog/objectaddress.c:2695 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "оператор %d (%s, %s) из семейства \"%s\": %s" @@ -3786,163 +4283,173 @@ 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:1844 +#: catalog/objectaddress.c:2745 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "функция %d (%s, %s) из семейства \"%s\": %s" -#: catalog/objectaddress.c:1884 +#: catalog/objectaddress.c:2785 #, c-format msgid "rule %s on " msgstr "правило %s для отношения: " -#: catalog/objectaddress.c:1919 +#: catalog/objectaddress.c:2807 +#, c-format +msgid "transform for %s language %s" +msgstr "преобразование для %s, языка %s" + +#: catalog/objectaddress.c:2841 #, c-format msgid "trigger %s on " msgstr "триггер %s в отношении: " -#: catalog/objectaddress.c:1936 +#: catalog/objectaddress.c:2858 #, c-format msgid "schema %s" msgstr "схема %s" -#: catalog/objectaddress.c:1949 +#: catalog/objectaddress.c:2871 #, c-format msgid "text search parser %s" msgstr "анализатор текстового поиска %s" -#: catalog/objectaddress.c:1964 +#: catalog/objectaddress.c:2886 #, c-format msgid "text search dictionary %s" msgstr "словарь текстового поиска %s" -#: catalog/objectaddress.c:1979 +#: catalog/objectaddress.c:2901 #, c-format msgid "text search template %s" msgstr "шаблон текстового поиска %s" -#: catalog/objectaddress.c:1994 +#: catalog/objectaddress.c:2916 #, c-format msgid "text search configuration %s" msgstr "конфигурация текстового поиска %s" -#: catalog/objectaddress.c:2002 +#: catalog/objectaddress.c:2924 #, c-format msgid "role %s" msgstr "роль %s" -#: catalog/objectaddress.c:2015 +#: catalog/objectaddress.c:2937 #, c-format msgid "database %s" msgstr "база данных %s" -#: catalog/objectaddress.c:2027 +#: catalog/objectaddress.c:2949 #, c-format msgid "tablespace %s" msgstr "табличное пространство %s" -#: catalog/objectaddress.c:2036 +#: catalog/objectaddress.c:2958 #, c-format msgid "foreign-data wrapper %s" msgstr "обёртка сторонних данных %s" -#: catalog/objectaddress.c:2045 +#: catalog/objectaddress.c:2967 #, c-format msgid "server %s" msgstr "сервер %s" -#: catalog/objectaddress.c:2073 +#: catalog/objectaddress.c:2995 #, c-format msgid "user mapping for %s on server %s" msgstr "сопоставление для пользователя %s на сервере %s" -#: catalog/objectaddress.c:2108 +#: catalog/objectaddress.c:3030 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "права по умолчанию для новых отношений, принадлежащих роли %s" -#: catalog/objectaddress.c:2113 +#: catalog/objectaddress.c:3035 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "" "права по умолчанию для новых последовательностей, принадлежащих роли %s" -#: catalog/objectaddress.c:2118 +#: catalog/objectaddress.c:3040 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "права по умолчанию для новых функций, принадлежащих роли %s" -#: catalog/objectaddress.c:2123 +#: catalog/objectaddress.c:3045 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "права по умолчанию для новых типов, принадлежащих роли %s" -#: catalog/objectaddress.c:2129 +#: catalog/objectaddress.c:3051 #, c-format msgid "default privileges belonging to role %s" msgstr "права по умолчанию для новых объектов, принадлежащих роли %s" -#: catalog/objectaddress.c:2137 +#: catalog/objectaddress.c:3059 #, c-format msgid " in schema %s" msgstr " в схеме %s" -#: catalog/objectaddress.c:2154 +#: catalog/objectaddress.c:3076 #, c-format msgid "extension %s" msgstr "расширение %s" -#: catalog/objectaddress.c:2167 +#: catalog/objectaddress.c:3089 #, c-format msgid "event trigger %s" msgstr "событийный триггер %s" -#: catalog/objectaddress.c:2227 +#: catalog/objectaddress.c:3121 +#, c-format +msgid "policy %s on " +msgstr "политика %s отношения " + +#: catalog/objectaddress.c:3184 #, c-format msgid "table %s" msgstr "таблица %s" -#: catalog/objectaddress.c:2231 +#: catalog/objectaddress.c:3188 #, c-format msgid "index %s" msgstr "индекс %s" -#: catalog/objectaddress.c:2235 +#: catalog/objectaddress.c:3192 #, c-format msgid "sequence %s" msgstr "последовательность %s" -#: catalog/objectaddress.c:2239 +#: catalog/objectaddress.c:3196 #, c-format msgid "toast table %s" msgstr "TOAST-таблица %s" -#: catalog/objectaddress.c:2243 +#: catalog/objectaddress.c:3200 #, c-format msgid "view %s" msgstr "представление %s" -#: catalog/objectaddress.c:2247 +#: catalog/objectaddress.c:3204 #, c-format msgid "materialized view %s" msgstr "материализованное представление %s" -#: catalog/objectaddress.c:2251 +#: catalog/objectaddress.c:3208 #, c-format msgid "composite type %s" msgstr "составной тип %s" -#: catalog/objectaddress.c:2255 +#: catalog/objectaddress.c:3212 #, c-format msgid "foreign table %s" msgstr "сторонняя таблица %s" -#: catalog/objectaddress.c:2260 +#: catalog/objectaddress.c:3217 #, c-format msgid "relation %s" msgstr "отношение %s" -#: catalog/objectaddress.c:2297 +#: catalog/objectaddress.c:3254 #, c-format msgid "operator family %s for access method %s" msgstr "семейство операторов %s для метода доступа %s" @@ -4004,7 +4511,7 @@ msgstr "" msgid "return type of inverse transition function %s is not %s" msgstr "обратная функция перехода %s должна возвращать тип %s" -#: catalog/pg_aggregate.c:344 executor/nodeWindowAgg.c:2301 +#: catalog/pg_aggregate.c:344 executor/nodeWindowAgg.c:2302 #, c-format msgid "" "strictness of aggregate's forward and inverse transition functions must match" @@ -4018,7 +4525,7 @@ msgstr "" "финальная функция с дополнительными аргументами не должна объявляться как " "строгая (STRICT)" -#: catalog/pg_aggregate.c:410 catalog/pg_proc.c:241 catalog/pg_proc.c:248 +#: catalog/pg_aggregate.c:410 catalog/pg_proc.c:245 catalog/pg_proc.c:252 #, c-format msgid "cannot determine result data type" msgstr "не удалось определить тип результата" @@ -4032,12 +4539,12 @@ msgstr "" "Агрегатная функция, возвращающая полиморфный тип, должна иметь минимум один " "полиморфный аргумент." -#: catalog/pg_aggregate.c:423 catalog/pg_proc.c:254 +#: catalog/pg_aggregate.c:423 catalog/pg_proc.c:258 #, c-format msgid "unsafe use of pseudo-type \"internal\"" msgstr "небезопасное использование псевдотипа \"internal\"" -#: catalog/pg_aggregate.c:424 catalog/pg_proc.c:255 +#: catalog/pg_aggregate.c:424 catalog/pg_proc.c:259 #, c-format msgid "" "A function returning \"internal\" must have at least one \"internal\" " @@ -4062,29 +4569,29 @@ msgstr "" "оператор сортировки можно указать только для агрегатных функций с одним " "аргументом" -#: catalog/pg_aggregate.c:701 commands/typecmds.c:1657 -#: commands/typecmds.c:1708 commands/typecmds.c:1739 commands/typecmds.c:1762 -#: commands/typecmds.c:1783 commands/typecmds.c:1810 commands/typecmds.c:1837 -#: commands/typecmds.c:1914 commands/typecmds.c:1956 parser/parse_func.c:357 -#: parser/parse_func.c:386 parser/parse_func.c:411 parser/parse_func.c:425 -#: parser/parse_func.c:500 parser/parse_func.c:511 parser/parse_func.c:1907 +#: catalog/pg_aggregate.c:700 commands/typecmds.c:1702 +#: commands/typecmds.c:1753 commands/typecmds.c:1784 commands/typecmds.c:1807 +#: commands/typecmds.c:1828 commands/typecmds.c:1855 commands/typecmds.c:1882 +#: commands/typecmds.c:1959 commands/typecmds.c:2001 parser/parse_func.c:364 +#: parser/parse_func.c:393 parser/parse_func.c:418 parser/parse_func.c:432 +#: parser/parse_func.c:507 parser/parse_func.c:518 parser/parse_func.c:1920 #, c-format msgid "function %s does not exist" msgstr "функция %s не существует" -#: catalog/pg_aggregate.c:707 +#: catalog/pg_aggregate.c:706 #, c-format msgid "function %s returns a set" msgstr "функция %s возвращает множество" -#: catalog/pg_aggregate.c:722 +#: catalog/pg_aggregate.c:721 #, c-format msgid "function %s must accept VARIADIC ANY to be used in this aggregate" msgstr "" "для использования в этой агрегатной функции функция %s должна принимать " "VARIADIC ANY" -#: catalog/pg_aggregate.c:746 +#: catalog/pg_aggregate.c:745 #, c-format msgid "function %s requires run-time type coercion" msgstr "функции %s требуется приведение типов во время выполнения" @@ -4099,42 +4606,42 @@ msgstr "правило сортировки \"%s\" для кодировки \"% msgid "collation \"%s\" already exists" msgstr "правило сортировки \"%s\" уже существует" -#: catalog/pg_constraint.c:659 +#: catalog/pg_constraint.c:661 #, c-format msgid "constraint \"%s\" for domain %s already exists" msgstr "ограничение \"%s\" для домена %s уже существует" -#: catalog/pg_constraint.c:811 +#: catalog/pg_constraint.c:813 #, c-format msgid "table \"%s\" has multiple constraints named \"%s\"" msgstr "таблица \"%s\" содержит несколько ограничений с именем \"%s\"" -#: catalog/pg_constraint.c:823 +#: catalog/pg_constraint.c:825 #, c-format msgid "constraint \"%s\" for table \"%s\" does not exist" msgstr "ограничение \"%s\" для таблицы \"%s\" не существует" -#: catalog/pg_constraint.c:869 +#: catalog/pg_constraint.c:871 #, c-format msgid "domain \"%s\" has multiple constraints named \"%s\"" msgstr "домен \"%s\" содержит несколько ограничений с именем \"%s\"" -#: catalog/pg_constraint.c:881 +#: catalog/pg_constraint.c:883 #, c-format msgid "constraint \"%s\" for domain \"%s\" does not exist" msgstr "ограничение \"%s\" для домена \"%s\" не существует" -#: catalog/pg_conversion.c:67 +#: catalog/pg_conversion.c:66 #, c-format msgid "conversion \"%s\" already exists" msgstr "преобразование \"%s\" уже существует" -#: catalog/pg_conversion.c:80 +#: catalog/pg_conversion.c:79 #, c-format msgid "default conversion for %s to %s already exists" msgstr "преобразование по умолчанию из %s в %s уже существует" -#: catalog/pg_depend.c:165 commands/extension.c:2926 +#: catalog/pg_depend.c:165 commands/extension.c:2945 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s уже относится к расширению \"%s\"" @@ -4170,86 +4677,91 @@ msgstr "метка перечисления \"%s\" уже существует" msgid "\"%s\" is not an existing enum label" msgstr "в перечислении нет метки\"%s\"" -#: catalog/pg_enum.c:354 +#: catalog/pg_enum.c:349 +#, c-format +msgid "pg_enum OID value not set when in binary upgrade mode" +msgstr "значение OID в pg_enum не задано в режиме двоичного обновления" + +#: catalog/pg_enum.c:359 #, c-format msgid "ALTER TYPE ADD BEFORE/AFTER is incompatible with binary upgrade" msgstr "" "конструкция ALTER TYPE ADD BEFORE/AFTER несовместима с двоичным обновлением " "данных" -#: catalog/pg_namespace.c:61 commands/schemacmds.c:220 +#: catalog/pg_namespace.c:61 commands/schemacmds.c:246 #, c-format msgid "schema \"%s\" already exists" msgstr "схема \"%s\" уже существует" -#: catalog/pg_operator.c:222 catalog/pg_operator.c:362 +#: catalog/pg_operator.c:222 catalog/pg_operator.c:363 #, c-format msgid "\"%s\" is not a valid operator name" msgstr "имя \"%s\" недопустимо для оператора" -#: catalog/pg_operator.c:371 +#: catalog/pg_operator.c:372 #, c-format msgid "only binary operators can have commutators" msgstr "коммутативную операцию можно определить только для бинарных операторов" -#: catalog/pg_operator.c:375 +#: catalog/pg_operator.c:376 commands/operatorcmds.c:464 #, c-format msgid "only binary operators can have join selectivity" msgstr "" "функцию оценки соединения можно определить только для бинарных операторов" -#: catalog/pg_operator.c:379 +#: catalog/pg_operator.c:380 #, c-format msgid "only binary operators can merge join" msgstr "" "поддержку соединения слиянием можно обозначить только для бинарных операторов" -#: catalog/pg_operator.c:383 +#: catalog/pg_operator.c:384 #, c-format msgid "only binary operators can hash" msgstr "поддержку хэша можно обозначить только для бинарных операторов" -#: catalog/pg_operator.c:394 +#: catalog/pg_operator.c:395 #, c-format msgid "only boolean operators can have negators" msgstr "обратную операцию можно определить только для логических операторов" -#: catalog/pg_operator.c:398 +#: catalog/pg_operator.c:399 commands/operatorcmds.c:472 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "" "функцию оценки ограничения можно определить только для логических операторов" -#: catalog/pg_operator.c:402 +#: catalog/pg_operator.c:403 commands/operatorcmds.c:476 #, c-format msgid "only boolean operators can have join selectivity" msgstr "" "функцию оценки соединения можно определить только для логических операторов" -#: catalog/pg_operator.c:406 +#: catalog/pg_operator.c:407 #, c-format msgid "only boolean operators can merge join" msgstr "" "поддержку соединения слиянием можно обозначить только для логических " "операторов" -#: catalog/pg_operator.c:410 +#: catalog/pg_operator.c:411 #, c-format msgid "only boolean operators can hash" msgstr "поддержку хэша можно обозначить только для логических операторов" -#: catalog/pg_operator.c:422 +#: catalog/pg_operator.c:423 #, c-format msgid "operator %s already exists" msgstr "оператор %s уже существует" -#: catalog/pg_operator.c:615 +#: catalog/pg_operator.c:616 #, c-format msgid "operator cannot be its own negator or sort operator" msgstr "" "оператор не может быть обратным к себе или собственным оператором сортировки" -#: catalog/pg_proc.c:129 parser/parse_func.c:1931 parser/parse_func.c:1971 +#: catalog/pg_proc.c:133 parser/parse_func.c:1944 parser/parse_func.c:1984 #, c-format msgid "functions cannot have more than %d argument" msgid_plural "functions cannot have more than %d arguments" @@ -4257,7 +4769,7 @@ msgstr[0] "функции не могут иметь больше %d аргум msgstr[1] "функции не могут иметь больше %d аргументов" msgstr[2] "функции не могут иметь больше %d аргументов" -#: catalog/pg_proc.c:242 +#: catalog/pg_proc.c:246 #, c-format msgid "" "A function returning a polymorphic type must have at least one polymorphic " @@ -4266,7 +4778,7 @@ msgstr "" "Функция, возвращающая полиморфный тип, должна иметь минимум один полиморфный " "аргумент." -#: catalog/pg_proc.c:249 +#: catalog/pg_proc.c:253 #, c-format msgid "" "A function returning \"anyrange\" must have at least one \"anyrange\" " @@ -4275,90 +4787,90 @@ msgstr "" "Функция, возвращающая \"anyrange\", должна иметь минимум один аргумент " "\"anyrange\"." -#: catalog/pg_proc.c:267 +#: catalog/pg_proc.c:271 #, c-format msgid "\"%s\" is already an attribute of type %s" msgstr "\"%s\" уже является атрибутом типа %s" -#: catalog/pg_proc.c:393 +#: catalog/pg_proc.c:401 #, c-format msgid "function \"%s\" already exists with same argument types" msgstr "функция \"%s\" с аргументами таких типов уже существует" -#: catalog/pg_proc.c:407 catalog/pg_proc.c:430 +#: catalog/pg_proc.c:415 catalog/pg_proc.c:438 #, c-format msgid "cannot change return type of existing function" msgstr "изменить тип возврата существующей функции нельзя" -#: catalog/pg_proc.c:408 catalog/pg_proc.c:432 catalog/pg_proc.c:475 -#: catalog/pg_proc.c:499 catalog/pg_proc.c:526 +#: catalog/pg_proc.c:416 catalog/pg_proc.c:440 catalog/pg_proc.c:483 +#: catalog/pg_proc.c:507 catalog/pg_proc.c:534 #, c-format msgid "Use DROP FUNCTION %s first." msgstr "Сначала удалите функцию (DROP FUNCTION %s)." -#: catalog/pg_proc.c:431 +#: catalog/pg_proc.c:439 #, c-format msgid "Row type defined by OUT parameters is different." msgstr "Параметры OUT определяют другой тип строки." -#: catalog/pg_proc.c:473 +#: catalog/pg_proc.c:481 #, c-format msgid "cannot change name of input parameter \"%s\"" msgstr "изменить имя входного параметра \"%s\" нельзя" -#: catalog/pg_proc.c:498 +#: catalog/pg_proc.c:506 #, c-format msgid "cannot remove parameter defaults from existing function" msgstr "" "для существующей функции нельзя убрать значения параметров по умолчанию" -#: catalog/pg_proc.c:525 +#: catalog/pg_proc.c:533 #, c-format msgid "cannot change data type of existing parameter default value" msgstr "" "для существующего значения параметра по умолчанию нельзя изменить тип данных" -#: catalog/pg_proc.c:538 +#: catalog/pg_proc.c:546 #, c-format msgid "function \"%s\" is an aggregate function" msgstr "\"%s\" - это агрегатная функция" -#: catalog/pg_proc.c:543 +#: catalog/pg_proc.c:551 #, c-format msgid "function \"%s\" is not an aggregate function" msgstr "\"%s\" - это не агрегатная функция" -#: catalog/pg_proc.c:551 +#: catalog/pg_proc.c:559 #, c-format msgid "function \"%s\" is a window function" msgstr "\"%s\" - это оконная функция" -#: catalog/pg_proc.c:556 +#: catalog/pg_proc.c:564 #, c-format msgid "function \"%s\" is not a window function" msgstr "\"%s\" - это не оконная функция" -#: catalog/pg_proc.c:746 +#: catalog/pg_proc.c:772 #, c-format msgid "there is no built-in function named \"%s\"" msgstr "встроенной функции \"%s\" нет" -#: catalog/pg_proc.c:844 +#: catalog/pg_proc.c:870 #, c-format msgid "SQL functions cannot return type %s" msgstr "SQL-функции не могут возвращать тип %s" -#: catalog/pg_proc.c:859 +#: catalog/pg_proc.c:885 #, c-format msgid "SQL functions cannot have arguments of type %s" msgstr "SQL-функции не могут иметь аргументы типа %s" -#: catalog/pg_proc.c:945 executor/functions.c:1418 +#: catalog/pg_proc.c:971 executor/functions.c:1421 #, c-format msgid "SQL function \"%s\"" msgstr "SQL-функция \"%s\"" -#: catalog/pg_shdepend.c:691 +#: catalog/pg_shdepend.c:692 #, c-format msgid "" "\n" @@ -4376,33 +4888,33 @@ msgstr[2] "" "\n" "и объекты в %d других базах данных (см. список в протоколе сервера)" -#: catalog/pg_shdepend.c:1003 +#: catalog/pg_shdepend.c:1004 #, c-format msgid "role %u was concurrently dropped" msgstr "роль %u удалена другим процессом" -#: catalog/pg_shdepend.c:1022 +#: catalog/pg_shdepend.c:1023 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "табличное пространство %u удалено другим процессом" -#: catalog/pg_shdepend.c:1037 +#: catalog/pg_shdepend.c:1038 #, c-format msgid "database %u was concurrently dropped" msgstr "база данных %u удалена другим процессом" -#: catalog/pg_shdepend.c:1081 +#: catalog/pg_shdepend.c:1083 #, c-format msgid "owner of %s" msgstr "владелец объекта %s" -#: catalog/pg_shdepend.c:1083 +#: catalog/pg_shdepend.c:1085 #, c-format msgid "privileges for %s" msgstr "права доступа к объекту \"%s\"" #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1091 +#: catalog/pg_shdepend.c:1093 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" @@ -4410,7 +4922,7 @@ msgstr[0] "%d объект (%s)" msgstr[1] "%d объекта (%s)" msgstr[2] "%d объектов (%s)" -#: catalog/pg_shdepend.c:1202 +#: catalog/pg_shdepend.c:1204 #, c-format msgid "" "cannot drop objects owned by %s because they are required by the database " @@ -4419,7 +4931,7 @@ msgstr "" "удалить объекты, принадлежащие роли %s, нельзя, так как они нужны системе " "баз данных" -#: catalog/pg_shdepend.c:1305 +#: catalog/pg_shdepend.c:1307 #, c-format msgid "" "cannot reassign ownership of objects owned by %s because they are required " @@ -4428,41 +4940,46 @@ msgstr "" "изменить владельца объектов, принадлежащих роли %s, нельзя, так как они " "нужны системе баз данных" -#: catalog/pg_type.c:244 +#: catalog/pg_type.c:136 catalog/pg_type.c:454 +#, c-format +msgid "pg_type OID value not set when in binary upgrade mode" +msgstr "значение OID в pg_type не задано в режиме двоичного обновления" + +#: catalog/pg_type.c:253 #, c-format msgid "invalid type internal size %d" msgstr "неверный внутренний размер типа: %d" -#: catalog/pg_type.c:260 catalog/pg_type.c:268 catalog/pg_type.c:276 -#: catalog/pg_type.c:285 +#: catalog/pg_type.c:269 catalog/pg_type.c:277 catalog/pg_type.c:285 +#: catalog/pg_type.c:294 #, c-format msgid "alignment \"%c\" is invalid for passed-by-value type of size %d" msgstr "" "выравнивание \"%c\" не подходит для типа, передаваемого по значению (с " "размером: %d)" -#: catalog/pg_type.c:292 +#: catalog/pg_type.c:301 #, c-format msgid "internal size %d is invalid for passed-by-value type" msgstr "внутренний размер %d не подходит для типа, передаваемого по значению" -#: catalog/pg_type.c:301 catalog/pg_type.c:307 +#: catalog/pg_type.c:310 catalog/pg_type.c:316 #, c-format msgid "alignment \"%c\" is invalid for variable-length type" msgstr "выравнивание \"%c\" не подходит для типа переменной длины" -#: catalog/pg_type.c:315 +#: catalog/pg_type.c:324 #, c-format msgid "fixed-size types must have storage PLAIN" msgstr "для типов постоянного размера применим только режим хранения PLAIN" -#: catalog/pg_type.c:773 +#: catalog/pg_type.c:789 #, c-format msgid "could not form array type name for type \"%s\"" msgstr "не удалось сформировать имя типа массива для типа \"%s\"" -#: catalog/toasting.c:104 commands/indexcmds.c:380 commands/tablecmds.c:4139 -#: commands/tablecmds.c:11137 +#: catalog/toasting.c:104 commands/indexcmds.c:381 commands/tablecmds.c:4335 +#: commands/tablecmds.c:11783 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" - это не таблица и не материализованное представление" @@ -4545,115 +5062,115 @@ msgstr "" msgid "aggregate transition data type cannot be %s" msgstr "переходным типом агрегатной функции не может быть %s" -#: commands/alter.c:79 commands/event_trigger.c:194 +#: commands/alter.c:80 commands/event_trigger.c:230 #, c-format msgid "event trigger \"%s\" already exists" msgstr "событийный триггер \"%s\" уже существует" -#: commands/alter.c:82 commands/foreigncmds.c:544 +#: commands/alter.c:83 commands/foreigncmds.c:597 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "обёртка сторонних данных \"%s\" уже существует" -#: commands/alter.c:85 commands/foreigncmds.c:838 +#: commands/alter.c:86 commands/foreigncmds.c:890 #, c-format msgid "server \"%s\" already exists" msgstr "сервер \"%s\" уже существует" -#: commands/alter.c:88 commands/proclang.c:356 +#: commands/alter.c:89 commands/proclang.c:363 #, c-format msgid "language \"%s\" already exists" msgstr "язык \"%s\" уже существует" -#: commands/alter.c:111 +#: commands/alter.c:112 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "преобразование \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:115 +#: commands/alter.c:116 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "анализатор текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:119 +#: commands/alter.c:120 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "словарь текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:123 +#: commands/alter.c:124 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "шаблон текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:127 +#: commands/alter.c:128 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "конфигурация текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:201 +#: commands/alter.c:202 #, c-format msgid "must be superuser to rename %s" msgstr "переименовать \"%s\" может только суперпользователь" -#: commands/alter.c:585 +#: commands/alter.c:609 #, c-format msgid "must be superuser to set schema of %s" msgstr "для назначения схемы объекта %s нужно быть суперпользователем" -#: commands/analyze.c:157 +#: commands/analyze.c:145 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "анализ \"%s\" пропускается --- блокировка недоступна" -#: commands/analyze.c:174 +#: commands/analyze.c:162 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "" "\"%s\" пропускается --- только суперпользователь может анализировать этот " "объект" -#: commands/analyze.c:178 +#: commands/analyze.c:166 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "" "\"%s\" пропускается --- только суперпользователь или владелец БД может " "анализировать этот объект" -#: commands/analyze.c:182 +#: commands/analyze.c:170 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "" "\"%s\" пропускается --- только владелец таблицы или БД может анализировать " "этот объект" -#: commands/analyze.c:242 +#: commands/analyze.c:230 #, c-format msgid "skipping \"%s\" --- cannot analyze this foreign table" msgstr "\"%s\" пропускается --- анализировать эту стороннюю таблицу нельзя" -#: commands/analyze.c:253 +#: commands/analyze.c:241 #, c-format msgid "skipping \"%s\" --- cannot analyze non-tables or special system tables" msgstr "" "\"%s\" пропускается --- анализировать не таблицы или специальные системные " "таблицы нельзя" -#: commands/analyze.c:332 +#: commands/analyze.c:320 #, c-format msgid "analyzing \"%s.%s\" inheritance tree" msgstr "анализируется дерево наследования \"%s.%s\"" -#: commands/analyze.c:337 +#: commands/analyze.c:325 #, c-format msgid "analyzing \"%s.%s\"" msgstr "анализируется \"%s.%s\"" -#: commands/analyze.c:657 +#: commands/analyze.c:645 #, c-format msgid "automatic analyze of table \"%s.%s.%s\" system usage: %s" msgstr "автоматический анализ таблицы \"%s.%s.%s\"; нагрузка системы: %s" -#: commands/analyze.c:1300 +#: commands/analyze.c:1201 #, c-format msgid "" "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead " @@ -4663,21 +5180,39 @@ msgstr "" "%.0f, \"мёртвых\" строк: %.0f; строк в выборке: %d, примерное общее число " "строк: %.0f" -#: commands/analyze.c:1564 executor/execQual.c:2907 +#: commands/analyze.c:1280 +#, c-format +msgid "" +"skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree " +"contains no child tables" +msgstr "" +"пропускается анализ дерева наследования \"%s.%s\" --- это дерево " +"наследования не содержит дочерних таблиц" + +#: commands/analyze.c:1369 +#, c-format +msgid "" +"skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree " +"contains no analyzable child tables" +msgstr "" +"пропускается анализ дерева наследования \"%s.%s\" --- это дерево " +"наследования не содержит анализируемых дочерних таблиц" + +#: commands/analyze.c:1417 executor/execQual.c:2899 msgid "could not convert row type" msgstr "не удалось преобразовать тип строки" -#: commands/async.c:545 +#: commands/async.c:544 #, c-format msgid "channel name cannot be empty" msgstr "имя канала не может быть пустым" -#: commands/async.c:550 +#: commands/async.c:549 #, c-format msgid "channel name too long" msgstr "слишком длинное имя канала" -#: commands/async.c:557 +#: commands/async.c:556 #, c-format msgid "payload string too long" msgstr "слишком длинная строка сообщения-нагрузки" @@ -4695,12 +5230,12 @@ msgstr "" msgid "too many notifications in the NOTIFY queue" msgstr "слишком много уведомлений в очереди NOTIFY" -#: commands/async.c:1418 +#: commands/async.c:1445 #, c-format msgid "NOTIFY queue is %.0f%% full" msgstr "очередь NOTIFY заполнена на %.0f%%" -#: commands/async.c:1420 +#: commands/async.c:1447 #, c-format msgid "" "The server process with PID %d is among those with the oldest transactions." @@ -4708,7 +5243,7 @@ msgstr "" "В число серверных процессов с самыми старыми транзакциями входит процесс с " "PID %d." -#: commands/async.c:1423 +#: commands/async.c:1450 #, c-format msgid "" "The NOTIFY queue cannot be emptied until that process ends its current " @@ -4717,37 +5252,37 @@ msgstr "" "Очередь NOTIFY можно будет освободить, только когда этот процесс завершит " "текущую транзакцию." -#: commands/cluster.c:126 commands/cluster.c:363 +#: commands/cluster.c:127 commands/cluster.c:364 #, c-format msgid "cannot cluster temporary tables of other sessions" msgstr "кластеризовать временные таблицы других сеансов нельзя" -#: commands/cluster.c:156 +#: commands/cluster.c:157 #, c-format msgid "there is no previously clustered index for table \"%s\"" msgstr "таблица \"%s\" ранее не кластеризовалась по какому-либо индексу" -#: commands/cluster.c:170 commands/tablecmds.c:8795 commands/tablecmds.c:10461 +#: commands/cluster.c:171 commands/tablecmds.c:9228 commands/tablecmds.c:10925 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "индекс \"%s\" для таблицы \"%s\" не существует" -#: commands/cluster.c:352 +#: commands/cluster.c:353 #, c-format msgid "cannot cluster a shared catalog" msgstr "кластеризовать разделяемый каталог нельзя" -#: commands/cluster.c:367 +#: commands/cluster.c:368 #, c-format msgid "cannot vacuum temporary tables of other sessions" msgstr "очищать временные таблицы других сеансов нельзя" -#: commands/cluster.c:430 commands/tablecmds.c:10471 +#: commands/cluster.c:431 commands/tablecmds.c:10935 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" не является индексом таблицы \"%s\"" -#: commands/cluster.c:438 +#: commands/cluster.c:439 #, c-format msgid "" "cannot cluster on index \"%s\" because access method does not support " @@ -4755,33 +5290,33 @@ msgid "" msgstr "" "кластеризация по индексу \"%s\" невозможна, её не поддерживает метод доступа" -#: commands/cluster.c:450 +#: commands/cluster.c:451 #, c-format msgid "cannot cluster on partial index \"%s\"" msgstr "кластеризовать по частичному индексу \"%s\" нельзя" -#: commands/cluster.c:464 +#: commands/cluster.c:465 #, c-format msgid "cannot cluster on invalid index \"%s\"" msgstr "нельзя кластеризовать таблицу по неверному индексу \"%s\"" -#: commands/cluster.c:920 +#: commands/cluster.c:918 #, c-format msgid "clustering \"%s.%s\" using index scan on \"%s\"" msgstr "кластеризация \"%s.%s\" путём сканирования индекса \"%s\"" -#: commands/cluster.c:926 +#: commands/cluster.c:924 #, c-format msgid "clustering \"%s.%s\" using sequential scan and sort" msgstr "" "кластеризация \"%s.%s\" путём последовательного сканирования и сортировки" -#: commands/cluster.c:931 commands/vacuumlazy.c:445 +#: commands/cluster.c:929 commands/vacuumlazy.c:464 #, c-format msgid "vacuuming \"%s.%s\"" msgstr "очистка \"%s.%s\"" -#: commands/cluster.c:1090 +#: commands/cluster.c:1088 #, c-format msgid "" "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u pages" @@ -4789,7 +5324,7 @@ msgstr "" "\"%s\": найдено удаляемых версий строк: %.0f, неудаляемых - %.0f, " "просмотрено страниц: %u" -#: commands/cluster.c:1094 +#: commands/cluster.c:1092 #, c-format msgid "" "%.0f dead row versions cannot be removed yet.\n" @@ -4798,42 +5333,42 @@ msgstr "" "В данный момент нельзя удалить \"мёртвых\" строк %.0f.\n" "%s." -#: commands/collationcmds.c:79 +#: commands/collationcmds.c:80 #, c-format msgid "collation attribute \"%s\" not recognized" msgstr "атрибут COLLATION \"%s\" не распознан" -#: commands/collationcmds.c:124 +#: commands/collationcmds.c:125 #, c-format msgid "parameter \"lc_collate\" must be specified" msgstr "необходимо указать параметр \"lc_collate\"" -#: commands/collationcmds.c:129 +#: commands/collationcmds.c:130 #, c-format msgid "parameter \"lc_ctype\" must be specified" msgstr "необходимо указать параметр \"lc_ctype\"" -#: commands/collationcmds.c:163 +#: commands/collationcmds.c:166 #, c-format msgid "collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"" msgstr "" "правило сортировки \"%s\" для кодировки \"%s\" уже существует в схеме \"%s\"" -#: commands/collationcmds.c:174 +#: commands/collationcmds.c:177 #, c-format msgid "collation \"%s\" already exists in schema \"%s\"" msgstr "правило сортировки \"%s\" уже существует в схеме \"%s\"" -#: commands/comment.c:62 commands/dbcommands.c:775 commands/dbcommands.c:939 -#: commands/dbcommands.c:1042 commands/dbcommands.c:1234 -#: commands/dbcommands.c:1423 commands/dbcommands.c:1518 -#: commands/dbcommands.c:1935 utils/init/postinit.c:794 -#: utils/init/postinit.c:862 utils/init/postinit.c:879 +#: commands/comment.c:62 commands/dbcommands.c:797 commands/dbcommands.c:962 +#: commands/dbcommands.c:1067 commands/dbcommands.c:1257 +#: commands/dbcommands.c:1477 commands/dbcommands.c:1594 +#: commands/dbcommands.c:2011 utils/init/postinit.c:839 +#: utils/init/postinit.c:941 utils/init/postinit.c:958 #, c-format msgid "database \"%s\" does not exist" msgstr "база данных \"%s\" не существует" -#: commands/comment.c:101 commands/seclabel.c:114 parser/parse_utilcmd.c:686 +#: commands/comment.c:101 commands/seclabel.c:116 parser/parse_utilcmd.c:727 #, c-format msgid "" "\"%s\" is not a table, view, materialized view, composite type, or foreign " @@ -4842,12 +5377,12 @@ msgstr "" "\"%s\" - это не таблица, представление, мат. представление, составной тип " "или сторонняя таблица" -#: commands/constraint.c:60 utils/adt/ri_triggers.c:2700 +#: commands/constraint.c:60 utils/adt/ri_triggers.c:2713 #, c-format msgid "function \"%s\" was not called by trigger manager" msgstr "функция \"%s\" была вызвана не менеджером триггеров" -#: commands/constraint.c:67 utils/adt/ri_triggers.c:2709 +#: commands/constraint.c:67 utils/adt/ri_triggers.c:2722 #, c-format msgid "function \"%s\" must be fired AFTER ROW" msgstr "функция \"%s\" должна запускаться в триггере AFTER для строк" @@ -4872,55 +5407,55 @@ msgstr "целевая кодировка \"%s\" не существует" msgid "encoding conversion function %s must return type \"void\"" msgstr "функция преобразования кодировки %s должна возвращать void" -#: commands/copy.c:361 commands/copy.c:373 commands/copy.c:407 -#: commands/copy.c:419 +#: commands/copy.c:365 commands/copy.c:377 commands/copy.c:411 +#: commands/copy.c:423 #, c-format msgid "COPY BINARY is not supported to stdout or from stdin" msgstr "COPY BINARY не поддерживает стандартный вывод (stdout) и ввод (stdin)" -#: commands/copy.c:519 +#: commands/copy.c:523 #, c-format msgid "could not write to COPY program: %m" msgstr "не удалось записать в канал программы COPY: %m" -#: commands/copy.c:524 +#: commands/copy.c:528 #, c-format msgid "could not write to COPY file: %m" msgstr "не удалось записать в файл COPY: %m" -#: commands/copy.c:537 +#: commands/copy.c:541 #, c-format msgid "connection lost during COPY to stdout" msgstr "в процессе вывода данных COPY в stdout потеряно соединение" -#: commands/copy.c:578 +#: commands/copy.c:582 #, c-format msgid "could not read from COPY file: %m" msgstr "не удалось прочитать файл COPY: %m" -#: commands/copy.c:594 commands/copy.c:615 commands/copy.c:619 -#: tcop/postgres.c:344 tcop/postgres.c:380 tcop/postgres.c:407 +#: commands/copy.c:598 commands/copy.c:619 commands/copy.c:623 +#: tcop/postgres.c:352 tcop/postgres.c:388 tcop/postgres.c:415 #, c-format msgid "unexpected EOF on client connection with an open transaction" msgstr "неожиданный обрыв соединения с клиентом при открытой транзакции" -#: commands/copy.c:632 +#: commands/copy.c:636 #, c-format msgid "COPY from stdin failed: %s" msgstr "ошибка при вводе данных COPY из stdin: %s" -#: commands/copy.c:648 +#: commands/copy.c:652 #, c-format msgid "unexpected message type 0x%02X during COPY from stdin" msgstr "неожиданный тип сообщения 0x%02X при вводе данных COPY из stdin" -#: commands/copy.c:803 +#: commands/copy.c:808 #, c-format msgid "must be superuser to COPY to or from an external program" msgstr "" "для использования COPY с внешними программами нужно быть суперпользователем" -#: commands/copy.c:804 commands/copy.c:810 +#: commands/copy.c:809 commands/copy.c:815 #, c-format msgid "" "Anyone can COPY to stdout or from stdin. psql's \\copy command also works " @@ -4929,282 +5464,297 @@ msgstr "" "Не имея административных прав, можно использовать COPY с stdout и stdin (а " "также команду psql \\copy)." -#: commands/copy.c:809 +#: commands/copy.c:814 #, c-format msgid "must be superuser to COPY to or from a file" msgstr "для использования COPY с файлами нужно быть суперпользователем" -#: commands/copy.c:947 +#: commands/copy.c:880 +#, c-format +msgid "COPY FROM not supported with row level security." +msgstr "COPY FROM не поддерживается с защитой на уровне строк." + +#: commands/copy.c:881 +#, c-format +msgid "Use direct INSERT statements instead." +msgstr "Используйте явные операторы INSERT." + +#: commands/copy.c:1012 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "формат \"%s\" для COPY не распознан" -#: commands/copy.c:1018 commands/copy.c:1032 commands/copy.c:1046 -#: commands/copy.c:1066 +#: commands/copy.c:1083 commands/copy.c:1097 commands/copy.c:1111 +#: commands/copy.c:1131 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "аргументом параметра \"%s\" должен быть список имён колонок" -#: commands/copy.c:1079 +#: commands/copy.c:1144 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "аргументом параметра \"%s\" должно быть название допустимой кодировки" -#: commands/copy.c:1085 +#: commands/copy.c:1150 commands/dbcommands.c:232 commands/dbcommands.c:1427 #, c-format msgid "option \"%s\" not recognized" msgstr "параметр \"%s\" не распознан" -#: commands/copy.c:1096 +#: commands/copy.c:1161 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "в режиме BINARY нельзя указывать DELIMITER" -#: commands/copy.c:1101 +#: commands/copy.c:1166 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "в режиме BINARY нельзя указывать NULL" -#: commands/copy.c:1123 +#: commands/copy.c:1188 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "разделитель для COPY должен быть однобайтным символом" -#: commands/copy.c:1130 +#: commands/copy.c:1195 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "" "разделителем для COPY не может быть символ новой строки или возврата каретки" -#: commands/copy.c:1136 +#: commands/copy.c:1201 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "" "представление NULL для COPY не может включать символ новой строки или " "возврата каретки" -#: commands/copy.c:1153 +#: commands/copy.c:1218 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "\"%s\" не может быть разделителем для COPY" -#: commands/copy.c:1159 +#: commands/copy.c:1224 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADER можно использовать только в режиме CSV" -#: commands/copy.c:1165 +#: commands/copy.c:1230 #, c-format msgid "COPY quote available only in CSV mode" msgstr "определить кавычки для COPY можно только в режиме CSV" -#: commands/copy.c:1170 +#: commands/copy.c:1235 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "символ кавычек для COPY должен быть однобайтным" -#: commands/copy.c:1175 +#: commands/copy.c:1240 #, c-format msgid "COPY delimiter and quote must be different" msgstr "символ кавычек для COPY должен отличаться от разделителя" -#: commands/copy.c:1181 +#: commands/copy.c:1246 #, c-format msgid "COPY escape available only in CSV mode" msgstr "определить спецсимвол для COPY можно только в режиме CSV" -#: commands/copy.c:1186 +#: commands/copy.c:1251 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "спецсимвол для COPY должен быть однобайтным" -#: commands/copy.c:1192 +#: commands/copy.c:1257 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "параметр force quote для COPY можно использовать только в режиме CSV" -#: commands/copy.c:1196 +#: commands/copy.c:1261 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "параметр force quote для COPY можно использовать только с COPY TO" -#: commands/copy.c:1202 +#: commands/copy.c:1267 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "" "параметр force not null для COPY можно использовать только в режиме CSV" -#: commands/copy.c:1206 +#: commands/copy.c:1271 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "параметр force not null для COPY можно использовать только с COPY FROM" -#: commands/copy.c:1212 +#: commands/copy.c:1277 #, c-format msgid "COPY force null available only in CSV mode" msgstr "параметр force null для COPY можно использовать только в режиме CSV" -#: commands/copy.c:1217 +#: commands/copy.c:1282 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "параметр force null для COPY можно использовать только с COPY FROM" -#: commands/copy.c:1223 +#: commands/copy.c:1288 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "разделитель для COPY не должен присутствовать в представлении NULL" -#: commands/copy.c:1230 +#: commands/copy.c:1295 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "символ кавычек в CSV не должен присутствовать в представлении NULL" -#: commands/copy.c:1292 +#: commands/copy.c:1358 #, c-format msgid "table \"%s\" does not have OIDs" msgstr "таблица \"%s\" не содержит OID" -#: commands/copy.c:1309 +#: commands/copy.c:1375 #, c-format msgid "COPY (SELECT) WITH OIDS is not supported" msgstr "COPY (SELECT) WITH OIDS не поддерживается" -#: commands/copy.c:1335 +#: commands/copy.c:1401 #, c-format msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) не поддерживается" -#: commands/copy.c:1398 +#: commands/copy.c:1431 +#, c-format +msgid "relation referenced by COPY statement has changed" +msgstr "отношение, задействованное в операторе COPY, изменилось" + +#: commands/copy.c:1489 #, c-format msgid "FORCE QUOTE column \"%s\" not referenced by COPY" msgstr "колонка FORCE QUOTE \"%s\" не входит в список колонок COPY" -#: commands/copy.c:1420 +#: commands/copy.c:1511 #, c-format msgid "FORCE NOT NULL column \"%s\" not referenced by COPY" msgstr "колонка FORCE NOT NULL \"%s\" не входит в список колонок COPY" -#: commands/copy.c:1442 +#: commands/copy.c:1533 #, c-format msgid "FORCE NULL column \"%s\" not referenced by COPY" msgstr "колонка FORCE NULL \"%s\" не входит в список колонок COPY" -#: commands/copy.c:1506 +#: commands/copy.c:1597 #, c-format msgid "could not close pipe to external command: %m" msgstr "не удалось закрыть канал сообщений с внешней командой: %m" -#: commands/copy.c:1509 +#: commands/copy.c:1600 #, c-format msgid "program \"%s\" failed" msgstr "сбой программы \"%s\"" -#: commands/copy.c:1558 +#: commands/copy.c:1650 #, c-format msgid "cannot copy from view \"%s\"" msgstr "копировать из представления \"%s\" нельзя" -#: commands/copy.c:1560 commands/copy.c:1566 commands/copy.c:1572 +#: commands/copy.c:1652 commands/copy.c:1658 commands/copy.c:1664 #, c-format msgid "Try the COPY (SELECT ...) TO variant." msgstr "Попробуйте вариацию COPY (SELECT ...) TO." -#: commands/copy.c:1564 +#: commands/copy.c:1656 #, c-format msgid "cannot copy from materialized view \"%s\"" msgstr "копировать из материализованного представления \"%s\" нельзя" -#: commands/copy.c:1570 +#: commands/copy.c:1662 #, c-format msgid "cannot copy from foreign table \"%s\"" msgstr "копировать из сторонней таблицы \"%s\" нельзя" -#: commands/copy.c:1576 +#: commands/copy.c:1668 #, c-format msgid "cannot copy from sequence \"%s\"" msgstr "копировать из последовательности \"%s\" нельзя" -#: commands/copy.c:1581 +#: commands/copy.c:1673 #, c-format msgid "cannot copy from non-table relation \"%s\"" msgstr "копировать из отношения \"%s\", не являющегося таблицей, нельзя" -#: commands/copy.c:1604 commands/copy.c:2635 +#: commands/copy.c:1697 commands/copy.c:2731 #, c-format msgid "could not execute command \"%s\": %m" msgstr "не удалось выполнить команду \"%s\": %m" -#: commands/copy.c:1619 +#: commands/copy.c:1712 #, c-format msgid "relative path not allowed for COPY to file" msgstr "при выполнении COPY в файл нельзя указывать относительный путь" -#: commands/copy.c:1627 +#: commands/copy.c:1720 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "не удалось открыть файл \"%s\" для записи: %m" -#: commands/copy.c:1634 commands/copy.c:2653 +#: commands/copy.c:1729 commands/copy.c:2751 #, c-format msgid "\"%s\" is a directory" msgstr "\"%s\" - это каталог" -#: commands/copy.c:1959 +#: commands/copy.c:2054 #, c-format msgid "COPY %s, line %d, column %s" msgstr "COPY %s, строка %d, колонка %s" -#: commands/copy.c:1963 commands/copy.c:2010 +#: commands/copy.c:2058 commands/copy.c:2105 #, c-format msgid "COPY %s, line %d" msgstr "COPY %s, строка %d" -#: commands/copy.c:1974 +#: commands/copy.c:2069 #, c-format msgid "COPY %s, line %d, column %s: \"%s\"" msgstr "COPY %s, строка %d, колонка %s: \"%s\"" -#: commands/copy.c:1982 +#: commands/copy.c:2077 #, c-format msgid "COPY %s, line %d, column %s: null input" msgstr "COPY %s, строка %d, колонка %s: значение NULL" -#: commands/copy.c:2004 +#: commands/copy.c:2099 #, c-format msgid "COPY %s, line %d: \"%s\"" msgstr "COPY %s, строка %d: \"%s\"" -#: commands/copy.c:2088 +#: commands/copy.c:2183 #, c-format msgid "cannot copy to view \"%s\"" msgstr "копировать в представление \"%s\" нельзя" -#: commands/copy.c:2093 +#: commands/copy.c:2188 #, c-format msgid "cannot copy to materialized view \"%s\"" msgstr "копировать в материализованное представление \"%s\" нельзя" -#: commands/copy.c:2098 +#: commands/copy.c:2193 #, c-format msgid "cannot copy to foreign table \"%s\"" msgstr "копировать в стороннюю таблицу \"%s\" нельзя" -#: commands/copy.c:2103 +#: commands/copy.c:2198 #, c-format msgid "cannot copy to sequence \"%s\"" msgstr "копировать в последовательность \"%s\" нельзя" -#: commands/copy.c:2108 +#: commands/copy.c:2203 #, c-format msgid "cannot copy to non-table relation \"%s\"" msgstr "копировать в отношение \"%s\", не являющееся таблицей, нельзя" -#: commands/copy.c:2171 +#: commands/copy.c:2266 #, c-format msgid "cannot perform FREEZE because of prior transaction activity" msgstr "выполнить FREEZE нельзя из-за предыдущей активности в транзакции" -#: commands/copy.c:2177 +#: commands/copy.c:2272 #, c-format msgid "" "cannot perform FREEZE because the table was not created or truncated in the " @@ -5213,218 +5763,223 @@ msgstr "" "выполнить FREEZE нельзя, так как таблица не была создана или усечена в " "текущей подтранзакции" -#: commands/copy.c:2646 utils/adt/genfile.c:123 +#: commands/copy.c:2742 commands/extension.c:3037 utils/adt/genfile.c:134 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "не удалось открыть файл \"%s\" для чтения: %m" -#: commands/copy.c:2673 +#: commands/copy.c:2771 #, c-format msgid "COPY file signature not recognized" msgstr "подпись COPY-файла не распознана" -#: commands/copy.c:2678 +#: commands/copy.c:2776 #, c-format msgid "invalid COPY file header (missing flags)" msgstr "неверный заголовок файла COPY (отсутствуют флаги)" -#: commands/copy.c:2684 +#: commands/copy.c:2782 #, c-format msgid "unrecognized critical flags in COPY file header" msgstr "не распознаны важные флаги в заголовке файла COPY" -#: commands/copy.c:2690 +#: commands/copy.c:2788 #, c-format msgid "invalid COPY file header (missing length)" msgstr "неверный заголовок файла COPY (отсутствует длина)" -#: commands/copy.c:2697 +#: commands/copy.c:2795 #, c-format msgid "invalid COPY file header (wrong length)" msgstr "неверный заголовок файла COPY (неправильная длина)" -#: commands/copy.c:2830 commands/copy.c:3537 commands/copy.c:3767 +#: commands/copy.c:2928 commands/copy.c:3635 commands/copy.c:3865 #, c-format msgid "extra data after last expected column" msgstr "лишние данные после содержимого последней колонки" -#: commands/copy.c:2840 +#: commands/copy.c:2938 #, c-format msgid "missing data for OID column" msgstr "нет данных для колонки OID" -#: commands/copy.c:2846 +#: commands/copy.c:2944 #, c-format msgid "null OID in COPY data" msgstr "неверное значение OID (NULL) в данных COPY" -#: commands/copy.c:2856 commands/copy.c:2979 +#: commands/copy.c:2954 commands/copy.c:3077 #, c-format msgid "invalid OID in COPY data" msgstr "неверный OID в данных COPY" -#: commands/copy.c:2871 +#: commands/copy.c:2969 #, c-format msgid "missing data for column \"%s\"" msgstr "нет данных для колонки \"%s\"" -#: commands/copy.c:2954 +#: commands/copy.c:3052 #, c-format msgid "received copy data after EOF marker" msgstr "после маркера конца файла продолжаются данные COPY" -#: commands/copy.c:2961 +#: commands/copy.c:3059 #, c-format msgid "row field count is %d, expected %d" msgstr "количество полей в строке: %d, ожидалось: %d" -#: commands/copy.c:3301 commands/copy.c:3318 +#: commands/copy.c:3399 commands/copy.c:3416 #, c-format msgid "literal carriage return found in data" msgstr "в данных обнаружен явный возврат каретки" -#: commands/copy.c:3302 commands/copy.c:3319 +#: commands/copy.c:3400 commands/copy.c:3417 #, c-format msgid "unquoted carriage return found in data" msgstr "в данных обнаружен возврат каретки не в кавычках" -#: commands/copy.c:3304 commands/copy.c:3321 +#: commands/copy.c:3402 commands/copy.c:3419 #, c-format msgid "Use \"\\r\" to represent carriage return." msgstr "Представьте возврат каретки как \"\\r\"." -#: commands/copy.c:3305 commands/copy.c:3322 +#: commands/copy.c:3403 commands/copy.c:3420 #, c-format msgid "Use quoted CSV field to represent carriage return." msgstr "Заключите возврат каретки в кавычки CSV." -#: commands/copy.c:3334 +#: commands/copy.c:3432 #, c-format msgid "literal newline found in data" msgstr "в данных обнаружен явный символ новой строки" -#: commands/copy.c:3335 +#: commands/copy.c:3433 #, c-format msgid "unquoted newline found in data" msgstr "в данных обнаружен явный символ новой строки не в кавычках" -#: commands/copy.c:3337 +#: commands/copy.c:3435 #, c-format msgid "Use \"\\n\" to represent newline." msgstr "Представьте символ новой строки как \"\\n\"." -#: commands/copy.c:3338 +#: commands/copy.c:3436 #, c-format msgid "Use quoted CSV field to represent newline." msgstr "Заключите символ новой строки в кавычки CSV." -#: commands/copy.c:3384 commands/copy.c:3420 +#: commands/copy.c:3482 commands/copy.c:3518 #, c-format msgid "end-of-copy marker does not match previous newline style" msgstr "маркер \"конец копии\" не соответствует предыдущему стилю новой строки" -#: commands/copy.c:3393 commands/copy.c:3409 +#: commands/copy.c:3491 commands/copy.c:3507 #, c-format msgid "end-of-copy marker corrupt" msgstr "маркер \"конец копии\" испорчен" -#: commands/copy.c:3851 +#: commands/copy.c:3949 #, c-format msgid "unterminated CSV quoted field" msgstr "незавершённое поле в кавычках CSV" -#: commands/copy.c:3928 commands/copy.c:3947 +#: commands/copy.c:4026 commands/copy.c:4045 #, c-format msgid "unexpected EOF in COPY data" msgstr "неожиданный конец данных COPY" -#: commands/copy.c:3937 +#: commands/copy.c:4035 #, c-format msgid "invalid field size" msgstr "неверный размер поля" -#: commands/copy.c:3960 +#: commands/copy.c:4058 #, c-format msgid "incorrect binary data format" msgstr "неверный двоичный формат данных" -#: commands/copy.c:4271 commands/indexcmds.c:993 commands/tablecmds.c:1427 -#: commands/tablecmds.c:2237 parser/parse_relation.c:2889 -#: utils/adt/tsvector_op.c:1417 +#: commands/copy.c:4369 commands/indexcmds.c:1008 commands/tablecmds.c:1457 +#: commands/tablecmds.c:2280 parser/parse_relation.c:3078 +#: parser/parse_relation.c:3098 utils/adt/tsvector_op.c:1417 #, c-format msgid "column \"%s\" does not exist" msgstr "колонка \"%s\" не существует" -#: commands/copy.c:4278 commands/tablecmds.c:1453 commands/trigger.c:650 -#: parser/parse_target.c:936 parser/parse_target.c:947 +#: commands/copy.c:4376 commands/tablecmds.c:1483 commands/trigger.c:652 +#: parser/parse_target.c:956 parser/parse_target.c:967 #, c-format msgid "column \"%s\" specified more than once" msgstr "колонка \"%s\" указана неоднократно" -#: commands/createas.c:353 +#: commands/createas.c:383 #, c-format msgid "too many column names were specified" msgstr "указано слишком много имён колонок" -#: commands/dbcommands.c:203 +#: commands/createas.c:452 +#, c-format +msgid "policies not yet implemented for this command" +msgstr "политики для этой команды ещё не реализованы" + +#: commands/dbcommands.c:226 #, c-format msgid "LOCATION is not supported anymore" msgstr "LOCATION больше не поддерживается" -#: commands/dbcommands.c:204 +#: commands/dbcommands.c:227 #, c-format msgid "Consider using tablespaces instead." msgstr "Рассмотрите возможность использования табличных пространств." -#: commands/dbcommands.c:227 utils/adt/ascii.c:144 +#: commands/dbcommands.c:251 utils/adt/ascii.c:144 #, c-format msgid "%d is not a valid encoding code" msgstr "%d не является верным кодом кодировки" -#: commands/dbcommands.c:237 utils/adt/ascii.c:126 +#: commands/dbcommands.c:261 utils/adt/ascii.c:126 #, c-format msgid "%s is not a valid encoding name" msgstr "%s не является верным названием кодировки" -#: commands/dbcommands.c:255 commands/dbcommands.c:1404 commands/user.c:260 -#: commands/user.c:601 +#: commands/dbcommands.c:279 commands/dbcommands.c:1458 commands/user.c:271 +#: commands/user.c:635 #, c-format msgid "invalid connection limit: %d" msgstr "неверный предел подключений: %d" -#: commands/dbcommands.c:274 +#: commands/dbcommands.c:298 #, c-format msgid "permission denied to create database" msgstr "нет прав на создание базы данных" -#: commands/dbcommands.c:297 +#: commands/dbcommands.c:321 #, c-format msgid "template database \"%s\" does not exist" msgstr "шаблон базы данных \"%s\" не существует" -#: commands/dbcommands.c:309 +#: commands/dbcommands.c:333 #, c-format msgid "permission denied to copy database \"%s\"" msgstr "нет прав на копирование базы данных \"%s\"" -#: commands/dbcommands.c:325 +#: commands/dbcommands.c:349 #, c-format msgid "invalid server encoding %d" msgstr "неверная кодировка для сервера: %d" -#: commands/dbcommands.c:331 commands/dbcommands.c:336 +#: commands/dbcommands.c:355 commands/dbcommands.c:360 #, c-format msgid "invalid locale name: \"%s\"" msgstr "неверное имя локали: \"%s\"" -#: commands/dbcommands.c:356 +#: commands/dbcommands.c:380 #, c-format msgid "" "new encoding (%s) is incompatible with the encoding of the template database " "(%s)" msgstr "новая кодировка (%s) несовместима с кодировкой шаблона базы данных(%s)" -#: commands/dbcommands.c:359 +#: commands/dbcommands.c:383 #, c-format msgid "" "Use the same encoding as in the template database, or use template0 as " @@ -5433,7 +5988,7 @@ msgstr "" "Используйте кодировку шаблона базы данных или выберите в качестве шаблона " "template0." -#: commands/dbcommands.c:364 +#: commands/dbcommands.c:388 #, c-format msgid "" "new collation (%s) is incompatible with the collation of the template " @@ -5442,7 +5997,7 @@ msgstr "" "новое правило сортировки (%s) несовместимо с правилом в шаблоне базы данных " "(%s)" -#: commands/dbcommands.c:366 +#: commands/dbcommands.c:390 #, c-format msgid "" "Use the same collation as in the template database, or use template0 as " @@ -5451,7 +6006,7 @@ msgstr "" "Используйте то же правило сортировки, что и в шаблоне базы данных, или " "выберите в качестве шаблона template0." -#: commands/dbcommands.c:371 +#: commands/dbcommands.c:395 #, c-format msgid "" "new LC_CTYPE (%s) is incompatible with the LC_CTYPE of the template database " @@ -5459,7 +6014,7 @@ msgid "" msgstr "" "новый параметр LC_CTYPE (%s) несовместим с LC_CTYPE в шаблоне базы данных(%s)" -#: commands/dbcommands.c:373 +#: commands/dbcommands.c:397 #, c-format msgid "" "Use the same LC_CTYPE as in the template database, or use template0 as " @@ -5468,18 +6023,18 @@ msgstr "" "Используйте тот же LC_CTYPE, что и в шаблоне базы данных, или выберите в " "качестве шаблона template0." -#: commands/dbcommands.c:395 commands/dbcommands.c:1088 +#: commands/dbcommands.c:419 commands/dbcommands.c:1113 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "" "pg_global нельзя использовать в качестве табличного пространства по умолчанию" -#: commands/dbcommands.c:421 +#: commands/dbcommands.c:445 #, c-format msgid "cannot assign new default tablespace \"%s\"" msgstr "не удалось назначить новое табличное пространство по умолчанию \"%s\"" -#: commands/dbcommands.c:423 +#: commands/dbcommands.c:447 #, c-format msgid "" "There is a conflict because database \"%s\" already has some tables in this " @@ -5488,52 +6043,52 @@ msgstr "" "База данных \"%s\" содержит таблицы, которые уже находятся в этом табличном " "пространстве." -#: commands/dbcommands.c:443 commands/dbcommands.c:959 +#: commands/dbcommands.c:467 commands/dbcommands.c:982 #, c-format msgid "database \"%s\" already exists" msgstr "база данных \"%s\" уже существует" -#: commands/dbcommands.c:457 +#: commands/dbcommands.c:481 #, c-format msgid "source database \"%s\" is being accessed by other users" msgstr "исходная база \"%s\" занята другими пользователями" -#: commands/dbcommands.c:704 commands/dbcommands.c:719 +#: commands/dbcommands.c:726 commands/dbcommands.c:741 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "кодировка \"%s\" не соответствует локали \"%s\"" -#: commands/dbcommands.c:707 +#: commands/dbcommands.c:729 #, c-format msgid "The chosen LC_CTYPE setting requires encoding \"%s\"." msgstr "Для выбранного параметра LC_CTYPE требуется кодировка \"%s\"." -#: commands/dbcommands.c:722 +#: commands/dbcommands.c:744 #, c-format msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "Для выбранного параметра LC_COLLATE требуется кодировка \"%s\"." -#: commands/dbcommands.c:782 +#: commands/dbcommands.c:804 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "база данных \"%s\" не существует, пропускается" -#: commands/dbcommands.c:806 +#: commands/dbcommands.c:828 #, c-format msgid "cannot drop a template database" msgstr "удалить шаблон базы данных нельзя" -#: commands/dbcommands.c:812 +#: commands/dbcommands.c:834 #, c-format msgid "cannot drop the currently open database" msgstr "удалить базу данных, открытую в данный момент, нельзя" -#: commands/dbcommands.c:822 +#: commands/dbcommands.c:844 #, c-format msgid "database \"%s\" is used by a logical replication slot" msgstr "база \"%s\" используется слотом логической репликации" -#: commands/dbcommands.c:824 +#: commands/dbcommands.c:846 #, c-format msgid "There is %d slot, %d of them active." msgid_plural "There are %d slots, %d of them active." @@ -5541,36 +6096,36 @@ msgstr[0] "Всего создано слотов: %d, из них активн msgstr[1] "Всего создано слотов: %d, из них активны: %d." msgstr[2] "Всего создано слотов: %d, из них активны: %d." -#: commands/dbcommands.c:838 commands/dbcommands.c:981 -#: commands/dbcommands.c:1110 +#: commands/dbcommands.c:860 commands/dbcommands.c:1004 +#: commands/dbcommands.c:1135 #, c-format msgid "database \"%s\" is being accessed by other users" msgstr "база данных \"%s\" занята другими пользователями" -#: commands/dbcommands.c:950 +#: commands/dbcommands.c:973 #, c-format msgid "permission denied to rename database" msgstr "нет прав на переименование базы данных" -#: commands/dbcommands.c:970 +#: commands/dbcommands.c:993 #, c-format msgid "current database cannot be renamed" msgstr "нельзя переименовать текущую базу данных" -#: commands/dbcommands.c:1066 +#: commands/dbcommands.c:1091 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "" "изменить табличное пространство открытой в данный момент базы данных нельзя" -#: commands/dbcommands.c:1169 +#: commands/dbcommands.c:1194 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "" "некоторые отношения базы данных \"%s\" уже находятся в табличном " "пространстве \"%s\"" -#: commands/dbcommands.c:1171 +#: commands/dbcommands.c:1196 #, c-format msgid "" "You must move them back to the database's default tablespace before using " @@ -5579,19 +6134,29 @@ msgstr "" "Прежде чем выполнять эту команду, вы должны вернуть их назад в табличное " "пространство по умолчанию для этой базы данных." -#: commands/dbcommands.c:1302 commands/dbcommands.c:1790 -#: commands/dbcommands.c:1996 commands/dbcommands.c:2044 -#: commands/tablespace.c:604 +#: commands/dbcommands.c:1325 commands/dbcommands.c:1868 +#: commands/dbcommands.c:2072 commands/dbcommands.c:2120 +#: commands/tablespace.c:605 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "в старом каталоге базы данных \"%s\" могли остаться ненужные файлы" -#: commands/dbcommands.c:1558 +#: commands/dbcommands.c:1440 +#, c-format +msgid "option \"%s\" cannot be specified with other options" +msgstr "параметр \"%s\" нельзя задать с другими параметрами" + +#: commands/dbcommands.c:1494 +#, c-format +msgid "cannot disallow connections for current database" +msgstr "запретить подключения к текущей базе данных нельзя" + +#: commands/dbcommands.c:1634 #, c-format msgid "permission denied to change owner of database" msgstr "нет прав на изменение владельца базы данных" -#: commands/dbcommands.c:1879 +#: commands/dbcommands.c:1955 #, c-format msgid "" "There are %d other session(s) and %d prepared transaction(s) using the " @@ -5600,7 +6165,7 @@ msgstr "" "С этой базой данных связаны другие сеансы (%d) и подготовленные транзакции " "(%d)." -#: commands/dbcommands.c:1882 +#: commands/dbcommands.c:1958 #, c-format msgid "There is %d other session using the database." msgid_plural "There are %d other sessions using the database." @@ -5608,7 +6173,7 @@ msgstr[0] "Эта база данных используется ещё в %d с msgstr[1] "Эта база данных используется ещё в %d сеансах." msgstr[2] "Эта база данных используется ещё в %d сеансах." -#: commands/dbcommands.c:1887 +#: commands/dbcommands.c:1963 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." @@ -5653,8 +6218,8 @@ msgstr "аргументом %s должно быть имя типа" msgid "invalid argument for %s: \"%s\"" msgstr "неверный аргумент для %s: \"%s\"" -#: commands/dropcmds.c:112 commands/functioncmds.c:1110 -#: utils/adt/ruleutils.c:1936 +#: commands/dropcmds.c:112 commands/functioncmds.c:1166 +#: utils/adt/ruleutils.c:1950 #, c-format msgid "\"%s\" is an aggregate function" msgstr "функция \"%s\" является агрегатной" @@ -5664,114 +6229,125 @@ msgstr "функция \"%s\" является агрегатной" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Используйте DROP AGGREGATE для удаления агрегатных функций." -#: commands/dropcmds.c:165 commands/sequence.c:405 commands/tablecmds.c:2318 -#: commands/tablecmds.c:2499 commands/tablecmds.c:10625 tcop/utility.c:1006 +#: commands/dropcmds.c:165 commands/sequence.c:424 commands/tablecmds.c:2367 +#: commands/tablecmds.c:2518 commands/tablecmds.c:2560 +#: commands/tablecmds.c:11266 tcop/utility.c:1105 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "отношение \"%s\" не существует, пропускается" -#: commands/dropcmds.c:195 commands/dropcmds.c:288 commands/tablecmds.c:713 +#: commands/dropcmds.c:195 commands/dropcmds.c:292 commands/tablecmds.c:739 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "схема \"%s\" не существует, пропускается" -#: commands/dropcmds.c:237 commands/dropcmds.c:269 commands/tablecmds.c:237 +#: commands/dropcmds.c:237 commands/dropcmds.c:272 commands/tablecmds.c:243 #, c-format msgid "type \"%s\" does not exist, skipping" msgstr "тип \"%s\" не существует, пропускается" -#: commands/dropcmds.c:276 +#: commands/dropcmds.c:280 #, c-format msgid "collation \"%s\" does not exist, skipping" msgstr "правило сортировки \"%s\" не существует, пропускается" -#: commands/dropcmds.c:283 +#: commands/dropcmds.c:287 #, c-format msgid "conversion \"%s\" does not exist, skipping" msgstr "преобразование \"%s\" не существует, пропускается" -#: commands/dropcmds.c:294 +#: commands/dropcmds.c:298 #, c-format msgid "text search parser \"%s\" does not exist, skipping" msgstr "анализатор текстового поиска \"%s\" не существует, пропускается" -#: commands/dropcmds.c:301 +#: commands/dropcmds.c:305 #, c-format msgid "text search dictionary \"%s\" does not exist, skipping" msgstr "словарь текстового поиска \"%s\" не существует, пропускается" -#: commands/dropcmds.c:308 +#: commands/dropcmds.c:312 #, c-format msgid "text search template \"%s\" does not exist, skipping" msgstr "шаблон текстового поиска \"%s\" не существует, пропускается " -#: commands/dropcmds.c:315 +#: commands/dropcmds.c:319 #, c-format msgid "text search configuration \"%s\" does not exist, skipping" msgstr "конфигурация текстового поиска \"%s\" не существует, пропускается" -#: commands/dropcmds.c:320 +#: commands/dropcmds.c:324 #, c-format msgid "extension \"%s\" does not exist, skipping" msgstr "расширение \"%s\" не существует, пропускается" -#: commands/dropcmds.c:327 +#: commands/dropcmds.c:331 #, c-format msgid "function %s(%s) does not exist, skipping" msgstr "функция %s(%s) не существует, пропускается" -#: commands/dropcmds.c:336 +#: commands/dropcmds.c:340 #, c-format msgid "aggregate %s(%s) does not exist, skipping" msgstr "агрегатная функция %s(%s) не существует, пропускается" -#: commands/dropcmds.c:345 +#: commands/dropcmds.c:349 #, c-format msgid "operator %s does not exist, skipping" msgstr "оператор %s не существует, пропускается" -#: commands/dropcmds.c:350 +#: commands/dropcmds.c:354 #, c-format msgid "language \"%s\" does not exist, skipping" msgstr "язык \"%s\" не существует, пропускается" -#: commands/dropcmds.c:359 +#: commands/dropcmds.c:363 #, c-format msgid "cast from type %s to type %s does not exist, skipping" -msgstr "преобразование типа %s в тип %s не существует, пропускается" +msgstr "приведение %s к типу %s не существует, пропускается" -#: commands/dropcmds.c:368 +#: commands/dropcmds.c:372 +#, c-format +msgid "transform for type %s language \"%s\" does not exist, skipping" +msgstr "преобразование для типа %s, языка \"%s\" не существует, пропускается" + +#: commands/dropcmds.c:380 #, c-format msgid "trigger \"%s\" for relation \"%s\" does not exist, skipping" msgstr "триггер \"%s\" для отношения \"%s\" не существует, пропускается" -#: commands/dropcmds.c:375 +#: commands/dropcmds.c:389 +#, c-format +msgid "policy \"%s\" for relation \"%s\" does not exist, skipping" +msgstr "политика \"%s\" для отношения \"%s\" не существует, пропускается" + +#: commands/dropcmds.c:396 #, c-format msgid "event trigger \"%s\" does not exist, skipping" msgstr "событийный триггер \"%s\" не существует, пропускается" -#: commands/dropcmds.c:381 +#: commands/dropcmds.c:402 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist, skipping" msgstr "правило \"%s\" для отношения \"%s\" не существует, пропускается" -#: commands/dropcmds.c:388 +#: commands/dropcmds.c:409 #, c-format msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "обёртка сторонних данных \"%s\" не существует, пропускается" -#: commands/dropcmds.c:392 +#: commands/dropcmds.c:413 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "сервер \"%s\" не существует, пропускается" -#: commands/dropcmds.c:398 +#: commands/dropcmds.c:422 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\", skipping" msgstr "" "класс операторов \"%s\" не существует для метода доступа \"%s\", пропускается" -#: commands/dropcmds.c:406 +#: commands/dropcmds.c:434 #, c-format msgid "" "operator family \"%s\" does not exist for access method \"%s\", skipping" @@ -5779,228 +6355,242 @@ msgstr "" "семейство операторов \"%s\" не существует для метода доступа \"%s\", " "пропускается" -#: commands/event_trigger.c:149 +#: commands/event_trigger.c:181 #, c-format msgid "permission denied to create event trigger \"%s\"" msgstr "нет прав на создание событийного триггера \"%s\"" -#: commands/event_trigger.c:151 +#: commands/event_trigger.c:183 #, c-format msgid "Must be superuser to create an event trigger." msgstr "Для создания событийного триггера нужно быть суперпользователем." -#: commands/event_trigger.c:159 +#: commands/event_trigger.c:192 #, c-format msgid "unrecognized event name \"%s\"" msgstr "нераспознанное имя события \"%s\"" -#: commands/event_trigger.c:176 +#: commands/event_trigger.c:209 #, c-format msgid "unrecognized filter variable \"%s\"" msgstr "нераспознанная переменная фильтра \"%s\"" -#: commands/event_trigger.c:203 +#: commands/event_trigger.c:239 #, c-format msgid "function \"%s\" must return type \"event_trigger\"" msgstr "функция \"%s\" должна возвращать тип \"event_trigger\"" -#: commands/event_trigger.c:228 +#: commands/event_trigger.c:264 #, c-format msgid "filter value \"%s\" not recognized for filter variable \"%s\"" msgstr "значение фильтра \"%s\" неприемлемо для переменной фильтра \"%s\"" #. translator: %s represents an SQL statement name -#: commands/event_trigger.c:234 +#: commands/event_trigger.c:270 commands/event_trigger.c:340 #, c-format msgid "event triggers are not supported for %s" msgstr "для %s событийные триггеры не поддерживаются" -#: commands/event_trigger.c:289 +#: commands/event_trigger.c:363 #, c-format msgid "filter variable \"%s\" specified more than once" msgstr "переменная фильтра \"%s\" указана больше одного раза" -#: commands/event_trigger.c:437 commands/event_trigger.c:480 -#: commands/event_trigger.c:571 +#: commands/event_trigger.c:511 commands/event_trigger.c:555 +#: commands/event_trigger.c:648 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "событийный триггер \"%s\" не существует" -#: commands/event_trigger.c:539 +#: commands/event_trigger.c:616 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "нет прав на изменение владельца событийного триггера \"%s\"" -#: commands/event_trigger.c:541 +#: commands/event_trigger.c:618 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "Владельцем событийного триггера должен быть суперпользователь." -#: commands/event_trigger.c:1219 +#: commands/event_trigger.c:1439 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%s можно вызывать только в событийной триггерной функции sql_drop" -#: commands/event_trigger.c:1226 commands/extension.c:1646 -#: commands/extension.c:1755 commands/extension.c:1948 commands/prepare.c:702 -#: executor/execQual.c:1742 executor/execQual.c:1767 executor/execQual.c:2142 -#: executor/execQual.c:5318 executor/functions.c:1018 foreign/foreign.c:421 -#: replication/logical/logicalfuncs.c:310 replication/slotfuncs.c:173 -#: replication/walsender.c:2734 utils/adt/jsonfuncs.c:1386 -#: utils/adt/jsonfuncs.c:1518 utils/adt/jsonfuncs.c:1708 -#: utils/adt/jsonfuncs.c:1837 utils/adt/jsonfuncs.c:2601 -#: utils/fmgr/funcapi.c:61 utils/mmgr/portalmem.c:986 +#: commands/event_trigger.c:1446 commands/event_trigger.c:1997 +#: commands/extension.c:1645 commands/extension.c:1754 +#: commands/extension.c:1947 commands/prepare.c:701 executor/execQual.c:1734 +#: executor/execQual.c:1759 executor/execQual.c:2134 executor/execQual.c:5374 +#: executor/functions.c:1021 foreign/foreign.c:491 +#: replication/logical/logicalfuncs.c:312 replication/logical/origin.c:1407 +#: replication/slotfuncs.c:173 replication/walsender.c:2742 +#: utils/adt/jsonfuncs.c:1474 utils/adt/jsonfuncs.c:1606 +#: utils/adt/jsonfuncs.c:1796 utils/adt/jsonfuncs.c:1925 +#: utils/adt/jsonfuncs.c:2693 utils/adt/pgstatfuncs.c:547 +#: utils/fmgr/funcapi.c:61 utils/misc/guc.c:8236 utils/mmgr/portalmem.c:986 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" "функция, возвращающая множество, вызвана в контексте, где ему нет места" -#: commands/event_trigger.c:1230 commands/extension.c:1650 -#: commands/extension.c:1759 commands/extension.c:1952 commands/prepare.c:706 -#: foreign/foreign.c:426 replication/logical/logicalfuncs.c:314 -#: replication/slotfuncs.c:177 replication/walsender.c:2738 +#: commands/event_trigger.c:1450 commands/event_trigger.c:2001 +#: commands/extension.c:1649 commands/extension.c:1758 +#: commands/extension.c:1951 commands/prepare.c:705 foreign/foreign.c:496 +#: replication/logical/logicalfuncs.c:316 replication/logical/origin.c:1411 +#: replication/slotfuncs.c:177 replication/walsender.c:2746 +#: utils/adt/pgstatfuncs.c:551 utils/misc/guc.c:8240 #: utils/mmgr/portalmem.c:990 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "требуется режим материализации, но он недопустим в этом контексте" -#: commands/explain.c:173 +#: commands/event_trigger.c:1559 commands/event_trigger.c:1580 +#, c-format +msgid "%s can only be called in a table_rewrite event trigger function" +msgstr "%s можно вызывать только в событийной триггерной функции table_rewrite" + +#: commands/event_trigger.c:1990 +#, c-format +msgid "%s can only be called in an event trigger function" +msgstr "%s можно вызывать только в событийной триггерной функции" + +#: commands/explain.c:184 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "нераспознанное значение параметра EXPLAIN \"%s\": \"%s\"" -#: commands/explain.c:179 +#: commands/explain.c:190 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "нераспознанный параметр EXPLAIN: \"%s\"" -#: commands/explain.c:186 +#: commands/explain.c:197 #, c-format msgid "EXPLAIN option BUFFERS requires ANALYZE" msgstr "параметр BUFFERS оператора EXPLAIN требует указания ANALYZE" -#: commands/explain.c:195 +#: commands/explain.c:206 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "параметр TIMING оператора EXPLAIN требует указания ANALYZE" -#: commands/extension.c:148 commands/extension.c:2628 +#: commands/extension.c:152 commands/extension.c:2635 #, c-format msgid "extension \"%s\" does not exist" msgstr "расширение \"%s\" не существует" -#: commands/extension.c:247 commands/extension.c:256 commands/extension.c:268 -#: commands/extension.c:278 +#: commands/extension.c:251 commands/extension.c:260 commands/extension.c:272 +#: commands/extension.c:282 #, c-format msgid "invalid extension name: \"%s\"" msgstr "неверное имя расширения: \"%s\"" -#: commands/extension.c:248 +#: commands/extension.c:252 #, c-format msgid "Extension names must not be empty." msgstr "Имя расширения не может быть пустым." -#: commands/extension.c:257 +#: commands/extension.c:261 #, c-format msgid "Extension names must not contain \"--\"." msgstr "Имя расширения не может содержать \"--\"." -#: commands/extension.c:269 +#: commands/extension.c:273 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "Имя расширения не может начинаться или заканчиваться символом \"-\"." -#: commands/extension.c:279 +#: commands/extension.c:283 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "Имя расширения не может содержать разделители пути." -#: commands/extension.c:294 commands/extension.c:303 commands/extension.c:312 -#: commands/extension.c:322 +#: commands/extension.c:298 commands/extension.c:307 commands/extension.c:316 +#: commands/extension.c:326 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "неверный идентификатор версии расширения: \"%s\"" -#: commands/extension.c:295 +#: commands/extension.c:299 #, c-format msgid "Version names must not be empty." msgstr "Идентификатор версии не может быть пустым." -#: commands/extension.c:304 +#: commands/extension.c:308 #, c-format msgid "Version names must not contain \"--\"." msgstr "Идентификатор версии не может содержать \"--\"." -#: commands/extension.c:313 +#: commands/extension.c:317 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "" "Идентификатор версии не может начинаться или заканчиваться символом \"-\"." -#: commands/extension.c:323 +#: commands/extension.c:327 #, c-format msgid "Version names must not contain directory separator characters." msgstr "Идентификатор версии не может содержать разделители пути." -#: commands/extension.c:473 +#: commands/extension.c:477 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "не удалось открыть управляющий файл расширения \"%s\": %m" -#: commands/extension.c:495 commands/extension.c:505 +#: commands/extension.c:499 commands/extension.c:509 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "" "параметр \"%s\" нельзя задавать в дополнительном управляющем файле расширения" -#: commands/extension.c:544 +#: commands/extension.c:548 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "неверное имя кодировки %s" -#: commands/extension.c:558 +#: commands/extension.c:562 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "параметр \"%s\" должен содержать список имён расширений" -#: commands/extension.c:565 +#: commands/extension.c:569 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "нераспознанный параметр \"%s\" в файле \"%s\"" -#: commands/extension.c:574 +#: commands/extension.c:578 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "" "параметр \"schema\" не может быть указан вместе с \"relocatable\" = true" -#: commands/extension.c:722 +#: commands/extension.c:719 #, c-format msgid "" "transaction control statements are not allowed within an extension script" msgstr "в скрипте расширения не должно быть операторов управления транзакциями" -#: commands/extension.c:790 +#: commands/extension.c:787 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "нет прав на создание расширения \"%s\"" -#: commands/extension.c:792 +#: commands/extension.c:789 #, c-format msgid "Must be superuser to create this extension." msgstr "Для создания этого расширения нужно быть суперпользователем." -#: commands/extension.c:796 +#: commands/extension.c:793 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "нет прав на изменение расширения \"%s\"" -#: commands/extension.c:798 +#: commands/extension.c:795 #, c-format msgid "Must be superuser to update this extension." msgstr "Для изменения этого расширения нужно быть суперпользователем." -#: commands/extension.c:1080 +#: commands/extension.c:1077 #, c-format msgid "" "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" @@ -6008,47 +6598,47 @@ msgstr "" "для расширения \"%s\" не определён путь обновления с версии \"%s\" до версии " "\"%s\"" -#: commands/extension.c:1207 +#: commands/extension.c:1205 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "расширение \"%s\" уже существует, пропускается" -#: commands/extension.c:1214 +#: commands/extension.c:1212 #, c-format msgid "extension \"%s\" already exists" msgstr "расширение \"%s\" уже существует" -#: commands/extension.c:1225 +#: commands/extension.c:1223 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "вложенные операторы CREATE EXTENSION не поддерживаются" -#: commands/extension.c:1280 commands/extension.c:2688 +#: commands/extension.c:1278 commands/extension.c:2695 #, c-format msgid "version to install must be specified" msgstr "нужно указать версию для установки" -#: commands/extension.c:1297 +#: commands/extension.c:1295 #, c-format msgid "FROM version must be different from installation target version \"%s\"" msgstr "версия FROM должна отличаться от устанавливаемой версии \"%s\"" -#: commands/extension.c:1352 +#: commands/extension.c:1350 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "расширение \"%s\" должно устанавливаться в схему \"%s\"" -#: commands/extension.c:1436 commands/extension.c:2831 +#: commands/extension.c:1434 commands/extension.c:2840 #, c-format msgid "required extension \"%s\" is not installed" msgstr "требуемое расширение \"%s\" не установлено" -#: commands/extension.c:1598 +#: commands/extension.c:1597 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "удалить расширение %s в процессе настройки нельзя" -#: commands/extension.c:2069 +#: commands/extension.c:2068 #, c-format msgid "" "pg_extension_config_dump() can only be called from an SQL script executed by " @@ -6057,12 +6647,12 @@ msgstr "" "функцию pg_extension_config_dump() можно вызывать только из SQL-скрипта, " "запускаемого в CREATE EXTENSION" -#: commands/extension.c:2081 +#: commands/extension.c:2080 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u не относится к таблице" -#: commands/extension.c:2086 +#: commands/extension.c:2085 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "таблица \"%s\" не относится к созданному расширению" @@ -6086,17 +6676,17 @@ msgstr "расширение \"%s\" не поддерживает SET SCHEMA" msgid "%s is not in the extension's schema \"%s\"" msgstr "объект %s не принадлежит схеме расширения \"%s\"" -#: commands/extension.c:2608 +#: commands/extension.c:2615 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "вложенные операторы ALTER EXTENSION не поддерживаются" -#: commands/extension.c:2699 +#: commands/extension.c:2706 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "версия \"%s\" расширения \"%s\" уже установлена" -#: commands/extension.c:2938 +#: commands/extension.c:2957 #, c-format msgid "" "cannot add schema \"%s\" to extension \"%s\" because the schema contains the " @@ -6105,17 +6695,22 @@ msgstr "" "добавить схему \"%s\" к расширению \"%s\" нельзя, так как схема содержит " "расширение" -#: commands/extension.c:2956 +#: commands/extension.c:2975 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s не относится к расширению \"%s\"" -#: commands/foreigncmds.c:138 commands/foreigncmds.c:147 +#: commands/extension.c:3031 +#, c-format +msgid "file too large" +msgstr "файл слишком большой" + +#: commands/foreigncmds.c:150 commands/foreigncmds.c:159 #, c-format msgid "option \"%s\" not found" msgstr "нераспознанный параметр \"%s\"" -#: commands/foreigncmds.c:157 +#: commands/foreigncmds.c:169 #, c-format msgid "option \"%s\" provided more than once" msgstr "параметр \"%s\" указан неоднократно" @@ -6136,43 +6731,37 @@ msgstr "" msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "Владельцем обёртки сторонних данных должен быть суперпользователь." -#: commands/foreigncmds.c:271 commands/foreigncmds.c:655 foreign/foreign.c:600 +#: commands/foreigncmds.c:292 commands/foreigncmds.c:709 foreign/foreign.c:670 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "обёртка сторонних данных \"%s\" не существует" -#: commands/foreigncmds.c:380 commands/foreigncmds.c:944 -#: commands/foreigncmds.c:1285 foreign/foreign.c:621 -#, c-format -msgid "server \"%s\" does not exist" -msgstr "сервер \"%s\" не существует" - -#: commands/foreigncmds.c:436 +#: commands/foreigncmds.c:489 #, c-format msgid "function %s must return type \"fdw_handler\"" msgstr "функция %s должна возвращать тип \"fdw_handler\"" -#: commands/foreigncmds.c:531 +#: commands/foreigncmds.c:584 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "нет прав на создание обёртки сторонних данных \"%s\"" -#: commands/foreigncmds.c:533 +#: commands/foreigncmds.c:586 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "Для создания обёртки сторонних данных нужно быть суперпользователем." -#: commands/foreigncmds.c:645 +#: commands/foreigncmds.c:699 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "нет прав на изменение обёртки сторонних данных \"%s\"" -#: commands/foreigncmds.c:647 +#: commands/foreigncmds.c:701 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "Для изменения обёртки сторонних данных нужно быть суперпользователем." -#: commands/foreigncmds.c:678 +#: commands/foreigncmds.c:732 #, c-format msgid "" "changing the foreign-data wrapper handler can change behavior of existing " @@ -6181,7 +6770,7 @@ msgstr "" "при изменении обработчика в обёртке сторонних данных может измениться " "поведение существующих сторонних таблиц" -#: commands/foreigncmds.c:693 +#: commands/foreigncmds.c:747 #, c-format msgid "" "changing the foreign-data wrapper validator can cause the options for " @@ -6190,415 +6779,494 @@ msgstr "" "при изменении функции проверки в обёртке сторонних данных параметры " "зависимых объектов могут стать неверными" -#: commands/foreigncmds.c:1106 +#: commands/foreigncmds.c:1165 #, c-format msgid "user mapping \"%s\" already exists for server %s" msgstr "сопоставление пользователей \"%s\" для сервера \"%s\" уже существует" -#: commands/foreigncmds.c:1194 commands/foreigncmds.c:1301 +#: commands/foreigncmds.c:1259 commands/foreigncmds.c:1375 #, c-format msgid "user mapping \"%s\" does not exist for the server" msgstr "сопоставление пользователей \"%s\" для данного сервера не существует" -#: commands/foreigncmds.c:1288 +#: commands/foreigncmds.c:1362 #, c-format msgid "server does not exist, skipping" msgstr "сервер не существует, пропускается" -#: commands/foreigncmds.c:1306 +#: commands/foreigncmds.c:1380 #, c-format msgid "user mapping \"%s\" does not exist for the server, skipping" msgstr "" "сопоставление пользователей \"%s\" не существует для сервера, пропускается" -#: commands/functioncmds.c:98 +#: commands/foreigncmds.c:1532 foreign/foreign.c:360 +#, c-format +msgid "foreign-data wrapper \"%s\" has no handler" +msgstr "обёртка сторонних данных \"%s\" не имеет обработчика" + +#: commands/foreigncmds.c:1538 +#, c-format +msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" +msgstr "обёртка сторонних данных \"%s\" не поддерживает IMPORT FOREIGN SCHEMA" + +#: commands/foreigncmds.c:1631 +#, c-format +msgid "importing foreign table \"%s\"" +msgstr "импорт сторонней таблицы \"%s\"" + +#: commands/functioncmds.c:99 #, c-format msgid "SQL function cannot return shell type %s" msgstr "SQL-функция не может возвращать тип-пустышку %s" -#: commands/functioncmds.c:103 +#: commands/functioncmds.c:104 #, c-format msgid "return type %s is only a shell" msgstr "возвращаемый тип %s - лишь пустышка" -#: commands/functioncmds.c:132 parser/parse_type.c:333 +#: commands/functioncmds.c:134 parser/parse_type.c:338 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "для типа-пустышки \"%s\" нельзя указать модификатор типа" -#: commands/functioncmds.c:138 +#: commands/functioncmds.c:140 #, c-format msgid "type \"%s\" is not yet defined" msgstr "тип \"%s\" ещё не определён" -#: commands/functioncmds.c:139 +#: commands/functioncmds.c:141 #, c-format msgid "Creating a shell type definition." msgstr "Создание определения типа-пустышки." -#: commands/functioncmds.c:236 +#: commands/functioncmds.c:239 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "SQL-функция не может принимать значение типа-пустышки %s" -#: commands/functioncmds.c:242 +#: commands/functioncmds.c:245 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "агрегатная функция не может принимать значение типа-пустышки %s" -#: commands/functioncmds.c:247 +#: commands/functioncmds.c:250 #, c-format msgid "argument type %s is only a shell" msgstr "тип аргумента %s - лишь пустышка" -#: commands/functioncmds.c:257 +#: commands/functioncmds.c:260 #, c-format msgid "type %s does not exist" msgstr "тип %s не существует" -#: commands/functioncmds.c:271 +#: commands/functioncmds.c:274 #, c-format msgid "aggregates cannot accept set arguments" msgstr "агрегатные функции не принимают в аргументах множества" -#: commands/functioncmds.c:275 +#: commands/functioncmds.c:278 #, c-format msgid "functions cannot accept set arguments" msgstr "функции не принимают аргументы-множества" -#: commands/functioncmds.c:285 +#: commands/functioncmds.c:288 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "параметр VARIADIC должен быть последним в списке входных параметров" -#: commands/functioncmds.c:313 +#: commands/functioncmds.c:316 #, c-format msgid "VARIADIC parameter must be an array" msgstr "параметр VARIADIC должен быть массивом" -#: commands/functioncmds.c:353 +#: commands/functioncmds.c:356 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "имя параметра \"%s\" указано неоднократно" -#: commands/functioncmds.c:368 +#: commands/functioncmds.c:371 #, c-format msgid "only input parameters can have default values" msgstr "значения по умолчанию могут быть только у входных параметров" -#: commands/functioncmds.c:383 +#: commands/functioncmds.c:386 #, c-format msgid "cannot use table references in parameter default value" msgstr "в значениях параметров по умолчанию нельзя ссылаться на таблицы" -#: commands/functioncmds.c:407 +#: commands/functioncmds.c:410 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "" "входные параметры, следующие за параметром со значением по умолчанию, также " "должны иметь значения по умолчанию" -#: commands/functioncmds.c:657 +#: commands/functioncmds.c:670 #, c-format msgid "no function body specified" msgstr "не указано тело функции" -#: commands/functioncmds.c:667 +#: commands/functioncmds.c:680 #, c-format msgid "no language specified" msgstr "язык не указан" -#: commands/functioncmds.c:690 commands/functioncmds.c:1149 +#: commands/functioncmds.c:705 commands/functioncmds.c:1205 #, c-format msgid "COST must be positive" msgstr "значение COST должно быть положительным" -#: commands/functioncmds.c:698 commands/functioncmds.c:1157 +#: commands/functioncmds.c:713 commands/functioncmds.c:1213 #, c-format msgid "ROWS must be positive" msgstr "значение ROWS должно быть положительным" -#: commands/functioncmds.c:737 +#: commands/functioncmds.c:752 #, c-format msgid "unrecognized function attribute \"%s\" ignored" msgstr "нераспознанный атрибут функции \"%s\" --- игнорируется" -#: commands/functioncmds.c:788 +#: commands/functioncmds.c:803 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "для языка \"%s\" нужно только одно выражение AS" -#: commands/functioncmds.c:877 commands/functioncmds.c:1734 -#: commands/proclang.c:553 +#: commands/functioncmds.c:894 commands/functioncmds.c:2079 +#: commands/proclang.c:560 #, c-format msgid "language \"%s\" does not exist" msgstr "язык \"%s\" не существует" -#: commands/functioncmds.c:879 commands/functioncmds.c:1736 +#: commands/functioncmds.c:896 commands/functioncmds.c:2081 #, c-format msgid "Use CREATE LANGUAGE to load the language into the database." msgstr "Выполните CREATE LANGUAGE, чтобы загрузить язык в базу данных." -#: commands/functioncmds.c:914 commands/functioncmds.c:1140 +#: commands/functioncmds.c:931 commands/functioncmds.c:1197 #, c-format msgid "only superuser can define a leakproof function" msgstr "" "только суперпользователь может определить функцию с атрибутом LEAKPROOF" -#: commands/functioncmds.c:940 +#: commands/functioncmds.c:975 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "" "результат функции должен иметь тип %s (в соответствии с параметрами OUT)" -#: commands/functioncmds.c:953 +#: commands/functioncmds.c:988 #, c-format msgid "function result type must be specified" msgstr "необходимо указать тип результата функции" -#: commands/functioncmds.c:988 commands/functioncmds.c:1161 +#: commands/functioncmds.c:1042 commands/functioncmds.c:1217 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "указание ROWS неприменимо, когда функция возвращает не множество" -#: commands/functioncmds.c:1314 +#: commands/functioncmds.c:1372 #, c-format msgid "source data type %s is a pseudo-type" msgstr "исходный тип данных %s является псевдотипом" -#: commands/functioncmds.c:1320 +#: commands/functioncmds.c:1378 #, c-format msgid "target data type %s is a pseudo-type" msgstr "целевой тип данных %s является псевдотипом" -#: commands/functioncmds.c:1344 +#: commands/functioncmds.c:1402 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "" "приведение будет проигнорировано, так как исходные данные имеют тип домен" -#: commands/functioncmds.c:1349 +#: commands/functioncmds.c:1407 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "" "приведение будет проигнорировано, так как целевые данные имеют тип домен" -#: commands/functioncmds.c:1376 +#: commands/functioncmds.c:1434 #, c-format msgid "cast function must take one to three arguments" -msgstr "функция преобразования должна принимать от одного до трёх аргументов" +msgstr "функция приведения должна принимать от одного до трёх аргументов" -#: commands/functioncmds.c:1380 +#: commands/functioncmds.c:1438 #, c-format msgid "" "argument of cast function must match or be binary-coercible from source data " "type" msgstr "" -"аргумент функции преобразования должен совпадать или быть двоично-совместим " -"с исходным типом данных" +"аргумент функции приведения должен совпадать или быть двоично-совместимым с " +"исходным типом данных" -#: commands/functioncmds.c:1384 +#: commands/functioncmds.c:1442 #, c-format msgid "second argument of cast function must be type integer" -msgstr "второй аргумент функции преобразования должен быть целого типа" +msgstr "второй аргумент функции приведения должен быть целого типа" -#: commands/functioncmds.c:1388 +#: commands/functioncmds.c:1446 #, c-format msgid "third argument of cast function must be type boolean" -msgstr "третий аргумент функции преобразования должен быть логического типа" +msgstr "третий аргумент функции приведения должен быть логического типа" -#: commands/functioncmds.c:1392 +#: commands/functioncmds.c:1450 #, c-format msgid "" "return data type of cast function must match or be binary-coercible to " "target data type" msgstr "" -"тип возвращаемых данных функции преобразования должен совпадать или быть " -"двоично-совместим с целевым типом данных" +"тип возвращаемых данных функции приведения должен совпадать или быть двоично-" +"совместимым с целевым типом данных" -#: commands/functioncmds.c:1403 +#: commands/functioncmds.c:1461 #, c-format msgid "cast function must not be volatile" -msgstr "функция преобразования не может быть изменчивой (volatile)" +msgstr "функция приведения не может быть изменчивой (volatile)" -#: commands/functioncmds.c:1408 +#: commands/functioncmds.c:1466 #, c-format msgid "cast function must not be an aggregate function" -msgstr "функция преобразования не может быть агрегатной" +msgstr "функция приведения не может быть агрегатной" -#: commands/functioncmds.c:1412 +#: commands/functioncmds.c:1470 #, c-format msgid "cast function must not be a window function" -msgstr "функция преобразования не может быть оконной" +msgstr "функция приведения не может быть оконной" -#: commands/functioncmds.c:1416 +#: commands/functioncmds.c:1474 #, c-format msgid "cast function must not return a set" -msgstr "функция преобразования не может возвращать множество" +msgstr "функция приведения не может возвращать множество" -#: commands/functioncmds.c:1442 +#: commands/functioncmds.c:1500 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" -msgstr "" -"для создания преобразования WITHOUT FUNCTION нужно быть суперпользователем" +msgstr "для создания приведения WITHOUT FUNCTION нужно быть суперпользователем" -#: commands/functioncmds.c:1457 +#: commands/functioncmds.c:1515 #, c-format msgid "source and target data types are not physically compatible" msgstr "исходный и целевой типы данных не совместимы физически" -#: commands/functioncmds.c:1472 +#: commands/functioncmds.c:1530 #, c-format msgid "composite data types are not binary-compatible" msgstr "составные типы данных не совместимы на двоичном уровне" -#: commands/functioncmds.c:1478 +#: commands/functioncmds.c:1536 #, c-format msgid "enum data types are not binary-compatible" msgstr "типы-перечисления не совместимы на двоичном уровне" -#: commands/functioncmds.c:1484 +#: commands/functioncmds.c:1542 #, c-format msgid "array data types are not binary-compatible" msgstr "типы-массивы не совместимы на двоичном уровне" -#: commands/functioncmds.c:1501 +#: commands/functioncmds.c:1559 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "типы-домены не могут считаться двоично-совместимыми" -#: commands/functioncmds.c:1511 +#: commands/functioncmds.c:1569 #, c-format msgid "source data type and target data type are the same" msgstr "исходный тип данных совпадает с целевым" -#: commands/functioncmds.c:1544 +#: commands/functioncmds.c:1602 #, c-format msgid "cast from type %s to type %s already exists" -msgstr "преобразование типа %s в тип %s уже существует" +msgstr "приведение типа %s к типу %s уже существует" -#: commands/functioncmds.c:1619 +#: commands/functioncmds.c:1677 #, c-format msgid "cast from type %s to type %s does not exist" -msgstr "преобразование типа %s в тип %s не существует" +msgstr "приведение типа %s к типу %s не существует" + +#: commands/functioncmds.c:1716 +#, c-format +msgid "transform function must not be volatile" +msgstr "функция преобразования не может быть изменчивой" + +#: commands/functioncmds.c:1720 +#, c-format +msgid "transform function must not be an aggregate function" +msgstr "функция преобразования не может быть агрегатной" + +#: commands/functioncmds.c:1724 +#, c-format +msgid "transform function must not be a window function" +msgstr "функция преобразования не может быть оконной" + +#: commands/functioncmds.c:1728 +#, c-format +msgid "transform function must not return a set" +msgstr "функция преобразования не может возвращать множество" + +#: commands/functioncmds.c:1732 +#, c-format +msgid "transform function must take one argument" +msgstr "функция преобразования должна принимать один аргумент" + +#: commands/functioncmds.c:1736 +#, c-format +msgid "first argument of transform function must be type \"internal\"" +msgstr "первый аргумент функции преобразования должен иметь тип \"internal\"" + +#: commands/functioncmds.c:1773 +#, c-format +msgid "data type %s is a pseudo-type" +msgstr "тип данных %s является псевдотипом" + +#: commands/functioncmds.c:1779 +#, c-format +msgid "data type %s is a domain" +msgstr "тип данных \"%s\" является доменом" + +#: commands/functioncmds.c:1819 +#, c-format +msgid "return data type of FROM SQL function must be \"internal\"" +msgstr "результат функции FROM SQL должен иметь тип \"internal\"" + +#: commands/functioncmds.c:1844 +#, c-format +msgid "return data type of TO SQL function must be the transform data type" +msgstr "результат функции TO SQL должен иметь тип данных преобразования" + +#: commands/functioncmds.c:1871 +#, c-format +msgid "transform for type %s language \"%s\" already exists" +msgstr "преобразование для типа %s, языка \"%s\" уже существует" + +#: commands/functioncmds.c:1962 +#, c-format +msgid "transform for type %s language \"%s\" does not exist" +msgstr "преобразование для типа %s, языка \"%s\" не существует" -#: commands/functioncmds.c:1668 +#: commands/functioncmds.c:2013 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "функция %s уже существует в схеме \"%s\"" -#: commands/functioncmds.c:1721 +#: commands/functioncmds.c:2066 #, c-format msgid "no inline code specified" msgstr "нет внедрённого кода" -#: commands/functioncmds.c:1766 +#: commands/functioncmds.c:2111 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "язык \"%s\" не поддерживает выполнение внедрённого кода" -#: commands/indexcmds.c:159 commands/indexcmds.c:486 -#: commands/opclasscmds.c:370 commands/opclasscmds.c:790 +#: commands/indexcmds.c:159 commands/indexcmds.c:487 +#: commands/opclasscmds.c:360 commands/opclasscmds.c:786 #: commands/opclasscmds.c:1749 #, c-format msgid "access method \"%s\" does not exist" msgstr "метод доступа \"%s\" не существует" -#: commands/indexcmds.c:340 +#: commands/indexcmds.c:341 #, c-format msgid "must specify at least one column" msgstr "нужно указать минимум одну колонку" -#: commands/indexcmds.c:344 +#: commands/indexcmds.c:345 #, c-format msgid "cannot use more than %d columns in an index" msgstr "число колонок в индексе не может превышать %d" -#: commands/indexcmds.c:375 +#: commands/indexcmds.c:376 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "создать индекс в сторонней таблице \"%s\" нельзя" -#: commands/indexcmds.c:390 +#: commands/indexcmds.c:391 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "создавать индексы во временных таблицах других сеансов нельзя" -#: commands/indexcmds.c:445 commands/tablecmds.c:525 commands/tablecmds.c:9101 +#: commands/indexcmds.c:446 commands/tablecmds.c:539 commands/tablecmds.c:9539 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "" "в табличное пространство pg_global можно поместить только разделяемые таблицы" -#: commands/indexcmds.c:478 +#: commands/indexcmds.c:479 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "устаревший метод доступа \"rtree\" подменяется методом \"gist\"" -#: commands/indexcmds.c:495 +#: commands/indexcmds.c:496 +#, c-format +msgid "hash indexes are not WAL-logged and their use is discouraged" +msgstr "хэш-индексы не записываются в журнал, использовать их не рекомендуется" + +#: commands/indexcmds.c:501 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "метод доступа \"%s\" не поддерживает уникальные индексы" -#: commands/indexcmds.c:500 +#: commands/indexcmds.c:506 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "метод доступа \"%s\" не поддерживает индексы по многим колонкам" -#: commands/indexcmds.c:505 +#: commands/indexcmds.c:511 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "метод доступа \"%s\" не поддерживает ограничения-исключения" -#: commands/indexcmds.c:584 +#: commands/indexcmds.c:590 #, c-format msgid "%s %s will create implicit index \"%s\" for table \"%s\"" msgstr "%s %s создаст неявный индекс \"%s\" для таблицы \"%s\"" -#: commands/indexcmds.c:922 +#: commands/indexcmds.c:937 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "функции в предикате индекса должны быть помечены как IMMUTABLE" -#: commands/indexcmds.c:988 parser/parse_utilcmd.c:1797 +#: commands/indexcmds.c:1003 parser/parse_utilcmd.c:1844 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "указанная в ключе колонка \"%s\" не существует" -#: commands/indexcmds.c:1048 +#: commands/indexcmds.c:1063 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "функции в индексном выражении должны быть помечены как IMMUTABLE" -#: commands/indexcmds.c:1071 +#: commands/indexcmds.c:1086 #, c-format msgid "could not determine which collation to use for index expression" msgstr "не удалось определить правило сравнения для индексного выражения" -#: commands/indexcmds.c:1079 commands/typecmds.c:782 parser/parse_expr.c:2278 -#: parser/parse_type.c:546 parser/parse_utilcmd.c:2648 utils/adt/misc.c:520 +#: commands/indexcmds.c:1094 commands/typecmds.c:825 parser/parse_expr.c:2558 +#: parser/parse_type.c:551 parser/parse_utilcmd.c:2736 utils/adt/misc.c:546 #, c-format msgid "collations are not supported by type %s" msgstr "тип %s не поддерживает сортировку (COLLATION)" -#: commands/indexcmds.c:1117 +#: commands/indexcmds.c:1132 #, c-format msgid "operator %s is not commutative" msgstr "оператор %s не коммутативен" -#: commands/indexcmds.c:1119 +#: commands/indexcmds.c:1134 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "" "В ограничениях-исключениях могут использоваться только коммутативные " "операторы." -#: commands/indexcmds.c:1145 +#: commands/indexcmds.c:1160 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "оператор \"%s\" не входит в семейство операторов \"%s\"" -#: commands/indexcmds.c:1148 +#: commands/indexcmds.c:1163 #, c-format msgid "" "The exclusion operator must be related to the index operator class for the " @@ -6607,24 +7275,24 @@ msgstr "" "Оператор исключения для ограничения должен относиться к классу операторов " "индекса." -#: commands/indexcmds.c:1183 +#: commands/indexcmds.c:1198 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "метод доступа \"%s\" не поддерживает сортировку ASC/DESC" -#: commands/indexcmds.c:1188 +#: commands/indexcmds.c:1203 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "метод доступа \"%s\" не поддерживает параметр NULLS FIRST/LAST" -#: commands/indexcmds.c:1244 commands/typecmds.c:1887 +#: commands/indexcmds.c:1259 commands/typecmds.c:1932 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "" "для типа данных %s не определён класс операторов по умолчанию для метода " "доступа \"%s\"" -#: commands/indexcmds.c:1246 +#: commands/indexcmds.c:1261 #, c-format msgid "" "You must specify an operator class for the index or define a default " @@ -6633,68 +7301,68 @@ msgstr "" "Вы должны указать класс операторов для индекса или определить класс " "операторов по умолчанию для этого типа данных." -#: commands/indexcmds.c:1275 commands/indexcmds.c:1283 -#: commands/opclasscmds.c:214 +#: commands/indexcmds.c:1290 commands/indexcmds.c:1298 +#: commands/opclasscmds.c:204 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "класс операторов \"%s\" для метода доступа \"%s\" не существует" -#: commands/indexcmds.c:1296 commands/typecmds.c:1875 +#: commands/indexcmds.c:1311 commands/typecmds.c:1920 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "класс операторов \"%s\" не принимает тип данных %s" -#: commands/indexcmds.c:1386 +#: commands/indexcmds.c:1401 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "" "для типа данных %s определено несколько классов операторов по умолчанию" -#: commands/indexcmds.c:1762 +#: commands/indexcmds.c:1792 #, c-format msgid "table \"%s\" has no indexes" msgstr "таблица \"%s\" не имеет индексов" -#: commands/indexcmds.c:1792 +#: commands/indexcmds.c:1847 #, c-format msgid "can only reindex the currently open database" msgstr "переиндексировать можно только текущую базу данных" -#: commands/indexcmds.c:1881 +#: commands/indexcmds.c:1949 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "таблица \"%s.%s\" переиндексирована" -#: commands/matview.c:178 +#: commands/matview.c:181 #, c-format msgid "CONCURRENTLY cannot be used when the materialized view is not populated" msgstr "" "CONCURRENTLY нельзя использовать, когда материализованное представление не " "наполнено" -#: commands/matview.c:184 +#: commands/matview.c:187 #, c-format msgid "CONCURRENTLY and WITH NO DATA options cannot be used together" msgstr "параметры CONCURRENTLY и WITH NO DATA исключают друг друга" -#: commands/matview.c:598 +#: commands/matview.c:611 #, c-format msgid "new data for \"%s\" contains duplicate rows without any null columns" msgstr "" "новые данные для \"%s\" содержат дублирующиеся строки (без учёта колонок с " "NULL)" -#: commands/matview.c:600 +#: commands/matview.c:613 #, c-format msgid "Row: %s" msgstr "Строка: %s" -#: commands/matview.c:688 +#: commands/matview.c:701 #, c-format msgid "cannot refresh materialized view \"%s\" concurrently" msgstr "обновить материализованное представление \"%s\" параллельно нельзя" -#: commands/matview.c:690 +#: commands/matview.c:703 #, c-format msgid "" "Create a unique index with no WHERE clause on one or more columns of the " @@ -6703,77 +7371,77 @@ msgstr "" "Создайте уникальный индекс без предложения WHERE для одной или нескольких " "колонок материализованного представления." -#: commands/opclasscmds.c:135 +#: commands/opclasscmds.c:125 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\"" msgstr "семейство операторов \"%s\" для метода доступа \"%s\" не существует" -#: commands/opclasscmds.c:273 +#: commands/opclasscmds.c:263 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "семейство операторов \"%s\" для метода доступа \"%s\" уже существует" -#: commands/opclasscmds.c:409 +#: commands/opclasscmds.c:399 #, c-format msgid "must be superuser to create an operator class" msgstr "для создания класса операторов нужно быть суперпользователем" -#: commands/opclasscmds.c:480 commands/opclasscmds.c:866 -#: commands/opclasscmds.c:996 +#: commands/opclasscmds.c:473 commands/opclasscmds.c:859 +#: commands/opclasscmds.c:992 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "неверный номер оператора (%d), должен быть между 1 и %d" -#: commands/opclasscmds.c:531 commands/opclasscmds.c:917 -#: commands/opclasscmds.c:1011 +#: commands/opclasscmds.c:524 commands/opclasscmds.c:910 +#: commands/opclasscmds.c:1007 #, c-format msgid "invalid procedure number %d, must be between 1 and %d" msgstr "неверный номер процедуры (%d), должен быть между 1 и %d" -#: commands/opclasscmds.c:561 +#: commands/opclasscmds.c:554 #, c-format msgid "storage type specified more than once" msgstr "тип хранения указан неоднократно" -#: commands/opclasscmds.c:588 +#: commands/opclasscmds.c:581 #, c-format msgid "" "storage type cannot be different from data type for access method \"%s\"" msgstr "" "тип хранения не может отличаться от типа данных для метода доступа \"%s\"" -#: commands/opclasscmds.c:604 +#: commands/opclasscmds.c:597 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "класс операторов \"%s\" для метода доступа \"%s\" уже существует" -#: commands/opclasscmds.c:632 +#: commands/opclasscmds.c:625 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "" "класс операторов \"%s\" не удалось сделать классом по умолчанию для типа %s" -#: commands/opclasscmds.c:635 +#: commands/opclasscmds.c:628 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "Класс операторов \"%s\" уже является классом по умолчанию." -#: commands/opclasscmds.c:760 +#: commands/opclasscmds.c:756 #, c-format msgid "must be superuser to create an operator family" msgstr "для создания семейства операторов нужно быть суперпользователем" -#: commands/opclasscmds.c:816 +#: commands/opclasscmds.c:812 #, c-format msgid "must be superuser to alter an operator family" msgstr "для изменения семейства операторов нужно быть суперпользователем" -#: commands/opclasscmds.c:882 +#: commands/opclasscmds.c:875 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "в ALTER OPERATOR FAMILY должны быть указаны типы аргументов оператора" -#: commands/opclasscmds.c:946 +#: commands/opclasscmds.c:939 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "в ALTER OPERATOR FAMILY нельзя указать STORAGE" @@ -6882,47 +7550,86 @@ msgstr "" "семейство операторов \"%s\" для метода доступа \"%s\" уже существует в схеме " "\"%s\"" -#: commands/operatorcmds.c:97 -#, c-format -msgid "=> is deprecated as an operator name" -msgstr "=> как имя оператора считается устаревшим" - -#: commands/operatorcmds.c:98 -#, c-format -msgid "" -"This name may be disallowed altogether in future versions of PostgreSQL." -msgstr "Это имя может быть вовсе запрещено в будущих версиях PostgreSQL." - -#: commands/operatorcmds.c:119 commands/operatorcmds.c:127 +#: commands/operatorcmds.c:113 commands/operatorcmds.c:121 #, c-format msgid "SETOF type not allowed for operator argument" msgstr "аргументом оператора не может быть тип SETOF" -#: commands/operatorcmds.c:155 +#: commands/operatorcmds.c:151 commands/operatorcmds.c:436 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "атрибут оператора \"%s\" не распознан" -#: commands/operatorcmds.c:165 +#: commands/operatorcmds.c:162 #, c-format msgid "operator procedure must be specified" msgstr "должна быть указана процедура оператора" -#: commands/operatorcmds.c:176 +#: commands/operatorcmds.c:173 #, c-format msgid "at least one of leftarg or rightarg must be specified" msgstr "необходимо указать левый и/или правый аргумент" -#: commands/operatorcmds.c:244 +#: commands/operatorcmds.c:277 #, c-format msgid "restriction estimator function %s must return type \"float8\"" msgstr "функция оценки ограничения %s должна возвращать тип \"float8\"" -#: commands/operatorcmds.c:283 +#: commands/operatorcmds.c:323 #, c-format msgid "join estimator function %s must return type \"float8\"" msgstr "функция оценки соединения %s должна возвращать тип \"float8\"" +#: commands/operatorcmds.c:430 +#, c-format +msgid "operator attribute \"%s\" can not be changed" +msgstr "атрибут оператора \"%s\" нельзя изменить" + +#: commands/policy.c:86 commands/policy.c:429 commands/tablecmds.c:964 +#: commands/tablecmds.c:1306 commands/tablecmds.c:2174 +#: commands/tablecmds.c:4308 commands/tablecmds.c:6240 +#: commands/tablecmds.c:11816 commands/tablecmds.c:11851 +#: commands/trigger.c:240 commands/trigger.c:1126 commands/trigger.c:1234 +#: rewrite/rewriteDefine.c:272 rewrite/rewriteDefine.c:891 +#, c-format +msgid "permission denied: \"%s\" is a system catalog" +msgstr "доступ запрещён: \"%s\" - это системный каталог" + +#: commands/policy.c:170 +#, c-format +msgid "ignoring roles specified other than public" +msgstr "все указанные роли, кроме public, игнорируются" + +#: commands/policy.c:171 +#, c-format +msgid "All roles are members of the public role." +msgstr "Роль public включает в себя все остальные роли." + +#: commands/policy.c:490 +#, c-format +msgid "WITH CHECK cannot be applied to SELECT or DELETE" +msgstr "WITH CHECK нельзя применить к SELECT или DELETE" + +#: commands/policy.c:499 commands/policy.c:777 +#, c-format +msgid "only WITH CHECK expression allowed for INSERT" +msgstr "для INSERT допускается только выражение WITH CHECK" + +#: commands/policy.c:571 commands/policy.c:888 +#, c-format +msgid "policy \"%s\" for table \"%s\" already exists" +msgstr "политика \"%s\" для таблицы \"%s\" уже существует" + +#: commands/policy.c:749 commands/policy.c:916 commands/policy.c:991 +#, c-format +msgid "policy \"%s\" for table \"%s\" does not exist" +msgstr "политика \"%s\" для таблицы \"%s\" не существует" + +#: commands/policy.c:767 +#, c-format +msgid "only USING expression allowed for SELECT, DELETE" +msgstr "для SELECT, DELETE допускается только выражение USING" + #: commands/portalcmds.c:61 commands/portalcmds.c:160 #: commands/portalcmds.c:212 #, c-format @@ -6930,7 +7637,7 @@ msgid "invalid cursor name: must not be empty" msgstr "имя курсора не может быть пустым" #: commands/portalcmds.c:168 commands/portalcmds.c:222 -#: executor/execCurrent.c:67 utils/adt/xml.c:2387 utils/adt/xml.c:2554 +#: executor/execCurrent.c:67 utils/adt/xml.c:2391 utils/adt/xml.c:2558 #, c-format msgid "cursor \"%s\" does not exist" msgstr "курсор \"%s\" не существует" @@ -6950,7 +7657,7 @@ msgstr "передвинуть сохранённый курсор не удал msgid "invalid statement name: must not be empty" msgstr "неверный оператор: имя не должно быть пустым" -#: commands/prepare.c:129 parser/parse_param.c:304 tcop/postgres.c:1323 +#: commands/prepare.c:129 parser/parse_param.c:304 tcop/postgres.c:1355 #, c-format msgid "could not determine data type of parameter $%d" msgstr "не удалось определить тип данных параметра $%d" @@ -6982,77 +7689,77 @@ msgid "parameter $%d of type %s cannot be coerced to the expected type %s" msgstr "параметр $%d типа %s нельзя привести к ожидаемому типу %s" # [SM]: TO REVIEW -#: commands/prepare.c:465 +#: commands/prepare.c:464 #, c-format msgid "prepared statement \"%s\" already exists" msgstr "подготовленный оператор \"%s\" уже существует" # [SM]: TO REVIEW -#: commands/prepare.c:504 +#: commands/prepare.c:503 #, c-format msgid "prepared statement \"%s\" does not exist" msgstr "подготовленный оператор \"%s\" не существует" -#: commands/proclang.c:86 +#: commands/proclang.c:87 #, c-format msgid "using pg_pltemplate information instead of CREATE LANGUAGE parameters" msgstr "" "вместо параметров CREATE LANGUAGE используется информация pg_pltemplate" -#: commands/proclang.c:96 +#: commands/proclang.c:97 #, c-format msgid "must be superuser to create procedural language \"%s\"" msgstr "для создания процедурного языка \"%s\" нужно быть суперпользователем" -#: commands/proclang.c:116 commands/proclang.c:278 +#: commands/proclang.c:117 commands/proclang.c:285 #, c-format msgid "function %s must return type \"language_handler\"" msgstr "функция %s должна возвращать тип \"language_handler\"" -#: commands/proclang.c:242 +#: commands/proclang.c:249 #, c-format msgid "unsupported language \"%s\"" msgstr "неподдерживаемый язык: \"%s\"" -#: commands/proclang.c:244 +#: commands/proclang.c:251 #, c-format msgid "The supported languages are listed in the pg_pltemplate system catalog." msgstr "" "Список поддерживаемых языков содержится в системном каталоге pg_pltemplate." -#: commands/proclang.c:252 +#: commands/proclang.c:259 #, c-format msgid "must be superuser to create custom procedural language" msgstr "" "для создания дополнительного процедурного языка нужно быть суперпользователем" -#: commands/proclang.c:271 +#: commands/proclang.c:278 #, c-format msgid "" "changing return type of function %s from \"opaque\" to \"language_handler\"" msgstr "тип возврата функции %s меняется с \"opaque\" на \"language_handler\"" -#: commands/schemacmds.c:84 commands/schemacmds.c:236 +#: commands/schemacmds.c:99 commands/schemacmds.c:262 #, c-format msgid "unacceptable schema name \"%s\"" msgstr "неприемлемое имя схемы: \"%s\"" -#: commands/schemacmds.c:85 commands/schemacmds.c:237 +#: commands/schemacmds.c:100 commands/schemacmds.c:263 #, c-format msgid "The prefix \"pg_\" is reserved for system schemas." msgstr "Префикс \"pg_\" зарезервирован для системных схем." -#: commands/schemacmds.c:99 +#: commands/schemacmds.c:114 #, c-format msgid "schema \"%s\" already exists, skipping" msgstr "схема \"%s\" уже существует, пропускается" -#: commands/seclabel.c:58 +#: commands/seclabel.c:60 #, c-format msgid "no security label providers have been loaded" msgstr "поставщики меток безопасности не загружены" -#: commands/seclabel.c:62 +#: commands/seclabel.c:64 #, c-format msgid "" "must specify provider when multiple security label providers have been loaded" @@ -7060,285 +7767,269 @@ msgstr "" "когда загружено несколько поставщиков меток безопасности, нужный следует " "указывать явно" -#: commands/seclabel.c:80 +#: commands/seclabel.c:82 #, c-format msgid "security label provider \"%s\" is not loaded" msgstr "поставщик меток безопасности \"%s\" не загружен" -#: commands/sequence.c:124 +#: commands/sequence.c:127 #, c-format msgid "unlogged sequences are not supported" msgstr "нежурналируемые последовательности не поддерживаются" -#: commands/sequence.c:627 +#: commands/sequence.c:651 #, c-format msgid "nextval: reached maximum value of sequence \"%s\" (%s)" msgstr "функция nextval достигла максимума для последовательности \"%s\" (%s)" -#: commands/sequence.c:650 +#: commands/sequence.c:674 #, c-format msgid "nextval: reached minimum value of sequence \"%s\" (%s)" msgstr "функция nextval достигла минимума для последовательности \"%s\" (%s)" -#: commands/sequence.c:773 +#: commands/sequence.c:792 #, c-format msgid "currval of sequence \"%s\" is not yet defined in this session" msgstr "" "текущее значение (currval) для последовательности \"%s\" ещё не определено в " "этом сеансе" -#: commands/sequence.c:792 commands/sequence.c:798 +#: commands/sequence.c:811 commands/sequence.c:817 #, c-format msgid "lastval is not yet defined in this session" msgstr "последнее значение (lastval) ещё не определено в этом сеансе" -#: commands/sequence.c:867 +#: commands/sequence.c:893 #, c-format msgid "setval: value %s is out of bounds for sequence \"%s\" (%s..%s)" msgstr "" "setval передано значение %s вне пределов последовательности \"%s\" (%s..%s)" -#: commands/sequence.c:1247 +#: commands/sequence.c:1267 #, c-format msgid "INCREMENT must not be zero" msgstr "INCREMENT не может быть нулевым" -#: commands/sequence.c:1303 +#: commands/sequence.c:1323 #, c-format msgid "MINVALUE (%s) must be less than MAXVALUE (%s)" msgstr "MINVALUE (%s) должно быть меньше MAXVALUE (%s)" -#: commands/sequence.c:1328 +#: commands/sequence.c:1348 #, c-format msgid "START value (%s) cannot be less than MINVALUE (%s)" msgstr "значение START (%s) не может быть меньше MINVALUE (%s)" -#: commands/sequence.c:1340 +#: commands/sequence.c:1360 #, c-format msgid "START value (%s) cannot be greater than MAXVALUE (%s)" msgstr "значение START (%s) не может быть больше MAXVALUE (%s)" -#: commands/sequence.c:1370 +#: commands/sequence.c:1390 #, c-format msgid "RESTART value (%s) cannot be less than MINVALUE (%s)" msgstr "значение RESTART (%s) не может быть меньше MINVALUE (%s)" -#: commands/sequence.c:1382 +#: commands/sequence.c:1402 #, c-format msgid "RESTART value (%s) cannot be greater than MAXVALUE (%s)" msgstr "значение RESTART (%s) не может быть больше MAXVALUE (%s)" -#: commands/sequence.c:1397 +#: commands/sequence.c:1417 #, c-format msgid "CACHE (%s) must be greater than zero" msgstr "значение CACHE (%s) должно быть больше нуля" -#: commands/sequence.c:1429 +#: commands/sequence.c:1449 #, c-format msgid "invalid OWNED BY option" msgstr "неверное указание OWNED BY" -#: commands/sequence.c:1430 +#: commands/sequence.c:1450 #, c-format msgid "Specify OWNED BY table.column or OWNED BY NONE." msgstr "Укажите OWNED BY таблица.колонка или OWNED BY NONE." -#: commands/sequence.c:1453 +#: commands/sequence.c:1473 #, c-format msgid "referenced relation \"%s\" is not a table or foreign table" msgstr "указанный объект \"%s\" не является таблицей или сторонней таблицей" -#: commands/sequence.c:1460 +#: commands/sequence.c:1480 #, c-format msgid "sequence must have same owner as table it is linked to" msgstr "" "последовательность должна иметь того же владельца, что и таблица, с которой " "она связана" -#: commands/sequence.c:1464 +#: commands/sequence.c:1484 #, c-format msgid "sequence must be in same schema as table it is linked to" msgstr "" "последовательность должна быть в той же схеме, что и таблица, с которой она " "связана" -#: commands/tablecmds.c:206 +#: commands/tablecmds.c:212 #, c-format msgid "table \"%s\" does not exist" msgstr "таблица \"%s\" не существует" -#: commands/tablecmds.c:207 +#: commands/tablecmds.c:213 #, c-format msgid "table \"%s\" does not exist, skipping" msgstr "таблица \"%s\" не существует, пропускается" -#: commands/tablecmds.c:209 +#: commands/tablecmds.c:215 msgid "Use DROP TABLE to remove a table." msgstr "Выполните DROP TABLE для удаления таблицы." -#: commands/tablecmds.c:212 +#: commands/tablecmds.c:218 #, c-format msgid "sequence \"%s\" does not exist" msgstr "последовательность \"%s\" не существует" -#: commands/tablecmds.c:213 +#: commands/tablecmds.c:219 #, c-format msgid "sequence \"%s\" does not exist, skipping" msgstr "последовательность \"%s\" не существует, пропускается" -#: commands/tablecmds.c:215 +#: commands/tablecmds.c:221 msgid "Use DROP SEQUENCE to remove a sequence." msgstr "Выполните DROP SEQUENCE для удаления последовательности." -#: commands/tablecmds.c:218 +#: commands/tablecmds.c:224 #, c-format msgid "view \"%s\" does not exist" msgstr "представление \"%s\" не существует" -#: commands/tablecmds.c:219 +#: commands/tablecmds.c:225 #, c-format msgid "view \"%s\" does not exist, skipping" msgstr "представление \"%s\" не существует, пропускается" -#: commands/tablecmds.c:221 +#: commands/tablecmds.c:227 msgid "Use DROP VIEW to remove a view." msgstr "Выполните DROP VIEW для удаления представления." -#: commands/tablecmds.c:224 +#: commands/tablecmds.c:230 #, c-format msgid "materialized view \"%s\" does not exist" msgstr "материализованное представление \"%s\" не существует" -#: commands/tablecmds.c:225 +#: commands/tablecmds.c:231 #, c-format msgid "materialized view \"%s\" does not exist, skipping" msgstr "материализованное представление \"%s\" не существует, пропускается" -#: commands/tablecmds.c:227 +#: commands/tablecmds.c:233 msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "" "Выполните DROP MATERIALIZED VIEW для удаления материализованного " "представления." -#: commands/tablecmds.c:230 parser/parse_utilcmd.c:1548 +#: commands/tablecmds.c:236 parser/parse_utilcmd.c:1593 #, c-format msgid "index \"%s\" does not exist" msgstr "индекс \"%s\" не существует" -#: commands/tablecmds.c:231 +#: commands/tablecmds.c:237 #, c-format msgid "index \"%s\" does not exist, skipping" msgstr "индекс \"%s\" не существует, пропускается" -#: commands/tablecmds.c:233 +#: commands/tablecmds.c:239 msgid "Use DROP INDEX to remove an index." msgstr "Выполните DROP INDEX для удаления индекса." -#: commands/tablecmds.c:238 +#: commands/tablecmds.c:244 #, c-format msgid "\"%s\" is not a type" msgstr "\"%s\" - это не тип" -#: commands/tablecmds.c:239 +#: commands/tablecmds.c:245 msgid "Use DROP TYPE to remove a type." msgstr "Выполните DROP TYPE для удаления типа." -#: commands/tablecmds.c:242 commands/tablecmds.c:8076 -#: commands/tablecmds.c:10557 +#: commands/tablecmds.c:248 commands/tablecmds.c:8447 +#: commands/tablecmds.c:11077 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "сторонняя таблица \"%s\" не существует" -#: commands/tablecmds.c:243 +#: commands/tablecmds.c:249 #, c-format msgid "foreign table \"%s\" does not exist, skipping" msgstr "сторонняя таблица \"%s\" не существует, пропускается" -#: commands/tablecmds.c:245 +#: commands/tablecmds.c:251 msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Выполните DROP FOREIGN TABLE для удаления сторонней таблицы." -#: commands/tablecmds.c:469 +#: commands/tablecmds.c:487 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT можно использовать только для временных таблиц" -#: commands/tablecmds.c:473 parser/parse_utilcmd.c:521 -#: parser/parse_utilcmd.c:532 parser/parse_utilcmd.c:549 -#: parser/parse_utilcmd.c:611 -#, c-format -msgid "constraints are not supported on foreign tables" -msgstr "ограничения для сторонних таблиц не поддерживаются" - -#: commands/tablecmds.c:493 +#: commands/tablecmds.c:507 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "" "в рамках операции с ограничениями по безопасности нельзя создать временную " "таблицу" -#: commands/tablecmds.c:789 +#: commands/tablecmds.c:815 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY не поддерживает удаление нескольких объектов" -#: commands/tablecmds.c:793 +#: commands/tablecmds.c:819 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY не поддерживает режим CASCADE" -#: commands/tablecmds.c:938 commands/tablecmds.c:1276 -#: commands/tablecmds.c:2133 commands/tablecmds.c:4112 -#: commands/tablecmds.c:5942 commands/tablecmds.c:11170 -#: commands/tablecmds.c:11205 commands/trigger.c:238 commands/trigger.c:1124 -#: commands/trigger.c:1232 rewrite/rewriteDefine.c:271 -#: rewrite/rewriteDefine.c:887 -#, c-format -msgid "permission denied: \"%s\" is a system catalog" -msgstr "доступ запрещён: \"%s\" - это системный каталог" - -#: commands/tablecmds.c:1052 +#: commands/tablecmds.c:1078 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "удаление распространяется на таблицу %s" -#: commands/tablecmds.c:1286 +#: commands/tablecmds.c:1316 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "временные таблицы других сеансов нельзя очистить" -#: commands/tablecmds.c:1491 parser/parse_utilcmd.c:1760 +#: commands/tablecmds.c:1522 parser/parse_utilcmd.c:1807 #, c-format -msgid "inherited relation \"%s\" is not a table" -msgstr "наследованное отношение \"%s\" не является таблицей" +msgid "inherited relation \"%s\" is not a table or foreign table" +msgstr "" +"наследуемое отношение \"%s\" не является таблицей или сторонней таблицей" -#: commands/tablecmds.c:1498 commands/tablecmds.c:9531 +#: commands/tablecmds.c:1529 commands/tablecmds.c:9976 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "временное отношение \"%s\" не может наследоваться" -#: commands/tablecmds.c:1506 commands/tablecmds.c:9539 +#: commands/tablecmds.c:1537 commands/tablecmds.c:9984 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "наследование от временного отношения другого сеанса невозможно" -#: commands/tablecmds.c:1522 commands/tablecmds.c:9573 +#: commands/tablecmds.c:1553 commands/tablecmds.c:10018 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "отношение \"%s\" наследуется неоднократно" -#: commands/tablecmds.c:1570 +#: commands/tablecmds.c:1601 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "слияние нескольких наследованных определений колонки \"%s\"" -#: commands/tablecmds.c:1578 +#: commands/tablecmds.c:1609 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "конфликт типов в наследованной колонке \"%s\"" -#: commands/tablecmds.c:1580 commands/tablecmds.c:1601 -#: commands/tablecmds.c:1789 commands/tablecmds.c:1811 +#: commands/tablecmds.c:1611 commands/tablecmds.c:1632 +#: commands/tablecmds.c:1830 commands/tablecmds.c:1852 #: parser/parse_coerce.c:1592 parser/parse_coerce.c:1612 #: parser/parse_coerce.c:1632 parser/parse_coerce.c:1677 #: parser/parse_coerce.c:1714 parser/parse_param.c:218 @@ -7346,64 +8037,75 @@ msgstr "конфликт типов в наследованной колонке msgid "%s versus %s" msgstr "%s и %s" -#: commands/tablecmds.c:1587 +#: commands/tablecmds.c:1618 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "конфликт правил сортировки в наследованной колонке \"%s\"" -#: commands/tablecmds.c:1589 commands/tablecmds.c:1799 -#: commands/tablecmds.c:4536 +#: commands/tablecmds.c:1620 commands/tablecmds.c:1840 +#: commands/tablecmds.c:4739 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "\"%s\" и \"%s\"" -#: commands/tablecmds.c:1599 +#: commands/tablecmds.c:1630 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "конфликт параметров хранения в наследованной колонке \"%s\"" -#: commands/tablecmds.c:1712 parser/parse_utilcmd.c:853 -#: parser/parse_utilcmd.c:1195 parser/parse_utilcmd.c:1271 +#: commands/tablecmds.c:1743 parser/parse_utilcmd.c:894 +#: parser/parse_utilcmd.c:1238 parser/parse_utilcmd.c:1314 #, c-format msgid "cannot convert whole-row table reference" msgstr "преобразовать ссылку на тип всей строки таблицы нельзя" -#: commands/tablecmds.c:1713 parser/parse_utilcmd.c:854 +#: commands/tablecmds.c:1744 parser/parse_utilcmd.c:895 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "Ограничение \"%s\" ссылается на тип всей строки в таблице \"%s\"." -#: commands/tablecmds.c:1779 +#: commands/tablecmds.c:1816 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "слияние колонки \"%s\" с наследованным определением" -#: commands/tablecmds.c:1787 +#: commands/tablecmds.c:1820 +#, c-format +msgid "moving and merging column \"%s\" with inherited definition" +msgstr "перемещение и слияние колонки \"%s\" с наследуемым определением" + +#: commands/tablecmds.c:1821 +#, c-format +msgid "User-specified column moved to the position of the inherited column." +msgstr "" +"Определённая пользователем колонка перемещена в позицию наследуемой колонки." + +#: commands/tablecmds.c:1828 #, c-format msgid "column \"%s\" has a type conflict" msgstr "конфликт типов в колонке \"%s\"" -#: commands/tablecmds.c:1797 +#: commands/tablecmds.c:1838 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "конфликт правил сортировки в колонке \"%s\"" -#: commands/tablecmds.c:1809 +#: commands/tablecmds.c:1850 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "конфликт параметров хранения в колонке \"%s\"" -#: commands/tablecmds.c:1861 +#: commands/tablecmds.c:1902 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "колонка \"%s\" наследует конфликтующие значения по умолчанию" -#: commands/tablecmds.c:1863 +#: commands/tablecmds.c:1904 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Для решения конфликта укажите желаемое значение по умолчанию." -#: commands/tablecmds.c:1910 +#: commands/tablecmds.c:1951 #, c-format msgid "" "check constraint name \"%s\" appears multiple times but with different " @@ -7412,12 +8114,12 @@ msgstr "" "имя ограничения-проверки \"%s\" фигурирует несколько раз, но с разными " "выражениями" -#: commands/tablecmds.c:2104 +#: commands/tablecmds.c:2145 #, c-format msgid "cannot rename column of typed table" msgstr "переименовать колонку типизированной таблицы нельзя" -#: commands/tablecmds.c:2121 +#: commands/tablecmds.c:2162 #, c-format msgid "" "\"%s\" is not a table, view, materialized view, composite type, index, or " @@ -7426,37 +8128,37 @@ msgstr "" "\"%s\" - это не таблица, представление, материализованное представление, " "составной тип, индекс или сторонняя таблица" -#: commands/tablecmds.c:2213 +#: commands/tablecmds.c:2256 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "" "наследованная колонка \"%s\" должна быть также переименована в дочерних " "таблицах" -#: commands/tablecmds.c:2245 +#: commands/tablecmds.c:2288 #, c-format msgid "cannot rename system column \"%s\"" msgstr "нельзя переименовать системную колонку \"%s\"" -#: commands/tablecmds.c:2260 +#: commands/tablecmds.c:2303 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "нельзя переименовать наследованную колонку \"%s\"" -#: commands/tablecmds.c:2407 +#: commands/tablecmds.c:2458 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "" "наследуемое ограничение \"%s\" должно быть также переименовано в дочерних " "таблицах" -#: commands/tablecmds.c:2414 +#: commands/tablecmds.c:2465 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "нельзя переименовать наследованное ограничение \"%s\"" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:2628 +#: commands/tablecmds.c:2691 #, c-format msgid "" "cannot %s \"%s\" because it is being used by active queries in this session" @@ -7465,77 +8167,77 @@ msgstr "" "запросами в данном сеансе" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:2637 +#: commands/tablecmds.c:2700 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "" "нельзя выполнить %s \"%s\", так как с этим объектом связаны отложенные " "события триггеров" -#: commands/tablecmds.c:3607 +#: commands/tablecmds.c:3764 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "перезаписать системное отношение \"%s\" нельзя" -#: commands/tablecmds.c:3613 +#: commands/tablecmds.c:3770 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "перезаписать таблицу \"%s\", используемую как таблицу каталога, нельзя" -#: commands/tablecmds.c:3623 +#: commands/tablecmds.c:3780 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "перезаписывать временные таблицы других сеансов нельзя" -#: commands/tablecmds.c:3854 +#: commands/tablecmds.c:4048 #, c-format msgid "rewriting table \"%s\"" msgstr "перезапись таблицы \"%s\"" -#: commands/tablecmds.c:3858 +#: commands/tablecmds.c:4052 #, c-format msgid "verifying table \"%s\"" msgstr "проверка таблицы \"%s\"" -#: commands/tablecmds.c:3972 +#: commands/tablecmds.c:4166 #, c-format msgid "column \"%s\" contains null values" msgstr "колонка \"%s\" содержит значения NULL" -#: commands/tablecmds.c:3987 commands/tablecmds.c:6985 +#: commands/tablecmds.c:4181 commands/tablecmds.c:7327 #, c-format msgid "check constraint \"%s\" is violated by some row" msgstr "ограничение-проверку \"%s\" нарушает некоторая строка" -#: commands/tablecmds.c:4133 commands/trigger.c:232 -#: rewrite/rewriteDefine.c:265 rewrite/rewriteDefine.c:882 +#: commands/tablecmds.c:4329 commands/trigger.c:234 +#: rewrite/rewriteDefine.c:266 rewrite/rewriteDefine.c:886 #, c-format msgid "\"%s\" is not a table or view" msgstr "\"%s\" - это не таблица и не представление" -#: commands/tablecmds.c:4136 +#: commands/tablecmds.c:4332 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "" "\"%s\" - это не таблица, представление, материализованное представление или " "индекс" -#: commands/tablecmds.c:4142 +#: commands/tablecmds.c:4338 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "\"%s\" - это не таблица, материализованное представление или индекс" -#: commands/tablecmds.c:4145 +#: commands/tablecmds.c:4341 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "\"%s\" - это не таблица и не сторонняя таблица" -#: commands/tablecmds.c:4148 +#: commands/tablecmds.c:4344 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "\"%s\" - это не таблица, составной тип или сторонняя таблица" -#: commands/tablecmds.c:4151 +#: commands/tablecmds.c:4347 #, c-format msgid "" "\"%s\" is not a table, materialized view, composite type, or foreign table" @@ -7543,18 +8245,18 @@ msgstr "" "\"%s\" - это не таблица, материализованное представление, составной тип или " "сторонняя таблица" -#: commands/tablecmds.c:4161 +#: commands/tablecmds.c:4357 #, c-format msgid "\"%s\" is of the wrong type" msgstr "неправильный тип \"%s\"" -#: commands/tablecmds.c:4311 commands/tablecmds.c:4318 +#: commands/tablecmds.c:4509 commands/tablecmds.c:4516 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "" "изменить тип \"%s\" нельзя, так как он задействован в колонке \"%s.%s\"" -#: commands/tablecmds.c:4325 +#: commands/tablecmds.c:4523 #, c-format msgid "" "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" @@ -7562,150 +8264,150 @@ msgstr "" "изменить стороннюю таблицу \"%s\" нельзя, так как колонка \"%s.%s\" " "задействует тип её строки" -#: commands/tablecmds.c:4332 +#: commands/tablecmds.c:4530 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "" "изменить таблицу \"%s\" нельзя, так как колонка \"%s.%s\" задействует тип её " "строки" -#: commands/tablecmds.c:4394 +#: commands/tablecmds.c:4592 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "изменить тип \"%s\", так как это тип типизированной таблицы" -#: commands/tablecmds.c:4396 +#: commands/tablecmds.c:4594 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "" "Чтобы изменить также типизированные таблицы, выполните ALTER ... CASCADE." -#: commands/tablecmds.c:4440 +#: commands/tablecmds.c:4638 #, c-format msgid "type %s is not a composite type" msgstr "тип %s не является составным" -#: commands/tablecmds.c:4466 +#: commands/tablecmds.c:4664 #, c-format msgid "cannot add column to typed table" msgstr "добавить колонку в типизированную таблицу нельзя" -#: commands/tablecmds.c:4528 commands/tablecmds.c:9727 +#: commands/tablecmds.c:4731 commands/tablecmds.c:10177 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "дочерняя таблица \"%s\" имеет другой тип для колонки \"%s\"" -#: commands/tablecmds.c:4534 commands/tablecmds.c:9734 +#: commands/tablecmds.c:4737 commands/tablecmds.c:10184 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "" "дочерняя таблица \"%s\" имеет другое правило сортировки для колонки \"%s\"" -#: commands/tablecmds.c:4544 +#: commands/tablecmds.c:4747 #, c-format msgid "child table \"%s\" has a conflicting \"%s\" column" msgstr "дочерняя таблица \"%s\" содержит конфликтующую колонку \"%s\"" -#: commands/tablecmds.c:4556 +#: commands/tablecmds.c:4759 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "объединение определений колонки \"%s\" для потомка \"%s\"" -#: commands/tablecmds.c:4777 +#: commands/tablecmds.c:4980 #, c-format msgid "column must be added to child tables too" msgstr "колонка также должна быть добавлена к дочерним таблицам" -#: commands/tablecmds.c:4844 +#: commands/tablecmds.c:5050 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "колонка \"%s\" отношения \"%s\" уже существует" -#: commands/tablecmds.c:4948 commands/tablecmds.c:5043 -#: commands/tablecmds.c:5091 commands/tablecmds.c:5195 -#: commands/tablecmds.c:5242 commands/tablecmds.c:5326 -#: commands/tablecmds.c:7503 commands/tablecmds.c:8098 +#: commands/tablecmds.c:5158 commands/tablecmds.c:5264 +#: commands/tablecmds.c:5322 commands/tablecmds.c:5436 +#: commands/tablecmds.c:5493 commands/tablecmds.c:5587 +#: commands/tablecmds.c:7845 commands/tablecmds.c:8470 #, c-format msgid "cannot alter system column \"%s\"" msgstr "системную колонку \"%s\" нельзя изменить" -#: commands/tablecmds.c:4984 +#: commands/tablecmds.c:5194 #, c-format msgid "column \"%s\" is in a primary key" msgstr "колонка \"%s\" входит в первичный ключ" -#: commands/tablecmds.c:5142 +#: commands/tablecmds.c:5377 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "" "\"%s\" - это не таблица, материализованное представление, индекс или " "сторонняя таблица" -#: commands/tablecmds.c:5169 +#: commands/tablecmds.c:5409 #, c-format msgid "statistics target %d is too low" msgstr "целевое значение статистики слишком мало (%d)" -#: commands/tablecmds.c:5177 +#: commands/tablecmds.c:5417 #, c-format msgid "lowering statistics target to %d" msgstr "целевое значение статистики снижается до %d" -#: commands/tablecmds.c:5307 +#: commands/tablecmds.c:5567 #, c-format msgid "invalid storage type \"%s\"" msgstr "неверный тип хранилища \"%s\"" -#: commands/tablecmds.c:5338 +#: commands/tablecmds.c:5599 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "тип данных колонки %s совместим только с хранилищем PLAIN" -#: commands/tablecmds.c:5372 +#: commands/tablecmds.c:5637 #, c-format msgid "cannot drop column from typed table" msgstr "нельзя удалить колонку в типизированной таблице" -#: commands/tablecmds.c:5413 +#: commands/tablecmds.c:5681 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "колонка \"%s\" в таблице\"%s\" не существует, пропускается" -#: commands/tablecmds.c:5426 +#: commands/tablecmds.c:5694 #, c-format msgid "cannot drop system column \"%s\"" msgstr "нельзя удалить системную колонку \"%s\"" -#: commands/tablecmds.c:5433 +#: commands/tablecmds.c:5701 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "нельзя удалить наследованную колонку \"%s\"" -#: commands/tablecmds.c:5663 +#: commands/tablecmds.c:5941 #, 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:5866 +#: commands/tablecmds.c:6163 #, c-format msgid "constraint must be added to child tables too" msgstr "ограничение также должно быть добавлено к дочерним таблицам" -#: commands/tablecmds.c:5936 +#: commands/tablecmds.c:6234 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "указанный объект \"%s\" не является таблицей" -#: commands/tablecmds.c:5959 +#: commands/tablecmds.c:6257 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "" "ограничения в постоянных таблицах могут ссылаться только на постоянные " "таблицы" -#: commands/tablecmds.c:5966 +#: commands/tablecmds.c:6264 #, c-format msgid "" "constraints on unlogged tables may reference only permanent or unlogged " @@ -7714,13 +8416,13 @@ msgstr "" "ограничения в нежурналируемых таблицах могут ссылаться только на постоянные " "или нежурналируемые таблицы" -#: commands/tablecmds.c:5972 +#: commands/tablecmds.c:6270 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "" "ограничения во временных таблицах могут ссылаться только на временные таблицы" -#: commands/tablecmds.c:5976 +#: commands/tablecmds.c:6274 #, c-format msgid "" "constraints on temporary tables must involve temporary tables of this session" @@ -7728,33 +8430,33 @@ msgstr "" "ограничения во временных таблицах должны ссылаться только на временные " "таблицы текущего сеанса" -#: commands/tablecmds.c:6037 +#: commands/tablecmds.c:6335 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "число колонок в источнике и назначении внешнего ключа не совпадает" -#: commands/tablecmds.c:6144 +#: commands/tablecmds.c:6442 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "ограничение внешнего ключа \"%s\" нельзя реализовать" -#: commands/tablecmds.c:6147 +#: commands/tablecmds.c:6445 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Колонки ключа \"%s\" и \"%s\" имеют несовместимые типы: %s и %s." -#: commands/tablecmds.c:6347 commands/tablecmds.c:6470 -#: commands/tablecmds.c:7342 commands/tablecmds.c:7398 +#: commands/tablecmds.c:6652 commands/tablecmds.c:6802 +#: commands/tablecmds.c:7684 commands/tablecmds.c:7740 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "ограничение \"%s\" в таблице \"%s\" не существует" -#: commands/tablecmds.c:6353 +#: commands/tablecmds.c:6658 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "ограничение \"%s\" в таблице \"%s\" не является внешним ключом" -#: commands/tablecmds.c:6477 +#: commands/tablecmds.c:6809 #, c-format msgid "" "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" @@ -7762,46 +8464,46 @@ msgstr "" "ограничение \"%s\" в таблице \"%s\" не является внешним ключом или " "ограничением-проверкой" -#: commands/tablecmds.c:6546 +#: commands/tablecmds.c:6877 #, c-format msgid "constraint must be validated on child tables too" msgstr "ограничение также должно соблюдаться в дочерних таблицах" -#: commands/tablecmds.c:6608 +#: commands/tablecmds.c:6946 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "колонка \"%s\", указанная в ограничении внешнего ключа, не существует" -#: commands/tablecmds.c:6613 +#: commands/tablecmds.c:6951 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "во внешнем ключе не может быть больше %d колонок" -#: commands/tablecmds.c:6678 +#: commands/tablecmds.c:7016 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "" "использовать откладываемый первичный ключ в целевой внешней таблице \"%s\" " "нельзя" -#: commands/tablecmds.c:6695 +#: commands/tablecmds.c:7033 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "в целевой внешней таблице \"%s\" нет первичного ключа" -#: commands/tablecmds.c:6760 +#: commands/tablecmds.c:7098 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "в списке колонок внешнего ключа не должно быть повторений" -#: commands/tablecmds.c:6854 +#: commands/tablecmds.c:7192 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "" "использовать откладываемое ограничение уникальности в целевой внешней " "таблице \"%s\" нельзя" -#: commands/tablecmds.c:6859 +#: commands/tablecmds.c:7197 #, c-format msgid "" "there is no unique constraint matching given keys for referenced table \"%s\"" @@ -7809,212 +8511,227 @@ msgstr "" "в целевой внешней таблице \"%s\" нет ограничения уникальности, " "соответствующего данным ключам" -#: commands/tablecmds.c:7018 +#: commands/tablecmds.c:7360 #, c-format msgid "validating foreign key constraint \"%s\"" msgstr "проверка ограничения внешнего ключа \"%s\"" -#: commands/tablecmds.c:7314 +#: commands/tablecmds.c:7656 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "удалить наследованное ограничение \"%s\" таблицы \"%s\" нельзя" -#: commands/tablecmds.c:7348 +#: commands/tablecmds.c:7690 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "ограничение \"%s\" в таблице \"%s\" не существует, пропускается" -#: commands/tablecmds.c:7487 +#: commands/tablecmds.c:7829 #, c-format msgid "cannot alter column type of typed table" msgstr "изменить тип колонки в типизированной таблице нельзя" -#: commands/tablecmds.c:7510 +#: commands/tablecmds.c:7852 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "изменить наследованную колонку \"%s\" нельзя" -#: commands/tablecmds.c:7557 +#: commands/tablecmds.c:7901 #, c-format -msgid "transform expression must not return a set" -msgstr "выражение преобразования не должно возвращать множество" +msgid "" +"result of USING clause for column \"%s\" cannot be cast automatically to " +"type %s" +msgstr "" +"результат USING для колонки \"%s\" нельзя автоматически привести к типу %s" -#: commands/tablecmds.c:7576 +#: commands/tablecmds.c:7904 +#, c-format +msgid "You might need to add an explicit cast." +msgstr "Возможно, необходимо добавить явное приведение." + +#: commands/tablecmds.c:7908 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "колонку \"%s\" нельзя автоматически привести к типу %s" -#: commands/tablecmds.c:7578 +#. translator: USING is SQL, don't translate it +#: commands/tablecmds.c:7911 #, c-format -msgid "Specify a USING expression to perform the conversion." -msgstr "Укажите выражение USING, чтобы выполнить преобразование." +msgid "You might need to specify \"USING %s::%s\"." +msgstr "Возможно, необходимо указать \"USING %s::%s\"." -#: commands/tablecmds.c:7627 +#: commands/tablecmds.c:7964 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "" "тип наследованной колонки \"%s\" должен быть изменён и в дочерних таблицах" -#: commands/tablecmds.c:7708 +#: commands/tablecmds.c:8051 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "нельзя изменить тип колонки \"%s\" дважды" -#: commands/tablecmds.c:7744 +#: commands/tablecmds.c:8087 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "" "значение по умолчанию для колонки \"%s\" нельзя автоматически привести к " "типу %s" -#: commands/tablecmds.c:7870 +#: commands/tablecmds.c:8213 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "" "изменить тип колонки, задействованной в представлении или правиле, нельзя" -#: commands/tablecmds.c:7871 commands/tablecmds.c:7890 +#: commands/tablecmds.c:8214 commands/tablecmds.c:8233 +#: commands/tablecmds.c:8251 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s зависит от колонки \"%s\"" -#: commands/tablecmds.c:7889 +#: commands/tablecmds.c:8232 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "изменить тип колонки, задействованной в определении триггера, нельзя" -#: commands/tablecmds.c:8465 +#: commands/tablecmds.c:8250 +#, c-format +msgid "cannot alter type of a column used in a policy definition" +msgstr "изменить тип колонки, задействованной в определении политики, нельзя" + +#: commands/tablecmds.c:8895 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "сменить владельца индекса \"%s\" нельзя" -#: commands/tablecmds.c:8467 +#: commands/tablecmds.c:8897 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Однако возможно сменить владельца таблицы, содержащей этот индекс." -#: commands/tablecmds.c:8483 +#: commands/tablecmds.c:8913 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "сменить владельца последовательности \"%s\" нельзя" -#: commands/tablecmds.c:8485 commands/tablecmds.c:10644 +#: commands/tablecmds.c:8915 commands/tablecmds.c:11285 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "Последовательность \"%s\" связана с таблицей \"%s\"." -#: commands/tablecmds.c:8497 commands/tablecmds.c:11280 +#: commands/tablecmds.c:8927 commands/tablecmds.c:11926 #, c-format msgid "Use ALTER TYPE instead." msgstr "Используйте ALTER TYPE." -#: commands/tablecmds.c:8506 +#: commands/tablecmds.c:8936 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "" "\"%s\" - это не таблица, TOAST-таблица, индекс, представление или " "последовательность" -#: commands/tablecmds.c:8842 +#: commands/tablecmds.c:9280 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" -msgstr "в одной инструкции не может быть несколько подкомманд SET TABLESPACE" +msgstr "в одной инструкции не может быть несколько подкоманд SET TABLESPACE" -#: commands/tablecmds.c:8915 +#: commands/tablecmds.c:9353 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "" "\"%s\" - это не таблица, представление, материализованное представление, " "индекс или TOAST-таблица" -#: commands/tablecmds.c:8948 commands/view.c:474 +#: commands/tablecmds.c:9386 commands/view.c:481 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "" "WITH CHECK OPTION поддерживается только с автообновляемыми представлениями" -#: commands/tablecmds.c:9094 +#: commands/tablecmds.c:9532 #, c-format msgid "cannot move system relation \"%s\"" msgstr "переместить системную таблицу \"%s\" нельзя" -#: commands/tablecmds.c:9110 +#: commands/tablecmds.c:9548 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "перемещать временные таблицы других сеансов нельзя" -#: commands/tablecmds.c:9238 +#: commands/tablecmds.c:9676 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "" "в табличных пространствах есть только таблицы, индексы и материализованные " "представления" -#: commands/tablecmds.c:9250 +#: commands/tablecmds.c:9688 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "перемещать объекты в/из табличного пространства pg_global нельзя" -#: commands/tablecmds.c:9341 +#: commands/tablecmds.c:9779 #, c-format msgid "aborting because lock on relation \"%s\".\"%s\" is not available" msgstr "" "обработка прерывается из-за невозможности заблокировать отношение \"%s\".\"%s" "\"" -#: commands/tablecmds.c:9357 +#: commands/tablecmds.c:9795 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "в табличном пространстве \"%s\" не найдены подходящие отношения" -#: commands/tablecmds.c:9418 storage/buffer/bufmgr.c:501 +#: commands/tablecmds.c:9859 storage/buffer/bufmgr.c:801 #, c-format msgid "invalid page in block %u of relation %s" msgstr "неверная страница в блоке %u отношения %s" -#: commands/tablecmds.c:9500 +#: commands/tablecmds.c:9941 #, c-format msgid "cannot change inheritance of typed table" msgstr "изменить наследование типизированной таблицы нельзя" -#: commands/tablecmds.c:9546 +#: commands/tablecmds.c:9991 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "наследование для временного отношения другого сеанса невозможно" -#: commands/tablecmds.c:9600 +#: commands/tablecmds.c:10045 #, c-format msgid "circular inheritance not allowed" msgstr "циклическое наследование недопустимо" -#: commands/tablecmds.c:9601 +#: commands/tablecmds.c:10046 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" уже является потомком \"%s\"." -#: commands/tablecmds.c:9609 +#: commands/tablecmds.c:10054 #, c-format msgid "table \"%s\" without OIDs cannot inherit from table \"%s\" with OIDs" msgstr "таблица \"%s\" без OID не может наследоваться от таблицы \"%s\" с OID" -#: commands/tablecmds.c:9745 +#: commands/tablecmds.c:10195 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "колонка \"%s\" в дочерней таблице должна быть помечена как NOT NULL" -#: commands/tablecmds.c:9761 +#: commands/tablecmds.c:10211 #, c-format msgid "child table is missing column \"%s\"" msgstr "в дочерней таблице не хватает колонки \"%s\"" -#: commands/tablecmds.c:9844 +#: commands/tablecmds.c:10294 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "" "дочерняя таблица \"%s\" содержит другое определение ограничения-проверки \"%s" "\"" -#: commands/tablecmds.c:9852 +#: commands/tablecmds.c:10302 #, c-format msgid "" "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s" @@ -8023,76 +8740,76 @@ msgstr "" "ограничение \"%s\" конфликтует с ненаследуемым ограничением дочерней таблицы " "\"%s\"" -#: commands/tablecmds.c:9876 +#: commands/tablecmds.c:10326 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "в дочерней таблице не хватает ограничения \"%s\"" -#: commands/tablecmds.c:9956 +#: commands/tablecmds.c:10410 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "отношение \"%s\" не является предком отношения \"%s\"" -#: commands/tablecmds.c:10182 +#: commands/tablecmds.c:10644 #, c-format msgid "typed tables cannot inherit" msgstr "типизированные таблицы не могут наследоваться" -#: commands/tablecmds.c:10213 +#: commands/tablecmds.c:10675 #, c-format msgid "table is missing column \"%s\"" msgstr "в таблице не хватает колонки \"%s\"" -#: commands/tablecmds.c:10223 +#: commands/tablecmds.c:10685 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "таблица содержит колонку \"%s\", тогда как тип требует \"%s\"" -#: commands/tablecmds.c:10232 +#: commands/tablecmds.c:10694 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "таблица \"%s\" содержит колонку \"%s\" другого типа" -#: commands/tablecmds.c:10245 +#: commands/tablecmds.c:10707 #, c-format msgid "table has extra column \"%s\"" msgstr "таблица содержит лишнюю колонку \"%s\"" -#: commands/tablecmds.c:10295 +#: commands/tablecmds.c:10759 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" - это не типизированная таблица" -#: commands/tablecmds.c:10478 +#: commands/tablecmds.c:10942 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "" "для идентификации реплики нельзя использовать неуникальный индекс \"%s\"" -#: commands/tablecmds.c:10484 +#: commands/tablecmds.c:10948 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "" "для идентификации реплики нельзя использовать не непосредственный индекс \"%s" "\"" -#: commands/tablecmds.c:10490 +#: commands/tablecmds.c:10954 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "" "для идентификации реплики нельзя использовать индекс с выражением \"%s\"" -#: commands/tablecmds.c:10496 +#: commands/tablecmds.c:10960 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "для идентификации реплики нельзя использовать частичный индекс \"%s\"" -#: commands/tablecmds.c:10502 +#: commands/tablecmds.c:10966 #, c-format msgid "cannot use invalid index \"%s\" as replica identity" msgstr "для идентификации реплики нельзя использовать нерабочий индекс \"%s\"" -#: commands/tablecmds.c:10520 +#: commands/tablecmds.c:10984 #, c-format msgid "" "index \"%s\" cannot be used as replica identity because column \"%s\" is " @@ -8101,22 +8818,52 @@ msgstr "" "индекс \"%s\" нельзя использовать для идентификации реплики, так как колонка " "\"%s\" допускает NULL" -#: commands/tablecmds.c:10643 +#: commands/tablecmds.c:11152 +#, c-format +msgid "cannot change logged status of table %s" +msgstr "изменить состояние журналирования таблицы %s нельзя" + +#: commands/tablecmds.c:11154 +#, c-format +msgid "Table %s is temporary." +msgstr "Таблица %s - временная." + +#: commands/tablecmds.c:11213 +#, c-format +msgid "cannot change status of table %s to logged" +msgstr "сделать таблицу %s журналируемой нельзя" + +#: commands/tablecmds.c:11215 +#, c-format +msgid "Table %s references unlogged table %s." +msgstr "Таблица %s ссылается на нежурналируемую таблицу %s." + +#: commands/tablecmds.c:11225 +#, c-format +msgid "cannot change status of table %s to unlogged" +msgstr "сделать таблицу %s нежурналируемой нельзя" + +#: commands/tablecmds.c:11227 +#, c-format +msgid "Logged table %s is referenced by table %s." +msgstr "На журналируемую таблицу %s ссылается таблица %s." + +#: commands/tablecmds.c:11284 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "переместить последовательность с владельцем в другую схему нельзя" -#: commands/tablecmds.c:10739 +#: commands/tablecmds.c:11385 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "отношение \"%s\" уже существует в схеме \"%s\"" -#: commands/tablecmds.c:11264 +#: commands/tablecmds.c:11910 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\" - это не составной тип" -#: commands/tablecmds.c:11294 +#: commands/tablecmds.c:11940 #, c-format msgid "" "\"%s\" is not a table, view, materialized view, sequence, or foreign table" @@ -8124,300 +8871,294 @@ msgstr "" "\"%s\" - это не таблица, представление, мат. представление, " "последовательность или сторонняя таблица" -#: commands/tablespace.c:160 commands/tablespace.c:177 -#: commands/tablespace.c:188 commands/tablespace.c:196 -#: commands/tablespace.c:623 replication/slot.c:913 storage/file/copydir.c:47 +#: commands/tablespace.c:162 commands/tablespace.c:179 +#: commands/tablespace.c:190 commands/tablespace.c:198 +#: commands/tablespace.c:624 replication/slot.c:914 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "не удалось создать каталог \"%s\": %m" -#: commands/tablespace.c:207 +#: commands/tablespace.c:209 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "не удалось получить информацию о каталоге \"%s\": %m" -#: commands/tablespace.c:216 +#: commands/tablespace.c:218 #, c-format msgid "\"%s\" exists but is not a directory" msgstr "\"%s\" существует, но это не каталог" -#: commands/tablespace.c:247 +#: commands/tablespace.c:249 #, c-format msgid "permission denied to create tablespace \"%s\"" msgstr "нет прав на создание табличного пространства \"%s\"" -#: commands/tablespace.c:249 +#: commands/tablespace.c:251 #, c-format msgid "Must be superuser to create a tablespace." msgstr "Для создания табличного пространства нужно быть суперпользователем." -#: commands/tablespace.c:265 +#: commands/tablespace.c:267 #, c-format msgid "tablespace location cannot contain single quotes" msgstr "в пути к табличному пространству не должно быть одинарных кавычек" -#: commands/tablespace.c:275 +#: commands/tablespace.c:277 #, c-format msgid "tablespace location must be an absolute path" msgstr "путь к табличному пространству должен быть абсолютным" -#: commands/tablespace.c:286 +#: commands/tablespace.c:288 #, c-format msgid "tablespace location \"%s\" is too long" msgstr "путь к табличному пространству \"%s\" слишком длинный" -#: commands/tablespace.c:296 commands/tablespace.c:894 +#: commands/tablespace.c:295 +#, c-format +msgid "tablespace location should not be inside the data directory" +msgstr "табличное пространство не должно располагаться внутри каталога данных" + +#: commands/tablespace.c:304 commands/tablespace.c:937 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "неприемлемое имя табличного пространства: \"%s\"" -#: commands/tablespace.c:298 commands/tablespace.c:895 +#: commands/tablespace.c:306 commands/tablespace.c:938 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "Префикс \"pg_\" зарезервирован для системных табличных пространств." -#: commands/tablespace.c:308 commands/tablespace.c:907 +#: commands/tablespace.c:316 commands/tablespace.c:950 #, c-format msgid "tablespace \"%s\" already exists" msgstr "табличное пространство \"%s\" уже существует" -#: commands/tablespace.c:386 commands/tablespace.c:551 -#: replication/basebackup.c:222 replication/basebackup.c:1088 -#: utils/adt/misc.c:365 -#, c-format -msgid "tablespaces are not supported on this platform" -msgstr "табличные пространства не поддерживаются на этой платформе" - -#: commands/tablespace.c:426 commands/tablespace.c:877 -#: commands/tablespace.c:956 commands/tablespace.c:1025 -#: commands/tablespace.c:1158 commands/tablespace.c:1358 +#: commands/tablespace.c:429 commands/tablespace.c:920 +#: commands/tablespace.c:1001 commands/tablespace.c:1070 +#: commands/tablespace.c:1203 commands/tablespace.c:1403 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "табличное пространство \"%s\" не существует" -#: commands/tablespace.c:432 +#: commands/tablespace.c:435 #, c-format msgid "tablespace \"%s\" does not exist, skipping" msgstr "табличное пространство \"%s\" не существует, пропускается" -#: commands/tablespace.c:508 +#: commands/tablespace.c:511 #, c-format msgid "tablespace \"%s\" is not empty" msgstr "табличное пространство \"%s\" не пусто" -#: commands/tablespace.c:582 +#: commands/tablespace.c:583 #, c-format msgid "directory \"%s\" does not exist" msgstr "каталог \"%s\" не существует" -#: commands/tablespace.c:583 +#: commands/tablespace.c:584 #, c-format msgid "Create this directory for the tablespace before restarting the server." msgstr "" "Создайте этот каталог для табличного пространства до перезапуска сервера." -#: commands/tablespace.c:588 +#: commands/tablespace.c:589 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "не удалось установить права для каталога \"%s\": %m" -#: commands/tablespace.c:618 +#: commands/tablespace.c:619 #, c-format msgid "directory \"%s\" already in use as a tablespace" msgstr "каталог \"%s\" уже используется как табличное пространство" -#: commands/tablespace.c:642 commands/tablespace.c:764 -#: commands/tablespace.c:777 commands/tablespace.c:801 +#: commands/tablespace.c:743 commands/tablespace.c:756 +#: commands/tablespace.c:780 commands/tablespace.c:871 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "ошибка при удалении каталога \"%s\": %m" -#: commands/tablespace.c:650 commands/tablespace.c:812 +#: commands/tablespace.c:792 commands/tablespace.c:880 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "ошибка при удалении символической ссылки \"%s\": %m" -#: commands/tablespace.c:661 +#: commands/tablespace.c:802 commands/tablespace.c:888 #, c-format -msgid "could not create symbolic link \"%s\": %m" -msgstr "не удалось создать символическую ссылку \"%s\": %m" +msgid "not a directory or symbolic link: \"%s\"" +msgstr "не каталог или символическая ссылка: \"%s\"" -#: commands/tablespace.c:725 commands/tablespace.c:735 -#: postmaster/postmaster.c:1305 replication/basebackup.c:349 -#: replication/basebackup.c:682 storage/file/copydir.c:53 -#: storage/file/copydir.c:96 storage/file/fd.c:1951 storage/ipc/dsm.c:300 -#: utils/adt/genfile.c:354 utils/adt/misc.c:267 utils/misc/tzparser.c:339 +#: commands/tablespace.c:859 #, c-format -msgid "could not open directory \"%s\": %m" -msgstr "не удалось открыть каталог \"%s\": %m" +msgid "could not stat \"%s\": %m" +msgstr "не удалось получить информацию о \"%s\": %m" -#: commands/tablespace.c:1030 +#: commands/tablespace.c:1075 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "Табличное пространство \"%s\" не существует." -#: commands/tablespace.c:1457 +#: commands/tablespace.c:1502 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "удалить каталоги табличного пространства %u не удалось" -#: commands/tablespace.c:1459 +#: commands/tablespace.c:1504 #, c-format msgid "You can remove the directories manually if necessary." msgstr "При необходимости вы можете удалить их вручную." -#: commands/trigger.c:181 +#: commands/trigger.c:183 #, c-format msgid "\"%s\" is a table" msgstr "\"%s\" - это таблица" -#: commands/trigger.c:183 +#: commands/trigger.c:185 #, c-format msgid "Tables cannot have INSTEAD OF triggers." msgstr "У таблиц не может быть триггеров INSTEAD OF." -#: commands/trigger.c:194 commands/trigger.c:201 +#: commands/trigger.c:196 commands/trigger.c:203 #, c-format msgid "\"%s\" is a view" msgstr "\"%s\" - это представление" -#: commands/trigger.c:196 +#: commands/trigger.c:198 #, c-format msgid "Views cannot have row-level BEFORE or AFTER triggers." msgstr "У представлений не может быть строковых триггеров BEFORE/AFTER." -#: commands/trigger.c:203 +#: commands/trigger.c:205 #, c-format msgid "Views cannot have TRUNCATE triggers." msgstr "У представлений не может быть триггеров TRUNCATE." -#: commands/trigger.c:211 commands/trigger.c:218 commands/trigger.c:225 +#: commands/trigger.c:213 commands/trigger.c:220 commands/trigger.c:227 #, c-format msgid "\"%s\" is a foreign table" msgstr "\"%s\" - сторонняя таблица" -#: commands/trigger.c:213 +#: commands/trigger.c:215 #, c-format msgid "Foreign tables cannot have INSTEAD OF triggers." msgstr "У сторонних таблиц не может быть триггеров INSTEAD OF." -#: commands/trigger.c:220 +#: commands/trigger.c:222 #, c-format msgid "Foreign tables cannot have TRUNCATE triggers." msgstr "У сторонних таблиц не может быть триггеров TRUNCATE." -#: commands/trigger.c:227 +#: commands/trigger.c:229 #, c-format msgid "Foreign tables cannot have constraint triggers." msgstr "У сторонних таблиц не может быть ограничивающих триггеров." -#: commands/trigger.c:290 +#: commands/trigger.c:292 #, c-format msgid "TRUNCATE FOR EACH ROW triggers are not supported" msgstr "триггеры TRUNCATE FOR EACH ROW не поддерживаются" -#: commands/trigger.c:298 +#: commands/trigger.c:300 #, c-format msgid "INSTEAD OF triggers must be FOR EACH ROW" msgstr "триггеры INSTEAD OF должны иметь тип FOR EACH ROW" -#: commands/trigger.c:302 +#: commands/trigger.c:304 #, c-format msgid "INSTEAD OF triggers cannot have WHEN conditions" msgstr "триггеры INSTEAD OF несовместимы с условиями WHEN" -#: commands/trigger.c:306 +#: commands/trigger.c:308 #, c-format msgid "INSTEAD OF triggers cannot have column lists" msgstr "для триггеров INSTEAD OF нельзя задать список колонок" -#: commands/trigger.c:365 commands/trigger.c:378 +#: commands/trigger.c:367 commands/trigger.c:380 #, c-format msgid "statement trigger's WHEN condition cannot reference column values" msgstr "" "в условии WHEN для операторного триггера нельзя ссылаться на значения колонок" -#: commands/trigger.c:370 +#: commands/trigger.c:372 #, c-format msgid "INSERT trigger's WHEN condition cannot reference OLD values" msgstr "в условии WHEN для триггера INSERT нельзя ссылаться на значения OLD" -#: commands/trigger.c:383 +#: commands/trigger.c:385 #, c-format msgid "DELETE trigger's WHEN condition cannot reference NEW values" msgstr "в условии WHEN для триггера DELETE нельзя ссылаться на значения NEW" -#: commands/trigger.c:388 +#: commands/trigger.c:390 #, c-format msgid "BEFORE trigger's WHEN condition cannot reference NEW system columns" msgstr "" "в условии WHEN для триггера BEFORE нельзя ссылаться на системные колонки NEW" -#: commands/trigger.c:433 +#: commands/trigger.c:435 #, c-format msgid "changing return type of function %s from \"opaque\" to \"trigger\"" msgstr "изменение типа возврата функции %s с \"opaque\" на \"trigger\"" -#: commands/trigger.c:440 +#: commands/trigger.c:442 #, c-format msgid "function %s must return type \"trigger\"" msgstr "функция %s должна возвращать тип \"trigger\"" -#: commands/trigger.c:552 commands/trigger.c:1301 +#: commands/trigger.c:554 commands/trigger.c:1304 #, c-format msgid "trigger \"%s\" for relation \"%s\" already exists" msgstr "триггер \"%s\" для отношения \"%s\" уже существует" -#: commands/trigger.c:837 +#: commands/trigger.c:839 msgid "Found referenced table's UPDATE trigger." msgstr "Найден триггер UPDATE в главной таблице." -#: commands/trigger.c:838 +#: commands/trigger.c:840 msgid "Found referenced table's DELETE trigger." msgstr "Найден триггер DELETE в главной таблице." -#: commands/trigger.c:839 +#: commands/trigger.c:841 msgid "Found referencing table's trigger." msgstr "Найден триггер в подчинённой таблице." -#: commands/trigger.c:948 commands/trigger.c:964 +#: commands/trigger.c:950 commands/trigger.c:966 #, c-format msgid "ignoring incomplete trigger group for constraint \"%s\" %s" msgstr "неполный набор триггеров для ограничения \"%s\" %s игнорируется" -#: commands/trigger.c:976 +#: commands/trigger.c:978 #, c-format msgid "converting trigger group into constraint \"%s\" %s" msgstr "преобразование набора триггеров в ограничение \"%s\" %s" -#: commands/trigger.c:1118 commands/trigger.c:1223 +#: commands/trigger.c:1120 commands/trigger.c:1225 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "\"%s\" - это не таблица, представление и не сторонняя таблица" -#: commands/trigger.c:1189 commands/trigger.c:1349 commands/trigger.c:1465 +#: commands/trigger.c:1191 commands/trigger.c:1352 commands/trigger.c:1470 #, c-format msgid "trigger \"%s\" for table \"%s\" does not exist" msgstr "триггер \"%s\" для таблицы \"%s\" не существует" -#: commands/trigger.c:1430 +#: commands/trigger.c:1435 #, c-format msgid "permission denied: \"%s\" is a system trigger" msgstr "нет доступа: \"%s\" - это системный триггер" -#: commands/trigger.c:1926 +#: commands/trigger.c:1931 #, c-format msgid "trigger function %u returned null value" msgstr "триггерная функция %u вернула значение NULL" -#: commands/trigger.c:1985 commands/trigger.c:2184 commands/trigger.c:2388 -#: commands/trigger.c:2670 +#: commands/trigger.c:1990 commands/trigger.c:2189 commands/trigger.c:2393 +#: commands/trigger.c:2665 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "триггер BEFORE STATEMENT не может возвращать значение" -#: commands/trigger.c:2732 executor/nodeModifyTable.c:434 -#: executor/nodeModifyTable.c:712 +#: commands/trigger.c:2727 executor/nodeModifyTable.c:631 +#: executor/nodeModifyTable.c:919 #, c-format msgid "" "tuple to be updated was already modified by an operation triggered by the " @@ -8426,8 +9167,8 @@ msgstr "" "кортеж, который должен быть изменён, уже модифицирован в операции, вызванной " "текущей командой" -#: commands/trigger.c:2733 executor/nodeModifyTable.c:435 -#: executor/nodeModifyTable.c:713 +#: commands/trigger.c:2728 executor/nodeModifyTable.c:632 +#: executor/nodeModifyTable.c:920 #, c-format msgid "" "Consider using an AFTER trigger instead of a BEFORE trigger to propagate " @@ -8436,293 +9177,324 @@ msgstr "" "Возможно, для распространения изменений в другие строки следует использовать " "триггер AFTER вместо BEFORE." -#: commands/trigger.c:2747 executor/execMain.c:2169 -#: executor/nodeLockRows.c:165 executor/nodeModifyTable.c:447 -#: executor/nodeModifyTable.c:725 +#: commands/trigger.c:2742 executor/execMain.c:2332 +#: executor/nodeLockRows.c:216 executor/nodeModifyTable.c:183 +#: executor/nodeModifyTable.c:644 executor/nodeModifyTable.c:932 +#: executor/nodeModifyTable.c:1099 #, c-format msgid "could not serialize access due to concurrent update" msgstr "не удалось сериализовать доступ из-за параллельного изменения" -#: commands/trigger.c:4544 +#: commands/trigger.c:4580 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "ограничение \"%s\" не является откладываемым" -#: commands/trigger.c:4567 +#: commands/trigger.c:4603 #, c-format msgid "constraint \"%s\" does not exist" msgstr "ограничение \"%s\" не существует" -#: commands/tsearchcmds.c:114 commands/tsearchcmds.c:671 +#: commands/tsearchcmds.c:115 commands/tsearchcmds.c:685 #, c-format msgid "function %s should return type %s" msgstr "функция %s должна возвращать тип %s" -#: commands/tsearchcmds.c:186 +#: commands/tsearchcmds.c:192 #, c-format msgid "must be superuser to create text search parsers" msgstr "" "для создания анализаторов текстового поиска нужно быть суперпользователем" -#: commands/tsearchcmds.c:234 +#: commands/tsearchcmds.c:240 #, c-format msgid "text search parser parameter \"%s\" not recognized" msgstr "параметр анализатора текстового поиска \"%s\" не распознан" -#: commands/tsearchcmds.c:244 +#: commands/tsearchcmds.c:250 #, c-format msgid "text search parser start method is required" msgstr "для анализатора текстового поиска требуется метод start" -#: commands/tsearchcmds.c:249 +#: commands/tsearchcmds.c:255 #, c-format msgid "text search parser gettoken method is required" msgstr "для анализатора текстового поиска требуется метод gettoken" -#: commands/tsearchcmds.c:254 +#: commands/tsearchcmds.c:260 #, c-format msgid "text search parser end method is required" msgstr "для анализатора текстового поиска требуется метод end" -#: commands/tsearchcmds.c:259 +#: commands/tsearchcmds.c:265 #, c-format msgid "text search parser lextypes method is required" msgstr "для анализатора текстового поиска требуется метод lextypes" -#: commands/tsearchcmds.c:376 +#: commands/tsearchcmds.c:386 #, c-format msgid "text search template \"%s\" does not accept options" msgstr "шаблон текстового поиска \"%s\" не принимает параметры" -#: commands/tsearchcmds.c:449 +#: commands/tsearchcmds.c:460 #, c-format msgid "text search template is required" msgstr "требуется шаблон текстового поиска" -#: commands/tsearchcmds.c:735 +#: commands/tsearchcmds.c:752 #, c-format msgid "must be superuser to create text search templates" msgstr "для создания шаблонов текстового поиска нужно быть суперпользователем" -#: commands/tsearchcmds.c:772 +#: commands/tsearchcmds.c:789 #, c-format msgid "text search template parameter \"%s\" not recognized" msgstr "параметр шаблона текстового поиска \"%s\" не распознан" -#: commands/tsearchcmds.c:782 +#: commands/tsearchcmds.c:799 #, c-format msgid "text search template lexize method is required" msgstr "для шаблона текстового поиска требуется метод lexize" -#: commands/tsearchcmds.c:988 +#: commands/tsearchcmds.c:1008 #, c-format msgid "text search configuration parameter \"%s\" not recognized" msgstr "параметр конфигурации текстового поиска \"%s\" не распознан" -#: commands/tsearchcmds.c:995 +#: commands/tsearchcmds.c:1015 #, c-format msgid "cannot specify both PARSER and COPY options" msgstr "указать и PARSER, и COPY одновременно нельзя" -#: commands/tsearchcmds.c:1023 +#: commands/tsearchcmds.c:1051 #, c-format msgid "text search parser is required" msgstr "требуется анализатор текстового поиска" -#: commands/tsearchcmds.c:1247 +#: commands/tsearchcmds.c:1278 #, c-format msgid "token type \"%s\" does not exist" msgstr "тип фрагмента \"%s\" не существует" -#: commands/tsearchcmds.c:1469 +#: commands/tsearchcmds.c:1502 #, c-format msgid "mapping for token type \"%s\" does not exist" msgstr "сопоставление для типа фрагмента \"%s\" не существует" -#: commands/tsearchcmds.c:1475 +#: commands/tsearchcmds.c:1508 #, c-format msgid "mapping for token type \"%s\" does not exist, skipping" msgstr "сопоставление для типа фрагмента \"%s\" не существует, пропускается" -#: commands/tsearchcmds.c:1628 commands/tsearchcmds.c:1739 +#: commands/tsearchcmds.c:1663 commands/tsearchcmds.c:1774 #, c-format msgid "invalid parameter list format: \"%s\"" msgstr "неверный формат списка параметров: \"%s\"" -#: commands/typecmds.c:184 +#: commands/typecmds.c:179 #, c-format msgid "must be superuser to create a base type" msgstr "для создания базового типа нужно быть суперпользователем" -#: commands/typecmds.c:290 commands/typecmds.c:1371 +#: commands/typecmds.c:286 commands/typecmds.c:1419 #, c-format msgid "type attribute \"%s\" not recognized" msgstr "атрибут типа \"%s\" не распознан" -#: commands/typecmds.c:344 +#: commands/typecmds.c:340 #, c-format msgid "invalid type category \"%s\": must be simple ASCII" msgstr "неверная категория типа \"%s\": допустим только ASCII-символ" -#: commands/typecmds.c:363 +#: commands/typecmds.c:359 #, c-format msgid "array element type cannot be %s" msgstr "типом элемента массива не может быть %s" -#: commands/typecmds.c:395 +#: commands/typecmds.c:391 #, c-format msgid "alignment \"%s\" not recognized" msgstr "тип выравнивания \"%s\" не распознан" -#: commands/typecmds.c:412 +#: commands/typecmds.c:408 #, c-format msgid "storage \"%s\" not recognized" msgstr "неизвестная стратегия хранения \"%s\"" -#: commands/typecmds.c:423 +#: commands/typecmds.c:419 #, c-format msgid "type input function must be specified" msgstr "необходимо указать функцию ввода типа" -#: commands/typecmds.c:427 +#: commands/typecmds.c:423 #, c-format msgid "type output function must be specified" msgstr "необходимо указать функцию вывода типа" -#: commands/typecmds.c:432 +#: commands/typecmds.c:428 #, c-format msgid "" "type modifier output function is useless without a type modifier input " "function" msgstr "" -"функция вывода модификаторов типа бесполезна без функции ввода модификаторов " +"функция вывода модификатора типа бесполезна без функции ввода модификатора " "типа" -#: commands/typecmds.c:455 +#: commands/typecmds.c:451 #, c-format msgid "changing return type of function %s from \"opaque\" to %s" msgstr "изменение типа возврата функции %s с \"opaque\" на %s" -#: commands/typecmds.c:462 +#: commands/typecmds.c:458 #, c-format msgid "type input function %s must return type %s" msgstr "функция ввода типа %s должна возвращать тип %s" -#: commands/typecmds.c:472 +#: commands/typecmds.c:468 #, c-format msgid "changing return type of function %s from \"opaque\" to \"cstring\"" msgstr "изменение типа возврата функции %s с \"opaque\" на \"cstring\"" -#: commands/typecmds.c:479 +#: commands/typecmds.c:475 #, c-format msgid "type output function %s must return type \"cstring\"" msgstr "функция вывода типа %s должна возвращать тип \"cstring\"" -#: commands/typecmds.c:488 +#: commands/typecmds.c:484 #, c-format msgid "type receive function %s must return type %s" msgstr "функция получения типа %s должна возвращать тип %s" -#: commands/typecmds.c:497 +#: commands/typecmds.c:493 #, c-format msgid "type send function %s must return type \"bytea\"" msgstr "функция отправки типа %s должна возвращать тип \"bytea\"" -#: commands/typecmds.c:762 +#: commands/typecmds.c:558 #, c-format -msgid "\"%s\" is not a valid base type for a domain" -msgstr "\"%s\" - не подходящий базовый тип для домена" +msgid "type input function %s should not be volatile" +msgstr "функция ввода типа %s не должна быть изменчивой" -#: commands/typecmds.c:848 +#: commands/typecmds.c:563 #, c-format -msgid "multiple default expressions" -msgstr "неоднократное определение значения типа по умолчанию" +msgid "type output function %s should not be volatile" +msgstr "функция вывода типа %s не должна быть изменчивой" -#: commands/typecmds.c:910 commands/typecmds.c:919 +#: commands/typecmds.c:568 #, c-format -msgid "conflicting NULL/NOT NULL constraints" -msgstr "конфликтующие ограничения NULL/NOT NULL" +msgid "type receive function %s should not be volatile" +msgstr "функция получения типа %s не должна быть изменчивой" -#: commands/typecmds.c:935 +#: commands/typecmds.c:573 #, c-format -msgid "check constraints for domains cannot be marked NO INHERIT" -msgstr "" -"ограничения-проверки для доменов не могут иметь характеристики NO INHERIT" +msgid "type send function %s should not be volatile" +msgstr "функция отправки типа %s не должна быть изменчивой" -#: commands/typecmds.c:944 commands/typecmds.c:2453 +#: commands/typecmds.c:578 +#, c-format +msgid "type modifier input function %s should not be volatile" +msgstr "функция ввода модификатора типа %s не должна быть изменчивой" + +#: commands/typecmds.c:583 +#, c-format +msgid "type modifier output function %s should not be volatile" +msgstr "функция вывода модификатора типа %s не должна быть изменчивой" + +#: commands/typecmds.c:805 +#, c-format +msgid "\"%s\" is not a valid base type for a domain" +msgstr "\"%s\" - неподходящий базовый тип для домена" + +#: commands/typecmds.c:891 +#, c-format +msgid "multiple default expressions" +msgstr "неоднократное определение значения типа по умолчанию" + +#: commands/typecmds.c:953 commands/typecmds.c:962 +#, c-format +msgid "conflicting NULL/NOT NULL constraints" +msgstr "конфликтующие ограничения NULL/NOT NULL" + +#: commands/typecmds.c:978 +#, c-format +msgid "check constraints for domains cannot be marked NO INHERIT" +msgstr "" +"ограничения-проверки для доменов не могут иметь характеристики NO INHERIT" + +#: commands/typecmds.c:987 commands/typecmds.c:2518 #, c-format msgid "unique constraints not possible for domains" msgstr "ограничения уникальности невозможны для доменов" -#: commands/typecmds.c:950 commands/typecmds.c:2459 +#: commands/typecmds.c:993 commands/typecmds.c:2524 #, c-format msgid "primary key constraints not possible for domains" msgstr "ограничения первичного ключа невозможны для доменов" -#: commands/typecmds.c:956 commands/typecmds.c:2465 +#: commands/typecmds.c:999 commands/typecmds.c:2530 #, c-format msgid "exclusion constraints not possible for domains" msgstr "ограничения-исключения невозможны для доменов" -#: commands/typecmds.c:962 commands/typecmds.c:2471 +#: commands/typecmds.c:1005 commands/typecmds.c:2536 #, c-format msgid "foreign key constraints not possible for domains" msgstr "ограничения внешних ключей невозможны для доменов" -#: commands/typecmds.c:971 commands/typecmds.c:2480 +#: commands/typecmds.c:1014 commands/typecmds.c:2545 #, c-format msgid "specifying constraint deferrability not supported for domains" msgstr "" "возможность определения отложенных ограничений для доменов не поддерживается" -#: commands/typecmds.c:1243 utils/cache/typcache.c:1071 +#: commands/typecmds.c:1289 utils/cache/typcache.c:1579 #, c-format msgid "%s is not an enum" msgstr "\"%s\" не является перечислением" -#: commands/typecmds.c:1379 +#: commands/typecmds.c:1427 #, c-format msgid "type attribute \"subtype\" is required" msgstr "требуется атрибут типа \"subtype\"" -#: commands/typecmds.c:1384 +#: commands/typecmds.c:1432 #, c-format msgid "range subtype cannot be %s" msgstr "%s не может быть подтипом диапазона" -#: commands/typecmds.c:1403 +#: commands/typecmds.c:1451 #, c-format msgid "range collation specified but subtype does not support collation" msgstr "" "указано правило сортировки для диапазона, но подтип не поддерживает " "сортировку" -#: commands/typecmds.c:1639 +#: commands/typecmds.c:1684 #, c-format msgid "changing argument type of function %s from \"opaque\" to \"cstring\"" msgstr "изменение типа аргумента функции %s с \"opaque\" на \"cstring\"" -#: commands/typecmds.c:1690 +#: commands/typecmds.c:1735 #, c-format msgid "changing argument type of function %s from \"opaque\" to %s" msgstr "изменение типа аргумента функции %s с \"opaque\" на %s" -#: commands/typecmds.c:1789 +#: commands/typecmds.c:1834 #, c-format msgid "typmod_in function %s must return type \"integer\"" msgstr "функция TYPMOD_IN %s должна возвращать тип \"integer\"" -#: commands/typecmds.c:1816 +#: commands/typecmds.c:1861 #, c-format msgid "typmod_out function %s must return type \"cstring\"" msgstr "функция TYPMOD_OUT %s должна возвращать тип \"cstring\"" -#: commands/typecmds.c:1843 +#: commands/typecmds.c:1888 #, c-format msgid "type analyze function %s must return type \"boolean\"" msgstr "функция анализа типа %s должна возвращать тип \"boolean\"" -#: commands/typecmds.c:1889 +#: commands/typecmds.c:1934 #, c-format msgid "" "You must specify an operator class for the range type or define a default " @@ -8731,272 +9503,287 @@ msgstr "" "Вы должны указать класс операторов для типа диапазона или определить класс " "операторов по умолчанию для этого подтипа." -#: commands/typecmds.c:1920 +#: commands/typecmds.c:1965 #, c-format msgid "range canonical function %s must return range type" msgstr "" "функция получения канонического диапазона %s должна возвращать диапазон" -#: commands/typecmds.c:1926 +#: commands/typecmds.c:1971 #, c-format msgid "range canonical function %s must be immutable" msgstr "" "функция получения канонического диапазона %s должна быть постоянной " "(IMMUTABLE)" -#: commands/typecmds.c:1962 +#: commands/typecmds.c:2007 #, c-format msgid "range subtype diff function %s must return type double precision" msgstr "" "функция различий для подтипа диапазона (%s) должна возвращать тип double " "precision" -#: commands/typecmds.c:1968 +#: commands/typecmds.c:2013 #, c-format msgid "range subtype diff function %s must be immutable" msgstr "" "функция различий для подтипа диапазона (%s) должна быть постоянной " "(IMMUTABLE)" -#: commands/typecmds.c:2287 +#: commands/typecmds.c:2040 +#, c-format +msgid "pg_type array OID value not set when in binary upgrade mode" +msgstr "значение OID массива в pg_type не задано в режиме двоичного обновления" + +#: commands/typecmds.c:2344 #, c-format msgid "column \"%s\" of table \"%s\" contains null values" msgstr "колонка \"%s\" таблицы \"%s\" содержит значения NULL" -#: commands/typecmds.c:2396 commands/typecmds.c:2574 +#: commands/typecmds.c:2459 commands/typecmds.c:2642 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist" msgstr "ограничение \"%s\" для домена \"%s\" не существует" -#: commands/typecmds.c:2400 +#: commands/typecmds.c:2463 #, c-format msgid "constraint \"%s\" of domain \"%s\" does not exist, skipping" msgstr "ограничение \"%s\" для домена \"%s\" не существует, пропускается" -#: commands/typecmds.c:2580 +#: commands/typecmds.c:2648 #, c-format msgid "constraint \"%s\" of domain \"%s\" is not a check constraint" msgstr "" "ограничение \"%s\" для домена \"%s\" не является ограничением-проверкой" -#: commands/typecmds.c:2684 +#: commands/typecmds.c:2754 #, c-format msgid "" "column \"%s\" of table \"%s\" contains values that violate the new constraint" msgstr "" "колонка \"%s\" таблицы \"%s\" содержит значения, нарушающие новое ограничение" -#: commands/typecmds.c:2897 commands/typecmds.c:3267 commands/typecmds.c:3425 +#: commands/typecmds.c:2967 commands/typecmds.c:3224 commands/typecmds.c:3432 #, c-format msgid "%s is not a domain" msgstr "\"%s\" - это не домен" -#: commands/typecmds.c:2930 +#: commands/typecmds.c:3001 #, c-format msgid "constraint \"%s\" for domain \"%s\" already exists" msgstr "ограничение \"%s\" для домена \"%s\" уже существует" -#: commands/typecmds.c:2980 +#: commands/typecmds.c:3051 #, c-format msgid "cannot use table references in domain check constraint" msgstr "в ограничении-проверке для домена нельзя ссылаться на таблицы" -#: commands/typecmds.c:3199 commands/typecmds.c:3279 commands/typecmds.c:3533 +#: commands/typecmds.c:3154 commands/typecmds.c:3236 commands/typecmds.c:3545 #, c-format msgid "%s is a table's row type" msgstr "%s - это тип строк таблицы" -#: commands/typecmds.c:3201 commands/typecmds.c:3281 commands/typecmds.c:3535 +#: commands/typecmds.c:3156 commands/typecmds.c:3238 commands/typecmds.c:3547 #, c-format msgid "Use ALTER TABLE instead." msgstr "Изменить его можно с помощью ALTER TABLE." -#: commands/typecmds.c:3208 commands/typecmds.c:3288 commands/typecmds.c:3452 +#: commands/typecmds.c:3163 commands/typecmds.c:3245 commands/typecmds.c:3464 #, c-format msgid "cannot alter array type %s" msgstr "изменить тип массива \"%s\" нельзя" -#: commands/typecmds.c:3210 commands/typecmds.c:3290 commands/typecmds.c:3454 +#: commands/typecmds.c:3165 commands/typecmds.c:3247 commands/typecmds.c:3466 #, c-format msgid "You can alter type %s, which will alter the array type as well." msgstr "Однако можно изменить тип %s, что повлечёт изменение типа массива." -#: commands/typecmds.c:3519 +#: commands/typecmds.c:3531 #, c-format msgid "type \"%s\" already exists in schema \"%s\"" msgstr "тип \"%s\" уже существует в схеме \"%s\"" -#: commands/user.c:145 +#: commands/user.c:148 #, c-format msgid "SYSID can no longer be specified" msgstr "SYSID уже не нужно указывать" -#: commands/user.c:277 +#: commands/user.c:290 #, c-format msgid "must be superuser to create superusers" msgstr "для создания суперпользователей нужно быть суперпользователем" -#: commands/user.c:284 +#: commands/user.c:297 #, c-format msgid "must be superuser to create replication users" msgstr "для создания пользователей-репликаторов нужно быть суперпользователем" -#: commands/user.c:291 +#: commands/user.c:304 commands/user.c:678 #, c-format -msgid "permission denied to create role" -msgstr "нет прав для создания роли" +msgid "must be superuser to change bypassrls attribute" +msgstr "для изменения атрибута bypassrls нужно быть суперпользователем" -#: commands/user.c:298 commands/user.c:1119 +#: commands/user.c:311 #, c-format -msgid "role name \"%s\" is reserved" -msgstr "имя роли \"%s\" зарезервировано" +msgid "permission denied to create role" +msgstr "нет прав для создания роли" -#: commands/user.c:311 commands/user.c:1113 +#: commands/user.c:324 commands/user.c:1153 #, c-format msgid "role \"%s\" already exists" msgstr "роль \"%s\" уже существует" -#: commands/user.c:618 commands/user.c:827 commands/user.c:933 -#: commands/user.c:1088 commands/variable.c:797 commands/variable.c:869 -#: utils/adt/acl.c:5121 utils/init/miscinit.c:362 +#: commands/user.c:402 #, c-format -msgid "role \"%s\" does not exist" -msgstr "роль \"%s\" не существует" +msgid "pg_authid OID value not set when in binary upgrade mode" +msgstr "значение OID в pg_authid не задано в режиме двоичного обновления" -#: commands/user.c:631 commands/user.c:846 commands/user.c:1357 -#: commands/user.c:1503 +#: commands/user.c:664 commands/user.c:878 commands/user.c:1394 +#: commands/user.c:1540 #, c-format msgid "must be superuser to alter superusers" msgstr "для модификации суперпользователей нужно быть суперпользователем" -#: commands/user.c:638 +#: commands/user.c:671 #, c-format msgid "must be superuser to alter replication users" msgstr "" "для модификации пользователей-репликаторов нужно быть суперпользователем" -#: commands/user.c:654 commands/user.c:854 +#: commands/user.c:694 commands/user.c:886 #, c-format msgid "permission denied" msgstr "нет доступа" -#: commands/user.c:884 +#: commands/user.c:916 #, c-format msgid "must be superuser to alter settings globally" msgstr "для глобального изменения параметров нужно быть суперпользователем" -#: commands/user.c:906 +#: commands/user.c:938 #, c-format msgid "permission denied to drop role" msgstr "нет прав для удаления роли" -#: commands/user.c:938 +#: commands/user.c:962 +#, c-format +msgid "cannot use special role specifier in \"%s\"" +msgstr "использовать специальную роль в \"%s\" нельзя" + +#: commands/user.c:972 commands/user.c:1128 commands/variable.c:798 +#: commands/variable.c:870 utils/adt/acl.c:5120 utils/adt/acl.c:5172 +#: utils/adt/acl.c:5205 utils/adt/acl.c:5223 utils/init/miscinit.c:478 +#, c-format +msgid "role \"%s\" does not exist" +msgstr "роль \"%s\" не существует" + +#: commands/user.c:977 #, c-format msgid "role \"%s\" does not exist, skipping" msgstr "роль \"%s\" не существует, пропускается" -#: commands/user.c:950 commands/user.c:954 +#: commands/user.c:989 commands/user.c:993 #, c-format msgid "current user cannot be dropped" msgstr "пользователь не может удалить сам себя" -#: commands/user.c:958 +#: commands/user.c:997 #, c-format msgid "session user cannot be dropped" msgstr "пользователя текущего сеанса нельзя удалить" -#: commands/user.c:969 +#: commands/user.c:1008 #, c-format msgid "must be superuser to drop superusers" msgstr "для удаления суперпользователей нужно быть суперпользователем" -#: commands/user.c:985 +#: commands/user.c:1024 #, c-format msgid "role \"%s\" cannot be dropped because some objects depend on it" msgstr "роль \"%s\" нельзя удалить, так как есть зависящие от неё объекты" -#: commands/user.c:1103 +#: commands/user.c:1143 #, c-format msgid "session user cannot be renamed" msgstr "пользователя текущего сеанса нельзя переименовать" -#: commands/user.c:1107 +#: commands/user.c:1147 #, c-format msgid "current user cannot be renamed" msgstr "пользователь не может переименовать сам себя" -#: commands/user.c:1130 +#: commands/user.c:1163 #, c-format msgid "must be superuser to rename superusers" msgstr "для переименования суперпользователей нужно быть суперпользователем" -#: commands/user.c:1137 +#: commands/user.c:1170 #, c-format msgid "permission denied to rename role" msgstr "нет прав на переименование роли" -#: commands/user.c:1158 +#: commands/user.c:1191 #, c-format msgid "MD5 password cleared because of role rename" msgstr "в результате переименования роли очищен MD5-хэш пароля" -#: commands/user.c:1218 +#: commands/user.c:1253 #, c-format msgid "column names cannot be included in GRANT/REVOKE ROLE" msgstr "в GRANT/REVOKE ROLE нельзя включать названия колонок" -#: commands/user.c:1256 +#: commands/user.c:1291 #, c-format msgid "permission denied to drop objects" msgstr "нет прав на удаление объектов" -#: commands/user.c:1283 commands/user.c:1292 +#: commands/user.c:1318 commands/user.c:1327 #, c-format msgid "permission denied to reassign objects" msgstr "нет прав для переназначения объектов" -#: commands/user.c:1365 commands/user.c:1511 +#: commands/user.c:1402 commands/user.c:1548 #, c-format msgid "must have admin option on role \"%s\"" msgstr "требуется право admin для роли \"%s\"" -#: commands/user.c:1382 +#: commands/user.c:1419 #, c-format msgid "must be superuser to set grantor" msgstr "для назначения права управления правами нужно быть суперпользователем" -#: commands/user.c:1407 +#: commands/user.c:1444 #, c-format msgid "role \"%s\" is a member of role \"%s\"" msgstr "роль \"%s\" включена в роль \"%s\"" -#: commands/user.c:1422 +#: commands/user.c:1459 #, c-format msgid "role \"%s\" is already a member of role \"%s\"" msgstr "роль \"%s\" уже включена в роль \"%s\"" -#: commands/user.c:1533 +#: commands/user.c:1570 #, c-format msgid "role \"%s\" is not a member of role \"%s\"" msgstr "роль \"%s\" не включена в роль \"%s\"" -#: commands/vacuum.c:478 +#: commands/vacuum.c:524 #, c-format msgid "oldest xmin is far in the past" msgstr "самый старый xmin далеко в прошлом" -#: commands/vacuum.c:479 +#: commands/vacuum.c:525 #, c-format msgid "Close open transactions soon to avoid wraparound problems." msgstr "" "Скорее закройте открытые транзакции, чтобы избежать проблемы наложения." -#: commands/vacuum.c:511 +#: commands/vacuum.c:564 #, c-format msgid "oldest multixact is far in the past" msgstr "самый старый multixact далеко в прошлом" -#: commands/vacuum.c:512 +#: commands/vacuum.c:565 #, c-format msgid "" "Close open transactions with multixacts soon to avoid wraparound problems." @@ -9004,79 +9791,118 @@ msgstr "" "Скорее закройте открытые транзакции в мультитранзакциях, чтобы избежать " "проблемы наложения." -#: commands/vacuum.c:1074 +#: commands/vacuum.c:1127 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "" "есть базы данных, которые не очищались на протяжении более чем 2 миллиардов " "транзакций" -#: commands/vacuum.c:1075 +#: commands/vacuum.c:1128 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "Возможно, вы уже потеряли данные в результате наложения ID транзакций." -#: commands/vacuum.c:1192 +#: commands/vacuum.c:1249 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "очистка \"%s\" пропускается --- блокировка недоступна" -#: commands/vacuum.c:1218 +#: commands/vacuum.c:1275 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "" "\"%s\" пропускается --- только суперпользователь может очистить эту таблицу" -#: commands/vacuum.c:1222 +#: commands/vacuum.c:1279 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "" "пропускается \"%s\" --- только суперпользователь или владелец БД может " "очистить эту таблицу" -#: commands/vacuum.c:1226 +#: commands/vacuum.c:1283 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "" "\"%s\" пропускается --- только владелец базы данных или этой таблицы может " "очистить её" -#: commands/vacuum.c:1244 +#: commands/vacuum.c:1301 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "" "\"%s\" пропускается --- очищать не таблицы или специальные системные таблицы " "нельзя" -#: commands/vacuumlazy.c:346 +#: commands/vacuumlazy.c:358 +#, c-format +msgid "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" +msgstr "" +"автоматическая очистка таблицы \"%s.%s.%s\": сканирований индекса: %d\n" + +#: commands/vacuumlazy.c:363 +#, c-format +msgid "pages: %u removed, %u remain, %u skipped due to pins\n" +msgstr "страниц: удалено: %u, осталось: %u, пропущено (закреплённых): %u\n" + +#: commands/vacuumlazy.c:368 #, c-format msgid "" -"automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" -"pages: %d removed, %d remain\n" "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable\n" -"buffer usage: %d hits, %d misses, %d dirtied\n" -"avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" -"system usage: %s" msgstr "" -"автоматическая очистка таблицы \"%s.%s.%s\": сканирований индекса: %d\n" -"страниц удалено: %d, осталось: %d\n" -"кортежей удалено: %.0f, осталось: %.0f, мёртвых (но пока неудаляемых): %.0f\n" -"использование буфера: попаданий: %d, промахов: %d, загрязнено: %d\n" -"средняя скорость чтения: %.3f МБ/сек, средняя скорость записи: %.3f МБ/сек\n" -"нагрузка системы: %s" +"версий строк: удалено: %.0f, осталось: %.0f, «мёртвых», но ещё не подлежащих " +"удалению: %.0f\n" -#: commands/vacuumlazy.c:680 +#: commands/vacuumlazy.c:373 +#, c-format +msgid "buffer usage: %d hits, %d misses, %d dirtied\n" +msgstr "" +"использование буфера: попаданий: %d, промахов: %d, «грязных» записей: %d\n" + +#: commands/vacuumlazy.c:377 +#, c-format +msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" +msgstr "" +"средняя скорость чтения: %.3f МБ/с, средняя скорость записи: %.3f МБ/с\n" + +#: commands/vacuumlazy.c:379 +#, c-format +msgid "system usage: %s" +msgstr "нагрузка системы: %s" + +#: commands/vacuumlazy.c:701 #, c-format msgid "relation \"%s\" page %u is uninitialized --- fixing" msgstr "" "в отношении \"%s\" не инициализирована страница %u --- ситуация исправляется" -#: commands/vacuumlazy.c:1092 +#: commands/vacuumlazy.c:1113 #, c-format msgid "\"%s\": removed %.0f row versions in %u pages" msgstr "\"%s\": удалено версий строк: %.0f, обработано страниц: %u" -#: commands/vacuumlazy.c:1097 +#: commands/vacuumlazy.c:1123 +#, c-format +msgid "%.0f dead row versions cannot be removed yet.\n" +msgstr "В данный момент нельзя удалить \"мёртвых\" строк: %.0f.\n" + +#: commands/vacuumlazy.c:1125 +#, c-format +msgid "There were %.0f unused item pointers.\n" +msgstr "Найдено неиспользованных указателей: %.0f.\n" + +#: commands/vacuumlazy.c:1127 +#, c-format +msgid "Skipped %u pages due to buffer pins.\n" +msgstr "Пропущено страниц, закреплённых в буфере: %u.\n" + +#: commands/vacuumlazy.c:1129 +#, c-format +msgid "%u pages are entirely empty.\n" +msgstr "Полностью пустых страниц: %u.\n" + +#: commands/vacuumlazy.c:1135 #, c-format msgid "" "\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u " @@ -9085,41 +9911,22 @@ msgstr "" "\"%s\": найдено удаляемых версий строк: %.0f, неудаляемых - %.0f, обработано " "страниц: %u, всего страниц: %u" -#: commands/vacuumlazy.c:1101 -#, c-format -msgid "" -"%.0f dead row versions cannot be removed yet.\n" -"There were %.0f unused item pointers.\n" -"%u pages are entirely empty.\n" -"%s." -msgstr "" -"В данный момент нельзя удалить версий \"мёртвых\" строк: %.0f.\n" -"Неиспользованных указателей: %.0f.\n" -"Полностью пустых страниц: %u.\n" -"%s." - -#: commands/vacuumlazy.c:1172 +#: commands/vacuumlazy.c:1204 #, c-format msgid "\"%s\": removed %d row versions in %d pages" msgstr "\"%s\": удалено версий строк: %d, обработано страниц: %d" -#: commands/vacuumlazy.c:1175 commands/vacuumlazy.c:1342 -#: commands/vacuumlazy.c:1514 -#, c-format -msgid "%s." -msgstr "%s." - -#: commands/vacuumlazy.c:1339 +#: commands/vacuumlazy.c:1371 #, c-format msgid "scanned index \"%s\" to remove %d row versions" msgstr "просканирован индекс \"%s\", удалено версий строк: %d" -#: commands/vacuumlazy.c:1385 +#: commands/vacuumlazy.c:1417 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "индекс \"%s\" теперь содержит версий строк: %.0f, в страницах: %u" -#: commands/vacuumlazy.c:1389 +#: commands/vacuumlazy.c:1421 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -9130,122 +9937,122 @@ msgstr "" "Удалено индексных страниц: %u, пригодно для повторного использования: %u.\n" "%s." -#: commands/vacuumlazy.c:1446 +#: commands/vacuumlazy.c:1478 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "\"%s\": остановка усечения из-за конфликтующего запроса блокировки" -#: commands/vacuumlazy.c:1511 +#: commands/vacuumlazy.c:1543 #, c-format msgid "\"%s\": truncated %u to %u pages" msgstr "\"%s\": усечение (было страниц: %u, стало: %u)" -#: commands/vacuumlazy.c:1567 +#: commands/vacuumlazy.c:1599 #, c-format msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "\"%s\": приостановка усечения из-за конфликтующего запроса блокировки" -#: commands/variable.c:162 utils/misc/guc.c:9036 +#: commands/variable.c:163 utils/misc/guc.c:9689 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "нераспознанное ключевое слово: \"%s\"." -#: commands/variable.c:174 +#: commands/variable.c:175 #, c-format msgid "Conflicting \"datestyle\" specifications." msgstr "Конфликтующие спецификации стиля дат." -#: commands/variable.c:296 +#: commands/variable.c:297 #, c-format msgid "Cannot specify months in time zone interval." msgstr "В интервале, задающем часовой пояс, нельзя указывать месяцы." -#: commands/variable.c:302 +#: commands/variable.c:303 #, c-format msgid "Cannot specify days in time zone interval." msgstr "В интервале, задающем часовой пояс, нельзя указывать дни." -#: commands/variable.c:344 commands/variable.c:426 +#: commands/variable.c:345 commands/variable.c:427 #, c-format msgid "time zone \"%s\" appears to use leap seconds" msgstr "часовой пояс \"%s\" видимо использует координационные секунды" -#: commands/variable.c:346 commands/variable.c:428 +#: commands/variable.c:347 commands/variable.c:429 #, c-format msgid "PostgreSQL does not support leap seconds." msgstr "PostgreSQL не поддерживает координационные секунды." -#: commands/variable.c:355 +#: commands/variable.c:356 #, c-format msgid "UTC timezone offset is out of range." msgstr "смещение часового пояса UTC вне диапазона" -#: commands/variable.c:493 +#: commands/variable.c:494 #, c-format msgid "cannot set transaction read-write mode inside a read-only transaction" msgstr "" "нельзя установить режим транзакции \"чтение-запись\" внутри транзакции " "\"только чтение\"" -#: commands/variable.c:500 +#: commands/variable.c:501 #, c-format msgid "transaction read-write mode must be set before any query" msgstr "" "режим транзакции \"чтение-запись\" должен быть установлен до выполнения " "запросов" -#: commands/variable.c:507 +#: commands/variable.c:508 #, c-format msgid "cannot set transaction read-write mode during recovery" msgstr "" "нельзя установить режим транзакции \"чтение-запись\" в процессе " "восстановления" -#: commands/variable.c:556 +#: commands/variable.c:557 #, c-format msgid "SET TRANSACTION ISOLATION LEVEL must be called before any query" msgstr "команда SET TRANSACTION ISOLATION LEVEL должна выполняться до запросов" -#: commands/variable.c:563 +#: commands/variable.c:564 #, c-format msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "" "команда SET TRANSACTION ISOLATION LEVEL не должна вызываться в подтранзакции" -#: commands/variable.c:570 storage/lmgr/predicate.c:1588 +#: commands/variable.c:571 storage/lmgr/predicate.c:1586 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "использовать сериализуемый режим в горячем резерве нельзя" -#: commands/variable.c:571 +#: commands/variable.c:572 #, c-format msgid "You can use REPEATABLE READ instead." msgstr "Используйте REPEATABLE READ." -#: commands/variable.c:619 +#: commands/variable.c:620 #, c-format msgid "" "SET TRANSACTION [NOT] DEFERRABLE cannot be called within a subtransaction" msgstr "" "команда SET TRANSACTION [NOT] DEFERRABLE не может вызываться в подтранзакции" -#: commands/variable.c:625 +#: commands/variable.c:626 #, c-format msgid "SET TRANSACTION [NOT] DEFERRABLE must be called before any query" msgstr "" "команда SET TRANSACTION [NOT] DEFERRABLE должна выполняться до запросов" -#: commands/variable.c:707 +#: commands/variable.c:708 #, c-format msgid "Conversion between %s and %s is not supported." msgstr "Преобразование кодировок %s <-> %s не поддерживается." -#: commands/variable.c:714 +#: commands/variable.c:715 #, c-format msgid "Cannot change \"client_encoding\" now." msgstr "Изменить клиентскую кодировку сейчас нельзя." -#: commands/variable.c:884 +#: commands/variable.c:885 #, c-format msgid "permission denied to set role \"%s\"" msgstr "нет прав установить роль \"%s\"" @@ -9271,43 +10078,43 @@ msgstr "" msgid "view must have at least one column" msgstr "в представлении должна быть минимум одна колонка" -#: commands/view.c:260 commands/view.c:272 +#: commands/view.c:263 commands/view.c:275 #, c-format msgid "cannot drop columns from view" msgstr "удалять колонки из представления нельзя" -#: commands/view.c:277 +#: commands/view.c:280 #, c-format msgid "cannot change name of view column \"%s\" to \"%s\"" msgstr "изменить имя колонки \"%s\" на \"%s\" в представлении нельзя" -#: commands/view.c:285 +#: commands/view.c:288 #, c-format msgid "cannot change data type of view column \"%s\" from %s to %s" msgstr "изменить тип колонки представления \"%s\" с %s на %s нельзя" -#: commands/view.c:420 +#: commands/view.c:427 #, c-format msgid "views must not contain SELECT INTO" msgstr "представления не должны содержать SELECT INTO" -#: commands/view.c:433 +#: commands/view.c:440 #, c-format msgid "views must not contain data-modifying statements in WITH" msgstr "представления не должны содержать операторы, изменяющие данные в WITH" -#: commands/view.c:504 +#: commands/view.c:511 #, c-format msgid "CREATE VIEW specifies more column names than columns" msgstr "в CREATE VIEW указано больше имён колонок, чем самих колонок" -#: commands/view.c:512 +#: commands/view.c:519 #, c-format msgid "views cannot be unlogged because they do not have storage" msgstr "" "представления не могут быть нежурналируемыми, так как они нигде не хранятся" -#: commands/view.c:526 +#: commands/view.c:533 #, c-format msgid "view \"%s\" will be a temporary view" msgstr "представление \"%s\" будет создано как временное" @@ -9344,7 +10151,7 @@ msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "" "для курсора \"%s\" не выполняется обновляемое сканирование таблицы \"%s\"" -#: executor/execCurrent.c:231 executor/execQual.c:1163 +#: executor/execCurrent.c:231 executor/execQual.c:1155 #, c-format msgid "" "type of parameter %d (%s) does not match that when preparing the plan (%s)" @@ -9352,27 +10159,66 @@ msgstr "" "тип параметра %d (%s) не соответствует тому, с которым подготавливался план " "(%s)" -#: executor/execCurrent.c:243 executor/execQual.c:1175 +#: executor/execCurrent.c:243 executor/execQual.c:1167 #, c-format msgid "no value found for parameter %d" msgstr "не найдено значение параметра %d" -#: executor/execMain.c:966 +#: executor/execIndexing.c:539 +#, c-format +msgid "" +"ON CONFLICT does not support deferred unique constraints/exclusion " +"constraints as arbiters" +msgstr "" +"ON CONFLICT не поддерживает отложенные ограничения уникальности/ограничения-" +"исключения в качестве определяющего индекса" + +#: executor/execIndexing.c:814 +#, c-format +msgid "could not create exclusion constraint \"%s\"" +msgstr "не удалось создать ограничение-исключение \"%s\"" + +#: executor/execIndexing.c:817 +#, c-format +msgid "Key %s conflicts with key %s." +msgstr "Ключ %s конфликтует с ключом %s." + +#: executor/execIndexing.c:819 +#, c-format +msgid "Key conflicts exist." +msgstr "Обнаружен конфликт ключей." + +#: executor/execIndexing.c:825 +#, c-format +msgid "conflicting key value violates exclusion constraint \"%s\"" +msgstr "конфликтующее значение ключа нарушает ограничение-исключение \"%s\"" + +#: executor/execIndexing.c:828 +#, c-format +msgid "Key %s conflicts with existing key %s." +msgstr "Ключ %s конфликтует с существующим ключом %s." + +#: executor/execIndexing.c:830 +#, c-format +msgid "Key conflicts with existing key." +msgstr "Ключ конфликтует с уже существующим." + +#: executor/execMain.c:1025 #, c-format msgid "cannot change sequence \"%s\"" msgstr "последовательность \"%s\" изменить нельзя" -#: executor/execMain.c:972 +#: executor/execMain.c:1031 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "TOAST-отношение \"%s\" изменить нельзя" -#: executor/execMain.c:990 rewrite/rewriteHandler.c:2512 +#: executor/execMain.c:1049 rewrite/rewriteHandler.c:2612 #, c-format msgid "cannot insert into view \"%s\"" msgstr "вставить данные в представление \"%s\" нельзя" -#: executor/execMain.c:992 rewrite/rewriteHandler.c:2515 +#: executor/execMain.c:1051 rewrite/rewriteHandler.c:2615 #, c-format msgid "" "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or " @@ -9381,12 +10227,12 @@ msgstr "" "Чтобы представление допускало добавление данных, установите триггер INSTEAD " "OF INSERT trigger или безусловное правило ON INSERT DO INSTEAD." -#: executor/execMain.c:998 rewrite/rewriteHandler.c:2520 +#: executor/execMain.c:1057 rewrite/rewriteHandler.c:2620 #, c-format msgid "cannot update view \"%s\"" msgstr "изменить данные в представлении \"%s\" нельзя" -#: executor/execMain.c:1000 rewrite/rewriteHandler.c:2523 +#: executor/execMain.c:1059 rewrite/rewriteHandler.c:2623 #, c-format msgid "" "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an " @@ -9395,12 +10241,12 @@ msgstr "" "Чтобы представление допускало изменение данных, установите триггер INSTEAD " "OF UPDATE или безусловное правило ON UPDATE DO INSTEAD." -#: executor/execMain.c:1006 rewrite/rewriteHandler.c:2528 +#: executor/execMain.c:1065 rewrite/rewriteHandler.c:2628 #, c-format msgid "cannot delete from view \"%s\"" msgstr "удалить данные из представления \"%s\" нельзя" -#: executor/execMain.c:1008 rewrite/rewriteHandler.c:2531 +#: executor/execMain.c:1067 rewrite/rewriteHandler.c:2631 #, c-format msgid "" "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an " @@ -9409,128 +10255,142 @@ msgstr "" "Чтобы представление допускало удаление данных, установите триггер INSTEAD OF " "DELETE или безусловное правило ON DELETE DO INSTEAD." -#: executor/execMain.c:1019 +#: executor/execMain.c:1078 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "изменить материализованное представление \"%s\" нельзя" -#: executor/execMain.c:1031 +#: executor/execMain.c:1090 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "вставлять данные в стороннюю таблицу \"%s\" нельзя" -#: executor/execMain.c:1037 +#: executor/execMain.c:1096 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "сторонняя таблица \"%s\" не допускает добавления" -#: executor/execMain.c:1044 +#: executor/execMain.c:1103 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "изменять данные в сторонней таблице \"%s\"" -#: executor/execMain.c:1050 +#: executor/execMain.c:1109 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "сторонняя таблица \"%s\" не допускает изменения" -#: executor/execMain.c:1057 +#: executor/execMain.c:1116 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "удалять данные из сторонней таблицы \"%s\" нельзя" -#: executor/execMain.c:1063 +#: executor/execMain.c:1122 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "сторонняя таблица \"%s\" не допускает удаления" -#: executor/execMain.c:1074 +#: executor/execMain.c:1133 #, c-format msgid "cannot change relation \"%s\"" msgstr "отношение \"%s\" изменить нельзя" -#: executor/execMain.c:1098 +#: executor/execMain.c:1159 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "блокировать строки в последовательности \"%s\" нельзя" -#: executor/execMain.c:1105 +#: executor/execMain.c:1166 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "блокировать строки в TOAST-отношении \"%s\" нельзя" -#: executor/execMain.c:1112 +#: executor/execMain.c:1173 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "блокировать строки в представлении \"%s\" нельзя" -#: executor/execMain.c:1120 +#: executor/execMain.c:1181 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "блокировать строки в материализованном представлении \"%s\" нельзя" -#: executor/execMain.c:1127 +#: executor/execMain.c:1190 executor/execMain.c:2566 +#: executor/nodeLockRows.c:132 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "блокировать строки в сторонней таблице \"%s\" нельзя" -#: executor/execMain.c:1133 +#: executor/execMain.c:1196 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "блокировать строки в отношении \"%s\" нельзя" -#: executor/execMain.c:1629 +#: executor/execMain.c:1696 #, c-format msgid "null value in column \"%s\" violates not-null constraint" msgstr "нулевое значение в колонке \"%s\" нарушает ограничение NOT NULL" -#: executor/execMain.c:1631 executor/execMain.c:1656 executor/execMain.c:1714 +#: executor/execMain.c:1698 executor/execMain.c:1724 executor/execMain.c:1813 #, c-format msgid "Failing row contains %s." msgstr "Ошибочная строка содержит %s." -#: executor/execMain.c:1654 +#: executor/execMain.c:1722 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "новая строка в отношении \"%s\" нарушает ограничение-проверку \"%s\"" -#: executor/execMain.c:1712 +#: executor/execMain.c:1811 +#, c-format +msgid "new row violates WITH CHECK OPTION for \"%s\"" +msgstr "новая строка нарушает ограничение WITH CHECK OPTION для \"%s\"" + +#: executor/execMain.c:1820 +#, c-format +msgid "new row violates row level security policy for \"%s\"" +msgstr "новая строка нарушает политику защиты на уровне строк для \"%s\"" + +#: executor/execMain.c:1826 #, c-format -msgid "new row violates WITH CHECK OPTION for view \"%s\"" +msgid "" +"new row violates row level security policy (USING expression) for \"%s\"" msgstr "" -"новая строка нарушает ограничение WITH CHECK OPTION для представления \"%s\"" +"новая строка нарушает политику защиты на уровне строк (выражение USING) для " +"\"%s\"" -#: executor/execQual.c:306 executor/execQual.c:334 executor/execQual.c:3160 -#: utils/adt/array_userfuncs.c:430 utils/adt/arrayfuncs.c:233 -#: utils/adt/arrayfuncs.c:531 utils/adt/arrayfuncs.c:1275 -#: utils/adt/arrayfuncs.c:2961 utils/adt/arrayfuncs.c:4986 +#: executor/execQual.c:300 executor/execQual.c:328 executor/execQual.c:3190 +#: utils/adt/array_userfuncs.c:472 utils/adt/arrayfuncs.c:263 +#: utils/adt/arrayfuncs.c:561 utils/adt/arrayfuncs.c:1291 +#: utils/adt/arrayfuncs.c:3335 utils/adt/arrayfuncs.c:5219 +#: utils/adt/arrayfuncs.c:5742 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "число размерностей массива (%d) превышает предел (%d)" -#: executor/execQual.c:319 executor/execQual.c:347 +#: executor/execQual.c:313 executor/execQual.c:341 #, c-format msgid "array subscript in assignment must not be null" msgstr "индекс элемента массива в присваивании не может быть NULL" -#: executor/execQual.c:642 executor/execQual.c:4081 +#: executor/execQual.c:634 executor/execQual.c:4114 #, c-format msgid "attribute %d has wrong type" msgstr "атрибут %d имеет неверный тип" -#: executor/execQual.c:643 executor/execQual.c:4082 +#: executor/execQual.c:635 executor/execQual.c:4115 #, c-format msgid "Table has type %s, but query expects %s." msgstr "В таблице задан тип %s, а в запросе ожидается %s." -#: executor/execQual.c:836 executor/execQual.c:853 executor/execQual.c:1053 -#: executor/nodeModifyTable.c:85 executor/nodeModifyTable.c:95 -#: executor/nodeModifyTable.c:112 executor/nodeModifyTable.c:120 +#: executor/execQual.c:828 executor/execQual.c:845 executor/execQual.c:1045 +#: executor/nodeModifyTable.c:95 executor/nodeModifyTable.c:105 +#: executor/nodeModifyTable.c:122 executor/nodeModifyTable.c:130 #, c-format msgid "table row type and query-specified row type do not match" msgstr "тип строки таблицы отличается от типа строки-результата запроса" -#: executor/execQual.c:837 +#: executor/execQual.c:829 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." @@ -9538,22 +10398,22 @@ msgstr[0] "Строка таблицы содержит %d атрибут, а в msgstr[1] "Строка таблицы содержит %d атрибута, а в запросе ожидается %d." msgstr[2] "Строка таблицы содержит %d атрибутов, а в запросе ожидается %d." -#: executor/execQual.c:854 executor/nodeModifyTable.c:96 +#: executor/execQual.c:846 executor/nodeModifyTable.c:106 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "" "В таблице определён тип %s (номер колонки: %d), а в запросе предполагается " "%s." -#: executor/execQual.c:1054 executor/execQual.c:1650 +#: executor/execQual.c:1046 executor/execQual.c:1642 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "" "Несоответствие параметров физического хранения удалённого атрибута (под " "номером %d)." -#: executor/execQual.c:1329 parser/parse_func.c:114 parser/parse_func.c:535 -#: parser/parse_func.c:887 +#: executor/execQual.c:1321 parser/parse_func.c:115 parser/parse_func.c:542 +#: parser/parse_func.c:894 #, c-format msgid "cannot pass more than %d argument to a function" msgid_plural "cannot pass more than %d arguments to a function" @@ -9561,12 +10421,12 @@ msgstr[0] "функции нельзя передать больше %d аргу msgstr[1] "функции нельзя передать больше %d аргументов" msgstr[2] "функции нельзя передать больше %d аргументов" -#: executor/execQual.c:1518 +#: executor/execQual.c:1510 #, c-format msgid "functions and operators can take at most one set argument" msgstr "функции и операторы принимают только один аргумент-множество" -#: executor/execQual.c:1568 +#: executor/execQual.c:1560 #, c-format msgid "" "function returning setof record called in context that cannot accept type " @@ -9575,12 +10435,12 @@ msgstr "" "функция, возвращающая запись SET OF, вызвана в контексте, не допускающем " "этот тип" -#: executor/execQual.c:1623 executor/execQual.c:1639 executor/execQual.c:1649 +#: executor/execQual.c:1615 executor/execQual.c:1631 executor/execQual.c:1641 #, c-format msgid "function return row and query-specified return row do not match" msgstr "тип результат функции отличается от типа строки-результата запроса" -#: executor/execQual.c:1624 +#: executor/execQual.c:1616 #, c-format msgid "Returned row contains %d attribute, but query expects %d." msgid_plural "Returned row contains %d attributes, but query expects %d." @@ -9590,47 +10450,47 @@ msgstr[1] "" msgstr[2] "" "Возвращённая строка содержит %d атрибутов, но запрос предполагает %d." -#: executor/execQual.c:1640 +#: executor/execQual.c:1632 #, c-format msgid "Returned type %s at ordinal position %d, but query expects %s." msgstr "Возвращён тип %s (номер колонки: %d), а в запросе предполагается %s." -#: executor/execQual.c:1882 executor/execQual.c:2313 +#: executor/execQual.c:1874 executor/execQual.c:2305 #, c-format msgid "table-function protocol for materialize mode was not followed" msgstr "нарушение протокола табличной функции в режиме материализации" -#: executor/execQual.c:1902 executor/execQual.c:2320 +#: executor/execQual.c:1894 executor/execQual.c:2312 #, c-format msgid "unrecognized table-function returnMode: %d" msgstr "нераспознанный режим возврата табличной функции: %d" -#: executor/execQual.c:2230 +#: executor/execQual.c:2222 #, c-format msgid "function returning set of rows cannot return null value" msgstr "функция, возвращающая множество строк, не может возвращать NULL" -#: executor/execQual.c:2287 +#: executor/execQual.c:2279 #, c-format msgid "rows returned by function are not all of the same row type" msgstr "строки, возвращённые функцией, имеют разные типы" -#: executor/execQual.c:2502 +#: executor/execQual.c:2494 #, c-format msgid "IS DISTINCT FROM does not support set arguments" msgstr "IS DISTINCT FROM не поддерживает аргументы-множества" -#: executor/execQual.c:2579 +#: executor/execQual.c:2571 #, c-format msgid "op ANY/ALL (array) does not support set arguments" msgstr "операторы ANY/ALL (с массивом) не поддерживают аргументы-множества" -#: executor/execQual.c:3138 +#: executor/execQual.c:3168 #, c-format msgid "cannot merge incompatible arrays" msgstr "не удалось объединить несовместимые массивы" -#: executor/execQual.c:3139 +#: executor/execQual.c:3169 #, c-format msgid "" "Array with element type %s cannot be included in ARRAY construct with " @@ -9639,7 +10499,7 @@ msgstr "" "Массив с типом элементов %s нельзя включить в конструкцию ARRAY с типом " "элементов %s." -#: executor/execQual.c:3180 executor/execQual.c:3207 +#: executor/execQual.c:3210 executor/execQual.c:3237 #, c-format msgid "" "multidimensional arrays must have array expressions with matching dimensions" @@ -9647,92 +10507,62 @@ msgstr "" "для многомерных массивов должны задаваться выражения с соответствующими " "размерностями" -#: executor/execQual.c:3722 +#: executor/execQual.c:3752 #, c-format msgid "NULLIF does not support set arguments" msgstr "NULLIF не поддерживает аргументы-множества" -#: executor/execQual.c:3952 utils/adt/domains.c:131 +#: executor/execQual.c:3985 utils/adt/domains.c:136 #, c-format msgid "domain %s does not allow null values" msgstr "домен %s не допускает значения null" -#: executor/execQual.c:3982 utils/adt/domains.c:168 +#: executor/execQual.c:4015 utils/adt/domains.c:173 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "значение домена %s нарушает ограничение-проверку \"%s\"" -#: executor/execQual.c:4340 +#: executor/execQual.c:4369 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF для таблиц такого типа не поддерживается" -#: executor/execQual.c:4487 parser/parse_agg.c:434 parser/parse_agg.c:464 +#: executor/execQual.c:4516 parser/parse_agg.c:589 parser/parse_agg.c:619 #, c-format msgid "aggregate function calls cannot be nested" msgstr "вложенные вызовы агрегатных функций недопустимы" -#: executor/execQual.c:4527 parser/parse_agg.c:565 +#: executor/execQual.c:4578 parser/parse_agg.c:735 #, c-format msgid "window function calls cannot be nested" msgstr "вложенные вызовы оконных функций недопустимы" -#: executor/execQual.c:4739 +#: executor/execQual.c:4790 #, c-format msgid "target type is not an array" msgstr "целевой тип не является массивом" -#: executor/execQual.c:4854 +#: executor/execQual.c:4905 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "колонка ROW() имеет тип %s, а должна - %s" -#: executor/execQual.c:4989 utils/adt/arrayfuncs.c:3424 -#: utils/adt/rowtypes.c:921 +#: executor/execQual.c:5040 utils/adt/arrayfuncs.c:3777 +#: utils/adt/arrayfuncs.c:6315 utils/adt/rowtypes.c:921 #, c-format msgid "could not identify a comparison function for type %s" msgstr "не удалось найти функцию сравнения для типа %s" -#: executor/execUtils.c:844 +#: executor/execUtils.c:831 #, c-format msgid "materialized view \"%s\" has not been populated" msgstr "материализованное представление \"%s\" не было наполнено" -#: executor/execUtils.c:846 +#: executor/execUtils.c:833 #, c-format msgid "Use the REFRESH MATERIALIZED VIEW command." msgstr "Примените команду REFRESH MATERIALIZED VIEW." -#: executor/execUtils.c:1326 -#, c-format -msgid "could not create exclusion constraint \"%s\"" -msgstr "не удалось создать ограничение-исключение \"%s\"" - -#: executor/execUtils.c:1329 -#, c-format -msgid "Key %s conflicts with key %s." -msgstr "Ключ %s конфликтует с ключом %s." - -#: executor/execUtils.c:1331 -#, c-format -msgid "Key conflicts exist." -msgstr "Обнаружен конфликт ключей." - -#: executor/execUtils.c:1337 -#, c-format -msgid "conflicting key value violates exclusion constraint \"%s\"" -msgstr "конфликтующее значение ключа нарушает ограничение-исключение \"%s\"" - -#: executor/execUtils.c:1340 -#, c-format -msgid "Key %s conflicts with existing key %s." -msgstr "Ключ %s конфликтует с существующим ключом %s." - -#: executor/execUtils.c:1342 -#, c-format -msgid "Key conflicts with existing key." -msgstr "Ключ конфликтует с уже существующим." - #: executor/functions.c:225 #, c-format msgid "could not determine actual type of argument declared %s" @@ -9745,12 +10575,12 @@ msgid "%s is not allowed in a SQL function" msgstr "%s нельзя использовать в SQL-функции" #. translator: %s is a SQL statement name -#: executor/functions.c:513 executor/spi.c:1343 executor/spi.c:2129 +#: executor/functions.c:513 executor/spi.c:1368 executor/spi.c:2157 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s нельзя использовать в не изменчивой (volatile) функции" -#: executor/functions.c:638 +#: executor/functions.c:641 #, c-format msgid "" "could not determine actual result type for function declared to return type " @@ -9759,24 +10589,24 @@ msgstr "" "не удалось определить фактический тип результата для функции (в объявлении " "указан тип %s)" -#: executor/functions.c:1402 +#: executor/functions.c:1405 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "SQL-функция \"%s\", оператор %d" -#: executor/functions.c:1428 +#: executor/functions.c:1431 #, c-format msgid "SQL function \"%s\" during startup" msgstr "SQL-функция \"%s\" (при старте)" -#: executor/functions.c:1587 executor/functions.c:1624 -#: executor/functions.c:1636 executor/functions.c:1749 -#: executor/functions.c:1782 executor/functions.c:1812 +#: executor/functions.c:1590 executor/functions.c:1627 +#: executor/functions.c:1639 executor/functions.c:1752 +#: executor/functions.c:1785 executor/functions.c:1815 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "несовпадение типа возврата в функции (в объявлении указан тип %s)" -#: executor/functions.c:1589 +#: executor/functions.c:1592 #, c-format msgid "" "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." @@ -9784,42 +10614,47 @@ msgstr "" "Последним оператором в функции должен быть SELECT или INSERT/UPDATE/DELETE " "RETURNING." -#: executor/functions.c:1626 +#: executor/functions.c:1629 #, c-format msgid "Final statement must return exactly one column." msgstr "Последний оператор должен возвращать одну колонку." -#: executor/functions.c:1638 +#: executor/functions.c:1641 #, c-format msgid "Actual return type is %s." msgstr "Фактический тип возврата: %s." -#: executor/functions.c:1751 +#: executor/functions.c:1754 #, c-format msgid "Final statement returns too many columns." msgstr "Последний оператор возвращает слишком много колонок." -#: executor/functions.c:1784 +#: executor/functions.c:1787 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "Последний оператор возвращает %s вместо %s для колонки %d." -#: executor/functions.c:1814 +#: executor/functions.c:1817 #, c-format msgid "Final statement returns too few columns." msgstr "Последний оператор возвращает слишком мало колонок." -#: executor/functions.c:1863 +#: executor/functions.c:1866 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "для SQL-функций тип возврата %s не поддерживается" -#: executor/nodeAgg.c:1865 executor/nodeWindowAgg.c:2285 +#: executor/nodeAgg.c:2450 executor/nodeWindowAgg.c:2286 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "" "агрегатная функция %u должна иметь совместимые входной и переходный типы" +#: executor/nodeCustom.c:147 executor/nodeCustom.c:158 +#, c-format +msgid "custom-scan \"%s\" does not support MarkPos" +msgstr "нестандартное сканирование \"%s\" не поддерживает MarkPos" + #: executor/nodeHashjoin.c:823 executor/nodeHashjoin.c:853 #, c-format msgid "could not rewind hash-join temporary file: %m" @@ -9835,6 +10670,12 @@ msgstr "не удалось записать во временный файл х msgid "could not read from hash-join temporary file: %m" msgstr "не удалось прочитать временный файл хэш-соединения: %m" +#: executor/nodeIndexonlyscan.c:179 +#, c-format +msgid "lossy distance functions are not supported in index-only scans" +msgstr "" +"функции неточной дистанции не поддерживаются в сканировании только по индексу" + #: executor/nodeLimit.c:253 #, c-format msgid "OFFSET must not be negative" @@ -9845,37 +10686,61 @@ msgstr "OFFSET не может быть отрицательным" msgid "LIMIT must not be negative" msgstr "LIMIT не может быть отрицательным" -#: executor/nodeMergejoin.c:1576 +#: executor/nodeMergejoin.c:1584 #, c-format msgid "RIGHT JOIN is only supported with merge-joinable join conditions" msgstr "" "RIGHT JOIN поддерживается только с условиями, допускающими соединение " "слиянием" -#: executor/nodeMergejoin.c:1596 +#: executor/nodeMergejoin.c:1604 #, c-format msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "" "FULL JOIN поддерживается только с условиями, допускающими соединение слиянием" -#: executor/nodeModifyTable.c:86 +#: executor/nodeModifyTable.c:96 #, c-format msgid "Query has too many columns." msgstr "Запрос возвращает больше колонок." -#: executor/nodeModifyTable.c:113 +#: executor/nodeModifyTable.c:123 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "" "Запрос выдаёт значение для удалённой колонки (с порядковым номером %d)." -#: executor/nodeModifyTable.c:121 +#: executor/nodeModifyTable.c:131 #, c-format msgid "Query has too few columns." msgstr "Запрос возвращает меньше колонок." -#: executor/nodeSubplan.c:304 executor/nodeSubplan.c:343 -#: executor/nodeSubplan.c:970 +#: executor/nodeModifyTable.c:1080 +#, c-format +msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" +msgstr "команда ON CONFLICT DO UPDATE не может менять строку повторно" + +#: executor/nodeModifyTable.c:1081 +#, c-format +msgid "" +"Ensure that no rows proposed for insertion within the same command have " +"duplicate constrained values." +msgstr "" +"Проверьте, не содержат ли строки, которые должна добавить команда, " +"дублирующиеся значения, подпадающие под ограничения." + +#: executor/nodeSamplescan.c:307 +#, c-format +msgid "TABLESAMPLE parameter cannot be null" +msgstr "параметр TABLESAMPLE не может быть NULL" + +#: executor/nodeSamplescan.c:320 +#, c-format +msgid "TABLESAMPLE REPEATABLE parameter cannot be null" +msgstr "параметр TABLESAMPLE REPEATABLE не может быть NULL" + +#: executor/nodeSubplan.c:345 executor/nodeSubplan.c:384 +#: executor/nodeSubplan.c:1040 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "подзапрос в выражении вернул больше одной строки" @@ -9905,43 +10770,43 @@ msgstr "смещение конца рамки не может быть NULL" msgid "frame ending offset must not be negative" msgstr "смещение конца рамки не может быть отрицательным" -#: executor/spi.c:213 +#: executor/spi.c:214 #, c-format msgid "transaction left non-empty SPI stack" msgstr "после транзакции остался непустой стек SPI" -#: executor/spi.c:214 executor/spi.c:278 +#: executor/spi.c:215 executor/spi.c:279 #, c-format msgid "Check for missing \"SPI_finish\" calls." msgstr "Проверьте наличие вызова \"SPI_finish\"." -#: executor/spi.c:277 +#: executor/spi.c:278 #, c-format msgid "subtransaction left non-empty SPI stack" msgstr "после подтранзакции остался непустой стек SPI" -#: executor/spi.c:1207 +#: executor/spi.c:1229 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "не удалось открыть план нескольких запросов как курсор" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1212 +#: executor/spi.c:1234 #, c-format msgid "cannot open %s query as cursor" msgstr "не удалось открыть запрос %s как курсор" -#: executor/spi.c:1320 +#: executor/spi.c:1342 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE не поддерживается" -#: executor/spi.c:1321 parser/analyze.c:2128 +#: executor/spi.c:1343 parser/analyze.c:2244 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Прокручиваемые курсоры должны быть READ ONLY." -#: executor/spi.c:2419 +#: executor/spi.c:2449 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL-оператор: \"%s\"" @@ -9951,17 +10816,12 @@ msgstr "SQL-оператор: \"%s\"" msgid "user mapping not found for \"%s\"" msgstr "сопоставление пользователя для \"%s\" не найдено" -#: foreign/foreign.c:348 -#, c-format -msgid "foreign-data wrapper \"%s\" has no handler" -msgstr "обёртка сторонних данных \"%s\" не имеет обработчика" - -#: foreign/foreign.c:573 +#: foreign/foreign.c:643 #, c-format msgid "invalid option \"%s\"" msgstr "неверный параметр \"%s\"" -#: foreign/foreign.c:574 +#: foreign/foreign.c:644 #, c-format msgid "Valid options in this context are: %s" msgstr "В данном контексте допустимы параметры: %s" @@ -10039,12 +10899,12 @@ msgstr "" msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "Подключение соответствует строке %d в pg_hba.conf: \"%s\"" -#: libpq/auth.c:337 +#: libpq/auth.c:330 #, c-format msgid "connection requires a valid client certificate" msgstr "для подключения требуется годный сертификат клиента" -#: libpq/auth.c:379 +#: libpq/auth.c:372 #, c-format msgid "" "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" @@ -10052,22 +10912,22 @@ msgstr "" "pg_hba.conf отвергает подключение для репликации: компьютер \"%s\", " "пользователь \"%s\", \"%s\"" -#: libpq/auth.c:381 libpq/auth.c:397 libpq/auth.c:455 libpq/auth.c:473 +#: libpq/auth.c:374 libpq/auth.c:390 libpq/auth.c:448 libpq/auth.c:466 msgid "SSL off" msgstr "SSL выкл." -#: libpq/auth.c:381 libpq/auth.c:397 libpq/auth.c:455 libpq/auth.c:473 +#: libpq/auth.c:374 libpq/auth.c:390 libpq/auth.c:448 libpq/auth.c:466 msgid "SSL on" msgstr "SSL вкл." -#: libpq/auth.c:385 +#: libpq/auth.c:378 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\"" msgstr "" "pg_hba.conf отвергает подключение для репликации: компьютер \"%s\", " "пользователь \"%s\"" -#: libpq/auth.c:394 +#: libpq/auth.c:387 #, c-format msgid "" "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s" @@ -10076,7 +10936,7 @@ msgstr "" "pg_hba.conf отвергает подключение: компьютер \"%s\", пользователь \"%s\", " "база данных \"%s\", %s" -#: libpq/auth.c:401 +#: libpq/auth.c:394 #, c-format msgid "" "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\"" @@ -10084,37 +10944,37 @@ msgstr "" "pg_hba.conf отвергает подключение: компьютер \"%s\", пользователь \"%s\", " "база данных \"%s\"" -#: libpq/auth.c:430 +#: libpq/auth.c:423 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "" "IP-адрес клиента разрешается в \"%s\", соответствует прямому преобразованию." -#: libpq/auth.c:433 +#: libpq/auth.c:426 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "" "IP-адрес клиента разрешается в \"%s\", прямое преобразование не проверялось." -#: libpq/auth.c:436 +#: libpq/auth.c:429 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "" "IP-адрес клиента разрешается в \"%s\", это не соответствует прямому " "преобразованию." -#: libpq/auth.c:439 +#: libpq/auth.c:432 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "" "Преобразовать имя клиентского компьютера \"%s\" в IP-адрес не удалось: %s." -#: libpq/auth.c:444 +#: libpq/auth.c:437 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "Получить имя компьютера из IP-адреса клиента не удалось: %s." -#: libpq/auth.c:453 +#: libpq/auth.c:446 #, c-format msgid "" "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s" @@ -10123,7 +10983,7 @@ msgstr "" "в pg_hba.conf нет записи, разрешающей подключение для репликации с " "компьютера \"%s\" для пользователя \"%s\", %s" -#: libpq/auth.c:460 +#: libpq/auth.c:453 #, c-format msgid "" "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\"" @@ -10131,21 +10991,21 @@ msgstr "" "в pg_hba.conf нет записи, разрешающей подключение для репликации с " "компьютера \"%s\" для пользователя \"%s\"" -#: libpq/auth.c:470 +#: libpq/auth.c:463 #, 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:478 +#: libpq/auth.c:471 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"" msgstr "" "в pg_hba.conf нет записи для компьютера \"%s\", пользователя \"%s\", базы " "\"%s\"" -#: libpq/auth.c:521 libpq/hba.c:1182 +#: libpq/auth.c:514 libpq/hba.c:1180 #, c-format msgid "" "MD5 authentication is not supported when \"db_user_namespace\" is enabled" @@ -10153,27 +11013,27 @@ msgstr "" "проверка подлинности MD5 не поддерживается, когда включен режим " "\"db_user_namespace\"" -#: libpq/auth.c:646 +#: libpq/auth.c:640 #, c-format msgid "expected password response, got message type %d" msgstr "ожидался ответ с паролем, но получено сообщение %d" -#: libpq/auth.c:674 +#: libpq/auth.c:668 #, c-format msgid "invalid password packet size" msgstr "неверный размер пакета с паролем" -#: libpq/auth.c:678 +#: libpq/auth.c:672 #, c-format msgid "received password packet" msgstr "получен пакет с паролем" -#: libpq/auth.c:805 +#: libpq/auth.c:799 #, c-format msgid "GSSAPI is not supported in protocol version 2" msgstr "GSSAPI не поддерживается в протоколе версии 2" -#: libpq/auth.c:861 +#: libpq/auth.c:859 #, c-format msgid "expected GSS response, got message type %d" msgstr "ожидался ответ GSS, но получено сообщение %d" @@ -10208,140 +11068,140 @@ msgstr "принять контекст безопасности SSPI не уд msgid "could not get token from SSPI security context" msgstr "не удалось получить маркер из контекста безопасности SSPI" -#: libpq/auth.c:1472 +#: libpq/auth.c:1475 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "не удалось создать сокет для подключения к серверу Ident: %m" -#: libpq/auth.c:1487 +#: libpq/auth.c:1490 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "не удалось привязаться к локальному адресу \"%s\": %m" -#: libpq/auth.c:1499 +#: libpq/auth.c:1502 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "не удалось подключиться к серверу Ident по адресу \"%s\", порт %s: %m" -#: libpq/auth.c:1519 +#: libpq/auth.c:1524 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "" "не удалось отправить запрос серверу Ident по адресу \"%s\", порт %s: %m" -#: libpq/auth.c:1534 +#: libpq/auth.c:1541 #, c-format msgid "" "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "" "не удалось получить ответ от сервера Ident по адресу \"%s\", порт %s: %m" -#: libpq/auth.c:1544 +#: libpq/auth.c:1551 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "неверно форматированный ответ от сервера Ident: \"%s\"" -#: libpq/auth.c:1584 +#: libpq/auth.c:1591 #, c-format msgid "peer authentication is not supported on this platform" msgstr "проверка подлинности peer в этой ОС не поддерживается" -#: libpq/auth.c:1588 +#: libpq/auth.c:1595 #, c-format msgid "could not get peer credentials: %m" msgstr "не удалось получить данные пользователя через механизм peer: %m" -#: libpq/auth.c:1597 +#: libpq/auth.c:1604 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "найти локального пользователя по идентификатору (%ld) не удалось: %s" -#: libpq/auth.c:1681 libpq/auth.c:1952 libpq/auth.c:2309 +#: libpq/auth.c:1688 libpq/auth.c:1959 libpq/auth.c:2315 #, c-format msgid "empty password returned by client" msgstr "клиент возвратил пустой пароль" -#: libpq/auth.c:1691 +#: libpq/auth.c:1698 #, c-format msgid "error from underlying PAM layer: %s" msgstr "ошибка в нижележащем слое PAM: %s" -#: libpq/auth.c:1760 +#: libpq/auth.c:1767 #, c-format msgid "could not create PAM authenticator: %s" msgstr "не удалось создать аутентификатор PAM: %s" -#: libpq/auth.c:1771 +#: libpq/auth.c:1778 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "ошибка в pam_set_item(PAM_USER): %s" -#: libpq/auth.c:1782 +#: libpq/auth.c:1789 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "ошибка в pam_set_item(PAM_CONV): %s" -#: libpq/auth.c:1793 +#: libpq/auth.c:1800 #, c-format msgid "pam_authenticate failed: %s" msgstr "ошибка в pam_authenticate: %s" -#: libpq/auth.c:1804 +#: libpq/auth.c:1811 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "ошибка в pam_acct_mgmt: %s" -#: libpq/auth.c:1815 +#: libpq/auth.c:1822 #, c-format msgid "could not release PAM authenticator: %s" msgstr "не удалось освободить аутентификатор PAM: %s" -#: libpq/auth.c:1848 +#: libpq/auth.c:1855 #, c-format msgid "could not initialize LDAP: %m" msgstr "не удалось инициализировать LDAP: %m" -#: libpq/auth.c:1851 +#: libpq/auth.c:1858 #, c-format msgid "could not initialize LDAP: error code %d" -msgstr "не удалось инициализировать LDAP: код ошибки %d" +msgstr "не удалось инициализировать LDAP (код ошибки: %d)" -#: libpq/auth.c:1861 +#: libpq/auth.c:1868 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "не удалось задать версию протокола LDAP: %s" -#: libpq/auth.c:1890 +#: libpq/auth.c:1897 #, c-format msgid "could not load wldap32.dll" msgstr "не удалось загрузить wldap32.dll" -#: libpq/auth.c:1898 +#: libpq/auth.c:1905 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "не удалось найти функцию _ldap_start_tls_sA в wldap32.dll" -#: libpq/auth.c:1899 +#: libpq/auth.c:1906 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "LDAP через SSL не поддерживается в этой ОС." -#: libpq/auth.c:1914 +#: libpq/auth.c:1921 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "не удалось начать сеанс LDAP TLS: %s" -#: libpq/auth.c:1936 +#: libpq/auth.c:1943 #, c-format msgid "LDAP server not specified" msgstr "LDAP-сервер не определён" -#: libpq/auth.c:1989 +#: libpq/auth.c:1996 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "недопустимый символ в имени пользователя для проверки подлинности LDAP" -#: libpq/auth.c:2004 +#: libpq/auth.c:2011 #, c-format msgid "" "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": " @@ -10350,28 +11210,28 @@ msgstr "" "не удалось выполнить начальную привязку LDAP для ldapbinddn \"%s\" на " "сервере \"%s\": %s" -#: libpq/auth.c:2028 +#: libpq/auth.c:2035 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "" "не удалось выполнить LDAP-поиск по фильтру \"%s\" на сервере \"%s\": %s" -#: libpq/auth.c:2039 +#: libpq/auth.c:2046 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "в LDAP нет пользователя \"%s\"" -#: libpq/auth.c:2040 +#: libpq/auth.c:2047 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "LDAP-поиск по фильтру \"%s\" на сервере \"%s\" не вернул результатов" -#: libpq/auth.c:2044 +#: libpq/auth.c:2051 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "пользователь LDAP \"%s\" не уникален" -#: libpq/auth.c:2045 +#: libpq/auth.c:2052 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "" @@ -10380,7 +11240,7 @@ msgstr[0] "LDAP-поиск по фильтру \"%s\" на сервере \"%s\" msgstr[1] "LDAP-поиск по фильтру \"%s\" на сервере \"%s\" вернул %d записи." msgstr[2] "LDAP-поиск по фильтру \"%s\" на сервере \"%s\" вернул %d записей." -#: libpq/auth.c:2063 +#: libpq/auth.c:2070 #, c-format msgid "" "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" @@ -10388,19 +11248,19 @@ msgstr "" "не удалось получить dn для первого результата, соответствующего \"%s\" на " "сервере \"%s\": %s" -#: libpq/auth.c:2083 +#: libpq/auth.c:2090 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\": %s" msgstr "" "не удалось отвязаться после поиска пользователя \"%s\" на сервере \"%s\": %s" -#: libpq/auth.c:2113 +#: libpq/auth.c:2120 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "" "ошибка при регистрации в LDAP пользователя \"%s\" на сервере \"%s\": %s" -#: libpq/auth.c:2141 +#: libpq/auth.c:2148 #, c-format msgid "" "certificate authentication failed for user \"%s\": client certificate " @@ -10409,98 +11269,98 @@ msgstr "" "ошибка проверки подлинности пользователя \"%s\" по сертификату: сертификат " "клиента не содержит имя пользователя" -#: libpq/auth.c:2265 +#: libpq/auth.c:2271 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS-сервер не определён" -#: libpq/auth.c:2272 +#: libpq/auth.c:2278 #, c-format msgid "RADIUS secret not specified" msgstr "секрет RADIUS не определён" -#: libpq/auth.c:2288 libpq/hba.c:1579 +#: libpq/auth.c:2294 libpq/hba.c:1590 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "не удалось преобразовать имя сервера RADIUS \"%s\" в адрес: %s" -#: libpq/auth.c:2316 +#: libpq/auth.c:2322 #, c-format msgid "" "RADIUS authentication does not support passwords longer than 16 characters" msgstr "проверка подлинности RADIUS не поддерживает пароли длиннее 16 символов" -#: libpq/auth.c:2327 +#: libpq/auth.c:2333 #, c-format msgid "could not generate random encryption vector" msgstr "не удалось сгенерировать случайный вектор шифрования" -#: libpq/auth.c:2350 +#: libpq/auth.c:2356 #, c-format msgid "could not perform MD5 encryption of password" msgstr "не удалось вычислить MD5-хэш пароля" -#: libpq/auth.c:2372 +#: libpq/auth.c:2378 #, c-format msgid "could not create RADIUS socket: %m" msgstr "не удалось создать сокет RADIUS: %m" -#: libpq/auth.c:2393 +#: libpq/auth.c:2399 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "не удалось привязаться к локальному сокету RADIUS: %m" -#: libpq/auth.c:2403 +#: libpq/auth.c:2409 #, c-format msgid "could not send RADIUS packet: %m" msgstr "не удалось отправить пакет RADIUS: %m" -#: libpq/auth.c:2432 libpq/auth.c:2457 +#: libpq/auth.c:2442 libpq/auth.c:2467 #, c-format msgid "timeout waiting for RADIUS response" msgstr "превышено время ожидания ответа RADIUS" -#: libpq/auth.c:2450 +#: libpq/auth.c:2460 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "не удалось проверить состояние сокета RADIUS: %m" -#: libpq/auth.c:2479 +#: libpq/auth.c:2489 #, c-format msgid "could not read RADIUS response: %m" msgstr "не удалось прочитать ответ RADIUS: %m" -#: libpq/auth.c:2491 libpq/auth.c:2495 +#: libpq/auth.c:2501 libpq/auth.c:2505 #, c-format msgid "RADIUS response was sent from incorrect port: %d" msgstr "ответ RADIUS был отправлен с неверного порта: %d" -#: libpq/auth.c:2504 +#: libpq/auth.c:2514 #, c-format msgid "RADIUS response too short: %d" msgstr "слишком короткий ответ RADIUS: %d" -#: libpq/auth.c:2511 +#: libpq/auth.c:2521 #, c-format msgid "RADIUS response has corrupt length: %d (actual length %d)" msgstr "в ответе RADIUS испорчена длина: %d (фактическая длина %d)" -#: libpq/auth.c:2519 +#: libpq/auth.c:2529 #, c-format msgid "RADIUS response is to a different request: %d (should be %d)" msgstr "пришёл ответ RADIUS на другой запрос: %d (ожидался %d)" -#: libpq/auth.c:2544 +#: libpq/auth.c:2554 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "не удалось вычислить MD5 для принятого пакета" -#: libpq/auth.c:2553 +#: libpq/auth.c:2563 #, c-format msgid "RADIUS response has incorrect MD5 signature" msgstr "ответ RADIUS содержит неверную подпись MD5" -#: libpq/auth.c:2570 +#: libpq/auth.c:2580 #, c-format msgid "RADIUS response has invalid code (%d) for user \"%s\"" msgstr "ответ RADIUS содержит неверный код (%d) для пользователя \"%s\"" @@ -10582,159 +11442,148 @@ msgstr "не удалось записать файл сервера \"%s\": %m" msgid "large object read request is too large" msgstr "при чтении большого объекта запрошен чрезмерный размер" -#: libpq/be-fsstubs.c:857 utils/adt/genfile.c:187 utils/adt/genfile.c:232 +#: libpq/be-fsstubs.c:857 utils/adt/genfile.c:211 utils/adt/genfile.c:252 #, c-format msgid "requested length cannot be negative" msgstr "запрошенная длина не может быть отрицательной" -#: libpq/be-secure.c:296 libpq/be-secure.c:418 -#, c-format -msgid "SSL error: %s" -msgstr "ошибка SSL: %s" - -#: libpq/be-secure.c:305 libpq/be-secure.c:427 libpq/be-secure.c:1046 -#, c-format -msgid "unrecognized SSL error code: %d" -msgstr "нераспознанный код ошибки SSL: %d" - -#: libpq/be-secure.c:365 -#, c-format -msgid "SSL failure during renegotiation start" -msgstr "сбой SSL при попытке переподключения" - -#: libpq/be-secure.c:380 -#, c-format -msgid "SSL handshake failure on renegotiation, retrying" -msgstr "сбой согласования SSL при переподключении, следует повторная попытка" - -#: libpq/be-secure.c:384 -#, c-format -msgid "could not complete SSL handshake on renegotiation, too many failures" -msgstr "" -"не удалось выполнить согласование SSL при переподключении (слишком много " -"ошибок)" - -#: libpq/be-secure.c:453 -#, c-format -msgid "SSL failed to renegotiate connection before limit expired" -msgstr "ошибка при согласовании SSL-соединения (превышен лимит)" - -#: libpq/be-secure.c:793 -#, c-format -msgid "ECDH: unrecognized curve name: %s" -msgstr "ECDH: нераспознанное имя кривой: %s" - -#: libpq/be-secure.c:798 -#, c-format -msgid "ECDH: could not create key" -msgstr "ECDH: не удалось создать ключ" - -#: libpq/be-secure.c:835 +#: libpq/be-secure-openssl.c:197 #, c-format msgid "could not create SSL context: %s" msgstr "не удалось создать контекст SSL: %s" -#: libpq/be-secure.c:851 +#: libpq/be-secure-openssl.c:213 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "не удалось загрузить сертификат сервера \"%s\": %s" -#: libpq/be-secure.c:857 +#: libpq/be-secure-openssl.c:219 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "не удалось обратиться к файлу закрытого ключа \"%s\": %m" -#: libpq/be-secure.c:872 +#: libpq/be-secure-openssl.c:234 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "к файлу закрытого ключа \"%s\" имеют доступ все или группа" -#: libpq/be-secure.c:874 +#: libpq/be-secure-openssl.c:236 #, c-format msgid "Permissions should be u=rw (0600) or less." msgstr "Права должны быть u=rw (0600) или более ограниченные." -#: libpq/be-secure.c:881 +#: libpq/be-secure-openssl.c:243 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "не удалось загрузить файл закрытого ключа \"%s\": %s" -#: libpq/be-secure.c:886 +#: libpq/be-secure-openssl.c:248 #, c-format msgid "check of private key failed: %s" msgstr "ошибка при проверке закрытого ключа: %s" -#: libpq/be-secure.c:915 +#: libpq/be-secure-openssl.c:277 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "не удалось загрузить файл корневых сертификатов \"%s\": %s" -#: libpq/be-secure.c:939 +#: libpq/be-secure-openssl.c:301 #, c-format msgid "SSL certificate revocation list file \"%s\" ignored" msgstr "файл со списком отзыва сертификатов SSL \"%s\" игнорируется" -#: libpq/be-secure.c:941 +#: libpq/be-secure-openssl.c:303 #, c-format msgid "SSL library does not support certificate revocation lists." msgstr "Библиотека SSL не поддерживает списки отзыва сертификатов." -#: libpq/be-secure.c:946 +#: libpq/be-secure-openssl.c:308 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "" "не удалось загрузить файл со списком отзыва сертификатов SSL \"%s\": %s" -#: libpq/be-secure.c:991 +#: libpq/be-secure-openssl.c:354 #, c-format msgid "could not initialize SSL connection: %s" msgstr "инициализировать SSL-подключение не удалось: %s" -#: libpq/be-secure.c:1000 +#: libpq/be-secure-openssl.c:362 #, c-format msgid "could not set SSL socket: %s" msgstr "не удалось создать SSL-сокет: %s" -#: libpq/be-secure.c:1026 +#: libpq/be-secure-openssl.c:396 #, c-format msgid "could not accept SSL connection: %m" msgstr "не удалось принять SSL-подключение: %m" -#: libpq/be-secure.c:1030 libpq/be-secure.c:1041 +#: libpq/be-secure-openssl.c:400 libpq/be-secure-openssl.c:411 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "не удалось принять SSL-подключение: обрыв данных" -#: libpq/be-secure.c:1035 +#: libpq/be-secure-openssl.c:405 #, c-format msgid "could not accept SSL connection: %s" msgstr "не удалось принять SSL-подключение: %s" -#: libpq/be-secure.c:1091 +#: libpq/be-secure-openssl.c:416 libpq/be-secure-openssl.c:554 +#: libpq/be-secure-openssl.c:642 +#, c-format +msgid "unrecognized SSL error code: %d" +msgstr "нераспознанный код ошибки SSL: %d" + +#: libpq/be-secure-openssl.c:460 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "Имя SSL-сертификата включает нулевой байт" -#: libpq/be-secure.c:1102 +#: libpq/be-secure-openssl.c:471 #, c-format msgid "SSL connection from \"%s\"" msgstr "SSL-подключение от \"%s\"" -#: libpq/be-secure.c:1153 +#: libpq/be-secure-openssl.c:545 libpq/be-secure-openssl.c:633 +#, c-format +msgid "SSL error: %s" +msgstr "ошибка SSL: %s" + +#: libpq/be-secure-openssl.c:601 +#, c-format +msgid "SSL failure during renegotiation start" +msgstr "сбой SSL при попытке переподключения" + +#: libpq/be-secure-openssl.c:668 +#, c-format +msgid "SSL failed to renegotiate connection before limit expired" +msgstr "ошибка при согласовании SSL-соединения (превышен лимит)" + +#: libpq/be-secure-openssl.c:1003 +#, c-format +msgid "ECDH: unrecognized curve name: %s" +msgstr "ECDH: нераспознанное имя кривой: %s" + +#: libpq/be-secure-openssl.c:1008 +#, c-format +msgid "ECDH: could not create key" +msgstr "ECDH: не удалось создать ключ" + +#: libpq/be-secure-openssl.c:1032 msgid "no SSL error reported" msgstr "нет сообщения об ошибке SSL" -#: libpq/be-secure.c:1157 +#: libpq/be-secure-openssl.c:1036 #, c-format msgid "SSL error code %lu" msgstr "код ошибки SSL: %lu" -#: libpq/crypt.c:67 +#: libpq/crypt.c:60 #, c-format msgid "User \"%s\" has no password assigned." msgstr "Пользователь \"%s\" не имеет пароля." -#: libpq/crypt.c:160 +#: libpq/crypt.c:150 #, c-format msgid "User \"%s\" has an expired password." msgstr "Срок пароля пользователя \"%s\" истёк." @@ -10760,14 +11609,14 @@ msgstr "слишком длинная строка в файле конфигу #: libpq/hba.c:410 libpq/hba.c:757 libpq/hba.c:773 libpq/hba.c:803 #: libpq/hba.c:849 libpq/hba.c:862 libpq/hba.c:884 libpq/hba.c:893 -#: libpq/hba.c:916 libpq/hba.c:928 libpq/hba.c:947 libpq/hba.c:968 -#: libpq/hba.c:979 libpq/hba.c:1034 libpq/hba.c:1052 libpq/hba.c:1064 -#: libpq/hba.c:1081 libpq/hba.c:1091 libpq/hba.c:1105 libpq/hba.c:1121 -#: libpq/hba.c:1136 libpq/hba.c:1147 libpq/hba.c:1183 libpq/hba.c:1215 -#: libpq/hba.c:1226 libpq/hba.c:1246 libpq/hba.c:1257 libpq/hba.c:1274 -#: libpq/hba.c:1299 libpq/hba.c:1336 libpq/hba.c:1346 libpq/hba.c:1402 -#: libpq/hba.c:1414 libpq/hba.c:1427 libpq/hba.c:1510 libpq/hba.c:1581 -#: libpq/hba.c:1599 libpq/hba.c:1620 tsearch/ts_locale.c:182 +#: libpq/hba.c:914 libpq/hba.c:926 libpq/hba.c:945 libpq/hba.c:966 +#: libpq/hba.c:977 libpq/hba.c:1032 libpq/hba.c:1050 libpq/hba.c:1062 +#: libpq/hba.c:1079 libpq/hba.c:1089 libpq/hba.c:1103 libpq/hba.c:1119 +#: libpq/hba.c:1134 libpq/hba.c:1145 libpq/hba.c:1181 libpq/hba.c:1213 +#: libpq/hba.c:1224 libpq/hba.c:1244 libpq/hba.c:1255 libpq/hba.c:1272 +#: libpq/hba.c:1297 libpq/hba.c:1334 libpq/hba.c:1344 libpq/hba.c:1413 +#: libpq/hba.c:1425 libpq/hba.c:1438 libpq/hba.c:1521 libpq/hba.c:1592 +#: libpq/hba.c:1610 libpq/hba.c:1631 tsearch/ts_locale.c:182 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "строка %d файла конфигурации \"%s\"" @@ -10830,126 +11679,126 @@ msgstr "hostssl не поддерживается в этой сборке" msgid "Compile with --with-openssl to use SSL connections." msgstr "Для работы с SSL скомпилируйте posgresql с ключом --with-openssl." -#: libpq/hba.c:914 +#: libpq/hba.c:912 #, c-format msgid "invalid connection type \"%s\"" msgstr "неверный тип подключения \"%s\"" -#: libpq/hba.c:927 +#: libpq/hba.c:925 #, c-format msgid "end-of-line before database specification" msgstr "конец строки перед определением базы данных" -#: libpq/hba.c:946 +#: libpq/hba.c:944 #, c-format msgid "end-of-line before role specification" msgstr "конец строки перед определением роли" -#: libpq/hba.c:967 +#: libpq/hba.c:965 #, c-format msgid "end-of-line before IP address specification" msgstr "конец строки перед определением IP-адресов" -#: libpq/hba.c:977 +#: libpq/hba.c:975 #, c-format msgid "multiple values specified for host address" msgstr "для адреса узла указано несколько значений" -#: libpq/hba.c:978 +#: libpq/hba.c:976 #, c-format msgid "Specify one address range per line." msgstr "Определите в строке один диапазон адресов." -#: libpq/hba.c:1032 +#: libpq/hba.c:1030 #, c-format msgid "invalid IP address \"%s\": %s" msgstr "неверный IP-адрес \"%s\": %s" -#: libpq/hba.c:1050 +#: libpq/hba.c:1048 #, c-format msgid "specifying both host name and CIDR mask is invalid: \"%s\"" msgstr "указать одновременно и имя узла, и маску CIDR нельзя: \"%s\"" -#: libpq/hba.c:1062 +#: libpq/hba.c:1060 #, c-format msgid "invalid CIDR mask in address \"%s\"" msgstr "неверная маска CIDR в адресе \"%s\"" -#: libpq/hba.c:1079 +#: libpq/hba.c:1077 #, c-format msgid "end-of-line before netmask specification" msgstr "конец строки перед определением маски сети" -#: libpq/hba.c:1080 +#: libpq/hba.c:1078 #, c-format msgid "" "Specify an address range in CIDR notation, or provide a separate netmask." msgstr "" "Укажите диапазон адресов в формате CIDR или задайте отдельную маску сети." -#: libpq/hba.c:1090 +#: libpq/hba.c:1088 #, c-format msgid "multiple values specified for netmask" msgstr "для сетевой маски указано несколько значений" -#: libpq/hba.c:1103 +#: libpq/hba.c:1101 #, c-format msgid "invalid IP mask \"%s\": %s" msgstr "неверная маска IP \"%s\": %s" -#: libpq/hba.c:1120 +#: libpq/hba.c:1118 #, c-format msgid "IP address and mask do not match" msgstr "IP-адрес не соответствует маске" -#: libpq/hba.c:1135 +#: libpq/hba.c:1133 #, c-format msgid "end-of-line before authentication method" msgstr "конец строки перед методом проверки подлинности" -#: libpq/hba.c:1145 +#: libpq/hba.c:1143 #, c-format msgid "multiple values specified for authentication type" msgstr "для типа проверки подлинности указано несколько значений" -#: libpq/hba.c:1146 +#: libpq/hba.c:1144 #, c-format msgid "Specify exactly one authentication type per line." msgstr "Определите в строке единственный тип проверки подлинности." -#: libpq/hba.c:1213 +#: libpq/hba.c:1211 #, c-format msgid "invalid authentication method \"%s\"" msgstr "неверный метод проверки подлинности \"%s\"" -#: libpq/hba.c:1224 +#: libpq/hba.c:1222 #, c-format msgid "invalid authentication method \"%s\": not supported by this build" msgstr "" "неверный метод проверки подлинности \"%s\": не поддерживается в этой сборке" -#: libpq/hba.c:1245 +#: libpq/hba.c:1243 #, c-format msgid "gssapi authentication is not supported on local sockets" msgstr "проверка подлинности gssapi для локальных сокетов не поддерживается" -#: libpq/hba.c:1256 +#: libpq/hba.c:1254 #, c-format msgid "peer authentication is only supported on local sockets" msgstr "проверка подлинности peer поддерживается только для локальных сокетов" -#: libpq/hba.c:1273 +#: libpq/hba.c:1271 #, c-format msgid "cert authentication is only supported on hostssl connections" msgstr "" "проверка подлинности cert поддерживается только для подключений hostssl" -#: libpq/hba.c:1298 +#: libpq/hba.c:1296 #, c-format msgid "authentication option not in name=value format: %s" msgstr "параметр проверки подлинности указан не в формате имя=значение: %s" -#: libpq/hba.c:1335 +#: libpq/hba.c:1333 #, c-format msgid "" "cannot use ldapbasedn, ldapbinddn, ldapbindpasswd, ldapsearchattribute, or " @@ -10958,7 +11807,7 @@ msgstr "" "нельзя использовать ldapbasedn, ldapbinddn, ldapbindpasswd, " "ldapsearchattribute или ldapurl вместе с ldapprefix" -#: libpq/hba.c:1345 +#: libpq/hba.c:1343 #, c-format msgid "" "authentication method \"ldap\" requires argument \"ldapbasedn\", \"ldapprefix" @@ -10967,16 +11816,16 @@ msgstr "" "для метода проверки подлинности \"ldap\" требуется установить аргументы " "\"ldapbasedn\" и \"ldapprefix\" или \"ldapsuffix\"" -#: libpq/hba.c:1388 +#: libpq/hba.c:1399 msgid "ident, peer, gssapi, sspi, and cert" msgstr "ident, peer, gssapi, sspi и cert" -#: libpq/hba.c:1401 +#: libpq/hba.c:1412 #, c-format msgid "clientcert can only be configured for \"hostssl\" rows" msgstr "clientcert можно определить только в строках \"hostssl\"" -#: libpq/hba.c:1412 +#: libpq/hba.c:1423 #, c-format msgid "" "client certificates can only be checked if a root certificate store is " @@ -10985,78 +11834,73 @@ msgstr "" "сертификаты клиентов могут проверяться, только если доступно хранилище " "корневых сертификатов" -#: libpq/hba.c:1413 -#, c-format -msgid "Make sure the configuration parameter \"ssl_ca_file\" is set." -msgstr "Убедитесь, что в конфигурации установлен параметр \"ssl_ca_file\"." - -#: libpq/hba.c:1426 +#: libpq/hba.c:1437 #, c-format msgid "clientcert can not be set to 0 when using \"cert\" authentication" msgstr "" "clientcert нельзя установить в 0 при использовании проверки подлинности " "\"cert\"" -#: libpq/hba.c:1453 +#: libpq/hba.c:1464 #, c-format msgid "could not parse LDAP URL \"%s\": %s" msgstr "не удалось разобрать URL-адрес LDAP \"%s\": %s" -#: libpq/hba.c:1461 +#: libpq/hba.c:1472 #, c-format msgid "unsupported LDAP URL scheme: %s" msgstr "неподдерживаемая схема в URL-адресе LDAP: %s" -#: libpq/hba.c:1477 +#: libpq/hba.c:1488 #, c-format msgid "filters not supported in LDAP URLs" msgstr "фильтры в URL-адресах LDAP не поддерживаются" -#: libpq/hba.c:1485 +#: libpq/hba.c:1496 #, c-format msgid "LDAP URLs not supported on this platform" msgstr "URL-адреса LDAP не поддерживаются в этой ОС" -#: libpq/hba.c:1509 +#: libpq/hba.c:1520 #, c-format msgid "invalid LDAP port number: \"%s\"" msgstr "неверный номер порта LDAP: \"%s\"" -#: libpq/hba.c:1549 libpq/hba.c:1556 +#: libpq/hba.c:1560 libpq/hba.c:1567 msgid "gssapi and sspi" msgstr "gssapi и sspi" -#: libpq/hba.c:1598 +#: libpq/hba.c:1609 #, c-format msgid "invalid RADIUS port number: \"%s\"" msgstr "неверный номер порта RADIUS: \"%s\"" -#: libpq/hba.c:1618 +#: libpq/hba.c:1629 #, c-format msgid "unrecognized authentication option name: \"%s\"" msgstr "нераспознанное имя атрибута проверки подлинности: \"%s\"" -#: libpq/hba.c:1759 guc-file.l:513 +#: libpq/hba.c:1764 guc-file.l:595 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "открыть файл конфигурации \"%s\" не удалось: %m" -#: libpq/hba.c:1809 +#: libpq/hba.c:1815 #, c-format msgid "configuration file \"%s\" contains no entries" msgstr "файл конфигурации \"%s\" не содержит записей" -#: libpq/hba.c:1905 +#: libpq/hba.c:1911 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "неверное регулярное выражение \"%s\": %s" -#: libpq/hba.c:1965 +#: libpq/hba.c:1971 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "ошибка при поиске по регулярному выражению для \"%s\": %s" -#: libpq/hba.c:1982 +#: libpq/hba.c:1990 #, c-format msgid "" "regular expression \"%s\" has no subexpressions as requested by " @@ -11065,87 +11909,92 @@ msgstr "" "в регулярном выражении \"%s\" нет подвыражений, требуемых для обратной " "ссылки в \"%s\"" -#: libpq/hba.c:2078 +#: libpq/hba.c:2087 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "" "указанное имя пользователя (%s) не совпадает с именем прошедшего проверку " "(%s)" -#: libpq/hba.c:2098 +#: libpq/hba.c:2107 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "" "нет соответствия в файле сопоставлений \"%s\" для пользователя \"%s\", " "прошедшего проверку как \"%s\"" -#: libpq/hba.c:2133 +#: libpq/hba.c:2142 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "не удалось открыть файл сопоставлений пользователей \"%s\": %m" -#: libpq/pqcomm.c:316 +#: libpq/pqcomm.c:198 +#, c-format +msgid "could not set socket to nonblocking mode: %m" +msgstr "не удалось перевести сокет в неблокирующий режим: %m" + +#: libpq/pqcomm.c:367 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "длина пути доменного сокета \"%s\" превышает предел (%d байт)" -#: libpq/pqcomm.c:337 +#: libpq/pqcomm.c:388 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "перевести имя узла \"%s\", службы \"%s\" в адрес не удалось: %s" -#: libpq/pqcomm.c:341 +#: libpq/pqcomm.c:392 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "не удалось перевести имя службы \"%s\" в адрес: %s" -#: libpq/pqcomm.c:368 +#: libpq/pqcomm.c:419 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "" "не удалось привязаться ко всем запрошенным адресам: превышен предел " "MAXLISTEN (%d)" -#: libpq/pqcomm.c:377 +#: libpq/pqcomm.c:428 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:381 +#: libpq/pqcomm.c:432 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:386 +#: libpq/pqcomm.c:437 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:391 +#: libpq/pqcomm.c:442 #, c-format msgid "unrecognized address family %d" msgstr "нераспознанное семейство адресов: %d" #. translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:402 +#: libpq/pqcomm.c:453 #, c-format msgid "could not create %s socket: %m" msgstr "не удалось создать сокет %s: %m" -#: libpq/pqcomm.c:427 +#: libpq/pqcomm.c:478 #, c-format msgid "setsockopt(SO_REUSEADDR) failed: %m" msgstr "ошибка в setsockopt(SO_REUSEADDR): %m" -#: libpq/pqcomm.c:442 +#: libpq/pqcomm.c:493 #, c-format msgid "setsockopt(IPV6_V6ONLY) failed: %m" msgstr "ошибка в setsockopt(IPV6_V6ONLY): %m" #. translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:461 +#: libpq/pqcomm.c:512 #, c-format msgid "could not bind %s socket: %m" msgstr "не удалось привязаться к сокету %s: %m" -#: libpq/pqcomm.c:464 +#: libpq/pqcomm.c:515 #, c-format msgid "" "Is another postmaster already running on port %d? If not, remove socket file " @@ -11154,7 +12003,7 @@ msgstr "" "Возможно порт %d занят другим процессом postmaster? Если нет, удалите файл " "\"%s\" и повторите попытку." -#: libpq/pqcomm.c:467 +#: libpq/pqcomm.c:518 #, c-format msgid "" "Is another postmaster already running on port %d? If not, wait a few seconds " @@ -11164,67 +12013,62 @@ msgstr "" "попытку через несколько секунд." #. translator: %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:500 +#: libpq/pqcomm.c:551 #, c-format msgid "could not listen on %s socket: %m" msgstr "не удалось начать приём в сокете %s: %m" -#: libpq/pqcomm.c:590 +#: libpq/pqcomm.c:641 #, c-format msgid "group \"%s\" does not exist" msgstr "группа \"%s\" не существует" -#: libpq/pqcomm.c:600 +#: libpq/pqcomm.c:651 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "не удалось установить группу для файла \"%s\": %m" -#: libpq/pqcomm.c:611 +#: libpq/pqcomm.c:662 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "не удалось установить права доступа для файла \"%s\": %m" -#: libpq/pqcomm.c:641 +#: libpq/pqcomm.c:692 #, c-format msgid "could not accept new connection: %m" msgstr "не удалось принять новое подключение: %m" -#: libpq/pqcomm.c:813 -#, c-format -msgid "could not set socket to nonblocking mode: %m" -msgstr "не удалось перевести сокет в неблокирующий режим: %m" - -#: libpq/pqcomm.c:819 +#: libpq/pqcomm.c:883 #, c-format -msgid "could not set socket to blocking mode: %m" -msgstr "не удалось перевести сокет в блокирующий режим: %m" +msgid "there is no client connection" +msgstr "нет клиентского подключения" -#: libpq/pqcomm.c:871 libpq/pqcomm.c:965 +#: libpq/pqcomm.c:934 libpq/pqcomm.c:1030 #, c-format msgid "could not receive data from client: %m" msgstr "не удалось получить данные от клиента: %m" -#: libpq/pqcomm.c:1110 tcop/postgres.c:3946 +#: libpq/pqcomm.c:1175 tcop/postgres.c:3897 #, c-format msgid "terminating connection because protocol sync was lost" msgstr "закрытие подключения из-за потери синхронизации протокола" -#: libpq/pqcomm.c:1176 +#: libpq/pqcomm.c:1241 #, c-format msgid "unexpected EOF within message length word" msgstr "неожиданный обрыв данных в слове длины сообщения" -#: libpq/pqcomm.c:1187 +#: libpq/pqcomm.c:1252 #, c-format msgid "invalid message length" msgstr "неверная длина сообщения" -#: libpq/pqcomm.c:1209 libpq/pqcomm.c:1222 +#: libpq/pqcomm.c:1274 libpq/pqcomm.c:1287 #, c-format msgid "incomplete message from client" msgstr "неполное сообщение от клиента" -#: libpq/pqcomm.c:1355 +#: libpq/pqcomm.c:1420 #, c-format msgid "could not send data to client: %m" msgstr "не удалось послать данные клиенту: %m" @@ -11235,7 +12079,7 @@ msgid "no data left in message" msgstr "в сообщении не осталось данных" #: libpq/pqformat.c:556 libpq/pqformat.c:574 libpq/pqformat.c:595 -#: utils/adt/arrayfuncs.c:1444 utils/adt/rowtypes.c:561 +#: utils/adt/arrayfuncs.c:1460 utils/adt/rowtypes.c:561 #, c-format msgid "insufficient data left in message" msgstr "недостаточно данных осталось в сообщении" @@ -11250,17 +12094,12 @@ msgstr "неверная строка в сообщении" msgid "invalid message format" msgstr "неверный формат сообщения" -#: main/main.c:263 -#, c-format -msgid "%s: setsysinfo failed: %s\n" -msgstr "%s: ошибка setsysinfo: %s\n" - -#: main/main.c:285 +#: main/main.c:259 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: ошибка WSAStartup: %d\n" -#: main/main.c:331 +#: main/main.c:306 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -11269,7 +12108,7 @@ msgstr "" "%s - сервер PostgreSQL.\n" "\n" -#: main/main.c:332 +#: main/main.c:307 #, c-format msgid "" "Usage:\n" @@ -11280,121 +12119,114 @@ msgstr "" " %s [ПАРАМЕТР]...\n" "\n" -#: main/main.c:333 +#: main/main.c:308 #, c-format msgid "Options:\n" msgstr "Параметры:\n" -#: main/main.c:335 -#, c-format -msgid " -A 1|0 enable/disable run-time assert checking\n" -msgstr "" -" -A 1|0 включить/выключить проверки истинности во время " -"выполнения\n" - -#: main/main.c:337 +#: main/main.c:309 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B ЧИСЛО_БУФ число разделяемых буферов\n" -#: main/main.c:338 +#: main/main.c:310 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c ИМЯ=ЗНАЧЕНИЕ установить параметр выполнения\n" -#: main/main.c:339 +#: main/main.c:311 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C ИМЯ вывести значение параметра выполнения и выйти\n" -#: main/main.c:340 +#: main/main.c:312 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 уровень отладочных сообщений\n" -#: main/main.c:341 +#: main/main.c:313 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D КАТАЛОГ каталог с данными\n" -#: main/main.c:342 +#: main/main.c:314 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e использовать европейский формат дат (ДМГ)\n" -#: main/main.c:343 +#: main/main.c:315 #, c-format msgid " -F turn fsync off\n" msgstr " -F выключить синхронизацию с ФС\n" -#: main/main.c:344 +#: main/main.c:316 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h ИМЯ имя или IP-адрес для приёма сетевых соединений\n" -#: main/main.c:345 +#: main/main.c:317 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i включить соединения TCP/IP\n" -#: main/main.c:346 +#: main/main.c:318 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k КАТАЛОГ расположение доменных сокетов Unix\n" -#: main/main.c:348 +#: main/main.c:320 #, c-format msgid " -l enable SSL connections\n" msgstr " -l разрешить SSL-подключения\n" -#: main/main.c:350 +#: main/main.c:322 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N МАКС_ПОДКЛ предельное число подключений\n" -#: main/main.c:351 +#: main/main.c:323 #, c-format msgid "" " -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n" msgstr "" " -o ПАРАМЕТРЫ параметры для серверных процессов (уже неактуально)\n" -#: main/main.c:352 +#: main/main.c:324 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p ПОРТ номер порта для приёма подключений\n" -#: main/main.c:353 +#: main/main.c:325 #, c-format msgid " -s show statistics after each query\n" msgstr " -s показывать статистику после каждого запроса\n" -#: main/main.c:354 +#: main/main.c:326 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S РАБ_ПАМЯТЬ задать объём памяти для сортировки (в КБ)\n" -#: main/main.c:355 +#: main/main.c:327 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: main/main.c:356 +#: main/main.c:328 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --ИМЯ=ЗНАЧЕНИЕ установить параметр выполнения\n" -#: main/main.c:357 +#: main/main.c:329 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config вывести параметры конфигурации и выйти\n" -#: main/main.c:358 +#: main/main.c:330 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: main/main.c:360 +#: main/main.c:332 #, c-format msgid "" "\n" @@ -11403,12 +12235,12 @@ msgstr "" "\n" "Параметры для разработчиков:\n" -#: main/main.c:361 +#: main/main.c:333 #, c-format msgid " -f s|i|n|m|h forbid use of some plan types\n" msgstr " -f s|i|n|m|h запретить некоторые типы планов\n" -#: main/main.c:362 +#: main/main.c:334 #, c-format msgid "" " -n do not reinitialize shared memory after abnormal exit\n" @@ -11416,22 +12248,22 @@ msgstr "" " -n не переинициализировать разделяемую память после\n" " аварийного выхода\n" -#: main/main.c:363 +#: main/main.c:335 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O разрешить изменять структуру системных таблиц\n" -#: main/main.c:364 +#: main/main.c:336 #, c-format msgid " -P disable system indexes\n" msgstr " -P отключить системные индексы\n" -#: main/main.c:365 +#: main/main.c:337 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex показать время каждого запроса\n" -#: main/main.c:366 +#: main/main.c:338 #, c-format msgid "" " -T send SIGSTOP to all backend processes if one dies\n" @@ -11439,13 +12271,13 @@ msgstr "" " -T посылать сигнал SIGSTOP всем серверным процессам\n" " при отключении одного\n" -#: main/main.c:367 +#: main/main.c:339 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr "" " -W СЕК ждать заданное число секунд для подключения отладчика\n" -#: main/main.c:369 +#: main/main.c:341 #, c-format msgid "" "\n" @@ -11454,7 +12286,7 @@ msgstr "" "\n" "Параметры для монопольного режима:\n" -#: main/main.c:370 +#: main/main.c:342 #, c-format msgid "" " --single selects single-user mode (must be first argument)\n" @@ -11462,22 +12294,22 @@ msgstr "" " --single включить монопольный режим\n" " (этот аргумент должен быть первым)\n" -#: main/main.c:371 +#: main/main.c:343 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " ИМЯ_БД база данных (по умолчанию - имя пользователя)\n" -#: main/main.c:372 +#: main/main.c:344 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 переопределить уровень отладочных сообщений\n" -#: main/main.c:373 +#: main/main.c:345 #, c-format msgid " -E echo statement before execution\n" msgstr " -E выводить SQL-операторы перед выполнением\n" -#: main/main.c:374 +#: main/main.c:346 #, c-format msgid "" " -j do not use newline as interactive query delimiter\n" @@ -11485,12 +12317,12 @@ msgstr "" " -j не считать конец строки разделителем интерактивных " "запросов\n" -#: main/main.c:375 main/main.c:380 +#: main/main.c:347 main/main.c:352 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r ИМЯ_ФАЙЛА перенаправить STDOUT и STDERR в указанный файл\n" -#: main/main.c:377 +#: main/main.c:349 #, c-format msgid "" "\n" @@ -11499,7 +12331,7 @@ msgstr "" "\n" "Параметры для режима инициализации:\n" -#: main/main.c:378 +#: main/main.c:350 #, c-format msgid "" " --boot selects bootstrapping mode (must be first argument)\n" @@ -11507,7 +12339,7 @@ msgstr "" " --boot включить режим инициализации\n" " (этот аргумент должен быть первым)\n" -#: main/main.c:379 +#: main/main.c:351 #, c-format msgid "" " DBNAME database name (mandatory argument in bootstrapping " @@ -11515,12 +12347,12 @@ msgid "" msgstr "" " ИМЯ_БД имя базы данных (необходимо в режиме инициализации)\n" -#: main/main.c:381 +#: main/main.c:353 #, c-format msgid " -x NUM internal use\n" msgstr " -x ЧИСЛО параметр для внутреннего использования\n" -#: main/main.c:383 +#: main/main.c:355 #, c-format msgid "" "\n" @@ -11537,7 +12369,7 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу .\n" -#: main/main.c:397 +#: main/main.c:369 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -11550,12 +12382,12 @@ msgstr "" "должен запускать обычный пользователь. Подробнее о том, как\n" "правильно запускать сервер, вы можете узнать в документации.\n" -#: main/main.c:414 +#: main/main.c:386 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: фактический и эффективный ID пользователя должны совпадать\n" -#: main/main.c:421 +#: main/main.c:393 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -11570,14 +12402,38 @@ msgstr "" "должен запускать обычный пользователь. Подробнее о том, как\n" "правильно запускать сервер, вы можете узнать в документации.\n" -#: nodes/nodeFuncs.c:115 nodes/nodeFuncs.c:141 parser/parse_coerce.c:1782 +#: nodes/nodeFuncs.c:118 nodes/nodeFuncs.c:149 parser/parse_coerce.c:1782 #: parser/parse_coerce.c:1810 parser/parse_coerce.c:1886 -#: parser/parse_expr.c:1739 parser/parse_func.c:590 parser/parse_oper.c:948 +#: parser/parse_expr.c:1980 parser/parse_func.c:597 parser/parse_oper.c:952 #, c-format msgid "could not find array type for data type %s" msgstr "тип массива для типа данных %s не найден" -#: optimizer/path/joinrels.c:722 +#: optimizer/path/allpaths.c:2272 +#, c-format +msgid "WHERE CURRENT OF is not supported on a view with no underlying relation" +msgstr "" +"WHERE CURRENT OF поддерживается только для представлений, основанных на " +"таблицах" + +#: optimizer/path/allpaths.c:2277 +#, c-format +msgid "" +"WHERE CURRENT OF is not supported on a view with more than one underlying " +"relation" +msgstr "" +"WHERE CURRENT OF не поддерживается для представлений, основанных на " +"нескольких таблицах" + +#: optimizer/path/allpaths.c:2282 +#, c-format +msgid "" +"WHERE CURRENT OF is not supported on a view with grouping or aggregation" +msgstr "" +"WHERE CURRENT OF не поддерживается для представлений с группированием или " +"агрегированием" + +#: optimizer/path/joinrels.c:725 #, c-format msgid "" "FULL JOIN is only supported with merge-joinable or hash-joinable join " @@ -11587,25 +12443,25 @@ msgstr "" "слиянием или хэш-соединение" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/initsplan.c:1079 +#: optimizer/plan/initsplan.c:1083 #, c-format msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s не может применяться к NULL-содержащей стороне внешнего соединения" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1158 parser/analyze.c:1330 parser/analyze.c:1528 -#: parser/analyze.c:2287 +#: optimizer/plan/planner.c:1324 parser/analyze.c:1433 parser/analyze.c:1631 +#: parser/analyze.c:2412 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s несовместимо с UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:2723 +#: optimizer/plan/planner.c:3578 #, c-format msgid "could not implement GROUP BY" msgstr "не удалось реализовать GROUP BY" -#: optimizer/plan/planner.c:2724 optimizer/plan/planner.c:2892 -#: optimizer/prep/prepunion.c:825 +#: optimizer/plan/planner.c:3579 optimizer/plan/planner.c:3747 +#: optimizer/prep/prepunion.c:828 #, c-format msgid "" "Some of the datatypes only support hashing, while others only support " @@ -11614,80 +12470,104 @@ msgstr "" "Одни типы данных поддерживают только хэширование, а другие - только " "сортировку." -#: optimizer/plan/planner.c:2891 +#: optimizer/plan/planner.c:3746 #, c-format msgid "could not implement DISTINCT" msgstr "не удалось реализовать DISTINCT" -#: optimizer/plan/planner.c:3497 +#: optimizer/plan/planner.c:4352 #, c-format msgid "could not implement window PARTITION BY" msgstr "не удалось реализовать PARTITION BY для окна" -#: optimizer/plan/planner.c:3498 +#: optimizer/plan/planner.c:4353 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Колонки, разбивающие окна, должны иметь сортируемые типы данных." -#: optimizer/plan/planner.c:3502 +#: optimizer/plan/planner.c:4357 #, c-format msgid "could not implement window ORDER BY" msgstr "не удалось реализовать ORDER BY для окна" -#: optimizer/plan/planner.c:3503 +#: optimizer/plan/planner.c:4358 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Колонки, сортирующие окна, должны иметь сортируемые типы данных." -#: optimizer/plan/setrefs.c:402 +#: optimizer/plan/setrefs.c:411 #, c-format msgid "too many range table entries" msgstr "слишком много элементов RTE" -#: optimizer/prep/prepunion.c:419 +#: optimizer/prep/prepunion.c:421 #, c-format msgid "could not implement recursive UNION" msgstr "не удалось реализовать рекурсивный UNION" -#: optimizer/prep/prepunion.c:420 +#: optimizer/prep/prepunion.c:422 #, c-format msgid "All column datatypes must be hashable." msgstr "Все колонки должны иметь хэшируемые типы данных." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:824 +#: optimizer/prep/prepunion.c:827 #, c-format msgid "could not implement %s" msgstr "не удалось реализовать %s" -#: optimizer/util/clauses.c:4529 +#: optimizer/util/clauses.c:4597 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "внедрённая в код SQL-функция \"%s\"" -#: optimizer/util/plancat.c:104 +#: optimizer/util/plancat.c:108 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "" "обращаться к временным или нежурналируемым отношениям в процессе " "восстановления нельзя" -#: parser/analyze.c:627 parser/analyze.c:1102 +#: optimizer/util/plancat.c:498 +#, c-format +msgid "system columns cannot be used in an ON CONFLICT clause" +msgstr "системные колонки нельзя использовать в предложении ON CONFLICT" + +#: optimizer/util/plancat.c:516 +#, c-format +msgid "constraint in ON CONFLICT clause has no associated index" +msgstr "ограничению в ON CONFLICT не соответствует индекс" + +#: optimizer/util/plancat.c:568 +#, c-format +msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" +msgstr "ON CONFLICT DO UPDATE не поддерживается с ограничениями-исключениями" + +#: optimizer/util/plancat.c:675 +#, c-format +msgid "" +"there is no unique or exclusion constraint matching the ON CONFLICT " +"specification" +msgstr "" +"нет уникального ограничения или ограничения-исключения, соответствующего " +"указанию ON CONFLICT" + +#: parser/analyze.c:639 parser/analyze.c:1205 #, c-format msgid "VALUES lists must all be the same length" msgstr "списки VALUES должны иметь одинаковую длину" -#: parser/analyze.c:794 +#: parser/analyze.c:811 #, c-format msgid "INSERT has more expressions than target columns" msgstr "INSERT содержит больше выражений, чем целевых колонок" -#: parser/analyze.c:812 +#: parser/analyze.c:829 #, c-format msgid "INSERT has more target columns than expressions" msgstr "INSERT содержит больше целевых колонок, чем выражений" -#: parser/analyze.c:816 +#: parser/analyze.c:833 #, c-format msgid "" "The insertion source is a row expression containing the same number of " @@ -11696,34 +12576,34 @@ msgstr "" "Источником данных является строка, включающая столько же колонок, сколько " "требуется для INSERT. Вы намеренно использовали скобки?" -#: parser/analyze.c:924 parser/analyze.c:1303 +#: parser/analyze.c:1026 parser/analyze.c:1406 #, c-format msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO здесь не допускается" -#: parser/analyze.c:1116 +#: parser/analyze.c:1219 #, c-format msgid "DEFAULT can only appear in a VALUES list within INSERT" msgstr "DEFAULT может присутствовать в списке VALUES только в контексте INSERT" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1235 parser/analyze.c:2459 +#: parser/analyze.c:1338 parser/analyze.c:2582 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s нельзя применять к VALUES" -#: parser/analyze.c:1456 +#: parser/analyze.c:1559 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "неверное предложение UNION/INTERSECT/EXCEPT ORDER BY" -#: parser/analyze.c:1457 +#: parser/analyze.c:1560 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "" "Допустимо использование только имён колонок, но не выражений или функций." -#: parser/analyze.c:1458 +#: parser/analyze.c:1561 #, c-format msgid "" "Add the expression/function to every SELECT, or move the UNION into a FROM " @@ -11732,12 +12612,12 @@ msgstr "" "Добавьте выражение/функцию в каждый SELECT или перенесите UNION в " "предложение FROM." -#: parser/analyze.c:1518 +#: parser/analyze.c:1621 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTO можно добавить только в первый SELECT в UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:1582 +#: parser/analyze.c:1685 #, c-format msgid "" "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of " @@ -11746,214 +12626,275 @@ msgstr "" "оператор, составляющий UNION/INTERSECT/EXCEPT, не может ссылаться на другие " "отношения на том же уровне запроса" -#: parser/analyze.c:1671 +#: parser/analyze.c:1774 #, c-format msgid "each %s query must have the same number of columns" msgstr "все запросы в %s должны возвращать одинаковое число колонок" -#: parser/analyze.c:2051 +#: parser/analyze.c:2167 #, c-format msgid "RETURNING must have at least one column" msgstr "в RETURNING должна быть минимум одна колонка" -#: parser/analyze.c:2088 +#: parser/analyze.c:2204 #, c-format msgid "cannot specify both SCROLL and NO SCROLL" msgstr "противоречивые указания SCROLL и NO SCROLL" -#: parser/analyze.c:2106 +#: parser/analyze.c:2222 #, 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:2114 +#: parser/analyze.c:2230 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s не поддерживается" -#: parser/analyze.c:2117 +#: parser/analyze.c:2233 #, 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:2125 +#: parser/analyze.c:2241 #, 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:2136 +#: parser/analyze.c:2252 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not supported" msgstr "DECLARE INSENSITIVE CURSOR ... %s не поддерживается" -#: parser/analyze.c:2139 +#: parser/analyze.c:2255 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Независимые курсоры должны быть READ ONLY." -#: parser/analyze.c:2205 +#: parser/analyze.c:2321 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "" "в материализованных представлениях не должны использоваться операторы, " "изменяющие данные в WITH" -#: parser/analyze.c:2215 +#: parser/analyze.c:2331 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "" "в материализованных представлениях не должны использоваться временные " "таблицы и представления" -#: parser/analyze.c:2225 +#: parser/analyze.c:2341 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "" "определять материализованные представления со связанными параметрами нельзя" -#: parser/analyze.c:2237 +#: parser/analyze.c:2353 #, c-format msgid "materialized views cannot be UNLOGGED" msgstr "" "материализованные представления не могут быть нежурналируемыми (UNLOGGED)" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2294 +#: parser/analyze.c:2419 #, 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:2301 +#: parser/analyze.c:2426 #, 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:2308 +#: parser/analyze.c:2433 #, 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:2315 +#: parser/analyze.c:2440 #, 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:2322 +#: parser/analyze.c:2447 #, 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:2329 +#: parser/analyze.c:2454 #, 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:2408 +#: parser/analyze.c:2533 #, 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:2441 +#: parser/analyze.c:2564 #, 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:2450 +#: parser/analyze.c:2573 #, 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:2468 +#: parser/analyze.c:2591 #, 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:2485 +#: parser/analyze.c:2608 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "отношение \"%s\" в определении %s отсутствует в предложении FROM" -#: parser/parse_agg.c:201 parser/parse_oper.c:219 +#: parser/parse_agg.c:207 parser/parse_oper.c:220 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "для типа %s не удалось найти оператор сортировки" -#: parser/parse_agg.c:203 +#: parser/parse_agg.c:209 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "Агрегатным функциям с DISTINCT необходимо сортировать входные данные." -#: parser/parse_agg.c:254 +#: parser/parse_agg.c:244 +#, c-format +msgid "GROUPING must have fewer than 32 arguments" +msgstr "у GROUPING должно быть меньше 32 аргументов" + +#: parser/parse_agg.c:347 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "агрегатные функции нельзя применять в условиях JOIN" -#: parser/parse_agg.c:260 +#: parser/parse_agg.c:349 +msgid "grouping operations are not allowed in JOIN conditions" +msgstr "операции группировки нельзя применять в условиях JOIN" + +#: parser/parse_agg.c:361 msgid "" "aggregate functions are not allowed in FROM clause of their own query level" msgstr "" "агрегатные функции нельзя применять в предложении FROM их уровня запроса" -#: parser/parse_agg.c:263 +#: parser/parse_agg.c:363 +msgid "" +"grouping operations are not allowed in FROM clause of their own query level" +msgstr "" +"операции группировки нельзя применять в предложении FROM их уровня запроса" + +#: parser/parse_agg.c:368 msgid "aggregate functions are not allowed in functions in FROM" msgstr "агрегатные функции нельзя применять в функциях во FROM" -#: parser/parse_agg.c:281 +#: parser/parse_agg.c:370 +msgid "grouping operations are not allowed in functions in FROM" +msgstr "операции группировки нельзя применять в функциях во FROM" + +#: parser/parse_agg.c:390 msgid "aggregate functions are not allowed in window RANGE" msgstr "агрегатные функции нельзя применять в указании RANGE для окна" -#: parser/parse_agg.c:284 +#: parser/parse_agg.c:392 +msgid "grouping operations are not allowed in window RANGE" +msgstr "операции группировки нельзя применять в указании RANGE для окна" + +#: parser/parse_agg.c:397 msgid "aggregate functions are not allowed in window ROWS" msgstr "агрегатные функции нельзя применять в указании ROWS для окна" -#: parser/parse_agg.c:315 +#: parser/parse_agg.c:399 +msgid "grouping operations are not allowed in window ROWS" +msgstr "операции группировки нельзя применять в указании ROWS для окна" + +#: parser/parse_agg.c:432 msgid "aggregate functions are not allowed in check constraints" msgstr "агрегатные функции нельзя применять в ограничениях-проверках" -#: parser/parse_agg.c:319 +#: parser/parse_agg.c:434 +msgid "grouping operations are not allowed in check constraints" +msgstr "операции группировки нельзя применять в ограничениях-проверках" + +#: parser/parse_agg.c:441 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "агрегатные функции нельзя применять в выражениях DEFAULT" -#: parser/parse_agg.c:322 +#: parser/parse_agg.c:443 +msgid "grouping operations are not allowed in DEFAULT expressions" +msgstr "операции группировки нельзя применять в выражениях DEFAULT" + +#: parser/parse_agg.c:448 msgid "aggregate functions are not allowed in index expressions" msgstr "агрегатные функции нельзя применять в выражениях индексов" -#: parser/parse_agg.c:325 +#: parser/parse_agg.c:450 +msgid "grouping operations are not allowed in index expressions" +msgstr "операции группировки нельзя применять в выражениях индексов" + +#: parser/parse_agg.c:455 msgid "aggregate functions are not allowed in index predicates" msgstr "агрегатные функции нельзя применять в предикатах индексов" -#: parser/parse_agg.c:328 +#: parser/parse_agg.c:457 +msgid "grouping operations are not allowed in index predicates" +msgstr "операции группировки нельзя применять в предикатах индексов" + +#: parser/parse_agg.c:462 msgid "aggregate functions are not allowed in transform expressions" msgstr "агрегатные функции нельзя применять в выражениях преобразований" -#: parser/parse_agg.c:331 +#: parser/parse_agg.c:464 +msgid "grouping operations are not allowed in transform expressions" +msgstr "операции группировки нельзя применять в выражениях преобразований" + +#: parser/parse_agg.c:469 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "агрегатные функции нельзя применять в параметрах EXECUTE" -#: parser/parse_agg.c:334 +#: parser/parse_agg.c:471 +msgid "grouping operations are not allowed in EXECUTE parameters" +msgstr "операции группировки нельзя применять в параметрах EXECUTE" + +#: parser/parse_agg.c:476 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "агрегатные функции нельзя применять в условиях WHEN для триггеров" +#: parser/parse_agg.c:478 +msgid "grouping operations are not allowed in trigger WHEN conditions" +msgstr "операции группировки нельзя применять в условиях WHEN для триггеров" + #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:354 parser/parse_clause.c:1407 +#: parser/parse_agg.c:501 parser/parse_clause.c:1548 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "агрегатные функции нельзя применять в конструкции %s" -#: parser/parse_agg.c:457 +#. translator: %s is name of a SQL construct, eg GROUP BY +#: parser/parse_agg.c:504 +#, c-format +msgid "grouping operations are not allowed in %s" +msgstr "операции группировки нельзя применять в конструкции %s" + +#: parser/parse_agg.c:612 #, c-format msgid "" "outer-level aggregate cannot contain a lower-level variable in its direct " @@ -11962,70 +12903,75 @@ msgstr "" "агрегатная функция внешнего уровня не может содержать в своих аргументах " "переменные нижнего уровня" -#: parser/parse_agg.c:514 +#: parser/parse_agg.c:683 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "вызовы агрегатных функций не могут включать вызовы оконных функции" -#: parser/parse_agg.c:591 +#: parser/parse_agg.c:761 msgid "window functions are not allowed in JOIN conditions" msgstr "оконные функции нельзя применять в условиях JOIN" -#: parser/parse_agg.c:598 +#: parser/parse_agg.c:768 msgid "window functions are not allowed in functions in FROM" msgstr "оконные функции нельзя применять в функциях во FROM" -#: parser/parse_agg.c:613 +#: parser/parse_agg.c:783 msgid "window functions are not allowed in window definitions" msgstr "оконные функции нельзя применять в определении окна" -#: parser/parse_agg.c:644 +#: parser/parse_agg.c:814 msgid "window functions are not allowed in check constraints" msgstr "оконные функции нельзя применять в ограничениях-проверках" -#: parser/parse_agg.c:648 +#: parser/parse_agg.c:818 msgid "window functions are not allowed in DEFAULT expressions" msgstr "оконные функции нельзя применять в выражениях DEFAULT" -#: parser/parse_agg.c:651 +#: parser/parse_agg.c:821 msgid "window functions are not allowed in index expressions" msgstr "оконные функции нельзя применять в выражениях индексов" -#: parser/parse_agg.c:654 +#: parser/parse_agg.c:824 msgid "window functions are not allowed in index predicates" msgstr "оконные функции нельзя применять в предикатах индексов" -#: parser/parse_agg.c:657 +#: parser/parse_agg.c:827 msgid "window functions are not allowed in transform expressions" msgstr "оконные функции нельзя применять в выражениях преобразований" -#: parser/parse_agg.c:660 +#: parser/parse_agg.c:830 msgid "window functions are not allowed in EXECUTE parameters" msgstr "оконные функции нельзя применять в параметрах EXECUTE" -#: parser/parse_agg.c:663 +#: parser/parse_agg.c:833 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "оконные функции нельзя применять в условиях WHEN для триггеров" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:683 parser/parse_clause.c:1416 +#: parser/parse_agg.c:853 parser/parse_clause.c:1557 #, c-format msgid "window functions are not allowed in %s" msgstr "оконные функции нельзя применять в конструкции %s" -#: parser/parse_agg.c:717 parser/parse_clause.c:1827 +#: parser/parse_agg.c:887 parser/parse_clause.c:2394 #, c-format msgid "window \"%s\" does not exist" msgstr "окно \"%s\" не существует" -#: parser/parse_agg.c:879 +#: parser/parse_agg.c:972 +#, c-format +msgid "too many grouping sets present (max 4096)" +msgstr "слишком много наборов группирования (при максимуме 4096)" + +#: parser/parse_agg.c:1121 #, c-format msgid "" "aggregate functions are not allowed in a recursive query's recursive term" msgstr "" "в рекурсивной части рекурсивного запроса агрегатные функции недопустимы" -#: parser/parse_agg.c:1057 +#: parser/parse_agg.c:1314 #, c-format msgid "" "column \"%s.%s\" must appear in the GROUP BY clause or be used in an " @@ -12034,7 +12980,7 @@ msgstr "" "колонка \"%s.%s\" должна фигурировать в предложении GROUP BY или " "использоваться в агрегатной функции" -#: parser/parse_agg.c:1060 +#: parser/parse_agg.c:1317 #, c-format msgid "" "Direct arguments of an ordered-set aggregate must use only grouped columns." @@ -12042,20 +12988,29 @@ msgstr "" "Прямые аргументы сортирующей агрегатной функции могут включать только " "группируемые колонки." -#: parser/parse_agg.c:1065 +#: parser/parse_agg.c:1322 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "" "подзапрос использует негруппированную колонку \"%s.%s\" из внешнего запроса" -#: parser/parse_clause.c:636 +#: parser/parse_agg.c:1486 +#, c-format +msgid "" +"arguments to GROUPING must be grouping expressions of the associated query " +"level" +msgstr "" +"аргументами GROUPING должны быть выражения группирования для " +"соответствующего уровня запроса" + +#: parser/parse_clause.c:647 #, c-format msgid "multiple column definition lists are not allowed for the same function" msgstr "" "для одной и той же функции нельзя задать разные списки с определениями " "колонок" -#: parser/parse_clause.c:669 +#: parser/parse_clause.c:680 #, c-format msgid "" "ROWS FROM() with multiple functions cannot have a column definition list" @@ -12063,7 +13018,7 @@ msgstr "" "у ROWS FROM() с несколькими функциями не может быть списка с определениями " "колонок" -#: parser/parse_clause.c:670 +#: parser/parse_clause.c:681 #, c-format msgid "" "Put a separate column definition list for each function inside ROWS FROM()." @@ -12071,14 +13026,14 @@ msgstr "" "Добавьте отдельные списки с определениями колонок для каждой функции в ROWS " "FROM()." -#: parser/parse_clause.c:676 +#: parser/parse_clause.c:687 #, c-format msgid "UNNEST() with multiple arguments cannot have a column definition list" msgstr "" "у UNNEST() с несколькими аргументами не может быть списка с определениями " "колонок" -#: parser/parse_clause.c:677 +#: parser/parse_clause.c:688 #, c-format msgid "" "Use separate UNNEST() calls inside ROWS FROM(), and attach a column " @@ -12087,96 +13042,131 @@ msgstr "" "Напишите отдельные вызовы UNNEST() внутри ROWS FROM() и добавьте список с " "определениями колонок к каждому." -#: parser/parse_clause.c:684 +#: parser/parse_clause.c:695 +#, c-format +msgid "WITH ORDINALITY cannot be used with a column definition list" +msgstr "WITH ORDINALITY нельзя использовать со списком с определениями колонок" + +#: parser/parse_clause.c:696 +#, c-format +msgid "Put the column definition list inside ROWS FROM()." +msgstr "Поместите список с определениями колонок внутрь ROWS FROM()." + +#: parser/parse_clause.c:751 +#, c-format +msgid "tablesample method %s does not exist" +msgstr "метод %s для получения выборки не существует" + +#: parser/parse_clause.c:759 +#, c-format +msgid "function %s must return type \"tsm_handler\"" +msgstr "функция %s должна возвращать тип \"tsm_handler\"" + +#: parser/parse_clause.c:773 +#, c-format +msgid "tablesample method %s requires %d argument, not %d" +msgid_plural "tablesample method %s requires %d arguments, not %d" +msgstr[0] "метод %s для получения выборки требует аргументов: %d, получено: %d" +msgstr[1] "метод %s для получения выборки требует аргументов: %d, получено: %d" +msgstr[2] "метод %s для получения выборки требует аргументов: %d, получено: %d" + +#: parser/parse_clause.c:807 #, c-format -msgid "WITH ORDINALITY cannot be used with a column definition list" -msgstr "WITH ORDINALITY нельзя использовать со списком с определениями колонок" +msgid "tablesample method %s does not support REPEATABLE" +msgstr "метод %s для получения выборки не поддерживает REPEATABLE" -#: parser/parse_clause.c:685 +#: parser/parse_clause.c:938 #, c-format -msgid "Put the column definition list inside ROWS FROM()." -msgstr "Поместите список с определениями колонок внутрь ROWS FROM()." +msgid "TABLESAMPLE clause can only be applied to tables and materialized views" +msgstr "" +"предложение TABLESAMPLE можно применять только к таблицам и материализованным " +"представлениям" -#: parser/parse_clause.c:967 +#: parser/parse_clause.c:1108 #, c-format msgid "column name \"%s\" appears more than once in USING clause" msgstr "имя колонки \"%s\" фигурирует в предложении USING неоднократно" -#: parser/parse_clause.c:982 +#: parser/parse_clause.c:1123 #, c-format msgid "common column name \"%s\" appears more than once in left table" msgstr "имя общей колонки \"%s\" фигурирует в таблице слева неоднократно" -#: parser/parse_clause.c:991 +#: parser/parse_clause.c:1132 #, c-format msgid "column \"%s\" specified in USING clause does not exist in left table" msgstr "в таблице слева нет колонки \"%s\", указанной в предложении USING" -#: parser/parse_clause.c:1005 +#: parser/parse_clause.c:1146 #, c-format msgid "common column name \"%s\" appears more than once in right table" msgstr "имя общей колонки \"%s\" фигурирует в таблице справа неоднократно" -#: parser/parse_clause.c:1014 +#: parser/parse_clause.c:1155 #, c-format msgid "column \"%s\" specified in USING clause does not exist in right table" msgstr "в таблице справа нет колонки \"%s\", указанной в предложении USING" -#: parser/parse_clause.c:1068 +#: parser/parse_clause.c:1209 #, c-format msgid "column alias list for \"%s\" has too many entries" msgstr "слишком много записей в списке псевдонимов колонки \"%s\"" #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_clause.c:1377 +#: parser/parse_clause.c:1518 #, c-format msgid "argument of %s must not contain variables" msgstr "аргумент %s не может содержать переменные" #. translator: first %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1542 +#: parser/parse_clause.c:1683 #, c-format msgid "%s \"%s\" is ambiguous" msgstr "выражение %s \"%s\" неоднозначно" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1571 +#: parser/parse_clause.c:1712 #, c-format msgid "non-integer constant in %s" msgstr "не целочисленная константа в %s" #. translator: %s is name of a SQL construct, eg ORDER BY -#: parser/parse_clause.c:1593 +#: parser/parse_clause.c:1734 #, c-format msgid "%s position %d is not in select list" msgstr "в списке выборки %s нет элемента %d" -#: parser/parse_clause.c:1815 +#: parser/parse_clause.c:2176 +#, c-format +msgid "CUBE is limited to 12 elements" +msgstr "CUBE имеет ограничение в 12 элементов" + +#: parser/parse_clause.c:2382 #, c-format msgid "window \"%s\" is already defined" msgstr "окно \"%s\" уже определено" -#: parser/parse_clause.c:1876 +#: parser/parse_clause.c:2444 #, c-format msgid "cannot override PARTITION BY clause of window \"%s\"" msgstr "переопределить предложение PARTITION BY для окна \"%s\" нельзя" -#: parser/parse_clause.c:1888 +#: parser/parse_clause.c:2456 #, c-format msgid "cannot override ORDER BY clause of window \"%s\"" msgstr "переопределить предложение ORDER BY для окна \"%s\" нельзя" -#: parser/parse_clause.c:1918 parser/parse_clause.c:1924 +#: parser/parse_clause.c:2486 parser/parse_clause.c:2492 #, c-format msgid "cannot copy window \"%s\" because it has a frame clause" msgstr "скопировать окно \"%s\", имеющее предложение рамки, нельзя" -#: parser/parse_clause.c:1926 +#: parser/parse_clause.c:2494 #, c-format msgid "Omit the parentheses in this OVER clause." msgstr "Уберите скобки в предложении OVER." -#: parser/parse_clause.c:1992 +#: parser/parse_clause.c:2560 #, c-format msgid "" "in an aggregate with DISTINCT, ORDER BY expressions must appear in argument " @@ -12185,35 +13175,68 @@ msgstr "" "для агрегатной функции с DISTINCT, выражения ORDER BY должны быть в списке " "аргументов" -#: parser/parse_clause.c:1993 +#: parser/parse_clause.c:2561 #, c-format msgid "for SELECT DISTINCT, ORDER BY expressions must appear in select list" msgstr "" "в конструкции SELECT DISTINCT выражения ORDER BY должны быть в списке выборки" -#: parser/parse_clause.c:2026 +#: parser/parse_clause.c:2594 #, c-format msgid "an aggregate with DISTINCT must have at least one argument" msgstr "агрегатной функции с DISTINCT нужен минимум один аргумент" -#: parser/parse_clause.c:2027 +#: parser/parse_clause.c:2595 #, c-format msgid "SELECT DISTINCT must have at least one column" msgstr "в SELECT DISTINCT нужна минимум одна колонка" -#: parser/parse_clause.c:2093 parser/parse_clause.c:2125 +#: parser/parse_clause.c:2661 parser/parse_clause.c:2693 #, c-format msgid "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" msgstr "" "выражения SELECT DISTINCT ON должны соответствовать начальным выражениям " "ORDER BY" -#: parser/parse_clause.c:2253 +#: parser/parse_clause.c:2772 +#, c-format +msgid "ASC/DESC is not allowed in ON CONFLICT clause" +msgstr "ASC/DESC нельзя использовать в ON CONFLICT" + +#: parser/parse_clause.c:2778 +#, c-format +msgid "NULLS FIRST/LAST is not allowed in ON CONFLICT clause" +msgstr "NULLS FIRST/LAST нельзя использовать в ON CONFLICT" + +#: parser/parse_clause.c:2858 +#, c-format +msgid "" +"ON CONFLICT DO UPDATE requires inference specification or constraint name" +msgstr "" +"в ON CONFLICT DO UPDATE требуется наводящее указание или имя ограничения" + +#: parser/parse_clause.c:2859 +#, c-format +msgid "For example, ON CONFLICT ()." +msgstr "Например: ON CONFLICT ()." + +#: parser/parse_clause.c:2870 +#, c-format +msgid "ON CONFLICT not supported with system catalog tables" +msgstr "ON CONFLICT с таблицами системного каталога не поддерживается" + +#: parser/parse_clause.c:2878 +#, c-format +msgid "ON CONFLICT not supported on table \"%s\" used as a catalog table" +msgstr "" +"ON CONFLICT не поддерживается для таблицы \"%s\", служащей таблицей каталога" + +#: parser/parse_clause.c:3010 #, c-format msgid "operator %s is not a valid ordering operator" msgstr "оператор %s не годится для сортировки" -#: parser/parse_clause.c:2255 +#: parser/parse_clause.c:3012 #, c-format msgid "" "Ordering operators must be \"<\" or \">\" members of btree operator families." @@ -12223,10 +13246,10 @@ msgstr "" #: parser/parse_coerce.c:933 parser/parse_coerce.c:963 #: parser/parse_coerce.c:981 parser/parse_coerce.c:996 -#: parser/parse_expr.c:1773 parser/parse_expr.c:2247 parser/parse_target.c:854 +#: parser/parse_expr.c:2014 parser/parse_expr.c:2527 parser/parse_target.c:874 #, c-format msgid "cannot cast type %s to %s" -msgstr "преобразовать тип %s в %s нельзя" +msgstr "привести тип %s к %s нельзя" #: parser/parse_coerce.c:966 #, c-format @@ -12236,7 +13259,7 @@ msgstr "Во входных данных недостаточно колонок #: parser/parse_coerce.c:984 #, c-format msgid "Cannot cast type %s to %s in column %d." -msgstr "Не удалось преобразовать тип %s в %s в колонке %d." +msgstr "Не удалось привести тип %s к %s в колонке %d." #: parser/parse_coerce.c:999 #, c-format @@ -12347,13 +13370,13 @@ msgid "could not find range type for data type %s" msgstr "тип диапазона для типа данных %s не найден" #: parser/parse_collate.c:228 parser/parse_collate.c:475 -#: parser/parse_collate.c:984 +#: parser/parse_collate.c:986 #, c-format msgid "collation mismatch between implicit collations \"%s\" and \"%s\"" msgstr "несовпадение правил сортировки для неявных правил \"%s\" и \"%s\"" #: parser/parse_collate.c:231 parser/parse_collate.c:478 -#: parser/parse_collate.c:987 +#: parser/parse_collate.c:989 #, c-format msgid "" "You can choose the collation by applying the COLLATE clause to one or both " @@ -12362,7 +13385,7 @@ msgstr "" "Правило сортировки можно выбрать явно, применив предложение COLLATE к одному " "или обоим выражениям." -#: parser/parse_collate.c:832 +#: parser/parse_collate.c:834 #, c-format msgid "collation mismatch between explicit collations \"%s\" and \"%s\"" msgstr "явно указанные правила сортировки \"%s\" и \"%s\" несовместимы" @@ -12493,39 +13516,40 @@ msgstr "FOR UPDATE/SHARE в рекурсивном запросе не подд msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "рекурсивная ссылка на запрос \"%s\" указана неоднократно" -#: parser/parse_expr.c:389 parser/parse_relation.c:2875 +#: parser/parse_expr.c:387 parser/parse_relation.c:3077 +#: parser/parse_relation.c:3097 #, c-format msgid "column %s.%s does not exist" msgstr "колонка %s.%s не существует" -#: parser/parse_expr.c:401 +#: parser/parse_expr.c:399 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "колонка \"%s\" не найдена в типе данных %s" -#: parser/parse_expr.c:407 +#: parser/parse_expr.c:405 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "не удалось идентифицировать колонку \"%s\" в типе записи" -#: parser/parse_expr.c:413 +#: parser/parse_expr.c:411 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "" "запись имени колонки .%s применена к типу %s, который не является составным" -#: parser/parse_expr.c:443 parser/parse_target.c:640 +#: parser/parse_expr.c:441 parser/parse_target.c:660 #, c-format msgid "row expansion via \"*\" is not supported here" msgstr "расширение строки через \"*\" здесь не поддерживается" -#: parser/parse_expr.c:766 parser/parse_relation.c:561 -#: parser/parse_relation.c:652 parser/parse_target.c:1089 +#: parser/parse_expr.c:767 parser/parse_relation.c:666 +#: parser/parse_relation.c:763 parser/parse_target.c:1109 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "неоднозначная ссылка на колонку \"%s\"" -#: parser/parse_expr.c:822 parser/parse_param.c:110 parser/parse_param.c:142 +#: parser/parse_expr.c:823 parser/parse_param.c:110 parser/parse_param.c:142 #: parser/parse_param.c:199 parser/parse_param.c:298 #, c-format msgid "there is no parameter $%d" @@ -12536,188 +13560,194 @@ msgstr "параметр $%d не существует" msgid "NULLIF requires = operator to yield boolean" msgstr "для NULLIF требуется, чтобы оператор = возвращал логическое значение" -#: parser/parse_expr.c:1469 +#: parser/parse_expr.c:1468 gram.y:9760 +#, c-format +msgid "number of columns does not match number of values" +msgstr "число колонок не равно числу значений" + +#: parser/parse_expr.c:1696 msgid "cannot use subquery in check constraint" msgstr "в ограничении-проверке нельзя использовать подзапросы" -#: parser/parse_expr.c:1473 +#: parser/parse_expr.c:1700 msgid "cannot use subquery in DEFAULT expression" msgstr "в выражении DEFAULT нельзя использовать подзапросы" -#: parser/parse_expr.c:1476 +#: parser/parse_expr.c:1703 msgid "cannot use subquery in index expression" msgstr "в индексном выражении нельзя использовать подзапросы" -#: parser/parse_expr.c:1479 +#: parser/parse_expr.c:1706 msgid "cannot use subquery in index predicate" msgstr "в предикате индекса нельзя использовать подзапросы" -#: parser/parse_expr.c:1482 +#: parser/parse_expr.c:1709 msgid "cannot use subquery in transform expression" msgstr "нельзя использовать подзапрос в выражении преобразования" -#: parser/parse_expr.c:1485 +#: parser/parse_expr.c:1712 msgid "cannot use subquery in EXECUTE parameter" msgstr "в качестве параметра EXECUTE нельзя использовать подзапрос" -#: parser/parse_expr.c:1488 +#: parser/parse_expr.c:1715 msgid "cannot use subquery in trigger WHEN condition" msgstr "в условии WHEN для триггера нельзя использовать подзапросы" -#: parser/parse_expr.c:1545 -#, c-format -msgid "subquery must return a column" -msgstr "подзапрос должен вернуть колонку" - -#: parser/parse_expr.c:1552 +#: parser/parse_expr.c:1769 #, c-format msgid "subquery must return only one column" msgstr "подзапрос должен вернуть только одну колонку" -#: parser/parse_expr.c:1612 +#: parser/parse_expr.c:1853 #, c-format msgid "subquery has too many columns" msgstr "в подзапросе слишком много колонок" -#: parser/parse_expr.c:1617 +#: parser/parse_expr.c:1858 #, c-format msgid "subquery has too few columns" msgstr "в подзапросе недостаточно колонок" -#: parser/parse_expr.c:1713 +#: parser/parse_expr.c:1954 #, c-format msgid "cannot determine type of empty array" msgstr "тип пустого массива определить нельзя" -#: parser/parse_expr.c:1714 +#: parser/parse_expr.c:1955 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "" "Приведите его к желаемому типу явным образом, например ARRAY[]::integer[]." -#: parser/parse_expr.c:1728 +#: parser/parse_expr.c:1969 #, c-format msgid "could not find element type for data type %s" msgstr "не удалось определить тип элемента для типа данных %s" -#: parser/parse_expr.c:1954 +#: parser/parse_expr.c:2192 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "вместо значения XML-атрибута без имени должна указываться колонка" -#: parser/parse_expr.c:1955 +#: parser/parse_expr.c:2193 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "вместо значения XML-элемента без имени должна указывается колонка" -#: parser/parse_expr.c:1970 +#: parser/parse_expr.c:2208 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "имя XML-атрибута \"%s\" указано неоднократно" -#: parser/parse_expr.c:2077 +#: parser/parse_expr.c:2315 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "привести результат XMLSERIALIZE к типу %s нельзя" -#: parser/parse_expr.c:2320 parser/parse_expr.c:2520 +#: parser/parse_expr.c:2600 parser/parse_expr.c:2796 #, c-format msgid "unequal number of entries in row expressions" msgstr "разное число элементов в строках" -#: parser/parse_expr.c:2330 +#: parser/parse_expr.c:2610 #, c-format msgid "cannot compare rows of zero length" msgstr "строки нулевой длины сравнивать нельзя" -#: parser/parse_expr.c:2355 +#: parser/parse_expr.c:2635 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "" "оператор сравнения строк должен выдавать результат логического типа, а не %s" -#: parser/parse_expr.c:2362 +#: parser/parse_expr.c:2642 #, c-format msgid "row comparison operator must not return a set" msgstr "оператор сравнения строк не должен возвращать множество" -#: parser/parse_expr.c:2421 parser/parse_expr.c:2466 +#: parser/parse_expr.c:2701 parser/parse_expr.c:2742 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "не удалось выбрать интерпретацию оператора сравнения строк %s" -#: parser/parse_expr.c:2423 +#: parser/parse_expr.c:2703 #, c-format msgid "" "Row comparison operators must be associated with btree operator families." msgstr "" "Операторы сравнения строк должны быть связаны с семейством операторов btree." -#: parser/parse_expr.c:2468 +#: parser/parse_expr.c:2744 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Оказалось несколько равноценных кандидатур." -#: parser/parse_expr.c:2560 +#: parser/parse_expr.c:2836 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "" "для IS DISTINCT FROM требуется, чтобы оператор = возвращал логическое " "значение" -#: parser/parse_func.c:173 +#: parser/parse_expr.c:3126 parser/parse_expr.c:3144 +#, c-format +msgid "operator precedence change: %s is now lower precedence than %s" +msgstr "" +"приоритет операторов изменён: %s теперь имеет меньший приоритет, чем %s" + +#: parser/parse_func.c:174 #, c-format msgid "argument name \"%s\" used more than once" msgstr "имя аргумента \"%s\" используется неоднократно" -#: parser/parse_func.c:184 +#: parser/parse_func.c:185 #, c-format msgid "positional argument cannot follow named argument" msgstr "нумерованный аргумент не может следовать за именованным аргументом" -#: parser/parse_func.c:263 +#: parser/parse_func.c:270 #, c-format msgid "%s(*) specified, but %s is not an aggregate function" msgstr "выражение %s(*) недопустимо, так как %s - не агрегатная функция" -#: parser/parse_func.c:270 +#: parser/parse_func.c:277 #, c-format msgid "DISTINCT specified, but %s is not an aggregate function" msgstr "в аргументах %s указан DISTINCT, но это не агрегатная функция" -#: parser/parse_func.c:276 +#: parser/parse_func.c:283 #, c-format msgid "WITHIN GROUP specified, but %s is not an aggregate function" msgstr "в аргументах %s указано WITHIN GROUP, но это не агрегатная функция" -#: parser/parse_func.c:282 +#: parser/parse_func.c:289 #, c-format msgid "ORDER BY specified, but %s is not an aggregate function" msgstr "в аргументах %s указан ORDER BY, но это не агрегатная функция" -#: parser/parse_func.c:288 +#: parser/parse_func.c:295 #, c-format msgid "FILTER specified, but %s is not an aggregate function" msgstr "в аргументах %s указан FILTER, но это не агрегатная функция" -#: parser/parse_func.c:294 +#: parser/parse_func.c:301 #, c-format msgid "" "OVER specified, but %s is not a window function nor an aggregate function" msgstr "" "вызов %s включает предложение OVER, но это не оконная и не агрегатная функция" -#: parser/parse_func.c:324 +#: parser/parse_func.c:331 #, c-format msgid "WITHIN GROUP is required for ordered-set aggregate %s" msgstr "для сортирующего агрегата %s требуется WITHIN GROUP" -#: parser/parse_func.c:330 +#: parser/parse_func.c:337 #, c-format msgid "OVER is not supported for ordered-set aggregate %s" msgstr "сортирующий агрегат %s не поддерживает OVER" -#: parser/parse_func.c:361 parser/parse_func.c:390 +#: parser/parse_func.c:368 parser/parse_func.c:397 #, c-format msgid "" "There is an ordered-set aggregate %s, but it requires %d direct arguments, " @@ -12726,7 +13756,7 @@ msgstr "" "Есть сортирующий агрегат %s, но прямых аргументов у него должно быть %d, а " "не %d." -#: parser/parse_func.c:415 +#: parser/parse_func.c:422 #, c-format msgid "" "To use the hypothetical-set aggregate %s, the number of hypothetical direct " @@ -12736,7 +13766,7 @@ msgstr "" "гипотетических аргументов (%d) должно равняться числу сортируемых колонок " "(здесь: %d)." -#: parser/parse_func.c:429 +#: parser/parse_func.c:436 #, c-format msgid "" "There is an ordered-set aggregate %s, but it requires at least %d direct " @@ -12745,36 +13775,36 @@ msgstr "" "Есть сортирующий агрегат %s, но он требует минимум %d непосредственных " "аргументов." -#: parser/parse_func.c:448 +#: parser/parse_func.c:455 #, c-format msgid "%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP" msgstr "%s - не сортирующая агрегатная функция, WITHIN GROUP к ней неприменимо" -#: parser/parse_func.c:461 +#: parser/parse_func.c:468 #, c-format msgid "window function %s requires an OVER clause" msgstr "для оконной функции %s требуется предложение OVER" -#: parser/parse_func.c:468 +#: parser/parse_func.c:475 #, c-format msgid "window function %s cannot have WITHIN GROUP" msgstr "для оконной функции %s неприменимо WITHIN GROUP" -#: parser/parse_func.c:489 +#: parser/parse_func.c:496 #, c-format msgid "function %s is not unique" msgstr "функция %s не уникальна" -#: parser/parse_func.c:492 +#: parser/parse_func.c:499 #, c-format msgid "" "Could not choose a best candidate function. You might need to add explicit " "type casts." msgstr "" "Не удалось выбрать лучшую кандидатуру функции. Возможно, вам следует " -"добавить явные преобразования типов." +"добавить явные приведения типов." -#: parser/parse_func.c:503 +#: parser/parse_func.c:510 #, c-format msgid "" "No aggregate function matches the given name and argument types. Perhaps you " @@ -12785,66 +13815,66 @@ msgstr "" "Возможно, неверно расположено предложение ORDER BY - оно должно следовать за " "всеми обычными аргументами функции." -#: parser/parse_func.c:514 +#: parser/parse_func.c:521 #, c-format msgid "" "No function matches the given name and argument types. You might need to add " "explicit type casts." msgstr "" "Функция с данными именем и типами аргументов не найдена. Возможно, вам " -"следует добавить явные преобразования типов." +"следует добавить явные приведения типов." -#: parser/parse_func.c:616 +#: parser/parse_func.c:623 #, c-format msgid "VARIADIC argument must be an array" msgstr "параметр VARIADIC должен быть массивом" -#: parser/parse_func.c:661 parser/parse_func.c:725 +#: parser/parse_func.c:668 parser/parse_func.c:732 #, c-format msgid "%s(*) must be used to call a parameterless aggregate function" msgstr "агрегатная функция без параметров должна вызываться так: %s(*)" -#: parser/parse_func.c:668 +#: parser/parse_func.c:675 #, c-format msgid "aggregates cannot return sets" msgstr "агрегатные функции не могут возвращать множества" -#: parser/parse_func.c:683 +#: parser/parse_func.c:690 #, c-format msgid "aggregates cannot use named arguments" msgstr "у агрегатных функций не может быть именованных аргументов" -#: parser/parse_func.c:715 +#: parser/parse_func.c:722 #, c-format msgid "DISTINCT is not implemented for window functions" msgstr "предложение DISTINCT для оконных функций не реализовано" -#: parser/parse_func.c:735 +#: parser/parse_func.c:742 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "агрегатное предложение ORDER BY для оконных функций не реализовано" -#: parser/parse_func.c:744 +#: parser/parse_func.c:751 #, c-format msgid "FILTER is not implemented for non-aggregate window functions" msgstr "предложение FILTER для не агрегатных оконных функций не реализовано" -#: parser/parse_func.c:750 +#: parser/parse_func.c:757 #, c-format msgid "window functions cannot return sets" msgstr "оконные функции не могут возвращать множества" -#: parser/parse_func.c:1994 +#: parser/parse_func.c:2007 #, c-format msgid "aggregate %s(*) does not exist" msgstr "агрегатная функция %s(*) не существует" -#: parser/parse_func.c:1999 +#: parser/parse_func.c:2012 #, c-format msgid "aggregate %s does not exist" msgstr "агрегатная функция %s не существует" -#: parser/parse_func.c:2018 +#: parser/parse_func.c:2031 #, c-format msgid "function %s is not an aggregate" msgstr "функция \"%s\" не является агрегатной" @@ -12870,70 +13900,71 @@ msgid "array assignment requires type %s but expression is of type %s" msgstr "" "для присваивания массива требуется тип %s, однако выражение имеет тип %s" -#: parser/parse_oper.c:124 parser/parse_oper.c:718 utils/adt/regproc.c:547 -#: utils/adt/regproc.c:567 utils/adt/regproc.c:751 +#: parser/parse_oper.c:125 parser/parse_oper.c:722 utils/adt/regproc.c:583 +#: utils/adt/regproc.c:603 utils/adt/regproc.c:787 #, c-format msgid "operator does not exist: %s" msgstr "оператор не существует: %s" -#: parser/parse_oper.c:221 +#: parser/parse_oper.c:222 #, c-format msgid "Use an explicit ordering operator or modify the query." msgstr "Используйте явный оператор сортировки или измените запрос." -#: parser/parse_oper.c:225 utils/adt/arrayfuncs.c:3222 -#: utils/adt/arrayfuncs.c:3741 utils/adt/arrayfuncs.c:5294 +#: parser/parse_oper.c:226 utils/adt/array_userfuncs.c:782 +#: utils/adt/array_userfuncs.c:920 utils/adt/arrayfuncs.c:3613 +#: utils/adt/arrayfuncs.c:4051 utils/adt/arrayfuncs.c:6029 #: utils/adt/rowtypes.c:1159 #, c-format msgid "could not identify an equality operator for type %s" msgstr "не удалось найти оператор равенства для типа %s" -#: parser/parse_oper.c:476 +#: parser/parse_oper.c:478 #, c-format msgid "operator requires run-time type coercion: %s" msgstr "оператору требуется приведение типов во время выполнения: %s" -#: parser/parse_oper.c:710 +#: parser/parse_oper.c:714 #, c-format msgid "operator is not unique: %s" msgstr "оператор не уникален: %s" -#: parser/parse_oper.c:712 +#: parser/parse_oper.c:716 #, c-format msgid "" "Could not choose a best candidate operator. You might need to add explicit " "type casts." msgstr "" "Не удалось выбрать лучшую кандидатуру оператора. Возможно, вам следует " -"добавить явные преобразования типов." +"добавить явные приведения типов." -#: parser/parse_oper.c:720 +#: parser/parse_oper.c:724 #, c-format msgid "" "No operator matches the given name and argument type(s). You might need to " "add explicit type casts." msgstr "" "Оператор с данными именем и типами аргументов не найден. Возможно, вам " -"следует добавить явные преобразования типов." +"следует добавить явные приведения типов." -#: parser/parse_oper.c:779 parser/parse_oper.c:893 +#: parser/parse_oper.c:783 parser/parse_oper.c:897 #, c-format msgid "operator is only a shell: %s" msgstr "оператор \"%s\" - лишь оболочка" -#: parser/parse_oper.c:881 +#: parser/parse_oper.c:885 #, c-format msgid "op ANY/ALL (array) requires array on right side" msgstr "для операторов ANY/ALL (с массивом) требуется массив справа" -#: parser/parse_oper.c:923 +#: parser/parse_oper.c:927 #, c-format msgid "op ANY/ALL (array) requires operator to yield boolean" msgstr "" "для операторов ANY/ALL (с массивом) требуется, чтобы оператор = возвращал " "логическое значение" -#: parser/parse_oper.c:928 +#: parser/parse_oper.c:932 #, c-format msgid "op ANY/ALL (array) requires operator not to return a set" msgstr "" @@ -12945,27 +13976,27 @@ msgstr "" msgid "inconsistent types deduced for parameter $%d" msgstr "для параметра $%d выведены несогласованные типы" -#: parser/parse_relation.c:172 +#: parser/parse_relation.c:174 #, c-format msgid "table reference \"%s\" is ambiguous" msgstr "ссылка на таблицу \"%s\" неоднозначна" -#: parser/parse_relation.c:216 +#: parser/parse_relation.c:218 #, c-format msgid "table reference %u is ambiguous" msgstr "ссылка на таблицу %u неоднозначна" -#: parser/parse_relation.c:395 +#: parser/parse_relation.c:397 #, c-format msgid "table name \"%s\" specified more than once" msgstr "имя таблицы \"%s\" указано больше одного раза" -#: parser/parse_relation.c:422 parser/parse_relation.c:2839 +#: parser/parse_relation.c:424 parser/parse_relation.c:3017 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "в элементе предложения FROM неверная ссылка на таблицу \"%s\"" -#: parser/parse_relation.c:425 parser/parse_relation.c:2844 +#: parser/parse_relation.c:427 parser/parse_relation.c:3022 #, c-format msgid "" "There is an entry for table \"%s\", but it cannot be referenced from this " @@ -12974,23 +14005,23 @@ msgstr "" "Таблица \"%s\" присутствует в запросе, но сослаться на неё из этой части " "запроса нельзя." -#: parser/parse_relation.c:427 +#: parser/parse_relation.c:429 #, c-format msgid "The combining JOIN type must be INNER or LEFT for a LATERAL reference." msgstr "Для ссылки LATERAL тип JOIN должен быть INNER или LEFT." -#: parser/parse_relation.c:591 +#: parser/parse_relation.c:701 #, c-format msgid "system column \"%s\" reference in check constraint is invalid" msgstr "в ограничении-проверке указана недопустимая системная колонка \"%s\"" -#: parser/parse_relation.c:892 parser/parse_relation.c:1169 -#: parser/parse_relation.c:1663 +#: parser/parse_relation.c:1059 parser/parse_relation.c:1339 +#: parser/parse_relation.c:1841 #, c-format msgid "table \"%s\" has %d columns available but %d columns specified" msgstr "в таблице \"%s\" содержится колонок: %d, но указано: %d" -#: parser/parse_relation.c:979 +#: parser/parse_relation.c:1146 #, c-format msgid "" "There is a WITH item named \"%s\", but it cannot be referenced from this " @@ -12999,7 +14030,7 @@ msgstr "" "В WITH есть элемент \"%s\", но на него нельзя ссылаться из этой части " "запроса." -#: parser/parse_relation.c:981 +#: parser/parse_relation.c:1148 #, c-format msgid "" "Use WITH RECURSIVE, or re-order the WITH items to remove forward references." @@ -13007,7 +14038,7 @@ msgstr "" "Используйте WITH RECURSIVE или исключите ссылки вперёд, переупорядочив " "элементы WITH." -#: parser/parse_relation.c:1287 +#: parser/parse_relation.c:1459 #, c-format msgid "" "a column definition list is only allowed for functions returning \"record\"" @@ -13015,49 +14046,54 @@ msgstr "" "список с определением колонок может быть только у функций, возвращающих " "запись" -#: parser/parse_relation.c:1296 +#: parser/parse_relation.c:1468 #, c-format msgid "a column definition list is required for functions returning \"record\"" msgstr "" "у функций, возвращающих запись, должен быть список с определением колонок" -#: parser/parse_relation.c:1375 +#: parser/parse_relation.c:1547 #, c-format msgid "function \"%s\" in FROM has unsupported return type %s" msgstr "" "функция \"%s\", используемая во FROM, возвращает неподдерживаемый тип %s" -#: parser/parse_relation.c:1495 +#: parser/parse_relation.c:1669 #, c-format msgid "VALUES lists \"%s\" have %d columns available but %d columns specified" msgstr "в списках VALUES \"%s\" содержится колонок: %d, но указано: %d" -#: parser/parse_relation.c:1548 +#: parser/parse_relation.c:1724 #, c-format msgid "joins can have at most %d columns" msgstr "число колонок в соединениях ограничено %d" -#: parser/parse_relation.c:1636 +#: parser/parse_relation.c:1814 #, c-format msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "в запросе \"%s\" в WITH нет предложения RETURNING" -#: parser/parse_relation.c:2468 parser/parse_relation.c:2623 +#: parser/parse_relation.c:2646 parser/parse_relation.c:2801 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "колонка %d отношения \"%s\" не существует" -#: parser/parse_relation.c:2842 +#: parser/parse_relation.c:3020 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Возможно, предполагалась ссылка на псевдоним таблицы \"%s\"." -#: parser/parse_relation.c:2850 +#: parser/parse_relation.c:3028 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "таблица \"%s\" отсутствует в предложении FROM" -#: parser/parse_relation.c:2890 +#: parser/parse_relation.c:3080 +#, c-format +msgid "Perhaps you meant to reference the column \"%s\".\"%s\"." +msgstr "Возможно, предполагалась ссылка на колонку \"%s\".\"%s\"." + +#: parser/parse_relation.c:3082 #, c-format msgid "" "There is a column named \"%s\" in table \"%s\", but it cannot be referenced " @@ -13066,27 +14102,36 @@ msgstr "" "Колонка \"%s\" есть в таблице \"%s\", но на неё нельзя ссылаться из этой " "части запроса." -#: parser/parse_target.c:402 parser/parse_target.c:693 +#: parser/parse_relation.c:3099 +#, c-format +msgid "" +"Perhaps you meant to reference the column \"%s\".\"%s\" or the column \"%s\"." +"\"%s\"." +msgstr "" +"Возможно, предполагалась ссылка на колонку \"%s\".\"%s\" или колонку \"%s\"." +"\"%s\"." + +#: parser/parse_target.c:421 parser/parse_target.c:713 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "присвоить значение системной колонке \"%s\" нельзя" -#: parser/parse_target.c:430 +#: parser/parse_target.c:449 #, c-format msgid "cannot set an array element to DEFAULT" msgstr "элементу массива нельзя присвоить значение по умолчанию" -#: parser/parse_target.c:435 +#: parser/parse_target.c:454 #, c-format msgid "cannot set a subfield to DEFAULT" msgstr "вложенному полю нельзя присвоить значение по умолчанию" -#: parser/parse_target.c:504 +#: parser/parse_target.c:523 #, c-format msgid "column \"%s\" is of type %s but expression is of type %s" msgstr "колонка \"%s\" имеет тип %s, а выражение - %s" -#: parser/parse_target.c:677 +#: parser/parse_target.c:697 #, c-format msgid "" "cannot assign to field \"%s\" of column \"%s\" because its type %s is not a " @@ -13095,7 +14140,7 @@ msgstr "" "присвоить значение полю \"%s\" колонки \"%s\" нельзя, так как тип %s не " "является составным" -#: parser/parse_target.c:686 +#: parser/parse_target.c:706 #, c-format msgid "" "cannot assign to field \"%s\" of column \"%s\" because there is no such " @@ -13104,7 +14149,7 @@ msgstr "" "присвоить значение полю \"%s\" колонки \"%s\" нельзя, так как в типе данных " "%s нет такой колонки" -#: parser/parse_target.c:753 +#: parser/parse_target.c:773 #, c-format msgid "" "array assignment to \"%s\" requires type %s but expression is of type %s" @@ -13112,12 +14157,12 @@ msgstr "" "для присваивания массива полю \"%s\" требуется тип %s, однако выражение " "имеет тип %s" -#: parser/parse_target.c:763 +#: parser/parse_target.c:783 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "вложенное поле \"%s\" имеет тип %s, а выражение - %s" -#: parser/parse_target.c:1179 +#: parser/parse_target.c:1199 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "SELECT * должен ссылаться на таблицы" @@ -13137,138 +14182,153 @@ msgstr "неправильное указание %%TYPE (слишком мно msgid "type reference %s converted to %s" msgstr "ссылка на тип %s преобразована в тип %s" -#: parser/parse_type.c:257 parser/parse_type.c:805 utils/cache/typcache.c:198 +#: parser/parse_type.c:262 parser/parse_type.c:834 utils/cache/typcache.c:230 #, c-format msgid "type \"%s\" is only a shell" msgstr "тип \"%s\" - лишь пустышка" -#: parser/parse_type.c:342 +#: parser/parse_type.c:347 #, c-format msgid "type modifier is not allowed for type \"%s\"" msgstr "у типа \"%s\" не может быть модификаторов" -#: parser/parse_type.c:384 +#: parser/parse_type.c:389 #, c-format msgid "type modifiers must be simple constants or identifiers" msgstr "модификатором типа должна быть простая константа или идентификатор" -#: parser/parse_type.c:695 parser/parse_type.c:819 +#: parser/parse_type.c:700 parser/parse_type.c:799 #, c-format msgid "invalid type name \"%s\"" msgstr "неверное имя типа \"%s\"" -#: parser/parse_utilcmd.c:177 -#, c-format -msgid "relation \"%s\" already exists, skipping" -msgstr "отношение \"%s\" уже существует, пропускается" - -#: parser/parse_utilcmd.c:342 +#: parser/parse_utilcmd.c:358 #, c-format msgid "array of serial is not implemented" msgstr "массивы с типом serial не реализованы" -#: parser/parse_utilcmd.c:390 +#: parser/parse_utilcmd.c:406 #, c-format msgid "%s will create implicit sequence \"%s\" for serial column \"%s.%s\"" msgstr "%s создаст последовательность \"%s\" для колонки serial \"%s.%s\"" -#: parser/parse_utilcmd.c:484 parser/parse_utilcmd.c:496 +#: parser/parse_utilcmd.c:500 parser/parse_utilcmd.c:512 #, c-format msgid "" "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "конфликт NULL/NOT NULL в объявлении колонки \"%s\" таблицы \"%s\"" -#: parser/parse_utilcmd.c:508 +#: parser/parse_utilcmd.c:524 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "" "для колонки \"%s\" таблицы \"%s\" указано несколько значений по умолчанию" -#: parser/parse_utilcmd.c:675 +#: parser/parse_utilcmd.c:541 parser/parse_utilcmd.c:632 +#, c-format +msgid "primary key constraints are not supported on foreign tables" +msgstr "ограничения первичного ключа для сторонних таблиц не поддерживаются" + +#: parser/parse_utilcmd.c:550 parser/parse_utilcmd.c:642 +#, c-format +msgid "unique constraints are not supported on foreign tables" +msgstr "ограничения уникальности для сторонних таблиц не поддерживаются" + +#: parser/parse_utilcmd.c:567 parser/parse_utilcmd.c:666 +#, c-format +msgid "foreign key constraints are not supported on foreign tables" +msgstr "ограничения внешнего ключа для сторонних таблиц не поддерживаются" + +#: parser/parse_utilcmd.c:652 +#, c-format +msgid "exclusion constraints are not supported on foreign tables" +msgstr "ограничения-исключения для сторонних таблиц не поддерживаются" + +#: parser/parse_utilcmd.c:716 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE при создании сторонних таблиц не поддерживается" -#: parser/parse_utilcmd.c:1196 parser/parse_utilcmd.c:1272 +#: parser/parse_utilcmd.c:1239 parser/parse_utilcmd.c:1315 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "Индекс \"%s\" ссылается на тип всей строки таблицы." -#: parser/parse_utilcmd.c:1539 +#: parser/parse_utilcmd.c:1584 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "в CREATE TABLE нельзя использовать существующий индекс" -#: parser/parse_utilcmd.c:1559 +#: parser/parse_utilcmd.c:1604 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "индекс \"%s\" уже связан с ограничением" -#: parser/parse_utilcmd.c:1567 +#: parser/parse_utilcmd.c:1612 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "индекс \"%s\" не принадлежит таблице \"%s\"" -#: parser/parse_utilcmd.c:1574 +#: parser/parse_utilcmd.c:1619 #, c-format msgid "index \"%s\" is not valid" msgstr "индекс \"%s\" - нерабочий" -#: parser/parse_utilcmd.c:1580 +#: parser/parse_utilcmd.c:1625 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\" не является уникальным индексом" -#: parser/parse_utilcmd.c:1581 parser/parse_utilcmd.c:1588 -#: parser/parse_utilcmd.c:1595 parser/parse_utilcmd.c:1665 +#: parser/parse_utilcmd.c:1626 parser/parse_utilcmd.c:1633 +#: parser/parse_utilcmd.c:1640 parser/parse_utilcmd.c:1710 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "" "Создать первичный ключ или ограничение уникальности для такого индекса " "нельзя." -#: parser/parse_utilcmd.c:1587 +#: parser/parse_utilcmd.c:1632 #, c-format msgid "index \"%s\" contains expressions" msgstr "индекс \"%s\" содержит выражения" -#: parser/parse_utilcmd.c:1594 +#: parser/parse_utilcmd.c:1639 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" - частичный индекс" -#: parser/parse_utilcmd.c:1606 +#: parser/parse_utilcmd.c:1651 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" - откладываемый индекс" -#: parser/parse_utilcmd.c:1607 +#: parser/parse_utilcmd.c:1652 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "" "Создать не откладываемое ограничение на базе откладываемого индекса нельзя." -#: parser/parse_utilcmd.c:1664 +#: parser/parse_utilcmd.c:1709 #, c-format msgid "index \"%s\" does not have default sorting behavior" msgstr "для индекса \"%s\" не определено поведение при сортировке по умолчанию" -#: parser/parse_utilcmd.c:1809 +#: parser/parse_utilcmd.c:1856 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "колонка \"%s\" фигурирует в первичном ключе дважды" -#: parser/parse_utilcmd.c:1815 +#: parser/parse_utilcmd.c:1862 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "колонка \"%s\" фигурирует в ограничении уникальности дважды" -#: parser/parse_utilcmd.c:1981 +#: parser/parse_utilcmd.c:2032 #, c-format msgid "index expression cannot return a set" msgstr "индексное выражение не может возвращать множество" -#: parser/parse_utilcmd.c:1992 +#: parser/parse_utilcmd.c:2043 #, c-format msgid "" "index expressions and predicates can refer only to the table being indexed" @@ -13276,17 +14336,17 @@ msgstr "" "индексные выражения и предикаты могут ссылаться только на индексируемую " "таблицу" -#: parser/parse_utilcmd.c:2035 +#: parser/parse_utilcmd.c:2089 #, c-format msgid "rules on materialized views are not supported" msgstr "правила для материализованных представлений не поддерживаются" -#: parser/parse_utilcmd.c:2096 +#: parser/parse_utilcmd.c:2150 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "в условиях WHERE для правил нельзя ссылаться на другие отношения" -#: parser/parse_utilcmd.c:2168 +#: parser/parse_utilcmd.c:2222 #, c-format msgid "" "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE " @@ -13295,80 +14355,85 @@ msgstr "" "правила с условиями WHERE могут содержать только действия SELECT, INSERT, " "UPDATE или DELETE" -#: parser/parse_utilcmd.c:2186 parser/parse_utilcmd.c:2285 -#: rewrite/rewriteHandler.c:469 rewrite/rewriteManip.c:968 +#: parser/parse_utilcmd.c:2240 parser/parse_utilcmd.c:2339 +#: rewrite/rewriteHandler.c:478 rewrite/rewriteManip.c:1018 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "условные операторы UNION/INTERSECT/EXCEPT не реализованы" -#: parser/parse_utilcmd.c:2204 +#: parser/parse_utilcmd.c:2258 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "в правиле ON SELECT нельзя использовать OLD" -#: parser/parse_utilcmd.c:2208 +#: parser/parse_utilcmd.c:2262 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "в правиле ON SELECT нельзя использовать NEW" -#: parser/parse_utilcmd.c:2217 +#: parser/parse_utilcmd.c:2271 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "в правиле ON INSERT нельзя использовать OLD" -#: parser/parse_utilcmd.c:2223 +#: parser/parse_utilcmd.c:2277 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "в правиле ON DELETE нельзя использовать NEW" -#: parser/parse_utilcmd.c:2251 +#: parser/parse_utilcmd.c:2305 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "в запросе WITH нельзя ссылаться на OLD" -#: parser/parse_utilcmd.c:2258 +#: parser/parse_utilcmd.c:2312 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "в запросе WITH нельзя ссылаться на NEW" -#: parser/parse_utilcmd.c:2541 +#: parser/parse_utilcmd.c:2515 +#, c-format +msgid "transform expression must not return a set" +msgstr "выражение преобразования не должно возвращать множество" + +#: parser/parse_utilcmd.c:2629 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "предложение DEFERRABLE расположено неправильно" -#: parser/parse_utilcmd.c:2546 parser/parse_utilcmd.c:2561 +#: parser/parse_utilcmd.c:2634 parser/parse_utilcmd.c:2649 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "DEFERRABLE/NOT DEFERRABLE можно указать только один раз" -#: parser/parse_utilcmd.c:2556 +#: parser/parse_utilcmd.c:2644 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "предложение NOT DEFERRABLE расположено неправильно" -#: parser/parse_utilcmd.c:2569 parser/parse_utilcmd.c:2595 gram.y:4577 +#: parser/parse_utilcmd.c:2657 parser/parse_utilcmd.c:2683 gram.y:4840 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "" "ограничение с характеристикой INITIALLY DEFERRED должно быть объявлено как " "DEFERRABLE" -#: parser/parse_utilcmd.c:2577 +#: parser/parse_utilcmd.c:2665 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "предложение INITIALLY DEFERRED расположено неправильно" -#: parser/parse_utilcmd.c:2582 parser/parse_utilcmd.c:2608 +#: parser/parse_utilcmd.c:2670 parser/parse_utilcmd.c:2696 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "INITIALLY IMMEDIATE/DEFERRED можно указать только один раз" -#: parser/parse_utilcmd.c:2603 +#: parser/parse_utilcmd.c:2691 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "предложение INITIALLY IMMEDIATE расположено неправильно" -#: parser/parse_utilcmd.c:2794 +#: parser/parse_utilcmd.c:2882 #, c-format msgid "" "CREATE specifies a schema (%s) different from the one being created (%s)" @@ -13379,13 +14444,13 @@ msgstr "в CREATE указана схема (%s), отличная от созд msgid "identifier \"%s\" will be truncated to \"%s\"" msgstr "идентификатор \"%s\" будет усечён до \"%s\"" -#: port/pg_latch.c:336 port/unix_latch.c:336 +#: port/pg_latch.c:344 port/unix_latch.c:344 #, c-format msgid "poll() failed: %m" msgstr "ошибка в poll(): %m" -#: port/pg_latch.c:423 port/unix_latch.c:423 -#: replication/libpqwalreceiver/libpqwalreceiver.c:364 +#: port/pg_latch.c:440 port/unix_latch.c:440 +#: replication/libpqwalreceiver/libpqwalreceiver.c:374 #, c-format msgid "select() failed: %m" msgstr "ошибка в select(): %m" @@ -13534,7 +14599,7 @@ msgstr "" #: port/win32/crashdump.c:147 #, c-format msgid "could not open crash dump file \"%s\" for writing: error code %lu\n" -msgstr "не удалось открыть файл дампа \"%s\" для записи: код ошибки %lu\n" +msgstr "не удалось открыть файл дампа \"%s\" для записи (код ошибки: %lu)\n" #: port/win32/crashdump.c:154 #, c-format @@ -13544,66 +14609,67 @@ msgstr "аварийный дамп записан в файл\"%s\"\n" #: port/win32/crashdump.c:156 #, c-format msgid "could not write crash dump to file \"%s\": error code %lu\n" -msgstr "не удалось записать аварийный дамп в файл \"%s\": код ошибки %lu\n" +msgstr "не удалось записать аварийный дамп в файл \"%s\" (код ошибки: %lu)\n" #: port/win32/security.c:43 #, c-format msgid "could not open process token: error code %lu\n" -msgstr "не удалось открыть маркер процесса: код ошибки %lu\n" +msgstr "не удалось открыть маркер процесса (код ошибки: %lu)\n" #: port/win32/security.c:63 #, c-format msgid "could not get SID for Administrators group: error code %lu\n" -msgstr "не удалось получить SID группы Администраторы: код ошибки %lu\n" +msgstr "не удалось получить SID группы Администраторы (код ошибки: %lu)\n" #: port/win32/security.c:72 #, c-format msgid "could not get SID for PowerUsers group: error code %lu\n" -msgstr "не удалось получить SID группы Опытные пользователи: код ошибки %lu\n" +msgstr "" +"не удалось получить SID группы Опытные пользователи (код ошибки: %lu)\n" #: port/win32/signal.c:193 #, c-format msgid "could not create signal listener pipe for PID %d: error code %lu" msgstr "" -"не удалось создать канал приёма сигналов для процесса с PID %d: код ошибки " -"%lu" +"не удалось создать канал приёма сигналов для процесса с PID %d (код ошибки: " +"%lu)" #: port/win32/signal.c:273 port/win32/signal.c:305 #, c-format msgid "could not create signal listener pipe: error code %lu; retrying\n" msgstr "" -"не удалось создать канал приёма сигналов: код ошибки %lu; ещё одна " +"не удалось создать канал приёма сигналов (код ошибки: %lu); ещё одна " "попытка...\n" #: port/win32/signal.c:316 #, c-format msgid "could not create signal dispatch thread: error code %lu\n" -msgstr "не удалось создать поток распределения сигналов: код ошибки %lu\n" +msgstr "не удалось создать поток распределения сигналов (код ошибки: %lu)\n" #: port/win32_sema.c:94 #, c-format msgid "could not create semaphore: error code %lu" -msgstr "не удалось создать семафор: код ошибки %lu" +msgstr "не удалось создать семафор (код ошибки: %lu)" -#: port/win32_sema.c:165 +#: port/win32_sema.c:167 #, c-format msgid "could not lock semaphore: error code %lu" -msgstr "не удалось заблокировать семафор: код ошибки %lu" +msgstr "не удалось заблокировать семафор (код ошибки: %lu)" -#: port/win32_sema.c:178 +#: port/win32_sema.c:187 #, c-format msgid "could not unlock semaphore: error code %lu" -msgstr "не удалось разблокировать семафор: код ошибки %lu" +msgstr "не удалось разблокировать семафор (код ошибки: %lu)" -#: port/win32_sema.c:207 +#: port/win32_sema.c:216 #, c-format msgid "could not try-lock semaphore: error code %lu" -msgstr "не удалось попытаться заблокировать семафор: код ошибки %lu" +msgstr "не удалось попытаться заблокировать семафор (код ошибки: %lu)" #: port/win32_shmem.c:175 port/win32_shmem.c:210 port/win32_shmem.c:231 #, c-format msgid "could not create shared memory segment: error code %lu" -msgstr "не удалось создать сегмент разделяемой памяти: код ошибки %lu" +msgstr "не удалось создать сегмент разделяемой памяти (код ошибки: %lu)" #: port/win32_shmem.c:176 #, c-format @@ -13633,74 +14699,74 @@ msgstr "Ошибка в системном вызове DuplicateHandle." msgid "Failed system call was MapViewOfFileEx." msgstr "Ошибка в системном вызове MapViewOfFileEx." -#: postmaster/autovacuum.c:380 +#: postmaster/autovacuum.c:377 #, c-format msgid "could not fork autovacuum launcher process: %m" msgstr "породить процесс запуска автоочистки не удалось: %m" -#: postmaster/autovacuum.c:425 +#: postmaster/autovacuum.c:413 #, c-format msgid "autovacuum launcher started" msgstr "процесс запуска автоочистки создан" -#: postmaster/autovacuum.c:790 +#: postmaster/autovacuum.c:775 #, c-format msgid "autovacuum launcher shutting down" msgstr "процесс запуска автоочистки завершается" -#: postmaster/autovacuum.c:1453 +#: postmaster/autovacuum.c:1443 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "не удалось породить рабочий процесс автоочистки: %m" -#: postmaster/autovacuum.c:1672 +#: postmaster/autovacuum.c:1639 #, c-format msgid "autovacuum: processing database \"%s\"" msgstr "автоочистка: обработка базы данных \"%s\"" -#: postmaster/autovacuum.c:2076 +#: postmaster/autovacuum.c:2051 #, c-format msgid "autovacuum: dropping orphan temp table \"%s\".\"%s\" in database \"%s\"" msgstr "" "автоочистка: удаление устаревшей врем. таблицы \"%s\".\"%s\" в базе \"%s\"" -#: postmaster/autovacuum.c:2088 +#: postmaster/autovacuum.c:2063 #, c-format msgid "autovacuum: found orphan temp table \"%s\".\"%s\" in database \"%s\"" msgstr "" "автоочистка: найдена устаревшая врем. таблица \"%s\".\"%s\" в базе \"%s\"" -#: postmaster/autovacuum.c:2353 +#: postmaster/autovacuum.c:2346 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "автоматическая очистка таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2356 +#: postmaster/autovacuum.c:2349 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "автоматический анализ таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2889 +#: postmaster/autovacuum.c:2877 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "автоочистка не запущена из-за неправильной конфигурации" -#: postmaster/autovacuum.c:2890 +#: postmaster/autovacuum.c:2878 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Включите параметр \"track_counts\"." -#: postmaster/bgworker.c:323 postmaster/bgworker.c:732 +#: postmaster/bgworker.c:345 postmaster/bgworker.c:745 #, c-format msgid "registering background worker \"%s\"" msgstr "регистрация фонового процесса \"%s\"" -#: postmaster/bgworker.c:352 +#: postmaster/bgworker.c:374 #, c-format msgid "unregistering background worker \"%s\"" msgstr "разрегистрация фонового процесса \"%s\"" -#: postmaster/bgworker.c:454 +#: postmaster/bgworker.c:483 #, c-format msgid "" "background worker \"%s\": must attach to shared memory in order to request a " @@ -13709,7 +14775,7 @@ msgstr "" "фоновый процесс \"%s\" должен иметь доступ к общей памяти, чтобы запросить " "подключение к БД" -#: postmaster/bgworker.c:463 +#: postmaster/bgworker.c:492 #, c-format msgid "" "background worker \"%s\": cannot request database access if starting at " @@ -13718,24 +14784,24 @@ msgstr "" "фоновый процесс \"%s\" не может получить доступ к БД, если он запущен при " "старте главного процесса" -#: postmaster/bgworker.c:477 +#: postmaster/bgworker.c:506 #, c-format msgid "background worker \"%s\": invalid restart interval" msgstr "фоновый процесс \"%s\": неправильный интервал перезапуска" -#: postmaster/bgworker.c:522 +#: postmaster/bgworker.c:551 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "завершение фонового процесса \"%s\" по команде администратора" -#: postmaster/bgworker.c:739 +#: postmaster/bgworker.c:752 #, c-format msgid "" "background worker \"%s\": must be registered in shared_preload_libraries" msgstr "" "фоновой процесс \"%s\" должен быть зарегистрирован в shared_preload_libraries" -#: postmaster/bgworker.c:751 +#: postmaster/bgworker.c:764 #, c-format msgid "" "background worker \"%s\": only dynamic background workers can request " @@ -13744,12 +14810,12 @@ msgstr "" "фоновый процесс \"%s\": только динамические фоновые процессы могут " "запрашивать уведомление" -#: postmaster/bgworker.c:766 +#: postmaster/bgworker.c:779 #, c-format msgid "too many background workers" msgstr "слишком много фоновых процессов" -#: postmaster/bgworker.c:767 +#: postmaster/bgworker.c:780 #, c-format msgid "Up to %d background worker can be registered with the current settings." msgid_plural "" @@ -13761,13 +14827,13 @@ msgstr[1] "" msgstr[2] "" "Максимально возможное число фоновых процессов при текущих параметрах: %d." -#: postmaster/bgworker.c:771 +#: postmaster/bgworker.c:784 #, c-format msgid "" "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Возможно, стоит увеличить параметр \"max_worker_processes\"." -#: postmaster/checkpointer.c:481 +#: postmaster/checkpointer.c:470 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" @@ -13775,43 +14841,42 @@ msgstr[0] "контрольные точки происходят слишком msgstr[1] "контрольные точки происходят слишком часто (через %d сек.)" msgstr[2] "контрольные точки происходят слишком часто (через %d сек.)" -#: postmaster/checkpointer.c:485 +#: postmaster/checkpointer.c:474 #, c-format -msgid "" -"Consider increasing the configuration parameter \"checkpoint_segments\"." -msgstr "Возможно, стоит увеличить параметр \"checkpoint_segments\"." +msgid "Consider increasing the configuration parameter \"max_wal_size\"." +msgstr "Возможно, стоит увеличить параметр \"max_wal_size\"." -#: postmaster/checkpointer.c:630 +#: postmaster/checkpointer.c:621 #, c-format msgid "transaction log switch forced (archive_timeout=%d)" msgstr "принудительное переключение журнала транзакций (archive_timeout=%d)" -#: postmaster/checkpointer.c:1083 +#: postmaster/checkpointer.c:1081 #, c-format msgid "checkpoint request failed" msgstr "сбой при запросе контрольной точки" -#: postmaster/checkpointer.c:1084 +#: postmaster/checkpointer.c:1082 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Смотрите подробности в протоколе сервера." -#: postmaster/checkpointer.c:1280 +#: postmaster/checkpointer.c:1277 #, c-format msgid "compacted fsync request queue from %d entries to %d entries" msgstr "очередь запросов fsync сжата (было записей: %d, стало: %d)" -#: postmaster/pgarch.c:154 +#: postmaster/pgarch.c:149 #, c-format msgid "could not fork archiver: %m" msgstr "не удалось породить процесс архивации: %m" -#: postmaster/pgarch.c:481 +#: postmaster/pgarch.c:456 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "режим архивации включён, но команда архивации не задана" -#: postmaster/pgarch.c:509 +#: postmaster/pgarch.c:484 #, c-format msgid "" "archiving transaction log file \"%s\" failed too many times, will try again " @@ -13820,23 +14885,23 @@ msgstr "" "заархивировать файл журнала транзакций \"%s\" не удалось много раз подряд; " "следующая попытка будет сделана позже" -#: postmaster/pgarch.c:612 +#: postmaster/pgarch.c:587 #, c-format msgid "archive command failed with exit code %d" msgstr "команда архивации завершилась ошибкой с кодом %d" -#: postmaster/pgarch.c:614 postmaster/pgarch.c:624 postmaster/pgarch.c:631 -#: postmaster/pgarch.c:637 postmaster/pgarch.c:646 +#: postmaster/pgarch.c:589 postmaster/pgarch.c:599 postmaster/pgarch.c:606 +#: postmaster/pgarch.c:612 postmaster/pgarch.c:621 #, c-format msgid "The failed archive command was: %s" msgstr "Команда архивации с ошибкой: %s" -#: postmaster/pgarch.c:621 +#: postmaster/pgarch.c:596 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "команда архивации была прервана исключением 0x%X" -#: postmaster/pgarch.c:623 postmaster/postmaster.c:3335 +#: postmaster/pgarch.c:598 postmaster/postmaster.c:3370 #, c-format msgid "" "See C include file \"ntstatus.h\" for a description of the hexadecimal value." @@ -13844,101 +14909,101 @@ msgstr "" "Описание этого шестнадцатеричного значения ищите во включаемом C-файле " "\"ntstatus.h\"" -#: postmaster/pgarch.c:628 +#: postmaster/pgarch.c:603 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "команда архивации завершена по сигналу %d: %s" -#: postmaster/pgarch.c:635 +#: postmaster/pgarch.c:610 #, c-format msgid "archive command was terminated by signal %d" msgstr "команда архивации завершена по сигналу %d" -#: postmaster/pgarch.c:644 +#: postmaster/pgarch.c:619 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "команда архивации завершилась с неизвестным кодом состояния %d" -#: postmaster/pgarch.c:656 +#: postmaster/pgarch.c:631 #, c-format msgid "archived transaction log file \"%s\"" msgstr "файл архива журнала транзакций \"%s\"" -#: postmaster/pgarch.c:705 +#: postmaster/pgarch.c:680 #, c-format msgid "could not open archive status directory \"%s\": %m" msgstr "не удалось открыть каталог состояния архива \"%s\": %m" -#: postmaster/pgstat.c:354 +#: postmaster/pgstat.c:356 #, c-format msgid "could not resolve \"localhost\": %s" msgstr "не удалось разрешить \"localhost\": %s" -#: postmaster/pgstat.c:377 +#: postmaster/pgstat.c:379 #, c-format msgid "trying another address for the statistics collector" msgstr "проба другого адреса для сборщика статистики" -#: postmaster/pgstat.c:386 +#: postmaster/pgstat.c:388 #, c-format msgid "could not create socket for statistics collector: %m" msgstr "не удалось создать сокет для сборщика статистики: %m" -#: postmaster/pgstat.c:398 +#: postmaster/pgstat.c:400 #, c-format msgid "could not bind socket for statistics collector: %m" msgstr "не удалось привязаться к сокету для сборщика статистики: %m" -#: postmaster/pgstat.c:409 +#: postmaster/pgstat.c:411 #, c-format msgid "could not get address of socket for statistics collector: %m" msgstr "не удалось получить адрес сокета для сборщика статистики: %m" -#: postmaster/pgstat.c:425 +#: postmaster/pgstat.c:427 #, c-format msgid "could not connect socket for statistics collector: %m" msgstr "не удалось подключить сокет для сборщика статистики: %m" -#: postmaster/pgstat.c:446 +#: postmaster/pgstat.c:448 #, c-format msgid "could not send test message on socket for statistics collector: %m" msgstr "" "не удалось послать тестовое сообщение в сокет для сборщика статистики: %m" -#: postmaster/pgstat.c:472 +#: postmaster/pgstat.c:474 #, c-format msgid "select() failed in statistics collector: %m" msgstr "сбой select() в сборщике статистики: %m" -#: postmaster/pgstat.c:487 +#: postmaster/pgstat.c:489 #, c-format msgid "test message did not get through on socket for statistics collector" msgstr "тестовое сообщение не прошло через сокет для сборщика статистики" -#: postmaster/pgstat.c:502 +#: postmaster/pgstat.c:504 #, c-format msgid "could not receive test message on socket for statistics collector: %m" msgstr "" "тестовое сообщение через сокет для сборщика статистики получить не удалось: " "%m" -#: postmaster/pgstat.c:512 +#: postmaster/pgstat.c:514 #, c-format msgid "incorrect test message transmission on socket for statistics collector" msgstr "тестовое сообщение через сокет для сборщика статистики прошло неверно" -#: postmaster/pgstat.c:535 +#: postmaster/pgstat.c:537 #, c-format msgid "could not set statistics collector socket to nonblocking mode: %m" msgstr "" "не удалось переключить сокет сборщика статистики в неблокирующий режим: %m" -#: postmaster/pgstat.c:545 +#: postmaster/pgstat.c:547 #, c-format msgid "disabling statistics collector for lack of working socket" msgstr "сборщик статистики отключается из-за нехватки рабочего сокета" -#: postmaster/pgstat.c:692 +#: postmaster/pgstat.c:694 #, c-format msgid "could not fork statistics collector: %m" msgstr "не удалось породить процесс сборщика статистики: %m" @@ -13958,48 +15023,48 @@ msgstr "запрошен сброс неизвестного счётчика: \ msgid "Target must be \"archiver\" or \"bgwriter\"." msgstr "Допустимый счётчик: \"archiver\" или \"bgwriter\"." -#: postmaster/pgstat.c:3280 +#: postmaster/pgstat.c:3414 #, c-format msgid "could not read statistics message: %m" msgstr "не удалось прочитать сообщение статистики: %m" -#: postmaster/pgstat.c:3613 postmaster/pgstat.c:3790 +#: postmaster/pgstat.c:3745 postmaster/pgstat.c:3922 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "не удалось открыть временный файл статистики \"%s\": %m" -#: postmaster/pgstat.c:3681 postmaster/pgstat.c:3835 +#: postmaster/pgstat.c:3813 postmaster/pgstat.c:3967 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "не удалось записать во временный файл статистики \"%s\": %m" -#: postmaster/pgstat.c:3690 postmaster/pgstat.c:3844 +#: postmaster/pgstat.c:3822 postmaster/pgstat.c:3976 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "не удалось закрыть временный файл статистики \"%s\": %m" -#: postmaster/pgstat.c:3698 postmaster/pgstat.c:3852 +#: postmaster/pgstat.c:3830 postmaster/pgstat.c:3984 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "" "не удалось переименовать временный файл статистики из \"%s\" в \"%s\": %m" -#: postmaster/pgstat.c:3935 postmaster/pgstat.c:4120 postmaster/pgstat.c:4275 +#: postmaster/pgstat.c:4066 postmaster/pgstat.c:4249 postmaster/pgstat.c:4404 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "не удалось открыть файл статистики \"%s\": %m" -#: postmaster/pgstat.c:3947 postmaster/pgstat.c:3957 postmaster/pgstat.c:3967 -#: postmaster/pgstat.c:3988 postmaster/pgstat.c:4003 postmaster/pgstat.c:4061 -#: postmaster/pgstat.c:4132 postmaster/pgstat.c:4152 postmaster/pgstat.c:4170 -#: postmaster/pgstat.c:4186 postmaster/pgstat.c:4204 postmaster/pgstat.c:4220 -#: postmaster/pgstat.c:4287 postmaster/pgstat.c:4299 postmaster/pgstat.c:4311 -#: postmaster/pgstat.c:4336 postmaster/pgstat.c:4358 +#: postmaster/pgstat.c:4078 postmaster/pgstat.c:4088 postmaster/pgstat.c:4098 +#: postmaster/pgstat.c:4119 postmaster/pgstat.c:4134 postmaster/pgstat.c:4190 +#: postmaster/pgstat.c:4261 postmaster/pgstat.c:4281 postmaster/pgstat.c:4299 +#: postmaster/pgstat.c:4315 postmaster/pgstat.c:4333 postmaster/pgstat.c:4349 +#: postmaster/pgstat.c:4416 postmaster/pgstat.c:4428 postmaster/pgstat.c:4440 +#: postmaster/pgstat.c:4465 postmaster/pgstat.c:4487 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "файл статистики \"%s\" испорчен" -#: postmaster/pgstat.c:4475 +#: postmaster/pgstat.c:4604 #, c-format msgid "" "using stale statistics instead of current ones because stats collector is " @@ -14008,48 +15073,44 @@ msgstr "" "используется просроченная статистика вместо текущей, так как сборщик " "статистики не отвечает" -#: postmaster/pgstat.c:4787 +#: postmaster/pgstat.c:4922 #, c-format msgid "database hash table corrupted during cleanup --- abort" msgstr "таблица хэша базы данных испорчена при очистке --- прерывание" -#: postmaster/postmaster.c:654 +#: postmaster/postmaster.c:672 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: неверный аргумент для параметра -f: \"%s\"\n" -#: postmaster/postmaster.c:740 +#: postmaster/postmaster.c:758 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: неверный аргумент для параметра -t: \"%s\"\n" -#: postmaster/postmaster.c:791 +#: postmaster/postmaster.c:809 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: неверный аргумент: \"%s\"\n" -#: postmaster/postmaster.c:826 +#: postmaster/postmaster.c:844 #, c-format msgid "%s: superuser_reserved_connections must be less than max_connections\n" msgstr "" "%s: параметр superuser_reserved_connections должен быть меньше " "max_connections\n" -#: postmaster/postmaster.c:831 +#: postmaster/postmaster.c:849 #, c-format msgid "%s: max_wal_senders must be less than max_connections\n" msgstr "%s: параметр max_wal_senders должен быть меньше max_connections\n" -#: postmaster/postmaster.c:836 +#: postmaster/postmaster.c:854 #, c-format -msgid "" -"WAL archival (archive_mode=on) requires wal_level \"archive\", \"hot_standby" -"\", or \"logical\"" -msgstr "" -"Для архивации WAL (archive_mode=on) wal_level должен быть \"archive\", " -"\"hot_standby\" или \"logical\"" +msgid "WAL archival cannot be enabled when wal_level is \"minimal\"" +msgstr "Архивацию WAL нельзя включить, если установлен wal_level \"minimal\"" -#: postmaster/postmaster.c:839 +#: postmaster/postmaster.c:857 #, c-format msgid "" "WAL streaming (max_wal_senders > 0) requires wal_level \"archive\", " @@ -14058,88 +15119,88 @@ msgstr "" "Для потоковой трансляции WAL (max_wal_senders > 0) wal_level должен быть " "\"archive\", \"hot_standby\" или \"logical\"" -#: postmaster/postmaster.c:847 +#: postmaster/postmaster.c:865 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ошибка в таблицах маркеров времени, требуется исправление\n" -#: postmaster/postmaster.c:929 postmaster/postmaster.c:1027 -#: utils/init/miscinit.c:1188 +#: postmaster/postmaster.c:947 postmaster/postmaster.c:1045 +#: utils/init/miscinit.c:1310 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "неверный формат списка в параметре \"%s\"" -#: postmaster/postmaster.c:960 +#: postmaster/postmaster.c:978 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "не удалось создать принимающий сокет для \"%s\"" -#: postmaster/postmaster.c:966 +#: postmaster/postmaster.c:984 #, c-format msgid "could not create any TCP/IP sockets" msgstr "не удалось создать сокеты TCP/IP" -#: postmaster/postmaster.c:1049 +#: postmaster/postmaster.c:1067 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "не удалось создать доменный сокет в каталоге \"%s\"" -#: postmaster/postmaster.c:1055 +#: postmaster/postmaster.c:1073 #, c-format msgid "could not create any Unix-domain sockets" msgstr "ни один доменный сокет создать не удалось" -#: postmaster/postmaster.c:1067 +#: postmaster/postmaster.c:1085 #, c-format msgid "no socket created for listening" msgstr "отсутствуют принимающие сокеты" -#: postmaster/postmaster.c:1107 +#: postmaster/postmaster.c:1125 #, c-format msgid "could not create I/O completion port for child queue" msgstr "не удалось создать порт завершения ввода/вывода для очереди потомков" -#: postmaster/postmaster.c:1136 +#: postmaster/postmaster.c:1154 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: не удалось поменять права для внешнего файла PID \"%s\": %s\n" -#: postmaster/postmaster.c:1140 +#: postmaster/postmaster.c:1158 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: не удалось записать внешний файл PID \"%s\": %s\n" -#: postmaster/postmaster.c:1170 +#: postmaster/postmaster.c:1188 #, c-format msgid "ending log output to stderr" msgstr "завершение вывода в stderr" -#: postmaster/postmaster.c:1171 +#: postmaster/postmaster.c:1189 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "В дальнейшем протокол будет выводиться в \"%s\"." -#: postmaster/postmaster.c:1197 utils/init/postinit.c:199 +#: postmaster/postmaster.c:1215 utils/init/postinit.c:213 #, c-format msgid "could not load pg_hba.conf" msgstr "не удалось загрузить pg_hba.conf" -#: postmaster/postmaster.c:1223 +#: postmaster/postmaster.c:1241 #, c-format msgid "postmaster became multithreaded during startup" msgstr "процесс postmaster стал многопоточным при запуске" -#: postmaster/postmaster.c:1224 +#: postmaster/postmaster.c:1242 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Установите в переменной окружения LC_ALL правильную локаль." -#: postmaster/postmaster.c:1284 +#: postmaster/postmaster.c:1303 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: подходящий исполняемый файл postgres не найден" -#: postmaster/postmaster.c:1307 utils/misc/tzparser.c:341 +#: postmaster/postmaster.c:1326 utils/misc/tzparser.c:341 #, c-format msgid "" "This may indicate an incomplete PostgreSQL installation, or that the file " @@ -14148,43 +15209,43 @@ msgstr "" "Возможно, PostgreSQL установлен не полностью или файла \"%s\" нет в " "положенном месте." -#: postmaster/postmaster.c:1335 +#: postmaster/postmaster.c:1354 #, c-format msgid "data directory \"%s\" does not exist" msgstr "каталог данных \"%s\" не существует" -#: postmaster/postmaster.c:1340 +#: postmaster/postmaster.c:1359 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "не удалось считать права на каталог \"%s\": %m" -#: postmaster/postmaster.c:1348 +#: postmaster/postmaster.c:1367 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "указанный каталог данных \"%s\" не существует" -#: postmaster/postmaster.c:1364 +#: postmaster/postmaster.c:1383 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "владелец каталога данных \"%s\" определён неверно" -#: postmaster/postmaster.c:1366 +#: postmaster/postmaster.c:1385 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "" "Сервер должен запускать пользователь, являющийся владельцем каталога данных." -#: postmaster/postmaster.c:1386 +#: postmaster/postmaster.c:1405 #, c-format msgid "data directory \"%s\" has group or world access" msgstr "к каталогу данных \"%s\" имеют доступ все или группа" -#: postmaster/postmaster.c:1388 +#: postmaster/postmaster.c:1407 #, c-format msgid "Permissions should be u=rwx (0700)." msgstr "Права должны быть: u=rwx (0700)." -#: postmaster/postmaster.c:1399 +#: postmaster/postmaster.c:1418 #, c-format msgid "" "%s: could not find the database system\n" @@ -14195,422 +15256,423 @@ msgstr "" "Ожидалось найти её в каталоге \"%s\",\n" "но открыть файл \"%s\" не удалось: %s\n" -#: postmaster/postmaster.c:1573 +#: postmaster/postmaster.c:1594 #, c-format msgid "select() failed in postmaster: %m" msgstr "сбой select() в postmaster'е: %m" -#: postmaster/postmaster.c:1778 postmaster/postmaster.c:1809 +#: postmaster/postmaster.c:1792 postmaster/postmaster.c:1823 #, c-format msgid "incomplete startup packet" msgstr "неполный стартовый пакет" -#: postmaster/postmaster.c:1790 +#: postmaster/postmaster.c:1804 #, c-format msgid "invalid length of startup packet" msgstr "неверная длина стартового пакета" -#: postmaster/postmaster.c:1848 +#: postmaster/postmaster.c:1862 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "не удалось отправить ответ в процессе SSL-согласования: %m" -#: postmaster/postmaster.c:1877 +#: postmaster/postmaster.c:1891 #, 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:1940 +#: postmaster/postmaster.c:1954 #, c-format msgid "invalid value for parameter \"replication\"" msgstr "неверное значение параметра \"replication\"" -#: postmaster/postmaster.c:1941 +#: postmaster/postmaster.c:1955 #, c-format msgid "Valid values are: false, 0, true, 1, database." msgstr "Допустимые значения: false, 0, true, 1, database." -#: postmaster/postmaster.c:1961 +#: postmaster/postmaster.c:1975 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "" "неверная структура стартового пакета: последним байтом должен быть терминатор" -#: postmaster/postmaster.c:1989 +#: postmaster/postmaster.c:2003 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "в стартовом пакете не указано имя пользователя PostgreSQL" -#: postmaster/postmaster.c:2048 +#: postmaster/postmaster.c:2062 #, c-format msgid "the database system is starting up" msgstr "система баз данных запускается" -#: postmaster/postmaster.c:2053 +#: postmaster/postmaster.c:2067 #, c-format msgid "the database system is shutting down" msgstr "система баз данных останавливается" -#: postmaster/postmaster.c:2058 +#: postmaster/postmaster.c:2072 #, c-format msgid "the database system is in recovery mode" msgstr "система баз данных в режиме восстановления" -#: postmaster/postmaster.c:2063 storage/ipc/procarray.c:286 -#: storage/ipc/sinvaladt.c:305 storage/lmgr/proc.c:339 +#: postmaster/postmaster.c:2077 storage/ipc/procarray.c:284 +#: storage/ipc/sinvaladt.c:298 storage/lmgr/proc.c:334 #, c-format msgid "sorry, too many clients already" msgstr "извините, уже слишком много клиентов" -#: postmaster/postmaster.c:2125 +#: postmaster/postmaster.c:2139 #, c-format msgid "wrong key in cancel request for process %d" msgstr "неправильный ключ в запросе на отмену процесса %d" -#: postmaster/postmaster.c:2133 +#: postmaster/postmaster.c:2147 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "процесс с кодом %d, полученным в запросе на отмену, не найден" -#: postmaster/postmaster.c:2353 +#: postmaster/postmaster.c:2367 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "получен SIGHUP, файлы конфигурации перезагружаются" -#: postmaster/postmaster.c:2379 +#: postmaster/postmaster.c:2393 #, c-format msgid "pg_hba.conf not reloaded" msgstr "pg_hba.conf не перезагружен" -#: postmaster/postmaster.c:2383 +#: postmaster/postmaster.c:2397 #, c-format msgid "pg_ident.conf not reloaded" msgstr "pg_ident.conf не перезагружен" -#: postmaster/postmaster.c:2424 +#: postmaster/postmaster.c:2438 #, c-format msgid "received smart shutdown request" msgstr "получен запрос на \"вежливое\" выключение" -#: postmaster/postmaster.c:2477 +#: postmaster/postmaster.c:2491 #, c-format msgid "received fast shutdown request" msgstr "получен запрос на быстрое выключение" -#: postmaster/postmaster.c:2503 +#: postmaster/postmaster.c:2517 #, c-format msgid "aborting any active transactions" msgstr "прерывание всех активных транзакций" -#: postmaster/postmaster.c:2537 +#: postmaster/postmaster.c:2551 #, c-format msgid "received immediate shutdown request" msgstr "получен запрос на немедленное выключение" -#: postmaster/postmaster.c:2601 postmaster/postmaster.c:2622 +#: postmaster/postmaster.c:2612 +#, c-format +msgid "shutdown at recovery target" +msgstr "выключение при достижении цели восстановления" + +#: postmaster/postmaster.c:2628 postmaster/postmaster.c:2651 msgid "startup process" msgstr "стартовый процесс" -#: postmaster/postmaster.c:2604 +#: postmaster/postmaster.c:2631 #, c-format msgid "aborting startup due to startup process failure" msgstr "прерывание запуска из-за ошибки в стартовом процессе" -#: postmaster/postmaster.c:2662 +#: postmaster/postmaster.c:2692 #, c-format msgid "database system is ready to accept connections" msgstr "система БД готова принимать подключения" -#: postmaster/postmaster.c:2677 +#: postmaster/postmaster.c:2707 msgid "background writer process" msgstr "процесс фоновой записи" -#: postmaster/postmaster.c:2731 +#: postmaster/postmaster.c:2761 msgid "checkpointer process" msgstr "процесс контрольных точек" -#: postmaster/postmaster.c:2747 +#: postmaster/postmaster.c:2777 msgid "WAL writer process" msgstr "процесс записи WAL" -#: postmaster/postmaster.c:2761 +#: postmaster/postmaster.c:2791 msgid "WAL receiver process" msgstr "процесс считывания WAL" -#: postmaster/postmaster.c:2776 +#: postmaster/postmaster.c:2806 msgid "autovacuum launcher process" msgstr "процесс запуска автоочистки" -#: postmaster/postmaster.c:2791 +#: postmaster/postmaster.c:2821 msgid "archiver process" msgstr "процесс архивации" -#: postmaster/postmaster.c:2807 +#: postmaster/postmaster.c:2837 msgid "statistics collector process" msgstr "процесс сбора статистики" -#: postmaster/postmaster.c:2821 +#: postmaster/postmaster.c:2851 msgid "system logger process" msgstr "процесс системного протоколирования" -#: postmaster/postmaster.c:2883 +#: postmaster/postmaster.c:2913 msgid "worker process" msgstr "рабочий процесс" -#: postmaster/postmaster.c:2969 postmaster/postmaster.c:2989 -#: postmaster/postmaster.c:2996 postmaster/postmaster.c:3014 +#: postmaster/postmaster.c:3000 postmaster/postmaster.c:3020 +#: postmaster/postmaster.c:3027 postmaster/postmaster.c:3045 msgid "server process" msgstr "процесс сервера" -#: postmaster/postmaster.c:3068 +#: postmaster/postmaster.c:3099 #, 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:3323 +#: postmaster/postmaster.c:3358 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) завершился с кодом выхода %d" -#: postmaster/postmaster.c:3325 postmaster/postmaster.c:3336 -#: postmaster/postmaster.c:3347 postmaster/postmaster.c:3356 -#: postmaster/postmaster.c:3366 +#: postmaster/postmaster.c:3360 postmaster/postmaster.c:3371 +#: postmaster/postmaster.c:3382 postmaster/postmaster.c:3391 +#: postmaster/postmaster.c:3401 #, 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:3333 +#: postmaster/postmaster.c:3368 #, 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:3343 +#: postmaster/postmaster.c:3378 #, 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:3354 +#: postmaster/postmaster.c:3389 #, c-format msgid "%s (PID %d) was terminated by signal %d" msgstr "%s (PID %d) был завершён по сигналу %d" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3364 +#: postmaster/postmaster.c:3399 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) завершился с неизвестным кодом состояния %d" -#: postmaster/postmaster.c:3552 +#: postmaster/postmaster.c:3587 #, c-format msgid "abnormal database system shutdown" msgstr "аварийное выключение системы БД" -#: postmaster/postmaster.c:3591 +#: postmaster/postmaster.c:3627 #, c-format msgid "all server processes terminated; reinitializing" msgstr "все серверные процессы завершены... переинициализация" -#: postmaster/postmaster.c:3843 +#: postmaster/postmaster.c:3873 #, c-format msgid "could not fork new process for connection: %m" msgstr "породить новый процесс для соединения не удалось: %m" -#: postmaster/postmaster.c:3885 +#: postmaster/postmaster.c:3915 msgid "could not fork new process for connection: " msgstr "породить новый процесс для соединения не удалось: " -#: postmaster/postmaster.c:3992 +#: postmaster/postmaster.c:4021 #, c-format msgid "connection received: host=%s port=%s" msgstr "принято подключение: узел=%s порт=%s" -#: postmaster/postmaster.c:3997 +#: postmaster/postmaster.c:4026 #, c-format msgid "connection received: host=%s" msgstr "принято подключение: узел=%s" -#: postmaster/postmaster.c:4287 +#: postmaster/postmaster.c:4315 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "запустить серверный процесс \"%s\" не удалось: %m" -#: postmaster/postmaster.c:4782 -#, c-format -msgid "postmaster became multithreaded" -msgstr "процесс postmaster стал многопоточным" - -#: postmaster/postmaster.c:4848 +#: postmaster/postmaster.c:4872 #, c-format msgid "database system is ready to accept read only connections" msgstr "система БД готова к подключениям в режиме \"только чтение\"" -#: postmaster/postmaster.c:5161 +#: postmaster/postmaster.c:5182 #, c-format msgid "could not fork startup process: %m" msgstr "породить стартовый процесс не удалось: %m" -#: postmaster/postmaster.c:5165 +#: postmaster/postmaster.c:5186 #, c-format msgid "could not fork background writer process: %m" msgstr "породить процесс фоновой записи не удалось: %m" -#: postmaster/postmaster.c:5169 +#: postmaster/postmaster.c:5190 #, c-format msgid "could not fork checkpointer process: %m" msgstr "породить процесс контрольных точек не удалось: %m" -#: postmaster/postmaster.c:5173 +#: postmaster/postmaster.c:5194 #, c-format msgid "could not fork WAL writer process: %m" msgstr "породить процесс записи WAL не удалось: %m" -#: postmaster/postmaster.c:5177 +#: postmaster/postmaster.c:5198 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "породить процесс считывания WAL не удалось: %m" -#: postmaster/postmaster.c:5181 +#: postmaster/postmaster.c:5202 #, c-format msgid "could not fork process: %m" msgstr "породить процесс не удалось: %m" -#: postmaster/postmaster.c:5343 +#: postmaster/postmaster.c:5364 postmaster/postmaster.c:5387 #, c-format msgid "database connection requirement not indicated during registration" msgstr "" "при регистрации фонового процесса не указывалось, что ему требуется " "подключение к БД" -#: postmaster/postmaster.c:5350 +#: postmaster/postmaster.c:5371 postmaster/postmaster.c:5394 #, c-format msgid "invalid processing mode in background worker" msgstr "неправильный режим обработки в фоновом процессе" -#: postmaster/postmaster.c:5402 +#: postmaster/postmaster.c:5446 #, c-format msgid "starting background worker process \"%s\"" msgstr "запуск фонового рабочего процесса \"%s\"" -#: postmaster/postmaster.c:5413 +#: postmaster/postmaster.c:5457 #, c-format msgid "could not fork worker process: %m" msgstr "породить рабочий процесс не удалось: %m" -#: postmaster/postmaster.c:5802 +#: postmaster/postmaster.c:5845 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "" -"продублировать сокет %d для серверного процесса не удалось: код ошибки %d" +"продублировать сокет %d для серверного процесса не удалось (код ошибки: %d)" -#: postmaster/postmaster.c:5834 +#: postmaster/postmaster.c:5877 #, c-format msgid "could not create inherited socket: error code %d\n" -msgstr "создать наследуемый сокет не удалось: код ошибки %d\n" +msgstr "создать наследуемый сокет не удалось (код ошибки: %d)\n" -#: postmaster/postmaster.c:5863 +#: postmaster/postmaster.c:5906 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "открыть файл серверных переменных \"%s\" не удалось: %s\n" -#: postmaster/postmaster.c:5870 +#: postmaster/postmaster.c:5913 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "прочитать файл серверных переменных \"%s\" не удалось: %s\n" -#: postmaster/postmaster.c:5879 +#: postmaster/postmaster.c:5922 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "не удалось стереть файл \"%s\": %s\n" -#: postmaster/postmaster.c:5896 +#: postmaster/postmaster.c:5939 #, c-format msgid "could not map view of backend variables: error code %lu\n" -msgstr "отобразить файл серверных переменных не удалось: код ошибки %lu\n" +msgstr "отобразить файл серверных переменных не удалось (код ошибки: %lu)\n" -#: postmaster/postmaster.c:5905 +#: postmaster/postmaster.c:5948 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "" -"отключить отображение файла серверных переменных не удалось: код ошибки %lu\n" +"отключить отображение файла серверных переменных не удалось (код ошибки: " +"%lu)\n" -#: postmaster/postmaster.c:5912 +#: postmaster/postmaster.c:5955 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "" -"закрыть указатель файла серверных переменных не удалось: код ошибки %lu\n" +"закрыть указатель файла серверных переменных не удалось (код ошибки: %lu)\n" -#: postmaster/postmaster.c:6071 +#: postmaster/postmaster.c:6114 #, c-format msgid "could not read exit code for process\n" msgstr "прочитать код завершения процесса не удалось\n" -#: postmaster/postmaster.c:6076 +#: postmaster/postmaster.c:6119 #, c-format msgid "could not post child completion status\n" msgstr "отправить состояние завершения потомка не удалось\n" -#: postmaster/syslogger.c:463 postmaster/syslogger.c:1064 +#: postmaster/syslogger.c:441 postmaster/syslogger.c:1041 #, c-format msgid "could not read from logger pipe: %m" msgstr "не удалось прочитать из канала протоколирования: %m" -#: postmaster/syslogger.c:512 +#: postmaster/syslogger.c:490 #, c-format msgid "logger shutting down" msgstr "остановка протоколирования" -#: postmaster/syslogger.c:556 postmaster/syslogger.c:570 +#: postmaster/syslogger.c:534 postmaster/syslogger.c:548 #, c-format msgid "could not create pipe for syslog: %m" msgstr "не удалось создать канал для syslog: %m" -#: postmaster/syslogger.c:606 +#: postmaster/syslogger.c:584 #, c-format msgid "could not fork system logger: %m" msgstr "не удалось породить процесс системного протоколирования: %m" -#: postmaster/syslogger.c:643 +#: postmaster/syslogger.c:620 #, c-format msgid "redirecting log output to logging collector process" msgstr "передача вывода в протокол процессу сбора протоколов" -#: postmaster/syslogger.c:644 +#: postmaster/syslogger.c:621 #, c-format msgid "Future log output will appear in directory \"%s\"." msgstr "В дальнейшем протоколы будут выводиться в каталог \"%s\"." -#: postmaster/syslogger.c:652 +#: postmaster/syslogger.c:629 #, c-format msgid "could not redirect stdout: %m" msgstr "не удалось перенаправить stdout: %m" -#: postmaster/syslogger.c:657 postmaster/syslogger.c:674 +#: postmaster/syslogger.c:634 postmaster/syslogger.c:651 #, c-format msgid "could not redirect stderr: %m" msgstr "не удалось перенаправить stderr: %m " -#: postmaster/syslogger.c:1019 +#: postmaster/syslogger.c:996 #, c-format msgid "could not write to log file: %s\n" msgstr "не удалось записать в файл протокола: %s\n" -#: postmaster/syslogger.c:1159 +#: postmaster/syslogger.c:1136 #, c-format msgid "could not open log file \"%s\": %m" msgstr "не удалось открыть файл протокола \"%s\": %m" -#: postmaster/syslogger.c:1221 postmaster/syslogger.c:1265 +#: postmaster/syslogger.c:1198 postmaster/syslogger.c:1242 #, c-format msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "отключение автопрокрутки (чтобы включить, передайте SIGHUP)" @@ -14622,79 +15684,81 @@ msgstr "" "не удалось определить, какое правило сортировки использовать для регулярного " "выражения" -#: replication/basebackup.c:184 replication/basebackup.c:1068 -#: utils/adt/misc.c:353 -#, c-format -msgid "could not read symbolic link \"%s\": %m" -msgstr "не удалось прочитать символическую ссылку \"%s\": %m" - -#: replication/basebackup.c:191 replication/basebackup.c:1072 -#: utils/adt/misc.c:357 -#, c-format -msgid "symbolic link \"%s\" target is too long" -msgstr "целевой путь символической ссылки \"%s\" слишком длинный" - -#: replication/basebackup.c:284 +#: replication/basebackup.c:227 #, c-format msgid "could not stat control file \"%s\": %m" msgstr "не удалось найти управляющий файл \"%s\": %m" -#: replication/basebackup.c:396 +#: replication/basebackup.c:336 #, c-format msgid "could not find any WAL files" msgstr "не удалось найти ни одного файла WAL" -#: replication/basebackup.c:409 replication/basebackup.c:423 -#: replication/basebackup.c:432 +#: replication/basebackup.c:349 replication/basebackup.c:363 +#: replication/basebackup.c:372 #, c-format msgid "could not find WAL file \"%s\"" msgstr "не удалось найти файл WAL \"%s\"" -#: replication/basebackup.c:471 replication/basebackup.c:497 +#: replication/basebackup.c:411 replication/basebackup.c:437 #, c-format msgid "unexpected WAL file size \"%s\"" msgstr "неприемлемый размер файла WAL \"%s\"" -#: replication/basebackup.c:483 replication/basebackup.c:1210 +#: replication/basebackup.c:423 replication/basebackup.c:1177 #, c-format msgid "base backup could not send data, aborting backup" msgstr "" "в процессе базового резервного копирования не удалось передать данные, " "копирование прерывается" -#: replication/basebackup.c:584 replication/basebackup.c:593 -#: replication/basebackup.c:602 replication/basebackup.c:611 -#: replication/basebackup.c:620 replication/basebackup.c:631 +#: replication/basebackup.c:525 replication/basebackup.c:534 +#: replication/basebackup.c:543 replication/basebackup.c:552 +#: replication/basebackup.c:561 replication/basebackup.c:572 +#: replication/basebackup.c:589 #, c-format msgid "duplicate option \"%s\"" msgstr "повторяющийся параметр \"%s\"" -#: replication/basebackup.c:637 utils/misc/guc.c:5385 +#: replication/basebackup.c:578 utils/misc/guc.c:5503 #, c-format msgid "%d is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d вне диапазона, допустимого для параметра \"%s\" (%d .. %d)" -#: replication/basebackup.c:894 replication/basebackup.c:987 +#: replication/basebackup.c:844 replication/basebackup.c:946 #, c-format msgid "could not stat file or directory \"%s\": %m" msgstr "не удалось получить информацию о файле или каталоге \"%s\": %m" -#: replication/basebackup.c:1146 +#: replication/basebackup.c:1113 #, c-format msgid "skipping special file \"%s\"" msgstr "специальный файл \"%s\" пропускается" -#: replication/basebackup.c:1200 +#: replication/basebackup.c:1167 #, c-format msgid "archive member \"%s\" too large for tar format" msgstr "архивируемый файл \"%s\" слишком велик для формата tar" -#: replication/libpqwalreceiver/libpqwalreceiver.c:106 +#: replication/basebackup.c:1240 +#, c-format +msgid "file name too long for tar format: \"%s\"" +msgstr "слишком длинное имя файла для формата tar: \"%s\"" + +#: replication/basebackup.c:1245 +#, c-format +msgid "" +"symbolic link target too long for tar format: file name \"%s\", target \"%s\"" +msgstr "" +"цель символической ссылки слишком длинная для формата tar: имя файла \"%s\", " +"цель \"%s\"" + +#: replication/libpqwalreceiver/libpqwalreceiver.c:116 #, c-format msgid "could not connect to the primary server: %s" msgstr "не удалось подключиться к главному серверу: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:130 +#: replication/libpqwalreceiver/libpqwalreceiver.c:140 #, c-format msgid "" "could not receive database system identifier and timeline ID from the " @@ -14703,13 +15767,13 @@ msgstr "" "не удалось получить идентификатор СУБД и код линии времени с главного " "сервера: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:141 -#: replication/libpqwalreceiver/libpqwalreceiver.c:295 +#: replication/libpqwalreceiver/libpqwalreceiver.c:151 +#: replication/libpqwalreceiver/libpqwalreceiver.c:305 #, c-format msgid "invalid response from primary server" msgstr "неверный ответ главного сервера" -#: replication/libpqwalreceiver/libpqwalreceiver.c:142 +#: replication/libpqwalreceiver/libpqwalreceiver.c:152 #, c-format msgid "" "Could not identify system: got %d rows and %d fields, expected %d rows and " @@ -14718,95 +15782,95 @@ msgstr "" "Не удалось идентифицировать систему, получено строк: %d, полей: %d " "(ожидалось: %d и %d (или более))." -#: replication/libpqwalreceiver/libpqwalreceiver.c:158 +#: replication/libpqwalreceiver/libpqwalreceiver.c:168 #, c-format msgid "database system identifier differs between the primary and standby" msgstr "идентификаторы СУБД на главном и резервном серверах различаются" -#: replication/libpqwalreceiver/libpqwalreceiver.c:159 +#: replication/libpqwalreceiver/libpqwalreceiver.c:169 #, c-format msgid "The primary's identifier is %s, the standby's identifier is %s." msgstr "Идентификатор на главном сервере: %s, на резервном: %s." -#: replication/libpqwalreceiver/libpqwalreceiver.c:201 +#: replication/libpqwalreceiver/libpqwalreceiver.c:211 #, c-format msgid "could not start WAL streaming: %s" msgstr "не удалось начать трансляцию WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:219 +#: replication/libpqwalreceiver/libpqwalreceiver.c:229 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "не удалось отправить главному серверу сообщение о конце передачи: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:241 +#: replication/libpqwalreceiver/libpqwalreceiver.c:251 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "неожиданный набор данных после конца передачи" -#: replication/libpqwalreceiver/libpqwalreceiver.c:253 +#: replication/libpqwalreceiver/libpqwalreceiver.c:263 #, c-format msgid "error reading result of streaming command: %s" msgstr "ошибка при чтении результата команды передачи: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:261 +#: replication/libpqwalreceiver/libpqwalreceiver.c:271 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "неожиданный результат после CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:284 +#: replication/libpqwalreceiver/libpqwalreceiver.c:294 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "не удалось получить файл истории линии времени с главного сервера: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:296 +#: replication/libpqwalreceiver/libpqwalreceiver.c:306 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Ожидался 1 кортеж с 2 полями, однако получено кортежей: %d, полей: %d." -#: replication/libpqwalreceiver/libpqwalreceiver.c:324 +#: replication/libpqwalreceiver/libpqwalreceiver.c:334 #, c-format msgid "socket not open" msgstr "сокет не открыт" -#: replication/libpqwalreceiver/libpqwalreceiver.c:497 -#: replication/libpqwalreceiver/libpqwalreceiver.c:520 -#: replication/libpqwalreceiver/libpqwalreceiver.c:526 +#: replication/libpqwalreceiver/libpqwalreceiver.c:507 +#: replication/libpqwalreceiver/libpqwalreceiver.c:530 +#: replication/libpqwalreceiver/libpqwalreceiver.c:536 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "не удалось извлечь данные из потока WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:545 +#: replication/libpqwalreceiver/libpqwalreceiver.c:555 #, c-format msgid "could not send data to WAL stream: %s" msgstr "не удалось отправить данные в поток WAL: %s" -#: replication/logical/logical.c:81 +#: replication/logical/logical.c:83 #, c-format msgid "logical decoding requires wal_level >= logical" msgstr "для логического декодирования требуется wal_level >= logical" -#: replication/logical/logical.c:86 +#: replication/logical/logical.c:88 #, c-format msgid "logical decoding requires a database connection" msgstr "для логического декодирования требуется подключение к БД" -#: replication/logical/logical.c:104 +#: replication/logical/logical.c:106 #, c-format msgid "logical decoding cannot be used while in recovery" msgstr "логическое декодирование нельзя использовать в процессе восстановления" -#: replication/logical/logical.c:235 replication/logical/logical.c:386 +#: replication/logical/logical.c:237 replication/logical/logical.c:386 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "" "физический слот репликации нельзя использовать для логического декодирования" -#: replication/logical/logical.c:240 replication/logical/logical.c:391 +#: replication/logical/logical.c:242 replication/logical/logical.c:391 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "слот репликации \"%s\" создан не в этой базе данных" -#: replication/logical/logical.c:247 +#: replication/logical/logical.c:249 #, c-format msgid "" "cannot create logical replication slot in transaction that has performed " @@ -14836,34 +15900,35 @@ msgstr "" msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "слот \"%s\", модуль вывода \"%s\", в обработчике %s" -#: replication/logical/logicalfuncs.c:190 replication/walsender.c:2111 +#: replication/logical/logicalfuncs.c:192 replication/walsender.c:2109 #, c-format msgid "could not read from log segment %s, offset %u, length %lu: %m" msgstr "не удалось прочитать сегмент журнала %s (смещение %u, длина %lu): %m" -#: replication/logical/logicalfuncs.c:209 replication/slotfuncs.c:32 +#: replication/logical/logicalfuncs.c:211 replication/slotfuncs.c:32 #, c-format msgid "must be superuser or replication role to use replication slots" msgstr "" "для использования слотов репликации требуется роль репликации или права " "суперпользователя" -#: replication/logical/logicalfuncs.c:339 +#: replication/logical/logicalfuncs.c:341 #, c-format msgid "array must be one-dimensional" msgstr "массив должен быть одномерным" -#: replication/logical/logicalfuncs.c:345 +#: replication/logical/logicalfuncs.c:347 #, c-format msgid "array must not contain nulls" msgstr "массив не должен содержать элементы null" -#: replication/logical/logicalfuncs.c:361 utils/adt/json.c:2202 +#: replication/logical/logicalfuncs.c:363 utils/adt/json.c:2250 +#: utils/adt/jsonb.c:1369 #, c-format msgid "array must have even number of elements" msgstr "в массиве должно быть чётное число элементов" -#: replication/logical/logicalfuncs.c:404 +#: replication/logical/logicalfuncs.c:406 #, c-format msgid "" "logical decoding output plugin \"%s\" produces binary output, but \"%s\" " @@ -14872,19 +15937,110 @@ msgstr "" "модуль вывода логического декодирования \"%s\" выдаёт двоичные данные, но " "\"%s\" ожидает текстовые" -#: replication/logical/reorderbuffer.c:2101 +#: replication/logical/origin.c:181 +#, c-format +msgid "only superusers can query or manipulate replication origins" +msgstr "" +"запрашивать или модифицировать источники репликации могут только " +"суперпользователи" + +#: replication/logical/origin.c:186 +#, c-format +msgid "" +"cannot query or manipulate replication origin when max_replication_slots = 0" +msgstr "" +"запрашивать или модифицировать источники репликации при " +"max_replication_slots = 0 нельзя" + +#: replication/logical/origin.c:191 +#, c-format +msgid "cannot manipulate replication origins during recovery" +msgstr "модифицировать источники репликации во время восстановления нельзя" + +#: replication/logical/origin.c:316 +#, c-format +msgid "no free replication oid could be found" +msgstr "найти свободный oid для репликации не удалось" + +#: replication/logical/origin.c:353 +#, c-format +msgid "cannot drop replication origin with oid %d, in use by pid %d" +msgstr "" +"удалить источник репликации с oid %d нельзя, он используется процессом с pid " +"%d" + +#: replication/logical/origin.c:686 +#, c-format +msgid "replication checkpoint has wrong magic %u instead of %u" +msgstr "" +"контрольная точка репликации имеет неправильную сигнатуру (%u вместо %u)" + +#: replication/logical/origin.c:718 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %zu)" + +#: replication/logical/origin.c:727 +#, c-format +msgid "" +"no free replication state could be found, increase max_replication_slots" +msgstr "" +"найти свободные слоты репликации не удалось, увеличьте max_replication_slots" + +#: replication/logical/origin.c:745 +#, c-format +msgid "replication_slot_checkpoint has wrong checksum %u, expected %u" +msgstr "" +"неверная контрольная сумма у replication_slot_checkpoint (%u вместо %u)" + +#: replication/logical/origin.c:869 +#, c-format +msgid "replication origin with oid %d is already active for pid %d" +msgstr "источник репликации с oid %d уже занят процессом с pid %d" + +#: replication/logical/origin.c:880 replication/logical/origin.c:1060 +#, c-format +msgid "" +"no free replication state slot could be found for replication origin with " +"oid %u" +msgstr "" +"не удалось найти свободный слот репликации для источника репликации с oid %u" + +#: replication/logical/origin.c:882 replication/logical/origin.c:1062 +#: replication/slot.c:1241 +#, c-format +msgid "Increase max_replication_slots and try again." +msgstr "Увеличьте параметр max_replication_slots и повторите попытку." + +#: replication/logical/origin.c:1019 +#, c-format +msgid "cannot setup replication origin when one is already setup" +msgstr "нельзя настроить источник репликации, когда он уже настроен" + +#: replication/logical/origin.c:1048 +#, c-format +msgid "replication identiefer %d is already active for pid %d" +msgstr "идентификатор репликации %d уже занят процессом с pid %d" + +#: replication/logical/origin.c:1094 replication/logical/origin.c:1290 +#: replication/logical/origin.c:1310 +#, c-format +msgid "no replication origin is configured" +msgstr "ни один источник репликации не настроен" + +#: replication/logical/reorderbuffer.c:2170 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "не удалось записать в файл данных для XID %u: %m" -#: replication/logical/reorderbuffer.c:2197 -#: replication/logical/reorderbuffer.c:2217 +#: replication/logical/reorderbuffer.c:2266 +#: replication/logical/reorderbuffer.c:2286 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "не удалось прочитать из файла подкачки буфера пересортировки: %m" -#: replication/logical/reorderbuffer.c:2201 -#: replication/logical/reorderbuffer.c:2221 +#: replication/logical/reorderbuffer.c:2270 +#: replication/logical/reorderbuffer.c:2290 #, c-format msgid "" "could not read from reorderbuffer spill file: read %d instead of %u bytes" @@ -14892,13 +16048,13 @@ msgstr "" "не удалось прочитать из файла подкачки буфера пересортировки (прочитано " "байт: %d, требовалось: %u)" -#: replication/logical/reorderbuffer.c:2827 +#: replication/logical/reorderbuffer.c:2894 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "" "не удалось прочитать из файла \"%s\" (прочитано байт: %d, требовалось: %d)" -#: replication/logical/snapbuild.c:601 +#: replication/logical/snapbuild.c:600 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "" @@ -15019,62 +16175,57 @@ msgstr "слот репликации \"%s\" не существует" #: replication/slot.c:352 #, c-format -msgid "replication slot \"%s\" is already active" -msgstr "слот репликации \"%s\" уже задействован" +msgid "replication slot \"%s\" is already active for pid %d" +msgstr "слот репликации \"%s\" уже занят процессом с pid %d" -#: replication/slot.c:500 replication/slot.c:856 replication/slot.c:1201 +#: replication/slot.c:501 replication/slot.c:857 replication/slot.c:1202 #, c-format msgid "could not remove directory \"%s\"" msgstr "ошибка при удалении каталога \"%s\"" -#: replication/slot.c:775 +#: replication/slot.c:776 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "" "слоты репликации можно использовать, только если max_replication_slots > 0" -#: replication/slot.c:780 +#: replication/slot.c:781 #, c-format msgid "replication slots can only be used if wal_level >= archive" msgstr "слоты репликации можно использовать, только если wal_level >= archive" -#: replication/slot.c:1133 replication/slot.c:1171 +#: replication/slot.c:1134 replication/slot.c:1172 #, c-format msgid "could not read file \"%s\", read %d of %u: %m" msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %u): %m" -#: replication/slot.c:1142 +#: replication/slot.c:1143 #, c-format msgid "replication slot file \"%s\" has wrong magic %u instead of %u" msgstr "" "файл слота репликации \"%s\" имеет неправильную сигнатуру (%u вместо %u)" -#: replication/slot.c:1149 +#: replication/slot.c:1150 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "файл состояния snapbuild \"%s\" имеет неподдерживаемую версию %u" -#: replication/slot.c:1156 +#: replication/slot.c:1157 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "у файла слота репликации \"%s\" неверная длина: %u" -#: replication/slot.c:1186 +#: replication/slot.c:1187 #, c-format msgid "replication slot file %s: checksum mismatch, is %u, should be %u" msgstr "файл слота репликации %s: неверная контрольная сумма (%u вместо %u)" -#: replication/slot.c:1239 +#: replication/slot.c:1240 #, c-format msgid "too many replication slots active before shutdown" msgstr "перед завершением активно слишком много слотов репликации" -#: replication/slot.c:1240 -#, c-format -msgid "Increase max_replication_slots and try again." -msgstr "Увеличьте параметр max_replication_slots и повторите попытку." - -#: replication/syncrep.c:208 +#: replication/syncrep.c:199 #, c-format msgid "" "canceling the wait for synchronous replication and terminating connection " @@ -15083,7 +16234,7 @@ msgstr "" "отмена ожидания синхронной репликации и закрытие соединения по команде " "администратора" -#: replication/syncrep.c:209 replication/syncrep.c:226 +#: replication/syncrep.c:200 replication/syncrep.c:217 #, c-format msgid "" "The transaction has already committed locally, but might not have been " @@ -15092,18 +16243,18 @@ msgstr "" "Транзакция уже была зафиксирована локально, но возможно не была " "реплицирована на резервный сервер." -#: replication/syncrep.c:225 +#: replication/syncrep.c:216 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "отмена ожидания синхронной репликации по запросу пользователя" -#: replication/syncrep.c:355 +#: replication/syncrep.c:346 #, c-format msgid "standby \"%s\" now has synchronous standby priority %u" msgstr "" "резервный сервер \"%s\" теперь имеет приоритет синхронной репликации %u" -#: replication/syncrep.c:457 +#: replication/syncrep.c:480 #, c-format msgid "standby \"%s\" is now the synchronous standby with priority %u" msgstr "" @@ -15115,90 +16266,90 @@ msgstr "" msgid "terminating walreceiver process due to administrator command" msgstr "завершение процесса считывания журнала по команде администратора" -#: replication/walreceiver.c:332 +#: replication/walreceiver.c:321 #, c-format msgid "highest timeline %u of the primary is behind recovery timeline %u" msgstr "" "последняя линия времени %u на главном сервере отстаёт от восстанавливаемой " "линии времени %u" -#: replication/walreceiver.c:367 +#: replication/walreceiver.c:356 #, c-format msgid "started streaming WAL from primary at %X/%X on timeline %u" msgstr "" "начало передачи журнала с главного сервера, с позиции %X/%X на линии времени " "%u" -#: replication/walreceiver.c:372 +#: replication/walreceiver.c:361 #, c-format msgid "restarted WAL streaming at %X/%X on timeline %u" msgstr "перезапуск передачи журнала с позиции %X/%X на линии времени %u" -#: replication/walreceiver.c:406 +#: replication/walreceiver.c:395 #, c-format msgid "cannot continue WAL streaming, recovery has already ended" msgstr "продолжить передачу WAL нельзя, восстановление уже окончено" -#: replication/walreceiver.c:443 +#: replication/walreceiver.c:432 #, c-format msgid "replication terminated by primary server" msgstr "репликация прекращена главным сервером" -#: replication/walreceiver.c:444 +#: replication/walreceiver.c:433 #, c-format msgid "End of WAL reached on timeline %u at %X/%X." msgstr "На линии времени %u в %X/%X достигнут конец журнала." -#: replication/walreceiver.c:491 +#: replication/walreceiver.c:480 #, c-format msgid "terminating walreceiver due to timeout" msgstr "завершение приёма журнала из-за таймаута" -#: replication/walreceiver.c:531 +#: replication/walreceiver.c:520 #, c-format msgid "primary server contains no more WAL on requested timeline %u" msgstr "" "на главном сервере больше нет журналов для запрошенной линии времени %u" -#: replication/walreceiver.c:546 replication/walreceiver.c:903 +#: replication/walreceiver.c:535 replication/walreceiver.c:895 #, c-format msgid "could not close log segment %s: %m" msgstr "не удалось закрыть сегмент журнала %s: %m" -#: replication/walreceiver.c:668 +#: replication/walreceiver.c:660 #, c-format msgid "fetching timeline history file for timeline %u from primary server" msgstr "загрузка файла истории для линии времени %u с главного сервера" -#: replication/walreceiver.c:954 +#: replication/walreceiver.c:949 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "не удалось записать в сегмент журнала %s (смещение %u, длина %lu): %m" -#: replication/walsender.c:468 +#: replication/walsender.c:469 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "не удалось перейти к началу файла \"%s\": %m" -#: replication/walsender.c:519 +#: replication/walsender.c:520 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "" "логический слот репликации нельзя использовать для физической репликации" -#: replication/walsender.c:582 +#: replication/walsender.c:583 #, 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:586 +#: replication/walsender.c:587 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "История этого сервера ответвилась от линии времени %u в %X/%X." -#: replication/walsender.c:631 +#: replication/walsender.c:632 #, c-format msgid "" "requested starting point %X/%X is ahead of the WAL flush position of this " @@ -15207,43 +16358,48 @@ msgstr "" "запрошенная начальная точка %X/%X впереди позиции сброшенных данных журнала " "на этом сервере (%X/%X)" -#: replication/walsender.c:946 +#: replication/walsender.c:948 #, c-format msgid "terminating walsender process after promotion" msgstr "завершение процесса передачи журнала после повышения" -#: replication/walsender.c:1362 replication/walsender.c:1378 +#: replication/walsender.c:1275 +#, c-format +msgid "received replication command: %s" +msgstr "получена команда репликации: %s" + +#: replication/walsender.c:1368 replication/walsender.c:1384 #, c-format msgid "unexpected EOF on standby connection" msgstr "неожиданный обрыв соединения с резервным сервером" -#: replication/walsender.c:1392 +#: replication/walsender.c:1398 #, c-format msgid "unexpected standby message type \"%c\", after receiving CopyDone" msgstr "" "после CopyDone резервный сервер передал сообщение неожиданного типа \"%c\"" -#: replication/walsender.c:1430 +#: replication/walsender.c:1436 #, c-format msgid "invalid standby message type \"%c\"" msgstr "неверный тип сообщения резервного сервера: \"%c\"" -#: replication/walsender.c:1471 +#: replication/walsender.c:1477 #, c-format msgid "unexpected message type \"%c\"" msgstr "неожиданный тип сообщения \"%c\"" -#: replication/walsender.c:1758 +#: replication/walsender.c:1764 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "завершение процесса передачи журнала из-за таймаута репликации" -#: replication/walsender.c:1851 +#: replication/walsender.c:1857 #, c-format msgid "standby \"%s\" has now caught up with primary" msgstr "резервный сервер \"%s\" нагнал главный" -#: replication/walsender.c:1955 +#: replication/walsender.c:1958 #, c-format msgid "" "number of requested standby connections exceeds max_wal_senders (currently " @@ -15252,138 +16408,138 @@ msgstr "" "число запрошенных подключений резервных серверов превосходит max_wal_senders " "(сейчас: %d)" -#: rewrite/rewriteDefine.c:111 rewrite/rewriteDefine.c:942 +#: rewrite/rewriteDefine.c:111 rewrite/rewriteDefine.c:947 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "правило \"%s\" для отношения \"%s\" уже существует" -#: rewrite/rewriteDefine.c:295 +#: rewrite/rewriteDefine.c:296 #, c-format msgid "rule actions on OLD are not implemented" msgstr "действия правил для OLD не реализованы" -#: rewrite/rewriteDefine.c:296 +#: rewrite/rewriteDefine.c:297 #, c-format msgid "Use views or triggers instead." msgstr "Воспользуйтесь представлениями или триггерами." -#: rewrite/rewriteDefine.c:300 +#: rewrite/rewriteDefine.c:301 #, c-format msgid "rule actions on NEW are not implemented" msgstr "действия правил для NEW не реализованы" -#: rewrite/rewriteDefine.c:301 +#: rewrite/rewriteDefine.c:302 #, c-format msgid "Use triggers instead." msgstr "Воспользуйтесь триггерами." -#: rewrite/rewriteDefine.c:314 +#: rewrite/rewriteDefine.c:315 #, c-format msgid "INSTEAD NOTHING rules on SELECT are not implemented" msgstr "правила INSTEAD NOTHING для SELECT не реализованы" -#: rewrite/rewriteDefine.c:315 +#: rewrite/rewriteDefine.c:316 #, c-format msgid "Use views instead." msgstr "Воспользуйтесь представлениями." -#: rewrite/rewriteDefine.c:323 +#: rewrite/rewriteDefine.c:324 #, c-format msgid "multiple actions for rules on SELECT are not implemented" msgstr "множественные действия в правилах для SELECT не поддерживаются" -#: rewrite/rewriteDefine.c:334 +#: rewrite/rewriteDefine.c:335 #, c-format msgid "rules on SELECT must have action INSTEAD SELECT" msgstr "в правилах для SELECT должно быть действие INSTEAD SELECT" -#: rewrite/rewriteDefine.c:342 +#: rewrite/rewriteDefine.c:343 #, c-format msgid "rules on SELECT must not contain data-modifying statements in WITH" msgstr "" "правила для SELECT не должны содержать операторы, изменяющие данные, в WITH" -#: rewrite/rewriteDefine.c:350 +#: rewrite/rewriteDefine.c:351 #, c-format msgid "event qualifications are not implemented for rules on SELECT" msgstr "в правилах для SELECT не может быть условий" -#: rewrite/rewriteDefine.c:377 +#: rewrite/rewriteDefine.c:378 #, c-format msgid "\"%s\" is already a view" msgstr "\"%s\" уже является представлением" -#: rewrite/rewriteDefine.c:401 +#: rewrite/rewriteDefine.c:402 #, c-format msgid "view rule for \"%s\" must be named \"%s\"" msgstr "правило представления для \"%s\" должно называться \"%s\"" -#: rewrite/rewriteDefine.c:429 +#: rewrite/rewriteDefine.c:430 #, c-format msgid "could not convert table \"%s\" to a view because it is not empty" msgstr "" "не удалось преобразовать таблицу \"%s\" в представление, так как она не пуста" -#: rewrite/rewriteDefine.c:437 +#: rewrite/rewriteDefine.c:438 #, c-format msgid "could not convert table \"%s\" to a view because it has triggers" msgstr "" "не удалось преобразовать таблицу \"%s\" в представление, так как она " "содержит триггеры" -#: rewrite/rewriteDefine.c:439 +#: rewrite/rewriteDefine.c:440 #, c-format msgid "" "In particular, the table cannot be involved in any foreign key relationships." msgstr "" "Кроме того, таблица не может быть задействована в ссылках по внешнему ключу." -#: rewrite/rewriteDefine.c:444 +#: rewrite/rewriteDefine.c:445 #, c-format msgid "could not convert table \"%s\" to a view because it has indexes" msgstr "" "не удалось преобразовать таблицу \"%s\" в представление, так как она имеет " "индексы" -#: rewrite/rewriteDefine.c:450 +#: rewrite/rewriteDefine.c:451 #, c-format msgid "could not convert table \"%s\" to a view because it has child tables" msgstr "" "не удалось преобразовать таблицу \"%s\" в представление, так как она имеет " "подчинённые таблицы" -#: rewrite/rewriteDefine.c:477 +#: rewrite/rewriteDefine.c:478 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "в правиле нельзя указать несколько списков RETURNING" -#: rewrite/rewriteDefine.c:482 +#: rewrite/rewriteDefine.c:483 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "списки RETURNING в условных правилах не поддерживаются" -#: rewrite/rewriteDefine.c:486 +#: rewrite/rewriteDefine.c:487 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "списки RETURNING поддерживаются только в правилах INSTEAD" -#: rewrite/rewriteDefine.c:649 +#: rewrite/rewriteDefine.c:653 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "список результата правила для SELECT содержит слишком много колонок" -#: rewrite/rewriteDefine.c:650 +#: rewrite/rewriteDefine.c:654 #, c-format msgid "RETURNING list has too many entries" msgstr "список RETURNING содержит слишком много колонок" -#: rewrite/rewriteDefine.c:666 +#: rewrite/rewriteDefine.c:670 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "" "преобразовать отношение, содержащее удалённые колонки, в представление нельзя" -#: rewrite/rewriteDefine.c:672 +#: rewrite/rewriteDefine.c:676 #, c-format msgid "" "SELECT rule's target entry %d has different column name from column \"%s\"" @@ -15391,67 +16547,67 @@ msgstr "" "элементу %d результата правила для SELECT присвоено имя, отличное от имени " "колонки \"%s\"" -#: rewrite/rewriteDefine.c:674 +#: rewrite/rewriteDefine.c:678 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "Имя элемента результата SELECT: \"%s\"." -#: rewrite/rewriteDefine.c:683 +#: rewrite/rewriteDefine.c:687 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "" "элемент %d результата правила для SELECT имеет тип, отличный от типа колонки " "\"%s\"" -#: rewrite/rewriteDefine.c:685 +#: rewrite/rewriteDefine.c:689 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "элемент %d списка RETURNING имеет тип, отличный от типа колонки \"%s\"" -#: rewrite/rewriteDefine.c:688 rewrite/rewriteDefine.c:712 +#: rewrite/rewriteDefine.c:692 rewrite/rewriteDefine.c:716 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "Элемент результата SELECT имеет тип %s, тогда как тип колонки - %s." -#: rewrite/rewriteDefine.c:691 rewrite/rewriteDefine.c:716 +#: rewrite/rewriteDefine.c:695 rewrite/rewriteDefine.c:720 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "Элемент списка RETURNING имеет тип %s, тогда как тип колонки - %s." -#: rewrite/rewriteDefine.c:707 +#: rewrite/rewriteDefine.c:711 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "" "элемент %d результата правила для SELECT имеет размер, отличный от колонки " "\"%s\"" -#: rewrite/rewriteDefine.c:709 +#: rewrite/rewriteDefine.c:713 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "элемент %d списка RETURNING имеет размер, отличный от колонки \"%s\"" -#: rewrite/rewriteDefine.c:726 +#: rewrite/rewriteDefine.c:730 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "список результата правила для SELECT содержит недостаточно элементов" -#: rewrite/rewriteDefine.c:727 +#: rewrite/rewriteDefine.c:731 #, c-format msgid "RETURNING list has too few entries" msgstr "список RETURNING содержит недостаточно элементов" -#: rewrite/rewriteDefine.c:819 rewrite/rewriteDefine.c:933 +#: rewrite/rewriteDefine.c:823 rewrite/rewriteDefine.c:938 #: rewrite/rewriteSupport.c:112 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "правило \"%s\" для отношения\"%s\" не существует" -#: rewrite/rewriteDefine.c:952 +#: rewrite/rewriteDefine.c:957 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "переименовывать правило ON SELECT нельзя" -#: rewrite/rewriteHandler.c:512 +#: rewrite/rewriteHandler.c:521 #, c-format msgid "" "WITH query name \"%s\" appears in both a rule action and the query being " @@ -15460,87 +16616,92 @@ msgstr "" "имя запроса WITH \"%s\" оказалось и в действии правила, и в переписываемом " "запросе" -#: rewrite/rewriteHandler.c:572 +#: rewrite/rewriteHandler.c:581 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "RETURNING можно определить только для одного правила" -#: rewrite/rewriteHandler.c:910 rewrite/rewriteHandler.c:928 +#: rewrite/rewriteHandler.c:921 rewrite/rewriteHandler.c:939 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "многочисленные присвоения одной колонке \"%s\"" -#: rewrite/rewriteHandler.c:1698 rewrite/rewriteHandler.c:3129 +#: rewrite/rewriteHandler.c:1714 rewrite/rewriteHandler.c:3272 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "обнаружена бесконечная рекурсия в правилах для отношения \"%s\"" -#: rewrite/rewriteHandler.c:1995 +#: rewrite/rewriteHandler.c:1797 +#, c-format +msgid "infinite recursion detected in policy for relation \"%s\"" +msgstr "обнаружена бесконечная рекурсия в политике для отношения \"%s\"" + +#: rewrite/rewriteHandler.c:2094 msgid "Junk view columns are not updatable." msgstr "Утилизируемые колонки представлений не обновляются." -#: rewrite/rewriteHandler.c:2000 +#: rewrite/rewriteHandler.c:2099 msgid "" "View columns that are not columns of their base relation are not updatable." msgstr "" "Колонки представлений, не являющиеся колонками базовых отношений, не " "обновляются." -#: rewrite/rewriteHandler.c:2003 +#: rewrite/rewriteHandler.c:2102 msgid "View columns that refer to system columns are not updatable." msgstr "" "Колонки представлений, ссылающиеся на системные колонки, не обновляются." -#: rewrite/rewriteHandler.c:2006 +#: rewrite/rewriteHandler.c:2105 msgid "View columns that return whole-row references are not updatable." msgstr "" "Колонки представлений, возвращающие ссылки на всю строку, не обновляются." -#: rewrite/rewriteHandler.c:2064 +#: rewrite/rewriteHandler.c:2163 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Представления с DISTINCT не обновляются автоматически." -#: rewrite/rewriteHandler.c:2067 +#: rewrite/rewriteHandler.c:2166 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Представления с GROUP BY не обновляются автоматически." -#: rewrite/rewriteHandler.c:2070 +#: rewrite/rewriteHandler.c:2169 msgid "Views containing HAVING are not automatically updatable." msgstr "Представления с HAVING не обновляются автоматически." -#: rewrite/rewriteHandler.c:2073 +#: rewrite/rewriteHandler.c:2172 msgid "" "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "" "Представления с UNION, INTERSECT или EXCEPT не обновляются автоматически." -#: rewrite/rewriteHandler.c:2076 +#: rewrite/rewriteHandler.c:2175 msgid "Views containing WITH are not automatically updatable." msgstr "Представления с WITH не обновляются автоматически." -#: rewrite/rewriteHandler.c:2079 +#: rewrite/rewriteHandler.c:2178 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Представления с LIMIT или OFFSET не обновляются автоматически." -#: rewrite/rewriteHandler.c:2091 +#: rewrite/rewriteHandler.c:2190 msgid "Views that return aggregate functions are not automatically updatable." msgstr "" "Представления, возвращающие агрегатные функции, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2094 +#: rewrite/rewriteHandler.c:2193 msgid "Views that return window functions are not automatically updatable." msgstr "" "Представления, возвращающие оконные функции, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2097 +#: rewrite/rewriteHandler.c:2196 msgid "" "Views that return set-returning functions are not automatically updatable." msgstr "" "Представления, возвращающие функции с результатом-множеством, не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:2104 rewrite/rewriteHandler.c:2108 -#: rewrite/rewriteHandler.c:2115 +#: rewrite/rewriteHandler.c:2203 rewrite/rewriteHandler.c:2207 +#: rewrite/rewriteHandler.c:2214 msgid "" "Views that do not select from a single table or view are not automatically " "updatable." @@ -15548,23 +16709,27 @@ msgstr "" "Представления, выбирающие данные не из одной таблицы или представления, не " "обновляются автоматически." -#: rewrite/rewriteHandler.c:2139 +#: rewrite/rewriteHandler.c:2217 +msgid "Views containing TABLESAMPLE are not automatically updatable." +msgstr "Представления, содержащие TABLESAMPLE, не обновляются автоматически." + +#: rewrite/rewriteHandler.c:2241 msgid "Views that have no updatable columns are not automatically updatable." msgstr "" "Представления, не содержащие обновляемых колонок, не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:2576 +#: rewrite/rewriteHandler.c:2688 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "вставить данные в колонку \"%s\" представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:2584 +#: rewrite/rewriteHandler.c:2696 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "изменить данные в колонке \"%s\" представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:2952 +#: rewrite/rewriteHandler.c:3071 #, c-format msgid "" "DO INSTEAD NOTHING rules are not supported for data-modifying statements in " @@ -15573,7 +16738,7 @@ msgstr "" "правила DO INSTEAD NOTHING не поддерживаются в операторах, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:2966 +#: rewrite/rewriteHandler.c:3085 #, c-format msgid "" "conditional DO INSTEAD rules are not supported for data-modifying statements " @@ -15582,13 +16747,13 @@ msgstr "" "условные правила DO INSTEAD не поддерживаются для операторов, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:2970 +#: rewrite/rewriteHandler.c:3089 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "" "правила DO ALSO не поддерживаются для операторов, изменяющих данные, в WITH" -#: rewrite/rewriteHandler.c:2975 +#: rewrite/rewriteHandler.c:3094 #, c-format msgid "" "multi-statement DO INSTEAD rules are not supported for data-modifying " @@ -15597,43 +16762,52 @@ msgstr "" "составные правила DO INSTEAD не поддерживаются для операторов, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3166 +#: rewrite/rewriteHandler.c:3309 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "выполнить INSERT RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3168 +#: rewrite/rewriteHandler.c:3311 #, 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:3173 +#: rewrite/rewriteHandler.c:3316 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "выполнить UPDATE RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3175 +#: rewrite/rewriteHandler.c:3318 #, 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:3180 +#: rewrite/rewriteHandler.c:3323 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "выполнить DELETE RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3182 +#: rewrite/rewriteHandler.c:3325 #, 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:3246 +#: rewrite/rewriteHandler.c:3343 +#, c-format +msgid "" +"INSERT with ON CONFLICT clause cannot be used with table that has INSERT or " +"UPDATE rules" +msgstr "" +"INSERT c предложением ON CONFLICT нельзя использовать с таблицей, для " +"которой заданы правила INSERT или UPDATE" + +#: rewrite/rewriteHandler.c:3400 #, c-format msgid "" "WITH cannot be used in a query that is rewritten by rules into multiple " @@ -15642,16 +16816,25 @@ msgstr "" "WITH нельзя использовать в запросе, преобразованном правилами в несколько " "запросов" -#: rewrite/rewriteManip.c:956 +#: rewrite/rewriteManip.c:1006 #, c-format msgid "conditional utility statements are not implemented" msgstr "условные служебные операторы не реализованы" -#: rewrite/rewriteManip.c:1121 +#: rewrite/rewriteManip.c:1172 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "условие WHERE CURRENT OF для представлений не реализовано" +#: rewrite/rewriteManip.c:1437 +#, 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" + #: rewrite/rewriteSupport.c:154 #, c-format msgid "rule \"%s\" does not exist" @@ -15667,43 +16850,43 @@ msgstr "имя \"%s\" имеют несколько правил" msgid "Specify a relation name as well as a rule name." msgstr "Дополните имя правила именем таблицы." -#: snowball/dict_snowball.c:180 +#: snowball/dict_snowball.c:177 #, c-format msgid "no Snowball stemmer available for language \"%s\" and encoding \"%s\"" msgstr "стеммер Snowball для языка \"%s\" и кодировки \"%s\" не найден" -#: snowball/dict_snowball.c:203 tsearch/dict_ispell.c:73 +#: snowball/dict_snowball.c:200 tsearch/dict_ispell.c:73 #: tsearch/dict_simple.c:48 #, c-format msgid "multiple StopWords parameters" msgstr "повторяющийся параметр StopWords" -#: snowball/dict_snowball.c:212 +#: snowball/dict_snowball.c:209 #, c-format msgid "multiple Language parameters" msgstr "повторяющийся параметр Language" -#: snowball/dict_snowball.c:219 +#: snowball/dict_snowball.c:216 #, c-format msgid "unrecognized Snowball parameter: \"%s\"" msgstr "нераспознанный параметр Snowball: \"%s\"" -#: snowball/dict_snowball.c:227 +#: snowball/dict_snowball.c:224 #, c-format msgid "missing Language parameter" msgstr "отсутствует параметр Language" -#: storage/buffer/bufmgr.c:139 storage/buffer/bufmgr.c:252 +#: storage/buffer/bufmgr.c:442 storage/buffer/bufmgr.c:555 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "обращаться к временным таблицам других сеансов нельзя" -#: storage/buffer/bufmgr.c:401 +#: storage/buffer/bufmgr.c:704 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "неожиданные данные после EOF в блоке %u отношения %s" -#: storage/buffer/bufmgr.c:403 +#: storage/buffer/bufmgr.c:706 #, c-format msgid "" "This has been seen to occur with buggy kernels; consider updating your " @@ -15712,22 +16895,22 @@ msgstr "" "Эта ситуация может возникать из-за ошибок в ядре; возможно, вам следует " "обновить ОС." -#: storage/buffer/bufmgr.c:493 +#: storage/buffer/bufmgr.c:793 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "неверная страница в блоке %u отношения %s; страница обнуляется" -#: storage/buffer/bufmgr.c:3192 +#: storage/buffer/bufmgr.c:3567 #, c-format msgid "could not write block %u of %s" msgstr "не удалось запись блок %u файла %s" -#: storage/buffer/bufmgr.c:3194 +#: storage/buffer/bufmgr.c:3569 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Множественные сбои - возможно, постоянная ошибка записи." -#: storage/buffer/bufmgr.c:3215 storage/buffer/bufmgr.c:3234 +#: storage/buffer/bufmgr.c:3590 storage/buffer/bufmgr.c:3609 #, c-format msgid "writing block %u of relation %s" msgstr "запись блока %u отношения %s" @@ -15737,55 +16920,55 @@ msgstr "запись блока %u отношения %s" msgid "no empty local buffer available" msgstr "нет пустого локального буфера" -#: storage/file/fd.c:505 +#: storage/file/fd.c:528 #, c-format msgid "getrlimit failed: %m" msgstr "ошибка в getrlimit(): %m" -#: storage/file/fd.c:595 +#: storage/file/fd.c:618 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "недостаточно дескрипторов файлов для запуска серверного процесса" -#: storage/file/fd.c:596 +#: storage/file/fd.c:619 #, c-format msgid "System allows %d, we need at least %d." msgstr "Система выделяет: %d, а требуется минимум: %d." -#: storage/file/fd.c:637 storage/file/fd.c:1671 storage/file/fd.c:1764 -#: storage/file/fd.c:1912 +#: storage/file/fd.c:660 storage/file/fd.c:1694 storage/file/fd.c:1787 +#: storage/file/fd.c:1935 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "нехватка дескрипторов файлов: %m; освободите их и повторите попытку" -#: storage/file/fd.c:1211 +#: storage/file/fd.c:1234 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "временный файл: путь \"%s\", размер %lu" -#: storage/file/fd.c:1360 +#: storage/file/fd.c:1383 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "размер временного файла превышает предел temp_file_limit (%d КБ)" -#: storage/file/fd.c:1647 storage/file/fd.c:1697 +#: storage/file/fd.c:1670 storage/file/fd.c:1720 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "превышен предел maxAllocatedDescs (%d) при попытке открыть файл \"%s\"" -#: storage/file/fd.c:1737 +#: storage/file/fd.c:1760 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "" "превышен предел maxAllocatedDescs (%d) при попытке выполнить команду \"%s\"" -#: storage/file/fd.c:1888 +#: storage/file/fd.c:1911 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "" "превышен предел maxAllocatedDescs (%d) при попытке открыть каталог \"%s\"" -#: storage/file/fd.c:1961 +#: storage/file/fd.c:1997 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не удалось прочитать каталог \"%s\": %m" @@ -15811,7 +16994,7 @@ msgstr "" msgid "dynamic shared memory control segment is not valid" msgstr "сегмент управления динамической разделяемой памятью не в порядке" -#: storage/ipc/dsm.c:501 +#: storage/ipc/dsm.c:516 #, c-format msgid "too many dynamic shared memory segments" msgstr "слишком много сегментов динамической разделяемой памяти" @@ -15870,11 +17053,11 @@ msgid "could not duplicate handle for \"%s\": %m" msgstr "не удалось продублировать указатель для \"%s\": %m" #: storage/ipc/shm_toc.c:108 storage/ipc/shm_toc.c:189 storage/ipc/shmem.c:205 -#: storage/lmgr/lock.c:872 storage/lmgr/lock.c:906 storage/lmgr/lock.c:2601 -#: storage/lmgr/lock.c:3717 storage/lmgr/lock.c:3782 storage/lmgr/lock.c:4072 -#: storage/lmgr/predicate.c:2323 storage/lmgr/predicate.c:2338 -#: storage/lmgr/predicate.c:3731 storage/lmgr/predicate.c:4874 -#: storage/lmgr/proc.c:198 utils/hash/dynahash.c:966 +#: storage/lmgr/lock.c:867 storage/lmgr/lock.c:901 storage/lmgr/lock.c:2596 +#: storage/lmgr/lock.c:3712 storage/lmgr/lock.c:3777 storage/lmgr/lock.c:4067 +#: storage/lmgr/predicate.c:2328 storage/lmgr/predicate.c:2343 +#: storage/lmgr/predicate.c:3736 storage/lmgr/predicate.c:4879 +#: storage/lmgr/proc.c:200 utils/hash/dynahash.c:998 #, c-format msgid "out of shared memory" msgstr "нехватка разделяемой памяти" @@ -15906,13 +17089,13 @@ msgstr "" msgid "requested shared memory size overflows size_t" msgstr "запрошенный размер разделяемой памяти не умещается в size_t" -#: storage/ipc/standby.c:499 tcop/postgres.c:2989 +#: storage/ipc/standby.c:500 tcop/postgres.c:2974 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "" "выполнение оператора отменено из-за конфликта с процессом восстановления" -#: storage/ipc/standby.c:500 tcop/postgres.c:2243 +#: storage/ipc/standby.c:501 tcop/postgres.c:2274 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "" @@ -15935,7 +17118,7 @@ msgstr "неверные флаги для открытия большого о msgid "invalid whence setting: %d" msgstr "неверное значение ориентира: %d" -#: storage/large_object/inv_api.c:591 +#: storage/large_object/inv_api.c:593 #, c-format msgid "invalid large object write request size: %d" msgstr "неверный размер записи большого объекта: %d" @@ -15961,98 +17144,103 @@ msgstr "обнаружена взаимоблокировка" msgid "See server log for query details." msgstr "Подробности запроса смотрите в протоколе сервера." -#: storage/lmgr/lmgr.c:599 +#: storage/lmgr/lmgr.c:684 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "при изменении кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:602 +#: storage/lmgr/lmgr.c:687 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "при удалении кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:605 +#: storage/lmgr/lmgr.c:690 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "при блокировке кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:608 +#: storage/lmgr/lmgr.c:693 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "при блокировке изменённой версии (%u,%u) кортежа в отношении \"%s\"" -#: storage/lmgr/lmgr.c:611 +#: storage/lmgr/lmgr.c:696 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "при добавлении кортежа индекса (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:614 +#: storage/lmgr/lmgr.c:699 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "при проверке уникальности кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:617 +#: storage/lmgr/lmgr.c:702 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "при перепроверке изменённого кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:620 +#: storage/lmgr/lmgr.c:705 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "" "при проверке ограничения-исключения для кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:840 +#: storage/lmgr/lmgr.c:925 #, c-format msgid "relation %u of database %u" msgstr "отношение %u базы данных %u" -#: storage/lmgr/lmgr.c:846 +#: storage/lmgr/lmgr.c:931 #, c-format msgid "extension of relation %u of database %u" msgstr "расширение отношения %u базы данных %u" -#: storage/lmgr/lmgr.c:852 +#: storage/lmgr/lmgr.c:937 #, c-format msgid "page %u of relation %u of database %u" msgstr "страница %u отношения %u базы данных %u" -#: storage/lmgr/lmgr.c:859 +#: storage/lmgr/lmgr.c:944 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "кортеж (%u,%u) отношения %u базы данных %u" -#: storage/lmgr/lmgr.c:867 +#: storage/lmgr/lmgr.c:952 #, c-format msgid "transaction %u" msgstr "транзакция %u" -#: storage/lmgr/lmgr.c:872 +#: storage/lmgr/lmgr.c:957 #, c-format msgid "virtual transaction %d/%u" msgstr "виртуальная транзакция %d/%u" -#: storage/lmgr/lmgr.c:878 +#: storage/lmgr/lmgr.c:963 +#, c-format +msgid "speculative token %u of transaction %u" +msgstr "спекулятивный маркер %u транзакции %u" + +#: storage/lmgr/lmgr.c:969 #, c-format msgid "object %u of class %u of database %u" msgstr "объект %u класса %u базы данных %u" -#: storage/lmgr/lmgr.c:886 +#: storage/lmgr/lmgr.c:977 #, c-format msgid "user lock [%u,%u,%u]" msgstr "пользовательская блокировка [%u,%u,%u]" -#: storage/lmgr/lmgr.c:893 +#: storage/lmgr/lmgr.c:984 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "рекомендательная блокировка [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:901 +#: storage/lmgr/lmgr.c:992 #, c-format msgid "unrecognized locktag type %d" msgstr "нераспознанный тип блокировки %d" -#: storage/lmgr/lock.c:721 +#: storage/lmgr/lock.c:716 #, c-format msgid "" "cannot acquire lock mode %s on database objects while recovery is in progress" @@ -16060,7 +17248,7 @@ msgstr "" "пока выполняется восстановление, нельзя получить блокировку объектов базы " "данных в режиме %s" -#: storage/lmgr/lock.c:723 +#: storage/lmgr/lock.c:718 #, c-format msgid "" "Only RowExclusiveLock or less can be acquired on database objects during " @@ -16069,13 +17257,13 @@ msgstr "" "В процессе восстановления для объектов базы данных может быть получена " "только блокировка RowExclusiveLock или менее сильная." -#: storage/lmgr/lock.c:873 storage/lmgr/lock.c:907 storage/lmgr/lock.c:2602 -#: storage/lmgr/lock.c:3718 storage/lmgr/lock.c:3783 storage/lmgr/lock.c:4073 +#: storage/lmgr/lock.c:868 storage/lmgr/lock.c:902 storage/lmgr/lock.c:2597 +#: storage/lmgr/lock.c:3713 storage/lmgr/lock.c:3778 storage/lmgr/lock.c:4068 #, c-format msgid "You might need to increase max_locks_per_transaction." msgstr "Возможно, следует увеличить параметр max_locks_per_transaction." -#: storage/lmgr/lock.c:3043 storage/lmgr/lock.c:3155 +#: storage/lmgr/lock.c:3038 storage/lmgr/lock.c:3150 #, c-format msgid "" "cannot PREPARE while holding both session-level and transaction-level locks " @@ -16084,12 +17272,22 @@ msgstr "" "нельзя выполнить PREPARE, удерживая блокировки на уровне сеанса и на уровне " "транзакции для одного объекта" -#: storage/lmgr/predicate.c:674 +#: storage/lmgr/lwlock.c:191 +#, c-format +msgid "%d: %s(%s %d): excl %u shared %u haswaiters %u waiters %u rOK %d" +msgstr "%d: %s(%s %d): искл. %u разделяем. %u есть_ждущие %u ждут %u осв. %d" + +#: storage/lmgr/lwlock.c:211 +#, c-format +msgid "%s(%s %d): %s" +msgstr "%s(%s %d): %s" + +#: storage/lmgr/predicate.c:675 #, c-format msgid "not enough elements in RWConflictPool to record a read/write conflict" msgstr "в пуле недостаточно элементов для записи о конфликте чтения/записи" -#: storage/lmgr/predicate.c:675 storage/lmgr/predicate.c:703 +#: storage/lmgr/predicate.c:676 storage/lmgr/predicate.c:704 #, c-format msgid "" "You might need to run fewer transactions at a time or increase " @@ -16098,7 +17296,7 @@ msgstr "" "Попробуйте уменьшить число транзакций в секунду или увеличить параметр " "max_connections." -#: storage/lmgr/predicate.c:702 +#: storage/lmgr/predicate.c:703 #, c-format msgid "" "not enough elements in RWConflictPool to record a potential read/write " @@ -16107,12 +17305,12 @@ msgstr "" "в пуле недостаточно элементов для записи о потенциальном конфликте чтения/" "записи" -#: storage/lmgr/predicate.c:907 +#: storage/lmgr/predicate.c:908 #, c-format msgid "memory for serializable conflict tracking is nearly exhausted" msgstr "память для отслеживания конфликтов сериализации практически исчерпана" -#: storage/lmgr/predicate.c:908 +#: storage/lmgr/predicate.c:909 #, c-format msgid "" "There might be an idle transaction or a forgotten prepared transaction " @@ -16121,7 +17319,7 @@ msgstr "" "Вероятно, эта ситуация вызвана забытой подготовленной транзакцией или " "транзакцией, простаивающей долгое время." -#: storage/lmgr/predicate.c:1190 storage/lmgr/predicate.c:1262 +#: storage/lmgr/predicate.c:1189 storage/lmgr/predicate.c:1260 #, c-format msgid "" "not enough shared memory for elements of data structure \"%s\" (%zu bytes " @@ -16130,18 +17328,18 @@ msgstr "" "недостаточно разделяемой памяти для элементов структуры данных \"%s" "\" (запрошено байт: %zu)" -#: storage/lmgr/predicate.c:1550 +#: storage/lmgr/predicate.c:1548 #, c-format msgid "deferrable snapshot was unsafe; trying a new one" msgstr "откладываемый снимок был небезопасен; пробуем более новый" -#: storage/lmgr/predicate.c:1589 +#: storage/lmgr/predicate.c:1587 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "" "Параметр \"default_transaction_isolation\" имеет значение \"serializable\"." -#: storage/lmgr/predicate.c:1590 +#: storage/lmgr/predicate.c:1588 #, c-format msgid "" "You can use \"SET default_transaction_isolation = 'repeatable read'\" to " @@ -16150,33 +17348,34 @@ msgstr "" "Чтобы изменить режим по умолчанию, выполните \"SET " "default_transaction_isolation = 'repeatable read'\"." -#: storage/lmgr/predicate.c:1629 +#: storage/lmgr/predicate.c:1627 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "транзакция, импортирующая снимок, не должна быть READ ONLY DEFERRABLE" -#: storage/lmgr/predicate.c:1699 utils/time/snapmgr.c:398 +#: storage/lmgr/predicate.c:1705 utils/time/snapmgr.c:431 +#: utils/time/snapmgr.c:437 #, c-format msgid "could not import the requested snapshot" msgstr "не удалось импортировать запрошенный снимок" -#: storage/lmgr/predicate.c:1700 utils/time/snapmgr.c:399 +#: storage/lmgr/predicate.c:1706 utils/time/snapmgr.c:438 #, c-format msgid "The source transaction %u is not running anymore." msgstr "Исходная транзакция %u уже не выполняется." -#: storage/lmgr/predicate.c:2324 storage/lmgr/predicate.c:2339 -#: storage/lmgr/predicate.c:3732 +#: storage/lmgr/predicate.c:2329 storage/lmgr/predicate.c:2344 +#: storage/lmgr/predicate.c:3737 #, c-format msgid "You might need to increase max_pred_locks_per_transaction." msgstr "" "Возможно, следует увеличить значение параметра max_locks_per_transaction." -#: storage/lmgr/predicate.c:3886 storage/lmgr/predicate.c:3975 -#: storage/lmgr/predicate.c:3983 storage/lmgr/predicate.c:4022 -#: storage/lmgr/predicate.c:4261 storage/lmgr/predicate.c:4598 -#: storage/lmgr/predicate.c:4610 storage/lmgr/predicate.c:4652 -#: storage/lmgr/predicate.c:4690 +#: storage/lmgr/predicate.c:3891 storage/lmgr/predicate.c:3980 +#: storage/lmgr/predicate.c:3988 storage/lmgr/predicate.c:4027 +#: storage/lmgr/predicate.c:4266 storage/lmgr/predicate.c:4603 +#: storage/lmgr/predicate.c:4615 storage/lmgr/predicate.c:4657 +#: storage/lmgr/predicate.c:4695 #, c-format msgid "" "could not serialize access due to read/write dependencies among transactions" @@ -16184,31 +17383,31 @@ msgstr "" "не удалось сериализовать доступ из-за зависимостей чтения/записи между " "транзакциями" -#: storage/lmgr/predicate.c:3888 storage/lmgr/predicate.c:3977 -#: storage/lmgr/predicate.c:3985 storage/lmgr/predicate.c:4024 -#: storage/lmgr/predicate.c:4263 storage/lmgr/predicate.c:4600 -#: storage/lmgr/predicate.c:4612 storage/lmgr/predicate.c:4654 -#: storage/lmgr/predicate.c:4692 +#: storage/lmgr/predicate.c:3893 storage/lmgr/predicate.c:3982 +#: storage/lmgr/predicate.c:3990 storage/lmgr/predicate.c:4029 +#: storage/lmgr/predicate.c:4268 storage/lmgr/predicate.c:4605 +#: storage/lmgr/predicate.c:4617 storage/lmgr/predicate.c:4659 +#: storage/lmgr/predicate.c:4697 #, c-format msgid "The transaction might succeed if retried." msgstr "Транзакция может завершиться успешно при следующей попытке." -#: storage/lmgr/proc.c:1179 +#: storage/lmgr/proc.c:1164 #, c-format msgid "Process %d waits for %s on %s." msgstr "Процесс %d ожидает в режиме %s блокировку %s." -#: storage/lmgr/proc.c:1189 +#: storage/lmgr/proc.c:1174 #, c-format msgid "sending cancel to blocking autovacuum PID %d" msgstr "снятие блокирующего процесса автоочистки (PID %d)" -#: storage/lmgr/proc.c:1201 utils/adt/misc.c:136 +#: storage/lmgr/proc.c:1186 utils/adt/misc.c:146 #, c-format msgid "could not send signal to process %d: %m" msgstr "отправить сигнал процессу %d не удалось: %m" -#: storage/lmgr/proc.c:1300 +#: storage/lmgr/proc.c:1285 #, c-format msgid "" "process %d avoided deadlock for %s on %s by rearranging queue order after " @@ -16217,7 +17416,7 @@ msgstr "" "процесс %d избежал взаимоблокировки, ожидая в режиме %s блокировку \"%s\", " "изменив порядок очереди через %ld.%03d мс" -#: storage/lmgr/proc.c:1315 +#: storage/lmgr/proc.c:1300 #, c-format msgid "" "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" @@ -16225,19 +17424,19 @@ msgstr "" "процесс %d обнаружил взаимоблокировку, ожидая в режиме %s блокировку \"%s\" " "в течение %ld.%03d мс" -#: storage/lmgr/proc.c:1324 +#: storage/lmgr/proc.c:1309 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "" "процесс %d продолжает ожидать в режиме %s блокировку \"%s\" в течение %ld." "%03d мс" -#: storage/lmgr/proc.c:1331 +#: storage/lmgr/proc.c:1316 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "процесс %d получил в режиме %s блокировку \"%s\" через %ld.%03d мс" -#: storage/lmgr/proc.c:1347 +#: storage/lmgr/proc.c:1332 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "" @@ -16249,103 +17448,110 @@ msgid "page verification failed, calculated checksum %u but expected %u" msgstr "" "ошибка проверки страницы: получена контрольная сумма %u, а ожидалась — %u" -#: storage/page/bufpage.c:200 storage/page/bufpage.c:459 -#: storage/page/bufpage.c:691 storage/page/bufpage.c:823 +#: storage/page/bufpage.c:200 storage/page/bufpage.c:490 +#: storage/page/bufpage.c:705 storage/page/bufpage.c:836 +#: storage/page/bufpage.c:936 #, c-format msgid "corrupted page pointers: lower = %u, upper = %u, special = %u" msgstr "" "испорченные указатели страницы: нижний = %u, верхний = %u, спецобласть = %u" -#: storage/page/bufpage.c:503 +#: storage/page/bufpage.c:534 #, c-format msgid "corrupted item pointer: %u" msgstr "испорченный указатель элемента: %u" -#: storage/page/bufpage.c:514 storage/page/bufpage.c:874 +#: storage/page/bufpage.c:545 storage/page/bufpage.c:887 +#: storage/page/bufpage.c:1042 #, c-format msgid "corrupted item lengths: total %u, available space %u" msgstr "испорченный размер элемента (общий размер: %u, доступно: %u)" -#: storage/page/bufpage.c:710 storage/page/bufpage.c:847 +#: storage/page/bufpage.c:724 storage/page/bufpage.c:860 #, c-format msgid "corrupted item pointer: offset = %u, size = %u" msgstr "испорченный указатель элемента: смещение = %u, размер = %u" -#: storage/smgr/md.c:426 storage/smgr/md.c:897 +#: storage/page/bufpage.c:965 +#, c-format +msgid "corrupted item pointer: offset = %u, length = %u" +msgstr "испорченный указатель элемента: смещение = %u, длина = %u" + +#: storage/smgr/md.c:442 storage/smgr/md.c:913 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "не удалось обрезать файл \"%s\": %m" -#: storage/smgr/md.c:493 +#: storage/smgr/md.c:509 #, c-format msgid "cannot extend file \"%s\" beyond %u blocks" msgstr "не удалось увеличить файл \"%s\" до блока %u" -#: storage/smgr/md.c:515 storage/smgr/md.c:676 storage/smgr/md.c:751 +#: storage/smgr/md.c:531 storage/smgr/md.c:692 storage/smgr/md.c:767 #, c-format msgid "could not seek to block %u in file \"%s\": %m" msgstr "не удалось перейти к блоку %u в файле \"%s\": %m" -#: storage/smgr/md.c:523 +#: storage/smgr/md.c:539 #, c-format msgid "could not extend file \"%s\": %m" msgstr "не удалось увеличить файл \"%s\": %m" -#: storage/smgr/md.c:525 storage/smgr/md.c:532 storage/smgr/md.c:778 +#: storage/smgr/md.c:541 storage/smgr/md.c:548 storage/smgr/md.c:794 #, c-format msgid "Check free disk space." msgstr "Проверьте, есть ли место на диске." -#: storage/smgr/md.c:529 +#: storage/smgr/md.c:545 #, c-format msgid "could not extend file \"%s\": wrote only %d of %d bytes at block %u" msgstr "не удалось увеличить файл \"%s\" (записано байт: %d из %d) в блоке %u" -#: storage/smgr/md.c:694 +#: storage/smgr/md.c:710 #, c-format msgid "could not read block %u in file \"%s\": %m" msgstr "не удалось прочитать блок %u в файле \"%s\": %m" -#: storage/smgr/md.c:710 +#: storage/smgr/md.c:726 #, c-format msgid "could not read block %u in file \"%s\": read only %d of %d bytes" msgstr "не удалось прочитать блок %u в файле \"%s\" (прочитано байт: %d из %d)" -#: storage/smgr/md.c:769 +#: storage/smgr/md.c:785 #, c-format msgid "could not write block %u in file \"%s\": %m" msgstr "не удалось записать блок %u в файл \"%s\": %m" -#: storage/smgr/md.c:774 +#: storage/smgr/md.c:790 #, c-format msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "не удалось записать блок %u в файл \"%s\" (записано байт: %d из %d)" -#: storage/smgr/md.c:873 +#: storage/smgr/md.c:889 #, 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:922 +#: storage/smgr/md.c:938 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "не удалось обрезать файл \"%s\" до нужного числа блоков (%u): %m" -#: storage/smgr/md.c:1202 +#: storage/smgr/md.c:1218 #, c-format msgid "could not fsync file \"%s\" but retrying: %m" msgstr "" "не удалось синхронизировать с ФС файл \"%s\", последует повторная попытка: %m" -#: storage/smgr/md.c:1365 +#: storage/smgr/md.c:1381 #, c-format msgid "could not forward fsync request because request queue is full" msgstr "" "не удалось отправить запрос синхронизации с ФС (очередь запросов переполнена)" -#: storage/smgr/md.c:1760 +#: storage/smgr/md.c:1776 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "не удалось открыть файл file \"%s\" (целевой блок %u): %m" @@ -16355,9 +17561,9 @@ msgstr "не удалось открыть файл file \"%s\" (целевой msgid "invalid argument size %d in function call message" msgstr "неверный размер аргумента (%d) в сообщении вызова функции" -#: tcop/fastpath.c:291 tcop/postgres.c:971 tcop/postgres.c:1281 -#: tcop/postgres.c:1539 tcop/postgres.c:1944 tcop/postgres.c:2311 -#: tcop/postgres.c:2386 +#: tcop/fastpath.c:291 tcop/postgres.c:1003 tcop/postgres.c:1313 +#: tcop/postgres.c:1571 tcop/postgres.c:1975 tcop/postgres.c:2342 +#: tcop/postgres.c:2417 #, c-format msgid "" "current transaction is aborted, commands ignored until end of transaction " @@ -16370,8 +17576,8 @@ msgstr "" msgid "fastpath function call: \"%s\" (OID %u)" msgstr "вызов функции fastpath: \"%s\" (OID %u)" -#: tcop/fastpath.c:401 tcop/postgres.c:1141 tcop/postgres.c:1406 -#: tcop/postgres.c:1785 tcop/postgres.c:2002 +#: tcop/fastpath.c:401 tcop/postgres.c:1173 tcop/postgres.c:1438 +#: tcop/postgres.c:1816 tcop/postgres.c:2033 #, c-format msgid "duration: %s ms" msgstr "продолжительность: %s мс" @@ -16400,60 +17606,60 @@ msgstr "" msgid "incorrect binary data format in function argument %d" msgstr "неправильный формат двоичных данных в аргументе функции %d" -#: tcop/postgres.c:355 tcop/postgres.c:391 tcop/postgres.c:418 +#: tcop/postgres.c:363 tcop/postgres.c:399 tcop/postgres.c:426 #, c-format msgid "unexpected EOF on client connection" msgstr "неожиданный обрыв соединения с клиентом" -#: tcop/postgres.c:441 tcop/postgres.c:453 tcop/postgres.c:464 -#: tcop/postgres.c:476 tcop/postgres.c:4312 +#: tcop/postgres.c:449 tcop/postgres.c:461 tcop/postgres.c:472 +#: tcop/postgres.c:484 tcop/postgres.c:4263 #, c-format msgid "invalid frontend message type %d" msgstr "неправильный тип клиентского сообщения %d" -#: tcop/postgres.c:912 +#: tcop/postgres.c:944 #, c-format msgid "statement: %s" msgstr "оператор: %s" -#: tcop/postgres.c:1146 +#: tcop/postgres.c:1178 #, c-format msgid "duration: %s ms statement: %s" msgstr "продолжительность: %s мс, оператор: %s" -#: tcop/postgres.c:1196 +#: tcop/postgres.c:1228 #, c-format msgid "parse %s: %s" msgstr "разбор %s: %s" -#: tcop/postgres.c:1254 +#: tcop/postgres.c:1286 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "в подготовленный оператор нельзя вставить несколько команд" -#: tcop/postgres.c:1411 +#: tcop/postgres.c:1443 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "продолжительность: %s мс, разбор %s: %s" -#: tcop/postgres.c:1456 +#: tcop/postgres.c:1488 #, c-format msgid "bind %s to %s" msgstr "привязка %s к %s" # [SM]: TO REVIEW -#: tcop/postgres.c:1475 tcop/postgres.c:2292 +#: tcop/postgres.c:1507 tcop/postgres.c:2323 #, c-format msgid "unnamed prepared statement does not exist" msgstr "безымянный подготовленный оператор не существует" -#: tcop/postgres.c:1517 +#: tcop/postgres.c:1549 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "" "неверное число форматов параметров в сообщении Bind (%d, а параметров %d)" -#: tcop/postgres.c:1523 +#: tcop/postgres.c:1555 #, c-format msgid "" "bind message supplies %d parameters, but prepared statement \"%s\" requires " @@ -16462,88 +17668,88 @@ msgstr "" "в сообщении Bind передано неверное число параметров (%d, а подготовленный " "оператор \"%s\" требует %d)" -#: tcop/postgres.c:1692 +#: tcop/postgres.c:1723 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "неверный формат двоичных данных в параметре Вind %d" -#: tcop/postgres.c:1790 +#: tcop/postgres.c:1821 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "продолжительность: %s мс, сообщение Bind %s%s%s: %s" -#: tcop/postgres.c:1838 tcop/postgres.c:2372 +#: tcop/postgres.c:1869 tcop/postgres.c:2403 #, c-format msgid "portal \"%s\" does not exist" msgstr "портал \"%s\" не существует" -#: tcop/postgres.c:1923 +#: tcop/postgres.c:1954 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:1925 tcop/postgres.c:2010 +#: tcop/postgres.c:1956 tcop/postgres.c:2041 msgid "execute fetch from" msgstr "выборка из" -#: tcop/postgres.c:1926 tcop/postgres.c:2011 +#: tcop/postgres.c:1957 tcop/postgres.c:2042 msgid "execute" msgstr "выполнение" -#: tcop/postgres.c:2007 +#: tcop/postgres.c:2038 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "продолжительность: %s мс %s %s%s%s: %s" -#: tcop/postgres.c:2133 +#: tcop/postgres.c:2164 #, c-format msgid "prepare: %s" msgstr "подготовка: %s" -#: tcop/postgres.c:2196 +#: tcop/postgres.c:2227 #, c-format msgid "parameters: %s" msgstr "параметры: %s" -#: tcop/postgres.c:2215 +#: tcop/postgres.c:2246 #, c-format msgid "abort reason: recovery conflict" msgstr "причина прерывания: конфликт при восстановлении" -#: tcop/postgres.c:2231 +#: tcop/postgres.c:2262 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "Пользователь удерживал фиксатор разделяемого буфера слишком долго." -#: tcop/postgres.c:2234 +#: tcop/postgres.c:2265 #, c-format msgid "User was holding a relation lock for too long." msgstr "Пользователь удерживал блокировку таблицы слишком долго." -#: tcop/postgres.c:2237 +#: tcop/postgres.c:2268 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "" "Пользователь использовал табличное пространство, которое должно быть удалено." -#: tcop/postgres.c:2240 +#: tcop/postgres.c:2271 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "" "Запросу пользователя нужно было видеть версии строк, которые должны быть " "удалены." -#: tcop/postgres.c:2246 +#: tcop/postgres.c:2277 #, c-format msgid "User was connected to a database that must be dropped." msgstr "Пользователь был подключен к базе данных, которая должна быть удалена." -#: tcop/postgres.c:2575 +#: tcop/postgres.c:2606 #, c-format msgid "terminating connection because of crash of another server process" msgstr "закрытие подключения из-за краха другого серверного процесса" -#: tcop/postgres.c:2576 +#: tcop/postgres.c:2607 #, c-format msgid "" "The postmaster has commanded this server process to roll back the current " @@ -16554,7 +17760,7 @@ msgstr "" "транзакцию и завершиться, так как другой серверный процесс завершился " "аварийно и возможно разрушил разделяемую память." -#: tcop/postgres.c:2580 tcop/postgres.c:2907 +#: tcop/postgres.c:2611 tcop/postgres.c:2917 #, c-format msgid "" "In a moment you should be able to reconnect to the database and repeat your " @@ -16563,12 +17769,12 @@ msgstr "" "Вы сможете переподключиться к базе данных и повторить вашу команду сию " "минуту." -#: tcop/postgres.c:2673 +#: tcop/postgres.c:2697 #, c-format msgid "floating-point exception" msgstr "исключение в операции с плавающей точкой" -#: tcop/postgres.c:2674 +#: tcop/postgres.c:2698 #, c-format msgid "" "An invalid floating-point operation was signaled. This probably means an out-" @@ -16578,57 +17784,57 @@ msgstr "" "оказался вне допустимых рамок или произошла ошибка вычисления, например, " "деление на ноль." -#: tcop/postgres.c:2850 +#: tcop/postgres.c:2862 +#, c-format +msgid "canceling authentication due to timeout" +msgstr "отмена проверки подлинности из-за таймаута" + +#: tcop/postgres.c:2866 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "прекращение процесса автоочистки по команде администратора" -#: tcop/postgres.c:2856 tcop/postgres.c:2866 tcop/postgres.c:2905 +#: tcop/postgres.c:2872 tcop/postgres.c:2882 tcop/postgres.c:2915 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "закрытие подключения из-за конфликта с процессом восстановления" -#: tcop/postgres.c:2872 +#: tcop/postgres.c:2888 #, c-format msgid "terminating connection due to administrator command" msgstr "закрытие подключения по команде администратора" -#: tcop/postgres.c:2885 +#: tcop/postgres.c:2898 #, c-format msgid "connection to client lost" msgstr "подключение к клиенту потеряно" -#: tcop/postgres.c:2941 -#, c-format -msgid "canceling authentication due to timeout" -msgstr "отмена проверки подлинности из-за таймаута" - -#: tcop/postgres.c:2957 +#: tcop/postgres.c:2951 #, c-format msgid "canceling statement due to lock timeout" msgstr "выполнение оператора отменено из-за таймаута блокировки" -#: tcop/postgres.c:2967 +#: tcop/postgres.c:2958 #, c-format msgid "canceling statement due to statement timeout" msgstr "выполнение оператора отменено из-за таймаута" -#: tcop/postgres.c:2977 +#: tcop/postgres.c:2965 #, c-format msgid "canceling autovacuum task" msgstr "отмена задачи автоочистки" -#: tcop/postgres.c:3006 +#: tcop/postgres.c:2988 #, c-format msgid "canceling statement due to user request" msgstr "выполнение оператора отменено по запросу пользователя" -#: tcop/postgres.c:3134 tcop/postgres.c:3156 +#: tcop/postgres.c:3118 tcop/postgres.c:3140 #, c-format msgid "stack depth limit exceeded" msgstr "превышен предел глубины стека" -#: tcop/postgres.c:3135 tcop/postgres.c:3157 +#: tcop/postgres.c:3119 tcop/postgres.c:3141 #, c-format msgid "" "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), " @@ -16638,12 +17844,12 @@ msgstr "" "КБ), предварительно убедившись, что ОС предоставляет достаточный размер " "стека." -#: tcop/postgres.c:3173 +#: tcop/postgres.c:3157 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "Значение \"max_stack_depth\" не должно превышать %ld КБ." -#: tcop/postgres.c:3175 +#: tcop/postgres.c:3159 #, c-format msgid "" "Increase the platform's stack depth limit via \"ulimit -s\" or local " @@ -16652,48 +17858,48 @@ msgstr "" "Увеличьте предел глубины стека в системе с помощью команды \"ulimit -s\" или " "эквивалента в вашей ОС." -#: tcop/postgres.c:3539 +#: tcop/postgres.c:3519 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "неверный аргумент командной строки для серверного процесса: %s" -#: tcop/postgres.c:3540 tcop/postgres.c:3546 +#: tcop/postgres.c:3520 tcop/postgres.c:3526 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Для дополнительной информации попробуйте \"%s --help\"." -#: tcop/postgres.c:3544 +#: tcop/postgres.c:3524 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: неверный аргумент командной строки: %s" -#: tcop/postgres.c:3623 +#: tcop/postgres.c:3585 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: не указаны ни база данных, ни пользователь" -#: tcop/postgres.c:4220 +#: tcop/postgres.c:4171 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "неверный подтип сообщения CLOSE: %d" -#: tcop/postgres.c:4255 +#: tcop/postgres.c:4206 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "неверный подтип сообщения DESCRIBE: %d" -#: tcop/postgres.c:4333 +#: tcop/postgres.c:4284 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "вызовы функции fastpath не поддерживаются для реплицирующих соединений" -#: tcop/postgres.c:4337 +#: tcop/postgres.c:4288 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "" "протокол расширенных запросов не поддерживается для реплицирующих соединений" -#: tcop/postgres.c:4507 +#: tcop/postgres.c:4458 #, c-format msgid "" "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s" @@ -16720,24 +17926,30 @@ msgid "Declare it with SCROLL option to enable backward scan." msgstr "Добавьте в его объявление SCROLL, чтобы он мог перемещаться назад." #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:227 +#: tcop/utility.c:234 #, c-format msgid "cannot execute %s in a read-only transaction" msgstr "в транзакции в режиме \"только чтение\" нельзя выполнить %s" #. translator: %s is name of a SQL command, eg CREATE -#: tcop/utility.c:246 +#: tcop/utility.c:252 +#, c-format +msgid "cannot execute %s during a parallel operation" +msgstr "выполнить %s во время параллельных операций нельзя" + +#. translator: %s is name of a SQL command, eg CREATE +#: tcop/utility.c:271 #, c-format msgid "cannot execute %s during recovery" -msgstr "во время восстановления нельзя выполнить %s" +msgstr "выполнить %s во время восстановления нельзя" #. translator: %s is name of a SQL command, eg PREPARE -#: tcop/utility.c:264 +#: tcop/utility.c:289 #, c-format msgid "cannot execute %s within security-restricted operation" msgstr "в рамках операции с ограничениями по безопасности нельзя выполнить %s" -#: tcop/utility.c:728 +#: tcop/utility.c:743 #, c-format msgid "must be superuser to do CHECKPOINT" msgstr "для выполнения CHECKPOINT нужно быть суперпользователем" @@ -16877,7 +18089,7 @@ msgid "invalid regular expression: %s" msgstr "неверное регулярное выражение: %s" #: tsearch/spell.c:518 tsearch/spell.c:535 tsearch/spell.c:552 -#: tsearch/spell.c:569 tsearch/spell.c:591 gram.y:13422 gram.y:13439 +#: tsearch/spell.c:569 tsearch/spell.c:591 gram.y:14268 gram.y:14285 #, c-format msgid "syntax error" msgstr "ошибка синтаксиса" @@ -16944,421 +18156,461 @@ msgstr "не удалось открыть файл стоп-слов \"%s\": %m msgid "text search parser does not support headline creation" msgstr "анализатор текстового поиска не поддерживает создание выдержек" -#: tsearch/wparser_def.c:2555 +#: tsearch/wparser_def.c:2557 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "нераспознанный параметр функции выдержки: \"%s\"" -#: tsearch/wparser_def.c:2564 +#: tsearch/wparser_def.c:2566 #, c-format msgid "MinWords should be less than MaxWords" msgstr "Значение MinWords должно быть меньше MaxWords" -#: tsearch/wparser_def.c:2568 +#: tsearch/wparser_def.c:2570 #, c-format msgid "MinWords should be positive" msgstr "Значение MinWords должно быть положительным" -#: tsearch/wparser_def.c:2572 +#: tsearch/wparser_def.c:2574 #, c-format msgid "ShortWord should be >= 0" msgstr "Значение ShortWord должно быть >= 0" -#: tsearch/wparser_def.c:2576 +#: tsearch/wparser_def.c:2578 #, c-format msgid "MaxFragments should be >= 0" msgstr "Значение MaxFragments должно быть >= 0" -#: utils/adt/acl.c:170 utils/adt/name.c:91 +#: utils/adt/acl.c:169 utils/adt/name.c:91 #, c-format msgid "identifier too long" msgstr "слишком длинный идентификатор" -#: utils/adt/acl.c:171 utils/adt/name.c:92 +#: utils/adt/acl.c:170 utils/adt/name.c:92 #, c-format msgid "Identifier must be less than %d characters." msgstr "Идентификатор должен быть короче %d байт." -#: utils/adt/acl.c:257 +#: utils/adt/acl.c:256 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "нераспознанное ключевое слово: \"%s\"" -#: utils/adt/acl.c:258 +#: utils/adt/acl.c:257 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "Ключевым словом ACL должно быть \"group\" или \"user\"." -#: utils/adt/acl.c:263 +#: utils/adt/acl.c:262 #, c-format msgid "missing name" msgstr "отсутствует имя" -#: utils/adt/acl.c:264 +#: utils/adt/acl.c:263 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "За ключевыми словами \"group\" или \"user\" должно следовать имя." -#: utils/adt/acl.c:270 +#: utils/adt/acl.c:269 #, c-format msgid "missing \"=\" sign" msgstr "отсутствует знак \"=\"" -#: utils/adt/acl.c:323 +#: utils/adt/acl.c:322 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "неверный символ режима: должен быть один из \"%s\"" -#: utils/adt/acl.c:345 +#: utils/adt/acl.c:344 #, c-format msgid "a name must follow the \"/\" sign" msgstr "за знаком \"/\" должно следовать имя" -#: utils/adt/acl.c:353 +#: utils/adt/acl.c:352 #, c-format msgid "defaulting grantor to user ID %u" msgstr "назначившим права считается пользователь с ID %u" -#: utils/adt/acl.c:544 +#: utils/adt/acl.c:543 #, c-format msgid "ACL array contains wrong data type" msgstr "Массив ACL содержит неверный тип данных" -#: utils/adt/acl.c:548 +#: utils/adt/acl.c:547 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "Массивы ACL должны быть одномерными" -#: utils/adt/acl.c:552 +#: utils/adt/acl.c:551 #, c-format msgid "ACL arrays must not contain null values" msgstr "Массивы ACL не должны содержать значения null" -#: utils/adt/acl.c:576 +#: utils/adt/acl.c:575 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "лишний мусор в конце спецификации ACL" -#: utils/adt/acl.c:1196 +#: utils/adt/acl.c:1195 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "привилегию назначения прав нельзя вернуть тому, кто назначил её вам" -#: utils/adt/acl.c:1257 +#: utils/adt/acl.c:1256 #, c-format msgid "dependent privileges exist" msgstr "существуют зависимые права" -#: utils/adt/acl.c:1258 +#: utils/adt/acl.c:1257 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Используйте CASCADE, чтобы отозвать и их." -#: utils/adt/acl.c:1537 +#: utils/adt/acl.c:1536 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert больше не поддерживается" -#: utils/adt/acl.c:1547 +#: utils/adt/acl.c:1546 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove больше не поддерживается " -#: utils/adt/acl.c:1633 utils/adt/acl.c:1687 +#: utils/adt/acl.c:1632 utils/adt/acl.c:1686 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "нераспознанный тип прав: \"%s\"" -#: utils/adt/acl.c:3427 utils/adt/regproc.c:122 utils/adt/regproc.c:143 -#: utils/adt/regproc.c:318 +#: utils/adt/acl.c:3426 utils/adt/regproc.c:123 utils/adt/regproc.c:144 +#: utils/adt/regproc.c:319 #, c-format msgid "function \"%s\" does not exist" msgstr "функция \"%s\" не существует" -#: utils/adt/acl.c:4881 +#: utils/adt/acl.c:4880 #, c-format msgid "must be member of role \"%s\"" msgstr "нужно быть членом роли \"%s\"" -#: utils/adt/array_userfuncs.c:48 +#: utils/adt/array_expanded.c:276 utils/adt/arrayfuncs.c:934 +#: utils/adt/arrayfuncs.c:1522 utils/adt/arrayfuncs.c:3225 +#: utils/adt/arrayfuncs.c:3363 utils/adt/arrayfuncs.c:5838 +#: utils/adt/arrayfuncs.c:6149 utils/adt/arrayutils.c:93 +#: utils/adt/arrayutils.c:102 utils/adt/arrayutils.c:109 +#, c-format +msgid "array size exceeds the maximum allowed (%d)" +msgstr "размер массива превышает предел (%d)" + +#: utils/adt/array_userfuncs.c:67 utils/adt/array_userfuncs.c:529 +#: utils/adt/array_userfuncs.c:609 utils/adt/json.c:1746 utils/adt/json.c:1841 +#: utils/adt/json.c:1872 utils/adt/jsonb.c:1133 utils/adt/jsonb.c:1162 +#: utils/adt/jsonb.c:1593 utils/adt/jsonb.c:1754 utils/adt/jsonb.c:1777 #, c-format -msgid "could not determine input data types" -msgstr "не удалось определить типы входных данных" +msgid "could not determine input data type" +msgstr "не удалось определить тип входных данных" -#: utils/adt/array_userfuncs.c:82 +#: utils/adt/array_userfuncs.c:72 #, c-format -msgid "neither input type is an array" -msgstr "входной тип так же не является массивом" +msgid "input data type is not an array" +msgstr "тип входных данных не является массивом" -#: utils/adt/array_userfuncs.c:103 utils/adt/array_userfuncs.c:113 -#: utils/adt/arrayfuncs.c:1309 utils/adt/float.c:1161 utils/adt/float.c:1220 +#: utils/adt/array_userfuncs.c:120 utils/adt/array_userfuncs.c:174 +#: utils/adt/arrayfuncs.c:1325 utils/adt/float.c:1161 utils/adt/float.c:1220 #: utils/adt/float.c:2771 utils/adt/float.c:2787 utils/adt/int.c:623 #: utils/adt/int.c:652 utils/adt/int.c:673 utils/adt/int.c:704 #: utils/adt/int.c:737 utils/adt/int.c:759 utils/adt/int.c:907 #: utils/adt/int.c:928 utils/adt/int.c:955 utils/adt/int.c:995 #: utils/adt/int.c:1016 utils/adt/int.c:1043 utils/adt/int.c:1076 -#: utils/adt/int.c:1159 utils/adt/int8.c:1298 utils/adt/numeric.c:2305 -#: utils/adt/numeric.c:2314 utils/adt/varbit.c:1173 utils/adt/varbit.c:1565 -#: utils/adt/varlena.c:1013 utils/adt/varlena.c:2036 +#: utils/adt/int.c:1159 utils/adt/int8.c:1298 utils/adt/numeric.c:2903 +#: utils/adt/numeric.c:2912 utils/adt/varbit.c:1173 utils/adt/varbit.c:1565 +#: utils/adt/varlena.c:1045 utils/adt/varlena.c:2582 #, c-format msgid "integer out of range" msgstr "целое вне диапазона" -#: utils/adt/array_userfuncs.c:121 +#: utils/adt/array_userfuncs.c:127 utils/adt/array_userfuncs.c:184 #, c-format msgid "argument must be empty or one-dimensional array" -msgstr "аргумент должен быть одномерным массивов или пустым" +msgstr "аргумент должен быть одномерным массивом или пустым" -#: utils/adt/array_userfuncs.c:224 utils/adt/array_userfuncs.c:263 -#: utils/adt/array_userfuncs.c:300 utils/adt/array_userfuncs.c:329 -#: utils/adt/array_userfuncs.c:357 +#: utils/adt/array_userfuncs.c:266 utils/adt/array_userfuncs.c:305 +#: utils/adt/array_userfuncs.c:342 utils/adt/array_userfuncs.c:371 +#: utils/adt/array_userfuncs.c:399 #, c-format msgid "cannot concatenate incompatible arrays" msgstr "соединять несовместимые массивы нельзя" -#: utils/adt/array_userfuncs.c:225 +#: utils/adt/array_userfuncs.c:267 #, c-format msgid "" "Arrays with element types %s and %s are not compatible for concatenation." msgstr "Массивы с элементами типов %s и %s несовместимы для соединения." -#: utils/adt/array_userfuncs.c:264 +#: utils/adt/array_userfuncs.c:306 #, c-format msgid "Arrays of %d and %d dimensions are not compatible for concatenation." msgstr "Массивы с размерностями %d и %d несовместимы для соединения." -#: utils/adt/array_userfuncs.c:301 +#: utils/adt/array_userfuncs.c:343 #, c-format msgid "" "Arrays with differing element dimensions are not compatible for " "concatenation." msgstr "Массивы с разными размерностями элементов несовместимы для соединения." -#: utils/adt/array_userfuncs.c:330 utils/adt/array_userfuncs.c:358 +#: utils/adt/array_userfuncs.c:372 utils/adt/array_userfuncs.c:400 #, c-format msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "Массивы с разными размерностями несовместимы для соединения." -#: utils/adt/array_userfuncs.c:426 utils/adt/arrayfuncs.c:1271 -#: utils/adt/arrayfuncs.c:2957 utils/adt/arrayfuncs.c:4982 +#: utils/adt/array_userfuncs.c:468 utils/adt/arrayfuncs.c:1287 +#: utils/adt/arrayfuncs.c:3331 utils/adt/arrayfuncs.c:5738 #, c-format msgid "invalid number of dimensions: %d" msgstr "неверное число размерностей: %d" -#: utils/adt/array_userfuncs.c:487 utils/adt/json.c:1698 utils/adt/json.c:1793 -#: utils/adt/json.c:1824 +#: utils/adt/array_userfuncs.c:725 utils/adt/array_userfuncs.c:876 #, c-format -msgid "could not determine input data type" -msgstr "не удалось определить тип входных данных" +msgid "searching for elements in multidimensional arrays is not supported" +msgstr "поиск элементов в многомерных массивах не поддерживается" + +#: utils/adt/array_userfuncs.c:749 +#, c-format +msgid "initial position should not be NULL" +msgstr "начальная позиция не может быть NULL" -#: utils/adt/arrayfuncs.c:241 utils/adt/arrayfuncs.c:255 -#: utils/adt/arrayfuncs.c:266 utils/adt/arrayfuncs.c:288 -#: utils/adt/arrayfuncs.c:303 utils/adt/arrayfuncs.c:317 -#: utils/adt/arrayfuncs.c:323 utils/adt/arrayfuncs.c:330 -#: utils/adt/arrayfuncs.c:461 utils/adt/arrayfuncs.c:477 -#: utils/adt/arrayfuncs.c:488 utils/adt/arrayfuncs.c:503 -#: utils/adt/arrayfuncs.c:524 utils/adt/arrayfuncs.c:554 -#: utils/adt/arrayfuncs.c:561 utils/adt/arrayfuncs.c:569 -#: utils/adt/arrayfuncs.c:603 utils/adt/arrayfuncs.c:626 -#: utils/adt/arrayfuncs.c:646 utils/adt/arrayfuncs.c:758 -#: utils/adt/arrayfuncs.c:767 utils/adt/arrayfuncs.c:797 -#: utils/adt/arrayfuncs.c:812 utils/adt/arrayfuncs.c:865 +#: utils/adt/arrayfuncs.c:271 utils/adt/arrayfuncs.c:285 +#: utils/adt/arrayfuncs.c:296 utils/adt/arrayfuncs.c:318 +#: utils/adt/arrayfuncs.c:333 utils/adt/arrayfuncs.c:347 +#: utils/adt/arrayfuncs.c:353 utils/adt/arrayfuncs.c:360 +#: utils/adt/arrayfuncs.c:491 utils/adt/arrayfuncs.c:507 +#: utils/adt/arrayfuncs.c:518 utils/adt/arrayfuncs.c:533 +#: utils/adt/arrayfuncs.c:554 utils/adt/arrayfuncs.c:584 +#: utils/adt/arrayfuncs.c:591 utils/adt/arrayfuncs.c:599 +#: utils/adt/arrayfuncs.c:633 utils/adt/arrayfuncs.c:656 +#: utils/adt/arrayfuncs.c:676 utils/adt/arrayfuncs.c:788 +#: utils/adt/arrayfuncs.c:797 utils/adt/arrayfuncs.c:827 +#: utils/adt/arrayfuncs.c:842 utils/adt/arrayfuncs.c:895 #, c-format msgid "malformed array literal: \"%s\"" msgstr "ошибочный литерал массива: \"%s\"" -#: utils/adt/arrayfuncs.c:242 +#: utils/adt/arrayfuncs.c:272 #, c-format msgid "\"[\" must introduce explicitly-specified array dimensions." msgstr "За \"[\" должны следовать явно задаваемые размерности массива." -#: utils/adt/arrayfuncs.c:256 +#: utils/adt/arrayfuncs.c:286 #, c-format msgid "Missing array dimension value." msgstr "Отсутствует значение размерности массива." -#: utils/adt/arrayfuncs.c:267 utils/adt/arrayfuncs.c:304 +#: utils/adt/arrayfuncs.c:297 utils/adt/arrayfuncs.c:334 #, c-format msgid "Missing \"%s\" after array dimensions." msgstr "После размерностей массива отсутствует \"%s\"." -#: utils/adt/arrayfuncs.c:276 utils/adt/arrayfuncs.c:2482 -#: utils/adt/arrayfuncs.c:2510 utils/adt/arrayfuncs.c:2525 +#: utils/adt/arrayfuncs.c:306 utils/adt/arrayfuncs.c:2848 +#: utils/adt/arrayfuncs.c:2876 utils/adt/arrayfuncs.c:2891 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "верхняя граница не может быть меньше нижней" -#: utils/adt/arrayfuncs.c:289 +#: utils/adt/arrayfuncs.c:319 #, c-format msgid "Array value must start with \"{\" or dimension information." msgstr "Значение массива должно начинаться с \"{\" или указания размерности." -#: utils/adt/arrayfuncs.c:318 +#: utils/adt/arrayfuncs.c:348 #, c-format msgid "Array contents must start with \"{\"." msgstr "Содержимое массива должно начинаться с \"{\"." -#: utils/adt/arrayfuncs.c:324 utils/adt/arrayfuncs.c:331 +#: utils/adt/arrayfuncs.c:354 utils/adt/arrayfuncs.c:361 #, c-format msgid "Specified array dimensions do not match array contents." msgstr "Указанные размерности массива не соответствуют его содержимому." -#: utils/adt/arrayfuncs.c:462 utils/adt/arrayfuncs.c:489 -#: utils/adt/rangetypes.c:2083 utils/adt/rangetypes.c:2091 +#: utils/adt/arrayfuncs.c:492 utils/adt/arrayfuncs.c:519 +#: utils/adt/rangetypes.c:2111 utils/adt/rangetypes.c:2119 #: utils/adt/rowtypes.c:208 utils/adt/rowtypes.c:216 #, c-format msgid "Unexpected end of input." msgstr "Неожиданный конец ввода." -#: utils/adt/arrayfuncs.c:478 utils/adt/arrayfuncs.c:525 -#: utils/adt/arrayfuncs.c:555 utils/adt/arrayfuncs.c:604 +#: utils/adt/arrayfuncs.c:508 utils/adt/arrayfuncs.c:555 +#: utils/adt/arrayfuncs.c:585 utils/adt/arrayfuncs.c:634 #, c-format msgid "Unexpected \"%c\" character." msgstr "Неожиданный знак \"%c\"." -#: utils/adt/arrayfuncs.c:504 utils/adt/arrayfuncs.c:627 +#: utils/adt/arrayfuncs.c:534 utils/adt/arrayfuncs.c:657 #, c-format msgid "Unexpected array element." msgstr "Неожиданный элемент массива." -#: utils/adt/arrayfuncs.c:562 +#: utils/adt/arrayfuncs.c:592 #, c-format msgid "Unmatched \"%c\" character." msgstr "Непарный знак \"%c\"." -#: utils/adt/arrayfuncs.c:570 +#: utils/adt/arrayfuncs.c:600 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "" "Для многомерных массивов должны задаваться вложенные массивы с " "соответствующими размерностями." -#: utils/adt/arrayfuncs.c:647 +#: utils/adt/arrayfuncs.c:677 #, c-format msgid "Junk after closing right brace." msgstr "Мусор после закрывающей фигурной скобки." -#: utils/adt/arrayfuncs.c:904 utils/adt/arrayfuncs.c:1506 -#: utils/adt/arrayfuncs.c:2841 utils/adt/arrayfuncs.c:2989 -#: utils/adt/arrayfuncs.c:5082 utils/adt/arrayfuncs.c:5414 -#: utils/adt/arrayutils.c:93 utils/adt/arrayutils.c:102 -#: utils/adt/arrayutils.c:109 -#, c-format -msgid "array size exceeds the maximum allowed (%d)" -msgstr "размер массива превышает предел (%d)" - -#: utils/adt/arrayfuncs.c:1282 +#: utils/adt/arrayfuncs.c:1298 #, c-format msgid "invalid array flags" msgstr "неверные флаги массива" -#: utils/adt/arrayfuncs.c:1290 +#: utils/adt/arrayfuncs.c:1306 #, c-format msgid "wrong element type" msgstr "неверный тип элемента" -#: utils/adt/arrayfuncs.c:1340 utils/adt/rangetypes.c:325 -#: utils/cache/lsyscache.c:2549 +#: utils/adt/arrayfuncs.c:1356 utils/adt/rangetypes.c:325 +#: utils/cache/lsyscache.c:2586 #, c-format msgid "no binary input function available for type %s" msgstr "для типа %s нет функции ввода двоичных данных" -#: utils/adt/arrayfuncs.c:1480 +#: utils/adt/arrayfuncs.c:1496 #, c-format msgid "improper binary format in array element %d" msgstr "неподходящий двоичный формат в элементе массива %d" -#: utils/adt/arrayfuncs.c:1562 utils/adt/rangetypes.c:330 -#: utils/cache/lsyscache.c:2582 +#: utils/adt/arrayfuncs.c:1577 utils/adt/rangetypes.c:330 +#: utils/cache/lsyscache.c:2619 #, c-format msgid "no binary output function available for type %s" msgstr "для типа %s нет функции вывода двоичных данных" -#: utils/adt/arrayfuncs.c:1949 +#: utils/adt/arrayfuncs.c:2048 #, c-format msgid "slices of fixed-length arrays not implemented" msgstr "разрезание массивов постоянной длины не поддерживается" -#: utils/adt/arrayfuncs.c:2122 utils/adt/arrayfuncs.c:2144 -#: utils/adt/arrayfuncs.c:2178 utils/adt/arrayfuncs.c:2464 -#: utils/adt/arrayfuncs.c:4962 utils/adt/arrayfuncs.c:4994 -#: utils/adt/arrayfuncs.c:5011 utils/adt/json.c:2215 utils/adt/json.c:2290 +#: utils/adt/arrayfuncs.c:2226 utils/adt/arrayfuncs.c:2248 +#: utils/adt/arrayfuncs.c:2297 utils/adt/arrayfuncs.c:2533 +#: utils/adt/arrayfuncs.c:2830 utils/adt/arrayfuncs.c:5718 +#: utils/adt/arrayfuncs.c:5750 utils/adt/arrayfuncs.c:5767 +#: utils/adt/json.c:2263 utils/adt/json.c:2338 utils/adt/jsonb.c:1382 +#: utils/adt/jsonb.c:1468 utils/adt/jsonfuncs.c:3522 +#: utils/adt/jsonfuncs.c:3567 #, c-format msgid "wrong number of array subscripts" msgstr "неверное число индексов массива" -#: utils/adt/arrayfuncs.c:2127 utils/adt/arrayfuncs.c:2220 -#: utils/adt/arrayfuncs.c:2515 +#: utils/adt/arrayfuncs.c:2231 utils/adt/arrayfuncs.c:2339 +#: utils/adt/arrayfuncs.c:2597 utils/adt/arrayfuncs.c:2881 #, c-format msgid "array subscript out of range" msgstr "индекс массива вне диапазона" -#: utils/adt/arrayfuncs.c:2132 +#: utils/adt/arrayfuncs.c:2236 #, c-format msgid "cannot assign null value to an element of a fixed-length array" msgstr "нельзя присвоить значение null элементу массива фиксированной длины" -#: utils/adt/arrayfuncs.c:2418 +#: utils/adt/arrayfuncs.c:2784 #, c-format msgid "updates on slices of fixed-length arrays not implemented" msgstr "изменения в срезах массивов фиксированной длины не поддерживаются" -#: utils/adt/arrayfuncs.c:2454 utils/adt/arrayfuncs.c:2541 +#: utils/adt/arrayfuncs.c:2820 utils/adt/arrayfuncs.c:2907 #, c-format msgid "source array too small" msgstr "исходный массив слишком мал" -#: utils/adt/arrayfuncs.c:3096 +#: utils/adt/arrayfuncs.c:3487 #, c-format msgid "null array element not allowed in this context" msgstr "элемент массива null недопустим в данном контексте" -#: utils/adt/arrayfuncs.c:3199 utils/adt/arrayfuncs.c:3407 -#: utils/adt/arrayfuncs.c:3724 +#: utils/adt/arrayfuncs.c:3589 utils/adt/arrayfuncs.c:3760 +#: utils/adt/arrayfuncs.c:4034 #, c-format msgid "cannot compare arrays of different element types" msgstr "нельзя сравнивать массивы с элементами разных типов" -#: utils/adt/arrayfuncs.c:3609 utils/adt/rangetypes.c:1212 +#: utils/adt/arrayfuncs.c:3936 utils/adt/rangetypes.c:1240 #, c-format msgid "could not identify a hash function for type %s" msgstr "не удалось найти функцию хэширования для типа %s" -#: utils/adt/arrayfuncs.c:4860 utils/adt/arrayfuncs.c:4900 +#: utils/adt/arrayfuncs.c:5130 +#, c-format +msgid "data type %s is not an array type" +msgstr "тип данных %s не является типом массива" + +#: utils/adt/arrayfuncs.c:5187 +#, c-format +msgid "cannot accumulate null arrays" +msgstr "аккумулировать NULL-массивы нельзя" + +#: utils/adt/arrayfuncs.c:5215 +#, c-format +msgid "cannot accumulate empty arrays" +msgstr "аккумулировать пустые массивы нельзя" + +#: utils/adt/arrayfuncs.c:5244 utils/adt/arrayfuncs.c:5250 +#, c-format +msgid "cannot accumulate arrays of different dimensionality" +msgstr "аккумулировать массивы различной размерности нельзя" + +#: utils/adt/arrayfuncs.c:5616 utils/adt/arrayfuncs.c:5656 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "массив размерностей или массив нижних границ не может быть null" -#: utils/adt/arrayfuncs.c:4963 utils/adt/arrayfuncs.c:4995 +#: utils/adt/arrayfuncs.c:5719 utils/adt/arrayfuncs.c:5751 #, c-format msgid "Dimension array must be one dimensional." msgstr "Массив размерностей должен быть одномерным." -#: utils/adt/arrayfuncs.c:4968 utils/adt/arrayfuncs.c:5000 +#: utils/adt/arrayfuncs.c:5724 utils/adt/arrayfuncs.c:5756 #, c-format msgid "wrong range of array subscripts" msgstr "неправильный диапазон индексов массивов" -#: utils/adt/arrayfuncs.c:4969 utils/adt/arrayfuncs.c:5001 +#: utils/adt/arrayfuncs.c:5725 utils/adt/arrayfuncs.c:5757 #, c-format msgid "Lower bound of dimension array must be one." msgstr "Нижняя граница массива размерностей должна быть равна 1." -#: utils/adt/arrayfuncs.c:4974 utils/adt/arrayfuncs.c:5006 +#: utils/adt/arrayfuncs.c:5730 utils/adt/arrayfuncs.c:5762 #, c-format msgid "dimension values cannot be null" msgstr "значения размерностей не могут быть null" -#: utils/adt/arrayfuncs.c:5012 +#: utils/adt/arrayfuncs.c:5768 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "Массив нижних границ и массив размерностей имеют разные размеры." -#: utils/adt/arrayfuncs.c:5279 +#: utils/adt/arrayfuncs.c:6014 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "удаление элементов из многомерных массивов не поддерживается" +#: utils/adt/arrayfuncs.c:6291 +#, c-format +msgid "thresholds must be one-dimensional array" +msgstr "границы должны задаваться одномерным массивом" + +#: utils/adt/arrayfuncs.c:6296 +#, c-format +msgid "thresholds array must not contain NULLs" +msgstr "массив границ не должен содержать NULL" + #: utils/adt/arrayutils.c:209 #, c-format msgid "typmod array must be type cstring[]" @@ -17392,12 +18644,12 @@ msgstr "неверный синтаксис для типа money: \"%s\"" #: utils/adt/cash.c:607 utils/adt/cash.c:657 utils/adt/cash.c:708 #: utils/adt/cash.c:757 utils/adt/cash.c:809 utils/adt/cash.c:859 #: utils/adt/float.c:788 utils/adt/float.c:852 utils/adt/float.c:2530 -#: utils/adt/float.c:2593 utils/adt/geo_ops.c:4115 utils/adt/int.c:719 +#: utils/adt/float.c:2593 utils/adt/geo_ops.c:4152 utils/adt/int.c:719 #: utils/adt/int.c:861 utils/adt/int.c:969 utils/adt/int.c:1058 #: utils/adt/int.c:1097 utils/adt/int.c:1125 utils/adt/int8.c:597 #: utils/adt/int8.c:657 utils/adt/int8.c:897 utils/adt/int8.c:1005 -#: utils/adt/int8.c:1094 utils/adt/int8.c:1202 utils/adt/numeric.c:4962 -#: utils/adt/numeric.c:5245 utils/adt/timestamp.c:3357 +#: utils/adt/int8.c:1094 utils/adt/int8.c:1202 utils/adt/numeric.c:5908 +#: utils/adt/numeric.c:6191 utils/adt/timestamp.c:3350 #, c-format msgid "division by zero" msgstr "деление на ноль" @@ -17407,7 +18659,7 @@ msgstr "деление на ноль" msgid "\"char\" out of range" msgstr "значение \"char\" вне диапазона" -#: utils/adt/date.c:68 utils/adt/timestamp.c:102 utils/adt/varbit.c:52 +#: utils/adt/date.c:68 utils/adt/timestamp.c:95 utils/adt/varbit.c:52 #: utils/adt/varchar.c:44 #, c-format msgid "invalid type modifier" @@ -17433,17 +18685,17 @@ msgstr "значение \"current\" для даты/времени больше msgid "date out of range: \"%s\"" msgstr "дата вне диапазона: \"%s\"" -#: utils/adt/date.c:217 utils/adt/xml.c:2025 +#: utils/adt/date.c:217 utils/adt/xml.c:2029 #, c-format msgid "date out of range" msgstr "дата вне диапазона" -#: utils/adt/date.c:259 utils/adt/timestamp.c:600 +#: utils/adt/date.c:259 utils/adt/timestamp.c:593 #, c-format msgid "date field value out of range: %d-%02d-%02d" msgstr "значение поля типа date вне диапазона: %d-%02d-%02d" -#: utils/adt/date.c:265 utils/adt/timestamp.c:606 +#: utils/adt/date.c:265 utils/adt/timestamp.c:599 #, c-format msgid "date out of range: %d-%02d-%02d" msgstr "дата вне диапазона: %d-%02d-%02d" @@ -17461,25 +18713,26 @@ msgstr "дата вне диапазона для типа timestamp" #: utils/adt/date.c:971 utils/adt/date.c:1017 utils/adt/date.c:1617 #: utils/adt/date.c:1653 utils/adt/date.c:2525 utils/adt/formatting.c:3399 #: utils/adt/formatting.c:3431 utils/adt/formatting.c:3499 -#: utils/adt/json.c:1469 utils/adt/json.c:1496 utils/adt/nabstime.c:455 -#: utils/adt/nabstime.c:498 utils/adt/nabstime.c:528 utils/adt/nabstime.c:571 -#: utils/adt/timestamp.c:232 utils/adt/timestamp.c:275 -#: utils/adt/timestamp.c:724 utils/adt/timestamp.c:753 -#: utils/adt/timestamp.c:792 utils/adt/timestamp.c:2946 -#: utils/adt/timestamp.c:2967 utils/adt/timestamp.c:2980 -#: utils/adt/timestamp.c:2989 utils/adt/timestamp.c:3046 -#: utils/adt/timestamp.c:3069 utils/adt/timestamp.c:3082 -#: utils/adt/timestamp.c:3093 utils/adt/timestamp.c:3618 -#: utils/adt/timestamp.c:3747 utils/adt/timestamp.c:3788 -#: utils/adt/timestamp.c:3876 utils/adt/timestamp.c:3922 -#: utils/adt/timestamp.c:4033 utils/adt/timestamp.c:4357 -#: utils/adt/timestamp.c:4496 utils/adt/timestamp.c:4506 -#: utils/adt/timestamp.c:4568 utils/adt/timestamp.c:4708 -#: utils/adt/timestamp.c:4718 utils/adt/timestamp.c:4932 -#: utils/adt/timestamp.c:4946 utils/adt/timestamp.c:5025 -#: utils/adt/timestamp.c:5032 utils/adt/timestamp.c:5058 -#: utils/adt/timestamp.c:5062 utils/adt/timestamp.c:5131 utils/adt/xml.c:2047 -#: utils/adt/xml.c:2054 utils/adt/xml.c:2074 utils/adt/xml.c:2081 +#: utils/adt/json.c:1517 utils/adt/json.c:1544 utils/adt/jsonb.c:831 +#: utils/adt/jsonb.c:860 utils/adt/nabstime.c:455 utils/adt/nabstime.c:498 +#: utils/adt/nabstime.c:528 utils/adt/nabstime.c:571 utils/adt/timestamp.c:225 +#: utils/adt/timestamp.c:268 utils/adt/timestamp.c:717 +#: utils/adt/timestamp.c:746 utils/adt/timestamp.c:785 +#: utils/adt/timestamp.c:2939 utils/adt/timestamp.c:2960 +#: utils/adt/timestamp.c:2973 utils/adt/timestamp.c:2982 +#: utils/adt/timestamp.c:3039 utils/adt/timestamp.c:3062 +#: utils/adt/timestamp.c:3075 utils/adt/timestamp.c:3086 +#: utils/adt/timestamp.c:3611 utils/adt/timestamp.c:3740 +#: utils/adt/timestamp.c:3781 utils/adt/timestamp.c:3869 +#: utils/adt/timestamp.c:3915 utils/adt/timestamp.c:4026 +#: utils/adt/timestamp.c:4350 utils/adt/timestamp.c:4489 +#: utils/adt/timestamp.c:4499 utils/adt/timestamp.c:4561 +#: utils/adt/timestamp.c:4701 utils/adt/timestamp.c:4711 +#: utils/adt/timestamp.c:5006 utils/adt/timestamp.c:5020 +#: utils/adt/timestamp.c:5145 utils/adt/timestamp.c:5152 +#: utils/adt/timestamp.c:5178 utils/adt/timestamp.c:5182 +#: utils/adt/timestamp.c:5251 utils/adt/xml.c:2051 utils/adt/xml.c:2058 +#: utils/adt/xml.c:2078 utils/adt/xml.c:2085 #, c-format msgid "timestamp out of range" msgstr "timestamp вне диапазона" @@ -17495,7 +18748,7 @@ msgstr "преобразовать зарезервированное значе msgid "time out of range" msgstr "время вне диапазона" -#: utils/adt/date.c:1265 utils/adt/timestamp.c:625 +#: utils/adt/date.c:1265 utils/adt/timestamp.c:618 #, c-format msgid "time field value out of range: %d:%02d:%02g" msgstr "значение поля типа time вне диапазона: %d:%02d:%02g" @@ -17516,14 +18769,14 @@ msgid "\"time with time zone\" units \"%s\" not recognized" msgstr "\"время с часовым поясом\" содержит нераспознанные единицы \"%s\"" #: utils/adt/date.c:2745 utils/adt/datetime.c:925 utils/adt/datetime.c:1805 -#: utils/adt/datetime.c:4566 utils/adt/timestamp.c:539 -#: utils/adt/timestamp.c:566 utils/adt/timestamp.c:4958 -#: utils/adt/timestamp.c:5142 +#: utils/adt/datetime.c:4566 utils/adt/timestamp.c:532 +#: utils/adt/timestamp.c:559 utils/adt/timestamp.c:5032 +#: utils/adt/timestamp.c:5262 #, c-format msgid "time zone \"%s\" not recognized" msgstr "часовой пояс \"%s\" не распознан" -#: utils/adt/date.c:2785 utils/adt/timestamp.c:4983 utils/adt/timestamp.c:5168 +#: utils/adt/date.c:2785 utils/adt/timestamp.c:5103 utils/adt/timestamp.c:5288 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "" @@ -17571,7 +18824,7 @@ msgstr "" "Это имя часового пояса фигурирует в файле конфигурации часового пояса с " "кодом \"%s\"." -#: utils/adt/datum.c:80 utils/adt/datum.c:92 +#: utils/adt/datum.c:86 utils/adt/datum.c:98 #, c-format msgid "invalid Datum pointer" msgstr "неверный указатель Datum" @@ -17581,7 +18834,7 @@ msgstr "неверный указатель Datum" msgid "could not open tablespace directory \"%s\": %m" msgstr "не удалось открыть каталог табличного пространства \"%s\": %m" -#: utils/adt/domains.c:83 +#: utils/adt/domains.c:85 #, c-format msgid "type %s is not a domain" msgstr "тип \"%s\" не является доменом" @@ -17603,21 +18856,27 @@ msgstr "неверные шестнадцатеричные данные: неч #: utils/adt/encode.c:295 #, c-format -msgid "unexpected \"=\"" -msgstr "неожиданный знак \"=\"" +msgid "unexpected \"=\" while decoding base64 sequence" +msgstr "неожиданный знак \"=\" при декодировании base64" #: utils/adt/encode.c:307 #, c-format -msgid "invalid symbol" -msgstr "неверный символ" +msgid "invalid symbol '%c' while decoding base64 sequence" +msgstr "неверный символ '%c' при декодировании base64" #: utils/adt/encode.c:327 #, c-format -msgid "invalid end sequence" -msgstr "неверная конечная последовательность" +msgid "invalid base64 end sequence" +msgstr "неверная конечная последовательность base64" + +#: utils/adt/encode.c:328 +#, c-format +msgid "Input data is missing padding, truncated, or otherwise corrupted." +msgstr "" +"Входные данные лишены выравнивания, обрезаны или повреждены иным образом." -#: utils/adt/encode.c:441 utils/adt/encode.c:506 utils/adt/varlena.c:255 -#: utils/adt/varlena.c:296 +#: utils/adt/encode.c:442 utils/adt/encode.c:507 utils/adt/varlena.c:287 +#: utils/adt/varlena.c:328 #, c-format msgid "invalid input syntax for type bytea" msgstr "неверный синтаксис для типа bytea" @@ -17633,13 +18892,13 @@ msgstr "неверное значение для перечисления %s: \" msgid "invalid internal value for enum: %u" msgstr "неверное внутреннее значение для перечисления: %u" -#: utils/adt/enum.c:357 utils/adt/enum.c:386 utils/adt/enum.c:426 -#: utils/adt/enum.c:446 +#: utils/adt/enum.c:356 utils/adt/enum.c:385 utils/adt/enum.c:425 +#: utils/adt/enum.c:445 #, c-format msgid "could not determine actual enum type" msgstr "не удалось определить фактический тип перечисления" -#: utils/adt/enum.c:365 utils/adt/enum.c:394 +#: utils/adt/enum.c:364 utils/adt/enum.c:393 #, c-format msgid "enum %s contains no values" msgstr "перечисление %s не содержит значений" @@ -17665,7 +18924,7 @@ msgid "\"%s\" is out of range for type real" msgstr "\"%s\" вне диапазона для типа real" #: utils/adt/float.c:417 utils/adt/float.c:491 utils/adt/float.c:515 -#: utils/adt/numeric.c:4424 utils/adt/numeric.c:4450 +#: utils/adt/numeric.c:5370 utils/adt/numeric.c:5396 #, c-format msgid "invalid input syntax for type double precision: \"%s\"" msgstr "неверный синтаксис для типа double precision: \"%s\"" @@ -17678,32 +18937,32 @@ msgstr "\"%s\" вне диапазона для типа double precision" #: utils/adt/float.c:1179 utils/adt/float.c:1237 utils/adt/int.c:349 #: utils/adt/int.c:775 utils/adt/int.c:804 utils/adt/int.c:825 #: utils/adt/int.c:845 utils/adt/int.c:879 utils/adt/int.c:1174 -#: utils/adt/int8.c:1323 utils/adt/numeric.c:2402 utils/adt/numeric.c:2411 +#: utils/adt/int8.c:1323 utils/adt/numeric.c:3000 utils/adt/numeric.c:3009 #, c-format msgid "smallint out of range" msgstr "smallint вне диапазона" -#: utils/adt/float.c:1363 utils/adt/numeric.c:5638 +#: utils/adt/float.c:1363 utils/adt/numeric.c:6584 #, c-format msgid "cannot take square root of a negative number" msgstr "извлечь квадратный корень отрицательного числа нельзя" -#: utils/adt/float.c:1405 utils/adt/numeric.c:2222 +#: utils/adt/float.c:1405 utils/adt/numeric.c:2820 #, c-format msgid "zero raised to a negative power is undefined" msgstr "ноль в отрицательной степени даёт неопределённость" -#: utils/adt/float.c:1409 utils/adt/numeric.c:2228 +#: utils/adt/float.c:1409 utils/adt/numeric.c:2826 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "отрицательное число в дробной степени даёт комплексный результат" -#: utils/adt/float.c:1475 utils/adt/float.c:1505 utils/adt/numeric.c:5856 +#: utils/adt/float.c:1475 utils/adt/float.c:1505 utils/adt/numeric.c:6802 #, c-format msgid "cannot take logarithm of zero" msgstr "вычислить логарифм нуля нельзя" -#: utils/adt/float.c:1479 utils/adt/float.c:1509 utils/adt/numeric.c:5860 +#: utils/adt/float.c:1479 utils/adt/float.c:1509 utils/adt/numeric.c:6806 #, c-format msgid "cannot take logarithm of a negative number" msgstr "вычислить логарифм отрицательного числа нельзя" @@ -17715,12 +18974,12 @@ msgstr "вычислить логарифм отрицательного чис msgid "input is out of range" msgstr "введённое значение вне диапазона" -#: utils/adt/float.c:2747 utils/adt/numeric.c:1275 +#: utils/adt/float.c:2747 utils/adt/numeric.c:1454 #, c-format msgid "count must be greater than zero" msgstr "счётчик должен быть больше нуля" -#: utils/adt/float.c:2752 utils/adt/numeric.c:1282 +#: utils/adt/float.c:2752 utils/adt/numeric.c:1461 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "операнд, нижняя и верхняя границы не могут быть NaN" @@ -17730,7 +18989,7 @@ msgstr "операнд, нижняя и верхняя границы не мо msgid "lower and upper bounds must be finite" msgstr "нижняя и верхняя границы должны быть конечными" -#: utils/adt/float.c:2796 utils/adt/numeric.c:1295 +#: utils/adt/float.c:2796 utils/adt/numeric.c:1474 #, c-format msgid "lower bound cannot equal upper bound" msgstr "нижняя граница не может равняться верхней" @@ -17962,172 +19221,171 @@ msgstr "\"EEEE\" не поддерживается при вводе" msgid "\"RN\" not supported for input" msgstr "\"RN\" не поддерживается при вводе" -#: utils/adt/genfile.c:61 +#: utils/adt/genfile.c:62 #, c-format msgid "reference to parent directory (\"..\") not allowed" msgstr "ссылка на родительский каталог (\"..\") недопустима" -#: utils/adt/genfile.c:72 +#: utils/adt/genfile.c:73 #, c-format msgid "absolute path not allowed" msgstr "абсолютный путь недопустим" -#: utils/adt/genfile.c:77 +#: utils/adt/genfile.c:78 #, c-format msgid "path must be in or below the current directory" msgstr "путь должен указывать в текущий или вложенный каталог" -#: utils/adt/genfile.c:118 utils/adt/oracle_compat.c:184 +#: utils/adt/genfile.c:125 utils/adt/oracle_compat.c:184 #: utils/adt/oracle_compat.c:282 utils/adt/oracle_compat.c:758 #: utils/adt/oracle_compat.c:1059 #, c-format msgid "requested length too large" msgstr "запрошенная длина слишком велика" -#: utils/adt/genfile.c:130 +#: utils/adt/genfile.c:142 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "не удалось переместиться в файле \"%s\": %m" -#: utils/adt/genfile.c:180 utils/adt/genfile.c:204 utils/adt/genfile.c:225 -#: utils/adt/genfile.c:249 +#: utils/adt/genfile.c:200 utils/adt/genfile.c:241 #, c-format msgid "must be superuser to read files" msgstr "читать файлы может только суперпользователь" -#: utils/adt/genfile.c:273 +#: utils/adt/genfile.c:318 #, c-format msgid "must be superuser to get file information" msgstr "получать информацию о файлах может только суперпользователь" -#: utils/adt/genfile.c:337 +#: utils/adt/genfile.c:404 #, c-format msgid "must be superuser to get directory listings" msgstr "читать содержимое каталогов может только суперпользователь" -#: utils/adt/geo_ops.c:299 utils/adt/geo_ops.c:1398 utils/adt/geo_ops.c:3460 -#: utils/adt/geo_ops.c:4236 utils/adt/geo_ops.c:5165 +#: utils/adt/geo_ops.c:300 utils/adt/geo_ops.c:1399 utils/adt/geo_ops.c:3497 +#: utils/adt/geo_ops.c:4312 utils/adt/geo_ops.c:5256 #, c-format msgid "too many points requested" msgstr "запрошено слишком много точек" -#: utils/adt/geo_ops.c:322 +#: utils/adt/geo_ops.c:323 #, c-format msgid "could not format \"path\" value" msgstr "не удалось отформатировать значение \"path\"" -#: utils/adt/geo_ops.c:397 +#: utils/adt/geo_ops.c:398 #, c-format msgid "invalid input syntax for type box: \"%s\"" msgstr "неверный синтаксис для типа box: \"%s\"" -#: utils/adt/geo_ops.c:992 +#: utils/adt/geo_ops.c:993 #, c-format msgid "invalid line specification: must be two distinct points" msgstr "неверное определение линии: требуются две различных точки" -#: utils/adt/geo_ops.c:1001 +#: utils/adt/geo_ops.c:1002 #, c-format msgid "invalid line specification: A and B cannot both be zero" msgstr "неверное определение линии: A и B вдвоём не могут быть нулевыми" -#: utils/adt/geo_ops.c:1006 +#: utils/adt/geo_ops.c:1007 #, c-format msgid "invalid input syntax for type line: \"%s\"" msgstr "неверный синтаксис для типа line: \"%s\"" -#: utils/adt/geo_ops.c:1378 utils/adt/geo_ops.c:1409 +#: utils/adt/geo_ops.c:1379 utils/adt/geo_ops.c:1410 #, c-format msgid "invalid input syntax for type path: \"%s\"" msgstr "неверный синтаксис для типа path: \"%s\"" -#: utils/adt/geo_ops.c:1448 +#: utils/adt/geo_ops.c:1449 #, c-format msgid "invalid number of points in external \"path\" value" msgstr "недопустимое число точек во внешнем представлении типа \"path\"" -#: utils/adt/geo_ops.c:1791 +#: utils/adt/geo_ops.c:1792 #, c-format msgid "invalid input syntax for type point: \"%s\"" msgstr "неверный синтаксис для типа point: \"%s\"" -#: utils/adt/geo_ops.c:2019 +#: utils/adt/geo_ops.c:2020 #, c-format msgid "invalid input syntax for type lseg: \"%s\"" msgstr "неверный синтаксис для типа lseg: \"%s\"" -#: utils/adt/geo_ops.c:2623 +#: utils/adt/geo_ops.c:2620 #, c-format msgid "function \"dist_lb\" not implemented" msgstr "функция \"dist_lb\" не реализована" -#: utils/adt/geo_ops.c:3035 +#: utils/adt/geo_ops.c:3072 #, c-format msgid "function \"close_sl\" not implemented" msgstr "функция \"close_sl\" не реализована" -#: utils/adt/geo_ops.c:3137 +#: utils/adt/geo_ops.c:3174 #, c-format msgid "function \"close_lb\" not implemented" msgstr "функция \"close_lb\" не реализована" -#: utils/adt/geo_ops.c:3426 +#: utils/adt/geo_ops.c:3463 #, c-format msgid "cannot create bounding box for empty polygon" msgstr "построить окружающий прямоугольник для пустого многоугольника нельзя" -#: utils/adt/geo_ops.c:3451 utils/adt/geo_ops.c:3471 +#: utils/adt/geo_ops.c:3488 utils/adt/geo_ops.c:3508 #, c-format msgid "invalid input syntax for type polygon: \"%s\"" msgstr "неверный синтаксис для типа polygon: \"%s\"" -#: utils/adt/geo_ops.c:3511 +#: utils/adt/geo_ops.c:3548 #, c-format msgid "invalid number of points in external \"polygon\" value" msgstr "недопустимое число точек во внешнем представлении типа \"polygon\"" -#: utils/adt/geo_ops.c:4034 +#: utils/adt/geo_ops.c:4071 #, c-format msgid "function \"poly_distance\" not implemented" msgstr "функция \"poly_distance\" не реализована" -#: utils/adt/geo_ops.c:4348 +#: utils/adt/geo_ops.c:4424 #, c-format msgid "function \"path_center\" not implemented" msgstr "функция \"path_center\" не реализована" -#: utils/adt/geo_ops.c:4365 +#: utils/adt/geo_ops.c:4441 #, c-format msgid "open path cannot be converted to polygon" msgstr "открытый путь нельзя преобразовать во многоугольник" -#: utils/adt/geo_ops.c:4542 utils/adt/geo_ops.c:4552 utils/adt/geo_ops.c:4567 -#: utils/adt/geo_ops.c:4573 +#: utils/adt/geo_ops.c:4618 utils/adt/geo_ops.c:4628 utils/adt/geo_ops.c:4643 +#: utils/adt/geo_ops.c:4649 #, c-format msgid "invalid input syntax for type circle: \"%s\"" msgstr "неверный синтаксис для типа circle: \"%s\"" -#: utils/adt/geo_ops.c:4595 utils/adt/geo_ops.c:4603 +#: utils/adt/geo_ops.c:4671 utils/adt/geo_ops.c:4679 #, c-format msgid "could not format \"circle\" value" msgstr "не удалось отформатировать значение \"circle\"" -#: utils/adt/geo_ops.c:4630 +#: utils/adt/geo_ops.c:4706 #, c-format msgid "invalid radius in external \"circle\" value" msgstr "недопустимый радиус во внешнем представлении типа \"circle\"" -#: utils/adt/geo_ops.c:5151 +#: utils/adt/geo_ops.c:5242 #, c-format msgid "cannot convert circle with radius zero to polygon" msgstr "круг с нулевым радиусом нельзя преобразовать в многоугольник" -#: utils/adt/geo_ops.c:5156 +#: utils/adt/geo_ops.c:5247 #, c-format msgid "must request at least 2 points" msgstr "точек должно быть минимум 2" -#: utils/adt/geo_ops.c:5200 +#: utils/adt/geo_ops.c:5291 #, c-format msgid "cannot convert empty polygon to circle" msgstr "пустой многоугольник нельзя преобразовать в круг" @@ -18147,8 +19405,8 @@ msgstr "неверные данные int2vector" msgid "oidvector has too many elements" msgstr "oidvector содержит слишком много элементов" -#: utils/adt/int.c:1362 utils/adt/int8.c:1460 utils/adt/timestamp.c:5229 -#: utils/adt/timestamp.c:5310 +#: utils/adt/int.c:1362 utils/adt/int8.c:1460 utils/adt/numeric.c:1362 +#: utils/adt/timestamp.c:5349 utils/adt/timestamp.c:5430 #, c-format msgid "step size cannot equal zero" msgstr "размер шага не может быть нулевым" @@ -18172,7 +19430,7 @@ msgstr "значение \"%s\" вне диапазона для типа bigint #: utils/adt/int8.c:964 utils/adt/int8.c:991 utils/adt/int8.c:1031 #: utils/adt/int8.c:1052 utils/adt/int8.c:1079 utils/adt/int8.c:1112 #: utils/adt/int8.c:1140 utils/adt/int8.c:1161 utils/adt/int8.c:1188 -#: utils/adt/int8.c:1361 utils/adt/int8.c:1400 utils/adt/numeric.c:2357 +#: utils/adt/int8.c:1361 utils/adt/int8.c:1400 utils/adt/numeric.c:2955 #: utils/adt/varbit.c:1645 #, c-format msgid "bigint out of range" @@ -18183,50 +19441,50 @@ msgstr "bigint вне диапазона" msgid "OID out of range" msgstr "OID вне диапазона" -#: utils/adt/json.c:729 utils/adt/json.c:769 utils/adt/json.c:784 -#: utils/adt/json.c:795 utils/adt/json.c:805 utils/adt/json.c:856 -#: utils/adt/json.c:887 utils/adt/json.c:905 utils/adt/json.c:917 -#: utils/adt/json.c:929 utils/adt/json.c:1068 utils/adt/json.c:1082 -#: utils/adt/json.c:1093 utils/adt/json.c:1101 utils/adt/json.c:1109 -#: utils/adt/json.c:1117 utils/adt/json.c:1125 utils/adt/json.c:1133 -#: utils/adt/json.c:1141 utils/adt/json.c:1149 utils/adt/json.c:1179 +#: utils/adt/json.c:767 utils/adt/json.c:807 utils/adt/json.c:822 +#: utils/adt/json.c:833 utils/adt/json.c:843 utils/adt/json.c:894 +#: utils/adt/json.c:925 utils/adt/json.c:943 utils/adt/json.c:955 +#: utils/adt/json.c:967 utils/adt/json.c:1106 utils/adt/json.c:1120 +#: utils/adt/json.c:1131 utils/adt/json.c:1139 utils/adt/json.c:1147 +#: utils/adt/json.c:1155 utils/adt/json.c:1163 utils/adt/json.c:1171 +#: utils/adt/json.c:1179 utils/adt/json.c:1187 utils/adt/json.c:1217 #, c-format msgid "invalid input syntax for type json" msgstr "неверный синтаксис для типа json" -#: utils/adt/json.c:730 +#: utils/adt/json.c:768 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Символ с кодом 0x%02x необходимо экранировать." -#: utils/adt/json.c:770 +#: utils/adt/json.c:808 #, c-format msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "За \"\\u\" должны следовать четыре шестнадцатеричные цифры." -#: utils/adt/json.c:785 +#: utils/adt/json.c:823 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "" "Старшее слово суррогата Unicode не может следовать за другим старшим словом." -#: utils/adt/json.c:796 utils/adt/json.c:806 utils/adt/json.c:857 -#: utils/adt/json.c:918 utils/adt/json.c:930 +#: utils/adt/json.c:834 utils/adt/json.c:844 utils/adt/json.c:895 +#: utils/adt/json.c:956 utils/adt/json.c:968 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Младшее слово суррогата Unicode должно следовать за старшим словом." -#: utils/adt/json.c:821 utils/adt/json.c:844 +#: utils/adt/json.c:859 utils/adt/json.c:882 #, c-format msgid "unsupported Unicode escape sequence" msgstr "неподдерживаемая спецпоследовательность Unicode" -#: utils/adt/json.c:822 +#: utils/adt/json.c:860 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 нельзя преобразовать в текст." -#: utils/adt/json.c:845 +#: utils/adt/json.c:883 #, c-format msgid "" "Unicode escape values cannot be used for code point values above 007F when " @@ -18235,89 +19493,89 @@ msgstr "" "Спецкоды Unicode для значений выше 007F можно использовать только с " "серверной кодировкой UTF8." -#: utils/adt/json.c:888 utils/adt/json.c:906 +#: utils/adt/json.c:926 utils/adt/json.c:944 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "Неверная спецпоследовательность: \"\\%s\"." -#: utils/adt/json.c:1069 +#: utils/adt/json.c:1107 #, c-format msgid "The input string ended unexpectedly." msgstr "Неожиданный конец входной строки." -#: utils/adt/json.c:1083 +#: utils/adt/json.c:1121 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Ожидался конец текста, но обнаружено продолжение \"%s\"." -#: utils/adt/json.c:1094 +#: utils/adt/json.c:1132 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Ожидалось значение JSON, но обнаружено \"%s\"." -#: utils/adt/json.c:1102 utils/adt/json.c:1150 +#: utils/adt/json.c:1140 utils/adt/json.c:1188 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Ожидалась строка, но обнаружено \"%s\"." -#: utils/adt/json.c:1110 +#: utils/adt/json.c:1148 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Ожидался элемент массива или \"]\", но обнаружено \"%s\"." -#: utils/adt/json.c:1118 +#: utils/adt/json.c:1156 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "Ожидалась \",\" или \"]\", но обнаружено \"%s\"." -#: utils/adt/json.c:1126 +#: utils/adt/json.c:1164 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Ожидалась строка или \"}\", но обнаружено \"%s\"." -#: utils/adt/json.c:1134 +#: utils/adt/json.c:1172 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "Ожидалось \":\", но обнаружено \"%s\"." -#: utils/adt/json.c:1142 +#: utils/adt/json.c:1180 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "Ожидалась \",\" или \"}\", но обнаружено \"%s\"." -#: utils/adt/json.c:1180 +#: utils/adt/json.c:1218 #, c-format msgid "Token \"%s\" is invalid." msgstr "Ошибочный элемент текста \"%s\"." -#: utils/adt/json.c:1252 +#: utils/adt/json.c:1290 #, c-format msgid "JSON data, line %d: %s%s%s" msgstr "данные JSON, строка %d: %s%s%s" -#: utils/adt/json.c:1395 +#: utils/adt/json.c:1443 #, c-format msgid "key value must be scalar, not array, composite, or json" msgstr "" "значением ключа должен быть скаляр (не массив, композитный тип или json)" -#: utils/adt/json.c:1955 utils/adt/json.c:1973 utils/adt/json.c:2067 -#: utils/adt/json.c:2088 utils/adt/json.c:2147 +#: utils/adt/json.c:2003 utils/adt/json.c:2021 utils/adt/json.c:2115 +#: utils/adt/json.c:2136 utils/adt/json.c:2195 #, c-format msgid "could not determine data type for argument %d" msgstr "не удалось определить тип данных аргумента %d" -#: utils/adt/json.c:1960 +#: utils/adt/json.c:2008 utils/adt/jsonb.c:1759 #, c-format msgid "field name must not be null" msgstr "имя поля не может быть NULL" -#: utils/adt/json.c:2042 +#: utils/adt/json.c:2090 #, c-format msgid "argument list must have even number of elements" msgstr "в списке аргументов должно быть чётное число элементов" -#: utils/adt/json.c:2043 +#: utils/adt/json.c:2091 #, c-format msgid "" "The arguments of json_build_object() must consist of alternating keys and " @@ -18325,131 +19583,159 @@ msgid "" msgstr "" "Аргументы json_build_object() должны состоять из пар ключей и значений." -#: utils/adt/json.c:2073 +#: utils/adt/json.c:2121 #, c-format msgid "argument %d cannot be null" msgstr "аргумент %d не может быть NULL" -#: utils/adt/json.c:2074 +#: utils/adt/json.c:2122 #, c-format msgid "Object keys should be text." msgstr "Ключи объектов должны быть текстовыми." -#: utils/adt/json.c:2209 +#: utils/adt/json.c:2257 utils/adt/jsonb.c:1376 #, c-format msgid "array must have two columns" msgstr "массив должен иметь две колонки" -#: utils/adt/json.c:2233 utils/adt/json.c:2317 +#: utils/adt/json.c:2281 utils/adt/json.c:2365 utils/adt/jsonb.c:1400 +#: utils/adt/jsonb.c:1495 #, c-format msgid "null value not allowed for object key" msgstr "значение null не может быть ключом объекта" -#: utils/adt/json.c:2306 +#: utils/adt/json.c:2354 utils/adt/jsonb.c:1484 #, c-format msgid "mismatched array dimensions" msgstr "неподходящие размерности массива" -#: utils/adt/jsonb.c:202 +#: utils/adt/jsonb.c:256 #, c-format msgid "string too long to represent as jsonb string" msgstr "слишком длинная строка для представления в виде строки jsonb" -#: utils/adt/jsonb.c:203 +#: utils/adt/jsonb.c:257 #, c-format msgid "" "Due to an implementation restriction, jsonb strings cannot exceed %d bytes." msgstr "" "Из-за ограничений реализации строки jsonb не могут быть длиннее %d байт." -#: utils/adt/jsonb_util.c:622 +#: utils/adt/jsonb.c:720 +#, c-format +msgid "key value must be scalar, not array, composite or json" +msgstr "" +"значением ключа должен быть скаляр, не массив, составное значение или json" + +#: utils/adt/jsonb.c:1189 +#, c-format +msgid "invalid number or arguments: object must be matched key value pairs" +msgstr "" +"неверное число аргументов: объект должен составляться из пар ключ-значение" + +#: utils/adt/jsonb.c:1203 +#, c-format +msgid "arg %d: key cannot be null" +msgstr "аргумент %d: ключ не может быть NULL" + +#: utils/adt/jsonb.c:1225 utils/adt/jsonb.c:1248 utils/adt/jsonb.c:1310 +#, c-format +msgid "arg %d: could not determine data type" +msgstr "аргумент %d: не удалось определить тип данных" + +#: utils/adt/jsonb.c:1837 +#, c-format +msgid "object keys must be strings" +msgstr "ключи объектов должны быть строковыми" + +#: utils/adt/jsonb_util.c:656 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "число пар объекта jsonb превышает предел (%zu)" -#: utils/adt/jsonb_util.c:663 +#: utils/adt/jsonb_util.c:697 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "число элементов массива jsonb превышает предел (%zu)" -#: utils/adt/jsonb_util.c:1490 utils/adt/jsonb_util.c:1510 +#: utils/adt/jsonb_util.c:1525 utils/adt/jsonb_util.c:1545 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "общий размер элементов массива jsonb превышает предел (%u байт)" -#: utils/adt/jsonb_util.c:1571 utils/adt/jsonb_util.c:1606 -#: utils/adt/jsonb_util.c:1626 +#: utils/adt/jsonb_util.c:1606 utils/adt/jsonb_util.c:1641 +#: utils/adt/jsonb_util.c:1661 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "общий размер элементов объекта jsonb превышает предел (%u байт)" -#: utils/adt/jsonfuncs.c:263 utils/adt/jsonfuncs.c:428 -#: utils/adt/jsonfuncs.c:1968 utils/adt/jsonfuncs.c:2405 -#: utils/adt/jsonfuncs.c:2911 +#: utils/adt/jsonfuncs.c:296 utils/adt/jsonfuncs.c:461 +#: utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2497 +#: utils/adt/jsonfuncs.c:3003 #, c-format msgid "cannot call %s on a scalar" msgstr "вызывать %s со скаляром нельзя" -#: utils/adt/jsonfuncs.c:268 utils/adt/jsonfuncs.c:415 -#: utils/adt/jsonfuncs.c:2394 +#: utils/adt/jsonfuncs.c:301 utils/adt/jsonfuncs.c:448 +#: utils/adt/jsonfuncs.c:2486 #, c-format msgid "cannot call %s on an array" msgstr "вызывать %s с массивом нельзя" -#: utils/adt/jsonfuncs.c:1276 utils/adt/jsonfuncs.c:1311 +#: utils/adt/jsonfuncs.c:1364 utils/adt/jsonfuncs.c:1399 #, c-format msgid "cannot get array length of a scalar" msgstr "получить длину скаляра нельзя" -#: utils/adt/jsonfuncs.c:1280 utils/adt/jsonfuncs.c:1299 +#: utils/adt/jsonfuncs.c:1368 utils/adt/jsonfuncs.c:1387 #, c-format msgid "cannot get array length of a non-array" msgstr "получить длину массива для не массива нельзя" -#: utils/adt/jsonfuncs.c:1376 +#: utils/adt/jsonfuncs.c:1464 #, c-format msgid "cannot call %s on a non-object" msgstr "вызывать %s с не объектом нельзя" -#: utils/adt/jsonfuncs.c:1394 utils/adt/jsonfuncs.c:2081 -#: utils/adt/jsonfuncs.c:2614 +#: utils/adt/jsonfuncs.c:1482 utils/adt/jsonfuncs.c:2169 +#: utils/adt/jsonfuncs.c:2706 #, c-format msgid "" "function returning record called in context that cannot accept type record" msgstr "" "функция, возвращающая запись, вызвана в контексте, не допускающем этот тип" -#: utils/adt/jsonfuncs.c:1637 +#: utils/adt/jsonfuncs.c:1725 #, c-format msgid "cannot deconstruct an array as an object" msgstr "извлечь массив в виде объекта нельзя" -#: utils/adt/jsonfuncs.c:1649 +#: utils/adt/jsonfuncs.c:1737 #, c-format msgid "cannot deconstruct a scalar" msgstr "извлечь скаляр нельзя" -#: utils/adt/jsonfuncs.c:1695 +#: utils/adt/jsonfuncs.c:1783 #, c-format msgid "cannot extract elements from a scalar" msgstr "извлечь элементы из скаляра нельзя" -#: utils/adt/jsonfuncs.c:1699 +#: utils/adt/jsonfuncs.c:1787 #, c-format msgid "cannot extract elements from an object" msgstr "извлечь элементы из объекта нельзя" -#: utils/adt/jsonfuncs.c:1955 utils/adt/jsonfuncs.c:2710 +#: utils/adt/jsonfuncs.c:2043 utils/adt/jsonfuncs.c:2802 #, c-format msgid "cannot call %s on a non-array" msgstr "вызывать %s с не массивом нельзя" -#: utils/adt/jsonfuncs.c:2042 utils/adt/jsonfuncs.c:2590 +#: utils/adt/jsonfuncs.c:2130 utils/adt/jsonfuncs.c:2682 #, c-format msgid "first argument of %s must be a row type" msgstr "первым аргументом %s должен быть кортеж" -#: utils/adt/jsonfuncs.c:2083 +#: utils/adt/jsonfuncs.c:2171 #, c-format msgid "" "Try calling the function in the FROM clause using a column definition list." @@ -18457,17 +19743,47 @@ msgstr "" "Попробуйте вызвать эту функцию в предложении FROM, используя список с " "определениями колонок." -#: utils/adt/jsonfuncs.c:2726 utils/adt/jsonfuncs.c:2893 +#: utils/adt/jsonfuncs.c:2818 utils/adt/jsonfuncs.c:2985 #, c-format msgid "argument of %s must be an array of objects" msgstr "аргументом %s должен быть массив объектов" -#: utils/adt/jsonfuncs.c:2750 +#: utils/adt/jsonfuncs.c:2842 #, c-format msgid "cannot call %s on an object" msgstr "вызывать %s с объектом нельзя" -#: utils/adt/like.c:211 utils/adt/selfuncs.c:5220 +#: utils/adt/jsonfuncs.c:3403 utils/adt/jsonfuncs.c:3456 +#, c-format +msgid "cannot delete from scalar" +msgstr "удаление из скаляра невозможно" + +#: utils/adt/jsonfuncs.c:3461 +#, c-format +msgid "cannot delete from object using integer subscript" +msgstr "удаление из объекта по числовому индексу невозможно" + +#: utils/adt/jsonfuncs.c:3527 +#, c-format +msgid "cannot set path in scalar" +msgstr "задать путь в скаляре нельзя" + +#: utils/adt/jsonfuncs.c:3572 +#, c-format +msgid "cannot delete path in scalar" +msgstr "удалить путь в скаляре нельзя" + +#: utils/adt/jsonfuncs.c:3697 +#, c-format +msgid "invalid concatenation of jsonb objects" +msgstr "неверная конкатенация объектов jsonb" + +#: utils/adt/levenshtein.c:127 +#, c-format +msgid "argument exceeds the maximum length of %d bytes" +msgstr "длина аргумента превышает максимум (%d Б)" + +#: utils/adt/like.c:211 utils/adt/selfuncs.c:5230 #, c-format msgid "could not determine which collation to use for ILIKE" msgstr "не удалось определить, какой порядок сортировки использовать для ILIKE" @@ -18477,91 +19793,101 @@ msgstr "не удалось определить, какой порядок со msgid "LIKE pattern must not end with escape character" msgstr "шаблон LIKE не должен заканчиваться защитным символом" -#: utils/adt/like_match.c:289 utils/adt/regexp.c:694 +#: utils/adt/like_match.c:289 utils/adt/regexp.c:698 #, c-format msgid "invalid escape string" msgstr "неверный защитный символ" -#: utils/adt/like_match.c:290 utils/adt/regexp.c:695 +#: utils/adt/like_match.c:290 utils/adt/regexp.c:699 #, c-format msgid "Escape string must be empty or one character." msgstr "Защитный символ должен быть пустым или состоять из одного байта." -#: utils/adt/mac.c:65 +#: utils/adt/lockfuncs.c:422 +#, c-format +msgid "cannot use advisory locks during a parallel operation" +msgstr "" +"использовать рекомендательные блокировки во время параллельных операций " +"нельзя" + +#: utils/adt/mac.c:68 #, c-format msgid "invalid input syntax for type macaddr: \"%s\"" msgstr "неверный синтаксис для типа macaddr: \"%s\"" -#: utils/adt/mac.c:72 +#: utils/adt/mac.c:75 #, c-format msgid "invalid octet value in \"macaddr\" value: \"%s\"" msgstr "неверный октет в значении типа macaddr: \"%s\"" -#: utils/adt/misc.c:111 +#: utils/adt/misc.c:116 #, c-format msgid "PID %d is not a PostgreSQL server process" msgstr "PID %d не относится к серверному процессу PostgreSQL" -#: utils/adt/misc.c:154 +#: utils/adt/misc.c:166 #, c-format -msgid "" -"must be superuser or have the same role to cancel queries running in other " -"server processes" -msgstr "" -"отменять запросы в других серверных процессах может только суперпользователь " -"или пользователь той же роли" +msgid "must be a superuser to cancel superuser query" +msgstr "для отмены запроса суперпользователя нужно быть суперпользователем" #: utils/adt/misc.c:171 #, c-format -msgid "" -"must be superuser or have the same role to terminate other server processes" -msgstr "" -"завершать другие серверные процессы может только суперпользователь или " -"пользователь той же роли" +msgid "must be a member of the role whose query is being cancelled" +msgstr "необходимо быть членом роли, запрос которой отменяется" + +#: utils/adt/misc.c:190 +#, c-format +msgid "must be a superuser to terminate superuser process" +msgstr "прерывать процесс суперпользователя может только суперпользователь" + +#: utils/adt/misc.c:195 +#, c-format +msgid "must be a member of the role whose process is being terminated" +msgstr "необходимо быть членом роли, процесс которой прерывается" -#: utils/adt/misc.c:185 +#: utils/adt/misc.c:209 #, c-format msgid "must be superuser to signal the postmaster" msgstr "сигнализировать процессу postmaster может только суперпользователь" -#: utils/adt/misc.c:190 +#: utils/adt/misc.c:214 #, c-format msgid "failed to send signal to postmaster: %m" msgstr "отправить сигнал процессу postmaster не удалось: %m" -#: utils/adt/misc.c:207 +#: utils/adt/misc.c:231 #, c-format msgid "must be superuser to rotate log files" msgstr "прокрутить файлы протоколов может только суперпользователь" -#: utils/adt/misc.c:212 +#: utils/adt/misc.c:236 #, c-format msgid "rotation not possible because log collection not active" msgstr "прокрутка невозможна, так как протоколирование отключено" -#: utils/adt/misc.c:249 +#: utils/adt/misc.c:273 #, c-format msgid "global tablespace never has databases" msgstr "в табличном пространстве global никогда не было баз данных" -#: utils/adt/misc.c:270 +#: utils/adt/misc.c:294 #, c-format msgid "%u is not a tablespace OID" msgstr "%u - это не OID табличного пространства" -#: utils/adt/misc.c:465 +#: utils/adt/misc.c:491 msgid "unreserved" msgstr "не зарезервировано" -#: utils/adt/misc.c:469 +#: utils/adt/misc.c:495 msgid "unreserved (cannot be function or type name)" msgstr "не зарезервировано (но не может быть именем типа или функции)" -#: utils/adt/misc.c:473 +#: utils/adt/misc.c:499 msgid "reserved (can be function or type name)" msgstr "зарезервировано (но может быть именем типа или функции)" -#: utils/adt/misc.c:477 +#: utils/adt/misc.c:503 msgid "reserved" msgstr "зарезервировано" @@ -18600,8 +19926,8 @@ msgstr "неверное значение cidr: \"%s\"" msgid "Value has bits set to right of mask." msgstr "Значение содержит установленные биты правее маски." -#: utils/adt/network.c:111 utils/adt/network.c:580 utils/adt/network.c:605 -#: utils/adt/network.c:630 +#: utils/adt/network.c:111 utils/adt/network.c:607 utils/adt/network.c:632 +#: utils/adt/network.c:657 #, c-format msgid "could not format inet value: %m" msgstr "не удалось отформатировать значение inet: %m" @@ -18634,98 +19960,118 @@ msgstr "неверное внешнее представление \"cidr\"" msgid "invalid mask length: %d" msgstr "неверная длина маски: %d" -#: utils/adt/network.c:648 +#: utils/adt/network.c:675 #, c-format msgid "could not format cidr value: %m" msgstr "не удалось отформатировать значение cidr: %m" -#: utils/adt/network.c:1264 +#: utils/adt/network.c:917 +#, c-format +msgid "cannot merge addresses from different families" +msgstr "объединять адреса разных семейств нельзя" + +#: utils/adt/network.c:1343 #, c-format msgid "cannot AND inet values of different sizes" msgstr "нельзя использовать \"И\" (AND) для значений inet разного размера" -#: utils/adt/network.c:1296 +#: utils/adt/network.c:1375 #, c-format msgid "cannot OR inet values of different sizes" msgstr "нельзя использовать \"ИЛИ\" (OR) для значений inet разного размера" -#: utils/adt/network.c:1357 utils/adt/network.c:1433 +#: utils/adt/network.c:1436 utils/adt/network.c:1512 #, c-format msgid "result is out of range" msgstr "результат вне диапазона" -#: utils/adt/network.c:1398 +#: utils/adt/network.c:1477 #, c-format msgid "cannot subtract inet values of different sizes" msgstr "нельзя вычитать значения inet разного размера" -#: utils/adt/numeric.c:486 utils/adt/numeric.c:513 utils/adt/numeric.c:3705 -#: utils/adt/numeric.c:3728 utils/adt/numeric.c:3752 utils/adt/numeric.c:3759 +#: utils/adt/numeric.c:549 utils/adt/numeric.c:576 utils/adt/numeric.c:4604 +#: utils/adt/numeric.c:4627 utils/adt/numeric.c:4651 utils/adt/numeric.c:4658 #, c-format msgid "invalid input syntax for type numeric: \"%s\"" msgstr "неверный синтаксис для типа numeric: \"%s\"" -#: utils/adt/numeric.c:703 +#: utils/adt/numeric.c:766 #, c-format msgid "invalid length in external \"numeric\" value" msgstr "неверная длина во внешнем значении \"numeric\"" -#: utils/adt/numeric.c:716 +#: utils/adt/numeric.c:779 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "неверный знак во внешнем значении \"numeric\"" -#: utils/adt/numeric.c:722 +#: utils/adt/numeric.c:785 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "неверный порядок числа во внешнем значении \"numeric\"" -#: utils/adt/numeric.c:731 +#: utils/adt/numeric.c:794 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "неверная цифра во внешнем значении \"numeric\"" -#: utils/adt/numeric.c:922 utils/adt/numeric.c:936 +#: utils/adt/numeric.c:985 utils/adt/numeric.c:999 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "точность NUMERIC %d должна быть между 1 и %d" -#: utils/adt/numeric.c:927 +#: utils/adt/numeric.c:990 #, c-format msgid "NUMERIC scale %d must be between 0 and precision %d" msgstr "порядок NUMERIC %d должен быть между 0 и точностью (%d)" -#: utils/adt/numeric.c:945 +#: utils/adt/numeric.c:1008 #, c-format msgid "invalid NUMERIC type modifier" msgstr "неверный модификатор типа NUMERIC" -#: utils/adt/numeric.c:1952 utils/adt/numeric.c:4202 utils/adt/numeric.c:6171 +#: utils/adt/numeric.c:1340 +#, c-format +msgid "start value cannot be NaN" +msgstr "начальное значение не может быть NaN" + +#: utils/adt/numeric.c:1345 +#, c-format +msgid "stop value cannot be NaN" +msgstr "конечное значение не может быть NaN" + +#: utils/adt/numeric.c:1355 +#, c-format +msgid "step size cannot be NaN" +msgstr "размер шага не может быть NaN" + +#: utils/adt/numeric.c:2550 utils/adt/numeric.c:5101 utils/adt/numeric.c:7117 #, c-format msgid "value overflows numeric format" msgstr "значение переполняет формат numeric" -#: utils/adt/numeric.c:2283 +#: utils/adt/numeric.c:2881 #, c-format msgid "cannot convert NaN to integer" msgstr "нельзя преобразовать NaN в integer" -#: utils/adt/numeric.c:2349 +#: utils/adt/numeric.c:2947 #, c-format msgid "cannot convert NaN to bigint" msgstr "нельзя преобразовать NaN в bigint" -#: utils/adt/numeric.c:2394 +#: utils/adt/numeric.c:2992 #, c-format msgid "cannot convert NaN to smallint" msgstr "нельзя преобразовать NaN в smallint" -#: utils/adt/numeric.c:4272 +#: utils/adt/numeric.c:5171 #, c-format msgid "numeric field overflow" msgstr "переполнение поля numeric" -#: utils/adt/numeric.c:4273 +#: utils/adt/numeric.c:5172 #, c-format msgid "" "A field with precision %d, scale %d must round to an absolute value less " @@ -18734,7 +20080,7 @@ msgstr "" "Поле с точностью %d, порядком %d должно округляться до абсолютного значения " "меньше чем %s%d." -#: utils/adt/numeric.c:5728 +#: utils/adt/numeric.c:6674 #, c-format msgid "argument for function \"exp\" too big" msgstr "аргумент функции \"exp\" слишком велик" @@ -18789,25 +20135,30 @@ msgstr "запрошенный символ не подходит для код msgid "null character not permitted" msgstr "символ не может быть null" -#: utils/adt/orderedsetaggs.c:423 utils/adt/orderedsetaggs.c:528 -#: utils/adt/orderedsetaggs.c:667 +#: utils/adt/orderedsetaggs.c:425 utils/adt/orderedsetaggs.c:530 +#: utils/adt/orderedsetaggs.c:669 #, c-format msgid "percentile value %g is not between 0 and 1" msgstr "значение перцентиля %g лежит не в диапазоне 0..1" -#: utils/adt/pg_locale.c:1039 +#: utils/adt/pg_locale.c:911 +#, c-format +msgid "Apply system library package updates." +msgstr "Обновите пакет с системной библиотекой." + +#: utils/adt/pg_locale.c:1116 #, c-format msgid "could not create locale \"%s\": %m" msgstr "не удалось создать локаль \"%s\": %m" -#: utils/adt/pg_locale.c:1042 +#: utils/adt/pg_locale.c:1119 #, c-format msgid "" "The operating system could not find any locale data for the locale name \"%s" "\"." msgstr "Операционная система не может найти данные локали с именем \"%s\"." -#: utils/adt/pg_locale.c:1129 +#: utils/adt/pg_locale.c:1206 #, c-format msgid "" "collations with different collate and ctype values are not supported on this " @@ -18816,17 +20167,17 @@ msgstr "" "правила сортировки с разными значениями collate и ctype не поддерживаются на " "этой платформе" -#: utils/adt/pg_locale.c:1144 +#: utils/adt/pg_locale.c:1221 #, c-format msgid "nondefault collations are not supported on this platform" msgstr "на этой платформе поддерживаются только стандартные правила сортировки" -#: utils/adt/pg_locale.c:1315 +#: utils/adt/pg_locale.c:1392 #, c-format msgid "invalid multibyte character for locale" msgstr "неверный многобайтный символ для локали" -#: utils/adt/pg_locale.c:1316 +#: utils/adt/pg_locale.c:1393 #, c-format msgid "" "The server's LC_CTYPE locale is probably incompatible with the database " @@ -18839,6 +20190,12 @@ msgstr "" msgid "invalid input syntax for type pg_lsn: \"%s\"" msgstr "неверный синтаксис для типа pg_lsn: \"%s\"" +#: utils/adt/pg_upgrade_support.c:39 +#, c-format +msgid "function can only be called when server is in binary upgrade mode" +msgstr "" +"функцию можно вызывать только когда сервер в режиме двоичного обновления" + #: utils/adt/pseudotypes.c:95 #, c-format msgid "cannot accept a value of type any" @@ -18906,58 +20263,74 @@ msgstr "значение типа fdw_handler нельзя вывести" #: utils/adt/pseudotypes.c:384 #, c-format +msgid "cannot accept a value of type tsm_handler" +msgstr "значение типа tsm_handler нельзя ввести" + +#: utils/adt/pseudotypes.c:397 +#, c-format +msgid "cannot display a value of type tsm_handler" +msgstr "значение типа tsm_handler нельзя вывести" + +#: utils/adt/pseudotypes.c:411 +#, c-format msgid "cannot accept a value of type internal" msgstr "значение типа internal нельзя ввести" -#: utils/adt/pseudotypes.c:397 +#: utils/adt/pseudotypes.c:424 #, c-format msgid "cannot display a value of type internal" msgstr "значение типа internal нельзя вывести" -#: utils/adt/pseudotypes.c:411 +#: utils/adt/pseudotypes.c:438 #, c-format msgid "cannot accept a value of type opaque" msgstr "значение типа opaque нельзя ввести" -#: utils/adt/pseudotypes.c:424 +#: utils/adt/pseudotypes.c:451 #, c-format msgid "cannot display a value of type opaque" msgstr "значение типа opaque нельзя вывести" -#: utils/adt/pseudotypes.c:438 +#: utils/adt/pseudotypes.c:465 #, c-format msgid "cannot accept a value of type anyelement" msgstr "значение типа anyelement нельзя ввести" -#: utils/adt/pseudotypes.c:451 +#: utils/adt/pseudotypes.c:478 #, c-format msgid "cannot display a value of type anyelement" msgstr "значение типа anyelement нельзя вывести" -#: utils/adt/pseudotypes.c:464 +#: utils/adt/pseudotypes.c:491 #, c-format msgid "cannot accept a value of type anynonarray" msgstr "значение типа anynonarray нельзя ввести" -#: utils/adt/pseudotypes.c:477 +#: utils/adt/pseudotypes.c:504 #, c-format msgid "cannot display a value of type anynonarray" msgstr "значение типа anynonarray нельзя вывести" -#: utils/adt/pseudotypes.c:490 +#: utils/adt/pseudotypes.c:517 #, c-format msgid "cannot accept a value of a shell type" msgstr "значение типа shell нельзя ввести" -#: utils/adt/pseudotypes.c:503 +#: utils/adt/pseudotypes.c:530 #, c-format msgid "cannot display a value of a shell type" msgstr "значение типа shell нельзя вывести" -#: utils/adt/pseudotypes.c:525 utils/adt/pseudotypes.c:549 +#: utils/adt/pseudotypes.c:552 utils/adt/pseudotypes.c:577 +#: utils/adt/pseudotypes.c:605 utils/adt/pseudotypes.c:633 +#, c-format +msgid "cannot accept a value of type %s" +msgstr "значение типа %s нельзя ввести" + +#: utils/adt/pseudotypes.c:620 utils/adt/pseudotypes.c:646 #, c-format -msgid "cannot accept a value of type pg_node_tree" -msgstr "значение типа pg_node_tree нельзя ввести" +msgid "cannot output a value of type %s" +msgstr "значение типа %s нельзя вывести" #: utils/adt/rangetypes.c:396 #, c-format @@ -18974,57 +20347,57 @@ msgstr "результат вычитания диапазонов будет н msgid "result of range union would not be contiguous" msgstr "результат объединения диапазонов будет не непрерывным" -#: utils/adt/rangetypes.c:1502 +#: utils/adt/rangetypes.c:1530 #, c-format msgid "range lower bound must be less than or equal to range upper bound" msgstr "нижняя граница диапазона должна быть меньше или равна верхней" -#: utils/adt/rangetypes.c:1885 utils/adt/rangetypes.c:1898 -#: utils/adt/rangetypes.c:1912 +#: utils/adt/rangetypes.c:1913 utils/adt/rangetypes.c:1926 +#: utils/adt/rangetypes.c:1940 #, c-format msgid "invalid range bound flags" msgstr "неверные флаги границ диапазона" -#: utils/adt/rangetypes.c:1886 utils/adt/rangetypes.c:1899 -#: utils/adt/rangetypes.c:1913 +#: utils/adt/rangetypes.c:1914 utils/adt/rangetypes.c:1927 +#: utils/adt/rangetypes.c:1941 #, c-format msgid "Valid values are \"[]\", \"[)\", \"(]\", and \"()\"." msgstr "Допустимые значения: \"[]\", \"[)\", \"(]\" и \"()\"." -#: utils/adt/rangetypes.c:1978 utils/adt/rangetypes.c:1995 -#: utils/adt/rangetypes.c:2008 utils/adt/rangetypes.c:2026 -#: utils/adt/rangetypes.c:2037 utils/adt/rangetypes.c:2081 -#: utils/adt/rangetypes.c:2089 +#: utils/adt/rangetypes.c:2006 utils/adt/rangetypes.c:2023 +#: utils/adt/rangetypes.c:2036 utils/adt/rangetypes.c:2054 +#: utils/adt/rangetypes.c:2065 utils/adt/rangetypes.c:2109 +#: utils/adt/rangetypes.c:2117 #, c-format msgid "malformed range literal: \"%s\"" msgstr "ошибочный литерал диапазона: \"%s\"" -#: utils/adt/rangetypes.c:1980 +#: utils/adt/rangetypes.c:2008 #, c-format msgid "Junk after \"empty\" key word." msgstr "Мусор после ключевого слова \"empty\"." -#: utils/adt/rangetypes.c:1997 +#: utils/adt/rangetypes.c:2025 #, c-format msgid "Missing left parenthesis or bracket." msgstr "Отсутствует левая скобка (круглая или квадратная)." -#: utils/adt/rangetypes.c:2010 +#: utils/adt/rangetypes.c:2038 #, c-format msgid "Missing comma after lower bound." msgstr "Отсутствует запятая после нижней границы." -#: utils/adt/rangetypes.c:2028 +#: utils/adt/rangetypes.c:2056 #, c-format msgid "Too many commas." msgstr "Слишком много запятых." -#: utils/adt/rangetypes.c:2039 +#: utils/adt/rangetypes.c:2067 #, c-format msgid "Junk after right parenthesis or bracket." msgstr "Мусор после правой скобки." -#: utils/adt/regexp.c:285 utils/adt/regexp.c:1234 utils/adt/varlena.c:3042 +#: utils/adt/regexp.c:285 utils/adt/regexp.c:1288 utils/adt/varlena.c:3588 #, c-format msgid "regular expression failed: %s" msgstr "ошибка в регулярном выражении: %s" @@ -19034,114 +20407,114 @@ msgstr "ошибка в регулярном выражении: %s" msgid "invalid regexp option: \"%c\"" msgstr "неверный элемент рег. выражения: \"%c\"" -#: utils/adt/regexp.c:894 +#: utils/adt/regexp.c:948 #, c-format msgid "regexp_split does not support the global option" msgstr "regexp_split не поддерживает глобальный поиск" -#: utils/adt/regproc.c:127 utils/adt/regproc.c:147 +#: utils/adt/regproc.c:128 utils/adt/regproc.c:148 #, c-format msgid "more than one function named \"%s\"" msgstr "имя \"%s\" имеют несколько функций" -#: utils/adt/regproc.c:551 utils/adt/regproc.c:571 +#: utils/adt/regproc.c:587 utils/adt/regproc.c:607 #, c-format msgid "more than one operator named %s" msgstr "имя %s имеют несколько операторов" -#: utils/adt/regproc.c:738 utils/adt/regproc.c:779 gram.y:6846 +#: utils/adt/regproc.c:774 utils/adt/regproc.c:815 gram.y:7234 #, c-format msgid "missing argument" msgstr "отсутствует аргумент" -#: utils/adt/regproc.c:739 utils/adt/regproc.c:780 gram.y:6847 +#: utils/adt/regproc.c:775 utils/adt/regproc.c:816 gram.y:7235 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "" "Чтобы обозначить отсутствующий аргумент унарного оператора, укажите NONE." -#: utils/adt/regproc.c:743 utils/adt/regproc.c:784 utils/adt/regproc.c:1702 -#: utils/adt/ruleutils.c:7677 utils/adt/ruleutils.c:7800 +#: utils/adt/regproc.c:779 utils/adt/regproc.c:820 utils/adt/regproc.c:1962 +#: utils/adt/ruleutils.c:8060 utils/adt/ruleutils.c:8185 #, c-format msgid "too many arguments" msgstr "слишком много аргументов" -#: utils/adt/regproc.c:744 utils/adt/regproc.c:785 +#: utils/adt/regproc.c:780 utils/adt/regproc.c:821 #, c-format msgid "Provide two argument types for operator." msgstr "Предоставьте для оператора два типа аргументов." -#: utils/adt/regproc.c:1537 utils/adt/regproc.c:1542 utils/adt/varlena.c:2313 -#: utils/adt/varlena.c:2318 +#: utils/adt/regproc.c:1797 utils/adt/regproc.c:1802 utils/adt/varlena.c:2859 +#: utils/adt/varlena.c:2864 #, c-format msgid "invalid name syntax" msgstr "ошибка синтаксиса в имени" -#: utils/adt/regproc.c:1600 +#: utils/adt/regproc.c:1860 #, c-format msgid "expected a left parenthesis" msgstr "ожидалась левая скобка" -#: utils/adt/regproc.c:1616 +#: utils/adt/regproc.c:1876 #, c-format msgid "expected a right parenthesis" msgstr "ожидалась правая скобка" -#: utils/adt/regproc.c:1635 +#: utils/adt/regproc.c:1895 #, c-format msgid "expected a type name" msgstr "ожидалось имя типа" -#: utils/adt/regproc.c:1667 +#: utils/adt/regproc.c:1927 #, c-format msgid "improper type name" msgstr "ошибочное имя типа" -#: utils/adt/ri_triggers.c:311 utils/adt/ri_triggers.c:368 -#: utils/adt/ri_triggers.c:787 utils/adt/ri_triggers.c:1010 -#: utils/adt/ri_triggers.c:1166 utils/adt/ri_triggers.c:1347 -#: utils/adt/ri_triggers.c:1512 utils/adt/ri_triggers.c:1688 -#: utils/adt/ri_triggers.c:1868 utils/adt/ri_triggers.c:2059 -#: utils/adt/ri_triggers.c:2117 utils/adt/ri_triggers.c:2222 -#: utils/adt/ri_triggers.c:2387 gram.y:3248 +#: utils/adt/ri_triggers.c:312 utils/adt/ri_triggers.c:369 +#: utils/adt/ri_triggers.c:788 utils/adt/ri_triggers.c:1011 +#: utils/adt/ri_triggers.c:1167 utils/adt/ri_triggers.c:1348 +#: utils/adt/ri_triggers.c:1513 utils/adt/ri_triggers.c:1689 +#: utils/adt/ri_triggers.c:1869 utils/adt/ri_triggers.c:2060 +#: utils/adt/ri_triggers.c:2118 utils/adt/ri_triggers.c:2223 +#: utils/adt/ri_triggers.c:2400 gram.y:3313 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "выражение MATCH PARTIAL ещё не реализовано" -#: utils/adt/ri_triggers.c:340 utils/adt/ri_triggers.c:2475 -#: utils/adt/ri_triggers.c:3262 +#: utils/adt/ri_triggers.c:341 utils/adt/ri_triggers.c:2488 +#: utils/adt/ri_triggers.c:3297 #, c-format msgid "insert or update on table \"%s\" violates foreign key constraint \"%s\"" msgstr "" "INSERT или UPDATE в таблице \"%s\" нарушает ограничение внешнего ключа \"%s" "\" " -#: utils/adt/ri_triggers.c:343 utils/adt/ri_triggers.c:2478 +#: utils/adt/ri_triggers.c:344 utils/adt/ri_triggers.c:2491 #, c-format msgid "MATCH FULL does not allow mixing of null and nonnull key values." msgstr "MATCH FULL не позволяет смешивать в значении ключа null и не null." -#: utils/adt/ri_triggers.c:2717 +#: utils/adt/ri_triggers.c:2730 #, c-format msgid "function \"%s\" must be fired for INSERT" msgstr "функция \"%s\" должна запускаться для INSERT" -#: utils/adt/ri_triggers.c:2723 +#: utils/adt/ri_triggers.c:2736 #, c-format msgid "function \"%s\" must be fired for UPDATE" msgstr "функция \"%s\" должна запускаться для UPDATE" -#: utils/adt/ri_triggers.c:2729 +#: utils/adt/ri_triggers.c:2742 #, c-format msgid "function \"%s\" must be fired for DELETE" msgstr "функция \"%s\" должна запускаться для DELETE" -#: utils/adt/ri_triggers.c:2752 +#: utils/adt/ri_triggers.c:2765 #, c-format msgid "no pg_constraint entry for trigger \"%s\" on table \"%s\"" msgstr "для триггера \"%s\" таблицы \"%s\" нет записи pg_constraint" -#: utils/adt/ri_triggers.c:2754 +#: utils/adt/ri_triggers.c:2767 #, c-format msgid "" "Remove this referential integrity trigger and its mates, then do ALTER TABLE " @@ -19150,7 +20523,7 @@ msgstr "" "Удалите этот триггер ссылочной целостности и связанные объекты, а затем " "выполните ALTER TABLE ADD CONSTRAINT." -#: utils/adt/ri_triggers.c:3181 +#: utils/adt/ri_triggers.c:3209 #, c-format msgid "" "referential integrity query on \"%s\" from constraint \"%s\" on \"%s\" gave " @@ -19159,22 +20532,22 @@ msgstr "" "неожиданный результат запроса ссылочной целостности к \"%s\" из ограничения " "\"%s\" таблицы \"%s\"" -#: utils/adt/ri_triggers.c:3185 +#: utils/adt/ri_triggers.c:3213 #, c-format msgid "This is most likely due to a rule having rewritten the query." msgstr "Скорее всего это вызвано правилом, переписавшим запрос." -#: utils/adt/ri_triggers.c:3266 +#: utils/adt/ri_triggers.c:3301 #, c-format msgid "Key (%s)=(%s) is not present in table \"%s\"." msgstr "Ключ (%s)=(%s) отсутствует в таблице \"%s\"." -#: utils/adt/ri_triggers.c:3269 +#: utils/adt/ri_triggers.c:3304 #, c-format msgid "Key is not present in table \"%s\"." msgstr "Ключ отсутствует в таблице \"%s\"." -#: utils/adt/ri_triggers.c:3275 +#: utils/adt/ri_triggers.c:3310 #, c-format msgid "" "update or delete on table \"%s\" violates foreign key constraint \"%s\" on " @@ -19183,12 +20556,12 @@ msgstr "" "UPDATE или DELETE в таблице \"%s\" нарушает ограничение внешнего ключа \"%s" "\" таблицы \"%s\"" -#: utils/adt/ri_triggers.c:3280 +#: utils/adt/ri_triggers.c:3315 #, c-format msgid "Key (%s)=(%s) is still referenced from table \"%s\"." msgstr "На ключ (%s)=(%s) всё ещё есть ссылки в таблице \"%s\"." -#: utils/adt/ri_triggers.c:3283 +#: utils/adt/ri_triggers.c:3318 #, c-format msgid "Key is still referenced from table \"%s\"." msgstr "На ключ всё ещё есть ссылки в таблице \"%s\"." @@ -19251,17 +20624,17 @@ msgstr "не удалось сравнить различные типы кол msgid "cannot compare record types with different numbers of columns" msgstr "сравнивать типы записей с разным числом колонок нельзя" -#: utils/adt/ruleutils.c:4026 +#: utils/adt/ruleutils.c:4076 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "правило \"%s\" имеет неподдерживаемый тип событий %d" -#: utils/adt/selfuncs.c:5205 +#: utils/adt/selfuncs.c:5215 #, c-format msgid "case insensitive matching not supported on type bytea" msgstr "регистро-независимое сравнение не поддерживается для типа bytea" -#: utils/adt/selfuncs.c:5308 +#: utils/adt/selfuncs.c:5318 #, c-format msgid "regular-expression matching not supported on type bytea" msgstr "сравнение с регулярными выражениями не поддерживается для типа bytea " @@ -19271,119 +20644,119 @@ msgstr "сравнение с регулярными выражениями не msgid "invalid input syntax for type tid: \"%s\"" msgstr "неверный синтаксис для типа tid: \"%s\"" -#: utils/adt/timestamp.c:107 +#: utils/adt/timestamp.c:100 #, c-format msgid "TIMESTAMP(%d)%s precision must not be negative" msgstr "TIMESTAMP(%d)%s: точность должна быть неотрицательна" -#: utils/adt/timestamp.c:113 +#: utils/adt/timestamp.c:106 #, c-format msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "TIMESTAMP(%d)%s: точность уменьшена до дозволенного максимума: %d" -#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:452 +#: utils/adt/timestamp.c:171 utils/adt/timestamp.c:445 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp вне диапазона: \"%s\"" -#: utils/adt/timestamp.c:196 utils/adt/timestamp.c:470 -#: utils/adt/timestamp.c:925 +#: utils/adt/timestamp.c:189 utils/adt/timestamp.c:463 +#: utils/adt/timestamp.c:918 #, c-format msgid "date/time value \"%s\" is no longer supported" msgstr "значение даты/времени \"%s\" более не поддерживается" -#: utils/adt/timestamp.c:266 +#: utils/adt/timestamp.c:259 #, c-format msgid "timestamp cannot be NaN" msgstr "timestamp не может быть NaN" -#: utils/adt/timestamp.c:387 +#: utils/adt/timestamp.c:380 #, c-format msgid "timestamp(%d) precision must be between %d and %d" msgstr "точность timestamp(%d) должна быть между %d и %d" -#: utils/adt/timestamp.c:520 +#: utils/adt/timestamp.c:513 #, c-format msgid "invalid input syntax for numeric time zone: \"%s\"" msgstr "неверный синтаксис для числового часового пояса: \"%s\"" -#: utils/adt/timestamp.c:522 +#: utils/adt/timestamp.c:515 #, c-format msgid "Numeric time zones must have \"-\" or \"+\" as first character." msgstr "" "Запись числового часового пояса должна начинаться с символа \"-\" или \"+\"." -#: utils/adt/timestamp.c:535 +#: utils/adt/timestamp.c:528 #, c-format msgid "numeric time zone \"%s\" out of range" msgstr "числовой часовой пояс \"%s\" вне диапазона" -#: utils/adt/timestamp.c:638 utils/adt/timestamp.c:648 +#: utils/adt/timestamp.c:631 utils/adt/timestamp.c:641 #, c-format msgid "timestamp out of range: %d-%02d-%02d %d:%02d:%02g" msgstr "timestamp вне диапазона: %d-%02d-%02d %d:%02d:%02g" -#: utils/adt/timestamp.c:919 utils/adt/timestamp.c:1490 -#: utils/adt/timestamp.c:1993 utils/adt/timestamp.c:3133 -#: utils/adt/timestamp.c:3138 utils/adt/timestamp.c:3143 -#: utils/adt/timestamp.c:3193 utils/adt/timestamp.c:3200 -#: utils/adt/timestamp.c:3207 utils/adt/timestamp.c:3227 -#: utils/adt/timestamp.c:3234 utils/adt/timestamp.c:3241 -#: utils/adt/timestamp.c:3270 utils/adt/timestamp.c:3277 -#: utils/adt/timestamp.c:3322 utils/adt/timestamp.c:3613 -#: utils/adt/timestamp.c:3742 utils/adt/timestamp.c:4133 +#: utils/adt/timestamp.c:912 utils/adt/timestamp.c:1483 +#: utils/adt/timestamp.c:1986 utils/adt/timestamp.c:3126 +#: utils/adt/timestamp.c:3131 utils/adt/timestamp.c:3136 +#: utils/adt/timestamp.c:3186 utils/adt/timestamp.c:3193 +#: utils/adt/timestamp.c:3200 utils/adt/timestamp.c:3220 +#: utils/adt/timestamp.c:3227 utils/adt/timestamp.c:3234 +#: utils/adt/timestamp.c:3263 utils/adt/timestamp.c:3270 +#: utils/adt/timestamp.c:3315 utils/adt/timestamp.c:3606 +#: utils/adt/timestamp.c:3735 utils/adt/timestamp.c:4126 #, c-format msgid "interval out of range" msgstr "interval вне диапазона" -#: utils/adt/timestamp.c:1060 utils/adt/timestamp.c:1093 +#: utils/adt/timestamp.c:1053 utils/adt/timestamp.c:1086 #, c-format msgid "invalid INTERVAL type modifier" msgstr "неверный модификатор типа INTERVAL" -#: utils/adt/timestamp.c:1076 +#: utils/adt/timestamp.c:1069 #, c-format msgid "INTERVAL(%d) precision must not be negative" msgstr "INTERVAL(%d): точность должна быть неотрицательна" -#: utils/adt/timestamp.c:1082 +#: utils/adt/timestamp.c:1075 #, c-format msgid "INTERVAL(%d) precision reduced to maximum allowed, %d" msgstr "INTERVAL(%d): точность уменьшена до максимально возможной: %d" -#: utils/adt/timestamp.c:1434 +#: utils/adt/timestamp.c:1427 #, c-format msgid "interval(%d) precision must be between %d and %d" msgstr "точность interval(%d) должна быть между %d и %d" -#: utils/adt/timestamp.c:2722 +#: utils/adt/timestamp.c:2715 #, c-format msgid "cannot subtract infinite timestamps" msgstr "вычитать бесконечные значения timestamp нельзя" -#: utils/adt/timestamp.c:3868 utils/adt/timestamp.c:4474 -#: utils/adt/timestamp.c:4514 +#: utils/adt/timestamp.c:3861 utils/adt/timestamp.c:4467 +#: utils/adt/timestamp.c:4507 #, c-format msgid "timestamp units \"%s\" not supported" msgstr "единицы timestamp \"%s\" не поддерживаются" -#: utils/adt/timestamp.c:3882 utils/adt/timestamp.c:4524 +#: utils/adt/timestamp.c:3875 utils/adt/timestamp.c:4517 #, c-format msgid "timestamp units \"%s\" not recognized" msgstr "единицы timestamp \"%s\" не распознаны" -#: utils/adt/timestamp.c:4022 utils/adt/timestamp.c:4685 -#: utils/adt/timestamp.c:4726 +#: utils/adt/timestamp.c:4015 utils/adt/timestamp.c:4678 +#: utils/adt/timestamp.c:4719 #, c-format msgid "timestamp with time zone units \"%s\" not supported" msgstr "единицы timestamp с часовым поясом \"%s\" не поддерживаются" -#: utils/adt/timestamp.c:4039 utils/adt/timestamp.c:4735 +#: utils/adt/timestamp.c:4032 utils/adt/timestamp.c:4728 #, c-format msgid "timestamp with time zone units \"%s\" not recognized" msgstr "единицы timestamp с часовым поясом \"%s\" не распознаны" -#: utils/adt/timestamp.c:4120 +#: utils/adt/timestamp.c:4113 #, c-format msgid "" "interval units \"%s\" not supported because months usually have fractional " @@ -19392,17 +20765,17 @@ msgstr "" "единицы интервала \"%s\" не поддерживаются, так как в месяцах дробное число " "недель" -#: utils/adt/timestamp.c:4126 utils/adt/timestamp.c:4841 +#: utils/adt/timestamp.c:4119 utils/adt/timestamp.c:4834 #, c-format msgid "interval units \"%s\" not supported" msgstr "единицы interval \"%s\" не поддерживаются" -#: utils/adt/timestamp.c:4142 utils/adt/timestamp.c:4868 +#: utils/adt/timestamp.c:4135 utils/adt/timestamp.c:4861 #, c-format msgid "interval units \"%s\" not recognized" msgstr "единицы interval \"%s\" не распознаны" -#: utils/adt/timestamp.c:4951 utils/adt/timestamp.c:5135 +#: utils/adt/timestamp.c:5025 utils/adt/timestamp.c:5255 #, c-format msgid "could not convert to time zone \"%s\"" msgstr "не удалось пересчитать время в часовой пояс \"%s\"" @@ -19433,43 +20806,43 @@ msgstr "" "функция suppress_redundant_updates_trigger должна вызываться для каждой " "строки" -#: utils/adt/tsgistidx.c:98 +#: utils/adt/tsgistidx.c:99 #, c-format msgid "gtsvector_in not implemented" msgstr "функция gtsvector_in не реализована" -#: utils/adt/tsquery.c:154 utils/adt/tsquery.c:389 +#: utils/adt/tsquery.c:155 utils/adt/tsquery.c:390 #: utils/adt/tsvector_parser.c:133 #, c-format msgid "syntax error in tsquery: \"%s\"" msgstr "ошибка синтаксиса в tsquery: \"%s\"" -#: utils/adt/tsquery.c:175 +#: utils/adt/tsquery.c:176 #, c-format msgid "no operand in tsquery: \"%s\"" msgstr "нет оператора в tsquery: \"%s\"" -#: utils/adt/tsquery.c:247 +#: utils/adt/tsquery.c:248 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "слишком большое значение в tsquery: \"%s\"" -#: utils/adt/tsquery.c:252 +#: utils/adt/tsquery.c:253 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "слишком длинный операнд в tsquery: \"%s\"" -#: utils/adt/tsquery.c:280 +#: utils/adt/tsquery.c:281 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "слишком длинное слово в tsquery: \"%s\"" -#: utils/adt/tsquery.c:509 +#: utils/adt/tsquery.c:510 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "запрос поиска текста не содержит лексемы: \"%s\"" -#: utils/adt/tsquery.c:520 utils/adt/tsquery_util.c:340 +#: utils/adt/tsquery.c:521 utils/adt/tsquery_util.c:340 #, c-format msgid "tsquery is too large" msgstr "tsquery слишком большой" @@ -19488,22 +20861,22 @@ msgstr "" msgid "ts_rewrite query must return two tsquery columns" msgstr "запрос ts_rewrite должен вернуть две колонки типа tsquery" -#: utils/adt/tsrank.c:403 +#: utils/adt/tsrank.c:410 #, c-format msgid "array of weight must be one-dimensional" msgstr "массив весов должен быть одномерным" -#: utils/adt/tsrank.c:408 +#: utils/adt/tsrank.c:415 #, c-format msgid "array of weight is too short" msgstr "массив весов слишком мал" -#: utils/adt/tsrank.c:413 +#: utils/adt/tsrank.c:420 #, c-format msgid "array of weight must not contain nulls" msgstr "массив весов не может содержать null" -#: utils/adt/tsrank.c:422 utils/adt/tsrank.c:749 +#: utils/adt/tsrank.c:429 utils/adt/tsrank.c:756 #, c-format msgid "weight out of range" msgstr "вес вне диапазона" @@ -19618,9 +20991,9 @@ msgstr "неверная длина во внешней строке битов" msgid "bit string too long for type bit varying(%d)" msgstr "строка битов не умещается в тип bit varying(%d)" -#: utils/adt/varbit.c:1066 utils/adt/varbit.c:1168 utils/adt/varlena.c:800 -#: utils/adt/varlena.c:864 utils/adt/varlena.c:1008 utils/adt/varlena.c:1964 -#: utils/adt/varlena.c:2031 +#: utils/adt/varbit.c:1066 utils/adt/varbit.c:1168 utils/adt/varlena.c:832 +#: utils/adt/varlena.c:896 utils/adt/varlena.c:1040 utils/adt/varlena.c:2510 +#: utils/adt/varlena.c:2577 #, c-format msgid "negative substring length not allowed" msgstr "подстрока должна иметь неотрицательную длину" @@ -19646,7 +21019,7 @@ msgstr "" msgid "bit index %d out of valid range (0..%d)" msgstr "индекс бита %d вне диапазона 0..%d" -#: utils/adt/varbit.c:1802 utils/adt/varlena.c:2231 +#: utils/adt/varbit.c:1802 utils/adt/varlena.c:2777 #, c-format msgid "new bit must be 0 or 1" msgstr "значением бита должен быть 0 или 1" @@ -19661,65 +21034,65 @@ msgstr "значение не умещается в тип character(%d)" msgid "value too long for type character varying(%d)" msgstr "значение не умещается в тип character varying(%d)" -#: utils/adt/varlena.c:1380 +#: utils/adt/varlena.c:1410 utils/adt/varlena.c:1799 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "" "не удалось определить, какое правило сортировки использовать для сравнения " "строк" -#: utils/adt/varlena.c:1426 utils/adt/varlena.c:1439 +#: utils/adt/varlena.c:1468 utils/adt/varlena.c:1481 #, c-format msgid "could not convert string to UTF-16: error code %lu" -msgstr "не удалось преобразовать строку в UTF-16: код ошибки %lu" +msgstr "не удалось преобразовать строку в UTF-16 (код ошибки: %lu)" -#: utils/adt/varlena.c:1454 +#: utils/adt/varlena.c:1496 #, c-format msgid "could not compare Unicode strings: %m" msgstr "не удалось сравнить строки в Unicode: %m" -#: utils/adt/varlena.c:2109 utils/adt/varlena.c:2140 utils/adt/varlena.c:2176 -#: utils/adt/varlena.c:2219 +#: utils/adt/varlena.c:2655 utils/adt/varlena.c:2686 utils/adt/varlena.c:2722 +#: utils/adt/varlena.c:2765 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "индекс %d вне диапазона 0..%d" -#: utils/adt/varlena.c:3138 +#: utils/adt/varlena.c:3684 #, c-format msgid "field position must be greater than zero" msgstr "позиция поля должна быть больше нуля" -#: utils/adt/varlena.c:4017 +#: utils/adt/varlena.c:4563 #, c-format msgid "unterminated format specifier" msgstr "незавершённый спецификатор формата" -#: utils/adt/varlena.c:4149 utils/adt/varlena.c:4269 +#: utils/adt/varlena.c:4695 utils/adt/varlena.c:4815 #, c-format msgid "unrecognized conversion type specifier \"%c\"" msgstr "нераспознанный спецификатор преобразования \"%c\"" -#: utils/adt/varlena.c:4161 utils/adt/varlena.c:4218 +#: utils/adt/varlena.c:4707 utils/adt/varlena.c:4764 #, c-format msgid "too few arguments for format" msgstr "мало аргументов для формата" -#: utils/adt/varlena.c:4312 utils/adt/varlena.c:4495 +#: utils/adt/varlena.c:4858 utils/adt/varlena.c:5041 #, c-format msgid "number is out of range" msgstr "число вне диапазона" -#: utils/adt/varlena.c:4376 utils/adt/varlena.c:4404 +#: utils/adt/varlena.c:4922 utils/adt/varlena.c:4950 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "формат ссылается на аргумент 0, но аргументы нумеруются с 1" -#: utils/adt/varlena.c:4397 +#: utils/adt/varlena.c:4943 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "указание аргумента ширины должно оканчиваться \"$\"" -#: utils/adt/varlena.c:4442 +#: utils/adt/varlena.c:4988 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "значения null нельзя представить в виде SQL-идентификатора" @@ -19809,162 +21182,162 @@ msgstr "" "Возможно это означает, что используемая версия libxml2 не совместима с " "заголовочными файлами libxml2, с которыми был собран PostgreSQL." -#: utils/adt/xml.c:1733 +#: utils/adt/xml.c:1737 msgid "Invalid character value." msgstr "Неверный символ." -#: utils/adt/xml.c:1736 +#: utils/adt/xml.c:1740 msgid "Space required." msgstr "Требуется пробел." -#: utils/adt/xml.c:1739 +#: utils/adt/xml.c:1743 msgid "standalone accepts only 'yes' or 'no'." msgstr "значениями атрибута standalone могут быть только 'yes' и 'no'." -#: utils/adt/xml.c:1742 +#: utils/adt/xml.c:1746 msgid "Malformed declaration: missing version." msgstr "Ошибочное объявление: не указана версия." -#: utils/adt/xml.c:1745 +#: utils/adt/xml.c:1749 msgid "Missing encoding in text declaration." msgstr "В объявлении не указана кодировка." -#: utils/adt/xml.c:1748 +#: utils/adt/xml.c:1752 msgid "Parsing XML declaration: '?>' expected." msgstr "Ошибка при разборе XML-объявления: ожидается '?>'." -#: utils/adt/xml.c:1751 +#: utils/adt/xml.c:1755 #, c-format msgid "Unrecognized libxml error code: %d." -msgstr "нераспознанный код ошибки libxml: %d." +msgstr "Нераспознанный код ошибки libxml: %d." -#: utils/adt/xml.c:2026 +#: utils/adt/xml.c:2030 #, c-format msgid "XML does not support infinite date values." msgstr "XML не поддерживает бесконечность в датах." -#: utils/adt/xml.c:2048 utils/adt/xml.c:2075 +#: utils/adt/xml.c:2052 utils/adt/xml.c:2079 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML не поддерживает бесконечность в timestamp." -#: utils/adt/xml.c:2466 +#: utils/adt/xml.c:2470 #, c-format msgid "invalid query" msgstr "неверный запрос" -#: utils/adt/xml.c:3796 +#: utils/adt/xml.c:3795 #, c-format msgid "invalid array for XML namespace mapping" msgstr "неправильный массив с сопоставлениями пространств имён XML" -#: utils/adt/xml.c:3797 +#: utils/adt/xml.c:3796 #, c-format msgid "" "The array must be two-dimensional with length of the second axis equal to 2." msgstr "Массив должен быть двухмерным и содержать 2 элемента по второй оси." -#: utils/adt/xml.c:3821 +#: utils/adt/xml.c:3820 #, c-format msgid "empty XPath expression" msgstr "пустое выражение XPath" -#: utils/adt/xml.c:3870 +#: utils/adt/xml.c:3869 #, c-format msgid "neither namespace name nor URI may be null" msgstr "ни префикс, ни URI пространства имён не может быть null" -#: utils/adt/xml.c:3877 +#: utils/adt/xml.c:3876 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "" "не удалось зарегистрировать пространство имён XML с префиксом \"%s\" и URI " "\"%s\"" -#: utils/cache/lsyscache.c:2478 utils/cache/lsyscache.c:2511 -#: utils/cache/lsyscache.c:2544 utils/cache/lsyscache.c:2577 +#: utils/cache/lsyscache.c:2515 utils/cache/lsyscache.c:2548 +#: utils/cache/lsyscache.c:2581 utils/cache/lsyscache.c:2614 #, c-format msgid "type %s is only a shell" msgstr "тип %s - лишь оболочка" -#: utils/cache/lsyscache.c:2483 +#: utils/cache/lsyscache.c:2520 #, c-format msgid "no input function available for type %s" msgstr "для типа %s нет функции ввода" -#: utils/cache/lsyscache.c:2516 +#: utils/cache/lsyscache.c:2553 #, c-format msgid "no output function available for type %s" msgstr "для типа %s нет функции вывода" -#: utils/cache/plancache.c:698 +#: utils/cache/plancache.c:738 #, c-format msgid "cached plan must not change result type" msgstr "в кэшированном плане не должен изменяться тип результата" -#: utils/cache/relcache.c:4844 +#: utils/cache/relcache.c:4994 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "создать файл инициализации для кэша отношений \"%s\" не удалось: %m" -#: utils/cache/relcache.c:4846 +#: utils/cache/relcache.c:4996 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Продолжаем всё равно, хотя что-то не так." -#: utils/cache/relcache.c:5060 +#: utils/cache/relcache.c:5229 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "не удалось стереть файл кэша \"%s\": %m" -#: utils/cache/relmapper.c:506 +#: utils/cache/relmapper.c:508 #, c-format msgid "cannot PREPARE a transaction that modified relation mapping" msgstr "" "выполнить PREPARE для транзакции, изменившей сопоставление отношений, нельзя" -#: utils/cache/relmapper.c:649 utils/cache/relmapper.c:749 +#: utils/cache/relmapper.c:651 utils/cache/relmapper.c:751 #, c-format msgid "could not open relation mapping file \"%s\": %m" msgstr "открыть файл сопоставления отношений \"%s\" не удалось: %m" -#: utils/cache/relmapper.c:662 +#: utils/cache/relmapper.c:664 #, c-format msgid "could not read relation mapping file \"%s\": %m" msgstr "прочитать файл сопоставления отношений \"%s\" не удалось: %m " -#: utils/cache/relmapper.c:672 +#: utils/cache/relmapper.c:674 #, c-format msgid "relation mapping file \"%s\" contains invalid data" msgstr "файл сопоставления отношений \"%s\" содержит неверные данные" -#: utils/cache/relmapper.c:682 +#: utils/cache/relmapper.c:684 #, c-format msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "ошибка контрольной суммы в файле сопоставления отношений \"%s\"" -#: utils/cache/relmapper.c:788 +#: utils/cache/relmapper.c:784 #, c-format msgid "could not write to relation mapping file \"%s\": %m" msgstr "записать в файл сопоставления отношений \"%s\" не удалось: %m" -#: utils/cache/relmapper.c:801 +#: utils/cache/relmapper.c:797 #, c-format msgid "could not fsync relation mapping file \"%s\": %m" msgstr "" "синхронизировать файл сопоставления отношений \"%s\" с ФС не удалось: %m" -#: utils/cache/relmapper.c:807 +#: utils/cache/relmapper.c:803 #, c-format msgid "could not close relation mapping file \"%s\": %m" msgstr "закрыть файл сопоставления отношений \"%s\" не удалось: %m" -#: utils/cache/typcache.c:704 +#: utils/cache/typcache.c:1156 #, c-format msgid "type %s is not composite" msgstr "тип %s не является составным" -#: utils/cache/typcache.c:718 +#: utils/cache/typcache.c:1170 #, c-format msgid "record type has not been registered" msgstr "тип записи не зарегистрирован" @@ -19979,190 +21352,190 @@ msgstr "ЛОВУШКА: Исключительное условие: невер msgid "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n" msgstr "ЛОВУШКА: %s(\"%s\", файл: \"%s\", строка: %d)\n" -#: utils/error/elog.c:320 utils/error/elog.c:1305 +#: utils/error/elog.c:316 utils/error/elog.c:1297 #, c-format msgid "error occurred at %s:%d before error message processing is available\n" msgstr "" "в %s:%d произошла ошибка до готовности подсистемы обработки сообщений\n" -#: utils/error/elog.c:1821 +#: utils/error/elog.c:1864 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "открыть файл \"%s\" как stderr не удалось: %m" -#: utils/error/elog.c:1834 +#: utils/error/elog.c:1877 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "открыть файл \"%s\" как stdout не удалось: %m" -#: utils/error/elog.c:2309 utils/error/elog.c:2326 utils/error/elog.c:2342 +#: utils/error/elog.c:2353 utils/error/elog.c:2370 utils/error/elog.c:2386 msgid "[unknown]" msgstr "[н/д]" -#: utils/error/elog.c:2780 utils/error/elog.c:3079 utils/error/elog.c:3187 +#: utils/error/elog.c:2825 utils/error/elog.c:3124 utils/error/elog.c:3232 msgid "missing error text" msgstr "отсутствует текст ошибки" -#: utils/error/elog.c:2783 utils/error/elog.c:2786 utils/error/elog.c:3190 -#: utils/error/elog.c:3193 +#: utils/error/elog.c:2828 utils/error/elog.c:2831 utils/error/elog.c:3235 +#: utils/error/elog.c:3238 #, c-format msgid " at character %d" msgstr " (символ %d)" -#: utils/error/elog.c:2796 utils/error/elog.c:2803 +#: utils/error/elog.c:2841 utils/error/elog.c:2848 msgid "DETAIL: " msgstr "ПОДРОБНОСТИ: " -#: utils/error/elog.c:2810 +#: utils/error/elog.c:2855 msgid "HINT: " msgstr "ПОДСКАЗКА: " -#: utils/error/elog.c:2817 +#: utils/error/elog.c:2862 msgid "QUERY: " msgstr "ЗАПРОС: " -#: utils/error/elog.c:2824 +#: utils/error/elog.c:2869 msgid "CONTEXT: " msgstr "КОНТЕКСТ: " -#: utils/error/elog.c:2834 +#: utils/error/elog.c:2879 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "ПОЛОЖЕНИЕ: %s, %s:%d\n" -#: utils/error/elog.c:2841 +#: utils/error/elog.c:2886 #, c-format msgid "LOCATION: %s:%d\n" msgstr "ПОЛОЖЕНИЕ: %s:%d\n" -#: utils/error/elog.c:2855 +#: utils/error/elog.c:2900 msgid "STATEMENT: " msgstr "ОПЕРАТОР: " #. translator: This string will be truncated at 47 #. characters expanded. -#: utils/error/elog.c:3308 +#: utils/error/elog.c:3353 #, c-format msgid "operating system error %d" msgstr "ошибка операционной системы %d" -#: utils/error/elog.c:3503 +#: utils/error/elog.c:3548 msgid "DEBUG" msgstr "ОТЛАДКА" -#: utils/error/elog.c:3507 +#: utils/error/elog.c:3552 msgid "LOG" msgstr "ОТМЕТКА" -#: utils/error/elog.c:3510 +#: utils/error/elog.c:3555 msgid "INFO" msgstr "ИНФОРМАЦИЯ" -#: utils/error/elog.c:3513 +#: utils/error/elog.c:3558 msgid "NOTICE" msgstr "ЗАМЕЧАНИЕ" -#: utils/error/elog.c:3516 +#: utils/error/elog.c:3561 msgid "WARNING" msgstr "ПРЕДУПРЕЖДЕНИЕ" -#: utils/error/elog.c:3519 +#: utils/error/elog.c:3564 msgid "ERROR" msgstr "ОШИБКА" -#: utils/error/elog.c:3522 +#: utils/error/elog.c:3567 msgid "FATAL" msgstr "ВАЖНО" -#: utils/error/elog.c:3525 +#: utils/error/elog.c:3570 msgid "PANIC" msgstr "ПАНИКА" -#: utils/fmgr/dfmgr.c:125 +#: utils/fmgr/dfmgr.c:121 #, c-format msgid "could not find function \"%s\" in file \"%s\"" msgstr "не удалось найти функцию \"%s\" в файле \"%s\"" -#: utils/fmgr/dfmgr.c:204 utils/fmgr/dfmgr.c:413 utils/fmgr/dfmgr.c:461 +#: utils/fmgr/dfmgr.c:200 utils/fmgr/dfmgr.c:409 utils/fmgr/dfmgr.c:457 #, c-format msgid "could not access file \"%s\": %m" msgstr "нет доступа к файлу \"%s\": %m" -#: utils/fmgr/dfmgr.c:242 +#: utils/fmgr/dfmgr.c:238 #, c-format msgid "could not load library \"%s\": %s" msgstr "загрузить библиотеку \"%s\" не удалось: %s" -#: utils/fmgr/dfmgr.c:274 +#: utils/fmgr/dfmgr.c:270 #, c-format msgid "incompatible library \"%s\": missing magic block" msgstr "несовместимая библиотека \"%s\": нет отличительного блока" -#: utils/fmgr/dfmgr.c:276 +#: utils/fmgr/dfmgr.c:272 #, c-format msgid "Extension libraries are required to use the PG_MODULE_MAGIC macro." msgstr "Внешние библиотеки должны использовать макрос PG_MODULE_MAGIC." -#: utils/fmgr/dfmgr.c:312 +#: utils/fmgr/dfmgr.c:308 #, c-format msgid "incompatible library \"%s\": version mismatch" msgstr "несовместимая библиотека \"%s\": несовпадение версий" -#: utils/fmgr/dfmgr.c:314 +#: utils/fmgr/dfmgr.c:310 #, c-format msgid "Server is version %d.%d, library is version %d.%d." msgstr "Версия сервера: %d.%d, версия библиотеки: %d.%d." -#: utils/fmgr/dfmgr.c:333 +#: utils/fmgr/dfmgr.c:329 #, c-format msgid "Server has FUNC_MAX_ARGS = %d, library has %d." msgstr "В сервере FUNC_MAX_ARGS = %d, в библиотеке: %d." -#: utils/fmgr/dfmgr.c:342 +#: utils/fmgr/dfmgr.c:338 #, c-format msgid "Server has INDEX_MAX_KEYS = %d, library has %d." msgstr "В сервере INDEX_MAX_KEYS = %d, в библиотеке: %d." -#: utils/fmgr/dfmgr.c:351 +#: utils/fmgr/dfmgr.c:347 #, c-format msgid "Server has NAMEDATALEN = %d, library has %d." msgstr "В сервере NAMEDATALEN = %d, в библиотеке: %d." -#: utils/fmgr/dfmgr.c:360 +#: utils/fmgr/dfmgr.c:356 #, c-format msgid "Server has FLOAT4PASSBYVAL = %s, library has %s." msgstr "В сервере FLOAT4PASSBYVAL = %s, в библиотеке: %s." -#: utils/fmgr/dfmgr.c:369 +#: utils/fmgr/dfmgr.c:365 #, c-format msgid "Server has FLOAT8PASSBYVAL = %s, library has %s." msgstr "В сервере FLOAT8PASSBYVAL = %s, в библиотеке: %s." -#: utils/fmgr/dfmgr.c:376 +#: utils/fmgr/dfmgr.c:372 msgid "Magic block has unexpected length or padding difference." msgstr "Отличительный блок имеет неверную длину или дополнен по-другому." -#: utils/fmgr/dfmgr.c:379 +#: utils/fmgr/dfmgr.c:375 #, c-format msgid "incompatible library \"%s\": magic block mismatch" msgstr "несовместимая библиотека \"%s\": несоответствие отличительного блока" -#: utils/fmgr/dfmgr.c:543 +#: utils/fmgr/dfmgr.c:539 #, c-format msgid "access to library \"%s\" is not allowed" msgstr "доступ к библиотеке \"%s\" не разрешён" -#: utils/fmgr/dfmgr.c:569 +#: utils/fmgr/dfmgr.c:565 #, c-format msgid "invalid macro name in dynamic library path: %s" msgstr "неправильный макрос в пути динамической библиотеки: %s" -#: utils/fmgr/dfmgr.c:609 +#: utils/fmgr/dfmgr.c:605 #, c-format msgid "zero-length component in parameter \"dynamic_library_path\"" msgstr "параметр dynamic_library_path содержит компонент нулевой длины" -#: utils/fmgr/dfmgr.c:628 +#: utils/fmgr/dfmgr.c:624 #, c-format msgid "component in parameter \"dynamic_library_path\" is not an absolute path" msgstr "" @@ -20180,12 +21553,12 @@ msgid "unrecognized API version %d reported by info function \"%s\"" msgstr "" "версия API (%d), выданная информационной функцией \"%s\", не поддерживается" -#: utils/fmgr/fmgr.c:850 utils/fmgr/fmgr.c:2111 +#: utils/fmgr/fmgr.c:849 utils/fmgr/fmgr.c:2110 #, c-format msgid "function %u has too many arguments (%d, maximum is %d)" msgstr "у функции %u слишком много аргументов (%d, при максимуме %d)" -#: utils/fmgr/fmgr.c:2532 +#: utils/fmgr/fmgr.c:2531 #, c-format msgid "language validation function %u called for language %u instead of %u" msgstr "функция языковой проверки %u вызвана для языка %u (а не %u)" @@ -20199,74 +21572,74 @@ msgstr "" "не удалось определить действительный тип результата для функции \"%s\", " "объявленной как возвращающая тип %s" -#: utils/fmgr/funcapi.c:1300 utils/fmgr/funcapi.c:1331 +#: utils/fmgr/funcapi.c:1342 utils/fmgr/funcapi.c:1373 #, c-format msgid "number of aliases does not match number of columns" msgstr "число псевдонимов не совпадает с числом колонок" -#: utils/fmgr/funcapi.c:1325 +#: utils/fmgr/funcapi.c:1367 #, c-format msgid "no column alias was provided" msgstr "псевдоним колонки не указан" -#: utils/fmgr/funcapi.c:1349 +#: utils/fmgr/funcapi.c:1391 #, c-format msgid "could not determine row description for function returning record" msgstr "не удалось определить описание строки для функции, возвращающей запись" -#: utils/init/miscinit.c:116 +#: utils/init/miscinit.c:120 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "не удалось перейти в каталог \"%s\": %m" -#: utils/init/miscinit.c:311 utils/misc/guc.c:5707 +#: utils/init/miscinit.c:425 utils/misc/guc.c:5848 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "" "параметр \"%s\" нельзя задать в рамках операции с ограничениями по " "безопасности" -#: utils/init/miscinit.c:390 +#: utils/init/miscinit.c:506 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "для роли \"%s\" вход запрещён" -#: utils/init/miscinit.c:408 +#: utils/init/miscinit.c:524 #, c-format msgid "too many connections for role \"%s\"" msgstr "слишком много подключений для роли \"%s\"" -#: utils/init/miscinit.c:468 +#: utils/init/miscinit.c:584 #, c-format msgid "permission denied to set session authorization" msgstr "нет прав для смены объекта авторизации в сеансе" -#: utils/init/miscinit.c:548 +#: utils/init/miscinit.c:667 #, c-format msgid "invalid role OID: %u" msgstr "неверный OID роли: %u" -#: utils/init/miscinit.c:675 +#: utils/init/miscinit.c:797 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "не удалось создать файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:689 +#: utils/init/miscinit.c:811 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "не удалось открыть файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:695 +#: utils/init/miscinit.c:817 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "не удалось прочитать файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:703 +#: utils/init/miscinit.c:825 #, c-format msgid "lock file \"%s\" is empty" msgstr "файл блокировки \"%s\" пуст" -#: utils/init/miscinit.c:704 +#: utils/init/miscinit.c:826 #, c-format msgid "" "Either another server is starting, or the lock file is the remnant of a " @@ -20275,40 +21648,40 @@ msgstr "" "Либо сейчас запускается другой сервер, либо этот файл остался в результате " "сбоя при предыдущем запуске." -#: utils/init/miscinit.c:751 +#: utils/init/miscinit.c:873 #, c-format msgid "lock file \"%s\" already exists" msgstr "файл блокировки \"%s\" уже существует" -#: utils/init/miscinit.c:755 +#: utils/init/miscinit.c:877 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "Другой экземпляр postgres (PID %d) работает с каталогом данных \"%s\"?" -#: utils/init/miscinit.c:757 +#: utils/init/miscinit.c:879 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "" "Другой экземпляр postmaster (PID %d) работает с каталогом данных \"%s\"?" -#: utils/init/miscinit.c:760 +#: utils/init/miscinit.c:882 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "Другой экземпляр postgres (PID %d) использует файл сокета \"%s\"?" -#: utils/init/miscinit.c:762 +#: utils/init/miscinit.c:884 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "Другой экземпляр postmaster (PID %d) использует файл сокета \"%s\"?" -#: utils/init/miscinit.c:798 +#: utils/init/miscinit.c:920 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "" "ранее выделенный блок разделяемой памяти (ключ %lu, ID %lu) по-прежнему " "используется" -#: utils/init/miscinit.c:801 +#: utils/init/miscinit.c:923 #, c-format msgid "" "If you're sure there are no old server processes still running, remove the " @@ -20317,12 +21690,12 @@ msgstr "" "Если вы уверены, что процессов старого сервера уже не осталось, освободите " "этот блок разделяемой памяти или просто удалите файл \"%s\"." -#: utils/init/miscinit.c:817 +#: utils/init/miscinit.c:939 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "не удалось стереть старый файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:819 +#: utils/init/miscinit.c:941 #, c-format msgid "" "The file seems accidentally left over, but it could not be removed. Please " @@ -20331,38 +21704,38 @@ msgstr "" "Кажется, файл сохранился по ошибке, но удалить его не получилось. " "Пожалуйста, удалите файл вручную и повторите попытку." -#: utils/init/miscinit.c:855 utils/init/miscinit.c:866 -#: utils/init/miscinit.c:876 +#: utils/init/miscinit.c:977 utils/init/miscinit.c:988 +#: utils/init/miscinit.c:998 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "не удалось записать файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:1001 utils/misc/guc.c:8359 +#: utils/init/miscinit.c:1123 utils/misc/guc.c:8618 #, c-format msgid "could not read from file \"%s\": %m" msgstr "не удалось прочитать файл \"%s\": %m" -#: utils/init/miscinit.c:1115 utils/init/miscinit.c:1128 +#: utils/init/miscinit.c:1237 utils/init/miscinit.c:1250 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "\"%s\" не является каталогом данных" -#: utils/init/miscinit.c:1117 +#: utils/init/miscinit.c:1239 #, c-format msgid "File \"%s\" is missing." msgstr "Файл \"%s\" отсутствует." -#: utils/init/miscinit.c:1130 +#: utils/init/miscinit.c:1252 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Файл \"%s\" содержит неприемлемые данные." -#: utils/init/miscinit.c:1132 +#: utils/init/miscinit.c:1254 #, c-format msgid "You might need to initdb." msgstr "Возможно, вам нужно выполнить initdb." -#: utils/init/miscinit.c:1140 +#: utils/init/miscinit.c:1262 #, c-format msgid "" "The data directory was initialized by PostgreSQL version %ld.%ld, which is " @@ -20371,12 +21744,12 @@ msgstr "" "Каталог данных инициализирован сервером PostgreSQL версии %ld.%ld, не " "совместимой с данной версией (%s)." -#: utils/init/miscinit.c:1211 +#: utils/init/miscinit.c:1333 #, c-format msgid "loaded library \"%s\"" msgstr "загружена библиотека \"%s\"" -#: utils/init/postinit.c:237 +#: utils/init/postinit.c:251 #, c-format msgid "" "replication connection authorized: user=%s SSL enabled (protocol=%s, cipher=" @@ -20385,20 +21758,20 @@ msgstr "" "подключение для репликации авторизовано: пользователь=%s, SSL включён " "(протокол=%s, шифр=%s, сжатие=%s)" -#: utils/init/postinit.c:239 utils/init/postinit.c:253 +#: utils/init/postinit.c:253 utils/init/postinit.c:267 msgid "off" msgstr "выкл." -#: utils/init/postinit.c:239 utils/init/postinit.c:253 +#: utils/init/postinit.c:253 utils/init/postinit.c:267 msgid "on" msgstr "вкл." -#: utils/init/postinit.c:243 +#: utils/init/postinit.c:257 #, c-format msgid "replication connection authorized: user=%s" msgstr "подключение для репликации авторизовано: пользователь=%s" -#: utils/init/postinit.c:251 +#: utils/init/postinit.c:265 #, c-format msgid "" "connection authorized: user=%s database=%s SSL enabled (protocol=%s, cipher=" @@ -20407,47 +21780,47 @@ msgstr "" "подключение авторизовано: пользователь=%s, база=%s, SSL включён (протокол=" "%s, шифр=%s, сжатие=%s)" -#: utils/init/postinit.c:257 +#: utils/init/postinit.c:271 #, c-format msgid "connection authorized: user=%s database=%s" msgstr "подключение авторизовано: пользователь=%s, база=%s" -#: utils/init/postinit.c:289 +#: utils/init/postinit.c:303 #, c-format msgid "database \"%s\" has disappeared from pg_database" msgstr "база данных \"%s\" исчезла из pg_database" -#: utils/init/postinit.c:291 +#: utils/init/postinit.c:305 #, c-format msgid "Database OID %u now seems to belong to \"%s\"." msgstr "Похоже, базой данных с OID %u теперь владеет \"%s\"." -#: utils/init/postinit.c:311 +#: utils/init/postinit.c:325 #, c-format msgid "database \"%s\" is not currently accepting connections" msgstr "база \"%s\" не принимает подключения в данный момент" -#: utils/init/postinit.c:324 +#: utils/init/postinit.c:338 #, c-format msgid "permission denied for database \"%s\"" msgstr "доступ к базе \"%s\" запрещён" -#: utils/init/postinit.c:325 +#: utils/init/postinit.c:339 #, c-format msgid "User does not have CONNECT privilege." msgstr "Пользователь не имеет привилегии CONNECT." -#: utils/init/postinit.c:342 +#: utils/init/postinit.c:356 #, c-format msgid "too many connections for database \"%s\"" msgstr "слишком много подключений к БД \"%s\"" -#: utils/init/postinit.c:364 utils/init/postinit.c:371 +#: utils/init/postinit.c:378 utils/init/postinit.c:385 #, c-format msgid "database locale is incompatible with operating system" msgstr "локаль БД несовместима с операционной системой" -#: utils/init/postinit.c:365 +#: utils/init/postinit.c:379 #, c-format msgid "" "The database was initialized with LC_COLLATE \"%s\", which is not " @@ -20456,7 +21829,7 @@ msgstr "" "База данных была инициализирована с параметром LC_COLLATE \"%s\", но сейчас " "setlocale() не воспринимает его." -#: utils/init/postinit.c:367 utils/init/postinit.c:374 +#: utils/init/postinit.c:381 utils/init/postinit.c:388 #, c-format msgid "" "Recreate the database with another locale or install the missing locale." @@ -20464,7 +21837,7 @@ msgstr "" "Пересоздайте базу данных с другой локалью или установите поддержку нужной " "локали." -#: utils/init/postinit.c:372 +#: utils/init/postinit.c:386 #, c-format msgid "" "The database was initialized with LC_CTYPE \"%s\", which is not recognized " @@ -20473,36 +21846,36 @@ msgstr "" "База данных была инициализирована с параметром LC_CTYPE \"%s\", но сейчас " "setlocale() не воспринимает его." -#: utils/init/postinit.c:667 +#: utils/init/postinit.c:712 #, c-format msgid "no roles are defined in this database system" msgstr "в этой системе баз данных не создано ни одной роли" -#: utils/init/postinit.c:668 +#: utils/init/postinit.c:713 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Вы должны немедленно выполнить CREATE USER \"%s\" CREATEUSER;." -#: utils/init/postinit.c:704 +#: utils/init/postinit.c:749 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "" "новые подключения для репликации не допускаются в процессе остановки БД" -#: utils/init/postinit.c:708 +#: utils/init/postinit.c:753 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "" "нужно быть суперпользователем, чтобы подключиться в процессе остановки БД" -#: utils/init/postinit.c:718 +#: utils/init/postinit.c:763 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "" "нужно быть суперпользователем, чтобы подключиться в режиме двоичного " "обновления" -#: utils/init/postinit.c:732 +#: utils/init/postinit.c:777 #, c-format msgid "" "remaining connection slots are reserved for non-replication superuser " @@ -20511,46 +21884,46 @@ msgstr "" "оставшиеся слоты подключений зарезервированы для подключений " "суперпользователя (не для репликации)" -#: utils/init/postinit.c:742 +#: utils/init/postinit.c:787 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "" "для запуска процесса walsender требуется роль репликации или права " "суперпользователя" -#: utils/init/postinit.c:811 +#: utils/init/postinit.c:856 #, c-format msgid "database %u does not exist" msgstr "база данных \"%u не существует" -#: utils/init/postinit.c:863 +#: utils/init/postinit.c:942 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Похоже, она только что была удалена или переименована." -#: utils/init/postinit.c:881 +#: utils/init/postinit.c:960 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Подкаталог базы данных \"%s\" отсутствует." -#: utils/init/postinit.c:886 +#: utils/init/postinit.c:965 #, c-format msgid "could not access directory \"%s\": %m" msgstr "ошибка доступа к каталогу \"%s\": %m" -#: utils/mb/conv.c:519 +#: utils/mb/conv.c:360 utils/mb/conv.c:546 #, c-format msgid "invalid encoding number: %d" msgstr "неверный номер кодировки: %d" -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:136 -#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:163 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:137 +#: utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c:169 #, c-format msgid "unexpected encoding ID %d for ISO 8859 character sets" msgstr "неожиданный ID кодировки %d для наборов символов ISO 8859" -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:126 -#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:153 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:127 +#: utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c:159 #, c-format msgid "unexpected encoding ID %d for WIN character sets" msgstr "неожиданный ID кодировки %d для наборов символов WIN" @@ -20597,12 +21970,12 @@ msgstr "недопустимое байтовое значение для код msgid "bind_textdomain_codeset failed" msgstr "ошибка в bind_textdomain_codeset" -#: utils/mb/wchar.c:2009 +#: utils/mb/wchar.c:2015 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "неверная последовательность байт для кодировки \"%s\": %s" -#: utils/mb/wchar.c:2042 +#: utils/mb/wchar.c:2048 #, c-format msgid "" "character with byte sequence %s in encoding \"%s\" has no equivalent in " @@ -20611,270 +21984,287 @@ msgstr "" "для символа с последовательностью байт %s из кодировки \"%s\" нет " "эквивалента в \"%s\"" -#: utils/misc/guc.c:544 +#: utils/misc/guc.c:545 msgid "Ungrouped" msgstr "Разное" -#: utils/misc/guc.c:546 +#: utils/misc/guc.c:547 msgid "File Locations" msgstr "Расположения файлов" -#: utils/misc/guc.c:548 +#: utils/misc/guc.c:549 msgid "Connections and Authentication" msgstr "Подключения и аутентификация" -#: utils/misc/guc.c:550 +#: utils/misc/guc.c:551 msgid "Connections and Authentication / Connection Settings" msgstr "Подключения и аутентификация / Параметры подключения" -#: utils/misc/guc.c:552 +#: utils/misc/guc.c:553 msgid "Connections and Authentication / Security and Authentication" msgstr "Подключения и аутентификация / Безопасность и аутентификация" -#: utils/misc/guc.c:554 +#: utils/misc/guc.c:555 msgid "Resource Usage" msgstr "Использование ресурсов" -#: utils/misc/guc.c:556 +#: utils/misc/guc.c:557 msgid "Resource Usage / Memory" msgstr "Использование ресурсов / Память" -#: utils/misc/guc.c:558 +#: utils/misc/guc.c:559 msgid "Resource Usage / Disk" msgstr "Использование ресурсов / Диск" -#: utils/misc/guc.c:560 +#: utils/misc/guc.c:561 msgid "Resource Usage / Kernel Resources" msgstr "Использование ресурсов / Ресурсы ядра" -#: utils/misc/guc.c:562 +#: utils/misc/guc.c:563 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Использование ресурсов / Задержка очистки по стоимости" -#: utils/misc/guc.c:564 +#: utils/misc/guc.c:565 msgid "Resource Usage / Background Writer" msgstr "Использование ресурсов / Фоновая запись" -#: utils/misc/guc.c:566 +#: utils/misc/guc.c:567 msgid "Resource Usage / Asynchronous Behavior" msgstr "Использование ресурсов / Асинхронное поведение" -#: utils/misc/guc.c:568 +#: utils/misc/guc.c:569 msgid "Write-Ahead Log" msgstr "Журнал WAL" -#: utils/misc/guc.c:570 +#: utils/misc/guc.c:571 msgid "Write-Ahead Log / Settings" msgstr "Журнал WAL / Настройки" -#: utils/misc/guc.c:572 +#: utils/misc/guc.c:573 msgid "Write-Ahead Log / Checkpoints" msgstr "Журнал WAL / Контрольные точки" -#: utils/misc/guc.c:574 +#: utils/misc/guc.c:575 msgid "Write-Ahead Log / Archiving" msgstr "Журнал WAL / Архивация" -#: utils/misc/guc.c:576 +#: utils/misc/guc.c:577 msgid "Replication" msgstr "Репликация" -#: utils/misc/guc.c:578 +#: utils/misc/guc.c:579 msgid "Replication / Sending Servers" msgstr "Репликация / Передающие серверы" -#: utils/misc/guc.c:580 +#: utils/misc/guc.c:581 msgid "Replication / Master Server" msgstr "Репликация / Главный сервер" -#: utils/misc/guc.c:582 +#: utils/misc/guc.c:583 msgid "Replication / Standby Servers" msgstr "Репликация / Резервные серверы" -#: utils/misc/guc.c:584 +#: utils/misc/guc.c:585 msgid "Query Tuning" msgstr "Настройка запросов" -#: utils/misc/guc.c:586 +#: utils/misc/guc.c:587 msgid "Query Tuning / Planner Method Configuration" msgstr "Настройка запросов / Конфигурация методов планировщика" -#: utils/misc/guc.c:588 +#: utils/misc/guc.c:589 msgid "Query Tuning / Planner Cost Constants" msgstr "Настройка запросов / Оценочные константы планировщика" -#: utils/misc/guc.c:590 +#: utils/misc/guc.c:591 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Настройка запросов / Генетический оптимизатор запросов" -#: utils/misc/guc.c:592 +#: utils/misc/guc.c:593 msgid "Query Tuning / Other Planner Options" msgstr "Настройка запросов / Другие параметры планировщика" -#: utils/misc/guc.c:594 +#: utils/misc/guc.c:595 msgid "Reporting and Logging" msgstr "Отчёты и протоколы" -#: utils/misc/guc.c:596 +#: utils/misc/guc.c:597 msgid "Reporting and Logging / Where to Log" msgstr "Отчёты и протоколы / Куда записывать" -#: utils/misc/guc.c:598 +#: utils/misc/guc.c:599 msgid "Reporting and Logging / When to Log" msgstr "Отчёты и протоколы / Когда записывать" -#: utils/misc/guc.c:600 +#: utils/misc/guc.c:601 msgid "Reporting and Logging / What to Log" msgstr "Отчёты и протоколы / Что записывать" -#: utils/misc/guc.c:602 +#: utils/misc/guc.c:603 msgid "Statistics" msgstr "Статистика" -#: utils/misc/guc.c:604 +#: utils/misc/guc.c:605 msgid "Statistics / Monitoring" msgstr "Статистика / Мониторинг" -#: utils/misc/guc.c:606 +#: utils/misc/guc.c:607 msgid "Statistics / Query and Index Statistics Collector" msgstr "Статистика / Сборщик статистики запросов и индексов" -#: utils/misc/guc.c:608 +#: utils/misc/guc.c:609 msgid "Autovacuum" msgstr "Автоочистка" -#: utils/misc/guc.c:610 +#: utils/misc/guc.c:611 msgid "Client Connection Defaults" msgstr "Параметры клиентских подключений по умолчанию" -#: utils/misc/guc.c:612 +#: utils/misc/guc.c:613 msgid "Client Connection Defaults / Statement Behavior" msgstr "Параметры клиентских подключений по умолчанию / Поведение команд" -#: utils/misc/guc.c:614 +#: utils/misc/guc.c:615 msgid "Client Connection Defaults / Locale and Formatting" msgstr "" "Параметры клиентских подключений по умолчанию / Языковая среда и форматы" -#: utils/misc/guc.c:616 +#: utils/misc/guc.c:617 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "" "Параметры клиентских подключений по умолчанию / Предзагрузка разделяемых " "библиотек" -#: utils/misc/guc.c:618 +#: utils/misc/guc.c:619 msgid "Client Connection Defaults / Other Defaults" msgstr "Параметры клиентских подключений по умолчанию / Другие параметры" -#: utils/misc/guc.c:620 +#: utils/misc/guc.c:621 msgid "Lock Management" msgstr "Управление блокировками" -#: utils/misc/guc.c:622 +#: utils/misc/guc.c:623 msgid "Version and Platform Compatibility" msgstr "Версия и совместимость платформ" -#: utils/misc/guc.c:624 +#: utils/misc/guc.c:625 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Версия и совместимость платформ / Предыдущие версии PostgreSQL" -#: utils/misc/guc.c:626 +#: utils/misc/guc.c:627 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Версия и совместимость платформ / Другие платформы и клиенты" -#: utils/misc/guc.c:628 +#: utils/misc/guc.c:629 msgid "Error Handling" msgstr "Обработка ошибок" -#: utils/misc/guc.c:630 +#: utils/misc/guc.c:631 msgid "Preset Options" msgstr "Предопределённые параметры" -#: utils/misc/guc.c:632 +#: utils/misc/guc.c:633 msgid "Customized Options" msgstr "Настраиваемые параметры" -#: utils/misc/guc.c:634 +#: utils/misc/guc.c:635 msgid "Developer Options" msgstr "Параметры для разработчиков" -#: utils/misc/guc.c:688 +#: utils/misc/guc.c:692 +msgid "Valid units for this parameter are \"kB\", \"MB\", \"GB\", and \"TB\"." +msgstr "" +"Допустимые единицы измерения для этого параметра - \"kB\", \"MB\", \"GB\" и " +"\"TB\"." + +#: utils/misc/guc.c:719 +msgid "" +"Valid units for this parameter are \"ms\", \"s\", \"min\", \"h\", and \"d\"." +msgstr "" +"Допустимые единицы измерения для этого параметра - \"ms\", \"s\", \"min\", " +"\"h\" и \"d\"." + +#: utils/misc/guc.c:778 msgid "Enables the planner's use of sequential-scan plans." msgstr "" "Разрешает планировщику использовать планы последовательного сканирования." -#: utils/misc/guc.c:697 +#: utils/misc/guc.c:787 msgid "Enables the planner's use of index-scan plans." msgstr "Разрешает планировщику использовать планы сканирования по индексу." -#: utils/misc/guc.c:706 +#: utils/misc/guc.c:796 msgid "Enables the planner's use of index-only-scan plans." msgstr "" "Разрешает планировщику использовать планы сканирования только по индексу." -#: utils/misc/guc.c:715 +#: utils/misc/guc.c:805 msgid "Enables the planner's use of bitmap-scan plans." msgstr "" "Разрешает планировщику использовать планы сканирования по битовой карте." -#: utils/misc/guc.c:724 +#: utils/misc/guc.c:814 msgid "Enables the planner's use of TID scan plans." msgstr "Разрешает планировщику использовать планы сканирования TID." -#: utils/misc/guc.c:733 +#: utils/misc/guc.c:823 msgid "Enables the planner's use of explicit sort steps." msgstr "Разрешает планировщику использовать шаги с явной сортировкой." -#: utils/misc/guc.c:742 +#: utils/misc/guc.c:832 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Разрешает планировщику использовать планы агрегирования по хэшу." -#: utils/misc/guc.c:751 +#: utils/misc/guc.c:841 msgid "Enables the planner's use of materialization." msgstr "Разрешает планировщику использовать материализацию." -#: utils/misc/guc.c:760 +#: utils/misc/guc.c:850 msgid "Enables the planner's use of nested-loop join plans." msgstr "" "Разрешает планировщику использовать планы соединений с вложенными циклами." -#: utils/misc/guc.c:769 +#: utils/misc/guc.c:859 msgid "Enables the planner's use of merge join plans." msgstr "Разрешает планировщику использовать планы соединений слиянием." -#: utils/misc/guc.c:778 +#: utils/misc/guc.c:868 msgid "Enables the planner's use of hash join plans." msgstr "Разрешает планировщику использовать планы соединений по хэшу." -#: utils/misc/guc.c:787 +#: utils/misc/guc.c:877 msgid "Enables genetic query optimization." msgstr "Включает генетическую оптимизацию запросов." -#: utils/misc/guc.c:788 +#: utils/misc/guc.c:878 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Этот алгоритм пытается построить план без полного перебора." -#: utils/misc/guc.c:798 +#: utils/misc/guc.c:888 msgid "Shows whether the current user is a superuser." msgstr "Показывает, является ли текущий пользователь суперпользователем." -#: utils/misc/guc.c:808 +#: utils/misc/guc.c:898 msgid "Enables advertising the server via Bonjour." msgstr "Включает объявление сервера в Bonjour." -#: utils/misc/guc.c:817 +#: utils/misc/guc.c:907 +msgid "Collects transaction commit time." +msgstr "Записывает время фиксации транзакций." + +#: utils/misc/guc.c:916 msgid "Enables SSL connections." -msgstr "Включает SSL-подключения." +msgstr "Разрешает SSL-подключения." -#: utils/misc/guc.c:826 +#: utils/misc/guc.c:925 msgid "Give priority to server ciphersuite order." msgstr "Назначает более приоритетным набор шифров сервера." -#: utils/misc/guc.c:835 +#: utils/misc/guc.c:934 msgid "Forces synchronization of updates to disk." msgstr "Принудительная запись изменений на диск." -#: utils/misc/guc.c:836 +#: utils/misc/guc.c:935 msgid "" "The server will use the fsync() system call in several places to make sure " "that updates are physically written to disk. This insures that a database " @@ -20885,11 +22275,11 @@ msgstr "" "физической записи данных на диск. Это позволит привести кластер БД в " "целостное состояние после отказа ОС или оборудования." -#: utils/misc/guc.c:847 +#: utils/misc/guc.c:946 msgid "Continues processing after a checksum failure." msgstr "Продолжает обработку при ошибке контрольной суммы." -#: utils/misc/guc.c:848 +#: utils/misc/guc.c:947 msgid "" "Detection of a checksum failure normally causes PostgreSQL to report an " "error, aborting the current transaction. Setting ignore_checksum_failure to " @@ -20903,11 +22293,11 @@ msgstr "" "что может привести к сбоям или другим серьёзным проблемам. Это имеет место, " "только если включён контроль целостности страниц." -#: utils/misc/guc.c:862 +#: utils/misc/guc.c:961 msgid "Continues processing past damaged page headers." msgstr "Продолжает обработку при повреждении заголовков страниц." -#: utils/misc/guc.c:863 +#: utils/misc/guc.c:962 msgid "" "Detection of a damaged page header normally causes PostgreSQL to report an " "error, aborting the current transaction. Setting zero_damaged_pages to true " @@ -20921,12 +22311,12 @@ msgstr "" "продолжит работу. Это приведёт к потере данных, а именно строк в " "повреждённой странице." -#: utils/misc/guc.c:876 +#: utils/misc/guc.c:975 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "" "Запись полных страниц в WAL при первом изменении после контрольной точки." -#: utils/misc/guc.c:877 +#: utils/misc/guc.c:976 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 " @@ -20939,7 +22329,7 @@ msgstr "" "при первом изменении после контрольной точки, что позволяет полностью " "восстановить данные." -#: utils/misc/guc.c:890 +#: utils/misc/guc.c:989 msgid "" "Writes full pages to WAL when first modified after a checkpoint, even for a " "non-critical modifications." @@ -20947,71 +22337,75 @@ msgstr "" "Запись полных страниц в WAL при первом изменении после контрольной точки, " "даже при некритических изменениях." -#: utils/misc/guc.c:900 +#: utils/misc/guc.c:999 +msgid "Compresses full-page writes written in WAL file." +msgstr "Сжимать данные при записи полных страниц в журнал." + +#: utils/misc/guc.c:1009 msgid "Logs each checkpoint." -msgstr "Отмечать каждую контрольную точку." +msgstr "Протоколировать каждую контрольную точку." -#: utils/misc/guc.c:909 +#: utils/misc/guc.c:1018 msgid "Logs each successful connection." -msgstr "Фиксировать установленные соединения." +msgstr "Протоколировать устанавливаемые соединения." -#: utils/misc/guc.c:918 +#: utils/misc/guc.c:1027 msgid "Logs end of a session, including duration." -msgstr "Фиксировать конец сеанса, отмечая длительность." +msgstr "Протоколировать конец сеанса, отмечая длительность." -#: utils/misc/guc.c:927 -msgid "Turns on various assertion checks." -msgstr "Включает различные проверки истинности." +#: utils/misc/guc.c:1036 +msgid "Logs each replication command." +msgstr "Протоколировать каждую команду репликации." -#: utils/misc/guc.c:928 -msgid "This is a debugging aid." -msgstr "Полезно при отладке." +#: utils/misc/guc.c:1045 +msgid "Shows whether the running server has assertion checks enabled." +msgstr "Показывает, включены ли проверки истинности на работающем сервере." -#: utils/misc/guc.c:942 +#: utils/misc/guc.c:1060 msgid "Terminate session on any error." msgstr "Завершать сеансы при любой ошибке." -#: utils/misc/guc.c:951 +#: utils/misc/guc.c:1069 msgid "Reinitialize server after backend crash." msgstr "Перезапускать систему БД при аварии серверного процесса." -#: utils/misc/guc.c:961 +#: utils/misc/guc.c:1079 msgid "Logs the duration of each completed SQL statement." -msgstr "Фиксировать длительность каждого выполненного SQL-оператора." +msgstr "Протоколировать длительность каждого выполненного SQL-оператора." -#: utils/misc/guc.c:970 +#: utils/misc/guc.c:1088 msgid "Logs each query's parse tree." -msgstr "Фиксировать дерево разбора для каждого запроса." +msgstr "Протоколировать дерево разбора для каждого запроса." -#: utils/misc/guc.c:979 +#: utils/misc/guc.c:1097 msgid "Logs each query's rewritten parse tree." -msgstr "Фиксировать перезаписанное дерево разбора для каждого запроса." +msgstr "Протоколировать перезаписанное дерево разбора для каждого запроса." -#: utils/misc/guc.c:988 +#: utils/misc/guc.c:1106 msgid "Logs each query's execution plan." -msgstr "Фиксировать план выполнения каждого запроса." +msgstr "Протоколировать план выполнения каждого запроса." -#: utils/misc/guc.c:997 +#: utils/misc/guc.c:1115 msgid "Indents parse and plan tree displays." msgstr "Отступы при отображении деревьев разбора и плана запросов." -#: utils/misc/guc.c:1006 +#: utils/misc/guc.c:1124 msgid "Writes parser performance statistics to the server log." msgstr "Запись статистики разбора запросов в протокол сервера." -#: utils/misc/guc.c:1015 +#: utils/misc/guc.c:1133 msgid "Writes planner performance statistics to the server log." msgstr "Запись статистики планирования в протокол сервера." -#: utils/misc/guc.c:1024 +#: utils/misc/guc.c:1142 msgid "Writes executor performance statistics to the server log." msgstr "Запись статистики выполнения запросов в протокол сервера." -#: utils/misc/guc.c:1033 +#: utils/misc/guc.c:1151 msgid "Writes cumulative performance statistics to the server log." msgstr "Запись общей статистики производительности в протокол сервера." -#: utils/misc/guc.c:1043 +#: utils/misc/guc.c:1161 msgid "" "Logs system resource usage statistics (memory and CPU) on various B-tree " "operations." @@ -21019,11 +22413,11 @@ msgstr "" "Фиксировать статистику использования системных ресурсов (памяти и " "процессора) при различных операциях с b-деревом." -#: utils/misc/guc.c:1055 +#: utils/misc/guc.c:1173 msgid "Collects information about executing commands." msgstr "Собирает информацию о выполняющихся командах." -#: utils/misc/guc.c:1056 +#: utils/misc/guc.c:1174 msgid "" "Enables the collection of information on the currently executing command of " "each session, along with the time at which that command began execution." @@ -21031,60 +22425,60 @@ msgstr "" "Включает сбор информации о командах, выполняющихся во всех сеансах, а также " "время запуска команды." -#: utils/misc/guc.c:1066 +#: utils/misc/guc.c:1184 msgid "Collects statistics on database activity." msgstr "Собирает статистику активности в БД." -#: utils/misc/guc.c:1075 +#: utils/misc/guc.c:1193 msgid "Collects timing statistics for database I/O activity." msgstr "Собирает статистику по времени активности ввода/вывода." -#: utils/misc/guc.c:1085 +#: utils/misc/guc.c:1203 msgid "Updates the process title to show the active SQL command." msgstr "Выводит в заголовок процесса активную SQL-команду." -#: utils/misc/guc.c:1086 +#: utils/misc/guc.c:1204 msgid "" "Enables updating of the process title every time a new SQL command is " "received by the server." msgstr "Отражает в заголовке процесса каждую SQL-команду, поступающую серверу." -#: utils/misc/guc.c:1095 +#: utils/misc/guc.c:1213 msgid "Starts the autovacuum subprocess." msgstr "Запускает подпроцесс автоочистки." -#: utils/misc/guc.c:1105 +#: utils/misc/guc.c:1223 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Генерирует отладочные сообщения для LISTEN и NOTIFY." -#: utils/misc/guc.c:1117 +#: utils/misc/guc.c:1235 msgid "Emits information about lock usage." -msgstr "Выдаёт информацию о применяемых блокировках." +msgstr "Выдавать информацию о применяемых блокировках." -#: utils/misc/guc.c:1127 +#: utils/misc/guc.c:1245 msgid "Emits information about user lock usage." -msgstr "Выдаёт информацию о применяемых пользовательских блокировках." +msgstr "Выдавать информацию о применяемых пользовательских блокировках." -#: utils/misc/guc.c:1137 +#: utils/misc/guc.c:1255 msgid "Emits information about lightweight lock usage." -msgstr "Выдаёт информацию о применяемых лёгких блокировках." +msgstr "Выдавать информацию о применяемых лёгких блокировках." -#: utils/misc/guc.c:1147 +#: utils/misc/guc.c:1265 msgid "" "Dumps information about all current locks when a deadlock timeout occurs." msgstr "" -"Выводит информацию обо всех текущих блокировках в случае таймаута при " +"Выводить информацию обо всех текущих блокировках в случае таймаута при " "взаимоблокировке." -#: utils/misc/guc.c:1159 +#: utils/misc/guc.c:1277 msgid "Logs long lock waits." -msgstr "Фиксирует длительные ожидания в блокировках." +msgstr "Протоколировать длительные ожидания в блокировках." -#: utils/misc/guc.c:1169 +#: utils/misc/guc.c:1287 msgid "Logs the host name in the connection logs." -msgstr "Фиксирует имя узла в протоколах подключений." +msgstr "Записывать имя узла в протоколы подключений." -#: utils/misc/guc.c:1170 +#: utils/misc/guc.c:1288 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 " @@ -21096,15 +22490,15 @@ msgstr "" "параметр, но учтите, что это может значительно повлиять на " "производительность." -#: utils/misc/guc.c:1181 +#: utils/misc/guc.c:1299 msgid "Causes subtables to be included by default in various commands." msgstr "Выбирает режим включения подчинённых таблиц по умолчанию." -#: utils/misc/guc.c:1190 +#: utils/misc/guc.c:1308 msgid "Encrypt passwords." msgstr "Шифровать пароли." -#: utils/misc/guc.c:1191 +#: utils/misc/guc.c:1309 msgid "" "When a password is specified in CREATE USER or ALTER USER without writing " "either ENCRYPTED or UNENCRYPTED, this parameter determines whether the " @@ -21113,11 +22507,11 @@ msgstr "" "Этот параметр определяет, нужно ли шифровать пароли, заданные в CREATE USER " "или ALTER USER без указания ENCRYPTED или UNENCRYPTED." -#: utils/misc/guc.c:1201 +#: utils/misc/guc.c:1319 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Обрабатывать \"expr=NULL\" как \"expr IS NULL\"." -#: utils/misc/guc.c:1202 +#: utils/misc/guc.c:1320 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 " @@ -21129,37 +22523,25 @@ msgstr "" "совпадает с NULL, и false в противном случае. По правилам expr = NULL всегда " "должно возвращать null (неопределённость)." -#: utils/misc/guc.c:1214 +#: utils/misc/guc.c:1332 msgid "Enables per-database user names." msgstr "Включает связывание имён пользователей с базами данных." -#: utils/misc/guc.c:1224 -msgid "This parameter doesn't do anything." -msgstr "Этот параметр ничего не делает." - -#: utils/misc/guc.c:1225 -msgid "" -"It's just here so that we won't choke on SET AUTOCOMMIT TO ON from 7.3-" -"vintage clients." -msgstr "" -"Он сохранён только для того, чтобы не обидеть винтажных клиентов 7.3-, " -"пожелавших SET AUTOCOMMIT TO ON." - -#: utils/misc/guc.c:1234 +#: utils/misc/guc.c:1341 msgid "Sets the default read-only status of new transactions." msgstr "" "Устанавливает режим \"только чтение\" по умолчанию для новых транзакций." -#: utils/misc/guc.c:1243 +#: utils/misc/guc.c:1350 msgid "Sets the current transaction's read-only status." msgstr "Устанавливает режим \"только чтение\" для текущей транзакции." -#: utils/misc/guc.c:1253 +#: utils/misc/guc.c:1360 msgid "Sets the default deferrable status of new transactions." msgstr "" "Устанавливает режим отложенного выполнения по умолчанию для новых транзакций." -#: utils/misc/guc.c:1262 +#: utils/misc/guc.c:1369 msgid "" "Whether to defer a read-only serializable transaction until it can be " "executed with no possible serialization failures." @@ -21167,15 +22549,15 @@ msgstr "" "Определяет, откладывать ли сериализуемую транзакцию \"только чтение\" до " "момента, когда сбой сериализации будет исключён." -#: utils/misc/guc.c:1272 +#: utils/misc/guc.c:1379 msgid "Check function bodies during CREATE FUNCTION." msgstr "Проверять тело функций в момент CREATE FUNCTION." -#: utils/misc/guc.c:1281 +#: utils/misc/guc.c:1388 msgid "Enable input of NULL elements in arrays." msgstr "Разрешать ввод элементов NULL в массивах." -#: utils/misc/guc.c:1282 +#: utils/misc/guc.c:1389 msgid "" "When turned on, unquoted NULL in an array input value means a null value; " "otherwise it is taken literally." @@ -21183,72 +22565,68 @@ msgstr "" "Когда этот параметр включен, NULL без кавычек при вводе в массив " "воспринимается как значение NULL, иначе - как строка." -#: utils/misc/guc.c:1292 +#: utils/misc/guc.c:1399 msgid "Create new tables with OIDs by default." msgstr "По умолчанию создавать новые таблицы с колонкой OID." -#: utils/misc/guc.c:1301 +#: utils/misc/guc.c:1408 msgid "" "Start a subprocess to capture stderr output and/or csvlogs into log files." msgstr "" "Запускает подпроцесс для чтения stderr и/или csv-файлов и записи в файлы " "протоколов." -#: utils/misc/guc.c:1310 +#: utils/misc/guc.c:1417 msgid "Truncate existing log files of same name during log rotation." msgstr "" "Очищать уже существующий файл с тем же именем при прокручивании протокола." -#: utils/misc/guc.c:1321 +#: utils/misc/guc.c:1428 msgid "Emit information about resource usage in sorting." msgstr "Выдавать сведения об использовании ресурсов при сортировке." -#: utils/misc/guc.c:1335 +#: utils/misc/guc.c:1442 msgid "Generate debugging output for synchronized scanning." msgstr "Выдавать отладочные сообщения для синхронного сканирования." -#: utils/misc/guc.c:1350 +#: utils/misc/guc.c:1457 msgid "Enable bounded sorting using heap sort." msgstr "" "Разрешить ограниченную сортировку с применением пирамидальной сортировки." -#: utils/misc/guc.c:1363 +#: utils/misc/guc.c:1470 msgid "Emit WAL-related debugging output." msgstr "Выдавать отладочные сообщения, связанные с WAL." -#: utils/misc/guc.c:1375 +#: utils/misc/guc.c:1482 msgid "Datetimes are integer based." msgstr "Целочисленная реализация даты/времени." -#: utils/misc/guc.c:1390 +#: utils/misc/guc.c:1497 msgid "" "Sets whether Kerberos and GSSAPI user names should be treated as case-" "insensitive." msgstr "" "Включает регистро-независимую обработку имён пользователей Kerberos и GSSAPI." -#: utils/misc/guc.c:1400 +#: utils/misc/guc.c:1507 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Предупреждения о спецсимволах '\\' в обычных строках." -#: utils/misc/guc.c:1410 +#: utils/misc/guc.c:1517 msgid "Causes '...' strings to treat backslashes literally." msgstr "Включает буквальную обработку символов '\\' в строках '...'." -#: utils/misc/guc.c:1421 +#: utils/misc/guc.c:1528 msgid "Enable synchronized sequential scans." msgstr "Включить синхронизацию последовательного сканирования." -#: utils/misc/guc.c:1431 -msgid "Allows archiving of WAL files using archive_command." -msgstr "Разрешает архивацию файлов WAL командой archive_command." - -#: utils/misc/guc.c:1441 +#: utils/misc/guc.c:1538 msgid "Allows connections and queries during recovery." msgstr "" "Разрешает принимать новые подключения и запросы в процессе восстановления." -#: utils/misc/guc.c:1451 +#: utils/misc/guc.c:1548 msgid "" "Allows feedback from a hot standby to the primary that will avoid query " "conflicts." @@ -21256,15 +22634,15 @@ msgstr "" "Разрешает обратную связь сервера горячего резерва с основным для " "предотвращения конфликтов при длительных запросах." -#: utils/misc/guc.c:1461 +#: utils/misc/guc.c:1558 msgid "Allows modifications of the structure of system tables." msgstr "Разрешает модифицировать структуру системных таблиц." -#: utils/misc/guc.c:1472 +#: utils/misc/guc.c:1569 msgid "Disables reading from system indexes." msgstr "Запрещает использование системных индексов." -#: utils/misc/guc.c:1473 +#: utils/misc/guc.c:1570 msgid "" "It does not prevent updating the indexes, so it is safe to use. The worst " "consequence is slowness." @@ -21272,14 +22650,14 @@ msgstr "" "При этом индексы продолжают обновляться, так что данное поведение безопасно. " "Худшее следствие - замедление." -#: utils/misc/guc.c:1484 +#: utils/misc/guc.c:1581 msgid "" "Enables backward compatibility mode for privilege checks on large objects." msgstr "" "Включает режим обратной совместимости при проверке привилегий для больших " "объектов." -#: utils/misc/guc.c:1485 +#: utils/misc/guc.c:1582 msgid "" "Skips privilege checks when reading or modifying large objects, for " "compatibility with PostgreSQL releases prior to 9.0." @@ -21287,16 +22665,23 @@ msgstr "" "Пропускает проверки привилегий при чтении или изменении больших объектов " "(для совместимости с версиями PostgreSQL до 9.0)." -#: utils/misc/guc.c:1495 +#: utils/misc/guc.c:1592 +msgid "" +"Emit a warning for constructs that changed meaning since PostgreSQL 9.4." +msgstr "" +"Выдаёт предупреждение о конструкциях, поведение которых изменилось после " +"PostgreSQL 9.4." + +#: utils/misc/guc.c:1602 msgid "When generating SQL fragments, quote all identifiers." msgstr "" "Генерируя SQL-фрагменты, заключать все идентификаторы в двойные кавычки." -#: utils/misc/guc.c:1505 +#: utils/misc/guc.c:1612 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Показывает, включён ли в этом кластере контроль целостности данных." -#: utils/misc/guc.c:1525 +#: utils/misc/guc.c:1632 msgid "" "Forces a switch to the next xlog file if a new file has not been started " "within N seconds." @@ -21304,19 +22689,19 @@ msgstr "" "Принудительно переключаться на следующий файл xlog, если начать новый файл " "за N секунд не удалось." -#: utils/misc/guc.c:1536 +#: utils/misc/guc.c:1643 msgid "Waits N seconds on connection startup after authentication." msgstr "Ждать N секунд при подключении после проверки подлинности." -#: utils/misc/guc.c:1537 utils/misc/guc.c:2039 +#: utils/misc/guc.c:1644 utils/misc/guc.c:2146 msgid "This allows attaching a debugger to the process." msgstr "Это позволяет подключить к процессу отладчик." -#: utils/misc/guc.c:1546 +#: utils/misc/guc.c:1653 msgid "Sets the default statistics target." msgstr "Устанавливает целевое ограничение статистики по умолчанию." -#: utils/misc/guc.c:1547 +#: utils/misc/guc.c:1654 msgid "" "This applies to table columns that have not had a column-specific target set " "via ALTER TABLE SET STATISTICS." @@ -21324,13 +22709,13 @@ msgstr "" "Это значение распространяется на колонки таблицы, для которых целевое " "ограничение не задано явно через ALTER TABLE SET STATISTICS." -#: utils/misc/guc.c:1556 +#: utils/misc/guc.c:1663 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "" "Задаёт предел для списка FROM, при превышении которого подзапросы не " "сворачиваются." -#: utils/misc/guc.c:1558 +#: utils/misc/guc.c:1665 msgid "" "The planner will merge subqueries into upper queries if the resulting FROM " "list would have no more than this many items." @@ -21338,13 +22723,13 @@ msgstr "" "Планировщик объединит вложенные запросы с внешними, если в полученном списке " "FROM будет не больше заданного числа элементов." -#: utils/misc/guc.c:1568 +#: utils/misc/guc.c:1675 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "" "Задаёт предел для списка FROM, при превышении которого конструкции JOIN " "сохраняются." -#: utils/misc/guc.c:1570 +#: utils/misc/guc.c:1677 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." @@ -21352,34 +22737,34 @@ msgstr "" "Планировщик будет сносить явные конструкции JOIN в списки FROM, пока в " "результирующем списке не больше заданного числа элементов." -#: utils/misc/guc.c:1580 +#: utils/misc/guc.c:1687 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "" "Задаёт предел для списка FROM, при превышении которого применяется GEQO." -#: utils/misc/guc.c:1589 +#: utils/misc/guc.c:1696 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "" "GEQO: оценка усилий для планирования, задающая значения по умолчанию для " "других параметров GEQO." -#: utils/misc/guc.c:1598 +#: utils/misc/guc.c:1705 msgid "GEQO: number of individuals in the population." msgstr "GEQO: число индивидуалов в популяции." -#: utils/misc/guc.c:1599 utils/misc/guc.c:1608 +#: utils/misc/guc.c:1706 utils/misc/guc.c:1715 msgid "Zero selects a suitable default value." msgstr "При нуле выбирается подходящее значение по умолчанию." -#: utils/misc/guc.c:1607 +#: utils/misc/guc.c:1714 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: число итераций алгоритма." -#: utils/misc/guc.c:1618 +#: utils/misc/guc.c:1725 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Задаёт интервал ожидания в блокировке до проверки на взаимоблокировку." -#: utils/misc/guc.c:1629 +#: utils/misc/guc.c:1736 msgid "" "Sets the maximum delay before canceling queries when a hot standby server is " "processing archived WAL data." @@ -21387,7 +22772,7 @@ msgstr "" "Задаёт максимальную задержку до отмены запроса, когда сервер горячего " "резерва обрабатывает данные WAL из архива." -#: utils/misc/guc.c:1640 +#: utils/misc/guc.c:1747 msgid "" "Sets the maximum delay before canceling queries when a hot standby server is " "processing streamed WAL data." @@ -21395,42 +22780,42 @@ msgstr "" "Задаёт максимальную задержку до отмены запроса, когда сервер горячего " "резерва обрабатывает данные WAL из потока." -#: utils/misc/guc.c:1651 +#: utils/misc/guc.c:1758 msgid "" "Sets the maximum interval between WAL receiver status reports to the primary." msgstr "Задаёт максимальный интервал для отчётов о состоянии получателей WAL." -#: utils/misc/guc.c:1662 +#: utils/misc/guc.c:1769 msgid "Sets the maximum wait time to receive data from the primary." msgstr "" "Задаёт предельное время ожидания для получения данных с главного сервера." -#: utils/misc/guc.c:1673 +#: utils/misc/guc.c:1780 msgid "Sets the maximum number of concurrent connections." msgstr "Задаёт максимально возможное число подключений." -#: utils/misc/guc.c:1683 +#: utils/misc/guc.c:1790 msgid "Sets the number of connection slots reserved for superusers." msgstr "" "Определяет, сколько слотов подключений забронировано для суперпользователей." -#: utils/misc/guc.c:1697 +#: utils/misc/guc.c:1804 msgid "Sets the number of shared memory buffers used by the server." msgstr "Задаёт количество буферов в разделяемой памяти, используемых сервером." -#: utils/misc/guc.c:1708 +#: utils/misc/guc.c:1815 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Задаёт предельное число временных буферов на один сеанс." -#: utils/misc/guc.c:1719 +#: utils/misc/guc.c:1826 msgid "Sets the TCP port the server listens on." msgstr "Задаёт TCP-порт для работы сервера." -#: utils/misc/guc.c:1729 +#: utils/misc/guc.c:1836 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Задаёт права доступа для доменного сокета Unix." -#: utils/misc/guc.c:1730 +#: utils/misc/guc.c:1837 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 " @@ -21442,11 +22827,11 @@ msgstr "" "воспринимаемом системными функциями chmod и umask. (Чтобы использовать " "привычный восьмеричный формат, добавьте в начало ноль (0).)" -#: utils/misc/guc.c:1744 +#: utils/misc/guc.c:1851 msgid "Sets the file permissions for log files." msgstr "Задаёт права доступа к файлам протоколов." -#: utils/misc/guc.c:1745 +#: utils/misc/guc.c:1852 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 " @@ -21456,11 +22841,11 @@ msgstr "" "функциями chmod и umask. (Чтобы использовать привычный восьмеричный формат, " "добавьте в начало ноль (0).) " -#: utils/misc/guc.c:1758 +#: utils/misc/guc.c:1865 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Задаёт предельный объём памяти для рабочих пространств запросов." -#: utils/misc/guc.c:1759 +#: utils/misc/guc.c:1866 msgid "" "This much memory can be used by each internal sort operation and hash table " "before switching to temporary disk files." @@ -21468,116 +22853,116 @@ msgstr "" "Такой объём памяти может использоваться каждой внутренней операцией " "сортировки и таблицей хэшей до переключения на временные файлы на диске." -#: utils/misc/guc.c:1771 +#: utils/misc/guc.c:1878 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Задаёт предельный объём памяти для операций по обслуживанию." -#: utils/misc/guc.c:1772 +#: utils/misc/guc.c:1879 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Подразумеваются в частности операции VACUUM и CREATE INDEX." -#: utils/misc/guc.c:1787 +#: utils/misc/guc.c:1894 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Задаёт максимальную глубину стека (в КБ)." -#: utils/misc/guc.c:1798 +#: utils/misc/guc.c:1905 msgid "Limits the total size of all temporary files used by each session." msgstr "" "Ограничивает общий размер всех временных файлов, доступный для каждого " "сеанса." -#: utils/misc/guc.c:1799 +#: utils/misc/guc.c:1906 msgid "-1 means no limit." msgstr "-1 отключает ограничение." -#: utils/misc/guc.c:1809 +#: utils/misc/guc.c:1916 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Стоимость очистки для страницы, найденной в кэше." -#: utils/misc/guc.c:1819 +#: utils/misc/guc.c:1926 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Стоимость очистки для страницы, не найденной в кэше." -#: utils/misc/guc.c:1829 +#: utils/misc/guc.c:1936 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Стоимость очистки для страницы, которая не была \"грязной\"." -#: utils/misc/guc.c:1839 +#: utils/misc/guc.c:1946 msgid "Vacuum cost amount available before napping." msgstr "Суммарная стоимость очистки, при которой нужна передышка." -#: utils/misc/guc.c:1849 +#: utils/misc/guc.c:1956 msgid "Vacuum cost delay in milliseconds." msgstr "Задержка очистки (в миллисекундах)." -#: utils/misc/guc.c:1860 +#: utils/misc/guc.c:1967 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Задержка очистки для автоочистки (в миллисекундах)." -#: utils/misc/guc.c:1871 +#: utils/misc/guc.c:1978 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "" "Суммарная стоимость очистки, при которой нужна передышка, для автоочистки." -#: utils/misc/guc.c:1881 +#: utils/misc/guc.c:1988 msgid "" "Sets the maximum number of simultaneously open files for each server process." msgstr "" "Задаёт предельное число одновременно открытых файлов для каждого серверного " "процесса." -#: utils/misc/guc.c:1894 +#: utils/misc/guc.c:2001 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Задаёт предельное число одновременно подготовленных транзакций." -#: utils/misc/guc.c:1905 +#: utils/misc/guc.c:2012 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Задаёт минимальный OID таблиц, для которых отслеживаются блокировки." -#: utils/misc/guc.c:1906 +#: utils/misc/guc.c:2013 msgid "Is used to avoid output on system tables." msgstr "Применяется для игнорирования системных таблиц." -#: utils/misc/guc.c:1915 +#: utils/misc/guc.c:2022 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Задаёт OID таблицы для безусловного отслеживания блокировок." -#: utils/misc/guc.c:1927 +#: utils/misc/guc.c:2034 msgid "Sets the maximum allowed duration of any statement." msgstr "Задаёт предельную длительность для любого оператора." -#: utils/misc/guc.c:1928 utils/misc/guc.c:1939 +#: utils/misc/guc.c:2035 utils/misc/guc.c:2046 msgid "A value of 0 turns off the timeout." msgstr "Нулевое значение отключает таймаут." -#: utils/misc/guc.c:1938 +#: utils/misc/guc.c:2045 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Задаёт максимальную продолжительность ожидания блокировок." -#: utils/misc/guc.c:1949 +#: utils/misc/guc.c:2056 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "" "Минимальный возраст строк таблицы, при котором VACUUM может их заморозить." -#: utils/misc/guc.c:1959 +#: utils/misc/guc.c:2066 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "" "Возраст, при котором VACUUM должен сканировать всю таблицу с целью " "заморозить кортежи." -#: utils/misc/guc.c:1969 +#: utils/misc/guc.c:2076 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "" "Минимальный возраст, при котором VACUUM будет замораживать MultiXactId в " "строке таблицы." -#: utils/misc/guc.c:1979 +#: utils/misc/guc.c:2086 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "" "Возраст multixact, при котором VACUUM должен сканировать всю таблицу с целью " "заморозить кортежи." -#: utils/misc/guc.c:1989 +#: utils/misc/guc.c:2096 msgid "" "Number of transactions by which VACUUM and HOT cleanup should be deferred, " "if any." @@ -21585,11 +22970,11 @@ msgstr "" "Определяет, на сколько транзакций следует задержать старые строки, выполняя " "VACUUM или \"горячее\" обновление." -#: utils/misc/guc.c:2002 +#: utils/misc/guc.c:2109 msgid "Sets the maximum number of locks per transaction." msgstr "Задаёт предельное число блокировок на транзакцию." -#: utils/misc/guc.c:2003 +#: utils/misc/guc.c:2110 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 " @@ -21599,11 +22984,11 @@ msgstr "" "один момент времени потребуется заблокировать не больше чем " "max_locks_per_transaction * max_connections различных объектов." -#: utils/misc/guc.c:2014 +#: utils/misc/guc.c:2121 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Задаёт предельное число предикатных блокировок на транзакцию." -#: utils/misc/guc.c:2015 +#: utils/misc/guc.c:2122 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 " @@ -21613,38 +22998,39 @@ msgstr "" "предположения, что в один момент времени потребуется заблокировать не больше " "чем max_pred_locks_per_transaction * max_connections различных объектов." -#: utils/misc/guc.c:2026 +#: utils/misc/guc.c:2133 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Ограничивает время, за которое клиент должен пройти аутентификацию." -#: utils/misc/guc.c:2038 +#: utils/misc/guc.c:2145 msgid "Waits N seconds on connection startup before authentication." msgstr "Ждать N секунд при подключении до проверки подлинности." -#: utils/misc/guc.c:2049 +#: utils/misc/guc.c:2156 msgid "Sets the number of WAL files held for standby servers." -msgstr "Определяет, сколько файлов WAL нужно сохранить для резервных серверов." +msgstr "Определяет, сколько файлов WAL нужно сохранять для резервных серверов." -#: utils/misc/guc.c:2059 -msgid "" -"Sets the maximum distance in log segments between automatic WAL checkpoints." -msgstr "" -"Задаёт максимальное расстояние в сегментах журнала между автоматическими " -"контрольными точками WAL." +#: utils/misc/guc.c:2166 +msgid "Sets the minimum size to shrink the WAL to." +msgstr "Задаёт минимальный размер WAL при сжатии." -#: utils/misc/guc.c:2069 +#: utils/misc/guc.c:2177 +msgid "Sets the WAL size that triggers a checkpoint." +msgstr "Задаёт размер WAL, при котором инициируется контрольная точка." + +#: utils/misc/guc.c:2188 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "" "Задаёт максимальное время между автоматическими контрольными точками WAL." -#: utils/misc/guc.c:2080 +#: utils/misc/guc.c:2199 msgid "" "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "" "Выдаёт предупреждения, когда сегменты контрольных точек заполняются за это " "время." -#: utils/misc/guc.c:2082 +#: utils/misc/guc.c:2201 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 " @@ -21654,28 +23040,28 @@ msgstr "" "переполнением файлов сегментов, происходят за столько секунд. Нулевое " "значение отключает эти предупреждения." -#: utils/misc/guc.c:2094 +#: utils/misc/guc.c:2213 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Задаёт число буферов дисковых страниц в разделяемой памяти для WAL." -#: utils/misc/guc.c:2105 +#: utils/misc/guc.c:2224 msgid "WAL writer sleep time between WAL flushes." msgstr "Время простоя в процессе записи WAL после сброса буферов на диск." -#: utils/misc/guc.c:2117 +#: utils/misc/guc.c:2236 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "" "Задаёт предельное число одновременно работающих процессов передачи WAL." -#: utils/misc/guc.c:2128 +#: utils/misc/guc.c:2247 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Задаёт предельное число одновременно существующих слотов репликации." -#: utils/misc/guc.c:2138 +#: utils/misc/guc.c:2257 msgid "Sets the maximum time to wait for WAL replication." msgstr "Задаёт предельное время ожидания репликации WAL." -#: utils/misc/guc.c:2149 +#: utils/misc/guc.c:2268 msgid "" "Sets the delay in microseconds between transaction commit and flushing WAL " "to disk." @@ -21683,18 +23069,18 @@ msgstr "" "Задаёт задержку в микросекундах между фиксированием транзакций и сбросом WAL " "на диск." -#: utils/misc/guc.c:2161 +#: utils/misc/guc.c:2280 msgid "" "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "" "Задаёт минимальное число одновременно открытых транзакций для применения " "commit_delay." -#: utils/misc/guc.c:2172 +#: utils/misc/guc.c:2291 msgid "Sets the number of digits displayed for floating-point values." msgstr "Задаёт число выводимых цифр для чисел с плавающей точкой." -#: utils/misc/guc.c:2173 +#: utils/misc/guc.c:2292 msgid "" "This affects real, double precision, and geometric data types. The parameter " "value is added to the standard number of digits (FLT_DIG or DBL_DIG as " @@ -21703,17 +23089,17 @@ msgstr "" "Этот параметр относится к типам real, double и geometric. Значение параметра " "добавляется к стандартному числу цифр (FLT_DIG или DBL_DIG)." -#: utils/misc/guc.c:2184 +#: utils/misc/guc.c:2303 msgid "Sets the minimum execution time above which statements will be logged." msgstr "" "Задаёт предельное время выполнения оператора, при превышении которого он " "фиксируется в протоколе." -#: utils/misc/guc.c:2186 +#: utils/misc/guc.c:2305 msgid "Zero prints all queries. -1 turns this feature off." msgstr "При 0 протоколируются все запросы; -1 отключает эти сообщения." -#: utils/misc/guc.c:2196 +#: utils/misc/guc.c:2315 msgid "" "Sets the minimum execution time above which autovacuum actions will be " "logged." @@ -21721,22 +23107,22 @@ msgstr "" "Задаёт предельное время выполнения автоочистки, при превышении которого эта " "операция фиксируется в протоколе." -#: utils/misc/guc.c:2198 +#: utils/misc/guc.c:2317 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "" "При 0 протоколируются все операции автоочистки; -1 отключает эти сообщения." -#: utils/misc/guc.c:2208 +#: utils/misc/guc.c:2327 msgid "Background writer sleep time between rounds." msgstr "Время простоя в процессе фоновой записи между подходами." -#: utils/misc/guc.c:2219 +#: utils/misc/guc.c:2338 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "" "Максимальное число LRU-страниц, сбрасываемых за один подход, в процессе " "фоновой записи." -#: utils/misc/guc.c:2235 +#: utils/misc/guc.c:2350 msgid "" "Number of simultaneous requests that can be handled efficiently by the disk " "subsystem." @@ -21744,83 +23130,89 @@ msgstr "" "Число одновременных запросов, которые могут быть эффективно обработаны " "дисковой подсистемой." -#: utils/misc/guc.c:2236 +#: utils/misc/guc.c:2351 msgid "" "For RAID arrays, this should be approximately the number of drive spindles " "in the array." msgstr "" "Для RAID-массивов это примерно равно числу физических дисков в массиве." -#: utils/misc/guc.c:2251 +#: utils/misc/guc.c:2366 msgid "Maximum number of concurrent worker processes." msgstr "Задаёт максимально возможное число рабочих процессов." -#: utils/misc/guc.c:2261 +#: utils/misc/guc.c:2376 msgid "Automatic log file rotation will occur after N minutes." msgstr "Автоматическая прокрутка файла протокола через каждые N минут." -#: utils/misc/guc.c:2272 +#: utils/misc/guc.c:2387 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "" "Автоматическая прокрутка файла протокола при выходе за предел N килобайт." -#: utils/misc/guc.c:2283 +#: utils/misc/guc.c:2398 msgid "Shows the maximum number of function arguments." msgstr "Показывает максимально возможное число аргументов функций." -#: utils/misc/guc.c:2294 +#: utils/misc/guc.c:2409 msgid "Shows the maximum number of index keys." msgstr "Показывает максимально возможное число ключей в индексе." -#: utils/misc/guc.c:2305 +#: utils/misc/guc.c:2420 msgid "Shows the maximum identifier length." msgstr "Показывает максимально возможную длину идентификатора." -#: utils/misc/guc.c:2316 +#: utils/misc/guc.c:2431 msgid "Shows the size of a disk block." msgstr "Показывает размер дискового блока." -#: utils/misc/guc.c:2327 +#: utils/misc/guc.c:2442 msgid "Shows the number of pages per disk file." msgstr "Показывает число страниц в одном файле." -#: utils/misc/guc.c:2338 +#: utils/misc/guc.c:2453 msgid "Shows the block size in the write ahead log." msgstr "Показывает размер блока в журнале WAL." -#: utils/misc/guc.c:2349 +#: utils/misc/guc.c:2464 +msgid "" +"Sets the time to wait before retrying to retrieve WALafter a failed attempt." +msgstr "" +"Задаёт время задержки перед повторной попыткой обращения к WAL после неудачи." + +#: utils/misc/guc.c:2476 msgid "Shows the number of pages per write ahead log segment." msgstr "Показывает число страниц в одном сегменте журнала WAL." -#: utils/misc/guc.c:2362 +#: utils/misc/guc.c:2489 msgid "Time to sleep between autovacuum runs." msgstr "Время простоя между запусками автоочистки." -#: utils/misc/guc.c:2372 +#: utils/misc/guc.c:2499 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Минимальное число изменений или удалений кортежей, вызывающее очистку." -#: utils/misc/guc.c:2381 +#: utils/misc/guc.c:2508 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "" "Минимальное число добавлений, изменений или удалений кортежей, вызывающее " "анализ." -#: utils/misc/guc.c:2391 +#: utils/misc/guc.c:2518 msgid "" "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "" "Возраст, при котором необходима автоочистка таблицы для предотвращения " "наложений ID транзакций." -#: utils/misc/guc.c:2402 +#: utils/misc/guc.c:2529 msgid "" "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "" "Возраст multixact, при котором необходима автоочистка таблицы для " "предотвращения наложений идентификаторов multixact." -#: utils/misc/guc.c:2412 +#: utils/misc/guc.c:2539 msgid "" "Sets the maximum number of simultaneously running autovacuum worker " "processes." @@ -21828,24 +23220,24 @@ msgstr "" "Задаёт предельное число одновременно выполняющихся рабочих процессов " "автоочистки." -#: utils/misc/guc.c:2422 +#: utils/misc/guc.c:2549 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "" "Задаёт предельный объём памяти для каждого рабочего процесса автоочистки." -#: utils/misc/guc.c:2433 +#: utils/misc/guc.c:2560 msgid "Time between issuing TCP keepalives." msgstr "Интервал между TCP-пакетами пульса (keep-alive)." -#: utils/misc/guc.c:2434 utils/misc/guc.c:2445 +#: utils/misc/guc.c:2561 utils/misc/guc.c:2572 msgid "A value of 0 uses the system default." msgstr "При нулевом значении действует системный параметр." -#: utils/misc/guc.c:2444 +#: utils/misc/guc.c:2571 msgid "Time between TCP keepalive retransmits." msgstr "Интервал между повторениями TCP-пакетов пульса (keep-alive)." -#: utils/misc/guc.c:2455 +#: utils/misc/guc.c:2582 msgid "" "Set the amount of traffic to send and receive before renegotiating the " "encryption keys." @@ -21853,11 +23245,11 @@ msgstr "" "Ограничивает объём трафика, передаваемого и принимаемого до повторного " "согласования ключей шифрования." -#: utils/misc/guc.c:2466 +#: utils/misc/guc.c:2593 msgid "Maximum number of TCP keepalive retransmits." msgstr "Максимальное число повторений TCP-пакетов пульса (keep-alive)." -#: utils/misc/guc.c:2467 +#: utils/misc/guc.c:2594 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 " @@ -21867,15 +23259,15 @@ msgstr "" "прежде чем соединение будет считаться пропавшим. При нулевом значении " "действует системный параметр." -#: utils/misc/guc.c:2478 +#: utils/misc/guc.c:2605 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Ограничивает результат точного поиска с использованием GIN." -#: utils/misc/guc.c:2489 +#: utils/misc/guc.c:2616 msgid "Sets the planner's assumption about the size of the disk cache." msgstr "Подсказывает планировщику примерный размер дискового кэша." -#: utils/misc/guc.c:2490 +#: utils/misc/guc.c:2617 msgid "" "That is, the portion of the kernel's disk cache that will be used for " "PostgreSQL data files. This is measured in disk pages, which are normally 8 " @@ -21884,31 +23276,35 @@ msgstr "" "Подразумевается часть дискового кэша в ядре ОС, которую займут файлы данных " "PostgreSQL. Размер задаётся в дисковых страницах (обычно это 8 КБ)." -#: utils/misc/guc.c:2503 +#: utils/misc/guc.c:2630 msgid "Shows the server version as an integer." msgstr "Показывает версию сервера в виде целого числа." -#: utils/misc/guc.c:2514 +#: utils/misc/guc.c:2641 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "" "Фиксирует в протоколе превышение временными файлами заданного размера (в КБ)." -#: utils/misc/guc.c:2515 +#: utils/misc/guc.c:2642 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "" "При 0 отмечаются все файлы; при -1 эти сообщения отключаются (по умолчанию)." -#: utils/misc/guc.c:2525 +#: utils/misc/guc.c:2652 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Задаёт размер, резервируемый для pg_stat_activity.query (в байтах)." -#: utils/misc/guc.c:2549 +#: utils/misc/guc.c:2667 +msgid "Sets the maximum size of the pending list for GIN index." +msgstr "Задаёт максимальный размер списка-очереди для GIN-индекса." + +#: utils/misc/guc.c:2687 msgid "" "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "" "Задаёт для планировщика ориентир стоимости последовательного чтения страницы." -#: utils/misc/guc.c:2559 +#: utils/misc/guc.c:2697 msgid "" "Sets the planner's estimate of the cost of a nonsequentially fetched disk " "page." @@ -21916,13 +23312,13 @@ msgstr "" "Задаёт для планировщика ориентир стоимости непоследовательного чтения " "страницы." -#: utils/misc/guc.c:2569 +#: utils/misc/guc.c:2707 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "" "Задаёт для планировщика ориентир стоимости обработки каждого кортежа " "(строки)." -#: utils/misc/guc.c:2579 +#: utils/misc/guc.c:2717 msgid "" "Sets the planner's estimate of the cost of processing each index entry " "during an index scan." @@ -21930,7 +23326,7 @@ msgstr "" "Задаёт для планировщика ориентир стоимости обработки каждого элемента " "индекса в процессе сканирования индекса." -#: utils/misc/guc.c:2589 +#: utils/misc/guc.c:2727 msgid "" "Sets the planner's estimate of the cost of processing each operator or " "function call." @@ -21938,32 +23334,32 @@ msgstr "" "Задаёт для планировщика ориентир стоимости обработки каждого оператора или " "вызова функции." -#: utils/misc/guc.c:2600 +#: utils/misc/guc.c:2738 msgid "" "Sets the planner's estimate of the fraction of a cursor's rows that will be " "retrieved." msgstr "" "Задаёт для планировщика ориентир доли требуемых строк курсора в общем числе." -#: utils/misc/guc.c:2611 +#: utils/misc/guc.c:2749 msgid "GEQO: selective pressure within the population." msgstr "GEQO: выборочное давление в популяции." -#: utils/misc/guc.c:2621 +#: utils/misc/guc.c:2759 msgid "GEQO: seed for random path selection." msgstr "GEQO: отправное значение для случайного выбора пути." -#: utils/misc/guc.c:2631 +#: utils/misc/guc.c:2769 msgid "Multiple of the average buffer usage to free per round." msgstr "" "Множитель для среднего числа использованных буферов, определяющий число " "буферов, освобождаемых за один подход." -#: utils/misc/guc.c:2641 +#: utils/misc/guc.c:2779 msgid "Sets the seed for random-number generation." msgstr "Задаёт отправное значение для генератора случайных чисел." -#: utils/misc/guc.c:2652 +#: utils/misc/guc.c:2790 msgid "" "Number of tuple updates or deletes prior to vacuum as a fraction of " "reltuples." @@ -21971,7 +23367,7 @@ msgstr "" "Отношение числа обновлений или удалений кортежей к reltuples, определяющее " "потребность в очистке." -#: utils/misc/guc.c:2661 +#: utils/misc/guc.c:2799 msgid "" "Number of tuple inserts, updates, or deletes prior to analyze as a fraction " "of reltuples." @@ -21979,7 +23375,7 @@ msgstr "" "Отношение числа добавлений, обновлений или удалений кортежей к reltuples, " "определяющее потребность в анализе." -#: utils/misc/guc.c:2671 +#: utils/misc/guc.c:2809 msgid "" "Time spent flushing dirty buffers during checkpoint, as fraction of " "checkpoint interval." @@ -21987,53 +23383,53 @@ msgstr "" "Отношение продолжительности сброса \"грязных\" буферов во время контрольной " "точки к интервалу контрольных точек." -#: utils/misc/guc.c:2690 +#: utils/misc/guc.c:2828 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Задаёт команду оболочки, вызываемую для архивации файла WAL." -#: utils/misc/guc.c:2700 +#: utils/misc/guc.c:2838 msgid "Sets the client's character set encoding." msgstr "Задаёт кодировку символов, используемую клиентом." -#: utils/misc/guc.c:2711 +#: utils/misc/guc.c:2849 msgid "Controls information prefixed to each log line." msgstr "Определяет содержимое префикса каждой строки протокола." -#: utils/misc/guc.c:2712 +#: utils/misc/guc.c:2850 msgid "If blank, no prefix is used." msgstr "При пустом значении префикс также отсутствует." -#: utils/misc/guc.c:2721 +#: utils/misc/guc.c:2859 msgid "Sets the time zone to use in log messages." msgstr "Задаёт часовой пояс для вывода времени в сообщениях протокола." -#: utils/misc/guc.c:2731 +#: utils/misc/guc.c:2869 msgid "Sets the display format for date and time values." msgstr "Устанавливает формат вывода дат и времени." -#: utils/misc/guc.c:2732 +#: utils/misc/guc.c:2870 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Также помогает разбирать неоднозначно заданные вводимые даты." -#: utils/misc/guc.c:2743 +#: utils/misc/guc.c:2881 msgid "Sets the default tablespace to create tables and indexes in." msgstr "" "Задаёт табличное пространство по умолчанию для новых таблиц и индексов." -#: utils/misc/guc.c:2744 +#: utils/misc/guc.c:2882 msgid "An empty string selects the database's default tablespace." msgstr "При пустом значении используется табличное пространство базы данных." -#: utils/misc/guc.c:2754 +#: utils/misc/guc.c:2892 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "" "Задаёт табличное пространство(а) для временных таблиц и файлов сортировки." -#: utils/misc/guc.c:2765 +#: utils/misc/guc.c:2903 msgid "Sets the path for dynamically loadable modules." msgstr "Задаёт путь для динамически загружаемых модулей." -#: utils/misc/guc.c:2766 +#: utils/misc/guc.c:2904 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 " @@ -22043,79 +23439,79 @@ msgstr "" "указан путь (нет символа '/'), система будет искать этот файл в заданном " "пути." -#: utils/misc/guc.c:2779 +#: utils/misc/guc.c:2917 msgid "Sets the location of the Kerberos server key file." msgstr "Задаёт размещение файла с ключом Kerberos для данного сервера." -#: utils/misc/guc.c:2790 +#: utils/misc/guc.c:2928 msgid "Sets the Bonjour service name." msgstr "Задаёт название службы Bonjour." -#: utils/misc/guc.c:2802 +#: utils/misc/guc.c:2940 msgid "Shows the collation order locale." msgstr "Показывает правило сортировки." -#: utils/misc/guc.c:2813 +#: utils/misc/guc.c:2951 msgid "Shows the character classification and case conversion locale." msgstr "Показывает правило классификации символов и преобразования регистра." -#: utils/misc/guc.c:2824 +#: utils/misc/guc.c:2962 msgid "Sets the language in which messages are displayed." msgstr "Задаёт язык выводимых сообщений." -#: utils/misc/guc.c:2834 +#: utils/misc/guc.c:2972 msgid "Sets the locale for formatting monetary amounts." msgstr "Задаёт локаль для форматирования денежных сумм." -#: utils/misc/guc.c:2844 +#: utils/misc/guc.c:2982 msgid "Sets the locale for formatting numbers." msgstr "Задаёт локаль для форматирования чисел." -#: utils/misc/guc.c:2854 +#: utils/misc/guc.c:2992 msgid "Sets the locale for formatting date and time values." msgstr "Задаёт локаль для форматирования дат и времени." -#: utils/misc/guc.c:2864 +#: utils/misc/guc.c:3002 msgid "Lists shared libraries to preload into each backend." msgstr "" "Список разделяемых библиотек, заранее загружаемых в каждый обслуживающий " "процесс." -#: utils/misc/guc.c:2875 +#: utils/misc/guc.c:3013 msgid "Lists shared libraries to preload into server." msgstr "Список разделяемых библиотек, заранее загружаемых в память сервера." -#: utils/misc/guc.c:2886 +#: utils/misc/guc.c:3024 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "" "Список непривилегированных разделяемых библиотек, заранее загружаемых в " "каждый обслуживающий процесс." -#: utils/misc/guc.c:2897 +#: utils/misc/guc.c:3035 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Задаёт порядок просмотра схемы при поиске неполных имён." -#: utils/misc/guc.c:2909 +#: utils/misc/guc.c:3047 msgid "Sets the server (database) character set encoding." msgstr "Задаёт кодировку символов сервера (баз данных)." -#: utils/misc/guc.c:2921 +#: utils/misc/guc.c:3059 msgid "Shows the server version." msgstr "Показывает версию сервера." -#: utils/misc/guc.c:2933 +#: utils/misc/guc.c:3071 msgid "Sets the current role." msgstr "Задаёт текущую роль." -#: utils/misc/guc.c:2945 +#: utils/misc/guc.c:3083 msgid "Sets the session user name." msgstr "Задаёт имя пользователя в сеансе." -#: utils/misc/guc.c:2956 +#: utils/misc/guc.c:3094 msgid "Sets the destination for server log output." msgstr "Определяет, куда будет выводиться протокол сервера." -#: utils/misc/guc.c:2957 +#: utils/misc/guc.c:3095 msgid "" "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and " "\"eventlog\", depending on the platform." @@ -22123,24 +23519,24 @@ msgstr "" "Значение может включать сочетание слов \"stderr\", \"syslog\", \"csvlog\" и " "\"eventlog\", в зависимости от платформы." -#: utils/misc/guc.c:2968 +#: utils/misc/guc.c:3106 msgid "Sets the destination directory for log files." msgstr "Задаёт целевой каталог для файлов протоколов." -#: utils/misc/guc.c:2969 +#: utils/misc/guc.c:3107 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "" "Путь может быть абсолютным или указываться относительно каталога данных." -#: utils/misc/guc.c:2979 +#: utils/misc/guc.c:3117 msgid "Sets the file name pattern for log files." msgstr "Задаёт шаблон имени для файлов протоколов." -#: utils/misc/guc.c:2990 +#: utils/misc/guc.c:3128 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Задаёт имя программы для идентификации сообщений PostgreSQL в syslog." -#: utils/misc/guc.c:3001 +#: utils/misc/guc.c:3139 msgid "" "Sets the application name used to identify PostgreSQL messages in the event " "log." @@ -22148,112 +23544,116 @@ msgstr "" "Задаёт имя приложения для идентификации сообщений PostgreSQL в журнале " "событий." -#: utils/misc/guc.c:3012 +#: utils/misc/guc.c:3150 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "" "Задаёт часовой пояс для вывода и разбора строкового представления времени." -#: utils/misc/guc.c:3022 +#: utils/misc/guc.c:3160 msgid "Selects a file of time zone abbreviations." msgstr "Выбирает файл с сокращёнными названиями часовых поясов." -#: utils/misc/guc.c:3032 +#: utils/misc/guc.c:3170 msgid "Sets the current transaction's isolation level." msgstr "Задаёт текущий уровень изоляции транзакций." -#: utils/misc/guc.c:3043 +#: utils/misc/guc.c:3181 msgid "Sets the owning group of the Unix-domain socket." msgstr "Задаёт группу-владельца доменного сокета Unix." -#: utils/misc/guc.c:3044 +#: utils/misc/guc.c:3182 msgid "" "The owning user of the socket is always the user that starts the server." msgstr "" "Собственно владельцем сокета всегда будет пользователь, запускающий сервер." -#: utils/misc/guc.c:3054 +#: utils/misc/guc.c:3192 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Задаёт каталоги, где будут создаваться доменные сокеты Unix." -#: utils/misc/guc.c:3069 +#: utils/misc/guc.c:3207 msgid "Sets the host name or IP address(es) to listen to." msgstr "Задаёт имя узла или IP-адрес(а) для привязки." -#: utils/misc/guc.c:3084 +#: utils/misc/guc.c:3222 msgid "Sets the server's data directory." msgstr "Определяет каталог данных сервера." -#: utils/misc/guc.c:3095 +#: utils/misc/guc.c:3233 msgid "Sets the server's main configuration file." msgstr "Определяет основной файл конфигурации сервера." -#: utils/misc/guc.c:3106 +#: utils/misc/guc.c:3244 msgid "Sets the server's \"hba\" configuration file." msgstr "Задаёт путь к файлу конфигурации \"hba\"." -#: utils/misc/guc.c:3117 +#: utils/misc/guc.c:3255 msgid "Sets the server's \"ident\" configuration file." msgstr "Задаёт путь к файлу конфигурации \"ident\"." -#: utils/misc/guc.c:3128 +#: utils/misc/guc.c:3266 msgid "Writes the postmaster PID to the specified file." msgstr "Файл, в который будет записан код процесса postmaster." -#: utils/misc/guc.c:3139 +#: utils/misc/guc.c:3277 msgid "Location of the SSL server certificate file." msgstr "Размещение файла сертификата сервера для SSL." -#: utils/misc/guc.c:3149 +#: utils/misc/guc.c:3287 msgid "Location of the SSL server private key file." msgstr "Размещение файла с закрытым ключом сервера для SSL." -#: utils/misc/guc.c:3159 +#: utils/misc/guc.c:3297 msgid "Location of the SSL certificate authority file." msgstr "Размещение файла центра сертификации для SSL." -#: utils/misc/guc.c:3169 +#: utils/misc/guc.c:3307 msgid "Location of the SSL certificate revocation list file." msgstr "Размещение файла со списком отзыва сертификатов для SSL." -#: utils/misc/guc.c:3179 +#: utils/misc/guc.c:3317 msgid "Writes temporary statistics files to the specified directory." msgstr "Каталог, в который будут записываться временные файлы статистики." -#: utils/misc/guc.c:3190 +#: utils/misc/guc.c:3328 msgid "List of names of potential synchronous standbys." msgstr "Список имён потенциально синхронных резервных серверов." -#: utils/misc/guc.c:3201 +#: utils/misc/guc.c:3339 msgid "Sets default text search configuration." msgstr "Задаёт конфигурацию текстового поиска по умолчанию." -#: utils/misc/guc.c:3211 +#: utils/misc/guc.c:3349 msgid "Sets the list of allowed SSL ciphers." msgstr "Задаёт список допустимых алгоритмов шифрования для SSL." -#: utils/misc/guc.c:3226 +#: utils/misc/guc.c:3364 msgid "Sets the curve to use for ECDH." msgstr "Задаёт кривую для ECDH." -#: utils/misc/guc.c:3241 +#: utils/misc/guc.c:3379 msgid "Sets the application name to be reported in statistics and logs." msgstr "" "Задаёт имя приложения, которое будет выводиться в статистике и протоколах." -#: utils/misc/guc.c:3261 +#: utils/misc/guc.c:3390 +msgid "Sets the name of the cluster which is included in the process title." +msgstr "Задаёт имя кластера, которое будет добавляться в название процесса." + +#: utils/misc/guc.c:3410 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Определяет, можно ли использовать \"\\'\" в текстовых строках." -#: utils/misc/guc.c:3271 +#: utils/misc/guc.c:3420 msgid "Sets the output format for bytea." msgstr "Задаёт формат вывода данных типа bytea." -#: utils/misc/guc.c:3281 +#: utils/misc/guc.c:3430 msgid "Sets the message levels that are sent to the client." msgstr "Ограничивает уровень сообщений, передаваемых клиенту." -#: utils/misc/guc.c:3282 utils/misc/guc.c:3335 utils/misc/guc.c:3346 -#: utils/misc/guc.c:3402 +#: utils/misc/guc.c:3431 utils/misc/guc.c:3484 utils/misc/guc.c:3495 +#: utils/misc/guc.c:3561 msgid "" "Each level includes all the levels that follow it. The later the level, the " "fewer messages are sent." @@ -22261,12 +23661,12 @@ msgstr "" "Каждый уровень включает все последующие. Чем выше уровень, тем меньше " "сообщений." -#: utils/misc/guc.c:3292 +#: utils/misc/guc.c:3441 msgid "Enables the planner to use constraints to optimize queries." msgstr "" "Разрешает планировщику оптимизировать запросы, полагаясь на ограничения." -#: utils/misc/guc.c:3293 +#: utils/misc/guc.c:3442 msgid "" "Table scans will be skipped if their constraints guarantee that no rows " "match the query." @@ -22274,72 +23674,76 @@ msgstr "" "Сканирование таблицы не будет выполняться, если её ограничения гарантируют, " "что запросу не удовлетворяют никакие строки." -#: utils/misc/guc.c:3303 +#: utils/misc/guc.c:3452 msgid "Sets the transaction isolation level of each new transaction." msgstr "Задаёт уровень изоляции транзакций для новых транзакций." -#: utils/misc/guc.c:3313 +#: utils/misc/guc.c:3462 msgid "Sets the display format for interval values." msgstr "Задаёт формат отображения для внутренних значений." -#: utils/misc/guc.c:3324 +#: utils/misc/guc.c:3473 msgid "Sets the verbosity of logged messages." msgstr "Задаёт детализацию протоколируемых сообщений." -#: utils/misc/guc.c:3334 +#: utils/misc/guc.c:3483 msgid "Sets the message levels that are logged." msgstr "Ограничивает уровни протоколируемых сообщений." -#: utils/misc/guc.c:3345 +#: utils/misc/guc.c:3494 msgid "" "Causes all statements generating error at or above this level to be logged." msgstr "" "Включает протоколирование для SQL-операторов, выполненных с ошибкой этого " "или большего уровня." -#: utils/misc/guc.c:3356 +#: utils/misc/guc.c:3505 msgid "Sets the type of statements logged." msgstr "Задаёт тип протоколируемых операторов." -#: utils/misc/guc.c:3366 +#: utils/misc/guc.c:3515 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "Задаёт получателя сообщений, отправляемых в syslog." -#: utils/misc/guc.c:3381 +#: utils/misc/guc.c:3530 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "" "Задаёт режим срабатывания триггеров и правил перезаписи для текущего сеанса." -#: utils/misc/guc.c:3391 +#: utils/misc/guc.c:3540 msgid "Sets the current transaction's synchronization level." msgstr "Задаёт уровень синхронизации текущей транзакции." -#: utils/misc/guc.c:3401 +#: utils/misc/guc.c:3550 +msgid "Allows archiving of WAL files using archive_command." +msgstr "Разрешает архивацию файлов WAL командой archive_command." + +#: utils/misc/guc.c:3560 msgid "Enables logging of recovery-related debugging information." msgstr "" "Включает протоколирование отладочной информации, связанной с репликацией." -#: utils/misc/guc.c:3417 +#: utils/misc/guc.c:3576 msgid "Collects function-level statistics on database activity." msgstr "Включает сбор статистики активности в БД на уровне функций." -#: utils/misc/guc.c:3427 +#: utils/misc/guc.c:3586 msgid "Set the level of information written to the WAL." msgstr "Задаёт уровень информации, записываемой в WAL." -#: utils/misc/guc.c:3437 +#: utils/misc/guc.c:3596 msgid "Selects the dynamic shared memory implementation used." msgstr "Выбирает используемую реализацию динамической разделяемой памяти." -#: utils/misc/guc.c:3447 +#: utils/misc/guc.c:3606 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Выбирает метод принудительной записи изменений в WAL на диск." -#: utils/misc/guc.c:3457 +#: utils/misc/guc.c:3616 msgid "Sets how binary values are to be encoded in XML." msgstr "Определяет, как должны кодироваться двоичные значения в XML." -#: utils/misc/guc.c:3467 +#: utils/misc/guc.c:3626 msgid "" "Sets whether XML data in implicit parsing and serialization operations is to " "be considered as documents or content fragments." @@ -22347,11 +23751,21 @@ msgstr "" "Определяет, следует ли рассматривать XML-данные в неявных операциях разбора " "и сериализации как документы или как фрагменты содержания." -#: utils/misc/guc.c:3478 +#: utils/misc/guc.c:3637 msgid "Use of huge pages on Linux." msgstr "Включает использование гигантских страниц в Linux." -#: utils/misc/guc.c:4293 +#: utils/misc/guc.c:3647 +msgid "Enable row security." +msgstr "Включает защиту на уровне строк." + +#: utils/misc/guc.c:3648 +msgid "When enabled, row security will be applied to all users." +msgstr "" +"Когда включена, защита на уровне строк распространяется на всех " +"пользователей." + +#: utils/misc/guc.c:4462 #, c-format msgid "" "%s does not know where to find the server configuration file.\n" @@ -22362,12 +23776,12 @@ msgstr "" "Вы должны указать его расположение в параметре --config-file или -D, либо " "установить переменную окружения PGDATA.\n" -#: utils/misc/guc.c:4312 +#: utils/misc/guc.c:4481 #, c-format msgid "%s cannot access the server configuration file \"%s\": %s\n" msgstr "%s не может открыть файл конфигурации сервера \"%s\": %s\n" -#: utils/misc/guc.c:4338 +#: utils/misc/guc.c:4507 #, c-format msgid "" "%s does not know where to find the database system data.\n" @@ -22378,7 +23792,7 @@ msgstr "" "Их расположение можно задать как значение \"data_directory\" в файле \"%s\", " "либо передать в параметре -D, либо установить переменную окружения PGDATA.\n" -#: utils/misc/guc.c:4386 +#: utils/misc/guc.c:4555 #, c-format msgid "" "%s does not know where to find the \"hba\" configuration file.\n" @@ -22389,7 +23803,7 @@ msgstr "" "Его расположение можно задать как значение \"hba_file\" в файле \"%s\", либо " "передать в параметре -D, либо установить переменную окружения PGDATA.\n" -#: utils/misc/guc.c:4409 +#: utils/misc/guc.c:4578 #, c-format msgid "" "%s does not know where to find the \"ident\" configuration file.\n" @@ -22400,126 +23814,128 @@ msgstr "" "Его расположение можно задать как значение \"ident_file\" в файле \"%s\", " "либо передать в параметре -D, либо установить переменную окружения PGDATA.\n" -#: utils/misc/guc.c:5001 utils/misc/guc.c:5181 +#: utils/misc/guc.c:5252 utils/misc/guc.c:5299 msgid "Value exceeds integer range." msgstr "Значение выходит за рамки целых чисел." -#: utils/misc/guc.c:5020 -msgid "Valid units for this parameter are \"kB\", \"MB\", \"GB\", and \"TB\"." -msgstr "" -"Допустимые единицы измерения для этого параметра - \"kB\", \"MB\", \"GB\" и " -"\"TB\"." - -#: utils/misc/guc.c:5095 -msgid "" -"Valid units for this parameter are \"ms\", \"s\", \"min\", \"h\", and \"d\"." -msgstr "" -"Допустимые единицы измерения для этого параметра - \"ms\", \"s\", \"min\", " -"\"h\" и \"d\"." - -#: utils/misc/guc.c:5375 utils/misc/guc.c:5468 utils/misc/guc.c:6723 -#: utils/misc/guc.c:8942 utils/misc/guc.c:8976 +#: utils/misc/guc.c:5493 utils/misc/guc.c:5586 utils/misc/guc.c:6878 +#: utils/misc/guc.c:9595 utils/misc/guc.c:9629 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "неверное значение для параметра \"%s\": \"%s\"" -#: utils/misc/guc.c:5404 +#: utils/misc/guc.c:5522 #, c-format msgid "parameter \"%s\" requires a numeric value" msgstr "параметр \"%s\" требует числовое значение" -#: utils/misc/guc.c:5413 +#: utils/misc/guc.c:5531 #, c-format msgid "%g is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g вне диапазона, допустимого для параметра \"%s\" (%g .. %g)" -#: utils/misc/guc.c:5558 utils/misc/guc.c:6290 utils/misc/guc.c:6342 -#: utils/misc/guc.c:6700 utils/misc/guc.c:7424 utils/misc/guc.c:7583 -#: utils/misc/guc.c:8762 +#: utils/misc/guc.c:5684 utils/misc/guc.c:7013 +#, c-format +msgid "cannot set parameters during a parallel operation" +msgstr "устанавливать параметры во время параллельных операций нельзя" + +#: utils/misc/guc.c:5691 utils/misc/guc.c:6441 utils/misc/guc.c:6493 +#: utils/misc/guc.c:6854 utils/misc/guc.c:7590 utils/misc/guc.c:7758 +#: utils/misc/guc.c:9415 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "нераспознанный параметр конфигурации: \"%s\"" -#: utils/misc/guc.c:5573 utils/misc/guc.c:6711 +#: utils/misc/guc.c:5706 utils/misc/guc.c:6866 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "параметр \"%s\" нельзя изменить" -#: utils/misc/guc.c:5596 utils/misc/guc.c:5779 utils/misc/guc.c:5867 -#: utils/misc/guc.c:5955 utils/misc/guc.c:6061 utils/misc/guc.c:6154 -#: guc-file.l:292 +#: utils/misc/guc.c:5729 utils/misc/guc.c:5921 utils/misc/guc.c:6011 +#: utils/misc/guc.c:6101 utils/misc/guc.c:6209 utils/misc/guc.c:6304 +#: guc-file.l:352 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "параметр \"%s\" изменяется только при перезапуске сервера" -#: utils/misc/guc.c:5606 +#: utils/misc/guc.c:5739 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "параметр \"%s\" нельзя изменить сейчас" -#: utils/misc/guc.c:5651 -#, c-format -msgid "parameter \"%s\" cannot be set after connection start" -msgstr "параметр \"%s\" нельзя задать после установления соединения" - -#: utils/misc/guc.c:5661 utils/misc/guc.c:8778 +#: utils/misc/guc.c:5757 utils/misc/guc.c:5802 utils/misc/guc.c:9431 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "нет прав для изменения параметра \"%s\"" -#: utils/misc/guc.c:5699 +#: utils/misc/guc.c:5792 +#, c-format +msgid "parameter \"%s\" cannot be set after connection start" +msgstr "параметр \"%s\" нельзя задать после установления соединения" + +#: utils/misc/guc.c:5840 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "" "параметр \"%s\" нельзя задать в функции с контекстом безопасности " "определившего" -#: utils/misc/guc.c:6298 utils/misc/guc.c:6346 utils/misc/guc.c:7587 +#: utils/misc/guc.c:6449 utils/misc/guc.c:6497 utils/misc/guc.c:7764 #, c-format msgid "must be superuser to examine \"%s\"" msgstr "прочитать \"%s\" может только суперпользователь" -#: utils/misc/guc.c:6412 +#: utils/misc/guc.c:6563 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s принимает только один аргумент" -#: utils/misc/guc.c:6660 +#: utils/misc/guc.c:6814 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "выполнить команду ALTER SYSTEM может только суперпользователь" -#: utils/misc/guc.c:6924 +#: utils/misc/guc.c:6927 +#, c-format +msgid "could not parse contents of file \"%s\"" +msgstr "не удалось разобрать содержимое файла \"%s\"" + +#: utils/misc/guc.c:7089 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT не реализовано" -#: utils/misc/guc.c:7012 +#: utils/misc/guc.c:7174 #, c-format msgid "SET requires parameter name" msgstr "SET требует имя параметра" -#: utils/misc/guc.c:7126 +#: utils/misc/guc.c:7287 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "попытка переопределить параметр \"%s\"" -#: utils/misc/guc.c:8482 +#: utils/misc/guc.c:9048 +#, c-format +msgid "parameter \"%s\" could not be set" +msgstr "параметр \"%s\" нельзя установить" + +#: utils/misc/guc.c:9135 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "не удалось разобрать значение параметра \"%s\"" -#: utils/misc/guc.c:8840 utils/misc/guc.c:8874 +#: utils/misc/guc.c:9493 utils/misc/guc.c:9527 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "неверное значение параметра \"%s\": %d" -#: utils/misc/guc.c:8908 +#: utils/misc/guc.c:9561 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "неверное значение параметра \"%s\": %g" -#: utils/misc/guc.c:9098 +#: utils/misc/guc.c:9751 #, c-format msgid "" "\"temp_buffers\" cannot be changed after any temporary tables have been " @@ -22528,33 +23944,23 @@ msgstr "" "параметр \"temp_buffers\" нельзя изменить после обращения к временным " "таблицам в текущем сеансе." -#: utils/misc/guc.c:9110 -#, c-format -msgid "SET AUTOCOMMIT TO OFF is no longer supported" -msgstr "SET AUTOCOMMIT TO OFF больше не поддерживается" - -#: utils/misc/guc.c:9122 -#, c-format -msgid "assertion checking is not supported by this build" -msgstr "в данной сборке не поддерживаются проверки истинности" - -#: utils/misc/guc.c:9135 +#: utils/misc/guc.c:9763 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour не поддерживается в данной сборке" -#: utils/misc/guc.c:9148 +#: utils/misc/guc.c:9776 #, c-format msgid "SSL is not supported by this build" msgstr "SSL не поддерживается в данной сборке" -#: utils/misc/guc.c:9160 +#: utils/misc/guc.c:9788 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "" "Этот параметр нельзя включить, когда \"log_statement_stats\" равен true." -#: utils/misc/guc.c:9172 +#: utils/misc/guc.c:9800 #, c-format msgid "" "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", " @@ -22568,7 +23974,12 @@ msgstr "" msgid "internal error: unrecognized run-time parameter type\n" msgstr "внутренняя ошибка: нераспознанный тип параметра времени выполнения\n" -#: utils/misc/timeout.c:422 +#: utils/misc/rls.c:108 +#, c-format +msgid "insufficient privilege to bypass row security." +msgstr "недостаточно прав для обхода защиты на уровне строк" + +#: utils/misc/timeout.c:388 #, c-format msgid "cannot add more timeout reasons" msgstr "добавить другие причины таймаута нельзя" @@ -22659,7 +24070,10 @@ msgstr "" msgid "Failed while creating memory context \"%s\"." msgstr "Ошибка при создании контекста памяти \"%s\"." -#: utils/mmgr/aset.c:679 utils/mmgr/aset.c:873 utils/mmgr/aset.c:1115 +#: utils/mmgr/mcxt.c:689 utils/mmgr/mcxt.c:724 utils/mmgr/mcxt.c:761 +#: utils/mmgr/mcxt.c:798 utils/mmgr/mcxt.c:832 utils/mmgr/mcxt.c:861 +#: utils/mmgr/mcxt.c:895 utils/mmgr/mcxt.c:975 utils/mmgr/mcxt.c:1008 +#: utils/mmgr/mcxt.c:1055 #, c-format msgid "Failed on request of size %zu." msgstr "Ошибка при запросе памяти (%zu Б)." @@ -22684,67 +24098,72 @@ msgstr "удалить активный портал \"%s\" нельзя" msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "нельзя выполнить PREPARE для транзакции, создавшей курсор WITH HOLD" -#: utils/sort/logtape.c:229 +#: utils/sort/logtape.c:226 #, c-format msgid "could not read block %ld of temporary file: %m" msgstr "не удалось считать блок %ld временного файла: %m" -#: utils/sort/tuplesort.c:3259 +#: utils/sort/tuplesort.c:3584 #, c-format msgid "could not create unique index \"%s\"" msgstr "создать уникальный индекс \"%s\" не удалось" -#: utils/sort/tuplesort.c:3261 +#: utils/sort/tuplesort.c:3586 #, c-format msgid "Key %s is duplicated." msgstr "Ключ %s дублируется." -#: utils/sort/tuplesort.c:3262 +#: utils/sort/tuplesort.c:3587 #, c-format msgid "Duplicate keys exist." msgstr "Данные содержат дублирующиеся ключи." -#: utils/sort/tuplestore.c:506 utils/sort/tuplestore.c:516 -#: utils/sort/tuplestore.c:843 utils/sort/tuplestore.c:947 -#: utils/sort/tuplestore.c:1011 utils/sort/tuplestore.c:1028 -#: utils/sort/tuplestore.c:1230 utils/sort/tuplestore.c:1295 -#: utils/sort/tuplestore.c:1304 +#: utils/sort/tuplestore.c:508 utils/sort/tuplestore.c:518 +#: utils/sort/tuplestore.c:845 utils/sort/tuplestore.c:949 +#: utils/sort/tuplestore.c:1013 utils/sort/tuplestore.c:1030 +#: utils/sort/tuplestore.c:1232 utils/sort/tuplestore.c:1297 +#: utils/sort/tuplestore.c:1306 #, c-format msgid "could not seek in tuplestore temporary file: %m" msgstr "не удалось переместиться в файле временного хранилища кортежей: %m" -#: utils/sort/tuplestore.c:1451 utils/sort/tuplestore.c:1524 -#: utils/sort/tuplestore.c:1530 +#: utils/sort/tuplestore.c:1453 utils/sort/tuplestore.c:1526 +#: utils/sort/tuplestore.c:1532 #, c-format msgid "could not read from tuplestore temporary file: %m" msgstr "не удалось прочитать файл временного хранилища кортежей: %m" -#: utils/sort/tuplestore.c:1492 utils/sort/tuplestore.c:1497 -#: utils/sort/tuplestore.c:1503 +#: utils/sort/tuplestore.c:1494 utils/sort/tuplestore.c:1499 +#: utils/sort/tuplestore.c:1505 #, c-format msgid "could not write to tuplestore temporary file: %m" msgstr "не удалось записать в файл временного хранилища кортежей: %m" -#: utils/time/snapmgr.c:890 +#: utils/time/snapmgr.c:432 +#, c-format +msgid "The source transaction is not running anymore." +msgstr "Исходная транзакция уже не выполняется." + +#: utils/time/snapmgr.c:986 #, c-format msgid "cannot export a snapshot from a subtransaction" msgstr "экспортировать снимок из вложенной транзакции нельзя" -#: utils/time/snapmgr.c:1040 utils/time/snapmgr.c:1045 -#: utils/time/snapmgr.c:1050 utils/time/snapmgr.c:1065 -#: utils/time/snapmgr.c:1070 utils/time/snapmgr.c:1075 -#: utils/time/snapmgr.c:1174 utils/time/snapmgr.c:1190 -#: utils/time/snapmgr.c:1215 +#: utils/time/snapmgr.c:1135 utils/time/snapmgr.c:1140 +#: utils/time/snapmgr.c:1145 utils/time/snapmgr.c:1160 +#: utils/time/snapmgr.c:1165 utils/time/snapmgr.c:1170 +#: utils/time/snapmgr.c:1269 utils/time/snapmgr.c:1285 +#: utils/time/snapmgr.c:1310 #, c-format msgid "invalid snapshot data in file \"%s\"" msgstr "неверные данные снимка в файле \"%s\"" -#: utils/time/snapmgr.c:1112 +#: utils/time/snapmgr.c:1207 #, c-format msgid "SET TRANSACTION SNAPSHOT must be called before any query" msgstr "команда SET TRANSACTION SNAPSHOT должна выполняться до запросов" -#: utils/time/snapmgr.c:1121 +#: utils/time/snapmgr.c:1216 #, c-format msgid "" "a snapshot-importing transaction must have isolation level SERIALIZABLE or " @@ -22753,12 +24172,12 @@ msgstr "" "транзакция, импортирующая снимок, должна иметь уровень изоляции SERIALIZABLE " "или REPEATABLE READ" -#: utils/time/snapmgr.c:1130 utils/time/snapmgr.c:1139 +#: utils/time/snapmgr.c:1225 utils/time/snapmgr.c:1234 #, c-format msgid "invalid snapshot identifier: \"%s\"" msgstr "неверный идентификатор снимка: \"%s\"" -#: utils/time/snapmgr.c:1228 +#: utils/time/snapmgr.c:1323 #, c-format msgid "" "a serializable transaction cannot import a snapshot from a non-serializable " @@ -22766,7 +24185,7 @@ msgid "" msgstr "" "сериализуемая транзакция не может импортировать снимок из не сериализуемой" -#: utils/time/snapmgr.c:1232 +#: utils/time/snapmgr.c:1327 #, c-format msgid "" "a non-read-only serializable transaction cannot import a snapshot from a " @@ -22775,216 +24194,216 @@ msgstr "" "сериализуемая транзакция в режиме \"чтение-запись\" не может импортировать " "снимок из транзакции в режиме \"только чтение\"" -#: utils/time/snapmgr.c:1247 +#: utils/time/snapmgr.c:1342 #, c-format msgid "cannot import a snapshot from a different database" msgstr "нельзя импортировать снимок из другой базы данных" -#: gram.y:956 +#: gram.y:1011 #, c-format msgid "unrecognized role option \"%s\"" msgstr "нераспознанный параметр роли \"%s\"" -#: gram.y:1238 gram.y:1253 +#: gram.y:1287 gram.y:1302 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS не может включать элементы схемы" -#: gram.y:1398 +#: gram.y:1447 #, c-format msgid "current database cannot be changed" msgstr "сменить текущую базу данных нельзя" -#: gram.y:1522 gram.y:1537 +#: gram.y:1571 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "" "интервал, задающий часовой пояс, должен иметь точность HOUR или HOUR TO " "MINUTE" -#: gram.y:1542 gram.y:10351 gram.y:12688 -#, c-format -msgid "interval precision specified twice" -msgstr "точность интервала указана дважды" - -#: gram.y:2511 gram.y:2540 +#: gram.y:2572 gram.y:2601 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "указания STDIN/STDOUT несовместимы с PROGRAM" -#: gram.y:2802 gram.y:2809 gram.y:9589 gram.y:9597 +#: gram.y:2867 gram.y:2874 gram.y:10168 gram.y:10176 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "указание GLOBAL при создании временных таблиц устарело" -#: gram.y:4482 +#: gram.y:4747 msgid "duplicate trigger events specified" msgstr "события триггера повторяются" -#: gram.y:4584 +#: gram.y:4847 #, c-format msgid "conflicting constraint properties" msgstr "противоречащие характеристики ограничения" -#: gram.y:4716 +#: gram.y:4979 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "оператор CREATE ASSERTION ещё не реализован" -#: gram.y:4732 +#: gram.y:4995 #, c-format msgid "DROP ASSERTION is not yet implemented" msgstr "оператор DROP ASSERTION ещё не реализован" -#: gram.y:5078 +#: gram.y:5341 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK более не требуется" -#: gram.y:5079 +#: gram.y:5342 #, c-format msgid "Update your data type." msgstr "Обновите тип данных." -#: gram.y:6540 +#: gram.y:6919 #, c-format msgid "aggregates cannot have output arguments" msgstr "у агрегатных функций не может быть выходных аргументов" -#: gram.y:8236 gram.y:8254 +#: gram.y:8736 gram.y:8754 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "" "предложение WITH CHECK OPTION не поддерживается для рекурсивных представлений" -#: gram.y:9234 -#, c-format -msgid "number of columns does not match number of values" -msgstr "число колонок не равно числу значений" - -#: gram.y:9693 +#: gram.y:10276 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "синтаксис LIMIT #,# не поддерживается" -#: gram.y:9694 +#: gram.y:10277 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "Используйте отдельные предложения LIMIT и OFFSET." -#: gram.y:9882 gram.y:9907 +#: gram.y:10540 gram.y:10565 #, c-format msgid "VALUES in FROM must have an alias" msgstr "список VALUES во FROM должен иметь псевдоним" -#: gram.y:9883 gram.y:9908 +#: gram.y:10541 gram.y:10566 #, c-format msgid "For example, FROM (VALUES ...) [AS] foo." msgstr "Например, FROM (VALUES ...) [AS] foo." -#: gram.y:9888 gram.y:9913 +#: gram.y:10546 gram.y:10571 #, c-format msgid "subquery in FROM must have an alias" msgstr "подзапрос во FROM должен иметь псевдоним" -#: gram.y:9889 gram.y:9914 +#: gram.y:10547 gram.y:10572 #, c-format msgid "For example, FROM (SELECT ...) [AS] foo." msgstr "Например, FROM (SELECT ...) [AS] foo." -#: gram.y:10477 +#: gram.y:11146 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "тип float должен иметь точность минимум 1 бит" -#: gram.y:10486 +#: gram.y:11155 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "тип float должен иметь точность меньше 54 бит" -#: gram.y:10952 +#: gram.y:11659 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "неверное число параметров в левой части выражения OVERLAPS" -#: gram.y:10957 +#: gram.y:11664 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "неверное число параметров в правой части выражения OVERLAPS" -#: gram.y:11141 +#: gram.y:11841 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "предикат UNIQUE ещё не реализован" -#: gram.y:11428 +#: gram.y:12173 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "ORDER BY с WITHIN GROUP можно указать только один раз" -#: gram.y:11433 +#: gram.y:12178 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "DISTINCT нельзя использовать с WITHIN GROUP" -#: gram.y:11438 +#: gram.y:12183 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "VARIADIC нельзя использовать с WITHIN GROUP" -#: gram.y:11944 +#: gram.y:12689 #, c-format msgid "RANGE PRECEDING is only supported with UNBOUNDED" msgstr "RANGE PRECEDING поддерживается только с UNBOUNDED" -#: gram.y:11950 +#: gram.y:12695 #, c-format msgid "RANGE FOLLOWING is only supported with UNBOUNDED" msgstr "RANGE FOLLOWING поддерживается только с UNBOUNDED" -#: gram.y:11977 gram.y:12000 +#: gram.y:12722 gram.y:12745 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "началом рамки не может быть UNBOUNDED FOLLOWING" -#: gram.y:11982 +#: gram.y:12727 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "" "рамка, начинающаяся со следующей строки, не может заканчиваться текущей" -#: gram.y:12005 +#: gram.y:12750 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "концом рамки не может быть UNBOUNDED PRECEDING" -#: gram.y:12011 +#: gram.y:12756 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "" "рамка, начинающаяся с текущей строки, не может иметь предшествующих строк" -#: gram.y:12018 +#: gram.y:12763 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "" "рамка, начинающаяся со следующей строки, не может иметь предшествующих строк" -#: gram.y:12657 +#: gram.y:13421 #, c-format msgid "type modifier cannot have parameter name" msgstr "параметр функции-модификатора типа должен быть безымянным" -#: gram.y:12663 +#: gram.y:13427 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "модификатор типа не может включать ORDER BY" -#: gram.y:13284 gram.y:13459 +#: gram.y:13485 gram.y:13520 +#, c-format +msgid "role name \"%s\" is reserved" +msgstr "имя роли \"%s\" зарезервировано" + +#: gram.y:13491 gram.y:13497 +#, c-format +msgid "%s cannot be used as a role name here" +msgstr "%s нельзя использовать здесь как имя роли" + +#: gram.y:14116 gram.y:14305 msgid "improper use of \"*\"" msgstr "недопустимое использование \"*\"" -#: gram.y:13523 +#: gram.y:14369 #, c-format msgid "" "an ordered-set aggregate with a VARIADIC direct argument must have one " @@ -22993,77 +24412,77 @@ msgstr "" "сортирующая агрегатная функция с непосредственным аргументом VARIADIC должна " "иметь один агрегатный аргумент VARIADIC того же типа данных" -#: gram.y:13560 +#: gram.y:14406 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "ORDER BY можно указать только один раз" -#: gram.y:13571 +#: gram.y:14417 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "OFFSET можно указать только один раз" -#: gram.y:13580 +#: gram.y:14426 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "LIMIT можно указать только один раз" -#: gram.y:13589 +#: gram.y:14435 #, c-format msgid "multiple WITH clauses not allowed" msgstr "WITH можно указать только один раз" -#: gram.y:13729 +#: gram.y:14615 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "в табличных функциях не может быть аргументов OUT и INOUT" -#: gram.y:13830 +#: gram.y:14716 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "COLLATE можно указать только один раз" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:13868 gram.y:13881 +#: gram.y:14754 gram.y:14767 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "ограничения %s не могут иметь характеристики DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:13894 +#: gram.y:14780 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "ограничения %s не могут иметь характеристики NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:13907 +#: gram.y:14793 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "ограничения %s не могут иметь характеристики NO INHERIT" -#: guc-file.l:256 +#: guc-file.l:315 #, c-format msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %u" msgstr "нераспознанный параметр конфигурации \"%s\" в файле \"%s\", строке %u" -#: guc-file.l:320 +#: guc-file.l:388 #, c-format msgid "parameter \"%s\" removed from configuration file, reset to default" msgstr "" "параметр \"%s\" удалён из файла конфигурации, он принимает значение по " "умолчанию" -#: guc-file.l:382 +#: guc-file.l:454 #, c-format msgid "parameter \"%s\" changed to \"%s\"" msgstr "параметр \"%s\" принял значение \"%s\"" -#: guc-file.l:417 +#: guc-file.l:496 #, c-format msgid "configuration file \"%s\" contains errors" msgstr "файл конфигурации \"%s\" содержит ошибки" -#: guc-file.l:422 +#: guc-file.l:501 #, c-format msgid "" "configuration file \"%s\" contains errors; unaffected changes were applied" @@ -23071,81 +24490,81 @@ msgstr "" "файл конфигурации \"%s\" содержит ошибки; были применены не зависимые " "изменения" -#: guc-file.l:427 +#: guc-file.l:506 #, c-format msgid "configuration file \"%s\" contains errors; no changes were applied" msgstr "файл конфигурации \"%s\" содержит ошибки; изменения не были применены" -#: guc-file.l:500 +#: guc-file.l:579 #, c-format msgid "" "could not open configuration file \"%s\": maximum nesting depth exceeded" msgstr "" "открыть файл конфигурации \"%s\" не удалось: превышен предел вложенности" -#: guc-file.l:520 +#: guc-file.l:606 #, c-format msgid "skipping missing configuration file \"%s\"" msgstr "отсутствующий файл конфигурации \"%s\" пропускается" -#: guc-file.l:730 +#: guc-file.l:860 #, c-format msgid "syntax error in file \"%s\" line %u, near end of line" msgstr "ошибка синтаксиса в файле \"%s\", в конце строки %u" -#: guc-file.l:735 +#: guc-file.l:870 #, c-format msgid "syntax error in file \"%s\" line %u, near token \"%s\"" msgstr "ошибка синтаксиса в файле \"%s\", в строке %u, рядом с \"%s\"" -#: guc-file.l:751 +#: guc-file.l:890 #, c-format msgid "too many syntax errors found, abandoning file \"%s\"" msgstr "" "обнаружено слишком много синтаксических ошибок, обработка файла \"%s\" " "прекращается" -#: guc-file.l:796 +#: guc-file.l:942 #, c-format msgid "could not open configuration directory \"%s\": %m" msgstr "открыть каталог конфигурации \"%s\" не удалось: %m" -#: repl_gram.y:247 repl_gram.y:274 +#: repl_gram.y:257 repl_gram.y:284 #, c-format msgid "invalid timeline %u" msgstr "неверная линия времени %u" -#: repl_scanner.l:118 +#: repl_scanner.l:119 msgid "invalid streaming start location" msgstr "неверная позиция начала потока" -#: repl_scanner.l:169 scan.l:661 +#: repl_scanner.l:170 scan.l:667 msgid "unterminated quoted string" msgstr "незавершённая строка в кавычках" -#: repl_scanner.l:179 +#: repl_scanner.l:180 #, c-format msgid "syntax error: unexpected character \"%s\"" msgstr "ошибка синтаксиса: неожиданный символ \"%s\"" -#: scan.l:426 +#: scan.l:432 msgid "unterminated /* comment" msgstr "незавершённый комментарий /*" -#: scan.l:455 +#: scan.l:461 msgid "unterminated bit string literal" msgstr "оборванная битовая строка" -#: scan.l:476 +#: scan.l:482 msgid "unterminated hexadecimal string literal" msgstr "оборванная шестнадцатеричная строка" -#: scan.l:526 +#: scan.l:532 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "небезопасное использование строковой константы со спецкодами Unicode" -#: scan.l:527 +#: scan.l:533 #, c-format msgid "" "String constants with Unicode escapes cannot be used when " @@ -23154,31 +24573,31 @@ msgstr "" "Строки со спецкодами Unicode нельзя использовать, когда параметр " "standard_conforming_strings выключен." -#: scan.l:571 scan.l:767 +#: scan.l:577 scan.l:773 msgid "invalid Unicode escape character" msgstr "неверный символ спецкода Unicode" -#: scan.l:596 scan.l:604 scan.l:612 scan.l:613 scan.l:614 scan.l:1297 -#: scan.l:1324 scan.l:1328 scan.l:1366 scan.l:1370 scan.l:1392 +#: scan.l:602 scan.l:610 scan.l:618 scan.l:619 scan.l:620 scan.l:1329 +#: scan.l:1356 scan.l:1360 scan.l:1398 scan.l:1402 scan.l:1424 msgid "invalid Unicode surrogate pair" msgstr "неверная суррогатная пара Unicode" -#: scan.l:618 +#: scan.l:624 #, c-format msgid "invalid Unicode escape" msgstr "неверный спецкод Unicode" -#: scan.l:619 +#: scan.l:625 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "Спецкоды Unicode должны иметь вид \\uXXXX или \\UXXXXXXXX." -#: scan.l:630 +#: scan.l:636 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "небезопасное использование символа \\' в строке" -#: scan.l:631 +#: scan.l:637 #, c-format msgid "" "Use '' to write quotes in strings. \\' is insecure in client-only encodings." @@ -23186,35 +24605,35 @@ msgstr "" "Записывайте апостроф в строке в виде ''. Запись \\' небезопасна для " "исключительно клиентских кодировок." -#: scan.l:706 +#: scan.l:712 msgid "unterminated dollar-quoted string" msgstr "незавершённая спецстрока с $" -#: scan.l:723 scan.l:747 scan.l:762 +#: scan.l:729 scan.l:753 scan.l:768 msgid "zero-length delimited identifier" msgstr "пустой идентификатор в кавычках" -#: scan.l:782 +#: scan.l:788 msgid "unterminated quoted identifier" msgstr "незавершённый идентификатор в кавычках" -#: scan.l:886 +#: scan.l:919 msgid "operator too long" msgstr "слишком длинный оператор" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1044 +#: scan.l:1072 #, c-format msgid "%s at end of input" msgstr "%s в конце" #. translator: first %s is typically the translation of "syntax error" -#: scan.l:1052 +#: scan.l:1080 #, c-format msgid "%s at or near \"%s\"" msgstr "%s (примерное положение: \"%s\")" -#: scan.l:1213 scan.l:1245 +#: scan.l:1245 scan.l:1277 msgid "" "Unicode escape values cannot be used for code point values above 007F when " "the server encoding is not UTF8" @@ -23222,16 +24641,16 @@ msgstr "" "Спецкоды Unicode для значений выше 007F можно использовать только с " "серверной кодировкой UTF8" -#: scan.l:1241 scan.l:1384 +#: scan.l:1273 scan.l:1416 msgid "invalid Unicode escape value" msgstr "неверное значение спецкода Unicode" -#: scan.l:1440 +#: scan.l:1472 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "нестандартное применение \\' в строке" -#: scan.l:1441 +#: scan.l:1473 #, c-format msgid "" "Use '' to write quotes in strings, or use the escape string syntax (E'...')." @@ -23239,27 +24658,199 @@ msgstr "" "Записывайте апостроф в строках в виде '' или используйте синтаксис спецстрок " "(E'...')." -#: scan.l:1450 +#: scan.l:1482 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "нестандартное применение \\\\ в строке" -#: scan.l:1451 +#: scan.l:1483 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "" "Используйте для записи обратных слэшей синтаксис спецстрок, например E'\\\\'." -#: scan.l:1465 +#: scan.l:1497 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "нестандартное использование спецсимвола в строке" -#: scan.l:1466 +#: scan.l:1498 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Используйте для записи спецсимволов синтаксис спецстрок E'\\r\\n'." +#~ msgid "invalid sample size" +#~ msgstr "неверный размер выборки" + +#~ msgid "Sample size must be numeric value between 0 and 100 (inclusive)." +#~ msgstr "Размер выборки должен задаваться числом от 0 до 100 (включительно)." + +#~ msgid "REPEATABLE clause must be NOT NULL numeric value" +#~ msgstr "для REPEATABLE требуется числовое значение NOT NULL" + +#~ msgid "wrong parameter %d for tablesample method \"%s\"" +#~ msgstr "неверный параметр %d для метода получения выборки \"%s\"" + +#~ msgid "Expected type %s got %s." +#~ msgstr "Ожидался тип: %s, получено: %s." + +#~ msgid "cache lookup failed for tablesample method %u" +#~ msgstr "ошибка поиска в кэше для метода получения выборки %u" + +#~ msgid "invalid xlog switch record at %X/%X" +#~ msgstr "неверная запись переключения xlog по смещению %X/%X" + +#~ msgid "invalid backup block size in record at %X/%X" +#~ msgstr "неверный размер блока копии в позиции %X/%X" + +#~ msgid "incorrect hole size in record at %X/%X" +#~ msgstr "неправильный размер пропуска в записи по смещению %X/%X" + +#~ msgid "incorrect total length in record at %X/%X" +#~ msgstr "некорректная общая длина в записи по смещению %X/%X" + +#~ msgid "role with OID %u does not exist" +#~ msgstr "роль с OID %u не существует" + +#~ msgid "=> is deprecated as an operator name" +#~ msgstr "=> как имя оператора считается устаревшим" + +#~ msgid "" +#~ "This name may be disallowed altogether in future versions of PostgreSQL." +#~ msgstr "Это имя может быть вовсе запрещено в будущих версиях PostgreSQL." + +#~ msgid "inherited relation \"%s\" is not a table" +#~ msgstr "наследованное отношение \"%s\" не является таблицей" + +#~ msgid "Specify a USING expression to perform the conversion." +#~ msgstr "Укажите выражение USING, чтобы выполнить преобразование." + +#~ msgid "" +#~ "automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" +#~ "pages: %d removed, %d remain\n" +#~ "tuples: %.0f removed, %.0f remain, %.0f are dead but not yet removable\n" +#~ "buffer usage: %d hits, %d misses, %d dirtied\n" +#~ "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" +#~ "system usage: %s" +#~ msgstr "" +#~ "автоматическая очистка таблицы \"%s.%s.%s\": сканирований индекса: %d\n" +#~ "страниц удалено: %d, осталось: %d\n" +#~ "кортежей удалено: %.0f, осталось: %.0f, мёртвых (но пока неудаляемых): " +#~ "%.0f\n" +#~ "использование буфера: попаданий: %d, промахов: %d, загрязнено: %d\n" +#~ "средняя скорость чтения: %.3f МБ/сек, средняя скорость записи: %.3f МБ/" +#~ "сек\n" +#~ "нагрузка системы: %s" + +#~ msgid "" +#~ "%.0f dead row versions cannot be removed yet.\n" +#~ "There were %.0f unused item pointers.\n" +#~ "%u pages are entirely empty.\n" +#~ "%s." +#~ msgstr "" +#~ "В данный момент нельзя удалить версий \"мёртвых\" строк: %.0f.\n" +#~ "Неиспользованных указателей: %.0f.\n" +#~ "Полностью пустых страниц: %u.\n" +#~ "%s." + +#~ msgid "SSL handshake failure on renegotiation, retrying" +#~ msgstr "" +#~ "сбой согласования SSL при переподключении, следует повторная попытка" + +#~ msgid "could not complete SSL handshake on renegotiation, too many failures" +#~ msgstr "" +#~ "не удалось выполнить согласование SSL при переподключении (слишком много " +#~ "ошибок)" + +#~ msgid "could not set socket to blocking mode: %m" +#~ msgstr "не удалось перевести сокет в блокирующий режим: %m" + +#~ msgid "%s: setsysinfo failed: %s\n" +#~ msgstr "%s: ошибка setsysinfo: %s\n" + +#~ msgid " -A 1|0 enable/disable run-time assert checking\n" +#~ msgstr "" +#~ " -A 1|0 включить/выключить проверки истинности во время " +#~ "выполнения\n" + +#~ msgid "subquery must return a column" +#~ msgstr "подзапрос должен вернуть колонку" + +#~ msgid "" +#~ "Consider increasing the configuration parameter \"checkpoint_segments\"." +#~ msgstr "Возможно, стоит увеличить параметр \"checkpoint_segments\"." + +#~ msgid "" +#~ "WAL archival (archive_mode=on) requires wal_level \"archive\", " +#~ "\"hot_standby\", or \"logical\"" +#~ msgstr "" +#~ "Для архивации WAL (archive_mode=on) wal_level должен быть \"archive\", " +#~ "\"hot_standby\" или \"logical\"" + +#~ msgid "postmaster became multithreaded" +#~ msgstr "процесс postmaster стал многопоточным" + +#~ msgid "could not determine input data types" +#~ msgstr "не удалось определить типы входных данных" + +#~ msgid "neither input type is an array" +#~ msgstr "входной тип так же не является массивом" + +#~ msgid "unexpected \"=\"" +#~ msgstr "неожиданный знак \"=\"" + +#~ msgid "invalid symbol" +#~ msgstr "неверный символ" + +#~ msgid "" +#~ "must be superuser or have the same role to cancel queries running in " +#~ "other server processes" +#~ msgstr "" +#~ "отменять запросы в других серверных процессах может только " +#~ "суперпользователь или пользователь той же роли" + +#~ msgid "" +#~ "must be superuser or have the same role to terminate other server " +#~ "processes" +#~ msgstr "" +#~ "завершать другие серверные процессы может только суперпользователь или " +#~ "пользователь той же роли" + +#~ msgid "cannot accept a value of type pg_node_tree" +#~ msgstr "значение типа pg_node_tree нельзя ввести" + +#~ msgid "Turns on various assertion checks." +#~ msgstr "Включает различные проверки истинности." + +#~ msgid "This is a debugging aid." +#~ msgstr "Полезно при отладке." + +#~ msgid "This parameter doesn't do anything." +#~ msgstr "Этот параметр ничего не делает." + +#~ msgid "" +#~ "It's just here so that we won't choke on SET AUTOCOMMIT TO ON from 7.3-" +#~ "vintage clients." +#~ msgstr "" +#~ "Он сохранён только для того, чтобы не обидеть винтажных клиентов 7.3-, " +#~ "пожелавших SET AUTOCOMMIT TO ON." + +#~ msgid "" +#~ "Sets the maximum distance in log segments between automatic WAL " +#~ "checkpoints." +#~ msgstr "" +#~ "Задаёт максимальное расстояние в сегментах журнала между автоматическими " +#~ "контрольными точками WAL." + +#~ msgid "SET AUTOCOMMIT TO OFF is no longer supported" +#~ msgstr "SET AUTOCOMMIT TO OFF больше не поддерживается" + +#~ msgid "assertion checking is not supported by this build" +#~ msgstr "в данной сборке не поддерживаются проверки истинности" + +#~ msgid "interval precision specified twice" +#~ msgstr "точность интервала указана дважды" + #~ msgid "JSON does not support infinite date values." #~ msgstr "JSON не поддерживает бесконечность в датах." @@ -23368,18 +24959,12 @@ msgstr "Используйте для записи спецсимволов си #~ msgid "cannot extract element from a scalar" #~ msgstr "извлечь элемент из скаляра нельзя" -#~ msgid "cannot extract path from a scalar" -#~ msgstr "извлечь путь из скаляра нельзя" - #~ msgid "could not rename file \"%s\" to \"%s\" : %m" #~ msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" #~ msgid "invalid number or arguments" #~ msgstr "неверное число аргументов" -#~ msgid "Object must be matched key value pairs." -#~ msgstr "Объект должен состоять из пар ключ-значение." - #~ msgid "%s \"%s\": return code %d" #~ msgstr "%s \"%s\": код возврата %d" @@ -23444,9 +25029,6 @@ msgstr "Используйте для записи спецсимволов си #~ "Представления, возвращающие одну колонку несколько раз, не обновляются " #~ "автоматически." -#~ msgid "type \"line\" not yet implemented" -#~ msgstr "тип \"line\" ещё не реализован" - #~ msgid "cannot call json_object_keys on an array" #~ msgstr "вызывать json_object_keys с массивом нельзя" @@ -23524,12 +25106,6 @@ msgstr "Используйте для записи спецсимволов си #~ "база данных \"%s\" должна быть очищена, прежде чем будут использованы " #~ "оставшиеся MultiXactId (%u)" -#~ msgid "" -#~ "database with OID %u must be vacuumed before %u more MultiXactIds are used" -#~ msgstr "" -#~ "база данных с OID %u должна быть очищена, прежде чем будут использованы " -#~ "оставшиеся MultiXactId (%u)" - #~ msgid "could not open xlog file \"%s\": %m" #~ msgstr "не удалось открыть файл журнала \"%s\": %m" @@ -23836,12 +25412,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgid "index \"%s\" is not ready" #~ msgstr "индекс \"%s\" не готов" -#~ msgid "Valid values are '[]', '[)', '(]', and '()'." -#~ msgstr "Допустимые значения: '[]', '[)', '(]' и '()'." - -#~ msgid "must be superuser to terminate other server processes" -#~ msgstr "завершать другие серверные процессы может только суперпользователь" - #~ msgid "You can cancel your own processes with pg_cancel_backend()." #~ msgstr "Свои процессы можно отменить с помощью pg_cancel_backend()." diff --git a/src/backend/port/sysv_shmem.c b/src/backend/port/sysv_shmem.c index 8be5bbe1aba55..437ae4625dc7b 100644 --- a/src/backend/port/sysv_shmem.c +++ b/src/backend/port/sysv_shmem.c @@ -195,7 +195,7 @@ InternalIpcMemoryCreate(IpcMemoryKey memKey, Size size) /****************************************************************************/ /* IpcMemoryDetach(status, shmaddr) removes a shared memory segment */ -/* from process' address spaceq */ +/* from process' address space */ /* (called as an on_shmem_exit callback, hence funny argument list) */ /****************************************************************************/ static void @@ -583,9 +583,10 @@ PGSharedMemoryCreate(Size size, bool makePrivate, int port, /* * PGSharedMemoryReAttach * - * Re-attach to an already existing shared memory segment. In the non - * EXEC_BACKEND case this is not used, because postmaster children inherit - * the shared memory segment attachment via fork(). + * This is called during startup of a postmaster child process to re-attach to + * an already existing shared memory segment. This is needed only in the + * EXEC_BACKEND case; otherwise postmaster children inherit the shared memory + * segment attachment via fork(). * * UsedShmemSegID and UsedShmemSegAddr are implicit parameters to this * routine. The caller must have already restored them to the postmaster's @@ -619,16 +620,52 @@ PGSharedMemoryReAttach(void) UsedShmemSegAddr = hdr; /* probably redundant */ } + +/* + * PGSharedMemoryNoReAttach + * + * This is called during startup of a postmaster child process when we choose + * *not* to re-attach to the existing shared memory segment. We must clean up + * to leave things in the appropriate state. This is not used in the non + * EXEC_BACKEND case, either. + * + * The child process startup logic might or might not call PGSharedMemoryDetach + * after this; make sure that it will be a no-op if called. + * + * UsedShmemSegID and UsedShmemSegAddr are implicit parameters to this + * routine. The caller must have already restored them to the postmaster's + * values. + */ +void +PGSharedMemoryNoReAttach(void) +{ + Assert(UsedShmemSegAddr != NULL); + Assert(IsUnderPostmaster); + +#ifdef __CYGWIN__ + /* cygipc (currently) appears to not detach on exec. */ + PGSharedMemoryDetach(); +#endif + + /* For cleanliness, reset UsedShmemSegAddr to show we're not attached. */ + UsedShmemSegAddr = NULL; + /* And the same for UsedShmemSegID. */ + UsedShmemSegID = 0; +} + #endif /* EXEC_BACKEND */ /* * PGSharedMemoryDetach * * Detach from the shared memory segment, if still attached. This is not - * intended for use by the process that originally created the segment - * (it will have an on_shmem_exit callback registered to do that). Rather, - * this is for subprocesses that have inherited an attachment and want to - * get rid of it. + * intended to be called explicitly by the process that originally created the + * segment (it will have an on_shmem_exit callback registered to do that). + * Rather, this is for subprocesses that have inherited an attachment and want + * to get rid of it. + * + * UsedShmemSegID and UsedShmemSegAddr are implicit parameters to this + * routine. */ void PGSharedMemoryDetach(void) diff --git a/src/backend/port/unix_latch.c b/src/backend/port/unix_latch.c index 147e22cee4eee..90ec4f81d9e2b 100644 --- a/src/backend/port/unix_latch.c +++ b/src/backend/port/unix_latch.c @@ -460,7 +460,8 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock, result |= WL_SOCKET_WRITEABLE; } if ((wakeEvents & WL_POSTMASTER_DEATH) && - FD_ISSET(postmaster_alive_fds[POSTMASTER_FD_WATCH], &input_mask)) + FD_ISSET(postmaster_alive_fds[POSTMASTER_FD_WATCH], + &input_mask)) { /* * According to the select(2) man page on Linux, select(2) may @@ -479,17 +480,22 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock, #endif /* HAVE_POLL */ /* If we're not done, update cur_timeout for next iteration */ - if (result == 0 && cur_timeout >= 0) + if (result == 0 && (wakeEvents & WL_TIMEOUT)) { INSTR_TIME_SET_CURRENT(cur_time); INSTR_TIME_SUBTRACT(cur_time, start_time); cur_timeout = timeout - (long) INSTR_TIME_GET_MILLISEC(cur_time); - if (cur_timeout < 0) - cur_timeout = 0; - + if (cur_timeout <= 0) + { + /* Timeout has expired, no need to continue looping */ + result |= WL_TIMEOUT; + } #ifndef HAVE_POLL - tv.tv_sec = cur_timeout / 1000L; - tv.tv_usec = (cur_timeout % 1000L) * 1000L; + else + { + tv.tv_sec = cur_timeout / 1000L; + tv.tv_usec = (cur_timeout % 1000L) * 1000L; + } #endif } } while (result == 0); diff --git a/src/backend/port/win32_latch.c b/src/backend/port/win32_latch.c index ee9526245fd48..0e3aaeec69eae 100644 --- a/src/backend/port/win32_latch.c +++ b/src/backend/port/win32_latch.c @@ -265,13 +265,16 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock, elog(ERROR, "unexpected return code from WaitForMultipleObjects(): %lu", rc); /* If we're not done, update cur_timeout for next iteration */ - if (result == 0 && cur_timeout != INFINITE) + if (result == 0 && (wakeEvents & WL_TIMEOUT)) { INSTR_TIME_SET_CURRENT(cur_time); INSTR_TIME_SUBTRACT(cur_time, start_time); cur_timeout = timeout - (long) INSTR_TIME_GET_MILLISEC(cur_time); - if (cur_timeout < 0) - cur_timeout = 0; + if (cur_timeout <= 0) + { + /* Timeout has expired, no need to continue looping */ + result |= WL_TIMEOUT; + } } } while (result == 0); diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c index db676278a69ab..110bdcc703dce 100644 --- a/src/backend/port/win32_shmem.c +++ b/src/backend/port/win32_shmem.c @@ -17,7 +17,7 @@ #include "storage/ipc.h" #include "storage/pg_shmem.h" -HANDLE UsedShmemSegID = 0; +HANDLE UsedShmemSegID = INVALID_HANDLE_VALUE; void *UsedShmemSegAddr = NULL; static Size UsedShmemSegSize = 0; @@ -83,7 +83,6 @@ GetSharedMemName(void) * we only care about shmem segments that are associated with the intended * DataDir. This is an important consideration since accidental matches of * shmem segment IDs are reasonably common. - * */ bool PGSharedMemoryIsInUse(unsigned long id1, unsigned long id2) @@ -115,7 +114,6 @@ PGSharedMemoryIsInUse(unsigned long id1, unsigned long id2) * or recycle any existing segment. On win32, we always create a new segment, * since there is no need for recycling (segments go away automatically * when the last backend exits) - * */ PGShmemHeader * PGSharedMemoryCreate(Size size, bool makePrivate, int port, @@ -218,9 +216,6 @@ PGSharedMemoryCreate(Size size, bool makePrivate, int port, elog(LOG, "could not close handle to shared memory: error code %lu", GetLastError()); - /* Register on-exit routine to delete the new segment */ - on_shmem_exit(pgwin32_SharedMemoryDelete, PointerGetDatum(hmap2)); - /* * Get a pointer to the new shared memory segment. Map the whole segment * at once, and let the system decide on the initial address. @@ -254,6 +249,9 @@ PGSharedMemoryCreate(Size size, bool makePrivate, int port, UsedShmemSegSize = size; UsedShmemSegID = hmap2; + /* Register on-exit routine to delete the new segment */ + on_shmem_exit(pgwin32_SharedMemoryDelete, PointerGetDatum(hmap2)); + *shim = hdr; return hdr; } @@ -261,8 +259,9 @@ PGSharedMemoryCreate(Size size, bool makePrivate, int port, /* * PGSharedMemoryReAttach * - * Re-attach to an already existing shared memory segment. Use the - * handle inherited from the postmaster. + * This is called during startup of a postmaster child process to re-attach to + * an already existing shared memory segment, using the handle inherited from + * the postmaster. * * UsedShmemSegID and UsedShmemSegAddr are implicit parameters to this * routine. The caller must have already restored them to the postmaster's @@ -298,37 +297,88 @@ PGSharedMemoryReAttach(void) UsedShmemSegAddr = hdr; /* probably redundant */ } +/* + * PGSharedMemoryNoReAttach + * + * This is called during startup of a postmaster child process when we choose + * *not* to re-attach to the existing shared memory segment. We must clean up + * to leave things in the appropriate state. + * + * The child process startup logic might or might not call PGSharedMemoryDetach + * after this; make sure that it will be a no-op if called. + * + * UsedShmemSegID and UsedShmemSegAddr are implicit parameters to this + * routine. The caller must have already restored them to the postmaster's + * values. + */ +void +PGSharedMemoryNoReAttach(void) +{ + Assert(UsedShmemSegAddr != NULL); + Assert(IsUnderPostmaster); + + /* + * Under Windows we will not have mapped the segment, so we don't need to + * un-map it. Just reset UsedShmemSegAddr to show we're not attached. + */ + UsedShmemSegAddr = NULL; + + /* + * We *must* close the inherited shmem segment handle, else Windows will + * consider the existence of this process to mean it can't release the + * shmem segment yet. We can now use PGSharedMemoryDetach to do that. + */ + PGSharedMemoryDetach(); +} + /* * PGSharedMemoryDetach * * Detach from the shared memory segment, if still attached. This is not - * intended for use by the process that originally created the segment. Rather, - * this is for subprocesses that have inherited an attachment and want to - * get rid of it. + * intended to be called explicitly by the process that originally created the + * segment (it will have an on_shmem_exit callback registered to do that). + * Rather, this is for subprocesses that have inherited an attachment and want + * to get rid of it. + * + * UsedShmemSegID and UsedShmemSegAddr are implicit parameters to this + * routine. */ void PGSharedMemoryDetach(void) { + /* Unmap the view, if it's mapped */ if (UsedShmemSegAddr != NULL) { if (!UnmapViewOfFile(UsedShmemSegAddr)) - elog(LOG, "could not unmap view of shared memory: error code %lu", GetLastError()); + elog(LOG, "could not unmap view of shared memory: error code %lu", + GetLastError()); UsedShmemSegAddr = NULL; } + + /* And close the shmem handle, if we have one */ + if (UsedShmemSegID != INVALID_HANDLE_VALUE) + { + if (!CloseHandle(UsedShmemSegID)) + elog(LOG, "could not close handle to shared memory: error code %lu", + GetLastError()); + + UsedShmemSegID = INVALID_HANDLE_VALUE; + } } /* - * pgwin32_SharedMemoryDelete(status, shmId) deletes a shared memory segment - * (called as an on_shmem_exit callback, hence funny argument list) + * pgwin32_SharedMemoryDelete + * + * Detach from and delete the shared memory segment + * (called as an on_shmem_exit callback, hence funny argument list) */ static void pgwin32_SharedMemoryDelete(int status, Datum shmId) { + Assert(DatumGetPointer(shmId) == UsedShmemSegID); PGSharedMemoryDetach(); - if (!CloseHandle(DatumGetPointer(shmId))) - elog(LOG, "could not close handle to shared memory: error code %lu", GetLastError()); } /* diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c index 68c9505809eae..220e599cca287 100644 --- a/src/backend/postmaster/bgworker.c +++ b/src/backend/postmaster/bgworker.c @@ -828,7 +828,7 @@ RegisterDynamicBackgroundWorker(BackgroundWorker *worker, /* * We can't register dynamic background workers from the postmaster. If * this is a standalone backend, we're the only process and can't start - * any more. In a multi-process environement, it might be theoretically + * any more. In a multi-process environment, it might be theoretically * possible, but we don't currently support it due to locking * considerations; see comments on the BackgroundWorkerSlot data * structure. diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index e9fbc381cc97a..ab018c474140a 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -2478,8 +2478,8 @@ pgstat_fetch_global(void) static PgBackendStatus *BackendStatusArray = NULL; static PgBackendStatus *MyBEEntry = NULL; -static char *BackendClientHostnameBuffer = NULL; static char *BackendAppnameBuffer = NULL; +static char *BackendClientHostnameBuffer = NULL; static char *BackendActivityBuffer = NULL; static Size BackendActivityBufferSize = 0; #ifdef USE_SSL @@ -2495,13 +2495,22 @@ BackendStatusShmemSize(void) { Size size; + /* BackendStatusArray: */ size = mul_size(sizeof(PgBackendStatus), MaxBackends); + /* BackendAppnameBuffer: */ + size = add_size(size, + mul_size(NAMEDATALEN, MaxBackends)); + /* BackendClientHostnameBuffer: */ size = add_size(size, mul_size(NAMEDATALEN, MaxBackends)); + /* BackendActivityBuffer: */ size = add_size(size, mul_size(pgstat_track_activity_query_size, MaxBackends)); +#ifdef USE_SSL + /* BackendSslStatusBuffer: */ size = add_size(size, - mul_size(NAMEDATALEN, MaxBackends)); + mul_size(sizeof(PgBackendSSLStatus), MaxBackends)); +#endif return size; } @@ -2566,26 +2575,6 @@ CreateSharedBackendStatus(void) } } -#ifdef USE_SSL - /* Create or attach to the shared SSL status buffer */ - size = mul_size(sizeof(PgBackendSSLStatus), MaxBackends); - BackendSslStatusBuffer = (PgBackendSSLStatus *) - ShmemInitStruct("Backend SSL Status Buffer", size, &found); - - if (!found) - { - MemSet(BackendSslStatusBuffer, 0, size); - - /* Initialize st_sslstatus pointers. */ - buffer = (char *) BackendSslStatusBuffer; - for (i = 0; i < MaxBackends; i++) - { - BackendStatusArray[i].st_sslstatus = (PgBackendSSLStatus *) buffer; - buffer += sizeof(PgBackendSSLStatus); - } - } -#endif - /* Create or attach to the shared activity buffer */ BackendActivityBufferSize = mul_size(pgstat_track_activity_query_size, MaxBackends); @@ -2606,6 +2595,28 @@ CreateSharedBackendStatus(void) buffer += pgstat_track_activity_query_size; } } + +#ifdef USE_SSL + /* Create or attach to the shared SSL status buffer */ + size = mul_size(sizeof(PgBackendSSLStatus), MaxBackends); + BackendSslStatusBuffer = (PgBackendSSLStatus *) + ShmemInitStruct("Backend SSL Status Buffer", size, &found); + + if (!found) + { + PgBackendSSLStatus *ptr; + + MemSet(BackendSslStatusBuffer, 0, size); + + /* Initialize st_sslstatus pointers. */ + ptr = BackendSslStatusBuffer; + for (i = 0; i < MaxBackends; i++) + { + BackendStatusArray[i].st_sslstatus = ptr; + ptr++; + } + } +#endif } @@ -2932,11 +2943,11 @@ pgstat_read_current_status(void) volatile PgBackendStatus *beentry; LocalPgBackendStatus *localtable; LocalPgBackendStatus *localentry; + char *localappname, + *localactivity; #ifdef USE_SSL PgBackendSSLStatus *localsslstatus; #endif - char *localappname, - *localactivity; int i; Assert(!pgStatRunningInCollector); @@ -2951,15 +2962,15 @@ pgstat_read_current_status(void) localappname = (char *) MemoryContextAlloc(pgStatLocalContext, NAMEDATALEN * MaxBackends); + localactivity = (char *) + MemoryContextAlloc(pgStatLocalContext, + pgstat_track_activity_query_size * MaxBackends); #ifdef USE_SSL localsslstatus = (PgBackendSSLStatus *) MemoryContextAlloc(pgStatLocalContext, sizeof(PgBackendSSLStatus) * MaxBackends); #endif - localactivity = (char *) - MemoryContextAlloc(pgStatLocalContext, - pgstat_track_activity_query_size * MaxBackends); localNumBackends = 0; beentry = BackendStatusArray; @@ -3024,7 +3035,7 @@ pgstat_read_current_status(void) localappname += NAMEDATALEN; localactivity += pgstat_track_activity_query_size; #ifdef USE_SSL - localsslstatus += sizeof(PgBackendSSLStatus); + localsslstatus++; #endif localNumBackends++; } diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index df8037b498d48..90c2f4a5e3286 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -155,8 +155,7 @@ * they will never become live backends. dead_end children are not assigned a * PMChildSlot. * - * Background workers that request shared memory access during registration are - * in this list, too. + * Background workers are in this list, too. */ typedef struct bkend { @@ -249,6 +248,17 @@ static pid_t StartupPID = 0, PgStatPID = 0, SysLoggerPID = 0; +/* Startup process's status */ +typedef enum +{ + STARTUP_NOT_RUNNING, + STARTUP_RUNNING, + STARTUP_SIGNALED, /* we sent it a SIGQUIT or SIGKILL */ + STARTUP_CRASHED +} StartupStatusEnum; + +static StartupStatusEnum StartupStatus = STARTUP_NOT_RUNNING; + /* Startup/shutdown state */ #define NoShutdown 0 #define SmartShutdown 1 @@ -258,7 +268,6 @@ static pid_t StartupPID = 0, static int Shutdown = NoShutdown; static bool FatalError = false; /* T if recovering from backend crash */ -static bool RecoveryError = false; /* T if WAL recovery failed */ /* * We use a simple state machine to control startup, shutdown, and @@ -301,8 +310,6 @@ static bool RecoveryError = false; /* T if WAL recovery failed */ * states, nor in PM_SHUTDOWN states (because we don't enter those states * when trying to recover from a crash). It can be true in PM_STARTUP state, * because we don't clear it until we've successfully started WAL redo. - * Similarly, RecoveryError means that we have crashed during recovery, and - * should not try to restart. */ typedef enum { @@ -362,6 +369,7 @@ static DNSServiceRef bonjour_sdref = NULL; /* * postmaster.c - function prototypes */ +static void CloseServerPorts(int status, Datum arg); static void unlink_external_pid_file(int status, Datum arg); static void getInstallationPaths(const char *argv0); static void checkDataDir(void); @@ -395,13 +403,11 @@ static long PostmasterRandom(void); static void RandomSalt(char *md5Salt); static void signal_child(pid_t pid, int signal); static bool SignalSomeChildren(int signal, int targets); -static bool SignalUnconnectedWorkers(int signal); static void TerminateChildren(int signal); #define SignalChildren(sig) SignalSomeChildren(sig, BACKEND_TYPE_ALL) static int CountChildren(int target); -static int CountUnconnectedWorkers(void); static void maybe_start_bgworker(void); static bool CreateOptsFile(int argc, char *argv[], char *fullprogname); static pid_t StartChildProcess(AuxProcType type); @@ -892,6 +898,11 @@ PostmasterMain(int argc, char *argv[]) * interlock (thanks to whoever decided to put socket files in /tmp :-(). * For the same reason, it's best to grab the TCP socket(s) before the * Unix socket(s). + * + * Also note that this internally sets up the on_proc_exit function that + * is responsible for removing both data directory and socket lockfiles; + * so it must happen before opening sockets so that at exit, the socket + * lockfiles go away after CloseServerPorts runs. */ CreateDataDirLockFile(true); @@ -916,10 +927,15 @@ PostmasterMain(int argc, char *argv[]) /* * Establish input sockets. + * + * First, mark them all closed, and set up an on_proc_exit function that's + * charged with closing the sockets again at postmaster shutdown. */ for (i = 0; i < MAXLISTEN; i++) ListenSocket[i] = PGINVALID_SOCKET; + on_proc_exit(CloseServerPorts, 0); + if (ListenAddresses) { char *rawstring; @@ -1159,6 +1175,27 @@ PostmasterMain(int argc, char *argv[]) */ RemovePgTempFiles(); + /* + * Forcibly remove the files signaling a standby promotion + * request. Otherwise, the existence of those files triggers + * a promotion too early, whether a user wants that or not. + * + * This removal of files is usually unnecessary because they + * can exist only during a few moments during a standby + * promotion. However there is a race condition: if pg_ctl promote + * is executed and creates the files during a promotion, + * the files can stay around even after the server is brought up + * to new master. Then, if new standby starts by using the backup + * taken from that master, the files can exist at the server + * startup and should be removed in order to avoid an unexpected + * promotion. + * + * Note that promotion signal files need to be removed before + * the startup process is invoked. Because, after that, they can + * be used by postmaster's SIGUSR1 signal handler. + */ + RemovePromoteSignalFiles(); + /* * If enabled, start up syslogger collection subprocess */ @@ -1246,6 +1283,7 @@ PostmasterMain(int argc, char *argv[]) */ StartupPID = StartupDataBase(); Assert(StartupPID != 0); + StartupStatus = STARTUP_RUNNING; pmState = PM_STARTUP; /* Some workers may be scheduled to start now */ @@ -1262,6 +1300,42 @@ PostmasterMain(int argc, char *argv[]) } +/* + * on_proc_exit callback to close server's listen sockets + */ +static void +CloseServerPorts(int status, Datum arg) +{ + int i; + + /* + * First, explicitly close all the socket FDs. We used to just let this + * happen implicitly at postmaster exit, but it's better to close them + * before we remove the postmaster.pid lockfile; otherwise there's a race + * condition if a new postmaster wants to re-use the TCP port number. + */ + for (i = 0; i < MAXLISTEN; i++) + { + if (ListenSocket[i] != PGINVALID_SOCKET) + { + StreamClose(ListenSocket[i]); + ListenSocket[i] = PGINVALID_SOCKET; + } + } + + /* + * Next, remove any filesystem entries for Unix sockets. To avoid race + * conditions against incoming postmasters, this must happen after closing + * the sockets and before removing lock files. + */ + RemoveSocketFiles(); + + /* + * We don't do anything about socket lock files here; those will be + * removed in a later on_proc_exit callback. + */ +} + /* * on_proc_exit callback to delete external_pid_file */ @@ -1527,10 +1601,10 @@ ServerLoop(void) { fd_set readmask; int nSockets; - time_t now, + time_t last_lockfile_recheck_time, last_touch_time; - last_touch_time = time(NULL); + last_lockfile_recheck_time = last_touch_time = time(NULL); nSockets = initMasks(&readmask); @@ -1538,6 +1612,7 @@ ServerLoop(void) { fd_set rmask; int selres; + time_t now; /* * Wait for a connection request to arrive. @@ -1666,7 +1741,7 @@ ServerLoop(void) /* If we have lost the archiver, try to start a new one. */ if (PgArchPID == 0 && PgArchStartupAllowed()) - PgArchPID = pgarch_start(); + PgArchPID = pgarch_start(); /* If we need to signal the autovacuum launcher, do so now */ if (avlauncher_needs_signal) @@ -1680,19 +1755,6 @@ ServerLoop(void) if (StartWorkerNeeded || HaveCrashedWorker) maybe_start_bgworker(); - /* - * Touch Unix socket and lock files every 58 minutes, to ensure that - * they are not removed by overzealous /tmp-cleaning tasks. We assume - * no one runs cleaners with cutoff times of less than an hour ... - */ - now = time(NULL); - if (now - last_touch_time >= 58 * SECS_PER_MINUTE) - { - TouchSocketFiles(); - TouchSocketLockFiles(); - last_touch_time = now; - } - #ifdef HAVE_PTHREAD_IS_THREADED_NP /* @@ -1702,6 +1764,16 @@ ServerLoop(void) Assert(pthread_is_threaded_np() == 0); #endif + /* + * Lastly, check to see if it's time to do some things that we don't + * want to do every single time through the loop, because they're a + * bit expensive. Note that there's up to a minute of slop in when + * these tasks will be performed, since DetermineSleepTime() will let + * us sleep at most that long; except for SIGKILL timeout which has + * special-case logic there. + */ + now = time(NULL); + /* * If we already sent SIGQUIT to children and they are slow to shut * down, it's time to send them SIGKILL. This doesn't happen @@ -1719,6 +1791,39 @@ ServerLoop(void) /* reset flag so we don't SIGKILL again */ AbortStartTime = 0; } + + /* + * Once a minute, verify that postmaster.pid hasn't been removed or + * overwritten. If it has, we force a shutdown. This avoids having + * postmasters and child processes hanging around after their database + * is gone, and maybe causing problems if a new database cluster is + * created in the same place. It also provides some protection + * against a DBA foolishly removing postmaster.pid and manually + * starting a new postmaster. Data corruption is likely to ensue from + * that anyway, but we can minimize the damage by aborting ASAP. + */ + if (now - last_lockfile_recheck_time >= 1 * SECS_PER_MINUTE) + { + if (!RecheckDataDirLockFile()) + { + ereport(LOG, + (errmsg("performing immediate shutdown because data directory lock file is invalid"))); + kill(MyProcPid, SIGQUIT); + } + last_lockfile_recheck_time = now; + } + + /* + * Touch Unix socket and lock files every 58 minutes, to ensure that + * they are not removed by overzealous /tmp-cleaning tasks. We assume + * no one runs cleaners with cutoff times of less than an hour ... + */ + if (now - last_touch_time >= 58 * SECS_PER_MINUTE) + { + TouchSocketFiles(); + TouchSocketLockFiles(); + last_touch_time = now; + } } } @@ -2358,7 +2463,6 @@ SIGHUP_handler(SIGNAL_ARGS) (errmsg("received SIGHUP, reloading configuration files"))); ProcessConfigFile(PGC_SIGHUP); SignalChildren(SIGHUP); - SignalUnconnectedWorkers(SIGHUP); if (StartupPID != 0) signal_child(StartupPID, SIGHUP); if (BgWriterPID != 0) @@ -2435,7 +2539,6 @@ pmdie(SIGNAL_ARGS) /* and bgworkers too; does this need tweaking? */ SignalSomeChildren(SIGTERM, BACKEND_TYPE_AUTOVAC | BACKEND_TYPE_BGWORKER); - SignalUnconnectedWorkers(SIGTERM); /* and the autovac launcher too */ if (AutoVacPID != 0) signal_child(AutoVacPID, SIGTERM); @@ -2487,11 +2590,11 @@ pmdie(SIGNAL_ARGS) signal_child(BgWriterPID, SIGTERM); if (WalReceiverPID != 0) signal_child(WalReceiverPID, SIGTERM); - SignalUnconnectedWorkers(SIGTERM); if (pmState == PM_RECOVERY) { + SignalSomeChildren(SIGTERM, BACKEND_TYPE_BGWORKER); /* - * Only startup, bgwriter, walreceiver, unconnected bgworkers, + * Only startup, bgwriter, walreceiver, possibly bgworkers, * and/or checkpointer should be active in this state; we just * signaled the first four, and we don't want to kill * checkpointer yet. @@ -2591,6 +2694,7 @@ reaper(SIGNAL_ARGS) if (Shutdown > NoShutdown && (EXIT_STATUS_0(exitstatus) || EXIT_STATUS_1(exitstatus))) { + StartupStatus = STARTUP_NOT_RUNNING; pmState = PM_WAIT_BACKENDS; /* PostmasterStateMachine logic does the rest */ continue; @@ -2600,6 +2704,7 @@ reaper(SIGNAL_ARGS) { ereport(LOG, (errmsg("shutdown at recovery target"))); + StartupStatus = STARTUP_NOT_RUNNING; Shutdown = SmartShutdown; TerminateChildren(SIGTERM); pmState = PM_WAIT_BACKENDS; @@ -2624,16 +2729,18 @@ reaper(SIGNAL_ARGS) /* * After PM_STARTUP, any unexpected exit (including FATAL exit) of * the startup process is catastrophic, so kill other children, - * and set RecoveryError so we don't try to reinitialize after - * they're gone. Exception: if FatalError is already set, that - * implies we previously sent the startup process a SIGQUIT, so + * and set StartupStatus so we don't try to reinitialize after + * they're gone. Exception: if StartupStatus is STARTUP_SIGNALED, + * then we previously sent the startup process a SIGQUIT; so * that's probably the reason it died, and we do want to try to * restart in that case. */ if (!EXIT_STATUS_0(exitstatus)) { - if (!FatalError) - RecoveryError = true; + if (StartupStatus == STARTUP_SIGNALED) + StartupStatus = STARTUP_NOT_RUNNING; + else + StartupStatus = STARTUP_CRASHED; HandleChildCrash(pid, exitstatus, _("startup process")); continue; @@ -2642,6 +2749,7 @@ reaper(SIGNAL_ARGS) /* * Startup succeeded, commence normal operations */ + StartupStatus = STARTUP_NOT_RUNNING; FatalError = false; Assert(AbortStartTime == 0); ReachedNormalRunning = true; @@ -2938,31 +3046,27 @@ CleanupBackgroundWorker(int pid, } /* Get it out of the BackendList and clear out remaining data */ - if (rw->rw_backend) - { - Assert(rw->rw_worker.bgw_flags & BGWORKER_BACKEND_DATABASE_CONNECTION); - dlist_delete(&rw->rw_backend->elem); + dlist_delete(&rw->rw_backend->elem); #ifdef EXEC_BACKEND - ShmemBackendArrayRemove(rw->rw_backend); + ShmemBackendArrayRemove(rw->rw_backend); #endif - /* - * It's possible that this background worker started some OTHER - * background worker and asked to be notified when that worker - * started or stopped. If so, cancel any notifications destined - * for the now-dead backend. - */ - if (rw->rw_backend->bgworker_notify) - BackgroundWorkerStopNotifications(rw->rw_pid); - free(rw->rw_backend); - rw->rw_backend = NULL; - } + /* + * It's possible that this background worker started some OTHER + * background worker and asked to be notified when that worker + * started or stopped. If so, cancel any notifications destined + * for the now-dead backend. + */ + if (rw->rw_backend->bgworker_notify) + BackgroundWorkerStopNotifications(rw->rw_pid); + free(rw->rw_backend); + rw->rw_backend = NULL; rw->rw_pid = 0; rw->rw_child_slot = 0; ReportBackgroundWorkerPID(rw); /* report child death */ LogChildExit(EXIT_STATUS_0(exitstatus) ? DEBUG1 : LOG, - namebuf, pid, exitstatus); + namebuf, pid, exitstatus); return true; } @@ -3099,15 +3203,12 @@ HandleChildCrash(int pid, int exitstatus, const char *procname) * Found entry for freshly-dead worker, so remove it. */ (void) ReleasePostmasterChildSlot(rw->rw_child_slot); - if (rw->rw_backend) - { - dlist_delete(&rw->rw_backend->elem); + dlist_delete(&rw->rw_backend->elem); #ifdef EXEC_BACKEND - ShmemBackendArrayRemove(rw->rw_backend); + ShmemBackendArrayRemove(rw->rw_backend); #endif - free(rw->rw_backend); - rw->rw_backend = NULL; - } + free(rw->rw_backend); + rw->rw_backend = NULL; rw->rw_pid = 0; rw->rw_child_slot = 0; /* don't reset crashed_at */ @@ -3190,7 +3291,10 @@ HandleChildCrash(int pid, int exitstatus, const char *procname) /* Take care of the startup process too */ if (pid == StartupPID) + { StartupPID = 0; + StartupStatus = STARTUP_CRASHED; + } else if (StartupPID != 0 && take_action) { ereport(DEBUG2, @@ -3198,6 +3302,7 @@ HandleChildCrash(int pid, int exitstatus, const char *procname) (SendStop ? "SIGSTOP" : "SIGQUIT"), (int) StartupPID))); signal_child(StartupPID, (SendStop ? SIGSTOP : SIGQUIT)); + StartupStatus = STARTUP_SIGNALED; } /* Take care of the bgwriter too */ @@ -3440,7 +3545,6 @@ PostmasterStateMachine(void) * process. */ if (CountChildren(BACKEND_TYPE_NORMAL | BACKEND_TYPE_WORKER) == 0 && - CountUnconnectedWorkers() == 0 && StartupPID == 0 && WalReceiverPID == 0 && BgWriterPID == 0 && @@ -3589,13 +3693,14 @@ PostmasterStateMachine(void) } /* - * If recovery failed, or the user does not want an automatic restart - * after backend crashes, wait for all non-syslogger children to exit, and - * then exit postmaster. We don't try to reinitialize when recovery fails, - * because more than likely it will just fail again and we will keep - * trying forever. + * If the startup process failed, or the user does not want an automatic + * restart after backend crashes, wait for all non-syslogger children to + * exit, and then exit postmaster. We don't try to reinitialize when the + * startup process fails, because more than likely it will just fail again + * and we will keep trying forever. */ - if (pmState == PM_NO_CHILDREN && (RecoveryError || !restart_after_crash)) + if (pmState == PM_NO_CHILDREN && + (StartupStatus == STARTUP_CRASHED || !restart_after_crash)) ExitPostmaster(1); /* @@ -3615,6 +3720,7 @@ PostmasterStateMachine(void) StartupPID = StartupDataBase(); Assert(StartupPID != 0); + StartupStatus = STARTUP_RUNNING; pmState = PM_STARTUP; /* crash recovery started, reset SIGKILL flag */ AbortStartTime = 0; @@ -3660,39 +3766,6 @@ signal_child(pid_t pid, int signal) #endif } -/* - * Send a signal to bgworkers that did not request backend connections - * - * The reason this is interesting is that workers that did request connections - * are considered by SignalChildren; this function complements that one. - */ -static bool -SignalUnconnectedWorkers(int signal) -{ - slist_iter iter; - bool signaled = false; - - slist_foreach(iter, &BackgroundWorkerList) - { - RegisteredBgWorker *rw; - - rw = slist_container(RegisteredBgWorker, rw_lnode, iter.cur); - - if (rw->rw_pid == 0) - continue; - /* ignore connected workers */ - if (rw->rw_backend != NULL) - continue; - - ereport(DEBUG4, - (errmsg_internal("sending signal %d to process %d", - signal, (int) rw->rw_pid))); - signal_child(rw->rw_pid, signal); - signaled = true; - } - return signaled; -} - /* * Send a signal to the targeted children (but NOT special children; * dead_end children are never signaled, either). @@ -3746,7 +3819,11 @@ TerminateChildren(int signal) { SignalChildren(signal); if (StartupPID != 0) + { signal_child(StartupPID, signal); + if (signal == SIGQUIT || signal == SIGKILL) + StartupStatus = STARTUP_SIGNALED; + } if (BgWriterPID != 0) signal_child(BgWriterPID, signal); if (CheckpointerPID != 0) @@ -3761,7 +3838,6 @@ TerminateChildren(int signal) signal_child(PgArchPID, signal); if (PgStatPID != 0) signal_child(PgStatPID, signal); - SignalUnconnectedWorkers(signal); } /* @@ -4552,7 +4628,8 @@ SubPostmasterMain(int argc, char *argv[]) /* * If appropriate, physically re-attach to shared memory segment. We want * to do this before going any further to ensure that we can attach at the - * same address the postmaster used. + * same address the postmaster used. On the other hand, if we choose not + * to re-attach, we may have other cleanup to do. */ if (strcmp(argv[1], "--forkbackend") == 0 || strcmp(argv[1], "--forkavlauncher") == 0 || @@ -4560,6 +4637,8 @@ SubPostmasterMain(int argc, char *argv[]) strcmp(argv[1], "--forkboot") == 0 || strncmp(argv[1], "--forkbgworker=", 15) == 0) PGSharedMemoryReAttach(); + else + PGSharedMemoryNoReAttach(); /* autovacuum needs this set before calling InitProcess */ if (strcmp(argv[1], "--forkavlauncher") == 0) @@ -5022,33 +5101,6 @@ PostmasterRandom(void) return random(); } -/* - * Count up number of worker processes that did not request backend connections - * See SignalUnconnectedWorkers for why this is interesting. - */ -static int -CountUnconnectedWorkers(void) -{ - slist_iter iter; - int cnt = 0; - - slist_foreach(iter, &BackgroundWorkerList) - { - RegisteredBgWorker *rw; - - rw = slist_container(RegisteredBgWorker, rw_lnode, iter.cur); - - if (rw->rw_pid == 0) - continue; - /* ignore connected workers */ - if (rw->rw_backend != NULL) - continue; - - cnt++; - } - return cnt; -} - /* * Count up number of child processes of specified types (dead_end chidren * are always excluded). @@ -5449,8 +5501,7 @@ do_start_bgworker(RegisteredBgWorker *rw) #endif default: rw->rw_pid = worker_pid; - if (rw->rw_backend) - rw->rw_backend->pid = rw->rw_pid; + rw->rw_backend->pid = rw->rw_pid; ReportBackgroundWorkerPID(rw); } } @@ -5613,30 +5664,19 @@ maybe_start_bgworker(void) rw->rw_crashed_at = 0; /* - * If necessary, allocate and assign the Backend element. Note we + * Allocate and assign the Backend element. Note we * must do this before forking, so that we can handle out of * memory properly. - * - * If not connected, we don't need a Backend element, but we still - * need a PMChildSlot. */ - if (rw->rw_worker.bgw_flags & BGWORKER_BACKEND_DATABASE_CONNECTION) - { - if (!assign_backendlist_entry(rw)) - return; - } - else - rw->rw_child_slot = MyPMChildSlot = AssignPostmasterChildSlot(); + if (!assign_backendlist_entry(rw)) + return; do_start_bgworker(rw); /* sets rw->rw_pid */ - if (rw->rw_backend) - { - dlist_push_head(&BackendList, &rw->rw_backend->elem); + dlist_push_head(&BackendList, &rw->rw_backend->elem); #ifdef EXEC_BACKEND - ShmemBackendArrayAdd(rw->rw_backend); + ShmemBackendArrayAdd(rw->rw_backend); #endif - } /* * Have ServerLoop call us again. Note that there might not diff --git a/src/backend/regex/README b/src/backend/regex/README index 29521c6636fa6..5c24d3dfe9de0 100644 --- a/src/backend/regex/README +++ b/src/backend/regex/README @@ -76,11 +76,10 @@ relates to what you'll see in the code. Here's what really happens: of states approximately proportional to the length of the regexp. * The NFA is then optimized into a "compact NFA" representation, which is -basically the same data but without fields that are not going to be needed -at runtime. We do a little bit of cleanup too, such as removing -unreachable states that might be created as a result of the rather naive -transformation done by initial parsing. The cNFA representation is what -is passed from regcomp to regexec. +basically the same idea but without fields that are not going to be needed +at runtime. It is simplified too: the compact format only allows "plain" +and "LACON" arc types. The cNFA representation is what is passed from +regcomp to regexec. * Unlike traditional NFA-based regex engines, we do not execute directly from the NFA representation, as that would require backtracking and so be @@ -139,12 +138,13 @@ a possible division of the input string that allows its two child nodes to each match their part of the string (and although this specific case can only succeed when the division is at the middle, the code does not know that, nor would it be true in general). However, we can first run the DFA -and quickly reject any input that doesn't contain two a's and some number -of b's and c's. If the DFA doesn't match, there is no need to recurse to -the two child nodes for each possible string division point. In many -cases, this prefiltering makes the search run much faster than a pure NFA -engine could do. It is this behavior that justifies using the phrase -"hybrid DFA/NFA engine" to describe Spencer's library. +and quickly reject any input that doesn't start with an "a" and contain +one more "a" plus some number of b's and c's. If the DFA doesn't match, +there is no need to recurse to the two child nodes for each possible +string division point. In many cases, this prefiltering makes the search +run much faster than a pure NFA engine could do. It is this behavior that +justifies using the phrase "hybrid DFA/NFA engine" to describe Spencer's +library. Colors and colormapping @@ -296,3 +296,76 @@ character classes are somehow processed "symbolically" without making a full expansion of their contents at parse time. This would mean that we'd have to be ready to call iswalpha() at runtime, but if that only happens for high-code-value characters, it shouldn't be a big performance hit. + + +Detailed semantics of an NFA +---------------------------- + +When trying to read dumped-out NFAs, it's helpful to know these facts: + +State 0 (additionally marked with "@" in dumpnfa's output) is always the +goal state, and state 1 (additionally marked with ">") is the start state. +(The code refers to these as the post state and pre state respectively.) + +The possible arc types are: + + PLAIN arcs, which specify matching of any character of a given "color" + (see above). These are dumped as "[color_number]->to_state". + + EMPTY arcs, which specify a no-op transition to another state. These + are dumped as "->to_state". + + AHEAD constraints, which represent a "next character must be of this + color" constraint. AHEAD differs from a PLAIN arc in that the input + character is not consumed when crossing the arc. These are dumped as + ">color_number>->to_state". + + BEHIND constraints, which represent a "previous character must be of + this color" constraint, which likewise consumes no input. These are + dumped as "to_state". + + '^' arcs, which specify a beginning-of-input constraint. These are + dumped as "^0->to_state" or "^1->to_state" for beginning-of-string and + beginning-of-line constraints respectively. + + '$' arcs, which specify an end-of-input constraint. These are dumped + as "$0->to_state" or "$1->to_state" for end-of-string and end-of-line + constraints respectively. + + LACON constraints, which represent "(?=re)" and "(?!re)" constraints, + i.e. the input starting at this point must match (or not match) a + given sub-RE, but the matching input is not consumed. These are + dumped as ":subtree_number:->to_state". + +If you see anything else (especially any question marks) in the display of +an arc, it's dumpnfa() trying to tell you that there's something fishy +about the arc; see the source code. + +The regex executor can only handle PLAIN and LACON transitions. The regex +optimize() function is responsible for transforming the parser's output +to get rid of all the other arc types. In particular, ^ and $ arcs that +are not dropped as impossible will always end up adjacent to the pre or +post state respectively, and then will be converted into PLAIN arcs that +mention the special "colors" for BOS, BOL, EOS, or EOL. + +To decide whether a thus-transformed NFA matches a given substring of the +input string, the executor essentially follows these rules: +1. Start the NFA "looking at" the character *before* the given substring, +or if the substring is at the start of the input, prepend an imaginary BOS +character instead. +2. Run the NFA until it has consumed the character *after* the given +substring, or an imaginary following EOS character if the substring is at +the end of the input. +3. If the NFA is (or can be) in the goal state at this point, it matches. + +So one can mentally execute an untransformed NFA by taking ^ and $ as +ordinary constraints that match at start and end of input; but plain +arcs out of the start state should be taken as matches for the character +before the target substring, and similarly, plain arcs leading to the +post state are matches for the character after the target substring. +This definition is necessary to support regexes that begin or end with +constraints such as \m and \M, which imply requirements on the adjacent +character if any. NFAs for simple unanchored patterns will usually have +pre-state outarcs for all possible character colors as well as BOS and +BOL, and post-state inarcs for all possible character colors as well as +EOS and EOL, so that the executor's behavior will work. diff --git a/src/backend/regex/regc_nfa.c b/src/backend/regex/regc_nfa.c index 3487734a64ea9..6f04321cd3578 100644 --- a/src/backend/regex/regc_nfa.c +++ b/src/backend/regex/regc_nfa.c @@ -52,7 +52,10 @@ newnfa(struct vars * v, nfa = (struct nfa *) MALLOC(sizeof(struct nfa)); if (nfa == NULL) + { + ERR(REG_ESPACE); return NULL; + } nfa->states = NULL; nfa->slast = NULL; @@ -60,7 +63,6 @@ newnfa(struct vars * v, nfa->nstates = 0; nfa->cm = cm; nfa->v = v; - nfa->size = 0; nfa->bos[0] = nfa->bos[1] = COLORLESS; nfa->eos[0] = nfa->eos[1] = COLORLESS; nfa->parent = parent; /* Precedes newfstate so parent is valid. */ @@ -89,57 +91,6 @@ newnfa(struct vars * v, return nfa; } -/* - * TooManyStates - checks if the max states exceeds the compile-time value - */ -static int -TooManyStates(struct nfa * nfa) -{ - struct nfa *parent = nfa->parent; - size_t sz = nfa->size; - - while (parent != NULL) - { - sz = parent->size; - parent = parent->parent; - } - if (sz > REG_MAX_STATES) - return 1; - return 0; -} - -/* - * IncrementSize - increases the tracked size of the NFA and its parents. - */ -static void -IncrementSize(struct nfa * nfa) -{ - struct nfa *parent = nfa->parent; - - nfa->size++; - while (parent != NULL) - { - parent->size++; - parent = parent->parent; - } -} - -/* - * DecrementSize - decreases the tracked size of the NFA and its parents. - */ -static void -DecrementSize(struct nfa * nfa) -{ - struct nfa *parent = nfa->parent; - - nfa->size--; - while (parent != NULL) - { - parent->size--; - parent = parent->parent; - } -} - /* * freenfa - free an entire NFA */ @@ -177,7 +128,7 @@ newstate(struct nfa * nfa) /* * This is a handy place to check for operation cancel during regex * compilation, since no code path will go very long without making a new - * state. + * state or arc. */ if (CANCEL_REQUESTED(nfa->v->re)) { @@ -185,12 +136,6 @@ newstate(struct nfa * nfa) return NULL; } - if (TooManyStates(nfa)) - { - NERR(REG_ETOOBIG); - return NULL; - } - if (nfa->free != NULL) { s = nfa->free; @@ -198,12 +143,18 @@ newstate(struct nfa * nfa) } else { + if (nfa->v->spaceused >= REG_MAX_COMPILE_SPACE) + { + NERR(REG_ETOOBIG); + return NULL; + } s = (struct state *) MALLOC(sizeof(struct state)); if (s == NULL) { NERR(REG_ESPACE); return NULL; } + nfa->v->spaceused += sizeof(struct state); s->oas.next = NULL; s->free = NULL; s->noas = 0; @@ -227,8 +178,6 @@ newstate(struct nfa * nfa) } s->prev = nfa->slast; nfa->slast = s; - /* track the current size and the parent size */ - IncrementSize(nfa); return s; } @@ -291,7 +240,6 @@ freestate(struct nfa * nfa, s->prev = NULL; s->next = nfa->free; /* don't delete it, put it on the free list */ nfa->free = s; - DecrementSize(nfa); } /* @@ -309,15 +257,20 @@ destroystate(struct nfa * nfa, { abnext = ab->next; FREE(ab); + nfa->v->spaceused -= sizeof(struct arcbatch); } s->ins = NULL; s->outs = NULL; s->next = NULL; FREE(s); + nfa->v->spaceused -= sizeof(struct state); } /* * newarc - set up a new arc within an NFA + * + * This function checks to make sure that no duplicate arcs are created. + * In general we never want duplicates. */ static void newarc(struct nfa * nfa, @@ -330,11 +283,51 @@ newarc(struct nfa * nfa, assert(from != NULL && to != NULL); - /* check for duplicates */ - for (a = from->outs; a != NULL; a = a->outchain) - if (a->to == to && a->co == co && a->type == t) - return; + /* + * This is a handy place to check for operation cancel during regex + * compilation, since no code path will go very long without making a new + * state or arc. + */ + if (CANCEL_REQUESTED(nfa->v->re)) + { + NERR(REG_CANCEL); + return; + } + + /* check for duplicate arc, using whichever chain is shorter */ + if (from->nouts <= to->nins) + { + for (a = from->outs; a != NULL; a = a->outchain) + if (a->to == to && a->co == co && a->type == t) + return; + } + else + { + for (a = to->ins; a != NULL; a = a->inchain) + if (a->from == from && a->co == co && a->type == t) + return; + } + + /* no dup, so create the arc */ + createarc(nfa, t, co, from, to); +} + +/* + * createarc - create a new arc within an NFA + * + * This function must *only* be used after verifying that there is no existing + * identical arc (same type/color/from/to). + */ +static void +createarc(struct nfa * nfa, + int t, + pcolor co, + struct state * from, + struct state * to) +{ + struct arc *a; + /* the arc is physically allocated within its from-state */ a = allocarc(nfa, from); if (NISERR()) return; @@ -346,14 +339,19 @@ newarc(struct nfa * nfa, a->from = from; /* - * Put the new arc on the beginning, not the end, of the chains. Not only - * is this easier, it has the very useful side effect that deleting the - * most-recently-added arc is the cheapest case rather than the most - * expensive one. + * Put the new arc on the beginning, not the end, of the chains; it's + * simpler here, and freearc() is the same cost either way. See also the + * logic in moveins() and its cohorts, as well as fixempties(). */ a->inchain = to->ins; + a->inchainRev = NULL; + if (to->ins) + to->ins->inchainRev = a; to->ins = a; a->outchain = from->outs; + a->outchainRev = NULL; + if (from->outs) + from->outs->outchainRev = a; from->outs = a; from->nouts++; @@ -386,12 +384,18 @@ allocarc(struct nfa * nfa, struct arcbatch *newAb; int i; + if (nfa->v->spaceused >= REG_MAX_COMPILE_SPACE) + { + NERR(REG_ETOOBIG); + return NULL; + } newAb = (struct arcbatch *) MALLOC(sizeof(struct arcbatch)); if (newAb == NULL) { NERR(REG_ESPACE); return NULL; } + nfa->v->spaceused += sizeof(struct arcbatch); newAb->next = s->oas.next; s->oas.next = newAb; @@ -419,7 +423,7 @@ freearc(struct nfa * nfa, { struct state *from = victim->from; struct state *to = victim->to; - struct arc *a; + struct arc *predecessor; assert(victim->type != 0); @@ -429,92 +433,117 @@ freearc(struct nfa * nfa, /* take it off source's out-chain */ assert(from != NULL); - assert(from->outs != NULL); - a = from->outs; - if (a == victim) /* simple case: first in chain */ + predecessor = victim->outchainRev; + if (predecessor == NULL) + { + assert(from->outs == victim); from->outs = victim->outchain; + } else { - for (; a != NULL && a->outchain != victim; a = a->outchain) - continue; - assert(a != NULL); - a->outchain = victim->outchain; + assert(predecessor->outchain == victim); + predecessor->outchain = victim->outchain; + } + if (victim->outchain != NULL) + { + assert(victim->outchain->outchainRev == victim); + victim->outchain->outchainRev = predecessor; } from->nouts--; /* take it off target's in-chain */ assert(to != NULL); - assert(to->ins != NULL); - a = to->ins; - if (a == victim) /* simple case: first in chain */ + predecessor = victim->inchainRev; + if (predecessor == NULL) + { + assert(to->ins == victim); to->ins = victim->inchain; + } else { - for (; a != NULL && a->inchain != victim; a = a->inchain) - continue; - assert(a != NULL); - a->inchain = victim->inchain; + assert(predecessor->inchain == victim); + predecessor->inchain = victim->inchain; + } + if (victim->inchain != NULL) + { + assert(victim->inchain->inchainRev == victim); + victim->inchain->inchainRev = predecessor; } to->nins--; - /* clean up and place on free list */ + /* clean up and place on from-state's free list */ victim->type = 0; victim->from = NULL; /* precautions... */ victim->to = NULL; victim->inchain = NULL; + victim->inchainRev = NULL; victim->outchain = NULL; + victim->outchainRev = NULL; victim->freechain = from->free; from->free = victim; } /* - * hasnonemptyout - Does state have a non-EMPTY out arc? + * changearctarget - flip an arc to have a different to state + * + * Caller must have verified that there is no pre-existing duplicate arc. + * + * Note that because we store arcs in their from state, we can't easily have + * a similar changearcsource function. */ -static int -hasnonemptyout(struct state * s) +static void +changearctarget(struct arc * a, struct state * newto) { - struct arc *a; + struct state *oldto = a->to; + struct arc *predecessor; - for (a = s->outs; a != NULL; a = a->outchain) + assert(oldto != newto); + + /* take it off old target's in-chain */ + assert(oldto != NULL); + predecessor = a->inchainRev; + if (predecessor == NULL) { - if (a->type != EMPTY) - return 1; + assert(oldto->ins == a); + oldto->ins = a->inchain; } - return 0; -} - -/* - * nonemptyouts - count non-EMPTY out arcs of a state - */ -static int -nonemptyouts(struct state * s) -{ - int n = 0; - struct arc *a; - - for (a = s->outs; a != NULL; a = a->outchain) + else { - if (a->type != EMPTY) - n++; + assert(predecessor->inchain == a); + predecessor->inchain = a->inchain; + } + if (a->inchain != NULL) + { + assert(a->inchain->inchainRev == a); + a->inchain->inchainRev = predecessor; } - return n; + oldto->nins--; + + a->to = newto; + + /* prepend it to new target's in-chain */ + a->inchain = newto->ins; + a->inchainRev = NULL; + if (newto->ins) + newto->ins->inchainRev = a; + newto->ins = a; + newto->nins++; } /* - * nonemptyins - count non-EMPTY in arcs of a state + * hasnonemptyout - Does state have a non-EMPTY out arc? */ static int -nonemptyins(struct state * s) +hasnonemptyout(struct state * s) { - int n = 0; struct arc *a; - for (a = s->ins; a != NULL; a = a->inchain) + for (a = s->outs; a != NULL; a = a->outchain) { if (a->type != EMPTY) - n++; + return 1; } - return n; + return 0; } /* @@ -546,106 +575,610 @@ cparc(struct nfa * nfa, newarc(nfa, oa->type, oa->co, from, to); } +/* + * sortins - sort the in arcs of a state by from/color/type + */ +static void +sortins(struct nfa * nfa, + struct state * s) +{ + struct arc **sortarray; + struct arc *a; + int n = s->nins; + int i; + + if (n <= 1) + return; /* nothing to do */ + /* make an array of arc pointers ... */ + sortarray = (struct arc **) MALLOC(n * sizeof(struct arc *)); + if (sortarray == NULL) + { + NERR(REG_ESPACE); + return; + } + i = 0; + for (a = s->ins; a != NULL; a = a->inchain) + sortarray[i++] = a; + assert(i == n); + /* ... sort the array */ + qsort(sortarray, n, sizeof(struct arc *), sortins_cmp); + /* ... and rebuild arc list in order */ + /* it seems worth special-casing first and last items to simplify loop */ + a = sortarray[0]; + s->ins = a; + a->inchain = sortarray[1]; + a->inchainRev = NULL; + for (i = 1; i < n - 1; i++) + { + a = sortarray[i]; + a->inchain = sortarray[i + 1]; + a->inchainRev = sortarray[i - 1]; + } + a = sortarray[i]; + a->inchain = NULL; + a->inchainRev = sortarray[i - 1]; + FREE(sortarray); +} + +static int +sortins_cmp(const void *a, const void *b) +{ + const struct arc *aa = *((const struct arc * const *) a); + const struct arc *bb = *((const struct arc * const *) b); + + /* we check the fields in the order they are most likely to be different */ + if (aa->from->no < bb->from->no) + return -1; + if (aa->from->no > bb->from->no) + return 1; + if (aa->co < bb->co) + return -1; + if (aa->co > bb->co) + return 1; + if (aa->type < bb->type) + return -1; + if (aa->type > bb->type) + return 1; + return 0; +} + +/* + * sortouts - sort the out arcs of a state by to/color/type + */ +static void +sortouts(struct nfa * nfa, + struct state * s) +{ + struct arc **sortarray; + struct arc *a; + int n = s->nouts; + int i; + + if (n <= 1) + return; /* nothing to do */ + /* make an array of arc pointers ... */ + sortarray = (struct arc **) MALLOC(n * sizeof(struct arc *)); + if (sortarray == NULL) + { + NERR(REG_ESPACE); + return; + } + i = 0; + for (a = s->outs; a != NULL; a = a->outchain) + sortarray[i++] = a; + assert(i == n); + /* ... sort the array */ + qsort(sortarray, n, sizeof(struct arc *), sortouts_cmp); + /* ... and rebuild arc list in order */ + /* it seems worth special-casing first and last items to simplify loop */ + a = sortarray[0]; + s->outs = a; + a->outchain = sortarray[1]; + a->outchainRev = NULL; + for (i = 1; i < n - 1; i++) + { + a = sortarray[i]; + a->outchain = sortarray[i + 1]; + a->outchainRev = sortarray[i - 1]; + } + a = sortarray[i]; + a->outchain = NULL; + a->outchainRev = sortarray[i - 1]; + FREE(sortarray); +} + +static int +sortouts_cmp(const void *a, const void *b) +{ + const struct arc *aa = *((const struct arc * const *) a); + const struct arc *bb = *((const struct arc * const *) b); + + /* we check the fields in the order they are most likely to be different */ + if (aa->to->no < bb->to->no) + return -1; + if (aa->to->no > bb->to->no) + return 1; + if (aa->co < bb->co) + return -1; + if (aa->co > bb->co) + return 1; + if (aa->type < bb->type) + return -1; + if (aa->type > bb->type) + return 1; + return 0; +} + +/* + * Common decision logic about whether to use arc-by-arc operations or + * sort/merge. If there's just a few source arcs we cannot recoup the + * cost of sorting the destination arc list, no matter how large it is. + * Otherwise, limit the number of arc-by-arc comparisons to about 1000 + * (a somewhat arbitrary choice, but the breakeven point would probably + * be machine dependent anyway). + */ +#define BULK_ARC_OP_USE_SORT(nsrcarcs, ndestarcs) \ + ((nsrcarcs) < 4 ? 0 : ((nsrcarcs) > 32 || (ndestarcs) > 32)) + /* * moveins - move all in arcs of a state to another state * * You might think this could be done better by just updating the - * existing arcs, and you would be right if it weren't for the desire + * existing arcs, and you would be right if it weren't for the need * for duplicate suppression, which makes it easier to just make new * ones to exploit the suppression built into newarc. + * + * However, if we have a whole lot of arcs to deal with, retail duplicate + * checks become too slow. In that case we proceed by sorting and merging + * the arc lists, and then we can indeed just update the arcs in-place. */ static void moveins(struct nfa * nfa, struct state * oldState, struct state * newState) { - struct arc *a; - assert(oldState != newState); - while ((a = oldState->ins) != NULL) + if (!BULK_ARC_OP_USE_SORT(oldState->nins, newState->nins)) { - cparc(nfa, a, a->from, newState); - freearc(nfa, a); + /* With not too many arcs, just do them one at a time */ + struct arc *a; + + while ((a = oldState->ins) != NULL) + { + cparc(nfa, a, a->from, newState); + freearc(nfa, a); + } + } + else + { + /* + * With many arcs, use a sort-merge approach. Note changearctarget() + * will put the arc onto the front of newState's chain, so it does not + * break our walk through the sorted part of the chain. + */ + struct arc *oa; + struct arc *na; + + /* + * Because we bypass newarc() in this code path, we'd better include a + * cancel check. + */ + if (CANCEL_REQUESTED(nfa->v->re)) + { + NERR(REG_CANCEL); + return; + } + + sortins(nfa, oldState); + sortins(nfa, newState); + if (NISERR()) + return; /* might have failed to sort */ + oa = oldState->ins; + na = newState->ins; + while (oa != NULL && na != NULL) + { + struct arc *a = oa; + + switch (sortins_cmp(&oa, &na)) + { + case -1: + /* newState does not have anything matching oa */ + oa = oa->inchain; + + /* + * Rather than doing createarc+freearc, we can just unlink + * and relink the existing arc struct. + */ + changearctarget(a, newState); + break; + case 0: + /* match, advance in both lists */ + oa = oa->inchain; + na = na->inchain; + /* ... and drop duplicate arc from oldState */ + freearc(nfa, a); + break; + case +1: + /* advance only na; oa might have a match later */ + na = na->inchain; + break; + default: + assert(NOTREACHED); + } + } + while (oa != NULL) + { + /* newState does not have anything matching oa */ + struct arc *a = oa; + + oa = oa->inchain; + changearctarget(a, newState); + } } + assert(oldState->nins == 0); assert(oldState->ins == NULL); } /* * copyins - copy in arcs of a state to another state - * - * Either all arcs, or only non-empty ones as determined by all value. */ static void copyins(struct nfa * nfa, struct state * oldState, - struct state * newState, - int all) + struct state * newState) { - struct arc *a; - assert(oldState != newState); - for (a = oldState->ins; a != NULL; a = a->inchain) + if (!BULK_ARC_OP_USE_SORT(oldState->nins, newState->nins)) { - if (all || a->type != EMPTY) + /* With not too many arcs, just do them one at a time */ + struct arc *a; + + for (a = oldState->ins; a != NULL; a = a->inchain) cparc(nfa, a, a->from, newState); } -} + else + { + /* + * With many arcs, use a sort-merge approach. Note that createarc() + * will put new arcs onto the front of newState's chain, so it does + * not break our walk through the sorted part of the chain. + */ + struct arc *oa; + struct arc *na; + + /* + * Because we bypass newarc() in this code path, we'd better include a + * cancel check. + */ + if (CANCEL_REQUESTED(nfa->v->re)) + { + NERR(REG_CANCEL); + return; + } -/* - * moveouts - move all out arcs of a state to another state - */ -static void -moveouts(struct nfa * nfa, - struct state * oldState, - struct state * newState) -{ - struct arc *a; + sortins(nfa, oldState); + sortins(nfa, newState); + if (NISERR()) + return; /* might have failed to sort */ + oa = oldState->ins; + na = newState->ins; + while (oa != NULL && na != NULL) + { + struct arc *a = oa; - assert(oldState != newState); + switch (sortins_cmp(&oa, &na)) + { + case -1: + /* newState does not have anything matching oa */ + oa = oa->inchain; + createarc(nfa, a->type, a->co, a->from, newState); + break; + case 0: + /* match, advance in both lists */ + oa = oa->inchain; + na = na->inchain; + break; + case +1: + /* advance only na; oa might have a match later */ + na = na->inchain; + break; + default: + assert(NOTREACHED); + } + } + while (oa != NULL) + { + /* newState does not have anything matching oa */ + struct arc *a = oa; - while ((a = oldState->outs) != NULL) - { - cparc(nfa, a, newState, a->to); - freearc(nfa, a); + oa = oa->inchain; + createarc(nfa, a->type, a->co, a->from, newState); + } } } /* - * copyouts - copy out arcs of a state to another state + * mergeins - merge a list of inarcs into a state * - * Either all arcs, or only non-empty ones as determined by all value. + * This is much like copyins, but the source arcs are listed in an array, + * and are not guaranteed unique. It's okay to clobber the array contents. */ static void -copyouts(struct nfa * nfa, - struct state * oldState, - struct state * newState, - int all) +mergeins(struct nfa * nfa, + struct state * s, + struct arc ** arcarray, + int arccount) { - struct arc *a; + struct arc *na; + int i; + int j; - assert(oldState != newState); + if (arccount <= 0) + return; - for (a = oldState->outs; a != NULL; a = a->outchain) + /* + * Because we bypass newarc() in this code path, we'd better include a + * cancel check. + */ + if (CANCEL_REQUESTED(nfa->v->re)) { - if (all || a->type != EMPTY) - cparc(nfa, a, newState, a->to); + NERR(REG_CANCEL); + return; } -} -/* - * cloneouts - copy out arcs of a state to another state pair, modifying type - */ -static void -cloneouts(struct nfa * nfa, - struct state * old, - struct state * from, - struct state * to, - int type) -{ - struct arc *a; + /* Sort existing inarcs as well as proposed new ones */ + sortins(nfa, s); + if (NISERR()) + return; /* might have failed to sort */ + + qsort(arcarray, arccount, sizeof(struct arc *), sortins_cmp); + + /* + * arcarray very likely includes dups, so we must eliminate them. (This + * could be folded into the next loop, but it's not worth the trouble.) + */ + j = 0; + for (i = 1; i < arccount; i++) + { + switch (sortins_cmp(&arcarray[j], &arcarray[i])) + { + case -1: + /* non-dup */ + arcarray[++j] = arcarray[i]; + break; + case 0: + /* dup */ + break; + default: + /* trouble */ + assert(NOTREACHED); + } + } + arccount = j + 1; + + /* + * Now merge into s' inchain. Note that createarc() will put new arcs + * onto the front of s's chain, so it does not break our walk through the + * sorted part of the chain. + */ + i = 0; + na = s->ins; + while (i < arccount && na != NULL) + { + struct arc *a = arcarray[i]; + + switch (sortins_cmp(&a, &na)) + { + case -1: + /* s does not have anything matching a */ + createarc(nfa, a->type, a->co, a->from, s); + i++; + break; + case 0: + /* match, advance in both lists */ + i++; + na = na->inchain; + break; + case +1: + /* advance only na; array might have a match later */ + na = na->inchain; + break; + default: + assert(NOTREACHED); + } + } + while (i < arccount) + { + /* s does not have anything matching a */ + struct arc *a = arcarray[i]; + + createarc(nfa, a->type, a->co, a->from, s); + i++; + } +} + +/* + * moveouts - move all out arcs of a state to another state + */ +static void +moveouts(struct nfa * nfa, + struct state * oldState, + struct state * newState) +{ + assert(oldState != newState); + + if (!BULK_ARC_OP_USE_SORT(oldState->nouts, newState->nouts)) + { + /* With not too many arcs, just do them one at a time */ + struct arc *a; + + while ((a = oldState->outs) != NULL) + { + cparc(nfa, a, newState, a->to); + freearc(nfa, a); + } + } + else + { + /* + * With many arcs, use a sort-merge approach. Note that createarc() + * will put new arcs onto the front of newState's chain, so it does + * not break our walk through the sorted part of the chain. + */ + struct arc *oa; + struct arc *na; + + /* + * Because we bypass newarc() in this code path, we'd better include a + * cancel check. + */ + if (CANCEL_REQUESTED(nfa->v->re)) + { + NERR(REG_CANCEL); + return; + } + + sortouts(nfa, oldState); + sortouts(nfa, newState); + if (NISERR()) + return; /* might have failed to sort */ + oa = oldState->outs; + na = newState->outs; + while (oa != NULL && na != NULL) + { + struct arc *a = oa; + + switch (sortouts_cmp(&oa, &na)) + { + case -1: + /* newState does not have anything matching oa */ + oa = oa->outchain; + createarc(nfa, a->type, a->co, newState, a->to); + freearc(nfa, a); + break; + case 0: + /* match, advance in both lists */ + oa = oa->outchain; + na = na->outchain; + /* ... and drop duplicate arc from oldState */ + freearc(nfa, a); + break; + case +1: + /* advance only na; oa might have a match later */ + na = na->outchain; + break; + default: + assert(NOTREACHED); + } + } + while (oa != NULL) + { + /* newState does not have anything matching oa */ + struct arc *a = oa; + + oa = oa->outchain; + createarc(nfa, a->type, a->co, newState, a->to); + freearc(nfa, a); + } + } + + assert(oldState->nouts == 0); + assert(oldState->outs == NULL); +} + +/* + * copyouts - copy out arcs of a state to another state + */ +static void +copyouts(struct nfa * nfa, + struct state * oldState, + struct state * newState) +{ + assert(oldState != newState); + + if (!BULK_ARC_OP_USE_SORT(oldState->nouts, newState->nouts)) + { + /* With not too many arcs, just do them one at a time */ + struct arc *a; + + for (a = oldState->outs; a != NULL; a = a->outchain) + cparc(nfa, a, newState, a->to); + } + else + { + /* + * With many arcs, use a sort-merge approach. Note that createarc() + * will put new arcs onto the front of newState's chain, so it does + * not break our walk through the sorted part of the chain. + */ + struct arc *oa; + struct arc *na; + + /* + * Because we bypass newarc() in this code path, we'd better include a + * cancel check. + */ + if (CANCEL_REQUESTED(nfa->v->re)) + { + NERR(REG_CANCEL); + return; + } + + sortouts(nfa, oldState); + sortouts(nfa, newState); + if (NISERR()) + return; /* might have failed to sort */ + oa = oldState->outs; + na = newState->outs; + while (oa != NULL && na != NULL) + { + struct arc *a = oa; + + switch (sortouts_cmp(&oa, &na)) + { + case -1: + /* newState does not have anything matching oa */ + oa = oa->outchain; + createarc(nfa, a->type, a->co, newState, a->to); + break; + case 0: + /* match, advance in both lists */ + oa = oa->outchain; + na = na->outchain; + break; + case +1: + /* advance only na; oa might have a match later */ + na = na->outchain; + break; + default: + assert(NOTREACHED); + } + } + while (oa != NULL) + { + /* newState does not have anything matching oa */ + struct arc *a = oa; + + oa = oa->outchain; + createarc(nfa, a->type, a->co, newState, a->to); + } + } +} + +/* + * cloneouts - copy out arcs of a state to another state pair, modifying type + */ +static void +cloneouts(struct nfa * nfa, + struct state * old, + struct state * from, + struct state * to, + int type) +{ + struct arc *a; assert(old != from); @@ -669,6 +1202,8 @@ delsub(struct nfa * nfa, rp->tmp = rp; /* mark end */ deltraverse(nfa, lp, lp); + if (NISERR()) + return; /* asserts might not hold after failure */ assert(lp->nouts == 0 && rp->nins == 0); /* did the job */ assert(lp->no != FREESTATE && rp->no != FREESTATE); /* no more */ @@ -688,6 +1223,13 @@ deltraverse(struct nfa * nfa, struct arc *a; struct state *to; + /* Since this is recursive, it could be driven to stack overflow */ + if (STACK_TOO_DEEP(nfa->v->re)) + { + NERR(REG_ETOOBIG); + return; + } + if (s->nouts == 0) return; /* nothing to do */ if (s->tmp != NULL) @@ -699,6 +1241,8 @@ deltraverse(struct nfa * nfa, { to = a->to; deltraverse(nfa, leftend, to); + if (NISERR()) + return; /* asserts might not hold after failure */ assert(to->nouts == 0 || to->tmp != NULL); freearc(nfa, a); if (to->nins == 0 && to->tmp == NULL) @@ -753,6 +1297,13 @@ duptraverse(struct nfa * nfa, { struct arc *a; + /* Since this is recursive, it could be driven to stack overflow */ + if (STACK_TOO_DEEP(nfa->v->re)) + { + NERR(REG_ETOOBIG); + return; + } + if (s->tmp != NULL) return; /* already done */ @@ -782,6 +1333,13 @@ cleartraverse(struct nfa * nfa, { struct arc *a; + /* Since this is recursive, it could be driven to stack overflow */ + if (STACK_TOO_DEEP(nfa->v->re)) + { + NERR(REG_ETOOBIG); + return; + } + if (s->tmp == NULL) return; s->tmp = NULL; @@ -819,6 +1377,18 @@ specialcolors(struct nfa * nfa) /* * optimize - optimize an NFA + * + * The main goal of this function is not so much "optimization" (though it + * does try to get rid of useless NFA states) as reducing the NFA to a form + * the regex executor can handle. The executor, and indeed the cNFA format + * that is its input, can only handle PLAIN and LACON arcs. The output of + * the regex parser also includes EMPTY (do-nothing) arcs, as well as + * ^, $, AHEAD, and BEHIND constraint arcs, which we must get rid of here. + * We first get rid of EMPTY arcs and then deal with the constraint arcs. + * The hardest part of either job is to get rid of circular loops of the + * target arc type. We would have to do that in any case, though, as such a + * loop would otherwise allow the executor to cycle through the loop endlessly + * without making any progress in the input string. */ static long /* re_info bits */ optimize(struct nfa * nfa, @@ -842,6 +1412,7 @@ optimize(struct nfa * nfa, if (verbose) fprintf(f, "\nconstraints:\n"); #endif + fixconstraintloops(nfa, f); /* get rid of constraint loops */ pullback(nfa, f); /* pull back constraints backward */ pushfwd(nfa, f); /* push fwd constraints forward */ #ifdef REG_DEBUG @@ -849,11 +1420,15 @@ optimize(struct nfa * nfa, fprintf(f, "\nfinal cleanup:\n"); #endif cleanup(nfa); /* final tidying */ +#ifdef REG_DEBUG + if (verbose) + dumpnfa(nfa, f); +#endif return analyze(nfa); /* and analysis */ } /* - * pullback - pull back constraints backward to (with luck) eliminate them + * pullback - pull back constraints backward to eliminate them */ static void pullback(struct nfa * nfa, @@ -863,6 +1438,7 @@ pullback(struct nfa * nfa, struct state *nexts; struct arc *a; struct arc *nexta; + struct state *intermediates; int progress; /* find and pull until there are no more */ @@ -872,14 +1448,25 @@ pullback(struct nfa * nfa, for (s = nfa->states; s != NULL && !NISERR(); s = nexts) { nexts = s->next; + intermediates = NULL; for (a = s->outs; a != NULL && !NISERR(); a = nexta) { nexta = a->outchain; if (a->type == '^' || a->type == BEHIND) - if (pull(nfa, a)) + if (pull(nfa, a, &intermediates)) progress = 1; - assert(nexta == NULL || s->no != FREESTATE); } + /* clear tmp fields of intermediate states created here */ + while (intermediates != NULL) + { + struct state *ns = intermediates->tmp; + + intermediates->tmp = NULL; + intermediates = ns; + } + /* if s is now useless, get rid of it */ + if ((s->nins == 0 || s->nouts == 0) && !s->flag) + dropstate(nfa, s); } if (progress && f != NULL) dumpnfa(nfa, f); @@ -887,6 +1474,12 @@ pullback(struct nfa * nfa, if (NISERR()) return; + /* + * Any ^ constraints we were able to pull to the start state can now be + * replaced by PLAIN arcs referencing the BOS or BOL colors. There should + * be no other ^ or BEHIND arcs left in the NFA, though we do not check + * that here (compact() will fail if so). + */ for (a = nfa->pre->outs; a != NULL; a = nexta) { nexta = a->outchain; @@ -901,13 +1494,26 @@ pullback(struct nfa * nfa, /* * pull - pull a back constraint backward past its source state - * A significant property of this function is that it deletes at most - * one state -- the constraint's from state -- and only if the constraint - * was that state's last outarc. + * + * Returns 1 if successful (which it always is unless the source is the + * start state or we have an internal error), 0 if nothing happened. + * + * A significant property of this function is that it deletes no pre-existing + * states, and no outarcs of the constraint's from state other than the given + * constraint arc. This makes the loops in pullback() safe, at the cost that + * we may leave useless states behind. Therefore, we leave it to pullback() + * to delete such states. + * + * If the from state has multiple back-constraint outarcs, and/or multiple + * compatible constraint inarcs, we only need to create one new intermediate + * state per combination of predecessor and successor states. *intermediates + * points to a list of such intermediate states for this from state (chained + * through their tmp fields). */ -static int /* 0 couldn't, 1 could */ +static int pull(struct nfa * nfa, - struct arc * con) + struct arc * con, + struct state ** intermediates) { struct state *from = con->from; struct state *to = con->to; @@ -915,11 +1521,7 @@ pull(struct nfa * nfa, struct arc *nexta; struct state *s; - if (from == to) - { /* circular constraint is pointless */ - freearc(nfa, con); - return 1; - } + assert(from != to); /* should have gotten rid of this earlier */ if (from->flag) /* can't pull back beyond start */ return 0; if (from->nins == 0) @@ -929,42 +1531,27 @@ pull(struct nfa * nfa, } /* - * DGP 2007-11-15: Cloning a state with a circular constraint on its list - * of outs can lead to trouble [Tcl Bug 1810038], so get rid of them - * first. + * First, clone from state if necessary to avoid other outarcs. This may + * seem wasteful, but it simplifies the logic, and we'll get rid of the + * clone state again at the bottom. */ - for (a = from->outs; a != NULL; a = nexta) - { - nexta = a->outchain; - switch (a->type) - { - case '^': - case '$': - case BEHIND: - case AHEAD: - if (from == a->to) - freearc(nfa, a); - break; - } - } - - /* first, clone from state if necessary to avoid other outarcs */ if (from->nouts > 1) { s = newstate(nfa); if (NISERR()) return 0; - assert(to != from); /* con is not an inarc */ - copyins(nfa, from, s, 1); /* duplicate inarcs */ + copyins(nfa, from, s); /* duplicate inarcs */ cparc(nfa, con, s, to); /* move constraint arc */ freearc(nfa, con); + if (NISERR()) + return 0; from = s; con = from->outs; } assert(from->nouts == 1); /* propagate the constraint into the from state's inarcs */ - for (a = from->ins; a != NULL; a = nexta) + for (a = from->ins; a != NULL && !NISERR(); a = nexta) { nexta = a->inchain; switch (combine(con, a)) @@ -975,13 +1562,23 @@ pull(struct nfa * nfa, case SATISFIED: /* no action needed */ break; case COMPATIBLE: /* swap the two arcs, more or less */ - s = newstate(nfa); - if (NISERR()) - return 0; - cparc(nfa, a, s, to); /* anticipate move */ + /* need an intermediate state, but might have one already */ + for (s = *intermediates; s != NULL; s = s->tmp) + { + assert(s->nins > 0 && s->nouts > 0); + if (s->ins->from == a->from && s->outs->to == to) + break; + } + if (s == NULL) + { + s = newstate(nfa); + if (NISERR()) + return 0; + s->tmp = *intermediates; + *intermediates = s; + } cparc(nfa, con, a->from, s); - if (NISERR()) - return 0; + cparc(nfa, a, s, to); freearc(nfa, a); break; default: @@ -992,12 +1589,13 @@ pull(struct nfa * nfa, /* remaining inarcs, if any, incorporate the constraint */ moveins(nfa, from, to); - dropstate(nfa, from); /* will free the constraint */ + freearc(nfa, con); + /* from state is now useless, but we leave it to pullback() to clean up */ return 1; } /* - * pushfwd - push forward constraints forward to (with luck) eliminate them + * pushfwd - push forward constraints forward to eliminate them */ static void pushfwd(struct nfa * nfa, @@ -1007,6 +1605,7 @@ pushfwd(struct nfa * nfa, struct state *nexts; struct arc *a; struct arc *nexta; + struct state *intermediates; int progress; /* find and push until there are no more */ @@ -1016,14 +1615,25 @@ pushfwd(struct nfa * nfa, for (s = nfa->states; s != NULL && !NISERR(); s = nexts) { nexts = s->next; + intermediates = NULL; for (a = s->ins; a != NULL && !NISERR(); a = nexta) { nexta = a->inchain; if (a->type == '$' || a->type == AHEAD) - if (push(nfa, a)) + if (push(nfa, a, &intermediates)) progress = 1; - assert(nexta == NULL || s->no != FREESTATE); } + /* clear tmp fields of intermediate states created here */ + while (intermediates != NULL) + { + struct state *ns = intermediates->tmp; + + intermediates->tmp = NULL; + intermediates = ns; + } + /* if s is now useless, get rid of it */ + if ((s->nins == 0 || s->nouts == 0) && !s->flag) + dropstate(nfa, s); } if (progress && f != NULL) dumpnfa(nfa, f); @@ -1031,6 +1641,12 @@ pushfwd(struct nfa * nfa, if (NISERR()) return; + /* + * Any $ constraints we were able to push to the post state can now be + * replaced by PLAIN arcs referencing the EOS or EOL colors. There should + * be no other $ or AHEAD arcs left in the NFA, though we do not check + * that here (compact() will fail if so). + */ for (a = nfa->post->ins; a != NULL; a = nexta) { nexta = a->inchain; @@ -1045,13 +1661,26 @@ pushfwd(struct nfa * nfa, /* * push - push a forward constraint forward past its destination state - * A significant property of this function is that it deletes at most - * one state -- the constraint's to state -- and only if the constraint - * was that state's last inarc. + * + * Returns 1 if successful (which it always is unless the destination is the + * post state or we have an internal error), 0 if nothing happened. + * + * A significant property of this function is that it deletes no pre-existing + * states, and no inarcs of the constraint's to state other than the given + * constraint arc. This makes the loops in pushfwd() safe, at the cost that + * we may leave useless states behind. Therefore, we leave it to pushfwd() + * to delete such states. + * + * If the to state has multiple forward-constraint inarcs, and/or multiple + * compatible constraint outarcs, we only need to create one new intermediate + * state per combination of predecessor and successor states. *intermediates + * points to a list of such intermediate states for this to state (chained + * through their tmp fields). */ -static int /* 0 couldn't, 1 could */ +static int push(struct nfa * nfa, - struct arc * con) + struct arc * con, + struct state ** intermediates) { struct state *from = con->from; struct state *to = con->to; @@ -1059,11 +1688,7 @@ push(struct nfa * nfa, struct arc *nexta; struct state *s; - if (to == from) - { /* circular constraint is pointless */ - freearc(nfa, con); - return 1; - } + assert(to != from); /* should have gotten rid of this earlier */ if (to->flag) /* can't push forward beyond end */ return 0; if (to->nouts == 0) @@ -1073,44 +1698,27 @@ push(struct nfa * nfa, } /* - * DGP 2007-11-15: Here we duplicate the same protections as appear in - * pull() above to avoid troubles with cloning a state with a circular - * constraint on its list of ins. It is not clear whether this is - * necessary, or is protecting against a "can't happen". Any test case - * that actually leads to a freearc() call here would be a welcome - * addition to the test suite. + * First, clone to state if necessary to avoid other inarcs. This may + * seem wasteful, but it simplifies the logic, and we'll get rid of the + * clone state again at the bottom. */ - for (a = to->ins; a != NULL; a = nexta) - { - nexta = a->inchain; - switch (a->type) - { - case '^': - case '$': - case BEHIND: - case AHEAD: - if (a->from == to) - freearc(nfa, a); - break; - } - } - - /* first, clone to state if necessary to avoid other inarcs */ if (to->nins > 1) { s = newstate(nfa); if (NISERR()) return 0; - copyouts(nfa, to, s, 1); /* duplicate outarcs */ - cparc(nfa, con, from, s); /* move constraint */ + copyouts(nfa, to, s); /* duplicate outarcs */ + cparc(nfa, con, from, s); /* move constraint arc */ freearc(nfa, con); + if (NISERR()) + return 0; to = s; con = to->ins; } assert(to->nins == 1); /* propagate the constraint into the to state's outarcs */ - for (a = to->outs; a != NULL; a = nexta) + for (a = to->outs; a != NULL && !NISERR(); a = nexta) { nexta = a->outchain; switch (combine(con, a)) @@ -1121,13 +1729,23 @@ push(struct nfa * nfa, case SATISFIED: /* no action needed */ break; case COMPATIBLE: /* swap the two arcs, more or less */ - s = newstate(nfa); - if (NISERR()) - return 0; - cparc(nfa, con, s, a->to); /* anticipate move */ + /* need an intermediate state, but might have one already */ + for (s = *intermediates; s != NULL; s = s->tmp) + { + assert(s->nins > 0 && s->nouts > 0); + if (s->ins->from == from && s->outs->to == a->to) + break; + } + if (s == NULL) + { + s = newstate(nfa); + if (NISERR()) + return 0; + s->tmp = *intermediates; + *intermediates = s; + } + cparc(nfa, con, s, a->to); cparc(nfa, a, from, s); - if (NISERR()) - return 0; freearc(nfa, a); break; default: @@ -1138,7 +1756,8 @@ push(struct nfa * nfa, /* remaining outarcs, if any, incorporate the constraint */ moveouts(nfa, to, from); - dropstate(nfa, to); /* will free the constraint */ + freearc(nfa, con); + /* to state is now useless, but we leave it to pushfwd() to clean up */ return 1; } @@ -1212,6 +1831,12 @@ fixempties(struct nfa * nfa, struct state *nexts; struct arc *a; struct arc *nexta; + int totalinarcs; + struct arc **inarcsorig; + struct arc **arcarray; + int arccount; + int prevnins; + int nskip; /* * First, get rid of any states whose sole out-arc is an EMPTY, since @@ -1252,41 +1877,131 @@ fixempties(struct nfa * nfa, dropstate(nfa, s); } + if (NISERR()) + return; + /* - * For each remaining NFA state, find all other states that are reachable - * from it by a chain of one or more EMPTY arcs. Then generate new arcs + * For each remaining NFA state, find all other states from which it is + * reachable by a chain of one or more EMPTY arcs. Then generate new arcs * that eliminate the need for each such chain. * - * If we just do this straightforwardly, the algorithm gets slow in - * complex graphs, because the same arcs get copied to all intermediate - * states of an EMPTY chain, and then uselessly pushed repeatedly to the - * chain's final state; we waste a lot of time in newarc's duplicate - * checking. To improve matters, we decree that any state with only EMPTY - * out-arcs is "doomed" and will not be part of the final NFA. That can be - * ensured by not adding any new out-arcs to such a state. Having ensured - * that, we need not update the state's in-arcs list either; all arcs that - * might have gotten pushed forward to it will just get pushed directly to - * successor states. This eliminates most of the useless duplicate arcs. + * We could replace a chain of EMPTY arcs that leads from a "from" state + * to a "to" state either by pushing non-EMPTY arcs forward (linking + * directly from "from"'s predecessors to "to") or by pulling them back + * (linking directly from "from" to "to"'s successors). We choose to + * always do the former; this choice is somewhat arbitrary, but the + * approach below requires that we uniformly do one or the other. + * + * Suppose we have a chain of N successive EMPTY arcs (where N can easily + * approach the size of the NFA). All of the intermediate states must + * have additional inarcs and outarcs, else they'd have been removed by + * the steps above. Assuming their inarcs are mostly not empties, we will + * add O(N^2) arcs to the NFA, since a non-EMPTY inarc leading to any one + * state in the chain must be duplicated to lead to all its successor + * states as well. So there is no hope of doing less than O(N^2) work; + * however, we should endeavor to keep the big-O cost from being even + * worse than that, which it can easily become without care. In + * particular, suppose we were to copy all S1's inarcs forward to S2, and + * then also to S3, and then later we consider pushing S2's inarcs forward + * to S3. If we include the arcs already copied from S1 in that, we'd be + * doing O(N^3) work. (The duplicate-arc elimination built into newarc() + * and its cohorts would get rid of the extra arcs, but not without cost.) + * + * We can avoid this cost by treating only arcs that existed at the start + * of this phase as candidates to be pushed forward. To identify those, + * we remember the first inarc each state had to start with. We rely on + * the fact that newarc() and friends put new arcs on the front of their + * to-states' inchains, and that this phase never deletes arcs, so that + * the original arcs must be the last arcs in their to-states' inchains. + * + * So the process here is that, for each state in the NFA, we gather up + * all non-EMPTY inarcs of states that can reach the target state via + * EMPTY arcs. We then sort, de-duplicate, and merge these arcs into the + * target state's inchain. (We can safely use sort-merge for this as long + * as we update each state's original-arcs pointer after we add arcs to + * it; the sort step of mergeins probably changed the order of the old + * arcs.) + * + * Another refinement worth making is that, because we only add non-EMPTY + * arcs during this phase, and all added arcs have the same from-state as + * the non-EMPTY arc they were cloned from, we know ahead of time that any + * states having only EMPTY outarcs will be useless for lack of outarcs + * after we drop the EMPTY arcs. (They cannot gain non-EMPTY outarcs if + * they had none to start with.) So we need not bother to update the + * inchains of such states at all. + */ + + /* Remember the states' first original inarcs */ + /* ... and while at it, count how many old inarcs there are altogether */ + inarcsorig = (struct arc **) MALLOC(nfa->nstates * sizeof(struct arc *)); + if (inarcsorig == NULL) + { + NERR(REG_ESPACE); + return; + } + totalinarcs = 0; + for (s = nfa->states; s != NULL; s = s->next) + { + inarcsorig[s->no] = s->ins; + totalinarcs += s->nins; + } + + /* + * Create a workspace for accumulating the inarcs to be added to the + * current target state. totalinarcs is probably a considerable + * overestimate of the space needed, but the NFA is unlikely to be large + * enough at this point to make it worth being smarter. */ + arcarray = (struct arc **) MALLOC(totalinarcs * sizeof(struct arc *)); + if (arcarray == NULL) + { + NERR(REG_ESPACE); + FREE(inarcsorig); + return; + } + + /* And iterate over the target states */ for (s = nfa->states; s != NULL && !NISERR(); s = s->next) { - for (s2 = emptyreachable(s, s); s2 != s && !NISERR(); s2 = nexts) + /* Ignore target states without non-EMPTY outarcs, per note above */ + if (!s->flag && !hasnonemptyout(s)) + continue; + + /* Find predecessor states and accumulate their original inarcs */ + arccount = 0; + for (s2 = emptyreachable(nfa, s, s, inarcsorig); s2 != s; s2 = nexts) { - /* - * If s2 is doomed, we decide that (1) we will always push arcs - * forward to it, not pull them back to s; and (2) we can optimize - * away the push-forward, per comment above. So do nothing. - */ - if (s2->flag || hasnonemptyout(s2)) - replaceempty(nfa, s, s2); + /* Add s2's original inarcs to arcarray[], but ignore empties */ + for (a = inarcsorig[s2->no]; a != NULL; a = a->inchain) + { + if (a->type != EMPTY) + arcarray[arccount++] = a; + } /* Reset the tmp fields as we walk back */ nexts = s2->tmp; s2->tmp = NULL; } s->tmp = NULL; + assert(arccount <= totalinarcs); + + /* Remember how many original inarcs this state has */ + prevnins = s->nins; + + /* Add non-duplicate inarcs to target state */ + mergeins(nfa, s, arcarray, arccount); + + /* Now we must update the state's inarcsorig pointer */ + nskip = s->nins - prevnins; + a = s->ins; + while (nskip-- > 0) + a = a->inchain; + inarcsorig[s->no] = a; } + FREE(arcarray); + FREE(inarcsorig); + if (NISERR()) return; @@ -1320,92 +2035,647 @@ fixempties(struct nfa * nfa, } /* - * emptyreachable - recursively find all states reachable from s by EMPTY arcs + * emptyreachable - recursively find all states that can reach s by EMPTY arcs * * The return value is the last such state found. Its tmp field links back * to the next-to-last such state, and so on back to s, so that all these * states can be located without searching the whole NFA. * + * Since this is only used in fixempties(), we pass in the inarcsorig[] array + * maintained by that function. This lets us skip over all new inarcs, which + * are certainly not EMPTY arcs. + * * The maximum recursion depth here is equal to the length of the longest * loop-free chain of EMPTY arcs, which is surely no more than the size of - * the NFA, and in practice will be a lot less than that. + * the NFA ... but that could still be enough to cause trouble. */ static struct state * -emptyreachable(struct state * s, struct state * lastfound) +emptyreachable(struct nfa * nfa, + struct state * s, + struct state * lastfound, + struct arc ** inarcsorig) { struct arc *a; + /* Since this is recursive, it could be driven to stack overflow */ + if (STACK_TOO_DEEP(nfa->v->re)) + { + NERR(REG_ETOOBIG); + return lastfound; + } + s->tmp = lastfound; lastfound = s; - for (a = s->outs; a != NULL; a = a->outchain) + for (a = inarcsorig[s->no]; a != NULL; a = a->inchain) { - if (a->type == EMPTY && a->to->tmp == NULL) - lastfound = emptyreachable(a->to, lastfound); + if (a->type == EMPTY && a->from->tmp == NULL) + lastfound = emptyreachable(nfa, a->from, lastfound, inarcsorig); } return lastfound; } /* - * replaceempty - replace an EMPTY arc chain with some non-empty arcs + * isconstraintarc - detect whether an arc is of a constraint type + */ +static inline int +isconstraintarc(struct arc * a) +{ + switch (a->type) + { + case '^': + case '$': + case BEHIND: + case AHEAD: + case LACON: + return 1; + } + return 0; +} + +/* + * hasconstraintout - does state have a constraint out arc? + */ +static int +hasconstraintout(struct state * s) +{ + struct arc *a; + + for (a = s->outs; a != NULL; a = a->outchain) + { + if (isconstraintarc(a)) + return 1; + } + return 0; +} + +/* + * fixconstraintloops - get rid of loops containing only constraint arcs * - * The EMPTY arc(s) should be deleted later, but we can't do it here because - * they may still be needed to identify other arc chains during fixempties(). + * A loop of states that contains only constraint arcs is useless, since + * passing around the loop represents no forward progress. Moreover, it + * would cause infinite looping in pullback/pushfwd, so we need to get rid + * of such loops before doing that. */ static void -replaceempty(struct nfa * nfa, - struct state * from, - struct state * to) +fixconstraintloops(struct nfa * nfa, + FILE *f) /* for debug output; NULL none */ { - int fromouts; - int toins; + struct state *s; + struct state *nexts; + struct arc *a; + struct arc *nexta; + int hasconstraints; + + /* + * In the trivial case of a state that loops to itself, we can just drop + * the constraint arc altogether. This is worth special-casing because + * such loops are far more common than loops containing multiple states. + * While we're at it, note whether any constraint arcs survive. + */ + hasconstraints = 0; + for (s = nfa->states; s != NULL && !NISERR(); s = nexts) + { + nexts = s->next; + /* while we're at it, ensure tmp fields are clear for next step */ + assert(s->tmp == NULL); + for (a = s->outs; a != NULL && !NISERR(); a = nexta) + { + nexta = a->outchain; + if (isconstraintarc(a)) + { + if (a->to == s) + freearc(nfa, a); + else + hasconstraints = 1; + } + } + /* If we removed all the outarcs, the state is useless. */ + if (s->nouts == 0 && !s->flag) + dropstate(nfa, s); + } + + /* Nothing to do if no remaining constraint arcs */ + if (NISERR() || !hasconstraints) + return; - assert(from != to); + /* + * Starting from each remaining NFA state, search outwards for a + * constraint loop. If we find a loop, break the loop, then start the + * search over. (We could possibly retain some state from the first scan, + * but it would complicate things greatly, and multi-state constraint + * loops are rare enough that it's not worth optimizing the case.) + */ +restart: + for (s = nfa->states; s != NULL && !NISERR(); s = s->next) + { + if (findconstraintloop(nfa, s)) + goto restart; + } + + if (NISERR()) + return; /* - * Create replacement arcs that bypass the need for the EMPTY chain. We - * can do this either by pushing arcs forward (linking directly from - * "from"'s predecessors to "to") or by pulling them back (linking - * directly from "from" to "to"'s successors). In general, we choose - * whichever way creates greater fan-out or fan-in, so as to improve the - * odds of reducing the other state to zero in-arcs or out-arcs and - * thereby being able to delete it. However, if "from" is doomed (has no - * non-EMPTY out-arcs), we must keep it so, so always push forward in that - * case. + * Now remove any states that have become useless. (This cleanup is not + * very thorough, and would be even less so if we tried to combine it with + * the previous step; but cleanup() will take care of anything we miss.) * - * The fan-out/fan-in comparison should count only non-EMPTY arcs. If - * "from" is doomed, we can skip counting "to"'s arcs, since we want to - * force taking the copyins path in that case. + * Because findconstraintloop intentionally doesn't reset all tmp fields, + * we have to clear them after it's done. This is a convenient place to + * do that, too. + */ + for (s = nfa->states; s != NULL; s = nexts) + { + nexts = s->next; + s->tmp = NULL; + if ((s->nins == 0 || s->nouts == 0) && !s->flag) + dropstate(nfa, s); + } + + if (f != NULL) + dumpnfa(nfa, f); +} + +/* + * findconstraintloop - recursively find a loop of constraint arcs + * + * If we find a loop, break it by calling breakconstraintloop(), then + * return 1; otherwise return 0. + * + * State tmp fields are guaranteed all NULL on a success return, because + * breakconstraintloop does that. After a failure return, any state that + * is known not to be part of a loop is marked with s->tmp == s; this allows + * us not to have to re-prove that fact on later calls. (This convention is + * workable because we already eliminated single-state loops.) + * + * Note that the found loop doesn't necessarily include the first state we + * are called on. Any loop reachable from that state will do. + * + * The maximum recursion depth here is one more than the length of the longest + * loop-free chain of constraint arcs, which is surely no more than the size + * of the NFA ... but that could still be enough to cause trouble. + */ +static int +findconstraintloop(struct nfa * nfa, struct state * s) +{ + struct arc *a; + + /* Since this is recursive, it could be driven to stack overflow */ + if (STACK_TOO_DEEP(nfa->v->re)) + { + NERR(REG_ETOOBIG); + return 1; /* to exit as quickly as possible */ + } + + if (s->tmp != NULL) + { + /* Already proven uninteresting? */ + if (s->tmp == s) + return 0; + /* Found a loop involving s */ + breakconstraintloop(nfa, s); + /* The tmp fields have been cleaned up by breakconstraintloop */ + return 1; + } + for (a = s->outs; a != NULL; a = a->outchain) + { + if (isconstraintarc(a)) + { + struct state *sto = a->to; + + assert(sto != s); + s->tmp = sto; + if (findconstraintloop(nfa, sto)) + return 1; + } + } + + /* + * If we get here, no constraint loop exists leading out from s. Mark it + * with s->tmp == s so we need not rediscover that fact again later. + */ + s->tmp = s; + return 0; +} + +/* + * breakconstraintloop - break a loop of constraint arcs + * + * sinitial is any one member state of the loop. Each loop member's tmp + * field links to its successor within the loop. (Note that this function + * will reset all the tmp fields to NULL.) + * + * We can break the loop by, for any one state S1 in the loop, cloning its + * loop successor state S2 (and possibly following states), and then moving + * all S1->S2 constraint arcs to point to the cloned S2. The cloned S2 should + * copy any non-constraint outarcs of S2. Constraint outarcs should be + * dropped if they point back to S1, else they need to be copied as arcs to + * similarly cloned states S3, S4, etc. In general, each cloned state copies + * non-constraint outarcs, drops constraint outarcs that would lead to itself + * or any earlier cloned state, and sends other constraint outarcs to newly + * cloned states. No cloned state will have any inarcs that aren't constraint + * arcs or do not lead from S1 or earlier-cloned states. It's okay to drop + * constraint back-arcs since they would not take us to any state we've not + * already been in; therefore, no new constraint loop is created. In this way + * we generate a modified NFA that can still represent every useful state + * sequence, but not sequences that represent state loops with no consumption + * of input data. Note that the set of cloned states will certainly include + * all of the loop member states other than S1, and it may also include + * non-loop states that are reachable from S2 via constraint arcs. This is + * important because there is no guarantee that findconstraintloop found a + * maximal loop (and searching for one would be NP-hard, so don't try). + * Frequently the "non-loop states" are actually part of a larger loop that + * we didn't notice, and indeed there may be several overlapping loops. + * This technique ensures convergence in such cases, while considering only + * the originally-found loop does not. + * + * If there is only one S1->S2 constraint arc, then that constraint is + * certainly satisfied when we enter any of the clone states. This means that + * in the common case where many of the constraint arcs are identically + * labeled, we can merge together clone states linked by a similarly-labeled + * constraint: if we can get to the first one we can certainly get to the + * second, so there's no need to distinguish. This greatly reduces the number + * of new states needed, so we preferentially break the given loop at a state + * pair where this is true. + * + * Furthermore, it's fairly common to find that a cloned successor state has + * no outarcs, especially if we're a bit aggressive about removing unnecessary + * outarcs. If that happens, then there is simply not any interesting state + * that can be reached through the predecessor's loop arcs, which means we can + * break the loop just by removing those loop arcs, with no new states added. + */ +static void +breakconstraintloop(struct nfa * nfa, struct state * sinitial) +{ + struct state *s; + struct state *shead; + struct state *stail; + struct state *sclone; + struct state *nexts; + struct arc *refarc; + struct arc *a; + struct arc *nexta; + + /* + * Start by identifying which loop step we want to break at. + * Preferentially this is one with only one constraint arc. (XXX are + * there any other secondary heuristics we want to use here?) Set refarc + * to point to the selected lone constraint arc, if there is one. + */ + refarc = NULL; + s = sinitial; + do + { + nexts = s->tmp; + assert(nexts != s); /* should not see any one-element loops */ + if (refarc == NULL) + { + int narcs = 0; + + for (a = s->outs; a != NULL; a = a->outchain) + { + if (a->to == nexts && isconstraintarc(a)) + { + refarc = a; + narcs++; + } + } + assert(narcs > 0); + if (narcs > 1) + refarc = NULL; /* multiple constraint arcs here, no good */ + } + s = nexts; + } while (s != sinitial); + + if (refarc) + { + /* break at the refarc */ + shead = refarc->from; + stail = refarc->to; + assert(stail == shead->tmp); + } + else + { + /* for lack of a better idea, break after sinitial */ + shead = sinitial; + stail = sinitial->tmp; + } + + /* + * Reset the tmp fields so that we can use them for local storage in + * clonesuccessorstates. (findconstraintloop won't mind, since it's just + * going to abandon its search anyway.) */ - fromouts = nonemptyouts(from); - toins = (fromouts == 0) ? 1 : nonemptyins(to); + for (s = nfa->states; s != NULL; s = s->next) + s->tmp = NULL; - if (fromouts > toins) + /* + * Recursively build clone state(s) as needed. + */ + sclone = newstate(nfa); + if (sclone == NULL) { - copyouts(nfa, to, from, 0); + assert(NISERR()); + return; + } + + clonesuccessorstates(nfa, stail, sclone, shead, refarc, + NULL, NULL, nfa->nstates); + + if (NISERR()) return; + + /* + * It's possible that sclone has no outarcs at all, in which case it's + * useless. (We don't try extremely hard to get rid of useless states + * here, but this is an easy and fairly common case.) + */ + if (sclone->nouts == 0) + { + freestate(nfa, sclone); + sclone = NULL; } - if (fromouts < toins) + + /* + * Move shead's constraint-loop arcs to point to sclone, or just drop them + * if we discovered we don't need sclone. + */ + for (a = shead->outs; a != NULL; a = nexta) { - copyins(nfa, from, to, 0); + nexta = a->outchain; + if (a->to == stail && isconstraintarc(a)) + { + if (sclone) + cparc(nfa, a, shead, sclone); + freearc(nfa, a); + if (NISERR()) + break; + } + } +} + +/* + * clonesuccessorstates - create a tree of constraint-arc successor states + * + * ssource is the state to be cloned, and sclone is the state to copy its + * outarcs into. sclone's inarcs, if any, should already be set up. + * + * spredecessor is the original predecessor state that we are trying to build + * successors for (it may not be the immediate predecessor of ssource). + * refarc, if not NULL, is the original constraint arc that is known to have + * been traversed out of spredecessor to reach the successor(s). + * + * For each cloned successor state, we transiently create a "donemap" that is + * a boolean array showing which source states we've already visited for this + * clone state. This prevents infinite recursion as well as useless repeat + * visits to the same state subtree (which can add up fast, since typical NFAs + * have multiple redundant arc pathways). Each donemap is a char array + * indexed by state number. The donemaps are all of the same size "nstates", + * which is nfa->nstates as of the start of the recursion. This is enough to + * have entries for all pre-existing states, but *not* entries for clone + * states created during the recursion. That's okay since we have no need to + * mark those. + * + * curdonemap is NULL when recursing to a new sclone state, or sclone's + * donemap when we are recursing without having created a new state (which we + * do when we decide we can merge a successor state into the current clone + * state). outerdonemap is NULL at the top level and otherwise the parent + * clone state's donemap. + * + * The successor states we create and fill here form a strict tree structure, + * with each state having exactly one predecessor, except that the toplevel + * state has no inarcs as yet (breakconstraintloop will add its inarcs from + * spredecessor after we're done). Thus, we can examine sclone's inarcs back + * to the root, plus refarc if any, to identify the set of constraints already + * known valid at the current point. This allows us to avoid generating extra + * successor states. + */ +static void +clonesuccessorstates(struct nfa * nfa, + struct state * ssource, + struct state * sclone, + struct state * spredecessor, + struct arc * refarc, + char *curdonemap, + char *outerdonemap, + int nstates) +{ + char *donemap; + struct arc *a; + + /* Since this is recursive, it could be driven to stack overflow */ + if (STACK_TOO_DEEP(nfa->v->re)) + { + NERR(REG_ETOOBIG); return; } + /* If this state hasn't already got a donemap, create one */ + donemap = curdonemap; + if (donemap == NULL) + { + donemap = (char *) MALLOC(nstates * sizeof(char)); + if (donemap == NULL) + { + NERR(REG_ESPACE); + return; + } + + if (outerdonemap != NULL) + { + /* + * Not at outermost recursion level, so copy the outer level's + * donemap; this ensures that we see states in process of being + * visited at outer levels, or already merged into predecessor + * states, as ones we shouldn't traverse back to. + */ + memcpy(donemap, outerdonemap, nstates * sizeof(char)); + } + else + { + /* At outermost level, only spredecessor is off-limits */ + memset(donemap, 0, nstates * sizeof(char)); + assert(spredecessor->no < nstates); + donemap[spredecessor->no] = 1; + } + } + + /* Mark ssource as visited in the donemap */ + assert(ssource->no < nstates); + assert(donemap[ssource->no] == 0); + donemap[ssource->no] = 1; + /* - * fromouts == toins. Decide on secondary issue: copy fewest arcs. + * We proceed by first cloning all of ssource's outarcs, creating new + * clone states as needed but not doing more with them than that. Then in + * a second pass, recurse to process the child clone states. This allows + * us to have only one child clone state per reachable source state, even + * when there are multiple outarcs leading to the same state. Also, when + * we do visit a child state, its set of inarcs is known exactly, which + * makes it safe to apply the constraint-is-already-checked optimization. + * Also, this ensures that we've merged all the states we can into the + * current clone before we recurse to any children, thus possibly saving + * them from making extra images of those states. * - * Doesn't seem to be worth the trouble to exclude empties from these - * comparisons; that takes extra time and doesn't seem to improve the - * resulting graph much. + * While this function runs, child clone states of the current state are + * marked by setting their tmp fields to point to the original state they + * were cloned from. This makes it possible to detect multiple outarcs + * leading to the same state, and also makes it easy to distinguish clone + * states from original states (which will have tmp == NULL). */ - if (from->nins > to->nouts) + for (a = ssource->outs; a != NULL && !NISERR(); a = a->outchain) { - copyouts(nfa, to, from, 0); - return; + struct state *sto = a->to; + + /* + * We do not consider cloning successor states that have no constraint + * outarcs; just link to them as-is. They cannot be part of a + * constraint loop so there is no need to make copies. In particular, + * this rule keeps us from trying to clone the post state, which would + * be a bad idea. + */ + if (isconstraintarc(a) && hasconstraintout(sto)) + { + struct state *prevclone; + int canmerge; + struct arc *a2; + + /* + * Back-link constraint arcs must not be followed. Nor is there a + * need to revisit states previously merged into this clone. + */ + assert(sto->no < nstates); + if (donemap[sto->no] != 0) + continue; + + /* + * Check whether we already have a child clone state for this + * source state. + */ + prevclone = NULL; + for (a2 = sclone->outs; a2 != NULL; a2 = a2->outchain) + { + if (a2->to->tmp == sto) + { + prevclone = a2->to; + break; + } + } + + /* + * If this arc is labeled the same as refarc, or the same as any + * arc we must have traversed to get to sclone, then no additional + * constraints need to be met to get to sto, so we should just + * merge its outarcs into sclone. + */ + if (refarc && a->type == refarc->type && a->co == refarc->co) + canmerge = 1; + else + { + struct state *s; + + canmerge = 0; + for (s = sclone; s->ins; s = s->ins->from) + { + if (s->nins == 1 && + a->type == s->ins->type && a->co == s->ins->co) + { + canmerge = 1; + break; + } + } + } + + if (canmerge) + { + /* + * We can merge into sclone. If we previously made a child + * clone state, drop it; there's no need to visit it. (This + * can happen if ssource has multiple pathways to sto, and we + * only just now found one that is provably a no-op.) + */ + if (prevclone) + dropstate(nfa, prevclone); /* kills our outarc, too */ + + /* Recurse to merge sto's outarcs into sclone */ + clonesuccessorstates(nfa, + sto, + sclone, + spredecessor, + refarc, + donemap, + outerdonemap, + nstates); + /* sto should now be marked as previously visited */ + assert(NISERR() || donemap[sto->no] == 1); + } + else if (prevclone) + { + /* + * We already have a clone state for this successor, so just + * make another arc to it. + */ + cparc(nfa, a, sclone, prevclone); + } + else + { + /* + * We need to create a new successor clone state. + */ + struct state *stoclone; + + stoclone = newstate(nfa); + if (stoclone == NULL) + { + assert(NISERR()); + break; + } + /* Mark it as to what it's a clone of */ + stoclone->tmp = sto; + /* ... and add the outarc leading to it */ + cparc(nfa, a, sclone, stoclone); + } + } + else + { + /* + * Non-constraint outarcs just get copied to sclone, as do outarcs + * leading to states with no constraint outarc. + */ + cparc(nfa, a, sclone, sto); + } } - else + + /* + * If we are at outer level for this clone state, recurse to all its child + * clone states, clearing their tmp fields as we go. (If we're not + * outermost for sclone, leave this to be done by the outer call level.) + * Note that if we have multiple outarcs leading to the same clone state, + * it will only be recursed-to once. + */ + if (curdonemap == NULL) { - copyins(nfa, from, to, 0); - return; + for (a = sclone->outs; a != NULL && !NISERR(); a = a->outchain) + { + struct state *stoclone = a->to; + struct state *sto = stoclone->tmp; + + if (sto != NULL) + { + stoclone->tmp = NULL; + clonesuccessorstates(nfa, + sto, + stoclone, + spredecessor, + refarc, + NULL, + donemap, + nstates); + } + } + + /* Don't forget to free sclone's donemap when done with it */ + FREE(donemap); } } @@ -1419,19 +2689,22 @@ cleanup(struct nfa * nfa) struct state *nexts; int n; + if (NISERR()) + return; + /* clear out unreachable or dead-end states */ /* use pre to mark reachable, then post to mark can-reach-post */ markreachable(nfa, nfa->pre, (struct state *) NULL, nfa->pre); markcanreach(nfa, nfa->post, nfa->pre, nfa->post); - for (s = nfa->states; s != NULL; s = nexts) + for (s = nfa->states; s != NULL && !NISERR(); s = nexts) { nexts = s->next; if (s->tmp != nfa->post && !s->flag) dropstate(nfa, s); } - assert(nfa->post->nins == 0 || nfa->post->tmp == nfa->post); + assert(NISERR() || nfa->post->nins == 0 || nfa->post->tmp == nfa->post); cleartraverse(nfa, nfa->pre); - assert(nfa->post->nins == 0 || nfa->post->tmp == NULL); + assert(NISERR() || nfa->post->nins == 0 || nfa->post->tmp == NULL); /* the nins==0 (final unreachable) case will be caught later */ /* renumber surviving states */ @@ -1452,6 +2725,13 @@ markreachable(struct nfa * nfa, { struct arc *a; + /* Since this is recursive, it could be driven to stack overflow */ + if (STACK_TOO_DEEP(nfa->v->re)) + { + NERR(REG_ETOOBIG); + return; + } + if (s->tmp != okay) return; s->tmp = mark; @@ -1471,6 +2751,13 @@ markcanreach(struct nfa * nfa, { struct arc *a; + /* Since this is recursive, it could be driven to stack overflow */ + if (STACK_TOO_DEEP(nfa->v->re)) + { + NERR(REG_ETOOBIG); + return; + } + if (s->tmp != okay) return; s->tmp = mark; @@ -1488,6 +2775,9 @@ analyze(struct nfa * nfa) struct arc *a; struct arc *aa; + if (NISERR()) + return 0; + if (nfa->pre->outs == NULL) return REG_UIMPOSSIBLE; for (a = nfa->pre->outs; a != NULL; a = a->outchain) @@ -1498,7 +2788,7 @@ analyze(struct nfa * nfa) } /* - * compact - compact an NFA + * compact - construct the compact representation of an NFA */ static void compact(struct nfa * nfa, @@ -1568,10 +2858,10 @@ compact(struct nfa * nfa, cnfa->flags |= HASLACONS; break; default: - assert(NOTREACHED); + NERR(REG_ASSERT); break; } - carcsort(first, ca - 1); + carcsort(first, ca - first); ca->co = COLORLESS; ca->to = 0; ca++; @@ -1587,31 +2877,29 @@ compact(struct nfa * nfa, /* * carcsort - sort compacted-NFA arcs by color - * - * Really dumb algorithm, but if the list is long enough for that to matter, - * you're in real trouble anyway. */ static void -carcsort(struct carc * first, - struct carc * last) +carcsort(struct carc * first, size_t n) { - struct carc *p; - struct carc *q; - struct carc tmp; - - if (last - first <= 1) - return; + if (n > 1) + qsort(first, n, sizeof(struct carc), carc_cmp); +} - for (p = first; p <= last; p++) - for (q = p; q <= last; q++) - if (p->co > q->co || - (p->co == q->co && p->to > q->to)) - { - assert(p != q); - tmp = *p; - *p = *q; - *q = tmp; - } +static int +carc_cmp(const void *a, const void *b) +{ + const struct carc *aa = (const struct carc *) a; + const struct carc *bb = (const struct carc *) b; + + if (aa->co < bb->co) + return -1; + if (aa->co > bb->co) + return +1; + if (aa->to < bb->to) + return -1; + if (aa->to > bb->to) + return +1; + return 0; } /* @@ -1636,6 +2924,8 @@ dumpnfa(struct nfa * nfa, { #ifdef REG_DEBUG struct state *s; + int nstates = 0; + int narcs = 0; fprintf(f, "pre %d, post %d", nfa->pre->no, nfa->post->no); if (nfa->bos[0] != COLORLESS) @@ -1648,7 +2938,12 @@ dumpnfa(struct nfa * nfa, fprintf(f, ", eol [%ld]", (long) nfa->eos[1]); fprintf(f, "\n"); for (s = nfa->states; s != NULL; s = s->next) + { dumpstate(s, f); + nstates++; + narcs += s->nouts; + } + fprintf(f, "total of %d states, %d arcs\n", nstates, narcs); if (nfa->parent == NULL) dumpcolors(nfa->cm, f); fflush(f); @@ -1691,34 +2986,28 @@ dumparcs(struct state * s, FILE *f) { int pos; + struct arc *a; - assert(s->nouts > 0); - /* printing arcs in reverse order is usually clearer */ - pos = dumprarcs(s->outs, s, f, 1); - if (pos != 1) - fprintf(f, "\n"); -} - -/* - * dumprarcs - dump remaining outarcs, recursively, in reverse order - */ -static int /* resulting print position */ -dumprarcs(struct arc * a, - struct state * s, - FILE *f, - int pos) /* initial print position */ -{ - if (a->outchain != NULL) - pos = dumprarcs(a->outchain, s, f, pos); - dumparc(a, s, f); - if (pos == 5) + /* printing oldest arcs first is usually clearer */ + a = s->outs; + assert(a != NULL); + while (a->outchain != NULL) + a = a->outchain; + pos = 1; + do { + dumparc(a, s, f); + if (pos == 5) + { + fprintf(f, "\n"); + pos = 1; + } + else + pos++; + a = a->outchainRev; + } while (a != NULL); + if (pos != 1) fprintf(f, "\n"); - pos = 1; - } - else - pos++; - return pos; } /* diff --git a/src/backend/regex/regcomp.c b/src/backend/regex/regcomp.c index ef1d35b0aa9a8..09ec8f3c89490 100644 --- a/src/backend/regex/regcomp.c +++ b/src/backend/regex/regcomp.c @@ -34,7 +34,7 @@ #include "regex/regguts.h" -#include "miscadmin.h" /* needed by rcancelrequested() */ +#include "miscadmin.h" /* needed by rcancelrequested/rstacktoodeep */ /* * forward declarations, up here so forward datatypes etc. are defined early @@ -70,6 +70,7 @@ static int newlacon(struct vars *, struct state *, struct state *, int); static void freelacons(struct subre *, int); static void rfree(regex_t *); static int rcancelrequested(void); +static int rstacktoodeep(void); #ifdef REG_DEBUG static void dump(regex_t *, FILE *); @@ -123,17 +124,22 @@ static void dropstate(struct nfa *, struct state *); static void freestate(struct nfa *, struct state *); static void destroystate(struct nfa *, struct state *); static void newarc(struct nfa *, int, pcolor, struct state *, struct state *); +static void createarc(struct nfa *, int, pcolor, struct state *, struct state *); static struct arc *allocarc(struct nfa *, struct state *); static void freearc(struct nfa *, struct arc *); +static void changearctarget(struct arc *, struct state *); static int hasnonemptyout(struct state *); -static int nonemptyouts(struct state *); -static int nonemptyins(struct state *); static struct arc *findarc(struct state *, int, pcolor); static void cparc(struct nfa *, struct arc *, struct state *, struct state *); +static void sortins(struct nfa *, struct state *); +static int sortins_cmp(const void *, const void *); +static void sortouts(struct nfa *, struct state *); +static int sortouts_cmp(const void *, const void *); static void moveins(struct nfa *, struct state *, struct state *); -static void copyins(struct nfa *, struct state *, struct state *, int); +static void copyins(struct nfa *, struct state *, struct state *); +static void mergeins(struct nfa *, struct state *, struct arc **, int); static void moveouts(struct nfa *, struct state *, struct state *); -static void copyouts(struct nfa *, struct state *, struct state *, int); +static void copyouts(struct nfa *, struct state *, struct state *); static void cloneouts(struct nfa *, struct state *, struct state *, struct state *, int); static void delsub(struct nfa *, struct state *, struct state *); static void deltraverse(struct nfa *, struct state *, struct state *); @@ -143,30 +149,38 @@ static void cleartraverse(struct nfa *, struct state *); static void specialcolors(struct nfa *); static long optimize(struct nfa *, FILE *); static void pullback(struct nfa *, FILE *); -static int pull(struct nfa *, struct arc *); +static int pull(struct nfa *, struct arc *, struct state **); static void pushfwd(struct nfa *, FILE *); -static int push(struct nfa *, struct arc *); +static int push(struct nfa *, struct arc *, struct state **); #define INCOMPATIBLE 1 /* destroys arc */ #define SATISFIED 2 /* constraint satisfied */ #define COMPATIBLE 3 /* compatible but not satisfied yet */ static int combine(struct arc *, struct arc *); static void fixempties(struct nfa *, FILE *); -static struct state *emptyreachable(struct state *, struct state *); -static void replaceempty(struct nfa *, struct state *, struct state *); +static struct state *emptyreachable(struct nfa *, struct state *, + struct state *, struct arc **); +static int isconstraintarc(struct arc *); +static int hasconstraintout(struct state *); +static void fixconstraintloops(struct nfa *, FILE *); +static int findconstraintloop(struct nfa *, struct state *); +static void breakconstraintloop(struct nfa *, struct state *); +static void clonesuccessorstates(struct nfa *, struct state *, struct state *, + struct state *, struct arc *, + char *, char *, int); static void cleanup(struct nfa *); static void markreachable(struct nfa *, struct state *, struct state *, struct state *); static void markcanreach(struct nfa *, struct state *, struct state *, struct state *); static long analyze(struct nfa *); static void compact(struct nfa *, struct cnfa *); -static void carcsort(struct carc *, struct carc *); +static void carcsort(struct carc *, size_t); +static int carc_cmp(const void *, const void *); static void freecnfa(struct cnfa *); static void dumpnfa(struct nfa *, FILE *); #ifdef REG_DEBUG static void dumpstate(struct state *, FILE *); static void dumparcs(struct state *, FILE *); -static int dumprarcs(struct arc *, struct state *, FILE *, int); static void dumparc(struct arc *, struct state *, FILE *); static void dumpcnfa(struct cnfa *, FILE *); static void dumpcstate(int, struct cnfa *, FILE *); @@ -228,11 +242,12 @@ struct vars struct subre *tree; /* subexpression tree */ struct subre *treechain; /* all tree nodes allocated */ struct subre *treefree; /* any free tree nodes */ - int ntree; /* number of tree nodes */ + int ntree; /* number of tree nodes, plus one */ struct cvec *cv; /* interface cvec */ struct cvec *cv2; /* utility cvec */ struct subre *lacons; /* lookahead-constraint vector */ int nlacons; /* size of lacons */ + size_t spaceused; /* approx. space used for compilation */ }; /* parsing macros; most know that `v' is the struct vars pointer */ @@ -279,7 +294,8 @@ struct vars /* static function list */ static const struct fns functions = { rfree, /* regfree insides */ - rcancelrequested /* check for cancel request */ + rcancelrequested, /* check for cancel request */ + rstacktoodeep /* check for stack getting dangerously deep */ }; @@ -347,6 +363,7 @@ pg_regcomp(regex_t *re, v->cv2 = NULL; v->lacons = NULL; v->nlacons = 0; + v->spaceused = 0; re->re_magic = REMAGIC; re->re_info = 0; /* bits get set during parse */ re->re_csize = sizeof(chr); @@ -568,21 +585,26 @@ makesearch(struct vars * v, * splitting each such state into progress and no-progress states. */ - /* first, make a list of the states */ + /* first, make a list of the states reachable from pre and elsewhere */ slist = NULL; for (a = pre->outs; a != NULL; a = a->outchain) { s = a->to; for (b = s->ins; b != NULL; b = b->inchain) + { if (b->from != pre) break; + } + + /* + * We want to mark states as being in the list already by having non + * NULL tmp fields, but we can't just store the old slist value in tmp + * because that doesn't work for the first such state. Instead, the + * first list entry gets its own address in tmp. + */ if (b != NULL && s->tmp == NULL) { - /* - * Must be split if not already in the list (fixes bugs 505048, - * 230589, 840258, 504785). - */ - s->tmp = slist; + s->tmp = (slist != NULL) ? slist : s; slist = s; } } @@ -591,7 +613,9 @@ makesearch(struct vars * v, for (s = slist; s != NULL; s = s2) { s2 = newstate(nfa); - copyouts(nfa, s, s2, 1); + NOERR(); + copyouts(nfa, s, s2); + NOERR(); for (a = s->ins; a != NULL; a = b) { b = a->inchain; @@ -601,7 +625,7 @@ makesearch(struct vars * v, freearc(nfa, a); } } - s2 = s->tmp; + s2 = (s->tmp != s) ? s->tmp : NULL; s->tmp = NULL; /* clean up while we're at it */ } } @@ -942,6 +966,7 @@ parseqatom(struct vars * v, NOERR(); assert(v->nextvalue > 0); atom = subre(v, 'b', BACKR, lp, rp); + NOERR(); subno = v->nextvalue; atom->subno = subno; EMPTYARC(lp, rp); /* temporarily, so there's something */ @@ -1076,6 +1101,7 @@ parseqatom(struct vars * v, /* break remaining subRE into x{...} and what follows */ t = subre(v, '.', COMBINE(qprefer, atom->flags), lp, rp); + NOERR(); t->left = atom; atomp = &t->left; @@ -1084,6 +1110,7 @@ parseqatom(struct vars * v, /* split top into prefix and remaining */ assert(top->op == '=' && top->left == NULL && top->right == NULL); top->left = subre(v, '=', top->flags, top->begin, lp); + NOERR(); top->op = '.'; top->right = t; @@ -1618,6 +1645,16 @@ subre(struct vars * v, { struct subre *ret = v->treefree; + /* + * Checking for stack overflow here is sufficient to protect parse() and + * its recursive subroutines. + */ + if (STACK_TOO_DEEP(v->re)) + { + ERR(REG_ETOOBIG); + return NULL; + } + if (ret != NULL) v->treefree = ret->left; else @@ -1930,6 +1967,22 @@ rcancelrequested(void) return InterruptPending && (QueryCancelPending || ProcDiePending); } +/* + * rstacktoodeep - check for stack getting dangerously deep + * + * Return nonzero to fail the operation with error code REG_ETOOBIG, + * zero to keep going + * + * The current implementation is Postgres-specific. If we ever get around + * to splitting the regex code out as a standalone library, there will need + * to be some API to let applications define a callback function for this. + */ +static int +rstacktoodeep(void) +{ + return stack_is_too_deep(); +} + #ifdef REG_DEBUG /* @@ -1962,7 +2015,7 @@ dump(regex_t *re, dumpcolors(&g->cmap, f); if (!NULLCNFA(g->search)) { - printf("\nsearch:\n"); + fprintf(f, "\nsearch:\n"); dumpcnfa(&g->search, f); } for (i = 1; i < g->nlacons; i++) diff --git a/src/backend/regex/rege_dfa.c b/src/backend/regex/rege_dfa.c index d367a77e85469..a37e4b0ef9666 100644 --- a/src/backend/regex/rege_dfa.c +++ b/src/backend/regex/rege_dfa.c @@ -34,9 +34,12 @@ /* * longest - longest-preferred matching engine + * + * On success, returns match endpoint address. Returns NULL on no match. + * Internal errors also return NULL, with v->err set. */ -static chr * /* endpoint, or NULL */ -longest(struct vars * v, /* used only for debug and exec flags */ +static chr * +longest(struct vars * v, struct dfa * d, chr *start, /* where the match should start */ chr *stop, /* match must end at or before here */ @@ -51,11 +54,15 @@ longest(struct vars * v, /* used only for debug and exec flags */ int i; struct colormap *cm = d->cm; + /* prevent "uninitialized variable" warnings */ + if (hitstopp != NULL) + *hitstopp = 0; + /* initialize */ css = initialize(v, d, start); + if (css == NULL) + return NULL; cp = start; - if (hitstopp != NULL) - *hitstopp = 0; /* startup */ FDEBUG(("+++ startup +++\n")); @@ -74,8 +81,14 @@ longest(struct vars * v, /* used only for debug and exec flags */ return NULL; css->lastseen = cp; - /* main loop */ + /* + * This is the main text-scanning loop. It seems worth having two copies + * to avoid the overhead of REG_FTRACE tests here, even in REG_DEBUG + * builds, when you're not actively tracing. + */ +#ifdef REG_DEBUG if (v->eflags & REG_FTRACE) + { while (cp < realstop) { FDEBUG(("+++ at c%d +++\n", (int) (css - d->ssets))); @@ -92,7 +105,10 @@ longest(struct vars * v, /* used only for debug and exec flags */ ss->lastseen = cp; css = ss; } + } else +#endif + { while (cp < realstop) { co = GETCOLOR(cm, *cp); @@ -107,6 +123,10 @@ longest(struct vars * v, /* used only for debug and exec flags */ ss->lastseen = cp; css = ss; } + } + + if (ISERR()) + return NULL; /* shutdown */ FDEBUG(("+++ shutdown at c%d +++\n", (int) (css - d->ssets))); @@ -117,6 +137,8 @@ longest(struct vars * v, /* used only for debug and exec flags */ co = d->cnfa->eos[(v->eflags & REG_NOTEOL) ? 0 : 1]; FDEBUG(("color %ld\n", (long) co)); ss = miss(v, d, css, co, cp, start); + if (ISERR()) + return NULL; /* special case: match ended at eol? */ if (ss != NULL && (ss->flags & POSTSTATE)) return cp; @@ -138,14 +160,17 @@ longest(struct vars * v, /* used only for debug and exec flags */ /* * shortest - shortest-preferred matching engine + * + * On success, returns match endpoint address. Returns NULL on no match. + * Internal errors also return NULL, with v->err set. */ -static chr * /* endpoint, or NULL */ +static chr * shortest(struct vars * v, struct dfa * d, chr *start, /* where the match should start */ chr *min, /* match must end at or after here */ chr *max, /* match must end at or before here */ - chr **coldp, /* store coldstart pointer here, if nonNULL */ + chr **coldp, /* store coldstart pointer here, if non-NULL */ int *hitstopp) /* record whether hit v->stop, if non-NULL */ { chr *cp; @@ -156,11 +181,17 @@ shortest(struct vars * v, struct sset *ss; struct colormap *cm = d->cm; + /* prevent "uninitialized variable" warnings */ + if (coldp != NULL) + *coldp = NULL; + if (hitstopp != NULL) + *hitstopp = 0; + /* initialize */ css = initialize(v, d, start); + if (css == NULL) + return NULL; cp = start; - if (hitstopp != NULL) - *hitstopp = 0; /* startup */ FDEBUG(("--- startup ---\n")); @@ -180,8 +211,14 @@ shortest(struct vars * v, css->lastseen = cp; ss = css; - /* main loop */ + /* + * This is the main text-scanning loop. It seems worth having two copies + * to avoid the overhead of REG_FTRACE tests here, even in REG_DEBUG + * builds, when you're not actively tracing. + */ +#ifdef REG_DEBUG if (v->eflags & REG_FTRACE) + { while (cp < realmax) { FDEBUG(("--- at c%d ---\n", (int) (css - d->ssets))); @@ -200,7 +237,10 @@ shortest(struct vars * v, if ((ss->flags & POSTSTATE) && cp >= realmin) break; /* NOTE BREAK OUT */ } + } else +#endif + { while (cp < realmax) { co = GETCOLOR(cm, *cp); @@ -217,6 +257,7 @@ shortest(struct vars * v, if ((ss->flags & POSTSTATE) && cp >= realmin) break; /* NOTE BREAK OUT */ } + } if (ss == NULL) return NULL; @@ -389,7 +430,7 @@ hash(unsigned *uv, * initialize - hand-craft a cache entry for startup, otherwise get ready */ static struct sset * -initialize(struct vars * v, /* used only for debug flags */ +initialize(struct vars * v, struct dfa * d, chr *start) { @@ -402,6 +443,8 @@ initialize(struct vars * v, /* used only for debug flags */ else { /* no, must (re)build it */ ss = getvacant(v, d, start, start); + if (ss == NULL) + return NULL; for (i = 0; i < d->wordsper; i++) ss->states[i] = 0; BSET(ss->states, d->cnfa->pre); @@ -420,10 +463,20 @@ initialize(struct vars * v, /* used only for debug flags */ } /* - * miss - handle a cache miss + * miss - handle a stateset cache miss + * + * css is the current stateset, co is the color of the current input character, + * cp points to the character after that (which is where we may need to test + * LACONs). start does not affect matching behavior but is needed for pickss' + * heuristics about which stateset cache entry to replace. + * + * Ordinarily, returns the address of the next stateset (the one that is + * valid after consuming the input character). Returns NULL if no valid + * NFA states remain, ie we have a certain match failure. + * Internal errors also return NULL, with v->err set. */ -static struct sset * /* NULL if goes to empty set */ -miss(struct vars * v, /* used only for debug flags */ +static struct sset * +miss(struct vars * v, struct dfa * d, struct sset * css, pcolor co, @@ -449,9 +502,23 @@ miss(struct vars * v, /* used only for debug flags */ } FDEBUG(("miss\n")); - /* first, what set of states would we end up in? */ + /* + * Checking for operation cancel in the inner text search loop seems + * unduly expensive. As a compromise, check during cache misses. + */ + if (CANCEL_REQUESTED(v->re)) + { + ERR(REG_CANCEL); + return NULL; + } + + /* + * What set of states would we end up in after consuming the co character? + * We first consider PLAIN arcs that consume the character, and then look + * to see what LACON arcs could be traversed after consuming it. + */ for (i = 0; i < d->wordsper; i++) - d->work[i] = 0; + d->work[i] = 0; /* build new stateset bitmap in d->work */ ispost = 0; noprogress = 1; gotstate = 0; @@ -468,22 +535,31 @@ miss(struct vars * v, /* used only for debug flags */ noprogress = 0; FDEBUG(("%d -> %d\n", i, ca->to)); } - dolacons = (gotstate) ? (cnfa->flags & HASLACONS) : 0; + if (!gotstate) + return NULL; /* character cannot reach any new state */ + dolacons = (cnfa->flags & HASLACONS); sawlacons = 0; + /* outer loop handles transitive closure of reachable-by-LACON states */ while (dolacons) - { /* transitive closure */ + { dolacons = 0; for (i = 0; i < d->nstates; i++) if (ISBSET(d->work, i)) for (ca = cnfa->states[i]; ca->co != COLORLESS; ca++) { if (ca->co < cnfa->ncolors) - continue; /* NOTE CONTINUE */ - sawlacons = 1; + continue; /* not a LACON arc */ if (ISBSET(d->work, ca->to)) - continue; /* NOTE CONTINUE */ + continue; /* arc would be a no-op anyway */ + sawlacons = 1; /* this LACON affects our result */ if (!lacon(v, cnfa, cp, ca->co)) - continue; /* NOTE CONTINUE */ + { + if (ISERR()) + return NULL; + continue; /* LACON arc cannot be traversed */ + } + if (ISERR()) + return NULL; BSET(d->work, ca->to); dolacons = 1; if (ca->to == cnfa->post) @@ -493,11 +569,9 @@ miss(struct vars * v, /* used only for debug flags */ FDEBUG(("%d :> %d\n", i, ca->to)); } } - if (!gotstate) - return NULL; h = HASH(d->work, d->wordsper); - /* next, is that in the cache? */ + /* Is this stateset already in the cache? */ for (p = d->ssets, i = d->nssused; i > 0; p++, i--) if (HIT(h, d->work, p, d->wordsper)) { @@ -507,6 +581,8 @@ miss(struct vars * v, /* used only for debug flags */ if (i == 0) { /* nope, need a new cache entry */ p = getvacant(v, d, cp, start); + if (p == NULL) + return NULL; assert(p != css); for (i = 0; i < d->wordsper; i++) p->states[i] = d->work[i]; @@ -517,8 +593,15 @@ miss(struct vars * v, /* used only for debug flags */ /* lastseen to be dealt with by caller */ } + /* + * Link new stateset to old, unless a LACON affected the result, in which + * case we don't create the link. That forces future transitions across + * this same arc (same prior stateset and character color) to come through + * miss() again, so that we can recheck the LACON(s), which might or might + * not pass since context will be different. + */ if (!sawlacons) - { /* lookahead conds. always cache miss */ + { FDEBUG(("c%d[%d]->c%d\n", (int) (css - d->ssets), co, (int) (p - d->ssets))); css->outs[co] = p; @@ -544,6 +627,13 @@ lacon(struct vars * v, struct smalldfa sd; chr *end; + /* Since this is recursive, it could be driven to stack overflow */ + if (STACK_TOO_DEEP(v->re)) + { + ERR(REG_ETOOBIG); + return 0; + } + n = co - pcnfa->ncolors; assert(n < v->g->nlacons && v->g->lacons != NULL); FDEBUG(("=== testing lacon %d\n", n)); @@ -562,11 +652,12 @@ lacon(struct vars * v, /* * getvacant - get a vacant state set + * * This routine clears out the inarcs and outarcs, but does not otherwise * clear the innards of the state set -- that's up to the caller. */ static struct sset * -getvacant(struct vars * v, /* used only for debug flags */ +getvacant(struct vars * v, struct dfa * d, chr *cp, chr *start) @@ -578,6 +669,8 @@ getvacant(struct vars * v, /* used only for debug flags */ color co; ss = pickss(v, d, cp, start); + if (ss == NULL) + return NULL; assert(!(ss->flags & LOCKED)); /* clear out its inarcs, including self-referential ones */ @@ -635,7 +728,7 @@ getvacant(struct vars * v, /* used only for debug flags */ * pickss - pick the next stateset to be used */ static struct sset * -pickss(struct vars * v, /* used only for debug flags */ +pickss(struct vars * v, struct dfa * d, chr *cp, chr *start) @@ -691,7 +784,6 @@ pickss(struct vars * v, /* used only for debug flags */ /* nobody's old enough?!? -- something's really wrong */ FDEBUG(("cannot find victim to replace!\n")); - assert(NOTREACHED); ERR(REG_ASSERT); - return d->ssets; + return NULL; } diff --git a/src/backend/regex/regexec.c b/src/backend/regex/regexec.c index 5e78f8149c878..45c3a579c755b 100644 --- a/src/backend/regex/regexec.c +++ b/src/backend/regex/regexec.c @@ -348,7 +348,11 @@ find(struct vars * v, (chr **) NULL, &hitend); else end = longest(v, d, begin, v->stop, &hitend); - NOERR(); + if (ISERR()) + { + freedfa(d); + return v->err; + } if (hitend && cold == NULL) cold = begin; if (end != NULL) @@ -444,13 +448,20 @@ cfindloop(struct vars * v, close = v->search_start; do { + /* Search with the search RE for match range at/beyond "close" */ MDEBUG(("\ncsearch at %ld\n", LOFF(close))); close = shortest(v, s, close, close, v->stop, &cold, (int *) NULL); + if (ISERR()) + { + *coldp = cold; + return v->err; + } if (close == NULL) - break; /* NOTE BREAK */ + break; /* no more possible match anywhere */ assert(cold != NULL); open = cold; cold = NULL; + /* Search for matches starting between "open" and "close" inclusive */ MDEBUG(("cbetween %ld and %ld\n", LOFF(open), LOFF(close))); for (begin = open; begin <= close; begin++) { @@ -459,17 +470,24 @@ cfindloop(struct vars * v, estop = v->stop; for (;;) { + /* Here we use the top node's detailed RE */ if (shorter) end = shortest(v, d, begin, estart, estop, (chr **) NULL, &hitend); else end = longest(v, d, begin, estop, &hitend); + if (ISERR()) + { + *coldp = cold; + return v->err; + } if (hitend && cold == NULL) cold = begin; if (end == NULL) - break; /* NOTE BREAK OUT */ + break; /* no match with this begin point, try next */ MDEBUG(("tentative end %ld\n", LOFF(end))); + /* Dissect the potential match to see if it really matches */ zapallsubs(v->pmatch, v->nmatch); er = cdissect(v, v->g->tree, begin, end); if (er == REG_OKAY) @@ -488,21 +506,28 @@ cfindloop(struct vars * v, *coldp = cold; return er; } - /* try next shorter/longer match with same begin point */ + /* Try next longer/shorter match with same begin point */ if (shorter) { if (end == estop) - break; /* NOTE BREAK OUT */ + break; /* no more, so try next begin point */ estart = end + 1; } else { if (end == begin) - break; /* NOTE BREAK OUT */ + break; /* no more, so try next begin point */ estop = end - 1; } } /* end loop over endpoint positions */ } /* end loop over beginning positions */ + + /* + * If we get here, there is no possible match starting at or before + * "close", so consider matches beyond that. We'll do a fresh search + * with the search RE to find a new promising match range. + */ + close++; } while (close < v->stop); *coldp = cold; @@ -599,6 +624,9 @@ cdissect(struct vars * v, /* handy place to check for operation cancel */ if (CANCEL_REQUESTED(v->re)) return REG_CANCEL; + /* ... and stack overrun */ + if (STACK_TOO_DEEP(v->re)) + return REG_ETOOBIG; switch (t->op) { @@ -677,6 +705,7 @@ ccondissect(struct vars * v, /* pick a tentative midpoint */ mid = longest(v, d, begin, end, (int *) NULL); + NOERR(); if (mid == NULL) return REG_NOMATCH; MDEBUG(("tentative midpoint %ld\n", LOFF(mid))); @@ -701,6 +730,7 @@ ccondissect(struct vars * v, if (er != REG_NOMATCH) return er; } + NOERR(); /* that midpoint didn't work, find a new one */ if (mid == begin) @@ -710,6 +740,7 @@ ccondissect(struct vars * v, return REG_NOMATCH; } mid = longest(v, d, begin, mid - 1, (int *) NULL); + NOERR(); if (mid == NULL) { /* failed to find a new one */ @@ -752,6 +783,7 @@ crevcondissect(struct vars * v, /* pick a tentative midpoint */ mid = shortest(v, d, begin, begin, end, (chr **) NULL, (int *) NULL); + NOERR(); if (mid == NULL) return REG_NOMATCH; MDEBUG(("tentative midpoint %ld\n", LOFF(mid))); @@ -776,6 +808,7 @@ crevcondissect(struct vars * v, if (er != REG_NOMATCH) return er; } + NOERR(); /* that midpoint didn't work, find a new one */ if (mid == end) @@ -785,6 +818,7 @@ crevcondissect(struct vars * v, return REG_NOMATCH; } mid = shortest(v, d, begin, mid + 1, end, (chr **) NULL, (int *) NULL); + NOERR(); if (mid == NULL) { /* failed to find a new one */ @@ -910,6 +944,7 @@ caltdissect(struct vars * v, if (er != REG_NOMATCH) return er; } + NOERR(); t = t->right; } @@ -942,17 +977,17 @@ citerdissect(struct vars * v, assert(begin <= end); /* - * If zero matches are allowed, and target string is empty, just declare - * victory. OTOH, if target string isn't empty, zero matches can't work - * so we pretend the min is 1. + * For the moment, assume the minimum number of matches is 1. If zero + * matches are allowed, and the target string is empty, we are allowed to + * match regardless of the contents of the iter node --- but we would + * prefer to match once, so that capturing parens get set. (An example of + * the concern here is a pattern like "()*\1", which historically this + * code has allowed to succeed.) Therefore, we deal with the zero-matches + * case at the bottom, after failing to find any other way to match. */ min_matches = t->min; if (min_matches <= 0) - { - if (begin == end) - return REG_OKAY; min_matches = 1; - } /* * We need workspace to track the endpoints of each sub-match. Normally @@ -1001,6 +1036,11 @@ citerdissect(struct vars * v, { /* try to find an endpoint for the k'th sub-match */ endpts[k] = longest(v, d, endpts[k - 1], limit, (int *) NULL); + if (ISERR()) + { + FREE(endpts); + return v->err; + } if (endpts[k] == NULL) { /* no match possible, so see if we can shorten previous one */ @@ -1097,8 +1137,19 @@ citerdissect(struct vars * v, } /* all possibilities exhausted */ - MDEBUG(("%d failed\n", t->id)); FREE(endpts); + + /* + * Now consider the possibility that we can match to a zero-length string + * by using zero repetitions. + */ + if (t->min == 0 && begin == end) + { + MDEBUG(("%d allowing zero matches\n", t->id)); + return REG_OKAY; + } + + MDEBUG(("%d failed\n", t->id)); return REG_NOMATCH; } @@ -1197,6 +1248,11 @@ creviterdissect(struct vars * v, /* try to find an endpoint for the k'th sub-match */ endpts[k] = shortest(v, d, endpts[k - 1], limit, end, (chr **) NULL, (int *) NULL); + if (ISERR()) + { + FREE(endpts); + return v->err; + } if (endpts[k] == NULL) { /* no match possible, so see if we can lengthen previous one */ diff --git a/src/backend/regex/regprefix.c b/src/backend/regex/regprefix.c index e78faf399606f..ce41620a0b4b1 100644 --- a/src/backend/regex/regprefix.c +++ b/src/backend/regex/regprefix.c @@ -162,14 +162,12 @@ findprefix(struct cnfa * cnfa, thiscolor = COLORLESS; for (ca = cnfa->states[st]; ca->co != COLORLESS; ca++) { - /* We ignore lookahead constraints */ - if (ca->co >= cnfa->ncolors) - continue; - /* We can also ignore BOS/BOL arcs */ + /* We can ignore BOS/BOL arcs */ if (ca->co == cnfa->bos[0] || ca->co == cnfa->bos[1]) continue; - /* ... but EOS/EOL arcs terminate the search */ - if (ca->co == cnfa->eos[0] || ca->co == cnfa->eos[1]) + /* ... but EOS/EOL arcs terminate the search, as do LACONs */ + if (ca->co == cnfa->eos[0] || ca->co == cnfa->eos[1] || + ca->co >= cnfa->ncolors) { thiscolor = COLORLESS; break; diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index 1e86e4c57b64a..1af011ee6e075 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -698,10 +698,15 @@ SendBackupHeader(List *tablespaces) } else { - pq_sendint(&buf, strlen(ti->oid), 4); /* length */ - pq_sendbytes(&buf, ti->oid, strlen(ti->oid)); - pq_sendint(&buf, strlen(ti->path), 4); /* length */ - pq_sendbytes(&buf, ti->path, strlen(ti->path)); + Size len; + + len = strlen(ti->oid); + pq_sendint(&buf, len, 4); + pq_sendbytes(&buf, ti->oid, len); + + len = strlen(ti->path); + pq_sendint(&buf, len, 4); + pq_sendbytes(&buf, ti->path, len); } if (ti->size >= 0) send_int8_string(&buf, ti->size / 1024); @@ -724,6 +729,7 @@ SendXlogRecPtrResult(XLogRecPtr ptr, TimeLineID tli) { StringInfoData buf; char str[MAXFNAMELEN]; + Size len; pq_beginmessage(&buf, 'T'); /* RowDescription */ pq_sendint(&buf, 2, 2); /* 2 fields */ @@ -742,7 +748,7 @@ SendXlogRecPtrResult(XLogRecPtr ptr, TimeLineID tli) pq_sendint(&buf, 0, 2); /* attnum */ /* - * int8 may seem like a surprising data type for this, but in thory int4 + * int8 may seem like a surprising data type for this, but in theory int4 * would not be wide enough for this, as TimeLineID is unsigned. */ pq_sendint(&buf, INT8OID, 4); /* type oid */ @@ -755,13 +761,15 @@ SendXlogRecPtrResult(XLogRecPtr ptr, TimeLineID tli) pq_beginmessage(&buf, 'D'); pq_sendint(&buf, 2, 2); /* number of columns */ - snprintf(str, sizeof(str), "%X/%X", (uint32) (ptr >> 32), (uint32) ptr); - pq_sendint(&buf, strlen(str), 4); /* length */ - pq_sendbytes(&buf, str, strlen(str)); + len = snprintf(str, sizeof(str), + "%X/%X", (uint32) (ptr >> 32), (uint32) ptr); + pq_sendint(&buf, len, 4); + pq_sendbytes(&buf, str, len); + + len = snprintf(str, sizeof(str), "%u", tli); + pq_sendint(&buf, len, 4); + pq_sendbytes(&buf, str, len); - snprintf(str, sizeof(str), "%u", tli); - pq_sendint(&buf, strlen(str), 4); /* length */ - pq_sendbytes(&buf, str, strlen(str)); pq_endmessage(&buf); /* Send a CommandComplete message */ diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index 824bc915b1d1b..ee7d3268f0283 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -28,9 +28,6 @@ #include "postgres.h" -#include -#include - #include "miscadmin.h" #include "access/xact.h" @@ -406,11 +403,12 @@ CreateDecodingContext(XLogRecPtr start_lsn, * decoding. Clients have to be able to do that to support synchronous * replication. */ - start_lsn = slot->data.confirmed_flush; elog(DEBUG1, "cannot stream from %X/%X, minimum is %X/%X, forwarding", (uint32) (start_lsn >> 32), (uint32) start_lsn, (uint32) (slot->data.confirmed_flush >> 32), (uint32) slot->data.confirmed_flush); + + start_lsn = slot->data.confirmed_flush; } ctx = StartupDecodingContext(output_plugin_options, diff --git a/src/backend/replication/logical/logicalfuncs.c b/src/backend/replication/logical/logicalfuncs.c index a354a3f819f6e..012987a97272e 100644 --- a/src/backend/replication/logical/logicalfuncs.c +++ b/src/backend/replication/logical/logicalfuncs.c @@ -403,7 +403,7 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin ctx->options.output_type !=OUTPUT_PLUGIN_TEXTUAL_OUTPUT) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("logical decoding output plugin \"%s\" produces binary output, but \"%s\" expects textual data", + errmsg("logical decoding output plugin \"%s\" produces binary output, but function \"%s\" expects textual data", NameStr(MyReplicationSlot->data.plugin), format_procedure(fcinfo->flinfo->fn_oid)))); diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c index f4ba86e836926..8a3fb59e4ad2b 100644 --- a/src/backend/replication/logical/origin.c +++ b/src/backend/replication/logical/origin.c @@ -148,9 +148,9 @@ typedef struct ReplicationStateCtl } ReplicationStateCtl; /* external variables */ -RepOriginId replorigin_sesssion_origin = InvalidRepOriginId; /* assumed identity */ -XLogRecPtr replorigin_sesssion_origin_lsn = InvalidXLogRecPtr; -TimestampTz replorigin_sesssion_origin_timestamp = 0; +RepOriginId replorigin_session_origin = InvalidRepOriginId; /* assumed identity */ +XLogRecPtr replorigin_session_origin_lsn = InvalidXLogRecPtr; +TimestampTz replorigin_session_origin_timestamp = 0; /* * Base address into a shared memory array of replication states of size @@ -313,7 +313,7 @@ replorigin_create(char *roname) if (tuple == NULL) ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), - errmsg("no free replication oid could be found"))); + errmsg("could not find free replication origin OID"))); heap_freetuple(tuple); return roident; @@ -350,7 +350,7 @@ replorigin_drop(RepOriginId roident) { ereport(ERROR, (errcode(ERRCODE_OBJECT_IN_USE), - errmsg("cannot drop replication origin with oid %d, in use by pid %d", + errmsg("could not drop replication origin with OID %d, in use by PID %d", state->roident, state->acquired_by))); } @@ -375,6 +375,10 @@ replorigin_drop(RepOriginId roident) LWLockRelease(ReplicationOriginLock); tuple = SearchSysCache1(REPLORIGIDENT, ObjectIdGetDatum(roident)); + if (!HeapTupleIsValid(tuple)) + elog(ERROR, "cache lookup failed for replication origin with oid %u", + roident); + simple_heap_delete(rel, &tuple->t_self); ReleaseSysCache(tuple); @@ -437,7 +441,7 @@ ReplicationOriginShmemSize(void) Size size = 0; /* - * XXX: max_replication_slots is arguablethe wrong thing to use here, here + * XXX: max_replication_slots is arguably the wrong thing to use, as here * we keep the replay state of *remote* transactions. But for now it seems * sufficient to reuse it, lest we introduce a separate guc. */ @@ -523,7 +527,7 @@ CheckPointReplicationOrigin(void) ereport(PANIC, (errcode_for_file_access(), errmsg("could not remove file \"%s\": %m", - path))); + tmppath))); /* * no other backend can perform this at the same time, we're protected by @@ -724,7 +728,7 @@ StartupReplicationOrigin(void) if (last_state == max_replication_slots) ereport(PANIC, (errcode(ERRCODE_CONFIGURATION_LIMIT_EXCEEDED), - errmsg("no free replication state could be found, increase max_replication_slots"))); + errmsg("could not find free replication state, increase max_replication_slots"))); /* copy data to shared memory */ replication_states[last_state].roident = disk_state.roident; @@ -742,7 +746,7 @@ StartupReplicationOrigin(void) if (file_crc != crc) ereport(PANIC, (errcode(ERRCODE_CONFIGURATION_LIMIT_EXCEEDED), - errmsg("replication_slot_checkpoint has wrong checksum %u, expected %u", + errmsg("replication slot checkpoint has wrong checksum %u, expected %u", crc, file_crc))); CloseTransientFile(fd); @@ -799,12 +803,12 @@ replorigin_redo(XLogReaderState *record) * Tell the replication origin progress machinery that a commit from 'node' * that originated at the LSN remote_commit on the remote node was replayed * successfully and that we don't need to do so again. In combination with - * setting up replorigin_sesssion_origin_lsn and replorigin_sesssion_origin that ensures we - * won't loose knowledge about that after a crash if the transaction had a - * persistent effect (think of asynchronous commits). + * setting up replorigin_session_origin_lsn and replorigin_session_origin + * that ensures we won't loose knowledge about that after a crash if the + * transaction had a persistent effect (think of asynchronous commits). * * local_commit needs to be a local LSN of the commit so that we can make sure - * uppon a checkpoint that enough WAL has been persisted to disk. + * upon a checkpoint that enough WAL has been persisted to disk. * * Needs to be called with a RowExclusiveLock on pg_replication_origin, * unless running in recovery. @@ -866,7 +870,7 @@ replorigin_advance(RepOriginId node, { ereport(ERROR, (errcode(ERRCODE_OBJECT_IN_USE), - errmsg("replication origin with oid %d is already active for pid %d", + errmsg("replication origin with OID %d is already active for PID %d", replication_state->roident, replication_state->acquired_by))); } @@ -877,7 +881,7 @@ replorigin_advance(RepOriginId node, if (replication_state == NULL && free_state == NULL) ereport(ERROR, (errcode(ERRCODE_CONFIGURATION_LIMIT_EXCEEDED), - errmsg("no free replication state slot could be found for replication origin with oid %u", + errmsg("could not find free replication state slot for replication origin with OID %u", node), errhint("Increase max_replication_slots and try again."))); @@ -1045,7 +1049,7 @@ replorigin_session_setup(RepOriginId node) { ereport(ERROR, (errcode(ERRCODE_OBJECT_IN_USE), - errmsg("replication identiefer %d is already active for pid %d", + errmsg("replication identifier %d is already active for PID %d", curstate->roident, curstate->acquired_by))); } @@ -1057,7 +1061,7 @@ replorigin_session_setup(RepOriginId node) if (session_replication_state == NULL && free_slot == -1) ereport(ERROR, (errcode(ERRCODE_CONFIGURATION_LIMIT_EXCEEDED), - errmsg("no free replication state slot could be found for replication origin with oid %u", + errmsg("could not find free replication state slot for replication origin with OID %u", node), errhint("Increase max_replication_slots and try again."))); else if (session_replication_state == NULL) @@ -1232,7 +1236,7 @@ pg_replication_origin_session_setup(PG_FUNCTION_ARGS) origin = replorigin_by_name(name, false); replorigin_session_setup(origin); - replorigin_sesssion_origin = origin; + replorigin_session_origin = origin; pfree(name); @@ -1249,10 +1253,9 @@ pg_replication_origin_session_reset(PG_FUNCTION_ARGS) replorigin_session_reset(); - /* FIXME */ - replorigin_sesssion_origin = InvalidRepOriginId; - replorigin_sesssion_origin_lsn = InvalidXLogRecPtr; - replorigin_sesssion_origin_timestamp = 0; + replorigin_session_origin = InvalidRepOriginId; + replorigin_session_origin_lsn = InvalidXLogRecPtr; + replorigin_session_origin_timestamp = 0; PG_RETURN_VOID(); } @@ -1265,7 +1268,7 @@ pg_replication_origin_session_is_setup(PG_FUNCTION_ARGS) { replorigin_check_prerequisites(false, false); - PG_RETURN_BOOL(replorigin_sesssion_origin != InvalidRepOriginId); + PG_RETURN_BOOL(replorigin_session_origin != InvalidRepOriginId); } @@ -1309,8 +1312,8 @@ pg_replication_origin_xact_setup(PG_FUNCTION_ARGS) (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("no replication origin is configured"))); - replorigin_sesssion_origin_lsn = location; - replorigin_sesssion_origin_timestamp = PG_GETARG_TIMESTAMPTZ(1); + replorigin_session_origin_lsn = location; + replorigin_session_origin_timestamp = PG_GETARG_TIMESTAMPTZ(1); PG_RETURN_VOID(); } @@ -1320,8 +1323,8 @@ pg_replication_origin_xact_reset(PG_FUNCTION_ARGS) { replorigin_check_prerequisites(true, false); - replorigin_sesssion_origin_lsn = InvalidXLogRecPtr; - replorigin_sesssion_origin_timestamp = 0; + replorigin_session_origin_lsn = InvalidXLogRecPtr; + replorigin_session_origin_timestamp = 0; PG_RETURN_VOID(); } diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index fa98580302afb..478c3e874af3f 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -2009,7 +2009,7 @@ ReorderBufferSerializeTXN(ReorderBuffer *rb, ReorderBufferTXN *txn) * store in segment in which it belongs by start lsn, don't split over * multiple segments tho */ - if (fd == -1 || XLByteInSeg(change->lsn, curOpenSegNo)) + if (fd == -1 || !XLByteInSeg(change->lsn, curOpenSegNo)) { XLogRecPtr recptr; diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c index efab4ca0df1af..16100538663d6 100644 --- a/src/backend/replication/logical/snapbuild.c +++ b/src/backend/replication/logical/snapbuild.c @@ -1677,12 +1677,12 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn) if (ondisk.magic != SNAPBUILD_MAGIC) ereport(ERROR, - (errmsg("snapbuild state file \"%s\" has wrong magic %u instead of %u", + (errmsg("snapbuild state file \"%s\" has wrong magic number: %u instead of %u", path, ondisk.magic, SNAPBUILD_MAGIC))); if (ondisk.version != SNAPBUILD_VERSION) ereport(ERROR, - (errmsg("snapbuild state file \"%s\" has unsupported version %u instead of %u", + (errmsg("snapbuild state file \"%s\" has unsupported version: %u instead of %u", path, ondisk.version, SNAPBUILD_VERSION))); INIT_CRC32C(checksum); @@ -1738,7 +1738,7 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn) if (!EQ_CRC32C(checksum, ondisk.checksum)) ereport(ERROR, (errcode_for_file_access(), - errmsg("snapbuild state file %s: checksum mismatch, is %u, should be %u", + errmsg("checksum mismatch for snapbuild state file \"%s\": is %u, should be %u", path, checksum, ondisk.checksum))); /* diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index f8544de6abfe5..04a064e5ce666 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -195,7 +195,7 @@ ReplicationSlotValidateName(const char *name, int elevel) (errcode(ERRCODE_INVALID_NAME), errmsg("replication slot name \"%s\" contains invalid character", name), - errhint("Replication slot names may only contain letters, numbers, and the underscore character."))); + errhint("Replication slot names may only contain lower case letters, numbers, and the underscore character."))); return false; } } @@ -349,7 +349,7 @@ ReplicationSlotAcquire(const char *name) if (active_pid != 0) ereport(ERROR, (errcode(ERRCODE_OBJECT_IN_USE), - errmsg("replication slot \"%s\" is already active for pid %d", + errmsg("replication slot \"%s\" is already active for PID %d", name, active_pid))); /* We made this slot active, so it's ours now. */ @@ -661,7 +661,7 @@ ReplicationSlotsComputeRequiredLSN(void) /* * Compute the oldest WAL LSN required by *logical* decoding slots.. * - * Returns InvalidXLogRecPtr if logical decoding is disabled or no logicals + * Returns InvalidXLogRecPtr if logical decoding is disabled or no logical * slots exist. * * NB: this returns a value >= ReplicationSlotsComputeRequiredLSN(), since it @@ -876,7 +876,7 @@ StartupReplicationSlots(void) } /* ---- - * Manipulation of ondisk state of replication slots + * Manipulation of on-disk state of replication slots * * NB: none of the routines below should take any notice whether a slot is the * current one or not, that's all handled a layer above. @@ -1140,7 +1140,7 @@ RestoreSlotFromDisk(const char *name) if (cp.magic != SLOT_MAGIC) ereport(PANIC, (errcode_for_file_access(), - errmsg("replication slot file \"%s\" has wrong magic %u instead of %u", + errmsg("replication slot file \"%s\" has wrong magic number: %u instead of %u", path, cp.magic, SLOT_MAGIC))); /* verify version */ @@ -1184,7 +1184,7 @@ RestoreSlotFromDisk(const char *name) if (!EQ_CRC32C(checksum, cp.checksum)) ereport(PANIC, - (errmsg("replication slot file %s: checksum mismatch, is %u, should be %u", + (errmsg("checksum mismatch for replication slot file \"%s\": is %u, should be %u", path, checksum, cp.checksum))); /* diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c index 9a2793f7ec3e9..348c7fe9fce08 100644 --- a/src/backend/replication/slotfuncs.c +++ b/src/backend/replication/slotfuncs.c @@ -268,7 +268,7 @@ pg_get_replication_slots(PG_FUNCTION_ARGS) else nulls[i++] = true; - if (restart_lsn != InvalidTransactionId) + if (restart_lsn != InvalidXLogRecPtr) values[i++] = LSNGetDatum(restart_lsn); else nulls[i++] = true; diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index eb1b89b9c3205..0fc57105476cd 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -299,6 +299,7 @@ IdentifySystem(void) char xpos[MAXFNAMELEN]; XLogRecPtr logptr; char *dbname = NULL; + Size len; /* * Reply with a result set with one row, four columns. First col is system @@ -380,21 +381,32 @@ IdentifySystem(void) /* Send a DataRow message */ pq_beginmessage(&buf, 'D'); pq_sendint(&buf, 4, 2); /* # of columns */ - pq_sendint(&buf, strlen(sysid), 4); /* col1 len */ - pq_sendbytes(&buf, (char *) &sysid, strlen(sysid)); - pq_sendint(&buf, strlen(tli), 4); /* col2 len */ - pq_sendbytes(&buf, (char *) tli, strlen(tli)); - pq_sendint(&buf, strlen(xpos), 4); /* col3 len */ - pq_sendbytes(&buf, (char *) xpos, strlen(xpos)); - /* send NULL if not connected to a database */ + + /* column 1: system identifier */ + len = strlen(sysid); + pq_sendint(&buf, len, 4); + pq_sendbytes(&buf, (char *) &sysid, len); + + /* column 2: timeline */ + len = strlen(tli); + pq_sendint(&buf, len, 4); + pq_sendbytes(&buf, (char *) tli, len); + + /* column 3: xlog position */ + len = strlen(xpos); + pq_sendint(&buf, len, 4); + pq_sendbytes(&buf, (char *) xpos, len); + + /* column 4: database name, or NULL if none */ if (dbname) { - pq_sendint(&buf, strlen(dbname), 4); /* col4 len */ - pq_sendbytes(&buf, (char *) dbname, strlen(dbname)); + len = strlen(dbname); + pq_sendint(&buf, len, 4); + pq_sendbytes(&buf, (char *) dbname, len); } else { - pq_sendint(&buf, -1, 4); /* col4 len, NULL */ + pq_sendint(&buf, -1, 4); } pq_endmessage(&buf); @@ -413,6 +425,7 @@ SendTimeLineHistory(TimeLineHistoryCmd *cmd) int fd; off_t histfilelen; off_t bytesleft; + Size len; /* * Reply with a result set with one row, and two columns. The first col is @@ -448,8 +461,9 @@ SendTimeLineHistory(TimeLineHistoryCmd *cmd) /* Send a DataRow message */ pq_beginmessage(&buf, 'D'); pq_sendint(&buf, 2, 2); /* # of columns */ - pq_sendint(&buf, strlen(histfname), 4); /* col1 len */ - pq_sendbytes(&buf, histfname, strlen(histfname)); + len = strlen(histfname); + pq_sendint(&buf, len, 4); /* col1 len */ + pq_sendbytes(&buf, histfname, len); fd = OpenTransientFile(path, O_RDONLY | PG_BINARY, 0666); if (fd < 0) @@ -675,6 +689,7 @@ StartReplication(StartReplicationCmd *cmd) { char tli_str[11]; char startpos_str[8 + 1 + 8 + 1]; + Size len; snprintf(tli_str, sizeof(tli_str), "%u", sendTimeLineNextTLI); snprintf(startpos_str, sizeof(startpos_str), "%X/%X", @@ -711,11 +726,13 @@ StartReplication(StartReplicationCmd *cmd) pq_beginmessage(&buf, 'D'); pq_sendint(&buf, 2, 2); /* number of columns */ - pq_sendint(&buf, strlen(tli_str), 4); /* length */ - pq_sendbytes(&buf, tli_str, strlen(tli_str)); + len = strlen(tli_str); + pq_sendint(&buf, len, 4); /* length */ + pq_sendbytes(&buf, tli_str, len); - pq_sendint(&buf, strlen(startpos_str), 4); /* length */ - pq_sendbytes(&buf, startpos_str, strlen(startpos_str)); + len = strlen(startpos_str); + pq_sendint(&buf, len, 4); /* length */ + pq_sendbytes(&buf, startpos_str, len); pq_endmessage(&buf); } @@ -763,10 +780,10 @@ logical_read_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, int req static void CreateReplicationSlot(CreateReplicationSlotCmd *cmd) { - const char *slot_name; const char *snapshot_name = NULL; char xpos[MAXFNAMELEN]; StringInfoData buf; + Size len; Assert(!MyReplicationSlot); @@ -792,14 +809,11 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd) initStringInfo(&output_message); - slot_name = NameStr(MyReplicationSlot->data.name); - if (cmd->kind == REPLICATION_KIND_LOGICAL) { LogicalDecodingContext *ctx; - ctx = CreateInitDecodingContext( - cmd->plugin, NIL, + ctx = CreateInitDecodingContext(cmd->plugin, NIL, logical_read_xlog_page, WalSndPrepareWrite, WalSndWriteData); @@ -827,7 +841,6 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd) ReplicationSlotPersist(); } - slot_name = NameStr(MyReplicationSlot->data.name); snprintf(xpos, sizeof(xpos), "%X/%X", (uint32) (MyReplicationSlot->data.confirmed_flush >> 32), (uint32) MyReplicationSlot->data.confirmed_flush); @@ -878,30 +891,34 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd) pq_sendint(&buf, 4, 2); /* # of columns */ /* slot_name */ - pq_sendint(&buf, strlen(slot_name), 4); /* col1 len */ - pq_sendbytes(&buf, slot_name, strlen(slot_name)); + len = strlen(NameStr(MyReplicationSlot->data.name)); + pq_sendint(&buf, len, 4); /* col1 len */ + pq_sendbytes(&buf, NameStr(MyReplicationSlot->data.name), len); /* consistent wal location */ - pq_sendint(&buf, strlen(xpos), 4); /* col2 len */ - pq_sendbytes(&buf, xpos, strlen(xpos)); + len = strlen(xpos); + pq_sendint(&buf, len, 4); + pq_sendbytes(&buf, xpos, len); - /* snapshot name */ + /* snapshot name, or NULL if none */ if (snapshot_name != NULL) { - pq_sendint(&buf, strlen(snapshot_name), 4); /* col3 len */ - pq_sendbytes(&buf, snapshot_name, strlen(snapshot_name)); + len = strlen(snapshot_name); + pq_sendint(&buf, len, 4); + pq_sendbytes(&buf, snapshot_name, len); } else - pq_sendint(&buf, -1, 4); /* col3 len, NULL */ + pq_sendint(&buf, -1, 4); - /* plugin */ + /* plugin, or NULL if none */ if (cmd->plugin != NULL) { - pq_sendint(&buf, strlen(cmd->plugin), 4); /* col4 len */ - pq_sendbytes(&buf, cmd->plugin, strlen(cmd->plugin)); + len = strlen(cmd->plugin); + pq_sendint(&buf, len, 4); + pq_sendbytes(&buf, cmd->plugin, len); } else - pq_sendint(&buf, -1, 4); /* col4 len, NULL */ + pq_sendint(&buf, -1, 4); pq_endmessage(&buf); diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index a88d73e15f2a2..39c83a605ca10 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -27,6 +27,7 @@ #include "catalog/objectaccess.h" #include "catalog/pg_rewrite.h" #include "catalog/storage.h" +#include "commands/policy.h" #include "miscadmin.h" #include "nodes/nodeFuncs.h" #include "parser/parse_utilcmd.h" @@ -410,11 +411,12 @@ DefineQueryRewrite(char *rulename, * * If so, check that the relation is empty because the storage for the * relation is going to be deleted. Also insist that the rel not have - * any triggers, indexes, or child tables. (Note: these tests are too - * strict, because they will reject relations that once had such but - * don't anymore. But we don't really care, because this whole - * business of converting relations to views is just a kluge to allow - * dump/reload of views that participate in circular dependencies.) + * any triggers, indexes, child tables, policies, or RLS enabled. + * (Note: these tests are too strict, because they will reject + * relations that once had such but don't anymore. But we don't + * really care, because this whole business of converting relations + * to views is just a kluge to allow dump/reload of views that + * participate in circular dependencies.) */ if (event_relation->rd_rel->relkind != RELKIND_VIEW && event_relation->rd_rel->relkind != RELKIND_MATVIEW) @@ -451,6 +453,18 @@ DefineQueryRewrite(char *rulename, errmsg("could not convert table \"%s\" to a view because it has child tables", RelationGetRelationName(event_relation)))); + if (event_relation->rd_rel->relrowsecurity) + ereport(ERROR, + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("could not convert table \"%s\" to a view because it has row security enabled", + RelationGetRelationName(event_relation)))); + + if (relation_has_policies(event_relation)) + ereport(ERROR, + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("could not convert table \"%s\" to a view because it has row security policies", + RelationGetRelationName(event_relation)))); + RelisBecomingView = true; } } diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index bbd6b77c5eab6..903cf59f9df5e 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -418,6 +418,10 @@ rewriteRuleAction(Query *parsetree, switch (rte->rtekind) { + case RTE_RELATION: + sub_action->hasSubLinks = + checkExprHasSubLink((Node *) rte->tablesample); + break; case RTE_FUNCTION: sub_action->hasSubLinks = checkExprHasSubLink((Node *) rte->functions); @@ -1775,14 +1779,16 @@ fireRIRrules(Query *parsetree, List *activeRIRs, bool forUpdatePushedDown) /* * Fetch any new security quals that must be applied to this RTE. */ - get_row_security_policies(parsetree, parsetree->commandType, rte, - rt_index, &securityQuals, &withCheckOptions, + get_row_security_policies(parsetree, rte, rt_index, + &securityQuals, &withCheckOptions, &hasRowSecurity, &hasSubLinks); if (securityQuals != NIL || withCheckOptions != NIL) { if (hasSubLinks) { + acquireLocksOnSubLinks_context context; + /* * Recursively process the new quals, checking for infinite * recursion. @@ -1795,6 +1801,23 @@ fireRIRrules(Query *parsetree, List *activeRIRs, bool forUpdatePushedDown) activeRIRs = lcons_oid(RelationGetRelid(rel), activeRIRs); + /* + * get_row_security_policies just passed back securityQuals + * and/or withCheckOptions, and there were SubLinks, make sure + * we lock any relations which are referenced. + * + * These locks would normally be acquired by the parser, but + * securityQuals and withCheckOptions are added post-parsing. + */ + context.for_execute = true; + (void) acquireLocksOnSubLinks((Node *) securityQuals, &context); + (void) acquireLocksOnSubLinks((Node *) withCheckOptions, + &context); + + /* + * Now that we have the locks on anything added by + * get_row_security_policies, fire any RIR rules for them. + */ expression_tree_walker((Node *) securityQuals, fireRIRonSubLink, (void *) activeRIRs); @@ -2734,6 +2757,21 @@ rewriteTargetView(Query *parsetree, Relation view) heap_close(base_rel, NoLock); + /* + * If the view query contains any sublink subqueries then we need to also + * acquire locks on any relations they refer to. We know that there won't + * be any subqueries in the range table or CTEs, so we can skip those, as + * in AcquireRewriteLocks. + */ + if (viewquery->hasSubLinks) + { + acquireLocksOnSubLinks_context context; + + context.for_execute = true; + query_tree_walker(viewquery, acquireLocksOnSubLinks, &context, + QTW_IGNORE_RC_SUBQUERIES); + } + /* * Create a new target RTE describing the base relation, and add it to the * outer query's rangetable. (What's happening in the next few steps is @@ -2981,6 +3019,7 @@ rewriteTargetView(Query *parsetree, Relation view) wco = makeNode(WithCheckOption); wco->kind = WCO_VIEW_CHECK; wco->relname = pstrdup(RelationGetRelationName(view)); + wco->polname = NULL; wco->qual = NULL; wco->cascaded = cascaded; diff --git a/src/backend/rewrite/rowsecurity.c b/src/backend/rewrite/rowsecurity.c index aaf0061164b29..eebc493849f8e 100644 --- a/src/backend/rewrite/rowsecurity.c +++ b/src/backend/rewrite/rowsecurity.c @@ -13,11 +13,12 @@ * Any part of the system which is returning records back to the user, or * which is accepting records from the user to add to a table, needs to * consider the policies associated with the table (if any). For normal - * queries, this is handled by calling prepend_row_security_policies() during - * rewrite, which looks at each RTE and adds the expressions defined by the - * policies to the securityQuals list for the RTE. For queries which modify - * the relation, any WITH CHECK policies are added to the list of - * WithCheckOptions for the Query and checked against each row which is being + * queries, this is handled by calling get_row_security_policies() during + * rewrite, for each RTE in the query. This returns the expressions defined + * by the table's policies as a list that is prepended to the securityQuals + * list for the RTE. For queries which modify the table, any WITH CHECK + * clauses from the table's policies are also returned and prepended to the + * list of WithCheckOptions for the Query to check each row that is being * added to the table. Other parts of the system (eg: COPY) simply construct * a normal query and use that, if RLS is to be applied. * @@ -56,13 +57,29 @@ #include "utils/syscache.h" #include "tcop/utility.h" -static List *pull_row_security_policies(CmdType cmd, Relation relation, - Oid user_id); -static void process_policies(Query *root, List *policies, int rt_index, - Expr **final_qual, - Expr **final_with_check_qual, - bool *hassublinks, - BoolExprType boolop); +static void get_policies_for_relation(Relation relation, + CmdType cmd, Oid user_id, + List **permissive_policies, + List **restrictive_policies); + +static List *sort_policies_by_name(List *policies); + +static int row_security_policy_cmp(const void *a, const void *b); + +static void add_security_quals(int rt_index, + List *permissive_policies, + List *restrictive_policies, + List **securityQuals, + bool *hasSubLinks); + +static void add_with_check_options(Relation rel, + int rt_index, + WCOKind kind, + List *permissive_policies, + List *restrictive_policies, + List **withCheckOptions, + bool *hasSubLinks); + static bool check_role_for_policy(ArrayType *policy_roles, Oid user_id); /* @@ -73,43 +90,29 @@ static bool check_role_for_policy(ArrayType *policy_roles, Oid user_id); * * row_security_policy_hook_restrictive can be used to add policies which * are enforced, regardless of other policies (they are "AND"d). - * - * See below where the hook is called in prepend_row_security_policies for - * insight into how to use this hook. */ row_security_policy_hook_type row_security_policy_hook_permissive = NULL; row_security_policy_hook_type row_security_policy_hook_restrictive = NULL; /* - * Get any row security quals and check quals that should be applied to the - * specified RTE. + * Get any row security quals and WithCheckOption checks that should be + * applied to the specified RTE. * * In addition, hasRowSecurity is set to true if row level security is enabled * (even if this RTE doesn't have any row security quals), and hasSubLinks is * set to true if any of the quals returned contain sublinks. */ void -get_row_security_policies(Query *root, CmdType commandType, RangeTblEntry *rte, - int rt_index, List **securityQuals, - List **withCheckOptions, bool *hasRowSecurity, - bool *hasSubLinks) +get_row_security_policies(Query *root, RangeTblEntry *rte, int rt_index, + List **securityQuals, List **withCheckOptions, + bool *hasRowSecurity, bool *hasSubLinks) { - Expr *rowsec_expr = NULL; - Expr *rowsec_with_check_expr = NULL; - Expr *hook_expr_restrictive = NULL; - Expr *hook_with_check_expr_restrictive = NULL; - Expr *hook_expr_permissive = NULL; - Expr *hook_with_check_expr_permissive = NULL; - - List *rowsec_policies; - List *hook_policies_restrictive = NIL; - List *hook_policies_permissive = NIL; - - Relation rel; Oid user_id; - int sec_context; int rls_status; - bool defaultDeny = false; + Relation rel; + CmdType commandType; + List *permissive_policies; + List *restrictive_policies; /* Defaults for the return values */ *securityQuals = NIL; @@ -117,22 +120,13 @@ get_row_security_policies(Query *root, CmdType commandType, RangeTblEntry *rte, *hasRowSecurity = false; *hasSubLinks = false; - /* This is just to get the security context */ - GetUserIdAndSecContext(&user_id, &sec_context); + /* If this is not a normal relation, just return immediately */ + if (rte->relkind != RELKIND_RELATION) + return; /* Switch to checkAsUser if it's set */ user_id = rte->checkAsUser ? rte->checkAsUser : GetUserId(); - /* - * If this is not a normal relation, or we have been told to explicitly - * skip RLS (perhaps because this is an FK check) then just return - * immediately. - */ - if (rte->relid < FirstNormalObjectId - || rte->relkind != RELKIND_RELATION - || (sec_context & SECURITY_ROW_LEVEL_DISABLED)) - return; - /* Determine the state of RLS for this, pass checkAsUser explicitly */ rls_status = check_enable_rls(rte->relid, rte->checkAsUser, false); @@ -157,251 +151,208 @@ get_row_security_policies(Query *root, CmdType commandType, RangeTblEntry *rte, return; } - /* Grab the built-in policies which should be applied to this relation. */ - rel = heap_open(rte->relid, NoLock); - - rowsec_policies = pull_row_security_policies(commandType, rel, - user_id); - /* - * Check if this is only the default-deny policy. + * RLS is enabled for this relation. * - * Normally, if the table has row security enabled but there are no - * policies, we use a default-deny policy and not allow anything. However, - * when an extension uses the hook to add their own policies, we don't - * want to include the default deny policy or there won't be any way for a - * user to use an extension exclusively for the policies to be used. + * Get the security policies that should be applied, based on the command + * type. Note that if this isn't the target relation, we actually want + * the relation's SELECT policies, regardless of the query command type, + * for example in UPDATE t1 ... FROM t2 we need to apply t1's UPDATE + * policies and t2's SELECT policies. */ - if (((RowSecurityPolicy *) linitial(rowsec_policies))->policy_id - == InvalidOid) - defaultDeny = true; + rel = heap_open(rte->relid, NoLock); - /* Now that we have our policies, build the expressions from them. */ - process_policies(root, rowsec_policies, rt_index, &rowsec_expr, - &rowsec_with_check_expr, hasSubLinks, OR_EXPR); + commandType = rt_index == root->resultRelation ? + root->commandType : CMD_SELECT; /* - * Also, allow extensions to add their own policies. + * In some cases, we need to apply USING policies (which control the + * visibility of records) associated with multiple command types (see + * specific cases below). * - * extensions can add either permissive or restrictive policies. + * When considering the order in which to apply these USING policies, + * we prefer to apply higher privileged policies, those which allow the + * user to lock records (UPDATE and DELETE), first, followed by policies + * which don't (SELECT). * - * Note that, as with the internal policies, if multiple policies are - * returned then they will be combined into a single expression with all - * of them OR'd (for permissive) or AND'd (for restrictive) together. + * Note that the optimizer is free to push down and reorder quals which + * use leakproof functions. * - * If only a USING policy is returned by the extension then it will be - * used for WITH CHECK as well, similar to how internal policies are - * handled. + * In all cases, if there are no policy clauses allowing access to rows in + * the table for the specific type of operation, then a single always-false + * clause (a default-deny policy) will be added (see add_security_quals). + */ + + /* + * For a SELECT, if UPDATE privileges are required (eg: the user has + * specified FOR [KEY] UPDATE/SHARE), then add the UPDATE USING quals first. * - * The only caveat to this is that if there are NO internal policies - * defined, there ARE policies returned by the extension, and RLS is - * enabled on the table, then we will ignore the internally-generated - * default-deny policy and use only the policies returned by the - * extension. + * This way, we filter out any records from the SELECT FOR SHARE/UPDATE + * which the user does not have access to via the UPDATE USING policies, + * similar to how we require normal UPDATE rights for these queries. */ - if (row_security_policy_hook_restrictive) + if (commandType == CMD_SELECT && rte->requiredPerms & ACL_UPDATE) { - hook_policies_restrictive = (*row_security_policy_hook_restrictive) (commandType, rel); - - /* Build the expression from any policies returned. */ - if (hook_policies_restrictive != NIL) - process_policies(root, hook_policies_restrictive, rt_index, - &hook_expr_restrictive, - &hook_with_check_expr_restrictive, - hasSubLinks, - AND_EXPR); + List *update_permissive_policies; + List *update_restrictive_policies; + + get_policies_for_relation(rel, CMD_UPDATE, user_id, + &update_permissive_policies, + &update_restrictive_policies); + + add_security_quals(rt_index, + update_permissive_policies, + update_restrictive_policies, + securityQuals, + hasSubLinks); } - if (row_security_policy_hook_permissive) - { - hook_policies_permissive = (*row_security_policy_hook_permissive) (commandType, rel); - - /* Build the expression from any policies returned. */ - if (hook_policies_permissive != NIL) - process_policies(root, hook_policies_permissive, rt_index, - &hook_expr_permissive, - &hook_with_check_expr_permissive, hasSubLinks, - OR_EXPR); - } + /* + * For SELECT, UPDATE and DELETE, add security quals to enforce the USING + * policies. These security quals control access to existing table rows. + * Restrictive policies are "AND"d together, and permissive policies are + * "OR"d together. + */ + + get_policies_for_relation(rel, commandType, user_id, &permissive_policies, + &restrictive_policies); + + if (commandType == CMD_SELECT || + commandType == CMD_UPDATE || + commandType == CMD_DELETE) + add_security_quals(rt_index, + permissive_policies, + restrictive_policies, + securityQuals, + hasSubLinks); /* - * If the only built-in policy is the default-deny one, and hook policies - * exist, then use the hook policies only and do not apply the - * default-deny policy. Otherwise, we will apply both sets below. + * Similar to above, during an UPDATE or DELETE, if SELECT rights are also + * required (eg: when a RETURNING clause exists, or the user has provided + * a WHERE clause which involves columns from the relation), we collect up + * CMD_SELECT policies and add them via add_security_quals first. + * + * This way, we filter out any records which are not visible through an ALL + * or SELECT USING policy. */ - if (defaultDeny && - (hook_policies_restrictive != NIL || hook_policies_permissive != NIL)) + if ((commandType == CMD_UPDATE || commandType == CMD_DELETE) && + rte->requiredPerms & ACL_SELECT) { - rowsec_expr = NULL; - rowsec_with_check_expr = NULL; + List *select_permissive_policies; + List *select_restrictive_policies; + + get_policies_for_relation(rel, CMD_SELECT, user_id, + &select_permissive_policies, + &select_restrictive_policies); + + add_security_quals(rt_index, + select_permissive_policies, + select_restrictive_policies, + securityQuals, + hasSubLinks); } /* - * For INSERT or UPDATE, we need to add the WITH CHECK quals to Query's - * withCheckOptions to verify that any new records pass the WITH CHECK - * policy (this will be a copy of the USING policy, if no explicit WITH - * CHECK policy exists). + * For INSERT and UPDATE, add withCheckOptions to verify that any new + * records added are consistent with the security policies. This will use + * each policy's WITH CHECK clause, or its USING clause if no explicit + * WITH CHECK clause is defined. */ if (commandType == CMD_INSERT || commandType == CMD_UPDATE) { - /* - * WITH CHECK OPTIONS wants a WCO node which wraps each Expr, so - * create them as necessary. - */ + /* This should be the target relation */ + Assert(rt_index == root->resultRelation); - /* - * Handle any restrictive policies first. - * - * They can simply be added. - */ - if (hook_with_check_expr_restrictive) - { - WithCheckOption *wco; - - wco = (WithCheckOption *) makeNode(WithCheckOption); - wco->kind = commandType == CMD_INSERT ? WCO_RLS_INSERT_CHECK : - WCO_RLS_UPDATE_CHECK; - wco->relname = pstrdup(RelationGetRelationName(rel)); - wco->qual = (Node *) hook_with_check_expr_restrictive; - wco->cascaded = false; - *withCheckOptions = lappend(*withCheckOptions, wco); - } + add_with_check_options(rel, rt_index, + commandType == CMD_INSERT ? + WCO_RLS_INSERT_CHECK : WCO_RLS_UPDATE_CHECK, + permissive_policies, + restrictive_policies, + withCheckOptions, + hasSubLinks); /* - * Handle built-in policies, if there are no permissive policies from - * the hook. + * Get and add ALL/SELECT policies, if SELECT rights are required + * for this relation (eg: when RETURNING is used). These are added as + * WCO policies rather than security quals to ensure that an error is + * raised if a policy is violated; otherwise, we might end up silently + * dropping rows to be added. */ - if (rowsec_with_check_expr && !hook_with_check_expr_permissive) - { - WithCheckOption *wco; - - wco = (WithCheckOption *) makeNode(WithCheckOption); - wco->kind = commandType == CMD_INSERT ? WCO_RLS_INSERT_CHECK : - WCO_RLS_UPDATE_CHECK; - wco->relname = pstrdup(RelationGetRelationName(rel)); - wco->qual = (Node *) rowsec_with_check_expr; - wco->cascaded = false; - *withCheckOptions = lappend(*withCheckOptions, wco); - } - /* Handle the hook policies, if there are no built-in ones. */ - else if (!rowsec_with_check_expr && hook_with_check_expr_permissive) - { - WithCheckOption *wco; - - wco = (WithCheckOption *) makeNode(WithCheckOption); - wco->kind = commandType == CMD_INSERT ? WCO_RLS_INSERT_CHECK : - WCO_RLS_UPDATE_CHECK; - wco->relname = pstrdup(RelationGetRelationName(rel)); - wco->qual = (Node *) hook_with_check_expr_permissive; - wco->cascaded = false; - *withCheckOptions = lappend(*withCheckOptions, wco); - } - /* Handle the case where there are both. */ - else if (rowsec_with_check_expr && hook_with_check_expr_permissive) + if (rte->requiredPerms & ACL_SELECT) { - WithCheckOption *wco; - List *combined_quals = NIL; - Expr *combined_qual_eval; - - combined_quals = lcons(copyObject(rowsec_with_check_expr), - combined_quals); - - combined_quals = lcons(copyObject(hook_with_check_expr_permissive), - combined_quals); - - combined_qual_eval = makeBoolExpr(OR_EXPR, combined_quals, -1); - - wco = (WithCheckOption *) makeNode(WithCheckOption); - wco->kind = commandType == CMD_INSERT ? WCO_RLS_INSERT_CHECK : - WCO_RLS_UPDATE_CHECK; - wco->relname = pstrdup(RelationGetRelationName(rel)); - wco->qual = (Node *) combined_qual_eval; - wco->cascaded = false; - *withCheckOptions = lappend(*withCheckOptions, wco); + List *select_permissive_policies = NIL; + List *select_restrictive_policies = NIL; + + get_policies_for_relation(rel, CMD_SELECT, user_id, + &select_permissive_policies, + &select_restrictive_policies); + add_with_check_options(rel, rt_index, + commandType == CMD_INSERT ? + WCO_RLS_INSERT_CHECK : WCO_RLS_UPDATE_CHECK, + select_permissive_policies, + select_restrictive_policies, + withCheckOptions, + hasSubLinks); } /* - * ON CONFLICT DO UPDATE has an RTE that is subject to both INSERT and - * UPDATE RLS enforcement. Those are enforced (as a special, distinct - * kind of WCO) on the target tuple. - * - * Make a second, recursive pass over the RTE for this, gathering - * UPDATE-applicable RLS checks/WCOs, and gathering and converting - * UPDATE-applicable security quals into WCO_RLS_CONFLICT_CHECK RLS - * checks/WCOs. Finally, these distinct kinds of RLS checks/WCOs are - * concatenated with our own INSERT-applicable list. + * For INSERT ... ON CONFLICT DO UPDATE we need additional policy + * checks for the UPDATE which may be applied to the same RTE. */ - if (root->onConflict && root->onConflict->action == ONCONFLICT_UPDATE && - commandType == CMD_INSERT) + if (commandType == CMD_INSERT && + root->onConflict && root->onConflict->action == ONCONFLICT_UPDATE) { - List *conflictSecurityQuals = NIL; - List *conflictWCOs = NIL; - ListCell *item; - bool conflictHasRowSecurity = false; - bool conflictHasSublinks = false; - - /* Assume that RTE is target resultRelation */ - get_row_security_policies(root, CMD_UPDATE, rte, rt_index, - &conflictSecurityQuals, &conflictWCOs, - &conflictHasRowSecurity, - &conflictHasSublinks); - - if (conflictHasRowSecurity) - *hasRowSecurity = true; - if (conflictHasSublinks) - *hasSubLinks = true; + List *conflict_permissive_policies; + List *conflict_restrictive_policies; + + /* Get the policies that apply to the auxiliary UPDATE */ + get_policies_for_relation(rel, CMD_UPDATE, user_id, + &conflict_permissive_policies, + &conflict_restrictive_policies); /* - * Append WITH CHECK OPTIONs/RLS checks, which should not conflict - * between this INSERT and the auxiliary UPDATE + * Enforce the USING clauses of the UPDATE policies using WCOs + * rather than security quals. This ensures that an error is + * raised if the conflicting row cannot be updated due to RLS, + * rather than the change being silently dropped. */ - *withCheckOptions = list_concat(*withCheckOptions, - conflictWCOs); + add_with_check_options(rel, rt_index, + WCO_RLS_CONFLICT_CHECK, + conflict_permissive_policies, + conflict_restrictive_policies, + withCheckOptions, + hasSubLinks); - foreach(item, conflictSecurityQuals) + /* + * Get and add ALL/SELECT policies, as WCO_RLS_CONFLICT_CHECK + * WCOs to ensure they are considered when taking the UPDATE + * path of an INSERT .. ON CONFLICT DO UPDATE, if SELECT + * rights are required for this relation, also as WCO policies, + * again, to avoid silently dropping data. See above. + */ + if (rte->requiredPerms & ACL_SELECT) { - Expr *conflict_rowsec_expr = (Expr *) lfirst(item); - WithCheckOption *wco; - - wco = (WithCheckOption *) makeNode(WithCheckOption); - - wco->kind = WCO_RLS_CONFLICT_CHECK; - wco->relname = pstrdup(RelationGetRelationName(rel)); - wco->qual = (Node *) copyObject(conflict_rowsec_expr); - wco->cascaded = false; - *withCheckOptions = lappend(*withCheckOptions, wco); + List *conflict_select_permissive_policies = NIL; + List *conflict_select_restrictive_policies = NIL; + + get_policies_for_relation(rel, CMD_SELECT, user_id, + &conflict_select_permissive_policies, + &conflict_select_restrictive_policies); + add_with_check_options(rel, rt_index, + WCO_RLS_CONFLICT_CHECK, + conflict_select_permissive_policies, + conflict_select_restrictive_policies, + withCheckOptions, + hasSubLinks); } - } - } - /* For SELECT, UPDATE, and DELETE, set the security quals */ - if (commandType == CMD_SELECT - || commandType == CMD_UPDATE - || commandType == CMD_DELETE) - { - /* restrictive policies can simply be added to the list first */ - if (hook_expr_restrictive) - *securityQuals = lappend(*securityQuals, hook_expr_restrictive); - - /* If we only have internal permissive, then just add those */ - if (rowsec_expr && !hook_expr_permissive) - *securityQuals = lappend(*securityQuals, rowsec_expr); - /* .. and if we have only permissive policies from the hook */ - else if (!rowsec_expr && hook_expr_permissive) - *securityQuals = lappend(*securityQuals, hook_expr_permissive); - /* if we have both, we have to combine them with an OR */ - else if (rowsec_expr && hook_expr_permissive) - { - List *combined_quals = NIL; - Expr *combined_qual_eval; - - combined_quals = lcons(copyObject(rowsec_expr), combined_quals); - combined_quals = lcons(copyObject(hook_expr_permissive), - combined_quals); - - combined_qual_eval = makeBoolExpr(OR_EXPR, combined_quals, -1); - - *securityQuals = lappend(*securityQuals, combined_qual_eval); + /* Enforce the WITH CHECK clauses of the UPDATE policies */ + add_with_check_options(rel, rt_index, + WCO_RLS_UPDATE_CHECK, + conflict_permissive_policies, + conflict_restrictive_policies, + withCheckOptions, + hasSubLinks); } } @@ -417,199 +368,385 @@ get_row_security_policies(Query *root, CmdType commandType, RangeTblEntry *rte, } /* - * pull_row_security_policies + * get_policies_for_relation * - * Returns the list of policies to be added for this relation, based on the - * type of command and the roles to which it applies, from the relation cache. + * Returns lists of permissive and restrictive policies to be applied to the + * specified relation, based on the command type and role. * + * This includes any policies added by extensions. */ -static List * -pull_row_security_policies(CmdType cmd, Relation relation, Oid user_id) +static void +get_policies_for_relation(Relation relation, CmdType cmd, Oid user_id, + List **permissive_policies, + List **restrictive_policies) { - List *policies = NIL; ListCell *item; + *permissive_policies = NIL; + *restrictive_policies = NIL; + /* - * Row security is enabled for the relation and the row security GUC is - * either 'on' or 'force' here, so find the policies to apply to the - * table. There must always be at least one policy defined (may be the - * simple 'default-deny' policy, if none are explicitly defined on the - * table). + * First find all internal policies for the relation. CREATE POLICY does + * not currently support defining restrictive policies, so for now all + * internal policies are permissive. */ foreach(item, relation->rd_rsdesc->policies) { - RowSecurityPolicy *policy = (RowSecurityPolicy *) lfirst(item); + bool cmd_matches = false; + RowSecurityPolicy *policy = (RowSecurityPolicy *) lfirst(item); /* Always add ALL policies, if they exist. */ - if (policy->polcmd == '*' && - check_role_for_policy(policy->roles, user_id)) - policies = lcons(policy, policies); - - /* Add relevant command-specific policies to the list. */ - switch (cmd) + if (policy->polcmd == '*') + cmd_matches = true; + else { - case CMD_SELECT: - if (policy->polcmd == ACL_SELECT_CHR - && check_role_for_policy(policy->roles, user_id)) - policies = lcons(policy, policies); - break; - case CMD_INSERT: - /* If INSERT then only need to add the WITH CHECK qual */ - if (policy->polcmd == ACL_INSERT_CHR - && check_role_for_policy(policy->roles, user_id)) - policies = lcons(policy, policies); - break; - case CMD_UPDATE: - if (policy->polcmd == ACL_UPDATE_CHR - && check_role_for_policy(policy->roles, user_id)) - policies = lcons(policy, policies); - break; - case CMD_DELETE: - if (policy->polcmd == ACL_DELETE_CHR - && check_role_for_policy(policy->roles, user_id)) - policies = lcons(policy, policies); - break; - default: - elog(ERROR, "unrecognized policy command type %d", (int) cmd); - break; + /* Check whether the policy applies to the specified command type */ + switch (cmd) + { + case CMD_SELECT: + if (policy->polcmd == ACL_SELECT_CHR) + cmd_matches = true; + break; + case CMD_INSERT: + if (policy->polcmd == ACL_INSERT_CHR) + cmd_matches = true; + break; + case CMD_UPDATE: + if (policy->polcmd == ACL_UPDATE_CHR) + cmd_matches = true; + break; + case CMD_DELETE: + if (policy->polcmd == ACL_DELETE_CHR) + cmd_matches = true; + break; + default: + elog(ERROR, "unrecognized policy command type %d", + (int) cmd); + break; + } } + + /* + * Add this policy to the list of permissive policies if it + * applies to the specified role. + */ + if (cmd_matches && check_role_for_policy(policy->roles, user_id)) + *permissive_policies = lappend(*permissive_policies, policy); } /* - * There should always be a policy applied. If there are none found then - * create a simply defauly-deny policy (might be that policies exist but - * that none of them apply to the role which is querying the table). + * Then add any permissive or restrictive policies defined by extensions. + * These are simply appended to the lists of internal policies, if they + * apply to the specified role. */ - if (policies == NIL) + if (row_security_policy_hook_restrictive) { - RowSecurityPolicy *policy = NULL; - Datum role; - - role = ObjectIdGetDatum(ACL_ID_PUBLIC); - - policy = palloc0(sizeof(RowSecurityPolicy)); - policy->policy_name = pstrdup("default-deny policy"); - policy->policy_id = InvalidOid; - policy->polcmd = '*'; - policy->roles = construct_array(&role, 1, OIDOID, sizeof(Oid), true, - 'i'); - policy->qual = (Expr *) makeConst(BOOLOID, -1, InvalidOid, - sizeof(bool), BoolGetDatum(false), - false, true); - policy->with_check_qual = copyObject(policy->qual); - policy->hassublinks = false; - - policies = list_make1(policy); + List *hook_policies = + (*row_security_policy_hook_restrictive) (cmd, relation); + + /* + * We sort restrictive policies by name so that any WCOs they generate + * are checked in a well-defined order. + */ + hook_policies = sort_policies_by_name(hook_policies); + + foreach(item, hook_policies) + { + RowSecurityPolicy *policy = (RowSecurityPolicy *) lfirst(item); + + if (check_role_for_policy(policy->roles, user_id)) + *restrictive_policies = lappend(*restrictive_policies, policy); + } } - Assert(policies != NIL); + if (row_security_policy_hook_permissive) + { + List *hook_policies = + (*row_security_policy_hook_permissive) (cmd, relation); + + foreach(item, hook_policies) + { + RowSecurityPolicy *policy = (RowSecurityPolicy *) lfirst(item); + + if (check_role_for_policy(policy->roles, user_id)) + *permissive_policies = lappend(*permissive_policies, policy); + } + } +} + +/* + * sort_policies_by_name + * + * This is only used for restrictive policies, ensuring that any + * WithCheckOptions they generate are applied in a well-defined order. + * This is not necessary for permissive policies, since they are all "OR"d + * together into a single WithCheckOption check. + */ +static List * +sort_policies_by_name(List *policies) +{ + int npol = list_length(policies); + RowSecurityPolicy *pols; + ListCell *item; + int ii = 0; + + if (npol <= 1) + return policies; + + pols = (RowSecurityPolicy *) palloc(sizeof(RowSecurityPolicy) * npol); + + foreach(item, policies) + { + RowSecurityPolicy *policy = (RowSecurityPolicy *) lfirst(item); + pols[ii++] = *policy; + } + + qsort(pols, npol, sizeof(RowSecurityPolicy), row_security_policy_cmp); + + policies = NIL; + for (ii = 0; ii < npol; ii++) + policies = lappend(policies, &pols[ii]); return policies; } /* - * process_policies + * qsort comparator to sort RowSecurityPolicy entries by name + */ +static int +row_security_policy_cmp(const void *a, const void *b) +{ + const RowSecurityPolicy *pa = (const RowSecurityPolicy *) a; + const RowSecurityPolicy *pb = (const RowSecurityPolicy *) b; + + /* Guard against NULL policy names from extensions */ + if (pa->policy_name == NULL) + return pb->policy_name == NULL ? 0 : 1; + if (pb->policy_name == NULL) + return -1; + + return strcmp(pa->policy_name, pb->policy_name); +} + +/* + * add_security_quals * - * This will step through the policies which are passed in (which would come - * from either the built-in ones created on a table, or from policies provided - * by an extension through the hook provided), work out how to combine them, - * rewrite them as necessary, and produce an Expr for the normal security - * quals and an Expr for the with check quals. + * Add security quals to enforce the specified RLS policies, restricting + * access to existing data in a table. If there are no policies controlling + * access to the table, then all access is prohibited --- i.e., an implicit + * default-deny policy is used. * - * qual_eval, with_check_eval, and hassublinks are output variables + * New security quals are added to securityQuals, and hasSubLinks is set to + * true if any of the quals added contain sublink subqueries. */ static void -process_policies(Query *root, List *policies, int rt_index, Expr **qual_eval, - Expr **with_check_eval, bool *hassublinks, - BoolExprType boolop) +add_security_quals(int rt_index, + List *permissive_policies, + List *restrictive_policies, + List **securityQuals, + bool *hasSubLinks) { ListCell *item; - List *quals = NIL; - List *with_check_quals = NIL; + List *permissive_quals = NIL; + Expr *rowsec_expr; /* - * Extract the USING and WITH CHECK quals from each of the policies and - * add them to our lists. We only want WITH CHECK quals if this RTE is - * the query's result relation. + * First collect up the permissive quals. If we do not find any permissive + * policies then no rows are visible (this is handled below). */ - foreach(item, policies) + foreach(item, permissive_policies) { RowSecurityPolicy *policy = (RowSecurityPolicy *) lfirst(item); if (policy->qual != NULL) - quals = lcons(copyObject(policy->qual), quals); - - if (policy->with_check_qual != NULL && - rt_index == root->resultRelation) - with_check_quals = lcons(copyObject(policy->with_check_qual), - with_check_quals); + { + permissive_quals = lappend(permissive_quals, + copyObject(policy->qual)); + *hasSubLinks |= policy->hassublinks; + } + } + /* + * We must have permissive quals, always, or no rows are visible. + * + * If we do not, then we simply return a single 'false' qual which results + * in no rows being visible. + */ + if (permissive_quals != NIL) + { /* - * For each policy, if there is only a USING clause then copy/use it - * for the WITH CHECK policy also, if this RTE is the query's result - * relation. + * We now know that permissive policies exist, so we can now add + * security quals based on the USING clauses from the restrictive + * policies. Since these need to be "AND"d together, we can + * just add them one at a time. */ - if (policy->qual != NULL && policy->with_check_qual == NULL && - rt_index == root->resultRelation) - with_check_quals = lcons(copyObject(policy->qual), - with_check_quals); + foreach(item, restrictive_policies) + { + RowSecurityPolicy *policy = (RowSecurityPolicy *) lfirst(item); + Expr *qual; + if (policy->qual != NULL) + { + qual = copyObject(policy->qual); + ChangeVarNodes((Node *) qual, 1, rt_index, 0); - if (policy->hassublinks) - *hassublinks = true; + *securityQuals = list_append_unique(*securityQuals, qual); + *hasSubLinks |= policy->hassublinks; + } + } + + /* + * Then add a single security qual "OR"ing together the USING clauses + * from all the permissive policies. + */ + if (list_length(permissive_quals) == 1) + rowsec_expr = (Expr *) linitial(permissive_quals); + else + rowsec_expr = makeBoolExpr(OR_EXPR, permissive_quals, -1); + + ChangeVarNodes((Node *) rowsec_expr, 1, rt_index, 0); + *securityQuals = list_append_unique(*securityQuals, rowsec_expr); } + else + /* + * A permissive policy must exist for rows to be visible at all. + * Therefore, if there were no permissive policies found, return a + * single always-false clause. + */ + *securityQuals = lappend(*securityQuals, + makeConst(BOOLOID, -1, InvalidOid, + sizeof(bool), BoolGetDatum(false), + false, true)); +} + +/* + * add_with_check_options + * + * Add WithCheckOptions of the specified kind to check that new records + * added by an INSERT or UPDATE are consistent with the specified RLS + * policies. Normally new data must satisfy the WITH CHECK clauses from the + * policies. If a policy has no explicit WITH CHECK clause, its USING clause + * is used instead. In the special case of an UPDATE arising from an + * INSERT ... ON CONFLICT DO UPDATE, existing records are first checked using + * a WCO_RLS_CONFLICT_CHECK WithCheckOption, which always uses the USING + * clauses from RLS policies. + * + * New WCOs are added to withCheckOptions, and hasSubLinks is set to true if + * any of the check clauses added contain sublink subqueries. + */ +static void +add_with_check_options(Relation rel, + int rt_index, + WCOKind kind, + List *permissive_policies, + List *restrictive_policies, + List **withCheckOptions, + bool *hasSubLinks) +{ + ListCell *item; + List *permissive_quals = NIL; + +#define QUAL_FOR_WCO(policy) \ + ( kind != WCO_RLS_CONFLICT_CHECK && \ + (policy)->with_check_qual != NULL ? \ + (policy)->with_check_qual : (policy)->qual ) /* - * If we end up without any normal quals (perhaps the only policy matched - * was for INSERT), then create a single all-false one. + * First collect up the permissive policy clauses, similar to + * add_security_quals. */ - if (quals == NIL) - quals = lcons(makeConst(BOOLOID, -1, InvalidOid, sizeof(bool), - BoolGetDatum(false), false, true), quals); + foreach(item, permissive_policies) + { + RowSecurityPolicy *policy = (RowSecurityPolicy *) lfirst(item); + Expr *qual = QUAL_FOR_WCO(policy); + + if (qual != NULL) + { + permissive_quals = lappend(permissive_quals, copyObject(qual)); + *hasSubLinks |= policy->hassublinks; + } + } /* - * Row security quals always have the target table as varno 1, as no joins - * are permitted in row security expressions. We must walk the expression, - * updating any references to varno 1 to the varno the table has in the - * outer query. - * - * We rewrite the expression in-place. + * There must be at least one permissive qual found or no rows are + * allowed to be added. This is the same as in add_security_quals. * - * We must have some quals at this point; the default-deny policy, if - * nothing else. Note that we might not have any WITH CHECK quals- that's - * fine, as this might not be the resultRelation. + * If there are no permissive_quals then we fall through and return a single + * 'false' WCO, preventing all new rows. */ - Assert(quals != NIL); + if (permissive_quals != NIL) + { + /* + * Add a single WithCheckOption for all the permissive policy clauses + * "OR"d together. This check has no policy name, since if the check + * fails it means that no policy granted permission to perform the + * update, rather than any particular policy being violated. + */ + WithCheckOption *wco; - ChangeVarNodes((Node *) quals, 1, rt_index, 0); + wco = (WithCheckOption *) makeNode(WithCheckOption); + wco->kind = kind; + wco->relname = pstrdup(RelationGetRelationName(rel)); + wco->polname = NULL; + wco->cascaded = false; - if (with_check_quals != NIL) - ChangeVarNodes((Node *) with_check_quals, 1, rt_index, 0); + if (list_length(permissive_quals) == 1) + wco->qual = (Node *) linitial(permissive_quals); + else + wco->qual = (Node *) makeBoolExpr(OR_EXPR, permissive_quals, -1); - /* - * If more than one security qual is returned, then they need to be - * combined together. - */ - if (list_length(quals) > 1) - *qual_eval = makeBoolExpr(boolop, quals, -1); - else - *qual_eval = (Expr *) linitial(quals); + ChangeVarNodes(wco->qual, 1, rt_index, 0); - /* - * Similarly, if more than one WITH CHECK qual is returned, then they need - * to be combined together. - * - * with_check_quals is allowed to be NIL here since this might not be the - * resultRelation (see above). - */ - if (list_length(with_check_quals) > 1) - *with_check_eval = makeBoolExpr(boolop, with_check_quals, -1); - else if (with_check_quals != NIL) - *with_check_eval = (Expr *) linitial(with_check_quals); - else - *with_check_eval = NULL; + *withCheckOptions = list_append_unique(*withCheckOptions, wco); - return; + /* + * Now add WithCheckOptions for each of the restrictive policy clauses + * (which will be "AND"d together). We use a separate WithCheckOption + * for each restrictive policy to allow the policy name to be included + * in error reports if the policy is violated. + */ + foreach(item, restrictive_policies) + { + RowSecurityPolicy *policy = (RowSecurityPolicy *) lfirst(item); + Expr *qual = QUAL_FOR_WCO(policy); + WithCheckOption *wco; + + if (qual != NULL) + { + qual = copyObject(qual); + ChangeVarNodes((Node *) qual, 1, rt_index, 0); + + wco = (WithCheckOption *) makeNode(WithCheckOption); + wco->kind = kind; + wco->relname = pstrdup(RelationGetRelationName(rel)); + wco->polname = pstrdup(policy->policy_name); + wco->qual = (Node *) qual; + wco->cascaded = false; + + *withCheckOptions = list_append_unique(*withCheckOptions, wco); + *hasSubLinks |= policy->hassublinks; + } + } + } + else + { + /* + * If there were no policy clauses to check new data, add a single + * always-false WCO (a default-deny policy). + */ + WithCheckOption *wco; + + wco = (WithCheckOption *) makeNode(WithCheckOption); + wco->kind = kind; + wco->relname = pstrdup(RelationGetRelationName(rel)); + wco->polname = NULL; + wco->qual = (Node *) makeConst(BOOLOID, -1, InvalidOid, + sizeof(bool), BoolGetDatum(false), + false, true); + wco->cascaded = false; + + *withCheckOptions = lappend(*withCheckOptions, wco); + } } /* diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index e4b25587e98ab..cd3aaad610646 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -1273,7 +1273,7 @@ InvalidateBuffer(volatile BufferDesc *buf) UnlockBufHdr(buf); LWLockRelease(oldPartitionLock); /* safety check: should definitely not be our *own* pin */ - if (GetPrivateRefCount(buf->buf_id) > 0) + if (GetPrivateRefCount(BufferDescriptorGetBuffer(buf)) > 0) elog(ERROR, "buffer is pinned in InvalidateBuffer"); WaitIO(buf); goto retry; @@ -1426,16 +1426,16 @@ ReleaseAndReadBuffer(Buffer buffer, static bool PinBuffer(volatile BufferDesc *buf, BufferAccessStrategy strategy) { - int b = buf->buf_id; + Buffer b = BufferDescriptorGetBuffer(buf); bool result; PrivateRefCountEntry *ref; - ref = GetPrivateRefCountEntry(b + 1, true); + ref = GetPrivateRefCountEntry(b, true); if (ref == NULL) { ReservePrivateRefCountEntry(); - ref = NewPrivateRefCountEntry(b + 1); + ref = NewPrivateRefCountEntry(b); LockBufHdr(buf); buf->refcount++; @@ -1460,8 +1460,7 @@ PinBuffer(volatile BufferDesc *buf, BufferAccessStrategy strategy) ref->refcount++; Assert(ref->refcount > 0); - ResourceOwnerRememberBuffer(CurrentResourceOwner, - BufferDescriptorGetBuffer(buf)); + ResourceOwnerRememberBuffer(CurrentResourceOwner, b); return result; } @@ -1489,23 +1488,24 @@ PinBuffer(volatile BufferDesc *buf, BufferAccessStrategy strategy) static void PinBuffer_Locked(volatile BufferDesc *buf) { - int b = buf->buf_id; + Buffer b; PrivateRefCountEntry *ref; /* * As explained, We don't expect any preexisting pins. That allows us to * manipulate the PrivateRefCount after releasing the spinlock */ - Assert(GetPrivateRefCountEntry(b + 1, false) == NULL); + Assert(GetPrivateRefCountEntry(BufferDescriptorGetBuffer(buf), false) == NULL); buf->refcount++; UnlockBufHdr(buf); - ref = NewPrivateRefCountEntry(b + 1); + b = BufferDescriptorGetBuffer(buf); + + ref = NewPrivateRefCountEntry(b); ref->refcount++; - ResourceOwnerRememberBuffer(CurrentResourceOwner, - BufferDescriptorGetBuffer(buf)); + ResourceOwnerRememberBuffer(CurrentResourceOwner, b); } /* @@ -1520,14 +1520,14 @@ static void UnpinBuffer(volatile BufferDesc *buf, bool fixOwner) { PrivateRefCountEntry *ref; + Buffer b = BufferDescriptorGetBuffer(buf); /* not moving as we're likely deleting it soon anyway */ - ref = GetPrivateRefCountEntry(buf->buf_id + 1, false); + ref = GetPrivateRefCountEntry(b, false); Assert(ref != NULL); if (fixOwner) - ResourceOwnerForgetBuffer(CurrentResourceOwner, - BufferDescriptorGetBuffer(buf)); + ResourceOwnerForgetBuffer(CurrentResourceOwner, b); Assert(ref->refcount > 0); ref->refcount--; @@ -2739,6 +2739,7 @@ PrintBufferDescs(void) for (i = 0; i < NBuffers; ++i) { volatile BufferDesc *buf = GetBufferDescriptor(i); + Buffer b = BufferDescriptorGetBuffer(buf); /* theoretically we should lock the bufhdr here */ elog(LOG, @@ -2747,7 +2748,7 @@ PrintBufferDescs(void) i, buf->freeNext, relpathbackend(buf->tag.rnode, InvalidBackendId, buf->tag.forkNum), buf->tag.blockNum, buf->flags, - buf->refcount, GetPrivateRefCount(i)); + buf->refcount, GetPrivateRefCount(b)); } } #endif @@ -2761,8 +2762,9 @@ PrintPinnedBufs(void) for (i = 0; i < NBuffers; ++i) { volatile BufferDesc *buf = GetBufferDescriptor(i); + Buffer b = BufferDescriptorGetBuffer(buf); - if (GetPrivateRefCount(i + 1) > 0) + if (GetPrivateRefCount(b) > 0) { /* theoretically we should lock the bufhdr here */ elog(LOG, @@ -2771,7 +2773,7 @@ PrintPinnedBufs(void) i, buf->freeNext, relpathperm(buf->tag.rnode, buf->tag.forkNum), buf->tag.blockNum, buf->flags, - buf->refcount, GetPrivateRefCount(i + 1)); + buf->refcount, GetPrivateRefCount(b)); } } } diff --git a/src/backend/storage/ipc/shm_mq.c b/src/backend/storage/ipc/shm_mq.c index 126cb0751b316..f88e624a4131e 100644 --- a/src/backend/storage/ipc/shm_mq.c +++ b/src/backend/storage/ipc/shm_mq.c @@ -142,6 +142,8 @@ static shm_mq_result shm_mq_send_bytes(shm_mq_handle *mq, Size nbytes, const void *data, bool nowait, Size *bytes_written); static shm_mq_result shm_mq_receive_bytes(shm_mq *mq, Size bytes_needed, bool nowait, Size *nbytesp, void **datap); +static bool shm_mq_counterparty_gone(volatile shm_mq *mq, + BackgroundWorkerHandle *handle); static bool shm_mq_wait_internal(volatile shm_mq *mq, PGPROC *volatile * ptr, BackgroundWorkerHandle *handle); static uint64 shm_mq_get_bytes_read(volatile shm_mq *mq, bool *detached); @@ -499,8 +501,27 @@ shm_mq_receive(shm_mq_handle *mqh, Size *nbytesp, void **datap, bool nowait) { if (nowait) { + int counterparty_gone; + + /* + * We shouldn't return at this point at all unless the sender + * hasn't attached yet. However, the correct return value depends + * on whether the sender is still attached. If we first test + * whether the sender has ever attached and then test whether the + * sender has detached, there's a race condition: a sender that + * attaches and detaches very quickly might fool us into thinking + * the sender never attached at all. So, test whether our + * counterparty is definitively gone first, and only afterwards + * check whether the sender ever attached in the first place. + */ + counterparty_gone = shm_mq_counterparty_gone(mq, mqh->mqh_handle); if (shm_mq_get_sender(mq) == NULL) - return SHM_MQ_WOULD_BLOCK; + { + if (counterparty_gone) + return SHM_MQ_DETACHED; + else + return SHM_MQ_WOULD_BLOCK; + } } else if (!shm_mq_wait_internal(mq, &mq->mq_sender, mqh->mqh_handle) && shm_mq_get_sender(mq) == NULL) @@ -584,7 +605,7 @@ shm_mq_receive(shm_mq_handle *mqh, Size *nbytesp, void **datap, bool nowait) if (mqh->mqh_partial_bytes + rb > sizeof(Size)) lengthbytes = sizeof(Size) - mqh->mqh_partial_bytes; else - lengthbytes = rb - mqh->mqh_partial_bytes; + lengthbytes = rb; memcpy(&mqh->mqh_buffer[mqh->mqh_partial_bytes], rawdata, lengthbytes); mqh->mqh_partial_bytes += lengthbytes; @@ -745,6 +766,15 @@ shm_mq_detach(shm_mq *mq) SetLatch(&victim->procLatch); } +/* + * Get the shm_mq from handle. + */ +shm_mq * +shm_mq_get_queue(shm_mq_handle *mqh) +{ + return mqh->mqh_queue; +} + /* * Write bytes into a shared message queue. */ @@ -777,33 +807,42 @@ shm_mq_send_bytes(shm_mq_handle *mqh, Size nbytes, const void *data, return SHM_MQ_DETACHED; } - if (available == 0) + if (available == 0 && !mqh->mqh_counterparty_attached) { - shm_mq_result res; - /* * The queue is full, so if the receiver isn't yet known to be * attached, we must wait for that to happen. */ - if (!mqh->mqh_counterparty_attached) + if (nowait) { - if (nowait) + if (shm_mq_counterparty_gone(mq, mqh->mqh_handle)) { - if (shm_mq_get_receiver(mq) == NULL) - { - *bytes_written = sent; - return SHM_MQ_WOULD_BLOCK; - } + *bytes_written = sent; + return SHM_MQ_DETACHED; } - else if (!shm_mq_wait_internal(mq, &mq->mq_receiver, - mqh->mqh_handle)) + if (shm_mq_get_receiver(mq) == NULL) { - mq->mq_detached = true; *bytes_written = sent; - return SHM_MQ_DETACHED; + return SHM_MQ_WOULD_BLOCK; } - mqh->mqh_counterparty_attached = true; } + else if (!shm_mq_wait_internal(mq, &mq->mq_receiver, + mqh->mqh_handle)) + { + mq->mq_detached = true; + *bytes_written = sent; + return SHM_MQ_DETACHED; + } + mqh->mqh_counterparty_attached = true; + + /* + * The receiver may have read some data after attaching, so we + * must not wait without rechecking the queue state. + */ + } + else if (available == 0) + { + shm_mq_result res; /* Let the receiver know that we need them to read some data. */ res = shm_mq_notify_receiver(mq); @@ -934,6 +973,45 @@ shm_mq_receive_bytes(shm_mq *mq, Size bytes_needed, bool nowait, } } +/* + * Test whether a counterparty who may not even be alive yet is definitely gone. + */ +static bool +shm_mq_counterparty_gone(volatile shm_mq *mq, BackgroundWorkerHandle *handle) +{ + bool detached; + pid_t pid; + + /* Acquire the lock just long enough to check the pointer. */ + SpinLockAcquire(&mq->mq_mutex); + detached = mq->mq_detached; + SpinLockRelease(&mq->mq_mutex); + + /* If the queue has been detached, counterparty is definitely gone. */ + if (detached) + return true; + + /* If there's a handle, check worker status. */ + if (handle != NULL) + { + BgwHandleStatus status; + + /* Check for unexpected worker death. */ + status = GetBackgroundWorkerPid(handle, &pid); + if (status != BGWH_STARTED && status != BGWH_NOT_YET_STARTED) + { + /* Mark it detached, just to make it official. */ + SpinLockAcquire(&mq->mq_mutex); + mq->mq_detached = true; + SpinLockRelease(&mq->mq_mutex); + return true; + } + } + + /* Counterparty is not definitively gone. */ + return false; +} + /* * This is used when a process is waiting for its counterpart to attach to the * queue. We exit when the other process attaches as expected, or, if diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 1eb2d4b68da5b..c377d384b765a 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -753,7 +753,7 @@ LockAcquireExtended(const LOCKTAG *locktag, locallock->numLockOwners = 0; locallock->maxLockOwners = 8; locallock->holdsStrongLockCount = FALSE; - locallock->lockOwners = NULL; + locallock->lockOwners = NULL; /* in case next line fails */ locallock->lockOwners = (LOCALLOCKOWNER *) MemoryContextAlloc(TopMemoryContext, locallock->maxLockOwners * sizeof(LOCALLOCKOWNER)); @@ -1222,7 +1222,9 @@ RemoveLocalLock(LOCALLOCK *locallock) if (locallock->lockOwners[i].owner != NULL) ResourceOwnerForgetLock(locallock->lockOwners[i].owner, locallock); } - pfree(locallock->lockOwners); + locallock->numLockOwners = 0; + if (locallock->lockOwners != NULL) + pfree(locallock->lockOwners); locallock->lockOwners = NULL; if (locallock->holdsStrongLockCount) diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index 46cab4911e7a5..7b8fb71ead365 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -10,13 +10,15 @@ * locking should be done with the full lock manager --- which depends on * LWLocks to protect its shared state. * - * In addition to exclusive and shared modes, lightweight locks can be used - * to wait until a variable changes value. The variable is initially set - * when the lock is acquired with LWLockAcquireWithVar, and can be updated + * In addition to exclusive and shared modes, lightweight locks can be used to + * wait until a variable changes value. The variable is initially not set + * when the lock is acquired with LWLockAcquire, i.e. it remains set to the + * value it was set to when the lock was released last, and can be updated * without releasing the lock by calling LWLockUpdateVar. LWLockWaitForVar - * waits for the variable to be updated, or until the lock is free. The - * meaning of the variable is up to the caller, the lightweight lock code - * just assigns and compares it. + * waits for the variable to be updated, or until the lock is free. When + * releasing the lock with LWLockReleaseClearVar() the value can be set to an + * appropriate value for a free lock. The meaning of the variable is up to + * the caller, the lightweight lock code just assigns and compares it. * * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California @@ -105,7 +107,7 @@ extern slock_t *ShmemLock; #define LW_LOCK_MASK ((uint32) ((1 << 25)-1)) /* Must be greater than MAX_BACKENDS - which is 2^23-1, so we're fine. */ -#define LW_SHARED_MASK ((uint32)(1 << 23)) +#define LW_SHARED_MASK ((uint32) ((1 << 24)-1)) /* * This is indexed by tranche ID and stores metadata for all tranches known @@ -150,9 +152,6 @@ static LWLockHandle held_lwlocks[MAX_SIMUL_LWLOCKS]; static int lock_addin_request = 0; static bool lock_addin_request_allowed = true; -static inline bool LWLockAcquireCommon(LWLock *l, LWLockMode mode, - uint64 *valptr, uint64 val); - #ifdef LWLOCK_STATS typedef struct lwlock_stats_key { @@ -583,29 +582,33 @@ LWLockInitialize(LWLock *lock, int tranche_id) static bool LWLockAttemptLock(LWLock *lock, LWLockMode mode) { + uint32 old_state; + AssertArg(mode == LW_EXCLUSIVE || mode == LW_SHARED); + /* + * Read once outside the loop, later iterations will get the newer value + * via compare & exchange. + */ + old_state = pg_atomic_read_u32(&lock->state); + /* loop until we've determined whether we could acquire the lock or not */ while (true) { - uint32 old_state; - uint32 expected_state; uint32 desired_state; bool lock_free; - old_state = pg_atomic_read_u32(&lock->state); - expected_state = old_state; - desired_state = expected_state; + desired_state = old_state; if (mode == LW_EXCLUSIVE) { - lock_free = (expected_state & LW_LOCK_MASK) == 0; + lock_free = (old_state & LW_LOCK_MASK) == 0; if (lock_free) desired_state += LW_VAL_EXCLUSIVE; } else { - lock_free = (expected_state & LW_VAL_EXCLUSIVE) == 0; + lock_free = (old_state & LW_VAL_EXCLUSIVE) == 0; if (lock_free) desired_state += LW_VAL_SHARED; } @@ -621,7 +624,7 @@ LWLockAttemptLock(LWLock *lock, LWLockMode mode) * Retry if the value changed since we last looked at it. */ if (pg_atomic_compare_exchange_u32(&lock->state, - &expected_state, desired_state)) + &old_state, desired_state)) { if (lock_free) { @@ -796,8 +799,7 @@ LWLockQueueSelf(LWLock *lock, LWLockMode mode) * * This is used if we queued ourselves because we thought we needed to sleep * but, after further checking, we discovered that we don't actually need to - * do so. Returns false if somebody else already has woken us up, otherwise - * returns true. + * do so. */ static void LWLockDequeueSelf(LWLock *lock) @@ -900,25 +902,7 @@ LWLockDequeueSelf(LWLock *lock) * Side effect: cancel/die interrupts are held off until lock release. */ bool -LWLockAcquire(LWLock *l, LWLockMode mode) -{ - return LWLockAcquireCommon(l, mode, NULL, 0); -} - -/* - * LWLockAcquireWithVar - like LWLockAcquire, but also sets *valptr = val - * - * The lock is always acquired in exclusive mode with this function. - */ -bool -LWLockAcquireWithVar(LWLock *l, uint64 *valptr, uint64 val) -{ - return LWLockAcquireCommon(l, LW_EXCLUSIVE, valptr, val); -} - -/* internal function to implement LWLockAcquire and LWLockAcquireWithVar */ -static inline bool -LWLockAcquireCommon(LWLock *lock, LWLockMode mode, uint64 *valptr, uint64 val) +LWLockAcquire(LWLock *lock, LWLockMode mode) { PGPROC *proc = MyProc; bool result = true; @@ -1065,10 +1049,6 @@ LWLockAcquireCommon(LWLock *lock, LWLockMode mode, uint64 *valptr, uint64 val) result = false; } - /* If there's a variable associated with this lock, initialize it */ - if (valptr) - *valptr = val; - TRACE_POSTGRESQL_LWLOCK_ACQUIRE(T_NAME(lock), T_ID(lock), mode); /* Add lock to list of locks held by this backend */ @@ -1259,6 +1239,71 @@ LWLockAcquireOrWait(LWLock *lock, LWLockMode mode) return !mustwait; } +/* + * Does the lwlock in its current state need to wait for the variable value to + * change? + * + * If we don't need to wait, and it's because the value of the variable has + * changed, store the current value in newval. + * + * *result is set to true if the lock was free, and false otherwise. + */ +static bool +LWLockConflictsWithVar(LWLock *lock, + uint64 *valptr, uint64 oldval, uint64 *newval, + bool *result) +{ + bool mustwait; + uint64 value; +#ifdef LWLOCK_STATS + lwlock_stats *lwstats; + + lwstats = get_lwlock_stats_entry(lock); +#endif + + /* + * Test first to see if it the slot is free right now. + * + * XXX: the caller uses a spinlock before this, so we don't need a memory + * barrier here as far as the current usage is concerned. But that might + * not be safe in general. + */ + mustwait = (pg_atomic_read_u32(&lock->state) & LW_VAL_EXCLUSIVE) != 0; + + if (!mustwait) + { + *result = true; + return false; + } + + *result = false; + + /* + * Read value using spinlock as we can't rely on atomic 64 bit + * reads/stores. TODO: On platforms with a way to do atomic 64 bit + * reads/writes the spinlock could be optimized away. + */ +#ifdef LWLOCK_STATS + lwstats->spin_delay_count += SpinLockAcquire(&lock->mutex); +#else + SpinLockAcquire(&lock->mutex); +#endif + value = *valptr; + SpinLockRelease(&lock->mutex); + + if (value != oldval) + { + mustwait = false; + *newval = value; + } + else + { + mustwait = true; + } + + return mustwait; +} + /* * LWLockWaitForVar - Wait until lock is free, or a variable is updated. * @@ -1269,11 +1314,6 @@ LWLockAcquireOrWait(LWLock *lock, LWLockMode mode) * matches oldval, returns false and sets *newval to the current value in * *valptr. * - * It's possible that the lock holder releases the lock, but another backend - * acquires it again before we get a chance to observe that the lock was - * momentarily released. We wouldn't need to wait for the new lock holder, - * but we cannot distinguish that case, so we will have to wait. - * * Note: this function ignores shared lock holders; if the lock is held * in shared mode, returns 'true'. */ @@ -1291,16 +1331,6 @@ LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval) PRINT_LWDEBUG("LWLockWaitForVar", lock, LW_WAIT_UNTIL_FREE); - /* - * Quick test first to see if it the slot is free right now. - * - * XXX: the caller uses a spinlock before this, so we don't need a memory - * barrier here as far as the current usage is concerned. But that might - * not be safe in general. - */ - if ((pg_atomic_read_u32(&lock->state) & LW_VAL_EXCLUSIVE) == 0) - return true; - /* * Lock out cancel/die interrupts while we sleep on the lock. There is no * cleanup mechanism to remove us from the wait queue if we got @@ -1314,39 +1344,9 @@ LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval) for (;;) { bool mustwait; - uint64 value; - - mustwait = (pg_atomic_read_u32(&lock->state) & LW_VAL_EXCLUSIVE) != 0; - - if (mustwait) - { - /* - * Perform comparison using spinlock as we can't rely on atomic 64 - * bit reads/stores. - */ -#ifdef LWLOCK_STATS - lwstats->spin_delay_count += SpinLockAcquire(&lock->mutex); -#else - SpinLockAcquire(&lock->mutex); -#endif - /* - * XXX: We can significantly optimize this on platforms with 64bit - * atomics. - */ - value = *valptr; - if (value != oldval) - { - result = false; - mustwait = false; - *newval = value; - } - else - mustwait = true; - SpinLockRelease(&lock->mutex); - } - else - mustwait = false; + mustwait = LWLockConflictsWithVar(lock, valptr, oldval, newval, + &result); if (!mustwait) break; /* the lock was free or value didn't match */ @@ -1355,7 +1355,9 @@ LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval) * Add myself to wait queue. Note that this is racy, somebody else * could wakeup before we're finished queuing. NB: We're using nearly * the same twice-in-a-row lock acquisition protocol as - * LWLockAcquire(). Check its comments for details. + * LWLockAcquire(). Check its comments for details. The only + * difference is that we also have to check the variable's values when + * checking the state of the lock. */ LWLockQueueSelf(lock, LW_WAIT_UNTIL_FREE); @@ -1366,12 +1368,13 @@ LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval) pg_atomic_fetch_or_u32(&lock->state, LW_FLAG_RELEASE_OK); /* - * We're now guaranteed to be woken up if necessary. Recheck the - * lock's state. + * We're now guaranteed to be woken up if necessary. Recheck the lock + * and variables state. */ - mustwait = (pg_atomic_read_u32(&lock->state) & LW_VAL_EXCLUSIVE) != 0; + mustwait = LWLockConflictsWithVar(lock, valptr, oldval, newval, + &result); - /* Ok, lock is free after we queued ourselves. Undo queueing. */ + /* Ok, no conflict after we queued ourselves. Undo queueing. */ if (!mustwait) { LOG_LWDEBUG("LWLockWaitForVar", lock, "free, undoing queue"); @@ -1588,6 +1591,31 @@ LWLockRelease(LWLock *lock) RESUME_INTERRUPTS(); } +/* + * LWLockReleaseClearVar - release a previously acquired lock, reset variable + */ +void +LWLockReleaseClearVar(LWLock *lock, uint64 *valptr, uint64 val) +{ +#ifdef LWLOCK_STATS + lwlock_stats *lwstats; + + lwstats = get_lwlock_stats_entry(lock); + lwstats->spin_delay_count += SpinLockAcquire(&lock->mutex); +#else + SpinLockAcquire(&lock->mutex); +#endif + /* + * Set the variable's value before releasing the lock, that prevents race + * a race condition wherein a new locker acquires the lock, but hasn't yet + * set the variables value. + */ + *valptr = val; + SpinLockRelease(&lock->mutex); + + LWLockRelease(lock); +} + /* * LWLockReleaseAll - release all currently-held locks diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c index bad5618341e39..47b4adaf0e287 100644 --- a/src/backend/storage/lmgr/predicate.c +++ b/src/backend/storage/lmgr/predicate.c @@ -3217,22 +3217,21 @@ ReleasePredicateLocks(bool isCommit) return; } + LWLockAcquire(SerializableXactHashLock, LW_EXCLUSIVE); + Assert(!isCommit || SxactIsPrepared(MySerializableXact)); Assert(!isCommit || !SxactIsDoomed(MySerializableXact)); Assert(!SxactIsCommitted(MySerializableXact)); Assert(!SxactIsRolledBack(MySerializableXact)); /* may not be serializable during COMMIT/ROLLBACK PREPARED */ - if (MySerializableXact->pid != 0) - Assert(IsolationIsSerializable()); + Assert(MySerializableXact->pid == 0 || IsolationIsSerializable()); /* We'd better not already be on the cleanup list. */ Assert(!SxactIsOnFinishedList(MySerializableXact)); topLevelIsDeclaredReadOnly = SxactIsReadOnly(MySerializableXact); - LWLockAcquire(SerializableXactHashLock, LW_EXCLUSIVE); - /* * We don't hold XidGenLock lock here, assuming that TransactionId is * atomic! @@ -4369,7 +4368,7 @@ CheckTableForSerializableConflictIn(Relation relation) LWLockAcquire(SerializablePredicateLockListLock, LW_EXCLUSIVE); for (i = 0; i < NUM_PREDICATELOCK_PARTITIONS; i++) LWLockAcquire(PredicateLockHashPartitionLockByIndex(i), LW_SHARED); - LWLockAcquire(SerializableXactHashLock, LW_SHARED); + LWLockAcquire(SerializableXactHashLock, LW_EXCLUSIVE); /* Scan through target list */ hash_seq_init(&seqstat, PredicateLockTargetHash); diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index 455ad2663402f..a82d473e202cc 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -1170,22 +1170,32 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable) /* release lock as quickly as possible */ LWLockRelease(ProcArrayLock); - ereport(LOG, + /* send the autovacuum worker Back to Old Kent Road */ + ereport(DEBUG1, (errmsg("sending cancel to blocking autovacuum PID %d", pid), errdetail_log("%s", logbuf.data))); - pfree(logbuf.data); - pfree(locktagbuf.data); - - /* send the autovacuum worker Back to Old Kent Road */ if (kill(pid, SIGINT) < 0) { - /* Just a warning to allow multiple callers */ - ereport(WARNING, - (errmsg("could not send signal to process %d: %m", - pid))); + /* + * There's a race condition here: once we release the + * ProcArrayLock, it's possible for the autovac worker to + * close up shop and exit before we can do the kill(). + * Therefore, we do not whinge about no-such-process. + * Other errors such as EPERM could conceivably happen if + * the kernel recycles the PID fast enough, but such cases + * seem improbable enough that it's probably best to issue + * a warning if we see some other errno. + */ + if (errno != ESRCH) + ereport(WARNING, + (errmsg("could not send signal to process %d: %m", + pid))); } + + pfree(logbuf.data); + pfree(locktagbuf.data); } else LWLockRelease(ProcArrayLock); diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index ce4bdafad9b2c..caecf6c002ced 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -3078,15 +3078,32 @@ restore_stack_base(pg_stack_base_t base) } /* - * check_stack_depth: check for excessively deep recursion + * check_stack_depth/stack_is_too_deep: check for excessively deep recursion * * This should be called someplace in any recursive routine that might possibly * recurse deep enough to overflow the stack. Most Unixen treat stack * overflow as an unrecoverable SIGSEGV, so we want to error out ourselves * before hitting the hardware limit. + * + * check_stack_depth() just throws an error summarily. stack_is_too_deep() + * can be used by code that wants to handle the error condition itself. */ void check_stack_depth(void) +{ + if (stack_is_too_deep()) + { + ereport(ERROR, + (errcode(ERRCODE_STATEMENT_TOO_COMPLEX), + errmsg("stack depth limit exceeded"), + errhint("Increase the configuration parameter \"max_stack_depth\" (currently %dkB), " + "after ensuring the platform's stack depth limit is adequate.", + max_stack_depth))); + } +} + +bool +stack_is_too_deep(void) { char stack_top_loc; long stack_depth; @@ -3112,14 +3129,7 @@ check_stack_depth(void) */ if (stack_depth > max_stack_depth_bytes && stack_base_ptr != NULL) - { - ereport(ERROR, - (errcode(ERRCODE_STATEMENT_TOO_COMPLEX), - errmsg("stack depth limit exceeded"), - errhint("Increase the configuration parameter \"max_stack_depth\" (currently %dkB), " - "after ensuring the platform's stack depth limit is adequate.", - max_stack_depth))); - } + return true; /* * On IA64 there is a separate "register" stack that requires its own @@ -3134,15 +3144,10 @@ check_stack_depth(void) if (stack_depth > max_stack_depth_bytes && register_stack_base_ptr != NULL) - { - ereport(ERROR, - (errcode(ERRCODE_STATEMENT_TOO_COMPLEX), - errmsg("stack depth limit exceeded"), - errhint("Increase the configuration parameter \"max_stack_depth\" (currently %dkB), " - "after ensuring the platform's stack depth limit is adequate.", - max_stack_depth))); - } + return true; #endif /* IA64 */ + + return false; } /* GUC check hook for max_stack_depth */ @@ -3894,7 +3899,7 @@ PostgresMain(int argc, char *argv[], if (pq_is_reading_msg()) ereport(FATAL, (errcode(ERRCODE_PROTOCOL_VIOLATION), - errmsg("terminating connection because protocol sync was lost"))); + errmsg("terminating connection because protocol synchronization was lost"))); /* Now we can allow interrupts again */ RESUME_INTERRUPTS(); diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c index 9c14e8abdf87c..0df86a20e12ba 100644 --- a/src/backend/tcop/pquery.c +++ b/src/backend/tcop/pquery.c @@ -734,11 +734,7 @@ PortalRun(Portal portal, long count, bool isTopLevel, /* * Check for improper portal use, and mark portal active. */ - if (portal->status != PORTAL_READY) - ereport(ERROR, - (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("portal \"%s\" cannot be run", portal->name))); - portal->status = PORTAL_ACTIVE; + MarkPortalActive(portal); /* * Set up global portal context pointers. @@ -1398,11 +1394,7 @@ PortalRunFetch(Portal portal, /* * Check for improper portal use, and mark portal active. */ - if (portal->status != PORTAL_READY) - ereport(ERROR, - (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("portal \"%s\" cannot be run", portal->name))); - portal->status = PORTAL_ACTIVE; + MarkPortalActive(portal); /* * Set up global portal context pointers. diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index d66f640fe697b..f9dfb787c3465 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -40,7 +40,6 @@ #endif -static void EncodeSpecialDate(DateADT dt, char *str); static int time2tm(TimeADT time, struct pg_tm * tm, fsec_t *fsec); static int timetz2tm(TimeTzADT *time, struct pg_tm * tm, fsec_t *fsec, int *tzp); static int tm2time(struct pg_tm * tm, fsec_t fsec, TimeADT *result); @@ -273,7 +272,7 @@ make_date(PG_FUNCTION_ARGS) /* * Convert reserved date values to string. */ -static void +void EncodeSpecialDate(DateADT dt, char *str) { if (DATE_IS_NOBEGIN(dt)) diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index 2a44b6e50375b..926358e6c981e 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -103,8 +103,8 @@ static const datetkn datetktbl[] = { {"d", UNITS, DTK_DAY}, /* "day of month" for ISO input */ {"dec", MONTH, 12}, {"december", MONTH, 12}, - {"dow", RESERV, DTK_DOW}, /* day of week */ - {"doy", RESERV, DTK_DOY}, /* day of year */ + {"dow", UNITS, DTK_DOW}, /* day of week */ + {"doy", UNITS, DTK_DOY}, /* day of year */ {"dst", DTZMOD, SECS_PER_HOUR}, {EPOCH, RESERV, DTK_EPOCH}, /* "epoch" reserved for system epoch time */ {"feb", MONTH, 2}, @@ -114,7 +114,7 @@ static const datetkn datetktbl[] = { {"h", UNITS, DTK_HOUR}, /* "hour" */ {LATE, RESERV, DTK_LATE}, /* "infinity" reserved for "late time" */ {INVALID, RESERV, DTK_INVALID}, /* "invalid" reserved for bad time */ - {"isodow", RESERV, DTK_ISODOW}, /* ISO day of week, Sunday == 7 */ + {"isodow", UNITS, DTK_ISODOW}, /* ISO day of week, Sunday == 7 */ {"isoyear", UNITS, DTK_ISOYEAR}, /* year in terms of the ISO week date */ {"j", UNITS, DTK_JULIAN}, {"jan", MONTH, 1}, diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c index 26d384336933c..af97fc1eff4cd 100644 --- a/src/backend/utils/adt/json.c +++ b/src/backend/utils/adt/json.c @@ -32,9 +32,6 @@ #include "utils/typcache.h" #include "utils/syscache.h" -/* String to output for infinite dates and timestamps */ -#define DT_INFINITY "\"infinity\"" - /* * The context of the parser is maintained by the recursive descent * mechanism, but is passed explicitly to the error reporting routine @@ -68,6 +65,15 @@ typedef enum /* type categories for datum_to_json */ JSONTYPE_OTHER /* all else */ } JsonTypeCategory; +typedef struct JsonAggState +{ + StringInfo str; + JsonTypeCategory key_category; + Oid key_output_func; + JsonTypeCategory val_category; + Oid val_output_func; +} JsonAggState; + static inline void json_lex(JsonLexContext *lex); static inline void json_lex_string(JsonLexContext *lex); static inline void json_lex_number(JsonLexContext *lex, char *s, bool *num_err); @@ -340,6 +346,45 @@ pg_parse_json(JsonLexContext *lex, JsonSemAction *sem) } +/* + * json_count_array_elements + * + * Returns number of array elements in lex context at start of array token + * until end of array token at same nesting level. + * + * Designed to be called from array_start routines. + */ +int +json_count_array_elements(JsonLexContext *lex) +{ + JsonLexContext copylex; + int count; + + /* + * It's safe to do this with a shallow copy because the lexical routines + * don't scribble on the input. They do scribble on the other pointers + * etc, so doing this with a copy makes that safe. + */ + memcpy(©lex, lex, sizeof(JsonLexContext)); + copylex.strval = NULL; /* not interested in values here */ + copylex.lex_level++; + + count = 0; + lex_expect(JSON_PARSE_ARRAY_START, ©lex, JSON_TOKEN_ARRAY_START); + if (lex_peek(©lex) != JSON_TOKEN_ARRAY_END) + { + do + { + count++; + parse_array_element(©lex, &nullSemAction); + } + while (lex_accept(©lex, JSON_TOKEN_COMMA, NULL)); + } + lex_expect(JSON_PARSE_ARRAY_NEXT, ©lex, JSON_TOKEN_ARRAY_END); + + return count; +} + /* * Recursive Descent parse routines. There is one for each structural * element in a json document: @@ -442,6 +487,8 @@ parse_object(JsonLexContext *lex, JsonSemAction *sem) json_struct_action oend = sem->object_end; JsonTokenType tok; + check_stack_depth(); + if (ostart != NULL) (*ostart) (sem->semstate); @@ -520,6 +567,8 @@ parse_array(JsonLexContext *lex, JsonSemAction *sem) json_struct_action astart = sem->array_start; json_struct_action aend = sem->array_end; + check_stack_depth(); + if (astart != NULL) (*astart) (sem->semstate); @@ -1385,6 +1434,8 @@ datum_to_json(Datum val, bool is_null, StringInfo result, char *outputstr; text *jsontext; + check_stack_depth(); + /* callers are expected to ensure that null keys are not passed in */ Assert(!(key_scalar && is_null)); @@ -1438,19 +1489,16 @@ datum_to_json(Datum val, bool is_null, StringInfo result, char buf[MAXDATELEN + 1]; date = DatumGetDateADT(val); - + /* Same as date_out(), but forcing DateStyle */ if (DATE_NOT_FINITE(date)) - { - /* we have to format infinity ourselves */ - appendStringInfoString(result, DT_INFINITY); - } + EncodeSpecialDate(date, buf); else { j2date(date + POSTGRES_EPOCH_JDATE, &(tm.tm_year), &(tm.tm_mon), &(tm.tm_mday)); EncodeDateOnly(&tm, USE_XSD_DATES, buf); - appendStringInfo(result, "\"%s\"", buf); } + appendStringInfo(result, "\"%s\"", buf); } break; case JSONTYPE_TIMESTAMP: @@ -1461,21 +1509,16 @@ datum_to_json(Datum val, bool is_null, StringInfo result, char buf[MAXDATELEN + 1]; timestamp = DatumGetTimestamp(val); - + /* Same as timestamp_out(), but forcing DateStyle */ if (TIMESTAMP_NOT_FINITE(timestamp)) - { - /* we have to format infinity ourselves */ - appendStringInfoString(result, DT_INFINITY); - } + EncodeSpecialTimestamp(timestamp, buf); else if (timestamp2tm(timestamp, NULL, &tm, &fsec, NULL, NULL) == 0) - { EncodeDateTime(&tm, fsec, false, 0, NULL, USE_XSD_DATES, buf); - appendStringInfo(result, "\"%s\"", buf); - } else ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); + appendStringInfo(result, "\"%s\"", buf); } break; case JSONTYPE_TIMESTAMPTZ: @@ -1487,22 +1530,17 @@ datum_to_json(Datum val, bool is_null, StringInfo result, const char *tzn = NULL; char buf[MAXDATELEN + 1]; - timestamp = DatumGetTimestamp(val); - + timestamp = DatumGetTimestampTz(val); + /* Same as timestamptz_out(), but forcing DateStyle */ if (TIMESTAMP_NOT_FINITE(timestamp)) - { - /* we have to format infinity ourselves */ - appendStringInfoString(result, DT_INFINITY); - } + EncodeSpecialTimestamp(timestamp, buf); else if (timestamp2tm(timestamp, &tz, &tm, &fsec, &tzn, NULL) == 0) - { EncodeDateTime(&tm, fsec, true, tz, tzn, USE_XSD_DATES, buf); - appendStringInfo(result, "\"%s\"", buf); - } else ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); + appendStringInfo(result, "\"%s\"", buf); } break; case JSONTYPE_JSON: @@ -1819,18 +1857,10 @@ to_json(PG_FUNCTION_ARGS) Datum json_agg_transfn(PG_FUNCTION_ARGS) { - Oid val_type = get_fn_expr_argtype(fcinfo->flinfo, 1); MemoryContext aggcontext, oldcontext; - StringInfo state; + JsonAggState *state; Datum val; - JsonTypeCategory tcategory; - Oid outfuncoid; - - if (val_type == InvalidOid) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("could not determine input data type"))); if (!AggCheckCallContext(fcinfo, &aggcontext)) { @@ -1840,50 +1870,59 @@ json_agg_transfn(PG_FUNCTION_ARGS) if (PG_ARGISNULL(0)) { + Oid arg_type = get_fn_expr_argtype(fcinfo->flinfo, 1); + + if (arg_type == InvalidOid) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("could not determine input data type"))); + /* - * Make this StringInfo in a context where it will persist for the + * Make this state object in a context where it will persist for the * duration of the aggregate call. MemoryContextSwitchTo is only * needed the first time, as the StringInfo routines make sure they * use the right context to enlarge the object if necessary. */ oldcontext = MemoryContextSwitchTo(aggcontext); - state = makeStringInfo(); + state = (JsonAggState *) palloc(sizeof(JsonAggState)); + state->str = makeStringInfo(); MemoryContextSwitchTo(oldcontext); - appendStringInfoChar(state, '['); + appendStringInfoChar(state->str, '['); + json_categorize_type(arg_type, &state->val_category, + &state->val_output_func); } else { - state = (StringInfo) PG_GETARG_POINTER(0); - appendStringInfoString(state, ", "); + state = (JsonAggState *) PG_GETARG_POINTER(0); + appendStringInfoString(state->str, ", "); } /* fast path for NULLs */ if (PG_ARGISNULL(1)) { - datum_to_json((Datum) 0, true, state, JSONTYPE_NULL, InvalidOid, false); + datum_to_json((Datum) 0, true, state->str, JSONTYPE_NULL, + InvalidOid, false); PG_RETURN_POINTER(state); } val = PG_GETARG_DATUM(1); - /* XXX we do this every time?? */ - json_categorize_type(val_type, - &tcategory, &outfuncoid); - /* add some whitespace if structured type and not first item */ if (!PG_ARGISNULL(0) && - (tcategory == JSONTYPE_ARRAY || tcategory == JSONTYPE_COMPOSITE)) + (state->val_category == JSONTYPE_ARRAY || + state->val_category == JSONTYPE_COMPOSITE)) { - appendStringInfoString(state, "\n "); + appendStringInfoString(state->str, "\n "); } - datum_to_json(val, false, state, tcategory, outfuncoid, false); + datum_to_json(val, false, state->str, state->val_category, + state->val_output_func, false); /* * The transition type for array_agg() is declared to be "internal", which * is a pass-by-value type the same size as a pointer. So we can safely - * pass the ArrayBuildState pointer through nodeAgg.c's machinations. + * pass the JsonAggState pointer through nodeAgg.c's machinations. */ PG_RETURN_POINTER(state); } @@ -1894,19 +1933,21 @@ json_agg_transfn(PG_FUNCTION_ARGS) Datum json_agg_finalfn(PG_FUNCTION_ARGS) { - StringInfo state; + JsonAggState *state; /* cannot be called directly because of internal-type argument */ Assert(AggCheckCallContext(fcinfo, NULL)); - state = PG_ARGISNULL(0) ? NULL : (StringInfo) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? + NULL : + (JsonAggState *) PG_GETARG_POINTER(0); /* NULL result for no rows in, as is standard with aggregates */ if (state == NULL) PG_RETURN_NULL(); /* Else return state with appropriate array terminator added */ - PG_RETURN_TEXT_P(catenate_stringinfo_string(state, "]")); + PG_RETURN_TEXT_P(catenate_stringinfo_string(state->str, "]")); } /* @@ -1917,10 +1958,9 @@ json_agg_finalfn(PG_FUNCTION_ARGS) Datum json_object_agg_transfn(PG_FUNCTION_ARGS) { - Oid val_type; MemoryContext aggcontext, oldcontext; - StringInfo state; + JsonAggState *state; Datum arg; if (!AggCheckCallContext(fcinfo, &aggcontext)) @@ -1931,6 +1971,8 @@ json_object_agg_transfn(PG_FUNCTION_ARGS) if (PG_ARGISNULL(0)) { + Oid arg_type; + /* * Make the StringInfo in a context where it will persist for the * duration of the aggregate call. Switching context is only needed @@ -1938,15 +1980,36 @@ json_object_agg_transfn(PG_FUNCTION_ARGS) * use the right context to enlarge the object if necessary. */ oldcontext = MemoryContextSwitchTo(aggcontext); - state = makeStringInfo(); + state = (JsonAggState *) palloc(sizeof(JsonAggState)); + state->str = makeStringInfo(); MemoryContextSwitchTo(oldcontext); - appendStringInfoString(state, "{ "); + arg_type = get_fn_expr_argtype(fcinfo->flinfo, 1); + + if (arg_type == InvalidOid) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("could not determine data type for argument 1"))); + + json_categorize_type(arg_type, &state->key_category, + &state->key_output_func); + + arg_type = get_fn_expr_argtype(fcinfo->flinfo, 2); + + if (arg_type == InvalidOid) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("could not determine data type for argument 2"))); + + json_categorize_type(arg_type, &state->val_category, + &state->val_output_func); + + appendStringInfoString(state->str, "{ "); } else { - state = (StringInfo) PG_GETARG_POINTER(0); - appendStringInfoString(state, ", "); + state = (JsonAggState *) PG_GETARG_POINTER(0); + appendStringInfoString(state->str, ", "); } /* @@ -1956,12 +2019,6 @@ json_object_agg_transfn(PG_FUNCTION_ARGS) * type UNKNOWN, which fortunately does not matter to us, since * unknownout() works fine. */ - val_type = get_fn_expr_argtype(fcinfo->flinfo, 1); - - if (val_type == InvalidOid) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("could not determine data type for argument %d", 1))); if (PG_ARGISNULL(1)) ereport(ERROR, @@ -1970,23 +2027,18 @@ json_object_agg_transfn(PG_FUNCTION_ARGS) arg = PG_GETARG_DATUM(1); - add_json(arg, false, state, val_type, true); - - appendStringInfoString(state, " : "); + datum_to_json(arg, false, state->str, state->key_category, + state->key_output_func, true); - val_type = get_fn_expr_argtype(fcinfo->flinfo, 2); - - if (val_type == InvalidOid) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("could not determine data type for argument %d", 2))); + appendStringInfoString(state->str, " : "); if (PG_ARGISNULL(2)) arg = (Datum) 0; else arg = PG_GETARG_DATUM(2); - add_json(arg, PG_ARGISNULL(2), state, val_type, false); + datum_to_json(arg, PG_ARGISNULL(2), state->str, state->val_category, + state->val_output_func, false); PG_RETURN_POINTER(state); } @@ -1997,19 +2049,19 @@ json_object_agg_transfn(PG_FUNCTION_ARGS) Datum json_object_agg_finalfn(PG_FUNCTION_ARGS) { - StringInfo state; + JsonAggState *state; /* cannot be called directly because of internal-type argument */ Assert(AggCheckCallContext(fcinfo, NULL)); - state = PG_ARGISNULL(0) ? NULL : (StringInfo) PG_GETARG_POINTER(0); + state = PG_ARGISNULL(0) ? NULL : (JsonAggState *) PG_GETARG_POINTER(0); /* NULL result for no rows in, as is standard with aggregates */ if (state == NULL) PG_RETURN_NULL(); /* Else return state with appropriate object terminator added */ - PG_RETURN_TEXT_P(catenate_stringinfo_string(state, " }")); + PG_RETURN_TEXT_P(catenate_stringinfo_string(state->str, " }")); } /* diff --git a/src/backend/utils/adt/jsonb.c b/src/backend/utils/adt/jsonb.c index e68972221ab7c..7cbb69faf2ea3 100644 --- a/src/backend/utils/adt/jsonb.c +++ b/src/backend/utils/adt/jsonb.c @@ -28,14 +28,6 @@ #include "utils/syscache.h" #include "utils/typcache.h" -/* - * String to output for infinite dates and timestamps. - * Note the we don't use embedded quotes, unlike for json, because - * we store jsonb strings dequoted. - */ - -#define DT_INFINITY "infinity" - typedef struct JsonbInState { JsonbParseState *parseState; @@ -59,6 +51,15 @@ typedef enum /* type categories for datum_to_jsonb */ JSONBTYPE_OTHER /* all else */ } JsonbTypeCategory; +typedef struct JsonbAggState +{ + JsonbInState *res; + JsonbTypeCategory key_category; + Oid key_output_func; + JsonbTypeCategory val_category; + Oid val_output_func; +} JsonbAggState; + static inline Datum jsonb_from_cstring(char *json, int len); static size_t checkStringLen(size_t len); static void jsonb_in_object_start(void *pstate); @@ -446,8 +447,8 @@ JsonbToCStringWorker(StringInfo out, JsonbContainer *in, int estimated_len, bool { bool first = true; JsonbIterator *it; - JsonbIteratorToken type = WJB_DONE; JsonbValue v; + JsonbIteratorToken type = WJB_DONE; int level = 0; bool redo_switch = false; @@ -703,8 +704,12 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result, JsonbValue jb; bool scalar_jsonb = false; + check_stack_depth(); + + /* Convert val to a JsonbValue in jb (in most cases) */ if (is_null) { + Assert(!key_scalar); jb.type = jbvNull; } else if (key_scalar && @@ -716,7 +721,7 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result, { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("key value must be scalar, not array, composite or json"))); + errmsg("key value must be scalar, not array, composite, or json"))); } else { @@ -785,21 +790,18 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result, char buf[MAXDATELEN + 1]; date = DatumGetDateADT(val); - jb.type = jbvString; - + /* Same as date_out(), but forcing DateStyle */ if (DATE_NOT_FINITE(date)) - { - jb.val.string.len = strlen(DT_INFINITY); - jb.val.string.val = pstrdup(DT_INFINITY); - } + EncodeSpecialDate(date, buf); else { j2date(date + POSTGRES_EPOCH_JDATE, &(tm.tm_year), &(tm.tm_mon), &(tm.tm_mday)); EncodeDateOnly(&tm, USE_XSD_DATES, buf); - jb.val.string.len = strlen(buf); - jb.val.string.val = pstrdup(buf); } + jb.type = jbvString; + jb.val.string.len = strlen(buf); + jb.val.string.val = pstrdup(buf); } break; case JSONBTYPE_TIMESTAMP: @@ -810,24 +812,18 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result, char buf[MAXDATELEN + 1]; timestamp = DatumGetTimestamp(val); - jb.type = jbvString; - + /* Same as timestamp_out(), but forcing DateStyle */ if (TIMESTAMP_NOT_FINITE(timestamp)) - { - jb.val.string.len = strlen(DT_INFINITY); - jb.val.string.val = pstrdup(DT_INFINITY); - } + EncodeSpecialTimestamp(timestamp, buf); else if (timestamp2tm(timestamp, NULL, &tm, &fsec, NULL, NULL) == 0) - { - EncodeDateTime(&tm, fsec, false, 0, NULL, USE_XSD_DATES, buf); - jb.val.string.len = strlen(buf); - jb.val.string.val = pstrdup(buf); - } else ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); + jb.type = jbvString; + jb.val.string.len = strlen(buf); + jb.val.string.val = pstrdup(buf); } break; case JSONBTYPE_TIMESTAMPTZ: @@ -839,24 +835,19 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result, const char *tzn = NULL; char buf[MAXDATELEN + 1]; - timestamp = DatumGetTimestamp(val); - jb.type = jbvString; - + timestamp = DatumGetTimestampTz(val); + /* Same as timestamptz_out(), but forcing DateStyle */ if (TIMESTAMP_NOT_FINITE(timestamp)) - { - jb.val.string.len = strlen(DT_INFINITY); - jb.val.string.val = pstrdup(DT_INFINITY); - } + EncodeSpecialTimestamp(timestamp, buf); else if (timestamp2tm(timestamp, &tz, &tm, &fsec, &tzn, NULL) == 0) - { EncodeDateTime(&tm, fsec, true, tz, tzn, USE_XSD_DATES, buf); - jb.val.string.len = strlen(buf); - jb.val.string.val = pstrdup(buf); - } else ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); + jb.type = jbvString; + jb.val.string.len = strlen(buf); + jb.val.string.val = pstrdup(buf); } break; case JSONBTYPE_JSONCAST: @@ -887,7 +878,6 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result, case JSONBTYPE_JSONB: { Jsonb *jsonb = DatumGetJsonb(val); - JsonbIteratorToken type; JsonbIterator *it; it = JsonbIteratorInit(&jsonb->root); @@ -901,6 +891,8 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result, } else { + JsonbIteratorToken type; + while ((type = JsonbIteratorNext(&it, &jb, false)) != WJB_DONE) { @@ -923,8 +915,10 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result, break; } } - if (tcategory >= JSONBTYPE_JSON && tcategory <= JSONBTYPE_JSONCAST && - !scalar_jsonb) + + /* Now insert jb into result, unless we did it recursively */ + if (!is_null && !scalar_jsonb && + tcategory >= JSONBTYPE_JSON && tcategory <= JSONBTYPE_JSONCAST) { /* work has been done recursively */ return; @@ -1572,12 +1566,10 @@ clone_parse_state(JsonbParseState *state) Datum jsonb_agg_transfn(PG_FUNCTION_ARGS) { - Oid val_type = get_fn_expr_argtype(fcinfo->flinfo, 1); MemoryContext oldcontext, aggcontext; + JsonbAggState *state; JsonbInState elem; - JsonbTypeCategory tcategory; - Oid outfuncoid; Datum val; JsonbInState *result; bool single_scalar = false; @@ -1586,48 +1578,55 @@ jsonb_agg_transfn(PG_FUNCTION_ARGS) JsonbValue v; JsonbIteratorToken type; - if (val_type == InvalidOid) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("could not determine input data type"))); - if (!AggCheckCallContext(fcinfo, &aggcontext)) { /* cannot be called directly because of internal-type argument */ elog(ERROR, "jsonb_agg_transfn called in non-aggregate context"); } - /* turn the argument into jsonb in the normal function context */ - - val = PG_ARGISNULL(1) ? (Datum) 0 : PG_GETARG_DATUM(1); - - jsonb_categorize_type(val_type, - &tcategory, &outfuncoid); - - memset(&elem, 0, sizeof(JsonbInState)); - - datum_to_jsonb(val, false, &elem, tcategory, outfuncoid, false); - - jbelem = JsonbValueToJsonb(elem.res); - - /* switch to the aggregate context for accumulation operations */ - - oldcontext = MemoryContextSwitchTo(aggcontext); - /* set up the accumulator on the first go round */ if (PG_ARGISNULL(0)) { + Oid arg_type = get_fn_expr_argtype(fcinfo->flinfo, 1); + + if (arg_type == InvalidOid) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("could not determine input data type"))); + + oldcontext = MemoryContextSwitchTo(aggcontext); + state = palloc(sizeof(JsonbAggState)); result = palloc0(sizeof(JsonbInState)); + state->res = result; result->res = pushJsonbValue(&result->parseState, WJB_BEGIN_ARRAY, NULL); + MemoryContextSwitchTo(oldcontext); + jsonb_categorize_type(arg_type, &state->val_category, + &state->val_output_func); } else { - result = (JsonbInState *) PG_GETARG_POINTER(0); + state = (JsonbAggState *) PG_GETARG_POINTER(0); + result = state->res; } + /* turn the argument into jsonb in the normal function context */ + + val = PG_ARGISNULL(1) ? (Datum) 0 : PG_GETARG_DATUM(1); + + memset(&elem, 0, sizeof(JsonbInState)); + + datum_to_jsonb(val, PG_ARGISNULL(1), &elem, state->val_category, + state->val_output_func, false); + + jbelem = JsonbValueToJsonb(elem.res); + + /* switch to the aggregate context for accumulation operations */ + + oldcontext = MemoryContextSwitchTo(aggcontext); + it = JsonbIteratorInit(&jbelem->root); while ((type = JsonbIteratorNext(&it, &v, false)) != WJB_DONE) @@ -1668,7 +1667,6 @@ jsonb_agg_transfn(PG_FUNCTION_ARGS) v.val.numeric = DatumGetNumeric(DirectFunctionCall1(numeric_uplus, NumericGetDatum(v.val.numeric))); - } result->res = pushJsonbValue(&result->parseState, type, &v); @@ -1680,13 +1678,13 @@ jsonb_agg_transfn(PG_FUNCTION_ARGS) MemoryContextSwitchTo(oldcontext); - PG_RETURN_POINTER(result); + PG_RETURN_POINTER(state); } Datum jsonb_agg_finalfn(PG_FUNCTION_ARGS) { - JsonbInState *arg; + JsonbAggState *arg; JsonbInState result; Jsonb *out; @@ -1696,7 +1694,7 @@ jsonb_agg_finalfn(PG_FUNCTION_ARGS) if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* returns null iff no input values */ - arg = (JsonbInState *) PG_GETARG_POINTER(0); + arg = (JsonbAggState *) PG_GETARG_POINTER(0); /* * We need to do a shallow clone of the argument in case the final @@ -1705,12 +1703,11 @@ jsonb_agg_finalfn(PG_FUNCTION_ARGS) * values, just add the final array end marker. */ - result.parseState = clone_parse_state(arg->parseState); + result.parseState = clone_parse_state(arg->res->parseState); result.res = pushJsonbValue(&result.parseState, WJB_END_ARRAY, NULL); - out = JsonbValueToJsonb(result.res); PG_RETURN_POINTER(out); @@ -1722,12 +1719,10 @@ jsonb_agg_finalfn(PG_FUNCTION_ARGS) Datum jsonb_object_agg_transfn(PG_FUNCTION_ARGS) { - Oid val_type; MemoryContext oldcontext, aggcontext; JsonbInState elem; - JsonbTypeCategory tcategory; - Oid outfuncoid; + JsonbAggState *state; Datum val; JsonbInState *result; bool single_scalar; @@ -1743,64 +1738,77 @@ jsonb_object_agg_transfn(PG_FUNCTION_ARGS) elog(ERROR, "jsonb_object_agg_transfn called in non-aggregate context"); } - /* turn the argument into jsonb in the normal function context */ + /* set up the accumulator on the first go round */ - val_type = get_fn_expr_argtype(fcinfo->flinfo, 1); + if (PG_ARGISNULL(0)) + { + Oid arg_type; - if (val_type == InvalidOid) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("could not determine input data type"))); + oldcontext = MemoryContextSwitchTo(aggcontext); + state = palloc(sizeof(JsonbAggState)); + result = palloc0(sizeof(JsonbInState)); + state->res = result; + result->res = pushJsonbValue(&result->parseState, + WJB_BEGIN_OBJECT, NULL); + MemoryContextSwitchTo(oldcontext); - val = PG_ARGISNULL(1) ? (Datum) 0 : PG_GETARG_DATUM(1); + arg_type = get_fn_expr_argtype(fcinfo->flinfo, 1); - jsonb_categorize_type(val_type, - &tcategory, &outfuncoid); + if (arg_type == InvalidOid) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("could not determine input data type"))); - memset(&elem, 0, sizeof(JsonbInState)); + jsonb_categorize_type(arg_type, &state->key_category, + &state->key_output_func); - datum_to_jsonb(val, false, &elem, tcategory, outfuncoid, true); + arg_type = get_fn_expr_argtype(fcinfo->flinfo, 2); - jbkey = JsonbValueToJsonb(elem.res); + if (arg_type == InvalidOid) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("could not determine input data type"))); - val_type = get_fn_expr_argtype(fcinfo->flinfo, 2); + jsonb_categorize_type(arg_type, &state->val_category, + &state->val_output_func); + } + else + { + state = (JsonbAggState *) PG_GETARG_POINTER(0); + result = state->res; + } - if (val_type == InvalidOid) + /* turn the argument into jsonb in the normal function context */ + + if (PG_ARGISNULL(1)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("could not determine input data type"))); + errmsg("field name must not be null"))); - val = PG_ARGISNULL(2) ? (Datum) 0 : PG_GETARG_DATUM(2); - - jsonb_categorize_type(val_type, - &tcategory, &outfuncoid); + val = PG_GETARG_DATUM(1); memset(&elem, 0, sizeof(JsonbInState)); - datum_to_jsonb(val, false, &elem, tcategory, outfuncoid, false); - - jbval = JsonbValueToJsonb(elem.res); + datum_to_jsonb(val, false, &elem, state->key_category, + state->key_output_func, true); - /* switch to the aggregate context for accumulation operations */ + jbkey = JsonbValueToJsonb(elem.res); - oldcontext = MemoryContextSwitchTo(aggcontext); + val = PG_ARGISNULL(2) ? (Datum) 0 : PG_GETARG_DATUM(2); - /* set up the accumulator on the first go round */ + memset(&elem, 0, sizeof(JsonbInState)); - if (PG_ARGISNULL(0)) - { - result = palloc0(sizeof(JsonbInState)); - result->res = pushJsonbValue(&result->parseState, - WJB_BEGIN_OBJECT, NULL); + datum_to_jsonb(val, PG_ARGISNULL(2), &elem, state->val_category, + state->val_output_func, false); - } - else - { - result = (JsonbInState *) PG_GETARG_POINTER(0); - } + jbval = JsonbValueToJsonb(elem.res); it = JsonbIteratorInit(&jbkey->root); + /* switch to the aggregate context for accumulation operations */ + + oldcontext = MemoryContextSwitchTo(aggcontext); + /* * keys should be scalar, and we should have already checked for that * above when calling datum_to_jsonb, so we only need to look for these @@ -1889,7 +1897,6 @@ jsonb_object_agg_transfn(PG_FUNCTION_ARGS) v.val.numeric = DatumGetNumeric(DirectFunctionCall1(numeric_uplus, NumericGetDatum(v.val.numeric))); - } result->res = pushJsonbValue(&result->parseState, single_scalar ? WJB_VALUE : type, @@ -1902,13 +1909,13 @@ jsonb_object_agg_transfn(PG_FUNCTION_ARGS) MemoryContextSwitchTo(oldcontext); - PG_RETURN_POINTER(result); + PG_RETURN_POINTER(state); } Datum jsonb_object_agg_finalfn(PG_FUNCTION_ARGS) { - JsonbInState *arg; + JsonbAggState *arg; JsonbInState result; Jsonb *out; @@ -1918,21 +1925,21 @@ jsonb_object_agg_finalfn(PG_FUNCTION_ARGS) if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* returns null iff no input values */ - arg = (JsonbInState *) PG_GETARG_POINTER(0); + arg = (JsonbAggState *) PG_GETARG_POINTER(0); /* - * We need to do a shallow clone of the argument in case the final - * function is called more than once, so we avoid changing the argument. A - * shallow clone is sufficient as we aren't going to change any of the - * values, just add the final object end marker. + * We need to do a shallow clone of the argument's res field in case the + * final function is called more than once, so we avoid changing the + * aggregate state value. A shallow clone is sufficient as we aren't + * going to change any of the values, just add the final object end + * marker. */ - result.parseState = clone_parse_state(arg->parseState); + result.parseState = clone_parse_state(arg->res->parseState); result.res = pushJsonbValue(&result.parseState, WJB_END_OBJECT, NULL); - out = JsonbValueToJsonb(result.res); PG_RETURN_POINTER(out); diff --git a/src/backend/utils/adt/jsonb_gin.c b/src/backend/utils/adt/jsonb_gin.c index 2591c81f3d671..204fb8b5919c3 100644 --- a/src/backend/utils/adt/jsonb_gin.c +++ b/src/backend/utils/adt/jsonb_gin.c @@ -70,8 +70,8 @@ gin_extract_jsonb(PG_FUNCTION_ARGS) int total = 2 * JB_ROOT_COUNT(jb); JsonbIterator *it; JsonbValue v; - int i = 0, - r; + JsonbIteratorToken r; + int i = 0; Datum *entries; /* If the root level is empty, we certainly have no keys */ @@ -333,10 +333,10 @@ gin_extract_jsonb_path(PG_FUNCTION_ARGS) int total = 2 * JB_ROOT_COUNT(jb); JsonbIterator *it; JsonbValue v; + JsonbIteratorToken r; PathHashStack tail; PathHashStack *stack; - int i = 0, - r; + int i = 0; Datum *entries; /* If the root level is empty, we certainly have no keys */ @@ -429,7 +429,7 @@ gin_extract_jsonb_path(PG_FUNCTION_ARGS) stack = parent; break; default: - elog(ERROR, "invalid JsonbIteratorNext rc: %d", r); + elog(ERROR, "invalid JsonbIteratorNext rc: %d", (int) r); } } diff --git a/src/backend/utils/adt/jsonb_op.c b/src/backend/utils/adt/jsonb_op.c index 0635d0818f447..74cf4fc7153a5 100644 --- a/src/backend/utils/adt/jsonb_op.c +++ b/src/backend/utils/adt/jsonb_op.c @@ -254,8 +254,8 @@ jsonb_hash(PG_FUNCTION_ARGS) { Jsonb *jb = PG_GETARG_JSONB(0); JsonbIterator *it; - int32 r; JsonbValue v; + JsonbIteratorToken r; uint32 hash = 0; if (JB_ROOT_COUNT(jb) == 0) @@ -283,7 +283,7 @@ jsonb_hash(PG_FUNCTION_ARGS) case WJB_END_OBJECT: break; default: - elog(ERROR, "invalid JsonbIteratorNext rc: %d", r); + elog(ERROR, "invalid JsonbIteratorNext rc: %d", (int) r); } } diff --git a/src/backend/utils/adt/jsonb_util.c b/src/backend/utils/adt/jsonb_util.c index 4d733159d06de..c402eab22e634 100644 --- a/src/backend/utils/adt/jsonb_util.c +++ b/src/backend/utils/adt/jsonb_util.c @@ -187,7 +187,7 @@ compareJsonbContainers(JsonbContainer *a, JsonbContainer *b) { JsonbValue va, vb; - int ra, + JsonbIteratorToken ra, rb; ra = JsonbIteratorNext(&ita, &va, false); @@ -961,10 +961,10 @@ freeAndGetParent(JsonbIterator *it) bool JsonbDeepContains(JsonbIterator **val, JsonbIterator **mContained) { - uint32 rval, - rcont; JsonbValue vval, vcontained; + JsonbIteratorToken rval, + rcont; /* * Guard against stack overflow due to overly complex Jsonb. diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index 13d5b7af2f47d..222acd7afb711 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -288,7 +288,7 @@ jsonb_object_keys(PG_FUNCTION_ARGS) bool skipNested = false; JsonbIterator *it; JsonbValue v; - int r; + JsonbIteratorToken r; if (JB_ROOT_IS_SCALAR(jb)) ereport(ERROR, @@ -597,6 +597,17 @@ jsonb_array_element(PG_FUNCTION_ARGS) if (!JB_ROOT_IS_ARRAY(jb)) PG_RETURN_NULL(); + /* Handle negative subscript */ + if (element < 0) + { + uint32 nelements = JB_ROOT_COUNT(jb); + + if (-element > nelements) + PG_RETURN_NULL(); + else + element += nelements; + } + v = getIthJsonbValueFromContainer(&jb->root, element); if (v != NULL) PG_RETURN_JSONB(JsonbValueToJsonb(v)); @@ -629,6 +640,17 @@ jsonb_array_element_text(PG_FUNCTION_ARGS) if (!JB_ROOT_IS_ARRAY(jb)) PG_RETURN_NULL(); + /* Handle negative subscript */ + if (element < 0) + { + uint32 nelements = JB_ROOT_COUNT(jb); + + if (-element > nelements) + PG_RETURN_NULL(); + else + element += nelements; + } + v = getIthJsonbValueFromContainer(&jb->root, element); if (v != NULL) { @@ -719,7 +741,7 @@ get_path_all(FunctionCallInfo fcinfo, bool as_text) /* * we have no idea at this stage what structure the document is so * just convert anything in the path that we can to an integer and set - * all the other integers to -1 which will never match. + * all the other integers to INT_MIN which will never match. */ if (*tpath[i] != '\0') { @@ -728,13 +750,13 @@ get_path_all(FunctionCallInfo fcinfo, bool as_text) errno = 0; ind = strtol(tpath[i], &endptr, 10); - if (*endptr == '\0' && errno == 0 && ind <= INT_MAX && ind >= 0) + if (*endptr == '\0' && errno == 0 && ind <= INT_MAX && ind >= INT_MIN) ipath[i] = (int) ind; else - ipath[i] = -1; + ipath[i] = INT_MIN; } else - ipath[i] = -1; + ipath[i] = INT_MIN; } result = get_worker(json, tpath, ipath, npath, as_text); @@ -752,14 +774,15 @@ get_path_all(FunctionCallInfo fcinfo, bool as_text) * * json: JSON object (in text form) * tpath[]: field name(s) to extract - * ipath[]: array index(es) (zero-based) to extract + * ipath[]: array index(es) (zero-based) to extract, accepts negatives * npath: length of tpath[] and/or ipath[] * normalize_results: true to de-escape string and null scalars * * tpath can be NULL, or any one tpath[] entry can be NULL, if an object * field is not to be matched at that nesting level. Similarly, ipath can - * be NULL, or any one ipath[] entry can be -1, if an array element is not - * to be matched at that nesting level. + * be NULL, or any one ipath[] entry can be INT_MIN if an array element is + * not to be matched at that nesting level (a json datum should never be + * large enough to have -INT_MIN elements due to MaxAllocSize restriction). */ static text * get_worker(text *json, @@ -954,13 +977,24 @@ get_array_start(void *state) { /* Initialize counting of elements in this array */ _state->array_cur_index[lex_level] = -1; + + /* INT_MIN value is reserved to represent invalid subscript */ + if (_state->path_indexes[lex_level] < 0 && + _state->path_indexes[lex_level] != INT_MIN) + { + /* Negative subscript -- convert to positive-wise subscript */ + int nelements = json_count_array_elements(_state->lex); + + if (-_state->path_indexes[lex_level] <= nelements) + _state->path_indexes[lex_level] += nelements; + } } else if (lex_level == 0 && _state->npath == 0) { /* * Special case: we should match the entire array. We only need this - * at outermost level because at nested levels the match will have - * been started by the outer field or array element callback. + * at the outermost level because at nested levels the match will + * have been started by the outer field or array element callback. */ _state->result_start = _state->lex->token_start; } @@ -1209,9 +1243,30 @@ get_jsonb_path_all(FunctionCallInfo fcinfo, bool as_text) errno = 0; lindex = strtol(indextext, &endptr, 10); if (endptr == indextext || *endptr != '\0' || errno != 0 || - lindex > INT_MAX || lindex < 0) + lindex > INT_MAX || lindex < INT_MIN) PG_RETURN_NULL(); - index = (uint32) lindex; + + if (lindex >= 0) + { + index = (uint32) lindex; + } + else + { + /* Handle negative subscript */ + uint32 nelements; + + /* Container must be array, but make sure */ + if ((container->header & JB_FARRAY) == 0) + elog(ERROR, "not a jsonb array"); + + nelements = container->header & JB_CMASK; + + if (-lindex > nelements) + PG_RETURN_NULL(); + else + index = nelements + lindex; + } + jbvp = getIthJsonbValueFromContainer(container, index); } else @@ -1228,7 +1283,7 @@ get_jsonb_path_all(FunctionCallInfo fcinfo, bool as_text) if (jbvp->type == jbvBinary) { JsonbIterator *it = JsonbIteratorInit((JsonbContainer *) jbvp->val.binary.data); - int r; + JsonbIteratorToken r; r = JsonbIteratorNext(&it, &tv, true); container = (JsonbContainer *) jbvp->val.binary.data; @@ -1401,7 +1456,7 @@ each_worker_jsonb(FunctionCallInfo fcinfo, const char *funcname, bool as_text) bool skipNested = false; JsonbIterator *it; JsonbValue v; - int r; + JsonbIteratorToken r; if (!JB_ROOT_IS_OBJECT(jb)) ereport(ERROR, @@ -1720,7 +1775,7 @@ elements_worker_jsonb(FunctionCallInfo fcinfo, const char *funcname, bool skipNested = false; JsonbIterator *it; JsonbValue v; - int r; + JsonbIteratorToken r; if (JB_ROOT_IS_SCALAR(jb)) ereport(ERROR, @@ -2737,7 +2792,7 @@ populate_recordset_worker(FunctionCallInfo fcinfo, const char *funcname, JsonbIterator *it; JsonbValue v; bool skipNested = false; - int r; + JsonbIteratorToken r; Assert(jtype == JSONBOID); @@ -3175,9 +3230,9 @@ jsonb_strip_nulls(PG_FUNCTION_ARGS) JsonbIterator *it; JsonbParseState *parseState = NULL; JsonbValue *res = NULL; - int type; JsonbValue v, k; + JsonbIteratorToken type; bool last_was_key = false; if (JB_ROOT_IS_SCALAR(jb)) @@ -3235,8 +3290,8 @@ addJsonbToParseState(JsonbParseState **jbps, Jsonb *jb) { JsonbIterator *it; JsonbValue *o = &(*jbps)->contVal; - int type; JsonbValue v; + JsonbIteratorToken type; it = JsonbIteratorInit(&jb->root); @@ -3304,12 +3359,18 @@ jsonb_concat(PG_FUNCTION_ARGS) *it2; /* - * If one of the jsonb is empty, just return other. + * If one of the jsonb is empty, just return the other if it's not + * scalar and both are of the same kind. If it's a scalar or they are + * of different kinds we need to perform the concatenation even if one is + * empty. */ - if (JB_ROOT_COUNT(jb1) == 0) - PG_RETURN_JSONB(jb2); - else if (JB_ROOT_COUNT(jb2) == 0) - PG_RETURN_JSONB(jb1); + if (JB_ROOT_IS_OBJECT(jb1) == JB_ROOT_IS_OBJECT(jb2)) + { + if (JB_ROOT_COUNT(jb1) == 0 && !JB_ROOT_IS_SCALAR(jb2)) + PG_RETURN_JSONB(jb2); + else if (JB_ROOT_COUNT(jb2) == 0 && !JB_ROOT_IS_SCALAR(jb1)) + PG_RETURN_JSONB(jb1); + } it1 = JsonbIteratorInit(&jb1->root); it2 = JsonbIteratorInit(&jb2->root); @@ -3337,10 +3398,10 @@ jsonb_delete(PG_FUNCTION_ARGS) int keylen = VARSIZE_ANY_EXHDR(key); JsonbParseState *state = NULL; JsonbIterator *it; - uint32 r; JsonbValue v, *res = NULL; bool skipNested = false; + JsonbIteratorToken r; if (JB_ROOT_IS_SCALAR(in)) ereport(ERROR, @@ -3389,11 +3450,11 @@ jsonb_delete_idx(PG_FUNCTION_ARGS) int idx = PG_GETARG_INT32(1); JsonbParseState *state = NULL; JsonbIterator *it; - uint32 r, - i = 0, + uint32 i = 0, n; JsonbValue v, *res = NULL; + JsonbIteratorToken r; if (JB_ROOT_IS_SCALAR(in)) ereport(ERROR, @@ -3411,10 +3472,8 @@ jsonb_delete_idx(PG_FUNCTION_ARGS) it = JsonbIteratorInit(&in->root); r = JsonbIteratorNext(&it, &v, false); - if (r == WJB_BEGIN_ARRAY) - n = v.val.array.nElems; - else - n = v.val.object.nPairs; + Assert (r == WJB_BEGIN_ARRAY); + n = v.val.array.nElems; if (idx < 0) { @@ -3427,18 +3486,14 @@ jsonb_delete_idx(PG_FUNCTION_ARGS) if (idx >= n) PG_RETURN_JSONB(in); - pushJsonbValue(&state, r, r < WJB_BEGIN_ARRAY ? &v : NULL); + pushJsonbValue(&state, r, NULL); while ((r = JsonbIteratorNext(&it, &v, true)) != 0) { - if (r == WJB_ELEM || r == WJB_KEY) + if (r == WJB_ELEM) { if (i++ == idx) - { - if (r == WJB_KEY) - JsonbIteratorNext(&it, &v, true); /* skip value */ continue; - } } res = pushJsonbValue(&state, r, r < WJB_BEGIN_ARRAY ? &v : NULL); @@ -3551,13 +3606,13 @@ static JsonbValue * IteratorConcat(JsonbIterator **it1, JsonbIterator **it2, JsonbParseState **state) { - uint32 r1, - r2, - rk1, - rk2; JsonbValue v1, v2, *res = NULL; + JsonbIteratorToken r1, + r2, + rk1, + rk2; r1 = rk1 = JsonbIteratorNext(it1, &v1, false); r2 = rk2 = JsonbIteratorNext(it2, &v2, false); @@ -3657,7 +3712,7 @@ IteratorConcat(JsonbIterator **it1, JsonbIterator **it2, * If newval is null, the element is to be removed. * * If create is true, we create the new value if the key or array index - * does not exist. All path elemnts before the last must already exist + * does not exist. All path elements before the last must already exist * whether or not create is true, or nothing is done. */ static JsonbValue * @@ -3666,8 +3721,13 @@ setPath(JsonbIterator **it, Datum *path_elems, JsonbParseState **st, int level, Jsonb *newval, bool create) { JsonbValue v; + JsonbIteratorToken r; JsonbValue *res = NULL; - int r; + + check_stack_depth(); + + if (path_nulls[level]) + elog(ERROR, "path element at the position %d is NULL", level + 1); r = JsonbIteratorNext(it, &v, false); @@ -3733,7 +3793,7 @@ setPathObject(JsonbIterator **it, Datum *path_elems, bool *path_nulls, for (i = 0; i < npairs; i++) { - int r = JsonbIteratorNext(it, &k, true); + JsonbIteratorToken r = JsonbIteratorNext(it, &k, true); Assert(r == WJB_KEY); @@ -3818,8 +3878,9 @@ setPathArray(JsonbIterator **it, Datum *path_elems, bool *path_nulls, errno = 0; lindex = strtol(c, &badp, 10); - if (errno != 0 || badp == c || lindex > INT_MAX || lindex < INT_MIN) - idx = nelems; + if (errno != 0 || badp == c || *badp != '\0' || lindex > INT_MAX || + lindex < INT_MIN) + elog(ERROR, "path element at the position %d is not an integer", level + 1); else idx = lindex; } @@ -3829,7 +3890,7 @@ setPathArray(JsonbIterator **it, Datum *path_elems, bool *path_nulls, if (idx < 0) { if (-idx > nelems) - idx = -1; + idx = INT_MIN; else idx = nelems + idx; } @@ -3838,12 +3899,12 @@ setPathArray(JsonbIterator **it, Datum *path_elems, bool *path_nulls, idx = nelems; /* - * if we're creating, and idx == -1, we prepend the new value to the array - * also if the array is empty - in which case we don't really care what - * the idx value is + * if we're creating, and idx == INT_MIN, we prepend the new value to the + * array also if the array is empty - in which case we don't really care + * what the idx value is */ - if ((idx == -1 || nelems == 0) && create && (level == path_len - 1)) + if ((idx == INT_MIN || nelems == 0) && create && (level == path_len - 1)) { Assert(newval != NULL); addJsonbToParseState(st, newval); @@ -3853,7 +3914,7 @@ setPathArray(JsonbIterator **it, Datum *path_elems, bool *path_nulls, /* iterate over the array elements */ for (i = 0; i < nelems; i++) { - int r; + JsonbIteratorToken r; if (i == idx && level < path_len) { diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c index 284c5aeb886a8..b6db4f3b018a4 100644 --- a/src/backend/utils/adt/like.c +++ b/src/backend/utils/adt/like.c @@ -21,6 +21,7 @@ #include "catalog/pg_collation.h" #include "mb/pg_wchar.h" +#include "miscadmin.h" #include "utils/builtins.h" #include "utils/pg_locale.h" diff --git a/src/backend/utils/adt/like_match.c b/src/backend/utils/adt/like_match.c index 3ec24872d0075..83ece28722cb2 100644 --- a/src/backend/utils/adt/like_match.c +++ b/src/backend/utils/adt/like_match.c @@ -83,6 +83,9 @@ MatchText(char *t, int tlen, char *p, int plen, if (plen == 1 && *p == '%') return LIKE_TRUE; + /* Since this function recurses, it could be driven to stack overflow */ + check_stack_depth(); + /* * In this loop, we advance by char when matching wildcards (and thus on * recursive entry to this function we are properly char-synced). On other diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c index c0495d955ce6f..3ef6e43c4d01d 100644 --- a/src/backend/utils/adt/misc.c +++ b/src/backend/utils/adt/misc.c @@ -168,7 +168,7 @@ pg_cancel_backend(PG_FUNCTION_ARGS) if (r == SIGNAL_BACKEND_NOPERMISSION) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - (errmsg("must be a member of the role whose query is being cancelled")))); + (errmsg("must be a member of the role whose query is being canceled")))); PG_RETURN_BOOL(r == SIGNAL_BACKEND_SUCCESS); } diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index 7ce41b788880c..1667d8093f1b7 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -4769,7 +4769,9 @@ set_var_from_var(NumericVar *value, NumericVar *dest) newbuf = digitbuf_alloc(value->ndigits + 1); newbuf[0] = 0; /* spare digit for rounding */ - memcpy(newbuf + 1, value->digits, value->ndigits * sizeof(NumericDigit)); + if (value->ndigits > 0) /* else value->digits might be null */ + memcpy(newbuf + 1, value->digits, + value->ndigits * sizeof(NumericDigit)); digitbuf_free(dest->buf); @@ -5090,8 +5092,9 @@ make_result(NumericVar *var) result->choice.n_long.n_weight = weight; } - memcpy(NUMERIC_DIGITS(result), digits, n * sizeof(NumericDigit)); Assert(NUMERIC_NDIGITS(result) == n); + if (n > 0) + memcpy(NUMERIC_DIGITS(result), digits, n * sizeof(NumericDigit)); /* Check for overflow of int16 fields */ if (NUMERIC_WEIGHT(result) != weight || @@ -5786,9 +5789,15 @@ mul_var(NumericVar *var1, NumericVar *var2, NumericVar *result, * to avoid normalizing carries immediately. * * maxdig tracks the maximum possible value of any dig[] entry; when this - * threatens to exceed INT_MAX, we take the time to propagate carries. To - * avoid overflow in maxdig itself, it actually represents the max - * possible value divided by NBASE-1. + * threatens to exceed INT_MAX, we take the time to propagate carries. + * Furthermore, we need to ensure that overflow doesn't occur during the + * carry propagation passes either. The carry values could be as much as + * INT_MAX/NBASE, so really we must normalize when digits threaten to + * exceed INT_MAX - INT_MAX/NBASE. + * + * To avoid overflow in maxdig itself, it actually represents the max + * possible value divided by NBASE-1, ie, at the top of the loop it is + * known that no dig[] entry exceeds maxdig * (NBASE-1). */ dig = (int *) palloc0(res_ndigits * sizeof(int)); maxdig = 0; @@ -5803,7 +5812,7 @@ mul_var(NumericVar *var1, NumericVar *var2, NumericVar *result, /* Time to normalize? */ maxdig += var1digit; - if (maxdig > INT_MAX / (NBASE - 1)) + if (maxdig > (INT_MAX - INT_MAX / NBASE) / (NBASE - 1)) { /* Yes, do it */ carry = 0; diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index 84215e07a772a..d91959ea7f840 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -854,6 +854,64 @@ IsoLocaleName(const char *winlocname) #endif /* WIN32 && LC_MESSAGES */ +/* + * Detect aging strxfrm() implementations that, in a subset of locales, write + * past the specified buffer length. Affected users must update OS packages + * before using PostgreSQL 9.5 or later. + * + * Assume that the bug can come and go from one postmaster startup to another + * due to physical replication among diverse machines. Assume that the bug's + * presence will not change during the life of a particular postmaster. Given + * those assumptions, call this no less than once per postmaster startup per + * LC_COLLATE setting used. No known-affected system offers strxfrm_l(), so + * there is no need to consider pg_collation locales. + */ +void +check_strxfrm_bug(void) +{ + char buf[32]; + const int canary = 0x7F; + bool ok = true; + + /* + * Given a two-byte ASCII string and length limit 7, 8 or 9, Solaris 10 + * 05/08 returns 18 and modifies 10 bytes. It respects limits above or + * below that range. + * + * The bug is present in Solaris 8 as well; it is absent in Solaris 10 + * 01/13 and Solaris 11.2. Affected locales include is_IS.ISO8859-1, + * en_US.UTF-8, en_US.ISO8859-1, and ru_RU.KOI8-R. Unaffected locales + * include de_DE.UTF-8, de_DE.ISO8859-1, zh_TW.UTF-8, and C. + */ + buf[7] = canary; + (void) strxfrm(buf, "ab", 7); + if (buf[7] != canary) + ok = false; + + /* + * illumos bug #1594 was present in the source tree from 2010-10-11 to + * 2012-02-01. Given an ASCII string of any length and length limit 1, + * affected systems ignore the length limit and modify a number of bytes + * one less than the return value. The problem inputs for this bug do not + * overlap those for the Solaris bug, hence a distinct test. + * + * Affected systems include smartos-20110926T021612Z. Affected locales + * include en_US.ISO8859-1 and en_US.UTF-8. Unaffected locales include C. + */ + buf[1] = canary; + (void) strxfrm(buf, "a", 1); + if (buf[1] != canary) + ok = false; + + if (!ok) + ereport(ERROR, + (errcode(ERRCODE_SYSTEM_ERROR), + errmsg_internal("strxfrm(), in locale \"%s\", writes past the specified array length", + setlocale(LC_COLLATE, NULL)), + errhint("Apply system library package updates."))); +} + + /* * Cache mechanism for collation information. * diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c index 9ad460abfbdbc..5b809aa7d4996 100644 --- a/src/backend/utils/adt/pseudotypes.c +++ b/src/backend/utils/adt/pseudotypes.c @@ -373,6 +373,33 @@ fdw_handler_out(PG_FUNCTION_ARGS) } +/* + * tsm_handler_in - input routine for pseudo-type TSM_HANDLER. + */ +Datum +tsm_handler_in(PG_FUNCTION_ARGS) +{ + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot accept a value of type tsm_handler"))); + + PG_RETURN_VOID(); /* keep compiler quiet */ +} + +/* + * tsm_handler_out - output routine for pseudo-type TSM_HANDLER. + */ +Datum +tsm_handler_out(PG_FUNCTION_ARGS) +{ + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot display a value of type tsm_handler"))); + + PG_RETURN_VOID(); /* keep compiler quiet */ +} + + /* * internal_in - input routine for pseudo-type INTERNAL. */ diff --git a/src/backend/utils/adt/rangetypes.c b/src/backend/utils/adt/rangetypes.c index aaf4cb68109a3..88f857b509f80 100644 --- a/src/backend/utils/adt/rangetypes.c +++ b/src/backend/utils/adt/rangetypes.c @@ -33,6 +33,7 @@ #include "access/hash.h" #include "lib/stringinfo.h" #include "libpq/pqformat.h" +#include "miscadmin.h" #include "utils/builtins.h" #include "utils/date.h" #include "utils/int8.h" @@ -89,6 +90,8 @@ range_in(PG_FUNCTION_ARGS) RangeBound lower; RangeBound upper; + check_stack_depth(); /* recurses when subtype is a range type */ + cache = get_range_io_data(fcinfo, rngtypoid, IOFunc_input); /* parse */ @@ -128,6 +131,8 @@ range_out(PG_FUNCTION_ARGS) RangeBound upper; bool empty; + check_stack_depth(); /* recurses when subtype is a range type */ + cache = get_range_io_data(fcinfo, RangeTypeGetOid(range), IOFunc_output); /* deserialize */ @@ -165,6 +170,8 @@ range_recv(PG_FUNCTION_ARGS) RangeBound lower; RangeBound upper; + check_stack_depth(); /* recurses when subtype is a range type */ + cache = get_range_io_data(fcinfo, rngtypoid, IOFunc_receive); /* receive the flags... */ @@ -245,6 +252,8 @@ range_send(PG_FUNCTION_ARGS) RangeBound upper; bool empty; + check_stack_depth(); /* recurses when subtype is a range type */ + cache = get_range_io_data(fcinfo, RangeTypeGetOid(range), IOFunc_send); /* deserialize */ @@ -1142,6 +1151,8 @@ range_cmp(PG_FUNCTION_ARGS) empty2; int cmp; + check_stack_depth(); /* recurses when subtype is a range type */ + /* Different types should be prevented by ANYRANGE matching rules */ if (RangeTypeGetOid(r1) != RangeTypeGetOid(r2)) elog(ERROR, "range types do not match"); @@ -1221,6 +1232,8 @@ hash_range(PG_FUNCTION_ARGS) uint32 lower_hash; uint32 upper_hash; + check_stack_depth(); /* recurses when subtype is a range type */ + typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r)); /* deserialize */ diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c index 0bfeb5e3fd76c..53e71dcf57f66 100644 --- a/src/backend/utils/adt/regproc.c +++ b/src/backend/utils/adt/regproc.c @@ -855,7 +855,7 @@ format_operator_internal(Oid operator_oid, bool force_qualify) /* * Would this oper be found (given the right args) by regoperatorin? - * If not, or if caller explicitely requests it, we need to qualify + * If not, or if caller explicitly requests it, we need to qualify * it. */ if (force_qualify || !OperatorIsVisible(operator_oid)) diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index 88dd3faf2d9a0..6569fdba1642e 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -40,6 +40,7 @@ #include "commands/trigger.h" #include "executor/executor.h" #include "executor/spi.h" +#include "lib/ilist.h" #include "parser/parse_coerce.h" #include "parser/parse_relation.h" #include "miscadmin.h" @@ -125,6 +126,7 @@ typedef struct RI_ConstraintInfo * PK) */ Oid ff_eq_oprs[RI_MAX_NUMKEYS]; /* equality operators (FK = * FK) */ + dlist_node valid_link; /* Link in list of valid entries */ } RI_ConstraintInfo; @@ -185,6 +187,8 @@ typedef struct RI_CompareHashEntry static HTAB *ri_constraint_cache = NULL; static HTAB *ri_query_cache = NULL; static HTAB *ri_compare_cache = NULL; +static dlist_head ri_constraint_cache_valid_list; +static int ri_constraint_cache_valid_count = 0; /* ---------- @@ -2924,6 +2928,13 @@ ri_LoadConstraintInfo(Oid constraintOid) ReleaseSysCache(tup); + /* + * For efficient processing of invalidation messages below, we keep a + * doubly-linked list, and a count, of all currently valid entries. + */ + dlist_push_tail(&ri_constraint_cache_valid_list, &riinfo->valid_link); + ri_constraint_cache_valid_count++; + riinfo->valid = true; return riinfo; @@ -2936,21 +2947,41 @@ ri_LoadConstraintInfo(Oid constraintOid) * gets enough update traffic that it's probably worth being smarter. * Invalidate any ri_constraint_cache entry associated with the syscache * entry with the specified hash value, or all entries if hashvalue == 0. + * + * Note: at the time a cache invalidation message is processed there may be + * active references to the cache. Because of this we never remove entries + * from the cache, but only mark them invalid, which is harmless to active + * uses. (Any query using an entry should hold a lock sufficient to keep that + * data from changing under it --- but we may get cache flushes anyway.) */ static void InvalidateConstraintCacheCallBack(Datum arg, int cacheid, uint32 hashvalue) { - HASH_SEQ_STATUS status; - RI_ConstraintInfo *hentry; + dlist_mutable_iter iter; Assert(ri_constraint_cache != NULL); - hash_seq_init(&status, ri_constraint_cache); - while ((hentry = (RI_ConstraintInfo *) hash_seq_search(&status)) != NULL) + /* + * If the list of currently valid entries gets excessively large, we mark + * them all invalid so we can empty the list. This arrangement avoids + * O(N^2) behavior in situations where a session touches many foreign keys + * and also does many ALTER TABLEs, such as a restore from pg_dump. + */ + if (ri_constraint_cache_valid_count > 1000) + hashvalue = 0; /* pretend it's a cache reset */ + + dlist_foreach_modify(iter, &ri_constraint_cache_valid_list) { - if (hentry->valid && - (hashvalue == 0 || hentry->oidHashValue == hashvalue)) - hentry->valid = false; + RI_ConstraintInfo *riinfo = dlist_container(RI_ConstraintInfo, + valid_link, iter.cur); + + if (hashvalue == 0 || riinfo->oidHashValue == hashvalue) + { + riinfo->valid = false; + /* Remove invalidated entries from the list, too */ + dlist_delete(iter.cur); + ri_constraint_cache_valid_count--; + } } } @@ -2970,7 +3001,6 @@ ri_PlanCheck(const char *querystr, int nargs, Oid *argtypes, Relation query_rel; Oid save_userid; int save_sec_context; - int temp_sec_context; /* * Use the query type code to determine whether the query is run against @@ -2983,22 +3013,9 @@ ri_PlanCheck(const char *querystr, int nargs, Oid *argtypes, /* Switch to proper UID to perform check as */ GetUserIdAndSecContext(&save_userid, &save_sec_context); - - /* - * Row-level security should be disabled in the case where a foreign-key - * relation is queried to check existence of tuples that references the - * primary-key being modified. - */ - temp_sec_context = save_sec_context | SECURITY_LOCAL_USERID_CHANGE; - if (qkey->constr_queryno == RI_PLAN_CHECK_LOOKUPPK - || qkey->constr_queryno == RI_PLAN_CHECK_LOOKUPPK_FROM_PK - || qkey->constr_queryno == RI_PLAN_RESTRICT_DEL_CHECKREF - || qkey->constr_queryno == RI_PLAN_RESTRICT_UPD_CHECKREF) - temp_sec_context |= SECURITY_ROW_LEVEL_DISABLED; - - SetUserIdAndSecContext(RelationGetForm(query_rel)->relowner, - temp_sec_context); + save_sec_context | SECURITY_LOCAL_USERID_CHANGE | + SECURITY_NOFORCE_RLS); /* Create the plan */ qplan = SPI_prepare(querystr, nargs, argtypes); @@ -3118,7 +3135,8 @@ ri_PerformCheck(const RI_ConstraintInfo *riinfo, /* Switch to proper UID to perform check as */ GetUserIdAndSecContext(&save_userid, &save_sec_context); SetUserIdAndSecContext(RelationGetForm(query_rel)->relowner, - save_sec_context | SECURITY_LOCAL_USERID_CHANGE); + save_sec_context | SECURITY_LOCAL_USERID_CHANGE | + SECURITY_NOFORCE_RLS); /* Finally we can run the query. */ spi_result = SPI_execute_snapshot(qplan, @@ -3243,7 +3261,7 @@ ri_ReportViolation(const RI_ConstraintInfo *riinfo, * privileges. */ - if (check_enable_rls(rel_oid, GetUserId(), true) != RLS_ENABLED) + if (check_enable_rls(rel_oid, InvalidOid, true) != RLS_ENABLED) { aclresult = pg_class_aclcheck(rel_oid, GetUserId(), ACL_SELECT); if (aclresult != ACLCHECK_OK) @@ -3264,6 +3282,8 @@ ri_ReportViolation(const RI_ConstraintInfo *riinfo, } } } + else + has_perm = false; if (has_perm) { diff --git a/src/backend/utils/adt/rowtypes.c b/src/backend/utils/adt/rowtypes.c index a65e18d4040b7..e1c72a123245d 100644 --- a/src/backend/utils/adt/rowtypes.c +++ b/src/backend/utils/adt/rowtypes.c @@ -21,6 +21,7 @@ #include "catalog/pg_type.h" #include "funcapi.h" #include "libpq/pqformat.h" +#include "miscadmin.h" #include "utils/builtins.h" #include "utils/lsyscache.h" #include "utils/typcache.h" @@ -73,12 +74,8 @@ record_in(PG_FUNCTION_ARGS) { char *string = PG_GETARG_CSTRING(0); Oid tupType = PG_GETARG_OID(1); - -#ifdef NOT_USED - int32 typmod = PG_GETARG_INT32(2); -#endif + int32 tupTypmod = PG_GETARG_INT32(2); HeapTupleHeader result; - int32 tupTypmod; TupleDesc tupdesc; HeapTuple tuple; RecordIOData *my_extra; @@ -90,17 +87,20 @@ record_in(PG_FUNCTION_ARGS) bool *nulls; StringInfoData buf; + check_stack_depth(); /* recurses for record-type columns */ + /* - * Use the passed type unless it's RECORD; we can't support input of - * anonymous types, mainly because there's no good way to figure out which - * anonymous type is wanted. Note that for RECORD, what we'll probably - * actually get is RECORD's typelem, ie, zero. + * Give a friendly error message if we did not get enough info to identify + * the target record type. (lookup_rowtype_tupdesc would fail anyway, but + * with a non-user-friendly message.) In ordinary SQL usage, we'll get -1 + * for typmod, since composite types and RECORD have no type modifiers at + * the SQL level, and thus must fail for RECORD. However some callers can + * supply a valid typmod, and then we can do something useful for RECORD. */ - if (tupType == InvalidOid || tupType == RECORDOID) + if (tupType == RECORDOID && tupTypmod < 0) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("input of anonymous composite types is not implemented"))); - tupTypmod = -1; /* for all non-anonymous types */ /* * This comes from the composite type's pg_type.oid and stores system oids @@ -312,6 +312,8 @@ record_out(PG_FUNCTION_ARGS) bool *nulls; StringInfoData buf; + check_stack_depth(); /* recurses for record-type columns */ + /* Extract type info from the tuple itself */ tupType = HeapTupleHeaderGetTypeId(rec); tupTypmod = HeapTupleHeaderGetTypMod(rec); @@ -449,12 +451,8 @@ record_recv(PG_FUNCTION_ARGS) { StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); Oid tupType = PG_GETARG_OID(1); - -#ifdef NOT_USED - int32 typmod = PG_GETARG_INT32(2); -#endif + int32 tupTypmod = PG_GETARG_INT32(2); HeapTupleHeader result; - int32 tupTypmod; TupleDesc tupdesc; HeapTuple tuple; RecordIOData *my_extra; @@ -465,17 +463,21 @@ record_recv(PG_FUNCTION_ARGS) Datum *values; bool *nulls; + check_stack_depth(); /* recurses for record-type columns */ + /* - * Use the passed type unless it's RECORD; we can't support input of - * anonymous types, mainly because there's no good way to figure out which - * anonymous type is wanted. Note that for RECORD, what we'll probably - * actually get is RECORD's typelem, ie, zero. + * Give a friendly error message if we did not get enough info to identify + * the target record type. (lookup_rowtype_tupdesc would fail anyway, but + * with a non-user-friendly message.) In ordinary SQL usage, we'll get -1 + * for typmod, since composite types and RECORD have no type modifiers at + * the SQL level, and thus must fail for RECORD. However some callers can + * supply a valid typmod, and then we can do something useful for RECORD. */ - if (tupType == InvalidOid || tupType == RECORDOID) + if (tupType == RECORDOID && tupTypmod < 0) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("input of anonymous composite types is not implemented"))); - tupTypmod = -1; /* for all non-anonymous types */ + tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod); ncolumns = tupdesc->natts; @@ -655,6 +657,8 @@ record_send(PG_FUNCTION_ARGS) bool *nulls; StringInfoData buf; + check_stack_depth(); /* recurses for record-type columns */ + /* Extract type info from the tuple itself */ tupType = HeapTupleHeaderGetTypeId(rec); tupTypmod = HeapTupleHeaderGetTypMod(rec); @@ -798,6 +802,8 @@ record_cmp(FunctionCallInfo fcinfo) int i2; int j; + check_stack_depth(); /* recurses for record-type columns */ + /* Extract type info from the tuples */ tupType1 = HeapTupleHeaderGetTypeId(record1); tupTypmod1 = HeapTupleHeaderGetTypMod(record1); @@ -1034,6 +1040,8 @@ record_eq(PG_FUNCTION_ARGS) int i2; int j; + check_stack_depth(); /* recurses for record-type columns */ + /* Extract type info from the tuples */ tupType1 = HeapTupleHeaderGetTypeId(record1); tupTypmod1 = HeapTupleHeaderGetTypMod(record1); diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 2cd4b62701f6f..51391f6a4e0d1 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -32,7 +32,6 @@ #include "catalog/pg_opclass.h" #include "catalog/pg_operator.h" #include "catalog/pg_proc.h" -#include "catalog/pg_tablesample_method.h" #include "catalog/pg_trigger.h" #include "catalog/pg_type.h" #include "commands/defrem.h" @@ -349,8 +348,6 @@ static void make_ruledef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc, int prettyFlags); static void make_viewdef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc, int prettyFlags, int wrapColumn); -static void get_tablesample_def(TableSampleClause *tablesample, - deparse_context *context); static void get_query_def(Query *query, StringInfo buf, List *parentnamespace, TupleDesc resultDesc, int prettyFlags, int wrapColumn, int startIndent); @@ -416,6 +413,8 @@ static void get_column_alias_list(deparse_columns *colinfo, static void get_from_clause_coldeflist(RangeTblFunction *rtfunc, deparse_columns *colinfo, deparse_context *context); +static void get_tablesample_def(TableSampleClause *tablesample, + deparse_context *context); static void get_opclass_name(Oid opclass, Oid actual_datatype, StringInfo buf); static Node *processIndirection(Node *node, deparse_context *context, @@ -4235,50 +4234,6 @@ make_viewdef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc, heap_close(ev_relation, AccessShareLock); } -/* ---------- - * get_tablesample_def - Convert TableSampleClause back to SQL - * ---------- - */ -static void -get_tablesample_def(TableSampleClause *tablesample, deparse_context *context) -{ - StringInfo buf = context->buf; - HeapTuple tuple; - Form_pg_tablesample_method tsm; - char *tsmname; - int nargs; - ListCell *l; - - /* Load the tablesample method */ - tuple = SearchSysCache1(TABLESAMPLEMETHODOID, ObjectIdGetDatum(tablesample->tsmid)); - if (!HeapTupleIsValid(tuple)) - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("cache lookup failed for tablesample method %u", - tablesample->tsmid))); - - tsm = (Form_pg_tablesample_method) GETSTRUCT(tuple); - tsmname = NameStr(tsm->tsmname); - appendStringInfo(buf, " TABLESAMPLE %s (", quote_identifier(tsmname)); - - ReleaseSysCache(tuple); - - nargs = 0; - foreach(l, tablesample->args) - { - if (nargs++ > 0) - appendStringInfoString(buf, ", "); - get_rule_expr((Node *) lfirst(l), context, true); - } - appendStringInfoChar(buf, ')'); - - if (tablesample->repeatable != NULL) - { - appendStringInfoString(buf, " REPEATABLE ("); - get_rule_expr(tablesample->repeatable, context, true); - appendStringInfoChar(buf, ')'); - } -} /* ---------- * get_query_def - Parse back one query parsetree @@ -5487,7 +5442,7 @@ get_insert_query_def(Query *query, deparse_context *context) { OnConflictExpr *confl = query->onConflict; - appendStringInfo(buf, " ON CONFLICT"); + appendStringInfoString(buf, " ON CONFLICT"); if (confl->arbiterElems) { @@ -8781,9 +8736,6 @@ get_from_clause_item(Node *jtnode, Query *query, deparse_context *context) only_marker(rte), generate_relation_name(rte->relid, context->namespaces)); - - if (rte->tablesample) - get_tablesample_def(rte->tablesample, context); break; case RTE_SUBQUERY: /* Subquery RTE */ @@ -8963,6 +8915,10 @@ get_from_clause_item(Node *jtnode, Query *query, deparse_context *context) /* Else print column aliases as needed */ get_column_alias_list(colinfo, context); } + + /* Tablesample clause must go after any alias */ + if (rte->rtekind == RTE_RELATION && rte->tablesample) + get_tablesample_def(rte->tablesample, context); } else if (IsA(jtnode, JoinExpr)) { @@ -9162,6 +9118,44 @@ get_from_clause_coldeflist(RangeTblFunction *rtfunc, appendStringInfoChar(buf, ')'); } +/* + * get_tablesample_def - print a TableSampleClause + */ +static void +get_tablesample_def(TableSampleClause *tablesample, deparse_context *context) +{ + StringInfo buf = context->buf; + Oid argtypes[1]; + int nargs; + ListCell *l; + + /* + * We should qualify the handler's function name if it wouldn't be + * resolved by lookup in the current search path. + */ + argtypes[0] = INTERNALOID; + appendStringInfo(buf, " TABLESAMPLE %s (", + generate_function_name(tablesample->tsmhandler, 1, + NIL, argtypes, + false, NULL, EXPR_KIND_NONE)); + + nargs = 0; + foreach(l, tablesample->args) + { + if (nargs++ > 0) + appendStringInfoString(buf, ", "); + get_rule_expr((Node *) lfirst(l), context, false); + } + appendStringInfoChar(buf, ')'); + + if (tablesample->repeatable != NULL) + { + appendStringInfoString(buf, " REPEATABLE ("); + get_rule_expr((Node *) tablesample->repeatable, context, false); + appendStringInfoChar(buf, ')'); + } +} + /* * get_opclass_name - fetch name of an index operator class * diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 04ed07b762df6..6dd9fa2a598a2 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -105,6 +105,7 @@ #include "access/sysattr.h" #include "catalog/index.h" #include "catalog/pg_collation.h" +#include "catalog/pg_operator.h" #include "catalog/pg_opfamily.h" #include "catalog/pg_statistic.h" #include "catalog/pg_type.h" @@ -1439,6 +1440,50 @@ icnlikesel(PG_FUNCTION_ARGS) PG_RETURN_FLOAT8(patternsel(fcinfo, Pattern_Type_Like_IC, true)); } +/* + * boolvarsel - Selectivity of Boolean variable. + * + * This can actually be called on any boolean-valued expression. If it + * involves only Vars of the specified relation, and if there are statistics + * about the Var or expression (the latter is possible if it's indexed) then + * we'll produce a real estimate; otherwise it's just a default. + */ +Selectivity +boolvarsel(PlannerInfo *root, Node *arg, int varRelid) +{ + VariableStatData vardata; + double selec; + + examine_variable(root, arg, varRelid, &vardata); + if (HeapTupleIsValid(vardata.statsTuple)) + { + /* + * A boolean variable V is equivalent to the clause V = 't', so we + * compute the selectivity as if that is what we have. + */ + selec = var_eq_const(&vardata, BooleanEqualOperator, + BoolGetDatum(true), false, true); + } + else if (is_funcclause(arg)) + { + /* + * If we have no stats and it's a function call, estimate 0.3333333. + * This seems a pretty unprincipled choice, but Postgres has been + * using that estimate for function calls since 1992. The hoariness + * of this behavior suggests that we should not be in too much hurry + * to use another value. + */ + selec = 0.3333333; + } + else + { + /* Otherwise, the default estimate is 0.5 */ + selec = 0.5; + } + ReleaseVariableStats(vardata); + return selec; +} + /* * booltestsel - Selectivity of BooleanTest Node. */ @@ -3932,16 +3977,8 @@ convert_string_datum(Datum value, Oid typid) size_t xfrmlen2 PG_USED_FOR_ASSERTS_ONLY; /* - * Note: originally we guessed at a suitable output buffer size, and - * only needed to call strxfrm twice if our guess was too small. - * However, it seems that some versions of Solaris have buggy strxfrm - * that can write past the specified buffer length in that scenario. - * So, do it the dumb way for portability. - * - * Yet other systems (e.g., glibc) sometimes return a smaller value - * from the second call than the first; thus the Assert must be <= not - * == as you'd expect. Can't any of these people program their way - * out of a paper bag? + * XXX: We could guess at a suitable output buffer size and only call + * strxfrm twice if our guess is too small. * * XXX: strxfrm doesn't support UTF-8 encoding on Win32, it can return * bogus data or set an error. This is not really a problem unless it @@ -3974,6 +4011,11 @@ convert_string_datum(Datum value, Oid typid) #endif xfrmstr = (char *) palloc(xfrmlen + 1); xfrmlen2 = strxfrm(xfrmstr, val, xfrmlen + 1); + + /* + * Some systems (e.g., glibc) can return a smaller value from the + * second call than the first; thus the Assert must be <= not ==. + */ Assert(xfrmlen2 <= xfrmlen); pfree(val); val = xfrmstr; @@ -4635,8 +4677,8 @@ examine_simple_variable(PlannerInfo *root, Var *var, * *isdefault: set to TRUE if the result is a default rather than based on * anything meaningful. * - * NB: be careful to produce an integral result, since callers may compare - * the result to exact integer counts. + * NB: be careful to produce a positive integral result, since callers may + * compare the result to exact integer counts, or might divide by it. */ double get_variable_numdistinct(VariableStatData *vardata, bool *isdefault) @@ -4712,7 +4754,7 @@ get_variable_numdistinct(VariableStatData *vardata, bool *isdefault) * If we had an absolute estimate, use that. */ if (stadistinct > 0.0) - return stadistinct; + return clamp_row_est(stadistinct); /* * Otherwise we need to get the relation size; punt if not available. @@ -4733,7 +4775,7 @@ get_variable_numdistinct(VariableStatData *vardata, bool *isdefault) * If we had a relative estimate, use that. */ if (stadistinct < 0.0) - return floor((-stadistinct * ntuples) + 0.5); + return clamp_row_est(-stadistinct * ntuples); /* * With no data, estimate ndistinct = ntuples if the table is small, else @@ -4741,7 +4783,7 @@ get_variable_numdistinct(VariableStatData *vardata, bool *isdefault) * that the behavior isn't discontinuous. */ if (ntuples < DEFAULT_NUM_DISTINCT) - return ntuples; + return clamp_row_est(ntuples); *isdefault = true; return DEFAULT_NUM_DISTINCT; diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 23d3d2b65636e..8fbb310f338f4 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -68,7 +68,6 @@ typedef struct static TimeOffset time2t(const int hour, const int min, const int sec, const fsec_t fsec); -static void EncodeSpecialTimestamp(Timestamp dt, char *str); static Timestamp dt2local(Timestamp dt, int timezone); static void AdjustTimestampForTypmod(Timestamp *time, int32 typmod); static void AdjustIntervalForTypmod(Interval *interval, int32 typmod); @@ -1500,7 +1499,7 @@ make_interval(PG_FUNCTION_ARGS) /* EncodeSpecialTimestamp() * Convert reserved timestamp data type to string. */ -static void +void EncodeSpecialTimestamp(Timestamp dt, char *str) { if (TIMESTAMP_IS_NOBEGIN(dt)) @@ -4458,6 +4457,26 @@ timestamp_part(PG_FUNCTION_ARGS) result = date2isoyear(tm->tm_year, tm->tm_mon, tm->tm_mday); break; + case DTK_DOW: + case DTK_ISODOW: + if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL, NULL) != 0) + ereport(ERROR, + (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), + errmsg("timestamp out of range"))); + result = j2day(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday)); + if (val == DTK_ISODOW && result == 0) + result = 7; + break; + + case DTK_DOY: + if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL, NULL) != 0) + ereport(ERROR, + (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), + errmsg("timestamp out of range"))); + result = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) + - date2j(tm->tm_year, 1, 1) + 1); + break; + case DTK_TZ: case DTK_TZ_MINUTE: case DTK_TZ_HOUR: @@ -4481,26 +4500,6 @@ timestamp_part(PG_FUNCTION_ARGS) #endif break; - case DTK_DOW: - case DTK_ISODOW: - if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL, NULL) != 0) - ereport(ERROR, - (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), - errmsg("timestamp out of range"))); - result = j2day(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday)); - if (val == DTK_ISODOW && result == 0) - result = 7; - break; - - case DTK_DOY: - if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL, NULL) != 0) - ereport(ERROR, - (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), - errmsg("timestamp out of range"))); - result = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - - date2j(tm->tm_year, 1, 1) + 1); - break; - default: ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -4672,6 +4671,26 @@ timestamptz_part(PG_FUNCTION_ARGS) result = date2isoyear(tm->tm_year, tm->tm_mon, tm->tm_mday); break; + case DTK_DOW: + case DTK_ISODOW: + if (timestamp2tm(timestamp, &tz, tm, &fsec, NULL, NULL) != 0) + ereport(ERROR, + (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), + errmsg("timestamp out of range"))); + result = j2day(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday)); + if (val == DTK_ISODOW && result == 0) + result = 7; + break; + + case DTK_DOY: + if (timestamp2tm(timestamp, &tz, tm, &fsec, NULL, NULL) != 0) + ereport(ERROR, + (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), + errmsg("timestamp out of range"))); + result = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) + - date2j(tm->tm_year, 1, 1) + 1); + break; + default: ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -4693,26 +4712,6 @@ timestamptz_part(PG_FUNCTION_ARGS) #endif break; - case DTK_DOW: - case DTK_ISODOW: - if (timestamp2tm(timestamp, &tz, tm, &fsec, NULL, NULL) != 0) - ereport(ERROR, - (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), - errmsg("timestamp out of range"))); - result = j2day(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday)); - if (val == DTK_ISODOW && result == 0) - result = 7; - break; - - case DTK_DOY: - if (timestamp2tm(timestamp, &tz, tm, &fsec, NULL, NULL) != 0) - ereport(ERROR, - (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), - errmsg("timestamp out of range"))); - result = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - - date2j(tm->tm_year, 1, 1) + 1); - break; - default: ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), diff --git a/src/backend/utils/adt/tsquery_cleanup.c b/src/backend/utils/adt/tsquery_cleanup.c index 2545f4eea7c0a..b841006dd0f88 100644 --- a/src/backend/utils/adt/tsquery_cleanup.c +++ b/src/backend/utils/adt/tsquery_cleanup.c @@ -33,6 +33,9 @@ maketree(QueryItem *in) { NODE *node = (NODE *) palloc(sizeof(NODE)); + /* since this function recurses, it could be driven to stack overflow. */ + check_stack_depth(); + node->valnode = in; node->right = node->left = NULL; if (in->type == QI_OPR) diff --git a/src/backend/utils/adt/txid.c b/src/backend/utils/adt/txid.c index ce1d9abddea93..ba4b48298fddd 100644 --- a/src/backend/utils/adt/txid.c +++ b/src/backend/utils/adt/txid.c @@ -334,8 +334,11 @@ parse_snapshot(const char *str) return buf_finalize(buf); bad_format: - elog(ERROR, "invalid input for txid_snapshot: \"%s\"", str_start); - return NULL; + ereport(ERROR, + (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), + errmsg("invalid input syntax for type txid_snapshot: \"%s\"", + str_start))); + return NULL; /* keep compiler quiet */ } /* @@ -526,8 +529,10 @@ txid_snapshot_recv(PG_FUNCTION_ARGS) PG_RETURN_POINTER(snap); bad_format: - elog(ERROR, "invalid snapshot data"); - return (Datum) NULL; + ereport(ERROR, + (errcode(ERRCODE_INVALID_BINARY_REPRESENTATION), + errmsg("invalid external txid_snapshot data"))); + PG_RETURN_POINTER(NULL); /* keep compiler quiet */ } /* diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c index 99bc832ab826b..31dfc4d2a7a91 100644 --- a/src/backend/utils/adt/xml.c +++ b/src/backend/utils/adt/xml.c @@ -2473,7 +2473,7 @@ query_to_xml_internal(const char *query, char *tablename, { xmldata_root_element_start(result, xmltn, xmlschema, targetns, top_level); - appendStringInfoString(result, "\n"); + appendStringInfoChar(result, '\n'); } if (xmlschema) @@ -2637,7 +2637,7 @@ schema_to_xml_internal(Oid nspid, const char *xmlschema, bool nulls, result = makeStringInfo(); xmldata_root_element_start(result, xmlsn, xmlschema, targetns, top_level); - appendStringInfoString(result, "\n"); + appendStringInfoChar(result, '\n'); if (xmlschema) appendStringInfo(result, "%s\n\n", xmlschema); @@ -2815,7 +2815,7 @@ database_to_xml_internal(const char *xmlschema, bool nulls, result = makeStringInfo(); xmldata_root_element_start(result, xmlcn, xmlschema, targetns, true); - appendStringInfoString(result, "\n"); + appendStringInfoChar(result, '\n'); if (xmlschema) appendStringInfo(result, "%s\n\n", xmlschema); diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c index 7b32247d34eae..1dc293297d93e 100644 --- a/src/backend/utils/cache/lsyscache.c +++ b/src/backend/utils/cache/lsyscache.c @@ -32,7 +32,6 @@ #include "catalog/pg_range.h" #include "catalog/pg_statistic.h" #include "catalog/pg_transform.h" -#include "catalog/pg_tablesample_method.h" #include "catalog/pg_type.h" #include "miscadmin.h" #include "nodes/makefuncs.h" @@ -2997,29 +2996,3 @@ get_range_subtype(Oid rangeOid) else return InvalidOid; } - -/* ---------- PG_TABLESAMPLE_METHOD CACHE ---------- */ - -/* - * get_tablesample_method_name - given a tablesample method OID, - * look up the name or NULL if not found - */ -char * -get_tablesample_method_name(Oid tsmid) -{ - HeapTuple tuple; - - tuple = SearchSysCache1(TABLESAMPLEMETHODOID, ObjectIdGetDatum(tsmid)); - if (HeapTupleIsValid(tuple)) - { - Form_pg_tablesample_method tup = - (Form_pg_tablesample_method) GETSTRUCT(tuple); - char *result; - - result = pstrdup(NameStr(tup->tsmname)); - ReleaseSysCache(tuple); - return result; - } - else - return NULL; -} diff --git a/src/backend/utils/cache/plancache.c b/src/backend/utils/cache/plancache.c index e6808e7576359..1be20fcd9aa72 100644 --- a/src/backend/utils/cache/plancache.c +++ b/src/backend/utils/cache/plancache.c @@ -153,8 +153,6 @@ CreateCachedPlan(Node *raw_parse_tree, CachedPlanSource *plansource; MemoryContext source_context; MemoryContext oldcxt; - Oid user_id; - int security_context; Assert(query_string != NULL); /* required as of 8.4 */ @@ -177,8 +175,6 @@ CreateCachedPlan(Node *raw_parse_tree, */ oldcxt = MemoryContextSwitchTo(source_context); - GetUserIdAndSecContext(&user_id, &security_context); - plansource = (CachedPlanSource *) palloc0(sizeof(CachedPlanSource)); plansource->magic = CACHEDPLANSOURCE_MAGIC; plansource->raw_parse_tree = copyObject(raw_parse_tree); @@ -208,8 +204,6 @@ CreateCachedPlan(Node *raw_parse_tree, plansource->total_custom_cost = 0; plansource->num_custom_plans = 0; plansource->hasRowSecurity = false; - plansource->rowSecurityDisabled - = (security_context & SECURITY_ROW_LEVEL_DISABLED) != 0; plansource->row_security_env = row_security; plansource->planUserId = InvalidOid; @@ -606,17 +600,10 @@ RevalidateCachedQuery(CachedPlanSource *plansource) } /* - * Check if row security is enabled for this query and things have changed - * such that we need to invalidate this plan and rebuild it. Note that if - * row security was explicitly disabled (eg: this is a FK check plan) then - * we don't invalidate due to RLS. - * - * Otherwise, if the plan has a possible RLS dependency, force a replan if - * either the role under which the plan was planned or the row_security - * setting has been changed. + * If the plan has a possible RLS dependency, force a replan if either the + * role or the row_security setting has changed. */ if (plansource->is_valid - && !plansource->rowSecurityDisabled && plansource->hasRowSecurity && (plansource->planUserId != GetUserId() || plansource->row_security_env != row_security)) diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 44e95098acbf2..9c3d096d9999c 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -859,8 +859,6 @@ equalPolicy(RowSecurityPolicy *policy1, RowSecurityPolicy *policy2) if (policy2 == NULL) return false; - if (policy1->policy_id != policy2->policy_id) - return false; if (policy1->polcmd != policy2->polcmd) return false; if (policy1->hassublinks != policy2->hassublinks) @@ -2048,7 +2046,9 @@ RelationClearRelation(Relation relation, bool rebuild) { /* * As per notes above, a rel to be rebuilt MUST have refcnt > 0; while of - * course it would be a bad idea to blow away one with nonzero refcnt. + * course it would be an equally bad idea to blow away one with nonzero + * refcnt, since that would leave someone somewhere with a dangling + * pointer. All callers are expected to have verified that this holds. */ Assert(rebuild ? !RelationHasReferenceCountZero(relation) : @@ -2654,11 +2654,25 @@ AtEOXact_cleanup(Relation relation, bool isCommit) { if (isCommit) relation->rd_createSubid = InvalidSubTransactionId; - else + else if (RelationHasReferenceCountZero(relation)) { RelationClearRelation(relation, false); return; } + else + { + /* + * Hmm, somewhere there's a (leaked?) reference to the relation. + * We daren't remove the entry for fear of dereferencing a + * dangling pointer later. Bleat, and mark it as not belonging to + * the current transaction. Hopefully it'll get cleaned up + * eventually. This must be just a WARNING to avoid + * error-during-error-recovery loops. + */ + relation->rd_createSubid = InvalidSubTransactionId; + elog(WARNING, "cannot remove relcache entry for \"%s\" because it has nonzero refcount", + RelationGetRelationName(relation)); + } } /* @@ -2747,11 +2761,24 @@ AtEOSubXact_cleanup(Relation relation, bool isCommit, { if (isCommit) relation->rd_createSubid = parentSubid; - else + else if (RelationHasReferenceCountZero(relation)) { RelationClearRelation(relation, false); return; } + else + { + /* + * Hmm, somewhere there's a (leaked?) reference to the relation. + * We daren't remove the entry for fear of dereferencing a + * dangling pointer later. Bleat, and transfer it to the parent + * subtransaction so we can try again later. This must be just a + * WARNING to avoid error-during-error-recovery loops. + */ + relation->rd_createSubid = parentSubid; + elog(WARNING, "cannot remove relcache entry for \"%s\" because it has nonzero refcount", + RelationGetRelationName(relation)); + } } /* diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c index b6333e362f018..efce7b9a3d13b 100644 --- a/src/backend/utils/cache/syscache.c +++ b/src/backend/utils/cache/syscache.c @@ -56,7 +56,6 @@ #include "catalog/pg_shseclabel.h" #include "catalog/pg_replication_origin.h" #include "catalog/pg_statistic.h" -#include "catalog/pg_tablesample_method.h" #include "catalog/pg_tablespace.h" #include "catalog/pg_transform.h" #include "catalog/pg_ts_config.h" @@ -667,28 +666,6 @@ static const struct cachedesc cacheinfo[] = { }, 128 }, - {TableSampleMethodRelationId, /* TABLESAMPLEMETHODNAME */ - TableSampleMethodNameIndexId, - 1, - { - Anum_pg_tablesample_method_tsmname, - 0, - 0, - 0, - }, - 2 - }, - {TableSampleMethodRelationId, /* TABLESAMPLEMETHODOID */ - TableSampleMethodOidIndexId, - 1, - { - ObjectIdAttributeNumber, - 0, - 0, - 0, - }, - 2 - }, {TableSpaceRelationId, /* TABLESPACEOID */ TablespaceOidIndexId, 1, diff --git a/src/backend/utils/errcodes.txt b/src/backend/utils/errcodes.txt index 6cc3ed96c447b..7b97d45a53a12 100644 --- a/src/backend/utils/errcodes.txt +++ b/src/backend/utils/errcodes.txt @@ -177,6 +177,8 @@ Section: Class 22 - Data Exception 2201B E ERRCODE_INVALID_REGULAR_EXPRESSION invalid_regular_expression 2201W E ERRCODE_INVALID_ROW_COUNT_IN_LIMIT_CLAUSE invalid_row_count_in_limit_clause 2201X E ERRCODE_INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE invalid_row_count_in_result_offset_clause +2202H E ERRCODE_INVALID_TABLESAMPLE_ARGUMENT invalid_tablesample_argument +2202G E ERRCODE_INVALID_TABLESAMPLE_REPEAT invalid_tablesample_repeat 22009 E ERRCODE_INVALID_TIME_ZONE_DISPLACEMENT_VALUE invalid_time_zone_displacement_value 2200C E ERRCODE_INVALID_USE_OF_ESCAPE_CHARACTER invalid_use_of_escape_character 2200G E ERRCODE_MOST_SPECIFIC_TYPE_MISMATCH most_specific_type_mismatch diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 2b53c19fb9744..fb3cb6eb3d5ab 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -199,8 +199,8 @@ InitPostmasterChild(void) /* * If possible, make this process a group leader, so that the postmaster * can signal any child processes too. Not all processes will have - * children, but for consistency we , but for consistency we make all - * postmaster child processes do this. + * children, but for consistency we make all postmaster child processes do + * this. */ #ifdef HAVE_SETSID if (setsid() < 0) @@ -341,7 +341,7 @@ GetAuthenticatedUserId(void) * GetUserIdAndSecContext/SetUserIdAndSecContext - get/set the current user ID * and the SecurityRestrictionContext flags. * - * Currently there are two valid bits in SecurityRestrictionContext: + * Currently there are three valid bits in SecurityRestrictionContext: * * SECURITY_LOCAL_USERID_CHANGE indicates that we are inside an operation * that is temporarily changing CurrentUserId via these functions. This is @@ -359,6 +359,13 @@ GetAuthenticatedUserId(void) * where the called functions are really supposed to be side-effect-free * anyway, such as VACUUM/ANALYZE/REINDEX. * + * SECURITY_NOFORCE_RLS indicates that we are inside an operation which should + * ignore the FORCE ROW LEVEL SECURITY per-table indication. This is used to + * ensure that FORCE RLS does not mistakenly break referential integrity + * checks. Note that this is intentionally only checked when running as the + * owner of the table (which should always be the case for referential + * integrity checks). + * * Unlike GetUserId, GetUserIdAndSecContext does *not* Assert that the current * value of CurrentUserId is valid; nor does SetUserIdAndSecContext require * the new value to be valid. In fact, these routines had better not @@ -401,6 +408,15 @@ InSecurityRestrictedOperation(void) return (SecurityRestrictionContext & SECURITY_RESTRICTED_OPERATION) != 0; } +/* + * InNoForceRLSOperation - are we ignoring FORCE ROW LEVEL SECURITY ? + */ +bool +InNoForceRLSOperation(void) +{ + return (SecurityRestrictionContext & SECURITY_NOFORCE_RLS) != 0; +} + /* * These are obsolete versions of Get/SetUserIdAndSecContext that are @@ -1006,7 +1022,11 @@ CreateLockFile(const char *filename, bool amPostmaster, if (lock_files == NIL) on_proc_exit(UnlinkLockFiles, 0); - lock_files = lappend(lock_files, pstrdup(filename)); + /* + * Use lcons so that the lock files are unlinked in reverse order of + * creation; this is critical! + */ + lock_files = lcons(pstrdup(filename), lock_files); } /* @@ -1198,6 +1218,76 @@ AddToDataDirLockFile(int target_line, const char *str) } +/* + * Recheck that the data directory lock file still exists with expected + * content. Return TRUE if the lock file appears OK, FALSE if it isn't. + * + * We call this periodically in the postmaster. The idea is that if the + * lock file has been removed or replaced by another postmaster, we should + * do a panic database shutdown. Therefore, we should return TRUE if there + * is any doubt: we do not want to cause a panic shutdown unnecessarily. + * Transient failures like EINTR or ENFILE should not cause us to fail. + * (If there really is something wrong, we'll detect it on a future recheck.) + */ +bool +RecheckDataDirLockFile(void) +{ + int fd; + int len; + long file_pid; + char buffer[BLCKSZ]; + + fd = open(DIRECTORY_LOCK_FILE, O_RDWR | PG_BINARY, 0); + if (fd < 0) + { + /* + * There are many foreseeable false-positive error conditions. For + * safety, fail only on enumerated clearly-something-is-wrong + * conditions. + */ + switch (errno) + { + case ENOENT: + case ENOTDIR: + /* disaster */ + ereport(LOG, + (errcode_for_file_access(), + errmsg("could not open file \"%s\": %m", + DIRECTORY_LOCK_FILE))); + return false; + default: + /* non-fatal, at least for now */ + ereport(LOG, + (errcode_for_file_access(), + errmsg("could not open file \"%s\": %m; continuing anyway", + DIRECTORY_LOCK_FILE))); + return true; + } + } + len = read(fd, buffer, sizeof(buffer) - 1); + if (len < 0) + { + ereport(LOG, + (errcode_for_file_access(), + errmsg("could not read from file \"%s\": %m", + DIRECTORY_LOCK_FILE))); + close(fd); + return true; /* treat read failure as nonfatal */ + } + buffer[len] = '\0'; + close(fd); + file_pid = atol(buffer); + if (file_pid == getpid()) + return true; /* all is well */ + + /* Trouble: someone's overwritten the lock file */ + ereport(LOG, + (errmsg("lock file \"%s\" contains wrong PID: %ld instead of %ld", + DIRECTORY_LOCK_FILE, file_pid, (long) getpid()))); + return false; +} + + /*------------------------------------------------------------------------- * Version checking support *------------------------------------------------------------------------- diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 063b0653b4941..c172d3a30e96c 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -378,6 +378,8 @@ CheckMyDatabase(const char *name, bool am_superuser) SetConfigOption("lc_collate", collate, PGC_INTERNAL, PGC_S_OVERRIDE); SetConfigOption("lc_ctype", ctype, PGC_INTERNAL, PGC_S_OVERRIDE); + check_strxfrm_bug(); + ReleaseSysCache(tup); } diff --git a/src/backend/utils/mb/encnames.c b/src/backend/utils/mb/encnames.c index 94334c47b623f..11099b844f461 100644 --- a/src/backend/utils/mb/encnames.c +++ b/src/backend/utils/mb/encnames.c @@ -344,7 +344,7 @@ const pg_enc2name pg_enc2name_tbl[] = DEF_ENC2NAME(SJIS, 932), DEF_ENC2NAME(BIG5, 950), DEF_ENC2NAME(GBK, 936), - DEF_ENC2NAME(UHC, 0), + DEF_ENC2NAME(UHC, 949), DEF_ENC2NAME(GB18030, 54936), DEF_ENC2NAME(JOHAB, 0), DEF_ENC2NAME(SHIFT_JIS_2004, 932) diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c index 1e9a004b0d73e..2a8271ab07250 100644 --- a/src/backend/utils/mb/mbutils.c +++ b/src/backend/utils/mb/mbutils.c @@ -1063,7 +1063,8 @@ pgwin32_message_to_UTF16(const char *str, int len, int *utf16len) /* * Use MultiByteToWideChar directly if there is a corresponding codepage, - * or double conversion through UTF8 if not. + * or double conversion through UTF8 if not. Double conversion is needed, + * for example, in an ENCODING=LATIN8, LC_CTYPE=C database. */ if (codepage != 0) { @@ -1075,12 +1076,21 @@ pgwin32_message_to_UTF16(const char *str, int len, int *utf16len) { char *utf8; - utf8 = (char *) pg_do_encoding_conversion((unsigned char *) str, - len, - GetMessageEncoding(), - PG_UTF8); - if (utf8 != str) - len = strlen(utf8); + /* + * XXX pg_do_encoding_conversion() requires a transaction. In the + * absence of one, hope for the input to be valid UTF8. + */ + if (IsTransactionState()) + { + utf8 = (char *) pg_do_encoding_conversion((unsigned char *) str, + len, + GetMessageEncoding(), + PG_UTF8); + if (utf8 != str) + len = strlen(utf8); + } + else + utf8 = (char *) str; utf16 = (WCHAR *) palloc(sizeof(WCHAR) * (len + 1)); dstlen = MultiByteToWideChar(CP_UTF8, 0, utf8, len, utf16, len); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 0356ecb48219c..68bd51e544580 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -379,23 +379,6 @@ static const struct config_enum_entry huge_pages_options[] = { {NULL, 0, false} }; -/* - * Although only "on", "off", and "force" are documented, we - * accept all the likely variants of "on" and "off". - */ -static const struct config_enum_entry row_security_options[] = { - {"on", ROW_SECURITY_ON, false}, - {"off", ROW_SECURITY_OFF, false}, - {"force", ROW_SECURITY_FORCE, false}, - {"true", ROW_SECURITY_ON, true}, - {"false", ROW_SECURITY_OFF, true}, - {"yes", ROW_SECURITY_ON, true}, - {"no", ROW_SECURITY_OFF, true}, - {"1", ROW_SECURITY_ON, true}, - {"0", ROW_SECURITY_OFF, true}, - {NULL, 0, false} -}; - /* * Options for enum values stored in other modules */ @@ -421,6 +404,7 @@ bool log_statement_stats = false; /* this is sort of all three bool log_btree_build_stats = false; char *event_source; +bool row_security; bool check_function_bodies = true; bool default_with_oids = false; bool SQL_inheritance = true; @@ -452,7 +436,13 @@ int tcp_keepalives_idle; int tcp_keepalives_interval; int tcp_keepalives_count; -int row_security; +/* + * SSL renegotiation was been removed in PostgreSQL 9.5, but we tolerate it + * being set to zero (meaning never renegotiate) for backward compatibility. + * This avoids breaking compatibility with clients that have never supported + * renegotiation and therefore always try to zero it. + */ +int ssl_renegotiation_limit; /* * This really belongs in pg_shmem.c, but is defined here so that it doesn't @@ -599,6 +589,8 @@ const char *const config_group_names[] = gettext_noop("Reporting and Logging / When to Log"), /* LOGGING_WHAT */ gettext_noop("Reporting and Logging / What to Log"), + /* PROCESS_TITLE */ + gettext_noop("Process Title"), /* STATS */ gettext_noop("Statistics"), /* STATS_MONITORING */ @@ -995,7 +987,7 @@ static struct config_bool ConfigureNamesBool[] = }, { - {"wal_compression", PGC_USERSET, WAL_SETTINGS, + {"wal_compression", PGC_SUSET, WAL_SETTINGS, gettext_noop("Compresses full-page writes written in WAL file."), NULL }, @@ -1199,7 +1191,7 @@ static struct config_bool ConfigureNamesBool[] = }, { - {"update_process_title", PGC_SUSET, STATS_COLLECTOR, + {"update_process_title", PGC_SUSET, PROCESS_TITLE, gettext_noop("Updates the process title to show the active SQL command."), gettext_noop("Enables updating of the process title every time a new SQL command is received by the server.") }, @@ -1374,6 +1366,15 @@ static struct config_bool ConfigureNamesBool[] = false, check_transaction_deferrable, NULL, NULL }, + { + {"row_security", PGC_USERSET, CONN_AUTH_SECURITY, + gettext_noop("Enable row security."), + gettext_noop("When enabled, row security will be applied to all users.") + }, + &row_security, + true, + NULL, NULL, NULL + }, { {"check_function_bodies", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Check function bodies during CREATE FUNCTION."), @@ -2215,7 +2216,7 @@ static struct config_int ConfigureNamesInt[] = GUC_UNIT_XBLOCKS }, &XLOGbuffers, - -1, -1, INT_MAX, + -1, -1, (INT_MAX / XLOG_BLCKSZ), check_wal_buffers, NULL, NULL }, @@ -2520,17 +2521,17 @@ static struct config_int ConfigureNamesInt[] = }, &autovacuum_freeze_max_age, /* see pg_resetxlog if you change the upper-limit value */ - 200000000, 100000000, 2000000000, + 200000000, 100000, 2000000000, NULL, NULL, NULL }, { - /* see varsup.c for why this is PGC_POSTMASTER not PGC_SIGHUP */ + /* see multixact.c for why this is PGC_POSTMASTER not PGC_SIGHUP */ {"autovacuum_multixact_freeze_max_age", PGC_POSTMASTER, AUTOVACUUM, gettext_noop("Multixact age at which to autovacuum a table to prevent multixact wraparound."), NULL }, &autovacuum_multixact_freeze_max_age, - 400000000, 10000000, 2000000000, + 400000000, 10000, 2000000000, NULL, NULL, NULL }, { @@ -2579,12 +2580,12 @@ static struct config_int ConfigureNamesInt[] = { {"ssl_renegotiation_limit", PGC_USERSET, CONN_AUTH_SECURITY, - gettext_noop("Set the amount of traffic to send and receive before renegotiating the encryption keys."), + gettext_noop("SSL regenotiation is no longer supported; this can only be 0"), NULL, - GUC_UNIT_KB, + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE, }, &ssl_renegotiation_limit, - 512 * 1024, 0, MAX_KILOBYTES, + 0, 0, 0, NULL, NULL, NULL }, @@ -3386,7 +3387,7 @@ static struct config_string ConfigureNamesString[] = }, { - {"cluster_name", PGC_POSTMASTER, LOGGING_WHAT, + {"cluster_name", PGC_POSTMASTER, PROCESS_TITLE, gettext_noop("Sets the name of the cluster which is included in the process title."), NULL, GUC_IS_NAME @@ -3642,16 +3643,6 @@ static struct config_enum ConfigureNamesEnum[] = NULL, NULL, NULL }, - { - {"row_security", PGC_USERSET, CONN_AUTH_SECURITY, - gettext_noop("Enable row security."), - gettext_noop("When enabled, row security will be applied to all users.") - }, - &row_security, - ROW_SECURITY_ON, row_security_options, - NULL, NULL, NULL - }, - /* End-of-list marker */ { {NULL, 0, 0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL diff --git a/src/backend/utils/misc/help_config.c b/src/backend/utils/misc/help_config.c index 68f58b7905229..fe9dfabe99bb5 100644 --- a/src/backend/utils/misc/help_config.c +++ b/src/backend/utils/misc/help_config.c @@ -31,7 +31,7 @@ typedef union { struct config_generic generic; - struct config_bool bool; + struct config_bool _bool; struct config_real real; struct config_int integer; struct config_string string; @@ -98,7 +98,7 @@ printMixedStruct(mixedStruct *structToPrint) case PGC_BOOL: printf("BOOLEAN\t%s\t\t\t", - (structToPrint->bool.reset_val == 0) ? + (structToPrint->_bool.reset_val == 0) ? "FALSE" : "TRUE"); break; diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 06dfc067b03b3..18c433b919da6 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -83,7 +83,6 @@ # (change requires restart) #ssl_prefer_server_ciphers = on # (change requires restart) #ssl_ecdh_curve = 'prime256v1' # (change requires restart) -#ssl_renegotiation_limit = 512MB # amount of data between renegotiations #ssl_cert_file = 'server.crt' # (change requires restart) #ssl_key_file = 'server.key' # (change requires restart) #ssl_ca_file = '' # (change requires restart) @@ -444,8 +443,14 @@ # than the specified size in kilobytes; # -1 disables, 0 logs all temp files #log_timezone = 'GMT' + + +# - Process Title - + #cluster_name = '' # added to process titles if nonempty # (change requires restart) +#update_process_title = on + #------------------------------------------------------------------------------ # RUNTIME STATISTICS @@ -458,7 +463,6 @@ #track_io_timing = off #track_functions = none # none, pl, all #track_activity_query_size = 1024 # (change requires restart) -#update_process_title = on #stats_temp_directory = 'pg_stat_tmp' @@ -526,6 +530,7 @@ #bytea_output = 'hex' # hex, escape #xmlbinary = 'base64' #xmloption = 'content' +#gin_fuzzy_search_limit = 0 #gin_pending_list_limit = 4MB # - Locale and Formatting - diff --git a/src/backend/utils/misc/rls.c b/src/backend/utils/misc/rls.c index 44cb3743034a1..6ce92af019948 100644 --- a/src/backend/utils/misc/rls.c +++ b/src/backend/utils/misc/rls.c @@ -16,9 +16,12 @@ #include "access/htup.h" #include "access/htup_details.h" +#include "access/transam.h" #include "catalog/pg_class.h" +#include "catalog/namespace.h" #include "miscadmin.h" #include "utils/acl.h" +#include "utils/builtins.h" #include "utils/elog.h" #include "utils/rls.h" #include "utils/syscache.h" @@ -37,7 +40,8 @@ extern int check_enable_rls(Oid relid, Oid checkAsUser, bool noError); * for the table and the plan cache needs to be invalidated if the environment * changes. * - * Handle checking as another role via checkAsUser (for views, etc). + * Handle checking as another role via checkAsUser (for views, etc). Pass + * InvalidOid to check the current user. * * If noError is set to 'true' then we just return RLS_ENABLED instead of doing * an ereport() if the user has attempted to bypass RLS and they are not @@ -51,8 +55,13 @@ check_enable_rls(Oid relid, Oid checkAsUser, bool noError) HeapTuple tuple; Form_pg_class classform; bool relrowsecurity; + bool relforcerowsecurity; Oid user_id = checkAsUser ? checkAsUser : GetUserId(); + /* Nothing to do for built-in relations */ + if (relid < FirstNormalObjectId) + return RLS_NONE; + tuple = SearchSysCache1(RELOID, ObjectIdGetDatum(relid)); if (!HeapTupleIsValid(tuple)) return RLS_NONE; @@ -60,6 +69,7 @@ check_enable_rls(Oid relid, Oid checkAsUser, bool noError) classform = (Form_pg_class) GETSTRUCT(tuple); relrowsecurity = classform->relrowsecurity; + relforcerowsecurity = classform->relforcerowsecurity; ReleaseSysCache(tuple); @@ -68,46 +78,86 @@ check_enable_rls(Oid relid, Oid checkAsUser, bool noError) return RLS_NONE; /* - * Check permissions - * - * If the relation has row level security enabled and the row_security GUC - * is off, then check if the user has rights to bypass RLS for this - * relation. Table owners can always bypass, as can any role with the - * BYPASSRLS capability. - * - * If the role is the table owner, then we bypass RLS unless row_security - * is set to 'force'. Note that superuser is always considered an owner. + * BYPASSRLS users always bypass RLS. Note that superusers are always + * considered to have BYPASSRLS. * * Return RLS_NONE_ENV to indicate that this decision depends on the - * environment (in this case, what the current values of user_id and - * row_security are). + * environment (in this case, the user_id). */ - if (row_security != ROW_SECURITY_FORCE - && (pg_class_ownercheck(relid, user_id))) + if (has_bypassrls_privilege(user_id)) return RLS_NONE_ENV; /* - * If the row_security GUC is 'off' then check if the user has permission - * to bypass it. Note that we have already handled the case where the - * user is the table owner above. + * Table owners generally bypass RLS, except if row_security=true and the + * table has been set (by an owner) to FORCE ROW SECURITY, and this is not + * a referential integrity check. * - * Note that row_security is always considered 'on' when querying through - * a view or other cases where checkAsUser is true, so skip this if - * checkAsUser is in use. + * Return RLS_NONE_ENV to indicate that this decision depends on the + * environment (in this case, the user_id). */ - if (!checkAsUser && row_security == ROW_SECURITY_OFF) + if (pg_class_ownercheck(relid, user_id)) { - if (has_bypassrls_privilege(user_id)) - /* OK to bypass */ - return RLS_NONE_ENV; - else if (noError) + /* + * If row_security=true and FORCE ROW LEVEL SECURITY has been set on + * the relation then we return RLS_ENABLED to indicate that RLS should + * still be applied. If we are in a SECURITY_NOFORCE_RLS context or if + * row_security=false then we return RLS_NONE_ENV. + * + * The SECURITY_NOFORCE_RLS indicates that we should not apply RLS even + * if the table has FORCE RLS set- IF the current user is the owner. + * This is specifically to ensure that referential integrity checks are + * able to still run correctly. + * + * This is intentionally only done after we have checked that the user + * is the table owner, which should always be the case for referential + * integrity checks. + */ + if (row_security && relforcerowsecurity && !InNoForceRLSOperation()) return RLS_ENABLED; else - ereport(ERROR, - (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("insufficient privilege to bypass row security."))); + return RLS_NONE_ENV; } + /* row_security GUC says to bypass RLS, but user lacks permission */ + if (!row_security && !noError) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("insufficient privilege to bypass row security."))); + /* RLS should be fully enabled for this relation. */ return RLS_ENABLED; } + +/* + * row_security_active + * + * check_enable_rls wrapped as a SQL callable function except + * RLS_NONE_ENV and RLS_NONE are the same for this purpose. + */ +Datum +row_security_active(PG_FUNCTION_ARGS) +{ + /* By OID */ + Oid tableoid = PG_GETARG_OID(0); + int rls_status; + + rls_status = check_enable_rls(tableoid, InvalidOid, true); + PG_RETURN_BOOL(rls_status == RLS_ENABLED); +} + +Datum +row_security_active_name(PG_FUNCTION_ARGS) +{ + /* By qualified name */ + text *tablename = PG_GETARG_TEXT_P(0); + RangeVar *tablerel; + Oid tableoid; + int rls_status; + + /* Look up table name. Can't lock it - we might not have privileges. */ + tablerel = makeRangeVarFromNameList(textToQualifiedNameList(tablename)); + tableoid = RangeVarGetRelid(tablerel, NoLock, false); + + rls_status = check_enable_rls(tableoid, InvalidOid, true); + PG_RETURN_BOOL(rls_status == RLS_ENABLED); +} diff --git a/src/backend/utils/misc/sampling.c b/src/backend/utils/misc/sampling.c index aaf1d6c4108b4..4142e01123f79 100644 --- a/src/backend/utils/misc/sampling.c +++ b/src/backend/utils/misc/sampling.c @@ -228,7 +228,7 @@ reservoir_get_next_S(ReservoirState rs, double t, int n) void sampler_random_init_state(long seed, SamplerRandomState randstate) { - randstate[0] = RAND48_SEED_0; + randstate[0] = 0x330e; /* same as pg_erand48, but could be anything */ randstate[1] = (unsigned short) seed; randstate[2] = (unsigned short) (seed >> 16); } @@ -237,7 +237,14 @@ sampler_random_init_state(long seed, SamplerRandomState randstate) double sampler_random_fract(SamplerRandomState randstate) { - return pg_erand48(randstate); + double res; + + /* pg_erand48 returns a value in [0.0 - 1.0), so we must reject 0 */ + do + { + res = pg_erand48(randstate); + } while (res == 0.0); + return res; } diff --git a/src/backend/utils/mmgr/aset.c b/src/backend/utils/mmgr/aset.c index 0cfb934b00326..febeb6eaf8eb9 100644 --- a/src/backend/utils/mmgr/aset.c +++ b/src/backend/utils/mmgr/aset.c @@ -112,9 +112,9 @@ * * With the current parameters, request sizes up to 8K are treated as chunks, * larger requests go into dedicated blocks. Change ALLOCSET_NUM_FREELISTS - * to adjust the boundary point. (But in contexts with small maxBlockSize, - * we may set the allocChunkLimit to less than 8K, so as to avoid space - * wastage.) + * to adjust the boundary point; and adjust ALLOCSET_SEPARATE_THRESHOLD in + * memutils.h to agree. (Note: in contexts with small maxBlockSize, we may + * set the allocChunkLimit to less than 8K, so as to avoid space wastage.) *-------------------- */ @@ -476,7 +476,12 @@ AllocSetContextCreate(MemoryContext parent, * We have to have allocChunkLimit a power of two, because the requested * and actually-allocated sizes of any chunk must be on the same side of * the limit, else we get confused about whether the chunk is "big". + * + * Also, allocChunkLimit must not exceed ALLOCSET_SEPARATE_THRESHOLD. */ + StaticAssertStmt(ALLOC_CHUNK_LIMIT == ALLOCSET_SEPARATE_THRESHOLD, + "ALLOC_CHUNK_LIMIT != ALLOCSET_SEPARATE_THRESHOLD"); + set->allocChunkLimit = ALLOC_CHUNK_LIMIT; while ((Size) (set->allocChunkLimit + ALLOC_CHUNKHDRSZ) > (Size) ((maxBlockSize - ALLOC_BLOCKHDRSZ) / ALLOC_CHUNK_FRACTION)) diff --git a/src/backend/utils/mmgr/portalmem.c b/src/backend/utils/mmgr/portalmem.c index 75304986a072a..44a87f7dea81a 100644 --- a/src/backend/utils/mmgr/portalmem.c +++ b/src/backend/utils/mmgr/portalmem.c @@ -232,6 +232,7 @@ CreatePortal(const char *name, bool allowDup, bool dupSilent) portal->status = PORTAL_NEW; portal->cleanup = PortalCleanup; portal->createSubid = GetCurrentSubTransactionId(); + portal->activeSubid = portal->createSubid; portal->strategy = PORTAL_MULTI_QUERY; portal->cursorOptions = CURSOR_OPT_NO_SCROLL; portal->atStart = true; @@ -402,6 +403,25 @@ UnpinPortal(Portal portal) portal->portalPinned = false; } +/* + * MarkPortalActive + * Transition a portal from READY to ACTIVE state. + * + * NOTE: never set portal->status = PORTAL_ACTIVE directly; call this instead. + */ +void +MarkPortalActive(Portal portal) +{ + /* For safety, this is a runtime test not just an Assert */ + if (portal->status != PORTAL_READY) + ereport(ERROR, + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("portal \"%s\" cannot be run", portal->name))); + /* Perform the state transition */ + portal->status = PORTAL_ACTIVE; + portal->activeSubid = GetCurrentSubTransactionId(); +} + /* * MarkPortalDone * Transition a portal from ACTIVE to DONE state. @@ -690,6 +710,7 @@ PreCommit_Portals(bool isPrepare) * not belonging to this transaction. */ portal->createSubid = InvalidSubTransactionId; + portal->activeSubid = InvalidSubTransactionId; /* Report we changed state */ result = true; @@ -836,8 +857,8 @@ AtCleanup_Portals(void) /* * Pre-subcommit processing for portals. * - * Reassign the portals created in the current subtransaction to the parent - * subtransaction. + * Reassign portals created or used in the current subtransaction to the + * parent subtransaction. */ void AtSubCommit_Portals(SubTransactionId mySubid, @@ -859,14 +880,16 @@ AtSubCommit_Portals(SubTransactionId mySubid, if (portal->resowner) ResourceOwnerNewParent(portal->resowner, parentXactOwner); } + if (portal->activeSubid == mySubid) + portal->activeSubid = parentSubid; } } /* * Subtransaction abort handling for portals. * - * Deactivate portals created during the failed subtransaction. - * Note that per AtSubCommit_Portals, this will catch portals created + * Deactivate portals created or used during the failed subtransaction. + * Note that per AtSubCommit_Portals, this will catch portals created/used * in descendants of the subtransaction too. * * We don't destroy any portals here; that's done in AtSubCleanup_Portals. @@ -874,6 +897,7 @@ AtSubCommit_Portals(SubTransactionId mySubid, void AtSubAbort_Portals(SubTransactionId mySubid, SubTransactionId parentSubid, + ResourceOwner myXactOwner, ResourceOwner parentXactOwner) { HASH_SEQ_STATUS status; @@ -885,16 +909,58 @@ AtSubAbort_Portals(SubTransactionId mySubid, { Portal portal = hentry->portal; + /* Was it created in this subtransaction? */ if (portal->createSubid != mySubid) + { + /* No, but maybe it was used in this subtransaction? */ + if (portal->activeSubid == mySubid) + { + /* Maintain activeSubid until the portal is removed */ + portal->activeSubid = parentSubid; + + /* + * Upper-level portals that failed while running in this + * subtransaction must be forced into FAILED state, for the + * same reasons discussed below. + * + * We assume we can get away without forcing upper-level READY + * portals to fail, even if they were run and then suspended. + * In theory a suspended upper-level portal could have + * acquired some references to objects that are about to be + * destroyed, but there should be sufficient defenses against + * such cases: the portal's original query cannot contain such + * references, and any references within, say, cached plans of + * PL/pgSQL functions are not from active queries and should + * be protected by revalidation logic. + */ + if (portal->status == PORTAL_ACTIVE) + MarkPortalFailed(portal); + + /* + * Also, if we failed it during the current subtransaction + * (either just above, or earlier), reattach its resource + * owner to the current subtransaction's resource owner, so + * that any resources it still holds will be released while + * cleaning up this subtransaction. This prevents some corner + * cases wherein we might get Asserts or worse while cleaning + * up objects created during the current subtransaction + * (because they're still referenced within this portal). + */ + if (portal->status == PORTAL_FAILED && portal->resowner) + { + ResourceOwnerNewParent(portal->resowner, myXactOwner); + portal->resowner = NULL; + } + } + /* Done if it wasn't created in this subtransaction */ continue; + } /* * Force any live portals of my own subtransaction into FAILED state. * We have to do this because they might refer to objects created or - * changed in the failed subtransaction, leading to crashes if - * execution is resumed, or even if we just try to run ExecutorEnd. - * (Note we do NOT do this to upper-level portals, since they cannot - * have such references and hence may be able to continue.) + * changed in the failed subtransaction, leading to crashes within + * ExecutorEnd when portalcmds.c tries to close down the portal. */ if (portal->status == PORTAL_READY || portal->status == PORTAL_ACTIVE) diff --git a/src/backend/utils/sort/gen_qsort_tuple.pl b/src/backend/utils/sort/gen_qsort_tuple.pl index 18dd751b38272..6186d0a5babda 100644 --- a/src/backend/utils/sort/gen_qsort_tuple.pl +++ b/src/backend/utils/sort/gen_qsort_tuple.pl @@ -14,11 +14,13 @@ # # Modifications from vanilla NetBSD source: # Add do ... while() macro fix -# Remove __inline, _DIAGASSERTs, __P -# Remove ill-considered "swap_cnt" switch to insertion sort, -# in favor of a simple check for presorted input. -# Instead of sorting arbitrary objects, we're always sorting SortTuples -# Add CHECK_FOR_INTERRUPTS() +# Remove __inline, _DIAGASSERTs, __P +# Remove ill-considered "swap_cnt" switch to insertion sort, +# in favor of a simple check for presorted input. +# Take care to recurse on the smaller partition, to bound stack usage. +# +# Instead of sorting arbitrary objects, we're always sorting SortTuples. +# Add CHECK_FOR_INTERRUPTS(). # # CAUTION: if you change this file, see also qsort.c and qsort_arg.c # @@ -43,9 +45,11 @@ $EXTRAPARAMS = ', ssup'; $CMPPARAMS = ', ssup'; print <<'EOM'; + #define cmp_ssup(a, b, ssup) \ ApplySortComparator((a)->datum1, (a)->isnull1, \ (b)->datum1, (b)->isnull1, ssup) + EOM emit_qsort_implementation(); @@ -53,7 +57,8 @@ sub emit_qsort_boilerplate { print <<'EOM'; /* - * autogenerated by src/backend/utils/sort/gen_qsort_tuple.pl, do not edit + * autogenerated by src/backend/utils/sort/gen_qsort_tuple.pl, do not edit! + * * This file is included by tuplesort.c, rather than compiled separately. */ @@ -78,7 +83,7 @@ sub emit_qsort_boilerplate * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) @@ -92,8 +97,16 @@ sub emit_qsort_boilerplate * Qsort routine based on J. L. Bentley and M. D. McIlroy, * "Engineering a sort function", * Software--Practice and Experience 23 (1993) 1249-1265. + * * We have modified their original by adding a check for already-sorted input, * which seems to be a win per discussions on pgsql-hackers around 2006-03-21. + * + * Also, we recurse on the smaller partition and iterate on the larger one, + * which ensures we cannot recurse more than log(N) levels (since the + * partition recursed to is surely no more than half of the input). Bentley + * and McIlroy explicitly rejected doing this on the grounds that it's "not + * worth the effort", but we have seen crashes in the field due to stack + * overrun, so that judgment seems wrong. */ static void @@ -114,7 +127,8 @@ sub emit_qsort_boilerplate *(b) = t; \ } while (0); -#define vecswap(a, b, n) if ((n) > 0) swapfunc((a), (b), (size_t)(n)) +#define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n) + EOM } @@ -141,8 +155,9 @@ sub emit_qsort_implementation *pl, *pm, *pn; - int d, - r, + size_t d1, + d2; + int r, presorted; loop: @@ -173,7 +188,8 @@ sub emit_qsort_implementation pn = a + (n - 1); if (n > 40) { - d = (n / 8); + size_t d = (n / 8); + pl = med3_$SUFFIX(pl, pl + d, pl + 2 * d$EXTRAPARAMS); pm = med3_$SUFFIX(pm - d, pm, pm + d$EXTRAPARAMS); pn = med3_$SUFFIX(pn - 2 * d, pn - d, pn$EXTRAPARAMS); @@ -187,23 +203,23 @@ sub emit_qsort_implementation { while (pb <= pc && (r = cmp_$SUFFIX(pb, a$CMPPARAMS)) <= 0) { - CHECK_FOR_INTERRUPTS(); if (r == 0) { swap(pa, pb); pa++; } pb++; + CHECK_FOR_INTERRUPTS(); } while (pb <= pc && (r = cmp_$SUFFIX(pc, a$CMPPARAMS)) >= 0) { - CHECK_FOR_INTERRUPTS(); if (r == 0) { swap(pc, pd); pd--; } pc--; + CHECK_FOR_INTERRUPTS(); } if (pb > pc) break; @@ -212,21 +228,39 @@ sub emit_qsort_implementation pc--; } pn = a + n; - r = Min(pa - a, pb - pa); - vecswap(a, pb - r, r); - r = Min(pd - pc, pn - pd - 1); - vecswap(pb, pn - r, r); - if ((r = pb - pa) > 1) - qsort_$SUFFIX(a, r$EXTRAPARAMS); - if ((r = pd - pc) > 1) + d1 = Min(pa - a, pb - pa); + vecswap(a, pb - d1, d1); + d1 = Min(pd - pc, pn - pd - 1); + vecswap(pb, pn - d1, d1); + d1 = pb - pa; + d2 = pd - pc; + if (d1 <= d2) { - /* Iterate rather than recurse to save stack space */ - a = pn - r; - n = r; - goto loop; + /* Recurse on left partition, then iterate on right partition */ + if (d1 > 1) + qsort_$SUFFIX(a, d1$EXTRAPARAMS); + if (d2 > 1) + { + /* Iterate rather than recurse to save stack space */ + /* qsort_$SUFFIX(pn - d2, d2$EXTRAPARAMS); */ + a = pn - d2; + n = d2; + goto loop; + } + } + else + { + /* Recurse on right partition, then iterate on left partition */ + if (d2 > 1) + qsort_$SUFFIX(pn - d2, d2$EXTRAPARAMS); + if (d1 > 1) + { + /* Iterate rather than recurse to save stack space */ + /* qsort_$SUFFIX(a, d1$EXTRAPARAMS); */ + n = d1; + goto loop; + } } -/* qsort_$SUFFIX(pn - r, r$EXTRAPARAMS);*/ } - EOM } diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c index 435041afa1c2c..6572af875a5ee 100644 --- a/src/backend/utils/sort/tuplesort.c +++ b/src/backend/utils/sort/tuplesort.c @@ -356,9 +356,9 @@ struct Tuplesortstate /* * Additional state for managing "abbreviated key" sortsupport routines - * (which currently may be used by all cases except the Datum sort case - * and hash index case). Tracks the intervals at which the optimization's - * effectiveness is tested. + * (which currently may be used by all cases except the hash index case). + * Tracks the intervals at which the optimization's effectiveness is + * tested. */ int64 abbrevNext; /* Tuple # at which to next check * applicability */ @@ -577,7 +577,14 @@ tuplesort_begin_common(int workMem, bool randomAccess) state->tapeset = NULL; state->memtupcount = 0; - state->memtupsize = 1024; /* initial guess */ + + /* + * Initial size of array must be more than ALLOCSET_SEPARATE_THRESHOLD; + * see comments in grow_memtuples(). + */ + state->memtupsize = Max(1024, + ALLOCSET_SEPARATE_THRESHOLD / sizeof(SortTuple) + 1); + state->growmemtuples = true; state->memtuples = (SortTuple *) palloc(state->memtupsize * sizeof(SortTuple)); @@ -1165,10 +1172,10 @@ grow_memtuples(Tuplesortstate *state) * never generate a dangerous request, but to be safe, check explicitly * that the array growth fits within availMem. (We could still cause * LACKMEM if the memory chunk overhead associated with the memtuples - * array were to increase. That shouldn't happen with any sane value of - * allowedMem, because at any array size large enough to risk LACKMEM, - * palloc would be treating both old and new arrays as separate chunks. - * But we'll check LACKMEM explicitly below just in case.) + * array were to increase. That shouldn't happen because we chose the + * initial array size large enough to ensure that palloc will be treating + * both old and new arrays as separate chunks. But we'll check LACKMEM + * explicitly below just in case.) */ if (state->availMem < (int64) ((newmemtupsize - memtupsize) * sizeof(SortTuple))) goto noalloc; @@ -1181,7 +1188,7 @@ grow_memtuples(Tuplesortstate *state) state->memtupsize * sizeof(SortTuple)); USEMEM(state, GetMemoryChunkSpace(state->memtuples)); if (LACKMEM(state)) - elog(ERROR, "unexpected out-of-memory situation during sort"); + elog(ERROR, "unexpected out-of-memory situation in tuplesort"); return true; noalloc: @@ -1287,8 +1294,10 @@ tuplesort_putindextuplevalues(Tuplesortstate *state, Relation rel, * * Alter datum1 representation in already-copied tuples, so as to * ensure a consistent representation (current tuple was just - * handled). Note that we rely on all tuples copied so far actually - * being contained within memtuples array. + * handled). It does not matter if some dumped tuples are already + * sorted on tape, since serialized tuples lack abbreviated keys + * (TSS_BUILDRUNS state prevents control reaching here in any + * case). */ for (i = 0; i < state->memtupcount; i++) { @@ -1366,8 +1375,10 @@ tuplesort_putdatum(Tuplesortstate *state, Datum val, bool isNull) * * Alter datum1 representation in already-copied tuples, so as to * ensure a consistent representation (current tuple was just - * handled). Note that we rely on all tuples copied so far - * actually being contained within memtuples array. + * handled). It does not matter if some dumped tuples are + * already sorted on tape, since serialized tuples lack + * abbreviated keys (TSS_BUILDRUNS state prevents control + * reaching here in any case). */ for (i = 0; i < state->memtupcount; i++) { @@ -3167,8 +3178,10 @@ copytup_heap(Tuplesortstate *state, SortTuple *stup, void *tup) * * Alter datum1 representation in already-copied tuples, so as to * ensure a consistent representation (current tuple was just - * handled). Note that we rely on all tuples copied so far actually - * being contained within memtuples array. + * handled). It does not matter if some dumped tuples are already + * sorted on tape, since serialized tuples lack abbreviated keys + * (TSS_BUILDRUNS state prevents control reaching here in any + * case). */ for (i = 0; i < state->memtupcount; i++) { @@ -3407,8 +3420,10 @@ copytup_cluster(Tuplesortstate *state, SortTuple *stup, void *tup) * * Alter datum1 representation in already-copied tuples, so as to * ensure a consistent representation (current tuple was just - * handled). Note that we rely on all tuples copied so far actually - * being contained within memtuples array. + * handled). It does not matter if some dumped tuples are already + * sorted on tape, since serialized tuples lack abbreviated keys + * (TSS_BUILDRUNS state prevents control reaching here in any + * case). */ for (i = 0; i < state->memtupcount; i++) { @@ -3709,8 +3724,10 @@ copytup_index(Tuplesortstate *state, SortTuple *stup, void *tup) * * Alter datum1 representation in already-copied tuples, so as to * ensure a consistent representation (current tuple was just - * handled). Note that we rely on all tuples copied so far actually - * being contained within memtuples array. + * handled). It does not matter if some dumped tuples are already + * sorted on tape, since serialized tuples lack abbreviated keys + * (TSS_BUILDRUNS state prevents control reaching here in any + * case). */ for (i = 0; i < state->memtupcount; i++) { diff --git a/src/backend/utils/sort/tuplestore.c b/src/backend/utils/sort/tuplestore.c index 627b281f67b7d..51f474d9c46d3 100644 --- a/src/backend/utils/sort/tuplestore.c +++ b/src/backend/utils/sort/tuplestore.c @@ -267,7 +267,14 @@ tuplestore_begin_common(int eflags, bool interXact, int maxKBytes) state->memtupdeleted = 0; state->memtupcount = 0; - state->memtupsize = 1024; /* initial guess */ + + /* + * Initial size of array must be more than ALLOCSET_SEPARATE_THRESHOLD; + * see comments in grow_memtuples(). + */ + state->memtupsize = Max(16384 / sizeof(void *), + ALLOCSET_SEPARATE_THRESHOLD / sizeof(void *) + 1); + state->growmemtuples = true; state->memtuples = (void **) palloc(state->memtupsize * sizeof(void *)); @@ -641,10 +648,10 @@ grow_memtuples(Tuplestorestate *state) * never generate a dangerous request, but to be safe, check explicitly * that the array growth fits within availMem. (We could still cause * LACKMEM if the memory chunk overhead associated with the memtuples - * array were to increase. That shouldn't happen with any sane value of - * allowedMem, because at any array size large enough to risk LACKMEM, - * palloc would be treating both old and new arrays as separate chunks. - * But we'll check LACKMEM explicitly below just in case.) + * array were to increase. That shouldn't happen because we chose the + * initial array size large enough to ensure that palloc will be treating + * both old and new arrays as separate chunks. But we'll check LACKMEM + * explicitly below just in case.) */ if (state->availMem < (int64) ((newmemtupsize - memtupsize) * sizeof(void *))) goto noalloc; @@ -657,7 +664,7 @@ grow_memtuples(Tuplestorestate *state) state->memtupsize * sizeof(void *)); USEMEM(state, GetMemoryChunkSpace(state->memtuples)); if (LACKMEM(state)) - elog(ERROR, "unexpected out-of-memory situation during sort"); + elog(ERROR, "unexpected out-of-memory situation in tuplestore"); return true; noalloc: diff --git a/src/bin/initdb/po/de.po b/src/bin/initdb/po/de.po index cf763915595dc..888ddc6066298 100644 --- a/src/bin/initdb/po/de.po +++ b/src/bin/initdb/po/de.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" "POT-Creation-Date: 2015-05-19 00:43+0000\n" -"PO-Revision-Date: 2015-05-18 20:57-0400\n" +"PO-Revision-Date: 2015-09-22 22:38-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: Peter Eisentraut \n" "Language: de\n" @@ -80,7 +80,7 @@ msgstr "konnte Verzeichnis „%s“ nicht schließen: %s\n" #: ../../common/restricted_token.c:68 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -msgstr "%s: WARNUNG: auf dieser Platform können keine beschränkten Token erzeugt werden\n" +msgstr "%s: WARNUNG: auf dieser Plattform können keine beschränkten Token erzeugt werden\n" #: ../../common/restricted_token.c:77 #, c-format diff --git a/src/bin/initdb/po/es.po b/src/bin/initdb/po/es.po index afcd1d9ed8e6e..d31fc982e48cf 100644 --- a/src/bin/initdb/po/es.po +++ b/src/bin/initdb/po/es.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: initdb (PostgreSQL 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:42+0000\n" -"PO-Revision-Date: 2014-12-15 14:49-0300\n" +"POT-Creation-Date: 2015-10-04 00:43+0000\n" +"PO-Revision-Date: 2015-09-29 23:26-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -55,13 +55,13 @@ msgstr "no se pudo leer el enlace simbólico «%s»" msgid "pclose failed: %s" msgstr "pclose falló: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "memoria agotada\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" @@ -81,6 +81,41 @@ msgstr "no se pudo leer el directorio «%s»: %s\n" msgid "could not close directory \"%s\": %s\n" msgstr "no se pudo cerrar el directorio «%s»: %s\n" +#: ../../common/restricted_token.c:68 +#, c-format +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: ATENCIÓN: no se pueden crear tokens restrigidos en esta plataforma\n" + +#: ../../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: no se pudo abrir el token de proceso: código de error %lu\n" + +#: ../../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: no se pudo emplazar los SIDs: código de error %lu\n" + +#: ../../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: no se pudo crear el token restringido: código de error %lu\n" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: no se pudo iniciar el proceso para la orden «%s»: código de error %lu\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: no se pudo re-ejecutar con el token restringido: código de error %lu\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: no se pudo obtener el código de salida del subproceso»: código de error %lu\n" + #: ../../common/rmtree.c:77 #, c-format msgid "could not stat file or directory \"%s\": %s\n" @@ -100,10 +135,10 @@ msgstr "no se pudo buscar el ID de usuario efectivo %ld: %s" msgid "user does not exist" msgstr "el usuario no existe" -#: ../../common/username.c:61 +#: ../../common/username.c:62 #, c-format -msgid "user name lookup failure: %s" -msgstr "ocurrió una falla en la búsqueda de nombre de usuario: %s" +msgid "user name lookup failure: error code %lu" +msgstr "fallo en la búsqueda de nombre de usuario: código de error %lu" #: ../../common/wait_error.c:47 #, c-format @@ -150,114 +185,109 @@ msgstr "no se pudo definir un junction para «%s»: %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "no se pudo obtener junction para «%s»: %s\n" -#: initdb.c:337 +#: initdb.c:340 #, c-format msgid "%s: out of memory\n" msgstr "%s: memoria agotada\n" -#: initdb.c:447 initdb.c:1653 +#: initdb.c:450 initdb.c:1620 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: no se pudo abrir el archivo «%s» para lectura: %s\n" -#: initdb.c:503 initdb.c:1055 initdb.c:1083 +#: initdb.c:506 initdb.c:1016 initdb.c:1044 #, c-format msgid "%s: could not open file \"%s\" for writing: %s\n" msgstr "%s: no se pudo abrir el archivo «%s» para escritura: %s\n" -#: initdb.c:511 initdb.c:519 initdb.c:1062 initdb.c:1089 +#: initdb.c:514 initdb.c:522 initdb.c:1023 initdb.c:1050 #, c-format msgid "%s: could not write file \"%s\": %s\n" msgstr "%s: no se pudo escribir el archivo «%s»: %s\n" -#: initdb.c:541 initdb.c:608 +#: initdb.c:553 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: no se pudo abrir el directorio «%s»: %s\n" -#: initdb.c:558 +#: initdb.c:577 initdb.c:2424 #, c-format msgid "%s: could not stat file \"%s\": %s\n" msgstr "%s: no se pudo hacer stat del archivo «%s»: %s\n" -#: initdb.c:571 initdb.c:628 +#: initdb.c:589 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: no se pudo leer el directorio «%s»: %s\n" -#: initdb.c:578 initdb.c:635 -#, c-format -msgid "%s: could not close directory \"%s\": %s\n" -msgstr "%s: no se pudo cerrar el directorio «%s»: %s\n" - -#: initdb.c:662 initdb.c:714 +#: initdb.c:622 initdb.c:681 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: no se pudo abrir el archivo «%s»: %s\n" -#: initdb.c:730 +#: initdb.c:693 #, c-format msgid "%s: could not fsync file \"%s\": %s\n" msgstr "%s: no se pudo sincronizar (fsync) el archivo «%s»: %s\n" -#: initdb.c:751 +#: initdb.c:712 #, c-format msgid "%s: could not execute command \"%s\": %s\n" msgstr "%s: no se pudo ejecutar la orden «%s»: %s\n" -#: initdb.c:767 +#: initdb.c:728 #, c-format msgid "%s: removing data directory \"%s\"\n" msgstr "%s: eliminando el directorio de datos «%s»\n" -#: initdb.c:770 +#: initdb.c:731 #, c-format msgid "%s: failed to remove data directory\n" msgstr "%s: no se pudo eliminar el directorio de datos\n" -#: initdb.c:776 +#: initdb.c:737 #, c-format msgid "%s: removing contents of data directory \"%s\"\n" msgstr "%s: eliminando el contenido del directorio «%s»\n" -#: initdb.c:779 +#: initdb.c:740 #, c-format msgid "%s: failed to remove contents of data directory\n" msgstr "%s: no se pudo eliminar el contenido del directorio de datos\n" -#: initdb.c:785 +#: initdb.c:746 #, c-format msgid "%s: removing transaction log directory \"%s\"\n" msgstr "%s: eliminando el directorio de registro de transacciones «%s»\n" -#: initdb.c:788 +#: initdb.c:749 #, c-format msgid "%s: failed to remove transaction log directory\n" msgstr "%s: no se pudo eliminar el directorio de registro de transacciones\n" -#: initdb.c:794 +#: initdb.c:755 #, c-format msgid "%s: removing contents of transaction log directory \"%s\"\n" msgstr "%s: eliminando el contenido del directorio de registro de transacciones «%s»\n" -#: initdb.c:797 +#: initdb.c:758 #, c-format msgid "%s: failed to remove contents of transaction log directory\n" msgstr "%s: no se pudo eliminar el contenido del directorio de registro de transacciones\n" -#: initdb.c:806 +#: initdb.c:767 #, c-format msgid "%s: data directory \"%s\" not removed at user's request\n" msgstr "%s: directorio de datos «%s» no eliminado a petición del usuario\n" -#: initdb.c:811 +#: initdb.c:772 #, c-format msgid "%s: transaction log directory \"%s\" not removed at user's request\n" msgstr "" "%s: el directorio de registro de transacciones «%s» no fue eliminado \n" "a petición del usuario\n" -#: initdb.c:832 +#: initdb.c:793 #, c-format msgid "" "%s: cannot be run as root\n" @@ -268,22 +298,22 @@ msgstr "" "Por favor conéctese (usando, por ejemplo, «su») con un usuario no privilegiado,\n" "quien ejecutará el proceso servidor.\n" -#: initdb.c:868 +#: initdb.c:829 #, c-format msgid "%s: \"%s\" is not a valid server encoding name\n" msgstr "%s: «%s» no es un nombre válido de codificación\n" -#: initdb.c:982 initdb.c:3386 +#: initdb.c:943 initdb.c:3217 #, c-format msgid "%s: could not create directory \"%s\": %s\n" msgstr "%s: no se pudo crear el directorio «%s»: %s\n" -#: initdb.c:1011 +#: initdb.c:972 #, c-format msgid "%s: file \"%s\" does not exist\n" msgstr "%s: el archivo «%s» no existe\n" -#: initdb.c:1013 initdb.c:1022 initdb.c:1032 +#: initdb.c:974 initdb.c:983 initdb.c:993 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" @@ -292,46 +322,46 @@ msgstr "" "Esto puede significar que tiene una instalación corrupta o ha\n" "identificado el directorio equivocado con la opción -L.\n" -#: initdb.c:1019 +#: initdb.c:980 #, c-format msgid "%s: could not access file \"%s\": %s\n" msgstr "%s: no se pudo acceder al archivo «%s»: %s\n" -#: initdb.c:1030 +#: initdb.c:991 #, c-format msgid "%s: file \"%s\" is not a regular file\n" msgstr "%s: el archivo «%s» no es un archivo regular\n" -#: initdb.c:1175 +#: initdb.c:1136 #, c-format msgid "selecting default max_connections ... " msgstr "seleccionando el valor para max_connections ... " -#: initdb.c:1205 +#: initdb.c:1166 #, c-format msgid "selecting default shared_buffers ... " msgstr "seleccionando el valor para shared_buffers ... " -#: initdb.c:1238 +#: initdb.c:1199 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "seleccionando implementación de memoria compartida dinámica ..." -#: initdb.c:1256 +#: initdb.c:1217 msgid "creating configuration files ... " msgstr "creando archivos de configuración ... " -#: initdb.c:1347 initdb.c:1367 initdb.c:1451 initdb.c:1467 +#: initdb.c:1314 initdb.c:1334 initdb.c:1418 initdb.c:1434 #, c-format msgid "%s: could not change permissions of \"%s\": %s\n" msgstr "%s: no se pudo cambiar los permisos de «%s»: %s\n" -#: initdb.c:1491 +#: initdb.c:1458 #, c-format msgid "creating template1 database in %s/base/1 ... " msgstr "creando base de datos template1 en %s/base/1 ... " -#: initdb.c:1507 +#: initdb.c:1474 #, c-format msgid "" "%s: input file \"%s\" does not belong to PostgreSQL %s\n" @@ -340,156 +370,156 @@ msgstr "" "%s: el archivo de entrada «%s» no pertenece a PostgreSQL %s\n" "Verifique su instalación o especifique la ruta correcta usando la opción -L.\n" -#: initdb.c:1594 +#: initdb.c:1561 msgid "initializing pg_authid ... " msgstr "inicializando pg_authid ... " -#: initdb.c:1628 +#: initdb.c:1595 msgid "Enter new superuser password: " msgstr "Ingrese la nueva contraseña del superusuario: " -#: initdb.c:1629 +#: initdb.c:1596 msgid "Enter it again: " msgstr "Ingrésela nuevamente: " -#: initdb.c:1632 +#: initdb.c:1599 #, c-format msgid "Passwords didn't match.\n" msgstr "Las constraseñas no coinciden.\n" -#: initdb.c:1660 +#: initdb.c:1627 #, c-format msgid "%s: could not read password from file \"%s\": %s\n" msgstr "%s: no se pudo leer la contraseña desde el archivo «%s»: %s\n" -#: initdb.c:1663 +#: initdb.c:1630 #, c-format msgid "%s: password file \"%s\" is empty\n" msgstr "%s: el archivo de contraseña «%s» está vacío\n" -#: initdb.c:1676 +#: initdb.c:1643 #, c-format msgid "setting password ... " msgstr "estableciendo contraseña ... " -#: initdb.c:1776 +#: initdb.c:1743 msgid "initializing dependencies ... " msgstr "inicializando dependencias ... " -#: initdb.c:1804 +#: initdb.c:1771 msgid "creating system views ... " msgstr "creando las vistas de sistema ... " -#: initdb.c:1840 +#: initdb.c:1807 msgid "loading system objects' descriptions ... " msgstr "cargando las descripciones de los objetos del sistema ... " -#: initdb.c:1946 +#: initdb.c:1913 msgid "creating collations ... " msgstr "creando algoritmos de ordenamiento ... " -#: initdb.c:1979 +#: initdb.c:1946 #, c-format msgid "%s: locale name too long, skipped: \"%s\"\n" msgstr "%s: nombre de configuración regional demasiado largo, saltando: «%s»\n" -#: initdb.c:2004 +#: initdb.c:1971 #, c-format msgid "%s: locale name has non-ASCII characters, skipped: \"%s\"\n" msgstr "%s: nombre de configuración regional tiene caracteres no ASCII, saltando: «%s»\n" -#: initdb.c:2073 +#: initdb.c:2040 #, c-format msgid "No usable system locales were found.\n" msgstr "No se encontraron configuraciones regionales utilizables.\n" -#: initdb.c:2074 +#: initdb.c:2041 #, c-format msgid "Use the option \"--debug\" to see details.\n" msgstr "Use la opción «--debug» para ver detalles.\n" -#: initdb.c:2077 +#: initdb.c:2044 #, c-format msgid "not supported on this platform\n" msgstr "no está soportado en esta plataforma\n" -#: initdb.c:2092 +#: initdb.c:2059 msgid "creating conversions ... " msgstr "creando conversiones ... " -#: initdb.c:2127 +#: initdb.c:2094 msgid "creating dictionaries ... " msgstr "creando diccionarios ... " -#: initdb.c:2181 +#: initdb.c:2148 msgid "setting privileges on built-in objects ... " msgstr "estableciendo privilegios en objetos predefinidos ... " -#: initdb.c:2239 +#: initdb.c:2206 msgid "creating information schema ... " msgstr "creando el esquema de información ... " -#: initdb.c:2295 +#: initdb.c:2262 msgid "loading PL/pgSQL server-side language ... " msgstr "instalando el lenguaje PL/pgSQL ... " -#: initdb.c:2320 +#: initdb.c:2287 msgid "vacuuming database template1 ... " msgstr "haciendo vacuum a la base de datos template1 ... " -#: initdb.c:2376 +#: initdb.c:2340 msgid "copying template1 to template0 ... " msgstr "copiando template1 a template0 ... " -#: initdb.c:2408 +#: initdb.c:2372 msgid "copying template1 to postgres ... " msgstr "copiando template1 a postgres ... " -#: initdb.c:2435 +#: initdb.c:2407 msgid "syncing data to disk ... " msgstr "sincronizando los datos a disco ... " -#: initdb.c:2514 +#: initdb.c:2501 #, c-format msgid "caught signal\n" msgstr "se ha capturado una señal\n" -#: initdb.c:2520 +#: initdb.c:2507 #, c-format msgid "could not write to child process: %s\n" msgstr "no se pudo escribir al proceso hijo: %s\n" -#: initdb.c:2528 +#: initdb.c:2515 #, c-format msgid "ok\n" msgstr "hecho\n" -#: initdb.c:2618 +#: initdb.c:2605 #, c-format msgid "%s: setlocale() failed\n" msgstr "%s: setlocale() falló\n" -#: initdb.c:2636 +#: initdb.c:2623 #, c-format msgid "%s: failed to restore old locale \"%s\"\n" msgstr "%s: no se pudo restaurar la configuración regional anterior «%s»\n" -#: initdb.c:2646 +#: initdb.c:2633 #, c-format msgid "%s: invalid locale name \"%s\"\n" msgstr "%s: nombre de configuración regional «%s» no es válido\n" -#: initdb.c:2658 +#: initdb.c:2645 #, c-format msgid "%s: invalid locale settings; check LANG and LC_* environment variables\n" msgstr "%s: configuración regional inválida; revise las variables de entorno LANG y LC_*\n" -#: initdb.c:2686 +#: initdb.c:2673 #, c-format msgid "%s: encoding mismatch\n" msgstr "%s: codificaciones no coinciden\n" -#: initdb.c:2688 +#: initdb.c:2675 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -504,32 +534,7 @@ msgstr "" "Ejecute %s nuevamente y no especifique una codificación, o bien especifique\n" "una combinación adecuada.\n" -#: initdb.c:2793 -#, c-format -msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -msgstr "%s: ATENCIÓN: no se pueden crear tokens restrigidos en esta plataforma\n" - -#: initdb.c:2802 -#, c-format -msgid "%s: could not open process token: error code %lu\n" -msgstr "%s: no se pudo abrir el token de proceso: código de error %lu\n" - -#: initdb.c:2815 -#, c-format -msgid "%s: could not to allocate SIDs: error code %lu\n" -msgstr "%s: no se pudo emplazar los SIDs: código de error %lu\n" - -#: initdb.c:2834 -#, c-format -msgid "%s: could not create restricted token: error code %lu\n" -msgstr "%s: no se pudo crear el token restringido: código de error %lu\n" - -#: initdb.c:2855 -#, c-format -msgid "%s: could not start process for command \"%s\": error code %lu\n" -msgstr "%s: no se pudo iniciar el proceso para la orden «%s»: código de error %lu\n" - -#: initdb.c:2869 +#: initdb.c:2747 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -538,17 +543,17 @@ msgstr "" "%s inicializa un cluster de base de datos PostgreSQL.\n" "\n" -#: initdb.c:2870 +#: initdb.c:2748 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: initdb.c:2871 +#: initdb.c:2749 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPCIÓN]... [DATADIR]\n" -#: initdb.c:2872 +#: initdb.c:2750 #, c-format msgid "" "\n" @@ -557,45 +562,45 @@ msgstr "" "\n" "Opciones:\n" -#: initdb.c:2873 +#: initdb.c:2751 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr "" " -A, --auth=MÉTODO método de autentificación por omisión para\n" " conexiones locales\n" -#: initdb.c:2874 +#: initdb.c:2752 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr "" " --auth-host=MÉTODO método de autentificación por omisión para\n" " conexiones locales TCP/IP\n" -#: initdb.c:2875 +#: initdb.c:2753 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr "" " --auth-local=MÉTODO método de autentificación por omisión para\n" " conexiones de socket local\n" -#: initdb.c:2876 +#: initdb.c:2754 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DATADIR ubicación para este cluster de bases de datos\n" -#: initdb.c:2877 +#: initdb.c:2755 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=CODIF codificación por omisión para nuevas bases de datos\n" -#: initdb.c:2878 +#: initdb.c:2756 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr "" " --locale=LOCALE configuración regional por omisión para \n" " nuevas bases de datos\n" -#: initdb.c:2879 +#: initdb.c:2757 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -609,17 +614,17 @@ msgstr "" " en la categoría respectiva (el valor por omisión\n" " es tomado de variables de ambiente)\n" -#: initdb.c:2883 +#: initdb.c:2761 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale equivalente a --locale=C\n" -#: initdb.c:2884 +#: initdb.c:2762 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=ARCHIVO leer contraseña del nuevo superusuario del archivo\n" -#: initdb.c:2885 +#: initdb.c:2763 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -628,24 +633,24 @@ msgstr "" " -T, --text-search-config=CONF\n" " configuración de búsqueda en texto por omisión\n" -#: initdb.c:2887 +#: initdb.c:2765 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=USUARIO nombre del superusuario del cluster\n" -#: initdb.c:2888 +#: initdb.c:2766 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt pedir una contraseña para el nuevo superusuario\n" -#: initdb.c:2889 +#: initdb.c:2767 #, c-format msgid " -X, --xlogdir=XLOGDIR location for the transaction log directory\n" msgstr "" " -X, --xlogdir=XLOGDIR ubicación del directorio del registro de\n" " transacciones\n" -#: initdb.c:2890 +#: initdb.c:2768 #, c-format msgid "" "\n" @@ -654,42 +659,42 @@ msgstr "" "\n" "Opciones menos usadas:\n" -#: initdb.c:2891 +#: initdb.c:2769 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug genera mucha salida de depuración\n" -#: initdb.c:2892 +#: initdb.c:2770 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums activar sumas de verificación en páginas de datos\n" -#: initdb.c:2893 +#: initdb.c:2771 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRECTORIO donde encontrar los archivos de entrada\n" -#: initdb.c:2894 +#: initdb.c:2772 #, c-format msgid " -n, --noclean do not clean up after errors\n" msgstr " -n, --noclean no limpiar después de errores\n" -#: initdb.c:2895 +#: initdb.c:2773 #, c-format msgid " -N, --nosync do not wait for changes to be written safely to disk\n" msgstr " -N, --nosync no esperar que los cambios se sincronicen a disco\n" -#: initdb.c:2896 +#: initdb.c:2774 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show muestra variables internas\n" -#: initdb.c:2897 +#: initdb.c:2775 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr " -S, --sync-only sólo sincronizar el directorio de datos\n" -#: initdb.c:2898 +#: initdb.c:2776 #, c-format msgid "" "\n" @@ -698,17 +703,17 @@ msgstr "" "\n" "Otras opciones:\n" -#: initdb.c:2899 +#: initdb.c:2777 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de version y salir\n" -#: initdb.c:2900 +#: initdb.c:2778 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: initdb.c:2901 +#: initdb.c:2779 #, c-format msgid "" "\n" @@ -719,7 +724,7 @@ msgstr "" "Si el directorio de datos no es especificado, se usa la variable de\n" "ambiente PGDATA.\n" -#: initdb.c:2903 +#: initdb.c:2781 #, c-format msgid "" "\n" @@ -728,7 +733,7 @@ msgstr "" "\n" "Reporte errores a .\n" -#: initdb.c:2911 +#: initdb.c:2789 msgid "" "\n" "WARNING: enabling \"trust\" authentication for local connections\n" @@ -740,29 +745,19 @@ msgstr "" "Puede cambiar esto editando pg_hba.conf o usando el parámetro -A,\n" "o --auth-local y --auth-host la próxima vez que ejecute initdb.\n" -#: initdb.c:2933 +#: initdb.c:2811 #, c-format msgid "%s: invalid authentication method \"%s\" for \"%s\" connections\n" msgstr "%s: método de autentificación «%s» no válido para conexiones «%s»\n" -#: initdb.c:2947 +#: initdb.c:2825 #, c-format msgid "%s: must specify a password for the superuser to enable %s authentication\n" msgstr "" "%s: debe especificar una contraseña al superusuario para activar\n" "autentificación %s\n" -#: initdb.c:2980 -#, c-format -msgid "%s: could not re-execute with restricted token: error code %lu\n" -msgstr "%s: no se pudo re-ejecutar con el token restringido: código de error %lu\n" - -#: initdb.c:2995 -#, c-format -msgid "%s: could not get exit code from subprocess: error code %lu\n" -msgstr "%s: no se pudo obtener el código de salida del subproceso»: código de error %lu\n" - -#: initdb.c:3021 +#: initdb.c:2852 #, c-format msgid "" "%s: no data directory specified\n" @@ -774,7 +769,7 @@ msgstr "" "Debe especificar el directorio donde residirán los datos para este cluster.\n" "Hágalo usando la opción -D o la variable de ambiente PGDATA.\n" -#: initdb.c:3059 +#: initdb.c:2890 #, c-format msgid "" "The program \"postgres\" is needed by %s but was not found in the\n" @@ -785,7 +780,7 @@ msgstr "" "directorio que «%s».\n" "Verifique su instalación.\n" -#: initdb.c:3066 +#: initdb.c:2897 #, c-format msgid "" "The program \"postgres\" was found by \"%s\"\n" @@ -796,17 +791,17 @@ msgstr "" "de la misma versión que «%s».\n" "Verifique su instalación.\n" -#: initdb.c:3085 +#: initdb.c:2916 #, c-format msgid "%s: input file location must be an absolute path\n" msgstr "%s: la ubicación de archivos de entrada debe ser una ruta absoluta\n" -#: initdb.c:3104 +#: initdb.c:2935 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "El cluster será inicializado con configuración regional «%s».\n" -#: initdb.c:3107 +#: initdb.c:2938 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -825,24 +820,24 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:3131 +#: initdb.c:2962 #, c-format msgid "%s: could not find suitable encoding for locale \"%s\"\n" msgstr "" "%s: no se pudo encontrar una codificación apropiada para\n" "la configuración regional «%s»\n" -#: initdb.c:3133 +#: initdb.c:2964 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "Ejecute %s con la opción -E.\n" -#: initdb.c:3134 initdb.c:3710 initdb.c:3731 +#: initdb.c:2965 initdb.c:3541 initdb.c:3562 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Use «%s --help» para obtener mayor información.\n" -#: initdb.c:3146 +#: initdb.c:2977 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -852,12 +847,12 @@ msgstr "" "no puede ser usada como codificación del lado del servidor.\n" "La codificación por omisión será «%s».\n" -#: initdb.c:3154 +#: initdb.c:2985 #, c-format msgid "%s: locale \"%s\" requires unsupported encoding \"%s\"\n" msgstr "%s: la configuración regional «%s» requiere la codificación no soportada «%s»\n" -#: initdb.c:3157 +#: initdb.c:2988 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" @@ -867,58 +862,58 @@ msgstr "" "del servidor.\n" "Ejecute %s nuevamente con una selección de configuración regional diferente.\n" -#: initdb.c:3166 +#: initdb.c:2997 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "La codificación por omisión ha sido por lo tanto definida a «%s».\n" -#: initdb.c:3237 +#: initdb.c:3068 #, c-format msgid "%s: could not find suitable text search configuration for locale \"%s\"\n" msgstr "" "%s: no se pudo encontrar una configuración para búsqueda en texto apropiada\n" "para la configuración regional «%s»\n" -#: initdb.c:3248 +#: initdb.c:3079 #, c-format msgid "%s: warning: suitable text search configuration for locale \"%s\" is unknown\n" msgstr "" "%s: atención: la configuración de búsqueda en texto apropiada para\n" "la configuración regional «%s» es desconocida\n" -#: initdb.c:3253 +#: initdb.c:3084 #, c-format msgid "%s: warning: specified text search configuration \"%s\" might not match locale \"%s\"\n" msgstr "" "%s: atención: la configuración de búsqueda en texto «%s» especificada\n" "podría no coincidir con la configuración regional «%s»\n" -#: initdb.c:3258 +#: initdb.c:3089 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "La configuración de búsqueda en texto ha sido definida a «%s».\n" -#: initdb.c:3302 initdb.c:3380 +#: initdb.c:3133 initdb.c:3211 #, c-format msgid "creating directory %s ... " msgstr "creando el directorio %s ... " -#: initdb.c:3316 initdb.c:3398 +#: initdb.c:3147 initdb.c:3229 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "corrigiendo permisos en el directorio existente %s ... " -#: initdb.c:3322 initdb.c:3404 +#: initdb.c:3153 initdb.c:3235 #, c-format msgid "%s: could not change permissions of directory \"%s\": %s\n" msgstr "%s: no se pudo cambiar los permisos del directorio «%s»: %s\n" -#: initdb.c:3337 initdb.c:3419 +#: initdb.c:3168 initdb.c:3250 #, c-format msgid "%s: directory \"%s\" exists but is not empty\n" msgstr "%s: el directorio «%s» no está vacío\n" -#: initdb.c:3343 +#: initdb.c:3174 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" @@ -929,17 +924,17 @@ msgstr "" "el directorio «%s», o ejecute %s\n" "con un argumento distinto de «%s».\n" -#: initdb.c:3351 initdb.c:3432 +#: initdb.c:3182 initdb.c:3263 initdb.c:3575 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: no se pudo acceder al directorio «%s»: %s\n" -#: initdb.c:3371 +#: initdb.c:3202 #, c-format msgid "%s: transaction log directory location must be an absolute path\n" msgstr "%s: la ubicación de archivos de transacción debe ser una ruta absoluta\n" -#: initdb.c:3425 +#: initdb.c:3256 #, c-format msgid "" "If you want to store the transaction log there, either\n" @@ -948,27 +943,27 @@ msgstr "" "Si quiere almacenar el directorio de registro de transacciones ahí,\n" "elimine o vacíe el directorio «%s».\n" -#: initdb.c:3443 +#: initdb.c:3274 #, c-format msgid "%s: could not create symbolic link \"%s\": %s\n" msgstr "%s: no se pudo crear el enlace simbólico «%s»: %s\n" -#: initdb.c:3448 +#: initdb.c:3279 #, c-format msgid "%s: symlinks are not supported on this platform" msgstr "%s: los enlaces simbólicos no están soportados en esta plataforma" -#: initdb.c:3461 +#: initdb.c:3292 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.\n" msgstr "Contiene un archivo invisible, quizás por ser un punto de montaje.\n" -#: initdb.c:3464 +#: initdb.c:3295 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point.\n" msgstr "Contiene un directorio lost+found, quizás por ser un punto de montaje.\n" -#: initdb.c:3467 +#: initdb.c:3298 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -977,34 +972,34 @@ msgstr "" "Usar un punto de montaje directamente como directorio de datos no es\n" "recomendado. Cree un subdirectorio bajo el punto de montaje.\n" -#: initdb.c:3486 +#: initdb.c:3317 #, c-format msgid "creating subdirectories ... " msgstr "creando subdirectorios ... " -#: initdb.c:3654 +#: initdb.c:3485 #, c-format msgid "Running in debug mode.\n" msgstr "Ejecutando en modo de depuración.\n" -#: initdb.c:3658 +#: initdb.c:3489 #, c-format msgid "Running in noclean mode. Mistakes will not be cleaned up.\n" msgstr "Ejecutando en modo sucio. Los errores no serán limpiados.\n" -#: initdb.c:3729 +#: initdb.c:3560 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: demasiados argumentos de línea de órdenes (el primero es «%s»)\n" -#: initdb.c:3746 +#: initdb.c:3586 #, c-format msgid "%s: password prompt and password file cannot be specified together\n" msgstr "" "%s: la petición de contraseña y el archivo de contraseña no pueden\n" "ser especificados simultáneamente\n" -#: initdb.c:3768 +#: initdb.c:3608 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -1015,17 +1010,17 @@ msgstr "" "Este usuario también debe ser quien ejecute el proceso servidor.\n" "\n" -#: initdb.c:3784 +#: initdb.c:3624 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Las sumas de verificación en páginas de datos han sido activadas.\n" -#: initdb.c:3786 +#: initdb.c:3626 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Las sumas de verificación en páginas de datos han sido desactivadas.\n" -#: initdb.c:3795 +#: initdb.c:3635 #, c-format msgid "" "\n" @@ -1037,21 +1032,17 @@ msgstr "" "El directorio de datos podría corromperse si el sistema operativo sufre\n" "una caída.\n" -#: initdb.c:3804 +#: initdb.c:3644 #, c-format msgid "" "\n" "Success. You can now start the database server using:\n" "\n" -" %s%s%spostgres%s -D %s%s%s\n" -"or\n" " %s%s%spg_ctl%s -D %s%s%s -l logfile start\n" "\n" msgstr "" "\n" -"Completado. Puede iniciar el servidor de bases de datos usando:\n" +"Completado. Ahora puede iniciar el servidor de bases de datos usando:\n" "\n" -" %s%s%spostgres%s -D %s%s%s\n" -"o\n" -" %s%s%spg_ctl%s -D %s%s%s -l archivo_de_registro start\n" +" %s%s%spg_ctl%s -D %s%s%s -l archivo_de_log start\n" "\n" diff --git a/src/bin/initdb/po/it.po b/src/bin/initdb/po/it.po index 90ff0abdb8e00..4b724d416baed 100644 --- a/src/bin/initdb/po/it.po +++ b/src/bin/initdb/po/it.po @@ -22,10 +22,10 @@ # msgid "" msgstr "" -"Project-Id-Version: initdb (PostgreSQL) 9.4\n" +"Project-Id-Version: initdb (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-06 18:12+0000\n" -"PO-Revision-Date: 2014-12-06 18:31+0100\n" +"POT-Creation-Date: 2015-07-06 14:43+0000\n" +"PO-Revision-Date: 2015-07-07 02:35+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -70,13 +70,13 @@ msgstr "lettura del link simbolico \"%s\" fallita" msgid "pclose failed: %s" msgstr "pclose fallita: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "memoria esaurita\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "impossibile duplicare il puntatore nullo (errore interno)\n" @@ -96,6 +96,41 @@ msgstr "lettura della directory \"%s\" fallita: %s\n" msgid "could not close directory \"%s\": %s\n" msgstr "chiusura della directory \"%s\" fallita: %s\n" +#: ../../common/restricted_token.c:68 +#, c-format +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: ATTENZIONE: non è possibile creare token ristretti su questa piattaforma\n" + +#: ../../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: apertura del token di processo fallita: codice errore %lu\n" + +#: ../../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: allocazione dei SID fallita: codice errore %lu\n" + +#: ../../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: creazione del token ristretto fallita: codice errore %lu\n" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: errore nell'avvio del processo per il comando \"%s\": codice errore %lu\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: ri-eseguire con token ristretto fallita: codice errore %lu\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: lettura del codice di uscita del processo figlio fallita: codice errore %lu\n" + #: ../../common/rmtree.c:77 #, c-format msgid "could not stat file or directory \"%s\": %s\n" @@ -115,10 +150,10 @@ msgstr "ID utente effettivo %ld non trovato: %s" msgid "user does not exist" msgstr "l'utente non esiste" -#: ../../common/username.c:61 +#: ../../common/username.c:62 #, c-format -msgid "user name lookup failure: %s" -msgstr "errore nella ricerca del nome: %s" +msgid "user name lookup failure: error code %lu" +msgstr "ricerca del nome utente fallita: codice di errore %lu" #: ../../common/wait_error.c:47 #, c-format @@ -165,112 +200,107 @@ msgstr "non è stato possibile impostare la giunzione per \"%s\": %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "non è stato possibile ottenere la giunzione per \"%s\": %s\n" -#: initdb.c:337 +#: initdb.c:340 #, c-format msgid "%s: out of memory\n" msgstr "%s: memoria esaurita\n" -#: initdb.c:447 initdb.c:1653 +#: initdb.c:450 initdb.c:1620 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: errore nell'apertura del file \"%s\" per la lettura: %s\n" -#: initdb.c:503 initdb.c:1055 initdb.c:1083 +#: initdb.c:506 initdb.c:1016 initdb.c:1044 #, c-format msgid "%s: could not open file \"%s\" for writing: %s\n" msgstr "%s: errore nell'apertura del file \"%s\" per la scrittura: %s\n" -#: initdb.c:511 initdb.c:519 initdb.c:1062 initdb.c:1089 +#: initdb.c:514 initdb.c:522 initdb.c:1023 initdb.c:1050 #, c-format msgid "%s: could not write file \"%s\": %s\n" msgstr "%s: errore nella scrittura del file \"%s\": %s\n" -#: initdb.c:541 initdb.c:608 +#: initdb.c:553 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: apertura della directory \"%s\" fallita: %s\n" -#: initdb.c:558 +#: initdb.c:577 initdb.c:2424 #, c-format msgid "%s: could not stat file \"%s\": %s\n" msgstr "%s: non è stato possibile ottenere informazioni sul file \"%s\": %s\n" -#: initdb.c:571 initdb.c:628 +#: initdb.c:589 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: lettura della directory \"%s\" fallita: %s\n" -#: initdb.c:578 initdb.c:635 -#, c-format -msgid "%s: could not close directory \"%s\": %s\n" -msgstr "%s: chiusura della directory \"%s\" fallita: %s\n" - -#: initdb.c:662 initdb.c:714 +#: initdb.c:622 initdb.c:681 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: apertura del file \"%s\" fallita: %s\n" -#: initdb.c:730 +#: initdb.c:693 #, c-format msgid "%s: could not fsync file \"%s\": %s\n" msgstr "%s: fsync del file \"%s\" fallito: %s\n" -#: initdb.c:751 +#: initdb.c:712 #, c-format msgid "%s: could not execute command \"%s\": %s\n" msgstr "%s: esecuzione del comando \"%s\" fallita: %s\n" -#: initdb.c:767 +#: initdb.c:728 #, c-format msgid "%s: removing data directory \"%s\"\n" msgstr "%s: rimozione della directory dati \"%s\"\n" -#: initdb.c:770 +#: initdb.c:731 #, c-format msgid "%s: failed to remove data directory\n" msgstr "%s: rimozione della directory dati fallita\n" -#: initdb.c:776 +#: initdb.c:737 #, c-format msgid "%s: removing contents of data directory \"%s\"\n" msgstr "%s: rimozione dei contenuti della directory dati \"%s\"\n" -#: initdb.c:779 +#: initdb.c:740 #, c-format msgid "%s: failed to remove contents of data directory\n" msgstr "%s: rimozione dei contenuti dalla directory dati fallita\n" -#: initdb.c:785 +#: initdb.c:746 #, c-format msgid "%s: removing transaction log directory \"%s\"\n" msgstr "%s: rimozione della directory dei log delle transazioni \"%s\"\n" -#: initdb.c:788 +#: initdb.c:749 #, c-format msgid "%s: failed to remove transaction log directory\n" msgstr "%s: rimozione della directory dei log delle transazioni fallita\n" -#: initdb.c:794 +#: initdb.c:755 #, c-format msgid "%s: removing contents of transaction log directory \"%s\"\n" msgstr "%s: rimozione dei contenuti della directory dei log delle transazioni \"%s\"\n" -#: initdb.c:797 +#: initdb.c:758 #, c-format msgid "%s: failed to remove contents of transaction log directory\n" msgstr "%s: rimozione dei contenuti della directory dei log delle transazioni fallita\n" -#: initdb.c:806 +#: initdb.c:767 #, c-format msgid "%s: data directory \"%s\" not removed at user's request\n" msgstr "%s: directory dati \"%s\" non rimossa su richiesta dell'utente\n" -#: initdb.c:811 +#: initdb.c:772 #, c-format msgid "%s: transaction log directory \"%s\" not removed at user's request\n" msgstr "%s: directory dei log delle transazioni \"%s\" non rimossa su richiesta dell'utente\n" -#: initdb.c:832 +#: initdb.c:793 #, c-format msgid "" "%s: cannot be run as root\n" @@ -281,22 +311,22 @@ msgstr "" "Effettua il login (usando per esempio \"su\") con l'utente\n" "(non privilegiato) che controllerà il processo server.\n" -#: initdb.c:868 +#: initdb.c:829 #, c-format msgid "%s: \"%s\" is not a valid server encoding name\n" msgstr "%s: \"%s\" non è un nome di codifica per il server valido\n" -#: initdb.c:982 initdb.c:3386 +#: initdb.c:943 initdb.c:3217 #, c-format msgid "%s: could not create directory \"%s\": %s\n" msgstr "%s: creazione della directory \"%s\" fallita: %s\n" -#: initdb.c:1011 +#: initdb.c:972 #, c-format msgid "%s: file \"%s\" does not exist\n" msgstr "%s: il file \"%s\" non esiste\n" -#: initdb.c:1013 initdb.c:1022 initdb.c:1032 +#: initdb.c:974 initdb.c:983 initdb.c:993 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" @@ -305,46 +335,46 @@ msgstr "" "Questo potrebbe indica una installazione corrotta oppure\n" "hai indicato la directory errata con l'opzione -L.\n" -#: initdb.c:1019 +#: initdb.c:980 #, c-format msgid "%s: could not access file \"%s\": %s\n" msgstr "%s: accesso al file \"%s\" fallito: %s\n" -#: initdb.c:1030 +#: initdb.c:991 #, c-format msgid "%s: file \"%s\" is not a regular file\n" msgstr "%s: il file \"%s\" non è un file regolare\n" -#: initdb.c:1175 +#: initdb.c:1136 #, c-format msgid "selecting default max_connections ... " msgstr "selezione del parametro max_connections predefinito ... " -#: initdb.c:1205 +#: initdb.c:1166 #, c-format msgid "selecting default shared_buffers ... " msgstr "selezione di shared_buffers predefinito ... " -#: initdb.c:1238 +#: initdb.c:1199 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "selezione dell'implementazione della memoria dinamica ... " -#: initdb.c:1256 +#: initdb.c:1217 msgid "creating configuration files ... " msgstr "creazione dei file di configurazione ... " -#: initdb.c:1347 initdb.c:1367 initdb.c:1451 initdb.c:1467 +#: initdb.c:1314 initdb.c:1334 initdb.c:1418 initdb.c:1434 #, c-format msgid "%s: could not change permissions of \"%s\": %s\n" msgstr "%s: cambio di permesso di \"%s\" fallito: %s\n" -#: initdb.c:1491 +#: initdb.c:1458 #, c-format msgid "creating template1 database in %s/base/1 ... " msgstr "creazione del database template1 in in %s/base/1 ... " -#: initdb.c:1507 +#: initdb.c:1474 #, c-format msgid "" "%s: input file \"%s\" does not belong to PostgreSQL %s\n" @@ -354,156 +384,156 @@ msgstr "" "Controlla la correttezza dell'installazione oppure specifica\n" "il percorso corretto con l'opzione -L.\n" -#: initdb.c:1594 +#: initdb.c:1561 msgid "initializing pg_authid ... " msgstr "inizializzazione di pg_authid ... " -#: initdb.c:1628 +#: initdb.c:1595 msgid "Enter new superuser password: " msgstr "Inserisci la nuova password del superutente: " -#: initdb.c:1629 +#: initdb.c:1596 msgid "Enter it again: " msgstr "Conferma password: " -#: initdb.c:1632 +#: initdb.c:1599 #, c-format msgid "Passwords didn't match.\n" msgstr "Le password non corrispondono.\n" -#: initdb.c:1660 +#: initdb.c:1627 #, c-format msgid "%s: could not read password from file \"%s\": %s\n" msgstr "%s: lettura del file delle password \"%s\" fallita: %s\n" -#: initdb.c:1663 +#: initdb.c:1630 #, c-format msgid "%s: password file \"%s\" is empty\n" msgstr "%s: il file delle password \"%s\" è vuoto\n" -#: initdb.c:1676 +#: initdb.c:1643 #, c-format msgid "setting password ... " msgstr "impostazione password ... " -#: initdb.c:1776 +#: initdb.c:1743 msgid "initializing dependencies ... " msgstr "inizializzazione delle dipendenze ... " -#: initdb.c:1804 +#: initdb.c:1771 msgid "creating system views ... " msgstr "creazione delle viste di sistema ... " -#: initdb.c:1840 +#: initdb.c:1807 msgid "loading system objects' descriptions ... " msgstr "caricamento delle descrizioni degli oggetti di sistema ... " -#: initdb.c:1946 +#: initdb.c:1913 msgid "creating collations ... " msgstr "creazione degli ordinamenti alfabetici ... " -#: initdb.c:1979 +#: initdb.c:1946 #, c-format msgid "%s: locale name too long, skipped: \"%s\"\n" msgstr "%s: nome locale troppo lungo, saltato: \"%s\"\n" -#: initdb.c:2004 +#: initdb.c:1971 #, c-format msgid "%s: locale name has non-ASCII characters, skipped: \"%s\"\n" msgstr "%s: nome locale contiene caratteri non ASCII, saltato: \"%s\"\n" -#: initdb.c:2073 +#: initdb.c:2040 #, c-format msgid "No usable system locales were found.\n" msgstr "Nessun locale di sistema trovato.\n" -#: initdb.c:2074 +#: initdb.c:2041 #, c-format msgid "Use the option \"--debug\" to see details.\n" msgstr "Usa l'opzione \"--debug\" per vedere i dettagli.\n" -#: initdb.c:2077 +#: initdb.c:2044 #, c-format msgid "not supported on this platform\n" msgstr "non supportato su questa piattaforma\n" -#: initdb.c:2092 +#: initdb.c:2059 msgid "creating conversions ... " msgstr "creazione delle conversioni ... " -#: initdb.c:2127 +#: initdb.c:2094 msgid "creating dictionaries ... " msgstr "creazione dizionari ... " -#: initdb.c:2181 +#: initdb.c:2148 msgid "setting privileges on built-in objects ... " msgstr "impostazione dei privilegi per gli oggetti predefiniti ... " -#: initdb.c:2239 +#: initdb.c:2206 msgid "creating information schema ... " msgstr "creazione dello schema informazioni ... " -#: initdb.c:2295 +#: initdb.c:2262 msgid "loading PL/pgSQL server-side language ... " msgstr "caricamento del linguaggio lato server PL/pgSQL ... " -#: initdb.c:2320 +#: initdb.c:2287 msgid "vacuuming database template1 ... " msgstr "vacuum del database template1 ... " -#: initdb.c:2376 +#: initdb.c:2340 msgid "copying template1 to template0 ... " msgstr "copia di template1 a template0 ... " -#: initdb.c:2408 +#: initdb.c:2372 msgid "copying template1 to postgres ... " msgstr "copia di template1 a postgres ... " -#: initdb.c:2435 +#: initdb.c:2407 msgid "syncing data to disk ... " msgstr "sincronizzazione dati sul disco ... " -#: initdb.c:2514 +#: initdb.c:2501 #, c-format msgid "caught signal\n" msgstr "intercettato segnale\n" -#: initdb.c:2520 +#: initdb.c:2507 #, c-format msgid "could not write to child process: %s\n" msgstr "scrittura verso il processo figlio fallita: %s\n" -#: initdb.c:2528 +#: initdb.c:2515 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2618 +#: initdb.c:2605 #, c-format msgid "%s: setlocale() failed\n" msgstr "%s: setlocale() fallito\n" -#: initdb.c:2636 +#: initdb.c:2623 #, c-format msgid "%s: failed to restore old locale \"%s\"\n" msgstr "%s: ripristino del locale precedente \"%s\" fallito\n" -#: initdb.c:2646 +#: initdb.c:2633 #, c-format msgid "%s: invalid locale name \"%s\"\n" msgstr "%s: nome locale non valido \"%s\"\n" -#: initdb.c:2658 +#: initdb.c:2645 #, c-format msgid "%s: invalid locale settings; check LANG and LC_* environment variables\n" msgstr "%s: impostazione locale non valida; controlla le variabili d'ambiente LANG e LC_*\n" -#: initdb.c:2686 +#: initdb.c:2673 #, c-format msgid "%s: encoding mismatch\n" msgstr "%s: mancata corrispondenza di codifica\n" -#: initdb.c:2688 +#: initdb.c:2675 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -518,32 +548,7 @@ msgstr "" "Esegui di nuovo %s senza specificare una codifica esplicitamente\n" "oppure seleziona una combinazione corretta.\n" -#: initdb.c:2793 -#, c-format -msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -msgstr "%s: ATTENZIONE: non è possibile creare token ristretti su questa piattaforma\n" - -#: initdb.c:2802 -#, c-format -msgid "%s: could not open process token: error code %lu\n" -msgstr "%s: apertura del token di processo fallita: codice errore %lu\n" - -#: initdb.c:2815 -#, c-format -msgid "%s: could not to allocate SIDs: error code %lu\n" -msgstr "%s: allocazione dei SID fallita: codice errore %lu\n" - -#: initdb.c:2834 -#, c-format -msgid "%s: could not create restricted token: error code %lu\n" -msgstr "%s: creazione del token ristretto fallita: codice errore %lu\n" - -#: initdb.c:2855 -#, c-format -msgid "%s: could not start process for command \"%s\": error code %lu\n" -msgstr "%s: errore nell'avvio del processo per il comando \"%s\": codice errore %lu\n" - -#: initdb.c:2869 +#: initdb.c:2747 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -552,17 +557,17 @@ msgstr "" "%s inizializza un cluster di database PostgreSQL.\n" "\n" -#: initdb.c:2870 +#: initdb.c:2748 #, c-format msgid "Usage:\n" msgstr "Utilizzo:\n" -#: initdb.c:2871 +#: initdb.c:2749 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPZIONE]... [DATADIR]\n" -#: initdb.c:2872 +#: initdb.c:2750 #, c-format msgid "" "\n" @@ -571,47 +576,47 @@ msgstr "" "\n" "Opzioni:\n" -#: initdb.c:2873 +#: initdb.c:2751 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr "" " -A, --auth=METODO metodo di autenticazione predefinito per le\n" " connessioni locali\n" -#: initdb.c:2874 +#: initdb.c:2752 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr "" " --auth-host=METODO metodo di autenticazione predefinito per le\n" " connessioni TCP/IP\n" -#: initdb.c:2875 +#: initdb.c:2753 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr "" " --auth-local=METODO metodo di autenticazione predefinito per le\n" " connessioni locali\n" -#: initdb.c:2876 +#: initdb.c:2754 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DATADIR dove creare questo cluster di database\n" -#: initdb.c:2877 +#: initdb.c:2755 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr "" " -E, --encoding=ENCODING imposta la codifica predefinita per i nuovi\n" " database\n" -#: initdb.c:2878 +#: initdb.c:2756 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr "" " --locale=LOCALE imposta il locale predefinito per i nuovi\n" " database\n" -#: initdb.c:2879 +#: initdb.c:2757 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -626,17 +631,17 @@ msgstr "" " Il valore predefinito viene preso dalle variabili\n" " d'ambiente\n" -#: initdb.c:2883 +#: initdb.c:2761 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale equivalente a --locale=C\n" -#: initdb.c:2884 +#: initdb.c:2762 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=FILE leggi la password per il nuovo superutente dal file\n" -#: initdb.c:2885 +#: initdb.c:2763 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -645,24 +650,24 @@ msgstr "" " -T, --text-search-config=CFG\n" " configurazione predefinita per la ricerca di testo\n" -#: initdb.c:2887 +#: initdb.c:2765 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NOME nome del superutente del database\n" -#: initdb.c:2888 +#: initdb.c:2766 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt richiedi la password per il nuovo superutente\n" -#: initdb.c:2889 +#: initdb.c:2767 #, c-format msgid " -X, --xlogdir=XLOGDIR location for the transaction log directory\n" msgstr "" " -X, --xlogdir=XLOGDIR posizione della directory contenente i log\n" " delle transazioni\n" -#: initdb.c:2890 +#: initdb.c:2768 #, c-format msgid "" "\n" @@ -671,44 +676,44 @@ msgstr "" "\n" "Opzioni utilizzate meno frequentemente:\n" -#: initdb.c:2891 +#: initdb.c:2769 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug genera molto output di debug\n" -#: initdb.c:2892 +#: initdb.c:2770 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums usa i checksum delle pagine dati\n" -#: initdb.c:2893 +#: initdb.c:2771 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRECTORY dove trovare i file di input\n" -#: initdb.c:2894 +#: initdb.c:2772 #, c-format msgid " -n, --noclean do not clean up after errors\n" msgstr " -n, --noclean non ripulire dopo gli errori\n" -#: initdb.c:2895 +#: initdb.c:2773 #, c-format msgid " -N, --nosync do not wait for changes to be written safely to disk\n" msgstr "" " -N, --nosync non attendere che i cambiamenti siano stati\n" " scritti in sicurezza sul disco\n" -#: initdb.c:2896 +#: initdb.c:2774 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show mostra le impostazioni interne\n" -#: initdb.c:2897 +#: initdb.c:2775 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr " -S, --sync-only sincronizza solo la directory dei dati\n" -#: initdb.c:2898 +#: initdb.c:2776 #, c-format msgid "" "\n" @@ -717,17 +722,17 @@ msgstr "" "\n" "Altre opzioni:\n" -#: initdb.c:2899 +#: initdb.c:2777 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informazioni sulla versione ed esci\n" -#: initdb.c:2900 +#: initdb.c:2778 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra questo aiuto ed esci\n" -#: initdb.c:2901 +#: initdb.c:2779 #, c-format msgid "" "\n" @@ -738,7 +743,7 @@ msgstr "" "Se la directory dati non è specificata, viene usata la variabile\n" "d'ambiente PGDATA.\n" -#: initdb.c:2903 +#: initdb.c:2781 #, c-format msgid "" "\n" @@ -747,7 +752,7 @@ msgstr "" "\n" "Puoi segnalare eventuali bug a .\n" -#: initdb.c:2911 +#: initdb.c:2789 msgid "" "\n" "WARNING: enabling \"trust\" authentication for local connections\n" @@ -760,27 +765,17 @@ msgstr "" "pg_hba.conf o utilizzando l'opzione -A oppure --auth-local and --auth-host\n" "alla prossima esecuzione di initdb.\n" -#: initdb.c:2933 +#: initdb.c:2811 #, c-format msgid "%s: invalid authentication method \"%s\" for \"%s\" connections\n" msgstr "%s: metodo di autenticazione \"%s\" non valido per connessioni \"%s\"\n" -#: initdb.c:2947 +#: initdb.c:2825 #, c-format msgid "%s: must specify a password for the superuser to enable %s authentication\n" msgstr "%s: occorre specificare una password per il superutente per abilitare l'autenticazione %s\n" -#: initdb.c:2980 -#, c-format -msgid "%s: could not re-execute with restricted token: error code %lu\n" -msgstr "%s: ri-eseguire con token ristretto fallita: codice errore %lu\n" - -#: initdb.c:2995 -#, c-format -msgid "%s: could not get exit code from subprocess: error code %lu\n" -msgstr "%s: lettura del codice di uscita del processo figlio fallita: codice errore %lu\n" - -#: initdb.c:3021 +#: initdb.c:2852 #, c-format msgid "" "%s: no data directory specified\n" @@ -793,7 +788,7 @@ msgstr "" "database. Puoi farlo usando l'opzione -D oppure la variabile globale\n" "PGDATA.\n" -#: initdb.c:3059 +#: initdb.c:2890 #, c-format msgid "" "The program \"postgres\" is needed by %s but was not found in the\n" @@ -804,7 +799,7 @@ msgstr "" "nella stessa directory \"%s\".\n" "Verifica la correttezza dell'installazione.\n" -#: initdb.c:3066 +#: initdb.c:2897 #, c-format msgid "" "The program \"postgres\" was found by \"%s\"\n" @@ -815,17 +810,17 @@ msgstr "" "ma non ha la stessa versione di %s.\n" "Verifica la correttezza dell'installazione.\n" -#: initdb.c:3085 +#: initdb.c:2916 #, c-format msgid "%s: input file location must be an absolute path\n" msgstr "%s: la posizione del file di input deve essere un percorso assoluto\n" -#: initdb.c:3104 +#: initdb.c:2935 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "Il cluster di database sarà inizializzato con il locale \"%s\".\n" -#: initdb.c:3107 +#: initdb.c:2938 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -844,22 +839,22 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:3131 +#: initdb.c:2962 #, c-format msgid "%s: could not find suitable encoding for locale \"%s\"\n" msgstr "%s: nessuna codifica adeguata trovata per il locale \"%s\"\n" -#: initdb.c:3133 +#: initdb.c:2964 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "Esegui di nuovo %s con l'opzione -E.\n" -#: initdb.c:3134 initdb.c:3710 initdb.c:3731 +#: initdb.c:2965 initdb.c:3541 initdb.c:3562 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Prova \"%s --help\" per maggiori informazioni.\n" -#: initdb.c:3146 +#: initdb.c:2977 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -868,12 +863,12 @@ msgstr "" "La codifica \"%s\" implicata dal locale non è consentita come codifica lato server.\n" "La codifica predefinita dei database sarà impostata invece a \"%s\".\n" -#: initdb.c:3154 +#: initdb.c:2985 #, c-format msgid "%s: locale \"%s\" requires unsupported encoding \"%s\"\n" msgstr "%s: il locale \"%s\" richiede la codifica non supportata \"%s\"\n" -#: initdb.c:3157 +#: initdb.c:2988 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" @@ -882,54 +877,54 @@ msgstr "" "La codifica \"%s\" non è disponibile come codifica lato server.\n" "Esegui di nuovo %s con un locale diverso.\n" -#: initdb.c:3166 +#: initdb.c:2997 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "La codifica predefinita del database è stata impostata a \"%s\".\n" -#: initdb.c:3237 +#: initdb.c:3068 #, c-format msgid "%s: could not find suitable text search configuration for locale \"%s\"\n" msgstr "%s: nessuna configurazione per la ricerca testo adeguata al locale \"%s\"\n" -#: initdb.c:3248 +#: initdb.c:3079 #, c-format msgid "%s: warning: suitable text search configuration for locale \"%s\" is unknown\n" msgstr "%s: attenzione: non si conosce una configurazione per la ricerca testo adeguata al locale \"%s\"\n" -#: initdb.c:3253 +#: initdb.c:3084 #, c-format msgid "%s: warning: specified text search configuration \"%s\" might not match locale \"%s\"\n" msgstr "" "%s: attenzione: la configurazione specificata per la ricerca testo \"%s\"\n" "potrebbe non corrispondere al locale \"%s\"\n" -#: initdb.c:3258 +#: initdb.c:3089 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "La configurazione predefinita di ricerca testo sarà impostata a \"%s\".\n" -#: initdb.c:3302 initdb.c:3380 +#: initdb.c:3133 initdb.c:3211 #, c-format msgid "creating directory %s ... " msgstr "creazione della directory %s ... " -#: initdb.c:3316 initdb.c:3398 +#: initdb.c:3147 initdb.c:3229 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "correzione dei permessi sulla directory esistente %s ... " -#: initdb.c:3322 initdb.c:3404 +#: initdb.c:3153 initdb.c:3235 #, c-format msgid "%s: could not change permissions of directory \"%s\": %s\n" msgstr "%s: modifica dei permessi della directory \"%s\" fallita: %s\n" -#: initdb.c:3337 initdb.c:3419 +#: initdb.c:3168 initdb.c:3250 #, c-format msgid "%s: directory \"%s\" exists but is not empty\n" msgstr "%s: la directory \"%s\" esiste ma non è vuota\n" -#: initdb.c:3343 +#: initdb.c:3174 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" @@ -940,17 +935,17 @@ msgstr "" "la directory \"%s\" oppure esegui %s\n" "con un argomento diverso da \"%s\".\n" -#: initdb.c:3351 initdb.c:3432 +#: initdb.c:3182 initdb.c:3263 initdb.c:3575 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: accesso alla directory \"%s\" fallito: %s\n" -#: initdb.c:3371 +#: initdb.c:3202 #, c-format msgid "%s: transaction log directory location must be an absolute path\n" msgstr "%s: la directory dei log delle transazioni deve essere un percorso assoluto\n" -#: initdb.c:3425 +#: initdb.c:3256 #, c-format msgid "" "If you want to store the transaction log there, either\n" @@ -959,27 +954,27 @@ msgstr "" "Se vuoi salvare lì i log delle transazioni,\n" "elimina oppure svuota la directory \"%s\".\n" -#: initdb.c:3443 +#: initdb.c:3274 #, c-format msgid "%s: could not create symbolic link \"%s\": %s\n" msgstr "%s: creazione del link simbolico \"%s\" fallita: %s\n" -#: initdb.c:3448 +#: initdb.c:3279 #, c-format msgid "%s: symlinks are not supported on this platform" msgstr "%s: i link simbolici non sono supportati su questa piattaforma" -#: initdb.c:3461 +#: initdb.c:3292 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.\n" msgstr "Contiene un file prefissato con punto o invisibile, forse perché è un punto di montaggio.\n" -#: initdb.c:3464 +#: initdb.c:3295 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point.\n" msgstr "Contiene una directory lost+found, forse perché è un punto di montaggio.\n" -#: initdb.c:3467 +#: initdb.c:3298 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -988,34 +983,34 @@ msgstr "" "Usare un punto di montaggio direttamente come directory dati non è\n" "consigliato. Crea una sottodirectory sotto il punto di montaggio.\n" -#: initdb.c:3486 +#: initdb.c:3317 #, c-format msgid "creating subdirectories ... " msgstr "creazione delle sottodirectory ... " -#: initdb.c:3654 +#: initdb.c:3485 #, c-format msgid "Running in debug mode.\n" msgstr "Esecuzione in modalità debug\n" -#: initdb.c:3658 +#: initdb.c:3489 #, c-format msgid "Running in noclean mode. Mistakes will not be cleaned up.\n" msgstr "Esecuzione in modalità noclean. Gli errori non verranno ripuliti.\n" -#: initdb.c:3729 +#: initdb.c:3560 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: troppi argomenti nella riga di comando (il primo è \"%s\")\n" -#: initdb.c:3746 +#: initdb.c:3586 #, c-format msgid "%s: password prompt and password file cannot be specified together\n" msgstr "" "%s: il prompt della password ed un file contenente la password non\n" "possono essere specificati contemporaneamente\n" -#: initdb.c:3768 +#: initdb.c:3608 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -1026,17 +1021,17 @@ msgstr "" "Questo utente deve inoltre possedere il processo server.\n" "\n" -#: initdb.c:3784 +#: initdb.c:3624 #, c-format msgid "Data page checksums are enabled.\n" msgstr "La somma di controllo dei dati delle pagine è abilitata.\n" -#: initdb.c:3786 +#: initdb.c:3626 #, c-format msgid "Data page checksums are disabled.\n" msgstr "La somma di controllo dei dati delle pagine è disabilitata.\n" -#: initdb.c:3795 +#: initdb.c:3635 #, c-format msgid "" "\n" @@ -1047,21 +1042,17 @@ msgstr "" "Sync sul disco saltato.\n" "La directory dei dati potrebbe diventare corrotta in caso di crash del sistema operativo.\n" -#: initdb.c:3804 +#: initdb.c:3644 #, c-format msgid "" "\n" "Success. You can now start the database server using:\n" "\n" -" %s%s%spostgres%s -D %s%s%s\n" -"or\n" " %s%s%spg_ctl%s -D %s%s%s -l logfile start\n" "\n" msgstr "" "\n" "Successo. Ora puoi avviare il server database con:\n" "\n" -" %s%s%spostgres%s -D %s%s%s\n" -"oppure\n" " %s%s%spg_ctl%s -D %s%s%s -l logfile start\n" "\n" diff --git a/src/bin/initdb/po/pl.po b/src/bin/initdb/po/pl.po index da697422a879c..66afa183b9a04 100644 --- a/src/bin/initdb/po/pl.po +++ b/src/bin/initdb/po/pl.po @@ -2,13 +2,13 @@ # Copyright (c) 2005 toczek, xxxtoczekxxx@wp.pl # Distributed under the same licensing terms as PostgreSQL itself. # Begina Felicysym , 2011, 2012, 2013. -# grzegorz , 2014. +# grzegorz , 2014, 2015. msgid "" msgstr "" "Project-Id-Version: initdb (PostgreSQL 9.1)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-11-10 20:42+0000\n" -"PO-Revision-Date: 2014-11-10 23:24+0200\n" +"POT-Creation-Date: 2015-08-15 18:43+0000\n" +"PO-Revision-Date: 2015-08-16 12:00+0200\n" "Last-Translator: grzegorz \n" "Language-Team: begina.felicysym@wp.eu\n" "Language: pl\n" @@ -54,13 +54,13 @@ msgstr "nie można odczytać odwołania symbolicznego \"%s\"" msgid "pclose failed: %s" msgstr "pclose nie powiodło się: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "brak pamięci\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "nie można powielić pustego wskazania (błąd wewnętrzny)\n" @@ -80,6 +80,41 @@ msgstr "nie można czytać katalogu \"%s\": %s\n" msgid "could not close directory \"%s\": %s\n" msgstr "nie można zamknąć katalogu \"%s\": %s\n" +#: ../../common/restricted_token.c:68 +#, 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" + +#: ../../common/restricted_token.c:77 +#, 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" + +#: ../../common/restricted_token.c:90 +#, 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" + +#: ../../common/restricted_token.c:110 +#, 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" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: nie udało się uruchomić procesu dla polecenia \"%s\": kod błędu %lu\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: nie udało się ponownie wykonać ograniczonego tokena: %lu\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: nie udało uzyskać kodu wyjścia z usługi podrzędnej: kod błędu %lu\n" + #: ../../common/rmtree.c:77 #, c-format msgid "could not stat file or directory \"%s\": %s\n" @@ -92,19 +127,18 @@ msgstr "nie można usunąć pliku lub katalogu \"%s\": %s\n" #: ../../common/username.c:45 #, c-format -#| msgid "could not load private key file \"%s\": %s" msgid "could not look up effective user ID %ld: %s" msgstr "nie udało się odnaleźć efektywnego ID użytkownika %ld: %s" #: ../../common/username.c:47 -#| msgid "server \"%s\" does not exist" msgid "user does not exist" msgstr "użytkownik nie istnieje" -#: ../../common/username.c:61 +#: ../../common/username.c:62 #, c-format -msgid "user name lookup failure: %s" -msgstr "niepowodzenie wyszukiwania nazwy użytkownika: %s" +#| msgid "user name lookup failure: %s" +msgid "user name lookup failure: error code %lu" +msgstr "niepowodzenie wyszukiwania nazwy użytkownika: kod błędu %lu" #: ../../common/wait_error.c:47 #, c-format @@ -151,112 +185,107 @@ msgstr "nie można ustanowić złączenia dla \"%s\": %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "nie można pobrać złączenia dla \"%s\": %s\n" -#: initdb.c:335 +#: initdb.c:340 #, c-format msgid "%s: out of memory\n" msgstr "%s: brak pamięci\n" -#: initdb.c:445 initdb.c:1602 +#: initdb.c:450 initdb.c:1620 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: nie można otworzyć pliku \"%s\" do odczytu: %s\n" -#: initdb.c:501 initdb.c:1004 initdb.c:1032 +#: initdb.c:506 initdb.c:1016 initdb.c:1044 #, c-format msgid "%s: could not open file \"%s\" for writing: %s\n" msgstr "%s: nie można otworzyć pliku \"%s\" do zapisu: %s\n" -#: initdb.c:509 initdb.c:517 initdb.c:1011 initdb.c:1038 +#: initdb.c:514 initdb.c:522 initdb.c:1023 initdb.c:1050 #, c-format msgid "%s: could not write file \"%s\": %s\n" msgstr "%s: nie można zapisać pliku \"%s\": %s\n" -#: initdb.c:539 +#: initdb.c:553 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: nie można otworzyć katalogu \"%s\": %s\n" -#: initdb.c:556 +#: initdb.c:577 initdb.c:2424 #, c-format msgid "%s: could not stat file \"%s\": %s\n" msgstr "%s: nie można wykonać stat na pliku \"%s\": %s\n" -#: initdb.c:569 +#: initdb.c:589 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: nie można odczytać katalogu \"%s\": %s\n" -#: initdb.c:576 -#, c-format -msgid "%s: could not close directory \"%s\": %s\n" -msgstr "%s: nie można zamknąć katalogu \"%s\": %s\n" - -#: initdb.c:611 initdb.c:663 +#: initdb.c:622 initdb.c:681 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: nie można otworzyć pliku \"%s\": %s\n" -#: initdb.c:679 +#: initdb.c:693 #, c-format msgid "%s: could not fsync file \"%s\": %s\n" msgstr "%s: nie można wykonać fsync na pliku \"%s\": %s\n" -#: initdb.c:700 +#: initdb.c:712 #, c-format msgid "%s: could not execute command \"%s\": %s\n" msgstr "%s: nie można wykonać komendy \"%s\": %s\n" -#: initdb.c:716 +#: initdb.c:728 #, c-format msgid "%s: removing data directory \"%s\"\n" msgstr "%s: usuwanie katalogu danych \"%s\"\n" -#: initdb.c:719 +#: initdb.c:731 #, c-format msgid "%s: failed to remove data directory\n" msgstr "%s: nie udało się usunięcie katalogu danych\n" -#: initdb.c:725 +#: initdb.c:737 #, c-format msgid "%s: removing contents of data directory \"%s\"\n" msgstr "%s: usuwanie zawartości w katalogu danych \"%s\"\n" -#: initdb.c:728 +#: initdb.c:740 #, c-format msgid "%s: failed to remove contents of data directory\n" msgstr "%s: nie udało się usunąć zawartości w katalogu danych\n" -#: initdb.c:734 +#: initdb.c:746 #, c-format msgid "%s: removing transaction log directory \"%s\"\n" msgstr "%s: usuwanie katalogu dziennika transakcji \"%s\"\n" -#: initdb.c:737 +#: initdb.c:749 #, c-format msgid "%s: failed to remove transaction log directory\n" msgstr "%s: nie udało się usunięcie katalogu dziennika transakcji\n" -#: initdb.c:743 +#: initdb.c:755 #, c-format msgid "%s: removing contents of transaction log directory \"%s\"\n" msgstr "%s: usuwanie zawartości katalogu dziennika transakcji \"%s\"\n" -#: initdb.c:746 +#: initdb.c:758 #, c-format msgid "%s: failed to remove contents of transaction log directory\n" msgstr "%s: nie udało się usunąć zawartości w katalogu dziennika transakcji\n" -#: initdb.c:755 +#: initdb.c:767 #, c-format msgid "%s: data directory \"%s\" not removed at user's request\n" msgstr "%s: katalog \"%s\" nie został usunięty na żądanie użytkownika\n" -#: initdb.c:760 +#: initdb.c:772 #, c-format msgid "%s: transaction log directory \"%s\" not removed at user's request\n" msgstr "%s: katalog \"%s\" nie został usunięty na żądanie użytkownika\n" -#: initdb.c:781 +#: initdb.c:793 #, c-format msgid "" "%s: cannot be run as root\n" @@ -267,22 +296,22 @@ msgstr "" "Proszę zalogować się (używając np: \"su\") na (nieuprzywilejowanego) użytkownika, który\n" "będzie właścicielem procesu.\n" -#: initdb.c:817 +#: initdb.c:829 #, c-format msgid "%s: \"%s\" is not a valid server encoding name\n" msgstr "%s: \"%s\" nie jest poprawną nazwą kodowania\n" -#: initdb.c:931 initdb.c:3323 +#: initdb.c:943 initdb.c:3217 #, c-format msgid "%s: could not create directory \"%s\": %s\n" msgstr "%s: nie można utworzyć katalogu \"%s\": %s\n" -#: initdb.c:960 +#: initdb.c:972 #, c-format msgid "%s: file \"%s\" does not exist\n" msgstr "%s: plik \"%s\" nie istnieje\n" -#: initdb.c:962 initdb.c:971 initdb.c:981 +#: initdb.c:974 initdb.c:983 initdb.c:993 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" @@ -291,47 +320,46 @@ msgstr "" "Oznacza to iż posiadasz uszkodzoną instalację lub wskazałeś\n" "zły katalog przy użyciu opcji -L.\n" -#: initdb.c:968 +#: initdb.c:980 #, c-format msgid "%s: could not access file \"%s\": %s\n" msgstr "%s: nie można uzyskać dostępu do pliku \"%s\": %s\n" -#: initdb.c:979 +#: initdb.c:991 #, c-format msgid "%s: file \"%s\" is not a regular file\n" msgstr "%s: plik \"%s\" nie jest zwykłym plikiem\n" -#: initdb.c:1124 +#: initdb.c:1136 #, c-format msgid "selecting default max_connections ... " msgstr "wybieranie domyślnej wartości max_connections ... " -#: initdb.c:1154 +#: initdb.c:1166 #, c-format msgid "selecting default shared_buffers ... " msgstr "wybieranie domyślnej wartości shared_buffers ... " -#: initdb.c:1187 +#: initdb.c:1199 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "wybór implementacji dynamicznej pamięci współdzielonej ... " -#: initdb.c:1205 +#: initdb.c:1217 msgid "creating configuration files ... " msgstr "tworzenie plików konfiguracyjnych ... " -#: initdb.c:1296 initdb.c:1316 initdb.c:1400 initdb.c:1416 +#: initdb.c:1314 initdb.c:1334 initdb.c:1418 initdb.c:1434 #, c-format -#| msgid "%s: could not change permissions of directory \"%s\": %s\n" msgid "%s: could not change permissions of \"%s\": %s\n" msgstr "%s: nie można zmienić uprawnień do \"%s\": %s\n" -#: initdb.c:1440 +#: initdb.c:1458 #, c-format msgid "creating template1 database in %s/base/1 ... " msgstr "tworzenie bazy template1 w folderze %s/base/1 ... " -#: initdb.c:1456 +#: initdb.c:1474 #, c-format msgid "" "%s: input file \"%s\" does not belong to PostgreSQL %s\n" @@ -340,153 +368,158 @@ msgstr "" "%s: plik wejściowy \"%s\" nie należy do bazy danych PostgreSQL %s\n" "Sprawdź swoją instalację lub podaj poprawą ścieżkę przy pomocy zmiennej -L.\n" -#: initdb.c:1543 +#: initdb.c:1561 msgid "initializing pg_authid ... " msgstr "inicjowanie pg_authid ... " -#: initdb.c:1577 +#: initdb.c:1595 msgid "Enter new superuser password: " msgstr "Podaj hasło superużytkownika: " -#: initdb.c:1578 +#: initdb.c:1596 msgid "Enter it again: " msgstr "Powtórz podane hasło: " -#: initdb.c:1581 +#: initdb.c:1599 #, c-format msgid "Passwords didn't match.\n" msgstr "Podane hasła różnią się.\n" -#: initdb.c:1608 +#: initdb.c:1627 #, c-format msgid "%s: could not read password from file \"%s\": %s\n" msgstr "%s: nie można odczytać hasła z pliku \"%s\": %s\n" -#: initdb.c:1621 +#: initdb.c:1630 +#, c-format +#| msgid "%s: the PID file \"%s\" is empty\n" +msgid "%s: password file \"%s\" is empty\n" +msgstr "%s: plik hasła \"%s\" jest pusty\n" + +#: initdb.c:1643 #, c-format msgid "setting password ... " msgstr "ustawianie hasła ... " -#: initdb.c:1721 +#: initdb.c:1743 msgid "initializing dependencies ... " msgstr "inicjowanie powiązań ... " -#: initdb.c:1749 +#: initdb.c:1771 msgid "creating system views ... " msgstr "tworzenie widoków systemowych ... " -#: initdb.c:1785 +#: initdb.c:1807 msgid "loading system objects' descriptions ... " msgstr "wczytywanie opisów obiektów systemowych ... " -#: initdb.c:1891 +#: initdb.c:1913 msgid "creating collations ... " msgstr "tworzenie porównań ... " -#: initdb.c:1924 +#: initdb.c:1946 #, c-format msgid "%s: locale name too long, skipped: \"%s\"\n" msgstr "%s: nazwa lokalizacji zbyt długa, pominięto: \"%s\"\n" -#: initdb.c:1949 +#: initdb.c:1971 #, c-format msgid "%s: locale name has non-ASCII characters, skipped: \"%s\"\n" msgstr "%s: nazwa lokalizacji zawiera znak spoza ASCII, pominięto: \"%s\"\n" -#: initdb.c:2018 +#: initdb.c:2040 #, c-format msgid "No usable system locales were found.\n" msgstr "Nie znaleziono lokalizacji systemowej nadającej się do wykorzystania.\n" -#: initdb.c:2019 +#: initdb.c:2041 #, c-format msgid "Use the option \"--debug\" to see details.\n" msgstr "Użyj opcji \"--debug\" by zobaczyć szczegóły.\n" -#: initdb.c:2022 +#: initdb.c:2044 #, c-format msgid "not supported on this platform\n" msgstr "nieobsługiwane na tej platformie\n" -#: initdb.c:2037 +#: initdb.c:2059 msgid "creating conversions ... " msgstr "tworzenie konwersji ... " -#: initdb.c:2072 +#: initdb.c:2094 msgid "creating dictionaries ... " msgstr "tworzenie słowników ... " -#: initdb.c:2126 +#: initdb.c:2148 msgid "setting privileges on built-in objects ... " msgstr "ustawianie uprawnień dla wbudowanych obiektów ... " -#: initdb.c:2184 +#: initdb.c:2206 msgid "creating information schema ... " msgstr "tworzenie schematu informacyjnego ... " -#: initdb.c:2240 +#: initdb.c:2262 msgid "loading PL/pgSQL server-side language ... " msgstr "pobieranie języka PL/pgSQL używanego po stronie serwera ... " -#: initdb.c:2265 +#: initdb.c:2287 msgid "vacuuming database template1 ... " msgstr "odkurzanie bazy template1 ... " -#: initdb.c:2321 +#: initdb.c:2340 msgid "copying template1 to template0 ... " msgstr "kopiowanie bazy template1 do bazy template0 ... " -#: initdb.c:2353 +#: initdb.c:2372 msgid "copying template1 to postgres ... " msgstr "kopiowanie bazy template1 do bazy postgres ... " -#: initdb.c:2379 +#: initdb.c:2407 msgid "syncing data to disk ... " msgstr "synchronizacja danych na dysk ... " -#: initdb.c:2451 +#: initdb.c:2501 #, c-format msgid "caught signal\n" msgstr "sygnał otrzymany\n" -#: initdb.c:2457 +#: initdb.c:2507 #, c-format msgid "could not write to child process: %s\n" msgstr "nie można zapisać do procesu potomnego: %s\n" -#: initdb.c:2465 +#: initdb.c:2515 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2555 +#: initdb.c:2605 #, c-format -#| msgid "%s: select() failed: %s\n" msgid "%s: setlocale() failed\n" msgstr "%s: setlocale() nie powiodła się\n" -#: initdb.c:2573 +#: initdb.c:2623 #, c-format msgid "%s: failed to restore old locale \"%s\"\n" msgstr "%s: nie udało się odtworzyć poprzedniej lokalizacji \"%s\"\n" -#: initdb.c:2583 +#: initdb.c:2633 #, c-format msgid "%s: invalid locale name \"%s\"\n" msgstr "%s: błędna nazwa lokalizacji \"%s\"\n" -#: initdb.c:2595 +#: initdb.c:2645 #, c-format msgid "%s: invalid locale settings; check LANG and LC_* environment variables\n" msgstr "%s: nieprawidłowe ustawienia regionalne; sprawdź zmienne środowiskowe LANG i " "LC_*\n" -#: initdb.c:2623 +#: initdb.c:2673 #, c-format msgid "%s: encoding mismatch\n" msgstr "%s: niezgodność kodowania\n" -#: initdb.c:2625 +#: initdb.c:2675 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -501,32 +534,7 @@ msgstr "" "Aby poprawić ten błąd uruchom ponownie %s i albo nie ustawiaj kodowania\n" "albo wybierz pasującą kombinację.\n" -#: initdb.c:2730 -#, 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" - -#: initdb.c:2739 -#, 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" - -#: initdb.c:2752 -#, c-format -msgid "%s: could not to allocate SIDs: error code %lu\n" -msgstr "%s: nie udało się przydzielić SIDów: kod błędu %lu\n" - -#: initdb.c:2771 -#, 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" - -#: initdb.c:2792 -#, c-format -msgid "%s: could not start process for command \"%s\": error code %lu\n" -msgstr "%s: nie udało się uruchomić procesu dla polecenia \"%s\": kod błędu %lu\n" - -#: initdb.c:2806 +#: initdb.c:2747 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -535,17 +543,17 @@ msgstr "" "%s inicjuje klaster bazy danych PostgreSQL.\n" "\n" -#: initdb.c:2807 +#: initdb.c:2748 #, c-format msgid "Usage:\n" msgstr "Składnia:\n" -#: initdb.c:2808 +#: initdb.c:2749 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPCJA]... [KATALOG-DOCELOWY]\n" -#: initdb.c:2809 +#: initdb.c:2750 #, c-format msgid "" "\n" @@ -554,37 +562,37 @@ msgstr "" "\n" "Opcje:\n" -#: initdb.c:2810 +#: initdb.c:2751 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr " -A, --auth=METODA podstawowa metoda autoryzacji dla lokalnych połączeń\n" -#: initdb.c:2811 +#: initdb.c:2752 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr " --auth-host=METODA podstawowa metoda autoryzacji dla lokalnych połączeń TCP/IP\n" -#: initdb.c:2812 +#: initdb.c:2753 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr " --auth-local=METODA podstawowa metoda autoryzacji dla lokalnych gniazd połączeń\n" -#: initdb.c:2813 +#: initdb.c:2754 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]KATALOG-DOCELOWY lokalizacja klastra bazy danych\n" -#: initdb.c:2814 +#: initdb.c:2755 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=KODOWANIE ustawia podstawowe kodowanie dla nowej bazy\n" -#: initdb.c:2815 +#: initdb.c:2756 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=LOKALIZACJA ustawia domyślną lokalizację dla nowych baz danych\n" -#: initdb.c:2816 +#: initdb.c:2757 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -597,17 +605,17 @@ msgstr "" " ustawia domyślną lokalizację w odpowiedniej kategorii\n" " dla nowych baz danych (domyślnie pobierana ze środowiska)\n" -#: initdb.c:2820 +#: initdb.c:2761 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale równoważna z opcją --locale=C\n" -#: initdb.c:2821 +#: initdb.c:2762 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=PLIK czyta hasło dla właściciela bazy z pliku\n" -#: initdb.c:2822 +#: initdb.c:2763 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -616,22 +624,22 @@ msgstr "" " -T, --text-search-config=CFG\n" " domyślna konfiguracja wyszukiwania tekstowego\n" -#: initdb.c:2824 +#: initdb.c:2765 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NAZWA superużytkownik bazy danych\n" -#: initdb.c:2825 +#: initdb.c:2766 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt proś o hasło dla nowego superużytkownika\n" -#: initdb.c:2826 +#: initdb.c:2767 #, c-format msgid " -X, --xlogdir=XLOGDIR location for the transaction log directory\n" msgstr " -X, --xlogdir=XLOGDIR umiejscowienie folderu dziennika transakcji\n" -#: initdb.c:2827 +#: initdb.c:2768 #, c-format msgid "" "\n" @@ -640,42 +648,42 @@ msgstr "" "\n" "Rzadziej używane opcje:\n" -#: initdb.c:2828 +#: initdb.c:2769 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug wyświetlanie informacji debugger'a\n" -#: initdb.c:2829 +#: initdb.c:2770 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums użycie sum kontrolnych danych stron\n" -#: initdb.c:2830 +#: initdb.c:2771 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L KATALOG gdzie szukać plików wejściowych\n" -#: initdb.c:2831 +#: initdb.c:2772 #, c-format msgid " -n, --noclean do not clean up after errors\n" msgstr " -n, --noclean błędy nie będą porządkowane\n" -#: initdb.c:2832 +#: initdb.c:2773 #, c-format msgid " -N, --nosync do not wait for changes to be written safely to disk\n" msgstr " -N, --nosync nie czekać aż zmiany zostaną bezpiecznie zapisane na dysk\n" -#: initdb.c:2833 +#: initdb.c:2774 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show pokaż wewnętrzne ustawienia\n" -#: initdb.c:2834 +#: initdb.c:2775 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr " -S, --sync-only synchronizować tylko katalog danych\n" -#: initdb.c:2835 +#: initdb.c:2776 #, c-format msgid "" "\n" @@ -684,17 +692,17 @@ msgstr "" "\n" "Pozostałe opcje:\n" -#: initdb.c:2836 +#: initdb.c:2777 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version pokaż informacje o wersji i zakończ\n" -#: initdb.c:2837 +#: initdb.c:2778 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help pokaż tą pomoc i zakończ działanie\n" -#: initdb.c:2838 +#: initdb.c:2779 #, c-format msgid "" "\n" @@ -705,7 +713,7 @@ msgstr "" "Jeśli katalog nie jest wskazany wtedy używana jest zmienna PGDATA\n" "do określenia tegoż katalogu.\n" -#: initdb.c:2840 +#: initdb.c:2781 #, c-format msgid "" "\n" @@ -714,7 +722,7 @@ msgstr "" "\n" "Błędy proszę przesyłać na adres .\n" -#: initdb.c:2848 +#: initdb.c:2789 msgid "" "\n" "WARNING: enabling \"trust\" authentication for local connections\n" @@ -722,31 +730,22 @@ msgid "" "--auth-local and --auth-host, the next time you run initdb.\n" msgstr "" "\n" -"UWAGA: metoda autoryzacji ustawiona jako \"trust\" dla połączeń lokalnych\n" -"Można to zmienić edytując plik pg_hba.conf, używając opcji -A,\n" -"--auth-local lub --auth-host przy kolejnym uruchomieniu initdb.\n" +"OSTRZEŻENIE: metoda autoryzacji ustawiona jako \"trust\" dla połączeń " +"lokalnych\n" +"Można to zmienić edytując plik pg_hba.conf, używając opcji -A, lub\n" +"--auth-local oraz --auth-host przy kolejnym uruchomieniu initdb.\n" -#: initdb.c:2870 +#: initdb.c:2811 #, c-format msgid "%s: invalid authentication method \"%s\" for \"%s\" connections\n" msgstr "%s: niepoprawna metoda autoryzacji \"%s\" dla połączeń \"%s\"\n" -#: initdb.c:2884 +#: initdb.c:2825 #, c-format msgid "%s: must specify a password for the superuser to enable %s authentication\n" msgstr "%s: musisz podać hasło superużytkownika aby aktywować %s autoryzację\n" -#: initdb.c:2917 -#, c-format -msgid "%s: could not re-execute with restricted token: error code %lu\n" -msgstr "%s: nie udało się ponownie wykonać ograniczonego tokena: %lu\n" - -#: initdb.c:2932 -#, c-format -msgid "%s: could not get exit code from subprocess: error code %lu\n" -msgstr "%s: nie udało uzyskać kodu wyjścia z usługi podrzędnej: kod błędu %lu\n" - -#: initdb.c:2958 +#: initdb.c:2852 #, c-format msgid "" "%s: no data directory specified\n" @@ -754,12 +753,12 @@ msgid "" "will reside. Do this with either the invocation option -D or the\n" "environment variable PGDATA.\n" msgstr "" -"%s: nie ustawiony katalog danych\n" -"Musisz podać katalog gdzie dane bazy danych będą przechowywane.\n" -"Możesz tego dokonać używając opcję -D lub przy pomocy\n" +"%s: nieustawiony katalog danych\n" +"Musisz podać katalog gdzie będą przechowywane dane bazy danych.\n" +"Możesz tego dokonać używając opcji -D lub przy pomocy\n" "zmiennej środowiskowej PGDATA.\n" -#: initdb.c:2996 +#: initdb.c:2890 #, c-format msgid "" "The program \"postgres\" is needed by %s but was not found in the\n" @@ -770,7 +769,7 @@ msgstr "" "w tym samym folderze co \"%s\".\n" "Sprawdź instalację.\n" -#: initdb.c:3003 +#: initdb.c:2897 #, c-format msgid "" "The program \"postgres\" was found by \"%s\"\n" @@ -781,17 +780,17 @@ msgstr "" "ale nie jest w tej samej wersji co %s.\n" "Sprawdź instalację.\n" -#: initdb.c:3022 +#: initdb.c:2916 #, c-format msgid "%s: input file location must be an absolute path\n" msgstr "%s: położenie plików wejściowych musi być ścieżką bezwzględną\n" -#: initdb.c:3041 +#: initdb.c:2935 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "Klaster bazy zostanie utworzony z zestawem reguł językowych \"%s\".\n" -#: initdb.c:3044 +#: initdb.c:2938 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -810,36 +809,37 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:3068 +#: initdb.c:2962 #, c-format msgid "%s: could not find suitable encoding for locale \"%s\"\n" msgstr "%s: nie można znaleźć odpowiedniego kodowania dla lokalizacji \"%s\"\n" -#: initdb.c:3070 +#: initdb.c:2964 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "Włącz polecenie %s ponownie z opcją -E.\n" -#: initdb.c:3071 initdb.c:3647 initdb.c:3668 +#: initdb.c:2965 initdb.c:3541 initdb.c:3562 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Spróbuj \"%s --help\" aby uzyskać więcej informacji.\n" -#: initdb.c:3083 +#: initdb.c:2977 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" "The default database encoding will be set to \"%s\" instead.\n" msgstr "" -"Kodowanie \"%s\" określone przez lokalizację jest niedozwolone jako kodowanie po stronie serwera.\n" +"Kodowanie \"%s\" określone przez lokalizację jest niedozwolone jako kodowanie " +"po stronie serwera.\n" "Kodowanie bazy danych będzie zamiast tego ustawiona na \"%s\".\n" -#: initdb.c:3091 +#: initdb.c:2985 #, c-format msgid "%s: locale \"%s\" requires unsupported encoding \"%s\"\n" msgstr "%s: lokalizacja \"%s\" wymaga nie wspieranego kodowania \"%s\"\n" -#: initdb.c:3094 +#: initdb.c:2988 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" @@ -848,73 +848,74 @@ msgstr "" "Kodowanie \"%s\" jest niedozwolone jako kodowanie po stronie serwera.\n" "Uruchom ponownie %s z wybraną inną lokalizacją.\n" -#: initdb.c:3103 +#: initdb.c:2997 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "Podstawowe kodowanie bazy danych zostało ustawione jako \"%s\".\n" -#: initdb.c:3174 +#: initdb.c:3068 #, c-format msgid "%s: could not find suitable text search configuration for locale \"%s\"\n" msgstr "%s: nie można znaleźć odpowiedniej konfiguracji wyszukiwania tekstowego dla lokalizacji \"%s\"\n" -#: initdb.c:3185 +#: initdb.c:3079 #, c-format msgid "%s: warning: suitable text search configuration for locale \"%s\" is unknown\n" -msgstr "%s: ostrzeżenie: nie jest znana odpowiednia konfiguracja wyszukiwania tekstowego dla lokalizacji \"%s\"\n" +msgstr "%s: ostrzeżenie: nie jest znana odpowiednia konfiguracja wyszukiwania " +"tekstowego dla lokalizacji \"%s\"\n" -#: initdb.c:3190 +#: initdb.c:3084 #, c-format msgid "%s: warning: specified text search configuration \"%s\" might not match locale \"%s\"\n" msgstr "%s: ostrzeżenie: wskazana konfiguracja wyszukiwania tekstu \"%s\" może nie pasować do lokalizacji \"%s\"\n" -#: initdb.c:3195 +#: initdb.c:3089 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "Domyślna konfiguracja wyszukiwania tekstowego zostanie ustawiona na \"%s\".\n" -#: initdb.c:3239 initdb.c:3317 +#: initdb.c:3133 initdb.c:3211 #, c-format msgid "creating directory %s ... " msgstr "tworzenie katalogu %s ... " -#: initdb.c:3253 initdb.c:3335 +#: initdb.c:3147 initdb.c:3229 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "ustalanie uprawnień katalogu %s ... " -#: initdb.c:3259 initdb.c:3341 +#: initdb.c:3153 initdb.c:3235 #, c-format msgid "%s: could not change permissions of directory \"%s\": %s\n" msgstr "%s: nie można zmienić uprawnień katalogu \"%s\": %s\n" -#: initdb.c:3274 initdb.c:3356 +#: initdb.c:3168 initdb.c:3250 #, c-format msgid "%s: directory \"%s\" exists but is not empty\n" msgstr "%s: folder \"%s\" nie jest pusty\n" -#: initdb.c:3280 +#: initdb.c:3174 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" "the directory \"%s\" or run %s\n" "with an argument other than \"%s\".\n" msgstr "" -"Jeśli chcesz utworzyć nową bazę danych usuń lub wyczyść,\n" +"Jeśli chcesz utworzyć nową bazę danych, usuń lub wyczyść\n" "katalog \"%s\" lub uruchom program %s\n" "z argumentem wskazującym katalog innym niż \"%s\".\n" -#: initdb.c:3288 initdb.c:3369 +#: initdb.c:3182 initdb.c:3263 initdb.c:3575 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: brak dostępu do katalogu \"%s\": %s\n" -#: initdb.c:3308 +#: initdb.c:3202 #, c-format msgid "%s: transaction log directory location must be an absolute path\n" msgstr "%s: położenie folderu dziennika transakcji musi być ścieżką bezwzględną\n" -#: initdb.c:3362 +#: initdb.c:3256 #, c-format msgid "" "If you want to store the transaction log there, either\n" @@ -923,27 +924,27 @@ msgstr "" "Jeśli chcesz tam przechowywać dziennik transakcji, albo\n" "usuń albo wyczyść zawartość folderu \"%s\".\n" -#: initdb.c:3380 +#: initdb.c:3274 #, c-format msgid "%s: could not create symbolic link \"%s\": %s\n" msgstr "%s: nie można utworzyć linku symbolicznego \"%s\": %s\n" -#: initdb.c:3385 +#: initdb.c:3279 #, c-format msgid "%s: symlinks are not supported on this platform" msgstr "%s: linki symb. nie są obsługiwane na tej platformie" -#: initdb.c:3398 +#: initdb.c:3292 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.\n" msgstr "Zawiera on tylko zaczynający się kropką/niewidoczny plik, być może dlatego, że był to punkt podłączenia.\n" -#: initdb.c:3401 +#: initdb.c:3295 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point.\n" msgstr "Zawiera on folder lost+found, być może dlatego, że był to punkt podłączenia.\n" -#: initdb.c:3404 +#: initdb.c:3298 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -952,32 +953,32 @@ msgstr "" "Użycie punktu zamontowania bezpośrednio jako folderu danych nie jest zalecane.\n" "Lepiej utworzyć podfolder punktu montowania.\n" -#: initdb.c:3423 +#: initdb.c:3317 #, c-format msgid "creating subdirectories ... " msgstr "tworzenie podkatalogów ... " -#: initdb.c:3591 +#: initdb.c:3485 #, c-format msgid "Running in debug mode.\n" msgstr "Działanie w trybie debug.\n" -#: initdb.c:3595 +#: initdb.c:3489 #, c-format msgid "Running in noclean mode. Mistakes will not be cleaned up.\n" msgstr "Działanie w trybie nonclean. Błędy nie będą porządkowane.\n" -#: initdb.c:3666 +#: initdb.c:3560 #, 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" -#: initdb.c:3683 +#: initdb.c:3586 #, c-format msgid "%s: password prompt and password file cannot be specified together\n" msgstr "%s: prośba o hasło i plik hasła nie mogą być podane jednocześnie\n" -#: initdb.c:3705 +#: initdb.c:3608 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -988,17 +989,17 @@ msgstr "" "Ten użytkownik musi jednocześnie być właścicielem procesu serwera.\n" "\n" -#: initdb.c:3721 +#: initdb.c:3624 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Sumy kontrolne stron danych są włączone.\n" -#: initdb.c:3723 +#: initdb.c:3626 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Sumy kontrolne stron danych są zablokowane.\n" -#: initdb.c:3732 +#: initdb.c:3635 #, c-format msgid "" "\n" @@ -1009,33 +1010,43 @@ msgstr "" "Pominięto synchronizację na dysk.\n" "Folder danych może zostać uszkodzona jeśli system operacyjny ulegnie awarii.\n" -#: initdb.c:3741 +#: initdb.c:3644 #, c-format +#| msgid "" +#| "\n" +#| "Success. You can now start the database server using:\n" +#| "\n" +#| " %s%s%spostgres%s -D %s%s%s\n" +#| "or\n" +#| " %s%s%spg_ctl%s -D %s%s%s -l logfile start\n" +#| "\n" msgid "" "\n" "Success. You can now start the database server using:\n" "\n" -" %s%s%spostgres%s -D %s%s%s\n" -"or\n" " %s%s%spg_ctl%s -D %s%s%s -l logfile start\n" "\n" msgstr "" "\n" "Sukces. Teraz możesz uruchomić serwer bazy danych używając:\n" "\n" -" %s%s%spostgres%s -D %s%s%s\n" -"lub\n" " %s%s%s%spg_ctl -D %s%s%s -l plik_z_logami start\n" "\n" -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "nie można zmienić katalogu na \"%s\"" +#~ msgid "%s: could not obtain information about current user: %s\n" +#~ msgstr "%s: nie można otrzymać informacji o bieżącym użytkowniku: %s\n" + +#~ msgid "%s: could not get current user name: %s\n" +#~ msgstr "%s: nie można otrzymać bieżącej nazwy użytkownika: %s\n" #~ msgid "Using the top-level directory of a mount point is not recommended.\n" #~ msgstr "Używanie folderu głównego punktu podłączenia nie jest zalecane.\n" -#~ msgid "%s: could not get current user name: %s\n" -#~ msgstr "%s: nie można otrzymać bieżącej nazwy użytkownika: %s\n" +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "nie można zmienić katalogu na \"%s\"" -#~ msgid "%s: could not obtain information about current user: %s\n" -#~ msgstr "%s: nie można otrzymać informacji o bieżącym użytkowniku: %s\n" +#~ msgid "%s: could not to allocate SIDs: error code %lu\n" +#~ msgstr "%s: nie udało się przydzielić SIDów: kod błędu %lu\n" + +#~ msgid "%s: could not close directory \"%s\": %s\n" +#~ msgstr "%s: nie można zamknąć katalogu \"%s\": %s\n" diff --git a/src/bin/initdb/po/pt_BR.po b/src/bin/initdb/po/pt_BR.po index 2322dab54ca4c..14603f7b1a7a0 100644 --- a/src/bin/initdb/po/pt_BR.po +++ b/src/bin/initdb/po/pt_BR.po @@ -1,13 +1,13 @@ # Brazilian Portuguese message translation file for initdb # Copyright (C) 2009 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Euler Taveira de Oliveira , 2003-2014. +# Euler Taveira de Oliveira , 2003-2015. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-09 12:23-0300\n" +"POT-Creation-Date: 2015-09-17 22:32-0300\n" "PO-Revision-Date: 2010-09-25 00:45+0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -51,13 +51,13 @@ msgstr "não pôde ler link simbólico \"%s\"" msgid "pclose failed: %s" msgstr "pclose falhou: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "sem memória\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "não pode duplicar ponteiro nulo (erro interno)\n" @@ -77,6 +77,41 @@ msgstr "não pôde ler diretório \"%s\": %s\n" msgid "could not close directory \"%s\": %s\n" msgstr "não pôde fechar diretório \"%s\": %s\n" +#: ../../common/restricted_token.c:68 +#, c-format +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: AVISO: não pode criar informações restritas nessa plataforma\n" + +#: ../../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: não pôde abrir informação sobre processo: código de erro %lu\n" + +#: ../../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: não pôde alocar SIDs: código de erro %lu\n" + +#: ../../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: não pôde criar informação restrita: código de erro %lu\n" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: não pôde iniciar processo para comando \"%s\": código de erro %lu\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: não pôde executar novamente com informação restrita: código de erro %lu\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: não pôde obter código de saída de subprocesso: código de erro %lu\n" + #: ../../common/rmtree.c:77 #, c-format msgid "could not stat file or directory \"%s\": %s\n" @@ -96,10 +131,10 @@ msgstr "não pôde encontrar ID de usuário efetivo %ld: %s" msgid "user does not exist" msgstr "usuário não existe" -#: ../../common/username.c:61 +#: ../../common/username.c:62 #, c-format -msgid "user name lookup failure: %s" -msgstr "falhou ao pesquisar nome de usuário: %s" +msgid "user name lookup failure: error code %lu" +msgstr "falhou ao pesquisar nome de usuário: código de erro %lu" #: ../../common/wait_error.c:47 #, c-format @@ -146,112 +181,107 @@ msgstr "não pôde definir junção para \"%s\": %s\n" msgid "could not get junction for \"%s\": %s\n" msgstr "não pôde obter junção para \"%s\": %s\n" -#: initdb.c:337 +#: initdb.c:340 #, c-format msgid "%s: out of memory\n" msgstr "%s: sem memória\n" -#: initdb.c:447 initdb.c:1653 +#: initdb.c:450 initdb.c:1620 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: não pôde abrir arquivo \"%s\" para leitura: %s\n" -#: initdb.c:503 initdb.c:1055 initdb.c:1083 +#: initdb.c:506 initdb.c:1016 initdb.c:1044 #, c-format msgid "%s: could not open file \"%s\" for writing: %s\n" msgstr "%s: não pôde abrir arquivo \"%s\" para escrita: %s\n" -#: initdb.c:511 initdb.c:519 initdb.c:1062 initdb.c:1089 +#: initdb.c:514 initdb.c:522 initdb.c:1023 initdb.c:1050 #, c-format msgid "%s: could not write file \"%s\": %s\n" msgstr "%s: não pôde escrever arquivo \"%s\": %s\n" -#: initdb.c:541 initdb.c:608 +#: initdb.c:553 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: não pôde abrir diretório \"%s\": %s\n" -#: initdb.c:558 +#: initdb.c:577 initdb.c:2424 #, c-format msgid "%s: could not stat file \"%s\": %s\n" msgstr "%s: não pôde executar stat no arquivo \"%s\": %s\n" -#: initdb.c:571 initdb.c:628 +#: initdb.c:589 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: não pôde ler diretório \"%s\": %s\n" -#: initdb.c:578 initdb.c:635 -#, c-format -msgid "%s: could not close directory \"%s\": %s\n" -msgstr "%s: não pôde fechar diretório \"%s\": %s\n" - -#: initdb.c:662 initdb.c:714 +#: initdb.c:622 initdb.c:681 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: não pôde abrir arquivo \"%s\": %s\n" -#: initdb.c:730 +#: initdb.c:693 #, c-format msgid "%s: could not fsync file \"%s\": %s\n" msgstr "%s: não pôde executar fsync no arquivo \"%s\": %s\n" -#: initdb.c:751 +#: initdb.c:712 #, c-format msgid "%s: could not execute command \"%s\": %s\n" msgstr "%s: não pôde executar comando \"%s\": %s\n" -#: initdb.c:767 +#: initdb.c:728 #, c-format msgid "%s: removing data directory \"%s\"\n" msgstr "%s: removendo diretório de dados \"%s\"\n" -#: initdb.c:770 +#: initdb.c:731 #, c-format msgid "%s: failed to remove data directory\n" msgstr "%s: falhou ao remover diretório de dados\n" -#: initdb.c:776 +#: initdb.c:737 #, c-format msgid "%s: removing contents of data directory \"%s\"\n" msgstr "%s: removendo conteúdo do diretório de dados \"%s\"\n" -#: initdb.c:779 +#: initdb.c:740 #, c-format msgid "%s: failed to remove contents of data directory\n" msgstr "%s: falhou ao remover conteúdo do diretório de dados\n" -#: initdb.c:785 +#: initdb.c:746 #, c-format msgid "%s: removing transaction log directory \"%s\"\n" msgstr "%s: removendo diretório do log de transação \"%s\"\n" -#: initdb.c:788 +#: initdb.c:749 #, c-format msgid "%s: failed to remove transaction log directory\n" msgstr "%s: falhou ao remover diretório do log de transação\n" -#: initdb.c:794 +#: initdb.c:755 #, c-format msgid "%s: removing contents of transaction log directory \"%s\"\n" msgstr "%s: removendo conteúdo do diretório do log de transação \"%s\"\n" -#: initdb.c:797 +#: initdb.c:758 #, c-format msgid "%s: failed to remove contents of transaction log directory\n" msgstr "%s: falhou ao remover conteúdo do diretório do log de transação\n" -#: initdb.c:806 +#: initdb.c:767 #, c-format msgid "%s: data directory \"%s\" not removed at user's request\n" msgstr "%s: diretório de dados \"%s\" não foi removido a pedido do usuário\n" -#: initdb.c:811 +#: initdb.c:772 #, c-format msgid "%s: transaction log directory \"%s\" not removed at user's request\n" msgstr "%s: diretório do log de transação \"%s\" não foi removido a pedido do usuário\n" -#: initdb.c:832 +#: initdb.c:793 #, c-format msgid "" "%s: cannot be run as root\n" @@ -262,22 +292,22 @@ msgstr "" "Por favor entre (utilizando, i.e., \"su\") como usuário (sem privilégios) que será\n" "o dono do processo do servidor.\n" -#: initdb.c:868 +#: initdb.c:829 #, c-format msgid "%s: \"%s\" is not a valid server encoding name\n" msgstr "%s: \"%s\" não é um nome de codificação do servidor válido\n" -#: initdb.c:982 initdb.c:3386 +#: initdb.c:943 initdb.c:3217 #, c-format msgid "%s: could not create directory \"%s\": %s\n" msgstr "%s: não pôde criar diretório \"%s\": %s\n" -#: initdb.c:1011 +#: initdb.c:972 #, c-format msgid "%s: file \"%s\" does not exist\n" msgstr "%s: arquivo \"%s\" não existe\n" -#: initdb.c:1013 initdb.c:1022 initdb.c:1032 +#: initdb.c:974 initdb.c:983 initdb.c:993 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" @@ -286,46 +316,46 @@ msgstr "" "Isso significa que você tem uma instalação corrompida ou especificou\n" "o diretório errado com a invocação da opção -L.\n" -#: initdb.c:1019 +#: initdb.c:980 #, c-format msgid "%s: could not access file \"%s\": %s\n" msgstr "%s: não pôde acessar arquivo \"%s\": %s\n" -#: initdb.c:1030 +#: initdb.c:991 #, c-format msgid "%s: file \"%s\" is not a regular file\n" msgstr "%s: arquivo \"%s\" não é um arquivo regular\n" -#: initdb.c:1175 +#: initdb.c:1136 #, c-format msgid "selecting default max_connections ... " msgstr "selecionando max_connections padrão ... " -#: initdb.c:1205 +#: initdb.c:1166 #, c-format msgid "selecting default shared_buffers ... " msgstr "selecionando shared_buffers padrão ... " -#: initdb.c:1238 +#: initdb.c:1199 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "selecionando implementação de memória compartilhada dinâmica ... " -#: initdb.c:1256 +#: initdb.c:1217 msgid "creating configuration files ... " msgstr "criando arquivos de configuração ... " -#: initdb.c:1347 initdb.c:1367 initdb.c:1451 initdb.c:1467 +#: initdb.c:1314 initdb.c:1334 initdb.c:1418 initdb.c:1434 #, c-format msgid "%s: could not change permissions of \"%s\": %s\n" msgstr "%s: não pôde mudar permissões de \"%s\": %s\n" -#: initdb.c:1491 +#: initdb.c:1458 #, c-format msgid "creating template1 database in %s/base/1 ... " msgstr "criando banco de dados template1 em %s/base/1 ... " -#: initdb.c:1507 +#: initdb.c:1474 #, c-format msgid "" "%s: input file \"%s\" does not belong to PostgreSQL %s\n" @@ -334,156 +364,156 @@ msgstr "" "%s: arquivo de entrada \"%s\" não pertence ao PostgreSQL %s\n" "Verifique sua instalação ou especifique o caminho correto utilizando a opção -L.\n" -#: initdb.c:1594 +#: initdb.c:1561 msgid "initializing pg_authid ... " msgstr "inicializando pg_authid ... " -#: initdb.c:1628 +#: initdb.c:1595 msgid "Enter new superuser password: " msgstr "Digite nova senha de super-usuário: " -#: initdb.c:1629 +#: initdb.c:1596 msgid "Enter it again: " msgstr "Digite-a novamente: " -#: initdb.c:1632 +#: initdb.c:1599 #, c-format msgid "Passwords didn't match.\n" msgstr "Senhas não correspondem.\n" -#: initdb.c:1660 +#: initdb.c:1627 #, c-format msgid "%s: could not read password from file \"%s\": %s\n" msgstr "%s: não pôde ler senha do arquivo \"%s\": %s\n" -#: initdb.c:1663 +#: initdb.c:1630 #, c-format msgid "%s: password file \"%s\" is empty\n" msgstr "%s: arquivo de senhas \"%s\" está vazio\n" -#: initdb.c:1676 +#: initdb.c:1643 #, c-format msgid "setting password ... " msgstr "definindo senha ... " -#: initdb.c:1776 +#: initdb.c:1743 msgid "initializing dependencies ... " msgstr "inicializando dependências ... " -#: initdb.c:1804 +#: initdb.c:1771 msgid "creating system views ... " msgstr "criando visões do sistema ... " -#: initdb.c:1840 +#: initdb.c:1807 msgid "loading system objects' descriptions ... " msgstr "carregando descrições de objetos do sistema ... " -#: initdb.c:1946 +#: initdb.c:1913 msgid "creating collations ... " msgstr "criando ordenações ... " -#: initdb.c:1979 +#: initdb.c:1946 #, c-format msgid "%s: locale name too long, skipped: \"%s\"\n" msgstr "%s: nome de configuração regional muito longo, ignorado: \"%s\"\n" -#: initdb.c:2004 +#: initdb.c:1971 #, c-format msgid "%s: locale name has non-ASCII characters, skipped: \"%s\"\n" msgstr "%s: nome de configuração regional tem caracteres não-ASCII, ignorado: \"%s\"\n" -#: initdb.c:2073 +#: initdb.c:2040 #, c-format msgid "No usable system locales were found.\n" msgstr "Nenhuma configuração regional do sistema utilizável foi encontrada.\n" -#: initdb.c:2074 +#: initdb.c:2041 #, c-format msgid "Use the option \"--debug\" to see details.\n" msgstr "Utilize a opção \"--debug\" para obter detalhes.\n" -#: initdb.c:2077 +#: initdb.c:2044 #, c-format msgid "not supported on this platform\n" msgstr "não é suportado nessa plataforma\n" -#: initdb.c:2092 +#: initdb.c:2059 msgid "creating conversions ... " msgstr "criando conversões ... " -#: initdb.c:2127 +#: initdb.c:2094 msgid "creating dictionaries ... " msgstr "criando dicionários ... " -#: initdb.c:2181 +#: initdb.c:2148 msgid "setting privileges on built-in objects ... " msgstr "definindo privilégios dos objetos embutidos ... " -#: initdb.c:2239 +#: initdb.c:2206 msgid "creating information schema ... " msgstr "criando esquema informação ... " -#: initdb.c:2295 +#: initdb.c:2262 msgid "loading PL/pgSQL server-side language ... " msgstr "carregando linguagem PL/pgSQL ... " -#: initdb.c:2320 +#: initdb.c:2287 msgid "vacuuming database template1 ... " msgstr "limpando banco de dados template1 ... " -#: initdb.c:2376 +#: initdb.c:2340 msgid "copying template1 to template0 ... " msgstr "copiando template1 para template0 ... " -#: initdb.c:2408 +#: initdb.c:2372 msgid "copying template1 to postgres ... " msgstr "copiando template1 para postgres ... " -#: initdb.c:2435 +#: initdb.c:2407 msgid "syncing data to disk ... " msgstr "sincronizando dados no disco ... " -#: initdb.c:2514 +#: initdb.c:2501 #, c-format msgid "caught signal\n" msgstr "sinal foi recebido\n" -#: initdb.c:2520 +#: initdb.c:2507 #, c-format msgid "could not write to child process: %s\n" msgstr "não pôde escrever em processo filho: %s\n" -#: initdb.c:2528 +#: initdb.c:2515 #, c-format msgid "ok\n" msgstr "ok\n" -#: initdb.c:2618 +#: initdb.c:2605 #, c-format msgid "%s: setlocale() failed\n" msgstr "%s: setlocale() falhou\n" -#: initdb.c:2636 +#: initdb.c:2623 #, c-format msgid "%s: failed to restore old locale \"%s\"\n" msgstr "%s: falhou ao restaurar configuração regional antiga \"%s\"\n" -#: initdb.c:2646 +#: initdb.c:2633 #, c-format msgid "%s: invalid locale name \"%s\"\n" msgstr "%s: nome de configuração regional \"%s\" é inválido\n" -#: initdb.c:2658 +#: initdb.c:2645 #, c-format msgid "%s: invalid locale settings; check LANG and LC_* environment variables\n" msgstr "%s: definições de configuração regional inválidas; verifique as variáveis de ambiente LANG e LC_*\n" -#: initdb.c:2686 +#: initdb.c:2673 #, c-format msgid "%s: encoding mismatch\n" msgstr "%s: codificação não corresponde\n" -#: initdb.c:2688 +#: initdb.c:2675 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -498,32 +528,7 @@ msgstr "" "Execute novamente o %s e não especifique uma codificação explicitamente\n" "ou escolha uma outra combinação.\n" -#: initdb.c:2793 -#, c-format -msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -msgstr "%s: AVISO: não pode criar informações restritas nessa plataforma\n" - -#: initdb.c:2802 -#, c-format -msgid "%s: could not open process token: error code %lu\n" -msgstr "%s: não pôde abrir informação sobre processo: código de erro %lu\n" - -#: initdb.c:2815 -#, c-format -msgid "%s: could not to allocate SIDs: error code %lu\n" -msgstr "%s: não pôde alocar SIDs: código de erro %lu\n" - -#: initdb.c:2834 -#, c-format -msgid "%s: could not create restricted token: error code %lu\n" -msgstr "%s: não pôde criar informação restrita: código de erro %lu\n" - -#: initdb.c:2855 -#, c-format -msgid "%s: could not start process for command \"%s\": error code %lu\n" -msgstr "%s: não pôde iniciar processo para comando \"%s\": código de erro %lu\n" - -#: initdb.c:2869 +#: initdb.c:2747 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -532,17 +537,17 @@ msgstr "" "%s inicializa um agrupamento de banco de dados PostgreSQL.\n" "\n" -#: initdb.c:2870 +#: initdb.c:2748 #, c-format msgid "Usage:\n" msgstr "Uso:\n" -#: initdb.c:2871 +#: initdb.c:2749 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [OPÇÃO]... [DIRDADOS]\n" -#: initdb.c:2872 +#: initdb.c:2750 #, c-format msgid "" "\n" @@ -551,37 +556,37 @@ msgstr "" "\n" "Opções:\n" -#: initdb.c:2873 +#: initdb.c:2751 #, c-format msgid " -A, --auth=METHOD default authentication method for local connections\n" msgstr " -A, --auth=MÉTODO método de autenticação padrão para conexões locais\n" -#: initdb.c:2874 +#: initdb.c:2752 #, c-format msgid " --auth-host=METHOD default authentication method for local TCP/IP connections\n" msgstr " --auth-host=MÉTODO método de autenticação padrão para conexões TCP/IP locais\n" -#: initdb.c:2875 +#: initdb.c:2753 #, c-format msgid " --auth-local=METHOD default authentication method for local-socket connections\n" msgstr " --auth-local=MÉTODO método de autenticação padrão para conexões de soquete locais\n" -#: initdb.c:2876 +#: initdb.c:2754 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]DIRDADOS local do agrupamento de banco de dados\n" -#: initdb.c:2877 +#: initdb.c:2755 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=CODIFICAÇÃO ajusta a codificação padrão para novos bancos de dados\n" -#: initdb.c:2878 +#: initdb.c:2756 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=LOCALE ajusta configuração regional padrão para novos bancos de dados\n" -#: initdb.c:2879 +#: initdb.c:2757 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -594,17 +599,17 @@ msgstr "" " ajusta configuração regional padrão na respectiva categoria\n" " para novos bancos de dados (o ambiente é assumido como padrão)\n" -#: initdb.c:2883 +#: initdb.c:2761 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale equivalente a --locale=C\n" -#: initdb.c:2884 +#: initdb.c:2762 #, c-format msgid " --pwfile=FILE read password for the new superuser from file\n" msgstr " --pwfile=ARQUIVO lê senha do novo super-usuário a partir do arquivo\n" -#: initdb.c:2885 +#: initdb.c:2763 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -613,22 +618,22 @@ msgstr "" " -T, --text-search-config=CFG\n" " configuração de busca textual padrão\n" -#: initdb.c:2887 +#: initdb.c:2765 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=NOME nome do super-usuário do banco de dados\n" -#: initdb.c:2888 +#: initdb.c:2766 #, c-format msgid " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt pergunta senha do novo super-usuário\n" -#: initdb.c:2889 +#: initdb.c:2767 #, c-format msgid " -X, --xlogdir=XLOGDIR location for the transaction log directory\n" msgstr " -X, --xlogdir=DIRXLOG local do log de transação\n" -#: initdb.c:2890 +#: initdb.c:2768 #, c-format msgid "" "\n" @@ -637,42 +642,42 @@ msgstr "" "\n" "Opções utilizadas com menos frequência:\n" -#: initdb.c:2891 +#: initdb.c:2769 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug mostra saída da depuração\n" -#: initdb.c:2892 +#: initdb.c:2770 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums verificações de páginas de dados\n" -#: initdb.c:2893 +#: initdb.c:2771 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L DIRETÓRIO onde encontrar os arquivos de entrada\n" -#: initdb.c:2894 +#: initdb.c:2772 #, c-format msgid " -n, --noclean do not clean up after errors\n" msgstr " -n, --noclean não remove após erros\n" -#: initdb.c:2895 +#: initdb.c:2773 #, c-format msgid " -N, --nosync do not wait for changes to be written safely to disk\n" msgstr " -N, --nosync não espera mudanças serem escritas com segurança no disco\n" -#: initdb.c:2896 +#: initdb.c:2774 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show mostra definições internas\n" -#: initdb.c:2897 +#: initdb.c:2775 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr " -S, --sync-only sincroniza somente o diretório de dados\n" -#: initdb.c:2898 +#: initdb.c:2776 #, c-format msgid "" "\n" @@ -681,17 +686,17 @@ msgstr "" "\n" "Outras opções:\n" -#: initdb.c:2899 +#: initdb.c:2777 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informação sobre a versão e termina\n" -#: initdb.c:2900 +#: initdb.c:2778 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra essa ajuda e termina\n" -#: initdb.c:2901 +#: initdb.c:2779 #, c-format msgid "" "\n" @@ -702,7 +707,7 @@ msgstr "" "Se o diretório de dados não for especificado, a variável de ambiente PGDATA\n" "é utilizada.\n" -#: initdb.c:2903 +#: initdb.c:2781 #, c-format msgid "" "\n" @@ -711,7 +716,7 @@ msgstr "" "\n" "Relate erros a .\n" -#: initdb.c:2911 +#: initdb.c:2789 msgid "" "\n" "WARNING: enabling \"trust\" authentication for local connections\n" @@ -723,27 +728,17 @@ msgstr "" "Você pode mudá-lo editando o pg_hba.conf ou utilizando a opção -A, ou\n" "--auth-local e --auth-host, na próxima vez que você executar o initdb.\n" -#: initdb.c:2933 +#: initdb.c:2811 #, c-format msgid "%s: invalid authentication method \"%s\" for \"%s\" connections\n" msgstr "%s: método de autenticação \"%s\" é inválido para conexões \"%s\"\n" -#: initdb.c:2947 +#: initdb.c:2825 #, c-format msgid "%s: must specify a password for the superuser to enable %s authentication\n" msgstr "%s: você precisa especificar uma senha para o super-usuário para habilitar a autenticação %s\n" -#: initdb.c:2980 -#, c-format -msgid "%s: could not re-execute with restricted token: error code %lu\n" -msgstr "%s: não pôde executar novamente com informação restrita: código de erro %lu\n" - -#: initdb.c:2995 -#, c-format -msgid "%s: could not get exit code from subprocess: error code %lu\n" -msgstr "%s: não pôde obter código de saída de subprocesso: código de erro %lu\n" - -#: initdb.c:3021 +#: initdb.c:2852 #, c-format msgid "" "%s: no data directory specified\n" @@ -756,7 +751,7 @@ msgstr "" "irá residir. Faça isso com o invocação da opção -D ou a\n" "variável de ambiente PGDATA.\n" -#: initdb.c:3059 +#: initdb.c:2890 #, c-format msgid "" "The program \"postgres\" is needed by %s but was not found in the\n" @@ -767,7 +762,7 @@ msgstr "" "mesmo diretório que \"%s\".\n" "Verifique sua instalação.\n" -#: initdb.c:3066 +#: initdb.c:2897 #, c-format msgid "" "The program \"postgres\" was found by \"%s\"\n" @@ -778,17 +773,17 @@ msgstr "" "mas não tem a mesma versão que %s.\n" "Verifique sua instalação.\n" -#: initdb.c:3085 +#: initdb.c:2916 #, c-format msgid "%s: input file location must be an absolute path\n" msgstr "%s: local do arquivo de entrada deve ser um caminho absoluto\n" -#: initdb.c:3104 +#: initdb.c:2935 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "O agrupamento de banco de dados será inicializado com configuração regional \"%s\".\n" -#: initdb.c:3107 +#: initdb.c:2938 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -807,22 +802,22 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:3131 +#: initdb.c:2962 #, c-format msgid "%s: could not find suitable encoding for locale \"%s\"\n" msgstr "%s: não pôde encontrar codificação ideal para configuração regional \"%s\"\n" -#: initdb.c:3133 +#: initdb.c:2964 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "Execute novamente %s com a opção -E.\n" -#: initdb.c:3134 initdb.c:3710 initdb.c:3731 +#: initdb.c:2965 initdb.c:3541 initdb.c:3562 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Tente \"%s --help\" para obter informações adicionais.\n" -#: initdb.c:3146 +#: initdb.c:2977 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -831,12 +826,12 @@ msgstr "" "Codificação \"%s\" sugerida pela configuração regional não é permitida como uma codificação do servidor.\n" "A codificação do banco de dados padrão será definida como \"%s\".\n" -#: initdb.c:3154 +#: initdb.c:2985 #, c-format msgid "%s: locale \"%s\" requires unsupported encoding \"%s\"\n" msgstr "%s: configuração regional \"%s\" requer codificação \"%s\" que não é suportada\n" -#: initdb.c:3157 +#: initdb.c:2988 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" @@ -845,52 +840,52 @@ msgstr "" "Codificação \"%s\" não é permitida como uma codificação do servidor.\n" "Execute %s novamente com uma seleção de configuração regional diferente.\n" -#: initdb.c:3166 +#: initdb.c:2997 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "A codificação padrão do banco de dados foi definida para \"%s\".\n" -#: initdb.c:3237 +#: initdb.c:3068 #, c-format msgid "%s: could not find suitable text search configuration for locale \"%s\"\n" msgstr "%s: não pôde encontrar configuração de busca textual ideal para configuração regional \"%s\"\n" -#: initdb.c:3248 +#: initdb.c:3079 #, c-format msgid "%s: warning: suitable text search configuration for locale \"%s\" is unknown\n" msgstr "%s: aviso: configuração de busca textual ideal para configuração regional \"%s\" é desconhecida\n" -#: initdb.c:3253 +#: initdb.c:3084 #, c-format msgid "%s: warning: specified text search configuration \"%s\" might not match locale \"%s\"\n" msgstr "%s: aviso: configuração de busca textual especificada \"%s\" pode não corresponder a configuração regional \"%s\"\n" -#: initdb.c:3258 +#: initdb.c:3089 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "A configuração de busca textual padrão será definida como \"%s\".\n" -#: initdb.c:3302 initdb.c:3380 +#: initdb.c:3133 initdb.c:3211 #, c-format msgid "creating directory %s ... " msgstr "criando diretório %s ... " -#: initdb.c:3316 initdb.c:3398 +#: initdb.c:3147 initdb.c:3229 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "alterando permissões no diretório existente %s ... " -#: initdb.c:3322 initdb.c:3404 +#: initdb.c:3153 initdb.c:3235 #, c-format msgid "%s: could not change permissions of directory \"%s\": %s\n" msgstr "%s: não pôde mudar permissões do diretório \"%s\": %s\n" -#: initdb.c:3337 initdb.c:3419 +#: initdb.c:3168 initdb.c:3250 #, c-format msgid "%s: directory \"%s\" exists but is not empty\n" msgstr "%s: diretório \"%s\" existe mas não está vazio\n" -#: initdb.c:3343 +#: initdb.c:3174 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" @@ -901,17 +896,17 @@ msgstr "" "o diretório \"%s\" ou execute %s\n" "com um argumento ao invés de \"%s\".\n" -#: initdb.c:3351 initdb.c:3432 +#: initdb.c:3182 initdb.c:3263 initdb.c:3575 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: não pôde acessar diretório \"%s\": %s\n" -#: initdb.c:3371 +#: initdb.c:3202 #, c-format msgid "%s: transaction log directory location must be an absolute path\n" msgstr "%s: diretório do log de transação deve ter um caminho absoluto\n" -#: initdb.c:3425 +#: initdb.c:3256 #, c-format msgid "" "If you want to store the transaction log there, either\n" @@ -920,27 +915,27 @@ msgstr "" "Se você quer armazenar o log de transação no mesmo, \n" "remova ou esvazie o diretório \"%s\".\n" -#: initdb.c:3443 +#: initdb.c:3274 #, c-format msgid "%s: could not create symbolic link \"%s\": %s\n" msgstr "%s: não pôde criar link simbólico \"%s\": %s\n" -#: initdb.c:3448 +#: initdb.c:3279 #, c-format msgid "%s: symlinks are not supported on this platform" msgstr "%s: links simbólicos não são suportados nessa plataforma" -#: initdb.c:3461 +#: initdb.c:3292 #, c-format msgid "It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.\n" msgstr "Ele contém um arquivo iniciado por ponto/invisível, talvez por ser um ponto de montagem.\n" -#: initdb.c:3464 +#: initdb.c:3295 #, c-format msgid "It contains a lost+found directory, perhaps due to it being a mount point.\n" msgstr "Ele contém um diretório lost+found, talvez por ser um ponto de montagem.\n" -#: initdb.c:3467 +#: initdb.c:3298 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -949,32 +944,32 @@ msgstr "" "Utilizar um ponto de montagem diretamente como diretório de dados não é recomendado.\n" "Crie um subdiretório no ponto de montagem.\n" -#: initdb.c:3486 +#: initdb.c:3317 #, c-format msgid "creating subdirectories ... " msgstr "criando subdiretórios ... " -#: initdb.c:3654 +#: initdb.c:3485 #, c-format msgid "Running in debug mode.\n" msgstr "Executando no modo de depuração.\n" -#: initdb.c:3658 +#: initdb.c:3489 #, c-format msgid "Running in noclean mode. Mistakes will not be cleaned up.\n" msgstr "Executando no modo sem limpeza. Erros não serão removidos.\n" -#: initdb.c:3729 +#: initdb.c:3560 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: muitos argumentos de linha de comando (primeiro é \"%s\")\n" -#: initdb.c:3746 +#: initdb.c:3586 #, c-format msgid "%s: password prompt and password file cannot be specified together\n" msgstr "%s: opção para perguntar a senha e um arquivo de senhas não podem ser especificados juntos\n" -#: initdb.c:3768 +#: initdb.c:3608 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -985,17 +980,17 @@ msgstr "" "Esse usuário deve ser o dono do processo do servidor também.\n" "\n" -#: initdb.c:3784 +#: initdb.c:3624 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Verificações de páginas de dados estão habilitadas.\n" -#: initdb.c:3786 +#: initdb.c:3626 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Verificações de páginas de dados estão desabilitadas.\n" -#: initdb.c:3795 +#: initdb.c:3635 #, c-format msgid "" "\n" @@ -1006,21 +1001,17 @@ msgstr "" "Sincronização com o disco foi ignorada.\n" "O diretório de dados pode ser danificado se houver uma queda do sistema operacional.\n" -#: initdb.c:3804 +#: initdb.c:3644 #, c-format msgid "" "\n" "Success. You can now start the database server using:\n" "\n" -" %s%s%spostgres%s -D %s%s%s\n" -"or\n" " %s%s%spg_ctl%s -D %s%s%s -l logfile start\n" "\n" msgstr "" "\n" "Sucesso. Você pode iniciar o servidor de banco de dados utilizando:\n" "\n" -" %s%s%spostgres%s -D %s%s%s\n" -"ou\n" " %s%s%spg_ctl%s -D %s%s%s -l logfile start\n" "\n" diff --git a/src/bin/initdb/po/ru.po b/src/bin/initdb/po/ru.po index bc531c2dfc083..8aad5ede0546f 100644 --- a/src/bin/initdb/po/ru.po +++ b/src/bin/initdb/po/ru.po @@ -27,8 +27,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9 current\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-01-13 05:12+0000\n" -"PO-Revision-Date: 2015-01-13 08:35+0300\n" +"POT-Creation-Date: 2015-07-22 00:13+0000\n" +"PO-Revision-Date: 2015-07-27 22:16+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -77,13 +77,13 @@ msgstr "не удалось прочитать символическую ссы msgid "pclose failed: %s" msgstr "ошибка pclose: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" @@ -103,6 +103,43 @@ msgstr "не удалось прочитать каталог \"%s\": %s\n" msgid "could not close directory \"%s\": %s\n" msgstr "не удалось закрыть каталог \"%s\": %s\n" +#: ../../common/restricted_token.c:68 +#, c-format +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: ПРЕДУПРЕЖДЕНИЕ: в этой ОС нельзя создавать ограниченные маркеры\n" + +#: ../../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: не удалось открыть маркер процесса (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: не удалось подготовить структуры SID (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: не удалось создать ограниченный маркер (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "" +"%s: не удалось запустить процесс для команды \"%s\" (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "" +"%s: не удалось перезапуститься с ограниченным маркером (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: не удалось получить код выхода от подпроцесса (код ошибки: %lu)\n" + #: ../../common/rmtree.c:77 #, c-format msgid "could not stat file or directory \"%s\": %s\n" @@ -125,7 +162,7 @@ msgstr "пользователь не существует" #: ../../common/username.c:62 #, c-format msgid "user name lookup failure: error code %lu" -msgstr "распознать имя пользователя не удалось: код ошибки %lu" +msgstr "распознать имя пользователя не удалось (код ошибки: %lu)" #: ../../common/wait_error.c:47 #, c-format @@ -172,113 +209,108 @@ msgstr "не удалось создать связь для каталога \" msgid "could not get junction for \"%s\": %s\n" msgstr "не удалось получить связь для каталога \"%s\": %s\n" -#: initdb.c:337 +#: initdb.c:340 #, c-format msgid "%s: out of memory\n" msgstr "%s: нехватка памяти\n" -#: initdb.c:447 initdb.c:1653 +#: initdb.c:450 initdb.c:1620 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: не удалось открыть файл \"%s\" для чтения: %s\n" -#: initdb.c:503 initdb.c:1055 initdb.c:1083 +#: initdb.c:506 initdb.c:1016 initdb.c:1044 #, c-format msgid "%s: could not open file \"%s\" for writing: %s\n" msgstr "%s: не удалось открыть файл \"%s\" для записи: %s\n" -#: initdb.c:511 initdb.c:519 initdb.c:1062 initdb.c:1089 +#: initdb.c:514 initdb.c:522 initdb.c:1023 initdb.c:1050 #, c-format msgid "%s: could not write file \"%s\": %s\n" msgstr "%s: не удалось записать файл \"%s\": %s\n" -#: initdb.c:541 initdb.c:608 +#: initdb.c:553 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: не удалось открыть каталог \"%s\": %s\n" -#: initdb.c:558 +#: initdb.c:577 initdb.c:2424 #, c-format msgid "%s: could not stat file \"%s\": %s\n" msgstr "%s: не удалось получить информацию о файле \"%s\": %s\n" -#: initdb.c:571 initdb.c:628 +#: initdb.c:589 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: не удалось прочитать каталог \"%s\": %s\n" -#: initdb.c:578 initdb.c:635 -#, c-format -msgid "%s: could not close directory \"%s\": %s\n" -msgstr "%s: не удалось закрыть каталог \"%s\": %s\n" - -#: initdb.c:662 initdb.c:714 +#: initdb.c:622 initdb.c:681 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: не удалось открыть файл \"%s\": %s\n" -#: initdb.c:730 +#: initdb.c:693 #, c-format msgid "%s: could not fsync file \"%s\": %s\n" msgstr "%s: не удалось синхронизировать с ФС файл \"%s\": %s\n" -#: initdb.c:751 +#: initdb.c:712 #, c-format msgid "%s: could not execute command \"%s\": %s\n" msgstr "%s: не удалось выполнить команду \"%s\": %s\n" -#: initdb.c:767 +#: initdb.c:728 #, c-format msgid "%s: removing data directory \"%s\"\n" msgstr "%s: удаление каталога данных \"%s\"\n" -#: initdb.c:770 +#: initdb.c:731 #, c-format msgid "%s: failed to remove data directory\n" msgstr "%s: ошибка при удалении каталога данных\n" -#: initdb.c:776 +#: initdb.c:737 #, c-format msgid "%s: removing contents of data directory \"%s\"\n" msgstr "%s: удаление содержимого каталога данных \"%s\"\n" -#: initdb.c:779 +#: initdb.c:740 #, c-format msgid "%s: failed to remove contents of data directory\n" msgstr "%s: ошибка при удалении содержимого каталога данных\n" -#: initdb.c:785 +#: initdb.c:746 #, c-format msgid "%s: removing transaction log directory \"%s\"\n" msgstr "%s: удаление каталога журнала транзакций \"%s\"\n" -#: initdb.c:788 +#: initdb.c:749 #, c-format msgid "%s: failed to remove transaction log directory\n" msgstr "%s: ошибка при удалении каталога журнала транзакций\n" -#: initdb.c:794 +#: initdb.c:755 #, c-format msgid "%s: removing contents of transaction log directory \"%s\"\n" msgstr "%s: очистка каталога журнала транзакций \"%s\"\n" -#: initdb.c:797 +#: initdb.c:758 #, c-format msgid "%s: failed to remove contents of transaction log directory\n" msgstr "%s: ошибка при очистке каталога журнала транзакций\n" -#: initdb.c:806 +#: initdb.c:767 #, c-format msgid "%s: data directory \"%s\" not removed at user's request\n" msgstr "%s: каталог данных \"%s\" не был удалён по запросу пользователя\n" -#: initdb.c:811 +#: initdb.c:772 #, c-format msgid "%s: transaction log directory \"%s\" not removed at user's request\n" msgstr "" "%s: каталог журнала транзакций \"%s\" не был удалён по запросу пользователя\n" -#: initdb.c:832 +#: initdb.c:793 #, c-format msgid "" "%s: cannot be run as root\n" @@ -289,22 +321,22 @@ msgstr "" "Пожалуйста, переключитесь на обычного пользователя (например,\n" "используя \"su\"), который будет запускать серверный процесс.\n" -#: initdb.c:868 +#: initdb.c:829 #, c-format msgid "%s: \"%s\" is not a valid server encoding name\n" msgstr "%s: \"%s\" - неверное имя серверной кодировки\n" -#: initdb.c:982 initdb.c:3387 +#: initdb.c:943 initdb.c:3217 #, c-format msgid "%s: could not create directory \"%s\": %s\n" msgstr "%s: не удалось создать каталог \"%s\": %s\n" -#: initdb.c:1011 +#: initdb.c:972 #, c-format msgid "%s: file \"%s\" does not exist\n" msgstr "%s: файл \"%s\" не существует\n" -#: initdb.c:1013 initdb.c:1022 initdb.c:1032 +#: initdb.c:974 initdb.c:983 initdb.c:993 #, c-format msgid "" "This might mean you have a corrupted installation or identified\n" @@ -313,46 +345,46 @@ msgstr "" "Это означает, что ваша установка PostgreSQL испорчена или в параметре -L\n" "задан неправильный каталог.\n" -#: initdb.c:1019 +#: initdb.c:980 #, c-format msgid "%s: could not access file \"%s\": %s\n" msgstr "%s: нет доступа к файлу \"%s\": %s\n" -#: initdb.c:1030 +#: initdb.c:991 #, c-format msgid "%s: file \"%s\" is not a regular file\n" msgstr "%s: \"%s\" - не обычный файл\n" -#: initdb.c:1175 +#: initdb.c:1136 #, c-format msgid "selecting default max_connections ... " msgstr "выбирается значение max_connections... " -#: initdb.c:1205 +#: initdb.c:1166 #, c-format msgid "selecting default shared_buffers ... " msgstr "выбирается значение shared_buffers... " -#: initdb.c:1238 +#: initdb.c:1199 #, c-format msgid "selecting dynamic shared memory implementation ... " msgstr "выбор реализации динамической разделяемой памяти ... " -#: initdb.c:1256 +#: initdb.c:1217 msgid "creating configuration files ... " msgstr "создание конфигурационных файлов... " -#: initdb.c:1347 initdb.c:1367 initdb.c:1451 initdb.c:1467 +#: initdb.c:1314 initdb.c:1334 initdb.c:1418 initdb.c:1434 #, c-format msgid "%s: could not change permissions of \"%s\": %s\n" msgstr "%s: не удалось поменять права для \"%s\": %s\n" -#: initdb.c:1491 +#: initdb.c:1458 #, c-format msgid "creating template1 database in %s/base/1 ... " msgstr "создание базы template1 в %s/base/1... " -#: initdb.c:1507 +#: initdb.c:1474 #, c-format msgid "" "%s: input file \"%s\" does not belong to PostgreSQL %s\n" @@ -361,158 +393,158 @@ msgstr "" "%s: входной файл \"%s\" не принадлежит PostgreSQL %s\n" "Проверьте вашу установку или укажите правильный путь в параметре -L.\n" -#: initdb.c:1594 +#: initdb.c:1561 msgid "initializing pg_authid ... " msgstr "инициализация pg_authid... " -#: initdb.c:1628 +#: initdb.c:1595 msgid "Enter new superuser password: " msgstr "Введите новый пароль суперпользователя: " -#: initdb.c:1629 +#: initdb.c:1596 msgid "Enter it again: " msgstr "Повторите его: " -#: initdb.c:1632 +#: initdb.c:1599 #, c-format msgid "Passwords didn't match.\n" msgstr "Пароли не совпадают.\n" -#: initdb.c:1660 +#: initdb.c:1627 #, c-format msgid "%s: could not read password from file \"%s\": %s\n" msgstr "%s: не удалось прочитать пароль из файла \"%s\": %s\n" -#: initdb.c:1663 +#: initdb.c:1630 #, c-format msgid "%s: password file \"%s\" is empty\n" msgstr "%s: файл пароля \"%s\" пуст\n" -#: initdb.c:1676 +#: initdb.c:1643 #, c-format msgid "setting password ... " msgstr "установка пароля... " -#: initdb.c:1776 +#: initdb.c:1743 msgid "initializing dependencies ... " msgstr "инициализация зависимостей... " -#: initdb.c:1804 +#: initdb.c:1771 msgid "creating system views ... " msgstr "создание системных представлений... " -#: initdb.c:1840 +#: initdb.c:1807 msgid "loading system objects' descriptions ... " msgstr "загрузка описаний системных объектов... " -#: initdb.c:1946 +#: initdb.c:1913 msgid "creating collations ... " msgstr "создание правил сортировки... " -#: initdb.c:1979 +#: initdb.c:1946 #, c-format msgid "%s: locale name too long, skipped: \"%s\"\n" msgstr "%s: слишком длинное имя локали, пропущено: \"%s\"\n" -#: initdb.c:2004 +#: initdb.c:1971 #, c-format msgid "%s: locale name has non-ASCII characters, skipped: \"%s\"\n" msgstr "%s: имя локали содержит не ASCII-символы, пропущено: \"%s\"\n" -#: initdb.c:2073 +#: initdb.c:2040 #, c-format msgid "No usable system locales were found.\n" msgstr "Пригодные локали в системе не найдены.\n" -#: initdb.c:2074 +#: initdb.c:2041 #, c-format msgid "Use the option \"--debug\" to see details.\n" msgstr "Добавьте параметр \"--debug\", чтобы узнать подробности.\n" -#: initdb.c:2077 +#: initdb.c:2044 #, c-format msgid "not supported on this platform\n" msgstr "не поддерживается в этой ОС\n" -#: initdb.c:2092 +#: initdb.c:2059 msgid "creating conversions ... " msgstr "создание преобразований... " -#: initdb.c:2127 +#: initdb.c:2094 msgid "creating dictionaries ... " msgstr "создание словарей... " -#: initdb.c:2181 +#: initdb.c:2148 msgid "setting privileges on built-in objects ... " msgstr "установка прав для встроенных объектов... " -#: initdb.c:2239 +#: initdb.c:2206 msgid "creating information schema ... " msgstr "создание информационной схемы... " -#: initdb.c:2295 +#: initdb.c:2262 msgid "loading PL/pgSQL server-side language ... " msgstr "загрузка серверного языка PL/pgSQL... " -#: initdb.c:2320 +#: initdb.c:2287 msgid "vacuuming database template1 ... " msgstr "очистка базы данных template1... " -#: initdb.c:2376 +#: initdb.c:2340 msgid "copying template1 to template0 ... " msgstr "копирование template1 в template0... " -#: initdb.c:2408 +#: initdb.c:2372 msgid "copying template1 to postgres ... " msgstr "копирование template1 в postgres... " -#: initdb.c:2435 +#: initdb.c:2407 msgid "syncing data to disk ... " msgstr "сохранение данных на диске... " -#: initdb.c:2514 +#: initdb.c:2501 #, c-format msgid "caught signal\n" msgstr "получен сигнал\n" -#: initdb.c:2520 +#: initdb.c:2507 #, c-format msgid "could not write to child process: %s\n" msgstr "не удалось записать в поток дочернего процесса: %s\n" -#: initdb.c:2528 +#: initdb.c:2515 #, c-format msgid "ok\n" msgstr "ок\n" -#: initdb.c:2618 +#: initdb.c:2605 #, c-format msgid "%s: setlocale() failed\n" msgstr "%s: ошибка в setlocale()\n" -#: initdb.c:2636 +#: initdb.c:2623 #, c-format msgid "%s: failed to restore old locale \"%s\"\n" msgstr "%s: не удалось восстановить старую локаль \"%s\"\n" -#: initdb.c:2646 +#: initdb.c:2633 #, c-format msgid "%s: invalid locale name \"%s\"\n" msgstr "%s: ошибочное имя локали \"%s\"\n" -#: initdb.c:2658 +#: initdb.c:2645 #, c-format msgid "" "%s: invalid locale settings; check LANG and LC_* environment variables\n" msgstr "" "%s: неверные настройки локали; проверьте переменные окружения LANG и LC_*\n" -#: initdb.c:2686 +#: initdb.c:2673 #, c-format msgid "%s: encoding mismatch\n" msgstr "%s: несоответствие кодировки\n" -#: initdb.c:2688 +#: initdb.c:2675 #, c-format msgid "" "The encoding you selected (%s) and the encoding that the\n" @@ -527,32 +559,7 @@ msgstr "" "Для исправления перезапустите %s, не указывая кодировку явно, \n" "либо выберите подходящее сочетание параметров локализации.\n" -#: initdb.c:2793 -#, c-format -msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -msgstr "%s: ПРЕДУПРЕЖДЕНИЕ: в этой ОС нельзя создавать ограниченные маркеры\n" - -#: initdb.c:2802 -#, c-format -msgid "%s: could not open process token: error code %lu\n" -msgstr "%s: не удалось открыть маркер процесса: код ошибки %lu\n" - -#: initdb.c:2815 -#, c-format -msgid "%s: could not allocate SIDs: error code %lu\n" -msgstr "%s: не удалось подготовить структуры SID: код ошибки: %lu\n" - -#: initdb.c:2835 -#, c-format -msgid "%s: could not create restricted token: error code %lu\n" -msgstr "%s: не удалось создать ограниченный маркер: код ошибки: %lu\n" - -#: initdb.c:2856 -#, c-format -msgid "%s: could not start process for command \"%s\": error code %lu\n" -msgstr "%s: не удалось запустить процесс для команды \"%s\": код ошибки: %lu\n" - -#: initdb.c:2870 +#: initdb.c:2747 #, c-format msgid "" "%s initializes a PostgreSQL database cluster.\n" @@ -561,17 +568,17 @@ msgstr "" "%s инициализирует кластер PostgreSQL.\n" "\n" -#: initdb.c:2871 +#: initdb.c:2748 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: initdb.c:2872 +#: initdb.c:2749 #, c-format msgid " %s [OPTION]... [DATADIR]\n" msgstr " %s [ПАРАМЕТР]... [КАТАЛОГ]\n" -#: initdb.c:2873 +#: initdb.c:2750 #, c-format msgid "" "\n" @@ -580,7 +587,7 @@ msgstr "" "\n" "Параметры:\n" -#: initdb.c:2874 +#: initdb.c:2751 #, c-format msgid "" " -A, --auth=METHOD default authentication method for local " @@ -589,7 +596,7 @@ msgstr "" " -A, --auth=МЕТОД метод проверки подлинности по умолчанию\n" " для локальных подключений\n" -#: initdb.c:2875 +#: initdb.c:2752 #, c-format msgid "" " --auth-host=METHOD default authentication method for local TCP/IP " @@ -598,7 +605,7 @@ msgstr "" " --auth-host=МЕТОД метод проверки подлинности по умолчанию\n" " для локальных TCP/IP-подключений\n" -#: initdb.c:2876 +#: initdb.c:2753 #, c-format msgid "" " --auth-local=METHOD default authentication method for local-socket " @@ -607,22 +614,22 @@ msgstr "" " --auth-local=МЕТОД метод проверки подлинности по умолчанию\n" " для локальных подключений через сокет\n" -#: initdb.c:2877 +#: initdb.c:2754 #, c-format msgid " [-D, --pgdata=]DATADIR location for this database cluster\n" msgstr " [-D, --pgdata=]КАТАЛОГ расположение данных этого кластера БД\n" -#: initdb.c:2878 +#: initdb.c:2755 #, c-format msgid " -E, --encoding=ENCODING set default encoding for new databases\n" msgstr " -E, --encoding=КОДИРОВКА кодировка по умолчанию для новых баз\n" -#: initdb.c:2879 +#: initdb.c:2756 #, c-format msgid " --locale=LOCALE set default locale for new databases\n" msgstr " --locale=ЛОКАЛЬ локаль по умолчанию для новых баз\n" -#: initdb.c:2880 +#: initdb.c:2757 #, c-format msgid "" " --lc-collate=, --lc-ctype=, --lc-messages=LOCALE\n" @@ -636,19 +643,19 @@ msgstr "" " установить соответствующий параметр локали\n" " для новых баз (вместо значения из окружения)\n" -#: initdb.c:2884 +#: initdb.c:2761 #, c-format msgid " --no-locale equivalent to --locale=C\n" msgstr " --no-locale эквивалентно --locale=C\n" -#: initdb.c:2885 +#: initdb.c:2762 #, c-format msgid "" " --pwfile=FILE read password for the new superuser from file\n" msgstr "" " --pwfile=ФАЙЛ прочитать пароль суперпользователя из файла\n" -#: initdb.c:2886 +#: initdb.c:2763 #, c-format msgid "" " -T, --text-search-config=CFG\n" @@ -657,24 +664,24 @@ msgstr "" " -T, --text-search-config=КОНФИГУРАЦИЯ\n" " конфигурация текстового поиска по умолчанию\n" -#: initdb.c:2888 +#: initdb.c:2765 #, c-format msgid " -U, --username=NAME database superuser name\n" msgstr " -U, --username=ИМЯ имя суперпользователя БД\n" -#: initdb.c:2889 +#: initdb.c:2766 #, c-format msgid "" " -W, --pwprompt prompt for a password for the new superuser\n" msgstr " -W, --pwprompt запросить пароль суперпользователя\n" -#: initdb.c:2890 +#: initdb.c:2767 #, c-format msgid "" " -X, --xlogdir=XLOGDIR location for the transaction log directory\n" msgstr " -X, --xlogdir=КАТАЛОГ расположение журнала транзакций\n" -#: initdb.c:2891 +#: initdb.c:2768 #, c-format msgid "" "\n" @@ -683,27 +690,27 @@ msgstr "" "\n" "Редко используемые параметры:\n" -#: initdb.c:2892 +#: initdb.c:2769 #, c-format msgid " -d, --debug generate lots of debugging output\n" msgstr " -d, --debug выдавать много отладочных сообщений\n" -#: initdb.c:2893 +#: initdb.c:2770 #, c-format msgid " -k, --data-checksums use data page checksums\n" msgstr " -k, --data-checksums включить контроль целостности страниц\n" -#: initdb.c:2894 +#: initdb.c:2771 #, c-format msgid " -L DIRECTORY where to find the input files\n" msgstr " -L КАТАЛОГ расположение входных файлов\n" -#: initdb.c:2895 +#: initdb.c:2772 #, c-format msgid " -n, --noclean do not clean up after errors\n" msgstr " -n, --noclean не очищать после ошибок\n" -#: initdb.c:2896 +#: initdb.c:2773 #, c-format msgid "" " -N, --nosync do not wait for changes to be written safely to " @@ -711,18 +718,18 @@ msgid "" msgstr "" " -N, --nosync не ждать завершения сохранения данных на диске\n" -#: initdb.c:2897 +#: initdb.c:2774 #, c-format msgid " -s, --show show internal settings\n" msgstr " -s, --show показать внутренние настройки\n" -#: initdb.c:2898 +#: initdb.c:2775 #, c-format msgid " -S, --sync-only only sync data directory\n" msgstr "" " -S, --sync-only только синхронизировать с ФС каталог данных\n" -#: initdb.c:2899 +#: initdb.c:2776 #, c-format msgid "" "\n" @@ -731,17 +738,17 @@ msgstr "" "\n" "Другие параметры:\n" -#: initdb.c:2900 +#: initdb.c:2777 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: initdb.c:2901 +#: initdb.c:2778 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: initdb.c:2902 +#: initdb.c:2779 #, c-format msgid "" "\n" @@ -751,7 +758,7 @@ msgstr "" "\n" "Если каталог данных не указан, используется переменная окружения PGDATA.\n" -#: initdb.c:2904 +#: initdb.c:2781 #, c-format msgid "" "\n" @@ -760,7 +767,7 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу .\n" -#: initdb.c:2912 +#: initdb.c:2789 msgid "" "\n" "WARNING: enabling \"trust\" authentication for local connections\n" @@ -768,37 +775,26 @@ msgid "" "--auth-local and --auth-host, the next time you run initdb.\n" msgstr "" "\n" -"ВНИМАНИЕ: используется проверка подлинности \"trust\" для локальных " +"ПРЕДУПРЕЖДЕНИЕ: используется проверка подлинности \"trust\" для локальных " "подключений.\n" -"Другой метод можно выбрать, отредактировав pg_hba.conf или используя ключи -" -"A,\n" +"Другой метод можно выбрать, отредактировав pg_hba.conf или используя ключи " +"-A,\n" "--auth-local или --auth-host при следующем выполнении initdb.\n" -#: initdb.c:2934 +#: initdb.c:2811 #, c-format msgid "%s: invalid authentication method \"%s\" for \"%s\" connections\n" msgstr "" "%s: нераспознанный метод проверки подлинности \"%s\" для подключений \"%s\"\n" -#: initdb.c:2948 +#: initdb.c:2825 #, c-format msgid "" "%s: must specify a password for the superuser to enable %s authentication\n" msgstr "" "%s: для применения метода %s необходимо указать пароль суперпользователя\n" -#: initdb.c:2981 -#, c-format -msgid "%s: could not re-execute with restricted token: error code %lu\n" -msgstr "" -"%s: не удалось перезапуститься с ограниченным маркером: код ошибки: %lu\n" - -#: initdb.c:2996 -#, c-format -msgid "%s: could not get exit code from subprocess: error code %lu\n" -msgstr "%s: не удалось получить код выхода от подпроцесса: код ошибки %lu\n" - -#: initdb.c:3022 +#: initdb.c:2852 #, c-format msgid "" "%s: no data directory specified\n" @@ -811,7 +807,7 @@ msgstr "" "Это можно сделать, добавив ключ -D или установив переменную\n" "окружения PGDATA.\n" -#: initdb.c:3060 +#: initdb.c:2890 #, c-format msgid "" "The program \"postgres\" is needed by %s but was not found in the\n" @@ -822,7 +818,7 @@ msgstr "" "в каталоге \"%s\".\n" "Проверьте вашу установку PostgreSQL.\n" -#: initdb.c:3067 +#: initdb.c:2897 #, c-format msgid "" "The program \"postgres\" was found by \"%s\"\n" @@ -833,17 +829,17 @@ msgstr "" "но её версия отличается от версии %s.\n" "Проверьте вашу установку PostgreSQL.\n" -#: initdb.c:3086 +#: initdb.c:2916 #, c-format msgid "%s: input file location must be an absolute path\n" msgstr "%s: расположение входных файлов должно задаваться абсолютным путём\n" -#: initdb.c:3105 +#: initdb.c:2935 #, c-format msgid "The database cluster will be initialized with locale \"%s\".\n" msgstr "Кластер баз данных будет инициализирован с локалью \"%s\".\n" -#: initdb.c:3108 +#: initdb.c:2938 #, c-format msgid "" "The database cluster will be initialized with locales\n" @@ -862,22 +858,22 @@ msgstr "" " NUMERIC: %s\n" " TIME: %s\n" -#: initdb.c:3132 +#: initdb.c:2962 #, c-format msgid "%s: could not find suitable encoding for locale \"%s\"\n" msgstr "%s: не удалось найти подходящую кодировку для локали \"%s\"\n" -#: initdb.c:3134 +#: initdb.c:2964 #, c-format msgid "Rerun %s with the -E option.\n" msgstr "Перезапустите %s с параметром -E.\n" -#: initdb.c:3135 initdb.c:3711 initdb.c:3732 +#: initdb.c:2965 initdb.c:3541 initdb.c:3562 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: initdb.c:3147 +#: initdb.c:2977 #, c-format msgid "" "Encoding \"%s\" implied by locale is not allowed as a server-side encoding.\n" @@ -886,12 +882,12 @@ msgstr "" "Кодировка \"%s\", подразумеваемая локалью, не годится для сервера.\n" "Вместо неё в качестве кодировки БД по умолчанию будет выбрана \"%s\".\n" -#: initdb.c:3155 +#: initdb.c:2985 #, c-format msgid "%s: locale \"%s\" requires unsupported encoding \"%s\"\n" msgstr "%s: для локали \"%s\" требуется неподдерживаемая кодировка \"%s\"\n" -#: initdb.c:3158 +#: initdb.c:2988 #, c-format msgid "" "Encoding \"%s\" is not allowed as a server-side encoding.\n" @@ -900,13 +896,13 @@ msgstr "" "Кодировка \"%s\" недопустима в качестве кодировки сервера.\n" "Перезапустите %s, выбрав другую локаль.\n" -#: initdb.c:3167 +#: initdb.c:2997 #, c-format msgid "The default database encoding has accordingly been set to \"%s\".\n" msgstr "" "Кодировка БД по умолчанию, выбранная в соответствии с настройками: \"%s\".\n" -#: initdb.c:3238 +#: initdb.c:3068 #, c-format msgid "" "%s: could not find suitable text search configuration for locale \"%s\"\n" @@ -914,7 +910,7 @@ msgstr "" "%s: не удалось найти подходящую конфигурацию текстового поиска для локали " "\"%s\"\n" -#: initdb.c:3249 +#: initdb.c:3079 #, c-format msgid "" "%s: warning: suitable text search configuration for locale \"%s\" is " @@ -923,7 +919,7 @@ msgstr "" "%s: внимание: для локали \"%s\" нет известной конфигурации текстового " "поиска\n" -#: initdb.c:3254 +#: initdb.c:3084 #, c-format msgid "" "%s: warning: specified text search configuration \"%s\" might not match " @@ -932,32 +928,32 @@ msgstr "" "%s: внимание: указанная конфигурация текстового поиска \"%s\" может не " "соответствовать локали \"%s\"\n" -#: initdb.c:3259 +#: initdb.c:3089 #, c-format msgid "The default text search configuration will be set to \"%s\".\n" msgstr "Выбрана конфигурация текстового поиска по умолчанию \"%s\".\n" -#: initdb.c:3303 initdb.c:3381 +#: initdb.c:3133 initdb.c:3211 #, c-format msgid "creating directory %s ... " msgstr "создание каталога %s... " -#: initdb.c:3317 initdb.c:3399 +#: initdb.c:3147 initdb.c:3229 #, c-format msgid "fixing permissions on existing directory %s ... " msgstr "исправление прав для существующего каталога %s... " -#: initdb.c:3323 initdb.c:3405 +#: initdb.c:3153 initdb.c:3235 #, c-format msgid "%s: could not change permissions of directory \"%s\": %s\n" msgstr "%s: не удалось поменять права для каталога \"%s\": %s\n" -#: initdb.c:3338 initdb.c:3420 +#: initdb.c:3168 initdb.c:3250 #, c-format msgid "%s: directory \"%s\" exists but is not empty\n" msgstr "%s: каталог \"%s\" существует, но он не пуст\n" -#: initdb.c:3344 +#: initdb.c:3174 #, c-format msgid "" "If you want to create a new database system, either remove or empty\n" @@ -968,19 +964,19 @@ msgstr "" "удалите или очистите каталог \"%s\",\n" "либо при запуске %s в качестве пути укажите не \"%s\".\n" -#: initdb.c:3352 initdb.c:3433 +#: initdb.c:3182 initdb.c:3263 initdb.c:3575 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: нет доступа к каталогу \"%s\": %s\n" -#: initdb.c:3372 +#: initdb.c:3202 #, c-format msgid "%s: transaction log directory location must be an absolute path\n" msgstr "" "%s: расположение каталога журнала транзакций должно определяться абсолютным " "путём\n" -#: initdb.c:3426 +#: initdb.c:3256 #, c-format msgid "" "If you want to store the transaction log there, either\n" @@ -989,17 +985,17 @@ msgstr "" "Если вы хотите хранить журнал транзакций здесь,\n" "удалите или очистите каталог \"%s\".\n" -#: initdb.c:3444 +#: initdb.c:3274 #, c-format msgid "%s: could not create symbolic link \"%s\": %s\n" msgstr "%s: не удалось создать символическую ссылку \"%s\": %s\n" -#: initdb.c:3449 +#: initdb.c:3279 #, c-format msgid "%s: symlinks are not supported on this platform" msgstr "%s: символические ссылки не поддерживаются в этой ОС" -#: initdb.c:3462 +#: initdb.c:3292 #, c-format msgid "" "It contains a dot-prefixed/invisible file, perhaps due to it being a mount " @@ -1007,13 +1003,13 @@ msgid "" msgstr "" "Он содержит файл с точкой (невидимый), возможно это точка монтирования.\n" -#: initdb.c:3465 +#: initdb.c:3295 #, c-format msgid "" "It contains a lost+found directory, perhaps due to it being a mount point.\n" msgstr "Он содержит подкаталог lost+found, возможно это точка монтирования.\n" -#: initdb.c:3468 +#: initdb.c:3298 #, c-format msgid "" "Using a mount point directly as the data directory is not recommended.\n" @@ -1023,34 +1019,34 @@ msgstr "" "рекомендуется.\n" "Создайте в монтируемом ресурсе подкаталог и используйте его.\n" -#: initdb.c:3487 +#: initdb.c:3317 #, c-format msgid "creating subdirectories ... " msgstr "создание подкаталогов... " -#: initdb.c:3655 +#: initdb.c:3485 #, c-format msgid "Running in debug mode.\n" msgstr "Программа запущена в режиме отладки.\n" -#: initdb.c:3659 +#: initdb.c:3489 #, c-format msgid "Running in noclean mode. Mistakes will not be cleaned up.\n" msgstr "" "Программа запущена в режим 'noclean' - очистки и исправления ошибок не " "будет.\n" -#: initdb.c:3730 +#: initdb.c:3560 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: слишком много аргументов командной строки (первый: \"%s\")\n" -#: initdb.c:3747 +#: initdb.c:3586 #, c-format msgid "%s: password prompt and password file cannot be specified together\n" msgstr "%s: нельзя одновременно запросить пароль и прочитать пароль из файла\n" -#: initdb.c:3769 +#: initdb.c:3608 #, c-format msgid "" "The files belonging to this database system will be owned by user \"%s\".\n" @@ -1061,17 +1057,17 @@ msgstr "" "От его имени также будет запускаться процесс сервера.\n" "\n" -#: initdb.c:3785 +#: initdb.c:3624 #, c-format msgid "Data page checksums are enabled.\n" msgstr "Контроль целостности страниц данных включен.\n" -#: initdb.c:3787 +#: initdb.c:3626 #, c-format msgid "Data page checksums are disabled.\n" msgstr "Контроль целостности страниц данных отключен.\n" -#: initdb.c:3796 +#: initdb.c:3635 #, c-format msgid "" "\n" @@ -1082,25 +1078,24 @@ msgstr "" "Сохранение данных на диск пропускается.\n" "Каталог данных может повредиться при сбое операционной системы.\n" -#: initdb.c:3805 +#: initdb.c:3644 #, c-format msgid "" "\n" "Success. You can now start the database server using:\n" "\n" -" %s%s%spostgres%s -D %s%s%s\n" -"or\n" " %s%s%spg_ctl%s -D %s%s%s -l logfile start\n" "\n" msgstr "" "\n" "Готово. Теперь вы можете запустить сервер баз данных:\n" "\n" -" %s%s%spostgres%s -D %s%s%s\n" -"или\n" " %s%s%spg_ctl%s -D %s%s%s -l logfile start\n" "\n" +#~ msgid "%s: could not close directory \"%s\": %s\n" +#~ msgstr "%s: не удалось закрыть каталог \"%s\": %s\n" + #~ msgid "%s: could not obtain information about current user: %s\n" #~ msgstr "%s: не удалось получить информацию о текущем пользователе: %s\n" diff --git a/src/bin/pg_archivecleanup/pg_archivecleanup.c b/src/bin/pg_archivecleanup/pg_archivecleanup.c index ba6e242f15569..c5569f32a336b 100644 --- a/src/bin/pg_archivecleanup/pg_archivecleanup.c +++ b/src/bin/pg_archivecleanup/pg_archivecleanup.c @@ -21,6 +21,8 @@ #include "pg_getopt.h" +#include "access/xlog_internal.h" + const char *progname; /* Options and defaults */ @@ -31,7 +33,7 @@ char *additional_ext = NULL; /* Extension to remove from filenames */ char *archiveLocation; /* where to find the archive? */ char *restartWALFileName; /* the file from which we can restart restore */ char WALFilePath[MAXPGPATH]; /* the file path including archive */ -char exclusiveCleanupFileName[MAXPGPATH]; /* the oldest file we +char exclusiveCleanupFileName[MAXFNAMELEN]; /* the oldest file we * want to remain in * archive */ @@ -51,12 +53,6 @@ char exclusiveCleanupFileName[MAXPGPATH]; /* the oldest file we * folded in to later versions of this program. */ -#define XLOG_DATA_FNAME_LEN 24 -/* Reworked from access/xlog_internal.h */ -#define XLogFileName(fname, tli, log, seg) \ - snprintf(fname, XLOG_DATA_FNAME_LEN + 1, "%08X%08X%08X", tli, log, seg) -#define XLOG_BACKUP_FNAME_LEN 40 - /* * Initialize allows customized commands into the archive cleanup program. * @@ -110,7 +106,7 @@ CleanupPriorWALFiles(void) { /* * Truncation is essentially harmless, because we skip names of - * length other than XLOG_DATA_FNAME_LEN. (In principle, one + * length other than XLOG_FNAME_LEN. (In principle, one * could use a 1000-character additional_ext and get trouble.) */ strlcpy(walfile, xlde->d_name, MAXPGPATH); @@ -129,8 +125,7 @@ CleanupPriorWALFiles(void) * file. Note that this means files are not removed in the order * they were originally written, in case this worries you. */ - if (strlen(walfile) == XLOG_DATA_FNAME_LEN && - strspn(walfile, "0123456789ABCDEF") == XLOG_DATA_FNAME_LEN && + if ((IsXLogFileName(walfile) || IsPartialXLogFileName(walfile)) && strcmp(walfile + 8, exclusiveCleanupFileName + 8) < 0) { /* @@ -186,7 +181,7 @@ CleanupPriorWALFiles(void) * SetWALFileNameForCleanup() * * Set the earliest WAL filename that we want to keep on the archive - * and decide whether we need_cleanup + * and decide whether we need cleanup */ static void SetWALFileNameForCleanup(void) @@ -197,18 +192,38 @@ SetWALFileNameForCleanup(void) /* * If restartWALFileName is a WAL file name then just use it directly. If - * restartWALFileName is a .backup filename, make sure we use the prefix - * of the filename, otherwise we will remove wrong files since - * 000000010000000000000010.00000020.backup is after + * restartWALFileName is a .partial or .backup filename, make sure we use + * the prefix of the filename, otherwise we will remove wrong files since + * 000000010000000000000010.partial and + * 000000010000000000000010.00000020.backup are after * 000000010000000000000010. */ - if (strlen(restartWALFileName) == XLOG_DATA_FNAME_LEN && - strspn(restartWALFileName, "0123456789ABCDEF") == XLOG_DATA_FNAME_LEN) + if (IsXLogFileName(restartWALFileName)) { strcpy(exclusiveCleanupFileName, restartWALFileName); fnameOK = true; } - else if (strlen(restartWALFileName) == XLOG_BACKUP_FNAME_LEN) + else if (IsPartialXLogFileName(restartWALFileName)) + { + int args; + uint32 tli = 1, + log = 0, + seg = 0; + + args = sscanf(restartWALFileName, "%08X%08X%08X.partial", + &tli, &log, &seg); + if (args == 3) + { + fnameOK = true; + + /* + * Use just the prefix of the filename, ignore everything after + * first period + */ + XLogFileNameById(exclusiveCleanupFileName, tli, log, seg); + } + } + else if (IsBackupHistoryFileName(restartWALFileName)) { int args; uint32 tli = 1, @@ -225,7 +240,7 @@ SetWALFileNameForCleanup(void) * Use just the prefix of the filename, ignore everything after * first period */ - XLogFileName(exclusiveCleanupFileName, tli, log, seg); + XLogFileNameById(exclusiveCleanupFileName, tli, log, seg); } } diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 5dd2887d12e9b..536368020b004 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -1516,7 +1516,7 @@ GenerateRecoveryConf(PGconn *conn) /* Separate key-value pairs with spaces */ if (conninfo_buf.len != 0) - appendPQExpBufferStr(&conninfo_buf, " "); + appendPQExpBufferChar(&conninfo_buf, ' '); /* * Write "keyword=value" pieces, the value string is escaped and/or diff --git a/src/bin/pg_basebackup/pg_receivexlog.c b/src/bin/pg_basebackup/pg_receivexlog.c index 5d964e4ee6b27..0c322d1cd9ec7 100644 --- a/src/bin/pg_basebackup/pg_receivexlog.c +++ b/src/bin/pg_basebackup/pg_receivexlog.c @@ -38,6 +38,7 @@ static int noloop = 0; static int standby_message_timeout = 10 * 1000; /* 10 sec = default */ static volatile bool time_to_abort = false; static bool do_create_slot = false; +static bool slot_exists_ok = false; static bool do_drop_slot = false; static bool synchronous = false; @@ -66,6 +67,7 @@ usage(void) printf(_(" %s [OPTION]...\n"), progname); printf(_("\nOptions:\n")); printf(_(" -D, --directory=DIR receive transaction log files into this directory\n")); + printf(_(" --if-not-exists do not error if slot already exists when creating a slot\n")); printf(_(" -n, --no-loop do not loop on connection lost\n")); printf(_(" -s, --status-interval=SECS\n" " time between status packets sent to server (default: %d)\n"), (standby_message_timeout / 1000)); @@ -371,7 +373,8 @@ main(int argc, char **argv) /* action */ {"create-slot", no_argument, NULL, 1}, {"drop-slot", no_argument, NULL, 2}, - {"synchronous", no_argument, NULL, 3}, + {"if-not-exists", no_argument, NULL, 3}, + {"synchronous", no_argument, NULL, 4}, {NULL, 0, NULL, 0} }; @@ -455,6 +458,9 @@ main(int argc, char **argv) do_drop_slot = true; break; case 3: + slot_exists_ok = true; + break; + case 4: synchronous = true; break; default: @@ -502,7 +508,7 @@ main(int argc, char **argv) /* * Required arguments */ - if (basedir == NULL && !do_drop_slot) + if (basedir == NULL && !do_drop_slot && !do_create_slot) { fprintf(stderr, _("%s: no target directory specified\n"), progname); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), @@ -513,7 +519,7 @@ main(int argc, char **argv) /* * Check existence of destination folder. */ - if (!do_drop_slot) + if (!do_drop_slot && !do_create_slot) { DIR *dir = get_destination_dir(basedir); @@ -575,8 +581,10 @@ main(int argc, char **argv) _("%s: creating replication slot \"%s\"\n"), progname, replication_slot); - if (!CreateReplicationSlot(conn, replication_slot, NULL, NULL, true)) + if (!CreateReplicationSlot(conn, replication_slot, NULL, true, + slot_exists_ok)) disconnect_and_exit(1); + disconnect_and_exit(0); } /* diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c index 0bc141dd79bc0..93f61c359adb8 100644 --- a/src/bin/pg_basebackup/pg_recvlogical.c +++ b/src/bin/pg_basebackup/pg_recvlogical.c @@ -38,6 +38,7 @@ static int standby_message_timeout = 10 * 1000; /* 10 sec = default */ static int fsync_interval = 10 * 1000; /* 10 sec = default */ static XLogRecPtr startpos = InvalidXLogRecPtr; static bool do_create_slot = false; +static bool slot_exists_ok = false; static bool do_start_slot = false; static bool do_drop_slot = false; @@ -50,6 +51,7 @@ static const char *plugin = "test_decoding"; static int outfd = -1; static volatile sig_atomic_t time_to_abort = false; static volatile sig_atomic_t output_reopen = false; +static bool output_isfile; static int64 output_last_fsync = -1; static bool output_needs_fsync = false; static XLogRecPtr output_written_lsn = InvalidXLogRecPtr; @@ -74,6 +76,7 @@ usage(void) printf(_(" -f, --file=FILE receive log into this file, - for stdout\n")); printf(_(" -F --fsync-interval=SECS\n" " time between fsyncs to the output file (default: %d)\n"), (fsync_interval / 1000)); + printf(_(" --if-not-exists do not error if slot already exists when creating a slot\n")); printf(_(" -I, --startpos=LSN where in an existing slot should the streaming start\n")); printf(_(" -n, --no-loop do not loop on connection lost\n")); printf(_(" -o, --option=NAME[=VALUE]\n" @@ -177,8 +180,11 @@ OutputFsync(int64 now) output_needs_fsync = false; - /* Accept EINVAL, in case output is writing to a pipe or similar. */ - if (fsync(outfd) != 0 && errno != EINVAL) + /* can only fsync if it's a regular file */ + if (!output_isfile) + return true; + + if (fsync(outfd) != 0) { fprintf(stderr, _("%s: could not fsync log file \"%s\": %s\n"), @@ -317,6 +323,8 @@ StreamLogicalLog(void) /* open the output file, if not open yet */ if (outfd == -1) { + struct stat statbuf; + if (strcmp(outfile, "-") == 0) outfd = fileno(stdout); else @@ -329,6 +337,13 @@ StreamLogicalLog(void) progname, outfile, strerror(errno)); goto error; } + + if (fstat(outfd, &statbuf) != 0) + fprintf(stderr, + _("%s: could not stat file \"%s\": %s\n"), + progname, outfile, strerror(errno)); + + output_isfile = S_ISREG(statbuf.st_mode) && !isatty(outfd); } r = PQgetCopyData(conn, ©buf, 1); @@ -620,6 +635,7 @@ main(int argc, char **argv) {"create-slot", no_argument, NULL, 1}, {"start", no_argument, NULL, 2}, {"drop-slot", no_argument, NULL, 3}, + {"if-not-exists", no_argument, NULL, 4}, {NULL, 0, NULL, 0} }; int c; @@ -751,6 +767,9 @@ main(int argc, char **argv) case 3: do_drop_slot = true; break; + case 4: + slot_exists_ok = true; + break; default: @@ -878,8 +897,9 @@ main(int argc, char **argv) progname, replication_slot); if (!CreateReplicationSlot(conn, replication_slot, plugin, - &startpos, false)) + false, slot_exists_ok)) disconnect_and_exit(1); + startpos = InvalidXLogRecPtr; } if (!do_start_slot) diff --git a/src/bin/pg_basebackup/po/de.po b/src/bin/pg_basebackup/po/de.po index 2a05b55d29b78..5e5d56a38cd9d 100644 --- a/src/bin/pg_basebackup/po/de.po +++ b/src/bin/pg_basebackup/po/de.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-05-19 16:13+0000\n" -"PO-Revision-Date: 2015-05-19 20:41-0400\n" +"POT-Creation-Date: 2015-09-22 15:13+0000\n" +"PO-Revision-Date: 2015-09-22 20:32-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: Peter Eisentraut \n" "Language: de\n" @@ -64,12 +64,12 @@ msgstr "" "%s erzeugt eine Basissicherung eines laufenden PostgreSQL-Servers.\n" "\n" -#: pg_basebackup.c:233 pg_receivexlog.c:65 pg_recvlogical.c:67 +#: pg_basebackup.c:233 pg_receivexlog.c:66 pg_recvlogical.c:69 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_basebackup.c:234 pg_receivexlog.c:66 pg_recvlogical.c:68 +#: pg_basebackup.c:234 pg_receivexlog.c:67 pg_recvlogical.c:70 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" @@ -179,22 +179,22 @@ msgstr " -l, --label=LABEL Backup-Label setzen\n" msgid " -P, --progress show progress information\n" msgstr " -P, --progress Fortschrittsinformationen zeigen\n" -#: pg_basebackup.c:255 pg_receivexlog.c:74 pg_recvlogical.c:86 +#: pg_basebackup.c:255 pg_receivexlog.c:76 pg_recvlogical.c:89 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose „Verbose“-Modus\n" -#: pg_basebackup.c:256 pg_receivexlog.c:75 pg_recvlogical.c:87 +#: pg_basebackup.c:256 pg_receivexlog.c:77 pg_recvlogical.c:90 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_basebackup.c:257 pg_receivexlog.c:76 pg_recvlogical.c:88 +#: pg_basebackup.c:257 pg_receivexlog.c:78 pg_recvlogical.c:91 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_basebackup.c:258 pg_receivexlog.c:77 pg_recvlogical.c:89 +#: pg_basebackup.c:258 pg_receivexlog.c:79 pg_recvlogical.c:92 #, c-format msgid "" "\n" @@ -203,17 +203,17 @@ msgstr "" "\n" "Verbindungsoptionen:\n" -#: pg_basebackup.c:259 pg_receivexlog.c:78 +#: pg_basebackup.c:259 pg_receivexlog.c:80 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=VERBDG Verbindungsparameter\n" -#: pg_basebackup.c:260 pg_receivexlog.c:79 pg_recvlogical.c:91 +#: pg_basebackup.c:260 pg_receivexlog.c:81 pg_recvlogical.c:94 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n" -#: pg_basebackup.c:261 pg_receivexlog.c:80 pg_recvlogical.c:92 +#: pg_basebackup.c:261 pg_receivexlog.c:82 pg_recvlogical.c:95 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT Portnummer des Datenbankservers\n" @@ -227,22 +227,22 @@ msgstr "" " -s, --status-interval=INTERVALL\n" " Zeit zwischen an Server gesendeten Statuspaketen (in Sekunden)\n" -#: pg_basebackup.c:264 pg_receivexlog.c:81 pg_recvlogical.c:93 +#: pg_basebackup.c:264 pg_receivexlog.c:83 pg_recvlogical.c:96 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME Datenbankbenutzername\n" -#: pg_basebackup.c:265 pg_receivexlog.c:82 pg_recvlogical.c:94 +#: pg_basebackup.c:265 pg_receivexlog.c:84 pg_recvlogical.c:97 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password niemals nach Passwort fragen\n" -#: pg_basebackup.c:266 pg_receivexlog.c:83 pg_recvlogical.c:95 +#: pg_basebackup.c:266 pg_receivexlog.c:85 pg_recvlogical.c:98 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password nach Passwort fragen (sollte automatisch geschehen)\n" -#: pg_basebackup.c:267 pg_receivexlog.c:87 pg_recvlogical.c:96 +#: pg_basebackup.c:267 pg_receivexlog.c:89 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -257,7 +257,7 @@ msgid "%s: could not read from ready pipe: %s\n" msgstr "%s: konnte nicht aus bereiter Pipe lesen: %s\n" #: pg_basebackup.c:318 pg_basebackup.c:411 pg_basebackup.c:1879 -#: streamutil.c:282 streamutil.c:366 +#: streamutil.c:285 #, c-format msgid "%s: could not parse transaction log location \"%s\"\n" msgstr "%s: konnte Transaktionslogposition „%s“ nicht interpretieren\n" @@ -378,14 +378,14 @@ msgstr "%s: konnte COPY-Datenstrom nicht empfangen: %s" msgid "%s: could not close compressed file \"%s\": %s\n" msgstr "%s: konnte komprimierte Datei „%s“ nicht schließen: %s\n" -#: pg_basebackup.c:967 pg_recvlogical.c:554 receivelog.c:213 receivelog.c:362 +#: pg_basebackup.c:967 pg_recvlogical.c:569 receivelog.c:213 receivelog.c:362 #: receivelog.c:754 #, c-format msgid "%s: could not close file \"%s\": %s\n" msgstr "%s: konnte Datei „%s“ nicht schließen: %s\n" -#: pg_basebackup.c:978 pg_basebackup.c:1190 pg_recvlogical.c:420 -#: receivelog.c:1042 +#: pg_basebackup.c:978 pg_basebackup.c:1190 pg_recvlogical.c:435 +#: receivelog.c:1044 #, c-format msgid "%s: could not read COPY data: %s" msgstr "%s: konnte COPY-Daten nicht lesen: %s" @@ -441,8 +441,8 @@ msgstr "%s: Speicher aufgebraucht\n" msgid "%s: incompatible server version %s\n" msgstr "%s: inkompatible Serverversion %s\n" -#: pg_basebackup.c:1666 pg_recvlogical.c:255 receivelog.c:549 receivelog.c:600 -#: receivelog.c:641 streamutil.c:252 streamutil.c:338 streamutil.c:401 +#: pg_basebackup.c:1666 pg_recvlogical.c:261 receivelog.c:549 receivelog.c:600 +#: receivelog.c:641 streamutil.c:255 streamutil.c:353 streamutil.c:399 #, c-format msgid "%s: could not send replication command \"%s\": %s" msgstr "%s: konnte Replikationsbefehl „%s“ nicht senden: %s" @@ -567,28 +567,28 @@ msgstr "%s: ungültiges Komprimierungsniveau „%s“\n" msgid "%s: invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"\n" msgstr "%s: ungültiges Checkpoint-Argument „%s“, muss „fast“ oder „spread“ sein\n" -#: pg_basebackup.c:2099 pg_receivexlog.c:434 pg_recvlogical.c:736 +#: pg_basebackup.c:2099 pg_receivexlog.c:439 pg_recvlogical.c:752 #, c-format msgid "%s: invalid status interval \"%s\"\n" msgstr "%s: ungültiges Statusintervall „%s“\n" #: pg_basebackup.c:2115 pg_basebackup.c:2129 pg_basebackup.c:2140 #: pg_basebackup.c:2153 pg_basebackup.c:2163 pg_basebackup.c:2175 -#: pg_basebackup.c:2186 pg_receivexlog.c:463 pg_receivexlog.c:477 -#: pg_receivexlog.c:485 pg_receivexlog.c:495 pg_receivexlog.c:506 -#: pg_recvlogical.c:760 pg_recvlogical.c:774 pg_recvlogical.c:785 -#: pg_recvlogical.c:793 pg_recvlogical.c:801 pg_recvlogical.c:809 -#: pg_recvlogical.c:817 pg_recvlogical.c:825 +#: pg_basebackup.c:2186 pg_receivexlog.c:471 pg_receivexlog.c:485 +#: pg_receivexlog.c:493 pg_receivexlog.c:503 pg_receivexlog.c:514 +#: pg_recvlogical.c:779 pg_recvlogical.c:793 pg_recvlogical.c:804 +#: pg_recvlogical.c:812 pg_recvlogical.c:820 pg_recvlogical.c:828 +#: pg_recvlogical.c:836 pg_recvlogical.c:844 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie „%s --help“ für weitere Informationen.\n" -#: pg_basebackup.c:2127 pg_receivexlog.c:475 pg_recvlogical.c:772 +#: pg_basebackup.c:2127 pg_receivexlog.c:483 pg_recvlogical.c:791 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: zu viele Kommandozeilenargumente (das erste ist „%s“)\n" -#: pg_basebackup.c:2139 pg_receivexlog.c:505 +#: pg_basebackup.c:2139 pg_receivexlog.c:513 #, c-format msgid "%s: no target directory specified\n" msgstr "%s: kein Zielverzeichnis angegeben\n" @@ -628,7 +628,7 @@ msgstr "%s: konnte symbolische Verknüpfung „%s“ nicht erzeugen: %s\n" msgid "%s: symlinks are not supported on this platform\n" msgstr "%s: symbolische Verknüpfungen werden auf dieser Plattform nicht unterstützt\n" -#: pg_receivexlog.c:63 +#: pg_receivexlog.c:64 #, c-format msgid "" "%s receives PostgreSQL streaming transaction logs.\n" @@ -637,7 +637,7 @@ msgstr "" "%s empfängt PostgreSQL-Streaming-Transaktionslogs.\n" "\n" -#: pg_receivexlog.c:67 pg_recvlogical.c:73 +#: pg_receivexlog.c:68 pg_recvlogical.c:75 #, c-format msgid "" "\n" @@ -646,17 +646,22 @@ msgstr "" "\n" "Optionen:\n" -#: pg_receivexlog.c:68 +#: pg_receivexlog.c:69 #, c-format msgid " -D, --directory=DIR receive transaction log files into this directory\n" msgstr " -D, --directory=VERZ Transaktionslogdateien in dieses Verzeichnis empfangen\n" -#: pg_receivexlog.c:69 pg_recvlogical.c:78 +#: pg_receivexlog.c:70 pg_recvlogical.c:79 +#, c-format +msgid " --if-not-exists do not error if slot already exists when creating a slot\n" +msgstr " --if-not-exists keinen Fehler ausgeben, wenn Slot beim Erzeugen schon existiert\n" + +#: pg_receivexlog.c:71 pg_recvlogical.c:81 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop bei Verbindungsverlust nicht erneut probieren\n" -#: pg_receivexlog.c:70 pg_recvlogical.c:83 +#: pg_receivexlog.c:72 pg_recvlogical.c:86 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -665,17 +670,17 @@ msgstr "" " -s, --status-interval=SEK\n" " Zeit zwischen an Server gesendeten Statuspaketen (Standard: %d)\n" -#: pg_receivexlog.c:72 +#: pg_receivexlog.c:74 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=SLOTNAME zu verwendender Replikations-Slot\n" -#: pg_receivexlog.c:73 +#: pg_receivexlog.c:75 #, c-format msgid " --synchronous flush transaction log immediately after writing\n" msgstr " --synchronous Transaktionslog sofort nach dem Schreiben flushen\n" -#: pg_receivexlog.c:84 +#: pg_receivexlog.c:86 #, c-format msgid "" "\n" @@ -684,104 +689,104 @@ msgstr "" "\n" "Optionale Aktionen:\n" -#: pg_receivexlog.c:85 pg_recvlogical.c:70 +#: pg_receivexlog.c:87 pg_recvlogical.c:72 #, c-format msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" msgstr " --create-slot neuen Replikations-Slot erzeugen (Slot-Name siehe --slot)\n" -#: pg_receivexlog.c:86 pg_recvlogical.c:71 +#: pg_receivexlog.c:88 pg_recvlogical.c:73 #, c-format msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" msgstr " --drop-slot Replikations-Slot löschen (Slot-Name siehe --slot)\n" -#: pg_receivexlog.c:98 +#: pg_receivexlog.c:100 #, c-format msgid "%s: finished segment at %X/%X (timeline %u)\n" msgstr "%s: Segment bei %X/%X abgeschlossen (Zeitleiste %u)\n" -#: pg_receivexlog.c:111 +#: pg_receivexlog.c:113 #, c-format msgid "%s: switched to timeline %u at %X/%X\n" msgstr "%s: auf Zeitleiste %u umgeschaltet bei %X/%X\n" -#: pg_receivexlog.c:120 +#: pg_receivexlog.c:122 #, c-format msgid "%s: received interrupt signal, exiting\n" msgstr "%s: Interrupt-Signal erhalten, beende\n" -#: pg_receivexlog.c:140 +#: pg_receivexlog.c:142 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: konnte Verzeichnis „%s“ nicht öffnen: %s\n" -#: pg_receivexlog.c:158 +#: pg_receivexlog.c:160 #, c-format msgid "%s: could not close directory \"%s\": %s\n" msgstr "%s: konnte Verzeichnis „%s“ nicht schließen: %s\n" -#: pg_receivexlog.c:216 +#: pg_receivexlog.c:218 pg_recvlogical.c:343 #, c-format msgid "%s: could not stat file \"%s\": %s\n" msgstr "%s: konnte „stat“ für Datei „%s“ nicht ausführen: %s\n" -#: pg_receivexlog.c:224 +#: pg_receivexlog.c:226 #, c-format msgid "%s: segment file \"%s\" has incorrect size %d, skipping\n" msgstr "%s: Segmentdatei „%s“ hat falsche Größe %d, wird übersprungen\n" -#: pg_receivexlog.c:243 +#: pg_receivexlog.c:245 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: konnte Verzeichnis „%s“ nicht lesen: %s\n" -#: pg_receivexlog.c:327 +#: pg_receivexlog.c:331 #, c-format msgid "%s: starting log streaming at %X/%X (timeline %u)\n" msgstr "%s: starte Log-Streaming bei %X/%X (Zeitleiste %u)\n" -#: pg_receivexlog.c:415 pg_recvlogical.c:683 +#: pg_receivexlog.c:420 pg_recvlogical.c:699 #, c-format msgid "%s: invalid port number \"%s\"\n" msgstr "%s: ungültige Portnummer „%s“\n" -#: pg_receivexlog.c:484 +#: pg_receivexlog.c:492 #, c-format msgid "%s: cannot use --create-slot together with --drop-slot\n" msgstr "%s: --create-slot kann nicht zusammen mit --drop-slot verwendet werden\n" #. translator: second %s is an option name -#: pg_receivexlog.c:493 +#: pg_receivexlog.c:501 #, c-format msgid "%s: %s needs a slot to be specified using --slot\n" msgstr "%s: für %s muss ein Slot mit --slot angegeben werden\n" -#: pg_receivexlog.c:547 +#: pg_receivexlog.c:556 #, c-format msgid "%s: replication connection using slot \"%s\" is unexpectedly database specific\n" msgstr "%s: Replikationsverbindung, die Slot „%s“ verwendet, ist unerwarteterweise datenbankspezifisch\n" -#: pg_receivexlog.c:559 pg_recvlogical.c:865 +#: pg_receivexlog.c:568 pg_recvlogical.c:884 #, c-format msgid "%s: dropping replication slot \"%s\"\n" msgstr "%s: lösche Replikations-Slot „%s“\n" -#: pg_receivexlog.c:572 pg_recvlogical.c:877 +#: pg_receivexlog.c:581 pg_recvlogical.c:896 #, c-format msgid "%s: creating replication slot \"%s\"\n" msgstr "%s: erzeuge Replikations-Slot „%s“\n" -#: pg_receivexlog.c:597 pg_recvlogical.c:902 +#: pg_receivexlog.c:608 pg_recvlogical.c:922 #, c-format msgid "%s: disconnected\n" msgstr "%s: Verbindung beendet\n" #. translator: check source for value for %d -#: pg_receivexlog.c:604 pg_recvlogical.c:909 +#: pg_receivexlog.c:615 pg_recvlogical.c:929 #, c-format msgid "%s: disconnected; waiting %d seconds to try again\n" msgstr "%s: Verbindung beendet; erneuter Versuch in %d Sekunden\n" -#: pg_recvlogical.c:65 +#: pg_recvlogical.c:67 #, c-format msgid "" "%s controls PostgreSQL logical decoding streams.\n" @@ -790,7 +795,7 @@ msgstr "" "%s kontrolliert logische Dekodierungsströme von PostgreSQL.\n" "\n" -#: pg_recvlogical.c:69 +#: pg_recvlogical.c:71 #, c-format msgid "" "\n" @@ -799,17 +804,17 @@ msgstr "" "\n" "Auszuführende Aktion:\n" -#: pg_recvlogical.c:72 +#: pg_recvlogical.c:74 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" msgstr " --start Streaming in einem Replikations-Slot starten (Slot-Name siehe --slot)\n" -#: pg_recvlogical.c:74 +#: pg_recvlogical.c:76 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=DATEI Log in diese Datei empfangen, - für Standardausgabe\n" -#: pg_recvlogical.c:75 +#: pg_recvlogical.c:77 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -818,12 +823,12 @@ msgstr "" " -F --fsync-interval=SEK\n" " Zeit zwischen Fsyncs der Ausgabedatei (Standard: %d)\n" -#: pg_recvlogical.c:77 +#: pg_recvlogical.c:80 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr " -I, --startpos=LSN wo in einem bestehenden Slot das Streaming starten soll\n" -#: pg_recvlogical.c:79 +#: pg_recvlogical.c:82 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -834,123 +839,123 @@ msgstr "" " Option NAME mit optionalem Wert WERT an den\n" " Ausgabe-Plugin übergeben\n" -#: pg_recvlogical.c:82 +#: pg_recvlogical.c:85 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN Ausgabe-Plugin PLUGIN verwenden (Standard: %s)\n" -#: pg_recvlogical.c:85 +#: pg_recvlogical.c:88 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=SLOTNAME Name des logischen Replikations-Slots\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:93 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=DBNAME Datenbank, mit der verbunden werden soll\n" -#: pg_recvlogical.c:123 +#: pg_recvlogical.c:126 #, c-format msgid "%s: confirming write up to %X/%X, flush to %X/%X (slot %s)\n" msgstr "%s: bestätige Schreiben bis %X/%X, Flush bis %X/%X (Slot %s)\n" -#: pg_recvlogical.c:148 receivelog.c:415 +#: pg_recvlogical.c:151 receivelog.c:415 #, c-format msgid "%s: could not send feedback packet: %s" msgstr "%s: konnte Rückmeldungspaket nicht senden: %s" -#: pg_recvlogical.c:184 +#: pg_recvlogical.c:190 #, c-format msgid "%s: could not fsync log file \"%s\": %s\n" msgstr "%s: konnte Logdatei „%s“ nicht fsyncen: %s\n" -#: pg_recvlogical.c:223 +#: pg_recvlogical.c:229 #, c-format msgid "%s: starting log streaming at %X/%X (slot %s)\n" msgstr "%s: starte Log-Streaming bei %X/%X (Slot %s)\n" -#: pg_recvlogical.c:265 +#: pg_recvlogical.c:271 #, c-format msgid "%s: streaming initiated\n" msgstr "%s: Streaming eingeleitet\n" -#: pg_recvlogical.c:328 +#: pg_recvlogical.c:336 #, c-format msgid "%s: could not open log file \"%s\": %s\n" msgstr "%s: konnte Logdatei „%s“ nicht öffnen: %s\n" -#: pg_recvlogical.c:397 receivelog.c:978 +#: pg_recvlogical.c:412 receivelog.c:980 #, c-format msgid "%s: select() failed: %s\n" msgstr "%s: select() fehlgeschlagen: %s\n" -#: pg_recvlogical.c:406 receivelog.c:1028 +#: pg_recvlogical.c:421 receivelog.c:1030 #, c-format msgid "%s: could not receive data from WAL stream: %s" msgstr "%s: konnte keine Daten vom WAL-Stream empfangen: %s" -#: pg_recvlogical.c:447 pg_recvlogical.c:486 receivelog.c:1074 -#: receivelog.c:1143 +#: pg_recvlogical.c:462 pg_recvlogical.c:501 receivelog.c:1075 +#: receivelog.c:1144 #, c-format msgid "%s: streaming header too small: %d\n" msgstr "%s: Streaming-Header zu klein: %d\n" -#: pg_recvlogical.c:469 receivelog.c:922 +#: pg_recvlogical.c:484 receivelog.c:924 #, c-format msgid "%s: unrecognized streaming header: \"%c\"\n" msgstr "%s: unbekannter Streaming-Header: „%c“\n" -#: pg_recvlogical.c:515 pg_recvlogical.c:529 +#: pg_recvlogical.c:530 pg_recvlogical.c:544 #, c-format msgid "%s: could not write %u bytes to log file \"%s\": %s\n" msgstr "%s: konnte %u Bytes nicht in Logdatei „%s“ schreiben: %s\n" -#: pg_recvlogical.c:540 receivelog.c:707 receivelog.c:745 +#: pg_recvlogical.c:555 receivelog.c:707 receivelog.c:745 #, c-format msgid "%s: unexpected termination of replication stream: %s" msgstr "%s: unerwarteter Abbruch des Replikations-Streams: %s" -#: pg_recvlogical.c:662 +#: pg_recvlogical.c:678 #, c-format msgid "%s: invalid fsync interval \"%s\"\n" msgstr "%s: ungültiges Fsync-Intervall „%s“\n" -#: pg_recvlogical.c:703 +#: pg_recvlogical.c:719 #, c-format msgid "%s: could not parse start position \"%s\"\n" msgstr "%s: konnte Startposition „%s“ nicht parsen\n" -#: pg_recvlogical.c:784 +#: pg_recvlogical.c:803 #, c-format msgid "%s: no slot specified\n" msgstr "%s: kein Slot angegeben\n" -#: pg_recvlogical.c:792 +#: pg_recvlogical.c:811 #, c-format msgid "%s: no target file specified\n" msgstr "%s: keine Zieldatei angegeben\n" -#: pg_recvlogical.c:800 +#: pg_recvlogical.c:819 #, c-format msgid "%s: no database specified\n" msgstr "%s: keine Datenbank angegeben\n" -#: pg_recvlogical.c:808 +#: pg_recvlogical.c:827 #, c-format msgid "%s: at least one action needs to be specified\n" msgstr "%s: mindestens eine Aktion muss angegeben werden\n" -#: pg_recvlogical.c:816 +#: pg_recvlogical.c:835 #, c-format msgid "%s: cannot use --create-slot or --start together with --drop-slot\n" msgstr "%s: --create-slot oder --start kann nicht zusammen mit --drop-slot verwendet werden\n" -#: pg_recvlogical.c:824 +#: pg_recvlogical.c:843 #, c-format msgid "%s: cannot use --create-slot or --drop-slot together with --startpos\n" msgstr "%s: --create-slot oder --drop-slot kann nicht zusammen mit --startpos verwendet werden\n" -#: pg_recvlogical.c:855 +#: pg_recvlogical.c:874 #, c-format msgid "%s: could not establish database-specific replication connection\n" msgstr "%s: konnte keine datenbankspezifische Replikationsverbindung herstellen\n" @@ -961,7 +966,7 @@ msgid "%s: could not create archive status file \"%s\": %s\n" msgstr "%s: konnte Archivstatusdatei „%s“ nicht erzeugen: %s\n" #: receivelog.c:82 receivelog.c:206 receivelog.c:355 receivelog.c:848 -#: receivelog.c:1095 +#: receivelog.c:1096 #, c-format msgid "%s: could not fsync file \"%s\": %s\n" msgstr "%s: konnte Datei „%s“ nicht fsyncen: %s\n" @@ -1041,7 +1046,7 @@ msgstr "%s: inkompatible Serverversion %s; Client unterstützt Streaming nicht m msgid "%s: incompatible server version %s; client does not support streaming from server versions newer than %s\n" msgstr "%s: inkompatible Serverversion %s; Client unterstützt Streaming nicht mit Serverversionen neuer als %s\n" -#: receivelog.c:557 streamutil.c:261 streamutil.c:296 +#: receivelog.c:557 streamutil.c:264 streamutil.c:299 #, c-format msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n" msgstr "%s: konnte System nicht identifizieren: %d Zeilen und %d Felder erhalten, %d Zeilen und %d oder mehr Felder erwartet\n" @@ -1086,61 +1091,61 @@ msgstr "%s: unerwartete Ergebnismenge nach Ende der Zeitleiste: %d Zeilen und %d msgid "%s: could not parse next timeline's starting point \"%s\"\n" msgstr "%s: konnte Startpunkt der nächsten Zeitleiste („%s“) nicht interpretieren\n" -#: receivelog.c:957 +#: receivelog.c:959 #, c-format msgid "%s: socket not open" msgstr "%s: Socket ist nicht offen" -#: receivelog.c:1162 +#: receivelog.c:1163 #, c-format msgid "%s: received transaction log record for offset %u with no file open\n" msgstr "%s: Transaktionslogeintrag für Offset %u erhalten ohne offene Datei\n" -#: receivelog.c:1174 +#: receivelog.c:1175 #, c-format msgid "%s: got WAL data offset %08x, expected %08x\n" msgstr "%s: WAL-Daten-Offset %08x erhalten, %08x erwartet\n" -#: receivelog.c:1211 +#: receivelog.c:1212 #, c-format msgid "%s: could not write %u bytes to WAL file \"%s\": %s\n" msgstr "%s: konnte %u Bytes nicht in WAL-Datei „%s“ schreiben: %s\n" -#: receivelog.c:1236 receivelog.c:1278 receivelog.c:1310 +#: receivelog.c:1237 receivelog.c:1279 receivelog.c:1311 #, c-format msgid "%s: could not send copy-end packet: %s" msgstr "%s: konnte COPY-Ende-Paket nicht senden: %s" -#: streamutil.c:143 +#: streamutil.c:145 msgid "Password: " msgstr "Passwort: " -#: streamutil.c:167 +#: streamutil.c:169 #, c-format msgid "%s: could not connect to server\n" msgstr "%s: konnte nicht mit Server verbinden\n" -#: streamutil.c:185 +#: streamutil.c:187 #, c-format -msgid "%s: could not connect to server: %s\n" -msgstr "%s: konnte nicht mit Server verbinden: %s\n" +msgid "%s: could not connect to server: %s" +msgstr "%s: konnte nicht mit Server verbinden: %s" -#: streamutil.c:209 +#: streamutil.c:211 #, c-format msgid "%s: could not determine server setting for integer_datetimes\n" msgstr "%s: konnte Servereinstellung für integer_datetimes nicht ermitteln\n" -#: streamutil.c:222 +#: streamutil.c:224 #, c-format msgid "%s: integer_datetimes compile flag does not match server\n" msgstr "%s: Kompilieroption „integer_datetimes“ stimmt nicht mit Server überein\n" -#: streamutil.c:349 +#: streamutil.c:365 #, c-format msgid "%s: could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: konnte Replikations-Slot „%s“ nicht erzeugen: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet\n" -#: streamutil.c:412 +#: streamutil.c:410 #, c-format msgid "%s: could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: konnte Replikations-Slot „%s“ nicht löschen: %d Zeilen und %d Felder erhalten, %d Zeilen und %d Felder erwartet\n" diff --git a/src/bin/pg_basebackup/po/es.po b/src/bin/pg_basebackup/po/es.po index ee7c3f600871b..11414cdf2e859 100644 --- a/src/bin/pg_basebackup/po/es.po +++ b/src/bin/pg_basebackup/po/es.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_basebackup (PostgreSQL 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:42+0000\n" -"PO-Revision-Date: 2014-12-15 14:55-0300\n" +"POT-Creation-Date: 2015-10-04 00:43+0000\n" +"PO-Revision-Date: 2015-09-30 12:30-0300\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: Spanish \n" "Language: es\n" @@ -19,43 +19,43 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "memoria agotada\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" -#: pg_basebackup.c:153 +#: pg_basebackup.c:154 #, c-format msgid "%s: directory name too long\n" msgstr "%s: nombre de directorio demasiado largo\n" -#: pg_basebackup.c:163 +#: pg_basebackup.c:164 #, c-format msgid "%s: multiple \"=\" signs in tablespace mapping\n" msgstr "%s: múltiples signos «=» en mapeo de tablespace\n" -#: pg_basebackup.c:176 +#: pg_basebackup.c:177 #, c-format msgid "%s: invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"\n" msgstr "%s: formato de mapeo de tablespace «%s» no válido, debe ser «ANTIGUO=NUEVO»\n" -#: pg_basebackup.c:189 +#: pg_basebackup.c:190 #, c-format msgid "%s: old directory is not an absolute path in tablespace mapping: %s\n" msgstr "%s: directorio antiguo no es una ruta absoluta en mapeo de tablespace: %s\n" -#: pg_basebackup.c:196 +#: pg_basebackup.c:197 #, c-format msgid "%s: new directory is not an absolute path in tablespace mapping: %s\n" msgstr "%s: directorio nuevo no es una ruta absoluta en mapeo de tablespace: %s\n" -#: pg_basebackup.c:227 +#: pg_basebackup.c:231 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -64,17 +64,17 @@ msgstr "" "%s obtiene un respaldo base a partir de un servidor PostgreSQL en ejecución.\n" "\n" -#: pg_basebackup.c:229 pg_receivexlog.c:60 pg_recvlogical.c:67 +#: pg_basebackup.c:233 pg_receivexlog.c:66 pg_recvlogical.c:69 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_basebackup.c:230 pg_receivexlog.c:61 pg_recvlogical.c:68 +#: pg_basebackup.c:234 pg_receivexlog.c:67 pg_recvlogical.c:70 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPCIÓN]...\n" -#: pg_basebackup.c:231 +#: pg_basebackup.c:235 #, c-format msgid "" "\n" @@ -83,17 +83,17 @@ msgstr "" "\n" "Opciones que controlan la salida:\n" -#: pg_basebackup.c:232 +#: pg_basebackup.c:236 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=DIRECTORIO recibir el respaldo base en directorio\n" -#: pg_basebackup.c:233 +#: pg_basebackup.c:237 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t formato de salida (plano (por omisión), tar)\n" -#: pg_basebackup.c:234 +#: pg_basebackup.c:238 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -102,7 +102,7 @@ msgstr "" " -r, --max-rate=TASA máxima tasa a la que transferir el directorio de datos\n" " (en kB/s, o use sufijos «k» o «M»)\n" -#: pg_basebackup.c:236 +#: pg_basebackup.c:240 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -111,7 +111,7 @@ msgstr "" " -R, --write-recovery-info\n" " escribe recovery.conf después del respaldo\n" -#: pg_basebackup.c:238 +#: pg_basebackup.c:242 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -120,14 +120,14 @@ msgstr "" " -T, --tablespace-mapping=ANTIGUO=NUEVO\n" " reubicar el directorio de tablespace de ANTIGUO a NUEVO\n" -#: pg_basebackup.c:240 +#: pg_basebackup.c:244 #, c-format msgid " -x, --xlog include required WAL files in backup (fetch mode)\n" msgstr "" " -x, --xlog incluye los archivos WAL necesarios en el respaldo\n" " (modo fetch)\n" -#: pg_basebackup.c:241 +#: pg_basebackup.c:245 #, c-format msgid "" " -X, --xlog-method=fetch|stream\n" @@ -137,22 +137,22 @@ msgstr "" " incluye los archivos WAL necesarios,\n" " en el modo especificado\n" -#: pg_basebackup.c:243 +#: pg_basebackup.c:247 #, c-format msgid " --xlogdir=XLOGDIR location for the transaction log directory\n" msgstr " --xlogdir=DIR ubicación para los archivos del registro transaccional\n" -#: pg_basebackup.c:244 +#: pg_basebackup.c:248 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip comprimir la salida de tar\n" -#: pg_basebackup.c:245 +#: pg_basebackup.c:249 #, c-format msgid " -Z, --compress=0-9 compress tar output with given compression level\n" msgstr " -Z, --compress=0-9 comprimir salida tar con el nivel de compresión dado\n" -#: pg_basebackup.c:246 +#: pg_basebackup.c:250 #, c-format msgid "" "\n" @@ -161,7 +161,7 @@ msgstr "" "\n" "Opciones generales:\n" -#: pg_basebackup.c:247 +#: pg_basebackup.c:251 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" @@ -170,32 +170,32 @@ msgstr "" " -c, --checkpoint=fast|spread\n" " utilizar checkpoint rápido o extendido\n" -#: pg_basebackup.c:249 +#: pg_basebackup.c:253 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=ETIQUETA establecer etiqueta del respaldo\n" -#: pg_basebackup.c:250 +#: pg_basebackup.c:254 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress mostrar información de progreso\n" -#: pg_basebackup.c:251 pg_receivexlog.c:68 pg_recvlogical.c:86 +#: pg_basebackup.c:255 pg_receivexlog.c:76 pg_recvlogical.c:89 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose desplegar mensajes verbosos\n" -#: pg_basebackup.c:252 pg_receivexlog.c:69 pg_recvlogical.c:87 +#: pg_basebackup.c:256 pg_receivexlog.c:77 pg_recvlogical.c:90 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión, luego salir\n" -#: pg_basebackup.c:253 pg_receivexlog.c:70 pg_recvlogical.c:88 +#: pg_basebackup.c:257 pg_receivexlog.c:78 pg_recvlogical.c:91 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda, luego salir\n" -#: pg_basebackup.c:254 pg_receivexlog.c:71 pg_recvlogical.c:89 +#: pg_basebackup.c:258 pg_receivexlog.c:79 pg_recvlogical.c:92 #, c-format msgid "" "\n" @@ -204,22 +204,22 @@ msgstr "" "\n" "Opciones de conexión:\n" -#: pg_basebackup.c:255 pg_receivexlog.c:72 +#: pg_basebackup.c:259 pg_receivexlog.c:80 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -s, --dbname=CONSTR cadena de conexión\n" -#: pg_basebackup.c:256 pg_receivexlog.c:73 pg_recvlogical.c:91 +#: pg_basebackup.c:260 pg_receivexlog.c:81 pg_recvlogical.c:94 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=ANFITRIÓN dirección del servidor o directorio del socket\n" -#: pg_basebackup.c:257 pg_receivexlog.c:74 pg_recvlogical.c:92 +#: pg_basebackup.c:261 pg_receivexlog.c:82 pg_recvlogical.c:95 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT número de port del servidor\n" -#: pg_basebackup.c:258 +#: pg_basebackup.c:262 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -228,24 +228,24 @@ msgstr "" " -s, --status-interval=INTERVALO (segundos)\n" " tiempo entre envíos de paquetes de estado al servidor\n" -#: pg_basebackup.c:260 pg_receivexlog.c:75 pg_recvlogical.c:93 +#: pg_basebackup.c:264 pg_receivexlog.c:83 pg_recvlogical.c:96 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NOMBRE conectarse con el usuario especificado\n" -#: pg_basebackup.c:261 pg_receivexlog.c:76 pg_recvlogical.c:94 +#: pg_basebackup.c:265 pg_receivexlog.c:84 pg_recvlogical.c:97 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir contraseña\n" -#: pg_basebackup.c:262 pg_receivexlog.c:77 pg_recvlogical.c:95 +#: pg_basebackup.c:266 pg_receivexlog.c:85 pg_recvlogical.c:98 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password forzar un prompt para la contraseña\n" " (debería ser automático)\n" -#: pg_basebackup.c:263 pg_receivexlog.c:78 pg_recvlogical.c:96 +#: pg_basebackup.c:267 pg_receivexlog.c:89 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -254,399 +254,393 @@ msgstr "" "\n" "Reporte errores a .\n" -#: pg_basebackup.c:306 +#: pg_basebackup.c:310 #, c-format msgid "%s: could not read from ready pipe: %s\n" msgstr "%s: no se pudo leer desde la tubería: %s\n" -#: pg_basebackup.c:314 pg_basebackup.c:406 pg_basebackup.c:1877 -#: pg_receivexlog.c:301 pg_recvlogical.c:937 +#: pg_basebackup.c:318 pg_basebackup.c:411 pg_basebackup.c:1879 +#: streamutil.c:285 #, c-format msgid "%s: could not parse transaction log location \"%s\"\n" -msgstr "%s: no se pudo interpretar la ubicación del log de transacciones «%s»\n" +msgstr "%s: no se pudo interpretar la ubicación del registro transaccional «%s»\n" -#: pg_basebackup.c:419 +#: pg_basebackup.c:424 #, c-format msgid "%s: could not create pipe for background process: %s\n" msgstr "%s: no se pudo crear la tubería para el proceso en segundo plano: %s\n" -#: pg_basebackup.c:452 +#: pg_basebackup.c:449 pg_basebackup.c:504 pg_basebackup.c:1262 +#, c-format +msgid "%s: could not create directory \"%s\": %s\n" +msgstr "%s: no se pudo crear el directorio «%s»: %s\n" + +#: pg_basebackup.c:467 #, c-format msgid "%s: could not create background process: %s\n" msgstr "%s: no se pudo lanzar el proceso en segundo plano: %s\n" -#: pg_basebackup.c:464 +#: pg_basebackup.c:479 #, c-format msgid "%s: could not create background thread: %s\n" msgstr "%s: no se pudo lanzar el hilo en segundo plano: %s\n" -#: pg_basebackup.c:489 pg_basebackup.c:1246 -#, c-format -msgid "%s: could not create directory \"%s\": %s\n" -msgstr "%s: no se pudo crear el directorio «%s»: %s\n" - -#: pg_basebackup.c:508 +#: pg_basebackup.c:523 #, c-format msgid "%s: directory \"%s\" exists but is not empty\n" msgstr "%s: el directorio «%s» existe pero no está vacío\n" -#: pg_basebackup.c:516 +#: pg_basebackup.c:531 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: no se pudo acceder al directorio «%s»: %s\n" -#: pg_basebackup.c:578 +#: pg_basebackup.c:593 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s kB (100%%), %d/%d tablespace %*s" msgstr[1] "%*s/%s kB (100%%), %d/%d tablespaces %*s" -#: pg_basebackup.c:590 +#: pg_basebackup.c:605 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" -#: pg_basebackup.c:606 +#: pg_basebackup.c:621 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespaces" -#: pg_basebackup.c:628 +#: pg_basebackup.c:643 #, c-format msgid "%s: transfer rate \"%s\" is not a valid value\n" msgstr "%s: tasa de transferencia «%s» no es un valor válido\n" -#: pg_basebackup.c:635 +#: pg_basebackup.c:650 #, c-format msgid "%s: invalid transfer rate \"%s\": %s\n" msgstr "%s: tasa de transferencia «%s» no válida: %s\n" -#: pg_basebackup.c:645 +#: pg_basebackup.c:660 #, c-format msgid "%s: transfer rate must be greater than zero\n" msgstr "%s: tasa de transferencia debe ser mayor que cero\n" -#: pg_basebackup.c:679 +#: pg_basebackup.c:694 #, c-format msgid "%s: invalid --max-rate unit: \"%s\"\n" msgstr "%s: unidad de --max-rato no válida: «%s»\n" -#: pg_basebackup.c:688 +#: pg_basebackup.c:703 #, c-format msgid "%s: transfer rate \"%s\" exceeds integer range\n" msgstr "%s: la tasa de transferencia «%s» excede el rango de enteros\n" -#: pg_basebackup.c:700 +#: pg_basebackup.c:715 #, c-format msgid "%s: transfer rate \"%s\" is out of range\n" msgstr "%s: la tasa de transferencia «%s» está fuera de rango\n" -#: pg_basebackup.c:724 +#: pg_basebackup.c:739 #, c-format msgid "%s: could not write to compressed file \"%s\": %s\n" msgstr "%s: no se pudo escribir al archivo comprimido «%s»: %s\n" -#: pg_basebackup.c:734 pg_basebackup.c:1340 pg_basebackup.c:1558 +#: pg_basebackup.c:749 pg_basebackup.c:1356 pg_basebackup.c:1574 #, c-format msgid "%s: could not write to file \"%s\": %s\n" msgstr "%s: no se pudo escribir al archivo «%s»: %s\n" -#: pg_basebackup.c:789 pg_basebackup.c:810 pg_basebackup.c:838 +#: pg_basebackup.c:804 pg_basebackup.c:825 pg_basebackup.c:853 #, c-format msgid "%s: could not set compression level %d: %s\n" msgstr "%s: no se pudo definir el nivel de compresión %d: %s\n" -#: pg_basebackup.c:859 +#: pg_basebackup.c:874 #, c-format msgid "%s: could not create compressed file \"%s\": %s\n" msgstr "%s: no se pudo crear el archivo comprimido «%s»: %s\n" -#: pg_basebackup.c:870 pg_basebackup.c:1300 pg_basebackup.c:1551 +#: pg_basebackup.c:885 pg_basebackup.c:1316 pg_basebackup.c:1567 #, c-format msgid "%s: could not create file \"%s\": %s\n" msgstr "%s: no se pudo crear el archivo «%s»: %s\n" -#: pg_basebackup.c:882 pg_basebackup.c:1146 +#: pg_basebackup.c:897 pg_basebackup.c:1161 #, c-format msgid "%s: could not get COPY data stream: %s" msgstr "%s: no se pudo obtener un flujo de datos COPY: %s" -#: pg_basebackup.c:939 +#: pg_basebackup.c:954 #, c-format msgid "%s: could not close compressed file \"%s\": %s\n" msgstr "%s: no se pudo cerrar el archivo comprimido «%s»: %s\n" -#: pg_basebackup.c:952 pg_recvlogical.c:554 receivelog.c:160 receivelog.c:295 -#: receivelog.c:674 +#: pg_basebackup.c:967 pg_recvlogical.c:569 receivelog.c:213 receivelog.c:362 +#: receivelog.c:754 #, c-format msgid "%s: could not close file \"%s\": %s\n" msgstr "%s: no se pudo cerrar el archivo «%s»: %s\n" -#: pg_basebackup.c:963 pg_basebackup.c:1175 pg_recvlogical.c:420 -#: receivelog.c:890 +#: pg_basebackup.c:978 pg_basebackup.c:1190 pg_recvlogical.c:435 +#: receivelog.c:1044 #, c-format msgid "%s: could not read COPY data: %s" msgstr "%s: no fue posible leer datos COPY: %s" -#: pg_basebackup.c:1189 +#: pg_basebackup.c:1204 #, c-format msgid "%s: invalid tar block header size: %d\n" msgstr "%s: tamaño de bloque de cabecera de tar no válido: %d\n" -#: pg_basebackup.c:1197 +#: pg_basebackup.c:1212 #, c-format msgid "%s: could not parse file size\n" msgstr "%s: no se pudo interpretar el tamaño del archivo\n" -#: pg_basebackup.c:1205 +#: pg_basebackup.c:1220 #, c-format msgid "%s: could not parse file mode\n" msgstr "%s: nose pudo interpretar el modo del archivo\n" -#: pg_basebackup.c:1254 +#: pg_basebackup.c:1270 #, c-format msgid "%s: could not set permissions on directory \"%s\": %s\n" msgstr "%s: no se pudo definir los permisos en el directorio «%s»: %s\n" -#: pg_basebackup.c:1278 +#: pg_basebackup.c:1294 #, c-format msgid "%s: could not create symbolic link from \"%s\" to \"%s\": %s\n" msgstr "%s: no se pudo crear un enlace simbólico desde «%s» a «%s»: %s\n" -#: pg_basebackup.c:1287 +#: pg_basebackup.c:1303 #, c-format msgid "%s: unrecognized link indicator \"%c\"\n" msgstr "%s: indicador de enlace «%c» no reconocido\n" -#: pg_basebackup.c:1307 +#: pg_basebackup.c:1323 #, c-format msgid "%s: could not set permissions on file \"%s\": %s\n" msgstr "%s: no se pudo definir los permisos al archivo «%s»: %s\n" -#: pg_basebackup.c:1366 +#: pg_basebackup.c:1382 #, c-format msgid "%s: COPY stream ended before last file was finished\n" msgstr "%s: el flujo COPY terminó antes que el último archivo estuviera completo\n" -#: pg_basebackup.c:1452 pg_basebackup.c:1472 pg_basebackup.c:1479 -#: pg_basebackup.c:1526 +#: pg_basebackup.c:1468 pg_basebackup.c:1488 pg_basebackup.c:1495 +#: pg_basebackup.c:1542 #, c-format msgid "%s: out of memory\n" msgstr "%s: memoria agotada\n" -#: pg_basebackup.c:1603 +#: pg_basebackup.c:1619 #, c-format msgid "%s: incompatible server version %s\n" msgstr "%s: versión del servidor %s incompatible\n" -#: pg_basebackup.c:1630 pg_basebackup.c:1664 pg_receivexlog.c:286 -#: pg_recvlogical.c:255 pg_recvlogical.c:853 pg_recvlogical.c:886 -#: pg_recvlogical.c:921 receivelog.c:470 receivelog.c:521 receivelog.c:561 +#: pg_basebackup.c:1666 pg_recvlogical.c:261 receivelog.c:549 receivelog.c:600 +#: receivelog.c:641 streamutil.c:255 streamutil.c:353 streamutil.c:399 #, c-format msgid "%s: could not send replication command \"%s\": %s" msgstr "%s: no se pudo ejecutar la orden de replicación «%s»: %s" -#: pg_basebackup.c:1637 pg_receivexlog.c:293 pg_recvlogical.c:861 -#: receivelog.c:478 -#, c-format -msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n" -msgstr "%s: no se pudo identificar al sistema: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d o más campos\n" - -#: pg_basebackup.c:1675 +#: pg_basebackup.c:1677 #, c-format msgid "%s: could not initiate base backup: %s" msgstr "%s: no se pudo iniciar el respaldo base: %s" -#: pg_basebackup.c:1682 +#: pg_basebackup.c:1684 #, c-format msgid "%s: server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: el servidor envió una respuesta inesperada a la orden BASE_BACKUP; se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos\n" -#: pg_basebackup.c:1702 +#: pg_basebackup.c:1704 #, c-format msgid "transaction log start point: %s on timeline %u\n" -msgstr "punto de inicio del log de transacciones: %s en el timeline %u\n" +msgstr "punto de inicio del registro transaccional: %s en el timeline %u\n" -#: pg_basebackup.c:1711 +#: pg_basebackup.c:1713 #, c-format msgid "%s: could not get backup header: %s" msgstr "%s: no se pudo obtener la cabecera de respaldo: %s" -#: pg_basebackup.c:1717 +#: pg_basebackup.c:1719 #, c-format msgid "%s: no data returned from server\n" msgstr "%s: el servidor no retornó datos\n" -#: pg_basebackup.c:1749 +#: pg_basebackup.c:1751 #, c-format msgid "%s: can only write single tablespace to stdout, database has %d\n" msgstr "%s: sólo se puede escribir un tablespace a stdout, la base de datos tiene %d\n" -#: pg_basebackup.c:1761 +#: pg_basebackup.c:1763 #, c-format msgid "%s: starting background WAL receiver\n" msgstr "%s: iniciando el receptor de WAL en segundo plano\n" -#: pg_basebackup.c:1792 +#: pg_basebackup.c:1794 #, c-format msgid "%s: could not get transaction log end position from server: %s" -msgstr "%s: no se pudo obtener la posición del final del log de transacciones del servidor: %s" +msgstr "%s: no se pudo obtener la posición final del registro transaccional del servidor: %s" -#: pg_basebackup.c:1799 +#: pg_basebackup.c:1801 #, c-format msgid "%s: no transaction log end position returned from server\n" -msgstr "%s: el servidor no retornó la posición del final del log de transacciones\n" +msgstr "%s: el servidor no retornó la posición final del registro transaccional\n" -#: pg_basebackup.c:1811 +#: pg_basebackup.c:1813 #, c-format msgid "%s: final receive failed: %s" msgstr "%s: la recepción final falló: %s" -#: pg_basebackup.c:1829 +#: pg_basebackup.c:1831 #, c-format msgid "%s: waiting for background process to finish streaming ...\n" msgstr "%s: esperando que el proceso en segundo plano complete el flujo...\n" -#: pg_basebackup.c:1835 +#: pg_basebackup.c:1837 #, c-format msgid "%s: could not send command to background pipe: %s\n" msgstr "%s: no se pudo enviar una orden a la tubería de segundo plano: %s\n" -#: pg_basebackup.c:1844 +#: pg_basebackup.c:1846 #, c-format msgid "%s: could not wait for child process: %s\n" msgstr "%s: no se pudo esperar al proceso hijo: %s\n" -#: pg_basebackup.c:1850 +#: pg_basebackup.c:1852 #, c-format msgid "%s: child %d died, expected %d\n" msgstr "%s: el hijo %d murió, pero se esperaba al %d\n" -#: pg_basebackup.c:1856 +#: pg_basebackup.c:1858 #, c-format msgid "%s: child process did not exit normally\n" msgstr "%s: el proceso hijo no terminó normalmente\n" -#: pg_basebackup.c:1862 +#: pg_basebackup.c:1864 #, c-format msgid "%s: child process exited with error %d\n" msgstr "%s: el proceso hijo terminó con código de salida %d\n" -#: pg_basebackup.c:1889 +#: pg_basebackup.c:1891 #, c-format msgid "%s: could not wait for child thread: %s\n" msgstr "%s: no se pudo esperar el hilo hijo: %s\n" -#: pg_basebackup.c:1896 +#: pg_basebackup.c:1898 #, c-format msgid "%s: could not get child thread exit status: %s\n" msgstr "%s: no se pudo obtener la cabecera de respaldo: %s\n" -#: pg_basebackup.c:1902 +#: pg_basebackup.c:1904 #, c-format msgid "%s: child thread exited with error %u\n" msgstr "%s: el hilo hijo terminó con error %u\n" -#: pg_basebackup.c:1991 +#: pg_basebackup.c:1993 #, c-format msgid "%s: invalid output format \"%s\", must be \"plain\" or \"tar\"\n" msgstr "%s: formato de salida «%s» no válido, debe ser «plain» o «tar»\n" -#: pg_basebackup.c:2009 pg_basebackup.c:2021 +#: pg_basebackup.c:2011 pg_basebackup.c:2023 #, c-format msgid "%s: cannot specify both --xlog and --xlog-method\n" msgstr "%s: no se puede tanto --xlog como --xlog-method\n" -#: pg_basebackup.c:2036 +#: pg_basebackup.c:2038 #, c-format msgid "%s: invalid xlog-method option \"%s\", must be \"fetch\" or \"stream\"\n" msgstr "%s: opción de xlog-method «%s» no válida, debe ser «fetch» o «stream»\n" -#: pg_basebackup.c:2058 +#: pg_basebackup.c:2060 #, c-format msgid "%s: invalid compression level \"%s\"\n" msgstr "%s: valor de compresión «%s» no válido\n" -#: pg_basebackup.c:2070 +#: pg_basebackup.c:2072 #, c-format msgid "%s: invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"\n" msgstr "%s: argumento de checkpoint «%s» no válido, debe ser «fast» o «spread»\n" -#: pg_basebackup.c:2097 pg_receivexlog.c:428 pg_recvlogical.c:736 +#: pg_basebackup.c:2099 pg_receivexlog.c:439 pg_recvlogical.c:752 #, c-format msgid "%s: invalid status interval \"%s\"\n" msgstr "%s: intervalo de estado «%s» no válido\n" -#: pg_basebackup.c:2113 pg_basebackup.c:2127 pg_basebackup.c:2138 -#: pg_basebackup.c:2151 pg_basebackup.c:2161 pg_basebackup.c:2173 -#: pg_basebackup.c:2184 pg_receivexlog.c:447 pg_receivexlog.c:461 -#: pg_receivexlog.c:472 pg_recvlogical.c:760 pg_recvlogical.c:774 -#: pg_recvlogical.c:785 pg_recvlogical.c:793 pg_recvlogical.c:801 -#: pg_recvlogical.c:809 pg_recvlogical.c:817 pg_recvlogical.c:825 +#: pg_basebackup.c:2115 pg_basebackup.c:2129 pg_basebackup.c:2140 +#: pg_basebackup.c:2153 pg_basebackup.c:2163 pg_basebackup.c:2175 +#: pg_basebackup.c:2186 pg_receivexlog.c:471 pg_receivexlog.c:485 +#: pg_receivexlog.c:493 pg_receivexlog.c:503 pg_receivexlog.c:514 +#: pg_recvlogical.c:779 pg_recvlogical.c:793 pg_recvlogical.c:804 +#: pg_recvlogical.c:812 pg_recvlogical.c:820 pg_recvlogical.c:828 +#: pg_recvlogical.c:836 pg_recvlogical.c:844 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Use «%s --help» para obtener más información.\n" -#: pg_basebackup.c:2125 pg_receivexlog.c:459 pg_recvlogical.c:772 +#: pg_basebackup.c:2127 pg_receivexlog.c:483 pg_recvlogical.c:791 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: demasiados argumentos en la línea de órdenes (el primero es «%s»)\n" -#: pg_basebackup.c:2137 pg_receivexlog.c:471 +#: pg_basebackup.c:2139 pg_receivexlog.c:513 #, c-format msgid "%s: no target directory specified\n" msgstr "%s: no se especificó un directorio de salida\n" -#: pg_basebackup.c:2149 +#: pg_basebackup.c:2151 #, c-format msgid "%s: only tar mode backups can be compressed\n" msgstr "%s: sólo los respaldos de modo tar pueden ser comprimidos\n" -#: pg_basebackup.c:2159 +#: pg_basebackup.c:2161 #, c-format msgid "%s: WAL streaming can only be used in plain mode\n" msgstr "%s: el flujo de WAL sólo puede usar en modo «plain»\n" -#: pg_basebackup.c:2171 +#: pg_basebackup.c:2173 #, c-format msgid "%s: transaction log directory location can only be specified in plain mode\n" -msgstr "%s: la ubicación del directorio de log de transacciones sólo puede especificarse en modo «plain»\n" +msgstr "%s: la ubicación del registro transaccional sólo puede especificarse en modo «plain»\n" -#: pg_basebackup.c:2182 +#: pg_basebackup.c:2184 #, c-format msgid "%s: transaction log directory location must be an absolute path\n" -msgstr "%s: la ubicación del directorio del log de transacciones debe ser una ruta absoluta\n" +msgstr "%s: la ubicación del registro transaccional debe ser una ruta absoluta\n" -#: pg_basebackup.c:2194 +#: pg_basebackup.c:2196 #, c-format msgid "%s: this build does not support compression\n" msgstr "%s: esta instalación no soporta compresión\n" -#: pg_basebackup.c:2221 +#: pg_basebackup.c:2223 #, c-format msgid "%s: could not create symbolic link \"%s\": %s\n" msgstr "%s: no se pudo crear el enlace simbólico «%s»: %s\n" -#: pg_basebackup.c:2226 +#: pg_basebackup.c:2228 #, c-format msgid "%s: symlinks are not supported on this platform\n" msgstr "%s: los enlaces simbólicos no están soportados en esta plataforma\n" -#: pg_receivexlog.c:58 +#: pg_receivexlog.c:64 #, c-format msgid "" "%s receives PostgreSQL streaming transaction logs.\n" "\n" msgstr "" -"%s recibe flujos de logs de transacción PostgreSQL.\n" +"%s recibe flujos del registro transaccional de PostgreSQL.\n" "\n" -#: pg_receivexlog.c:62 pg_recvlogical.c:73 +#: pg_receivexlog.c:68 pg_recvlogical.c:75 #, c-format msgid "" "\n" @@ -655,17 +649,22 @@ msgstr "" "\n" "Opciones:\n" -#: pg_receivexlog.c:63 +#: pg_receivexlog.c:69 #, c-format msgid " -D, --directory=DIR receive transaction log files into this directory\n" msgstr " -D, --directory=DIR recibe los archivos de transacción a este directorio\n" -#: pg_receivexlog.c:64 pg_recvlogical.c:78 +#: pg_receivexlog.c:70 pg_recvlogical.c:79 +#, c-format +msgid " --if-not-exists do not error if slot already exists when creating a slot\n" +msgstr " --if-not-exists no abandonar si el slot ya existe al crear un slot\n" + +#: pg_receivexlog.c:71 pg_recvlogical.c:81 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop no entrar en bucle al perder la conexión\n" -#: pg_receivexlog.c:65 pg_recvlogical.c:83 +#: pg_receivexlog.c:72 pg_recvlogical.c:86 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -675,83 +674,134 @@ msgstr "" " tiempo entre envíos de paquetes de estado al servidor\n" " (por omisión: %d)\n" -#: pg_receivexlog.c:67 +#: pg_receivexlog.c:74 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" +msgstr " -S, --slot=NOMBRE slot de replicación a usar\n" + +#: pg_receivexlog.c:75 +#, c-format +msgid " --synchronous flush transaction log immediately after writing\n" +msgstr "" +" --synchronous sincroniza el registro transaccional inmediatamente\n" +" después de escribir\n" + +#: pg_receivexlog.c:86 +#, c-format +msgid "" +"\n" +"Optional actions:\n" msgstr "" -" -S, --slot=NOMBRE slot de replicación a usar\n" +"\n" +"Acciones optativas:\n" + +#: pg_receivexlog.c:87 pg_recvlogical.c:72 +#, c-format +msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" +msgstr " --create-slot crea un nuevo slot de replicación (para el nombre, vea --slot)\n" -#: pg_receivexlog.c:89 +#: pg_receivexlog.c:88 pg_recvlogical.c:73 +#, c-format +msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" +msgstr " --drop-slot elimina un slot de replicación (para el nombre, vea --slot)\n" + +#: pg_receivexlog.c:100 #, c-format msgid "%s: finished segment at %X/%X (timeline %u)\n" msgstr "%s: terminó el segmento en %X/%X (timeline %u)\n" -#: pg_receivexlog.c:102 +#: pg_receivexlog.c:113 #, c-format msgid "%s: switched to timeline %u at %X/%X\n" msgstr "%s: cambiado al timeline %u en %X/%X\n" -#: pg_receivexlog.c:111 +#: pg_receivexlog.c:122 #, c-format msgid "%s: received interrupt signal, exiting\n" msgstr "%s: se recibió una señal de interrupción, saliendo\n" -#: pg_receivexlog.c:137 +#: pg_receivexlog.c:142 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: no se pudo abrir el directorio «%s»: %s\n" -#: pg_receivexlog.c:187 +#: pg_receivexlog.c:160 +#, c-format +msgid "%s: could not close directory \"%s\": %s\n" +msgstr "%s: no se pudo cerrar el directorio «%s»: %s\n" + +#: pg_receivexlog.c:218 pg_recvlogical.c:343 #, c-format msgid "%s: could not stat file \"%s\": %s\n" msgstr "%s: no se pudo hacer stat del archivo «%s»: %s\n" -#: pg_receivexlog.c:195 +#: pg_receivexlog.c:226 #, c-format msgid "%s: segment file \"%s\" has incorrect size %d, skipping\n" msgstr "%s: el archivo de segmento «%s» tiene tamaño incorrecto %d, ignorando\n" -#: pg_receivexlog.c:214 +#: pg_receivexlog.c:245 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: no se pudo leer el directorio «%s»: %s\n" -#: pg_receivexlog.c:221 -#, c-format -msgid "%s: could not close directory \"%s\": %s\n" -msgstr "%s: no se pudo cerrar el directorio «%s»: %s\n" - -#: pg_receivexlog.c:328 +#: pg_receivexlog.c:331 #, c-format msgid "%s: starting log streaming at %X/%X (timeline %u)\n" msgstr "%s: iniciando el flujo de log en %X/%X (timeline %u)\n" -#: pg_receivexlog.c:409 pg_recvlogical.c:683 +#: pg_receivexlog.c:420 pg_recvlogical.c:699 #, c-format msgid "%s: invalid port number \"%s\"\n" msgstr "%s: número de puerto «%s» no válido\n" -#: pg_receivexlog.c:494 pg_recvlogical.c:964 +#: pg_receivexlog.c:492 +#, c-format +msgid "%s: cannot use --create-slot together with --drop-slot\n" +msgstr "%s: no puede usarse --create-slot junto con --drop-slot\n" + +#. translator: second %s is an option name +#: pg_receivexlog.c:501 +#, c-format +msgid "%s: %s needs a slot to be specified using --slot\n" +msgstr "%s: la opcón %s necesita que se especifique un slot con --slot\n" + +#: pg_receivexlog.c:556 +#, c-format +msgid "%s: replication connection using slot \"%s\" is unexpectedly database specific\n" +msgstr "%s: la conexión de replicación usando el slot «%s» es inesperadamente específica a una base de datos\n" + +#: pg_receivexlog.c:568 pg_recvlogical.c:884 +#, c-format +msgid "%s: dropping replication slot \"%s\"\n" +msgstr "%s: eliminando el slot de replicación «%s»\n" + +#: pg_receivexlog.c:581 pg_recvlogical.c:896 +#, c-format +msgid "%s: creating replication slot \"%s\"\n" +msgstr "%s: creando el slot de replicación «%s»\n" + +#: pg_receivexlog.c:608 pg_recvlogical.c:922 #, c-format msgid "%s: disconnected\n" msgstr "%s: desconectado\n" #. translator: check source for value for %d -#: pg_receivexlog.c:501 pg_recvlogical.c:971 +#: pg_receivexlog.c:615 pg_recvlogical.c:929 #, c-format msgid "%s: disconnected; waiting %d seconds to try again\n" msgstr "%s: desconectado; esperando %d segundos para intentar nuevamente\n" -#: pg_recvlogical.c:65 +#: pg_recvlogical.c:67 #, c-format msgid "" -"%s receives PostgreSQL logical change streams.\n" +"%s controls PostgreSQL logical decoding streams.\n" "\n" msgstr "" -"%s recibe flujos de cambios lógicos de PostgreSQL.\n" +"%s controla flujos de decodificación lógica de PostgreSQL.\n" "\n" -#: pg_recvlogical.c:69 +#: pg_recvlogical.c:71 #, c-format msgid "" "\n" @@ -760,31 +810,17 @@ msgstr "" "\n" "Acciones a ejecutar:\n" -#: pg_recvlogical.c:70 -#, c-format -msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" -msgstr "" -" --create-slot crea un nuevo slot de replicación (para el nombre, vea --slot)\n" - -#: pg_recvlogical.c:71 -#, c-format -msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" -msgstr "" -" --drop-slot elimina un slot de replicación (para el nombre, vea --slot)\n" - -#: pg_recvlogical.c:72 +#: pg_recvlogical.c:74 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" -msgstr "" -" --start inicie flujo en un slot de replicación (para el nombre, vea --slot)\n" +msgstr " --start inicie flujo en un slot de replicación (para el nombre, vea --slot)\n" -#: pg_recvlogical.c:74 +#: pg_recvlogical.c:76 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" -msgstr "" -" -f, --file=ARCHIVO recibe el log en este archivo, - para stdout\n" +msgstr " -f, --file=ARCHIVO recibe el log en este archivo, - para stdout\n" -#: pg_recvlogical.c:75 +#: pg_recvlogical.c:77 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -793,12 +829,12 @@ msgstr "" " -F, --fsync-interval=SEGS\n" " tiempo entre fsyncs del archivo de salida (omisión: %d)\n" -#: pg_recvlogical.c:77 +#: pg_recvlogical.c:80 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr " -I, --startpos=LSN dónde en un slot existente debe empezar el flujo\n" -#: pg_recvlogical.c:79 +#: pg_recvlogical.c:82 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -809,302 +845,313 @@ msgstr "" " pasar opción NOMBRE con valor opcional VALOR al\n" " plugin de salida\n" -#: pg_recvlogical.c:82 +#: pg_recvlogical.c:85 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN use plugin de salida PLUGIN (omisión: %s)\n" -#: pg_recvlogical.c:85 +#: pg_recvlogical.c:88 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" -msgstr "" -" -S, --slot=NOMBRE-SLOT nombre del slot de replicación lógica\n" +msgstr " -S, --slot=NOMBRE-SLOT nombre del slot de replicación lógica\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:93 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=BASE base de datos a la cual conectarse\n" -#: pg_recvlogical.c:123 +#: pg_recvlogical.c:126 #, c-format msgid "%s: confirming write up to %X/%X, flush to %X/%X (slot %s)\n" msgstr "%s: confirmando escritura hasta %X/%X, fsync hasta %X/%X (slot %s)\n" -#: pg_recvlogical.c:148 receivelog.c:340 +#: pg_recvlogical.c:151 receivelog.c:415 #, c-format msgid "%s: could not send feedback packet: %s" msgstr "%s: no se pudo enviar el paquete de retroalimentación: %s" -#: pg_recvlogical.c:184 +#: pg_recvlogical.c:190 #, c-format msgid "%s: could not fsync log file \"%s\": %s\n" msgstr "%s: no se pudo sincronizar (fsync) el archivo de registro «%s»: %s\n" -#: pg_recvlogical.c:223 +#: pg_recvlogical.c:229 #, c-format msgid "%s: starting log streaming at %X/%X (slot %s)\n" msgstr "%s: iniciando el flujo de log en %X/%X (slot %s)\n" -#: pg_recvlogical.c:265 +#: pg_recvlogical.c:271 #, c-format msgid "%s: streaming initiated\n" msgstr "%s: flujo iniciado\n" -#: pg_recvlogical.c:328 +#: pg_recvlogical.c:336 #, c-format msgid "%s: could not open log file \"%s\": %s\n" msgstr "%s: no se pudo abrir archivo de log «%s»: %s\n" -#: pg_recvlogical.c:397 receivelog.c:837 +#: pg_recvlogical.c:412 receivelog.c:980 #, c-format msgid "%s: select() failed: %s\n" msgstr "%s: select() falló: %s\n" -#: pg_recvlogical.c:406 receivelog.c:845 +#: pg_recvlogical.c:421 receivelog.c:1030 #, c-format msgid "%s: could not receive data from WAL stream: %s" msgstr "%s: no se pudo recibir datos desde el flujo de WAL: %s" -#: pg_recvlogical.c:447 pg_recvlogical.c:486 receivelog.c:912 receivelog.c:966 +#: pg_recvlogical.c:462 pg_recvlogical.c:501 receivelog.c:1075 +#: receivelog.c:1144 #, c-format msgid "%s: streaming header too small: %d\n" msgstr "%s: cabecera de flujo demasiado pequeña: %d\n" -#: pg_recvlogical.c:469 receivelog.c:1072 +#: pg_recvlogical.c:484 receivelog.c:924 #, c-format msgid "%s: unrecognized streaming header: \"%c\"\n" msgstr "%s: cabecera de flujo no reconocida: «%c»\n" -#: pg_recvlogical.c:515 pg_recvlogical.c:529 +#: pg_recvlogical.c:530 pg_recvlogical.c:544 #, c-format msgid "%s: could not write %u bytes to log file \"%s\": %s\n" msgstr "%s: no se pudo escribir %u bytes al archivo de registro «%s»: %s\n" -#: pg_recvlogical.c:540 receivelog.c:627 receivelog.c:665 +#: pg_recvlogical.c:555 receivelog.c:707 receivelog.c:745 #, c-format msgid "%s: unexpected termination of replication stream: %s" msgstr "%s: término inesperado del flujo de replicación: %s" -#: pg_recvlogical.c:662 +#: pg_recvlogical.c:678 #, c-format msgid "%s: invalid fsync interval \"%s\"\n" msgstr "%s: intervalo de fsync «%s» no válido\n" -#: pg_recvlogical.c:703 +#: pg_recvlogical.c:719 #, c-format msgid "%s: could not parse start position \"%s\"\n" msgstr "%s: no se pudo interpretar la posición de inicio «%s»\n" -#: pg_recvlogical.c:784 +#: pg_recvlogical.c:803 #, c-format msgid "%s: no slot specified\n" msgstr "%s: no se especificó slot\n" -#: pg_recvlogical.c:792 +#: pg_recvlogical.c:811 #, c-format msgid "%s: no target file specified\n" msgstr "%s: no se especificó un archivo de destino\n" -#: pg_recvlogical.c:800 +#: pg_recvlogical.c:819 #, c-format msgid "%s: no database specified\n" msgstr "%s: no se especificó una base de datos\n" -#: pg_recvlogical.c:808 +#: pg_recvlogical.c:827 #, c-format msgid "%s: at least one action needs to be specified\n" msgstr "%s: debe especificarse al menos una operación\n" -#: pg_recvlogical.c:816 +#: pg_recvlogical.c:835 #, c-format msgid "%s: cannot use --create-slot or --start together with --drop-slot\n" -msgstr "%s: no puede usarse --create-slow o --start junto con --drop-slot\n" +msgstr "%s: no puede usarse --create-slot o --start junto con --drop-slot\n" -#: pg_recvlogical.c:824 +#: pg_recvlogical.c:843 #, c-format msgid "%s: cannot use --create-slot or --drop-slot together with --startpos\n" -msgstr "%s: no puede usarse --create-slot o --drop-slow junto con --startpos\n" +msgstr "%s: no puede usarse --create-slot o --drop-slot junto con --startpos\n" -#: pg_recvlogical.c:878 +#: pg_recvlogical.c:874 #, c-format -msgid "%s: dropping replication slot \"%s\"\n" -msgstr "%s: eliminando el slot de replicación «%s»\n" +msgid "%s: could not establish database-specific replication connection\n" +msgstr "%s: no se pudo establecer una conexión de replicación específica a una base de datos\n" -#: pg_recvlogical.c:894 +#: receivelog.c:75 #, c-format -msgid "%s: could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" -msgstr "%s: no se pudo eliminar el slot de replicación «%s»: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos\n" +msgid "%s: could not create archive status file \"%s\": %s\n" +msgstr "%s: no se pudo crear el archivo de estado «%s»: %s\n" -#: pg_recvlogical.c:912 +#: receivelog.c:82 receivelog.c:206 receivelog.c:355 receivelog.c:848 +#: receivelog.c:1096 #, c-format -msgid "%s: creating replication slot \"%s\"\n" -msgstr "%s: creando el slot de replicación «%s»\n" - -#: pg_recvlogical.c:929 -#, c-format -msgid "%s: could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" -msgstr "%s: no se pudo create el slot de replicación «%s»: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos\n" +msgid "%s: could not fsync file \"%s\": %s\n" +msgstr "%s: no se pudo sincronizar (fsync) el archivo «%s»: %s\n" -#: receivelog.c:68 +#: receivelog.c:121 #, c-format msgid "%s: could not open transaction log file \"%s\": %s\n" msgstr "%s: no se pudo abrir el archivo de transacción «%s»: %s\n" -#: receivelog.c:80 +#: receivelog.c:133 #, c-format msgid "%s: could not stat transaction log file \"%s\": %s\n" msgstr "%s: no se pudo hacer stat del archivo de transacción «%s»: %s\n" -#: receivelog.c:94 +#: receivelog.c:147 #, c-format msgid "%s: transaction log file \"%s\" has %d bytes, should be 0 or %d\n" msgstr "%s: el archivo de transacción «%s» mide %d bytes, debería ser 0 o %d\n" -#: receivelog.c:107 +#: receivelog.c:160 #, c-format msgid "%s: could not pad transaction log file \"%s\": %s\n" msgstr "%s: no se pudo rellenar (pad) el archivo de transacción «%s»: %s\n" -#: receivelog.c:120 +#: receivelog.c:173 #, c-format msgid "%s: could not seek to beginning of transaction log file \"%s\": %s\n" -msgstr "%s: no se pudo posicionar (seek) hacia el inicio del archivo de transacción «%s»: %s\n" +msgstr "%s: no se pudo posicionar (seek) al inicio del archivo de transacción «%s»: %s\n" -#: receivelog.c:146 +#: receivelog.c:199 #, c-format msgid "%s: could not determine seek position in file \"%s\": %s\n" msgstr "%s: no se pudo determinar la posición (seek) en el archivo «%s»: %s\n" -#: receivelog.c:153 receivelog.c:288 receivelog.c:933 -#, c-format -msgid "%s: could not fsync file \"%s\": %s\n" -msgstr "%s: no se pudo sincronizar (fsync) el archivo «%s»: %s\n" - -#: receivelog.c:179 +#: receivelog.c:232 #, c-format msgid "%s: could not rename file \"%s\": %s\n" msgstr "%s: no se pudo cambiar el nombre al archivo «%s»: %s\n" -#: receivelog.c:186 +#: receivelog.c:239 #, c-format msgid "%s: not renaming \"%s%s\", segment is not complete\n" msgstr "%s: no se cambiará el nombre a «%s%s», el segmento no está completo\n" -#: receivelog.c:219 +#: receivelog.c:285 #, c-format msgid "%s: could not open timeline history file \"%s\": %s\n" msgstr "%s: no se pudo abrir el archivo de historia de timeline «%s»: %s\n" -#: receivelog.c:246 +#: receivelog.c:313 #, c-format msgid "%s: server reported unexpected history file name for timeline %u: %s\n" msgstr "%s: el servidor reportó un nombre inesperado para el archivo de historia de timeline %u: %s\n" -#: receivelog.c:263 +#: receivelog.c:330 #, c-format msgid "%s: could not create timeline history file \"%s\": %s\n" msgstr "%s: no se pudo crear el archivo de historia de timeline «%s»: %s\n" -#: receivelog.c:280 +#: receivelog.c:347 #, c-format msgid "%s: could not write timeline history file \"%s\": %s\n" msgstr "%s: no se pudo escribir al archivo de historia de timeline «%s»: %s\n" -#: receivelog.c:305 +#: receivelog.c:372 #, c-format msgid "%s: could not rename file \"%s\" to \"%s\": %s\n" msgstr "%s: no se pudo cambiar el nombre al archivo «%s» a «%s»: %s\n" -#: receivelog.c:374 +#: receivelog.c:449 #, c-format msgid "%s: incompatible server version %s; client does not support streaming from server versions older than %s\n" msgstr "%s: versión de servidor %s incompatible; el cliente no soporta flujos de servidores anteriores a la versión %s\n" -#: receivelog.c:384 +#: receivelog.c:459 #, c-format msgid "%s: incompatible server version %s; client does not support streaming from server versions newer than %s\n" msgstr "%s: versión de servidor %s incompatible; el cliente no soporta flujos de servidores posteriores a %s\n" -#: receivelog.c:486 +#: receivelog.c:557 streamutil.c:264 streamutil.c:299 +#, c-format +msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n" +msgstr "%s: no se pudo identificar al sistema: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d o más campos\n" + +#: receivelog.c:565 #, c-format msgid "%s: system identifier does not match between base backup and streaming connection\n" msgstr "%s: el identificador de sistema no coincide entre el respaldo base y la conexión de flujo\n" -#: receivelog.c:494 +#: receivelog.c:573 #, c-format msgid "%s: starting timeline %u is not present in the server\n" msgstr "%s: el timeline de inicio %u no está presente en el servidor\n" -#: receivelog.c:534 +#: receivelog.c:613 #, c-format msgid "%s: unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: respuesta inesperada a la orden TIMELINE_HISTORY: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos\n" -#: receivelog.c:608 +#: receivelog.c:688 #, c-format msgid "%s: server reported unexpected next timeline %u, following timeline %u\n" msgstr "%s: el servidor reportó un timeline siguiente %u inesperado, a continuación del timeline %u\n" -#: receivelog.c:615 +#: receivelog.c:695 #, c-format msgid "%s: server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X\n" msgstr "%s: el servidor paró la transmisión del timeline %u en %X/%X, pero reportó que el siguiente timeline %u comienza en %X/%X\n" -#: receivelog.c:656 +#: receivelog.c:736 #, c-format msgid "%s: replication stream was terminated before stop point\n" msgstr "%s: el flujo de replicación terminó antes del punto de término\n" -#: receivelog.c:705 +#: receivelog.c:785 #, c-format msgid "%s: unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: respuesta inesperada después del fin-de-timeline: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos\n" -#: receivelog.c:715 +#: receivelog.c:795 #, c-format msgid "%s: could not parse next timeline's starting point \"%s\"\n" msgstr "%s: no se pudo interpretar el punto de inicio del siguiente timeline «%s»\n" -#: receivelog.c:770 receivelog.c:873 receivelog.c:1059 +#: receivelog.c:959 #, c-format -msgid "%s: could not send copy-end packet: %s" -msgstr "%s: no se pudo enviar el paquete copy-end: %s" +msgid "%s: socket not open" +msgstr "%s: socket no abierto" -#: receivelog.c:985 +#: receivelog.c:1163 #, c-format msgid "%s: received transaction log record for offset %u with no file open\n" msgstr "%s: se recibió un registro transaccional para el desplazamiento %u sin ningún archivo abierto\n" -#: receivelog.c:997 +#: receivelog.c:1175 #, c-format msgid "%s: got WAL data offset %08x, expected %08x\n" msgstr "%s: se obtuvo desplazamiento de datos WAL %08x, se esperaba %08x\n" -#: receivelog.c:1034 +#: receivelog.c:1212 #, c-format msgid "%s: could not write %u bytes to WAL file \"%s\": %s\n" msgstr "%s: no se pudo escribir %u bytes al archivo WAL «%s»: %s\n" -#: streamutil.c:142 +#: receivelog.c:1237 receivelog.c:1279 receivelog.c:1311 +#, c-format +msgid "%s: could not send copy-end packet: %s" +msgstr "%s: no se pudo enviar el paquete copy-end: %s" + +#: streamutil.c:145 msgid "Password: " msgstr "Contraseña: " -#: streamutil.c:166 +#: streamutil.c:169 #, c-format msgid "%s: could not connect to server\n" msgstr "%s: no se pudo conectar al servidor\n" -#: streamutil.c:184 +#: streamutil.c:187 #, c-format -msgid "%s: could not connect to server: %s\n" -msgstr "%s: no se pudo conectar al servidor: %s\n" +msgid "%s: could not connect to server: %s" +msgstr "%s: no se pudo conectar al servidor: %s" -#: streamutil.c:208 +#: streamutil.c:211 #, c-format msgid "%s: could not determine server setting for integer_datetimes\n" msgstr "%s: no se pudo determinar la opción integer_datetimes del servidor\n" -#: streamutil.c:221 +#: streamutil.c:224 #, c-format msgid "%s: integer_datetimes compile flag does not match server\n" msgstr "%s: la opción de compilación integer_datetimes no coincide con el servidor\n" + +#: streamutil.c:365 +#, c-format +msgid "%s: could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" +msgstr "%s: no se pudo create el slot de replicación «%s»: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos\n" + +#: streamutil.c:410 +#, c-format +msgid "%s: could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" +msgstr "%s: no se pudo eliminar el slot de replicación «%s»: se obtuvieron %d filas y %d campos, se esperaban %d filas y %d campos\n" diff --git a/src/bin/pg_basebackup/po/it.po b/src/bin/pg_basebackup/po/it.po index 1b137df699186..83356397a5618 100644 --- a/src/bin/pg_basebackup/po/it.po +++ b/src/bin/pg_basebackup/po/it.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_basebackup (PostgreSQL) 9.4\n" +"Project-Id-Version: pg_basebackup (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-11-12 21:12+0000\n" -"PO-Revision-Date: 2014-11-13 13:36+0100\n" +"POT-Creation-Date: 2015-08-15 18:43+0000\n" +"PO-Revision-Date: 2015-08-16 09:58+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -18,43 +18,43 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Poedit 1.5.4\n" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "memoria esaurita\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "impossibile duplicare il puntatore nullo (errore interno)\n" -#: pg_basebackup.c:153 +#: pg_basebackup.c:154 #, c-format msgid "%s: directory name too long\n" msgstr "%s: nome directory troppo lungo\n" -#: pg_basebackup.c:163 +#: pg_basebackup.c:164 #, c-format msgid "%s: multiple \"=\" signs in tablespace mapping\n" msgstr "%s: più di un segno \"=\" nella mappatura dei tablespace\n" -#: pg_basebackup.c:176 +#: pg_basebackup.c:177 #, c-format msgid "%s: invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"\n" msgstr "%s: formato di mappatura dei tablespace \"%s\" non valido, deve essere \"VECCHIADIR=NUOVADIR\"\n" -#: pg_basebackup.c:189 +#: pg_basebackup.c:190 #, c-format msgid "%s: old directory is not an absolute path in tablespace mapping: %s\n" msgstr "%s: la vecchia directory non è un percorso assoluto nella mappatura dei tablespace: %s\n" -#: pg_basebackup.c:196 +#: pg_basebackup.c:197 #, c-format msgid "%s: new directory is not an absolute path in tablespace mapping: %s\n" msgstr "%s: la nuova directory non è un percorso assoluto nella mappatura dei tablespace: %s\n" -#: pg_basebackup.c:227 +#: pg_basebackup.c:231 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -63,17 +63,17 @@ msgstr "" "%s crea un backup di base di un server PostgreSQL in esecuzione.\n" "\n" -#: pg_basebackup.c:229 pg_receivexlog.c:60 pg_recvlogical.c:67 +#: pg_basebackup.c:233 pg_receivexlog.c:66 pg_recvlogical.c:69 #, c-format msgid "Usage:\n" msgstr "Utilizzo:\n" -#: pg_basebackup.c:230 pg_receivexlog.c:61 pg_recvlogical.c:68 +#: pg_basebackup.c:234 pg_receivexlog.c:67 pg_recvlogical.c:70 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPZIONE]...\n" -#: pg_basebackup.c:231 +#: pg_basebackup.c:235 #, c-format msgid "" "\n" @@ -82,17 +82,17 @@ msgstr "" "\n" "Opzioni di controllo del'output:\n" -#: pg_basebackup.c:232 +#: pg_basebackup.c:236 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=DIRECTORY directory in cui ricevere il backup di base\n" -#: pg_basebackup.c:233 +#: pg_basebackup.c:237 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t formato di output (plain (default), tar)\n" -#: pg_basebackup.c:234 +#: pg_basebackup.c:238 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -101,7 +101,7 @@ msgstr "" " -r, --max-rate=RATE transfer rate massimo per trasferire la directory dei dati\n" " (in kB/s, oppure usa i suffissi \"k\" o \"M\")\n" -#: pg_basebackup.c:236 +#: pg_basebackup.c:240 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -110,7 +110,12 @@ msgstr "" " -R, --write-recovery-conf\n" " scrivi recovery.conf dopo il backup\n" -#: pg_basebackup.c:238 +#: pg_basebackup.c:242 pg_receivexlog.c:74 +#, c-format +msgid " -S, --slot=SLOTNAME replication slot to use\n" +msgstr " -S, --slot=NOMESLOT slot di replicazione da usare\n" + +#: pg_basebackup.c:243 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -119,14 +124,14 @@ msgstr "" " -T, --tablespace-mapping=VECCHIADIR=NUOVADIR\n" " sposta il tablespace da VECCHIADIR a NUOVADIR\n" -#: pg_basebackup.c:240 +#: pg_basebackup.c:245 #, c-format msgid " -x, --xlog include required WAL files in backup (fetch mode)\n" msgstr "" " -x, --xlog includi i file WAL necessari nel backup\n" " (modalità fetch)\n" -#: pg_basebackup.c:241 +#: pg_basebackup.c:246 #, c-format msgid "" " -X, --xlog-method=fetch|stream\n" @@ -135,22 +140,22 @@ msgstr "" " -X, --xlog-method=fetch|stream\n" " includi i file WAL richiesti col metodo specificato\n" -#: pg_basebackup.c:243 +#: pg_basebackup.c:248 #, c-format msgid " --xlogdir=XLOGDIR location for the transaction log directory\n" msgstr " --xlogdir=XLOGDIR posizione per la directory del log delle transazioni\n" -#: pg_basebackup.c:244 +#: pg_basebackup.c:249 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip comprimi l'output tar\n" -#: pg_basebackup.c:245 +#: pg_basebackup.c:250 #, c-format msgid " -Z, --compress=0-9 compress tar output with given compression level\n" msgstr " -Z, --compress=0-9 comprimi l'output tar a questo livello di compressione\n" -#: pg_basebackup.c:246 +#: pg_basebackup.c:251 #, c-format msgid "" "\n" @@ -159,7 +164,7 @@ msgstr "" "\n" "Opzioni generali:\n" -#: pg_basebackup.c:247 +#: pg_basebackup.c:252 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" @@ -168,32 +173,32 @@ msgstr "" " -c, --checkpoint=fast|spread\n" " imposta punti di controllo più veloci o più radi\n" -#: pg_basebackup.c:249 +#: pg_basebackup.c:254 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=LABEL imposta l'etichetta del backup\n" -#: pg_basebackup.c:250 +#: pg_basebackup.c:255 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress mostra informazioni sull'esecuzione\n" -#: pg_basebackup.c:251 pg_receivexlog.c:68 pg_recvlogical.c:86 +#: pg_basebackup.c:256 pg_receivexlog.c:76 pg_recvlogical.c:89 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose messaggi di output più numerosi\n" -#: pg_basebackup.c:252 pg_receivexlog.c:69 pg_recvlogical.c:87 +#: pg_basebackup.c:257 pg_receivexlog.c:77 pg_recvlogical.c:90 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informazioni sulla versione ed esci\n" -#: pg_basebackup.c:253 pg_receivexlog.c:70 pg_recvlogical.c:88 +#: pg_basebackup.c:258 pg_receivexlog.c:78 pg_recvlogical.c:91 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra questo aiuto ed esci\n" -#: pg_basebackup.c:254 pg_receivexlog.c:71 pg_recvlogical.c:89 +#: pg_basebackup.c:259 pg_receivexlog.c:79 pg_recvlogical.c:92 #, c-format msgid "" "\n" @@ -202,22 +207,22 @@ msgstr "" "\n" "Opzioni di connessione:\n" -#: pg_basebackup.c:255 pg_receivexlog.c:72 +#: pg_basebackup.c:260 pg_receivexlog.c:80 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=CONNSTR stringa di connessione\n" -#: pg_basebackup.c:256 pg_receivexlog.c:73 pg_recvlogical.c:91 +#: pg_basebackup.c:261 pg_receivexlog.c:81 pg_recvlogical.c:94 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME host del server database o directory del socket\n" -#: pg_basebackup.c:257 pg_receivexlog.c:74 pg_recvlogical.c:92 +#: pg_basebackup.c:262 pg_receivexlog.c:82 pg_recvlogical.c:95 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT numero di porta del server database\n" -#: pg_basebackup.c:258 +#: pg_basebackup.c:263 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -227,24 +232,24 @@ msgstr "" " intervallo tra i pacchetti di stato inviati al server\n" " (in secondi)\n" -#: pg_basebackup.c:260 pg_receivexlog.c:75 pg_recvlogical.c:93 +#: pg_basebackup.c:265 pg_receivexlog.c:83 pg_recvlogical.c:96 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME connettiti al database col nome utente specificato\n" -#: pg_basebackup.c:261 pg_receivexlog.c:76 pg_recvlogical.c:94 +#: pg_basebackup.c:266 pg_receivexlog.c:84 pg_recvlogical.c:97 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password non chiedere mai la password\n" -#: pg_basebackup.c:262 pg_receivexlog.c:77 pg_recvlogical.c:95 +#: pg_basebackup.c:267 pg_receivexlog.c:85 pg_recvlogical.c:98 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password forza la richiesta della password\n" " (dovrebbe essere automatico)\n" -#: pg_basebackup.c:263 pg_receivexlog.c:78 pg_recvlogical.c:96 +#: pg_basebackup.c:268 pg_receivexlog.c:89 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -253,390 +258,389 @@ msgstr "" "\n" "Puoi segnalare eventuali bug a .\n" -#: pg_basebackup.c:306 +#: pg_basebackup.c:311 #, c-format msgid "%s: could not read from ready pipe: %s\n" msgstr "%s: lettura dalla pipe pronta fallita: %s\n" -#: pg_basebackup.c:314 pg_basebackup.c:406 pg_basebackup.c:1877 -#: pg_receivexlog.c:301 pg_recvlogical.c:937 +#: pg_basebackup.c:319 pg_basebackup.c:412 pg_basebackup.c:1887 +#: streamutil.c:285 #, c-format msgid "%s: could not parse transaction log location \"%s\"\n" msgstr "%s: interpretazione della posizione del log delle transazioni \"%s\" fallita\n" -#: pg_basebackup.c:419 +#: pg_basebackup.c:425 #, c-format msgid "%s: could not create pipe for background process: %s\n" msgstr "%s: creazione della pipe per il processo in background fallita: %s\n" -#: pg_basebackup.c:452 +#: pg_basebackup.c:450 pg_basebackup.c:505 pg_basebackup.c:1263 +#, c-format +msgid "%s: could not create directory \"%s\": %s\n" +msgstr "%s: creazione della directory \"%s\" fallita: %s\n" + +#: pg_basebackup.c:468 #, c-format msgid "%s: could not create background process: %s\n" msgstr "%s: creazione del processo in background fallita: %s\n" -#: pg_basebackup.c:464 +#: pg_basebackup.c:480 #, c-format msgid "%s: could not create background thread: %s\n" msgstr "%s: creazione del thread in background fallita: %s\n" -#: pg_basebackup.c:489 pg_basebackup.c:1246 -#, c-format -msgid "%s: could not create directory \"%s\": %s\n" -msgstr "%s: creazione della directory \"%s\" fallita: %s\n" - -#: pg_basebackup.c:508 +#: pg_basebackup.c:524 #, c-format msgid "%s: directory \"%s\" exists but is not empty\n" msgstr "%s: la directory \"%s\" esiste ma non è vuota\n" -#: pg_basebackup.c:516 +#: pg_basebackup.c:532 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: accesso alla directory \"%s\" fallito: %s\n" -#: pg_basebackup.c:578 +#: pg_basebackup.c:594 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s kB (100%%), %d/%d tablespace %*s" msgstr[1] "%*s/%s kB (100%%), %d/%d tablespace %*s" -#: pg_basebackup.c:590 +#: pg_basebackup.c:606 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" -#: pg_basebackup.c:606 +#: pg_basebackup.c:622 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespace" -#: pg_basebackup.c:628 +#: pg_basebackup.c:644 #, c-format msgid "%s: transfer rate \"%s\" is not a valid value\n" msgstr "%s: il transfer rate \"%s\" non è un valore valido\n" -#: pg_basebackup.c:635 +#: pg_basebackup.c:651 #, c-format msgid "%s: invalid transfer rate \"%s\": %s\n" msgstr "%s: transfer rate non valido \"%s\": %s\n" -#: pg_basebackup.c:645 +#: pg_basebackup.c:661 #, c-format msgid "%s: transfer rate must be greater than zero\n" msgstr "%s: il transfer rate deve essere maggiore di zero\n" -#: pg_basebackup.c:679 +#: pg_basebackup.c:695 #, c-format msgid "%s: invalid --max-rate unit: \"%s\"\n" msgstr "%s: unità --max-rate non valida: \"%s\"\n" -#: pg_basebackup.c:688 +#: pg_basebackup.c:704 #, c-format msgid "%s: transfer rate \"%s\" exceeds integer range\n" msgstr "%s: il transfer rate \"%s\" eccede l'intervallo degli interi\n" -#: pg_basebackup.c:700 +#: pg_basebackup.c:716 #, c-format msgid "%s: transfer rate \"%s\" is out of range\n" msgstr "%s: il transfer rate \"%s\" è fuori dall'intervallo consentito\n" -#: pg_basebackup.c:724 +#: pg_basebackup.c:740 #, c-format msgid "%s: could not write to compressed file \"%s\": %s\n" msgstr "%s: scrittura nel file compresso \"%s\" fallita: %s\n" -#: pg_basebackup.c:734 pg_basebackup.c:1340 pg_basebackup.c:1558 +#: pg_basebackup.c:750 pg_basebackup.c:1357 pg_basebackup.c:1582 #, c-format msgid "%s: could not write to file \"%s\": %s\n" msgstr "%s: scrittura nel file \"%s\" fallita: %s\n" -#: pg_basebackup.c:789 pg_basebackup.c:810 pg_basebackup.c:838 +#: pg_basebackup.c:805 pg_basebackup.c:826 pg_basebackup.c:854 #, c-format msgid "%s: could not set compression level %d: %s\n" msgstr "%s: impostazione del livello di compressione %d fallito: %s\n" -#: pg_basebackup.c:859 +#: pg_basebackup.c:875 #, c-format msgid "%s: could not create compressed file \"%s\": %s\n" msgstr "%s: creazione del file compresso \"%s\" fallita: %s\n" -#: pg_basebackup.c:870 pg_basebackup.c:1300 pg_basebackup.c:1551 +#: pg_basebackup.c:886 pg_basebackup.c:1317 pg_basebackup.c:1575 #, c-format msgid "%s: could not create file \"%s\": %s\n" msgstr "%s: creazione del file \"%s\" fallita: %s\n" -#: pg_basebackup.c:882 pg_basebackup.c:1146 +#: pg_basebackup.c:898 pg_basebackup.c:1162 #, c-format msgid "%s: could not get COPY data stream: %s" msgstr "%s: non è stato possibile ottenere lo stream di dati COPY: %s" -#: pg_basebackup.c:939 +#: pg_basebackup.c:955 #, c-format msgid "%s: could not close compressed file \"%s\": %s\n" msgstr "%s: chiusura del file compresso \"%s\" fallita: %s\n" -#: pg_basebackup.c:952 pg_recvlogical.c:554 receivelog.c:160 receivelog.c:295 -#: receivelog.c:674 +#: pg_basebackup.c:968 pg_recvlogical.c:569 receivelog.c:213 receivelog.c:362 +#: receivelog.c:754 #, c-format msgid "%s: could not close file \"%s\": %s\n" msgstr "%s: chiusura del file \"%s\" fallita: %s\n" -#: pg_basebackup.c:963 pg_basebackup.c:1175 pg_recvlogical.c:420 -#: receivelog.c:890 +#: pg_basebackup.c:979 pg_basebackup.c:1191 pg_recvlogical.c:435 +#: receivelog.c:1044 #, c-format msgid "%s: could not read COPY data: %s" msgstr "%s: lettura dei dati COPY fallita: %s" -#: pg_basebackup.c:1189 +#: pg_basebackup.c:1205 #, c-format msgid "%s: invalid tar block header size: %d\n" msgstr "%s: dimensione del blocco di intestazione del file tar non valida: %d\n" -#: pg_basebackup.c:1197 +#: pg_basebackup.c:1213 #, c-format msgid "%s: could not parse file size\n" msgstr "%s: interpretazione della dimensione del file fallita\n" -#: pg_basebackup.c:1205 +#: pg_basebackup.c:1221 #, c-format msgid "%s: could not parse file mode\n" msgstr "%s: interpretazione della modalità del file fallita\n" -#: pg_basebackup.c:1254 +#: pg_basebackup.c:1271 #, c-format msgid "%s: could not set permissions on directory \"%s\": %s\n" msgstr "%s: impostazione dei permessi sulla directory \"%s\" fallita: %s\n" -#: pg_basebackup.c:1278 +#: pg_basebackup.c:1295 #, c-format msgid "%s: could not create symbolic link from \"%s\" to \"%s\": %s\n" msgstr "%s: creazione del link simbolico da \"%s\" a \"%s\" fallita: %s\n" -#: pg_basebackup.c:1287 +#: pg_basebackup.c:1304 #, c-format msgid "%s: unrecognized link indicator \"%c\"\n" msgstr "%s: indicatore di link sconosciuto \"%c\"\n" -#: pg_basebackup.c:1307 +#: pg_basebackup.c:1324 #, c-format msgid "%s: could not set permissions on file \"%s\": %s\n" msgstr "%s: impostazione dei permessi sul file \"%s\" fallita: %s\n" -#: pg_basebackup.c:1366 +#: pg_basebackup.c:1383 #, c-format msgid "%s: COPY stream ended before last file was finished\n" msgstr "%s: lo stream COPY è terminato prima che l'ultimo file fosse finito\n" -#: pg_basebackup.c:1452 pg_basebackup.c:1472 pg_basebackup.c:1479 -#: pg_basebackup.c:1526 +#: pg_basebackup.c:1469 pg_basebackup.c:1489 pg_basebackup.c:1496 +#: pg_basebackup.c:1550 #, c-format msgid "%s: out of memory\n" msgstr "%s: memoria esaurita\n" -#: pg_basebackup.c:1603 +#: pg_basebackup.c:1627 #, c-format msgid "%s: incompatible server version %s\n" msgstr "%s: versione del server incompatibile %s\n" -#: pg_basebackup.c:1630 pg_basebackup.c:1664 pg_receivexlog.c:286 -#: pg_recvlogical.c:255 pg_recvlogical.c:853 pg_recvlogical.c:886 -#: pg_recvlogical.c:921 receivelog.c:470 receivelog.c:521 receivelog.c:561 +#: pg_basebackup.c:1674 pg_recvlogical.c:261 receivelog.c:549 receivelog.c:600 +#: receivelog.c:641 streamutil.c:255 streamutil.c:353 streamutil.c:399 #, c-format msgid "%s: could not send replication command \"%s\": %s" msgstr "%s: invio del comando di replica \"%s\" fallito: %s" -#: pg_basebackup.c:1637 pg_receivexlog.c:293 pg_recvlogical.c:861 -#: receivelog.c:478 -#, c-format -msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n" -msgstr "%s: identificazione del sistema fallita: ricevute %d righe e %d campi, attese %d righe e %d campi o più\n" - -#: pg_basebackup.c:1675 +#: pg_basebackup.c:1685 #, c-format msgid "%s: could not initiate base backup: %s" msgstr "%s: avvio del backup di base fallito: %s" -#: pg_basebackup.c:1682 +#: pg_basebackup.c:1692 #, c-format msgid "%s: server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: il server ha restituito una risposta imprevista al comando BASE_BACKUP; ricevute %d righe e %d campi, attese %d righe e %d campi\n" -#: pg_basebackup.c:1702 +#: pg_basebackup.c:1712 #, c-format msgid "transaction log start point: %s on timeline %u\n" msgstr "punto di avvio log delle transazioni: %s sulla timeline %u\n" -#: pg_basebackup.c:1711 +#: pg_basebackup.c:1721 #, c-format msgid "%s: could not get backup header: %s" msgstr "%s: non è stato possibile ottenere l'intestazione del backup: %s" -#: pg_basebackup.c:1717 +#: pg_basebackup.c:1727 #, c-format msgid "%s: no data returned from server\n" msgstr "%s: nessun dato restituito dal server\n" -#: pg_basebackup.c:1749 +#: pg_basebackup.c:1759 #, c-format msgid "%s: can only write single tablespace to stdout, database has %d\n" msgstr "%s: è possibile scrivere solo un singolo tablespace su stdout, il database ne ha %d\n" -#: pg_basebackup.c:1761 +#: pg_basebackup.c:1771 #, c-format msgid "%s: starting background WAL receiver\n" msgstr "%s: avvio del ricevitore dei WAL in background\n" -#: pg_basebackup.c:1792 +#: pg_basebackup.c:1802 #, c-format msgid "%s: could not get transaction log end position from server: %s" msgstr "%s: non è stato possibile ottenere la posizione finale del log delle transazioni dal server: %s" -#: pg_basebackup.c:1799 +#: pg_basebackup.c:1809 #, c-format msgid "%s: no transaction log end position returned from server\n" msgstr "%s: nessuna posizione finale del log delle transazioni restituita dal server\n" -#: pg_basebackup.c:1811 +#: pg_basebackup.c:1821 #, c-format msgid "%s: final receive failed: %s" msgstr "%s: ricezione finale fallita: %s" -#: pg_basebackup.c:1829 +#: pg_basebackup.c:1839 #, c-format msgid "%s: waiting for background process to finish streaming ...\n" msgstr "%s: in attesa che il processo in background finisca lo streaming ...\n" -#: pg_basebackup.c:1835 +#: pg_basebackup.c:1845 #, c-format msgid "%s: could not send command to background pipe: %s\n" msgstr "%s invio del comando alla pipe di background fallita: %s\n" -#: pg_basebackup.c:1844 +#: pg_basebackup.c:1854 #, c-format msgid "%s: could not wait for child process: %s\n" msgstr "%s: errore nell'attesa del processo figlio: %s\n" -#: pg_basebackup.c:1850 +#: pg_basebackup.c:1860 #, c-format msgid "%s: child %d died, expected %d\n" msgstr "%s: il processo figlio %d interrotto, atteso %d\n" -#: pg_basebackup.c:1856 +#: pg_basebackup.c:1866 #, c-format msgid "%s: child process did not exit normally\n" msgstr "%s: il processo figlio non è terminato normalmente\n" -#: pg_basebackup.c:1862 +#: pg_basebackup.c:1872 #, c-format msgid "%s: child process exited with error %d\n" msgstr "%s: il processo figlio è terminato con errore %d\n" -#: pg_basebackup.c:1889 +#: pg_basebackup.c:1899 #, c-format msgid "%s: could not wait for child thread: %s\n" msgstr "%s: errore nell'attesa del thread figlio: %s\n" -#: pg_basebackup.c:1896 +#: pg_basebackup.c:1906 #, c-format msgid "%s: could not get child thread exit status: %s\n" msgstr "%s: non è stato possibile ottenere il codice di uscita del thread figlio: %s\n" -#: pg_basebackup.c:1902 +#: pg_basebackup.c:1912 #, c-format msgid "%s: child thread exited with error %u\n" msgstr "%s: il thread figlio è terminato con errore %u\n" -#: pg_basebackup.c:1991 +#: pg_basebackup.c:2002 #, c-format msgid "%s: invalid output format \"%s\", must be \"plain\" or \"tar\"\n" msgstr "%s: formato di output \"%s\" non valido, deve essere \"plain\" oppure \"tar\"\n" -#: pg_basebackup.c:2009 pg_basebackup.c:2021 +#: pg_basebackup.c:2023 pg_basebackup.c:2035 #, c-format msgid "%s: cannot specify both --xlog and --xlog-method\n" msgstr "%s: non è possibile specificare sia --xlog che --xlog-method\n" -#: pg_basebackup.c:2036 +#: pg_basebackup.c:2050 #, c-format msgid "%s: invalid xlog-method option \"%s\", must be \"fetch\" or \"stream\"\n" msgstr "%s: opzione xlog-method \"%s\" non valida, deve essere \"fetch\" oppure \"stream\"\n" -#: pg_basebackup.c:2058 +#: pg_basebackup.c:2072 #, c-format msgid "%s: invalid compression level \"%s\"\n" msgstr "%s: livello di compressione non valido \"%s\"\n" -#: pg_basebackup.c:2070 +#: pg_basebackup.c:2084 #, c-format msgid "%s: invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"\n" msgstr "%s: argomento di checkpoint \"%s\" non valido, deve essere \"fast\" oppure \"spread\"\n" -#: pg_basebackup.c:2097 pg_receivexlog.c:428 pg_recvlogical.c:736 +#: pg_basebackup.c:2111 pg_receivexlog.c:439 pg_recvlogical.c:752 #, c-format msgid "%s: invalid status interval \"%s\"\n" msgstr "%s: intervallo di status \"%s\" non valido\n" -#: pg_basebackup.c:2113 pg_basebackup.c:2127 pg_basebackup.c:2138 -#: pg_basebackup.c:2151 pg_basebackup.c:2161 pg_basebackup.c:2173 -#: pg_basebackup.c:2184 pg_receivexlog.c:447 pg_receivexlog.c:461 -#: pg_receivexlog.c:472 pg_recvlogical.c:760 pg_recvlogical.c:774 -#: pg_recvlogical.c:785 pg_recvlogical.c:793 pg_recvlogical.c:801 -#: pg_recvlogical.c:809 pg_recvlogical.c:817 pg_recvlogical.c:825 +#: pg_basebackup.c:2127 pg_basebackup.c:2141 pg_basebackup.c:2152 +#: pg_basebackup.c:2165 pg_basebackup.c:2175 pg_basebackup.c:2185 +#: pg_basebackup.c:2197 pg_basebackup.c:2208 pg_receivexlog.c:471 +#: pg_receivexlog.c:485 pg_receivexlog.c:493 pg_receivexlog.c:503 +#: pg_receivexlog.c:514 pg_recvlogical.c:779 pg_recvlogical.c:793 +#: pg_recvlogical.c:804 pg_recvlogical.c:812 pg_recvlogical.c:820 +#: pg_recvlogical.c:828 pg_recvlogical.c:836 pg_recvlogical.c:844 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Prova \"%s --help\" per maggiori informazioni.\n" -#: pg_basebackup.c:2125 pg_receivexlog.c:459 pg_recvlogical.c:772 +#: pg_basebackup.c:2139 pg_receivexlog.c:483 pg_recvlogical.c:791 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: troppi argomenti nella riga di comando (il primo è \"%s\")\n" -#: pg_basebackup.c:2137 pg_receivexlog.c:471 +#: pg_basebackup.c:2151 pg_receivexlog.c:513 #, c-format msgid "%s: no target directory specified\n" msgstr "%s: nessuna directory di destinazione specificata\n" -#: pg_basebackup.c:2149 +#: pg_basebackup.c:2163 #, c-format msgid "%s: only tar mode backups can be compressed\n" msgstr "%s: solo i backup in modalità tar possono essere compressi\n" -#: pg_basebackup.c:2159 +#: pg_basebackup.c:2173 #, c-format msgid "%s: WAL streaming can only be used in plain mode\n" msgstr "%s: lo streaming WAL può essere usato solo in modalità plain\n" -#: pg_basebackup.c:2171 +#: pg_basebackup.c:2183 +#, c-format +msgid "%s: replication slots can only be used with WAL streaming\n" +msgstr "%s: gli slot di replica possono essere usati solo con lo streaming WAL\n" + +#: pg_basebackup.c:2195 #, c-format msgid "%s: transaction log directory location can only be specified in plain mode\n" msgstr "%s: la posizione della directory del log delle transazioni può essere specificata solo in modalità plain\n" -#: pg_basebackup.c:2182 +#: pg_basebackup.c:2206 #, c-format msgid "%s: transaction log directory location must be an absolute path\n" msgstr "%s: la posizione della directory del log delle transazioni deve essere un percorso assoluto\n" -#: pg_basebackup.c:2194 +#: pg_basebackup.c:2218 #, c-format msgid "%s: this build does not support compression\n" msgstr "%s: questo binario compilato non supporta la compressione\n" -#: pg_basebackup.c:2221 +#: pg_basebackup.c:2245 #, c-format msgid "%s: could not create symbolic link \"%s\": %s\n" msgstr "%s: creazione del link simbolico \"%s\" fallita: %s\n" -#: pg_basebackup.c:2226 +#: pg_basebackup.c:2250 #, c-format -msgid "%s: symlinks are not supported on this platform" -msgstr "%s: i link simbolici non sono supportati su questa piattaforma" +msgid "%s: symlinks are not supported on this platform\n" +msgstr "%s: questa piattaforma non supporta i link simbolici\n" -#: pg_receivexlog.c:58 +#: pg_receivexlog.c:64 #, c-format msgid "" "%s receives PostgreSQL streaming transaction logs.\n" @@ -645,7 +649,7 @@ msgstr "" "%s riceve lo stream del log delle transazioni di PostgreSQL.\n" "\n" -#: pg_receivexlog.c:62 pg_recvlogical.c:73 +#: pg_receivexlog.c:68 pg_recvlogical.c:75 #, c-format msgid "" "\n" @@ -654,17 +658,24 @@ msgstr "" "\n" "Opzioni:\n" -#: pg_receivexlog.c:63 +#: pg_receivexlog.c:69 #, c-format msgid " -D, --directory=DIR receive transaction log files into this directory\n" msgstr " -D, --directory=DIR ricevi i file di log delle transazioni in questa directory\n" -#: pg_receivexlog.c:64 pg_recvlogical.c:78 +#: pg_receivexlog.c:70 pg_recvlogical.c:79 +#, c-format +msgid " --if-not-exists do not treat naming conflicts as an error when creating a slot\n" +msgstr "" +" --if-not-exists non considerare i conflitti di nome come errori nella creazione\n" +" di uno slot\n" + +#: pg_receivexlog.c:71 pg_recvlogical.c:81 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop non ri-eseguire se la connessione è persa\n" -#: pg_receivexlog.c:65 pg_recvlogical.c:83 +#: pg_receivexlog.c:72 pg_recvlogical.c:86 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -674,82 +685,127 @@ msgstr "" " tempo tra gli invii dei pacchetti di stato al server\n" " (default: %d)\n" -#: pg_receivexlog.c:67 +#: pg_receivexlog.c:75 #, c-format -msgid " -S, --slot=SLOTNAME replication slot to use\n" -msgstr " -S, --slot=NOMESLOT slot di replicazione da usare\n" +msgid " --synchronous flush transaction log immediately after writing\n" +msgstr " --synchronous esegui il flush del log delle transazioni subito dopo aver scritto\n" + +#: pg_receivexlog.c:86 +#, c-format +msgid "" +"\n" +"Optional actions:\n" +msgstr "" +"\n" +"Azioni opzionali:\n" -#: pg_receivexlog.c:89 +#: pg_receivexlog.c:87 pg_recvlogical.c:72 +#, c-format +msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" +msgstr " --create-slot crea un nuovo slot di replica (per il nome vedi --slot)\n" + +#: pg_receivexlog.c:88 pg_recvlogical.c:73 +#, c-format +msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" +msgstr " --drop-slot elimina lo slot di replica (per il nome vedi --slot)\n" + +#: pg_receivexlog.c:100 #, c-format msgid "%s: finished segment at %X/%X (timeline %u)\n" msgstr "%s: terminato segmento a %X/%X (timeline %u)\n" -#: pg_receivexlog.c:102 +#: pg_receivexlog.c:113 #, c-format msgid "%s: switched to timeline %u at %X/%X\n" msgstr "%s: passato alla timeline %u a %X/%X\n" -#: pg_receivexlog.c:111 +#: pg_receivexlog.c:122 #, c-format msgid "%s: received interrupt signal, exiting\n" msgstr "%s: ricevuto segnale di interruzione, in uscita\n" -#: pg_receivexlog.c:137 +#: pg_receivexlog.c:142 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: apertura della directory \"%s\" fallita: %s\n" -#: pg_receivexlog.c:187 +#: pg_receivexlog.c:160 +#, c-format +msgid "%s: could not close directory \"%s\": %s\n" +msgstr "%s: chiusura della directory \"%s\" fallita: %s\n" + +#: pg_receivexlog.c:218 pg_recvlogical.c:343 #, c-format msgid "%s: could not stat file \"%s\": %s\n" msgstr "%s: non è stato possibile ottenere informazioni sul file \"%s\": %s\n" -#: pg_receivexlog.c:195 +#: pg_receivexlog.c:226 #, c-format msgid "%s: segment file \"%s\" has incorrect size %d, skipping\n" msgstr "%s: il file di segmento \"%s\" ha la dimensione non corretta %d, saltato\n" -#: pg_receivexlog.c:214 +#: pg_receivexlog.c:245 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: lettura della directory \"%s\" fallita: %s\n" -#: pg_receivexlog.c:221 -#, c-format -msgid "%s: could not close directory \"%s\": %s\n" -msgstr "%s: chiusura della directory \"%s\" fallita: %s\n" - -#: pg_receivexlog.c:328 +#: pg_receivexlog.c:331 #, c-format msgid "%s: starting log streaming at %X/%X (timeline %u)\n" msgstr "%s: avvio dello streaming dei log a %X/%X (timeline %u)\n" -#: pg_receivexlog.c:409 pg_recvlogical.c:683 +#: pg_receivexlog.c:420 pg_recvlogical.c:699 #, c-format msgid "%s: invalid port number \"%s\"\n" msgstr "%s: numero di porta non valido \"%s\"\n" -#: pg_receivexlog.c:494 pg_recvlogical.c:964 +#: pg_receivexlog.c:492 +#, c-format +msgid "%s: cannot use --create-slot together with --drop-slot\n" +msgstr "%s: non è possibile usare --create-slot insieme a --drop-slot\n" + +#. translator: second %s is an option name +#: pg_receivexlog.c:501 +#, c-format +msgid "%s: %s needs a slot to be specified using --slot\n" +msgstr "%s: %s richiede la specifica di uno slot usando --slot\n" + +#: pg_receivexlog.c:556 +#, c-format +msgid "%s: replication connection using slot \"%s\" is unexpectedly database specific\n" +msgstr "%s: la replica di connessione usando lo slot \"%s\" è inaspettatamente specifica per il database\n" + +#: pg_receivexlog.c:568 pg_recvlogical.c:884 +#, c-format +msgid "%s: dropping replication slot \"%s\"\n" +msgstr "%s: eliminazione dello slot di replica \"%s\"\n" + +#: pg_receivexlog.c:581 pg_recvlogical.c:896 +#, c-format +msgid "%s: creating replication slot \"%s\"\n" +msgstr "%s: creazione dello slot di replica \"%s\"\n" + +#: pg_receivexlog.c:608 pg_recvlogical.c:922 #, c-format msgid "%s: disconnected\n" msgstr "%s: disconnesso\n" #. translator: check source for value for %d -#: pg_receivexlog.c:501 pg_recvlogical.c:971 +#: pg_receivexlog.c:615 pg_recvlogical.c:929 #, c-format msgid "%s: disconnected; waiting %d seconds to try again\n" msgstr "%s: disconnesso; aspetterò %d secondi prima di riprovare\n" -#: pg_recvlogical.c:65 +#: pg_recvlogical.c:67 #, c-format msgid "" -"%s receives PostgreSQL logical change streams.\n" +"%s controls PostgreSQL logical decoding streams.\n" "\n" msgstr "" -"%s riceve stream di modifiche logiche PostgreSQL.\n" +"%s controlla i flussi di decodifica logica di PostgreSQ.\n" "\n" -#: pg_recvlogical.c:69 +#: pg_recvlogical.c:71 #, c-format msgid "" "\n" @@ -758,27 +814,17 @@ msgstr "" "\n" "Azioni da effettuare:\n" -#: pg_recvlogical.c:70 -#, c-format -msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" -msgstr " --create-slot crea un nuovo slot di replica (per il nome vedi --slot)\n" - -#: pg_recvlogical.c:71 -#, c-format -msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" -msgstr " --drop-slot elimina lo slot di replica (per il nome vedi --slot)\n" - -#: pg_recvlogical.c:72 +#: pg_recvlogical.c:74 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" msgstr " --start avvia lo streaming in uno slot di replica (per il nome vedi --slot)\n" -#: pg_recvlogical.c:74 +#: pg_recvlogical.c:76 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=FILE riceve i log in questo file, - per stdout\n" -#: pg_recvlogical.c:75 +#: pg_recvlogical.c:77 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -787,12 +833,12 @@ msgstr "" " -F --fsync-interval=SEC\n" " tempo tra i sync del file di output (default: %d)\n" -#: pg_recvlogical.c:77 +#: pg_recvlogical.c:80 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr " -I, --startpos=LSN dove deve partire lo streaming in uno slot esistente\n" -#: pg_recvlogical.c:79 +#: pg_recvlogical.c:82 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -803,301 +849,313 @@ msgstr "" " passa l'opzione NOME col valore opzionale VALORE\n" " al plugin di output\n" -#: pg_recvlogical.c:82 +#: pg_recvlogical.c:85 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN usa il plugin di output PLUGIN (default: %s)\n" -#: pg_recvlogical.c:85 +#: pg_recvlogical.c:88 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=NOMESLOT nome dello slot di replica logica\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:93 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=NOMEDB database a cui connettersi\n" -#: pg_recvlogical.c:123 +#: pg_recvlogical.c:126 #, c-format msgid "%s: confirming write up to %X/%X, flush to %X/%X (slot %s)\n" msgstr "%s: scritture confermate fino a %X/%X, flush a %X/%X (slot %s)\n" -#: pg_recvlogical.c:148 receivelog.c:340 +#: pg_recvlogical.c:151 receivelog.c:415 #, c-format msgid "%s: could not send feedback packet: %s" msgstr "%s: invio del pacchetto di feedback fallito: %s" -#: pg_recvlogical.c:184 +#: pg_recvlogical.c:190 #, c-format msgid "%s: could not fsync log file \"%s\": %s\n" msgstr "%s: fsync del file di log \"%s\" fallito: %s\n" -#: pg_recvlogical.c:223 +#: pg_recvlogical.c:229 #, c-format msgid "%s: starting log streaming at %X/%X (slot %s)\n" msgstr "%s: inizio dello streaming dei log a %X/%X (slot %s)\n" -#: pg_recvlogical.c:265 +#: pg_recvlogical.c:271 #, c-format msgid "%s: streaming initiated\n" msgstr "%s: streaming iniziato\n" -#: pg_recvlogical.c:328 +#: pg_recvlogical.c:336 #, c-format msgid "%s: could not open log file \"%s\": %s\n" msgstr "%s: apertura del file di log \"%s\" fallita: %s\n" -#: pg_recvlogical.c:397 receivelog.c:837 +#: pg_recvlogical.c:412 receivelog.c:980 #, c-format msgid "%s: select() failed: %s\n" msgstr "%s: select() fallita: %s\n" -#: pg_recvlogical.c:406 receivelog.c:845 +#: pg_recvlogical.c:421 receivelog.c:1030 #, c-format msgid "%s: could not receive data from WAL stream: %s" msgstr "%s: ricezione dati dallo stream WAL fallita: %s" -#: pg_recvlogical.c:447 pg_recvlogical.c:486 receivelog.c:912 receivelog.c:947 +#: pg_recvlogical.c:462 pg_recvlogical.c:501 receivelog.c:1075 +#: receivelog.c:1144 #, c-format msgid "%s: streaming header too small: %d\n" msgstr "%s: intestazione dello streaming troppo piccola: %d\n" -#: pg_recvlogical.c:469 receivelog.c:1053 +#: pg_recvlogical.c:484 receivelog.c:924 #, c-format msgid "%s: unrecognized streaming header: \"%c\"\n" msgstr "%s: intestazione dello streaming sconosciuta: \"%c\"\n" -#: pg_recvlogical.c:515 pg_recvlogical.c:529 +#: pg_recvlogical.c:530 pg_recvlogical.c:544 #, c-format msgid "%s: could not write %u bytes to log file \"%s\": %s\n" msgstr "%s: scrittura di %u byte nel file di log \"%s\" fallita: %s\n" -#: pg_recvlogical.c:540 receivelog.c:627 receivelog.c:665 +#: pg_recvlogical.c:555 receivelog.c:707 receivelog.c:745 #, c-format msgid "%s: unexpected termination of replication stream: %s" msgstr "%s: terminazione inaspettata dello stream di replica: %s" -#: pg_recvlogical.c:662 +#: pg_recvlogical.c:678 #, c-format msgid "%s: invalid fsync interval \"%s\"\n" msgstr "%s: intervallo di fsync \"%s\" non valido\n" -#: pg_recvlogical.c:703 +#: pg_recvlogical.c:719 #, c-format msgid "%s: could not parse start position \"%s\"\n" msgstr "%s: interpretazione della posizione di inizio \"%s\" fallita\n" -#: pg_recvlogical.c:784 +#: pg_recvlogical.c:803 #, c-format msgid "%s: no slot specified\n" msgstr "%s: slot non specificato\n" -#: pg_recvlogical.c:792 +#: pg_recvlogical.c:811 #, c-format msgid "%s: no target file specified\n" msgstr "%s: file di destinazione non specificato\n" -#: pg_recvlogical.c:800 +#: pg_recvlogical.c:819 #, c-format msgid "%s: no database specified\n" msgstr "%s: database non specificato\n" -#: pg_recvlogical.c:808 +#: pg_recvlogical.c:827 #, c-format msgid "%s: at least one action needs to be specified\n" msgstr "%s: occorre specificare almeno una azione\n" -#: pg_recvlogical.c:816 +#: pg_recvlogical.c:835 #, c-format msgid "%s: cannot use --create-slot or --start together with --drop-slot\n" msgstr "%s: --create-slot o --start non possono essere usate con --drop-slot\n" -#: pg_recvlogical.c:824 +#: pg_recvlogical.c:843 #, c-format msgid "%s: cannot use --create-slot or --drop-slot together with --startpos\n" msgstr "%s: --create-slot o --drop-slot non possono essere usate con --startpos\n" -#: pg_recvlogical.c:878 -#, c-format -msgid "%s: dropping replication slot \"%s\"\n" -msgstr "%s: eliminazione dello slot di replica \"%s\"\n" - -#: pg_recvlogical.c:894 +#: pg_recvlogical.c:874 #, c-format -msgid "%s: could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" -msgstr "%s: eliminazione dello slot di replica \"%s\" fallita: ricevute %d righe e %d campi, attesi %d righe e %d campi\n" +msgid "%s: could not establish database-specific replication connection\n" +msgstr "%s: connessione di replica specifica per il database fallita\n" -#: pg_recvlogical.c:912 +#: receivelog.c:75 #, c-format -msgid "%s: creating replication slot \"%s\"\n" -msgstr "%s: creazione dello slot di replica \"%s\"\n" +msgid "%s: could not create archive status file \"%s\": %s\n" +msgstr "%s: creazione del file di stato dell'archivio \"%s\" fallita: %s\n" -#: pg_recvlogical.c:929 +#: receivelog.c:82 receivelog.c:206 receivelog.c:355 receivelog.c:848 +#: receivelog.c:1096 #, c-format -msgid "%s: could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" -msgstr "%s: creazione dello slot di replica \"%s\" fallita: ricevute %d righe e %d campi, attesi %d righe e %d campi\n" +msgid "%s: could not fsync file \"%s\": %s\n" +msgstr "%s: fsync del file \"%s\" fallito: %s\n" -#: receivelog.c:68 +#: receivelog.c:121 #, c-format msgid "%s: could not open transaction log file \"%s\": %s\n" msgstr "%s: apertura del file di log delle transazioni \"%s\" fallita: %s\n" -#: receivelog.c:80 +#: receivelog.c:133 #, c-format msgid "%s: could not stat transaction log file \"%s\": %s\n" msgstr "%s: non è stato possibile ottenere informazioni sul file di log delle transazioni \"%s\": %s\n" -#: receivelog.c:94 +#: receivelog.c:147 #, c-format msgid "%s: transaction log file \"%s\" has %d bytes, should be 0 or %d\n" msgstr "%s: il file di log delle transazioni \"%s\" ha %d byte, dovrebbero essere 0 or %d\n" -#: receivelog.c:107 +#: receivelog.c:160 #, c-format msgid "%s: could not pad transaction log file \"%s\": %s\n" msgstr "%s: correzione della lunghezza del file di log delle transazioni \"%s\" fallita: %s\n" -#: receivelog.c:120 +#: receivelog.c:173 #, c-format msgid "%s: could not seek to beginning of transaction log file \"%s\": %s\n" msgstr "%s: spostamento all'inizio del file di log delle transazioni \"%s\" fallito: %s\n" -#: receivelog.c:146 +#: receivelog.c:199 #, c-format msgid "%s: could not determine seek position in file \"%s\": %s\n" msgstr "%s: determinazione della posizione dove muoversi nel file \"%s\" fallita: %s\n" -#: receivelog.c:153 receivelog.c:288 -#, c-format -msgid "%s: could not fsync file \"%s\": %s\n" -msgstr "%s: fsync del file \"%s\" fallito: %s\n" - -#: receivelog.c:179 +#: receivelog.c:232 #, c-format msgid "%s: could not rename file \"%s\": %s\n" msgstr "%s: non è stato possibile rinominare il file \"%s\": %s\n" -#: receivelog.c:186 +#: receivelog.c:239 #, c-format msgid "%s: not renaming \"%s%s\", segment is not complete\n" msgstr "%s: \"%s%s\" non rinominato, il segmento non è completo\n" -#: receivelog.c:219 +#: receivelog.c:285 #, c-format msgid "%s: could not open timeline history file \"%s\": %s\n" msgstr "%s: apertura del file della storia della timeline \"%s\" fallita: %s\n" -#: receivelog.c:246 +#: receivelog.c:313 #, c-format msgid "%s: server reported unexpected history file name for timeline %u: %s\n" msgstr "%s: il server ha riportato un nome di file della storia imprevisto per la timeline %u: %s\n" -#: receivelog.c:263 +#: receivelog.c:330 #, c-format msgid "%s: could not create timeline history file \"%s\": %s\n" msgstr "%s: creazione del file di storia della timeline \"%s\" fallita: %s\n" -#: receivelog.c:280 +#: receivelog.c:347 #, c-format msgid "%s: could not write timeline history file \"%s\": %s\n" msgstr "%s: scrittura del file di storia della timeline \"%s\" fallita: %s\n" -#: receivelog.c:305 +#: receivelog.c:372 #, c-format msgid "%s: could not rename file \"%s\" to \"%s\": %s\n" msgstr "%s: non è stato possibile rinominare il file di storia della timeline \"%s\" in \"%s\": %s\n" -#: receivelog.c:374 +#: receivelog.c:449 #, c-format msgid "%s: incompatible server version %s; client does not support streaming from server versions older than %s\n" msgstr "%s: server di versione %s non compatibile; il client non supporta lo streaming da server di versione precedente a %s\n" -#: receivelog.c:384 +#: receivelog.c:459 #, c-format msgid "%s: incompatible server version %s; client does not support streaming from server versions newer than %s\n" msgstr "%s: server di versione %s non compatibile; il client non supporta lo streaming da server di versione successiva a %s\n" -#: receivelog.c:486 +#: receivelog.c:557 streamutil.c:264 streamutil.c:299 +#, c-format +msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n" +msgstr "%s: identificazione del sistema fallita: ricevute %d righe e %d campi, attese %d righe e %d campi o più\n" + +#: receivelog.c:565 #, c-format msgid "%s: system identifier does not match between base backup and streaming connection\n" msgstr "%s: l'identificativo di sistema non combacia tra il backup di base e la connessione in streaming\n" -#: receivelog.c:494 +#: receivelog.c:573 #, c-format msgid "%s: starting timeline %u is not present in the server\n" msgstr "%s: la timeline di inizio %u non è presente nel server\n" -#: receivelog.c:534 +#: receivelog.c:613 #, c-format msgid "%s: unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: risposta inattesa al comando TIMELINE_HISTORY: ricevute %d righe e %d campi, attese %d righe e %d campi\n" -#: receivelog.c:608 +#: receivelog.c:688 #, c-format msgid "%s: server reported unexpected next timeline %u, following timeline %u\n" msgstr "%s: il server ha riportato la timeline successiva imprevista %u, a seguito della timeline %u\n" -#: receivelog.c:615 +#: receivelog.c:695 #, c-format msgid "%s: server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X\n" msgstr "%s: il server ha interrotto lo streaming della timeline %u a %X/%X, ma ha riportato l'inizio della timeline successiva %u a %X/%X\n" -#: receivelog.c:656 +#: receivelog.c:736 #, c-format msgid "%s: replication stream was terminated before stop point\n" msgstr "%s: lo stream di replica è terminato prima del punto di arresto\n" -#: receivelog.c:705 +#: receivelog.c:785 #, c-format msgid "%s: unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: risultato imprevisto dopo la fine della timeline: ricevute %d righe e %d campi, attese %d righe e %d campi\n" -#: receivelog.c:715 +#: receivelog.c:795 #, c-format msgid "%s: could not parse next timeline's starting point \"%s\"\n" msgstr "%s: interpretazione del punto d'inizio della nuova timeline \"%s\" fallita\n" -#: receivelog.c:770 receivelog.c:873 receivelog.c:1040 +#: receivelog.c:959 #, c-format -msgid "%s: could not send copy-end packet: %s" -msgstr "%s: invio del pacchetto di fine copia fallito: %s" +msgid "%s: socket not open" +msgstr "%s: socket non aperto" -#: receivelog.c:966 +#: receivelog.c:1163 #, c-format msgid "%s: received transaction log record for offset %u with no file open\n" msgstr "%s: ricevuti record di log delle transazioni per offset %u senza alcun file aperto\n" -#: receivelog.c:978 +#: receivelog.c:1175 #, c-format msgid "%s: got WAL data offset %08x, expected %08x\n" msgstr "%s: ricevuto offset dati WAL %08x, atteso %08x\n" -#: receivelog.c:1015 +#: receivelog.c:1212 #, c-format msgid "%s: could not write %u bytes to WAL file \"%s\": %s\n" msgstr "%s: scrittura di %u byte nel file WAL \"%s\" fallita: %s\n" -#: streamutil.c:142 +#: receivelog.c:1237 receivelog.c:1279 receivelog.c:1311 +#, c-format +msgid "%s: could not send copy-end packet: %s" +msgstr "%s: invio del pacchetto di fine copia fallito: %s" + +#: streamutil.c:145 msgid "Password: " msgstr "Password: " -#: streamutil.c:166 +#: streamutil.c:169 #, c-format msgid "%s: could not connect to server\n" msgstr "%s: connessione al server fallita\n" -#: streamutil.c:184 +#: streamutil.c:187 #, c-format -msgid "%s: could not connect to server: %s\n" -msgstr "%s: connessione al server fallita: %s\n" +msgid "%s: could not connect to server: %s" +msgstr "%s: connessione al server fallita: %s" -#: streamutil.c:208 +#: streamutil.c:211 #, c-format msgid "%s: could not determine server setting for integer_datetimes\n" msgstr "%s: non è stato possibile determinare l'impostazione integer_datetimes del server\n" -#: streamutil.c:221 +#: streamutil.c:224 #, c-format msgid "%s: integer_datetimes compile flag does not match server\n" msgstr "%s: l'opzione di compilazione integer_datetimes non combacia con quella del server\n" + +#: streamutil.c:365 +#, c-format +msgid "%s: could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" +msgstr "%s: creazione dello slot di replica \"%s\" fallita: ricevute %d righe e %d campi, attesi %d righe e %d campi\n" + +#: streamutil.c:410 +#, c-format +msgid "%s: could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" +msgstr "%s: eliminazione dello slot di replica \"%s\" fallita: ricevute %d righe e %d campi, attesi %d righe e %d campi\n" diff --git a/src/bin/pg_basebackup/po/pl.po b/src/bin/pg_basebackup/po/pl.po index 8c395990e7bb5..8bb44db811a9d 100644 --- a/src/bin/pg_basebackup/po/pl.po +++ b/src/bin/pg_basebackup/po/pl.po @@ -2,13 +2,13 @@ # Copyright (C) 2011 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. # Begina Felicysym , 2011, 2012, 2013. -# grzegorz , 2014. +# grzegorz , 2014, 2015. msgid "" msgstr "" "Project-Id-Version: pg_basebackup (PostgreSQL 9.1)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-11-10 20:42+0000\n" -"PO-Revision-Date: 2014-11-11 00:12+0200\n" +"POT-Creation-Date: 2015-08-15 18:43+0000\n" +"PO-Revision-Date: 2015-08-16 12:24+0200\n" "Last-Translator: grzegorz \n" "Language-Team: begina.felicysym@wp.eu\n" "Language: pl\n" @@ -19,47 +19,44 @@ msgstr "" "|| n%100>=20) ? 1 : 2);\n" "X-Generator: Virtaal 0.7.1\n" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "brak pamięci\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "nie można powielić pustego wskazania (błąd wewnętrzny)\n" -#: pg_basebackup.c:153 +#: pg_basebackup.c:154 #, c-format -#| msgid "directory name too long: \"%s\"\n" msgid "%s: directory name too long\n" msgstr "%s: zbyt długa nazwa folderu\n" -#: pg_basebackup.c:163 +#: pg_basebackup.c:164 #, c-format msgid "%s: multiple \"=\" signs in tablespace mapping\n" msgstr "%s: wiele znaków \"=\" signs w mapowaniu przestrzeni tabel\n" -#: pg_basebackup.c:176 +#: pg_basebackup.c:177 #, c-format -#| msgid "%s: invalid output format \"%s\", must be \"plain\" or \"tar\"\n" msgid "%s: invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"\n" msgstr "%s: niepoprawny format mapowania przestrzeni tabel \"%s\", musi być " "\"POPRZFLDR=NOWYFLDR\"\n" -#: pg_basebackup.c:189 +#: pg_basebackup.c:190 #, c-format msgid "%s: old directory is not an absolute path in tablespace mapping: %s\n" -msgstr "%s: poprzedni folder to nie ścieżka bezwzględna w mapowaniu przestrzeni " -"tabel: %s\n" +msgstr "%s: poprzedni folder to nie ścieżka bezwzględna w mapowaniu przestrzeni tabel: %s\n" -#: pg_basebackup.c:196 +#: pg_basebackup.c:197 #, c-format msgid "%s: new directory is not an absolute path in tablespace mapping: %s\n" msgstr "%s: nowy folder to nie ścieżka bezwzględna w mapowaniu przestrzeni tabel: %s\n" -#: pg_basebackup.c:227 +#: pg_basebackup.c:231 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -68,17 +65,17 @@ msgstr "" "%s bierze podstawową kopię zapasową działającego serwera PostgreSQL.\n" "\n" -#: pg_basebackup.c:229 pg_receivexlog.c:60 pg_recvlogical.c:67 +#: pg_basebackup.c:233 pg_receivexlog.c:66 pg_recvlogical.c:69 #, c-format msgid "Usage:\n" msgstr "Składnia:\n" -#: pg_basebackup.c:230 pg_receivexlog.c:61 pg_recvlogical.c:68 +#: pg_basebackup.c:234 pg_receivexlog.c:67 pg_recvlogical.c:70 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPCJA]...\n" -#: pg_basebackup.c:231 +#: pg_basebackup.c:235 #, c-format msgid "" "\n" @@ -87,27 +84,26 @@ msgstr "" "\n" "Opcje kontroli wyjścia:\n" -#: pg_basebackup.c:232 +#: pg_basebackup.c:236 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=FOLDER dostarcza kopię zapasową bazy do katalogu\n" -#: pg_basebackup.c:233 +#: pg_basebackup.c:237 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t format wyjścia (plain (domyślny), tar)\n" -#: pg_basebackup.c:234 +#: pg_basebackup.c:238 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" " (in kB/s, or use suffix \"k\" or \"M\")\n" msgstr "" -" -r, --max-rate=RATE maksymalna prędkość transferu przenoszenia " -"folderu danych\n" +" -r, --max-rate=RATE maksymalna prędkość transferu przenoszenia folderu danych\n" " (w kB/s, albo użyj sufiksu \"k\" lub \"M\")\n" -#: pg_basebackup.c:236 +#: pg_basebackup.c:240 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -116,7 +112,12 @@ msgstr "" " -R, --write-recovery-conf\n" " zapisuje recovery.conf po backupie\n" -#: pg_basebackup.c:238 +#: pg_basebackup.c:242 pg_receivexlog.c:74 +#, c-format +msgid " -S, --slot=SLOTNAME replication slot to use\n" +msgstr " -S, --slot=SLOTNAME gniazdo replikacji do użycia\n" + +#: pg_basebackup.c:243 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -125,38 +126,36 @@ msgstr "" " -T, --tablespace-mapping=POPRZFLDR=NOWYFLDR\n" " przenosi przestrzeń tabel z POPRZFLDR do NOWYFLDR\n" -#: pg_basebackup.c:240 +#: pg_basebackup.c:245 #, c-format msgid " -x, --xlog include required WAL files in backup (fetch mode)\n" -msgstr " -x, --xlog dołącza wymagane pliki WAL do kopii zapasowej " -"(tryb pobierania)\n" +msgstr " -x, --xlog dołącza wymagane pliki WAL do kopii zapasowej (tryb pobierania)\n" -#: pg_basebackup.c:241 +#: pg_basebackup.c:246 #, c-format msgid "" " -X, --xlog-method=fetch|stream\n" " include required WAL files with specified method\n" msgstr "" -" -x, --xlog-method=fetch|stream\n" +" -X, --xlog-method=fetch|stream\n" " dołącza wymagane pliki WAL wskazaną metodą\n" -#: pg_basebackup.c:243 +#: pg_basebackup.c:248 #, c-format -#| msgid " -X, --xlogdir=XLOGDIR location for the transaction log directory\n" msgid " --xlogdir=XLOGDIR location for the transaction log directory\n" msgstr " --xlogdir=XLOGFLDR umiejscowienie folderu dziennika transakcji\n" -#: pg_basebackup.c:244 +#: pg_basebackup.c:249 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip wyjście jako spakowany tar\n" -#: pg_basebackup.c:245 +#: pg_basebackup.c:250 #, c-format msgid " -Z, --compress=0-9 compress tar output with given compression level\n" msgstr " -Z, --compress=0-9 wyjście jako spakowany tar z określonym poziomem kompresji\n" -#: pg_basebackup.c:246 +#: pg_basebackup.c:251 #, c-format msgid "" "\n" @@ -165,7 +164,7 @@ msgstr "" "\n" "Opcje ogólne:\n" -#: pg_basebackup.c:247 +#: pg_basebackup.c:252 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" @@ -174,32 +173,32 @@ msgstr "" " -c, --checkpoint=fast|spread\n" " ustawia szybkie lub rozszerzone sprawdzenia\n" -#: pg_basebackup.c:249 +#: pg_basebackup.c:254 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=ETYKIETA ustala etykietę kopii zapasowej\n" -#: pg_basebackup.c:250 +#: pg_basebackup.c:255 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress pokazanie informacji o postępie\n" -#: pg_basebackup.c:251 pg_receivexlog.c:68 pg_recvlogical.c:86 +#: pg_basebackup.c:256 pg_receivexlog.c:76 pg_recvlogical.c:89 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose szczegółowe komunikaty na wyjściu\n" -#: pg_basebackup.c:252 pg_receivexlog.c:69 pg_recvlogical.c:87 +#: pg_basebackup.c:257 pg_receivexlog.c:77 pg_recvlogical.c:90 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version pokaż informacje o wersji i zakończ\n" -#: pg_basebackup.c:253 pg_receivexlog.c:70 pg_recvlogical.c:88 +#: pg_basebackup.c:258 pg_receivexlog.c:78 pg_recvlogical.c:91 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help pokaż tą pomoc i zakończ działanie\n" -#: pg_basebackup.c:254 pg_receivexlog.c:71 pg_recvlogical.c:89 +#: pg_basebackup.c:259 pg_receivexlog.c:79 pg_recvlogical.c:92 #, c-format msgid "" "\n" @@ -208,22 +207,22 @@ msgstr "" "\n" "Opcje połączenia:\n" -#: pg_basebackup.c:255 pg_receivexlog.c:72 +#: pg_basebackup.c:260 pg_receivexlog.c:80 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=CGPOLACZ połączenie do bazy danych o tym ciągu połączenia\n" -#: pg_basebackup.c:256 pg_receivexlog.c:73 pg_recvlogical.c:91 +#: pg_basebackup.c:261 pg_receivexlog.c:81 pg_recvlogical.c:94 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=NAZWAHOSTA host serwera bazy danych lub katalog gniazda\n" -#: pg_basebackup.c:257 pg_receivexlog.c:74 pg_recvlogical.c:92 +#: pg_basebackup.c:262 pg_receivexlog.c:82 pg_recvlogical.c:95 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT numer portu na serwera bazy dnaych\n" -#: pg_basebackup.c:258 +#: pg_basebackup.c:263 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -232,22 +231,22 @@ msgstr "" " -s, --status-interval=INTERWAŁ \n" " czas pomiędzy wysłaniami pakietów stanu na serwer (w sekundach)\n" -#: pg_basebackup.c:260 pg_receivexlog.c:75 pg_recvlogical.c:93 +#: pg_basebackup.c:265 pg_receivexlog.c:83 pg_recvlogical.c:96 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAZWA połączenie jako wskazany użytkownik bazy\n" -#: pg_basebackup.c:261 pg_receivexlog.c:76 pg_recvlogical.c:94 +#: pg_basebackup.c:266 pg_receivexlog.c:84 pg_recvlogical.c:97 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nie pytaj nigdy o hasło\n" -#: pg_basebackup.c:262 pg_receivexlog.c:77 pg_recvlogical.c:95 +#: pg_basebackup.c:267 pg_receivexlog.c:85 pg_recvlogical.c:98 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password wymuś pytanie o hasło (powinno nastąpić automatycznie)\n" -#: pg_basebackup.c:263 pg_receivexlog.c:78 pg_recvlogical.c:96 +#: pg_basebackup.c:268 pg_receivexlog.c:89 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -256,48 +255,48 @@ msgstr "" "\n" "Błędy proszę przesyłać na adres .\n" -#: pg_basebackup.c:306 +#: pg_basebackup.c:311 #, c-format msgid "%s: could not read from ready pipe: %s\n" msgstr "%s: nie można odczytać z przygotowanej rury: %s\n" -#: pg_basebackup.c:314 pg_basebackup.c:406 pg_basebackup.c:1877 -#: pg_receivexlog.c:301 pg_recvlogical.c:937 +#: pg_basebackup.c:319 pg_basebackup.c:412 pg_basebackup.c:1887 +#: streamutil.c:285 #, c-format msgid "%s: could not parse transaction log location \"%s\"\n" msgstr "%s: nie można sparsować położenia dziennika transakcji \"%s\"\n" -#: pg_basebackup.c:419 +#: pg_basebackup.c:425 #, c-format msgid "%s: could not create pipe for background process: %s\n" msgstr "%s: nie udało się utworzyć rury do procesu w tle: %s\n" -#: pg_basebackup.c:452 +#: pg_basebackup.c:450 pg_basebackup.c:505 pg_basebackup.c:1263 +#, c-format +msgid "%s: could not create directory \"%s\": %s\n" +msgstr "%s: nie można utworzyć katalogu \"%s\": %s\n" + +#: pg_basebackup.c:468 #, c-format msgid "%s: could not create background process: %s\n" msgstr "%s: nie udało się utworzenie procesu w tle: %s\n" -#: pg_basebackup.c:464 +#: pg_basebackup.c:480 #, c-format msgid "%s: could not create background thread: %s\n" msgstr "%s: nie udało się utworzenie wątku w tle: %s\n" -#: pg_basebackup.c:489 pg_basebackup.c:1246 -#, c-format -msgid "%s: could not create directory \"%s\": %s\n" -msgstr "%s: nie można utworzyć katalogu \"%s\": %s\n" - -#: pg_basebackup.c:508 +#: pg_basebackup.c:524 #, c-format msgid "%s: directory \"%s\" exists but is not empty\n" msgstr "%s: folder \"%s\" nie jest pusty\n" -#: pg_basebackup.c:516 +#: pg_basebackup.c:532 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: brak dostępu do katalogu \"%s\": %s\n" -#: pg_basebackup.c:578 +#: pg_basebackup.c:594 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" @@ -305,7 +304,7 @@ msgstr[0] "%*s/%s kB (100%%), %d/%d przestrzeń tabel %*s" msgstr[1] "%*s/%s kB (100%%), %d/%d przestrzenie tabel %*s" msgstr[2] "%*s/%s kB (100%%), %d/%d przestrzeni tabel %*s" -#: pg_basebackup.c:590 +#: pg_basebackup.c:606 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" @@ -313,7 +312,7 @@ msgstr[0] "%*s/%s kB (%d%%), %d/%d przestrzeń tabel (%s%-*.*s)" msgstr[1] "%*s/%s kB (%d%%), %d/%d przestrzenie tabel (%s%-*.*s)" msgstr[2] "%*s/%s kB (%d%%), %d/%d przestrzeni tabel (%s%-*.*s)" -#: pg_basebackup.c:606 +#: pg_basebackup.c:622 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" @@ -321,338 +320,329 @@ msgstr[0] "%*s/%s kB (%d%%), %d/%d przestrzeń tabel" msgstr[1] "%*s/%s kB (%d%%), %d/%d przestrzenie tabel" msgstr[2] "%*s/%s kB (%d%%), %d/%d przestrzeni tabel" -#: pg_basebackup.c:628 +#: pg_basebackup.c:644 #, c-format -#| msgid "%s: \"%s\" is not a valid encoding name\n" msgid "%s: transfer rate \"%s\" is not a valid value\n" msgstr "%s: szybkość transferu \"%s\" nie jest poprawną wartością\n" -#: pg_basebackup.c:635 +#: pg_basebackup.c:651 #, c-format -#| msgid "%s: invalid locale name \"%s\"\n" msgid "%s: invalid transfer rate \"%s\": %s\n" msgstr "%s: błędna szybkość transferu \"%s\": %s\n" -#: pg_basebackup.c:645 +#: pg_basebackup.c:661 #, c-format -#| msgid "count must be greater than zero" msgid "%s: transfer rate must be greater than zero\n" msgstr "%s: szybkość transferu musi być większa niż zero\n" -#: pg_basebackup.c:679 +#: pg_basebackup.c:695 #, c-format -#| msgid "%s: invalid argument: \"%s\"\n" msgid "%s: invalid --max-rate unit: \"%s\"\n" msgstr "%s: niepoprawna jednostka --max-rate: \"%s\"\n" -#: pg_basebackup.c:688 +#: pg_basebackup.c:704 #, c-format -#| msgid "argument of lo_write exceeds integer range\n" msgid "%s: transfer rate \"%s\" exceeds integer range\n" msgstr "%s: szybkość transferu \"%s\" jest spoza zakresu typu integer\n" -#: pg_basebackup.c:700 +#: pg_basebackup.c:716 #, c-format -#| msgid "result is out of range" msgid "%s: transfer rate \"%s\" is out of range\n" msgstr "%s: szybkość transferu \"%s\" jest spoza zakresu\n" -#: pg_basebackup.c:724 +#: pg_basebackup.c:740 #, c-format msgid "%s: could not write to compressed file \"%s\": %s\n" msgstr "%s: nie można pisać do spakowanego pliku \"%s\": %s\n" -#: pg_basebackup.c:734 pg_basebackup.c:1340 pg_basebackup.c:1558 +#: pg_basebackup.c:750 pg_basebackup.c:1357 pg_basebackup.c:1582 #, c-format msgid "%s: could not write to file \"%s\": %s\n" msgstr "%s: nie można pisać do pliku \"%s\": %s\n" -#: pg_basebackup.c:789 pg_basebackup.c:810 pg_basebackup.c:838 +#: pg_basebackup.c:805 pg_basebackup.c:826 pg_basebackup.c:854 #, c-format msgid "%s: could not set compression level %d: %s\n" msgstr "%s: nie można ustawić poziomu kompresji %d: %s\n" -#: pg_basebackup.c:859 +#: pg_basebackup.c:875 #, c-format msgid "%s: could not create compressed file \"%s\": %s\n" msgstr "%s: nie można utworzyć spakowanego pliku \"%s\": %s\n" -#: pg_basebackup.c:870 pg_basebackup.c:1300 pg_basebackup.c:1551 +#: pg_basebackup.c:886 pg_basebackup.c:1317 pg_basebackup.c:1575 #, c-format msgid "%s: could not create file \"%s\": %s\n" msgstr "%s: nie można utworzyć pliku \"%s\": %s\n" -#: pg_basebackup.c:882 pg_basebackup.c:1146 +#: pg_basebackup.c:898 pg_basebackup.c:1162 #, c-format msgid "%s: could not get COPY data stream: %s" msgstr "%s: nie można pobrać strumienia danych COPY: %s" -#: pg_basebackup.c:939 +#: pg_basebackup.c:955 #, c-format msgid "%s: could not close compressed file \"%s\": %s\n" msgstr "%s: nie można zamknąć spakowanego pliku \"%s\": %s\n" -#: pg_basebackup.c:952 pg_recvlogical.c:554 receivelog.c:160 receivelog.c:295 -#: receivelog.c:674 +#: pg_basebackup.c:968 pg_recvlogical.c:569 receivelog.c:213 receivelog.c:362 +#: receivelog.c:754 #, c-format msgid "%s: could not close file \"%s\": %s\n" msgstr "%s: nie można zamknąć pliku \"%s\": %s\n" -#: pg_basebackup.c:963 pg_basebackup.c:1175 pg_recvlogical.c:420 -#: receivelog.c:890 +#: pg_basebackup.c:979 pg_basebackup.c:1191 pg_recvlogical.c:435 +#: receivelog.c:1044 #, c-format msgid "%s: could not read COPY data: %s" msgstr "%s: nie można odczytać danych COPY: %s" -#: pg_basebackup.c:1189 +#: pg_basebackup.c:1205 #, c-format msgid "%s: invalid tar block header size: %d\n" msgstr "%s: nieprawidłowy rozmiar nagłówka bloku tar: %d\n" -#: pg_basebackup.c:1197 +#: pg_basebackup.c:1213 #, c-format msgid "%s: could not parse file size\n" msgstr "%s: nie można odczytać rozmiaru pliku\n" -#: pg_basebackup.c:1205 +#: pg_basebackup.c:1221 #, c-format msgid "%s: could not parse file mode\n" msgstr "%s: nie można odczytać trybu pliku\n" -#: pg_basebackup.c:1254 +#: pg_basebackup.c:1271 #, c-format msgid "%s: could not set permissions on directory \"%s\": %s\n" msgstr "%s: nie można ustawić uprawnień do folderu \"%s\": %s\n" -#: pg_basebackup.c:1278 +#: pg_basebackup.c:1295 #, c-format msgid "%s: could not create symbolic link from \"%s\" to \"%s\": %s\n" msgstr "%s: nie można utworzyć linku symbolicznego dla \"%s\" na \"%s\": %s\n" -#: pg_basebackup.c:1287 +#: pg_basebackup.c:1304 #, c-format msgid "%s: unrecognized link indicator \"%c\"\n" msgstr "%s: nierozpoznany wskaźnik linku \"%c\"\n" -#: pg_basebackup.c:1307 +#: pg_basebackup.c:1324 #, c-format msgid "%s: could not set permissions on file \"%s\": %s\n" msgstr "%s: nie można ustawić uprawnień do pliku \"%s\": %s\n" -#: pg_basebackup.c:1366 +#: pg_basebackup.c:1383 #, c-format msgid "%s: COPY stream ended before last file was finished\n" msgstr "%s: strumień COPY zakończony zanim skończył się ostatni plik\n" -#: pg_basebackup.c:1452 pg_basebackup.c:1472 pg_basebackup.c:1479 -#: pg_basebackup.c:1526 +#: pg_basebackup.c:1469 pg_basebackup.c:1489 pg_basebackup.c:1496 +#: pg_basebackup.c:1550 #, c-format msgid "%s: out of memory\n" msgstr "%s: brak pamięci\n" -#: pg_basebackup.c:1603 +#: pg_basebackup.c:1627 #, c-format msgid "%s: incompatible server version %s\n" msgstr "%s: niezgodna wersja serwera %s\n" -#: pg_basebackup.c:1630 pg_basebackup.c:1664 pg_receivexlog.c:286 -#: pg_recvlogical.c:255 pg_recvlogical.c:853 pg_recvlogical.c:886 -#: pg_recvlogical.c:921 receivelog.c:470 receivelog.c:521 receivelog.c:561 +#: pg_basebackup.c:1674 pg_recvlogical.c:261 receivelog.c:549 receivelog.c:600 +#: receivelog.c:641 streamutil.c:255 streamutil.c:353 streamutil.c:399 #, c-format msgid "%s: could not send replication command \"%s\": %s" msgstr "%s: nie można wysłać komendy replikacji \"%s\": %s" -#: pg_basebackup.c:1637 pg_receivexlog.c:293 pg_recvlogical.c:861 -#: receivelog.c:478 -#, c-format -#| msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d fields\n" -msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n" -msgstr "%s: nie można określić systemu: jest %d wierszy i %d pól, oczekiwano %d " -"wierszy i %d lub więcej pól\n" - -#: pg_basebackup.c:1675 +#: pg_basebackup.c:1685 #, c-format msgid "%s: could not initiate base backup: %s" msgstr "%s: nie można zainicjować kopii zapasowej bazy: %s" -#: pg_basebackup.c:1682 +#: pg_basebackup.c:1692 #, c-format msgid "%s: server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: serwer zwrócił nieoczekiwaną odpowiedź na polecenie BASE_BACKUP; jest %d wierszy i %d pól, oczekiwano %d wierszy i %d pól\n" -#: pg_basebackup.c:1702 +#: pg_basebackup.c:1712 #, c-format msgid "transaction log start point: %s on timeline %u\n" msgstr "punkt początkowy dziennika transakcji: %s na linii czasu %u\n" -#: pg_basebackup.c:1711 +#: pg_basebackup.c:1721 #, c-format msgid "%s: could not get backup header: %s" msgstr "%s: nie można pobrać nagłówka kopii zapasowej: %s" -#: pg_basebackup.c:1717 +#: pg_basebackup.c:1727 #, c-format msgid "%s: no data returned from server\n" msgstr "%s: nie zwrócono żadnych danych z serwera\n" -#: pg_basebackup.c:1749 +#: pg_basebackup.c:1759 #, c-format msgid "%s: can only write single tablespace to stdout, database has %d\n" msgstr "%s: można zapisać tylko pojedynczą przestrzeń tabel do stdout, baza danych ma %d\n" -#: pg_basebackup.c:1761 +#: pg_basebackup.c:1771 #, c-format msgid "%s: starting background WAL receiver\n" msgstr "%s: uruchamianie odbiornika WAL w tle\n" -#: pg_basebackup.c:1792 +#: pg_basebackup.c:1802 #, c-format msgid "%s: could not get transaction log end position from server: %s" msgstr "%s: nie można pobrać pozycji końca dziennika transakcji z serwera: %s" -#: pg_basebackup.c:1799 +#: pg_basebackup.c:1809 #, c-format msgid "%s: no transaction log end position returned from server\n" msgstr "%s: nie zwrócono pozycji końca dziennika transakcji z serwera\n" -#: pg_basebackup.c:1811 +#: pg_basebackup.c:1821 #, c-format msgid "%s: final receive failed: %s" msgstr "%s: ostateczne pobieranie nie powiodło się: %s" -#: pg_basebackup.c:1829 +#: pg_basebackup.c:1839 #, c-format msgid "%s: waiting for background process to finish streaming ...\n" msgstr "%s: oczekiwanie na zakończenie transmisji strumieniowej przez proces w tle ...\n" -#: pg_basebackup.c:1835 +#: pg_basebackup.c:1845 #, c-format msgid "%s: could not send command to background pipe: %s\n" msgstr "%s: nie udało się przesyłanie polecenia do rury w tle: %s\n" -#: pg_basebackup.c:1844 +#: pg_basebackup.c:1854 #, c-format msgid "%s: could not wait for child process: %s\n" msgstr "%s: nie można czekać na proces potomny: %s\n" -#: pg_basebackup.c:1850 +#: pg_basebackup.c:1860 #, c-format msgid "%s: child %d died, expected %d\n" msgstr "%s: zginął potomek %d, oczekiwano %d\n" -#: pg_basebackup.c:1856 +#: pg_basebackup.c:1866 #, c-format msgid "%s: child process did not exit normally\n" msgstr "%s: proces potomny nie zakończył poprawnie działania\n" -#: pg_basebackup.c:1862 +#: pg_basebackup.c:1872 #, c-format msgid "%s: child process exited with error %d\n" msgstr "%s: proces potomny zakończył działanie z błędem %d\n" -#: pg_basebackup.c:1889 +#: pg_basebackup.c:1899 #, c-format msgid "%s: could not wait for child thread: %s\n" msgstr "%s: nie można czekać na wątek potomny: %s\n" -#: pg_basebackup.c:1896 +#: pg_basebackup.c:1906 #, c-format msgid "%s: could not get child thread exit status: %s\n" msgstr "%s: nie można pobrać statusu wyjścia wątku potomnego: %s\n" -#: pg_basebackup.c:1902 +#: pg_basebackup.c:1912 #, c-format msgid "%s: child thread exited with error %u\n" msgstr "%s: wątek potomny zakończył działanie z błędem %u\n" -#: pg_basebackup.c:1991 +#: pg_basebackup.c:2002 #, c-format msgid "%s: invalid output format \"%s\", must be \"plain\" or \"tar\"\n" msgstr "%s: niepoprawny format wyjścia \"%s\", musi być \"plain\" lub \"tar\"\n" -#: pg_basebackup.c:2009 pg_basebackup.c:2021 +#: pg_basebackup.c:2023 pg_basebackup.c:2035 #, c-format msgid "%s: cannot specify both --xlog and --xlog-method\n" msgstr "%s: nie można wskazać jednocześnie --xlog oraz --xlog-method\n" -#: pg_basebackup.c:2036 +#: pg_basebackup.c:2050 #, c-format msgid "%s: invalid xlog-method option \"%s\", must be \"fetch\" or \"stream\"\n" msgstr "%s: niepoprawna opcja xlog-method \"%s\", musi być \"fetch\" lub \"stream\"\n" -#: pg_basebackup.c:2058 +#: pg_basebackup.c:2072 #, c-format msgid "%s: invalid compression level \"%s\"\n" msgstr "%s: niepoprawny poziom kompresji \"%s\"\n" -#: pg_basebackup.c:2070 +#: pg_basebackup.c:2084 #, c-format msgid "%s: invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"\n" msgstr "%s: niepoprawny argument checkpoint \"%s\", musi być \"fast\" lub \"spread\"\n" -#: pg_basebackup.c:2097 pg_receivexlog.c:428 pg_recvlogical.c:736 +#: pg_basebackup.c:2111 pg_receivexlog.c:439 pg_recvlogical.c:752 #, c-format msgid "%s: invalid status interval \"%s\"\n" msgstr "%s: niepoprawny interwał stanu \"%s\"\n" -#: pg_basebackup.c:2113 pg_basebackup.c:2127 pg_basebackup.c:2138 -#: pg_basebackup.c:2151 pg_basebackup.c:2161 pg_basebackup.c:2173 -#: pg_basebackup.c:2184 pg_receivexlog.c:447 pg_receivexlog.c:461 -#: pg_receivexlog.c:472 pg_recvlogical.c:760 pg_recvlogical.c:774 -#: pg_recvlogical.c:785 pg_recvlogical.c:793 pg_recvlogical.c:801 -#: pg_recvlogical.c:809 pg_recvlogical.c:817 pg_recvlogical.c:825 +#: pg_basebackup.c:2127 pg_basebackup.c:2141 pg_basebackup.c:2152 +#: pg_basebackup.c:2165 pg_basebackup.c:2175 pg_basebackup.c:2185 +#: pg_basebackup.c:2197 pg_basebackup.c:2208 pg_receivexlog.c:471 +#: pg_receivexlog.c:485 pg_receivexlog.c:493 pg_receivexlog.c:503 +#: pg_receivexlog.c:514 pg_recvlogical.c:779 pg_recvlogical.c:793 +#: pg_recvlogical.c:804 pg_recvlogical.c:812 pg_recvlogical.c:820 +#: pg_recvlogical.c:828 pg_recvlogical.c:836 pg_recvlogical.c:844 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Spróbuj \"%s --help\" aby uzyskać więcej informacji.\n" -#: pg_basebackup.c:2125 pg_receivexlog.c:459 pg_recvlogical.c:772 +#: pg_basebackup.c:2139 pg_receivexlog.c:483 pg_recvlogical.c:791 #, 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_basebackup.c:2137 pg_receivexlog.c:471 +#: pg_basebackup.c:2151 pg_receivexlog.c:513 #, c-format msgid "%s: no target directory specified\n" msgstr "%s: nie wskazano folderu docelowego\n" -#: pg_basebackup.c:2149 +#: pg_basebackup.c:2163 #, c-format msgid "%s: only tar mode backups can be compressed\n" msgstr "%s: tylko kopie zapasowe w trybie tar mogą być spakowane\n" -#: pg_basebackup.c:2159 +#: pg_basebackup.c:2173 #, c-format msgid "%s: WAL streaming can only be used in plain mode\n" msgstr "%s: strumieniowanie WAL może być użyte tylko w trybie tekstowym\n" -#: pg_basebackup.c:2171 +#: pg_basebackup.c:2183 +#, c-format +#| msgid "replication slots can only be used if max_replication_slots > 0" +msgid "%s: replication slots can only be used with WAL streaming\n" +msgstr "%s: gniazda replikacji mogą być użyte tylko ze strumieniowaniem WAL\n" + +#: pg_basebackup.c:2195 #, c-format -#| msgid "%s: transaction log directory location must be an absolute path\n" msgid "%s: transaction log directory location can only be specified in plain mode\n" -msgstr "%s: położenie folderu dziennika transakcji może być wskazana tylko w trybie " -"tekstowym\n" +msgstr "%s: położenie folderu dziennika transakcji może być wskazana tylko w trybie tekstowym\n" -#: pg_basebackup.c:2182 +#: pg_basebackup.c:2206 #, c-format msgid "%s: transaction log directory location must be an absolute path\n" msgstr "%s: położenie folderu dziennika transakcji musi być ścieżką bezwzględną\n" -#: pg_basebackup.c:2194 +#: pg_basebackup.c:2218 #, c-format msgid "%s: this build does not support compression\n" msgstr "%s: ta kompilacja nie obsługuje kompresji\n" -#: pg_basebackup.c:2221 +#: pg_basebackup.c:2245 #, c-format msgid "%s: could not create symbolic link \"%s\": %s\n" msgstr "%s: nie można utworzyć linku symbolicznego \"%s\": %s\n" -#: pg_basebackup.c:2226 +#: pg_basebackup.c:2250 #, c-format -msgid "%s: symlinks are not supported on this platform" -msgstr "%s: linki symb. nie są obsługiwane na tej platformie" +#| msgid "%s: symlinks are not supported on this platform" +msgid "%s: symlinks are not supported on this platform\n" +msgstr "%s: linki symb. nie są obsługiwane na tej platformie\n" -#: pg_receivexlog.c:58 +#: pg_receivexlog.c:64 #, c-format msgid "" "%s receives PostgreSQL streaming transaction logs.\n" @@ -661,7 +651,7 @@ msgstr "" "%s odbiera logi strumieniowania transakcji PostgreSQL.\n" "\n" -#: pg_receivexlog.c:62 pg_recvlogical.c:73 +#: pg_receivexlog.c:68 pg_recvlogical.c:75 #, c-format msgid "" "\n" @@ -670,108 +660,161 @@ msgstr "" "\n" "Opcje:\n" -#: pg_receivexlog.c:63 +#: pg_receivexlog.c:69 #, c-format msgid " -D, --directory=DIR receive transaction log files into this directory\n" msgstr " -D, --directory=FOLDER odbiera pliki dziennika do tego katalogu\n" -#: pg_receivexlog.c:64 pg_recvlogical.c:78 +#: pg_receivexlog.c:70 pg_recvlogical.c:79 +#, c-format +msgid " --if-not-exists do not treat naming conflicts as an error when creating a slot\n" +msgstr " --if-not-exists nie traktuj konfliktów nazewnictwa jako błędy " +"podczas tworzenia gniazda\n" + +#: pg_receivexlog.c:71 pg_recvlogical.c:81 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --noloop nie wchodzi w pętlę po stracie połączenia\n" -#: pg_receivexlog.c:65 pg_recvlogical.c:83 +#: pg_receivexlog.c:72 pg_recvlogical.c:86 #, c-format -#| msgid "" -#| " -s, --status-interval=INTERVAL\n" -#| " time between status packets sent to server (in seconds)\n" msgid "" " -s, --status-interval=SECS\n" " time between status packets sent to server (default: %d)\n" msgstr "" " -s, --status-interval=SEKUNDY\n" -" czas pomiędzy wysłaniami pakietów stanu na serwer " -"(domyślnie %d)\n" +" czas pomiędzy wysłaniami pakietów stanu na serwer (domyślnie %d)\n" -#: pg_receivexlog.c:67 +#: pg_receivexlog.c:75 #, c-format -msgid " -S, --slot=SLOTNAME replication slot to use\n" -msgstr " -S, --slot=SLOTNAME gniazdo replikacji do użycia\n" +msgid " --synchronous flush transaction log immediately after writing\n" +msgstr " --synchronous czyść dziennik transakcji bezpośrednio po zapisie\n" + +#: pg_receivexlog.c:86 +#, c-format +#| msgid "" +#| "\n" +#| "Options:\n" +msgid "" +"\n" +"Optional actions:\n" +msgstr "" +"\n" +"Akcje opcjonalne:\n" -#: pg_receivexlog.c:89 +#: pg_receivexlog.c:87 pg_recvlogical.c:72 +#, c-format +msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" +msgstr " --create-slot tworzy nowe gniazdo replikacji (nazwa gniazda patrz --slot)\n" + +#: pg_receivexlog.c:88 pg_recvlogical.c:73 +#, c-format +msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" +msgstr " --drop-slot usuwa gniazdo replikacji (nazwa gniazda patrz --slot)\n" + +#: pg_receivexlog.c:100 #, c-format msgid "%s: finished segment at %X/%X (timeline %u)\n" msgstr "%s: zakończono segment na %X/%X (oś czasu %u)\n" -#: pg_receivexlog.c:102 +#: pg_receivexlog.c:113 #, c-format msgid "%s: switched to timeline %u at %X/%X\n" msgstr "%s: przełączono na linię czasu %u na %X/%X\n" -#: pg_receivexlog.c:111 +#: pg_receivexlog.c:122 #, c-format msgid "%s: received interrupt signal, exiting\n" msgstr "%s: odebrano sygnał przerwania, wyjście\n" -#: pg_receivexlog.c:137 +#: pg_receivexlog.c:142 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: nie można otworzyć katalogu \"%s\": %s\n" -#: pg_receivexlog.c:187 +#: pg_receivexlog.c:160 +#, c-format +msgid "%s: could not close directory \"%s\": %s\n" +msgstr "%s: nie można zamknąć katalogu \"%s\": %s\n" + +#: pg_receivexlog.c:218 pg_recvlogical.c:343 #, c-format msgid "%s: could not stat file \"%s\": %s\n" msgstr "%s: nie można wykonać stat na pliku \"%s\": %s\n" -#: pg_receivexlog.c:195 +#: pg_receivexlog.c:226 #, c-format msgid "%s: segment file \"%s\" has incorrect size %d, skipping\n" msgstr "%s: plik segmentu \"%s\" ma niepoprawny rozmiar %d, pominięto\n" -#: pg_receivexlog.c:214 +#: pg_receivexlog.c:245 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: nie można odczytać katalogu \"%s\": %s\n" -#: pg_receivexlog.c:221 -#, c-format -msgid "%s: could not close directory \"%s\": %s\n" -msgstr "%s: nie można zamknąć katalogu \"%s\": %s\n" - -#: pg_receivexlog.c:328 +#: pg_receivexlog.c:331 #, c-format msgid "%s: starting log streaming at %X/%X (timeline %u)\n" msgstr "%s: rozpoczęto przesyłanie dziennika na %X/%X (oś czasu %u)\n" -#: pg_receivexlog.c:409 pg_recvlogical.c:683 +#: pg_receivexlog.c:420 pg_recvlogical.c:699 #, c-format msgid "%s: invalid port number \"%s\"\n" msgstr "%s: nieprawidłowy numer portu \"%s\"\n" -#: pg_receivexlog.c:494 pg_recvlogical.c:964 +#: pg_receivexlog.c:492 +#, c-format +#| msgid "%s: cannot use --create-slot or --start together with --drop-slot\n" +msgid "%s: cannot use --create-slot together with --drop-slot\n" +msgstr "%s: nie można użyć --create-slot razem z --drop-slot\n" + +#. translator: second %s is an option name +#: pg_receivexlog.c:501 +#, c-format +#| msgid "%s: at least one action needs to be specified\n" +msgid "%s: %s needs a slot to be specified using --slot\n" +msgstr "%s: %s wymaga wskazania gniazda przy użyciu --slot\n" + +#: pg_receivexlog.c:556 +#, c-format +msgid "%s: replication connection using slot \"%s\" is unexpectedly database specific\n" +msgstr "%s: połączenie replikacji używające gniazda \"%s\" jest nieoczekiwanie " +"specyficzny dla bazy danych\n" + +#: pg_receivexlog.c:568 pg_recvlogical.c:884 +#, c-format +msgid "%s: dropping replication slot \"%s\"\n" +msgstr "%s: kasowanie gniazda replikacji \"%s\"\n" + +#: pg_receivexlog.c:581 pg_recvlogical.c:896 +#, c-format +msgid "%s: creating replication slot \"%s\"\n" +msgstr "%s: tworzenie gniazda replikacji \"%s\"\n" + +#: pg_receivexlog.c:608 pg_recvlogical.c:922 #, c-format msgid "%s: disconnected\n" msgstr "%s: rozłączono\n" #. translator: check source for value for %d -#: pg_receivexlog.c:501 pg_recvlogical.c:971 +#: pg_receivexlog.c:615 pg_recvlogical.c:929 #, c-format msgid "%s: disconnected; waiting %d seconds to try again\n" msgstr "%s: rozłączono; czekam %d sekund i ponawiam próbę\n" -#: pg_recvlogical.c:65 +#: pg_recvlogical.c:67 #, c-format #| msgid "" -#| "%s receives PostgreSQL streaming transaction logs.\n" +#| "%s receives PostgreSQL logical change streams.\n" #| "\n" msgid "" -"%s receives PostgreSQL logical change streams.\n" +"%s controls PostgreSQL logical decoding streams.\n" "\n" msgstr "" -"%s odbiera strumienie zmian logicznych PostgreSQL.\n" +"%s kontroluje dekodujące strumienie logiczne PostgreSQL.\n" "\n" -#: pg_recvlogical.c:69 +#: pg_recvlogical.c:71 #, c-format msgid "" "\n" @@ -780,51 +823,31 @@ msgstr "" "\n" "Akcja do wykonania:\n" -#: pg_recvlogical.c:70 -#, c-format -msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" -msgstr " --create-slot tworzy nowe gniazdo replikacji (nazwa gniazda " -"patrz --slot)\n" - -#: pg_recvlogical.c:71 -#, c-format -msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" -msgstr " --drop-slot usuwa gniazdo replikacji (nazwa gniazda patrz " -"--slot)\n" - -#: pg_recvlogical.c:72 +#: pg_recvlogical.c:74 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" -msgstr " --start rozpoczyna przesyłanie na gnieździe replikacji " -"(nazwa gniazda patrz --slot)\n" +msgstr " --start rozpoczyna przesyłanie na gnieździe replikacji (nazwa gniazda patrz --slot)\n" -#: pg_recvlogical.c:74 +#: pg_recvlogical.c:76 #, c-format -#| msgid " -f, --file=FILENAME output file or directory name\n" msgid " -f, --file=FILE receive log into this file, - for stdout\n" -msgstr " -f, --file=NAZWAPLIKU nazwa pliku lub folderu wyjścia logów, - do " -"standardowego strumienia\n" +msgstr " -f, --file=NAZWAPLIKU nazwa pliku lub folderu wyjścia logów, - do standardowego strumienia\n" -#: pg_recvlogical.c:75 +#: pg_recvlogical.c:77 #, c-format -#| msgid "" -#| " -s, --status-interval=INTERVAL\n" -#| " time between status packets sent to server (in seconds)\n" msgid "" " -F --fsync-interval=SECS\n" " time between fsyncs to the output file (default: %d)\n" msgstr "" " -F, --fsync-interval=SEKUNDY\n" -" czas pomiędzy fsyncami do pliku wyjścia " -"(domyślnie: %d)\n" +" czas pomiędzy fsyncami do pliku wyjścia (domyślnie: %d)\n" -#: pg_recvlogical.c:77 +#: pg_recvlogical.c:80 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" -msgstr " -I, --startpos=LSN gdzie w istniejącym gnieździe strumień powinien " -"się zacząć\n" +msgstr " -I, --startpos=LSN gdzie w istniejącym gnieździe strumień powinien się zacząć\n" -#: pg_recvlogical.c:79 +#: pg_recvlogical.c:82 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -836,334 +859,329 @@ msgstr "" "WARTOŚĆ, \n" " do wtyczki wyjścia\n" -#: pg_recvlogical.c:82 +#: pg_recvlogical.c:85 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=WTYCZKA użyj wtyczki wyjścia WTYCZKA (domyślnie: %s)\n" -#: pg_recvlogical.c:85 +#: pg_recvlogical.c:88 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=SLOTNAME nazwa logicznego gniazda replikacji\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:93 #, c-format -#| msgid " -d, --dbname=DBNAME database to cluster\n" msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=NAZWADB baza danych do połączenia\n" -#: pg_recvlogical.c:123 +#: pg_recvlogical.c:126 #, c-format msgid "%s: confirming write up to %X/%X, flush to %X/%X (slot %s)\n" msgstr "%s: potwierdzenie zapisu aż do %X/%X, zrzut do %X/%X (gniazdo %s)\n" -#: pg_recvlogical.c:148 receivelog.c:340 +#: pg_recvlogical.c:151 receivelog.c:415 #, c-format msgid "%s: could not send feedback packet: %s" msgstr "%s: nie można wysłać pakietu zwrotnego: %s" -#: pg_recvlogical.c:184 +#: pg_recvlogical.c:190 #, c-format -#| msgid "%s: could not fsync file \"%s\": %s\n" msgid "%s: could not fsync log file \"%s\": %s\n" msgstr "%s: nie można wykonać fsync na pliku dziennika \"%s\": %s\n" -#: pg_recvlogical.c:223 +#: pg_recvlogical.c:229 #, c-format -#| msgid "%s: starting log streaming at %X/%X (timeline %u)\n" msgid "%s: starting log streaming at %X/%X (slot %s)\n" msgstr "%s: rozpoczęto przesyłanie dziennika na %X/%X (gniazdo %s)\n" -#: pg_recvlogical.c:265 +#: pg_recvlogical.c:271 #, c-format -#| msgid "%s: streaming header too small: %d\n" msgid "%s: streaming initiated\n" msgstr "%s: uruchomiono przepływ\n" -#: pg_recvlogical.c:328 +#: pg_recvlogical.c:336 #, 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_recvlogical.c:397 receivelog.c:837 +#: pg_recvlogical.c:412 receivelog.c:980 #, c-format msgid "%s: select() failed: %s\n" msgstr "%s: select() nie powiodła się: %s\n" -#: pg_recvlogical.c:406 receivelog.c:845 +#: pg_recvlogical.c:421 receivelog.c:1030 #, c-format msgid "%s: could not receive data from WAL stream: %s" msgstr "%s: nie można otrzymać danych ze strumienia WAL: %s" -#: pg_recvlogical.c:447 pg_recvlogical.c:486 receivelog.c:912 receivelog.c:947 +#: pg_recvlogical.c:462 pg_recvlogical.c:501 receivelog.c:1075 +#: receivelog.c:1144 #, c-format msgid "%s: streaming header too small: %d\n" msgstr "%s: nagłówek strumienia jest za krótki: %d\n" -#: pg_recvlogical.c:469 receivelog.c:1053 +#: pg_recvlogical.c:484 receivelog.c:924 #, c-format msgid "%s: unrecognized streaming header: \"%c\"\n" msgstr "%s: nierozpoznany nagłówek strumienia: \"%c\"\n" -#: pg_recvlogical.c:515 pg_recvlogical.c:529 +#: pg_recvlogical.c:530 pg_recvlogical.c:544 #, c-format -#| msgid "%s: could not write %u bytes to WAL file \"%s\": %s\n" msgid "%s: could not write %u bytes to log file \"%s\": %s\n" msgstr "%s: nie można pisać %u bajtów do pliku dziennika \"%s\": %s\n" -#: pg_recvlogical.c:540 receivelog.c:627 receivelog.c:665 +#: pg_recvlogical.c:555 receivelog.c:707 receivelog.c:745 #, c-format msgid "%s: unexpected termination of replication stream: %s" msgstr "%s: nieoczekiwane zakończenie strumienia replikacji: %s" -#: pg_recvlogical.c:662 +#: pg_recvlogical.c:678 #, c-format -#| msgid "%s: invalid status interval \"%s\"\n" msgid "%s: invalid fsync interval \"%s\"\n" msgstr "%s: niepoprawny interwał fsync \"%s\"\n" -#: pg_recvlogical.c:703 +#: pg_recvlogical.c:719 #, c-format -#| msgid "%s: could not parse version \"%s\"\n" msgid "%s: could not parse start position \"%s\"\n" msgstr "%s: nie można odczytać pozycji początkowej \"%s\"\n" -#: pg_recvlogical.c:784 +#: pg_recvlogical.c:803 #, c-format -#| msgid "%s: no operation specified\n" msgid "%s: no slot specified\n" msgstr "%s: nie wskazano gniazda\n" -#: pg_recvlogical.c:792 +#: pg_recvlogical.c:811 #, c-format -#| msgid "%s: no target directory specified\n" msgid "%s: no target file specified\n" msgstr "%s: nie wskazano pliku docelowego\n" -#: pg_recvlogical.c:800 +#: pg_recvlogical.c:819 #, c-format -#| msgid "%s: no data directory specified\n" msgid "%s: no database specified\n" msgstr "%s: nie wskazano bazy danych\n" -#: pg_recvlogical.c:808 +#: pg_recvlogical.c:827 #, c-format -#| msgid "%s: no operation specified\n" msgid "%s: at least one action needs to be specified\n" msgstr "%s: wymagane wskazanie co najmniej jednej akcji\n" -#: pg_recvlogical.c:816 +#: pg_recvlogical.c:835 #, c-format msgid "%s: cannot use --create-slot or --start together with --drop-slot\n" msgstr "%s: nie można użyć --create-slot ani --start razem z --drop-slot\n" -#: pg_recvlogical.c:824 +#: pg_recvlogical.c:843 #, c-format msgid "%s: cannot use --create-slot or --drop-slot together with --startpos\n" msgstr "%s: nie można użyć --create-slot ani --drop-slot razem ze --startpost\n" -#: pg_recvlogical.c:878 -#, c-format -#| msgid "%s: could not send replication command \"%s\": %s" -msgid "%s: dropping replication slot \"%s\"\n" -msgstr "%s: kasowanie gniazda replikacji \"%s\"\n" - -#: pg_recvlogical.c:894 +#: pg_recvlogical.c:874 #, c-format -#| msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d fields\n" -msgid "%s: could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" -msgstr "%s: nie można skasować gniazda replikacji \"%s\": jest %d wierszy i %d pól, " -"oczekiwano %d wierszy i %d pól\n" +#| msgid "could not establish SSL connection: %s\n" +msgid "%s: could not establish database-specific replication connection\n" +msgstr "%s: nie można ustanowić specyficznego dla bazy danych połączenia replikacji\n" -#: pg_recvlogical.c:912 +#: receivelog.c:75 #, c-format -#| msgid "%s: unexpected termination of replication stream: %s" -msgid "%s: creating replication slot \"%s\"\n" -msgstr "%s: tworzenie gniazda replikacji \"%s\"\n" +#| msgid "could not create archive status file \"%s\": %m" +msgid "%s: could not create archive status file \"%s\": %s\n" +msgstr "%s: nie można utworzyć pliku stanu archiwum \"%s\": %s\n" -#: pg_recvlogical.c:929 +#: receivelog.c:82 receivelog.c:206 receivelog.c:355 receivelog.c:848 +#: receivelog.c:1096 #, c-format -#| msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d fields\n" -msgid "%s: could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" -msgstr "%s: nie można utworzyć gniazda replikacji \"%s\": jest %d wierszy i %d pól, " -"oczekiwano %d wierszy i %d pól\n" +msgid "%s: could not fsync file \"%s\": %s\n" +msgstr "%s: nie można wykonać fsync na pliku \"%s\": %s\n" -#: receivelog.c:68 +#: receivelog.c:121 #, c-format msgid "%s: could not open transaction log file \"%s\": %s\n" msgstr "%s: nie można otworzyć pliku dziennika transakcji \"%s\": %s\n" -#: receivelog.c:80 +#: receivelog.c:133 #, c-format msgid "%s: could not stat transaction log file \"%s\": %s\n" msgstr "%s: nie można wykonać stat na pliku dziennika transakcji \"%s\": %s\n" -#: receivelog.c:94 +#: receivelog.c:147 #, c-format msgid "%s: transaction log file \"%s\" has %d bytes, should be 0 or %d\n" msgstr "%s: plik dziennika transakcji \"%s\" ma %d bajtów, powinno być 0 lub %d\n" -#: receivelog.c:107 +#: receivelog.c:160 #, c-format msgid "%s: could not pad transaction log file \"%s\": %s\n" msgstr "%s: nie można wykonać pad na pliku dziennika transakcji \"%s\": %s\n" -#: receivelog.c:120 +#: receivelog.c:173 #, c-format msgid "%s: could not seek to beginning of transaction log file \"%s\": %s\n" msgstr "%s: nie można przejść do początku pliku dziennika transakcji \"%s\": %s\n" -#: receivelog.c:146 +#: receivelog.c:199 #, c-format msgid "%s: could not determine seek position in file \"%s\": %s\n" msgstr "%s: nie można określić pozycji przesunięcia w pliku \"%s\": %s\n" -#: receivelog.c:153 receivelog.c:288 -#, c-format -msgid "%s: could not fsync file \"%s\": %s\n" -msgstr "%s: nie można wykonać fsync na pliku \"%s\": %s\n" - -#: receivelog.c:179 +#: receivelog.c:232 #, c-format msgid "%s: could not rename file \"%s\": %s\n" msgstr "%s: nie udało się zmienić nazwy pliku \"%s\": %s\n" -#: receivelog.c:186 +#: receivelog.c:239 #, c-format msgid "%s: not renaming \"%s%s\", segment is not complete\n" msgstr "%s: nie będzie wykonana zmiana nazwy \"%s%s\", segment nie jest zakończony\n" -#: receivelog.c:219 +#: receivelog.c:285 #, c-format msgid "%s: could not open timeline history file \"%s\": %s\n" msgstr "%s: nie można otworzyć pliku historii linii czasu \"%s\": %s\n" -#: receivelog.c:246 +#: receivelog.c:313 #, c-format msgid "%s: server reported unexpected history file name for timeline %u: %s\n" msgstr "%s: serwer zgłosił nieoczekiwaną nazwę pliku historii dla linii czasu %u: %s\n" -#: receivelog.c:263 +#: receivelog.c:330 #, c-format msgid "%s: could not create timeline history file \"%s\": %s\n" msgstr "%s: nie można utworzyć pliku historii linii czasu \"%s\": %s\n" -#: receivelog.c:280 +#: receivelog.c:347 #, c-format msgid "%s: could not write timeline history file \"%s\": %s\n" msgstr "%s: nie można pisać do pliku historii linii czasu \"%s\": %s\n" -#: receivelog.c:305 +#: receivelog.c:372 #, c-format msgid "%s: could not rename file \"%s\" to \"%s\": %s\n" msgstr "%s: nie można zmienić nazwy pliku \"%s\" na \"%s\": %s\n" -#: receivelog.c:374 +#: receivelog.c:449 #, c-format -#| msgid "%s: incompatible server version %s; streaming is only supported with server version %s\n" msgid "%s: incompatible server version %s; client does not support streaming from server versions older than %s\n" -msgstr "%s: niezgodna wersja serwera %s; klient nie obsługuje transmisji " -"strumieniowej z wersji serwera starszych niż %s\n" +msgstr "%s: niezgodna wersja serwera %s; klient nie obsługuje transmisji strumieniowej z wersji serwera starszych niż %s\n" -#: receivelog.c:384 +#: receivelog.c:459 #, c-format -#| msgid "%s: incompatible server version %s; streaming is only supported with server version %s\n" msgid "%s: incompatible server version %s; client does not support streaming from server versions newer than %s\n" -msgstr "%s: niezgodna wersja serwera %s; klient nie obsługuje transmisji " -"strumieniowej z wersji serwera nowszych niż %s\n" +msgstr "%s: niezgodna wersja serwera %s; klient nie obsługuje transmisji strumieniowej z wersji serwera nowszych niż %s\n" -#: receivelog.c:486 +#: receivelog.c:557 streamutil.c:264 streamutil.c:299 +#, c-format +msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n" +msgstr "%s: nie można określić systemu: jest %d wierszy i %d pól, oczekiwano %d wierszy i %d lub więcej pól\n" + +#: receivelog.c:565 #, c-format msgid "%s: system identifier does not match between base backup and streaming connection\n" msgstr "%s: identyfikator systemu różni się pomiędzy bazową kopią zapasową i połączeniem strumieniowym\n" -#: receivelog.c:494 +#: receivelog.c:573 #, c-format msgid "%s: starting timeline %u is not present in the server\n" msgstr "%s: brak początkowej linii czasu %u na serwerze\n" -#: receivelog.c:534 +#: receivelog.c:613 #, c-format msgid "%s: unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: nieoczekiwana odpowiedź na polecenie TIMELINE_HISTORY: jest %d wierszy i %d pól, oczekiwano %d wierszy i %d pól\n" -#: receivelog.c:608 +#: receivelog.c:688 #, c-format msgid "%s: server reported unexpected next timeline %u, following timeline %u\n" msgstr "%s: serwer zgłosił nieoczekiwaną kolejną linię czasu %u, za linią %u\n" -#: receivelog.c:615 +#: receivelog.c:695 #, c-format msgid "%s: server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X\n" msgstr "%s: serwer zakończył przepływ linii czasu %u na %X/%X, ale zgłosił kolejną linię czasu %u o początku %X/%X\n" -#: receivelog.c:656 +#: receivelog.c:736 #, c-format msgid "%s: replication stream was terminated before stop point\n" msgstr "%s: strumień replikacji zakończył się przed punktem zatrzymania\n" -#: receivelog.c:705 +#: receivelog.c:785 #, c-format msgid "%s: unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: nieoczekiwany zestaw wyników po end-of-timeline: jest %d wierszy i %d pól, oczekiwano %d wierszy i %d pól\n" -#: receivelog.c:715 +#: receivelog.c:795 #, c-format msgid "%s: could not parse next timeline's starting point \"%s\"\n" msgstr "%s: nie można sparsować początku następnej linii czasu \"%s\"\n" -#: receivelog.c:770 receivelog.c:873 receivelog.c:1040 +#: receivelog.c:959 #, c-format -msgid "%s: could not send copy-end packet: %s" -msgstr "%s: nie można wysłać pakietu końca kopii: %s" +#| msgid "socket not open" +msgid "%s: socket not open" +msgstr "%s: gniazdo nie jest otwarte" -#: receivelog.c:966 +#: receivelog.c:1163 #, c-format msgid "%s: received transaction log record for offset %u with no file open\n" msgstr "%s: otrzymano rekord dziennika transakcji dla przesunięcia %u bez otwartego pliku\n" -#: receivelog.c:978 +#: receivelog.c:1175 #, c-format msgid "%s: got WAL data offset %08x, expected %08x\n" msgstr "%s: otrzymano przesunięcie danych WAL %08x, oczekiwano %08x\n" -#: receivelog.c:1015 +#: receivelog.c:1212 #, c-format msgid "%s: could not write %u bytes to WAL file \"%s\": %s\n" msgstr "%s: nie można pisać %u bajtów do pliku WAL \"%s\": %s\n" -#: streamutil.c:142 +#: receivelog.c:1237 receivelog.c:1279 receivelog.c:1311 +#, c-format +msgid "%s: could not send copy-end packet: %s" +msgstr "%s: nie można wysłać pakietu końca kopii: %s" + +#: streamutil.c:145 msgid "Password: " msgstr "Hasło: " -#: streamutil.c:166 +#: streamutil.c:169 #, c-format msgid "%s: could not connect to server\n" msgstr "%s: nie można połączyć z serwerem\n" -#: streamutil.c:184 +#: streamutil.c:187 #, c-format -msgid "%s: could not connect to server: %s\n" -msgstr "%s: nie można połączyć z serwerem: %s\n" +#| msgid "%s: could not connect to server: %s\n" +msgid "%s: could not connect to server: %s" +msgstr "%s: nie można połączyć z serwerem: %s" -#: streamutil.c:208 +#: streamutil.c:211 #, c-format msgid "%s: could not determine server setting for integer_datetimes\n" msgstr "%s: nie można ustalić ustawienia serwera dla integer_datetimes\n" -#: streamutil.c:221 +#: streamutil.c:224 #, c-format msgid "%s: integer_datetimes compile flag does not match server\n" msgstr "%s: flaga kompilacji integer_datetimes nie jest zgodna z serwerem\n" -#~ msgid "%s: could not parse transaction log file name \"%s\"\n" -#~ msgstr "%s: nie można sparsować nazwy pliku dziennika transakcji \"%s\"\n" +#: streamutil.c:365 +#, c-format +msgid "%s: could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" +msgstr "%s: nie można utworzyć gniazda replikacji \"%s\": jest %d wierszy i %d pól, oczekiwano %d wierszy i %d pól\n" -#~ msgid "%s: no start point returned from server\n" -#~ msgstr "%s: nie zwrócono punktu startowego z serwera\n" +#: streamutil.c:410 +#, c-format +msgid "%s: could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" +msgstr "%s: nie można skasować gniazda replikacji \"%s\": jest %d wierszy i %d pól, oczekiwano %d wierszy i %d pól\n" + +#~ msgid "%s: keepalive message has incorrect size %d\n" +#~ msgstr "%s: komunikat sygnalizowania aktywności ma niepoprawną długość %d\n" #~ msgid "%s: timeline does not match between base backup and streaming connection\n" #~ msgstr "%s: oś czasu różni się pomiędzy bazową kopią zapasową i połączeniem strumieniowym\n" -#~ msgid "%s: keepalive message has incorrect size %d\n" -#~ msgstr "%s: komunikat sygnalizowania aktywności ma niepoprawną długość %d\n" +#~ msgid "%s: no start point returned from server\n" +#~ msgstr "%s: nie zwrócono punktu startowego z serwera\n" + +#~ msgid "%s: could not parse transaction log file name \"%s\"\n" +#~ msgstr "%s: nie można sparsować nazwy pliku dziennika transakcji \"%s\"\n" diff --git a/src/bin/pg_basebackup/po/pt_BR.po b/src/bin/pg_basebackup/po/pt_BR.po index 772714a3bd67e..60ca723adf34b 100644 --- a/src/bin/pg_basebackup/po/pt_BR.po +++ b/src/bin/pg_basebackup/po/pt_BR.po @@ -1,13 +1,13 @@ # Brazilian Portuguese message translation file for pg_basebackup # Copyright (C) 2011 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Euler Taveira de Oliveira , 2012-2014. +# Euler Taveira de Oliveira , 2012-2015. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 17:38-0300\n" +"POT-Creation-Date: 2015-09-17 22:32-0300\n" "PO-Revision-Date: 2011-08-20 23:33-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -17,43 +17,43 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "sem memória\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "não pode duplicar ponteiro nulo (erro interno)\n" -#: pg_basebackup.c:153 +#: pg_basebackup.c:154 #, c-format msgid "%s: directory name too long\n" msgstr "%s: nome de diretório é muito longo\n" -#: pg_basebackup.c:163 +#: pg_basebackup.c:164 #, c-format msgid "%s: multiple \"=\" signs in tablespace mapping\n" msgstr "%s: múltiplos sinais \"=\" em mapeamento de tablespace\n" -#: pg_basebackup.c:176 +#: pg_basebackup.c:177 #, c-format msgid "%s: invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"\n" msgstr "%s: formato de mapeamento de tablespace \"%s\" é inválido, deve ser \"DIRANTIGO=DIRNOVO\"\n" -#: pg_basebackup.c:189 +#: pg_basebackup.c:190 #, c-format msgid "%s: old directory is not an absolute path in tablespace mapping: %s\n" msgstr "%s: diretório antigo não é um caminho absoluto no mapeamento de tablespace: %s\n" -#: pg_basebackup.c:196 +#: pg_basebackup.c:197 #, c-format msgid "%s: new directory is not an absolute path in tablespace mapping: %s\n" msgstr "%s: diretório novo não é um caminho absoluto no mapeamento de tablespace: %s\n" -#: pg_basebackup.c:227 +#: pg_basebackup.c:231 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -62,17 +62,17 @@ msgstr "" "%s faz uma cópia de segurança base de um servidor PostgreSQL em execução.\n" "\n" -#: pg_basebackup.c:229 pg_receivexlog.c:60 pg_recvlogical.c:67 +#: pg_basebackup.c:233 pg_receivexlog.c:66 pg_recvlogical.c:69 #, c-format msgid "Usage:\n" msgstr "Uso:\n" -#: pg_basebackup.c:230 pg_receivexlog.c:61 pg_recvlogical.c:68 +#: pg_basebackup.c:234 pg_receivexlog.c:67 pg_recvlogical.c:70 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPÇÃO]...\n" -#: pg_basebackup.c:231 +#: pg_basebackup.c:235 #, c-format msgid "" "\n" @@ -81,17 +81,17 @@ msgstr "" "\n" "Opções que controlam a saída:\n" -#: pg_basebackup.c:232 +#: pg_basebackup.c:236 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=DIRETÓRIO armazena a cópia de segurança base no diretório\n" -#: pg_basebackup.c:233 +#: pg_basebackup.c:237 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr " -F, --format=p|t formato de saída (texto (padrão), tar)\n" -#: pg_basebackup.c:234 +#: pg_basebackup.c:238 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -100,7 +100,7 @@ msgstr "" " -r, --max-rate=TAXA taxa de transferência máxima para enviar diretório de dados\n" " (em kB/s ou utilize sufixo \"k\" ou \"M\")\n" -#: pg_basebackup.c:236 +#: pg_basebackup.c:240 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -109,7 +109,7 @@ msgstr "" " -R, --write-recovery-conf\n" " escreve recovery.conf após cópia de segurança\n" -#: pg_basebackup.c:238 +#: pg_basebackup.c:242 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -118,12 +118,12 @@ msgstr "" " -T, --tablespace-mapping=DIRANTIGO=DIRNOVO\n" " realoca tablespace de DIRANTIGO para DIRNOVO\n" -#: pg_basebackup.c:240 +#: pg_basebackup.c:244 #, c-format msgid " -x, --xlog include required WAL files in backup (fetch mode)\n" msgstr " -x, --xlog inclui os arquivos do WAL requeridos na cópia de segurança (modo busca)\n" -#: pg_basebackup.c:241 +#: pg_basebackup.c:245 #, c-format msgid "" " -X, --xlog-method=fetch|stream\n" @@ -132,22 +132,22 @@ msgstr "" " -X, --xlog-method=fetch|stream\n" " inclui os arquivos do WAL requeridos na cópia de segurança\n" -#: pg_basebackup.c:243 +#: pg_basebackup.c:247 #, c-format msgid " --xlogdir=XLOGDIR location for the transaction log directory\n" msgstr " --xlogdir=DIRXLOG local do log de transação\n" -#: pg_basebackup.c:244 +#: pg_basebackup.c:248 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip comprime saída do tar\n" -#: pg_basebackup.c:245 +#: pg_basebackup.c:249 #, c-format msgid " -Z, --compress=0-9 compress tar output with given compression level\n" msgstr " -Z, --compress=0-9 comprime saída do tar com o nível de compressão informado\n" -#: pg_basebackup.c:246 +#: pg_basebackup.c:250 #, c-format msgid "" "\n" @@ -156,7 +156,7 @@ msgstr "" "\n" "Opções gerais:\n" -#: pg_basebackup.c:247 +#: pg_basebackup.c:251 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" @@ -165,32 +165,32 @@ msgstr "" " -c, --checkpoint=fast|spread\n" " define ponto de controle rápido ou distribuído\n" -#: pg_basebackup.c:249 +#: pg_basebackup.c:253 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=RÓTULO define rótulo da cópia de segurança\n" -#: pg_basebackup.c:250 +#: pg_basebackup.c:254 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress mostra informação de progresso\n" -#: pg_basebackup.c:251 pg_receivexlog.c:68 pg_recvlogical.c:86 +#: pg_basebackup.c:255 pg_receivexlog.c:76 pg_recvlogical.c:89 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose mostra mensagens de detalhe\n" -#: pg_basebackup.c:252 pg_receivexlog.c:69 pg_recvlogical.c:87 +#: pg_basebackup.c:256 pg_receivexlog.c:77 pg_recvlogical.c:90 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informação sobre a versão e termina\n" -#: pg_basebackup.c:253 pg_receivexlog.c:70 pg_recvlogical.c:88 +#: pg_basebackup.c:257 pg_receivexlog.c:78 pg_recvlogical.c:91 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra essa ajuda e termina\n" -#: pg_basebackup.c:254 pg_receivexlog.c:71 pg_recvlogical.c:89 +#: pg_basebackup.c:258 pg_receivexlog.c:79 pg_recvlogical.c:92 #, c-format msgid "" "\n" @@ -199,22 +199,22 @@ msgstr "" "\n" "Opções de conexão:\n" -#: pg_basebackup.c:255 pg_receivexlog.c:72 +#: pg_basebackup.c:259 pg_receivexlog.c:80 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=TEXTO cadeia de caracteres de conexão\n" -#: pg_basebackup.c:256 pg_receivexlog.c:73 pg_recvlogical.c:91 +#: pg_basebackup.c:260 pg_receivexlog.c:81 pg_recvlogical.c:94 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=MÁQUINA máquina do servidor de banco de dados ou diretório do soquete\n" -#: pg_basebackup.c:257 pg_receivexlog.c:74 pg_recvlogical.c:92 +#: pg_basebackup.c:261 pg_receivexlog.c:82 pg_recvlogical.c:95 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORTA número da porta do servidor de banco de dados\n" -#: pg_basebackup.c:258 +#: pg_basebackup.c:262 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -223,22 +223,22 @@ msgstr "" " -s, --status-interval=INTERVALO\n" " tempo entre envio de pacotes de status ao servidor (em segundos)\n" -#: pg_basebackup.c:260 pg_receivexlog.c:75 pg_recvlogical.c:93 +#: pg_basebackup.c:264 pg_receivexlog.c:83 pg_recvlogical.c:96 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NOME conecta como usuário do banco de dados especificado\n" -#: pg_basebackup.c:261 pg_receivexlog.c:76 pg_recvlogical.c:94 +#: pg_basebackup.c:265 pg_receivexlog.c:84 pg_recvlogical.c:97 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pergunta senha\n" -#: pg_basebackup.c:262 pg_receivexlog.c:77 pg_recvlogical.c:95 +#: pg_basebackup.c:266 pg_receivexlog.c:85 pg_recvlogical.c:98 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password pergunta senha (pode ocorrer automaticamente)\n" -#: pg_basebackup.c:263 pg_receivexlog.c:78 pg_recvlogical.c:96 +#: pg_basebackup.c:267 pg_receivexlog.c:89 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -247,390 +247,384 @@ msgstr "" "\n" "Relate erros a .\n" -#: pg_basebackup.c:306 +#: pg_basebackup.c:310 #, c-format msgid "%s: could not read from ready pipe: %s\n" msgstr "%s: não pôde ler do pipe: %s\n" -#: pg_basebackup.c:314 pg_basebackup.c:406 pg_basebackup.c:1877 -#: pg_receivexlog.c:301 pg_recvlogical.c:937 +#: pg_basebackup.c:318 pg_basebackup.c:411 pg_basebackup.c:1879 +#: streamutil.c:285 #, c-format msgid "%s: could not parse transaction log location \"%s\"\n" msgstr "%s: não pôde validar local do log de transação \"%s\"\n" -#: pg_basebackup.c:419 +#: pg_basebackup.c:424 #, c-format msgid "%s: could not create pipe for background process: %s\n" msgstr "%s: não pôde criar pipe para processo em segundo plano: %s\n" -#: pg_basebackup.c:452 +#: pg_basebackup.c:449 pg_basebackup.c:504 pg_basebackup.c:1262 +#, c-format +msgid "%s: could not create directory \"%s\": %s\n" +msgstr "%s: não pôde criar diretório \"%s\": %s\n" + +#: pg_basebackup.c:467 #, c-format msgid "%s: could not create background process: %s\n" msgstr "%s: não pôde criar processo em segundo plano: %s\n" -#: pg_basebackup.c:464 +#: pg_basebackup.c:479 #, c-format msgid "%s: could not create background thread: %s\n" msgstr "%s: não pôde criar thread em segundo plano: %s\n" -#: pg_basebackup.c:489 pg_basebackup.c:1246 -#, c-format -msgid "%s: could not create directory \"%s\": %s\n" -msgstr "%s: não pôde criar diretório \"%s\": %s\n" - -#: pg_basebackup.c:508 +#: pg_basebackup.c:523 #, c-format msgid "%s: directory \"%s\" exists but is not empty\n" msgstr "%s: diretório \"%s\" existe mas não está vazio\n" -#: pg_basebackup.c:516 +#: pg_basebackup.c:531 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: não pôde acessar diretório \"%s\": %s\n" -#: pg_basebackup.c:578 +#: pg_basebackup.c:593 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" msgstr[0] "%*s/%s kB (100%%), %d/%d tablespace %*s" msgstr[1] "%*s/%s kB (100%%), %d/%d tablespaces %*s" -#: pg_basebackup.c:590 +#: pg_basebackup.c:605 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" -#: pg_basebackup.c:606 +#: pg_basebackup.c:621 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" msgstr[0] "%*s/%s kB (%d%%), %d/%d tablespace" msgstr[1] "%*s/%s kB (%d%%), %d/%d tablespaces" -#: pg_basebackup.c:628 +#: pg_basebackup.c:643 #, c-format msgid "%s: transfer rate \"%s\" is not a valid value\n" msgstr "%s: taxa de transferência \"%s\" não é um valor válido\n" -#: pg_basebackup.c:635 +#: pg_basebackup.c:650 #, c-format msgid "%s: invalid transfer rate \"%s\": %s\n" msgstr "%s: taxa de transferência \"%s\" é inválida: %s\n" -#: pg_basebackup.c:645 +#: pg_basebackup.c:660 #, c-format msgid "%s: transfer rate must be greater than zero\n" msgstr "%s: taxa de transferência deve ser maior do que zero\n" -#: pg_basebackup.c:679 +#: pg_basebackup.c:694 #, c-format msgid "%s: invalid --max-rate unit: \"%s\"\n" msgstr "%s: unidade de --max-rate é inválida: \"%s\"\n" -#: pg_basebackup.c:688 +#: pg_basebackup.c:703 #, c-format msgid "%s: transfer rate \"%s\" exceeds integer range\n" msgstr "%s: taxa de transferência \"%s\" excede intervalo de inteiros\n" -#: pg_basebackup.c:700 +#: pg_basebackup.c:715 #, c-format msgid "%s: transfer rate \"%s\" is out of range\n" msgstr "%s: taxa de transferência \"%s\" está fora do intervalo\n" -#: pg_basebackup.c:724 +#: pg_basebackup.c:739 #, c-format msgid "%s: could not write to compressed file \"%s\": %s\n" msgstr "%s: não pôde escrever no arquivo comprimido \"%s\": %s\n" -#: pg_basebackup.c:734 pg_basebackup.c:1340 pg_basebackup.c:1558 +#: pg_basebackup.c:749 pg_basebackup.c:1356 pg_basebackup.c:1574 #, c-format msgid "%s: could not write to file \"%s\": %s\n" msgstr "%s: não pôde escrever no arquivo \"%s\": %s\n" -#: pg_basebackup.c:789 pg_basebackup.c:810 pg_basebackup.c:838 +#: pg_basebackup.c:804 pg_basebackup.c:825 pg_basebackup.c:853 #, c-format msgid "%s: could not set compression level %d: %s\n" msgstr "%s: não pôde definir nível de compressão %d: %s\n" -#: pg_basebackup.c:859 +#: pg_basebackup.c:874 #, c-format msgid "%s: could not create compressed file \"%s\": %s\n" msgstr "%s: não pôde criar arquivo comprimido \"%s\": %s\n" -#: pg_basebackup.c:870 pg_basebackup.c:1300 pg_basebackup.c:1551 +#: pg_basebackup.c:885 pg_basebackup.c:1316 pg_basebackup.c:1567 #, c-format msgid "%s: could not create file \"%s\": %s\n" msgstr "%s: não pôde criar arquivo \"%s\": %s\n" -#: pg_basebackup.c:882 pg_basebackup.c:1146 +#: pg_basebackup.c:897 pg_basebackup.c:1161 #, c-format msgid "%s: could not get COPY data stream: %s" msgstr "%s: não pôde obter fluxo de dados do COPY: %s" -#: pg_basebackup.c:939 +#: pg_basebackup.c:954 #, c-format msgid "%s: could not close compressed file \"%s\": %s\n" msgstr "%s: não pôde fechar arquivo comprimido \"%s\": %s\n" -#: pg_basebackup.c:952 pg_recvlogical.c:554 receivelog.c:160 receivelog.c:295 -#: receivelog.c:674 +#: pg_basebackup.c:967 pg_recvlogical.c:569 receivelog.c:213 receivelog.c:362 +#: receivelog.c:754 #, c-format msgid "%s: could not close file \"%s\": %s\n" msgstr "%s: não pôde fechar arquivo \"%s\": %s\n" -#: pg_basebackup.c:963 pg_basebackup.c:1175 pg_recvlogical.c:420 -#: receivelog.c:890 +#: pg_basebackup.c:978 pg_basebackup.c:1190 pg_recvlogical.c:435 +#: receivelog.c:1044 #, c-format msgid "%s: could not read COPY data: %s" msgstr "%s: não pôde ler dados do COPY: %s" -#: pg_basebackup.c:1189 +#: pg_basebackup.c:1204 #, c-format msgid "%s: invalid tar block header size: %d\n" msgstr "%s: tamanho do cabeçalho do bloco tar é inválido: %d\n" -#: pg_basebackup.c:1197 +#: pg_basebackup.c:1212 #, c-format msgid "%s: could not parse file size\n" msgstr "%s: não pôde obter tamanho do arquivo\n" -#: pg_basebackup.c:1205 +#: pg_basebackup.c:1220 #, c-format msgid "%s: could not parse file mode\n" msgstr "%s: não pôde obter modo do arquivo\n" -#: pg_basebackup.c:1254 +#: pg_basebackup.c:1270 #, c-format msgid "%s: could not set permissions on directory \"%s\": %s\n" msgstr "%s: não pôde definir permissões no diretório \"%s\": %s\n" -#: pg_basebackup.c:1278 +#: pg_basebackup.c:1294 #, c-format msgid "%s: could not create symbolic link from \"%s\" to \"%s\": %s\n" msgstr "%s: não pôde criar link simbólico de \"%s\" para \"%s\": %s\n" -#: pg_basebackup.c:1287 +#: pg_basebackup.c:1303 #, c-format msgid "%s: unrecognized link indicator \"%c\"\n" msgstr "%s: indicador de link \"%c\" desconhecido\n" -#: pg_basebackup.c:1307 +#: pg_basebackup.c:1323 #, c-format msgid "%s: could not set permissions on file \"%s\": %s\n" msgstr "%s: não pôde definir permissões no arquivo \"%s\": %s\n" -#: pg_basebackup.c:1366 +#: pg_basebackup.c:1382 #, c-format msgid "%s: COPY stream ended before last file was finished\n" msgstr "%s: fluxo do COPY terminou antes que o último arquivo estivesse completo\n" -#: pg_basebackup.c:1452 pg_basebackup.c:1472 pg_basebackup.c:1479 -#: pg_basebackup.c:1526 +#: pg_basebackup.c:1468 pg_basebackup.c:1488 pg_basebackup.c:1495 +#: pg_basebackup.c:1542 #, c-format msgid "%s: out of memory\n" msgstr "%s: sem memória\n" -#: pg_basebackup.c:1603 +#: pg_basebackup.c:1619 #, c-format msgid "%s: incompatible server version %s\n" msgstr "%s: versão do servidor %s é incompatível\n" -#: pg_basebackup.c:1630 pg_basebackup.c:1664 pg_receivexlog.c:286 -#: pg_recvlogical.c:255 pg_recvlogical.c:853 pg_recvlogical.c:886 -#: pg_recvlogical.c:921 receivelog.c:470 receivelog.c:521 receivelog.c:561 +#: pg_basebackup.c:1666 pg_recvlogical.c:261 receivelog.c:549 receivelog.c:600 +#: receivelog.c:641 streamutil.c:255 streamutil.c:353 streamutil.c:399 #, c-format msgid "%s: could not send replication command \"%s\": %s" msgstr "%s: não pôde enviar comando de replicação \"%s\": %s" -#: pg_basebackup.c:1637 pg_receivexlog.c:293 pg_recvlogical.c:861 -#: receivelog.c:478 -#, c-format -msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n" -msgstr "%s: não pôde identificar sistema: recebeu %d registros e %d campos, esperado %d registros e %d ou mais campos\n" - -#: pg_basebackup.c:1675 +#: pg_basebackup.c:1677 #, c-format msgid "%s: could not initiate base backup: %s" msgstr "%s: não pôde inicializar cópia de segurança base: %s" -#: pg_basebackup.c:1682 +#: pg_basebackup.c:1684 #, c-format msgid "%s: server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: servidor retornou resposta inesperada para comando BASE_BACKUP; recebeu %d registros e %d campos, esperado %d registros e %d campos\n" -#: pg_basebackup.c:1702 +#: pg_basebackup.c:1704 #, c-format msgid "transaction log start point: %s on timeline %u\n" msgstr "ponto de início do log de transação: %s na linha do tempo %u\n" -#: pg_basebackup.c:1711 +#: pg_basebackup.c:1713 #, c-format msgid "%s: could not get backup header: %s" msgstr "%s: não pôde obter cabeçalho da cópia de segurança: %s" -#: pg_basebackup.c:1717 +#: pg_basebackup.c:1719 #, c-format msgid "%s: no data returned from server\n" msgstr "%s: nenhum dado foi retornado do servidor\n" -#: pg_basebackup.c:1749 +#: pg_basebackup.c:1751 #, c-format msgid "%s: can only write single tablespace to stdout, database has %d\n" msgstr "%s: só pode escrever uma tablespace para saída padrão, banco de dados tem %d\n" -#: pg_basebackup.c:1761 +#: pg_basebackup.c:1763 #, c-format msgid "%s: starting background WAL receiver\n" msgstr "%s: iniciando receptor do WAL em segundo plano\n" -#: pg_basebackup.c:1792 +#: pg_basebackup.c:1794 #, c-format msgid "%s: could not get transaction log end position from server: %s" msgstr "%s: não pôde obter posição final do log de transação do servidor: %s" -#: pg_basebackup.c:1799 +#: pg_basebackup.c:1801 #, c-format msgid "%s: no transaction log end position returned from server\n" msgstr "%s: nenhuma posição final do log de transação foi retornada do servidor\n" -#: pg_basebackup.c:1811 +#: pg_basebackup.c:1813 #, c-format msgid "%s: final receive failed: %s" msgstr "%s: recepção final falhou: %s" -#: pg_basebackup.c:1829 +#: pg_basebackup.c:1831 #, c-format msgid "%s: waiting for background process to finish streaming ...\n" msgstr "%s: esperando processo em segundo plano terminar o envio ...\n" -#: pg_basebackup.c:1835 +#: pg_basebackup.c:1837 #, c-format msgid "%s: could not send command to background pipe: %s\n" msgstr "%s: não pôde enviar comando para pipe em segundo plano: %s\n" -#: pg_basebackup.c:1844 +#: pg_basebackup.c:1846 #, c-format msgid "%s: could not wait for child process: %s\n" msgstr "%s: não pôde esperar por processo filho: %s\n" -#: pg_basebackup.c:1850 +#: pg_basebackup.c:1852 #, c-format msgid "%s: child %d died, expected %d\n" msgstr "%s: processo filho %d morreu, esperado %d\n" -#: pg_basebackup.c:1856 +#: pg_basebackup.c:1858 #, c-format msgid "%s: child process did not exit normally\n" msgstr "%s: processo filho não terminou normalmente\n" -#: pg_basebackup.c:1862 +#: pg_basebackup.c:1864 #, c-format msgid "%s: child process exited with error %d\n" msgstr "%s: processo filho terminou com código de saída %d\n" -#: pg_basebackup.c:1889 +#: pg_basebackup.c:1891 #, c-format msgid "%s: could not wait for child thread: %s\n" msgstr "%s: não pôde esperar por thread filho: %s\n" -#: pg_basebackup.c:1896 +#: pg_basebackup.c:1898 #, c-format msgid "%s: could not get child thread exit status: %s\n" msgstr "%s: não pôde obter status de saída de thread filho: %s\n" -#: pg_basebackup.c:1902 +#: pg_basebackup.c:1904 #, c-format msgid "%s: child thread exited with error %u\n" msgstr "%s: thread filho terminou com erro %u\n" -#: pg_basebackup.c:1991 +#: pg_basebackup.c:1993 #, c-format msgid "%s: invalid output format \"%s\", must be \"plain\" or \"tar\"\n" msgstr "%s: formato de saída \"%s\" é inválido, deve ser \"plain\" ou \"tar\"\n" -#: pg_basebackup.c:2009 pg_basebackup.c:2021 +#: pg_basebackup.c:2011 pg_basebackup.c:2023 #, c-format msgid "%s: cannot specify both --xlog and --xlog-method\n" msgstr "%s: não pode especificar ambas opções --xlog e --xlog-method\n" -#: pg_basebackup.c:2036 +#: pg_basebackup.c:2038 #, c-format msgid "%s: invalid xlog-method option \"%s\", must be \"fetch\" or \"stream\"\n" msgstr "%s: opção de xlog-method \"%s\" é inválida, deve ser \"fetch\" ou \"stream\"\n" -#: pg_basebackup.c:2058 +#: pg_basebackup.c:2060 #, c-format msgid "%s: invalid compression level \"%s\"\n" msgstr "%s: nível de compressão \"%s\" é inválido\n" -#: pg_basebackup.c:2070 +#: pg_basebackup.c:2072 #, c-format msgid "%s: invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"\n" msgstr "%s: argumento de ponto de controle \"%s\" é inválido, deve ser \"fast\" ou \"spread\"\n" -#: pg_basebackup.c:2097 pg_receivexlog.c:428 pg_recvlogical.c:736 +#: pg_basebackup.c:2099 pg_receivexlog.c:439 pg_recvlogical.c:752 #, c-format msgid "%s: invalid status interval \"%s\"\n" msgstr "%s: intervalo do status \"%s\" é inválido\n" -#: pg_basebackup.c:2113 pg_basebackup.c:2127 pg_basebackup.c:2138 -#: pg_basebackup.c:2151 pg_basebackup.c:2161 pg_basebackup.c:2173 -#: pg_basebackup.c:2184 pg_receivexlog.c:447 pg_receivexlog.c:461 -#: pg_receivexlog.c:472 pg_recvlogical.c:760 pg_recvlogical.c:774 -#: pg_recvlogical.c:785 pg_recvlogical.c:793 pg_recvlogical.c:801 -#: pg_recvlogical.c:809 pg_recvlogical.c:817 pg_recvlogical.c:825 +#: pg_basebackup.c:2115 pg_basebackup.c:2129 pg_basebackup.c:2140 +#: pg_basebackup.c:2153 pg_basebackup.c:2163 pg_basebackup.c:2175 +#: pg_basebackup.c:2186 pg_receivexlog.c:471 pg_receivexlog.c:485 +#: pg_receivexlog.c:493 pg_receivexlog.c:503 pg_receivexlog.c:514 +#: pg_recvlogical.c:779 pg_recvlogical.c:793 pg_recvlogical.c:804 +#: pg_recvlogical.c:812 pg_recvlogical.c:820 pg_recvlogical.c:828 +#: pg_recvlogical.c:836 pg_recvlogical.c:844 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Tente \"%s --help\" para obter informações adicionais.\n" -#: pg_basebackup.c:2125 pg_receivexlog.c:459 pg_recvlogical.c:772 +#: pg_basebackup.c:2127 pg_receivexlog.c:483 pg_recvlogical.c:791 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: muitos argumentos de linha de comando (primeiro é \"%s\")\n" -#: pg_basebackup.c:2137 pg_receivexlog.c:471 +#: pg_basebackup.c:2139 pg_receivexlog.c:513 #, c-format msgid "%s: no target directory specified\n" msgstr "%s: nenhum diretório de destino foi especificado\n" -#: pg_basebackup.c:2149 +#: pg_basebackup.c:2151 #, c-format msgid "%s: only tar mode backups can be compressed\n" msgstr "%s: somente cópias de segurança com modo tar podem ser comprimidas\n" -#: pg_basebackup.c:2159 +#: pg_basebackup.c:2161 #, c-format msgid "%s: WAL streaming can only be used in plain mode\n" msgstr "%s: envio do WAL só pode ser utilizado no modo plain\n" -#: pg_basebackup.c:2171 +#: pg_basebackup.c:2173 #, c-format msgid "%s: transaction log directory location can only be specified in plain mode\n" msgstr "%s: diretório do log de transação só pode ser especificado no modo plain\n" -#: pg_basebackup.c:2182 +#: pg_basebackup.c:2184 #, c-format msgid "%s: transaction log directory location must be an absolute path\n" msgstr "%s: diretório do log de transação deve ter um caminho absoluto\n" -#: pg_basebackup.c:2194 +#: pg_basebackup.c:2196 #, c-format msgid "%s: this build does not support compression\n" msgstr "%s: esse programa binário não suporta compressão\n" -#: pg_basebackup.c:2221 +#: pg_basebackup.c:2223 #, c-format msgid "%s: could not create symbolic link \"%s\": %s\n" msgstr "%s: não pôde criar link simbólico \"%s\": %s\n" -#: pg_basebackup.c:2226 +#: pg_basebackup.c:2228 #, c-format msgid "%s: symlinks are not supported on this platform\n" msgstr "%s: links simbólicos não são suportados nessa plataforma\n" -#: pg_receivexlog.c:58 +#: pg_receivexlog.c:64 #, c-format msgid "" "%s receives PostgreSQL streaming transaction logs.\n" @@ -639,7 +633,7 @@ msgstr "" "%s recebe fluxo de logs de transação do PostgreSQL.\n" "\n" -#: pg_receivexlog.c:62 pg_recvlogical.c:73 +#: pg_receivexlog.c:68 pg_recvlogical.c:75 #, c-format msgid "" "\n" @@ -648,17 +642,22 @@ msgstr "" "\n" "Opções:\n" -#: pg_receivexlog.c:63 +#: pg_receivexlog.c:69 #, c-format msgid " -D, --directory=DIR receive transaction log files into this directory\n" msgstr " -D, --directory=DIR recebe arquivos de log de transação neste diretório\n" -#: pg_receivexlog.c:64 pg_recvlogical.c:78 +#: pg_receivexlog.c:70 pg_recvlogical.c:79 +#, c-format +msgid " --if-not-exists do not error if slot already exists when creating a slot\n" +msgstr " --if-not-exists não emite erro se a entrada já existe ao criar uma entrada\n" + +#: pg_receivexlog.c:71 pg_recvlogical.c:81 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" msgstr " -n, --no-loop não tentar novamente ao perder a conexão\n" -#: pg_receivexlog.c:65 pg_recvlogical.c:83 +#: pg_receivexlog.c:72 pg_recvlogical.c:86 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -667,82 +666,132 @@ msgstr "" " -s, --status-interval=INTERVALO\n" " tempo entre envio de pacotes de status ao servidor (padrâo: %d)\n" -#: pg_receivexlog.c:67 +#: pg_receivexlog.c:74 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=NOME entrada de replicação a ser utilizada\n" -#: pg_receivexlog.c:89 +#: pg_receivexlog.c:75 +#, c-format +msgid " --synchronous flush transaction log immediately after writing\n" +msgstr " --synchronous escreve log de transação no disco imediatamente após a escrita\n" + +#: pg_receivexlog.c:86 +#, c-format +msgid "" +"\n" +"Optional actions:\n" +msgstr "" +"\n" +"Ações opcionais:\n" + +#: pg_receivexlog.c:87 pg_recvlogical.c:72 +#, c-format +msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" +msgstr " --create-slot cria uma nova entrada de replicação (para nome da entrada veja --slot)\n" + +#: pg_receivexlog.c:88 pg_recvlogical.c:73 +#, c-format +msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" +msgstr " --drop-slot remove a entrada de replicação (para nome da entrada veja --slot)\n" + +#: pg_receivexlog.c:100 #, c-format msgid "%s: finished segment at %X/%X (timeline %u)\n" msgstr "%s: terminou o segmento em %X/%X (linha do tempo %u)\n" -#: pg_receivexlog.c:102 +#: pg_receivexlog.c:113 #, c-format msgid "%s: switched to timeline %u at %X/%X\n" msgstr "%s: passou para linha do tempo %u em %X/%X\n" -#: pg_receivexlog.c:111 +#: pg_receivexlog.c:122 #, c-format msgid "%s: received interrupt signal, exiting\n" msgstr "%s: recebeu sinal de interrupção, terminando\n" -#: pg_receivexlog.c:137 +#: pg_receivexlog.c:142 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: não pôde abrir diretório \"%s\": %s\n" -#: pg_receivexlog.c:187 +#: pg_receivexlog.c:160 +#, c-format +msgid "%s: could not close directory \"%s\": %s\n" +msgstr "%s: não pôde fechar diretório \"%s\": %s\n" + +#: pg_receivexlog.c:218 pg_recvlogical.c:343 #, c-format msgid "%s: could not stat file \"%s\": %s\n" msgstr "%s: não pôde executar stat no arquivo \"%s\": %s\n" -#: pg_receivexlog.c:195 +#: pg_receivexlog.c:226 #, c-format msgid "%s: segment file \"%s\" has incorrect size %d, skipping\n" msgstr "%s: arquivo de segmento \"%s\" tem tamanho incorreto %d, ignorando\n" -#: pg_receivexlog.c:214 +#: pg_receivexlog.c:245 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: não pôde ler diretório \"%s\": %s\n" -#: pg_receivexlog.c:221 -#, c-format -msgid "%s: could not close directory \"%s\": %s\n" -msgstr "%s: não pôde fechar diretório \"%s\": %s\n" - -#: pg_receivexlog.c:328 +#: pg_receivexlog.c:331 #, c-format msgid "%s: starting log streaming at %X/%X (timeline %u)\n" msgstr "%s: iniciando fluxo de log em %X/%X (linha do tempo %u)\n" -#: pg_receivexlog.c:409 pg_recvlogical.c:683 +#: pg_receivexlog.c:420 pg_recvlogical.c:699 #, c-format msgid "%s: invalid port number \"%s\"\n" msgstr "%s: número de porta inválido: \"%s\"\n" -#: pg_receivexlog.c:494 pg_recvlogical.c:964 +#: pg_receivexlog.c:492 +#, c-format +msgid "%s: cannot use --create-slot together with --drop-slot\n" +msgstr "%s: não pode utilizar --create-slot junto com --drop-slot\n" + +#. translator: second %s is an option name +#: pg_receivexlog.c:501 +#, c-format +msgid "%s: %s needs a slot to be specified using --slot\n" +msgstr "%s: %s precisa que uma entrada seja especificada utilizando --slot\n" + +#: pg_receivexlog.c:556 +#, c-format +msgid "%s: replication connection using slot \"%s\" is unexpectedly database specific\n" +msgstr "%s: conexão de replicação utilizando entrada \"%s\" é inesperadamente específica a um banco de dados\n" + +#: pg_receivexlog.c:568 pg_recvlogical.c:884 +#, c-format +msgid "%s: dropping replication slot \"%s\"\n" +msgstr "%s: removendo entrada de replicação \"%s\"\n" + +#: pg_receivexlog.c:581 pg_recvlogical.c:896 +#, c-format +msgid "%s: creating replication slot \"%s\"\n" +msgstr "%s: criando entrada de replicação \"%s\"\n" + +#: pg_receivexlog.c:608 pg_recvlogical.c:922 #, c-format msgid "%s: disconnected\n" msgstr "%s: desconectado\n" #. translator: check source for value for %d -#: pg_receivexlog.c:501 pg_recvlogical.c:971 +#: pg_receivexlog.c:615 pg_recvlogical.c:929 #, c-format msgid "%s: disconnected; waiting %d seconds to try again\n" msgstr "%s: desconectado; esperando %d segundos para tentar novamente\n" -#: pg_recvlogical.c:65 +#: pg_recvlogical.c:67 #, c-format msgid "" -"%s receives PostgreSQL logical change streams.\n" +"%s controls PostgreSQL logical decoding streams.\n" "\n" msgstr "" -"%s recebe fluxos de replicação lógica do PostgreSQL.\n" +"%s controla fluxos de replicação lógica do PostgreSQL.\n" "\n" -#: pg_recvlogical.c:69 +#: pg_recvlogical.c:71 #, c-format msgid "" "\n" @@ -751,27 +800,17 @@ msgstr "" "\n" "Ação a ser executada:\n" -#: pg_recvlogical.c:70 -#, c-format -msgid " --create-slot create a new replication slot (for the slot's name see --slot)\n" -msgstr " --create-slot cria uma nova entrada de replicação (para nome da entrada veja --slot)\n" - -#: pg_recvlogical.c:71 -#, c-format -msgid " --drop-slot drop the replication slot (for the slot's name see --slot)\n" -msgstr " --drop-slot remove a entrada de replicação (para nome da entrada veja --slot)\n" - -#: pg_recvlogical.c:72 +#: pg_recvlogical.c:74 #, c-format msgid " --start start streaming in a replication slot (for the slot's name see --slot)\n" msgstr " --start inicia fluxo na entrada de replicação (para nome da entrada veja --slot)\n" -#: pg_recvlogical.c:74 +#: pg_recvlogical.c:76 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr " -f, --file=ARQUIVO recebe log neste arquivo, - para saída padrão\n" -#: pg_recvlogical.c:75 +#: pg_recvlogical.c:77 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -780,12 +819,12 @@ msgstr "" " -F, --fsync-interval=SEGS\n" " tempo entre fsyncs no arquivo de saída (padrão: %d)\n" -#: pg_recvlogical.c:77 +#: pg_recvlogical.c:80 #, c-format msgid " -I, --startpos=LSN where in an existing slot should the streaming start\n" msgstr " -I, --startpos=LSN onde o fluxo deve iniciar na entrada existente\n" -#: pg_recvlogical.c:79 +#: pg_recvlogical.c:82 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -796,301 +835,313 @@ msgstr "" " passa opção NOME com valor opcional VALOR para o\n" " plugin de saída\n" -#: pg_recvlogical.c:82 +#: pg_recvlogical.c:85 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr " -P, --plugin=PLUGIN utiliza o plugin de saída PLUGIN (padrão: %s)\n" -#: pg_recvlogical.c:85 +#: pg_recvlogical.c:88 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=NOME nome da entrada de replicação lógica\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:93 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=NOMEBD banco de dados ao qual quer se conectar\n" -#: pg_recvlogical.c:123 +#: pg_recvlogical.c:126 #, c-format msgid "%s: confirming write up to %X/%X, flush to %X/%X (slot %s)\n" msgstr "%s: confirmando escrita até %X/%X, escrita no disco até %X/%X (entrada %s)\n" -#: pg_recvlogical.c:148 receivelog.c:340 +#: pg_recvlogical.c:151 receivelog.c:415 #, c-format msgid "%s: could not send feedback packet: %s" msgstr "%s: não pôde enviar pacote de retorno: %s" -#: pg_recvlogical.c:184 +#: pg_recvlogical.c:190 #, c-format msgid "%s: could not fsync log file \"%s\": %s\n" msgstr "%s: não pôde executar fsync no arquivo de log \"%s\": %s\n" -#: pg_recvlogical.c:223 +#: pg_recvlogical.c:229 #, c-format msgid "%s: starting log streaming at %X/%X (slot %s)\n" msgstr "%s: iniciando fluxo de log em %X/%X (entrada %s)\n" -#: pg_recvlogical.c:265 +#: pg_recvlogical.c:271 #, c-format msgid "%s: streaming initiated\n" msgstr "%s: fluxo iniciado\n" -#: pg_recvlogical.c:328 +#: pg_recvlogical.c:336 #, c-format msgid "%s: could not open log file \"%s\": %s\n" msgstr "%s: não pôde abrir arquivo de log \"%s\": %s\n" -#: pg_recvlogical.c:397 receivelog.c:837 +#: pg_recvlogical.c:412 receivelog.c:980 #, c-format msgid "%s: select() failed: %s\n" msgstr "%s: select() falhou: %s\n" -#: pg_recvlogical.c:406 receivelog.c:845 +#: pg_recvlogical.c:421 receivelog.c:1030 #, c-format msgid "%s: could not receive data from WAL stream: %s" msgstr "%s: não pôde receber dados do fluxo do WAL: %s" -#: pg_recvlogical.c:447 pg_recvlogical.c:486 receivelog.c:912 receivelog.c:966 +#: pg_recvlogical.c:462 pg_recvlogical.c:501 receivelog.c:1075 +#: receivelog.c:1144 #, c-format msgid "%s: streaming header too small: %d\n" msgstr "%s: cabeçalho de fluxo muito pequeno: %d\n" -#: pg_recvlogical.c:469 receivelog.c:1072 +#: pg_recvlogical.c:484 receivelog.c:924 #, c-format msgid "%s: unrecognized streaming header: \"%c\"\n" msgstr "%s: cabeçalho de fluxo desconhecido: \"%c\"\n" -#: pg_recvlogical.c:515 pg_recvlogical.c:529 +#: pg_recvlogical.c:530 pg_recvlogical.c:544 #, c-format msgid "%s: could not write %u bytes to log file \"%s\": %s\n" msgstr "%s: não pôde escrever %u bytes no arquivo de log \"%s\": %s\n" -#: pg_recvlogical.c:540 receivelog.c:627 receivelog.c:665 +#: pg_recvlogical.c:555 receivelog.c:707 receivelog.c:745 #, c-format msgid "%s: unexpected termination of replication stream: %s" msgstr "%s: término inesperado do fluxo de replicação: %s" -#: pg_recvlogical.c:662 +#: pg_recvlogical.c:678 #, c-format msgid "%s: invalid fsync interval \"%s\"\n" msgstr "%s: intervalo de fsync \"%s\" é inválido\n" -#: pg_recvlogical.c:703 +#: pg_recvlogical.c:719 #, c-format msgid "%s: could not parse start position \"%s\"\n" msgstr "%s: não pôde validar posição inicial \"%s\"\n" -#: pg_recvlogical.c:784 +#: pg_recvlogical.c:803 #, c-format msgid "%s: no slot specified\n" msgstr "%s: nenhuma entrada especificada\n" -#: pg_recvlogical.c:792 +#: pg_recvlogical.c:811 #, c-format msgid "%s: no target file specified\n" msgstr "%s: nenhum arquivo de destino foi especificado\n" -#: pg_recvlogical.c:800 +#: pg_recvlogical.c:819 #, c-format msgid "%s: no database specified\n" msgstr "%s: nenhum banco de dados especificado\n" -#: pg_recvlogical.c:808 +#: pg_recvlogical.c:827 #, c-format msgid "%s: at least one action needs to be specified\n" msgstr "%s: pelo menos uma ação precisa ser especificada\n" -#: pg_recvlogical.c:816 +#: pg_recvlogical.c:835 #, c-format msgid "%s: cannot use --create-slot or --start together with --drop-slot\n" msgstr "%s: não pode utilizar --create-slot ou --start junto com --drop-slot\n" -#: pg_recvlogical.c:824 +#: pg_recvlogical.c:843 #, c-format msgid "%s: cannot use --create-slot or --drop-slot together with --startpos\n" msgstr "%s: não pode utilizar --create-slot ou --drop-slot junto com --startpos\n" -#: pg_recvlogical.c:878 +#: pg_recvlogical.c:874 #, c-format -msgid "%s: dropping replication slot \"%s\"\n" -msgstr "%s: removendo entrada de replicação \"%s\"\n" +msgid "%s: could not establish database-specific replication connection\n" +msgstr "%s: não pôde estabelecer conexão de replicação a um banco de dados específico\n" -#: pg_recvlogical.c:894 +#: receivelog.c:75 #, c-format -msgid "%s: could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" -msgstr "%s: não pôde remover entrada de replicação \"%s\": recebeu %d registros e %d campos, esperado %d registros e %d campos\n" +msgid "%s: could not create archive status file \"%s\": %s\n" +msgstr "%s: não pôde criar arquivo de status do arquivador \"%s\": %s\n" -#: pg_recvlogical.c:912 +#: receivelog.c:82 receivelog.c:206 receivelog.c:355 receivelog.c:848 +#: receivelog.c:1096 #, c-format -msgid "%s: creating replication slot \"%s\"\n" -msgstr "%s: criando entrada de replicação \"%s\"\n" - -#: pg_recvlogical.c:929 -#, c-format -msgid "%s: could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" -msgstr "%s: não pôde criar entrada de replicação \"%s\": recebeu %d registros e %d campos, esperado %d registros e %d campos\n" +msgid "%s: could not fsync file \"%s\": %s\n" +msgstr "%s: não pôde executar fsync no arquivo \"%s\": %s\n" -#: receivelog.c:68 +#: receivelog.c:121 #, c-format msgid "%s: could not open transaction log file \"%s\": %s\n" msgstr "%s: não pôde abrir arquivo de log de transação \"%s\": %s\n" -#: receivelog.c:80 +#: receivelog.c:133 #, c-format msgid "%s: could not stat transaction log file \"%s\": %s\n" msgstr "%s: não pôde executar stat no arquivo de log de transação \"%s\": %s\n" -#: receivelog.c:94 +#: receivelog.c:147 #, c-format msgid "%s: transaction log file \"%s\" has %d bytes, should be 0 or %d\n" msgstr "%s: arquivo de log de transação \"%s\" tem %d bytes, deveria ser 0 ou %d\n" -#: receivelog.c:107 +#: receivelog.c:160 #, c-format msgid "%s: could not pad transaction log file \"%s\": %s\n" msgstr "%s: não pôde preencher arquivo de log de transação \"%s\": %s\n" -#: receivelog.c:120 +#: receivelog.c:173 #, c-format msgid "%s: could not seek to beginning of transaction log file \"%s\": %s\n" msgstr "%s: não pôde buscar início do arquivo de log de transação \"%s\": %s\n" -#: receivelog.c:146 +#: receivelog.c:199 #, c-format msgid "%s: could not determine seek position in file \"%s\": %s\n" msgstr "%s: não pôde determinar posição de busca no arquivo \"%s\": %s\n" -#: receivelog.c:153 receivelog.c:288 receivelog.c:933 -#, c-format -msgid "%s: could not fsync file \"%s\": %s\n" -msgstr "%s: não pôde executar fsync no arquivo \"%s\": %s\n" - -#: receivelog.c:179 +#: receivelog.c:232 #, c-format msgid "%s: could not rename file \"%s\": %s\n" msgstr "%s: não pôde renomear arquivo \"%s\": %s\n" -#: receivelog.c:186 +#: receivelog.c:239 #, c-format msgid "%s: not renaming \"%s%s\", segment is not complete\n" msgstr "%s: não renomeará \"%s%s\", segmento não está completo\n" -#: receivelog.c:219 +#: receivelog.c:285 #, c-format msgid "%s: could not open timeline history file \"%s\": %s\n" msgstr "%s: não pôde abrir arquivo de histórico da linha do tempo \"%s\": %s\n" -#: receivelog.c:246 +#: receivelog.c:313 #, c-format msgid "%s: server reported unexpected history file name for timeline %u: %s\n" msgstr "%s: servidor relatou nome de arquivo de histórico inesperado para linha do tempo %u: %s\n" -#: receivelog.c:263 +#: receivelog.c:330 #, c-format msgid "%s: could not create timeline history file \"%s\": %s\n" msgstr "%s: não pôde criar arquivo de histórico da linha do tempo \"%s\": %s\n" -#: receivelog.c:280 +#: receivelog.c:347 #, c-format msgid "%s: could not write timeline history file \"%s\": %s\n" msgstr "%s: não pôde escrever no arquivo de histórico da linha do tempo \"%s\": %s\n" -#: receivelog.c:305 +#: receivelog.c:372 #, c-format msgid "%s: could not rename file \"%s\" to \"%s\": %s\n" msgstr "%s: não pôde renomear arquivo \"%s\" para \"%s\": %s\n" -#: receivelog.c:374 +#: receivelog.c:449 #, c-format msgid "%s: incompatible server version %s; client does not support streaming from server versions older than %s\n" msgstr "%s: versão do servidor %s é incompatível; cliente não suporta fluxo de versões do servidor mais antigas do que %s\n" -#: receivelog.c:384 +#: receivelog.c:459 #, c-format msgid "%s: incompatible server version %s; client does not support streaming from server versions newer than %s\n" msgstr "%s: versão do servidor %s é incompatível; cliente não suporta fluxo de versões do servidor mais novas do que %s\n" -#: receivelog.c:486 +#: receivelog.c:557 streamutil.c:264 streamutil.c:299 +#, c-format +msgid "%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n" +msgstr "%s: não pôde identificar sistema: recebeu %d registros e %d campos, esperado %d registros e %d ou mais campos\n" + +#: receivelog.c:565 #, c-format msgid "%s: system identifier does not match between base backup and streaming connection\n" msgstr "%s: identificador do sistema não corresponde entre cópia base e conexão de envio do WAL\n" -#: receivelog.c:494 +#: receivelog.c:573 #, c-format msgid "%s: starting timeline %u is not present in the server\n" msgstr "%s: linha do tempo inicial %u não está presente no servidor\n" -#: receivelog.c:534 +#: receivelog.c:613 #, c-format msgid "%s: unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: resposta inesperada para comando TIMELINE_HISTORY: recebeu %d registros e %d campos, esperado %d registros e %d campos\n" -#: receivelog.c:608 +#: receivelog.c:688 #, c-format msgid "%s: server reported unexpected next timeline %u, following timeline %u\n" msgstr "%s: servidor relatou próxima linha do tempo %u inesperada, seguindo linha do tempo %u\n" -#: receivelog.c:615 +#: receivelog.c:695 #, c-format msgid "%s: server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X\n" msgstr "%s: servidor parou de enviar linha do tempo %u em %X/%X, mas relatou próxima linha do tempo %u começando em %X/%X\n" -#: receivelog.c:656 +#: receivelog.c:736 #, c-format msgid "%s: replication stream was terminated before stop point\n" msgstr "%s: fluxo de replicação foi terminado antes do ponto de parada\n" -#: receivelog.c:705 +#: receivelog.c:785 #, c-format msgid "%s: unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields\n" msgstr "%s: conjunto de resultados inesperado após fim da linha do tempo: recebeu %d registros e %d campos, esperado %d registros e %d campos\n" -#: receivelog.c:715 +#: receivelog.c:795 #, c-format msgid "%s: could not parse next timeline's starting point \"%s\"\n" msgstr "%s: não pôde validar ponto de partida da próxima linha do tempo \"%s\"\n" -#: receivelog.c:770 receivelog.c:873 receivelog.c:1059 +#: receivelog.c:959 #, c-format -msgid "%s: could not send copy-end packet: %s" -msgstr "%s: não pôde enviar pacote indicando fim de cópia: %s" +msgid "%s: socket not open" +msgstr "%s: soquete não está aberto" -#: receivelog.c:985 +#: receivelog.c:1163 #, c-format msgid "%s: received transaction log record for offset %u with no file open\n" msgstr "%s: recebeu registro do log de transação para posição %u sem um arquivo aberto\n" -#: receivelog.c:997 +#: receivelog.c:1175 #, c-format msgid "%s: got WAL data offset %08x, expected %08x\n" msgstr "%s: recebeu dados do WAL da posição %08x, esperada %08x\n" -#: receivelog.c:1034 +#: receivelog.c:1212 #, c-format msgid "%s: could not write %u bytes to WAL file \"%s\": %s\n" msgstr "%s: não pôde escrever %u bytes no arquivo do WAL \"%s\": %s\n" -#: streamutil.c:142 +#: receivelog.c:1237 receivelog.c:1279 receivelog.c:1311 +#, c-format +msgid "%s: could not send copy-end packet: %s" +msgstr "%s: não pôde enviar pacote indicando fim de cópia: %s" + +#: streamutil.c:145 msgid "Password: " msgstr "Senha: " -#: streamutil.c:166 +#: streamutil.c:169 #, c-format msgid "%s: could not connect to server\n" msgstr "%s: não pôde se conectar ao servidor\n" -#: streamutil.c:184 +#: streamutil.c:187 #, c-format -msgid "%s: could not connect to server: %s\n" -msgstr "%s: não pôde se conectar ao servidor: %s\n" +msgid "%s: could not connect to server: %s" +msgstr "%s: não pôde se conectar ao servidor: %s" -#: streamutil.c:208 +#: streamutil.c:211 #, c-format msgid "%s: could not determine server setting for integer_datetimes\n" msgstr "%s: não pôde determinar valor do parâmetro integer_datetimes do servidor\n" -#: streamutil.c:221 +#: streamutil.c:224 #, c-format msgid "%s: integer_datetimes compile flag does not match server\n" msgstr "%s: opção de compilação integer_datetimes não corresponde com a do servidor\n" + +#: streamutil.c:365 +#, c-format +msgid "%s: could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" +msgstr "%s: não pôde criar entrada de replicação \"%s\": recebeu %d registros e %d campos, esperado %d registros e %d campos\n" + +#: streamutil.c:410 +#, c-format +msgid "%s: could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n" +msgstr "%s: não pôde remover entrada de replicação \"%s\": recebeu %d registros e %d campos, esperado %d registros e %d campos\n" diff --git a/src/bin/pg_basebackup/po/ru.po b/src/bin/pg_basebackup/po/ru.po index 50e712fe44a72..178bcba575ce5 100644 --- a/src/bin/pg_basebackup/po/ru.po +++ b/src/bin/pg_basebackup/po/ru.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9 current\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-01-09 16:12+0000\n" -"PO-Revision-Date: 2015-01-12 07:46+0300\n" +"POT-Creation-Date: 2015-07-22 00:13+0000\n" +"PO-Revision-Date: 2015-07-27 15:35+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -25,13 +25,13 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Lokalize 1.5\n" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" @@ -68,7 +68,7 @@ msgstr "" "%s: новый каталог в сопоставлении табл. пространства задан не абсолютным " "путём: %s\n" -#: pg_basebackup.c:228 +#: pg_basebackup.c:231 #, c-format msgid "" "%s takes a base backup of a running PostgreSQL server.\n" @@ -77,17 +77,17 @@ msgstr "" "%s делает базовую резервную копию работающего сервера PostgreSQL.\n" "\n" -#: pg_basebackup.c:230 pg_receivexlog.c:60 pg_recvlogical.c:67 +#: pg_basebackup.c:233 pg_receivexlog.c:66 pg_recvlogical.c:69 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_basebackup.c:231 pg_receivexlog.c:61 pg_recvlogical.c:68 +#: pg_basebackup.c:234 pg_receivexlog.c:67 pg_recvlogical.c:70 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [ПАРАМЕТР]...\n" -#: pg_basebackup.c:232 +#: pg_basebackup.c:235 #, c-format msgid "" "\n" @@ -96,19 +96,19 @@ msgstr "" "\n" "Параметры, управляющие выводом:\n" -#: pg_basebackup.c:233 +#: pg_basebackup.c:236 #, c-format msgid " -D, --pgdata=DIRECTORY receive base backup into directory\n" msgstr " -D, --pgdata=КАТАЛОГ сохранить базовую копию в указанный каталог\n" -#: pg_basebackup.c:234 +#: pg_basebackup.c:237 #, c-format msgid " -F, --format=p|t output format (plain (default), tar)\n" msgstr "" " -F, --format=p|t формат вывода (p (по умолчанию) - простой, t - " "tar)\n" -#: pg_basebackup.c:235 +#: pg_basebackup.c:238 #, c-format msgid "" " -r, --max-rate=RATE maximum transfer rate to transfer data directory\n" @@ -117,7 +117,7 @@ msgstr "" " -r, --max-rate=СКОРОСТЬ макс. скорость передачи данных в целевой каталог\n" " (в КБ/с, либо добавьте суффикс \"k\" или \"M\")\n" -#: pg_basebackup.c:237 +#: pg_basebackup.c:240 #, c-format msgid "" " -R, --write-recovery-conf\n" @@ -126,7 +126,7 @@ msgstr "" " -R, --write-recovery-conf\n" " записать recovery.conf после копирования\n" -#: pg_basebackup.c:239 +#: pg_basebackup.c:242 #, c-format msgid "" " -T, --tablespace-mapping=OLDDIR=NEWDIR\n" @@ -137,14 +137,14 @@ msgstr "" "каталога\n" " в новый\n" -#: pg_basebackup.c:241 +#: pg_basebackup.c:244 #, c-format msgid "" " -x, --xlog include required WAL files in backup (fetch mode)\n" msgstr "" " -x, --xlog включить в копию требуемые файлы WAL (режим fetch)\n" -#: pg_basebackup.c:242 +#: pg_basebackup.c:245 #, c-format msgid "" " -X, --xlog-method=fetch|stream\n" @@ -154,25 +154,25 @@ msgstr "" " включить в копию требуемые файлы WAL, используя\n" " заданный метод\n" -#: pg_basebackup.c:244 +#: pg_basebackup.c:247 #, c-format msgid " --xlogdir=XLOGDIR location for the transaction log directory\n" msgstr "" " --xlogdir=КАТАЛОГ_XLOG\n" " расположение каталога с журналом транзакций\n" -#: pg_basebackup.c:245 +#: pg_basebackup.c:248 #, c-format msgid " -z, --gzip compress tar output\n" msgstr " -z, --gzip сжать выходной tar\n" -#: pg_basebackup.c:246 +#: pg_basebackup.c:249 #, c-format msgid "" " -Z, --compress=0-9 compress tar output with given compression level\n" msgstr " -Z, --compress=0-9 установить уровень сжатия выходного архива\n" -#: pg_basebackup.c:247 +#: pg_basebackup.c:250 #, c-format msgid "" "\n" @@ -181,7 +181,7 @@ msgstr "" "\n" "Общие параметры:\n" -#: pg_basebackup.c:248 +#: pg_basebackup.c:251 #, c-format msgid "" " -c, --checkpoint=fast|spread\n" @@ -190,32 +190,32 @@ msgstr "" " -c, --checkpoint=fast|spread\n" " режим быстрых или распределённых контрольных точек\n" -#: pg_basebackup.c:250 +#: pg_basebackup.c:253 #, c-format msgid " -l, --label=LABEL set backup label\n" msgstr " -l, --label=МЕТКА установить метку резервной копии\n" -#: pg_basebackup.c:251 +#: pg_basebackup.c:254 #, c-format msgid " -P, --progress show progress information\n" msgstr " -P, --progress показывать прогресс операции\n" -#: pg_basebackup.c:252 pg_receivexlog.c:68 pg_recvlogical.c:86 +#: pg_basebackup.c:255 pg_receivexlog.c:76 pg_recvlogical.c:89 #, c-format msgid " -v, --verbose output verbose messages\n" msgstr " -v, --verbose выводить подробные сообщения\n" -#: pg_basebackup.c:253 pg_receivexlog.c:69 pg_recvlogical.c:87 +#: pg_basebackup.c:256 pg_receivexlog.c:77 pg_recvlogical.c:90 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_basebackup.c:254 pg_receivexlog.c:70 pg_recvlogical.c:88 +#: pg_basebackup.c:257 pg_receivexlog.c:78 pg_recvlogical.c:91 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_basebackup.c:255 pg_receivexlog.c:71 pg_recvlogical.c:89 +#: pg_basebackup.c:258 pg_receivexlog.c:79 pg_recvlogical.c:92 #, c-format msgid "" "\n" @@ -224,22 +224,22 @@ msgstr "" "\n" "Параметры подключения:\n" -#: pg_basebackup.c:256 pg_receivexlog.c:72 +#: pg_basebackup.c:259 pg_receivexlog.c:80 #, c-format msgid " -d, --dbname=CONNSTR connection string\n" msgstr " -d, --dbname=СТРОКА строка подключения\n" -#: pg_basebackup.c:257 pg_receivexlog.c:73 pg_recvlogical.c:91 +#: pg_basebackup.c:260 pg_receivexlog.c:81 pg_recvlogical.c:94 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n" -#: pg_basebackup.c:258 pg_receivexlog.c:74 pg_recvlogical.c:92 +#: pg_basebackup.c:261 pg_receivexlog.c:82 pg_recvlogical.c:95 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=ПОРТ номер порта сервера БД\n" -#: pg_basebackup.c:259 +#: pg_basebackup.c:262 #, c-format msgid "" " -s, --status-interval=INTERVAL\n" @@ -250,19 +250,19 @@ msgstr "" " интервал между передаваемыми серверу\n" " пакетами состояния (в секундах)\n" -#: pg_basebackup.c:261 pg_receivexlog.c:75 pg_recvlogical.c:93 +#: pg_basebackup.c:264 pg_receivexlog.c:83 pg_recvlogical.c:96 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr "" " -U, --username=NAME connect as specified database user\n" " -U, --username=ИМЯ имя пользователя баз данных\n" -#: pg_basebackup.c:262 pg_receivexlog.c:76 pg_recvlogical.c:94 +#: pg_basebackup.c:265 pg_receivexlog.c:84 pg_recvlogical.c:97 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: pg_basebackup.c:263 pg_receivexlog.c:77 pg_recvlogical.c:95 +#: pg_basebackup.c:266 pg_receivexlog.c:85 pg_recvlogical.c:98 #, c-format msgid "" " -W, --password force password prompt (should happen " @@ -270,7 +270,7 @@ msgid "" msgstr "" " -W, --password запрашивать пароль всегда (обычно не требуется)\n" -#: pg_basebackup.c:264 pg_receivexlog.c:78 pg_recvlogical.c:96 +#: pg_basebackup.c:267 pg_receivexlog.c:89 pg_recvlogical.c:99 #, c-format msgid "" "\n" @@ -279,48 +279,48 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу .\n" -#: pg_basebackup.c:307 +#: pg_basebackup.c:310 #, c-format msgid "%s: could not read from ready pipe: %s\n" msgstr "%s: не удалось прочитать из готового канала: %s\n" -#: pg_basebackup.c:315 pg_basebackup.c:408 pg_basebackup.c:1890 -#: pg_receivexlog.c:301 pg_recvlogical.c:937 +#: pg_basebackup.c:318 pg_basebackup.c:411 pg_basebackup.c:1879 +#: streamutil.c:285 #, c-format msgid "%s: could not parse transaction log location \"%s\"\n" msgstr "%s: не удалось разобрать положение в журнале транзакций \"%s\"\n" -#: pg_basebackup.c:421 +#: pg_basebackup.c:424 #, c-format msgid "%s: could not create pipe for background process: %s\n" msgstr "%s: не удалось создать канал для фонового процесса: %s\n" -#: pg_basebackup.c:446 pg_basebackup.c:501 pg_basebackup.c:1259 +#: pg_basebackup.c:449 pg_basebackup.c:504 pg_basebackup.c:1262 #, c-format msgid "%s: could not create directory \"%s\": %s\n" msgstr "%s: не удалось создать каталог \"%s\": %s\n" -#: pg_basebackup.c:464 +#: pg_basebackup.c:467 #, c-format msgid "%s: could not create background process: %s\n" msgstr "%s: не удалось создать фоновый процесс: %s\n" -#: pg_basebackup.c:476 +#: pg_basebackup.c:479 #, c-format msgid "%s: could not create background thread: %s\n" msgstr "%s: не удалось создать фоновый поток выполнения: %s\n" -#: pg_basebackup.c:520 +#: pg_basebackup.c:523 #, c-format msgid "%s: directory \"%s\" exists but is not empty\n" msgstr "%s: каталог \"%s\" существует, но он не пуст\n" -#: pg_basebackup.c:528 +#: pg_basebackup.c:531 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: нет доступа к каталогу \"%s\": %s\n" -#: pg_basebackup.c:590 +#: pg_basebackup.c:593 #, c-format msgid "%*s/%s kB (100%%), %d/%d tablespace %*s" msgid_plural "%*s/%s kB (100%%), %d/%d tablespaces %*s" @@ -328,7 +328,7 @@ msgstr[0] "%*s/%s КБ (100%%), табличное пространство %d/% msgstr[1] "%*s/%s КБ (100%%), табличное пространство %d/%d %*s" msgstr[2] "%*s/%s КБ (100%%), табличное пространство %d/%d %*s" -#: pg_basebackup.c:602 +#: pg_basebackup.c:605 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace (%s%-*.*s)" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces (%s%-*.*s)" @@ -336,7 +336,7 @@ msgstr[0] "%*s/%s КБ (%d%%), табличное пространство %d/%d msgstr[1] "%*s/%s КБ (%d%%), табличное пространство %d/%d (%s%-*.*s)" msgstr[2] "%*s/%s КБ (%d%%), табличное пространство %d/%d (%s%-*.*s)" -#: pg_basebackup.c:618 +#: pg_basebackup.c:621 #, c-format msgid "%*s/%s kB (%d%%), %d/%d tablespace" msgid_plural "%*s/%s kB (%d%%), %d/%d tablespaces" @@ -344,157 +344,146 @@ msgstr[0] "%*s/%s КБ (%d%%), табличное пространство %d/%d msgstr[1] "%*s/%s КБ (%d%%), табличное пространство %d/%d" msgstr[2] "%*s/%s КБ (%d%%), табличное пространство %d/%d" -#: pg_basebackup.c:640 +#: pg_basebackup.c:643 #, c-format msgid "%s: transfer rate \"%s\" is not a valid value\n" msgstr "%s: неверное значение (\"%s\") для скорости передачи данных\n" -#: pg_basebackup.c:647 +#: pg_basebackup.c:650 #, c-format msgid "%s: invalid transfer rate \"%s\": %s\n" msgstr "%s: неверная скорость передачи данных \"%s\": %s\n" -#: pg_basebackup.c:657 +#: pg_basebackup.c:660 #, c-format msgid "%s: transfer rate must be greater than zero\n" msgstr "%s: скорость передачи должна быть больше 0\n" -#: pg_basebackup.c:691 +#: pg_basebackup.c:694 #, c-format msgid "%s: invalid --max-rate unit: \"%s\"\n" msgstr "%s: неверная единица измерения в --max-rate: \"%s\"\n" -#: pg_basebackup.c:700 +#: pg_basebackup.c:703 #, c-format msgid "%s: transfer rate \"%s\" exceeds integer range\n" msgstr "%s: скорость передачи \"%s\" вне целочисленного диапазона\n" -#: pg_basebackup.c:712 +#: pg_basebackup.c:715 #, c-format msgid "%s: transfer rate \"%s\" is out of range\n" msgstr "%s: скорость передачи \"%s\" вне диапазона\n" -#: pg_basebackup.c:736 +#: pg_basebackup.c:739 #, c-format msgid "%s: could not write to compressed file \"%s\": %s\n" msgstr "%s: не удалось записать файл сжатого архива \"%s\": %s\n" -#: pg_basebackup.c:746 pg_basebackup.c:1353 pg_basebackup.c:1571 +#: pg_basebackup.c:749 pg_basebackup.c:1356 pg_basebackup.c:1574 #, c-format msgid "%s: could not write to file \"%s\": %s\n" msgstr "%s: не удалось записать файл \"%s\": %s\n" -#: pg_basebackup.c:801 pg_basebackup.c:822 pg_basebackup.c:850 +#: pg_basebackup.c:804 pg_basebackup.c:825 pg_basebackup.c:853 #, c-format msgid "%s: could not set compression level %d: %s\n" msgstr "%s: не удалось установить уровень сжатия %d: %s\n" -#: pg_basebackup.c:871 +#: pg_basebackup.c:874 #, c-format msgid "%s: could not create compressed file \"%s\": %s\n" msgstr "%s: не удалось создать файл сжатого архива \"%s\": %s\n" -#: pg_basebackup.c:882 pg_basebackup.c:1313 pg_basebackup.c:1564 +#: pg_basebackup.c:885 pg_basebackup.c:1316 pg_basebackup.c:1567 #, c-format msgid "%s: could not create file \"%s\": %s\n" msgstr "%s: не удалось создать файл \"%s\": %s\n" -#: pg_basebackup.c:894 pg_basebackup.c:1158 +#: pg_basebackup.c:897 pg_basebackup.c:1161 #, c-format msgid "%s: could not get COPY data stream: %s" msgstr "%s: не удалось получить поток данных COPY: %s" -#: pg_basebackup.c:951 +#: pg_basebackup.c:954 #, c-format msgid "%s: could not close compressed file \"%s\": %s\n" msgstr "%s: не удалось закрыть сжатый файл \"%s\": %s\n" -#: pg_basebackup.c:964 pg_recvlogical.c:554 receivelog.c:193 receivelog.c:342 -#: receivelog.c:731 +#: pg_basebackup.c:967 pg_recvlogical.c:569 receivelog.c:213 receivelog.c:362 +#: receivelog.c:754 #, c-format msgid "%s: could not close file \"%s\": %s\n" msgstr "%s: не удалось закрыть файл \"%s\": %s\n" -#: pg_basebackup.c:975 pg_basebackup.c:1187 pg_recvlogical.c:420 -#: receivelog.c:947 +#: pg_basebackup.c:978 pg_basebackup.c:1190 pg_recvlogical.c:435 +#: receivelog.c:1044 #, c-format msgid "%s: could not read COPY data: %s" msgstr "%s: не удалось прочитать данные COPY: %s" -#: pg_basebackup.c:1201 +#: pg_basebackup.c:1204 #, c-format msgid "%s: invalid tar block header size: %d\n" msgstr "%s: неверный размер заголовка блока tar: %d\n" -#: pg_basebackup.c:1209 +#: pg_basebackup.c:1212 #, c-format msgid "%s: could not parse file size\n" msgstr "%s: не удалось разобрать размер файла\n" -#: pg_basebackup.c:1217 +#: pg_basebackup.c:1220 #, c-format msgid "%s: could not parse file mode\n" msgstr "%s: не удалось разобрать режим файла\n" -#: pg_basebackup.c:1267 +#: pg_basebackup.c:1270 #, c-format msgid "%s: could not set permissions on directory \"%s\": %s\n" msgstr "%s: не удалось установить права для каталога \"%s\": %s\n" -#: pg_basebackup.c:1291 +#: pg_basebackup.c:1294 #, c-format msgid "%s: could not create symbolic link from \"%s\" to \"%s\": %s\n" msgstr "%s: не удалось создать символическую ссылку \"%s\" в \"%s\": %s\n" -#: pg_basebackup.c:1300 +#: pg_basebackup.c:1303 #, c-format msgid "%s: unrecognized link indicator \"%c\"\n" msgstr "%s: нераспознанный индикатор связи \"%c\"\n" -#: pg_basebackup.c:1320 +#: pg_basebackup.c:1323 #, c-format msgid "%s: could not set permissions on file \"%s\": %s\n" msgstr "%s: не удалось установить права доступа для файла \"%s\": %s\n" -#: pg_basebackup.c:1379 +#: pg_basebackup.c:1382 #, c-format msgid "%s: COPY stream ended before last file was finished\n" msgstr "%s: поток COPY закончился до завершения последнего файла\n" -#: pg_basebackup.c:1465 pg_basebackup.c:1485 pg_basebackup.c:1492 -#: pg_basebackup.c:1539 +#: pg_basebackup.c:1468 pg_basebackup.c:1488 pg_basebackup.c:1495 +#: pg_basebackup.c:1542 #, c-format msgid "%s: out of memory\n" msgstr "%s: нехватка памяти\n" -#: pg_basebackup.c:1616 +#: pg_basebackup.c:1619 #, c-format msgid "%s: incompatible server version %s\n" msgstr "%s: несовместимая версия сервера %s\n" -#: pg_basebackup.c:1643 pg_basebackup.c:1677 pg_receivexlog.c:286 -#: pg_recvlogical.c:255 pg_recvlogical.c:853 pg_recvlogical.c:886 -#: pg_recvlogical.c:921 receivelog.c:526 receivelog.c:577 receivelog.c:618 +#: pg_basebackup.c:1666 pg_recvlogical.c:261 receivelog.c:549 receivelog.c:600 +#: receivelog.c:641 streamutil.c:255 streamutil.c:351 streamutil.c:397 #, c-format msgid "%s: could not send replication command \"%s\": %s" msgstr "%s: не удалось передать команду репликации \"%s\": %s" -#: pg_basebackup.c:1650 pg_receivexlog.c:293 pg_recvlogical.c:861 -#: receivelog.c:534 -#, c-format -msgid "" -"%s: could not identify system: got %d rows and %d fields, expected %d rows " -"and %d or more fields\n" -msgstr "" -"%s: не удалось идентифицировать систему, получено строк: %d, полей: %d " -"(ожидалось: %d и %d (или более))\n" - -#: pg_basebackup.c:1688 +#: pg_basebackup.c:1677 #, c-format msgid "%s: could not initiate base backup: %s" msgstr "%s: не удалось инициализировать базовое резервное копирование: %s" -#: pg_basebackup.c:1695 +#: pg_basebackup.c:1684 #, c-format msgid "" "%s: server returned unexpected response to BASE_BACKUP command; got %d rows " @@ -503,105 +492,105 @@ msgstr "" "%s: сервер вернул неожиданный ответ на команду BASE_BACKUP; получено строк: " "%d, полей: %d, а ожидалось строк: %d, полей: %d\n" -#: pg_basebackup.c:1715 +#: pg_basebackup.c:1704 #, c-format msgid "transaction log start point: %s on timeline %u\n" msgstr "стартовая точка журнала транзакций: %s на линии времени %u\n" -#: pg_basebackup.c:1724 +#: pg_basebackup.c:1713 #, c-format msgid "%s: could not get backup header: %s" msgstr "%s: не удалось получить заголовок резервной копии: %s" -#: pg_basebackup.c:1730 +#: pg_basebackup.c:1719 #, c-format msgid "%s: no data returned from server\n" msgstr "%s: сервер не вернул данные\n" -#: pg_basebackup.c:1762 +#: pg_basebackup.c:1751 #, c-format msgid "%s: can only write single tablespace to stdout, database has %d\n" msgstr "" "%s: в stdout можно вывести только одно табличное пространство, всего в СУБД " "их %d\n" -#: pg_basebackup.c:1774 +#: pg_basebackup.c:1763 #, c-format msgid "%s: starting background WAL receiver\n" msgstr "%s: запуск фонового процесса считывания WAL\n" -#: pg_basebackup.c:1805 +#: pg_basebackup.c:1794 #, c-format msgid "%s: could not get transaction log end position from server: %s" msgstr "" "%s: не удалось получить конечную позицию в журнале транзакций с сервера: %s" -#: pg_basebackup.c:1812 +#: pg_basebackup.c:1801 #, c-format msgid "%s: no transaction log end position returned from server\n" msgstr "%s: сервер не вернул конечную позицию в журнале транзакций\n" -#: pg_basebackup.c:1824 +#: pg_basebackup.c:1813 #, c-format msgid "%s: final receive failed: %s" msgstr "%s: ошибка в конце передачи: %s" -#: pg_basebackup.c:1842 +#: pg_basebackup.c:1831 #, c-format msgid "%s: waiting for background process to finish streaming ...\n" msgstr "%s: ожидание завершения потоковой передачи фоновым процессом...\n" -#: pg_basebackup.c:1848 +#: pg_basebackup.c:1837 #, c-format msgid "%s: could not send command to background pipe: %s\n" msgstr "%s: не удалось отправить команду в канал фонового процесса: %s\n" -#: pg_basebackup.c:1857 +#: pg_basebackup.c:1846 #, c-format msgid "%s: could not wait for child process: %s\n" msgstr "%s: сбой при ожидании дочернего процесса: %s\n" -#: pg_basebackup.c:1863 +#: pg_basebackup.c:1852 #, c-format msgid "%s: child %d died, expected %d\n" msgstr "%s: завершился дочерний процесс %d вместо ожидаемого %d\n" -#: pg_basebackup.c:1869 +#: pg_basebackup.c:1858 #, c-format msgid "%s: child process did not exit normally\n" msgstr "%s: дочерний процесс завершён ненормально\n" -#: pg_basebackup.c:1875 +#: pg_basebackup.c:1864 #, c-format msgid "%s: child process exited with error %d\n" msgstr "%s: дочерний процесс завершился с ошибкой %d\n" -#: pg_basebackup.c:1902 +#: pg_basebackup.c:1891 #, c-format msgid "%s: could not wait for child thread: %s\n" msgstr "%s: сбой при ожидании дочернего потока: %s\n" -#: pg_basebackup.c:1909 +#: pg_basebackup.c:1898 #, c-format msgid "%s: could not get child thread exit status: %s\n" msgstr "%s: не удалось получить состояние завершения дочернего потока: %s\n" -#: pg_basebackup.c:1915 +#: pg_basebackup.c:1904 #, c-format msgid "%s: child thread exited with error %u\n" msgstr "%s: дочерний поток завершился с ошибкой %u\n" -#: pg_basebackup.c:2004 +#: pg_basebackup.c:1993 #, c-format msgid "%s: invalid output format \"%s\", must be \"plain\" or \"tar\"\n" msgstr "%s: неверный формат вывода \"%s\", должен быть \"plain\" или \"tar\"\n" -#: pg_basebackup.c:2022 pg_basebackup.c:2034 +#: pg_basebackup.c:2011 pg_basebackup.c:2023 #, c-format msgid "%s: cannot specify both --xlog and --xlog-method\n" msgstr "%s: указать и --xlog, и --xlog-method одновременно нельзя\n" -#: pg_basebackup.c:2049 +#: pg_basebackup.c:2038 #, c-format msgid "" "%s: invalid xlog-method option \"%s\", must be \"fetch\" or \"stream\"\n" @@ -609,12 +598,12 @@ msgstr "" "%s: неверный аргумент для xlog-method - \"%s\", допускается только \"fetch\" " "или \"stream\"\n" -#: pg_basebackup.c:2071 +#: pg_basebackup.c:2060 #, c-format msgid "%s: invalid compression level \"%s\"\n" msgstr "%s: неверный уровень сжатия \"%s\"\n" -#: pg_basebackup.c:2083 +#: pg_basebackup.c:2072 #, c-format msgid "" "%s: invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"\n" @@ -622,42 +611,43 @@ msgstr "" "%s: неверный аргумент режима контрольных точек \"%s\", должен быть \"fast\" " "или \"spread\"\n" -#: pg_basebackup.c:2110 pg_receivexlog.c:429 pg_recvlogical.c:736 +#: pg_basebackup.c:2099 pg_receivexlog.c:439 pg_recvlogical.c:752 #, c-format msgid "%s: invalid status interval \"%s\"\n" msgstr "%s: неверный интервал сообщений о состоянии \"%s\"\n" -#: pg_basebackup.c:2126 pg_basebackup.c:2140 pg_basebackup.c:2151 -#: pg_basebackup.c:2164 pg_basebackup.c:2174 pg_basebackup.c:2186 -#: pg_basebackup.c:2197 pg_receivexlog.c:448 pg_receivexlog.c:462 -#: pg_receivexlog.c:473 pg_recvlogical.c:760 pg_recvlogical.c:774 -#: pg_recvlogical.c:785 pg_recvlogical.c:793 pg_recvlogical.c:801 -#: pg_recvlogical.c:809 pg_recvlogical.c:817 pg_recvlogical.c:825 +#: pg_basebackup.c:2115 pg_basebackup.c:2129 pg_basebackup.c:2140 +#: pg_basebackup.c:2153 pg_basebackup.c:2163 pg_basebackup.c:2175 +#: pg_basebackup.c:2186 pg_receivexlog.c:471 pg_receivexlog.c:485 +#: pg_receivexlog.c:493 pg_receivexlog.c:503 pg_receivexlog.c:514 +#: pg_recvlogical.c:779 pg_recvlogical.c:793 pg_recvlogical.c:804 +#: pg_recvlogical.c:812 pg_recvlogical.c:820 pg_recvlogical.c:828 +#: pg_recvlogical.c:836 pg_recvlogical.c:844 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_basebackup.c:2138 pg_receivexlog.c:460 pg_recvlogical.c:772 +#: pg_basebackup.c:2127 pg_receivexlog.c:483 pg_recvlogical.c:791 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: слишком много аргументов командной строки (первый: \"%s\")\n" -#: pg_basebackup.c:2150 pg_receivexlog.c:472 +#: pg_basebackup.c:2139 pg_receivexlog.c:513 #, c-format msgid "%s: no target directory specified\n" msgstr "%s: целевой каталог не указан\n" -#: pg_basebackup.c:2162 +#: pg_basebackup.c:2151 #, c-format msgid "%s: only tar mode backups can be compressed\n" msgstr "%s: сжимать можно только резервные копии в архиве tar\n" -#: pg_basebackup.c:2172 +#: pg_basebackup.c:2161 #, c-format msgid "%s: WAL streaming can only be used in plain mode\n" msgstr "%s: потоковая передача WAL поддерживается только в режиме plain\n" -#: pg_basebackup.c:2184 +#: pg_basebackup.c:2173 #, c-format msgid "" "%s: transaction log directory location can only be specified in plain mode\n" @@ -665,29 +655,29 @@ msgstr "" "%s: расположение каталога журнала транзакций можно указать только в режиме " "plain\n" -#: pg_basebackup.c:2195 +#: pg_basebackup.c:2184 #, c-format msgid "%s: transaction log directory location must be an absolute path\n" msgstr "" "%s: расположение каталога журнала транзакций должно определяться абсолютным " "путём\n" -#: pg_basebackup.c:2207 +#: pg_basebackup.c:2196 #, c-format msgid "%s: this build does not support compression\n" msgstr "%s: эта сборка программы не поддерживает сжатие\n" -#: pg_basebackup.c:2234 +#: pg_basebackup.c:2223 #, c-format msgid "%s: could not create symbolic link \"%s\": %s\n" msgstr "%s: не удалось создать символическую ссылку \"%s\": %s\n" -#: pg_basebackup.c:2239 +#: pg_basebackup.c:2228 #, c-format msgid "%s: symlinks are not supported on this platform\n" msgstr "%s: символические ссылки не поддерживаются в этой ОС\n" -#: pg_receivexlog.c:58 +#: pg_receivexlog.c:64 #, c-format msgid "" "%s receives PostgreSQL streaming transaction logs.\n" @@ -696,7 +686,7 @@ msgstr "" "%s получает транслируемые журналы транзакций PostgreSQL.\n" "\n" -#: pg_receivexlog.c:62 pg_recvlogical.c:73 +#: pg_receivexlog.c:68 pg_recvlogical.c:75 #, c-format msgid "" "\n" @@ -705,7 +695,7 @@ msgstr "" "\n" "Параметры:\n" -#: pg_receivexlog.c:63 +#: pg_receivexlog.c:69 #, c-format msgid "" " -D, --directory=DIR receive transaction log files into this directory\n" @@ -713,12 +703,21 @@ msgstr "" " -D, --directory=ПУТЬ сохранять файлы журналов транзакций в данный " "каталог\n" -#: pg_receivexlog.c:64 pg_recvlogical.c:78 +#: pg_receivexlog.c:70 pg_recvlogical.c:79 +#, c-format +msgid "" +" --if-not-exists do not treat naming conflicts as an error when " +"creating a slot\n" +msgstr "" +" --if-not-exists при создании слота не считать конфликты имён " +"ошибкой\n" + +#: pg_receivexlog.c:71 pg_recvlogical.c:81 #, c-format msgid " -n, --no-loop do not loop on connection lost\n" -msgstr " -n, --no-loop прерывать работу при потере соединения\n" +msgstr " -n, --no-loop прерывать работу при потере соединения\n" -#: pg_receivexlog.c:65 pg_recvlogical.c:83 +#: pg_receivexlog.c:72 pg_recvlogical.c:86 #, c-format msgid "" " -s, --status-interval=SECS\n" @@ -729,83 +728,147 @@ msgstr "" " интервал между отправкой статусных пакетов серверу " "(по умолчанию: %d)\n" -#: pg_receivexlog.c:67 +#: pg_receivexlog.c:74 #, c-format msgid " -S, --slot=SLOTNAME replication slot to use\n" msgstr " -S, --slot=ИМЯ_СЛОТА использовать заданный слот репликации\n" -#: pg_receivexlog.c:89 +#: pg_receivexlog.c:75 +#, c-format +msgid "" +" --synchronous flush transaction log immediately after writing\n" +msgstr "" +" --synchronous сбрасывать журнал транзакций сразу после записи\n" + +#: pg_receivexlog.c:86 +#, c-format +msgid "" +"\n" +"Optional actions:\n" +msgstr "" +"\n" +"Дополнительные действия:\n" + +#: pg_receivexlog.c:87 pg_recvlogical.c:72 +#, c-format +msgid "" +" --create-slot create a new replication slot (for the slot's name " +"see --slot)\n" +msgstr "" +" --create-slot создать новый слот репликации (имя слота задаёт " +"параметр --slot)\n" + +#: pg_receivexlog.c:88 pg_recvlogical.c:73 +#, c-format +msgid "" +" --drop-slot drop the replication slot (for the slot's name see " +"--slot)\n" +msgstr "" +" --drop-slot удалить слот репликации (имя слота задаёт параметр " +"--slot)\n" + +#: pg_receivexlog.c:100 #, c-format msgid "%s: finished segment at %X/%X (timeline %u)\n" msgstr "%s: завершён сегмент %X/%X (линия времени %u)\n" -#: pg_receivexlog.c:102 +#: pg_receivexlog.c:113 #, c-format msgid "%s: switched to timeline %u at %X/%X\n" msgstr "%s: переключение на линию времени %u (позиция %X/%X)\n" -#: pg_receivexlog.c:111 +#: pg_receivexlog.c:122 #, c-format msgid "%s: received interrupt signal, exiting\n" msgstr "%s: получен сигнал прерывания, работа завершается\n" -#: pg_receivexlog.c:137 +#: pg_receivexlog.c:142 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: не удалось открыть каталог \"%s\": %s\n" -#: pg_receivexlog.c:187 +#: pg_receivexlog.c:160 +#, c-format +msgid "%s: could not close directory \"%s\": %s\n" +msgstr "%s: не удалось закрыть каталог \"%s\": %s\n" + +#: pg_receivexlog.c:218 pg_recvlogical.c:343 #, c-format msgid "%s: could not stat file \"%s\": %s\n" msgstr "%s: не удалось получить информацию о файле \"%s\": %s\n" -#: pg_receivexlog.c:195 +#: pg_receivexlog.c:226 #, c-format msgid "%s: segment file \"%s\" has incorrect size %d, skipping\n" msgstr "" "%s: файл сегмента \"%s\" имеет неправильный размер %d, файл пропускается\n" -#: pg_receivexlog.c:214 +#: pg_receivexlog.c:245 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: не удалось прочитать каталог \"%s\": %s\n" -#: pg_receivexlog.c:221 -#, c-format -msgid "%s: could not close directory \"%s\": %s\n" -msgstr "%s: не удалось закрыть каталог \"%s\": %s\n" - -#: pg_receivexlog.c:328 +#: pg_receivexlog.c:331 #, c-format msgid "%s: starting log streaming at %X/%X (timeline %u)\n" msgstr "%s: начало передачи журнала с позиции %X/%X (линия времени %u)\n" -#: pg_receivexlog.c:410 pg_recvlogical.c:683 +#: pg_receivexlog.c:420 pg_recvlogical.c:699 #, c-format msgid "%s: invalid port number \"%s\"\n" msgstr "%s: неверный номер порта \"%s\"\n" -#: pg_receivexlog.c:495 pg_recvlogical.c:964 +#: pg_receivexlog.c:492 +#, c-format +msgid "%s: cannot use --create-slot together with --drop-slot\n" +msgstr "%s: --create-slot нельзя применять вместе с --drop-slot\n" + +#. translator: second %s is an option name +#: pg_receivexlog.c:501 +#, c-format +msgid "%s: %s needs a slot to be specified using --slot\n" +msgstr "%s: для %s необходимо задать слот с помощью параметра --slot\n" + +#: pg_receivexlog.c:556 +#, c-format +msgid "" +"%s: replication connection using slot \"%s\" is unexpectedly database " +"specific\n" +msgstr "" +"%s: подключение для репликации через слот \"%s\" оказалось привязано к базе " +"данных\n" + +#: pg_receivexlog.c:568 pg_recvlogical.c:884 +#, c-format +msgid "%s: dropping replication slot \"%s\"\n" +msgstr "%s: удаление слота репликации \"%s\"\n" + +#: pg_receivexlog.c:581 pg_recvlogical.c:896 +#, c-format +msgid "%s: creating replication slot \"%s\"\n" +msgstr "%s: создание слота репликации \"%s\"\n" + +#: pg_receivexlog.c:607 pg_recvlogical.c:922 #, c-format msgid "%s: disconnected\n" msgstr "%s: отключение\n" #. translator: check source for value for %d -#: pg_receivexlog.c:502 pg_recvlogical.c:971 +#: pg_receivexlog.c:614 pg_recvlogical.c:929 #, c-format msgid "%s: disconnected; waiting %d seconds to try again\n" msgstr "%s: отключение; через %d сек. последует повторное подключение\n" -#: pg_recvlogical.c:65 +#: pg_recvlogical.c:67 #, c-format msgid "" -"%s receives PostgreSQL logical change streams.\n" +"%s controls PostgreSQL logical decoding streams.\n" "\n" msgstr "" -"%s получает потоки логических изменений PostgreSQL.\n" +"%s управляет потоками логического декодирования PostgreSQL.\n" "\n" -#: pg_recvlogical.c:69 +#: pg_recvlogical.c:71 #, c-format msgid "" "\n" @@ -814,25 +877,7 @@ msgstr "" "\n" "Действие, которое будет выполнено:\n" -#: pg_recvlogical.c:70 -#, c-format -msgid "" -" --create-slot create a new replication slot (for the slot's name " -"see --slot)\n" -msgstr "" -" --create-slot создать новый слот репликации (имя слота задаёт " -"параметр --slot)\n" - -#: pg_recvlogical.c:71 -#, c-format -msgid "" -" --drop-slot drop the replication slot (for the slot's name see " -"--slot)\n" -msgstr "" -" --drop-slot удалить слот репликации (имя слота задаёт параметр " -"--slot)\n" - -#: pg_recvlogical.c:72 +#: pg_recvlogical.c:74 #, c-format msgid "" " --start start streaming in a replication slot (for the " @@ -841,13 +886,13 @@ msgstr "" " --start начать передачу в слоте репликации (имя слота " "задаёт параметр --slot)\n" -#: pg_recvlogical.c:74 +#: pg_recvlogical.c:76 #, c-format msgid " -f, --file=FILE receive log into this file, - for stdout\n" msgstr "" " -f, --file=ФАЙЛ сохранять журнал в этот файл, - обозначает stdout\n" -#: pg_recvlogical.c:75 +#: pg_recvlogical.c:77 #, c-format msgid "" " -F --fsync-interval=SECS\n" @@ -858,7 +903,7 @@ msgstr "" " периодичность сброса на диск выходного файла (по " "умолчанию: %d)\n" -#: pg_recvlogical.c:77 +#: pg_recvlogical.c:80 #, c-format msgid "" " -I, --startpos=LSN where in an existing slot should the streaming " @@ -867,7 +912,7 @@ msgstr "" " -I, --startpos=LSN определяет, с какой позиции в существующем слоте " "начнётся передача\n" -#: pg_recvlogical.c:79 +#: pg_recvlogical.c:82 #, c-format msgid "" " -o, --option=NAME[=VALUE]\n" @@ -879,233 +924,213 @@ msgstr "" "необязательным\n" " значением модулю вывода\n" -#: pg_recvlogical.c:82 +#: pg_recvlogical.c:85 #, c-format msgid " -P, --plugin=PLUGIN use output plugin PLUGIN (default: %s)\n" msgstr "" " -P, --plugin=МОДУЛЬ использовать заданный модуль вывода (по умолчанию: " "%s)\n" -#: pg_recvlogical.c:85 +#: pg_recvlogical.c:88 #, c-format msgid " -S, --slot=SLOTNAME name of the logical replication slot\n" msgstr " -S, --slot=ИМЯ_СЛОТА имя слота логической репликации\n" -#: pg_recvlogical.c:90 +#: pg_recvlogical.c:93 #, c-format msgid " -d, --dbname=DBNAME database to connect to\n" msgstr " -d, --dbname=ИМЯ_БД целевая база данных\n" -#: pg_recvlogical.c:123 +#: pg_recvlogical.c:126 #, c-format msgid "%s: confirming write up to %X/%X, flush to %X/%X (slot %s)\n" msgstr "" "%s: подтверждается запись до %X/%X, синхронизация с ФС до %X/%X (слот %s)\n" -#: pg_recvlogical.c:148 receivelog.c:395 +#: pg_recvlogical.c:151 receivelog.c:415 #, c-format msgid "%s: could not send feedback packet: %s" msgstr "%s: не удалось отправить пакет отзыва: %s" -#: pg_recvlogical.c:184 +#: pg_recvlogical.c:190 #, c-format msgid "%s: could not fsync log file \"%s\": %s\n" msgstr "%s: не удалось синхронизировать с ФС файл журнала \"%s\": %s\n" -#: pg_recvlogical.c:223 +#: pg_recvlogical.c:229 #, c-format msgid "%s: starting log streaming at %X/%X (slot %s)\n" msgstr "%s: начало передачи журнала с позиции %X/%X (слот %s)\n" -#: pg_recvlogical.c:265 +#: pg_recvlogical.c:271 #, c-format msgid "%s: streaming initiated\n" msgstr "%s: передача запущена\n" -#: pg_recvlogical.c:328 +#: pg_recvlogical.c:336 #, c-format msgid "%s: could not open log file \"%s\": %s\n" msgstr "%s: не удалось открыть файл журнала \"%s\": %s\n" -#: pg_recvlogical.c:397 receivelog.c:894 +#: pg_recvlogical.c:412 receivelog.c:980 #, c-format msgid "%s: select() failed: %s\n" msgstr "%s: ошибка в select(): %s\n" -#: pg_recvlogical.c:406 receivelog.c:902 +#: pg_recvlogical.c:421 receivelog.c:1030 #, c-format msgid "%s: could not receive data from WAL stream: %s" msgstr "%s: не удалось получить данные из потока WAL: %s" -#: pg_recvlogical.c:447 pg_recvlogical.c:486 receivelog.c:969 -#: receivelog.c:1023 +#: pg_recvlogical.c:462 pg_recvlogical.c:501 receivelog.c:1075 +#: receivelog.c:1144 #, c-format msgid "%s: streaming header too small: %d\n" msgstr "%s: заголовок потока слишком мал: %d\n" -#: pg_recvlogical.c:469 receivelog.c:1129 +#: pg_recvlogical.c:484 receivelog.c:924 #, c-format msgid "%s: unrecognized streaming header: \"%c\"\n" msgstr "%s: нераспознанный заголовок потока: \"%c\"\n" -#: pg_recvlogical.c:515 pg_recvlogical.c:529 +#: pg_recvlogical.c:530 pg_recvlogical.c:544 #, c-format msgid "%s: could not write %u bytes to log file \"%s\": %s\n" msgstr "%s: не удалось записать %u байт в файл журнала \"%s\": %s\n" -#: pg_recvlogical.c:540 receivelog.c:684 receivelog.c:722 +#: pg_recvlogical.c:555 receivelog.c:707 receivelog.c:745 #, c-format msgid "%s: unexpected termination of replication stream: %s" msgstr "%s: неожиданный конец потока репликации: %s" -#: pg_recvlogical.c:662 +#: pg_recvlogical.c:678 #, c-format msgid "%s: invalid fsync interval \"%s\"\n" msgstr "%s: неверный интервал синхронизации с ФС \"%s\"\n" -#: pg_recvlogical.c:703 +#: pg_recvlogical.c:719 #, c-format msgid "%s: could not parse start position \"%s\"\n" msgstr "%s: не удалось разобрать начальную позицию \"%s\"\n" -#: pg_recvlogical.c:784 +#: pg_recvlogical.c:803 #, c-format msgid "%s: no slot specified\n" msgstr "%s: слот не указан\n" -#: pg_recvlogical.c:792 +#: pg_recvlogical.c:811 #, c-format msgid "%s: no target file specified\n" msgstr "%s: целевой файл не задан\n" -#: pg_recvlogical.c:800 +#: pg_recvlogical.c:819 #, c-format msgid "%s: no database specified\n" msgstr "%s: база данных не задана\n" -#: pg_recvlogical.c:808 +#: pg_recvlogical.c:827 #, c-format msgid "%s: at least one action needs to be specified\n" msgstr "%s: необходимо задать минимум одно действие\n" -#: pg_recvlogical.c:816 +#: pg_recvlogical.c:835 #, c-format msgid "%s: cannot use --create-slot or --start together with --drop-slot\n" msgstr "%s: --create-slot или --start нельзя применять вместе с --drop-slot\n" -#: pg_recvlogical.c:824 +#: pg_recvlogical.c:843 #, c-format msgid "%s: cannot use --create-slot or --drop-slot together with --startpos\n" msgstr "" "%s: --create-slot или --drop-slot нельзя применять вместе с --startpos\n" -#: pg_recvlogical.c:878 -#, c-format -msgid "%s: dropping replication slot \"%s\"\n" -msgstr "%s: удаление слота репликации \"%s\"\n" - -#: pg_recvlogical.c:894 +#: pg_recvlogical.c:874 #, c-format -msgid "" -"%s: could not drop replication slot \"%s\": got %d rows and %d fields, " -"expected %d rows and %d fields\n" +msgid "%s: could not establish database-specific replication connection\n" msgstr "" -"%s: не удалось удалить слот репликации \"%s\"; получено строк: %d, полей: %d " -"(ожидалось: %d и %d)\n" +"%s: не удалось установить подключение для репликации к определённой базе " +"данных\n" -#: pg_recvlogical.c:912 -#, c-format -msgid "%s: creating replication slot \"%s\"\n" -msgstr "%s: создание слота репликации \"%s\"\n" - -#: pg_recvlogical.c:929 -#, c-format -msgid "" -"%s: could not create replication slot \"%s\": got %d rows and %d fields, " -"expected %d rows and %d fields\n" -msgstr "" -"%s: не удалось создать слот репликации \"%s\"; получено строк: %d, полей: %d " -"(ожидалось: %d и %d)\n" - -#: receivelog.c:55 +#: receivelog.c:75 #, c-format msgid "%s: could not create archive status file \"%s\": %s\n" msgstr "%s: не удалось создать файл статуса архива \"%s\": %s\n" -#: receivelog.c:62 receivelog.c:186 receivelog.c:335 receivelog.c:990 +#: receivelog.c:82 receivelog.c:206 receivelog.c:355 receivelog.c:848 +#: receivelog.c:1096 #, c-format msgid "%s: could not fsync file \"%s\": %s\n" msgstr "%s: не удалось синхронизировать с ФС файл \"%s\": %s\n" -#: receivelog.c:101 +#: receivelog.c:121 #, c-format msgid "%s: could not open transaction log file \"%s\": %s\n" msgstr "%s: не удалось открыть файл журнала транзакций \"%s\": %s\n" -#: receivelog.c:113 +#: receivelog.c:133 #, c-format msgid "%s: could not stat transaction log file \"%s\": %s\n" msgstr "%s: не удалось проверить файл журнала транзакций \"%s\": %s\n" -#: receivelog.c:127 +#: receivelog.c:147 #, c-format msgid "%s: transaction log file \"%s\" has %d bytes, should be 0 or %d\n" msgstr "" "%s: файл журнала транзакций \"%s\" имеет размер %d Б, а должен - 0 или %d\n" -#: receivelog.c:140 +#: receivelog.c:160 #, c-format msgid "%s: could not pad transaction log file \"%s\": %s\n" msgstr "%s: не удалось дополнить файл журнала транзакций \"%s\": %s\n" -#: receivelog.c:153 +#: receivelog.c:173 #, c-format msgid "%s: could not seek to beginning of transaction log file \"%s\": %s\n" msgstr "%s: не удалось перейти к началу файла журнала транзакций \"%s\": %s\n" -#: receivelog.c:179 +#: receivelog.c:199 #, c-format msgid "%s: could not determine seek position in file \"%s\": %s\n" msgstr "%s: не удалось определить текущую позицию в файле \"%s\": %s\n" -#: receivelog.c:212 +#: receivelog.c:232 #, c-format msgid "%s: could not rename file \"%s\": %s\n" msgstr "%s: не удалось переименовать файл \"%s\": %s\n" -#: receivelog.c:219 +#: receivelog.c:239 #, c-format msgid "%s: not renaming \"%s%s\", segment is not complete\n" msgstr "" "%s: файл \"%s%s\" не переименовывается, так как это не полный сегмент\n" -#: receivelog.c:265 +#: receivelog.c:285 #, c-format msgid "%s: could not open timeline history file \"%s\": %s\n" msgstr "%s: не удалось открыть файл истории линии времени \"%s\": %s\n" -#: receivelog.c:293 +#: receivelog.c:313 #, c-format msgid "%s: server reported unexpected history file name for timeline %u: %s\n" msgstr "" "%s: сервер сообщил неожиданное имя файла истории для линии времени %u: %s\n" -#: receivelog.c:310 +#: receivelog.c:330 #, c-format msgid "%s: could not create timeline history file \"%s\": %s\n" msgstr "%s: не удалось создать файл истории линии времени \"%s\": %s\n" -#: receivelog.c:327 +#: receivelog.c:347 #, c-format msgid "%s: could not write timeline history file \"%s\": %s\n" msgstr "%s: не удалось записать файл истории линии времени \"%s\": %s\n" -#: receivelog.c:352 +#: receivelog.c:372 #, c-format msgid "%s: could not rename file \"%s\" to \"%s\": %s\n" msgstr "%s: не удалось переименовать файл \"%s\" в \"%s\": %s\n" -#: receivelog.c:429 +#: receivelog.c:449 #, c-format msgid "" "%s: incompatible server version %s; client does not support streaming from " @@ -1114,7 +1139,7 @@ msgstr "" "%s: несовместимая версия сервера %s; клиент не поддерживает репликацию с " "серверов версии ниже %s\n" -#: receivelog.c:439 +#: receivelog.c:459 #, c-format msgid "" "%s: incompatible server version %s; client does not support streaming from " @@ -1123,7 +1148,16 @@ msgstr "" "%s: несовместимая версия сервера %s; клиент не поддерживает репликацию с " "серверов версии выше %s\n" -#: receivelog.c:542 +#: receivelog.c:557 streamutil.c:264 streamutil.c:299 +#, c-format +msgid "" +"%s: could not identify system: got %d rows and %d fields, expected %d rows " +"and %d or more fields\n" +msgstr "" +"%s: не удалось идентифицировать систему, получено строк: %d, полей: %d " +"(ожидалось: %d и %d (или более))\n" + +#: receivelog.c:565 #, c-format msgid "" "%s: system identifier does not match between base backup and streaming " @@ -1132,12 +1166,12 @@ msgstr "" "%s: системный идентификатор базовой резервной копии отличается от " "идентификатора потоковой передачи\n" -#: receivelog.c:550 +#: receivelog.c:573 #, c-format msgid "%s: starting timeline %u is not present in the server\n" msgstr "%s: на сервере нет начальной линии времени %u\n" -#: receivelog.c:590 +#: receivelog.c:613 #, c-format msgid "" "%s: unexpected response to TIMELINE_HISTORY command: got %d rows and %d " @@ -1146,14 +1180,14 @@ msgstr "" "%s: сервер вернул неожиданный ответ на команду TIMELINE_HISTORY; получено " "строк: %d, полей: %d, а ожидалось строк: %d, полей: %d\n" -#: receivelog.c:665 +#: receivelog.c:688 #, c-format msgid "" "%s: server reported unexpected next timeline %u, following timeline %u\n" msgstr "" "%s: сервер неожиданно сообщил линию времени %u после линии времени %u\n" -#: receivelog.c:672 +#: receivelog.c:695 #, c-format msgid "" "%s: server stopped streaming timeline %u at %X/%X, but reported next " @@ -1162,12 +1196,12 @@ msgstr "" "%s: сервер прекратил передачу линии времени %u в %X/%X, но сообщил, что " "следующая линии времени %u начнётся в %X/%X\n" -#: receivelog.c:713 +#: receivelog.c:736 #, c-format msgid "%s: replication stream was terminated before stop point\n" msgstr "%s: поток репликации закончился до точки останова\n" -#: receivelog.c:762 +#: receivelog.c:785 #, c-format msgid "" "%s: unexpected result set after end-of-timeline: got %d rows and %d fields, " @@ -1176,58 +1210,81 @@ msgstr "" "%s: сервер вернул неожиданный набор данных после конца линии времени - " "получено строк: %d, полей: %d, а ожидалось строк: %d, полей: %d\n" -#: receivelog.c:772 +#: receivelog.c:795 #, c-format msgid "%s: could not parse next timeline's starting point \"%s\"\n" msgstr "" "%s: не удалось разобрать начальную точку следующей линии времени \"%s\"\n" -#: receivelog.c:827 receivelog.c:930 receivelog.c:1116 +#: receivelog.c:959 #, c-format -msgid "%s: could not send copy-end packet: %s" -msgstr "%s: не удалось отправить пакет \"конец COPY\": %s" +msgid "%s: socket not open" +msgstr "%s: сокет не открыт" -#: receivelog.c:1042 +#: receivelog.c:1163 #, c-format msgid "%s: received transaction log record for offset %u with no file open\n" msgstr "" "%s: получена запись журнала транзакций по смещению %u, но файл не открыт\n" -#: receivelog.c:1054 +#: receivelog.c:1175 #, c-format msgid "%s: got WAL data offset %08x, expected %08x\n" msgstr "%s: получено смещение данных WAL %08x, но ожидалось %08x\n" -#: receivelog.c:1091 +#: receivelog.c:1212 #, c-format msgid "%s: could not write %u bytes to WAL file \"%s\": %s\n" msgstr "%s: не удалось записать %u байт в файл WAL \"%s\": %s\n" -#: streamutil.c:142 +#: receivelog.c:1237 receivelog.c:1279 receivelog.c:1311 +#, c-format +msgid "%s: could not send copy-end packet: %s" +msgstr "%s: не удалось отправить пакет \"конец COPY\": %s" + +#: streamutil.c:145 msgid "Password: " msgstr "Пароль: " -#: streamutil.c:166 +#: streamutil.c:169 #, c-format msgid "%s: could not connect to server\n" msgstr "%s: не удалось подключиться к серверу\n" -#: streamutil.c:184 +#: streamutil.c:187 #, c-format -msgid "%s: could not connect to server: %s\n" -msgstr "%s: не удалось подключиться к серверу: %s\n" +msgid "%s: could not connect to server: %s" +msgstr "%s: не удалось подключиться к серверу: %s" -#: streamutil.c:208 +#: streamutil.c:211 #, c-format msgid "%s: could not determine server setting for integer_datetimes\n" msgstr "%s: не удалось получить настройку сервера integer_datetimes\n" -#: streamutil.c:221 +#: streamutil.c:224 #, c-format msgid "%s: integer_datetimes compile flag does not match server\n" msgstr "" "%s: флаг компиляции integer_datetimes не соответствует настройке сервера\n" +#: streamutil.c:363 +#, c-format +msgid "" +"%s: could not create replication slot \"%s\": got %d rows and %d fields, " +"expected %d rows and %d fields\n" +msgstr "" +"%s: не удалось создать слот репликации \"%s\"; получено строк: %d, полей: %d " +"(ожидалось: %d и %d)\n" + +#: streamutil.c:408 +#, c-format +msgid "" +"%s: could not drop replication slot \"%s\": got %d rows and %d fields, " +"expected %d rows and %d fields\n" +msgstr "" +"%s: не удалось удалить слот репликации \"%s\"; получено строк: %d, полей: %d " +"(ожидалось: %d и %d)\n" + #~ msgid "%s: could not remove symbolic link \"%s\": %s\n" #~ msgstr "%s: ошибка при удалении символической ссылки \"%s\": %s\n" diff --git a/src/bin/pg_basebackup/streamutil.c b/src/bin/pg_basebackup/streamutil.c index 0ed61440b0975..2c963b67a327a 100644 --- a/src/bin/pg_basebackup/streamutil.c +++ b/src/bin/pg_basebackup/streamutil.c @@ -31,6 +31,8 @@ #include "common/fe_memutils.h" #include "datatype/timestamp.h" +#define ERRCODE_DUPLICATE_OBJECT "42710" + const char *progname; char *connection_string = NULL; char *dbhost = NULL; @@ -314,7 +316,7 @@ RunIdentifySystem(PGconn *conn, char **sysid, TimeLineID *starttli, */ bool CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, - XLogRecPtr *startpos, bool is_physical) + bool is_physical, bool slot_exists_ok) { PQExpBuffer query; PGresult *res; @@ -336,12 +338,25 @@ CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, res = PQexec(conn, query->data); if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, _("%s: could not send replication command \"%s\": %s"), - progname, query->data, PQerrorMessage(conn)); + const char *sqlstate = PQresultErrorField(res, PG_DIAG_SQLSTATE); - destroyPQExpBuffer(query); - PQclear(res); - return false; + if (slot_exists_ok && + sqlstate && + strcmp(sqlstate, ERRCODE_DUPLICATE_OBJECT) == 0) + { + destroyPQExpBuffer(query); + PQclear(res); + return true; + } + else + { + fprintf(stderr, _("%s: could not send replication command \"%s\": %s"), + progname, query->data, PQerrorMessage(conn)); + + destroyPQExpBuffer(query); + PQclear(res); + return false; + } } if (PQntuples(res) != 1 || PQnfields(res) != 4) @@ -356,25 +371,6 @@ CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, return false; } - /* Get LSN start position if necessary */ - if (startpos != NULL) - { - uint32 hi, - lo; - - if (sscanf(PQgetvalue(res, 0, 1), "%X/%X", &hi, &lo) != 2) - { - fprintf(stderr, - _("%s: could not parse transaction log location \"%s\"\n"), - progname, PQgetvalue(res, 0, 1)); - - destroyPQExpBuffer(query); - PQclear(res); - return false; - } - *startpos = ((uint64) hi) << 32 | lo; - } - destroyPQExpBuffer(query); PQclear(res); return true; @@ -420,6 +416,7 @@ DropReplicationSlot(PGconn *conn, const char *slot_name) return false; } + destroyPQExpBuffer(query); PQclear(res); return true; } diff --git a/src/bin/pg_basebackup/streamutil.h b/src/bin/pg_basebackup/streamutil.h index 01ab5660a14d9..b95f83f87e032 100644 --- a/src/bin/pg_basebackup/streamutil.h +++ b/src/bin/pg_basebackup/streamutil.h @@ -32,8 +32,8 @@ extern PGconn *GetConnection(void); /* Replication commands */ extern bool CreateReplicationSlot(PGconn *conn, const char *slot_name, - const char *plugin, XLogRecPtr *startpos, - bool is_physical); + const char *plugin, bool is_physical, + bool slot_exists_ok); extern bool DropReplicationSlot(PGconn *conn, const char *slot_name); extern bool RunIdentifySystem(PGconn *conn, char **sysid, TimeLineID *starttli, diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl index c8c9250b3845f..e47c3a0bb7cdd 100644 --- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl +++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl @@ -30,7 +30,7 @@ print HBA "host replication all 127.0.0.1/32 trust\n"; print HBA "host replication all ::1/128 trust\n"; close HBA; -system_or_bail 'pg_ctl', '-s', '-D', "$tempdir/pgdata", 'reload'; +system_or_bail 'pg_ctl', '-D', "$tempdir/pgdata", 'reload'; command_fails( [ 'pg_basebackup', '-D', "$tempdir/backup" ], diff --git a/src/bin/pg_config/po/es.po b/src/bin/pg_config/po/es.po index 494cc32505289..80ec5366bd0da 100644 --- a/src/bin/pg_config/po/es.po +++ b/src/bin/pg_config/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_config (PostgreSQL 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:41+0000\n" +"POT-Creation-Date: 2015-10-04 00:43+0000\n" "PO-Revision-Date: 2014-12-16 12:12-0300\n" "Last-Translator: Alvaro Herrera \n" "Language-Team: es \n" diff --git a/src/bin/pg_config/po/pt_BR.po b/src/bin/pg_config/po/pt_BR.po index e1c467b0041bc..78ed35d673617 100644 --- a/src/bin/pg_config/po/pt_BR.po +++ b/src/bin/pg_config/po/pt_BR.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-05-17 15:59-0300\n" +"POT-Creation-Date: 2015-09-17 22:32-0300\n" "PO-Revision-Date: 2005-10-04 22:15-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" diff --git a/src/bin/pg_controldata/pg_controldata.c b/src/bin/pg_controldata/pg_controldata.c index d8cfe5e68dc0d..32e1d81bf20fd 100644 --- a/src/bin/pg_controldata/pg_controldata.c +++ b/src/bin/pg_controldata/pg_controldata.c @@ -34,8 +34,9 @@ usage(const char *progname) { printf(_("%s displays control information of a PostgreSQL database cluster.\n\n"), progname); printf(_("Usage:\n")); - printf(_(" %s [OPTION] [[-D] DATADIR]\n"), progname); + printf(_(" %s [OPTION] [DATADIR]\n"), progname); printf(_("\nOptions:\n")); + printf(_(" [-D] DATADIR data directory\n")); printf(_(" -V, --version output version information, then exit\n")); printf(_(" -?, --help show this help, then exit\n")); printf(_("\nIf no data directory (DATADIR) is specified, " @@ -272,6 +273,8 @@ main(int argc, char *argv[]) ControlFile.checkPointCopy.oldestMultiDB); printf(_("Latest checkpoint's oldestCommitTs: %u\n"), ControlFile.checkPointCopy.oldestCommitTs); + printf(_("Latest checkpoint's newestCommitTs: %u\n"), + ControlFile.checkPointCopy.newestCommitTs); printf(_("Time of latest checkpoint: %s\n"), ckpttime_str); printf(_("Fake LSN counter for unlogged rels: %X/%X\n"), @@ -290,19 +293,19 @@ main(int argc, char *argv[]) (uint32) ControlFile.backupEndPoint); printf(_("End-of-backup record required: %s\n"), ControlFile.backupEndRequired ? _("yes") : _("no")); - printf(_("Current wal_level setting: %s\n"), + printf(_("wal_level setting: %s\n"), wal_level_str(ControlFile.wal_level)); - printf(_("Current wal_log_hints setting: %s\n"), + printf(_("wal_log_hints setting: %s\n"), ControlFile.wal_log_hints ? _("on") : _("off")); - printf(_("Current max_connections setting: %d\n"), + printf(_("max_connections setting: %d\n"), ControlFile.MaxConnections); - printf(_("Current max_worker_processes setting: %d\n"), + printf(_("max_worker_processes setting: %d\n"), ControlFile.max_worker_processes); - printf(_("Current max_prepared_xacts setting: %d\n"), + printf(_("max_prepared_xacts setting: %d\n"), ControlFile.max_prepared_xacts); - printf(_("Current max_locks_per_xact setting: %d\n"), + printf(_("max_locks_per_xact setting: %d\n"), ControlFile.max_locks_per_xact); - printf(_("Current track_commit_timestamp setting: %s\n"), + printf(_("track_commit_timestamp setting: %s\n"), ControlFile.track_commit_timestamp ? _("on") : _("off")); printf(_("Maximum data alignment: %u\n"), ControlFile.maxAlign); diff --git a/src/bin/pg_controldata/po/de.po b/src/bin/pg_controldata/po/de.po index 485f4857fba0e..83cabd06726ab 100644 --- a/src/bin/pg_controldata/po/de.po +++ b/src/bin/pg_controldata/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-05-19 00:44+0000\n" -"PO-Revision-Date: 2015-05-18 22:40-0400\n" +"POT-Creation-Date: 2015-09-25 04:14+0000\n" +"PO-Revision-Date: 2015-09-25 09:06-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -32,8 +32,8 @@ msgstr "Aufruf:\n" #: pg_controldata.c:37 #, c-format -msgid " %s [OPTION] [[-D] DATADIR]\n" -msgstr " %s [OPTION] [[-D] DATENVERZEICHNIS]\n" +msgid " %s [OPTION] [DATADIR]\n" +msgstr " %s [OPTION] [DATENVERZEICHNIS]\n" #: pg_controldata.c:38 #, c-format @@ -46,15 +46,20 @@ msgstr "" #: pg_controldata.c:39 #, c-format +msgid " [-D] DATADIR data directory\n" +msgstr " [-D] DATENVERZ Datenbankverzeichnis\n" + +#: pg_controldata.c:40 +#, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_controldata.c:40 +#: pg_controldata.c:41 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_controldata.c:41 +#: pg_controldata.c:42 #, c-format msgid "" "\n" @@ -67,73 +72,73 @@ msgstr "" "PGDATA verwendet.\n" "\n" -#: pg_controldata.c:43 +#: pg_controldata.c:44 #, c-format msgid "Report bugs to .\n" msgstr "Berichten Sie Fehler an .\n" -#: pg_controldata.c:53 +#: pg_controldata.c:54 msgid "starting up" msgstr "startet" -#: pg_controldata.c:55 +#: pg_controldata.c:56 msgid "shut down" msgstr "heruntergefahren" -#: pg_controldata.c:57 +#: pg_controldata.c:58 msgid "shut down in recovery" msgstr "in der Wiederherstellung heruntergefahren" -#: pg_controldata.c:59 +#: pg_controldata.c:60 msgid "shutting down" msgstr "fährt herunter" -#: pg_controldata.c:61 +#: pg_controldata.c:62 msgid "in crash recovery" msgstr "bei der Wiederherstellung nach Absturz" -#: pg_controldata.c:63 +#: pg_controldata.c:64 msgid "in archive recovery" msgstr "bei der Archivwiederherstellung" -#: pg_controldata.c:65 +#: pg_controldata.c:66 msgid "in production" msgstr "im Produktionsmodus" -#: pg_controldata.c:67 +#: pg_controldata.c:68 msgid "unrecognized status code" msgstr "nicht erkannter Statuscode" -#: pg_controldata.c:84 +#: pg_controldata.c:85 msgid "unrecognized wal_level" msgstr "unbekanntes wal_level" -#: pg_controldata.c:133 pg_controldata.c:151 pg_controldata.c:159 +#: pg_controldata.c:134 pg_controldata.c:152 pg_controldata.c:160 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie „%s --help“ für weitere Informationen.\n" -#: pg_controldata.c:149 +#: pg_controldata.c:150 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: zu viele Kommandozeilenargumente (das erste ist „%s“)\n" -#: pg_controldata.c:158 +#: pg_controldata.c:159 #, c-format msgid "%s: no data directory specified\n" msgstr "%s: kein Datenverzeichnis angegeben\n" -#: pg_controldata.c:167 +#: pg_controldata.c:168 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: konnte Datei „%s“ nicht zum Lesen öffnen: %s\n" -#: pg_controldata.c:174 +#: pg_controldata.c:175 #, c-format msgid "%s: could not read file \"%s\": %s\n" msgstr "%s: konnte Datei „%s“ nicht lesen: %s\n" -#: pg_controldata.c:188 +#: pg_controldata.c:189 #, c-format msgid "" "WARNING: Calculated CRC checksum does not match value stored in file.\n" @@ -147,12 +152,12 @@ msgstr "" "verlässlich.\n" "\n" -#: pg_controldata.c:222 +#: pg_controldata.c:223 #, c-format msgid "pg_control version number: %u\n" -msgstr "pg_control-Versionsnummer: %u\n" +msgstr "pg_control-Versionsnummer: %u\n" -#: pg_controldata.c:225 +#: pg_controldata.c:226 #, c-format msgid "" "WARNING: possible byte ordering mismatch\n" @@ -166,276 +171,279 @@ msgstr "" "diesem Fall wären die Ergebnisse unten falsch und die PostgreSQL-Installation\n" "wäre inkompatibel mit diesem Datenverzeichnis.\n" -#: pg_controldata.c:229 +#: pg_controldata.c:230 #, c-format msgid "Catalog version number: %u\n" -msgstr "Katalogversionsnummer: %u\n" +msgstr "Katalogversionsnummer: %u\n" -#: pg_controldata.c:231 +#: pg_controldata.c:232 #, c-format msgid "Database system identifier: %s\n" -msgstr "Datenbanksystemidentifikation: %s\n" +msgstr "Datenbanksystemidentifikation: %s\n" -#: pg_controldata.c:233 +#: pg_controldata.c:234 #, c-format msgid "Database cluster state: %s\n" -msgstr "Datenbank-Cluster-Status: %s\n" +msgstr "Datenbank-Cluster-Status: %s\n" -#: pg_controldata.c:235 +#: pg_controldata.c:236 #, c-format msgid "pg_control last modified: %s\n" -msgstr "pg_control zuletzt geändert: %s\n" +msgstr "pg_control zuletzt geändert: %s\n" -#: pg_controldata.c:237 +#: pg_controldata.c:238 #, c-format msgid "Latest checkpoint location: %X/%X\n" -msgstr "Position des letzten Checkpoints: %X/%X\n" +msgstr "Position des letzten Checkpoints: %X/%X\n" -#: pg_controldata.c:240 +#: pg_controldata.c:241 #, c-format msgid "Prior checkpoint location: %X/%X\n" -msgstr "Position des vorletzten Checkpoints: %X/%X\n" +msgstr "Position des vorletzten Checkpoints: %X/%X\n" -#: pg_controldata.c:243 +#: pg_controldata.c:244 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" -msgstr "REDO-Position des letzten Checkpoints: %X/%X\n" +msgstr "REDO-Position des letzten Checkpoints: %X/%X\n" -#: pg_controldata.c:246 +#: pg_controldata.c:247 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" -msgstr "REDO-WAL-Datei des letzten Checkpoints: %s\n" +msgstr "REDO-WAL-Datei des letzten Checkpoints: %s\n" -#: pg_controldata.c:248 +#: pg_controldata.c:249 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" -msgstr "TimeLineID des letzten Checkpoints: %u\n" +msgstr "TimeLineID des letzten Checkpoints: %u\n" -#: pg_controldata.c:250 +#: pg_controldata.c:251 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" -msgstr "PrevTimeLineID des letzten Checkpoints: %u\n" +msgstr "PrevTimeLineID des letzten Checkpoints: %u\n" -#: pg_controldata.c:252 +#: pg_controldata.c:253 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" -msgstr "full_page_writes des letzten Checkpoints: %s\n" +msgstr "full_page_writes des letzten Checkpoints: %s\n" -#: pg_controldata.c:253 pg_controldata.c:296 pg_controldata.c:306 +#: pg_controldata.c:254 pg_controldata.c:299 pg_controldata.c:309 msgid "off" msgstr "aus" -#: pg_controldata.c:253 pg_controldata.c:296 pg_controldata.c:306 +#: pg_controldata.c:254 pg_controldata.c:299 pg_controldata.c:309 msgid "on" msgstr "an" -#: pg_controldata.c:254 +#: pg_controldata.c:255 #, c-format msgid "Latest checkpoint's NextXID: %u/%u\n" -msgstr "NextXID des letzten Checkpoints: %u/%u\n" +msgstr "NextXID des letzten Checkpoints: %u/%u\n" -#: pg_controldata.c:257 +#: pg_controldata.c:258 #, c-format msgid "Latest checkpoint's NextOID: %u\n" -msgstr "NextOID des letzten Checkpoints: %u\n" +msgstr "NextOID des letzten Checkpoints: %u\n" -#: pg_controldata.c:259 +#: pg_controldata.c:260 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" -msgstr "NextMultiXactId des letzten Checkpoints: %u\n" +msgstr "NextMultiXactId des letzten Checkpoints: %u\n" -#: pg_controldata.c:261 +#: pg_controldata.c:262 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" -msgstr "NextMultiOffset des letzten Checkpoints: %u\n" +msgstr "NextMultiOffset des letzten Checkpoints: %u\n" -#: pg_controldata.c:263 +#: pg_controldata.c:264 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" -msgstr "oldestXID des letzten Checkpoints: %u\n" +msgstr "oldestXID des letzten Checkpoints: %u\n" -#: pg_controldata.c:265 +#: pg_controldata.c:266 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" -msgstr "DB der oldestXID des letzten Checkpoints: %u\n" +msgstr "DB der oldestXID des letzten Checkpoints: %u\n" -#: pg_controldata.c:267 +#: pg_controldata.c:268 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" -msgstr "oldestActiveXID des letzten Checkpoints: %u\n" +msgstr "oldestActiveXID des letzten Checkpoints: %u\n" -#: pg_controldata.c:269 +#: pg_controldata.c:270 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" -msgstr "oldestMultiXid des letzten Checkpoints: %u\n" +msgstr "oldestMultiXid des letzten Checkpoints: %u\n" -#: pg_controldata.c:271 +#: pg_controldata.c:272 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" -msgstr "DB des oldestMulti des letzten Checkpoints: %u\n" +msgstr "DB des oldestMulti des letzten Checkpoints: %u\n" -#: pg_controldata.c:273 +#: pg_controldata.c:274 #, c-format msgid "Latest checkpoint's oldestCommitTs: %u\n" -msgstr "oldestCommitTs des letzten Checkpoints: %u\n" +msgstr "oldestCommitTs des letzten Checkpoints: %u\n" + +#: pg_controldata.c:276 +#, c-format +msgid "Latest checkpoint's newestCommitTs: %u\n" +msgstr "newestCommitTs des letzten Checkpoints: %u\n" -#: pg_controldata.c:275 +#: pg_controldata.c:278 #, c-format msgid "Time of latest checkpoint: %s\n" -msgstr "Zeit des letzten Checkpoints: %s\n" +msgstr "Zeit des letzten Checkpoints: %s\n" -#: pg_controldata.c:277 +#: pg_controldata.c:280 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" -msgstr "Fake-LSN-Zähler für ungeloggte Relationen: %X/%X\n" +msgstr "Fake-LSN-Zähler für ungeloggte Relationen: %X/%X\n" -#: pg_controldata.c:280 +#: pg_controldata.c:283 #, c-format msgid "Minimum recovery ending location: %X/%X\n" -msgstr "Minimaler Wiederherstellungsendpunkt: %X/%X\n" +msgstr "Minimaler Wiederherstellungsendpunkt: %X/%X\n" -#: pg_controldata.c:283 +#: pg_controldata.c:286 #, c-format msgid "Min recovery ending loc's timeline: %u\n" -msgstr "" -"Zeitleiste des minimalen Wiederherstellungsendpunkts:\n" -" %u\n" +msgstr "Zeitleiste des minimalen Wiederherstellungsendpunkts: %u\n" -#: pg_controldata.c:285 +#: pg_controldata.c:288 #, c-format msgid "Backup start location: %X/%X\n" -msgstr "Backup-Startpunkt: %X/%X\n" +msgstr "Backup-Startpunkt: %X/%X\n" -#: pg_controldata.c:288 +#: pg_controldata.c:291 #, c-format msgid "Backup end location: %X/%X\n" -msgstr "Backup-Endpunkt: %X/%X\n" +msgstr "Backup-Endpunkt: %X/%X\n" -#: pg_controldata.c:291 +#: pg_controldata.c:294 #, c-format msgid "End-of-backup record required: %s\n" -msgstr "End-of-Backup-Eintrag erforderlich: %s\n" +msgstr "End-of-Backup-Eintrag erforderlich: %s\n" -#: pg_controldata.c:292 +#: pg_controldata.c:295 msgid "no" msgstr "nein" -#: pg_controldata.c:292 +#: pg_controldata.c:295 msgid "yes" msgstr "ja" -#: pg_controldata.c:293 +#: pg_controldata.c:296 #, c-format -msgid "Current wal_level setting: %s\n" -msgstr "Aktuelle wal_level-Einstellung: %s\n" +msgid "wal_level setting: %s\n" +msgstr "wal_level-Einstellung: %s\n" -#: pg_controldata.c:295 +#: pg_controldata.c:298 #, c-format -msgid "Current wal_log_hints setting: %s\n" -msgstr "Aktuelle wal_log_hints-Einstellung: %s\n" +msgid "wal_log_hints setting: %s\n" +msgstr "wal_log_hints-Einstellung: %s\n" -#: pg_controldata.c:297 +#: pg_controldata.c:300 #, c-format -msgid "Current max_connections setting: %d\n" -msgstr "Aktuelle max_connections-Einstellung: %d\n" +msgid "max_connections setting: %d\n" +msgstr "max_connections-Einstellung: %d\n" -#: pg_controldata.c:299 +#: pg_controldata.c:302 #, c-format -msgid "Current max_worker_processes setting: %d\n" -msgstr "Aktuelle max_worker_processes-Einstellung: %d\n" +msgid "max_worker_processes setting: %d\n" +msgstr "max_worker_processes-Einstellung: %d\n" -#: pg_controldata.c:301 +#: pg_controldata.c:304 #, c-format -msgid "Current max_prepared_xacts setting: %d\n" -msgstr "Aktuelle max_prepared_xacts-Einstellung: %d\n" +msgid "max_prepared_xacts setting: %d\n" +msgstr "max_prepared_xacts-Einstellung: %d\n" -#: pg_controldata.c:303 +#: pg_controldata.c:306 #, c-format -msgid "Current max_locks_per_xact setting: %d\n" -msgstr "Aktuelle max_locks_per_xact-Einstellung: %d\n" +msgid "max_locks_per_xact setting: %d\n" +msgstr "max_locks_per_xact-Einstellung: %d\n" -#: pg_controldata.c:305 +#: pg_controldata.c:308 #, c-format -msgid "Current track_commit_timestamp setting: %s\n" -msgstr "Aktuelle track_commit_timestamp-Einstellung: %s\n" +msgid "track_commit_timestamp setting: %s\n" +msgstr "track_commit_timestamp-Einstellung: %s\n" -#: pg_controldata.c:307 +#: pg_controldata.c:310 #, c-format msgid "Maximum data alignment: %u\n" -msgstr "Maximale Datenausrichtung (Alignment): %u\n" +msgstr "Maximale Datenausrichtung (Alignment): %u\n" -#: pg_controldata.c:310 +#: pg_controldata.c:313 #, c-format msgid "Database block size: %u\n" -msgstr "Datenbankblockgröße: %u\n" +msgstr "Datenbankblockgröße: %u\n" -#: pg_controldata.c:312 +#: pg_controldata.c:315 #, c-format msgid "Blocks per segment of large relation: %u\n" -msgstr "Blöcke pro Segment: %u\n" +msgstr "Blöcke pro Segment: %u\n" -#: pg_controldata.c:314 +#: pg_controldata.c:317 #, c-format msgid "WAL block size: %u\n" -msgstr "WAL-Blockgröße: %u\n" +msgstr "WAL-Blockgröße: %u\n" -#: pg_controldata.c:316 +#: pg_controldata.c:319 #, c-format msgid "Bytes per WAL segment: %u\n" -msgstr "Bytes pro WAL-Segment: %u\n" +msgstr "Bytes pro WAL-Segment: %u\n" -#: pg_controldata.c:318 +#: pg_controldata.c:321 #, c-format msgid "Maximum length of identifiers: %u\n" -msgstr "Maximale Bezeichnerlänge: %u\n" +msgstr "Maximale Bezeichnerlänge: %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:323 #, c-format msgid "Maximum columns in an index: %u\n" -msgstr "Maximale Spalten in einem Index: %u\n" +msgstr "Maximale Spalten in einem Index: %u\n" -#: pg_controldata.c:322 +#: pg_controldata.c:325 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" -msgstr "Maximale Größe eines Stücks TOAST: %u\n" +msgstr "Maximale Größe eines Stücks TOAST: %u\n" -#: pg_controldata.c:324 +#: pg_controldata.c:327 #, c-format msgid "Size of a large-object chunk: %u\n" -msgstr "Größe eines Large-Object-Chunks: %u\n" +msgstr "Größe eines Large-Object-Chunks: %u\n" -#: pg_controldata.c:326 +#: pg_controldata.c:329 #, c-format msgid "Date/time type storage: %s\n" -msgstr "Speicherung von Datum/Zeit-Typen: %s\n" +msgstr "Speicherung von Datum/Zeit-Typen: %s\n" -#: pg_controldata.c:327 +#: pg_controldata.c:330 msgid "64-bit integers" msgstr "64-Bit-Ganzzahlen" -#: pg_controldata.c:327 +#: pg_controldata.c:330 msgid "floating-point numbers" msgstr "Gleitkommazahlen" -#: pg_controldata.c:328 +#: pg_controldata.c:331 #, c-format msgid "Float4 argument passing: %s\n" -msgstr "Übergabe von Float4-Argumenten: %s\n" +msgstr "Übergabe von Float4-Argumenten: %s\n" -#: pg_controldata.c:329 pg_controldata.c:331 +#: pg_controldata.c:332 pg_controldata.c:334 msgid "by reference" msgstr "Referenz" -#: pg_controldata.c:329 pg_controldata.c:331 +#: pg_controldata.c:332 pg_controldata.c:334 msgid "by value" msgstr "Wert" -#: pg_controldata.c:330 +#: pg_controldata.c:333 #, c-format msgid "Float8 argument passing: %s\n" -msgstr "Übergabe von Float8-Argumenten: %s\n" +msgstr "Übergabe von Float8-Argumenten: %s\n" -#: pg_controldata.c:332 +#: pg_controldata.c:335 #, c-format msgid "Data page checksum version: %u\n" -msgstr "Datenseitenprüfsummenversion: %u\n" +msgstr "Datenseitenprüfsummenversion: %u\n" diff --git a/src/bin/pg_controldata/po/es.po b/src/bin/pg_controldata/po/es.po index fb69b067c6860..f7e7b6c516617 100644 --- a/src/bin/pg_controldata/po/es.po +++ b/src/bin/pg_controldata/po/es.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_controldata (PostgreSQL 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:42+0000\n" -"PO-Revision-Date: 2014-12-16 12:11-0300\n" +"POT-Creation-Date: 2015-10-04 00:44+0000\n" +"PO-Revision-Date: 2015-09-29 23:36-0300\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: Castellano \n" "Language: es\n" @@ -20,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: pg_controldata.c:34 +#: pg_controldata.c:35 #, c-format msgid "" "%s displays control information of a PostgreSQL database cluster.\n" @@ -29,17 +29,17 @@ msgstr "" "%s muestra información de control del cluster de PostgreSQL.\n" "\n" -#: pg_controldata.c:35 +#: pg_controldata.c:36 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_controldata.c:36 +#: pg_controldata.c:37 #, c-format msgid " %s [OPTION] [DATADIR]\n" msgstr " %s [OPCIÓN] [DATADIR]\n" -#: pg_controldata.c:37 +#: pg_controldata.c:38 #, c-format msgid "" "\n" @@ -48,17 +48,22 @@ msgstr "" "\n" "Opciones:\n" -#: pg_controldata.c:38 +#: pg_controldata.c:39 +#, c-format +msgid " [-D] DATADIR data directory\n" +msgstr " [-D] DATADIR directorio de datos\n" + +#: pg_controldata.c:40 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version muestra información de la versión, luego sale\n" -#: pg_controldata.c:39 +#: pg_controldata.c:41 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help muestra esta ayuda, luego sale\n" -#: pg_controldata.c:40 +#: pg_controldata.c:42 #, c-format msgid "" "\n" @@ -71,68 +76,73 @@ msgstr "" "la variable de entorno PGDATA.\n" "\n" -#: pg_controldata.c:42 +#: pg_controldata.c:44 #, c-format msgid "Report bugs to .\n" msgstr "Reporte errores a .\n" -#: pg_controldata.c:52 +#: pg_controldata.c:54 msgid "starting up" msgstr "iniciando" -#: pg_controldata.c:54 +#: pg_controldata.c:56 msgid "shut down" msgstr "apagado" -#: pg_controldata.c:56 +#: pg_controldata.c:58 msgid "shut down in recovery" msgstr "apagado durante recuperación" -#: pg_controldata.c:58 +#: pg_controldata.c:60 msgid "shutting down" msgstr "apagándose" -#: pg_controldata.c:60 +#: pg_controldata.c:62 msgid "in crash recovery" msgstr "en recuperación" -#: pg_controldata.c:62 +#: pg_controldata.c:64 msgid "in archive recovery" msgstr "en recuperación desde archivo" -#: pg_controldata.c:64 +#: pg_controldata.c:66 msgid "in production" msgstr "en producción" -#: pg_controldata.c:66 +#: pg_controldata.c:68 msgid "unrecognized status code" msgstr "código de estado no reconocido" -#: pg_controldata.c:83 +#: pg_controldata.c:85 msgid "unrecognized wal_level" msgstr "wal_level no reconocido" -#: pg_controldata.c:128 -#, c-format -msgid "%s: no data directory specified\n" -msgstr "%s: no se ha especificado un directorio de datos\n" - -#: pg_controldata.c:129 +#: pg_controldata.c:134 pg_controldata.c:152 pg_controldata.c:160 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Intente «%s --help» para mayor información.\n" -#: pg_controldata.c:137 +#: pg_controldata.c:150 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: demasiados argumentos de línea de órdenes (el primero es «%s»)\n" + +#: pg_controldata.c:159 +#, c-format +msgid "%s: no data directory specified\n" +msgstr "%s: no se ha especificado un directorio de datos\n" + +#: pg_controldata.c:168 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: no se pudo abrir el archivo «%s» para lectura: %s\n" -#: pg_controldata.c:144 +#: pg_controldata.c:175 #, c-format msgid "%s: could not read file \"%s\": %s\n" msgstr "%s: no se pudo leer el archivo «%s»: %s\n" -#: pg_controldata.c:158 +#: pg_controldata.c:189 #, c-format msgid "" "WARNING: Calculated CRC checksum does not match value stored in file.\n" @@ -146,12 +156,12 @@ msgstr "" "esperando. Los resultados presentados a continuación no son confiables.\n" "\n" -#: pg_controldata.c:192 +#: pg_controldata.c:223 #, c-format msgid "pg_control version number: %u\n" msgstr "Número de versión de pg_control: %u\n" -#: pg_controldata.c:195 +#: pg_controldata.c:226 #, c-format msgid "" "WARNING: possible byte ordering mismatch\n" @@ -165,264 +175,279 @@ msgstr "" "serán incorrectos, y esta instalación de PostgreSQL será incompatible con\n" "este directorio de datos.\n" -#: pg_controldata.c:199 +#: pg_controldata.c:230 #, c-format msgid "Catalog version number: %u\n" msgstr "Número de versión del catálogo: %u\n" -#: pg_controldata.c:201 +#: pg_controldata.c:232 #, c-format msgid "Database system identifier: %s\n" msgstr "Identificador de sistema: %s\n" -#: pg_controldata.c:203 +#: pg_controldata.c:234 #, c-format msgid "Database cluster state: %s\n" msgstr "Estado del sistema de base de datos: %s\n" -#: pg_controldata.c:205 +#: pg_controldata.c:236 #, c-format msgid "pg_control last modified: %s\n" msgstr "Última modificación de pg_control: %s\n" -#: pg_controldata.c:207 +#: pg_controldata.c:238 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Ubicación del último checkpoint: %X/%X\n" -#: pg_controldata.c:210 +#: pg_controldata.c:241 #, c-format msgid "Prior checkpoint location: %X/%X\n" msgstr "Ubicación del checkpoint anterior: %X/%X\n" -#: pg_controldata.c:213 +#: pg_controldata.c:244 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "Ubicación de REDO de último checkpoint: %X/%X\n" -#: pg_controldata.c:216 +#: pg_controldata.c:247 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "Ubicación de REDO de último checkpoint: %s\n" -#: pg_controldata.c:218 +#: pg_controldata.c:249 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "TimeLineID del último checkpoint: %u\n" -#: pg_controldata.c:220 +#: pg_controldata.c:251 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "PrevTimeLineID del último checkpoint: %u\n" -#: pg_controldata.c:222 +#: pg_controldata.c:253 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "full_page_writes del último checkpoint: %s\n" -#: pg_controldata.c:223 pg_controldata.c:264 +#: pg_controldata.c:254 pg_controldata.c:299 pg_controldata.c:309 msgid "off" msgstr "desactivado" -#: pg_controldata.c:223 pg_controldata.c:264 +#: pg_controldata.c:254 pg_controldata.c:299 pg_controldata.c:309 msgid "on" msgstr "activado" -#: pg_controldata.c:224 +#: pg_controldata.c:255 #, c-format msgid "Latest checkpoint's NextXID: %u/%u\n" msgstr "NextXID del checkpoint más reciente: %u/%u\n" -#: pg_controldata.c:227 +#: pg_controldata.c:258 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID de último checkpoint: %u\n" -#: pg_controldata.c:229 +#: pg_controldata.c:260 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId de último checkpoint: %u\n" -#: pg_controldata.c:231 +#: pg_controldata.c:262 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset de último checkpoint: %u\n" -#: pg_controldata.c:233 +#: pg_controldata.c:264 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID del último checkpoint: %u\n" -#: pg_controldata.c:235 +#: pg_controldata.c:266 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "DB del oldestXID del último checkpoint: %u\n" -#: pg_controldata.c:237 +#: pg_controldata.c:268 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID del último checkpoint: %u\n" -#: pg_controldata.c:239 +#: pg_controldata.c:270 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid del último checkpoint: %u\n" -#: pg_controldata.c:241 +#: pg_controldata.c:272 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "DB del oldestMultiXid del últ. checkpoint: %u\n" -#: pg_controldata.c:243 +#: pg_controldata.c:274 +#, c-format +msgid "Latest checkpoint's oldestCommitTs: %u\n" +msgstr "oldestCommitTs del último checkpoint: %u\n" + +#: pg_controldata.c:276 +#, c-format +msgid "Latest checkpoint's newestCommitTs: %u\n" +msgstr "newestCommitTs del último checkpoint: %u\n" + +#: pg_controldata.c:278 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Instante de último checkpoint: %s\n" -#: pg_controldata.c:245 +#: pg_controldata.c:280 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Contador de LSN falsas para rels. unlogged: %X/%X\n" -#: pg_controldata.c:248 +#: pg_controldata.c:283 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Punto final mínimo de recuperación: %X/%X\n" -#: pg_controldata.c:251 +#: pg_controldata.c:286 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Timeline de dicho punto final mínimo: %u\n" -#: pg_controldata.c:253 +#: pg_controldata.c:288 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Ubicación del inicio de backup: %X/%X\n" -#: pg_controldata.c:256 +#: pg_controldata.c:291 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Ubicación del fin de backup: %X/%X\n" -#: pg_controldata.c:259 +#: pg_controldata.c:294 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Registro fin-de-backup requerido: %s\n" -#: pg_controldata.c:260 +#: pg_controldata.c:295 msgid "no" msgstr "no" -#: pg_controldata.c:260 +#: pg_controldata.c:295 msgid "yes" msgstr "sí" -#: pg_controldata.c:261 +#: pg_controldata.c:296 +#, c-format +msgid "wal_level setting: %s\n" +msgstr "Parámetro wal_level: %s\n" + +#: pg_controldata.c:298 #, c-format -msgid "Current wal_level setting: %s\n" -msgstr "Parámetro wal_level actual: %s\n" +msgid "wal_log_hints setting: %s\n" +msgstr "Parámetro wal_log_hings: %s\n" -#: pg_controldata.c:263 +#: pg_controldata.c:300 #, c-format -msgid "Current wal_log_hints setting: %s\n" -msgstr "Parámetro wal_log_hings actual: %s\n" +msgid "max_connections setting: %d\n" +msgstr "Parámetro max_connections: %d\n" -#: pg_controldata.c:265 +#: pg_controldata.c:302 #, c-format -msgid "Current max_connections setting: %d\n" -msgstr "Parámetro max_connections actual: %d\n" +msgid "max_worker_processes setting: %d\n" +msgstr "Parámetro max_worker_processes: %d\n" -#: pg_controldata.c:267 +#: pg_controldata.c:304 #, c-format -msgid "Current max_worker_processes setting: %d\n" -msgstr "Parámetro max_worker_processes actual: %d\n" +msgid "max_prepared_xacts setting: %d\n" +msgstr "Parámetro max_prepared_xacts: %d\n" -#: pg_controldata.c:269 +#: pg_controldata.c:306 #, c-format -msgid "Current max_prepared_xacts setting: %d\n" -msgstr "Parámetro max_prepared_xacts actual: %d\n" +msgid "max_locks_per_xact setting: %d\n" +msgstr "Parámetro max_locks_per_xact: %d\n" -#: pg_controldata.c:271 +#: pg_controldata.c:308 #, c-format -msgid "Current max_locks_per_xact setting: %d\n" -msgstr "Parámetro max_locks_per_xact actual: %d\n" +msgid "track_commit_timestamp setting: %s\n" +msgstr "Parámetro track_commit_timestamp: %s\n" -#: pg_controldata.c:273 +#: pg_controldata.c:310 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Alineamiento máximo de datos: %u\n" -#: pg_controldata.c:276 +#: pg_controldata.c:313 #, c-format msgid "Database block size: %u\n" msgstr "Tamaño de bloque de la base de datos: %u\n" -#: pg_controldata.c:278 +#: pg_controldata.c:315 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Bloques por segmento en relación grande: %u\n" -#: pg_controldata.c:280 +#: pg_controldata.c:317 #, c-format msgid "WAL block size: %u\n" msgstr "Tamaño del bloque de WAL: %u\n" -#: pg_controldata.c:282 +#: pg_controldata.c:319 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Bytes por segmento WAL: %u\n" -#: pg_controldata.c:284 +#: pg_controldata.c:321 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Máxima longitud de identificadores: %u\n" -#: pg_controldata.c:286 +#: pg_controldata.c:323 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Máximo número de columnas de un índice: %u\n" -#: pg_controldata.c:288 +#: pg_controldata.c:325 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Longitud máxima de un trozo TOAST: %u\n" -#: pg_controldata.c:290 +#: pg_controldata.c:327 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Longitud máx. de un trozo de objeto grande: %u\n" -#: pg_controldata.c:292 +#: pg_controldata.c:329 #, c-format msgid "Date/time type storage: %s\n" msgstr "Tipo de almacenamiento de horas y fechas: %s\n" -#: pg_controldata.c:293 +#: pg_controldata.c:330 msgid "64-bit integers" msgstr "enteros de 64 bits" -#: pg_controldata.c:293 +#: pg_controldata.c:330 msgid "floating-point numbers" msgstr "números de punto flotante" -#: pg_controldata.c:294 +#: pg_controldata.c:331 #, c-format msgid "Float4 argument passing: %s\n" msgstr "Paso de parámetros float4: %s\n" -#: pg_controldata.c:295 pg_controldata.c:297 +#: pg_controldata.c:332 pg_controldata.c:334 msgid "by reference" msgstr "por referencia" -#: pg_controldata.c:295 pg_controldata.c:297 +#: pg_controldata.c:332 pg_controldata.c:334 msgid "by value" msgstr "por valor" -#: pg_controldata.c:296 +#: pg_controldata.c:333 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Paso de parámetros float8: %s\n" -#: pg_controldata.c:298 +#: pg_controldata.c:335 #, c-format msgid "Data page checksum version: %u\n" msgstr "Versión de sumas de verificación de datos: %u\n" diff --git a/src/bin/pg_controldata/po/it.po b/src/bin/pg_controldata/po/it.po index f624f7b06b07e..c6c23c02d6c26 100644 --- a/src/bin/pg_controldata/po/it.po +++ b/src/bin/pg_controldata/po/it.po @@ -21,10 +21,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_controldata (PostgreSQL) 9.4\n" +"Project-Id-Version: pg_controldata (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-07-30 04:13+0000\n" -"PO-Revision-Date: 2014-07-30 22:41+0100\n" +"POT-Creation-Date: 2015-07-06 14:44+0000\n" +"PO-Revision-Date: 2015-07-07 03:17+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -34,7 +34,7 @@ msgstr "" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 1.5.4\n" -#: pg_controldata.c:34 +#: pg_controldata.c:35 #, c-format msgid "" "%s displays control information of a PostgreSQL database cluster.\n" @@ -43,17 +43,17 @@ msgstr "" "%s mostra informazioni di controllo su un cluster di database PostgreSQL.\n" "\n" -#: pg_controldata.c:35 +#: pg_controldata.c:36 #, c-format msgid "Usage:\n" msgstr "Utilizzo:\n" -#: pg_controldata.c:36 +#: pg_controldata.c:37 #, c-format -msgid " %s [OPTION] [DATADIR]\n" -msgstr " %s [OPZIONE]... [DATADIR]\n" +msgid " %s [OPTION] [[-D] DATADIR]\n" +msgstr " %s [OPZIONE] [[-D] DATADIR]\n" -#: pg_controldata.c:37 +#: pg_controldata.c:38 #, c-format msgid "" "\n" @@ -62,17 +62,17 @@ msgstr "" "\n" "Opzioni:\n" -#: pg_controldata.c:38 +#: pg_controldata.c:39 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informazioni sulla versione ed esci\n" -#: pg_controldata.c:39 +#: pg_controldata.c:40 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra questo aiuto ed esci\n" -#: pg_controldata.c:40 +#: pg_controldata.c:41 #, c-format msgid "" "\n" @@ -85,68 +85,73 @@ msgstr "" "variabile d'ambiente PGDATA.\n" "\n" -#: pg_controldata.c:42 +#: pg_controldata.c:43 #, c-format msgid "Report bugs to .\n" msgstr "Puoi segnalare eventuali bug a .\n" -#: pg_controldata.c:52 +#: pg_controldata.c:53 msgid "starting up" msgstr "avvio in corso" -#: pg_controldata.c:54 +#: pg_controldata.c:55 msgid "shut down" msgstr "spento" -#: pg_controldata.c:56 +#: pg_controldata.c:57 msgid "shut down in recovery" msgstr "arresto durante il ripristino" -#: pg_controldata.c:58 +#: pg_controldata.c:59 msgid "shutting down" msgstr "arresto in corso" -#: pg_controldata.c:60 +#: pg_controldata.c:61 msgid "in crash recovery" msgstr "in fase di recupero da un crash" -#: pg_controldata.c:62 +#: pg_controldata.c:63 msgid "in archive recovery" msgstr "in fase di recupero di un archivio" -#: pg_controldata.c:64 +#: pg_controldata.c:65 msgid "in production" msgstr "in produzione" -#: pg_controldata.c:66 +#: pg_controldata.c:67 msgid "unrecognized status code" msgstr "codice di stato sconosciuto" -#: pg_controldata.c:83 +#: pg_controldata.c:84 msgid "unrecognized wal_level" msgstr "wal_level sconosciuto" -#: pg_controldata.c:128 -#, c-format -msgid "%s: no data directory specified\n" -msgstr "%s: non è stata specificata una directory per i dati\n" - -#: pg_controldata.c:129 +#: pg_controldata.c:133 pg_controldata.c:151 pg_controldata.c:159 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Prova \"%s --help\" per maggiori informazioni.\n" -#: pg_controldata.c:137 +#: pg_controldata.c:149 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: troppi argomenti di riga di comando (il primo è \"%s\")\n" + +#: pg_controldata.c:158 +#, c-format +msgid "%s: no data directory specified\n" +msgstr "%s: non è stata specificata una directory per i dati\n" + +#: pg_controldata.c:167 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: errore nell'apertura del file \"%s\" per la lettura: %s\n" -#: pg_controldata.c:144 +#: pg_controldata.c:174 #, c-format msgid "%s: could not read file \"%s\": %s\n" msgstr "%s: lettura del file \"%s\" fallita: %s\n" -#: pg_controldata.c:158 +#: pg_controldata.c:188 #, c-format msgid "" "WARNING: Calculated CRC checksum does not match value stored in file.\n" @@ -159,12 +164,12 @@ msgstr "" "I risultati seguenti non sono affidabili.\n" "\n" -#: pg_controldata.c:192 +#: pg_controldata.c:222 #, c-format msgid "pg_control version number: %u\n" msgstr "Numero di versione di pg_control: %u\n" -#: pg_controldata.c:195 +#: pg_controldata.c:225 #, c-format msgid "" "WARNING: possible byte ordering mismatch\n" @@ -178,264 +183,274 @@ msgstr "" "qui sotto potrebbe essere non corretto, e l'installazione di PostgreSQL\n" "potrebbe essere incompatibile con questa directory dei dati.\n" -#: pg_controldata.c:199 +#: pg_controldata.c:229 #, c-format msgid "Catalog version number: %u\n" msgstr "Numero di versione del catalogo: %u\n" -#: pg_controldata.c:201 +#: pg_controldata.c:231 #, c-format msgid "Database system identifier: %s\n" msgstr "Identificatore di sistema del database: %s\n" -#: pg_controldata.c:203 +#: pg_controldata.c:233 #, c-format msgid "Database cluster state: %s\n" msgstr "Stato del cluster di database: %s\n" -#: pg_controldata.c:205 +#: pg_controldata.c:235 #, c-format msgid "pg_control last modified: %s\n" msgstr "Ultima modifica a pg_control: %s\n" -#: pg_controldata.c:207 +#: pg_controldata.c:237 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Ultima posizione del checkpoint: %X/%X\n" -#: pg_controldata.c:210 +#: pg_controldata.c:240 #, c-format msgid "Prior checkpoint location: %X/%X\n" msgstr "Posizione precedente del checkpoint: %X/%X\n" -#: pg_controldata.c:213 +#: pg_controldata.c:243 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "Locazione di REDO dell'ultimo checkpoint: %X/%X\n" -#: pg_controldata.c:216 +#: pg_controldata.c:246 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "File WAL di REDO dell'ultimo checkpoint: %s\n" -#: pg_controldata.c:218 +#: pg_controldata.c:248 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "TimeLineId dell'ultimo checkpoint: %u\n" -#: pg_controldata.c:220 +#: pg_controldata.c:250 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "PrevTimeLineID dell'ultimo checkpoint: %u\n" -#: pg_controldata.c:222 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "full_page_writes dell'ultimo checkpoint: %s\n" -#: pg_controldata.c:223 pg_controldata.c:264 +#: pg_controldata.c:253 pg_controldata.c:296 pg_controldata.c:306 msgid "off" msgstr "disattivato" -#: pg_controldata.c:223 pg_controldata.c:264 +#: pg_controldata.c:253 pg_controldata.c:296 pg_controldata.c:306 msgid "on" msgstr "attivato" -#: pg_controldata.c:224 +#: pg_controldata.c:254 #, c-format msgid "Latest checkpoint's NextXID: %u/%u\n" msgstr "NextXID dell'ultimo checkpoint: %u%u\n" -#: pg_controldata.c:227 +#: pg_controldata.c:257 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID dell'ultimo checkpoint: %u\n" -#: pg_controldata.c:229 +#: pg_controldata.c:259 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId dell'ultimo checkpoint: %u\n" -#: pg_controldata.c:231 +#: pg_controldata.c:261 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset dell'ultimo checkpoint: %u\n" -#: pg_controldata.c:233 +#: pg_controldata.c:263 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID dell'ultimo checkpoint: %u\n" -#: pg_controldata.c:235 +#: pg_controldata.c:265 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "DB dell'oldestXID dell'ultimo checkpoint: %u\n" -#: pg_controldata.c:237 +#: pg_controldata.c:267 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID dell'ultimo checkpoint: %u\n" -#: pg_controldata.c:239 +#: pg_controldata.c:269 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXID dell'ultimo checkpoint: %u\n" -#: pg_controldata.c:241 +#: pg_controldata.c:271 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "DB dell'oldestMulti dell'ultimo checkpoint: %u\n" -#: pg_controldata.c:243 +#: pg_controldata.c:273 +#, c-format +msgid "Latest checkpoint's oldestCommitTs: %u\n" +msgstr "oldestCommitTs dell'ultimo checkpoint: %u\n" + +#: pg_controldata.c:275 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Orario ultimo checkpoint: %s\n" -#: pg_controldata.c:245 +#: pg_controldata.c:277 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Falso contatore LSN per rel. non loggate: %X/%X\n" -#: pg_controldata.c:248 +#: pg_controldata.c:280 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Posizione del minimum recovery ending: %X/%X\n" -#: pg_controldata.c:251 +#: pg_controldata.c:283 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Timeline posiz. minimum recovery ending: %u\n" -#: pg_controldata.c:253 +#: pg_controldata.c:285 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Posizione dell'inizio del backup: %X/%X\n" -#: pg_controldata.c:256 +#: pg_controldata.c:288 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Posizione della fine del backup: %X/%X\n" -#: pg_controldata.c:259 +#: pg_controldata.c:291 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Record di fine backup richiesto: %s\n" -#: pg_controldata.c:260 +#: pg_controldata.c:292 msgid "no" msgstr "no" -#: pg_controldata.c:260 +#: pg_controldata.c:292 msgid "yes" msgstr "sì" -#: pg_controldata.c:261 +#: pg_controldata.c:293 #, c-format msgid "Current wal_level setting: %s\n" msgstr "Impostazione attuale wal_level: %s\n" -#: pg_controldata.c:263 +#: pg_controldata.c:295 #, c-format msgid "Current wal_log_hints setting: %s\n" msgstr "Impostazione attuale wal_log_hints: %s\n" -#: pg_controldata.c:265 +#: pg_controldata.c:297 #, c-format msgid "Current max_connections setting: %d\n" msgstr "Impostazione attuale max_connections: %d\n" -#: pg_controldata.c:267 +#: pg_controldata.c:299 #, c-format msgid "Current max_worker_processes setting: %d\n" msgstr "Impostazione attuale max_worker_processes: %d\n" -#: pg_controldata.c:269 +#: pg_controldata.c:301 #, c-format msgid "Current max_prepared_xacts setting: %d\n" msgstr "Impostazione attuale max_prepared_xacts: %d\n" -#: pg_controldata.c:271 +#: pg_controldata.c:303 #, c-format msgid "Current max_locks_per_xact setting: %d\n" msgstr "Impostazione attuale max_locks_per_xact: %d\n" -#: pg_controldata.c:273 +#: pg_controldata.c:305 +#, c-format +msgid "Current track_commit_timestamp setting: %s\n" +msgstr "Attuale impostazione track_commit_timestamp:%s\n" + +#: pg_controldata.c:307 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Massimo allineamento dei dati: %u\n" -#: pg_controldata.c:276 +#: pg_controldata.c:310 #, c-format msgid "Database block size: %u\n" msgstr "Dimensione blocco database: %u\n" -#: pg_controldata.c:278 +#: pg_controldata.c:312 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Blocchi per ogni segmento grosse tabelle: %u\n" -#: pg_controldata.c:280 +#: pg_controldata.c:314 #, c-format msgid "WAL block size: %u\n" msgstr "Dimensione blocco WAL: %u\n" -#: pg_controldata.c:282 +#: pg_controldata.c:316 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Byte per segmento WAL: %u\n" -#: pg_controldata.c:284 +#: pg_controldata.c:318 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Lunghezza massima degli identificatori: %u\n" -#: pg_controldata.c:286 +#: pg_controldata.c:320 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Massimo numero di colonne in un indice: %u\n" -#: pg_controldata.c:288 +#: pg_controldata.c:322 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Massima dimensione di un segmento TOAST: %u\n" -#: pg_controldata.c:290 +#: pg_controldata.c:324 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Dimensione di un blocco large-object: %u\n" -#: pg_controldata.c:292 +#: pg_controldata.c:326 #, c-format msgid "Date/time type storage: %s\n" msgstr "Memorizzazione per tipi data/ora: %s\n" -#: pg_controldata.c:293 +#: pg_controldata.c:327 msgid "64-bit integers" msgstr "interi a 64 bit" -#: pg_controldata.c:293 +#: pg_controldata.c:327 msgid "floating-point numbers" msgstr "numeri in virgola mobile" -#: pg_controldata.c:294 +#: pg_controldata.c:328 #, c-format msgid "Float4 argument passing: %s\n" msgstr "Passaggio di argomenti Float4: %s\n" -#: pg_controldata.c:295 pg_controldata.c:297 +#: pg_controldata.c:329 pg_controldata.c:331 msgid "by reference" msgstr "per riferimento" -#: pg_controldata.c:295 pg_controldata.c:297 +#: pg_controldata.c:329 pg_controldata.c:331 msgid "by value" msgstr "per valore" -#: pg_controldata.c:296 +#: pg_controldata.c:330 #, c-format msgid "Float8 argument passing: %s\n" msgstr "passaggio di argomenti Float8: %s\n" -#: pg_controldata.c:298 +#: pg_controldata.c:332 #, c-format msgid "Data page checksum version: %u\n" msgstr "Versione somma di controllo dati pagine: %u\n" diff --git a/src/bin/pg_controldata/po/pt_BR.po b/src/bin/pg_controldata/po/pt_BR.po index dcbced78c31f2..45c7dc3288a57 100644 --- a/src/bin/pg_controldata/po/pt_BR.po +++ b/src/bin/pg_controldata/po/pt_BR.po @@ -3,13 +3,13 @@ # This file is distributed under the same license as the PostgreSQL package. # Cesar Suga , 2002. # Roberto Mello , 2002. -# Euler Taveira de Oliveira , 2003-2014. +# Euler Taveira de Oliveira , 2003-2015. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-09-14 23:08-0300\n" +"POT-Creation-Date: 2015-10-04 15:50-0300\n" "PO-Revision-Date: 2005-10-04 23:00-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: pg_controldata.c:34 +#: pg_controldata.c:35 #, c-format msgid "" "%s displays control information of a PostgreSQL database cluster.\n" @@ -27,17 +27,17 @@ msgstr "" "%s mostra informações de controle de um agrupamento de banco de dados PostgreSQL.\n" "\n" -#: pg_controldata.c:35 +#: pg_controldata.c:36 #, c-format msgid "Usage:\n" msgstr "Uso:\n" -#: pg_controldata.c:36 +#: pg_controldata.c:37 #, c-format msgid " %s [OPTION] [DATADIR]\n" msgstr " %s [OPÇÃO] [DIRDADOS]\n" -#: pg_controldata.c:37 +#: pg_controldata.c:38 #, c-format msgid "" "\n" @@ -46,17 +46,22 @@ msgstr "" "\n" "Opções:\n" -#: pg_controldata.c:38 +#: pg_controldata.c:39 +#, c-format +msgid " [-D] DATADIR data directory\n" +msgstr " [-D] DIRDADOS diretório de dados\n" + +#: pg_controldata.c:40 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informação sobre a versão e termina\n" -#: pg_controldata.c:39 +#: pg_controldata.c:41 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra essa ajuda e termina\n" -#: pg_controldata.c:40 +#: pg_controldata.c:42 #, c-format msgid "" "\n" @@ -69,68 +74,73 @@ msgstr "" "é utilizada.\n" "\n" -#: pg_controldata.c:42 +#: pg_controldata.c:44 #, c-format msgid "Report bugs to .\n" msgstr "Relate erros a .\n" -#: pg_controldata.c:52 +#: pg_controldata.c:54 msgid "starting up" msgstr "iniciando" -#: pg_controldata.c:54 +#: pg_controldata.c:56 msgid "shut down" msgstr "desligado" -#: pg_controldata.c:56 +#: pg_controldata.c:58 msgid "shut down in recovery" msgstr "desligado em recuperação" -#: pg_controldata.c:58 +#: pg_controldata.c:60 msgid "shutting down" msgstr "desligando" -#: pg_controldata.c:60 +#: pg_controldata.c:62 msgid "in crash recovery" msgstr "recuperando de uma queda" -#: pg_controldata.c:62 +#: pg_controldata.c:64 msgid "in archive recovery" msgstr "recuperando de uma cópia" -#: pg_controldata.c:64 +#: pg_controldata.c:66 msgid "in production" msgstr "em produção" -#: pg_controldata.c:66 +#: pg_controldata.c:68 msgid "unrecognized status code" msgstr "código de status desconhecido" -#: pg_controldata.c:83 +#: pg_controldata.c:85 msgid "unrecognized wal_level" msgstr "wal_level desconhecido" -#: pg_controldata.c:128 -#, c-format -msgid "%s: no data directory specified\n" -msgstr "%s: nenhum diretório de dados especificado\n" - -#: pg_controldata.c:129 +#: pg_controldata.c:134 pg_controldata.c:152 pg_controldata.c:160 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Tente \"%s --help\" para obter informações adicionais.\n" -#: pg_controldata.c:137 +#: pg_controldata.c:150 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: muitos argumentos de linha de comando (primeiro é \"%s\")\n" + +#: pg_controldata.c:159 +#, c-format +msgid "%s: no data directory specified\n" +msgstr "%s: nenhum diretório de dados especificado\n" + +#: pg_controldata.c:168 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: não pôde abrir arquivo \"%s\" para leitura: %s\n" -#: pg_controldata.c:144 +#: pg_controldata.c:175 #, c-format msgid "%s: could not read file \"%s\": %s\n" msgstr "%s: não pôde ler arquivo \"%s\": %s\n" -#: pg_controldata.c:158 +#: pg_controldata.c:189 #, c-format msgid "" "WARNING: Calculated CRC checksum does not match value stored in file.\n" @@ -143,12 +153,12 @@ msgstr "" "está esperando. Os resultados abaixo não são confiáveis.\n" "\n" -#: pg_controldata.c:192 +#: pg_controldata.c:223 #, c-format msgid "pg_control version number: %u\n" msgstr "número da versão do pg_control: %u\n" -#: pg_controldata.c:195 +#: pg_controldata.c:226 #, c-format msgid "" "WARNING: possible byte ordering mismatch\n" @@ -161,264 +171,279 @@ msgstr "" "corresponder com a utilizada por este programa. Neste caso os resultados abaixo\n" "seriam incorretos, e a instalação do PostgreSQL seria incompatível com o diretório de dados.\n" -#: pg_controldata.c:199 +#: pg_controldata.c:230 #, c-format msgid "Catalog version number: %u\n" msgstr "Número da versão do catálogo: %u\n" -#: pg_controldata.c:201 +#: pg_controldata.c:232 #, c-format msgid "Database system identifier: %s\n" msgstr "Identificador do sistema de banco de dados: %s\n" -#: pg_controldata.c:203 +#: pg_controldata.c:234 #, c-format msgid "Database cluster state: %s\n" msgstr "Estado do agrupamento de banco de dados: %s\n" -#: pg_controldata.c:205 +#: pg_controldata.c:236 #, c-format msgid "pg_control last modified: %s\n" msgstr "Última modificação do pg_control: %s\n" -#: pg_controldata.c:207 +#: pg_controldata.c:238 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Local do último ponto de controle: %X/%X\n" -#: pg_controldata.c:210 +#: pg_controldata.c:241 #, c-format msgid "Prior checkpoint location: %X/%X\n" msgstr "Local do ponto de controle anterior: %X/%X\n" -#: pg_controldata.c:213 +#: pg_controldata.c:244 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "Local de REDO do último ponto de controle: %X/%X\n" -#: pg_controldata.c:216 +#: pg_controldata.c:247 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "Arquivo com REDO do último ponto de controle: %s\n" -#: pg_controldata.c:218 +#: pg_controldata.c:249 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "TimeLineID do último ponto de controle: %u\n" -#: pg_controldata.c:220 +#: pg_controldata.c:251 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "PrevTimeLineID do último ponto de controle: %u\n" -#: pg_controldata.c:222 +#: pg_controldata.c:253 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "full_page_writes do último ponto de controle: %s\n" -#: pg_controldata.c:223 pg_controldata.c:264 +#: pg_controldata.c:254 pg_controldata.c:299 pg_controldata.c:309 msgid "off" msgstr "desabilitado" -#: pg_controldata.c:223 pg_controldata.c:264 +#: pg_controldata.c:254 pg_controldata.c:299 pg_controldata.c:309 msgid "on" msgstr "habilitado" -#: pg_controldata.c:224 +#: pg_controldata.c:255 #, c-format msgid "Latest checkpoint's NextXID: %u/%u\n" msgstr "NextXID do último ponto de controle: %u/%u\n" -#: pg_controldata.c:227 +#: pg_controldata.c:258 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID do último ponto de controle: %u\n" -#: pg_controldata.c:229 +#: pg_controldata.c:260 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId do último ponto de controle: %u\n" -#: pg_controldata.c:231 +#: pg_controldata.c:262 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset do último ponto de controle: %u\n" -#: pg_controldata.c:233 +#: pg_controldata.c:264 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID do último ponto de controle: %u\n" -#: pg_controldata.c:235 +#: pg_controldata.c:266 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "BD do oldestXID do último ponto de controle: %u\n" -#: pg_controldata.c:237 +#: pg_controldata.c:268 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID do último ponto de controle: %u\n" -#: pg_controldata.c:239 +#: pg_controldata.c:270 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid do último ponto de controle: %u\n" -#: pg_controldata.c:241 +#: pg_controldata.c:272 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "BD do oldestMulti do último ponto de controle: %u\n" -#: pg_controldata.c:243 +#: pg_controldata.c:274 +#, c-format +msgid "Latest checkpoint's oldestCommitTs: %u\n" +msgstr "oldestCommitTs do último ponto de controle: %u\n" + +#: pg_controldata.c:276 +#, c-format +msgid "Latest checkpoint's newestCommitTs: %u\n" +msgstr "newestCommitTs do último ponto de controle: %u\n" + +#: pg_controldata.c:278 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Hora do último ponto de controle: %s\n" -#: pg_controldata.c:245 +#: pg_controldata.c:280 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Contador LSN falso para relações unlogged: %X/%X\n" -#: pg_controldata.c:248 +#: pg_controldata.c:283 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Local final mínimo de recuperação: %X/%X\n" -#: pg_controldata.c:251 +#: pg_controldata.c:286 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Linha do tempo do local final mínimo de recuperação: %u\n" -#: pg_controldata.c:253 +#: pg_controldata.c:288 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Local de início da cópia de segurança: %X/%X\n" -#: pg_controldata.c:256 +#: pg_controldata.c:291 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Local de fim da cópia de segurança: %X/%X\n" -#: pg_controldata.c:259 +#: pg_controldata.c:294 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Registro de fim-da-cópia-de-segurança requerido: %s\n" -#: pg_controldata.c:260 +#: pg_controldata.c:295 msgid "no" msgstr "não" -#: pg_controldata.c:260 +#: pg_controldata.c:295 msgid "yes" msgstr "sim" -#: pg_controldata.c:261 +#: pg_controldata.c:296 +#, c-format +msgid "wal_level setting: %s\n" +msgstr "Definição de wal_level: %s\n" + +#: pg_controldata.c:298 #, c-format -msgid "Current wal_level setting: %s\n" -msgstr "Definição atual de wal_level: %s\n" +msgid "wal_log_hints setting: %s\n" +msgstr "Definição de wal_log_hints: %s\n" -#: pg_controldata.c:263 +#: pg_controldata.c:300 #, c-format -msgid "Current wal_log_hints setting: %s\n" -msgstr "Definição atual de wal_log_hints: %s\n" +msgid "max_connections setting: %d\n" +msgstr "Definição de max_connections: %d\n" -#: pg_controldata.c:265 +#: pg_controldata.c:302 #, c-format -msgid "Current max_connections setting: %d\n" -msgstr "Definição atual de max_connections: %d\n" +msgid "max_worker_processes setting: %d\n" +msgstr "Definição de max_worker_processes: %d\n" -#: pg_controldata.c:267 +#: pg_controldata.c:304 #, c-format -msgid "Current max_worker_processes setting: %d\n" -msgstr "Definição atual de max_worker_processes: %d\n" +msgid "max_prepared_xacts setting: %d\n" +msgstr "Definição de max_prepared_xacts: %d\n" -#: pg_controldata.c:269 +#: pg_controldata.c:306 #, c-format -msgid "Current max_prepared_xacts setting: %d\n" -msgstr "Definição atual de max_prepared_xacts: %d\n" +msgid "max_locks_per_xact setting: %d\n" +msgstr "Definição de max_locks_per_xact: %d\n" -#: pg_controldata.c:271 +#: pg_controldata.c:308 #, c-format -msgid "Current max_locks_per_xact setting: %d\n" -msgstr "Definição atual de max_locks_per_xact: %d\n" +msgid "track_commit_timestamp setting: %s\n" +msgstr "Definição de track_commit_timestamp: %s\n" -#: pg_controldata.c:273 +#: pg_controldata.c:310 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Máximo alinhamento de dado: %u\n" -#: pg_controldata.c:276 +#: pg_controldata.c:313 #, c-format msgid "Database block size: %u\n" msgstr "Tamanho do bloco do banco de dados: %u\n" -#: pg_controldata.c:278 +#: pg_controldata.c:315 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Blocos por segmento da relação grande: %u\n" -#: pg_controldata.c:280 +#: pg_controldata.c:317 #, c-format msgid "WAL block size: %u\n" msgstr "Tamanho do bloco do WAL: %u\n" -#: pg_controldata.c:282 +#: pg_controldata.c:319 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Bytes por segmento do WAL: %u\n" -#: pg_controldata.c:284 +#: pg_controldata.c:321 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Tamanho máximo de identificadores: %u\n" -#: pg_controldata.c:286 +#: pg_controldata.c:323 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Máximo de colunas em um índice: %u\n" -#: pg_controldata.c:288 +#: pg_controldata.c:325 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Tamanho máximo do bloco TOAST: %u\n" -#: pg_controldata.c:290 +#: pg_controldata.c:327 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Tamanho máximo do bloco de objeto grande: %u\n" -#: pg_controldata.c:292 +#: pg_controldata.c:329 #, c-format msgid "Date/time type storage: %s\n" msgstr "Tipo de data/hora do repositório: %s\n" -#: pg_controldata.c:293 +#: pg_controldata.c:330 msgid "64-bit integers" msgstr "inteiros de 64 bits" -#: pg_controldata.c:293 +#: pg_controldata.c:330 msgid "floating-point numbers" msgstr "números de ponto flutuante" -#: pg_controldata.c:294 +#: pg_controldata.c:331 #, c-format msgid "Float4 argument passing: %s\n" msgstr "Passagem de argumento float4: %s\n" -#: pg_controldata.c:295 pg_controldata.c:297 +#: pg_controldata.c:332 pg_controldata.c:334 msgid "by reference" msgstr "por referência" -#: pg_controldata.c:295 pg_controldata.c:297 +#: pg_controldata.c:332 pg_controldata.c:334 msgid "by value" msgstr "por valor" -#: pg_controldata.c:296 +#: pg_controldata.c:333 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Passagem de argumento float8: %s\n" -#: pg_controldata.c:298 +#: pg_controldata.c:335 #, c-format msgid "Data page checksum version: %u\n" msgstr "Versão da verificação de páginas de dados: %u\n" diff --git a/src/bin/pg_controldata/po/ru.po b/src/bin/pg_controldata/po/ru.po index 552ca8d627a09..d46a5a931dcc0 100644 --- a/src/bin/pg_controldata/po/ru.po +++ b/src/bin/pg_controldata/po/ru.po @@ -21,9 +21,9 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9 current\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-08-02 06:42+0000\n" -"PO-Revision-Date: 2014-08-14 22:51+0400\n" -"Last-Translator: Dmitriy Olshevskiy \n" +"POT-Creation-Date: 2015-07-22 00:14+0000\n" +"PO-Revision-Date: 2015-07-27 22:17+0300\n" +"Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" @@ -32,9 +32,9 @@ msgstr "" "X-Poedit-SourceCharset: utf-8\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.6.7\n" +"X-Generator: Lokalize 1.5\n" -#: pg_controldata.c:34 +#: pg_controldata.c:35 #, c-format msgid "" "%s displays control information of a PostgreSQL database cluster.\n" @@ -43,17 +43,17 @@ msgstr "" "%s показывает информацию о работе кластера баз PostgreSQL.\n" "\n" -#: pg_controldata.c:35 +#: pg_controldata.c:36 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_controldata.c:36 +#: pg_controldata.c:37 #, c-format -msgid " %s [OPTION] [DATADIR]\n" -msgstr " %s [ПАРАМЕТР] [КАТАЛОГ]\n" +msgid " %s [OPTION] [[-D] DATADIR]\n" +msgstr " %s [ПАРАМЕТР] [[-D] КАТАЛОГ_ДАННЫХ]\n" -#: pg_controldata.c:37 +#: pg_controldata.c:38 #, c-format msgid "" "\n" @@ -62,17 +62,17 @@ msgstr "" "\n" "Параметры:\n" -#: pg_controldata.c:38 +#: pg_controldata.c:39 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_controldata.c:39 +#: pg_controldata.c:40 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_controldata.c:40 +#: pg_controldata.c:41 #, c-format msgid "" "\n" @@ -86,68 +86,73 @@ msgstr "" "PGDATA.\n" "\n" -#: pg_controldata.c:42 +#: pg_controldata.c:43 #, c-format msgid "Report bugs to .\n" msgstr "Об ошибках сообщайте по адресу .\n" -#: pg_controldata.c:52 +#: pg_controldata.c:53 msgid "starting up" msgstr "запускается" -#: pg_controldata.c:54 +#: pg_controldata.c:55 msgid "shut down" msgstr "выключен" -#: pg_controldata.c:56 +#: pg_controldata.c:57 msgid "shut down in recovery" msgstr "выключен при восстановлении" -#: pg_controldata.c:58 +#: pg_controldata.c:59 msgid "shutting down" msgstr "выключение" -#: pg_controldata.c:60 +#: pg_controldata.c:61 msgid "in crash recovery" msgstr "восстановление после сбоя" -#: pg_controldata.c:62 +#: pg_controldata.c:63 msgid "in archive recovery" msgstr "восстановление из архива" -#: pg_controldata.c:64 +#: pg_controldata.c:65 msgid "in production" msgstr "в работе" -#: pg_controldata.c:66 +#: pg_controldata.c:67 msgid "unrecognized status code" msgstr "нераспознанный код состояния" -#: pg_controldata.c:83 +#: pg_controldata.c:84 msgid "unrecognized wal_level" msgstr "нераспознанный уровень WAL" -#: pg_controldata.c:128 -#, c-format -msgid "%s: no data directory specified\n" -msgstr "%s: каталог данных не указан\n" - -#: pg_controldata.c:129 +#: pg_controldata.c:133 pg_controldata.c:151 pg_controldata.c:159 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_controldata.c:137 +#: pg_controldata.c:149 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: слишком много аргументов командной строки (первый: \"%s\")\n" + +#: pg_controldata.c:158 +#, c-format +msgid "%s: no data directory specified\n" +msgstr "%s: каталог данных не указан\n" + +#: pg_controldata.c:167 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: не удалось открыть файл \"%s\" для чтения: %s\n" -#: pg_controldata.c:144 +#: pg_controldata.c:174 #, c-format msgid "%s: could not read file \"%s\": %s\n" msgstr "%s: не удалось прочитать файл \"%s\": %s\n" -#: pg_controldata.c:158 +#: pg_controldata.c:188 #, c-format msgid "" "WARNING: Calculated CRC checksum does not match value stored in file.\n" @@ -155,17 +160,18 @@ msgid "" "is expecting. The results below are untrustworthy.\n" "\n" msgstr "" -"ВНИМАНИЕ: Вычисленная контрольная сумма не совпадает со значением в файле.\n" +"ПРЕДУПРЕЖДЕНИЕ: Вычисленная контрольная сумма не совпадает со значением в " +"файле.\n" "Либо файл повреждён, либо его формат отличается от ожидаемого.\n" "Следующая информация может быть недостоверной.\n" "\n" -#: pg_controldata.c:192 +#: pg_controldata.c:222 #, c-format msgid "pg_control version number: %u\n" msgstr "Номер версии pg_control: %u\n" -#: pg_controldata.c:195 +#: pg_controldata.c:225 #, c-format msgid "" "WARNING: possible byte ordering mismatch\n" @@ -174,269 +180,279 @@ msgid "" "and\n" "the PostgreSQL installation would be incompatible with this data directory.\n" msgstr "" -"ВНИМАНИЕ: возможно несоответствие порядка байт\n" +"ПРЕДУПРЕЖДЕНИЕ: возможно несоответствие порядка байт\n" "Порядок байт в файле pg_control может не соответствовать используемому\n" "этой программой. В этом случае результаты будут неверными и\n" "установленный PostgreSQL будет несовместим с этим каталогом данных.\n" -#: pg_controldata.c:199 +#: pg_controldata.c:229 #, c-format msgid "Catalog version number: %u\n" msgstr "Номер версии каталога: %u\n" -#: pg_controldata.c:201 +#: pg_controldata.c:231 #, c-format msgid "Database system identifier: %s\n" msgstr "Идентификатор системы баз данных: %s\n" -#: pg_controldata.c:203 +#: pg_controldata.c:233 #, c-format msgid "Database cluster state: %s\n" msgstr "Состояние кластера БД: %s\n" -#: pg_controldata.c:205 +#: pg_controldata.c:235 #, c-format msgid "pg_control last modified: %s\n" msgstr "Последнее обновление pg_control: %s\n" -#: pg_controldata.c:207 +#: pg_controldata.c:237 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Положение последней конт. точки: %X/%X\n" -#: pg_controldata.c:210 +#: pg_controldata.c:240 #, c-format msgid "Prior checkpoint location: %X/%X\n" msgstr "Положение предыдущей конт. точки: %X/%X\n" -#: pg_controldata.c:213 +#: pg_controldata.c:243 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "Положение REDO последней конт. точки: %X/%X\n" -#: pg_controldata.c:216 +#: pg_controldata.c:246 #, c-format msgid "Latest checkpoint's REDO WAL file: %s\n" msgstr "Файл WAL c REDO последней к.т.: %s\n" -#: pg_controldata.c:218 +#: pg_controldata.c:248 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "Линия времени последней конт. точки: %u\n" -#: pg_controldata.c:220 +#: pg_controldata.c:250 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "Пред. линия времени последней к.т.: %u\n" -#: pg_controldata.c:222 +#: pg_controldata.c:252 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "Режим full_page_writes последней к.т: %s\n" -#: pg_controldata.c:223 pg_controldata.c:264 +#: pg_controldata.c:253 pg_controldata.c:296 pg_controldata.c:306 msgid "off" msgstr "выкл." -#: pg_controldata.c:223 pg_controldata.c:264 +#: pg_controldata.c:253 pg_controldata.c:296 pg_controldata.c:306 msgid "on" msgstr "вкл." -#: pg_controldata.c:224 +#: pg_controldata.c:254 #, c-format msgid "Latest checkpoint's NextXID: %u/%u\n" msgstr "NextXID последней конт. точки: %u/%u\n" -#: pg_controldata.c:227 +#: pg_controldata.c:257 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID последней конт. точки: %u\n" -#: pg_controldata.c:229 +#: pg_controldata.c:259 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId послед. конт. точки: %u\n" -#: pg_controldata.c:231 +#: pg_controldata.c:261 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset послед. конт. точки: %u\n" -#: pg_controldata.c:233 +#: pg_controldata.c:263 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID последней конт. точки: %u\n" -#: pg_controldata.c:235 +#: pg_controldata.c:265 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "БД с oldestXID последней конт. точки: %u\n" -#: pg_controldata.c:237 +#: pg_controldata.c:267 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID последней к.т.: %u\n" -#: pg_controldata.c:239 +#: pg_controldata.c:269 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid последней конт. точки: %u\n" -#: pg_controldata.c:241 +#: pg_controldata.c:271 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "БД с oldestMulti последней к.т.: %u\n" -#: pg_controldata.c:243 +#: pg_controldata.c:273 +#, c-format +msgid "Latest checkpoint's oldestCommitTs: %u\n" +msgstr "oldestCommitTs последней конт. точки: %u\n" + +#: pg_controldata.c:275 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Время последней контрольной точки: %s\n" -#: pg_controldata.c:245 +#: pg_controldata.c:277 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Фиктивный LSN для нежурналир. таблиц: %X/%X\n" -#: pg_controldata.c:248 +#: pg_controldata.c:280 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Мин. положение конца восстановления: %X/%X\n" -#: pg_controldata.c:251 +#: pg_controldata.c:283 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Линия времени мин. положения к.в.: %u\n" -#: pg_controldata.c:253 +#: pg_controldata.c:285 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Положение начала копии: %X/%X\n" -#: pg_controldata.c:256 +#: pg_controldata.c:288 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Положение конца копии: %X/%X\n" -#: pg_controldata.c:259 +#: pg_controldata.c:291 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Требуется запись конец-копии: %s\n" -#: pg_controldata.c:260 +#: pg_controldata.c:292 msgid "no" msgstr "нет" -#: pg_controldata.c:260 +#: pg_controldata.c:292 msgid "yes" msgstr "да" -#: pg_controldata.c:261 +#: pg_controldata.c:293 #, c-format msgid "Current wal_level setting: %s\n" msgstr "Текущее значение wal_level: %s\n" -#: pg_controldata.c:263 +#: pg_controldata.c:295 #, c-format msgid "Current wal_log_hints setting: %s\n" msgstr "Текущее значение wal_log_hints: %s\n" -#: pg_controldata.c:265 +#: pg_controldata.c:297 #, c-format msgid "Current max_connections setting: %d\n" msgstr "Текущее значение max_connections: %d\n" -#: pg_controldata.c:267 +#: pg_controldata.c:299 #, c-format msgid "Current max_worker_processes setting: %d\n" msgstr "Текущее значение max_worker_processes:%d\n" -#: pg_controldata.c:269 +#: pg_controldata.c:301 #, c-format msgid "Current max_prepared_xacts setting: %d\n" msgstr "Текущее значение max_prepared_xacts: %d\n" -#: pg_controldata.c:271 +#: pg_controldata.c:303 #, c-format msgid "Current max_locks_per_xact setting: %d\n" msgstr "Текущее значение max_locks_per_xact: %d\n" -#: pg_controldata.c:273 +#: pg_controldata.c:305 +#, c-format +msgid "Current track_commit_timestamp setting: %s\n" +msgstr "Тек. значение track_commit_timestamp: %s\n" + +#: pg_controldata.c:307 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Макс. предел выравнивания данных: %u\n" -#: pg_controldata.c:276 +#: pg_controldata.c:310 #, c-format msgid "Database block size: %u\n" msgstr "Размер блока БД: %u\n" -#: pg_controldata.c:278 +#: pg_controldata.c:312 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Блоков в макс. сегменте отношений: %u\n" -#: pg_controldata.c:280 +#: pg_controldata.c:314 #, c-format msgid "WAL block size: %u\n" msgstr "Размер блока WAL: %u\n" -#: pg_controldata.c:282 +#: pg_controldata.c:316 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Байт в сегменте WAL: %u\n" -#: pg_controldata.c:284 +#: pg_controldata.c:318 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Максимальная длина идентификаторов: %u\n" -#: pg_controldata.c:286 +#: pg_controldata.c:320 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Максимальное число колонок в индексе: %u\n" -#: pg_controldata.c:288 +#: pg_controldata.c:322 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Максимальный размер порции TOAST: %u\n" -#: pg_controldata.c:290 +#: pg_controldata.c:324 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Размер порции большого объекта: %u\n" -#: pg_controldata.c:292 +#: pg_controldata.c:326 #, c-format msgid "Date/time type storage: %s\n" msgstr "Формат хранения даты/времени: %s\n" -#: pg_controldata.c:293 +#: pg_controldata.c:327 msgid "64-bit integers" msgstr "64-битные целые" -#: pg_controldata.c:293 +#: pg_controldata.c:327 msgid "floating-point numbers" msgstr "числа с плавающей точкой" -#: pg_controldata.c:294 +#: pg_controldata.c:328 #, c-format msgid "Float4 argument passing: %s\n" msgstr "Передача аргумента Float4: %s\n" -#: pg_controldata.c:295 pg_controldata.c:297 +#: pg_controldata.c:329 pg_controldata.c:331 msgid "by reference" msgstr "по ссылке" -#: pg_controldata.c:295 pg_controldata.c:297 +#: pg_controldata.c:329 pg_controldata.c:331 msgid "by value" msgstr "по значению" -#: pg_controldata.c:296 +#: pg_controldata.c:330 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Передача аргумента Float8: %s\n" -#: pg_controldata.c:298 +#: pg_controldata.c:332 #, c-format msgid "Data page checksum version: %u\n" msgstr "Версия контрольных сумм страниц: %u\n" diff --git a/src/bin/pg_controldata/t/001_pg_controldata.pl b/src/bin/pg_controldata/t/001_pg_controldata.pl index a4180e7ed18a5..e2b0d420a23c8 100644 --- a/src/bin/pg_controldata/t/001_pg_controldata.pl +++ b/src/bin/pg_controldata/t/001_pg_controldata.pl @@ -11,6 +11,6 @@ command_fails(['pg_controldata'], 'pg_controldata without arguments fails'); command_fails([ 'pg_controldata', 'nonexistent' ], 'pg_controldata with nonexistent directory fails'); -system_or_bail "initdb -D '$tempdir'/data -A trust >/dev/null"; +standard_initdb "$tempdir/data"; command_like([ 'pg_controldata', "$tempdir/data" ], qr/checkpoint/, 'pg_controldata produces output'); diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index 74764fabdaf1f..dacdfef323c07 100644 --- a/src/bin/pg_ctl/pg_ctl.c +++ b/src/bin/pg_ctl/pg_ctl.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #ifdef HAVE_SYS_RESOURCE_H @@ -153,10 +154,10 @@ static int CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION *processInfo, static pgpid_t get_pgpid(bool is_status_request); static char **readfile(const char *path); static void free_readfile(char **optlines); -static int start_postmaster(void); +static pgpid_t start_postmaster(void); static void read_post_opts(void); -static PGPing test_postmaster_connection(bool); +static PGPing test_postmaster_connection(pgpid_t pm_pid, bool do_checkpoint); static bool postmaster_is_alive(pid_t pid); #if defined(HAVE_GETRLIMIT) && defined(RLIMIT_CORE) @@ -419,36 +420,73 @@ free_readfile(char **optlines) * start/test/stop routines */ -static int +/* + * Start the postmaster and return its PID. + * + * Currently, on Windows what we return is the PID of the shell process + * that launched the postmaster (and, we trust, is waiting for it to exit). + * So the PID is usable for "is the postmaster still running" checks, + * but cannot be compared directly to postmaster.pid. + * + * On Windows, we also save aside a handle to the shell process in + * "postmasterProcess", which the caller should close when done with it. + */ +static pgpid_t start_postmaster(void) { char cmd[MAXPGPATH]; #ifndef WIN32 + pgpid_t pm_pid; + + /* Flush stdio channels just before fork, to avoid double-output problems */ + fflush(stdout); + fflush(stderr); + + pm_pid = fork(); + if (pm_pid < 0) + { + /* fork failed */ + write_stderr(_("%s: could not start server: %s\n"), + progname, strerror(errno)); + exit(1); + } + if (pm_pid > 0) + { + /* fork succeeded, in parent */ + return pm_pid; + } + + /* fork succeeded, in child */ /* * Since there might be quotes to handle here, it is easier simply to pass - * everything to a shell to process them. - * - * XXX it would be better to fork and exec so that we would know the child - * postmaster's PID directly; then test_postmaster_connection could use - * the PID without having to rely on reading it back from the pidfile. + * everything to a shell to process them. Use exec so that the postmaster + * has the same PID as the current child process. */ if (log_file != NULL) - snprintf(cmd, MAXPGPATH, "\"%s\" %s%s < \"%s\" >> \"%s\" 2>&1 &", + snprintf(cmd, MAXPGPATH, "exec \"%s\" %s%s < \"%s\" >> \"%s\" 2>&1", exec_path, pgdata_opt, post_opts, DEVNULL, log_file); else - snprintf(cmd, MAXPGPATH, "\"%s\" %s%s < \"%s\" 2>&1 &", + snprintf(cmd, MAXPGPATH, "exec \"%s\" %s%s < \"%s\" 2>&1", exec_path, pgdata_opt, post_opts, DEVNULL); - return system(cmd); + (void) execl("/bin/sh", "/bin/sh", "-c", cmd, (char *) NULL); + + /* exec failed */ + write_stderr(_("%s: could not start server: %s\n"), + progname, strerror(errno)); + exit(1); + + return 0; /* keep dumb compilers quiet */ + #else /* WIN32 */ /* - * On win32 we don't use system(). So we don't need to use & (which would - * be START /B on win32). However, we still call the shell (CMD.EXE) with - * it to handle redirection etc. + * As with the Unix case, it's easiest to use the shell (CMD.EXE) to + * handle redirection etc. Unfortunately CMD.EXE lacks any equivalent of + * "exec", so we don't get to find out the postmaster's PID immediately. */ PROCESS_INFORMATION pi; @@ -460,10 +498,15 @@ start_postmaster(void) exec_path, pgdata_opt, post_opts, DEVNULL); if (!CreateRestrictedProcess(cmd, &pi, false)) - return GetLastError(); - CloseHandle(pi.hProcess); + { + write_stderr(_("%s: could not start server: error code %lu\n"), + progname, (unsigned long) GetLastError()); + exit(1); + } + /* Don't close command process handle here; caller must do so */ + postmasterProcess = pi.hProcess; CloseHandle(pi.hThread); - return 0; + return pi.dwProcessId; /* Shell's PID, not postmaster's! */ #endif /* WIN32 */ } @@ -472,15 +515,21 @@ start_postmaster(void) /* * Find the pgport and try a connection * + * On Unix, pm_pid is the PID of the just-launched postmaster. On Windows, + * it may be the PID of an ancestor shell process, so we can't check the + * contents of postmaster.pid quite as carefully. + * + * On Windows, the static variable postmasterProcess is an implicit argument + * to this routine; it contains a handle to the postmaster process or an + * ancestor shell process thereof. + * * Note that the checkpoint parameter enables a Windows service control * manager checkpoint, it's got nothing to do with database checkpoints!! */ static PGPing -test_postmaster_connection(bool do_checkpoint) +test_postmaster_connection(pgpid_t pm_pid, bool do_checkpoint) { PGPing ret = PQPING_NO_RESPONSE; - bool found_stale_pidfile = false; - pgpid_t pm_pid = 0; char connstr[MAXPGPATH * 2 + 256]; int i; @@ -535,29 +584,27 @@ test_postmaster_connection(bool do_checkpoint) optlines[5] != NULL) { /* File is complete enough for us, parse it */ - long pmpid; + pgpid_t pmpid; time_t pmstart; /* - * Make sanity checks. If it's for a standalone backend - * (negative PID), or the recorded start time is before - * pg_ctl started, then either we are looking at the wrong - * data directory, or this is a pre-existing pidfile that - * hasn't (yet?) been overwritten by our child postmaster. - * Allow 2 seconds slop for possible cross-process clock - * skew. + * Make sanity checks. If it's for the wrong PID, or the + * recorded start time is before pg_ctl started, then + * either we are looking at the wrong data directory, or + * this is a pre-existing pidfile that hasn't (yet?) been + * overwritten by our child postmaster. Allow 2 seconds + * slop for possible cross-process clock skew. */ pmpid = atol(optlines[LOCK_FILE_LINE_PID - 1]); pmstart = atol(optlines[LOCK_FILE_LINE_START_TIME - 1]); - if (pmpid <= 0 || pmstart < start_time - 2) - { - /* - * Set flag to report stale pidfile if it doesn't get - * overwritten before we give up waiting. - */ - found_stale_pidfile = true; - } - else + if (pmstart >= start_time - 2 && +#ifndef WIN32 + pmpid == pm_pid +#else + /* Windows can only reject standalone-backend PIDs */ + pmpid > 0 +#endif + ) { /* * OK, seems to be a valid pidfile from our child. @@ -567,9 +614,6 @@ test_postmaster_connection(bool do_checkpoint) char *hostaddr; char host_str[MAXPGPATH]; - found_stale_pidfile = false; - pm_pid = (pgpid_t) pmpid; - /* * Extract port number and host string to use. Prefer * using Unix socket if available. @@ -635,37 +679,23 @@ test_postmaster_connection(bool do_checkpoint) } /* - * The postmaster should create postmaster.pid very soon after being - * started. If it's not there after we've waited 5 or more seconds, - * assume startup failed and give up waiting. (Note this covers both - * cases where the pidfile was never created, and where it was created - * and then removed during postmaster exit.) Also, if there *is* a - * file there but it appears stale, issue a suitable warning and give - * up waiting. + * Check whether the child postmaster process is still alive. This + * lets us exit early if the postmaster fails during startup. + * + * On Windows, we may be checking the postmaster's parent shell, but + * that's fine for this purpose. */ - if (i >= 5) +#ifndef WIN32 { - struct stat statbuf; + int exitstatus; - if (stat(pid_file, &statbuf) != 0) + if (waitpid((pid_t) pm_pid, &exitstatus, WNOHANG) == (pid_t) pm_pid) return PQPING_NO_RESPONSE; - - if (found_stale_pidfile) - { - write_stderr(_("\n%s: this data directory appears to be running a pre-existing postmaster\n"), - progname); - return PQPING_NO_RESPONSE; - } } - - /* - * If we've been able to identify the child postmaster's PID, check - * the process is still alive. This covers cases where the postmaster - * successfully created the pidfile but then crashed without removing - * it. - */ - if (pm_pid > 0 && !postmaster_is_alive((pid_t) pm_pid)) +#else + if (WaitForSingleObject(postmasterProcess, 0) == WAIT_OBJECT_0) return PQPING_NO_RESPONSE; +#endif /* No response, or startup still in process; wait */ #if defined(WIN32) @@ -831,7 +861,7 @@ static void do_start(void) { pgpid_t old_pid = 0; - int exitcode; + pgpid_t pm_pid; if (ctl_command != RESTART_COMMAND) { @@ -871,19 +901,13 @@ do_start(void) } #endif - exitcode = start_postmaster(); - if (exitcode != 0) - { - write_stderr(_("%s: could not start server: exit code was %d\n"), - progname, exitcode); - exit(1); - } + pm_pid = start_postmaster(); if (do_wait) { print_msg(_("waiting for server to start...")); - switch (test_postmaster_connection(false)) + switch (test_postmaster_connection(pm_pid, false)) { case PQPING_OK: print_msg(_(" done\n")); @@ -909,6 +933,12 @@ do_start(void) } else print_msg(_("server starting\n")); + +#ifdef WIN32 + /* Now we don't need the handle to the shell process anymore */ + CloseHandle(postmasterProcess); + postmasterProcess = INVALID_HANDLE_VALUE; +#endif } @@ -1580,7 +1610,7 @@ pgwin32_ServiceMain(DWORD argc, LPTSTR *argv) if (do_wait) { write_eventlog(EVENTLOG_INFORMATION_TYPE, _("Waiting for server startup...\n")); - if (test_postmaster_connection(true) != PQPING_OK) + if (test_postmaster_connection(postmasterPID, true) != PQPING_OK) { write_eventlog(EVENTLOG_ERROR_TYPE, _("Timed out waiting for server startup\n")); pgwin32_SetServiceStatus(SERVICE_STOPPED); @@ -1601,10 +1631,9 @@ pgwin32_ServiceMain(DWORD argc, LPTSTR *argv) { /* * status.dwCheckPoint can be incremented by - * test_postmaster_connection(true), so it might not start - * from 0. + * test_postmaster_connection(), so it might not start from 0. */ - int maxShutdownCheckPoint = status.dwCheckPoint + 12;; + int maxShutdownCheckPoint = status.dwCheckPoint + 12; kill(postmasterPID, SIGINT); @@ -1909,11 +1938,10 @@ do_help(void) printf(_("\nCommon options:\n")); printf(_(" -D, --pgdata=DATADIR location of the database storage area\n")); - printf(_(" -s, --silent only print errors, no informational messages\n")); #if defined(WIN32) || defined(__CYGWIN__) - printf(_(" -e SOURCE event source to use for logging when running\n" - " as a service\n")); + printf(_(" -e SOURCE event source for logging when running as a service\n")); #endif + printf(_(" -s, --silent only print errors, no informational messages\n")); printf(_(" -t, --timeout=SECS seconds to wait when using -w option\n")); printf(_(" -V, --version output version information, then exit\n")); printf(_(" -w wait until operation completes\n")); @@ -2198,15 +2226,15 @@ main(int argc, char **argv) pgdata_opt = psprintf("-D \"%s\" ", pgdata_D); break; } + case 'e': + event_source = pg_strdup(optarg); + break; case 'l': log_file = pg_strdup(optarg); break; case 'm': set_mode(optarg); break; - case 'e': - event_source = pg_strdup(optarg); - break; case 'N': register_servicename = pg_strdup(optarg); break; diff --git a/src/bin/pg_ctl/po/de.po b/src/bin/pg_ctl/po/de.po index 3a5072921b185..c90ec38eb28cd 100644 --- a/src/bin/pg_ctl/po/de.po +++ b/src/bin/pg_ctl/po/de.po @@ -1,14 +1,14 @@ # German message translation file for pg_ctl -# Peter Eisentraut , 2004 - 2014. +# Peter Eisentraut , 2004 - 2015. # # Use these quotes: „%s“ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-08-29 22:42+0000\n" -"PO-Revision-Date: 2014-08-29 21:10-0400\n" +"POT-Creation-Date: 2015-09-27 01:43+0000\n" +"PO-Revision-Date: 2015-09-26 22:25-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: Peter Eisentraut \n" "Language: de\n" @@ -51,14 +51,14 @@ msgstr "konnte symbolische Verknüpfung „%s“ nicht lesen" msgid "pclose failed: %s" msgstr "pclose fehlgeschlagen: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 ../../port/path.c:598 ../../port/path.c:636 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../port/path.c:598 ../../port/path.c:636 #: ../../port/path.c:653 #, c-format msgid "out of memory\n" msgstr "Speicher aufgebraucht\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" @@ -103,37 +103,37 @@ msgstr "Kindprozess hat mit unbekanntem Status %d beendet" msgid "could not get current working directory: %s\n" msgstr "konnte aktuelles Arbeitsverzeichnis nicht ermitteln: %s\n" -#: pg_ctl.c:259 +#: pg_ctl.c:257 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: Verzeichnis „%s“ existiert nicht\n" -#: pg_ctl.c:262 +#: pg_ctl.c:260 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: konnte nicht auf Verzeichnis „%s“ zugreifen: %s\n" -#: pg_ctl.c:275 +#: pg_ctl.c:274 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: Verzeichnis „%s“ ist kein Datenbankclusterverzeichnis\n" -#: pg_ctl.c:288 +#: pg_ctl.c:287 #, c-format msgid "%s: could not open PID file \"%s\": %s\n" msgstr "%s: konnte PID-Datei „%s“ nicht öffnen: %s\n" -#: pg_ctl.c:297 +#: pg_ctl.c:296 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: die PID-Datei „%s“ ist leer\n" -#: pg_ctl.c:300 +#: pg_ctl.c:299 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: ungültige Daten in PID-Datei „%s“\n" -#: pg_ctl.c:531 +#: pg_ctl.c:530 #, c-format msgid "" "\n" @@ -142,7 +142,7 @@ msgstr "" "\n" "%s: Option -w wird beim Starten eines Servers vor Version 9.1 nicht unterstützt\n" -#: pg_ctl.c:601 +#: pg_ctl.c:600 #, c-format msgid "" "\n" @@ -151,7 +151,16 @@ msgstr "" "\n" "%s: Option -w kann keine relative Angabe des Socket-Verzeichnisses verwenden\n" -#: pg_ctl.c:656 +#: pg_ctl.c:653 +#, c-format +msgid "" +"\n" +"%s: could not stat file \"%s\": %s\n" +msgstr "" +"\n" +"%s: konnte „stat“ für Datei „%s“ nicht ausführen: %s\n" + +#: pg_ctl.c:660 #, c-format msgid "" "\n" @@ -160,22 +169,22 @@ msgstr "" "\n" "%s: in diesem Datenverzeichnis läuft anscheinend bereits in Postmaster\n" -#: pg_ctl.c:706 +#: pg_ctl.c:710 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "%s: kann Grenzwert für Core-Datei-Größe nicht setzen; durch harten Grenzwert verboten\n" -#: pg_ctl.c:731 +#: pg_ctl.c:735 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: konnte Datei „%s“ nicht lesen\n" -#: pg_ctl.c:736 +#: pg_ctl.c:740 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: Optionsdatei „%s“ muss genau eine Zeile haben\n" -#: pg_ctl.c:787 +#: pg_ctl.c:791 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -186,7 +195,7 @@ msgstr "" "selben Verzeichnis wie „%s“ gefunden.\n" "Prüfen Sie Ihre Installation.\n" -#: pg_ctl.c:793 +#: pg_ctl.c:797 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -197,42 +206,42 @@ msgstr "" "aber es hatte nicht die gleiche Version wie %s.\n" "Prüfen Sie Ihre Installation.\n" -#: pg_ctl.c:826 +#: pg_ctl.c:830 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: Initialisierung des Datenbanksystems fehlgeschlagen\n" -#: pg_ctl.c:841 +#: pg_ctl.c:845 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: ein anderer Server läuft möglicherweise; versuche trotzdem zu starten\n" -#: pg_ctl.c:878 +#: pg_ctl.c:882 #, c-format msgid "%s: could not start server: exit code was %d\n" msgstr "%s: konnte Server nicht starten: Exitcode war %d\n" -#: pg_ctl.c:885 +#: pg_ctl.c:889 msgid "waiting for server to start..." msgstr "warte auf Start des Servers..." -#: pg_ctl.c:890 pg_ctl.c:991 pg_ctl.c:1082 +#: pg_ctl.c:894 pg_ctl.c:995 pg_ctl.c:1086 msgid " done\n" msgstr " fertig\n" -#: pg_ctl.c:891 +#: pg_ctl.c:895 msgid "server started\n" msgstr "Server gestartet\n" -#: pg_ctl.c:894 pg_ctl.c:898 +#: pg_ctl.c:898 pg_ctl.c:902 msgid " stopped waiting\n" msgstr " Warten beendet\n" -#: pg_ctl.c:895 +#: pg_ctl.c:899 msgid "server is still starting up\n" msgstr "Server startet immer noch\n" -#: pg_ctl.c:899 +#: pg_ctl.c:903 #, c-format msgid "" "%s: could not start server\n" @@ -241,43 +250,43 @@ msgstr "" "%s: konnte Server nicht starten\n" "Prüfen Sie die Logausgabe.\n" -#: pg_ctl.c:905 pg_ctl.c:983 pg_ctl.c:1073 +#: pg_ctl.c:909 pg_ctl.c:987 pg_ctl.c:1077 msgid " failed\n" msgstr " Fehler\n" -#: pg_ctl.c:906 +#: pg_ctl.c:910 #, c-format msgid "%s: could not wait for server because of misconfiguration\n" msgstr "%s: konnte wegen Fehlkonfiguration nicht auf Server warten\n" -#: pg_ctl.c:912 +#: pg_ctl.c:916 msgid "server starting\n" msgstr "Server startet\n" -#: pg_ctl.c:927 pg_ctl.c:1013 pg_ctl.c:1103 pg_ctl.c:1143 +#: pg_ctl.c:931 pg_ctl.c:1017 pg_ctl.c:1107 pg_ctl.c:1147 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: PID-Datei „%s“ existiert nicht\n" -#: pg_ctl.c:928 pg_ctl.c:1015 pg_ctl.c:1104 pg_ctl.c:1144 +#: pg_ctl.c:932 pg_ctl.c:1019 pg_ctl.c:1108 pg_ctl.c:1148 msgid "Is server running?\n" msgstr "Läuft der Server?\n" -#: pg_ctl.c:934 +#: pg_ctl.c:938 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "%s: kann Server nicht anhalten; Einzelbenutzerserver läuft (PID: %ld)\n" -#: pg_ctl.c:942 pg_ctl.c:1037 +#: pg_ctl.c:946 pg_ctl.c:1041 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s: konnte Stopp-Signal nicht senden (PID: %ld): %s\n" -#: pg_ctl.c:949 +#: pg_ctl.c:953 msgid "server shutting down\n" msgstr "Server fährt herunter\n" -#: pg_ctl.c:964 pg_ctl.c:1052 +#: pg_ctl.c:968 pg_ctl.c:1056 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" @@ -287,16 +296,16 @@ msgstr "" "Herunterfahren wird erst abgeschlossen werden, wenn pg_stop_backup() aufgerufen wird.\n" "\n" -#: pg_ctl.c:968 pg_ctl.c:1056 +#: pg_ctl.c:972 pg_ctl.c:1060 msgid "waiting for server to shut down..." msgstr "warte auf Herunterfahren des Servers..." -#: pg_ctl.c:985 pg_ctl.c:1075 +#: pg_ctl.c:989 pg_ctl.c:1079 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: Server fährt nicht herunter\n" -#: pg_ctl.c:987 pg_ctl.c:1077 +#: pg_ctl.c:991 pg_ctl.c:1081 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -304,184 +313,184 @@ msgstr "" "TIPP: Die Option „-m fast“ beendet Sitzungen sofort, statt auf das Beenden\n" "durch die Sitzungen selbst zu warten.\n" -#: pg_ctl.c:993 pg_ctl.c:1083 +#: pg_ctl.c:997 pg_ctl.c:1087 msgid "server stopped\n" msgstr "Server angehalten\n" -#: pg_ctl.c:1016 pg_ctl.c:1089 +#: pg_ctl.c:1020 pg_ctl.c:1093 msgid "starting server anyway\n" msgstr "starte Server trotzdem\n" -#: pg_ctl.c:1025 +#: pg_ctl.c:1029 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "%s: kann Server nicht neu starten; Einzelbenutzerserver läuft (PID: %ld)\n" -#: pg_ctl.c:1028 pg_ctl.c:1113 +#: pg_ctl.c:1032 pg_ctl.c:1117 msgid "Please terminate the single-user server and try again.\n" msgstr "Bitte beenden Sie den Einzelbenutzerserver und versuchen Sie es noch einmal.\n" -#: pg_ctl.c:1087 +#: pg_ctl.c:1091 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s: alter Serverprozess (PID: %ld) scheint verschwunden zu sein\n" -#: pg_ctl.c:1110 +#: pg_ctl.c:1114 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "%s: kann Server nicht neu laden; Einzelbenutzerserver läuft (PID: %ld)\n" -#: pg_ctl.c:1119 +#: pg_ctl.c:1123 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s: konnte Signal zum Neuladen nicht senden (PID: %ld): %s\n" -#: pg_ctl.c:1124 +#: pg_ctl.c:1128 msgid "server signaled\n" msgstr "Signal an Server gesendet\n" -#: pg_ctl.c:1150 +#: pg_ctl.c:1154 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "%s: kann Server nicht befördern; Einzelbenutzerserver läuft (PID: %ld)\n" -#: pg_ctl.c:1159 +#: pg_ctl.c:1163 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: kann Server nicht befördern; Server ist nicht im Standby-Modus\n" -#: pg_ctl.c:1174 +#: pg_ctl.c:1178 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s: konnte Signaldatei zum Befördern „%s“ nicht erzeugen: %s\n" -#: pg_ctl.c:1180 +#: pg_ctl.c:1184 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s: konnte Signaldatei zum Befördern „%s“ nicht schreiben: %s\n" -#: pg_ctl.c:1188 +#: pg_ctl.c:1192 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s: konnte Signal zum Befördern nicht senden (PID: %ld): %s\n" -#: pg_ctl.c:1191 +#: pg_ctl.c:1195 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s: konnte Signaldatei zum Befördern „%s“ nicht entfernen: %s\n" -#: pg_ctl.c:1196 +#: pg_ctl.c:1200 msgid "server promoting\n" msgstr "Server wird befördert\n" -#: pg_ctl.c:1243 +#: pg_ctl.c:1247 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: Einzelbenutzerserver läuft (PID: %ld)\n" -#: pg_ctl.c:1256 +#: pg_ctl.c:1260 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: Server läuft (PID: %ld)\n" -#: pg_ctl.c:1272 +#: pg_ctl.c:1276 #, c-format msgid "%s: no server running\n" msgstr "%s: kein Server läuft\n" -#: pg_ctl.c:1290 +#: pg_ctl.c:1294 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: konnte Signal %d nicht senden (PID: %ld): %s\n" -#: pg_ctl.c:1347 +#: pg_ctl.c:1351 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: konnte eigene Programmdatei nicht finden\n" -#: pg_ctl.c:1357 +#: pg_ctl.c:1361 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: konnte „postgres“ Programmdatei nicht finden\n" -#: pg_ctl.c:1437 pg_ctl.c:1469 +#: pg_ctl.c:1444 pg_ctl.c:1478 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: konnte Servicemanager nicht öffnen\n" -#: pg_ctl.c:1443 +#: pg_ctl.c:1450 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: Systemdienst „%s“ ist bereits registriert\n" -#: pg_ctl.c:1454 +#: pg_ctl.c:1461 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: konnte Systemdienst „%s“ nicht registrieren: Fehlercode %lu\n" -#: pg_ctl.c:1475 +#: pg_ctl.c:1484 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: Systemdienst „%s“ ist nicht registriert\n" -#: pg_ctl.c:1482 +#: pg_ctl.c:1491 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: konnte Systemdienst „%s“ nicht öffnen: Fehlercode %lu\n" -#: pg_ctl.c:1489 +#: pg_ctl.c:1500 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: konnte Systemdienst „%s“ nicht deregistrieren: Fehlercode %lu\n" -#: pg_ctl.c:1574 +#: pg_ctl.c:1587 msgid "Waiting for server startup...\n" msgstr "Warte auf Start des Servers...\n" -#: pg_ctl.c:1577 +#: pg_ctl.c:1590 msgid "Timed out waiting for server startup\n" msgstr "Zeitüberschreitung beim Warten auf Start des Servers\n" -#: pg_ctl.c:1581 +#: pg_ctl.c:1594 msgid "Server started and accepting connections\n" msgstr "Server wurde gestartet und nimmt Verbindungen an\n" -#: pg_ctl.c:1625 +#: pg_ctl.c:1650 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: konnte Systemdienst „%s“ nicht starten: Fehlercode %lu\n" -#: pg_ctl.c:1697 +#: pg_ctl.c:1724 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -msgstr "%s: WARNUNG: auf dieser Platform können keine beschränkten Token erzeugt werden\n" +msgstr "%s: WARNUNG: auf dieser Plattform können keine beschränkten Token erzeugt werden\n" -#: pg_ctl.c:1706 +#: pg_ctl.c:1739 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: konnte Prozess-Token nicht öffnen: Fehlercode %lu\n" -#: pg_ctl.c:1719 +#: pg_ctl.c:1753 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: konnte SIDs nicht erzeugen: Fehlercode %lu\n" -#: pg_ctl.c:1738 +#: pg_ctl.c:1773 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: konnte beschränktes Token nicht erzeugen: Fehlercode %lu\n" -#: pg_ctl.c:1771 +#: pg_ctl.c:1807 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "%s: WARNUNG: konnte nicht alle Job-Objekt-Funtionen in der System-API finden\n" -#: pg_ctl.c:1853 +#: pg_ctl.c:1890 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie „%s --help“ für weitere Informationen.\n" -#: pg_ctl.c:1861 +#: pg_ctl.c:1898 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -491,27 +500,27 @@ msgstr "" "starten, anzuhalten oder zu steuern.\n" "\n" -#: pg_ctl.c:1862 +#: pg_ctl.c:1899 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_ctl.c:1863 +#: pg_ctl.c:1900 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o \"OPTIONS\"]\n" msgstr " %s init[db] [-D DATENVERZ] [-s] [-o \"OPTIONEN\"]\n" -#: pg_ctl.c:1864 +#: pg_ctl.c:1901 #, c-format msgid " %s start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"]\n" msgstr " %s start [-w] [-t SEK] [-D DATENVERZ] [-s] [-l DATEINAME] [-o \"OPTIONEN\"]\n" -#: pg_ctl.c:1865 +#: pg_ctl.c:1902 #, c-format msgid " %s stop [-W] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" msgstr " %s stop [-W] [-t SEK] [-D DATENVERZ] [-s] [-m SHUTDOWN-MODUS]\n" -#: pg_ctl.c:1866 +#: pg_ctl.c:1903 #, c-format msgid "" " %s restart [-w] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" @@ -520,27 +529,27 @@ msgstr "" " %s restart [-w] [-t SEK] [-D DATENVERZ] [-s] [-m SHUTDOWN-MODUS]\n" " [-o \"OPTIONEN\"]\n" -#: pg_ctl.c:1868 +#: pg_ctl.c:1905 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D DATENVERZ] [-s]\n" -#: pg_ctl.c:1869 +#: pg_ctl.c:1906 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DATENVERZ]\n" -#: pg_ctl.c:1870 +#: pg_ctl.c:1907 #, c-format msgid " %s promote [-D DATADIR] [-s]\n" msgstr " %s promote [-D DATENVERZ] [-s]\n" -#: pg_ctl.c:1871 +#: pg_ctl.c:1908 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill SIGNALNAME PID\n" -#: pg_ctl.c:1873 +#: pg_ctl.c:1910 #, c-format msgid "" " %s register [-N SERVICENAME] [-U USERNAME] [-P PASSWORD] [-D DATADIR]\n" @@ -549,12 +558,12 @@ msgstr "" " %s register [-N DIENSTNAME] [-U BENUTZERNAME] [-P PASSWORT] [-D DATENVERZ]\n" " [-S STARTTYP] [-w] [-t SEK] [-o \"OPTIONEN\"]\n" -#: pg_ctl.c:1875 +#: pg_ctl.c:1912 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N DIENSTNAME]\n" -#: pg_ctl.c:1878 +#: pg_ctl.c:1915 #, c-format msgid "" "\n" @@ -563,42 +572,49 @@ msgstr "" "\n" "Optionen für alle Modi:\n" -#: pg_ctl.c:1879 +#: pg_ctl.c:1916 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=DATENVERZ Datenbankverzeichnis\n" -#: pg_ctl.c:1880 +#: pg_ctl.c:1918 +#, c-format +msgid " -e SOURCE event source for logging when running as a service\n" +msgstr "" +" -e QUELLE Ereignisquelle fürs Loggen, wenn als Systemdienst\n" +" gestartet\n" + +#: pg_ctl.c:1920 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent zeige nur Fehler, keine Informationsmeldungen\n" -#: pg_ctl.c:1881 +#: pg_ctl.c:1921 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=SEK Sekunden zu warten bei Option -w\n" -#: pg_ctl.c:1882 +#: pg_ctl.c:1922 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_ctl.c:1883 +#: pg_ctl.c:1923 #, c-format msgid " -w wait until operation completes\n" msgstr " -w warte bis Operation abgeschlossen ist\n" -#: pg_ctl.c:1884 +#: pg_ctl.c:1924 #, c-format msgid " -W do not wait until operation completes\n" msgstr " -W warte nicht bis Operation abgeschlossen ist\n" -#: pg_ctl.c:1885 +#: pg_ctl.c:1925 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_ctl.c:1886 +#: pg_ctl.c:1926 #, c-format msgid "" "(The default is to wait for shutdown, but not for start or restart.)\n" @@ -608,14 +624,14 @@ msgstr "" "Start oder Neustart.)\n" "\n" -#: pg_ctl.c:1887 +#: pg_ctl.c:1927 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "" "Wenn die Option -D weggelassen wird, dann wird die Umgebungsvariable\n" "PGDATA verwendet.\n" -#: pg_ctl.c:1889 +#: pg_ctl.c:1929 #, c-format msgid "" "\n" @@ -624,24 +640,24 @@ msgstr "" "\n" "Optionen für Start oder Neustart:\n" -#: pg_ctl.c:1891 +#: pg_ctl.c:1931 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files erlaubt postgres Core-Dateien zu erzeugen\n" -#: pg_ctl.c:1893 +#: pg_ctl.c:1933 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files betrifft diese Plattform nicht\n" -#: pg_ctl.c:1895 +#: pg_ctl.c:1935 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr "" " -l, --log=DATEINAME schreibe Serverlog in DATEINAME (wird an\n" " bestehende Datei angehängt)\n" -#: pg_ctl.c:1896 +#: pg_ctl.c:1936 #, c-format msgid "" " -o OPTIONS command line options to pass to postgres\n" @@ -650,12 +666,12 @@ msgstr "" " -o OPTIONEN Kommandozeilenoptionen für postgres (PostgreSQL-\n" " Serverprogramm) oder initdb\n" -#: pg_ctl.c:1898 +#: pg_ctl.c:1938 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p PFAD-ZU-POSTGRES normalerweise nicht notwendig\n" -#: pg_ctl.c:1899 +#: pg_ctl.c:1939 #, c-format msgid "" "\n" @@ -664,12 +680,12 @@ msgstr "" "\n" "Optionen für Anhalten oder Neustart:\n" -#: pg_ctl.c:1900 +#: pg_ctl.c:1940 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=MODUS MODUS kann „smart“, „fast“ oder „immediate“ sein\n" -#: pg_ctl.c:1902 +#: pg_ctl.c:1942 #, c-format msgid "" "\n" @@ -678,24 +694,24 @@ msgstr "" "\n" "Shutdown-Modi sind:\n" -#: pg_ctl.c:1903 +#: pg_ctl.c:1943 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart beende nachdem alle Clientverbindungen geschlossen sind\n" -#: pg_ctl.c:1904 +#: pg_ctl.c:1944 #, c-format msgid " fast quit directly, with proper shutdown\n" msgstr " fast beende direkt, mit richtigem Shutdown\n" -#: pg_ctl.c:1905 +#: pg_ctl.c:1945 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr "" " immediate beende ohne vollständigen Shutdown; führt zu Recovery-Lauf\n" " beim Neustart\n" -#: pg_ctl.c:1907 +#: pg_ctl.c:1947 #, c-format msgid "" "\n" @@ -704,7 +720,7 @@ msgstr "" "\n" "Erlaubte Signalnamen für „kill“:\n" -#: pg_ctl.c:1911 +#: pg_ctl.c:1951 #, c-format msgid "" "\n" @@ -713,27 +729,27 @@ msgstr "" "\n" "Optionen für „register“ und „unregister“:\n" -#: pg_ctl.c:1912 +#: pg_ctl.c:1952 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N DIENSTNAME Systemdienstname für Registrierung des PostgreSQL-Servers\n" -#: pg_ctl.c:1913 +#: pg_ctl.c:1953 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P PASSWORD Passwort des Benutzers für Registrierung des PostgreSQL-Servers\n" -#: pg_ctl.c:1914 +#: pg_ctl.c:1954 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U USERNAME Benutzername für Registrierung des PostgreSQL-Servers\n" -#: pg_ctl.c:1915 +#: pg_ctl.c:1955 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S STARTTYP Systemdienst-Starttyp für PostgreSQL-Server\n" -#: pg_ctl.c:1917 +#: pg_ctl.c:1957 #, c-format msgid "" "\n" @@ -742,19 +758,19 @@ msgstr "" "\n" "Starttypen sind:\n" -#: pg_ctl.c:1918 +#: pg_ctl.c:1958 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr "" " auto Dienst automatisch starten beim Start des Betriebssystems\n" " (Voreinstellung)\n" -#: pg_ctl.c:1919 +#: pg_ctl.c:1959 #, c-format msgid " demand start service on demand\n" msgstr " demand Dienst bei Bedarf starten\n" -#: pg_ctl.c:1922 +#: pg_ctl.c:1962 #, c-format msgid "" "\n" @@ -763,27 +779,27 @@ msgstr "" "\n" "Berichten Sie Fehler an .\n" -#: pg_ctl.c:1947 +#: pg_ctl.c:1987 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: unbekannter Shutdown-Modus „%s“\n" -#: pg_ctl.c:1979 +#: pg_ctl.c:2019 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: unbekannter Signalname „%s“\n" -#: pg_ctl.c:1996 +#: pg_ctl.c:2036 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: unbekannter Starttyp „%s“\n" -#: pg_ctl.c:2051 +#: pg_ctl.c:2091 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: konnte das Datenverzeichnis mit Befehl „%s“ nicht ermitteln\n" -#: pg_ctl.c:2123 +#: pg_ctl.c:2163 #, c-format msgid "" "%s: cannot be run as root\n" @@ -794,32 +810,32 @@ msgstr "" "Bitte loggen Sie sich (z.B. mit „su“) als der (unprivilegierte) Benutzer\n" "ein, der Eigentümer des Serverprozesses sein soll.\n" -#: pg_ctl.c:2190 +#: pg_ctl.c:2242 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: Option -S wird auf dieser Plattform nicht unterstützt\n" -#: pg_ctl.c:2228 +#: pg_ctl.c:2280 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: zu viele Kommandozeilenargumente (das erste ist „%s“)\n" -#: pg_ctl.c:2252 +#: pg_ctl.c:2304 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: fehlende Argumente für „kill“-Modus\n" -#: pg_ctl.c:2270 +#: pg_ctl.c:2322 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: unbekannter Operationsmodus „%s“\n" -#: pg_ctl.c:2280 +#: pg_ctl.c:2332 #, c-format msgid "%s: no operation specified\n" msgstr "%s: keine Operation angegeben\n" -#: pg_ctl.c:2301 +#: pg_ctl.c:2353 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: kein Datenbankverzeichnis angegeben und Umgebungsvariable PGDATA nicht gesetzt\n" diff --git a/src/bin/pg_ctl/po/es.po b/src/bin/pg_ctl/po/es.po index 301d9e4880263..9c6f219f86581 100644 --- a/src/bin/pg_ctl/po/es.po +++ b/src/bin/pg_ctl/po/es.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:41+0000\n" -"PO-Revision-Date: 2014-12-15 16:55-0300\n" +"POT-Creation-Date: 2015-10-04 00:43+0000\n" +"PO-Revision-Date: 2015-09-30 12:18-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL Español \n" "Language: es\n" @@ -55,14 +55,14 @@ msgstr "no se pudo leer el enlace simbólico «%s»" msgid "pclose failed: %s" msgstr "pclose falló: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 ../../port/path.c:598 ../../port/path.c:636 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../port/path.c:598 ../../port/path.c:636 #: ../../port/path.c:653 #, c-format msgid "out of memory\n" msgstr "memoria agotada\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" @@ -107,37 +107,37 @@ msgstr "el proceso hijo terminó con código no reconocido %d" msgid "could not get current working directory: %s\n" msgstr "no se pudo obtener el directorio de trabajo actual: %s\n" -#: pg_ctl.c:259 +#: pg_ctl.c:257 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: el directorio «%s» no existe\n" -#: pg_ctl.c:262 +#: pg_ctl.c:260 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: no se pudo acceder al directorio «%s»: %s\n" -#: pg_ctl.c:275 +#: pg_ctl.c:274 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: el directorio «%s» no es un directorio de base de datos\n" -#: pg_ctl.c:288 +#: pg_ctl.c:287 #, c-format msgid "%s: could not open PID file \"%s\": %s\n" msgstr "%s: no se pudo abrir el archivo de PID «%s»: %s\n" -#: pg_ctl.c:297 +#: pg_ctl.c:296 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: el archivo de PID «%s» está vacío\n" -#: pg_ctl.c:300 +#: pg_ctl.c:299 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: datos no válidos en archivo de PID «%s»\n" -#: pg_ctl.c:531 +#: pg_ctl.c:530 #, c-format msgid "" "\n" @@ -146,7 +146,7 @@ msgstr "" "\n" "%s: la opción -w no está soportada cuando se inicia un servidor anterior a 9.1\n" -#: pg_ctl.c:601 +#: pg_ctl.c:600 #, c-format msgid "" "\n" @@ -155,7 +155,16 @@ msgstr "" "\n" "%s: la opción -w no puede usar una especificación relativa de directorio\n" -#: pg_ctl.c:656 +#: pg_ctl.c:653 +#, c-format +msgid "" +"\n" +"%s: could not stat file \"%s\": %s\n" +msgstr "" +"\n" +"%s: no se pudo hacer «stat» al archivo «%s»: %s\n" + +#: pg_ctl.c:660 #, c-format msgid "" "\n" @@ -164,24 +173,24 @@ msgstr "" "\n" "%s: este directorio de datos parece estar ejecutando un postmaster pre-existente\n" -#: pg_ctl.c:706 +#: pg_ctl.c:710 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "" "%s: no se puede establecer el límite de archivos de volcado;\n" "impedido por un límite duro\n" -#: pg_ctl.c:731 +#: pg_ctl.c:735 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: no se pudo leer el archivo «%s»\n" -#: pg_ctl.c:736 +#: pg_ctl.c:740 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: archivo de opciones «%s» debe tener exactamente una línea\n" -#: pg_ctl.c:787 +#: pg_ctl.c:791 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -192,7 +201,7 @@ msgstr "" "directorio que «%s».\n" "Verifique su instalación.\n" -#: pg_ctl.c:793 +#: pg_ctl.c:797 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -203,42 +212,42 @@ msgstr "" "de la misma versión que «%s».\n" "Verifique su instalación.\n" -#: pg_ctl.c:826 +#: pg_ctl.c:830 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: falló la creación de la base de datos\n" -#: pg_ctl.c:841 +#: pg_ctl.c:845 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: otro servidor puede estar en ejecución; tratando de iniciarlo de todas formas.\n" -#: pg_ctl.c:878 +#: pg_ctl.c:882 #, c-format msgid "%s: could not start server: exit code was %d\n" msgstr "%s: no se pudo iniciar el servidor: el código de retorno fue %d\n" -#: pg_ctl.c:885 +#: pg_ctl.c:889 msgid "waiting for server to start..." msgstr "esperando que el servidor se inicie..." -#: pg_ctl.c:890 pg_ctl.c:991 pg_ctl.c:1082 +#: pg_ctl.c:894 pg_ctl.c:995 pg_ctl.c:1086 msgid " done\n" msgstr " listo\n" -#: pg_ctl.c:891 +#: pg_ctl.c:895 msgid "server started\n" msgstr "servidor iniciado\n" -#: pg_ctl.c:894 pg_ctl.c:898 +#: pg_ctl.c:898 pg_ctl.c:902 msgid " stopped waiting\n" msgstr " abandonando la espera\n" -#: pg_ctl.c:895 +#: pg_ctl.c:899 msgid "server is still starting up\n" msgstr "servidor aún iniciándose\n" -#: pg_ctl.c:899 +#: pg_ctl.c:903 #, c-format msgid "" "%s: could not start server\n" @@ -247,45 +256,45 @@ msgstr "" "%s: no se pudo iniciar el servidor.\n" "Examine el registro del servidor.\n" -#: pg_ctl.c:905 pg_ctl.c:983 pg_ctl.c:1073 +#: pg_ctl.c:909 pg_ctl.c:987 pg_ctl.c:1077 msgid " failed\n" msgstr " falló\n" -#: pg_ctl.c:906 +#: pg_ctl.c:910 #, c-format msgid "%s: could not wait for server because of misconfiguration\n" msgstr "%s: no se pudo esperar al servidor debido a un error de configuración\n" -#: pg_ctl.c:912 +#: pg_ctl.c:916 msgid "server starting\n" msgstr "servidor iniciándose\n" -#: pg_ctl.c:927 pg_ctl.c:1013 pg_ctl.c:1103 pg_ctl.c:1143 +#: pg_ctl.c:931 pg_ctl.c:1017 pg_ctl.c:1107 pg_ctl.c:1147 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: el archivo de PID «%s» no existe\n" -#: pg_ctl.c:928 pg_ctl.c:1015 pg_ctl.c:1104 pg_ctl.c:1144 +#: pg_ctl.c:932 pg_ctl.c:1019 pg_ctl.c:1108 pg_ctl.c:1148 msgid "Is server running?\n" msgstr "¿Está el servidor en ejecución?\n" -#: pg_ctl.c:934 +#: pg_ctl.c:938 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "" "%s: no se puede detener el servidor;\n" "un servidor en modo mono-usuario está en ejecución (PID: %ld)\n" -#: pg_ctl.c:942 pg_ctl.c:1037 +#: pg_ctl.c:946 pg_ctl.c:1041 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s: falló la señal de detención (PID: %ld): %s\n" -#: pg_ctl.c:949 +#: pg_ctl.c:953 msgid "server shutting down\n" msgstr "servidor deteniéndose\n" -#: pg_ctl.c:964 pg_ctl.c:1052 +#: pg_ctl.c:968 pg_ctl.c:1056 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" @@ -295,16 +304,16 @@ msgstr "" "El apagado no se completará hasta que se invoque la función pg_stop_backup().\n" "\n" -#: pg_ctl.c:968 pg_ctl.c:1056 +#: pg_ctl.c:972 pg_ctl.c:1060 msgid "waiting for server to shut down..." msgstr "esperando que el servidor se detenga..." -#: pg_ctl.c:985 pg_ctl.c:1075 +#: pg_ctl.c:989 pg_ctl.c:1079 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: el servidor no se detiene\n" -#: pg_ctl.c:987 pg_ctl.c:1077 +#: pg_ctl.c:991 pg_ctl.c:1081 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -312,192 +321,192 @@ msgstr "" "SUGERENCIA: La opción «-m fast» desconecta las sesiones inmediatamente\n" "en lugar de esperar que cada sesión finalice por sí misma.\n" -#: pg_ctl.c:993 pg_ctl.c:1083 +#: pg_ctl.c:997 pg_ctl.c:1087 msgid "server stopped\n" msgstr "servidor detenido\n" -#: pg_ctl.c:1016 pg_ctl.c:1089 +#: pg_ctl.c:1020 pg_ctl.c:1093 msgid "starting server anyway\n" msgstr "iniciando el servidor de todas maneras\n" -#: pg_ctl.c:1025 +#: pg_ctl.c:1029 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "" "%s: no se puede reiniciar el servidor;\n" "un servidor en modo mono-usuario está en ejecución (PID: %ld)\n" -#: pg_ctl.c:1028 pg_ctl.c:1113 +#: pg_ctl.c:1032 pg_ctl.c:1117 msgid "Please terminate the single-user server and try again.\n" msgstr "Por favor termine el servidor mono-usuario e intente nuevamente.\n" -#: pg_ctl.c:1087 +#: pg_ctl.c:1091 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s: el proceso servidor antiguo (PID: %ld) parece no estar\n" -#: pg_ctl.c:1110 +#: pg_ctl.c:1114 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "" "%s: no se puede recargar el servidor;\n" "un servidor en modo mono-usuario está en ejecución (PID: %ld)\n" -#: pg_ctl.c:1119 +#: pg_ctl.c:1123 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s: la señal de recarga falló (PID: %ld): %s\n" -#: pg_ctl.c:1124 +#: pg_ctl.c:1128 msgid "server signaled\n" msgstr "se ha enviado una señal al servidor\n" -#: pg_ctl.c:1150 +#: pg_ctl.c:1154 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "" "%s: no se puede promover el servidor;\n" "un servidor en modo mono-usuario está en ejecución (PID: %ld)\n" -#: pg_ctl.c:1159 +#: pg_ctl.c:1163 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "" "%s: no se puede promover el servidor;\n" "el servidor no está en modo «standby»\n" -#: pg_ctl.c:1174 +#: pg_ctl.c:1178 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s: no se pudo crear el archivo de señal de promoción «%s»: %s\n" -#: pg_ctl.c:1180 +#: pg_ctl.c:1184 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s: no se pudo escribir al archivo de señal de promoción «%s»: %s\n" -#: pg_ctl.c:1188 +#: pg_ctl.c:1192 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s: no se pudo enviar la señal de promoción (PID: %ld): %s\n" -#: pg_ctl.c:1191 +#: pg_ctl.c:1195 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s: no se pudo eliminar el archivo de señal de promoción «%s»: %s\n" -#: pg_ctl.c:1196 +#: pg_ctl.c:1200 msgid "server promoting\n" msgstr "servidor promoviendo\n" -#: pg_ctl.c:1243 +#: pg_ctl.c:1247 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: un servidor en modo mono-usuario está en ejecución (PID: %ld)\n" -#: pg_ctl.c:1256 +#: pg_ctl.c:1260 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: el servidor está en ejecución (PID: %ld)\n" -#: pg_ctl.c:1272 +#: pg_ctl.c:1276 #, c-format msgid "%s: no server running\n" msgstr "%s: no hay servidor en ejecución\n" -#: pg_ctl.c:1290 +#: pg_ctl.c:1294 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: no se pudo enviar la señal %d (PID: %ld): %s\n" -#: pg_ctl.c:1347 +#: pg_ctl.c:1351 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: no se pudo encontrar el ejecutable propio\n" -#: pg_ctl.c:1357 +#: pg_ctl.c:1361 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: no se pudo encontrar el ejecutable postgres\n" -#: pg_ctl.c:1437 pg_ctl.c:1469 +#: pg_ctl.c:1444 pg_ctl.c:1478 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: no se pudo abrir el gestor de servicios\n" -#: pg_ctl.c:1443 +#: pg_ctl.c:1450 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: el servicio «%s» ya está registrado\n" -#: pg_ctl.c:1454 +#: pg_ctl.c:1461 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: no se pudo registrar el servicio «%s»: código de error %lu\n" -#: pg_ctl.c:1475 +#: pg_ctl.c:1484 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: el servicio «%s» no ha sido registrado\n" -#: pg_ctl.c:1482 +#: pg_ctl.c:1491 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: no se pudo abrir el servicio «%s»: código de error %lu\n" -#: pg_ctl.c:1489 +#: pg_ctl.c:1500 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: no se pudo dar de baja el servicio «%s»: código de error %lu\n" -#: pg_ctl.c:1574 +#: pg_ctl.c:1587 msgid "Waiting for server startup...\n" msgstr "Esperando que el servidor se inicie...\n" -#: pg_ctl.c:1577 +#: pg_ctl.c:1590 msgid "Timed out waiting for server startup\n" msgstr "Se agotó el tiempo de espera al inicio del servidor\n" -#: pg_ctl.c:1581 +#: pg_ctl.c:1594 msgid "Server started and accepting connections\n" msgstr "Servidor iniciado y aceptando conexiones\n" -#: pg_ctl.c:1625 +#: pg_ctl.c:1650 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: no se pudo iniciar el servicio «%s»: código de error %lu\n" -#: pg_ctl.c:1697 +#: pg_ctl.c:1724 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" msgstr "%s: ATENCIÓN: no se pueden crear tokens restrigidos en esta plataforma\n" -#: pg_ctl.c:1706 +#: pg_ctl.c:1739 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: no se pudo abrir el token de proceso: código de error %lu\n" -#: pg_ctl.c:1719 +#: pg_ctl.c:1753 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: no se pudo emplazar los SIDs: código de error %lu\n" -#: pg_ctl.c:1738 +#: pg_ctl.c:1773 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: no se pudo crear el token restringido: código de error %lu\n" -#: pg_ctl.c:1771 +#: pg_ctl.c:1807 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "%s: ATENCIÓN: no fue posible encontrar todas las funciones de gestión de tareas en la API del sistema\n" -#: pg_ctl.c:1853 +#: pg_ctl.c:1890 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Use «%s --help» para obtener más información.\n" -#: pg_ctl.c:1861 +#: pg_ctl.c:1898 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -507,27 +516,27 @@ msgstr "" "un servidor PostgreSQL.\n" "\n" -#: pg_ctl.c:1862 +#: pg_ctl.c:1899 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_ctl.c:1863 +#: pg_ctl.c:1900 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o \"OPTIONS\"]\n" msgstr " %s init[db] [-D DATADIR] [-s] [-o \"OPCIONES\"]\n" -#: pg_ctl.c:1864 +#: pg_ctl.c:1901 #, c-format msgid " %s start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"]\n" msgstr " %s start [-w] [-t SEGS] [-D DATADIR] [-s] [-l ARCHIVO] [-o \"OPCIONES\"]\n" -#: pg_ctl.c:1865 +#: pg_ctl.c:1902 #, c-format msgid " %s stop [-W] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" msgstr " %s stop [-W] [-t SEGS] [-D DATADIR] [-s] [-m MODO-DETENCIÓN]\n" -#: pg_ctl.c:1866 +#: pg_ctl.c:1903 #, c-format msgid "" " %s restart [-w] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" @@ -536,27 +545,27 @@ msgstr "" " %s restart [-w] [-t SEGS] [-D DATADIR] [-s] [-m MODO-DETENCIÓN]\n" " [-o «OPCIONES»]\n" -#: pg_ctl.c:1868 +#: pg_ctl.c:1905 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D DATADIR] [-s]\n" -#: pg_ctl.c:1869 +#: pg_ctl.c:1906 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DATADIR]\n" -#: pg_ctl.c:1870 +#: pg_ctl.c:1907 #, c-format msgid " %s promote [-D DATADIR] [-s]\n" msgstr " %s promote [-D DATADIR] [-s]\n" -#: pg_ctl.c:1871 +#: pg_ctl.c:1908 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill NOMBRE-SEÑAL ID-DE-PROCESO\n" -#: pg_ctl.c:1873 +#: pg_ctl.c:1910 #, c-format msgid "" " %s register [-N SERVICENAME] [-U USERNAME] [-P PASSWORD] [-D DATADIR]\n" @@ -565,12 +574,12 @@ msgstr "" " %s register [-N SERVICIO] [-U USUARIO] [-P PASSWORD] [-D DATADIR]\n" " [-S TIPO-INICIO] [-w] [-t SEGS] [-o «OPCIONES»]\n" -#: pg_ctl.c:1875 +#: pg_ctl.c:1912 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N SERVICIO]\n" -#: pg_ctl.c:1878 +#: pg_ctl.c:1915 #, c-format msgid "" "\n" @@ -579,42 +588,47 @@ msgstr "" "\n" "Opciones comunes:\n" -#: pg_ctl.c:1879 +#: pg_ctl.c:1916 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata DATADIR ubicación del área de almacenamiento de datos\n" -#: pg_ctl.c:1880 +#: pg_ctl.c:1918 +#, c-format +msgid " -e SOURCE event source for logging when running as a service\n" +msgstr "" + +#: pg_ctl.c:1920 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent mostrar sólo errores, no mensajes de información\n" -#: pg_ctl.c:1881 +#: pg_ctl.c:1921 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=SEGS segundos a esperar cuando se use la opción -w\n" -#: pg_ctl.c:1882 +#: pg_ctl.c:1922 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión, luego salir\n" -#: pg_ctl.c:1883 +#: pg_ctl.c:1923 #, c-format msgid " -w wait until operation completes\n" msgstr " -w esperar hasta que la operación se haya completado\n" -#: pg_ctl.c:1884 +#: pg_ctl.c:1924 #, c-format msgid " -W do not wait until operation completes\n" msgstr " -W no esperar hasta que la operación se haya completado\n" -#: pg_ctl.c:1885 +#: pg_ctl.c:1925 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda, luego salir\n" -#: pg_ctl.c:1886 +#: pg_ctl.c:1926 #, c-format msgid "" "(The default is to wait for shutdown, but not for start or restart.)\n" @@ -623,12 +637,12 @@ msgstr "" "(Por omisión se espera para las detenciones, pero no los inicios o reinicios)\n" "\n" -#: pg_ctl.c:1887 +#: pg_ctl.c:1927 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Si la opción -D es omitida, se usa la variable de ambiente PGDATA.\n" -#: pg_ctl.c:1889 +#: pg_ctl.c:1929 #, c-format msgid "" "\n" @@ -637,24 +651,24 @@ msgstr "" "\n" "Opciones para inicio y reinicio:\n" -#: pg_ctl.c:1891 +#: pg_ctl.c:1931 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr "" " -c, --core-files permite que postgres produzca archivos\n" " de volcado (core)\n" -#: pg_ctl.c:1893 +#: pg_ctl.c:1933 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files no aplicable en esta plataforma\n" -#: pg_ctl.c:1895 +#: pg_ctl.c:1935 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l --log=ARCHIVO guardar el registro del servidor en ARCHIVO.\n" -#: pg_ctl.c:1896 +#: pg_ctl.c:1936 #, c-format msgid "" " -o OPTIONS command line options to pass to postgres\n" @@ -663,12 +677,12 @@ msgstr "" " -o OPCIONES parámetros de línea de órdenes a pasar a postgres\n" " (ejecutable del servidor de PostgreSQL) o initdb\n" -#: pg_ctl.c:1898 +#: pg_ctl.c:1938 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p RUTA-A-POSTGRES normalmente no es necesario\n" -#: pg_ctl.c:1899 +#: pg_ctl.c:1939 #, c-format msgid "" "\n" @@ -677,12 +691,12 @@ msgstr "" "\n" "Opciones para detener o reiniciar:\n" -#: pg_ctl.c:1900 +#: pg_ctl.c:1940 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=MODO puede ser «smart», «fast» o «immediate»\n" -#: pg_ctl.c:1902 +#: pg_ctl.c:1942 #, c-format msgid "" "\n" @@ -691,24 +705,24 @@ msgstr "" "\n" "Modos de detención son:\n" -#: pg_ctl.c:1903 +#: pg_ctl.c:1943 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart salir después que todos los clientes se hayan desconectado\n" -#: pg_ctl.c:1904 +#: pg_ctl.c:1944 #, c-format msgid " fast quit directly, with proper shutdown\n" msgstr " fast salir directamente, con apagado apropiado\n" -#: pg_ctl.c:1905 +#: pg_ctl.c:1945 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr "" " immediate salir sin apagado completo; se ejecutará recuperación\n" " en el próximo inicio\n" -#: pg_ctl.c:1907 +#: pg_ctl.c:1947 #, c-format msgid "" "\n" @@ -717,7 +731,7 @@ msgstr "" "\n" "Nombres de señales permitidos para kill:\n" -#: pg_ctl.c:1911 +#: pg_ctl.c:1951 #, c-format msgid "" "\n" @@ -726,35 +740,35 @@ msgstr "" "\n" "Opciones para registrar y dar de baja:\n" -#: pg_ctl.c:1912 +#: pg_ctl.c:1952 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr "" " -N SERVICIO nombre de servicio con el cual registrar\n" " el servidor PostgreSQL\n" -#: pg_ctl.c:1913 +#: pg_ctl.c:1953 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr "" " -P CONTRASEÑA contraseña de la cuenta con la cual registrar\n" " el servidor PostgreSQL\n" -#: pg_ctl.c:1914 +#: pg_ctl.c:1954 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr "" " -U USUARIO nombre de usuario de la cuenta con la cual\n" " registrar el servidor PostgreSQL\n" -#: pg_ctl.c:1915 +#: pg_ctl.c:1955 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr "" " -S TIPO-INICIO tipo de inicio de servicio con que registrar\n" " el servidor PostgreSQL\n" -#: pg_ctl.c:1917 +#: pg_ctl.c:1957 #, c-format msgid "" "\n" @@ -763,17 +777,17 @@ msgstr "" "\n" "Tipos de inicio del servicio son:\n" -#: pg_ctl.c:1918 +#: pg_ctl.c:1958 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr " auto iniciar automáticamente al inicio del sistema (por omisión)\n" -#: pg_ctl.c:1919 +#: pg_ctl.c:1959 #, c-format msgid " demand start service on demand\n" msgstr " demand iniciar el servicio en demanda\n" -#: pg_ctl.c:1922 +#: pg_ctl.c:1962 #, c-format msgid "" "\n" @@ -782,27 +796,27 @@ msgstr "" "\n" "Reporte errores a .\n" -#: pg_ctl.c:1947 +#: pg_ctl.c:1987 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: modo de apagado «%s» no reconocido\n" -#: pg_ctl.c:1979 +#: pg_ctl.c:2019 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: nombre de señal «%s» no reconocido\n" -#: pg_ctl.c:1996 +#: pg_ctl.c:2036 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: tipo de inicio «%s» no reconocido\n" -#: pg_ctl.c:2051 +#: pg_ctl.c:2091 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: no se pudo determinar el directorio de datos usando la orden «%s»\n" -#: pg_ctl.c:2123 +#: pg_ctl.c:2163 #, c-format msgid "" "%s: cannot be run as root\n" @@ -813,32 +827,32 @@ msgstr "" "Por favor conéctese (usando, por ejemplo, «su») con un usuario no privilegiado,\n" "quien ejecutará el proceso servidor.\n" -#: pg_ctl.c:2190 +#: pg_ctl.c:2242 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: la opción -S no está soportada en esta plataforma\n" -#: pg_ctl.c:2228 +#: pg_ctl.c:2280 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: demasiados argumentos de línea de órdenes (el primero es «%s»)\n" -#: pg_ctl.c:2252 +#: pg_ctl.c:2304 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: argumentos faltantes para envío de señal\n" -#: pg_ctl.c:2270 +#: pg_ctl.c:2322 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: modo de operación «%s» no reconocido\n" -#: pg_ctl.c:2280 +#: pg_ctl.c:2332 #, c-format msgid "%s: no operation specified\n" msgstr "%s: no se especificó operación\n" -#: pg_ctl.c:2301 +#: pg_ctl.c:2353 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: no se especificó directorio de datos y la variable PGDATA no está definida\n" diff --git a/src/bin/pg_ctl/po/it.po b/src/bin/pg_ctl/po/it.po index d211729b6937a..0fa85fc3328c8 100644 --- a/src/bin/pg_ctl/po/it.po +++ b/src/bin/pg_ctl/po/it.po @@ -17,10 +17,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_ctl (PostgreSQL) 9.4\n" +"Project-Id-Version: pg_ctl (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-08-30 02:42+0000\n" -"PO-Revision-Date: 2014-08-30 12:36+0100\n" +"POT-Creation-Date: 2015-08-15 18:43+0000\n" +"PO-Revision-Date: 2015-08-16 10:00+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -65,14 +65,14 @@ msgstr "lettura del link simbolico \"%s\" fallita" msgid "pclose failed: %s" msgstr "pclose fallita: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 ../../port/path.c:598 ../../port/path.c:636 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../port/path.c:598 ../../port/path.c:636 #: ../../port/path.c:653 #, c-format msgid "out of memory\n" msgstr "memoria esaurita\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "impossibile duplicare il puntatore nullo (errore interno)\n" @@ -117,37 +117,37 @@ msgstr "processo figlio uscito con stato non riconosciuto %d" msgid "could not get current working directory: %s\n" msgstr "determinazione della directory corrente fallita: %s\n" -#: pg_ctl.c:259 +#: pg_ctl.c:257 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: la directory \"%s\" non esiste\n" -#: pg_ctl.c:262 +#: pg_ctl.c:260 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: accesso alla directory \"%s\" fallito: %s\n" -#: pg_ctl.c:275 +#: pg_ctl.c:274 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: la directory \"%s\" non è la directory di un cluster di database\n" -#: pg_ctl.c:288 +#: pg_ctl.c:287 #, c-format msgid "%s: could not open PID file \"%s\": %s\n" msgstr "%s: apertura del file PID \"%s\" fallita: %s\n" -#: pg_ctl.c:297 +#: pg_ctl.c:296 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: il file PID \"%s\" è vuoto\n" -#: pg_ctl.c:300 +#: pg_ctl.c:299 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: dati non validi nel file PID \"%s\"\n" -#: pg_ctl.c:531 +#: pg_ctl.c:530 #, c-format msgid "" "\n" @@ -156,7 +156,7 @@ msgstr "" "\n" "%s: l'opzione -w non è supportata per avviare un server pre-9.1\n" -#: pg_ctl.c:601 +#: pg_ctl.c:600 #, c-format msgid "" "\n" @@ -165,7 +165,16 @@ msgstr "" "\n" "%s: l'opzione -w non può specificare una directory socket relativa\n" -#: pg_ctl.c:656 +#: pg_ctl.c:653 +#, c-format +msgid "" +"\n" +"%s: could not stat file \"%s\": %s\n" +msgstr "" +"\n" +"%s: lettura informazioni del file \"%s\" fallita: %s\n" + +#: pg_ctl.c:660 #, c-format msgid "" "\n" @@ -174,22 +183,22 @@ msgstr "" "\n" "%s: sembra che questa directory dati sia in esecuzione con un postmaster preesistente\n" -#: pg_ctl.c:706 +#: pg_ctl.c:710 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "%s: non è possibile configurare il limite di grandezza dei core file; impedito dall'hard limit\n" -#: pg_ctl.c:731 +#: pg_ctl.c:735 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: lettura del file \"%s\" fallita\n" -#: pg_ctl.c:736 +#: pg_ctl.c:740 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: il file di opzione \"%s\" deve avere esattamente una riga\n" -#: pg_ctl.c:787 +#: pg_ctl.c:791 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -200,7 +209,7 @@ msgstr "" "nella stessa directory di \"%s\".\n" "Verifica che l'installazione sia corretta.\n" -#: pg_ctl.c:793 +#: pg_ctl.c:797 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -211,42 +220,42 @@ msgstr "" "la stessa versione di %s.\n" "Verifica che l'installazione sia corretta.\n" -#: pg_ctl.c:826 +#: pg_ctl.c:830 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: inizializzazione del sistema di database fallita\n" -#: pg_ctl.c:841 +#: pg_ctl.c:845 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: un altro server potrebbe essere in esecuzione; si sta provando ad avviare il server ugualmente\n" -#: pg_ctl.c:878 +#: pg_ctl.c:882 #, c-format msgid "%s: could not start server: exit code was %d\n" msgstr "%s: avvio del server fallito: il codice di uscita è %d\n" -#: pg_ctl.c:885 +#: pg_ctl.c:889 msgid "waiting for server to start..." msgstr "in attesa che il server si avvii..." -#: pg_ctl.c:890 pg_ctl.c:991 pg_ctl.c:1082 +#: pg_ctl.c:894 pg_ctl.c:995 pg_ctl.c:1086 msgid " done\n" msgstr " fatto\n" -#: pg_ctl.c:891 +#: pg_ctl.c:895 msgid "server started\n" msgstr "il server è stato avviato\n" -#: pg_ctl.c:894 pg_ctl.c:898 +#: pg_ctl.c:898 pg_ctl.c:902 msgid " stopped waiting\n" msgstr " attesa interrotta\n" -#: pg_ctl.c:895 +#: pg_ctl.c:899 msgid "server is still starting up\n" msgstr "il server si sta ancora avviando\n" -#: pg_ctl.c:899 +#: pg_ctl.c:903 #, c-format msgid "" "%s: could not start server\n" @@ -255,43 +264,43 @@ msgstr "" "%s: l'avvio del server è fallito\n" "Esamina il log di output.\n" -#: pg_ctl.c:905 pg_ctl.c:983 pg_ctl.c:1073 +#: pg_ctl.c:909 pg_ctl.c:987 pg_ctl.c:1077 msgid " failed\n" msgstr " fallito\n" -#: pg_ctl.c:906 +#: pg_ctl.c:910 #, c-format msgid "%s: could not wait for server because of misconfiguration\n" msgstr "%s: non è stato possibile attendere il server a causa di configurazione errata\n" -#: pg_ctl.c:912 +#: pg_ctl.c:916 msgid "server starting\n" msgstr "il server si sta avviando\n" -#: pg_ctl.c:927 pg_ctl.c:1013 pg_ctl.c:1103 pg_ctl.c:1143 +#: pg_ctl.c:931 pg_ctl.c:1017 pg_ctl.c:1107 pg_ctl.c:1147 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: il file PID \"%s\" non esiste\n" -#: pg_ctl.c:928 pg_ctl.c:1015 pg_ctl.c:1104 pg_ctl.c:1144 +#: pg_ctl.c:932 pg_ctl.c:1019 pg_ctl.c:1108 pg_ctl.c:1148 msgid "Is server running?\n" msgstr "Il server è in esecuzione?\n" -#: pg_ctl.c:934 +#: pg_ctl.c:938 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "%s: non è possibile fermare il server; il server è in esecuzione in modalità a singolo utente (PID: %ld)\n" -#: pg_ctl.c:942 pg_ctl.c:1037 +#: pg_ctl.c:946 pg_ctl.c:1041 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s: invio del segnale di arresto fallito (PID: %ld): %s\n" -#: pg_ctl.c:949 +#: pg_ctl.c:953 msgid "server shutting down\n" msgstr "il server è in fase di arresto\n" -#: pg_ctl.c:964 pg_ctl.c:1052 +#: pg_ctl.c:968 pg_ctl.c:1056 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" @@ -301,16 +310,16 @@ msgstr "" "L'arresto non sarà completato finché non sarà chiamata pg_stop_backup().\n" "\n" -#: pg_ctl.c:968 pg_ctl.c:1056 +#: pg_ctl.c:972 pg_ctl.c:1060 msgid "waiting for server to shut down..." msgstr "in attesa dell'arresto del server...." -#: pg_ctl.c:985 pg_ctl.c:1075 +#: pg_ctl.c:989 pg_ctl.c:1079 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: il server non si è arrestato\n" -#: pg_ctl.c:987 pg_ctl.c:1077 +#: pg_ctl.c:991 pg_ctl.c:1081 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -318,184 +327,184 @@ msgstr "" "NOTA: L'opzione \"-m fast\" disconnette le sessioni immediatamente invece di\n" "attendere che siano le sessioni a disconnettersi.\n" -#: pg_ctl.c:993 pg_ctl.c:1083 +#: pg_ctl.c:997 pg_ctl.c:1087 msgid "server stopped\n" msgstr "il server è stato arrestato\n" -#: pg_ctl.c:1016 pg_ctl.c:1089 +#: pg_ctl.c:1020 pg_ctl.c:1093 msgid "starting server anyway\n" msgstr "il server si sta avviando comunque\n" -#: pg_ctl.c:1025 +#: pg_ctl.c:1029 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "%s: non è possibile riavviare il server; il server è in esecuzione in modalità a singolo utente (PID: %ld)\n" -#: pg_ctl.c:1028 pg_ctl.c:1113 +#: pg_ctl.c:1032 pg_ctl.c:1117 msgid "Please terminate the single-user server and try again.\n" msgstr "Si prega di terminare il server in modalità singolo utente e di riprovare.\n" -#: pg_ctl.c:1087 +#: pg_ctl.c:1091 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s: il vecchio processo del server (PID: %ld) sembra non essere più attivo\n" -#: pg_ctl.c:1110 +#: pg_ctl.c:1114 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "%s: non è possibile eseguire il reload del server; il server è in esecuzione in modalità a singolo utente (PID: %ld)\n" -#: pg_ctl.c:1119 +#: pg_ctl.c:1123 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s: invio segnale di reload fallito (PID: %ld): %s\n" -#: pg_ctl.c:1124 +#: pg_ctl.c:1128 msgid "server signaled\n" msgstr "segnale inviato al server\n" -#: pg_ctl.c:1150 +#: pg_ctl.c:1154 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "%s: non è possibile promuovere il server: il server è in esecuzione in modalità a singolo utente (PID: %ld)\n" -#: pg_ctl.c:1159 +#: pg_ctl.c:1163 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: non è possibile promuovere il server: il server non è in modalità standby\n" -#: pg_ctl.c:1174 +#: pg_ctl.c:1178 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s: creazione del file di segnale di promozione \"%s\" fallito: %s\n" -#: pg_ctl.c:1180 +#: pg_ctl.c:1184 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s: scrittura del file di segnale di promozione \"%s\" fallita: %s\n" -#: pg_ctl.c:1188 +#: pg_ctl.c:1192 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s: invio del segnale di promozione fallito (PID: %ld): %s\n" -#: pg_ctl.c:1191 +#: pg_ctl.c:1195 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s: rimozione del file di segnale di promozione \"%s\" fallita: %s\n" -#: pg_ctl.c:1196 +#: pg_ctl.c:1200 msgid "server promoting\n" msgstr "il server sta venendo promosso\n" -#: pg_ctl.c:1243 +#: pg_ctl.c:1247 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: il server è in esecuzione in modalità a singolo utente (PID: %ld)\n" -#: pg_ctl.c:1256 +#: pg_ctl.c:1260 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: il server è in esecuzione (PID: %ld)\n" -#: pg_ctl.c:1272 +#: pg_ctl.c:1276 #, c-format msgid "%s: no server running\n" msgstr "%s: nessun server in esecuzione\n" -#: pg_ctl.c:1290 +#: pg_ctl.c:1294 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: invio del segnale %d fallito (PID: %ld): %s\n" -#: pg_ctl.c:1347 +#: pg_ctl.c:1351 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: il proprio programma eseguibile non è stato trovato\n" -#: pg_ctl.c:1357 +#: pg_ctl.c:1361 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: il programma eseguibile postgres non è stato trovato\n" -#: pg_ctl.c:1437 pg_ctl.c:1469 +#: pg_ctl.c:1444 pg_ctl.c:1478 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: apertura del service manager fallita\n" -#: pg_ctl.c:1443 +#: pg_ctl.c:1450 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: il servizio \"%s\" è già registrato\n" -#: pg_ctl.c:1454 +#: pg_ctl.c:1461 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: registrazione del servizio \"%s\" fallita: codice errore %lu\n" -#: pg_ctl.c:1475 +#: pg_ctl.c:1484 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: il servizio \"%s\" non è registrato\n" -#: pg_ctl.c:1482 +#: pg_ctl.c:1491 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: apertura del servizio \"%s\" fallita: codice errore %lu\n" -#: pg_ctl.c:1489 +#: pg_ctl.c:1500 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: rimozione della registrazione del servizio \"%s\" fallita: codice errore %lu\n" -#: pg_ctl.c:1574 +#: pg_ctl.c:1587 msgid "Waiting for server startup...\n" msgstr "In attesa che il server si avvii...\n" -#: pg_ctl.c:1577 +#: pg_ctl.c:1590 msgid "Timed out waiting for server startup\n" msgstr "Il tempo di attesa per l'avvio del server è scaduto\n" -#: pg_ctl.c:1581 +#: pg_ctl.c:1594 msgid "Server started and accepting connections\n" msgstr "Il server è avviato e accetta connessioni\n" -#: pg_ctl.c:1625 +#: pg_ctl.c:1650 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: non è possibile avviare il servizio \"%s\": codice errore %lu\n" -#: pg_ctl.c:1697 +#: pg_ctl.c:1724 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" msgstr "%s: ATTENZIONE: non è possibile creare token ristretti su questa piattaforma\n" -#: pg_ctl.c:1706 +#: pg_ctl.c:1739 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: apertura del token di processo fallita: codice errore %lu\n" -#: pg_ctl.c:1719 +#: pg_ctl.c:1753 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: allocazione dei SID fallita: codice errore %lu\n" -#: pg_ctl.c:1738 +#: pg_ctl.c:1773 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: creazione del token ristretto fallita: codice errore %lu\n" -#: pg_ctl.c:1771 +#: pg_ctl.c:1807 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "%s: ATTENZIONE: non tutte le funzioni di controllo dei job nella API di sistema sono state trovate\n" -#: pg_ctl.c:1853 +#: pg_ctl.c:1890 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Prova \"%s --help\" per maggiori informazioni.\n" -#: pg_ctl.c:1861 +#: pg_ctl.c:1898 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -504,27 +513,27 @@ msgstr "" "%s è un programma per inizializzare, avviare, fermare o controllare un server PostgreSQL.\n" "\n" -#: pg_ctl.c:1862 +#: pg_ctl.c:1899 #, c-format msgid "Usage:\n" msgstr "Utilizzo:\n" -#: pg_ctl.c:1863 +#: pg_ctl.c:1900 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o \"OPTIONS\"]\n" msgstr " %s init[db] [-D DATADIR] [-s] [-o \"OPZIONI\"]\n" -#: pg_ctl.c:1864 +#: pg_ctl.c:1901 #, c-format msgid " %s start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"]\n" msgstr " %s start [-w] [-t SECS] [-D DATADIR] [-s] [-l NOMEFILE] [-o \"OPZIONI\"]\n" -#: pg_ctl.c:1865 +#: pg_ctl.c:1902 #, c-format msgid " %s stop [-W] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" msgstr " %s stop [-W] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" -#: pg_ctl.c:1866 +#: pg_ctl.c:1903 #, c-format msgid "" " %s restart [-w] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" @@ -533,27 +542,27 @@ msgstr "" " %s restart [-w] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" " [-o \"OPZIONI\"]\n" -#: pg_ctl.c:1868 +#: pg_ctl.c:1905 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D DATADIR] [-s]\n" -#: pg_ctl.c:1869 +#: pg_ctl.c:1906 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DATADIR]\n" -#: pg_ctl.c:1870 +#: pg_ctl.c:1907 #, c-format msgid " %s promote [-D DATADIR] [-s]\n" msgstr " %s promote [-D DATADIR] [-s]\n" -#: pg_ctl.c:1871 +#: pg_ctl.c:1908 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill SIGNALNAME PID\n" -#: pg_ctl.c:1873 +#: pg_ctl.c:1910 #, c-format msgid "" " %s register [-N SERVICENAME] [-U USERNAME] [-P PASSWORD] [-D DATADIR]\n" @@ -562,12 +571,12 @@ msgstr "" " %s register [-N SERVICENAME] [-U USERNAME] [-P PASSWORD] [-D DATADIR]\n" " [-S START-TYPE] [-w] [-t SECS] [-o \"OPZIONI\"]\n" -#: pg_ctl.c:1875 +#: pg_ctl.c:1912 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N SERVICENAME]\n" -#: pg_ctl.c:1878 +#: pg_ctl.c:1915 #, c-format msgid "" "\n" @@ -576,42 +585,51 @@ msgstr "" "\n" "Opzioni comuni:\n" -#: pg_ctl.c:1879 +#: pg_ctl.c:1916 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata DATADIR posizione dell'area di archiviazione del database\n" -#: pg_ctl.c:1880 +#: pg_ctl.c:1917 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent mostra solo gli errori, non i messaggi di informazione\n" -#: pg_ctl.c:1881 +#: pg_ctl.c:1919 +#, c-format +msgid "" +" -e SOURCE event source to use for logging when running\n" +" as a service\n" +msgstr "" +" -e SORGENTE sorgente eventi da usare per il log quando eseguito\n" +" come servizio\n" + +#: pg_ctl.c:1922 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout=SECS secondi da aspettare quando si usa l'opzione -w\n" -#: pg_ctl.c:1882 +#: pg_ctl.c:1923 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informazioni sulla versione ed esci\n" -#: pg_ctl.c:1883 +#: pg_ctl.c:1924 #, c-format msgid " -w wait until operation completes\n" msgstr " -w aspetta finché l'operazione non sia stata completata\n" -#: pg_ctl.c:1884 +#: pg_ctl.c:1925 #, c-format msgid " -W do not wait until operation completes\n" msgstr " -W non aspettare finché l'operazione non è terminata\n" -#: pg_ctl.c:1885 +#: pg_ctl.c:1926 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra questo aiuto ed esci\n" -#: pg_ctl.c:1886 +#: pg_ctl.c:1927 #, c-format msgid "" "(The default is to wait for shutdown, but not for start or restart.)\n" @@ -621,12 +639,12 @@ msgstr "" "l'avvio o il riavvio.)\n" "\n" -#: pg_ctl.c:1887 +#: pg_ctl.c:1928 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Se l'opzione -D è omessa, viene usata la variabile d'ambiente PGDATA.\n" -#: pg_ctl.c:1889 +#: pg_ctl.c:1930 #, c-format msgid "" "\n" @@ -635,22 +653,22 @@ msgstr "" "\n" "Opzioni per l'avvio o il riavvio:\n" -#: pg_ctl.c:1891 +#: pg_ctl.c:1932 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files permette a postgres di produrre core file\n" -#: pg_ctl.c:1893 +#: pg_ctl.c:1934 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files non disponibile su questa piattaforma\n" -#: pg_ctl.c:1895 +#: pg_ctl.c:1936 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l, --log NOMEFILE scrivi (o accoda) il log del server in NOMEFILE\n" -#: pg_ctl.c:1896 +#: pg_ctl.c:1937 #, c-format msgid "" " -o OPTIONS command line options to pass to postgres\n" @@ -659,12 +677,12 @@ msgstr "" " -o OPZIONI opzioni da riga di comando da passare a postgres\n" " (programma eseguibile del server PostgreSQL)\n" -#: pg_ctl.c:1898 +#: pg_ctl.c:1939 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p PATH-TO-POSTGRES normalmente non necessario\n" -#: pg_ctl.c:1899 +#: pg_ctl.c:1940 #, c-format msgid "" "\n" @@ -673,12 +691,12 @@ msgstr "" "\n" "Opzioni per l'arresto o il riavvio:\n" -#: pg_ctl.c:1900 +#: pg_ctl.c:1941 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=MODE MODE può essere \"smart\", \"fast\" o \"immediate\"\n" -#: pg_ctl.c:1902 +#: pg_ctl.c:1943 #, c-format msgid "" "\n" @@ -687,24 +705,24 @@ msgstr "" "\n" "I modi di spegnimento sono:\n" -#: pg_ctl.c:1903 +#: pg_ctl.c:1944 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart termina dopo che tutti i client si sono disconnessi\n" -#: pg_ctl.c:1904 +#: pg_ctl.c:1945 #, c-format msgid " fast quit directly, with proper shutdown\n" msgstr " fast termina direttamente, con una corretta procedura di arresto\n" -#: pg_ctl.c:1905 +#: pg_ctl.c:1946 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr "" " immediate termina senza un arresto completo: ciò porterà ad un recupero\n" " dei dati al riavvio\n" -#: pg_ctl.c:1907 +#: pg_ctl.c:1948 #, c-format msgid "" "\n" @@ -713,7 +731,7 @@ msgstr "" "\n" "Nomi di segnali permessi per kill:\n" -#: pg_ctl.c:1911 +#: pg_ctl.c:1952 #, c-format msgid "" "\n" @@ -722,27 +740,27 @@ msgstr "" "\n" "Opzioni per register e unregister:\n" -#: pg_ctl.c:1912 +#: pg_ctl.c:1953 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N SERVICENAME nome del servizio con cui registrare il server PostgreSQL\n" -#: pg_ctl.c:1913 +#: pg_ctl.c:1954 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P PASSWORD password per l'account con cui registrare il server PostgreSQL\n" -#: pg_ctl.c:1914 +#: pg_ctl.c:1955 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U USERNAME nome utente dell'account con cui registrare il server PostgreSQL\n" -#: pg_ctl.c:1915 +#: pg_ctl.c:1956 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S START-TYPE tipo di avvio del servizio con cui registrare il server PostgreSQL\n" -#: pg_ctl.c:1917 +#: pg_ctl.c:1958 #, c-format msgid "" "\n" @@ -751,17 +769,17 @@ msgstr "" "\n" "I tipi di avvio sono:\n" -#: pg_ctl.c:1918 +#: pg_ctl.c:1959 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr " auto avvia il servizio automaticamente durante l'avvio del sistema (predefinito)\n" -#: pg_ctl.c:1919 +#: pg_ctl.c:1960 #, c-format msgid " demand start service on demand\n" msgstr " demand avvia il servizio quando richiesto\n" -#: pg_ctl.c:1922 +#: pg_ctl.c:1963 #, c-format msgid "" "\n" @@ -770,27 +788,27 @@ msgstr "" "\n" "Puoi segnalare eventuali bug a .\n" -#: pg_ctl.c:1947 +#: pg_ctl.c:1988 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: modalità di arresto sconosciuta \"%s\"\n" -#: pg_ctl.c:1979 +#: pg_ctl.c:2020 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: nome del segnale sconosciuto \"%s\"\n" -#: pg_ctl.c:1996 +#: pg_ctl.c:2037 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: tipo di avvio sconosciuto \"%s\"\n" -#: pg_ctl.c:2051 +#: pg_ctl.c:2092 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: non è stato possibile determinare la directory dei dati usando il comando \"%s\"\n" -#: pg_ctl.c:2123 +#: pg_ctl.c:2164 #, c-format msgid "" "%s: cannot be run as root\n" @@ -801,32 +819,32 @@ msgstr "" "Effettua il login (usando per esempio \"su\") con l'utente\n" "(non privilegiato) che controllerà il processo server.\n" -#: pg_ctl.c:2190 +#: pg_ctl.c:2243 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: l'opzione -S non è supportata su questa piattaforma\n" -#: pg_ctl.c:2228 +#: pg_ctl.c:2281 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: troppi argomenti nella riga di comando (il primo è \"%s\")\n" -#: pg_ctl.c:2252 +#: pg_ctl.c:2305 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: mancano gli argomenti per la modalità di kill\n" -#: pg_ctl.c:2270 +#: pg_ctl.c:2323 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: modalità di operazione sconosciuta \"%s\"\n" -#: pg_ctl.c:2280 +#: pg_ctl.c:2333 #, c-format msgid "%s: no operation specified\n" msgstr "%s: nessuna operazione specificata\n" -#: pg_ctl.c:2301 +#: pg_ctl.c:2354 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: nessuna directory del database è stata specificata e la variabile d'ambiente PGDATA non è configurata\n" diff --git a/src/bin/pg_ctl/po/pl.po b/src/bin/pg_ctl/po/pl.po index 16c20132f1c00..56195fe38c60a 100644 --- a/src/bin/pg_ctl/po/pl.po +++ b/src/bin/pg_ctl/po/pl.po @@ -2,13 +2,13 @@ # Copyright (C) 2011 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. # Begina Felicysym , 2011, 2012, 2013. -# grzegorz , 2014. +# grzegorz , 2014, 2015. msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL 9.1)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-11-10 20:42+0000\n" -"PO-Revision-Date: 2014-11-16 20:52-0500\n" +"POT-Creation-Date: 2015-08-15 18:43+0000\n" +"PO-Revision-Date: 2015-08-16 12:32+0200\n" "Last-Translator: grzegorz \n" "Language-Team: begina.felicysym@wp.eu\n" "Language: pl\n" @@ -54,14 +54,14 @@ msgstr "nie można odczytać linku symbolicznego \"%s\"" msgid "pclose failed: %s" msgstr "pclose nie powiodło się: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 ../../port/path.c:598 ../../port/path.c:636 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../port/path.c:598 ../../port/path.c:636 #: ../../port/path.c:653 #, c-format msgid "out of memory\n" msgstr "brak pamięci\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "nie można powielić pustego wskazania (błąd wewnętrzny)\n" @@ -103,43 +103,40 @@ msgstr "proces potomny zakończył działanie z nieznanym stanem %d" #: ../../port/path.c:620 #, c-format -#| msgid "could not identify current directory: %s" msgid "could not get current working directory: %s\n" msgstr "nie można zidentyfikować aktualnego folderu roboczego: %s\n" -#: pg_ctl.c:259 +#: pg_ctl.c:257 #, c-format -#| msgid "directory \"%s\" does not exist" msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: folder \"%s\" nie istnieje\n" -#: pg_ctl.c:262 +#: pg_ctl.c:260 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: brak dostępu do katalogu \"%s\": %s\n" -#: pg_ctl.c:275 +#: pg_ctl.c:274 #, c-format -#| msgid "specified data directory \"%s\" is not a directory" 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:288 +#: pg_ctl.c:287 #, 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:297 +#: pg_ctl.c:296 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: plik PID \"%s\" jest pusty\n" -#: pg_ctl.c:300 +#: pg_ctl.c:299 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: niepoprawne dane w pliku PID \"%s\"\n" -#: pg_ctl.c:531 +#: pg_ctl.c:530 #, c-format msgid "" "\n" @@ -148,7 +145,7 @@ msgstr "" "\n" "%s: opcja -w nie jest wspierana przy uruchomieniu serwera pre-9.1\n" -#: pg_ctl.c:601 +#: pg_ctl.c:600 #, c-format msgid "" "\n" @@ -157,7 +154,17 @@ msgstr "" "\n" "%s: opcja -w nie może używać względnego wskazania katalogu gniazd\n" -#: pg_ctl.c:656 +#: pg_ctl.c:653 +#, c-format +#| msgid "%s: could not stat file \"%s\": %s\n" +msgid "" +"\n" +"%s: could not stat file \"%s\": %s\n" +msgstr "" +"\n" +"%s: nie można wykonać stat na pliku \"%s\": %s\n" + +#: pg_ctl.c:660 #, c-format msgid "" "\n" @@ -166,22 +173,22 @@ msgstr "" "\n" "%s: ten folder danych wydaje się być działać pod wcześniejszym postmasterem\n" -#: pg_ctl.c:706 +#: pg_ctl.c:710 #, 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:731 +#: pg_ctl.c:735 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: nie można czytać z pliku \"%s\"\n" -#: pg_ctl.c:736 +#: pg_ctl.c:740 #, 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:787 +#: pg_ctl.c:791 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -192,7 +199,7 @@ msgstr "" "w tym samym folderze co \"%s\".\n" "Sprawdź instalację.\n" -#: pg_ctl.c:793 +#: pg_ctl.c:797 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -203,42 +210,42 @@ msgstr "" "ale nie jest w tej samej wersji co %s.\n" "Sprawdź instalację.\n" -#: pg_ctl.c:826 +#: pg_ctl.c:830 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: inicjacja systemu bazy danych nie powiodła się\n" -#: pg_ctl.c:841 +#: pg_ctl.c:845 #, 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:878 +#: pg_ctl.c:882 #, c-format msgid "%s: could not start server: exit code was %d\n" msgstr "%s: nie można uruchomić serwera: wystąpił kod wyjścia %d\n" -#: pg_ctl.c:885 +#: pg_ctl.c:889 msgid "waiting for server to start..." msgstr "oczekiwanie na uruchomienie serwera..." -#: pg_ctl.c:890 pg_ctl.c:991 pg_ctl.c:1082 +#: pg_ctl.c:894 pg_ctl.c:995 pg_ctl.c:1086 msgid " done\n" msgstr " zakończono\n" -#: pg_ctl.c:891 +#: pg_ctl.c:895 msgid "server started\n" msgstr "uruchomiono serwer\n" -#: pg_ctl.c:894 pg_ctl.c:898 +#: pg_ctl.c:898 pg_ctl.c:902 msgid " stopped waiting\n" msgstr " oczekiwanie zakończone\n" -#: pg_ctl.c:895 +#: pg_ctl.c:899 msgid "server is still starting up\n" msgstr "serwer ciągle się uruchamia\n" -#: pg_ctl.c:899 +#: pg_ctl.c:903 #, c-format msgid "" "%s: could not start server\n" @@ -247,43 +254,43 @@ msgstr "" "%s: Nie udało się uruchomić serwera\n" "Sprawdź logi wyjścia.\n" -#: pg_ctl.c:905 pg_ctl.c:983 pg_ctl.c:1073 +#: pg_ctl.c:909 pg_ctl.c:987 pg_ctl.c:1077 msgid " failed\n" msgstr " niepowodzenie\n" -#: pg_ctl.c:906 +#: pg_ctl.c:910 #, c-format msgid "%s: could not wait for server because of misconfiguration\n" msgstr "%s: nie można czekać na serwer z powodu błędnej konfiguracji\n" -#: pg_ctl.c:912 +#: pg_ctl.c:916 msgid "server starting\n" msgstr "serwer w trakcie uruchamiania\n" -#: pg_ctl.c:927 pg_ctl.c:1013 pg_ctl.c:1103 pg_ctl.c:1143 +#: pg_ctl.c:931 pg_ctl.c:1017 pg_ctl.c:1107 pg_ctl.c:1147 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: plik PID \"%s\" nie istnieje\n" -#: pg_ctl.c:928 pg_ctl.c:1015 pg_ctl.c:1104 pg_ctl.c:1144 +#: pg_ctl.c:932 pg_ctl.c:1019 pg_ctl.c:1108 pg_ctl.c:1148 msgid "Is server running?\n" msgstr "Czy serwer działa?\n" -#: pg_ctl.c:934 +#: pg_ctl.c:938 #, 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:942 pg_ctl.c:1037 +#: pg_ctl.c:946 pg_ctl.c:1041 #, 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:949 +#: pg_ctl.c:953 msgid "server shutting down\n" msgstr "zatrzymywanie serwera\n" -#: pg_ctl.c:964 pg_ctl.c:1052 +#: pg_ctl.c:968 pg_ctl.c:1056 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" @@ -293,16 +300,16 @@ msgstr "" "Zatrzymanie nie zakończy się póki wywoływana jest pg_stop_backup().\n" "\n" -#: pg_ctl.c:968 pg_ctl.c:1056 +#: pg_ctl.c:972 pg_ctl.c:1060 msgid "waiting for server to shut down..." msgstr "oczekiwanie na zatrzymanie serwera..." -#: pg_ctl.c:985 pg_ctl.c:1075 +#: pg_ctl.c:989 pg_ctl.c:1079 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: serwer nie zatrzymał się\n" -#: pg_ctl.c:987 pg_ctl.c:1077 +#: pg_ctl.c:991 pg_ctl.c:1081 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -310,184 +317,184 @@ msgstr "" "PORADA: Opcja \"-m fast\" rozłącza natychmiast sesje zamiast\n" "czekać na odłączenie sesji przez użytkowników.\n" -#: pg_ctl.c:993 pg_ctl.c:1083 +#: pg_ctl.c:997 pg_ctl.c:1087 msgid "server stopped\n" msgstr "serwer zatrzymany\n" -#: pg_ctl.c:1016 pg_ctl.c:1089 +#: pg_ctl.c:1020 pg_ctl.c:1093 msgid "starting server anyway\n" msgstr "uruchomienie serwera mimo wszystko\n" -#: pg_ctl.c:1025 +#: pg_ctl.c:1029 #, 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:1028 pg_ctl.c:1113 +#: pg_ctl.c:1032 pg_ctl.c:1117 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:1087 +#: pg_ctl.c:1091 #, 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:1110 +#: pg_ctl.c:1114 #, 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:1119 +#: pg_ctl.c:1123 #, 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:1124 +#: pg_ctl.c:1128 msgid "server signaled\n" msgstr "serwer zasygnalizowany\n" -#: pg_ctl.c:1150 +#: pg_ctl.c:1154 #, 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:1159 +#: pg_ctl.c:1163 #, 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:1174 +#: pg_ctl.c:1178 #, 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:1180 +#: pg_ctl.c:1184 #, 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:1188 +#: pg_ctl.c:1192 #, 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:1191 +#: pg_ctl.c:1195 #, 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:1196 +#: pg_ctl.c:1200 msgid "server promoting\n" msgstr "serwer w trakcie rozgłaszania\n" -#: pg_ctl.c:1243 +#: pg_ctl.c:1247 #, 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:1256 +#: pg_ctl.c:1260 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: jest uruchomiony serwer (PID: %ld)\n" -#: pg_ctl.c:1272 +#: pg_ctl.c:1276 #, c-format msgid "%s: no server running\n" msgstr "%s: brak uruchomionego serwera\n" -#: pg_ctl.c:1290 +#: pg_ctl.c:1294 #, 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:1347 +#: pg_ctl.c:1351 #, 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:1357 +#: pg_ctl.c:1361 #, 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:1437 pg_ctl.c:1469 +#: pg_ctl.c:1444 pg_ctl.c:1478 #, 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:1443 +#: pg_ctl.c:1450 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: usługa \"%s\" jest już zarejestrowana\n" -#: pg_ctl.c:1454 +#: pg_ctl.c:1461 #, 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:1475 +#: pg_ctl.c:1484 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: usługa \"%s\" niezarejestrowana\n" -#: pg_ctl.c:1482 +#: pg_ctl.c:1491 #, 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:1489 +#: pg_ctl.c:1500 #, 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:1574 +#: pg_ctl.c:1587 msgid "Waiting for server startup...\n" msgstr "Oczekiwanie na uruchomienie serwera...\n" -#: pg_ctl.c:1577 +#: pg_ctl.c:1590 msgid "Timed out waiting for server startup\n" msgstr "Minął czas oczekiwania na uruchomienie serwera\n" -#: pg_ctl.c:1581 +#: pg_ctl.c:1594 msgid "Server started and accepting connections\n" msgstr "Serwer uruchomiony i akceptuje połączenia\n" -#: pg_ctl.c:1625 +#: pg_ctl.c:1650 #, 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:1697 +#: pg_ctl.c:1724 #, 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:1706 +#: pg_ctl.c:1739 #, 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:1719 +#: pg_ctl.c:1753 #, 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:1738 +#: pg_ctl.c:1773 #, 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:1771 +#: pg_ctl.c:1807 #, 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:1853 +#: pg_ctl.c:1890 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Spróbuj \"%s --help\" aby uzyskać więcej informacji.\n" -#: pg_ctl.c:1861 +#: pg_ctl.c:1898 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -496,27 +503,27 @@ msgstr "" "%s jest narzędziem do inicjacji, uruchamiania, zatrzymywania i kontroli serwera PostgreSQL.\n" "\n" -#: pg_ctl.c:1862 +#: pg_ctl.c:1899 #, c-format msgid "Usage:\n" msgstr "Składnia:\n" -#: pg_ctl.c:1863 +#: pg_ctl.c:1900 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o \"OPTIONS\"]\n" msgstr " %s init[db] [-D KATDANE] [-s] [-o \"OPCJE\"]\n" -#: pg_ctl.c:1864 +#: pg_ctl.c:1901 #, c-format msgid " %s start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"]\n" msgstr " %s start [-w] [-t SEKUNDY] [-D KATDANE] [-s] [-l NAZWAPLIKU] [-o \"OPCJE\"]\n" -#: pg_ctl.c:1865 +#: pg_ctl.c:1902 #, c-format msgid " %s stop [-W] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" msgstr " %s stop [-W] [-t SEKUNDY] [-D KATDANE] [-s] [-m TRYB-ZAMKNIECIA]\n" -#: pg_ctl.c:1866 +#: pg_ctl.c:1903 #, c-format msgid "" " %s restart [-w] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" @@ -525,27 +532,27 @@ msgstr "" " %s restart [-w] [-t SEKUNDY] [-D KATDANE] [-s] [-m TRYB-ZAMKNIECIA]\n" " [-o \"OPCJE\"]\n" -#: pg_ctl.c:1868 +#: pg_ctl.c:1905 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D KATDANE] [-s]\n" -#: pg_ctl.c:1869 +#: pg_ctl.c:1906 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D KATDANE]\n" -#: pg_ctl.c:1870 +#: pg_ctl.c:1907 #, c-format msgid " %s promote [-D DATADIR] [-s]\n" msgstr " %s promote [-D KATDANE] [-s]\n" -#: pg_ctl.c:1871 +#: pg_ctl.c:1908 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill NAZWASYGNAŁU PID\n" -#: pg_ctl.c:1873 +#: pg_ctl.c:1910 #, c-format msgid "" " %s register [-N SERVICENAME] [-U USERNAME] [-P PASSWORD] [-D DATADIR]\n" @@ -554,12 +561,12 @@ msgstr "" " %s register [-N NAZWAUSLUGI] [-U USERNAME] [-P PASSWORD] [-D KATDANE]\n" " [-S TYP-STARTU] [-w] [-t SEKUNDY] [-o \"OPCJE\"]\n" -#: pg_ctl.c:1875 +#: pg_ctl.c:1912 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N NAZWAUSLUGI]\n" -#: pg_ctl.c:1878 +#: pg_ctl.c:1915 #, c-format msgid "" "\n" @@ -568,42 +575,51 @@ msgstr "" "\n" "Opcje ogólne:\n" -#: pg_ctl.c:1879 +#: pg_ctl.c:1916 #, 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:1880 +#: pg_ctl.c:1917 #, 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:1881 +#: pg_ctl.c:1919 +#, c-format +msgid "" +" -e SOURCE event source to use for logging when running\n" +" as a service\n" +msgstr "" +" -e ŹRÓDŁO źródło zdarzenia do użycia podczas logowania\n" +" gdy uruchomiono jako usługę\n" + +#: pg_ctl.c:1922 #, 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:1882 +#: pg_ctl.c:1923 #, 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:1883 +#: pg_ctl.c:1924 #, c-format msgid " -w wait until operation completes\n" msgstr " -w czekaj na zakończenie operacji\n" -#: pg_ctl.c:1884 +#: pg_ctl.c:1925 #, c-format msgid " -W do not wait until operation completes\n" msgstr " -W nie czekaj na zakończenie operacji\n" -#: pg_ctl.c:1885 +#: pg_ctl.c:1926 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help pokaż tą pomoc i zakończ działanie\n" -#: pg_ctl.c:1886 +#: pg_ctl.c:1927 #, c-format msgid "" "(The default is to wait for shutdown, but not for start or restart.)\n" @@ -612,12 +628,12 @@ msgstr "" "(Oczekiwanie jest domyślne dla zamknięcia, ale nie dla uruchomienia i restartu.)\n" "\n" -#: pg_ctl.c:1887 +#: pg_ctl.c:1928 #, 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:1889 +#: pg_ctl.c:1930 #, c-format msgid "" "\n" @@ -626,22 +642,22 @@ msgstr "" "\n" "Opcje uruchomienia lub restartu:\n" -#: pg_ctl.c:1891 +#: pg_ctl.c:1932 #, 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:1893 +#: pg_ctl.c:1934 #, 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:1895 +#: pg_ctl.c:1936 #, 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:1896 +#: pg_ctl.c:1937 #, c-format msgid "" " -o OPTIONS command line options to pass to postgres\n" @@ -650,16 +666,13 @@ msgstr "" " -o OPCJE opcje wiersza poleceń przekazywanych postgresowi\n" " (program wykonywalny PostgreSQL) lub initdb\n" -#: pg_ctl.c:1898 +#: pg_ctl.c:1939 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p ŚCIEŻKA-DO-POSTGRES zwykle niekonieczna\n" -#: pg_ctl.c:1899 +#: pg_ctl.c:1940 #, c-format -#| msgid "" -#| "\n" -#| "Options for start or restart:\n" msgid "" "\n" "Options for stop or restart:\n" @@ -667,12 +680,12 @@ msgstr "" "\n" "Opcje dla zatrzymania lub restartu:\n" -#: pg_ctl.c:1900 +#: pg_ctl.c:1941 #, 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:1902 +#: pg_ctl.c:1943 #, c-format msgid "" "\n" @@ -681,22 +694,22 @@ msgstr "" "\n" "Tryby zamknięcia to:\n" -#: pg_ctl.c:1903 +#: pg_ctl.c:1944 #, 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:1904 +#: pg_ctl.c:1945 #, c-format msgid " fast quit directly, with proper shutdown\n" msgstr " fast bezpośrednie wyjście, z właściwym zamknięciem\n" -#: pg_ctl.c:1905 +#: pg_ctl.c:1946 #, 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:1907 +#: pg_ctl.c:1948 #, c-format msgid "" "\n" @@ -705,7 +718,7 @@ msgstr "" "\n" "Dopuszczalne nazwy sygnałów dla zabicia:\n" -#: pg_ctl.c:1911 +#: pg_ctl.c:1952 #, c-format msgid "" "\n" @@ -714,27 +727,27 @@ msgstr "" "\n" "Opcje rejestracji i wyrejestrowania:\n" -#: pg_ctl.c:1912 +#: pg_ctl.c:1953 #, 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:1913 +#: pg_ctl.c:1954 #, 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:1914 +#: pg_ctl.c:1955 #, 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:1915 +#: pg_ctl.c:1956 #, 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:1917 +#: pg_ctl.c:1958 #, c-format msgid "" "\n" @@ -743,17 +756,17 @@ msgstr "" "\n" "Rodzaje startu to:\n" -#: pg_ctl.c:1918 +#: pg_ctl.c:1959 #, 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:1919 +#: pg_ctl.c:1960 #, c-format msgid " demand start service on demand\n" msgstr " demand uruchamia usługę na żądanie\n" -#: pg_ctl.c:1922 +#: pg_ctl.c:1963 #, c-format msgid "" "\n" @@ -762,27 +775,27 @@ msgstr "" "\n" "Błędy proszę przesyłać na adres .\n" -#: pg_ctl.c:1947 +#: pg_ctl.c:1988 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: nierozpoznany tryb wyłączenia \"%s\"\n" -#: pg_ctl.c:1979 +#: pg_ctl.c:2020 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: nierozpoznana nazwa sygnału \"%s\"\n" -#: pg_ctl.c:1996 +#: pg_ctl.c:2037 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: nierozpoznany tryb uruchomienia \"%s\"\n" -#: pg_ctl.c:2051 +#: pg_ctl.c:2092 #, 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:2123 +#: pg_ctl.c:2164 #, c-format msgid "" "%s: cannot be run as root\n" @@ -793,44 +806,44 @@ msgstr "" "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:2190 +#: pg_ctl.c:2243 #, 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:2228 +#: pg_ctl.c:2281 #, 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:2252 +#: pg_ctl.c:2305 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: nie wskazano wszystkich argumentów trybu zabicia\n" -#: pg_ctl.c:2270 +#: pg_ctl.c:2323 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: nierozpoznany tryb autoryzacji \"%s\"\n" -#: pg_ctl.c:2280 +#: pg_ctl.c:2333 #, c-format msgid "%s: no operation specified\n" msgstr "%s: nie podano operacji\n" -#: pg_ctl.c:2301 +#: pg_ctl.c:2354 #, 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" -#~ msgid " smart promote after performing a checkpoint\n" -#~ msgstr " smart rozgłoś po wykonaniu punktu kontrolnego\n" - -#~ msgid " fast promote quickly without waiting for checkpoint completion\n" -#~ msgstr " fast rozgłoś bez czekania na zakończenie punktu kontrolnego\n" +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "nie można zmienić katalogu na \"%s\"" #~ msgid "%s: out of memory\n" #~ msgstr "%s: brak pamięci\n" -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "nie można zmienić katalogu na \"%s\"" +#~ msgid " fast promote quickly without waiting for checkpoint completion\n" +#~ msgstr " fast rozgłoś bez czekania na zakończenie punktu kontrolnego\n" + +#~ msgid " smart promote after performing a checkpoint\n" +#~ msgstr " smart rozgłoś po wykonaniu punktu kontrolnego\n" diff --git a/src/bin/pg_ctl/po/pt_BR.po b/src/bin/pg_ctl/po/pt_BR.po index 25a36dafa269f..fffb3f8c27aab 100644 --- a/src/bin/pg_ctl/po/pt_BR.po +++ b/src/bin/pg_ctl/po/pt_BR.po @@ -1,13 +1,13 @@ # Brazilian Portuguese message translation file for pg_ctl # Copyright (C) 2009 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Euler Taveira de Oliveira , 2004-2014. +# Euler Taveira de Oliveira , 2004-2015. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-09-14 23:08-0300\n" +"POT-Creation-Date: 2015-10-04 16:06-0300\n" "PO-Revision-Date: 2005-10-04 22:15-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -51,14 +51,14 @@ msgstr "não pôde ler link simbólico \"%s\"" msgid "pclose failed: %s" msgstr "pclose falhou: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 ../../port/path.c:598 ../../port/path.c:636 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../port/path.c:598 ../../port/path.c:636 #: ../../port/path.c:653 #, c-format msgid "out of memory\n" msgstr "sem memória\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "não pode duplicar ponteiro nulo (erro interno)\n" @@ -103,37 +103,37 @@ msgstr "processo filho terminou com status desconhecido %d" msgid "could not get current working directory: %s\n" msgstr "não pôde obter diretório de trabalho atual: %s\n" -#: pg_ctl.c:259 +#: pg_ctl.c:257 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: diretório \"%s\" não existe\n" -#: pg_ctl.c:262 +#: pg_ctl.c:260 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: não pôde acessar diretório \"%s\": %s\n" -#: pg_ctl.c:275 +#: pg_ctl.c:274 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: diretório \"%s\" não é um diretório de agrupamento de banco dados\n" -#: pg_ctl.c:288 +#: pg_ctl.c:287 #, c-format msgid "%s: could not open PID file \"%s\": %s\n" msgstr "%s: não pôde abrir arquivo do PID \"%s\": %s\n" -#: pg_ctl.c:297 +#: pg_ctl.c:296 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: arquivo do PID \"%s\" está vazio\n" -#: pg_ctl.c:300 +#: pg_ctl.c:299 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: dado inválido no arquivo do PID \"%s\"\n" -#: pg_ctl.c:531 +#: pg_ctl.c:530 #, c-format msgid "" "\n" @@ -142,7 +142,7 @@ msgstr "" "\n" "%s: opção -w não é suportada ao iniciar um servidor anterior a 9.1\n" -#: pg_ctl.c:601 +#: pg_ctl.c:600 #, c-format msgid "" "\n" @@ -151,7 +151,16 @@ msgstr "" "\n" "%s: opção -w não pode utilizar uma especificação de diretório de soquete relativa\n" -#: pg_ctl.c:656 +#: pg_ctl.c:653 +#, c-format +msgid "" +"\n" +"%s: could not stat file \"%s\": %s\n" +msgstr "" +"\n" +"%s: não pôde executar stat no arquivo \"%s\": %s\n" + +#: pg_ctl.c:660 #, c-format msgid "" "\n" @@ -160,22 +169,22 @@ msgstr "" "\n" "%s: este diretório de dados parece já estar executando um postmaster\n" -#: pg_ctl.c:706 +#: pg_ctl.c:710 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "%s: não pode definir tamanho limite do arquivo core; não é permitido pelo limite superior\n" -#: pg_ctl.c:731 +#: pg_ctl.c:735 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: não pôde ler arquivo \"%s\"\n" -#: pg_ctl.c:736 +#: pg_ctl.c:740 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: arquivo de opções \"%s\" deve ter exatamente uma linha\n" -#: pg_ctl.c:787 +#: pg_ctl.c:791 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -186,7 +195,7 @@ msgstr "" "mesmo diretório que \"%s\".\n" "Verifique sua instalação.\n" -#: pg_ctl.c:793 +#: pg_ctl.c:797 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -197,42 +206,42 @@ msgstr "" "mas não tem a mesma versão que %s.\n" "Verifique sua instalação.\n" -#: pg_ctl.c:826 +#: pg_ctl.c:830 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: inicialização do sistema de banco de dados falhou\n" -#: pg_ctl.c:841 +#: pg_ctl.c:845 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "%s: outro servidor pode estar executando; tentando iniciar o servidor assim mesmo\n" -#: pg_ctl.c:878 +#: pg_ctl.c:882 #, c-format msgid "%s: could not start server: exit code was %d\n" msgstr "%s: não pôde iniciar o servidor: código de saída foi %d\n" -#: pg_ctl.c:885 +#: pg_ctl.c:889 msgid "waiting for server to start..." msgstr "esperando o servidor iniciar..." -#: pg_ctl.c:890 pg_ctl.c:991 pg_ctl.c:1082 +#: pg_ctl.c:894 pg_ctl.c:995 pg_ctl.c:1086 msgid " done\n" msgstr "feito\n" -#: pg_ctl.c:891 +#: pg_ctl.c:895 msgid "server started\n" msgstr "servidor iniciado\n" -#: pg_ctl.c:894 pg_ctl.c:898 +#: pg_ctl.c:898 pg_ctl.c:902 msgid " stopped waiting\n" msgstr "parou de esperar\n" -#: pg_ctl.c:895 +#: pg_ctl.c:899 msgid "server is still starting up\n" msgstr "servidor ainda está iniciando\n" -#: pg_ctl.c:899 +#: pg_ctl.c:903 #, c-format msgid "" "%s: could not start server\n" @@ -241,43 +250,43 @@ msgstr "" "%s: não pode iniciar o servidor\n" "Examine o arquivo de log.\n" -#: pg_ctl.c:905 pg_ctl.c:983 pg_ctl.c:1073 +#: pg_ctl.c:909 pg_ctl.c:987 pg_ctl.c:1077 msgid " failed\n" msgstr "falhou\n" -#: pg_ctl.c:906 +#: pg_ctl.c:910 #, c-format msgid "%s: could not wait for server because of misconfiguration\n" msgstr "%s: não pôde esperar pelo servidor por causa de configuração errada\n" -#: pg_ctl.c:912 +#: pg_ctl.c:916 msgid "server starting\n" msgstr "servidor está iniciando\n" -#: pg_ctl.c:927 pg_ctl.c:1013 pg_ctl.c:1103 pg_ctl.c:1143 +#: pg_ctl.c:931 pg_ctl.c:1017 pg_ctl.c:1107 pg_ctl.c:1147 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: arquivo do PID \"%s\" não existe\n" -#: pg_ctl.c:928 pg_ctl.c:1015 pg_ctl.c:1104 pg_ctl.c:1144 +#: pg_ctl.c:932 pg_ctl.c:1019 pg_ctl.c:1108 pg_ctl.c:1148 msgid "Is server running?\n" msgstr "O servidor está executando?\n" -#: pg_ctl.c:934 +#: pg_ctl.c:938 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "%s: não pode parar servidor; servidor monousuário está executando (PID: %ld)\n" -#: pg_ctl.c:942 pg_ctl.c:1037 +#: pg_ctl.c:946 pg_ctl.c:1041 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s: não pôde enviar sinal de parada (PID: %ld): %s\n" -#: pg_ctl.c:949 +#: pg_ctl.c:953 msgid "server shutting down\n" msgstr "servidor está desligando\n" -#: pg_ctl.c:964 pg_ctl.c:1052 +#: pg_ctl.c:968 pg_ctl.c:1056 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" @@ -287,199 +296,199 @@ msgstr "" "Desligamento não completará até que pg_stop_backup() seja chamado.\n" "\n" -#: pg_ctl.c:968 pg_ctl.c:1056 +#: pg_ctl.c:972 pg_ctl.c:1060 msgid "waiting for server to shut down..." msgstr "esperando o servidor desligar..." -#: pg_ctl.c:985 pg_ctl.c:1075 +#: pg_ctl.c:989 pg_ctl.c:1079 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: servidor não desligou\n" -#: pg_ctl.c:987 pg_ctl.c:1077 +#: pg_ctl.c:991 pg_ctl.c:1081 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" msgstr "DICA: A opção \"-m fast\" desconecta imediatamente sessões ao invés de esperar pela desconexão das sessões iniciadas.\n" -#: pg_ctl.c:993 pg_ctl.c:1083 +#: pg_ctl.c:997 pg_ctl.c:1087 msgid "server stopped\n" msgstr "servidor está parado\n" -#: pg_ctl.c:1016 pg_ctl.c:1089 +#: pg_ctl.c:1020 pg_ctl.c:1093 msgid "starting server anyway\n" msgstr "iniciando servidor mesmo assim\n" -#: pg_ctl.c:1025 +#: pg_ctl.c:1029 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "%s: não pode reiniciar servidor; servidor monousuário está executando (PID: %ld)\n" -#: pg_ctl.c:1028 pg_ctl.c:1113 +#: pg_ctl.c:1032 pg_ctl.c:1117 msgid "Please terminate the single-user server and try again.\n" msgstr "Por favor finalize o servidor monousuário e tente novamente.\n" -#: pg_ctl.c:1087 +#: pg_ctl.c:1091 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s: processo servidor antigo (PID: %ld) parece estar terminado\n" -#: pg_ctl.c:1110 +#: pg_ctl.c:1114 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "%s: não pode recarregar servidor; servidor monousuário está executando (PID: %ld)\n" -#: pg_ctl.c:1119 +#: pg_ctl.c:1123 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s: não pôde enviar sinal de recarga (PID: %ld): %s\n" -#: pg_ctl.c:1124 +#: pg_ctl.c:1128 msgid "server signaled\n" msgstr "servidor foi sinalizado\n" -#: pg_ctl.c:1150 +#: pg_ctl.c:1154 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "%s: não pode promover servidor; servidor monousuário está executando (PID: %ld)\n" -#: pg_ctl.c:1159 +#: pg_ctl.c:1163 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: não pode promover servidor; servidor não está no modo em espera\n" -#: pg_ctl.c:1174 +#: pg_ctl.c:1178 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s: não pôde criar arquivo para sinal de promoção \"%s\": %s\n" -#: pg_ctl.c:1180 +#: pg_ctl.c:1184 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s: não pôde escrever no arquivo para sinal de promoção \"%s\": %s\n" -#: pg_ctl.c:1188 +#: pg_ctl.c:1192 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s: não pôde enviar sinal de promoção (PID: %ld): %s\n" -#: pg_ctl.c:1191 +#: pg_ctl.c:1195 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s: não pôde remover arquivo para sinal de promoção \"%s\": %s\n" -#: pg_ctl.c:1196 +#: pg_ctl.c:1200 msgid "server promoting\n" msgstr "servidor está sendo promovido\n" -#: pg_ctl.c:1243 +#: pg_ctl.c:1247 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: servidor monousuário está executando (PID: %ld)\n" -#: pg_ctl.c:1256 +#: pg_ctl.c:1260 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: servidor está executando (PID: %ld)\n" -#: pg_ctl.c:1272 +#: pg_ctl.c:1276 #, c-format msgid "%s: no server running\n" msgstr "%s: nenhum servidor está executando\n" -#: pg_ctl.c:1290 +#: pg_ctl.c:1294 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: não pôde enviar sinal %d (PID: %ld): %s\n" -#: pg_ctl.c:1347 +#: pg_ctl.c:1351 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: não pôde encontrar executável\n" -#: pg_ctl.c:1357 +#: pg_ctl.c:1361 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: não pôde encontrar o programa executável do postgres\n" -#: pg_ctl.c:1437 pg_ctl.c:1469 +#: pg_ctl.c:1444 pg_ctl.c:1478 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: não pôde abrir gerenciador de serviço\n" -#: pg_ctl.c:1443 +#: pg_ctl.c:1450 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: serviço \"%s\" já está registrado\n" -#: pg_ctl.c:1454 +#: pg_ctl.c:1461 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" msgstr "%s: não pôde registrar serviço \"%s\": código de erro %lu\n" -#: pg_ctl.c:1475 +#: pg_ctl.c:1484 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: serviço \"%s\" não está registrado\n" -#: pg_ctl.c:1482 +#: pg_ctl.c:1491 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" msgstr "%s: não pôde abrir serviço \"%s\": código de erro %lu\n" -#: pg_ctl.c:1489 +#: pg_ctl.c:1500 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" msgstr "%s: não pôde remover registro do serviço \"%s\": código de erro %lu\n" -#: pg_ctl.c:1574 +#: pg_ctl.c:1587 msgid "Waiting for server startup...\n" msgstr "Esperando o servidor iniciar...\n" -#: pg_ctl.c:1577 +#: pg_ctl.c:1590 msgid "Timed out waiting for server startup\n" msgstr "Tempo de espera esgotado para início do servidor\n" -#: pg_ctl.c:1581 +#: pg_ctl.c:1594 msgid "Server started and accepting connections\n" msgstr "Servidor foi iniciado e está aceitando conexões\n" -#: pg_ctl.c:1625 +#: pg_ctl.c:1650 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" msgstr "%s: não pôde iniciar serviço \"%s\": código de erro %lu\n" -#: pg_ctl.c:1697 +#: pg_ctl.c:1724 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" msgstr "%s: AVISO: não pode criar informações restritas nessa plataforma\n" -#: pg_ctl.c:1706 +#: pg_ctl.c:1739 #, c-format msgid "%s: could not open process token: error code %lu\n" msgstr "%s: não pôde abrir informação sobre processo: código de erro %lu\n" -#: pg_ctl.c:1719 +#: pg_ctl.c:1753 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" msgstr "%s: não pôde alocar SIDs: código de erro %lu\n" -#: pg_ctl.c:1738 +#: pg_ctl.c:1773 #, c-format msgid "%s: could not create restricted token: error code %lu\n" msgstr "%s: não pôde criar informação restrita: código de erro %lu\n" -#: pg_ctl.c:1771 +#: pg_ctl.c:1807 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "%s: AVISO: não pôde localizar todas funções job object na API do sistema\n" -#: pg_ctl.c:1853 +#: pg_ctl.c:1890 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Tente \"%s --help\" para obter informações adicionais.\n" -#: pg_ctl.c:1861 +#: pg_ctl.c:1898 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -488,27 +497,27 @@ msgstr "" "%s é um utilitário para inicializar, iniciar, parar e controlar um servidor PostgreSQL.\n" "\n" -#: pg_ctl.c:1862 +#: pg_ctl.c:1899 #, c-format msgid "Usage:\n" msgstr "Uso:\n" -#: pg_ctl.c:1863 +#: pg_ctl.c:1900 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o \"OPTIONS\"]\n" msgstr " %s init[db] [-D DIRDADOS] [-s] [-o \"OPÇÕES\"]\n" -#: pg_ctl.c:1864 +#: pg_ctl.c:1901 #, c-format msgid " %s start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"]\n" msgstr " %s start [-w] [-t SEGS] [-D DIRDADOS] [-s] [-l ARQUIVO] [-o \"OPÇÕES\"]\n" -#: pg_ctl.c:1865 +#: pg_ctl.c:1902 #, c-format msgid " %s stop [-W] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" msgstr " %s stop [-W] [-t SEGS] [-D DIRDADOS] [-s] [-m MODO-DESLIGAMENTO]\n" -#: pg_ctl.c:1866 +#: pg_ctl.c:1903 #, c-format msgid "" " %s restart [-w] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" @@ -517,27 +526,27 @@ msgstr "" " %s restart [-w] [-t SEGS] [-D DIRDADOS] [-s] [-m MODO-DESLIGAMENTO]\n" " [-o \"OPÇÕES\"]\n" -#: pg_ctl.c:1868 +#: pg_ctl.c:1905 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D DIRDADOS] [-s]\n" -#: pg_ctl.c:1869 +#: pg_ctl.c:1906 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D DIRDADOS]\n" -#: pg_ctl.c:1870 +#: pg_ctl.c:1907 #, c-format msgid " %s promote [-D DATADIR] [-s]\n" msgstr " %s promote [-D DIRDADOS] [-s]\n" -#: pg_ctl.c:1871 +#: pg_ctl.c:1908 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill NOME_SINAL PID\n" -#: pg_ctl.c:1873 +#: pg_ctl.c:1910 #, c-format msgid "" " %s register [-N SERVICENAME] [-U USERNAME] [-P PASSWORD] [-D DATADIR]\n" @@ -546,12 +555,12 @@ msgstr "" " %s register [-N NOME_SERVIÇO] [-U USUÁRIO] [-P SENHA] [-D DIRDADOS]\n" " [-S TIPO-INÍCIO] [-w] [-t SEGS] [-o \"OPÇÕES\"]\n" -#: pg_ctl.c:1875 +#: pg_ctl.c:1912 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N NOME_SERVIÇO]\n" -#: pg_ctl.c:1878 +#: pg_ctl.c:1915 #, c-format msgid "" "\n" @@ -560,42 +569,47 @@ msgstr "" "\n" "Opções comuns:\n" -#: pg_ctl.c:1879 +#: pg_ctl.c:1916 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=DIRDADOS local da área de armazenamento dos bancos de dados\n" -#: pg_ctl.c:1880 +#: pg_ctl.c:1918 +#, c-format +msgid " -e SOURCE event source for logging when running as a service\n" +msgstr " -e ORIGEM origem de eventos para registro quando executar como um serviço\n" + +#: pg_ctl.c:1920 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr " -s, --silent mostra somente erros, nenhuma mensagem informativa\n" -#: pg_ctl.c:1881 +#: pg_ctl.c:1921 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr " -t, --timeout= SEGS segundos a esperar quando a opção -w for utilizada\n" -#: pg_ctl.c:1882 +#: pg_ctl.c:1922 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informação sobre a versão e termina\n" -#: pg_ctl.c:1883 +#: pg_ctl.c:1923 #, c-format msgid " -w wait until operation completes\n" msgstr " -w espera até que a operação seja completada\n" -#: pg_ctl.c:1884 +#: pg_ctl.c:1924 #, c-format msgid " -W do not wait until operation completes\n" msgstr " -W não espera até que a operação seja completada\n" -#: pg_ctl.c:1885 +#: pg_ctl.c:1925 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra essa ajuda e termina\n" -#: pg_ctl.c:1886 +#: pg_ctl.c:1926 #, c-format msgid "" "(The default is to wait for shutdown, but not for start or restart.)\n" @@ -604,12 +618,12 @@ msgstr "" "(O padrão é esperar o desligamento, mas não para início ou reinício).\n" "\n" -#: pg_ctl.c:1887 +#: pg_ctl.c:1927 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Se a opção -D for omitida, a variável de ambiente PGDATA é utilizada.\n" -#: pg_ctl.c:1889 +#: pg_ctl.c:1929 #, c-format msgid "" "\n" @@ -618,22 +632,22 @@ msgstr "" "\n" "Opções para início ou reinício:\n" -#: pg_ctl.c:1891 +#: pg_ctl.c:1931 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files permite o postgres produzir arquivos core\n" -#: pg_ctl.c:1893 +#: pg_ctl.c:1933 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files não é aplicável a esta plataforma\n" -#: pg_ctl.c:1895 +#: pg_ctl.c:1935 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr " -l, --log=ARQUIVO escreve (ou concatena) log do servidor para ARQUIVO\n" -#: pg_ctl.c:1896 +#: pg_ctl.c:1936 #, c-format msgid "" " -o OPTIONS command line options to pass to postgres\n" @@ -642,12 +656,12 @@ msgstr "" " -o OPÇÕES opções de linha de comando passadas para o postgres\n" " (executável do servidor PostgreSQL) ou initdb\n" -#: pg_ctl.c:1898 +#: pg_ctl.c:1938 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p CAMINHO-DO-POSTGRES normalmente não é necessário\n" -#: pg_ctl.c:1899 +#: pg_ctl.c:1939 #, c-format msgid "" "\n" @@ -656,12 +670,12 @@ msgstr "" "\n" "Opções para parada ou reinício:\n" -#: pg_ctl.c:1900 +#: pg_ctl.c:1940 #, c-format msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr " -m, --mode=MODO MODO pode ser \"smart\", \"fast\" ou \"immediate\"\n" -#: pg_ctl.c:1902 +#: pg_ctl.c:1942 #, c-format msgid "" "\n" @@ -670,22 +684,22 @@ msgstr "" "\n" "Modos de desligamento são:\n" -#: pg_ctl.c:1903 +#: pg_ctl.c:1943 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart termina depois que todos os clientes desconectarem\n" -#: pg_ctl.c:1904 +#: pg_ctl.c:1944 #, c-format msgid " fast quit directly, with proper shutdown\n" msgstr " fast termina diretamente, com desligamento apropriado\n" -#: pg_ctl.c:1905 +#: pg_ctl.c:1945 #, c-format msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" msgstr " immediate termina sem desligamento completo; conduzirá a uma recuperação durante o reinício\n" -#: pg_ctl.c:1907 +#: pg_ctl.c:1947 #, c-format msgid "" "\n" @@ -694,7 +708,7 @@ msgstr "" "\n" "Sinais permitidos para sinalização:\n" -#: pg_ctl.c:1911 +#: pg_ctl.c:1951 #, c-format msgid "" "\n" @@ -703,27 +717,27 @@ msgstr "" "\n" "Opções para registrar ou remover registro:\n" -#: pg_ctl.c:1912 +#: pg_ctl.c:1952 #, c-format msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N NOME_SERVIÇO nome do serviço no qual se registrou o servidor PostgreSQL\n" -#: pg_ctl.c:1913 +#: pg_ctl.c:1953 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr " -P SENHA senha da conta que registrou o servidor PostgreSQL\n" -#: pg_ctl.c:1914 +#: pg_ctl.c:1954 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr " -U USUÁRIO nome do usuário que registrou o servidor PostgreSQL\n" -#: pg_ctl.c:1915 +#: pg_ctl.c:1955 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S TIPO-INÍCIO tipo de início do serviço para registrar o servidor PostgreSQL\n" -#: pg_ctl.c:1917 +#: pg_ctl.c:1957 #, c-format msgid "" "\n" @@ -732,17 +746,17 @@ msgstr "" "\n" "Tipos de início são:\n" -#: pg_ctl.c:1918 +#: pg_ctl.c:1958 #, c-format msgid " auto start service automatically during system startup (default)\n" msgstr " auto inicia serviço automaticamente durante a inicialização do sistema (padrão)\n" -#: pg_ctl.c:1919 +#: pg_ctl.c:1959 #, c-format msgid " demand start service on demand\n" msgstr " demand inicia serviço sob demanda\n" -#: pg_ctl.c:1922 +#: pg_ctl.c:1962 #, c-format msgid "" "\n" @@ -751,27 +765,27 @@ msgstr "" "\n" "Relate erros a .\n" -#: pg_ctl.c:1947 +#: pg_ctl.c:1987 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: modo de desligamento \"%s\" desconhecido\n" -#: pg_ctl.c:1979 +#: pg_ctl.c:2019 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: nome de sinal \"%s\" desconhecido\n" -#: pg_ctl.c:1996 +#: pg_ctl.c:2036 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: tipo de início \"%s\" desconhecido\n" -#: pg_ctl.c:2051 +#: pg_ctl.c:2091 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: não pôde determinar diretório de dados utilizando comando \"%s\"\n" -#: pg_ctl.c:2123 +#: pg_ctl.c:2163 #, c-format msgid "" "%s: cannot be run as root\n" @@ -782,32 +796,32 @@ msgstr "" "Por favor entre (utilizando \"su\") como um usuário (sem privilégios) que\n" "será o dono do processo do servidor.\n" -#: pg_ctl.c:2190 +#: pg_ctl.c:2242 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: opção -S não é suportada nessa plataforma\n" -#: pg_ctl.c:2228 +#: pg_ctl.c:2280 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: muitos argumentos de linha de comando (primeiro é \"%s\")\n" -#: pg_ctl.c:2252 +#: pg_ctl.c:2304 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: faltando argumento para modo kill\n" -#: pg_ctl.c:2270 +#: pg_ctl.c:2322 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: modo de operação \"%s\" é desconhecido\n" -#: pg_ctl.c:2280 +#: pg_ctl.c:2332 #, c-format msgid "%s: no operation specified\n" msgstr "%s: nenhuma operação especificada\n" -#: pg_ctl.c:2301 +#: pg_ctl.c:2353 #, c-format msgid "%s: no database directory specified and environment variable PGDATA unset\n" msgstr "%s: nenhum diretório de banco de dados especificado e variável de ambiente PGDATA não foi definida\n" diff --git a/src/bin/pg_ctl/po/ru.po b/src/bin/pg_ctl/po/ru.po index 8fe16d7fb2865..3923415329a46 100644 --- a/src/bin/pg_ctl/po/ru.po +++ b/src/bin/pg_ctl/po/ru.po @@ -28,8 +28,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9 current\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-09-02 11:42+0000\n" -"PO-Revision-Date: 2014-09-03 22:42+0400\n" +"POT-Creation-Date: 2015-07-27 18:13+0000\n" +"PO-Revision-Date: 2015-07-27 22:28+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -78,14 +78,14 @@ msgstr "не удалось прочитать символическую ссы msgid "pclose failed: %s" msgstr "ошибка pclose: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 ../../port/path.c:598 ../../port/path.c:636 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../port/path.c:598 ../../port/path.c:636 #: ../../port/path.c:653 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" @@ -130,37 +130,37 @@ msgstr "дочерний процесс завершился с нераспоз msgid "could not get current working directory: %s\n" msgstr "не удалось определить текущий рабочий каталог: %s\n" -#: pg_ctl.c:259 +#: pg_ctl.c:257 #, c-format msgid "%s: directory \"%s\" does not exist\n" msgstr "%s: каталог \"%s\" не существует\n" -#: pg_ctl.c:262 +#: pg_ctl.c:260 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: нет доступа к каталогу \"%s\": %s\n" -#: pg_ctl.c:275 +#: pg_ctl.c:274 #, c-format msgid "%s: directory \"%s\" is not a database cluster directory\n" msgstr "%s: каталог \"%s\" не содержит структуры кластера баз данных\n" -#: pg_ctl.c:288 +#: pg_ctl.c:287 #, c-format msgid "%s: could not open PID file \"%s\": %s\n" msgstr "%s: не удалось открыть файл PID \"%s\": %s\n" -#: pg_ctl.c:297 +#: pg_ctl.c:296 #, c-format msgid "%s: the PID file \"%s\" is empty\n" msgstr "%s: файл PID \"%s\" пуст\n" -#: pg_ctl.c:300 +#: pg_ctl.c:299 #, c-format msgid "%s: invalid data in PID file \"%s\"\n" msgstr "%s: неверные данные в файле PID \"%s\"\n" -#: pg_ctl.c:531 +#: pg_ctl.c:530 #, c-format msgid "" "\n" @@ -169,7 +169,7 @@ msgstr "" "\n" "%s: параметр -w не поддерживается при запуске сервера до версии 9.1\n" -#: pg_ctl.c:601 +#: pg_ctl.c:600 #, c-format msgid "" "\n" @@ -178,7 +178,16 @@ msgstr "" "\n" "%s: в параметре -w нельзя указывать относительный путь к каталогу сокетов\n" -#: pg_ctl.c:656 +#: pg_ctl.c:653 +#, c-format +msgid "" +"\n" +"%s: could not stat file \"%s\": %s\n" +msgstr "" +"\n" +"%s: не удалось получить информацию о файле \"%s\": %s\n" + +#: pg_ctl.c:660 #, c-format msgid "" "\n" @@ -188,24 +197,24 @@ msgstr "" "%s: похоже, что с этим каталогом уже работает управляющий процесс " "postmaster\n" -#: pg_ctl.c:706 +#: pg_ctl.c:710 #, c-format msgid "%s: cannot set core file size limit; disallowed by hard limit\n" msgstr "" "%s: не удалось ограничить размер дампа памяти; запрещено жёстким " "ограничением\n" -#: pg_ctl.c:731 +#: pg_ctl.c:735 #, c-format msgid "%s: could not read file \"%s\"\n" msgstr "%s: не удалось прочитать файл \"%s\"\n" -#: pg_ctl.c:736 +#: pg_ctl.c:740 #, c-format msgid "%s: option file \"%s\" must have exactly one line\n" msgstr "%s: в файле параметров \"%s\" должна быть ровно одна строка\n" -#: pg_ctl.c:787 +#: pg_ctl.c:791 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -216,7 +225,7 @@ msgstr "" "в каталоге \"%s\".\n" "Проверьте вашу установку PostgreSQL.\n" -#: pg_ctl.c:793 +#: pg_ctl.c:797 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -227,44 +236,44 @@ msgstr "" "но её версия отличается от версии %s.\n" "Проверьте вашу установку PostgreSQL.\n" -#: pg_ctl.c:826 +#: pg_ctl.c:830 #, c-format msgid "%s: database system initialization failed\n" msgstr "%s: сбой при инициализации системы баз данных\n" -#: pg_ctl.c:841 +#: pg_ctl.c:845 #, c-format msgid "%s: another server might be running; trying to start server anyway\n" msgstr "" "%s: возможно, уже работает другой сервер; всё же пробуем запустить этот " "сервер\n" -#: pg_ctl.c:878 +#: pg_ctl.c:882 #, c-format msgid "%s: could not start server: exit code was %d\n" msgstr "%s: не удалось запустить сервер, код возврата: %d\n" -#: pg_ctl.c:885 +#: pg_ctl.c:889 msgid "waiting for server to start..." msgstr "ожидание запуска сервера..." -#: pg_ctl.c:890 pg_ctl.c:991 pg_ctl.c:1082 +#: pg_ctl.c:894 pg_ctl.c:995 pg_ctl.c:1086 msgid " done\n" msgstr " готово\n" -#: pg_ctl.c:891 +#: pg_ctl.c:895 msgid "server started\n" msgstr "сервер запущен\n" -#: pg_ctl.c:894 pg_ctl.c:898 +#: pg_ctl.c:898 pg_ctl.c:902 msgid " stopped waiting\n" msgstr " прекращение ожидания\n" -#: pg_ctl.c:895 +#: pg_ctl.c:899 msgid "server is still starting up\n" msgstr "сервер всё ещё запускается\n" -#: pg_ctl.c:899 +#: pg_ctl.c:903 #, c-format msgid "" "%s: could not start server\n" @@ -273,63 +282,63 @@ msgstr "" "%s: не удалось запустить сервер\n" "Изучите протокол выполнения.\n" -#: pg_ctl.c:905 pg_ctl.c:983 pg_ctl.c:1073 +#: pg_ctl.c:909 pg_ctl.c:987 pg_ctl.c:1077 msgid " failed\n" msgstr " ошибка\n" -#: pg_ctl.c:906 +#: pg_ctl.c:910 #, c-format msgid "%s: could not wait for server because of misconfiguration\n" msgstr "%s: не удалось дождаться сервера вследствие ошибки конфигурации\n" -#: pg_ctl.c:912 +#: pg_ctl.c:916 msgid "server starting\n" msgstr "сервер запускается\n" -#: pg_ctl.c:927 pg_ctl.c:1013 pg_ctl.c:1103 pg_ctl.c:1143 +#: pg_ctl.c:931 pg_ctl.c:1017 pg_ctl.c:1107 pg_ctl.c:1147 #, c-format msgid "%s: PID file \"%s\" does not exist\n" msgstr "%s: файл PID \"%s\" не существует\n" -#: pg_ctl.c:928 pg_ctl.c:1015 pg_ctl.c:1104 pg_ctl.c:1144 +#: pg_ctl.c:932 pg_ctl.c:1019 pg_ctl.c:1108 pg_ctl.c:1148 msgid "Is server running?\n" msgstr "Запущен ли сервер?\n" -#: pg_ctl.c:934 +#: pg_ctl.c:938 #, c-format msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" msgstr "" "%s: остановить сервер с PID %ld нельзя - он запущен в монопольном режиме\n" -#: pg_ctl.c:942 pg_ctl.c:1037 +#: pg_ctl.c:946 pg_ctl.c:1041 #, c-format msgid "%s: could not send stop signal (PID: %ld): %s\n" msgstr "%s: не удалось отправить сигнал остановки (PID: %ld): %s\n" -#: pg_ctl.c:949 +#: pg_ctl.c:953 msgid "server shutting down\n" msgstr "сервер останавливается\n" -#: pg_ctl.c:964 pg_ctl.c:1052 +#: pg_ctl.c:968 pg_ctl.c:1056 msgid "" "WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n" "\n" msgstr "" -"ВНИМАНИЕ: активен режим копирования \"на ходу\"\n" +"ПРЕДУПРЕЖДЕНИЕ: активен режим копирования \"на ходу\"\n" "Выключение произойдёт только при вызове pg_stop_backup().\n" "\n" -#: pg_ctl.c:968 pg_ctl.c:1056 +#: pg_ctl.c:972 pg_ctl.c:1060 msgid "waiting for server to shut down..." msgstr "ожидание завершения работы сервера..." -#: pg_ctl.c:985 pg_ctl.c:1075 +#: pg_ctl.c:989 pg_ctl.c:1079 #, c-format msgid "%s: server does not shut down\n" msgstr "%s: сервер не останавливается\n" -#: pg_ctl.c:987 pg_ctl.c:1077 +#: pg_ctl.c:991 pg_ctl.c:1081 msgid "" "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" "waiting for session-initiated disconnection.\n" @@ -337,189 +346,189 @@ msgstr "" "ПОДСКАЗКА: Параметр \"-m fast\" может сбросить сеансы принудительно,\n" "не дожидаясь, пока они завершатся сами.\n" -#: pg_ctl.c:993 pg_ctl.c:1083 +#: pg_ctl.c:997 pg_ctl.c:1087 msgid "server stopped\n" msgstr "сервер остановлен\n" -#: pg_ctl.c:1016 pg_ctl.c:1089 +#: pg_ctl.c:1020 pg_ctl.c:1093 msgid "starting server anyway\n" msgstr "сервер запускается, несмотря на это\n" -#: pg_ctl.c:1025 +#: pg_ctl.c:1029 #, c-format msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" msgstr "" "%s: перезапустить сервер с PID %ld нельзя - он запущен в монопольном режиме\n" -#: pg_ctl.c:1028 pg_ctl.c:1113 +#: pg_ctl.c:1032 pg_ctl.c:1117 msgid "Please terminate the single-user server and try again.\n" msgstr "Пожалуйста, остановите его и повторите попытку.\n" -#: pg_ctl.c:1087 +#: pg_ctl.c:1091 #, c-format msgid "%s: old server process (PID: %ld) seems to be gone\n" msgstr "%s: похоже, что старый серверный процесс (PID: %ld) исчез\n" -#: pg_ctl.c:1110 +#: pg_ctl.c:1114 #, c-format msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" msgstr "" "%s: перезагрузить сервер с PID %ld нельзя - он запущен в монопольном режиме\n" -#: pg_ctl.c:1119 +#: pg_ctl.c:1123 #, c-format msgid "%s: could not send reload signal (PID: %ld): %s\n" msgstr "%s: не удалось отправить сигнал перезагрузки (PID: %ld): %s\n" -#: pg_ctl.c:1124 +#: pg_ctl.c:1128 msgid "server signaled\n" msgstr "сигнал отправлен серверу\n" -#: pg_ctl.c:1150 +#: pg_ctl.c:1154 #, c-format msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" msgstr "" "%s: повысить сервер с PID %ld нельзя - он выполняется в монопольном режиме\n" -#: pg_ctl.c:1159 +#: pg_ctl.c:1163 #, c-format msgid "%s: cannot promote server; server is not in standby mode\n" msgstr "%s: повысить сервер нельзя - он работает не в режиме резерва\n" -#: pg_ctl.c:1174 +#: pg_ctl.c:1178 #, c-format msgid "%s: could not create promote signal file \"%s\": %s\n" msgstr "%s: не удалось создать файл \"%s\" с сигналом к повышению: %s\n" -#: pg_ctl.c:1180 +#: pg_ctl.c:1184 #, c-format msgid "%s: could not write promote signal file \"%s\": %s\n" msgstr "%s: не удалось записать файл \"%s\" с сигналом к повышению: %s\n" -#: pg_ctl.c:1188 +#: pg_ctl.c:1192 #, c-format msgid "%s: could not send promote signal (PID: %ld): %s\n" msgstr "%s: не удалось отправить сигнал к повышению (PID: %ld): %s\n" -#: pg_ctl.c:1191 +#: pg_ctl.c:1195 #, c-format msgid "%s: could not remove promote signal file \"%s\": %s\n" msgstr "%s: ошибка при удалении файла \"%s\" с сигналом к повышению: %s\n" -#: pg_ctl.c:1196 +#: pg_ctl.c:1200 msgid "server promoting\n" msgstr "сервер повышается\n" -#: pg_ctl.c:1243 +#: pg_ctl.c:1247 #, c-format msgid "%s: single-user server is running (PID: %ld)\n" msgstr "%s: сервер работает в монопольном режиме (PID: %ld)\n" -#: pg_ctl.c:1256 +#: pg_ctl.c:1260 #, c-format msgid "%s: server is running (PID: %ld)\n" msgstr "%s: сервер работает (PID: %ld)\n" -#: pg_ctl.c:1272 +#: pg_ctl.c:1276 #, c-format msgid "%s: no server running\n" msgstr "%s: сервер не работает\n" -#: pg_ctl.c:1290 +#: pg_ctl.c:1294 #, c-format msgid "%s: could not send signal %d (PID: %ld): %s\n" msgstr "%s: не удалось отправить сигнал %d (PID: %ld): %s\n" -#: pg_ctl.c:1347 +#: pg_ctl.c:1351 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: не удалось найти свой исполняемый файл\n" -#: pg_ctl.c:1357 +#: pg_ctl.c:1361 #, c-format msgid "%s: could not find postgres program executable\n" msgstr "%s: не удалось найти исполняемый файл postgres\n" -#: pg_ctl.c:1437 pg_ctl.c:1469 +#: pg_ctl.c:1444 pg_ctl.c:1478 #, c-format msgid "%s: could not open service manager\n" msgstr "%s: не удалось открыть менеджер служб\n" -#: pg_ctl.c:1443 +#: pg_ctl.c:1450 #, c-format msgid "%s: service \"%s\" already registered\n" msgstr "%s: служба \"%s\" уже зарегистрирована\n" -#: pg_ctl.c:1454 +#: pg_ctl.c:1461 #, c-format msgid "%s: could not register service \"%s\": error code %lu\n" -msgstr "%s: не удалось зарегистрировать службу \"%s\": код ошибки %lu\n" +msgstr "%s: не удалось зарегистрировать службу \"%s\" (код ошибки: %lu)\n" -#: pg_ctl.c:1475 +#: pg_ctl.c:1484 #, c-format msgid "%s: service \"%s\" not registered\n" msgstr "%s: служба \"%s\" не зарегистрирована\n" -#: pg_ctl.c:1482 +#: pg_ctl.c:1491 #, c-format msgid "%s: could not open service \"%s\": error code %lu\n" -msgstr "%s: не удалось открыть службу \"%s\": код ошибки %lu\n" +msgstr "%s: не удалось открыть службу \"%s\" (код ошибки: %lu)\n" -#: pg_ctl.c:1489 +#: pg_ctl.c:1500 #, c-format msgid "%s: could not unregister service \"%s\": error code %lu\n" -msgstr "%s: ошибка при удалении службы \"%s\": код ошибки %lu\n" +msgstr "%s: ошибка при удалении службы \"%s\" (код ошибки: %lu)\n" -#: pg_ctl.c:1574 +#: pg_ctl.c:1587 msgid "Waiting for server startup...\n" msgstr "Ожидание запуска сервера...\n" -#: pg_ctl.c:1577 +#: pg_ctl.c:1590 msgid "Timed out waiting for server startup\n" msgstr "Превышено время ожидания запуска сервера\n" -#: pg_ctl.c:1581 +#: pg_ctl.c:1594 msgid "Server started and accepting connections\n" msgstr "Сервер запущен и принимает подключения\n" -#: pg_ctl.c:1625 +#: pg_ctl.c:1650 #, c-format msgid "%s: could not start service \"%s\": error code %lu\n" -msgstr "%s: не удалось запустить службу \"%s\": код ошибки %lu\n" +msgstr "%s: не удалось запустить службу \"%s\" (код ошибки: %lu)\n" -#: pg_ctl.c:1697 +#: pg_ctl.c:1724 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" msgstr "%s: ПРЕДУПРЕЖДЕНИЕ: в этой ОС нельзя создавать ограниченные маркеры\n" -#: pg_ctl.c:1706 +#: pg_ctl.c:1739 #, c-format msgid "%s: could not open process token: error code %lu\n" -msgstr "%s: не удалось открыть маркер процесса: код ошибки %lu\n" +msgstr "%s: не удалось открыть маркер процесса (код ошибки: %lu)\n" -#: pg_ctl.c:1719 +#: pg_ctl.c:1753 #, c-format msgid "%s: could not allocate SIDs: error code %lu\n" -msgstr "%s: не удалось подготовить структуры SID: код ошибки: %lu\n" +msgstr "%s: не удалось подготовить структуры SID (код ошибки: %lu)\n" -#: pg_ctl.c:1738 +#: pg_ctl.c:1773 #, c-format msgid "%s: could not create restricted token: error code %lu\n" -msgstr "%s: не удалось создать ограниченный маркер: код ошибки: %lu\n" +msgstr "%s: не удалось создать ограниченный маркер (код ошибки: %lu)\n" -#: pg_ctl.c:1771 +#: pg_ctl.c:1807 #, c-format msgid "%s: WARNING: could not locate all job object functions in system API\n" msgstr "" "%s: ПРЕДУПРЕЖДЕНИЕ: не удалось найти все функции для работы с задачами в " "системном API\n" -#: pg_ctl.c:1853 +#: pg_ctl.c:1890 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_ctl.c:1861 +#: pg_ctl.c:1898 #, c-format msgid "" "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n" @@ -529,18 +538,18 @@ msgstr "" "PostgreSQL.\n" "\n" -#: pg_ctl.c:1862 +#: pg_ctl.c:1899 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_ctl.c:1863 +#: pg_ctl.c:1900 #, c-format msgid " %s init[db] [-D DATADIR] [-s] [-o \"OPTIONS\"]\n" msgstr "" " %s init[db] [-D КАТАЛОГ-ДАННЫХ] [-s] [-o \"ПАРАМЕТРЫ\"]\n" -#: pg_ctl.c:1864 +#: pg_ctl.c:1901 #, c-format msgid "" " %s start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS" @@ -549,13 +558,13 @@ msgstr "" " %s start [-w] [-t СЕК] [-D КАТАЛОГ-ДАННЫХ] [-s] [-l ИМЯ-ФАЙЛА]\n" " [-o \"ПАРАМЕТРЫ\"]\n" -#: pg_ctl.c:1865 +#: pg_ctl.c:1902 #, c-format msgid " %s stop [-W] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" msgstr "" " %s stop [-W] [-t СЕК] [-D КАТАЛОГ-ДАННЫХ] [-s] [-m РЕЖИМ-ОСТАНОВКИ]\n" -#: pg_ctl.c:1866 +#: pg_ctl.c:1903 #, c-format msgid "" " %s restart [-w] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n" @@ -564,27 +573,27 @@ msgstr "" " %s restart [-w] [-t СЕК] [-D КАТАЛОГ-ДАННЫХ] [-s] [-m РЕЖИМ-ОСТАНОВКИ]\n" " [-o \"ПАРАМЕТРЫ\"]\n" -#: pg_ctl.c:1868 +#: pg_ctl.c:1905 #, c-format msgid " %s reload [-D DATADIR] [-s]\n" msgstr " %s reload [-D КАТАЛОГ-ДАННЫХ] [-s]\n" -#: pg_ctl.c:1869 +#: pg_ctl.c:1906 #, c-format msgid " %s status [-D DATADIR]\n" msgstr " %s status [-D КАТАЛОГ-ДАННЫХ]\n" -#: pg_ctl.c:1870 +#: pg_ctl.c:1907 #, c-format msgid " %s promote [-D DATADIR] [-s]\n" msgstr " %s promote [-D КАТАЛОГ-ДАННЫХ] [-s]\n" -#: pg_ctl.c:1871 +#: pg_ctl.c:1908 #, c-format msgid " %s kill SIGNALNAME PID\n" msgstr " %s kill СИГНАЛ PID\n" -#: pg_ctl.c:1873 +#: pg_ctl.c:1910 #, c-format msgid "" " %s register [-N SERVICENAME] [-U USERNAME] [-P PASSWORD] [-D DATADIR]\n" @@ -594,12 +603,12 @@ msgstr "" " [-D КАТАЛОГ-ДАННЫХ] [-S ТИП-ЗАПУСКА] [-w] [-t СЕК]\n" " [-o \"ПАРАМЕТРЫ\"]\n" -#: pg_ctl.c:1875 +#: pg_ctl.c:1912 #, c-format msgid " %s unregister [-N SERVICENAME]\n" msgstr " %s unregister [-N ИМЯ-СЛУЖБЫ]\n" -#: pg_ctl.c:1878 +#: pg_ctl.c:1915 #, c-format msgid "" "\n" @@ -608,45 +617,55 @@ msgstr "" "\n" "Общие параметры:\n" -#: pg_ctl.c:1879 +#: pg_ctl.c:1916 #, c-format msgid " -D, --pgdata=DATADIR location of the database storage area\n" msgstr " -D, --pgdata=КАТАЛОГ расположение хранилища баз данных\n" -#: pg_ctl.c:1880 +#: pg_ctl.c:1917 #, c-format msgid " -s, --silent only print errors, no informational messages\n" msgstr "" " -s, --silent выводить только ошибки, без информационных " "сообщений\n" -#: pg_ctl.c:1881 +#: pg_ctl.c:1919 +#, c-format +msgid "" +" -e SOURCE event source to use for logging when running\n" +" as a service\n" +msgstr "" +" -e ИСТОЧНИК источник событий, устанавливаемый при записи в " +"журнал,\n" +" когда сервер работает в виде службы\n" + +#: pg_ctl.c:1922 #, c-format msgid " -t, --timeout=SECS seconds to wait when using -w option\n" msgstr "" " -t, --timeout=СЕК время ожидания при использовании параметра -w\n" -#: pg_ctl.c:1882 +#: pg_ctl.c:1923 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_ctl.c:1883 +#: pg_ctl.c:1924 #, c-format msgid " -w wait until operation completes\n" msgstr " -w ждать завершения операции\n" -#: pg_ctl.c:1884 +#: pg_ctl.c:1925 #, c-format msgid " -W do not wait until operation completes\n" msgstr " -W не ждать завершения операции\n" -#: pg_ctl.c:1885 +#: pg_ctl.c:1926 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_ctl.c:1886 +#: pg_ctl.c:1927 #, c-format msgid "" "(The default is to wait for shutdown, but not for start or restart.)\n" @@ -655,12 +674,12 @@ msgstr "" "(По умолчанию ожидание имеет место при остановке, но не при (пере)запуске.)\n" "\n" -#: pg_ctl.c:1887 +#: pg_ctl.c:1928 #, c-format msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" msgstr "Если параметр -D опущен, используется переменная окружения PGDATA.\n" -#: pg_ctl.c:1889 +#: pg_ctl.c:1930 #, c-format msgid "" "\n" @@ -669,24 +688,24 @@ msgstr "" "\n" "Параметры запуска и перезапуска:\n" -#: pg_ctl.c:1891 +#: pg_ctl.c:1932 #, c-format msgid " -c, --core-files allow postgres to produce core files\n" msgstr " -c, --core-files указать postgres создавать дампы памяти\n" -#: pg_ctl.c:1893 +#: pg_ctl.c:1934 #, c-format msgid " -c, --core-files not applicable on this platform\n" msgstr " -c, --core-files неприменимо на этой платформе\n" -#: pg_ctl.c:1895 +#: pg_ctl.c:1936 #, c-format msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" msgstr "" " -l, --log=ФАЙЛ записывать (или добавлять) протокол сервера в " "ФАЙЛ.\n" -#: pg_ctl.c:1896 +#: pg_ctl.c:1937 #, c-format msgid "" " -o OPTIONS command line options to pass to postgres\n" @@ -695,12 +714,12 @@ msgstr "" " -o ПАРАМЕТРЫ параметры командной строки для postgres\n" " (исполняемого файла сервера PostgreSQL) или initdb\n" -#: pg_ctl.c:1898 +#: pg_ctl.c:1939 #, c-format msgid " -p PATH-TO-POSTGRES normally not necessary\n" msgstr " -p ПУТЬ-К-POSTGRES обычно не требуется\n" -#: pg_ctl.c:1899 +#: pg_ctl.c:1940 #, c-format msgid "" "\n" @@ -709,14 +728,14 @@ msgstr "" "\n" "Параметры остановки и перезапуска:\n" -#: pg_ctl.c:1900 +#: pg_ctl.c:1941 #, c-format msgid "" " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" msgstr "" " -m, --mode=РЕЖИМ может быть \"smart\", \"fast\" или \"immediate\"\n" -#: pg_ctl.c:1902 +#: pg_ctl.c:1943 #, c-format msgid "" "\n" @@ -725,17 +744,17 @@ msgstr "" "\n" "Режимы остановки:\n" -#: pg_ctl.c:1903 +#: pg_ctl.c:1944 #, c-format msgid " smart quit after all clients have disconnected\n" msgstr " smart закончить работу после отключения всех клиентов\n" -#: pg_ctl.c:1904 +#: pg_ctl.c:1945 #, c-format msgid " fast quit directly, with proper shutdown\n" msgstr " fast закончить сразу, в штатном режиме\n" -#: pg_ctl.c:1905 +#: pg_ctl.c:1946 #, c-format msgid "" " immediate quit without complete shutdown; will lead to recovery on " @@ -744,7 +763,7 @@ msgstr "" " immediate закончить немедленно, в экстренном режиме; влечёт за собой\n" " восстановление при перезапуске\n" -#: pg_ctl.c:1907 +#: pg_ctl.c:1948 #, c-format msgid "" "\n" @@ -753,7 +772,7 @@ msgstr "" "\n" "Разрешённые сигналы для команды kill:\n" -#: pg_ctl.c:1911 +#: pg_ctl.c:1952 #, c-format msgid "" "\n" @@ -762,30 +781,30 @@ msgstr "" "\n" "Параметры для регистрации и удаления:\n" -#: pg_ctl.c:1912 +#: pg_ctl.c:1953 #, c-format msgid "" " -N SERVICENAME service name with which to register PostgreSQL server\n" msgstr " -N ИМЯ-СЛУЖБЫ имя службы для регистрации сервера PostgreSQL\n" -#: pg_ctl.c:1913 +#: pg_ctl.c:1954 #, c-format msgid " -P PASSWORD password of account to register PostgreSQL server\n" msgstr "" " -P ПАРОЛЬ пароль учётной записи для регистрации сервера PostgreSQL\n" -#: pg_ctl.c:1914 +#: pg_ctl.c:1955 #, c-format msgid " -U USERNAME user name of account to register PostgreSQL server\n" msgstr "" " -U ПОЛЬЗОВАТЕЛЬ имя пользователя для регистрации сервера PostgreSQL\n" -#: pg_ctl.c:1915 +#: pg_ctl.c:1956 #, c-format msgid " -S START-TYPE service start type to register PostgreSQL server\n" msgstr " -S ТИП-ЗАПУСКА тип запуска службы сервера PostgreSQL\n" -#: pg_ctl.c:1917 +#: pg_ctl.c:1958 #, c-format msgid "" "\n" @@ -794,7 +813,7 @@ msgstr "" "\n" "Типы запуска:\n" -#: pg_ctl.c:1918 +#: pg_ctl.c:1959 #, c-format msgid "" " auto start service automatically during system startup (default)\n" @@ -802,12 +821,12 @@ msgstr "" " auto запускать службу автоматически при старте системы (по " "умолчанию)\n" -#: pg_ctl.c:1919 +#: pg_ctl.c:1960 #, c-format msgid " demand start service on demand\n" msgstr " demand запускать службу по требованию\n" -#: pg_ctl.c:1922 +#: pg_ctl.c:1963 #, c-format msgid "" "\n" @@ -816,27 +835,27 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу .\n" -#: pg_ctl.c:1947 +#: pg_ctl.c:1988 #, c-format msgid "%s: unrecognized shutdown mode \"%s\"\n" msgstr "%s: неизвестный режим остановки \"%s\"\n" -#: pg_ctl.c:1979 +#: pg_ctl.c:2020 #, c-format msgid "%s: unrecognized signal name \"%s\"\n" msgstr "%s: нераспознанное имя сигнала \"%s\"\n" -#: pg_ctl.c:1996 +#: pg_ctl.c:2037 #, c-format msgid "%s: unrecognized start type \"%s\"\n" msgstr "%s: нераспознанный тип запуска \"%s\"\n" -#: pg_ctl.c:2051 +#: pg_ctl.c:2092 #, c-format msgid "%s: could not determine the data directory using command \"%s\"\n" msgstr "%s: не удалось определить каталог данных с помощью команды \"%s\"\n" -#: pg_ctl.c:2123 +#: pg_ctl.c:2164 #, c-format msgid "" "%s: cannot be run as root\n" @@ -847,32 +866,32 @@ msgstr "" "Пожалуйста, переключитесь на обычного пользователя (например,\n" "используя \"su\"), который будет запускать серверный процесс.\n" -#: pg_ctl.c:2190 +#: pg_ctl.c:2243 #, c-format msgid "%s: -S option not supported on this platform\n" msgstr "%s: параметр -S не поддерживается в этой ОС\n" -#: pg_ctl.c:2228 +#: pg_ctl.c:2281 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: слишком много аргументов командной строки (первый: \"%s\")\n" -#: pg_ctl.c:2252 +#: pg_ctl.c:2305 #, c-format msgid "%s: missing arguments for kill mode\n" msgstr "%s: отсутствуют аргументы для режима kill\n" -#: pg_ctl.c:2270 +#: pg_ctl.c:2323 #, c-format msgid "%s: unrecognized operation mode \"%s\"\n" msgstr "%s: нераспознанный режим работы \"%s\"\n" -#: pg_ctl.c:2280 +#: pg_ctl.c:2333 #, c-format msgid "%s: no operation specified\n" msgstr "%s: команда не указана\n" -#: pg_ctl.c:2301 +#: pg_ctl.c:2354 #, c-format msgid "" "%s: no database directory specified and environment variable PGDATA unset\n" diff --git a/src/bin/pg_ctl/t/001_start_stop.pl b/src/bin/pg_ctl/t/001_start_stop.pl index 6c9ec5c717af6..e7ae62beea92a 100644 --- a/src/bin/pg_ctl/t/001_start_stop.pl +++ b/src/bin/pg_ctl/t/001_start_stop.pl @@ -13,7 +13,8 @@ command_exit_is([ 'pg_ctl', 'start', '-D', "$tempdir/nonexistent" ], 1, 'pg_ctl start with nonexistent directory'); -command_ok([ 'pg_ctl', 'initdb', '-D', "$tempdir/data" ], 'pg_ctl initdb'); +command_ok([ 'pg_ctl', 'initdb', '-D', "$tempdir/data", '-o', '-N' ], + 'pg_ctl initdb'); command_ok( [ "$ENV{top_builddir}/src/test/regress/pg_regress", '--config-auth', "$tempdir/data" ], @@ -21,11 +22,17 @@ open CONF, ">>$tempdir/data/postgresql.conf"; print CONF "listen_addresses = ''\n"; print CONF "unix_socket_directories = '$tempdir_short'\n"; +print CONF "fsync = off\n"; close CONF; command_ok([ 'pg_ctl', 'start', '-D', "$tempdir/data", '-w' ], 'pg_ctl start -w'); -command_ok([ 'pg_ctl', 'start', '-D', "$tempdir/data", '-w' ], - 'second pg_ctl start succeeds'); +# sleep here is because Windows builds can't check postmaster.pid exactly, +# so they may mistake a pre-existing postmaster.pid for one created by the +# postmaster they start. Waiting more than the 2 seconds slop time allowed +# by test_postmaster_connection prevents that mistake. +sleep 3 if ($windows_os); +command_fails([ 'pg_ctl', 'start', '-D', "$tempdir/data", '-w' ], + 'second pg_ctl start -w fails'); command_ok([ 'pg_ctl', 'stop', '-D', "$tempdir/data", '-w', '-m', 'fast' ], 'pg_ctl stop -w'); command_fails([ 'pg_ctl', 'stop', '-D', "$tempdir/data", '-w', '-m', 'fast' ], @@ -36,4 +43,4 @@ command_ok([ 'pg_ctl', 'restart', '-D', "$tempdir/data", '-w', '-m', 'fast' ], 'pg_ctl restart with server running'); -system_or_bail 'pg_ctl', '-s', 'stop', '-D', "$tempdir/data", '-m', 'fast'; +system_or_bail 'pg_ctl', 'stop', '-D', "$tempdir/data", '-m', 'fast'; diff --git a/src/bin/pg_ctl/t/002_status.pl b/src/bin/pg_ctl/t/002_status.pl index 055885495ab14..ec0a2a786e09c 100644 --- a/src/bin/pg_ctl/t/002_status.pl +++ b/src/bin/pg_ctl/t/002_status.pl @@ -18,9 +18,9 @@ command_exit_is([ 'pg_ctl', 'status', '-D', "$tempdir/data" ], 3, 'pg_ctl status with server not running'); -system_or_bail 'pg_ctl', '-s', '-l', "$tempdir/logfile", '-D', +system_or_bail 'pg_ctl', '-l', "$tempdir/logfile", '-D', "$tempdir/data", '-w', 'start'; command_exit_is([ 'pg_ctl', 'status', '-D', "$tempdir/data" ], 0, 'pg_ctl status with server running'); -system_or_bail 'pg_ctl', '-s', 'stop', '-D', "$tempdir/data", '-m', 'fast'; +system_or_bail 'pg_ctl', 'stop', '-D', "$tempdir/data", '-m', 'fast'; diff --git a/src/bin/pg_dump/compress_io.c b/src/bin/pg_dump/compress_io.c index 912fc2f695a15..6e1469bb75fce 100644 --- a/src/bin/pg_dump/compress_io.c +++ b/src/bin/pg_dump/compress_io.c @@ -547,11 +547,21 @@ cfopen(const char *path, const char *mode, int compression) if (compression != 0) { #ifdef HAVE_LIBZ - char mode_compression[32]; + if (compression != Z_DEFAULT_COMPRESSION) + { + /* user has specified a compression level, so tell zlib to use it */ + char mode_compression[32]; + + snprintf(mode_compression, sizeof(mode_compression), "%s%d", + mode, compression); + fp->compressedfp = gzopen(path, mode_compression); + } + else + { + /* don't specify a level, just use the zlib default */ + fp->compressedfp = gzopen(path, mode); + } - snprintf(mode_compression, sizeof(mode_compression), "%s%d", - mode, compression); - fp->compressedfp = gzopen(path, mode_compression); fp->uncompressedfp = NULL; if (fp->compressedfp == NULL) { diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index f9b564eee41a0..d16dbbd5a895a 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -533,7 +533,7 @@ RestoreArchive(Archive *AHX) * search for hardcoded "DROP CONSTRAINT" instead. */ if (strcmp(te->desc, "DEFAULT") == 0) - appendPQExpBuffer(ftStmt, "%s", dropStmt); + appendPQExpBufferStr(ftStmt, dropStmt); else { if (strcmp(te->desc, "CONSTRAINT") == 0 || @@ -624,7 +624,7 @@ RestoreArchive(Archive *AHX) { /* Show namespace if available */ if (te->namespace) - ahlog(AH, 1, "setting owner and privileges for %s \"%s\".\"%s\"\n", + ahlog(AH, 1, "setting owner and privileges for %s \"%s.%s\"\n", te->desc, te->namespace, te->tag); else ahlog(AH, 1, "setting owner and privileges for %s \"%s\"\n", @@ -704,7 +704,7 @@ restore_toc_entry(ArchiveHandle *AH, TocEntry *te, { /* Show namespace if available */ if (te->namespace) - ahlog(AH, 1, "creating %s \"%s\".\"%s\"\n", + ahlog(AH, 1, "creating %s \"%s.%s\"\n", te->desc, te->namespace, te->tag); else ahlog(AH, 1, "creating %s \"%s\"\n", te->desc, te->tag); @@ -800,7 +800,7 @@ restore_toc_entry(ArchiveHandle *AH, TocEntry *te, _becomeOwner(AH, te); _selectOutputSchema(AH, te->namespace); - ahlog(AH, 1, "processing data for table \"%s\".\"%s\"\n", + ahlog(AH, 1, "processing data for table \"%s.%s\"\n", te->namespace, te->tag); /* diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c index 309b4b53dbc05..532eacc066edf 100644 --- a/src/bin/pg_dump/pg_backup_tar.c +++ b/src/bin/pg_dump/pg_backup_tar.c @@ -208,13 +208,6 @@ InitArchiveFmt_Tar(ArchiveHandle *AH) ctx->hasSeek = checkSeek(ctx->tarFH); - if (AH->compression < 0 || AH->compression > 9) - AH->compression = Z_DEFAULT_COMPRESSION; - - /* Don't compress into tar files unless asked to do so */ - if (AH->compression == Z_DEFAULT_COMPRESSION) - AH->compression = 0; - /* * We don't support compression because reading the files back is not * possible since gzdopen uses buffered IO which totally screws file @@ -386,8 +379,18 @@ tarOpen(ArchiveHandle *AH, const char *filename, char mode) } else { + int old_umask; + tm = pg_malloc0(sizeof(TAR_MEMBER)); + /* + * POSIX does not require, but permits, tmpfile() to restrict file + * permissions. Given an OS crash after we write data, the filesystem + * might retain the data but forget tmpfile()'s unlink(). If so, the + * file mode protects confidentiality of the data written. + */ + old_umask = umask(S_IRWXG | S_IRWXO); + #ifndef WIN32 tm->tmpFH = tmpfile(); #else @@ -422,6 +425,8 @@ tarOpen(ArchiveHandle *AH, const char *filename, char mode) if (tm->tmpFH == NULL) exit_horribly(modulename, "could not generate temporary file name: %s\n", strerror(errno)); + umask(old_umask); + #ifdef HAVE_LIBZ if (AH->compression != 0) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index a72dfe93da939..769c66f00aadb 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -158,6 +158,7 @@ static void dumpType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo); static void dumpBaseType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo); static void dumpEnumType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo); static void dumpRangeType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo); +static void dumpUndefinedType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo); static void dumpDomain(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo); static void dumpCompositeType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo); static void dumpCompositeTypeColComments(Archive *fout, TypeInfo *tyinfo); @@ -485,6 +486,11 @@ main(int argc, char **argv) case 'Z': /* Compression Level */ compressLevel = atoi(optarg); + if (compressLevel < 0 || compressLevel > 9) + { + write_msg(NULL, "compression level must be in range 0..9\n"); + exit_nicely(1); + } break; case 0: @@ -887,7 +893,8 @@ help(const char *progname) printf(_(" --column-inserts dump data as INSERT commands with column names\n")); printf(_(" --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n")); printf(_(" --disable-triggers disable triggers during data-only restore\n")); - printf(_(" --enable-row-security enable row level security\n")); + printf(_(" --enable-row-security enable row security (dump only content user has\n" + " access to)\n")); printf(_(" --exclude-table-data=TABLE do NOT dump data for the named table(s)\n")); printf(_(" --if-exists use IF EXISTS when dropping objects\n")); printf(_(" --inserts dump data as INSERT commands, rather than COPY\n")); @@ -898,7 +905,7 @@ help(const char *progname) printf(_(" --quote-all-identifiers quote all identifiers, even if not key words\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")); - printf(_(" --snapshot=SNAPSHOT use given synchronous snapshot for the dump\n")); + printf(_(" --snapshot=SNAPSHOT use given snapshot for the dump\n")); printf(_(" --use-set-session-authorization\n" " use SET SESSION AUTHORIZATION commands instead of\n" " ALTER OWNER commands to set ownership\n")); @@ -1324,11 +1331,6 @@ selectDumpableType(TypeInfo *tyinfo) /* dump only types in dumpable namespaces */ if (!tyinfo->dobj.namespace->dobj.dump) tyinfo->dobj.dump = false; - - /* skip undefined placeholder types */ - else if (!tyinfo->isDefined) - tyinfo->dobj.dump = false; - else tyinfo->dobj.dump = true; } @@ -1434,7 +1436,7 @@ dumpTableData_copy(Archive *fout, DumpOptions *dopt, void *dcontext) const char *column_list; if (g_verbose) - write_msg(NULL, "dumping contents of table \"%s\".\"%s\"\n", + write_msg(NULL, "dumping contents of table \"%s.%s\"\n", tbinfo->dobj.namespace->dobj.name, classname); /* @@ -1659,7 +1661,7 @@ dumpTableData_insert(Archive *fout, DumpOptions *dopt, void *dcontext) /* append the list of column names if required */ if (dopt->column_inserts) { - appendPQExpBufferStr(insertStmt, "("); + appendPQExpBufferChar(insertStmt, '('); for (field = 0; field < nfields; field++) { if (field > 0) @@ -2831,7 +2833,7 @@ getPolicies(Archive *fout, TableInfo tblinfo[], int numTables) continue; if (g_verbose) - write_msg(NULL, "reading row security enabled for table \"%s\".\"%s\"\n", + write_msg(NULL, "reading row security enabled for table \"%s.%s\"\n", tbinfo->dobj.namespace->dobj.name, tbinfo->dobj.name); @@ -2862,7 +2864,7 @@ getPolicies(Archive *fout, TableInfo tblinfo[], int numTables) } if (g_verbose) - write_msg(NULL, "reading policies for table \"%s\".\"%s\"\n", + write_msg(NULL, "reading policies for table \"%s.%s\"\n", tbinfo->dobj.namespace->dobj.name, tbinfo->dobj.name); @@ -3007,10 +3009,10 @@ dumpPolicy(Archive *fout, DumpOptions *dopt, PolicyInfo *polinfo) appendPQExpBuffer(query, " TO %s", polinfo->polroles); if (polinfo->polqual != NULL) - appendPQExpBuffer(query, " USING %s", polinfo->polqual); + appendPQExpBuffer(query, " USING (%s)", polinfo->polqual); if (polinfo->polwithcheck != NULL) - appendPQExpBuffer(query, " WITH CHECK %s", polinfo->polwithcheck); + appendPQExpBuffer(query, " WITH CHECK (%s)", polinfo->polwithcheck); appendPQExpBuffer(query, ";\n"); @@ -3512,7 +3514,7 @@ getTypes(Archive *fout, int *numTypes) else if (fout->remoteVersion >= 80300) { appendPQExpBuffer(query, "SELECT tableoid, oid, typname, " - "typnamespace, '{=U}' AS typacl, " + "typnamespace, NULL AS typacl, " "(%s typowner) AS rolname, " "typinput::oid AS typinput, " "typoutput::oid AS typoutput, typelem, typrelid, " @@ -3527,7 +3529,7 @@ getTypes(Archive *fout, int *numTypes) else if (fout->remoteVersion >= 70300) { appendPQExpBuffer(query, "SELECT tableoid, oid, typname, " - "typnamespace, '{=U}' AS typacl, " + "typnamespace, NULL AS typacl, " "(%s typowner) AS rolname, " "typinput::oid AS typinput, " "typoutput::oid AS typoutput, typelem, typrelid, " @@ -3541,7 +3543,7 @@ getTypes(Archive *fout, int *numTypes) else if (fout->remoteVersion >= 70100) { appendPQExpBuffer(query, "SELECT tableoid, oid, typname, " - "0::oid AS typnamespace, '{=U}' AS typacl, " + "0::oid AS typnamespace, NULL AS typacl, " "(%s typowner) AS rolname, " "typinput::oid AS typinput, " "typoutput::oid AS typoutput, typelem, typrelid, " @@ -3557,7 +3559,7 @@ getTypes(Archive *fout, int *numTypes) appendPQExpBuffer(query, "SELECT " "(SELECT oid FROM pg_class WHERE relname = 'pg_type') AS tableoid, " "oid, typname, " - "0::oid AS typnamespace, '{=U}' AS typacl, " + "0::oid AS typnamespace, NULL AS typacl, " "(%s typowner) AS rolname, " "typinput::oid AS typinput, " "typoutput::oid AS typoutput, typelem, typrelid, " @@ -3702,7 +3704,7 @@ getTypes(Archive *fout, int *numTypes) } } - if (strlen(tyinfo[i].rolname) == 0 && tyinfo[i].isDefined) + if (strlen(tyinfo[i].rolname) == 0) write_msg(NULL, "WARNING: owner of data type \"%s\" appears to be invalid\n", tyinfo[i].dobj.name); } @@ -4248,7 +4250,7 @@ getAggregates(Archive *fout, DumpOptions *dopt, int *numAggs) "CASE WHEN aggbasetype = 0 THEN 0 ELSE 1 END AS pronargs, " "aggbasetype AS proargtypes, " "(%s aggowner) AS rolname, " - "'{=X}' AS aggacl " + "NULL AS aggacl " "FROM pg_aggregate " "where oid > '%u'::oid", username_subquery, @@ -4263,7 +4265,7 @@ getAggregates(Archive *fout, DumpOptions *dopt, int *numAggs) "CASE WHEN aggbasetype = 0 THEN 0 ELSE 1 END AS pronargs, " "aggbasetype AS proargtypes, " "(%s aggowner) AS rolname, " - "'{=X}' AS aggacl " + "NULL AS aggacl " "FROM pg_aggregate " "where oid > '%u'::oid", username_subquery, @@ -4407,7 +4409,7 @@ getFuncs(Archive *fout, DumpOptions *dopt, int *numFuncs) appendPQExpBuffer(query, "SELECT tableoid, oid, proname, prolang, " "pronargs, proargtypes, prorettype, " - "'{=X}' AS proacl, " + "NULL AS proacl, " "0::oid AS pronamespace, " "(%s proowner) AS rolname " "FROM pg_proc " @@ -4423,7 +4425,7 @@ getFuncs(Archive *fout, DumpOptions *dopt, int *numFuncs) " WHERE relname = 'pg_proc') AS tableoid, " "oid, proname, prolang, " "pronargs, proargtypes, prorettype, " - "'{=X}' AS proacl, " + "NULL AS proacl, " "0::oid AS pronamespace, " "(%s proowner) AS rolname " "FROM pg_proc " @@ -4519,6 +4521,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) int i_relhasindex; int i_relhasrules; int i_relrowsec; + int i_relforcerowsec; int i_relhasoids; int i_relfrozenxid; int i_relminmxid; @@ -4572,7 +4575,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) "(%s c.relowner) AS rolname, " "c.relchecks, c.relhastriggers, " "c.relhasindex, c.relhasrules, c.relhasoids, " - "c.relrowsecurity, " + "c.relrowsecurity, c.relforcerowsecurity, " "c.relfrozenxid, c.relminmxid, tc.oid AS toid, " "tc.relfrozenxid AS tfrozenxid, " "tc.relminmxid AS tminmxid, " @@ -4614,6 +4617,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) "c.relchecks, c.relhastriggers, " "c.relhasindex, c.relhasrules, c.relhasoids, " "'f'::bool AS relrowsecurity, " + "'f'::bool AS relforcerowsecurity, " "c.relfrozenxid, c.relminmxid, tc.oid AS toid, " "tc.relfrozenxid AS tfrozenxid, " "tc.relminmxid AS tminmxid, " @@ -4655,6 +4659,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) "c.relchecks, c.relhastriggers, " "c.relhasindex, c.relhasrules, c.relhasoids, " "'f'::bool AS relrowsecurity, " + "'f'::bool AS relforcerowsecurity, " "c.relfrozenxid, c.relminmxid, tc.oid AS toid, " "tc.relfrozenxid AS tfrozenxid, " "tc.relminmxid AS tminmxid, " @@ -4696,6 +4701,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) "c.relchecks, c.relhastriggers, " "c.relhasindex, c.relhasrules, c.relhasoids, " "'f'::bool AS relrowsecurity, " + "'f'::bool AS relforcerowsecurity, " "c.relfrozenxid, 0 AS relminmxid, tc.oid AS toid, " "tc.relfrozenxid AS tfrozenxid, " "0 AS tminmxid, " @@ -4735,6 +4741,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) "c.relchecks, c.relhastriggers, " "c.relhasindex, c.relhasrules, c.relhasoids, " "'f'::bool AS relrowsecurity, " + "'f'::bool AS relforcerowsecurity, " "c.relfrozenxid, 0 AS relminmxid, tc.oid AS toid, " "tc.relfrozenxid AS tfrozenxid, " "0 AS tminmxid, " @@ -4773,6 +4780,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) "c.relchecks, c.relhastriggers, " "c.relhasindex, c.relhasrules, c.relhasoids, " "'f'::bool AS relrowsecurity, " + "'f'::bool AS relforcerowsecurity, " "c.relfrozenxid, 0 AS relminmxid, tc.oid AS toid, " "tc.relfrozenxid AS tfrozenxid, " "0 AS tminmxid, " @@ -4811,6 +4819,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) "c.relchecks, (c.reltriggers <> 0) AS relhastriggers, " "c.relhasindex, c.relhasrules, c.relhasoids, " "'f'::bool AS relrowsecurity, " + "'f'::bool AS relforcerowsecurity, " "c.relfrozenxid, 0 AS relminmxid, tc.oid AS toid, " "tc.relfrozenxid AS tfrozenxid, " "0 AS tminmxid, " @@ -4849,6 +4858,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) "relchecks, (reltriggers <> 0) AS relhastriggers, " "relhasindex, relhasrules, relhasoids, " "'f'::bool AS relrowsecurity, " + "'f'::bool AS relforcerowsecurity, " "0 AS relfrozenxid, 0 AS relminmxid," "0 AS toid, " "0 AS tfrozenxid, 0 AS tminmxid," @@ -4886,6 +4896,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) "relchecks, (reltriggers <> 0) AS relhastriggers, " "relhasindex, relhasrules, relhasoids, " "'f'::bool AS relrowsecurity, " + "'f'::bool AS relforcerowsecurity, " "0 AS relfrozenxid, 0 AS relminmxid," "0 AS toid, " "0 AS tfrozenxid, 0 AS tminmxid," @@ -4919,6 +4930,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) "relchecks, (reltriggers <> 0) AS relhastriggers, " "relhasindex, relhasrules, relhasoids, " "'f'::bool AS relrowsecurity, " + "'f'::bool AS relforcerowsecurity, " "0 AS relfrozenxid, 0 AS relminmxid," "0 AS toid, " "0 AS tfrozenxid, 0 AS tminmxid," @@ -4947,6 +4959,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) "relhasindex, relhasrules, " "'t'::bool AS relhasoids, " "'f'::bool AS relrowsecurity, " + "'f'::bool AS relforcerowsecurity, " "0 AS relfrozenxid, 0 AS relminmxid," "0 AS toid, " "0 AS tfrozenxid, 0 AS tminmxid," @@ -4985,6 +4998,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) "relhasindex, relhasrules, " "'t'::bool AS relhasoids, " "'f'::bool AS relrowsecurity, " + "'f'::bool AS relforcerowsecurity, " "0 AS relfrozenxid, 0 AS relminmxid," "0 AS toid, " "0 AS tfrozenxid, 0 AS tminmxid," @@ -5033,6 +5047,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) i_relhasindex = PQfnumber(res, "relhasindex"); i_relhasrules = PQfnumber(res, "relhasrules"); i_relrowsec = PQfnumber(res, "relrowsecurity"); + i_relforcerowsec = PQfnumber(res, "relforcerowsecurity"); i_relhasoids = PQfnumber(res, "relhasoids"); i_relfrozenxid = PQfnumber(res, "relfrozenxid"); i_relminmxid = PQfnumber(res, "relminmxid"); @@ -5085,6 +5100,7 @@ getTables(Archive *fout, DumpOptions *dopt, int *numTables) tblinfo[i].hasrules = (strcmp(PQgetvalue(res, i, i_relhasrules), "t") == 0); tblinfo[i].hastriggers = (strcmp(PQgetvalue(res, i, i_relhastriggers), "t") == 0); tblinfo[i].rowsec = (strcmp(PQgetvalue(res, i, i_relrowsec), "t") == 0); + tblinfo[i].forcerowsec = (strcmp(PQgetvalue(res, i, i_relforcerowsec), "t") == 0); tblinfo[i].hasoids = (strcmp(PQgetvalue(res, i, i_relhasoids), "t") == 0); tblinfo[i].relispopulated = (strcmp(PQgetvalue(res, i, i_relispopulated), "t") == 0); tblinfo[i].relreplident = *(PQgetvalue(res, i, i_relreplident)); @@ -5306,7 +5322,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables) continue; if (g_verbose) - write_msg(NULL, "reading indexes for table \"%s\".\"%s\"\n", + write_msg(NULL, "reading indexes for table \"%s.%s\"\n", tbinfo->dobj.namespace->dobj.name, tbinfo->dobj.name); @@ -5673,7 +5689,7 @@ getConstraints(Archive *fout, TableInfo tblinfo[], int numTables) continue; if (g_verbose) - write_msg(NULL, "reading foreign key constraints for table \"%s\".\"%s\"\n", + write_msg(NULL, "reading foreign key constraints for table \"%s.%s\"\n", tbinfo->dobj.namespace->dobj.name, tbinfo->dobj.name); @@ -6012,7 +6028,7 @@ getTriggers(Archive *fout, TableInfo tblinfo[], int numTables) continue; if (g_verbose) - write_msg(NULL, "reading triggers for table \"%s\".\"%s\"\n", + write_msg(NULL, "reading triggers for table \"%s.%s\"\n", tbinfo->dobj.namespace->dobj.name, tbinfo->dobj.name); @@ -6316,7 +6332,7 @@ getProcLangs(Archive *fout, int *numProcLangs) /* pg_language has a laninline column */ appendPQExpBuffer(query, "SELECT tableoid, oid, " "lanname, lanpltrusted, lanplcallfoid, " - "laninline, lanvalidator, lanacl, " + "laninline, lanvalidator, lanacl, " "(%s lanowner) AS lanowner " "FROM pg_language " "WHERE lanispl " @@ -6328,7 +6344,7 @@ getProcLangs(Archive *fout, int *numProcLangs) /* pg_language has a lanowner column */ appendPQExpBuffer(query, "SELECT tableoid, oid, " "lanname, lanpltrusted, lanplcallfoid, " - "lanvalidator, lanacl, " + "0 AS laninline, lanvalidator, lanacl, " "(%s lanowner) AS lanowner " "FROM pg_language " "WHERE lanispl " @@ -6338,7 +6354,9 @@ getProcLangs(Archive *fout, int *numProcLangs) else if (fout->remoteVersion >= 80100) { /* Languages are owned by the bootstrap superuser, OID 10 */ - appendPQExpBuffer(query, "SELECT tableoid, oid, *, " + appendPQExpBuffer(query, "SELECT tableoid, oid, " + "lanname, lanpltrusted, lanplcallfoid, " + "0 AS laninline, lanvalidator, lanacl, " "(%s '10') AS lanowner " "FROM pg_language " "WHERE lanispl " @@ -6348,27 +6366,47 @@ getProcLangs(Archive *fout, int *numProcLangs) else if (fout->remoteVersion >= 70400) { /* Languages are owned by the bootstrap superuser, sysid 1 */ - appendPQExpBuffer(query, "SELECT tableoid, oid, *, " + appendPQExpBuffer(query, "SELECT tableoid, oid, " + "lanname, lanpltrusted, lanplcallfoid, " + "0 AS laninline, lanvalidator, lanacl, " "(%s '1') AS lanowner " "FROM pg_language " "WHERE lanispl " "ORDER BY oid", username_subquery); } - else if (fout->remoteVersion >= 70100) + else if (fout->remoteVersion >= 70300) { /* No clear notion of an owner at all before 7.4 ... */ - appendPQExpBufferStr(query, "SELECT tableoid, oid, * FROM pg_language " - "WHERE lanispl " - "ORDER BY oid"); + appendPQExpBuffer(query, "SELECT tableoid, oid, " + "lanname, lanpltrusted, lanplcallfoid, " + "0 AS laninline, lanvalidator, lanacl, " + "NULL AS lanowner " + "FROM pg_language " + "WHERE lanispl " + "ORDER BY oid"); + } + else if (fout->remoteVersion >= 70100) + { + appendPQExpBuffer(query, "SELECT tableoid, oid, " + "lanname, lanpltrusted, lanplcallfoid, " + "0 AS laninline, 0 AS lanvalidator, NULL AS lanacl, " + "NULL AS lanowner " + "FROM pg_language " + "WHERE lanispl " + "ORDER BY oid"); } else { - appendPQExpBufferStr(query, "SELECT " - "(SELECT oid FROM pg_class WHERE relname = 'pg_language') AS tableoid, " - "oid, * FROM pg_language " - "WHERE lanispl " - "ORDER BY oid"); + appendPQExpBuffer(query, "SELECT " + "(SELECT oid FROM pg_class WHERE relname = 'pg_language') AS tableoid, " + "oid, " + "lanname, lanpltrusted, lanplcallfoid, " + "0 AS laninline, 0 AS lanvalidator, NULL AS lanacl, " + "NULL AS lanowner " + "FROM pg_language " + "WHERE lanispl " + "ORDER BY oid"); } res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK); @@ -6384,7 +6422,6 @@ getProcLangs(Archive *fout, int *numProcLangs) i_lanname = PQfnumber(res, "lanname"); i_lanpltrusted = PQfnumber(res, "lanpltrusted"); i_lanplcallfoid = PQfnumber(res, "lanplcallfoid"); - /* these may fail and return -1: */ i_laninline = PQfnumber(res, "laninline"); i_lanvalidator = PQfnumber(res, "lanvalidator"); i_lanacl = PQfnumber(res, "lanacl"); @@ -6400,22 +6437,10 @@ getProcLangs(Archive *fout, int *numProcLangs) planginfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_lanname)); planginfo[i].lanpltrusted = *(PQgetvalue(res, i, i_lanpltrusted)) == 't'; planginfo[i].lanplcallfoid = atooid(PQgetvalue(res, i, i_lanplcallfoid)); - if (i_laninline >= 0) - planginfo[i].laninline = atooid(PQgetvalue(res, i, i_laninline)); - else - planginfo[i].laninline = InvalidOid; - if (i_lanvalidator >= 0) - planginfo[i].lanvalidator = atooid(PQgetvalue(res, i, i_lanvalidator)); - else - planginfo[i].lanvalidator = InvalidOid; - if (i_lanacl >= 0) - planginfo[i].lanacl = pg_strdup(PQgetvalue(res, i, i_lanacl)); - else - planginfo[i].lanacl = pg_strdup("{=U}"); - if (i_lanowner >= 0) - planginfo[i].lanowner = pg_strdup(PQgetvalue(res, i, i_lanowner)); - else - planginfo[i].lanowner = pg_strdup(""); + planginfo[i].laninline = atooid(PQgetvalue(res, i, i_laninline)); + planginfo[i].lanvalidator = atooid(PQgetvalue(res, i, i_lanvalidator)); + planginfo[i].lanacl = pg_strdup(PQgetvalue(res, i, i_lanacl)); + planginfo[i].lanowner = pg_strdup(PQgetvalue(res, i, i_lanowner)); if (fout->remoteVersion < 70300) { @@ -6660,6 +6685,7 @@ getTransforms(Archive *fout, int *numTransforms) appendPQExpBuffer(&namebuf, "%s %s", typeInfo->dobj.name, lanname); transforminfo[i].dobj.name = namebuf.data; + free(lanname); } PQclear(res); @@ -6736,7 +6762,7 @@ getTableAttrs(Archive *fout, DumpOptions *dopt, TableInfo *tblinfo, int numTable * the output of an indexscan on pg_attribute_relid_attnum_index. */ if (g_verbose) - write_msg(NULL, "finding the columns and types of table \"%s\".\"%s\"\n", + write_msg(NULL, "finding the columns and types of table \"%s.%s\"\n", tbinfo->dobj.namespace->dobj.name, tbinfo->dobj.name); @@ -6949,7 +6975,7 @@ getTableAttrs(Archive *fout, DumpOptions *dopt, TableInfo *tblinfo, int numTable int numDefaults; if (g_verbose) - write_msg(NULL, "finding default expressions of table \"%s\".\"%s\"\n", + write_msg(NULL, "finding default expressions of table \"%s.%s\"\n", tbinfo->dobj.namespace->dobj.name, tbinfo->dobj.name); @@ -7074,7 +7100,7 @@ getTableAttrs(Archive *fout, DumpOptions *dopt, TableInfo *tblinfo, int numTable int numConstrs; if (g_verbose) - write_msg(NULL, "finding check constraints for table \"%s\".\"%s\"\n", + write_msg(NULL, "finding check constraints for table \"%s.%s\"\n", tbinfo->dobj.namespace->dobj.name, tbinfo->dobj.name); @@ -8548,6 +8574,8 @@ dumpType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo) dumpEnumType(fout, dopt, tyinfo); else if (tyinfo->typtype == TYPTYPE_RANGE) dumpRangeType(fout, dopt, tyinfo); + else if (tyinfo->typtype == TYPTYPE_PSEUDO && !tyinfo->isDefined) + dumpUndefinedType(fout, dopt, tyinfo); else write_msg(NULL, "WARNING: typtype of data type \"%s\" appears to be invalid\n", tyinfo->dobj.name); @@ -8814,6 +8842,73 @@ dumpRangeType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo) destroyPQExpBuffer(query); } +/* + * dumpUndefinedType + * writes out to fout the queries to recreate a !typisdefined type + * + * This is a shell type, but we use different terminology to distinguish + * this case from where we have to emit a shell type definition to break + * circular dependencies. An undefined type shouldn't ever have anything + * depending on it. + */ +static void +dumpUndefinedType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo) +{ + PQExpBuffer q = createPQExpBuffer(); + PQExpBuffer delq = createPQExpBuffer(); + PQExpBuffer labelq = createPQExpBuffer(); + char *qtypname; + + qtypname = pg_strdup(fmtId(tyinfo->dobj.name)); + + /* + * DROP must be fully qualified in case same name appears in pg_catalog. + */ + appendPQExpBuffer(delq, "DROP TYPE %s.", + fmtId(tyinfo->dobj.namespace->dobj.name)); + appendPQExpBuffer(delq, "%s;\n", + qtypname); + + if (dopt->binary_upgrade) + binary_upgrade_set_type_oids_by_type_oid(fout, + q, tyinfo->dobj.catId.oid); + + appendPQExpBuffer(q, "CREATE TYPE %s;\n", + qtypname); + + appendPQExpBuffer(labelq, "TYPE %s", qtypname); + + if (dopt->binary_upgrade) + binary_upgrade_extension_member(q, &tyinfo->dobj, labelq->data); + + ArchiveEntry(fout, tyinfo->dobj.catId, tyinfo->dobj.dumpId, + tyinfo->dobj.name, + tyinfo->dobj.namespace->dobj.name, + NULL, + tyinfo->rolname, false, + "TYPE", SECTION_PRE_DATA, + q->data, delq->data, NULL, + NULL, 0, + NULL, NULL); + + /* Dump Type Comments and Security Labels */ + dumpComment(fout, dopt, labelq->data, + tyinfo->dobj.namespace->dobj.name, tyinfo->rolname, + tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId); + dumpSecLabel(fout, dopt, labelq->data, + tyinfo->dobj.namespace->dobj.name, tyinfo->rolname, + tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId); + + dumpACL(fout, dopt, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE", + qtypname, NULL, tyinfo->dobj.name, + tyinfo->dobj.namespace->dobj.name, + tyinfo->rolname, tyinfo->typacl); + + destroyPQExpBuffer(q); + destroyPQExpBuffer(delq); + destroyPQExpBuffer(labelq); +} + /* * dumpBaseType * writes out to fout the queries to recreate a user-defined base type @@ -11332,7 +11427,7 @@ dumpOpclass(Archive *fout, DumpOptions *dopt, OpclassInfo *opcinfo) appendPQExpBufferStr(q, " FAMILY "); if (strcmp(opcfamilynsp, opcinfo->dobj.namespace->dobj.name) != 0) appendPQExpBuffer(q, "%s.", fmtId(opcfamilynsp)); - appendPQExpBuffer(q, "%s", fmtId(opcfamilyname)); + appendPQExpBufferStr(q, fmtId(opcfamilyname)); } appendPQExpBufferStr(q, " AS\n "); @@ -13844,7 +13939,7 @@ dumpTableSchema(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo) if (actual_atts == 0) appendPQExpBufferStr(q, " ("); else - appendPQExpBufferStr(q, ","); + appendPQExpBufferChar(q, ','); appendPQExpBufferStr(q, "\n "); actual_atts++; @@ -14272,6 +14367,10 @@ dumpTableSchema(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo) appendPQExpBuffer(q, "\nALTER TABLE ONLY %s SET WITH OIDS;\n", fmtId(tbinfo->dobj.name)); + if (tbinfo->forcerowsec) + appendPQExpBuffer(q, "\nALTER TABLE ONLY %s FORCE ROW LEVEL SECURITY;\n", + fmtId(tbinfo->dobj.name)); + if (dopt->binary_upgrade) binary_upgrade_extension_member(q, &tbinfo->dobj, labelq->data); @@ -14632,8 +14731,8 @@ dumpConstraint(Archive *fout, DumpOptions *dopt, ConstraintInfo *coninfo) { /* CHECK constraint on a table */ - /* Ignore if not to be dumped separately */ - if (coninfo->separate) + /* Ignore if not to be dumped separately, or if it was inherited */ + if (coninfo->separate && coninfo->conislocal) { /* not ONLY since we want it to propagate to children */ appendPQExpBuffer(q, "ALTER TABLE %s\n", @@ -15277,13 +15376,12 @@ dumpEventTrigger(Archive *fout, DumpOptions *dopt, EventTriggerInfo *evtinfo) appendPQExpBufferStr(query, fmtId(evtinfo->dobj.name)); appendPQExpBufferStr(query, " ON "); appendPQExpBufferStr(query, fmtId(evtinfo->evtevent)); - appendPQExpBufferStr(query, " "); if (strcmp("", evtinfo->evttags) != 0) { appendPQExpBufferStr(query, "\n WHEN TAG IN ("); appendPQExpBufferStr(query, evtinfo->evttags); - appendPQExpBufferStr(query, ") "); + appendPQExpBufferChar(query, ')'); } appendPQExpBufferStr(query, "\n EXECUTE PROCEDURE "); @@ -15732,6 +15830,7 @@ getExtensionMembership(Archive *fout, DumpOptions *dopt, ExtensionInfo extinfo[] addObjectDependency(&contable->dataObj->dobj, reftable->dataObj->dobj.dumpId); } + PQclear(res); destroyPQExpBuffer(query); } diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index 009dba5c9d796..3c64a82dba69c 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -127,7 +127,7 @@ typedef struct _typeInfo char typtype; /* 'b', 'c', etc */ bool isArray; /* true if auto-generated array type */ bool isDefined; /* true if typisdefined */ - /* If it's a dumpable base type, we create a "shell type" entry for it */ + /* If needed, we'll create a "shell type" entry for it; link that here: */ struct _shellTypeInfo *shellType; /* shell-type entry, or NULL */ /* If it's a domain, we store links to its constraints here: */ int nDomChecks; @@ -202,7 +202,7 @@ typedef struct _tableInfo char relkind; char relpersistence; /* relation persistence */ bool relispopulated; /* relation is populated */ - bool relreplident; /* replica identifier */ + char relreplident; /* replica identifier */ char *reltablespace; /* relation tablespace */ char *reloptions; /* options specified by WITH (...) */ char *checkoption; /* WITH CHECK OPTION */ @@ -211,6 +211,7 @@ typedef struct _tableInfo bool hasrules; /* does it have any rules? */ bool hastriggers; /* does it have any triggers? */ bool rowsec; /* is row security enabled? */ + bool forcerowsec; /* is row security forced? */ bool hasoids; /* does it have OIDs? */ uint32 frozenxid; /* for restore frozen xid */ uint32 minmxid; /* for restore min multi xid */ diff --git a/src/bin/pg_dump/pg_dump_sort.c b/src/bin/pg_dump/pg_dump_sort.c index aa3e20a2d5f46..80c3fa89e491b 100644 --- a/src/bin/pg_dump/pg_dump_sort.c +++ b/src/bin/pg_dump/pg_dump_sort.c @@ -1247,7 +1247,9 @@ repairDependencyLoop(DumpableObject **loop, } if (i >= nLoop) { - write_msg(NULL, "NOTICE: there are circular foreign-key constraints among these table(s):\n"); + write_msg(NULL, ngettext("NOTICE: there are circular foreign-key constraints on this table:\n", + "NOTICE: there are circular foreign-key constraints among these tables:\n", + nLoop)); for (i = 0; i < nLoop; i++) write_msg(NULL, " %s\n", loop[i]->name); write_msg(NULL, "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints.\n"); diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index d98c83e099c64..4b166050cdaeb 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -1412,6 +1412,24 @@ dumpCreateDB(PGconn *conn) appendPQExpBufferStr(buf, ";\n"); } + else if (strcmp(dbtablespace, "pg_default") != 0 && !no_tablespaces) + { + /* + * Cannot change tablespace of the database we're connected to, + * so to move "postgres" to another tablespace, we connect to + * "template1", and vice versa. + */ + if (strcmp(dbname, "postgres") == 0) + appendPQExpBuffer(buf, "\\connect template1\n"); + else + appendPQExpBuffer(buf, "\\connect postgres\n"); + + appendPQExpBuffer(buf, "ALTER DATABASE %s SET TABLESPACE %s;\n", + fdbname, fmtId(dbtablespace)); + + /* connect to original database */ + appendPQExpBuffer(buf, "\\connect %s\n", fdbname); + } if (binary_upgrade) { diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c index ec82d0b98d5ca..f7fc4d1238981 100644 --- a/src/bin/pg_dump/pg_restore.c +++ b/src/bin/pg_dump/pg_restore.c @@ -460,7 +460,7 @@ usage(const char *progname) printf(_(" -x, --no-privileges skip restoration of access privileges (grant/revoke)\n")); printf(_(" -1, --single-transaction restore as a single transaction\n")); printf(_(" --disable-triggers disable triggers during data-only restore\n")); - printf(_(" --enable-row-security enable row level security\n")); + printf(_(" --enable-row-security enable row security\n")); printf(_(" --if-exists use IF EXISTS when dropping objects\n")); printf(_(" --no-data-for-failed-tables do not restore data of tables that could not be\n" " created\n")); diff --git a/src/bin/pg_dump/po/de.po b/src/bin/pg_dump/po/de.po index 96f61c9b96298..760d136431048 100644 --- a/src/bin/pg_dump/po/de.po +++ b/src/bin/pg_dump/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-05-19 16:14+0000\n" -"PO-Revision-Date: 2015-05-19 20:48-0400\n" +"POT-Creation-Date: 2015-09-28 00:44+0000\n" +"PO-Revision-Date: 2015-09-29 15:11-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -200,10 +200,9 @@ msgid "reading type casts\n" msgstr "lese Typumwandlungen\n" #: common.c:206 -#, fuzzy, c-format -#| msgid "reading extensions\n" +#, c-format msgid "reading transforms\n" -msgstr "lese Erweiterungen\n" +msgstr "lese Transformationen\n" #: common.c:210 #, c-format @@ -256,10 +255,9 @@ msgid "reading rewrite rules\n" msgstr "lese Umschreiberegeln\n" #: common.c:256 -#, fuzzy, c-format -#| msgid "reading schemas\n" +#, c-format msgid "reading policies\n" -msgstr "lese Schemas\n" +msgstr "lese Policies\n" #: common.c:804 #, c-format @@ -287,7 +285,7 @@ msgid "invalid compression code: %d\n" msgstr "ungültiger Komprimierungscode: %d\n" #: compress_io.c:139 compress_io.c:175 compress_io.c:196 compress_io.c:529 -#: compress_io.c:562 +#: compress_io.c:572 #, c-format msgid "not built with zlib support\n" msgstr "nicht mit zlib-Unterstützung gebaut\n" @@ -317,14 +315,14 @@ msgstr "konnte Daten nicht dekomprimieren: %s\n" msgid "could not close compression library: %s\n" msgstr "konnte Komprimierungsbibliothek nicht schließen: %s\n" -#: compress_io.c:596 compress_io.c:632 pg_backup_custom.c:591 -#: pg_backup_tar.c:562 +#: compress_io.c:606 compress_io.c:642 pg_backup_custom.c:591 +#: pg_backup_tar.c:567 #, c-format msgid "could not read from input file: %s\n" msgstr "konnte nicht aus Eingabedatei lesen: %s\n" -#: compress_io.c:635 pg_backup_custom.c:588 pg_backup_directory.c:552 -#: pg_backup_tar.c:798 pg_backup_tar.c:822 +#: compress_io.c:645 pg_backup_custom.c:588 pg_backup_directory.c:552 +#: pg_backup_tar.c:803 pg_backup_tar.c:827 #, c-format msgid "could not read from input file: end of file\n" msgstr "konnte nicht aus Eingabedatei lesen: Dateiende\n" @@ -503,16 +501,14 @@ msgid "dropping %s %s\n" msgstr "entferne %s %s\n" #: pg_backup_archiver.c:627 -#, fuzzy, c-format -#| msgid "setting owner and privileges for %s %s\n" -msgid "setting owner and privileges for %s \"%s\".\"%s\"\n" -msgstr "setze Eigentümer und Privilegien für %s %s\n" +#, c-format +msgid "setting owner and privileges for %s \"%s.%s\"\n" +msgstr "setze Eigentümer und Privilegien für %s „%s.%s“\n" #: pg_backup_archiver.c:630 -#, fuzzy, c-format -#| msgid "setting owner and privileges for %s %s\n" +#, c-format msgid "setting owner and privileges for %s \"%s\"\n" -msgstr "setze Eigentümer und Privilegien für %s %s\n" +msgstr "setze Eigentümer und Privilegien für %s „%s“\n" #: pg_backup_archiver.c:696 pg_backup_archiver.c:698 #, c-format @@ -520,16 +516,14 @@ msgid "warning from original dump file: %s\n" msgstr "Warnung aus der ursprünglichen Ausgabedatei: %s\n" #: pg_backup_archiver.c:707 -#, fuzzy, c-format -#| msgid "creating %s %s\n" -msgid "creating %s \"%s\".\"%s\"\n" -msgstr "erstelle %s %s\n" +#, c-format +msgid "creating %s \"%s.%s\"\n" +msgstr "erstelle %s „%s.%s“\n" #: pg_backup_archiver.c:710 -#, fuzzy, c-format -#| msgid "creating %s %s\n" +#, c-format msgid "creating %s \"%s\"\n" -msgstr "erstelle %s %s\n" +msgstr "erstelle %s „%s“\n" #: pg_backup_archiver.c:755 #, c-format @@ -542,10 +536,9 @@ msgid "processing %s\n" msgstr "verarbeite %s\n" #: pg_backup_archiver.c:803 -#, fuzzy, c-format -#| msgid "processing data for table \"%s\"\n" -msgid "processing data for table \"%s\".\"%s\"\n" -msgstr "verarbeite Daten für Tabelle „%s“\n" +#, c-format +msgid "processing data for table \"%s.%s\"\n" +msgstr "verarbeite Daten für Tabelle „%s.%s“\n" #: pg_backup_archiver.c:865 #, c-format @@ -579,7 +572,7 @@ msgid_plural "restored %d large objects\n" msgstr[0] "%d Large Object wiederhergestellt\n" msgstr[1] "%d Large Objects wiederhergestellt\n" -#: pg_backup_archiver.c:1197 pg_backup_tar.c:740 +#: pg_backup_archiver.c:1197 pg_backup_tar.c:745 #, c-format msgid "restoring large object with OID %u\n" msgstr "Wiederherstellung von Large Object mit OID %u\n" @@ -589,7 +582,7 @@ msgstr "Wiederherstellung von Large Object mit OID %u\n" msgid "could not create large object %u: %s" msgstr "konnte Large Object %u nicht erstellen: %s" -#: pg_backup_archiver.c:1214 pg_dump.c:2776 +#: pg_backup_archiver.c:1214 pg_dump.c:2774 #, c-format msgid "could not open large object %u: %s" msgstr "konnte Large Object %u nicht öffnen: %s" @@ -961,7 +954,7 @@ msgid "unrecognized data block type %d while restoring archive\n" msgstr "unerkannter Datenblocktyp %d beim Wiederherstellen des Archivs gefunden\n" #: pg_backup_custom.c:709 pg_backup_custom.c:759 pg_backup_custom.c:908 -#: pg_backup_tar.c:1085 +#: pg_backup_tar.c:1090 #, c-format msgid "could not determine seek position in archive file: %s\n" msgstr "konnte Positionszeiger in Archivdatei nicht ermitteln: %s\n" @@ -1011,12 +1004,12 @@ msgstr "Archivierer (DB)" msgid "could not get server_version from libpq\n" msgstr "konnte server_version nicht von libpq ermitteln\n" -#: pg_backup_db.c:55 pg_dumpall.c:1952 +#: pg_backup_db.c:55 pg_dumpall.c:1965 #, c-format msgid "server version: %s; %s version: %s\n" msgstr "Version des Servers: %s; Version von %s: %s\n" -#: pg_backup_db.c:57 pg_dumpall.c:1954 +#: pg_backup_db.c:57 pg_dumpall.c:1967 #, c-format msgid "aborting because of server version mismatch\n" msgstr "Abbruch wegen unpassender Serverversion\n" @@ -1027,7 +1020,7 @@ msgid "connecting to database \"%s\" as user \"%s\"\n" msgstr "verbinde mit Datenbank „%s“ als Benutzer „%s“\n" #: pg_backup_db.c:133 pg_backup_db.c:185 pg_backup_db.c:232 pg_backup_db.c:278 -#: pg_dumpall.c:1782 pg_dumpall.c:1890 +#: pg_dumpall.c:1795 pg_dumpall.c:1903 msgid "Password: " msgstr "Passwort: " @@ -1188,109 +1181,109 @@ msgstr "konnte Inhaltsverzeichnisdatei „%s“ nicht zur Ausgabe öffnen: %s\n" msgid "could not open TOC file for output: %s\n" msgstr "konnte Inhaltsverzeichnisdatei nicht zur Ausgabe öffnen: %s\n" -#: pg_backup_tar.c:225 pg_backup_tar.c:381 +#: pg_backup_tar.c:218 pg_backup_tar.c:374 #, c-format msgid "compression is not supported by tar archive format\n" msgstr "Komprimierung ist im Tar-Format nicht unterstützt\n" -#: pg_backup_tar.c:233 +#: pg_backup_tar.c:226 #, c-format msgid "could not open TOC file \"%s\" for input: %s\n" msgstr "konnte Inhaltsverzeichnisdatei „%s“ nicht zur Eingabe öffnen: %s\n" -#: pg_backup_tar.c:240 +#: pg_backup_tar.c:233 #, c-format msgid "could not open TOC file for input: %s\n" msgstr "konnte Inhaltsverzeichnisdatei nicht zur Eingabe öffnen: %s\n" -#: pg_backup_tar.c:367 +#: pg_backup_tar.c:360 #, c-format msgid "could not find file \"%s\" in archive\n" msgstr "konnte Datei „%s“ nicht im Archiv finden\n" -#: pg_backup_tar.c:423 +#: pg_backup_tar.c:426 #, c-format msgid "could not generate temporary file name: %s\n" msgstr "konnte keine temporären Dateinamen erzeugen: %s\n" -#: pg_backup_tar.c:432 +#: pg_backup_tar.c:437 #, c-format msgid "could not open temporary file\n" msgstr "konnte komprimierte temporäre Datei nicht öffnen\n" -#: pg_backup_tar.c:459 +#: pg_backup_tar.c:464 #, c-format msgid "could not close tar member\n" msgstr "konnte Tar-Mitglied nicht schließen\n" -#: pg_backup_tar.c:572 +#: pg_backup_tar.c:577 #, c-format msgid "internal error -- neither th nor fh specified in tarReadRaw()\n" msgstr "interner Fehler -- weder th noch fh in tarReadRaw() angegeben\n" -#: pg_backup_tar.c:695 +#: pg_backup_tar.c:700 #, c-format msgid "unexpected COPY statement syntax: \"%s\"\n" msgstr "unerwartete Syntax der COPY-Anweisung: „%s“\n" -#: pg_backup_tar.c:957 +#: pg_backup_tar.c:962 #, c-format msgid "invalid OID for large object (%u)\n" msgstr "Large Object hat ungültige Oid (%u)\n" -#: pg_backup_tar.c:1094 +#: pg_backup_tar.c:1099 #, c-format msgid "archive member too large for tar format\n" msgstr "Archivmitglied zu groß für Tar-Format\n" -#: pg_backup_tar.c:1108 +#: pg_backup_tar.c:1113 #, c-format msgid "could not close temporary file: %s\n" msgstr "konnte temporäre Datei nicht schließen: %s\n" -#: pg_backup_tar.c:1118 +#: pg_backup_tar.c:1123 #, c-format msgid "actual file length (%s) does not match expected (%s)\n" msgstr "tatsächliche Dateilänge (%s) stimmt nicht mit erwarteter Länge (%s) überein\n" -#: pg_backup_tar.c:1155 +#: pg_backup_tar.c:1160 #, c-format msgid "moving from position %s to next member at file position %s\n" msgstr "bewege Position von %s auf nächstes Mitglied bei Position %s\n" -#: pg_backup_tar.c:1166 +#: pg_backup_tar.c:1171 #, c-format msgid "now at file position %s\n" msgstr "jetzt bei Dateiposition %s\n" -#: pg_backup_tar.c:1175 pg_backup_tar.c:1205 +#: pg_backup_tar.c:1180 pg_backup_tar.c:1210 #, c-format msgid "could not find header for file \"%s\" in tar archive\n" msgstr "konnte Kopf für Datei „%s“ im Tar-Archiv nicht finden\n" -#: pg_backup_tar.c:1189 +#: pg_backup_tar.c:1194 #, c-format msgid "skipping tar member %s\n" msgstr "Tar-Mitglied %s übersprungen\n" -#: pg_backup_tar.c:1193 +#: pg_backup_tar.c:1198 #, c-format msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file.\n" msgstr "Ausgabe der Daten in anderer Reihenfolge wird in diesem Archivformat nicht unterstützt: „%s“ wird benötigt, aber es kommt vor „%s“ in der Archivdatei.\n" -#: pg_backup_tar.c:1240 +#: pg_backup_tar.c:1245 #, c-format msgid "incomplete tar header found (%lu byte)\n" msgid_plural "incomplete tar header found (%lu bytes)\n" msgstr[0] "unvollständiger Tar-Dateikopf gefunden (%lu Byte)\n" msgstr[1] "unvollständiger Tar-Dateikopf gefunden (%lu Bytes)\n" -#: pg_backup_tar.c:1278 +#: pg_backup_tar.c:1283 #, c-format msgid "TOC Entry %s at %s (length %lu, checksum %d)\n" msgstr "Inhaltsverzeichniseintrag %s bei %s (Länge %lu, Prüfsumme %d)\n" -#: pg_backup_tar.c:1288 +#: pg_backup_tar.c:1293 #, c-format msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s\n" msgstr "beschädigter Tar-Kopf in %s gefunden (%d erwartet, %d berechnet), Dateiposition %s\n" @@ -1300,9 +1293,9 @@ msgstr "beschädigter Tar-Kopf in %s gefunden (%d erwartet, %d berechnet), Datei msgid "%s: unrecognized section name: \"%s\"\n" msgstr "%s: unbekannter Abschnittsname: „%s“\n" -#: pg_backup_utils.c:56 pg_dump.c:520 pg_dump.c:537 pg_dumpall.c:305 -#: pg_dumpall.c:315 pg_dumpall.c:325 pg_dumpall.c:334 pg_dumpall.c:350 -#: pg_dumpall.c:408 pg_restore.c:281 pg_restore.c:297 pg_restore.c:309 +#: pg_backup_utils.c:56 pg_dump.c:521 pg_dump.c:538 pg_dumpall.c:300 +#: pg_dumpall.c:310 pg_dumpall.c:320 pg_dumpall.c:329 pg_dumpall.c:345 +#: pg_dumpall.c:403 pg_restore.c:277 pg_restore.c:293 pg_restore.c:305 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie „%s --help“ für weitere Informationen.\n" @@ -1312,52 +1305,57 @@ msgstr "Versuchen Sie „%s --help“ für weitere Informationen.\n" msgid "out of on_exit_nicely slots\n" msgstr "on_exit_nicely-Slots aufgebraucht\n" -#: pg_dump.c:535 pg_dumpall.c:313 pg_restore.c:295 +#: pg_dump.c:491 +#, c-format +msgid "compression level must be in range 0..9\n" +msgstr "Komprimierungsniveau muss im Bereich 0..9 sein\n" + +#: pg_dump.c:536 pg_dumpall.c:308 pg_restore.c:291 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: zu viele Kommandozeilenargumente (das erste ist „%s“)\n" -#: pg_dump.c:548 +#: pg_dump.c:549 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together\n" msgstr "Optionen -s/--schema-only und -a/--data-only können nicht zusammen verwendet werden\n" -#: pg_dump.c:554 +#: pg_dump.c:555 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together\n" msgstr "Optionen -c/--clean und -a/--data-only können nicht zusammen verwendet werden\n" -#: pg_dump.c:560 +#: pg_dump.c:561 #, c-format msgid "options --inserts/--column-inserts and -o/--oids cannot be used together\n" msgstr "Optionen --inserts/--column-inserts und -o/--oids können nicht zusammen verwendet werden\n" -#: pg_dump.c:561 +#: pg_dump.c:562 #, c-format msgid "(The INSERT command cannot set OIDs.)\n" msgstr "(Die INSERT-Anweisung kann OIDs nicht setzen.)\n" -#: pg_dump.c:566 +#: pg_dump.c:567 #, c-format msgid "option --if-exists requires option -c/--clean\n" msgstr "Option --if-exists benötigt Option -c/--clean\n" -#: pg_dump.c:594 +#: pg_dump.c:595 #, c-format msgid "%s: invalid number of parallel jobs\n" msgstr "%s: ungültige Anzahl paralleler Jobs\n" -#: pg_dump.c:598 +#: pg_dump.c:599 #, c-format msgid "parallel backup only supported by the directory format\n" msgstr "parallele Sicherung wird nur vom Ausgabeformat „Verzeichnis“ unterstützt\n" -#: pg_dump.c:608 +#: pg_dump.c:609 #, c-format msgid "could not open output file \"%s\" for writing\n" msgstr "konnte Ausgabedatei „%s“ nicht zum Schreiben öffnen\n" -#: pg_dump.c:667 +#: pg_dump.c:668 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1368,28 +1366,27 @@ msgstr "" "Verwenden Sie --no-synchronized-snapshots, wenn Sie keine synchronisierten\n" "Snapshots benötigen.\n" -#: pg_dump.c:674 -#, fuzzy, c-format -#| msgid "No per-database role settings support in this server version.\n" +#: pg_dump.c:675 +#, c-format msgid "Exported snapshots are not supported by this server version.\n" -msgstr "Keine Unterstützung für Rolleneinstellungen pro Datenbank in dieser Serverversion.\n" +msgstr "Exportierte Snapshots werden in dieser Serverversion nicht unterstützt.\n" -#: pg_dump.c:685 +#: pg_dump.c:686 #, c-format msgid "last built-in OID is %u\n" msgstr "letzte eingebaute OID ist %u\n" -#: pg_dump.c:694 +#: pg_dump.c:695 #, c-format msgid "No matching schemas were found\n" msgstr "Keine passenden Schemas gefunden\n" -#: pg_dump.c:706 +#: pg_dump.c:707 #, c-format msgid "No matching tables were found\n" msgstr "Keine passenden Tabellen gefunden\n" -#: pg_dump.c:860 +#: pg_dump.c:861 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1398,17 +1395,17 @@ msgstr "" "%s gibt eine Datenbank als Textdatei oder in anderen Formaten aus.\n" "\n" -#: pg_dump.c:861 pg_dumpall.c:553 pg_restore.c:436 +#: pg_dump.c:862 pg_dumpall.c:548 pg_restore.c:432 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_dump.c:862 +#: pg_dump.c:863 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [DBNAME]\n" -#: pg_dump.c:864 pg_dumpall.c:556 pg_restore.c:439 +#: pg_dump.c:865 pg_dumpall.c:551 pg_restore.c:435 #, c-format msgid "" "\n" @@ -1417,12 +1414,12 @@ msgstr "" "\n" "Allgemeine Optionen:\n" -#: pg_dump.c:865 +#: pg_dump.c:866 #, 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:866 +#: pg_dump.c:867 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1431,37 +1428,37 @@ msgstr "" " -F, --format=c|d|t|p Ausgabeformat (custom, d=Verzeichnis, tar,\n" " plain text)\n" -#: pg_dump.c:868 +#: pg_dump.c:869 #, 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:869 +#: pg_dump.c:870 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose „Verbose“-Modus\n" -#: pg_dump.c:870 pg_dumpall.c:558 +#: pg_dump.c:871 pg_dumpall.c:553 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_dump.c:871 +#: pg_dump.c:872 #, 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:872 pg_dumpall.c:559 +#: pg_dump.c:873 pg_dumpall.c:554 #, 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:873 pg_dumpall.c:560 +#: pg_dump.c:874 pg_dumpall.c:555 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_dump.c:875 pg_dumpall.c:561 +#: pg_dump.c:876 pg_dumpall.c:556 #, c-format msgid "" "\n" @@ -1470,49 +1467,49 @@ msgstr "" "\n" "Optionen die den Inhalt der Ausgabe kontrollieren:\n" -#: pg_dump.c:876 pg_dumpall.c:562 +#: pg_dump.c:877 pg_dumpall.c:557 #, 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:877 +#: pg_dump.c:878 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs Large Objects mit ausgeben\n" -#: pg_dump.c:878 pg_restore.c:450 +#: pg_dump.c:879 pg_restore.c:446 #, 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:879 +#: pg_dump.c:880 #, 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:880 +#: pg_dump.c:881 #, 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:881 +#: pg_dump.c:882 #, c-format msgid " -n, --schema=SCHEMA dump the named schema(s) only\n" msgstr " -n, --schema=SCHEMA nur das/die angegebene(n) Schema(s) ausgeben\n" -#: pg_dump.c:882 +#: pg_dump.c:883 #, c-format msgid " -N, --exclude-schema=SCHEMA do NOT dump the named schema(s)\n" msgstr " -N, --exclude-schema=SCHEMA das/die angegebene(n) Schema(s) NICHT ausgeben\n" -#: pg_dump.c:883 pg_dumpall.c:565 +#: pg_dump.c:884 pg_dumpall.c:560 #, c-format msgid " -o, --oids include OIDs in dump\n" msgstr " -o, --oids OIDs mit ausgeben\n" -#: pg_dump.c:884 +#: pg_dump.c:885 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1521,125 +1518,128 @@ msgstr "" " -O, --no-owner Wiederherstellung der Objekteigentümerschaft im\n" " „plain text“-Format auslassen\n" -#: pg_dump.c:886 pg_dumpall.c:568 +#: pg_dump.c:887 pg_dumpall.c:563 #, 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:887 +#: pg_dump.c:888 #, 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:888 +#: pg_dump.c:889 #, c-format msgid " -t, --table=TABLE dump the named table(s) only\n" msgstr " -t, --table=TABELLE nur die angegebene(n) Tabelle(n) ausgeben\n" -#: pg_dump.c:889 +#: pg_dump.c:890 #, c-format msgid " -T, --exclude-table=TABLE do NOT dump the named table(s)\n" msgstr " -T, --exclude-table=TABELLE die angegebene(n) Tabelle(n) NICHT ausgeben\n" -#: pg_dump.c:890 pg_dumpall.c:571 +#: pg_dump.c:891 pg_dumpall.c:566 #, 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:891 pg_dumpall.c:572 +#: pg_dump.c:892 pg_dumpall.c:567 #, 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:892 pg_dumpall.c:573 +#: pg_dump.c:893 pg_dumpall.c:568 #, 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:893 pg_dumpall.c:574 +#: pg_dump.c:894 pg_dumpall.c:569 #, 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:894 pg_dumpall.c:575 pg_restore.c:466 +#: pg_dump.c:895 pg_dumpall.c:570 pg_restore.c:462 #, 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:895 pg_restore.c:467 -#, fuzzy, c-format -#| msgid " --no-security-labels do not restore security labels\n" -msgid " --enable-row-security enable row level security\n" -msgstr " --no-security-labels Security-Labels nicht wiederherstellen\n" - #: pg_dump.c:896 #, c-format +msgid "" +" --enable-row-security enable row security (dump only content user has\n" +" access to)\n" +msgstr "" +" --enable-row-security Sicherheit auf Zeilenebene einschalten (nur Daten\n" +" ausgeben, auf die der Benutzer Zugriff hat)\n" + +#: pg_dump.c:898 +#, c-format msgid " --exclude-table-data=TABLE do NOT dump data for the named table(s)\n" msgstr " --exclude-table-data=TABELLE Daten der angegebenen Tabelle(n) NICHT ausgeben\n" -#: pg_dump.c:897 pg_dumpall.c:576 pg_restore.c:468 +#: pg_dump.c:899 pg_dumpall.c:571 pg_restore.c:464 #, 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:898 pg_dumpall.c:577 +#: pg_dump.c:900 pg_dumpall.c:572 #, 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:899 pg_dumpall.c:578 +#: pg_dump.c:901 pg_dumpall.c:573 #, 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:900 +#: pg_dump.c:902 #, 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:901 pg_dumpall.c:579 +#: pg_dump.c:903 pg_dumpall.c:574 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces Tablespace-Zuordnungen nicht ausgeben\n" -#: pg_dump.c:902 pg_dumpall.c:580 +#: pg_dump.c:904 pg_dumpall.c:575 #, 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:903 pg_dumpall.c:581 +#: pg_dump.c:905 pg_dumpall.c:576 #, 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:904 +#: pg_dump.c:906 #, 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:905 +#: pg_dump.c:907 #, 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:906 +#: pg_dump.c:908 #, c-format -msgid " --snapshot=SNAPSHOT use given synchronous snapshot for the dump\n" -msgstr "" +msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" +msgstr " --snapshot=SNAPSHOT angegebenen Snapshot für den Dump verwenden\n" -#: pg_dump.c:907 pg_dumpall.c:582 pg_restore.c:474 +#: pg_dump.c:909 pg_dumpall.c:577 pg_restore.c:470 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1651,7 +1651,7 @@ msgstr "" " OWNER Befehle verwenden, um Eigentümerschaft zu\n" " setzen\n" -#: pg_dump.c:911 pg_dumpall.c:586 pg_restore.c:478 +#: pg_dump.c:913 pg_dumpall.c:581 pg_restore.c:474 #, c-format msgid "" "\n" @@ -1660,42 +1660,42 @@ msgstr "" "\n" "Verbindungsoptionen:\n" -#: pg_dump.c:912 +#: pg_dump.c:914 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=DBNAME auszugebende Datenbank\n" -#: pg_dump.c:913 pg_dumpall.c:588 pg_restore.c:479 +#: pg_dump.c:915 pg_dumpall.c:583 pg_restore.c:475 #, 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:914 pg_dumpall.c:590 pg_restore.c:480 +#: pg_dump.c:916 pg_dumpall.c:585 pg_restore.c:476 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT Portnummer des Datenbankservers\n" -#: pg_dump.c:915 pg_dumpall.c:591 pg_restore.c:481 +#: pg_dump.c:917 pg_dumpall.c:586 pg_restore.c:477 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME Datenbankbenutzername\n" -#: pg_dump.c:916 pg_dumpall.c:592 pg_restore.c:482 +#: pg_dump.c:918 pg_dumpall.c:587 pg_restore.c:478 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password niemals nach Passwort fragen\n" -#: pg_dump.c:917 pg_dumpall.c:593 pg_restore.c:483 +#: pg_dump.c:919 pg_dumpall.c:588 pg_restore.c:479 #, 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:918 pg_dumpall.c:594 +#: pg_dump.c:920 pg_dumpall.c:589 #, 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:920 +#: pg_dump.c:922 #, c-format msgid "" "\n" @@ -1708,366 +1708,356 @@ msgstr "" "PGDATABASE verwendet.\n" "\n" -#: pg_dump.c:922 pg_dumpall.c:598 pg_restore.c:490 +#: pg_dump.c:924 pg_dumpall.c:593 pg_restore.c:486 #, c-format msgid "Report bugs to .\n" msgstr "Berichten Sie Fehler an .\n" -#: pg_dump.c:941 +#: pg_dump.c:943 #, c-format msgid "invalid client encoding \"%s\" specified\n" msgstr "ungültige Clientkodierung „%s“ angegeben\n" -#: pg_dump.c:1125 +#: pg_dump.c:1128 #, c-format msgid "invalid output format \"%s\" specified\n" msgstr "ungültiges Ausgabeformat „%s“ angegeben\n" -#: pg_dump.c:1147 +#: pg_dump.c:1150 #, c-format msgid "server version must be at least 7.3 to use schema selection switches\n" msgstr "Serverversion muss mindestens 7.3 sein um Schemas auswählen zu können\n" -#: pg_dump.c:1441 -#, fuzzy, c-format -#| msgid "dumping contents of table %s\n" -msgid "dumping contents of table \"%s\".\"%s\"\n" -msgstr "gebe Inhalt der Tabelle %s aus\n" +#: pg_dump.c:1439 +#, c-format +msgid "dumping contents of table \"%s.%s\"\n" +msgstr "gebe Inhalt der Tabelle „%s.%s“ aus\n" -#: pg_dump.c:1565 +#: pg_dump.c:1563 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed.\n" msgstr "Ausgabe des Inhalts der Tabelle „%s“ fehlgeschlagen: PQgetCopyData() fehlgeschlagen.\n" -#: pg_dump.c:1566 pg_dump.c:1576 +#: pg_dump.c:1564 pg_dump.c:1574 #, c-format msgid "Error message from server: %s" msgstr "Fehlermeldung vom Server: %s" -#: pg_dump.c:1567 pg_dump.c:1577 +#: pg_dump.c:1565 pg_dump.c:1575 #, c-format msgid "The command was: %s\n" msgstr "Die Anweisung war: %s\n" -#: pg_dump.c:1575 +#: pg_dump.c:1573 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed.\n" msgstr "Ausgabe des Inhalts der Tabelle „%s“ fehlgeschlagen: PQgetResult() fehlgeschlagen.\n" -#: pg_dump.c:2214 +#: pg_dump.c:2212 #, c-format msgid "saving database definition\n" msgstr "sichere Datenbankdefinition\n" -#: pg_dump.c:2547 +#: pg_dump.c:2545 #, c-format msgid "saving encoding = %s\n" msgstr "sichere Kodierung = %s\n" -#: pg_dump.c:2574 +#: pg_dump.c:2572 #, c-format msgid "saving standard_conforming_strings = %s\n" msgstr "sichere standard_conforming_strings = %s\n" -#: pg_dump.c:2607 +#: pg_dump.c:2605 #, c-format msgid "reading large objects\n" msgstr "lese Large Objects\n" -#: pg_dump.c:2739 +#: pg_dump.c:2737 #, c-format msgid "saving large objects\n" msgstr "sichere Large Objects\n" -#: pg_dump.c:2786 +#: pg_dump.c:2784 #, c-format msgid "error reading large object %u: %s" msgstr "Fehler beim Lesen von Large Object %u: %s" -#: pg_dump.c:2838 -#, fuzzy, c-format -#| msgid "reading indexes for table \"%s\"\n" -msgid "reading row security enabled for table \"%s\".\"%s\"\n" -msgstr "lese Indexe von Tabelle „%s“\n" - -#: pg_dump.c:2869 -#, fuzzy, c-format -#| msgid "reading indexes for table \"%s\"\n" -msgid "reading policies for table \"%s\".\"%s\"\n" -msgstr "lese Indexe von Tabelle „%s“\n" - -#: pg_dump.c:2999 -#, fuzzy, c-format -#| msgid "unexpected message type \"%c\"" +#: pg_dump.c:2836 +#, c-format +msgid "reading row security enabled for table \"%s.%s\"\n" +msgstr "lese Einstellung von Sicherheit auf Zeilenebene für Tabelle „%s.%s“\n" + +#: pg_dump.c:2867 +#, c-format +msgid "reading policies for table \"%s.%s\"\n" +msgstr "lese Policys von Tabelle „%s.%s“\n" + +#: pg_dump.c:2997 +#, c-format msgid "unexpected policy command type: \"%s\"\n" -msgstr "unerwarteter Message-Typ „%c“" +msgstr "unerwarteter Policy-Befehlstyp: „%s“\n" -#: pg_dump.c:3214 +#: pg_dump.c:3212 #, c-format msgid "could not find parent extension for %s\n" msgstr "konnte Erweiterung, zu der %s gehört, nicht finden\n" -#: pg_dump.c:3317 +#: pg_dump.c:3315 #, c-format msgid "WARNING: owner of schema \"%s\" appears to be invalid\n" msgstr "WARNUNG: Eigentümer des Schemas „%s“ scheint ungültig zu sein\n" -#: pg_dump.c:3360 +#: pg_dump.c:3358 #, c-format msgid "schema with OID %u does not exist\n" msgstr "Schema mit OID %u existiert nicht\n" -#: pg_dump.c:3710 +#: pg_dump.c:3708 #, c-format msgid "WARNING: owner of data type \"%s\" appears to be invalid\n" msgstr "WARNUNG: Eigentümer des Datentypen „%s“ scheint ungültig zu sein\n" -#: pg_dump.c:3821 +#: pg_dump.c:3819 #, c-format msgid "WARNING: owner of operator \"%s\" appears to be invalid\n" msgstr "WARNUNG: Eigentümer des Operatoren „%s“ scheint ungültig zu sein\n" -#: pg_dump.c:4080 +#: pg_dump.c:4078 #, c-format msgid "WARNING: owner of operator class \"%s\" appears to be invalid\n" msgstr "WARNUNG: Eigentümer der Operatorklasse „%s“ scheint ungültig zu sein\n" -#: pg_dump.c:4168 +#: pg_dump.c:4166 #, c-format msgid "WARNING: owner of operator family \"%s\" appears to be invalid\n" msgstr "WARNUNG: Eigentümer der Operatorfamilie „%s“ scheint ungültig zu sein\n" -#: pg_dump.c:4306 +#: pg_dump.c:4304 #, c-format msgid "WARNING: owner of aggregate function \"%s\" appears to be invalid\n" msgstr "WARNUNG: Eigentümer der Aggregatfunktion „%s“ scheint ungültig zu sein\n" -#: pg_dump.c:4488 +#: pg_dump.c:4486 #, c-format msgid "WARNING: owner of function \"%s\" appears to be invalid\n" msgstr "WARNUNG: Eigentümer der Funktion „%s“ scheint ungültig zu sein\n" -#: pg_dump.c:5161 +#: pg_dump.c:5159 #, c-format msgid "WARNING: owner of table \"%s\" appears to be invalid\n" msgstr "WARNUNG: Eigentümer der Tabelle „%s“ scheint ungültig zu sein\n" -#: pg_dump.c:5313 -#, fuzzy, c-format -#| msgid "reading indexes for table \"%s\"\n" -msgid "reading indexes for table \"%s\".\"%s\"\n" -msgstr "lese Indexe von Tabelle „%s“\n" +#: pg_dump.c:5311 +#, c-format +msgid "reading indexes for table \"%s.%s\"\n" +msgstr "lese Indexe von Tabelle „%s.%s“\n" -#: pg_dump.c:5680 -#, fuzzy, c-format -#| msgid "reading foreign key constraints for table \"%s\"\n" -msgid "reading foreign key constraints for table \"%s\".\"%s\"\n" -msgstr "lese Fremdschlüssel-Constraints von Tabelle „%s“\n" +#: pg_dump.c:5678 +#, c-format +msgid "reading foreign key constraints for table \"%s.%s\"\n" +msgstr "lese Fremdschlüssel-Constraints von Tabelle „%s.%s“\n" -#: pg_dump.c:5926 +#: pg_dump.c:5924 #, c-format msgid "failed sanity check, parent table OID %u of pg_rewrite entry OID %u not found\n" msgstr "Sanity-Check fehlgeschlagen, Elterntabelle %u von pg_rewrite-Eintrag OID %u nicht gefunden\n" -#: pg_dump.c:6019 -#, fuzzy, c-format -#| msgid "reading triggers for table \"%s\"\n" -msgid "reading triggers for table \"%s\".\"%s\"\n" -msgstr "lese Trigger von Tabelle „%s“\n" +#: pg_dump.c:6017 +#, c-format +msgid "reading triggers for table \"%s.%s\"\n" +msgstr "lese Trigger von Tabelle „%s.%s“\n" -#: pg_dump.c:6181 +#: pg_dump.c:6179 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)\n" msgstr "Anfrage ergab NULL als Name der Tabelle auf die sich Fremdschlüssel-Trigger „%s“ von Tabelle „%s“ bezieht (OID der Tabelle: %u)\n" -#: pg_dump.c:6743 -#, fuzzy, c-format -#| msgid "finding the columns and types of table \"%s\"\n" -msgid "finding the columns and types of table \"%s\".\"%s\"\n" -msgstr "finde Spalten und Typen von Tabelle „%s“\n" +#: pg_dump.c:6751 +#, c-format +msgid "finding the columns and types of table \"%s.%s\"\n" +msgstr "finde Spalten und Typen von Tabelle „%s.%s“\n" -#: pg_dump.c:6922 +#: pg_dump.c:6930 #, c-format msgid "invalid column numbering in table \"%s\"\n" msgstr "ungültige Spaltennummerierung in Tabelle „%s“\n" -#: pg_dump.c:6956 -#, fuzzy, c-format -#| msgid "finding default expressions of table \"%s\"\n" -msgid "finding default expressions of table \"%s\".\"%s\"\n" -msgstr "finde DEFAULT-Ausdrucke von Tabelle „%s“\n" +#: pg_dump.c:6964 +#, c-format +msgid "finding default expressions of table \"%s.%s\"\n" +msgstr "finde DEFAULT-Ausdrücke von Tabelle „%s.%s“\n" -#: pg_dump.c:7009 +#: pg_dump.c:7017 #, c-format msgid "invalid adnum value %d for table \"%s\"\n" msgstr "ungültiger adnum-Wert %d für Tabelle „%s“\n" -#: pg_dump.c:7081 -#, fuzzy, c-format -#| msgid "finding check constraints for table \"%s\"\n" -msgid "finding check constraints for table \"%s\".\"%s\"\n" -msgstr "finde Check-Constraints für Tabelle „%s“\n" +#: pg_dump.c:7089 +#, c-format +msgid "finding check constraints for table \"%s.%s\"\n" +msgstr "finde Check-Constraints für Tabelle „%s.%s“\n" -#: pg_dump.c:7177 +#: pg_dump.c:7185 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d\n" msgid_plural "expected %d check constraints on table \"%s\" but found %d\n" msgstr[0] "%d Check-Constraint für Tabelle %s erwartet, aber %d gefunden\n" msgstr[1] "%d Check-Constraints für Tabelle %s erwartet, aber %d gefunden\n" -#: pg_dump.c:7181 +#: pg_dump.c:7189 #, c-format msgid "(The system catalogs might be corrupted.)\n" msgstr "(Die Systemkataloge sind wahrscheinlich verfälscht.)\n" -#: pg_dump.c:8556 +#: pg_dump.c:8566 #, c-format msgid "WARNING: typtype of data type \"%s\" appears to be invalid\n" msgstr "WARNUNG: typtype des Datentypen „%s“ scheint ungültig zu sein\n" -#: pg_dump.c:10015 +#: pg_dump.c:10092 #, c-format msgid "WARNING: bogus value in proargmodes array\n" msgstr "WARNUNG: unsinniger Wert in proargmodes-Array\n" -#: pg_dump.c:10366 +#: pg_dump.c:10443 #, c-format msgid "WARNING: could not parse proallargtypes array\n" msgstr "WARNUNG: konnte proallargtypes-Array nicht interpretieren\n" -#: pg_dump.c:10382 +#: pg_dump.c:10459 #, c-format msgid "WARNING: could not parse proargmodes array\n" msgstr "WARNUNG: konnte proargmodes-Array nicht interpretieren\n" -#: pg_dump.c:10396 +#: pg_dump.c:10473 #, c-format msgid "WARNING: could not parse proargnames array\n" msgstr "WARNUNG: konnte proargnames-Array nicht interpretieren\n" -#: pg_dump.c:10407 +#: pg_dump.c:10484 #, c-format msgid "WARNING: could not parse proconfig array\n" msgstr "WARNUNG: konnte proconfig-Array nicht interpretieren\n" -#: pg_dump.c:10478 +#: pg_dump.c:10555 #, c-format msgid "unrecognized provolatile value for function \"%s\"\n" msgstr "ungültiger provolatile-Wert für Funktion „%s“\n" -#: pg_dump.c:10654 +#: pg_dump.c:10731 #, c-format msgid "WARNING: bogus value in pg_cast.castfunc or pg_cast.castmethod field\n" msgstr "WARNUNG: unsinniger Wert in Feld pg_cast.castfunc oder pg_cast.castmethod\n" -#: pg_dump.c:10657 +#: pg_dump.c:10734 #, c-format msgid "WARNING: bogus value in pg_cast.castmethod field\n" msgstr "WARNUNG: unsinniger Wert in Feld pg_cast.castmethod\n" -#: pg_dump.c:10740 +#: pg_dump.c:10817 #, c-format msgid "WARNING: bogus transform definition, at least one of trffromsql and trftosql should be nonzero\n" -msgstr "" +msgstr "WARNUNG: unsinnige Transformationsdefinition, mindestens eins von trffromsql und trftosql sollte nicht null sein\n" -#: pg_dump.c:10758 +#: pg_dump.c:10834 #, c-format msgid "WARNING: bogus value in pg_transform.trffromsql field\n" msgstr "WARNUNG: unsinniger Wert in Feld pg_transform.trffromsql\n" -#: pg_dump.c:10780 +#: pg_dump.c:10855 #, c-format msgid "WARNING: bogus value in pg_transform.trftosql field\n" msgstr "WARNUNG: unsinniger Wert in Feld pg_transform.trftosql\n" -#: pg_dump.c:11166 +#: pg_dump.c:11241 #, c-format msgid "WARNING: could not find operator with OID %s\n" msgstr "WARNUNG: konnte Operator mit OID %s nicht finden\n" -#: pg_dump.c:12341 +#: pg_dump.c:12416 #, c-format msgid "WARNING: aggregate function %s could not be dumped correctly for this database version; ignored\n" msgstr "WARNUNG: Aggregatfunktion %s konnte für diese Datenbankversion nicht korrekt ausgegeben werden - ignoriert\n" -#: pg_dump.c:13166 +#: pg_dump.c:13241 #, c-format msgid "unrecognized object type in default privileges: %d\n" msgstr "unbekannter Objekttyp in den Vorgabeprivilegien: %d\n" -#: pg_dump.c:13181 +#: pg_dump.c:13256 #, c-format msgid "could not parse default ACL list (%s)\n" msgstr "konnte Vorgabe-ACL-Liste (%s) nicht interpretieren\n" -#: pg_dump.c:13236 +#: pg_dump.c:13311 #, c-format msgid "could not parse ACL list (%s) for object \"%s\" (%s)\n" msgstr "konnte ACL-Zeichenkette (%s) für Objekt „%s“ (%s) nicht interpretieren\n" -#: pg_dump.c:13653 +#: pg_dump.c:13728 #, c-format msgid "query to obtain definition of view \"%s\" returned no data\n" msgstr "Anfrage um die Definition der Sicht „%s“ zu ermitteln lieferte keine Daten\n" -#: pg_dump.c:13656 +#: pg_dump.c:13731 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition\n" msgstr "Anfrage um die Definition der Sicht „%s“ zu ermitteln lieferte mehr als eine Definition\n" -#: pg_dump.c:13663 +#: pg_dump.c:13738 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)\n" msgstr "Definition der Sicht „%s“ scheint leer zu sein (Länge null)\n" -#: pg_dump.c:14400 +#: pg_dump.c:14475 #, c-format msgid "invalid column number %d for table \"%s\"\n" msgstr "ungültige Spaltennummer %d in Tabelle „%s“\n" -#: pg_dump.c:14524 +#: pg_dump.c:14599 #, c-format msgid "missing index for constraint \"%s\"\n" msgstr "fehlender Index für Constraint „%s“\n" -#: pg_dump.c:14711 +#: pg_dump.c:14786 #, c-format msgid "unrecognized constraint type: %c\n" msgstr "unbekannter Constraint-Typ: %c\n" -#: pg_dump.c:14860 pg_dump.c:15024 +#: pg_dump.c:14935 pg_dump.c:15099 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)\n" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)\n" msgstr[0] "Anfrage nach Daten der Sequenz %s ergab %d Zeile (erwartete 1)\n" msgstr[1] "Anfrage nach Daten der Sequenz %s ergab %d Zeilen (erwartete 1)\n" -#: pg_dump.c:14871 +#: pg_dump.c:14946 #, c-format msgid "query to get data of sequence \"%s\" returned name \"%s\"\n" msgstr "Anfrage nach Daten der Sequenz %s ergab Name „%s“\n" -#: pg_dump.c:15119 +#: pg_dump.c:15194 #, c-format msgid "unexpected tgtype value: %d\n" msgstr "unerwarteter tgtype-Wert: %d\n" -#: pg_dump.c:15201 +#: pg_dump.c:15276 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"\n" msgstr "fehlerhafte Argumentzeichenkette (%s) für Trigger „%s“ von Tabelle „%s“\n" -#: pg_dump.c:15389 +#: pg_dump.c:15463 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned\n" msgstr "Anfrage nach Regel „%s“ der Tabelle „%s“ fehlgeschlagen: falsche Anzahl Zeilen zurückgegeben\n" -#: pg_dump.c:15766 +#: pg_dump.c:15842 #, c-format msgid "reading dependency data\n" msgstr "lese Abhängigkeitsdaten\n" -#: pg_dump.c:16313 +#: pg_dump.c:16389 #, c-format msgid "query returned %d row instead of one: %s\n" msgid_plural "query returned %d rows instead of one: %s\n" @@ -2096,30 +2086,32 @@ msgstr "konnte Abhängigkeitsschleife nicht bestimmen\n" #: pg_dump_sort.c:1250 #, c-format -msgid "NOTICE: there are circular foreign-key constraints among these table(s):\n" -msgstr "HINWEIS: Es gibt zirkuläre Fremdschlüssel-Constraints zwischen dieser/n Tabelle(n):\n" +msgid "NOTICE: there are circular foreign-key constraints on this table:\n" +msgid_plural "NOTICE: there are circular foreign-key constraints among these tables:\n" +msgstr[0] "HINWEIS: Es gibt zirkuläre Fremdschlüssel-Constraints für diese Tabelle:\n" +msgstr[1] "HINWEIS: Es gibt zirkuläre Fremdschlüssel-Constraints zwischen diesen Tabellen:\n" -#: pg_dump_sort.c:1252 pg_dump_sort.c:1272 +#: pg_dump_sort.c:1254 pg_dump_sort.c:1274 #, c-format msgid " %s\n" msgstr " %s\n" -#: pg_dump_sort.c:1253 +#: pg_dump_sort.c:1255 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints.\n" msgstr "Möglicherweise kann der Dump nur wiederhergestellt werden, wenn --disable-triggers verwendet wird oder die Constraints vorübergehend entfernt werden.\n" -#: pg_dump_sort.c:1254 +#: pg_dump_sort.c:1256 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem.\n" msgstr "Führen Sie einen vollen Dump statt eines Dumps mit --data-only durch, um dieses Problem zu vermeiden.\n" -#: pg_dump_sort.c:1266 +#: pg_dump_sort.c:1268 #, c-format msgid "WARNING: could not resolve dependency loop among these items:\n" msgstr "WARNUNG: konnte Abhängigkeitsschleife zwischen diesen Elementen nicht auflösen:\n" -#: pg_dumpall.c:182 +#: pg_dumpall.c:181 #, c-format msgid "" "The program \"pg_dump\" is needed by %s but was not found in the\n" @@ -2130,7 +2122,7 @@ msgstr "" "selben Verzeichnis wie „%s“ gefunden.\n" "Prüfen Sie Ihre Installation.\n" -#: pg_dumpall.c:189 +#: pg_dumpall.c:188 #, c-format msgid "" "The program \"pg_dump\" was found by \"%s\"\n" @@ -2141,32 +2133,32 @@ msgstr "" "aber war nicht die gleiche Version wie %s.\n" "Prüfen Sie Ihre Installation.\n" -#: pg_dumpall.c:323 +#: pg_dumpall.c:318 #, c-format msgid "%s: options -g/--globals-only and -r/--roles-only cannot be used together\n" msgstr "%s: Optionen -g/--globals-only und -r/--roles-only können nicht zusammen verwendet werden\n" -#: pg_dumpall.c:332 +#: pg_dumpall.c:327 #, c-format msgid "%s: options -g/--globals-only and -t/--tablespaces-only cannot be used together\n" msgstr "%s: Optionen -g/--globals-only und -t/--tablespaces-only können nicht zusammen verwendet werden\n" -#: pg_dumpall.c:341 pg_restore.c:347 +#: pg_dumpall.c:336 pg_restore.c:343 #, c-format msgid "%s: option --if-exists requires option -c/--clean\n" msgstr "%s: Option --if-exists benötigt Option -c/--clean\n" -#: pg_dumpall.c:348 +#: pg_dumpall.c:343 #, c-format msgid "%s: options -r/--roles-only and -t/--tablespaces-only cannot be used together\n" msgstr "%s: Optionen -r/--roles-only und -t/--tablespaces-only können nicht zusammen verwendet werden\n" -#: pg_dumpall.c:390 pg_dumpall.c:1879 +#: pg_dumpall.c:385 pg_dumpall.c:1892 #, c-format msgid "%s: could not connect to database \"%s\"\n" msgstr "%s: konnte nicht mit der Datenbank „%s“ verbinden\n" -#: pg_dumpall.c:405 +#: pg_dumpall.c:400 #, c-format msgid "" "%s: could not connect to databases \"postgres\" or \"template1\"\n" @@ -2175,12 +2167,12 @@ msgstr "" "%s: konnte nicht mit Datenbank „postgres“ oder „template1“ verbinden\n" "Bitte geben Sie eine alternative Datenbank an.\n" -#: pg_dumpall.c:422 +#: pg_dumpall.c:417 #, c-format msgid "%s: could not open the output file \"%s\": %s\n" msgstr "%s: konnte die Ausgabedatei „%s“ nicht öffnen: %s\n" -#: pg_dumpall.c:552 +#: pg_dumpall.c:547 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2189,63 +2181,63 @@ msgstr "" "%s gibt einen PostgreSQL-Datenbankcluster in eine SQL-Skriptdatei aus.\n" "\n" -#: pg_dumpall.c:554 +#: pg_dumpall.c:549 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" -#: pg_dumpall.c:557 +#: pg_dumpall.c:552 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=DATEINAME Name der Ausgabedatei\n" -#: pg_dumpall.c:563 +#: pg_dumpall.c:558 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean Datenbanken vor der Wiedererstellung löschen\n" -#: pg_dumpall.c:564 +#: pg_dumpall.c:559 #, 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:566 pg_restore.c:458 +#: pg_dumpall.c:561 pg_restore.c:454 #, 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:567 +#: pg_dumpall.c:562 #, 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:569 +#: pg_dumpall.c:564 #, 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:570 +#: pg_dumpall.c:565 #, 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:587 +#: pg_dumpall.c:582 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=VERBDG mit angegebenen Verbindungsparametern verbinden\n" -#: pg_dumpall.c:589 +#: pg_dumpall.c:584 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=DBNAME alternative Standarddatenbank\n" -#: pg_dumpall.c:596 +#: pg_dumpall.c:591 #, c-format msgid "" "\n" @@ -2258,102 +2250,102 @@ msgstr "" "Standardausgabe geschrieben.\n" "\n" -#: pg_dumpall.c:1123 +#: pg_dumpall.c:1118 #, c-format msgid "%s: could not parse ACL list (%s) for tablespace \"%s\"\n" msgstr "%s: konnte ACL-Zeichenkette (%s) für Tablespace „%s“ nicht interpretieren\n" -#: pg_dumpall.c:1436 +#: pg_dumpall.c:1449 #, c-format msgid "%s: could not parse ACL list (%s) for database \"%s\"\n" msgstr "%s: konnte ACL-Zeichenkette (%s) für Datenbank „%s“ nicht interpretieren\n" -#: pg_dumpall.c:1646 +#: pg_dumpall.c:1659 #, c-format msgid "%s: dumping database \"%s\"...\n" msgstr "%s: Ausgabe der Datenbank „%s“...\n" -#: pg_dumpall.c:1667 +#: pg_dumpall.c:1680 #, c-format msgid "%s: pg_dump failed on database \"%s\", exiting\n" msgstr "%s: pg_dump für Datenbank „%s“ fehlgeschlagen; beende\n" -#: pg_dumpall.c:1676 +#: pg_dumpall.c:1689 #, c-format msgid "%s: could not re-open the output file \"%s\": %s\n" msgstr "%s: konnte die Ausgabedatei „%s“ nicht neu öffnen: %s\n" -#: pg_dumpall.c:1721 +#: pg_dumpall.c:1734 #, c-format msgid "%s: running \"%s\"\n" msgstr "%s: führe „%s“ aus\n" -#: pg_dumpall.c:1901 +#: pg_dumpall.c:1914 #, c-format msgid "%s: could not connect to database \"%s\": %s\n" msgstr "%s: konnte nicht mit der Datenbank „%s“ verbinden: %s\n" -#: pg_dumpall.c:1931 +#: pg_dumpall.c:1944 #, c-format msgid "%s: could not get server version\n" msgstr "%s: konnte Version des Servers nicht ermitteln\n" -#: pg_dumpall.c:1937 +#: pg_dumpall.c:1950 #, c-format msgid "%s: could not parse server version \"%s\"\n" msgstr "%s: konnte Versionszeichenkette „%s“ nicht entziffern\n" -#: pg_dumpall.c:2015 pg_dumpall.c:2041 +#: pg_dumpall.c:2028 pg_dumpall.c:2054 #, c-format msgid "%s: executing %s\n" msgstr "%s: führe %s aus\n" -#: pg_dumpall.c:2021 pg_dumpall.c:2047 +#: pg_dumpall.c:2034 pg_dumpall.c:2060 #, c-format msgid "%s: query failed: %s" msgstr "%s: Anfrage fehlgeschlagen: %s" -#: pg_dumpall.c:2023 pg_dumpall.c:2049 +#: pg_dumpall.c:2036 pg_dumpall.c:2062 #, c-format msgid "%s: query was: %s\n" msgstr "%s: Anfrage war: %s\n" -#: pg_restore.c:307 +#: pg_restore.c:303 #, c-format msgid "%s: options -d/--dbname and -f/--file cannot be used together\n" msgstr "%s: Optionen -d/--dbname und -f/--file können nicht zusammen verwendet werden\n" -#: pg_restore.c:318 +#: pg_restore.c:314 #, c-format msgid "%s: options -s/--schema-only and -a/--data-only cannot be used together\n" msgstr "%s: Optionen -s/--schema-only und -a/--data-only können nicht zusammen verwendet werden\n" -#: pg_restore.c:325 +#: pg_restore.c:321 #, c-format msgid "%s: options -c/--clean and -a/--data-only cannot be used together\n" msgstr "%s: Optionen -c/--clean und -a/--data-only können nicht zusammen verwendet werden\n" -#: pg_restore.c:333 +#: pg_restore.c:329 #, c-format msgid "%s: cannot specify both --single-transaction and multiple jobs\n" msgstr "%s: --single-transaction und mehrere Jobs können nicht zusammen verwendet werden\n" -#: pg_restore.c:373 +#: pg_restore.c:369 #, c-format msgid "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"\n" msgstr "unbekanntes Archivformat „%s“; bitte „c“, „d“ oder „t“ angeben\n" -#: pg_restore.c:403 +#: pg_restore.c:399 #, c-format msgid "%s: maximum number of parallel jobs is %d\n" msgstr "%s: maximale Anzahl paralleler Jobs ist %d\n" -#: pg_restore.c:421 +#: pg_restore.c:417 #, c-format msgid "WARNING: errors ignored on restore: %d\n" msgstr "WARNUNG: bei Wiederherstellung ignorierte Fehler: %d\n" -#: pg_restore.c:435 +#: pg_restore.c:431 #, c-format msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" @@ -2363,47 +2355,47 @@ msgstr "" "gesichert wurde.\n" "\n" -#: pg_restore.c:437 +#: pg_restore.c:433 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [OPTION]... [DATEI]\n" -#: pg_restore.c:440 +#: pg_restore.c:436 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr " -d, --dbname=NAME mit angegebener Datenbank verbinden\n" -#: pg_restore.c:441 +#: pg_restore.c:437 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=DATEINAME Name der Ausgabedatei\n" -#: pg_restore.c:442 +#: pg_restore.c:438 #, 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:443 +#: pg_restore.c:439 #, 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:444 +#: pg_restore.c:440 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose „Verbose“-Modus\n" -#: pg_restore.c:445 +#: pg_restore.c:441 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_restore.c:446 +#: pg_restore.c:442 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_restore.c:448 +#: pg_restore.c:444 #, c-format msgid "" "\n" @@ -2412,34 +2404,34 @@ msgstr "" "\n" "Optionen die die Wiederherstellung kontrollieren:\n" -#: pg_restore.c:449 +#: pg_restore.c:445 #, 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:451 +#: pg_restore.c:447 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create Zieldatenbank erzeugen\n" -#: pg_restore.c:452 +#: pg_restore.c:448 #, 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:453 +#: pg_restore.c:449 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=NAME benannten Index wiederherstellen\n" -#: pg_restore.c:454 +#: pg_restore.c:450 #, 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:455 +#: pg_restore.c:451 #, c-format msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" @@ -2449,47 +2441,52 @@ msgstr "" " Inhaltsverzeichnis aus dieser Datei zur Auswahl oder\n" " Sortierung der Ausgabe verwenden\n" -#: pg_restore.c:457 +#: pg_restore.c:453 #, 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:459 +#: pg_restore.c:455 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr " -P, --function=NAME(args) benannte Funktion wiederherstellen\n" -#: pg_restore.c:460 +#: pg_restore.c:456 #, 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:461 +#: pg_restore.c:457 #, 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:462 +#: pg_restore.c:458 #, c-format msgid " -t, --table=NAME restore named table\n" msgstr " -t, --table=NAME benannte Tabelle wiederherstellen\n" -#: pg_restore.c:463 +#: pg_restore.c:459 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=NAME benannten Trigger wiederherstellen\n" -#: pg_restore.c:464 +#: pg_restore.c:460 #, 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:465 +#: pg_restore.c:461 #, 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:469 +#: pg_restore.c:463 +#, c-format +msgid " --enable-row-security enable row security\n" +msgstr " --enable-row-security Sicherheit auf Zeilenebene einschalten\n" + +#: pg_restore.c:465 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not be\n" @@ -2498,29 +2495,29 @@ msgstr "" " --no-data-for-failed-tables Daten für Tabellen, die nicht erzeugt werden\n" " konnten, nicht wiederherstellen\n" -#: pg_restore.c:471 +#: pg_restore.c:467 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels Security-Labels nicht wiederherstellen\n" -#: pg_restore.c:472 +#: pg_restore.c:468 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces Tablespace-Zuordnungen nicht wiederherstellen\n" -#: pg_restore.c:473 +#: pg_restore.c:469 #, 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:484 +#: pg_restore.c:480 #, 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:486 +#: pg_restore.c:482 #, c-format msgid "" "\n" @@ -2531,7 +2528,7 @@ msgstr "" "Die Optionen -I, -n, -P, -t, -T und --section können kombiniert und mehrfach\n" "angegeben werden, um mehrere Objekte auszuwählen.\n" -#: pg_restore.c:489 +#: pg_restore.c:485 #, c-format msgid "" "\n" diff --git a/src/bin/pg_dump/po/es.po b/src/bin/pg_dump/po/es.po index 0c68763381377..d52febde6f668 100644 --- a/src/bin/pg_dump/po/es.po +++ b/src/bin/pg_dump/po/es.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_dump (PostgreSQL 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:42+0000\n" -"PO-Revision-Date: 2014-12-15 14:51-0300\n" +"POT-Creation-Date: 2015-10-04 00:43+0000\n" +"PO-Revision-Date: 2015-10-02 16:34-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL Español \n" "Language: es\n" @@ -57,14 +57,14 @@ msgstr "no se pudo leer el enlace simbólico «%s»" msgid "pclose failed: %s" msgstr "pclose falló: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 pg_backup_db.c:134 pg_backup_db.c:189 -#: pg_backup_db.c:233 pg_backup_db.c:279 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 pg_backup_db.c:135 pg_backup_db.c:190 +#: pg_backup_db.c:234 pg_backup_db.c:280 #, c-format msgid "out of memory\n" msgstr "memoria agotada\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" @@ -104,229 +104,239 @@ msgstr "el proceso hijo fue terminado por una señal %d" msgid "child process exited with unrecognized status %d" msgstr "el proceso hijo terminó con código no reconocido %d" -#: common.c:105 +#: common.c:109 #, c-format msgid "reading schemas\n" msgstr "leyendo esquemas\n" -#: common.c:116 +#: common.c:120 #, c-format msgid "reading user-defined tables\n" msgstr "leyendo las tablas definidas por el usuario\n" -#: common.c:124 +#: common.c:128 #, c-format msgid "reading extensions\n" msgstr "leyendo las extensiones\n" -#: common.c:128 +#: common.c:132 #, c-format msgid "reading user-defined functions\n" msgstr "leyendo las funciones definidas por el usuario\n" -#: common.c:134 +#: common.c:138 #, c-format msgid "reading user-defined types\n" msgstr "leyendo los tipos definidos por el usuario\n" -#: common.c:140 +#: common.c:144 #, c-format msgid "reading procedural languages\n" msgstr "leyendo los lenguajes procedurales\n" -#: common.c:144 +#: common.c:148 #, c-format msgid "reading user-defined aggregate functions\n" msgstr "leyendo las funciones de agregación definidas por el usuario\n" -#: common.c:148 +#: common.c:152 #, c-format msgid "reading user-defined operators\n" msgstr "leyendo los operadores definidos por el usuario\n" -#: common.c:153 +#: common.c:157 #, c-format msgid "reading user-defined operator classes\n" msgstr "leyendo las clases de operadores definidos por el usuario\n" -#: common.c:157 +#: common.c:161 #, c-format msgid "reading user-defined operator families\n" msgstr "leyendo las familias de operadores definidas por el usuario\n" -#: common.c:161 +#: common.c:165 #, c-format msgid "reading user-defined text search parsers\n" msgstr "" "leyendo los procesadores (parsers) de búsqueda en texto definidos\n" "por el usuario\n" -#: common.c:165 +#: common.c:169 #, c-format msgid "reading user-defined text search templates\n" msgstr "leyendo las plantillas de búsqueda en texto definidas por el usuario\n" -#: common.c:169 +#: common.c:173 #, c-format msgid "reading user-defined text search dictionaries\n" msgstr "leyendo los diccionarios de búsqueda en texto definidos por el usuario\n" -#: common.c:173 +#: common.c:177 #, c-format msgid "reading user-defined text search configurations\n" msgstr "leyendo las configuraciones de búsqueda en texto definidas por el usuario\n" -#: common.c:177 +#: common.c:181 #, c-format msgid "reading user-defined foreign-data wrappers\n" msgstr "leyendo los conectores de datos externos definidos por el usuario\n" -#: common.c:181 +#: common.c:185 #, c-format msgid "reading user-defined foreign servers\n" msgstr "leyendo los servidores foráneos definidas por el usuario\n" -#: common.c:185 +#: common.c:189 #, c-format msgid "reading default privileges\n" msgstr "leyendo los privilegios por omisión\n" -#: common.c:189 +#: common.c:193 #, c-format msgid "reading user-defined collations\n" msgstr "leyendo los ordenamientos definidos por el usuario\n" -#: common.c:194 +#: common.c:198 #, c-format msgid "reading user-defined conversions\n" msgstr "leyendo las conversiones definidas por el usuario\n" -#: common.c:198 +#: common.c:202 #, c-format msgid "reading type casts\n" msgstr "leyendo conversiones de tipo\n" -#: common.c:202 +#: common.c:206 +#, c-format +msgid "reading transforms\n" +msgstr "leyendo las transformaciones\n" + +#: common.c:210 #, c-format msgid "reading table inheritance information\n" msgstr "leyendo la información de herencia de las tablas\n" -#: common.c:206 +#: common.c:214 #, c-format msgid "reading event triggers\n" msgstr "leyendo los disparadores por eventos\n" -#: common.c:215 +#: common.c:223 #, c-format msgid "finding extension members\n" msgstr "buscando miembros de extensión\n" -#: common.c:220 +#: common.c:228 #, c-format msgid "finding inheritance relationships\n" msgstr "buscando relaciones de herencia\n" -#: common.c:224 +#: common.c:232 #, c-format msgid "reading column info for interesting tables\n" msgstr "leyendo la información de columnas para las tablas interesantes\n" -#: common.c:228 +#: common.c:236 #, c-format msgid "flagging inherited columns in subtables\n" msgstr "marcando las columnas heredadas en las subtablas\n" -#: common.c:232 +#: common.c:240 #, c-format msgid "reading indexes\n" msgstr "leyendo los índices\n" -#: common.c:236 +#: common.c:244 #, c-format msgid "reading constraints\n" msgstr "leyendo las restricciones\n" -#: common.c:240 +#: common.c:248 #, c-format msgid "reading triggers\n" msgstr "leyendo los disparadores (triggers)\n" -#: common.c:244 +#: common.c:252 #, c-format msgid "reading rewrite rules\n" msgstr "leyendo las reglas de reescritura\n" -#: common.c:792 +#: common.c:256 +#, c-format +msgid "reading policies\n" +msgstr "leyendo políticas\n" + +#: common.c:804 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found\n" msgstr "" "falló la revisión de integridad, el OID %u del padre de la tabla «%s»\n" "(OID %u) no se encontró\n" -#: common.c:834 +#: common.c:846 #, c-format msgid "could not parse numeric array \"%s\": too many numbers\n" msgstr "no se pudo interpretar el arreglo numérico «%s»: demasiados números\n" -#: common.c:849 +#: common.c:861 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number\n" msgstr "no se pudo interpretar el arreglo numérico «%s»: carácter no válido en número\n" #. translator: this is a module name -#: compress_io.c:78 +#: compress_io.c:79 msgid "compress_io" msgstr "compress_io" -#: compress_io.c:114 +#: compress_io.c:115 #, c-format msgid "invalid compression code: %d\n" msgstr "código de compresión no válido: %d\n" -#: compress_io.c:138 compress_io.c:174 compress_io.c:195 compress_io.c:514 -#: compress_io.c:541 +#: compress_io.c:139 compress_io.c:175 compress_io.c:196 compress_io.c:529 +#: compress_io.c:572 #, c-format msgid "not built with zlib support\n" msgstr "no contiene soporte zlib\n" -#: compress_io.c:245 compress_io.c:347 +#: compress_io.c:246 compress_io.c:348 #, c-format msgid "could not initialize compression library: %s\n" msgstr "no se pudo inicializar la biblioteca de compresión: %s\n" -#: compress_io.c:266 +#: compress_io.c:267 #, c-format msgid "could not close compression stream: %s\n" msgstr "no se pudo cerrar el flujo comprimido: %s\n" -#: compress_io.c:284 +#: compress_io.c:285 #, c-format msgid "could not compress data: %s\n" msgstr "no se pudo comprimir datos: %s\n" -#: compress_io.c:367 compress_io.c:383 +#: compress_io.c:368 compress_io.c:384 #, c-format msgid "could not uncompress data: %s\n" msgstr "no se pudo descomprimir datos: %s\n" -#: compress_io.c:391 +#: compress_io.c:392 #, c-format msgid "could not close compression library: %s\n" msgstr "no se pudo cerrar la biblioteca de compresión: %s\n" -#: compress_io.c:575 compress_io.c:611 pg_backup_custom.c:590 -#: pg_backup_tar.c:563 +#: compress_io.c:606 compress_io.c:642 pg_backup_custom.c:591 +#: pg_backup_tar.c:567 #, c-format msgid "could not read from input file: %s\n" msgstr "no se pudo leer el archivo de entrada: %s\n" -#: compress_io.c:614 pg_backup_custom.c:587 pg_backup_directory.c:551 -#: pg_backup_tar.c:799 pg_backup_tar.c:823 +#: compress_io.c:645 pg_backup_custom.c:588 pg_backup_directory.c:552 +#: pg_backup_tar.c:803 pg_backup_tar.c:827 #, c-format msgid "could not read from input file: end of file\n" msgstr "no se pudo leer desde el archivo de entrada: fin de archivo\n" -#: parallel.c:77 +#: parallel.c:78 msgid "parallel archiver" msgstr "parallel archiver" @@ -340,22 +350,22 @@ msgstr "%s: WSAStartup falló: %d\n" msgid "worker is terminating\n" msgstr "el proceso hijo está terminando\n" -#: parallel.c:535 +#: parallel.c:537 #, c-format msgid "could not create communication channels: %s\n" msgstr "no se pudo crear los canales de comunicación: %s\n" -#: parallel.c:608 +#: parallel.c:611 #, c-format msgid "could not create worker process: %s\n" msgstr "no se pudo crear el proceso hijo: %s\n" -#: parallel.c:825 +#: parallel.c:828 #, c-format msgid "could not get relation name for OID %u: %s\n" msgstr "no se pudo obtener un nombre de relación para el OID %u: %s\n" -#: parallel.c:842 +#: parallel.c:845 #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" @@ -364,933 +374,943 @@ msgstr "" "no se pudo obtener un lock en la relación «%s»\n" "Esto normalmente significa que alguien solicitó un lock ACCESS EXCLUSIVE en la tabla después de que el proceso pg_dump padre había obtenido el lock ACCESS SHARE en la tabla.\n" -#: parallel.c:926 +#: parallel.c:929 #, c-format msgid "unrecognized command on communication channel: %s\n" msgstr "orden no reconocida en canal de comunicación: %s\n" -#: parallel.c:959 +#: parallel.c:962 #, c-format msgid "a worker process died unexpectedly\n" msgstr "un proceso hijo murió inesperadamente\n" -#: parallel.c:986 parallel.c:995 +#: parallel.c:989 parallel.c:998 #, c-format msgid "invalid message received from worker: %s\n" msgstr "mensaje no válido recibido del proceso hijo: %s\n" -#: parallel.c:992 pg_backup_db.c:336 +#: parallel.c:995 pg_backup_db.c:337 #, c-format msgid "%s" msgstr "%s" -#: parallel.c:1044 parallel.c:1088 +#: parallel.c:1047 parallel.c:1091 #, c-format msgid "error processing a parallel work item\n" msgstr "error procesando un elemento de trabajo en paralelo\n" -#: parallel.c:1116 parallel.c:1254 +#: parallel.c:1119 parallel.c:1257 #, c-format msgid "could not write to the communication channel: %s\n" msgstr "no se pudo escribir al canal de comunicación: %s\n" -#: parallel.c:1165 +#: parallel.c:1168 #, c-format msgid "terminated by user\n" msgstr "terminado por el usuario\n" -#: parallel.c:1217 +#: parallel.c:1220 #, c-format msgid "error in ListenToWorkers(): %s\n" msgstr "error en ListenToWorkers(): %s\n" -#: parallel.c:1341 +#: parallel.c:1345 #, c-format msgid "pgpipe: could not create socket: error code %d\n" msgstr "pgpipe: no se pudo crear el socket: código de error %d\n" -#: parallel.c:1352 +#: parallel.c:1356 #, c-format msgid "pgpipe: could not bind: error code %d\n" msgstr "pgpipe: no se pudo enlazar: código de error %d\n" -#: parallel.c:1359 +#: parallel.c:1363 #, c-format msgid "pgpipe: could not listen: error code %d\n" msgstr "pgpipe: no se pudo escuchar: código de error %d\n" -#: parallel.c:1366 +#: parallel.c:1370 #, c-format msgid "pgpipe: getsockname() failed: error code %d\n" msgstr "pgpipe: getsockname() falló: código de error %d\n" -#: parallel.c:1377 +#: parallel.c:1381 #, c-format msgid "pgpipe: could not create second socket: error code %d\n" msgstr "pgpipe: no se pudo crear el segundo socket: código de error %d\n" -#: parallel.c:1386 +#: parallel.c:1390 #, c-format msgid "pgpipe: could not connect socket: error code %d\n" msgstr "pgpipe: no se pudo conectar el socket: código de error %d\n" -#: parallel.c:1393 +#: parallel.c:1397 #, c-format msgid "pgpipe: could not accept connection: error code %d\n" msgstr "pgpipe: no se pudo aceptar la conexión: código de error %d\n" #. translator: this is a module name -#: pg_backup_archiver.c:51 +#: pg_backup_archiver.c:53 msgid "archiver" msgstr "archiver" -#: pg_backup_archiver.c:169 pg_backup_archiver.c:1401 +#: pg_backup_archiver.c:230 pg_backup_archiver.c:1479 #, c-format msgid "could not close output file: %s\n" msgstr "no se pudo cerrar el archivo de salida: %s\n" -#: pg_backup_archiver.c:204 pg_backup_archiver.c:209 +#: pg_backup_archiver.c:265 pg_backup_archiver.c:270 #, c-format msgid "WARNING: archive items not in correct section order\n" msgstr "ATENCIÓN: elementos del archivo no están en el orden correcto de secciones\n" -#: pg_backup_archiver.c:215 +#: pg_backup_archiver.c:276 #, c-format msgid "unexpected section code %d\n" msgstr "código de sección %d inesperado\n" -#: pg_backup_archiver.c:247 +#: pg_backup_archiver.c:308 #, c-format msgid "-C and -1 are incompatible options\n" msgstr "-C y -1 son opciones incompatibles\n" -#: pg_backup_archiver.c:257 +#: pg_backup_archiver.c:318 #, c-format msgid "parallel restore is not supported with this archive file format\n" msgstr "la restauración en paralelo no está soportada con este formato de archivo\n" -#: pg_backup_archiver.c:261 +#: pg_backup_archiver.c:322 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump\n" msgstr "la restauración en paralelo no está soportada con archivos construidos con pg_dump anterior a 8.0\n" -#: pg_backup_archiver.c:279 +#: pg_backup_archiver.c:340 #, c-format msgid "cannot restore from compressed archive (compression not supported in this installation)\n" msgstr "no se puede reestablecer desde un archivo comprimido (la compresión no está soportada en esta instalación)\n" -#: pg_backup_archiver.c:296 +#: pg_backup_archiver.c:357 #, c-format msgid "connecting to database for restore\n" msgstr "conectando a la base de datos para reestablecimiento\n" -#: pg_backup_archiver.c:298 +#: pg_backup_archiver.c:359 #, c-format msgid "direct database connections are not supported in pre-1.3 archives\n" msgstr "" "las conexiones directas a la base de datos no están soportadas en\n" "archivadores pre-1.3\n" -#: pg_backup_archiver.c:343 +#: pg_backup_archiver.c:404 #, c-format msgid "implied data-only restore\n" msgstr "asumiendo reestablecimiento de sólo datos\n" -#: pg_backup_archiver.c:412 +#: pg_backup_archiver.c:474 #, c-format msgid "dropping %s %s\n" msgstr "eliminando %s %s\n" -#: pg_backup_archiver.c:563 +#: pg_backup_archiver.c:627 +#, c-format +msgid "setting owner and privileges for %s \"%s.%s\"\n" +msgstr "estableciendo dueño y privilegios para %s «%s.%s»\n" + +#: pg_backup_archiver.c:630 #, c-format -msgid "setting owner and privileges for %s %s\n" -msgstr "estableciendo dueño y privilegios para %s %s\n" +msgid "setting owner and privileges for %s \"%s\"\n" +msgstr "estableciendo dueño y privilegios para %s «%s»\n" -#: pg_backup_archiver.c:629 pg_backup_archiver.c:631 +#: pg_backup_archiver.c:696 pg_backup_archiver.c:698 #, c-format msgid "warning from original dump file: %s\n" msgstr "precaución desde el archivo original: %s\n" -#: pg_backup_archiver.c:638 +#: pg_backup_archiver.c:707 +#, c-format +msgid "creating %s \"%s.%s\"\n" +msgstr "creando %s «%s.%s»\n" + +#: pg_backup_archiver.c:710 #, c-format -msgid "creating %s %s\n" -msgstr "creando %s %s\n" +msgid "creating %s \"%s\"\n" +msgstr "creando %s «%s»\n" -#: pg_backup_archiver.c:682 +#: pg_backup_archiver.c:755 #, c-format msgid "connecting to new database \"%s\"\n" msgstr "conectando a nueva base de datos «%s»\n" -#: pg_backup_archiver.c:710 +#: pg_backup_archiver.c:783 #, c-format msgid "processing %s\n" msgstr "procesando %s\n" -#: pg_backup_archiver.c:730 +#: pg_backup_archiver.c:803 #, c-format -msgid "processing data for table \"%s\"\n" -msgstr "procesando datos de la tabla «%s»\n" +msgid "processing data for table \"%s.%s\"\n" +msgstr "procesando datos de la tabla «%s.%s»\n" -#: pg_backup_archiver.c:792 +#: pg_backup_archiver.c:865 #, c-format msgid "executing %s %s\n" msgstr "ejecutando %s %s\n" -#: pg_backup_archiver.c:829 +#: pg_backup_archiver.c:902 #, c-format msgid "disabling triggers for %s\n" msgstr "deshabilitando disparadores (triggers) para %s\n" -#: pg_backup_archiver.c:855 +#: pg_backup_archiver.c:928 #, c-format msgid "enabling triggers for %s\n" msgstr "habilitando disparadores (triggers) para %s\n" -#: pg_backup_archiver.c:885 +#: pg_backup_archiver.c:958 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine\n" msgstr "" "error interno -- WriteData no puede ser llamada fuera del contexto\n" "de una rutina DataDumper\n" -#: pg_backup_archiver.c:1044 +#: pg_backup_archiver.c:1122 #, c-format msgid "large-object output not supported in chosen format\n" msgstr "" "la extracción de objetos grandes no está soportada en el formato\n" "seleccionado\n" -#: pg_backup_archiver.c:1098 +#: pg_backup_archiver.c:1176 #, c-format msgid "restored %d large object\n" msgid_plural "restored %d large objects\n" msgstr[0] "se reestableció %d objeto grande\n" msgstr[1] "se reestablecieron %d objetos grandes\n" -#: pg_backup_archiver.c:1119 pg_backup_tar.c:741 +#: pg_backup_archiver.c:1197 pg_backup_tar.c:745 #, c-format msgid "restoring large object with OID %u\n" msgstr "reestableciendo objeto grande con OID %u\n" -#: pg_backup_archiver.c:1131 +#: pg_backup_archiver.c:1209 #, c-format msgid "could not create large object %u: %s" msgstr "no se pudo crear el objeto grande %u: %s" -#: pg_backup_archiver.c:1136 pg_dump.c:2732 +#: pg_backup_archiver.c:1214 pg_dump.c:2774 #, c-format msgid "could not open large object %u: %s" msgstr "no se pudo abrir el objeto grande %u: %s" -#: pg_backup_archiver.c:1193 +#: pg_backup_archiver.c:1271 #, c-format msgid "could not open TOC file \"%s\": %s\n" msgstr "no se pudo abrir el archivo TOC «%s»: %s\n" -#: pg_backup_archiver.c:1234 +#: pg_backup_archiver.c:1312 #, c-format msgid "WARNING: line ignored: %s\n" msgstr "PRECAUCIÓN: línea ignorada: %s\n" -#: pg_backup_archiver.c:1241 +#: pg_backup_archiver.c:1319 #, c-format msgid "could not find entry for ID %d\n" msgstr "no se pudo encontrar una entrada para el ID %d\n" -#: pg_backup_archiver.c:1262 pg_backup_directory.c:229 -#: pg_backup_directory.c:600 +#: pg_backup_archiver.c:1340 pg_backup_directory.c:230 +#: pg_backup_directory.c:601 #, c-format msgid "could not close TOC file: %s\n" msgstr "no se pudo cerrar el archivo TOC: %s\n" -#: pg_backup_archiver.c:1371 pg_backup_custom.c:161 pg_backup_directory.c:340 -#: pg_backup_directory.c:586 pg_backup_directory.c:644 -#: pg_backup_directory.c:664 +#: pg_backup_archiver.c:1449 pg_backup_custom.c:162 pg_backup_directory.c:341 +#: pg_backup_directory.c:587 pg_backup_directory.c:645 +#: pg_backup_directory.c:665 #, c-format msgid "could not open output file \"%s\": %s\n" msgstr "no se pudo abrir el archivo de salida «%s»: %s\n" -#: pg_backup_archiver.c:1374 pg_backup_custom.c:168 +#: pg_backup_archiver.c:1452 pg_backup_custom.c:169 #, c-format msgid "could not open output file: %s\n" msgstr "no se pudo abrir el archivo de salida: %s\n" -#: pg_backup_archiver.c:1478 +#: pg_backup_archiver.c:1556 #, c-format msgid "wrote %lu byte of large object data (result = %lu)\n" msgid_plural "wrote %lu bytes of large object data (result = %lu)\n" msgstr[0] "se escribió %lu byte de los datos del objeto grande (resultado = %lu)\n" msgstr[1] "se escribieron %lu bytes de los datos del objeto grande (resultado = %lu)\n" -#: pg_backup_archiver.c:1484 +#: pg_backup_archiver.c:1562 #, c-format msgid "could not write to large object (result: %lu, expected: %lu)\n" msgstr "no se pudo escribir al objecto grande (resultado: %lu, esperado: %lu)\n" -#: pg_backup_archiver.c:1577 +#: pg_backup_archiver.c:1655 #, c-format msgid "Error while INITIALIZING:\n" msgstr "Error durante INICIALIZACIÓN:\n" -#: pg_backup_archiver.c:1582 +#: pg_backup_archiver.c:1660 #, c-format msgid "Error while PROCESSING TOC:\n" msgstr "Error durante PROCESAMIENTO DE TABLA DE CONTENIDOS:\n" -#: pg_backup_archiver.c:1587 +#: pg_backup_archiver.c:1665 #, c-format msgid "Error while FINALIZING:\n" msgstr "Error durante FINALIZACIÓN:\n" -#: pg_backup_archiver.c:1592 +#: pg_backup_archiver.c:1670 #, c-format msgid "Error from TOC entry %d; %u %u %s %s %s\n" msgstr "Error en entrada de la tabla de contenidos %d; %u %u %s %s %s\n" -#: pg_backup_archiver.c:1665 +#: pg_backup_archiver.c:1743 #, c-format msgid "bad dumpId\n" msgstr "dumpId incorrecto\n" -#: pg_backup_archiver.c:1686 +#: pg_backup_archiver.c:1764 #, c-format msgid "bad table dumpId for TABLE DATA item\n" msgstr "dumpId de tabla incorrecto para elemento TABLE DATA\n" -#: pg_backup_archiver.c:1778 +#: pg_backup_archiver.c:1856 #, c-format msgid "unexpected data offset flag %d\n" msgstr "bandera de posición inesperada %d\n" -#: pg_backup_archiver.c:1791 +#: pg_backup_archiver.c:1869 #, c-format msgid "file offset in dump file is too large\n" msgstr "el posición en el archivo es demasiado grande\n" -#: pg_backup_archiver.c:1904 +#: pg_backup_archiver.c:1982 #, c-format msgid "attempting to ascertain archive format\n" msgstr "intentando comprobar el formato del archivador\n" -#: pg_backup_archiver.c:1930 pg_backup_archiver.c:1940 +#: pg_backup_archiver.c:2008 pg_backup_archiver.c:2018 #, c-format msgid "directory name too long: \"%s\"\n" msgstr "nombre de directorio demasiado largo: «%s»\n" -#: pg_backup_archiver.c:1948 +#: pg_backup_archiver.c:2026 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)\n" msgstr "el directorio «%s» no parece ser un archivador válido (no existe «toc.dat»)\n" -#: pg_backup_archiver.c:1956 pg_backup_custom.c:180 pg_backup_custom.c:769 -#: pg_backup_directory.c:213 pg_backup_directory.c:401 +#: pg_backup_archiver.c:2034 pg_backup_custom.c:181 pg_backup_custom.c:770 +#: pg_backup_directory.c:214 pg_backup_directory.c:402 #, c-format msgid "could not open input file \"%s\": %s\n" msgstr "no se pudo abrir el archivo de entrada «%s»: %s\n" -#: pg_backup_archiver.c:1964 pg_backup_custom.c:187 +#: pg_backup_archiver.c:2042 pg_backup_custom.c:188 #, c-format msgid "could not open input file: %s\n" msgstr "no se pudo abrir el archivo de entrada: %s\n" -#: pg_backup_archiver.c:1971 +#: pg_backup_archiver.c:2049 #, c-format msgid "could not read input file: %s\n" msgstr "no se pudo leer el archivo de entrada: %s\n" -#: pg_backup_archiver.c:1973 +#: pg_backup_archiver.c:2051 #, c-format msgid "input file is too short (read %lu, expected 5)\n" msgstr "el archivo de entrada es demasiado corto (leidos %lu, esperados 5)\n" -#: pg_backup_archiver.c:2056 +#: pg_backup_archiver.c:2134 #, c-format msgid "input file appears to be a text format dump. Please use psql.\n" msgstr "el archivo de entrada parece ser un volcado de texto. Por favor use psql.\n" -#: pg_backup_archiver.c:2062 +#: pg_backup_archiver.c:2140 #, c-format msgid "input file does not appear to be a valid archive (too short?)\n" msgstr "el archivo de entrada no parece ser un archivador válido (¿demasiado corto?)\n" -#: pg_backup_archiver.c:2068 +#: pg_backup_archiver.c:2146 #, c-format msgid "input file does not appear to be a valid archive\n" msgstr "el archivo de entrada no parece ser un archivador válido\n" -#: pg_backup_archiver.c:2088 +#: pg_backup_archiver.c:2166 #, c-format msgid "could not close input file: %s\n" msgstr "no se pudo cerrar el archivo de entrada: %s\n" -#: pg_backup_archiver.c:2105 +#: pg_backup_archiver.c:2183 #, c-format msgid "allocating AH for %s, format %d\n" msgstr "reservando AH para %s, formato %d\n" -#: pg_backup_archiver.c:2210 +#: pg_backup_archiver.c:2288 #, c-format msgid "unrecognized file format \"%d\"\n" msgstr "formato de archivo no reconocido «%d»\n" -#: pg_backup_archiver.c:2360 +#: pg_backup_archiver.c:2438 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC\n" msgstr "" "la entrada con ID %d está fuera de rango -- tal vez\n" "la tabla de contenido está corrupta\n" -#: pg_backup_archiver.c:2476 +#: pg_backup_archiver.c:2554 #, c-format msgid "read TOC entry %d (ID %d) for %s %s\n" msgstr "leyendo entrada de la tabla de contenidos %d (ID %d) para %s %s\n" -#: pg_backup_archiver.c:2510 +#: pg_backup_archiver.c:2588 #, c-format msgid "unrecognized encoding \"%s\"\n" msgstr "no se reconoce la codificación: «%s»\n" -#: pg_backup_archiver.c:2515 +#: pg_backup_archiver.c:2593 #, c-format msgid "invalid ENCODING item: %s\n" msgstr "elemento ENCODING no válido: %s\n" -#: pg_backup_archiver.c:2533 +#: pg_backup_archiver.c:2611 #, c-format msgid "invalid STDSTRINGS item: %s\n" msgstr "elemento STDSTRINGS no válido: %s\n" -#: pg_backup_archiver.c:2750 +#: pg_backup_archiver.c:2834 #, 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:2782 +#: pg_backup_archiver.c:2866 #, c-format msgid "could not set default_with_oids: %s" msgstr "no se pudo definir default_with_oids: %s" -#: pg_backup_archiver.c:2920 +#: pg_backup_archiver.c:3004 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "no se pudo establecer search_path a «%s»: %s" -#: pg_backup_archiver.c:2981 +#: pg_backup_archiver.c:3065 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "no se pudo establecer default_tablespace a %s: %s" -#: pg_backup_archiver.c:3068 pg_backup_archiver.c:3251 +#: pg_backup_archiver.c:3152 pg_backup_archiver.c:3337 #, c-format msgid "WARNING: don't know how to set owner for object type %s\n" msgstr "PRECAUCIÓN: no se sabe cómo establecer el dueño para el objeto de tipo %s\n" -#: pg_backup_archiver.c:3304 +#: pg_backup_archiver.c:3390 #, c-format msgid "WARNING: requested compression not available in this installation -- archive will be uncompressed\n" msgstr "" "PRECAUCIÓN: la compresión solicitada no está soportada en esta\n" "instalación -- el archivador no será comprimido\n" -#: pg_backup_archiver.c:3343 +#: pg_backup_archiver.c:3429 #, c-format msgid "did not find magic string in file header\n" msgstr "no se encontró la cadena mágica en el encabezado del archivo\n" -#: pg_backup_archiver.c:3356 +#: pg_backup_archiver.c:3442 #, c-format msgid "unsupported version (%d.%d) in file header\n" msgstr "versión no soportada (%d.%d) en el encabezado del archivo\n" -#: pg_backup_archiver.c:3361 +#: pg_backup_archiver.c:3447 #, c-format msgid "sanity check on integer size (%lu) failed\n" msgstr "revisión de integridad en el tamaño del entero (%lu) falló\n" -#: pg_backup_archiver.c:3365 +#: pg_backup_archiver.c:3451 #, c-format msgid "WARNING: archive was made on a machine with larger integers, some operations might fail\n" msgstr "" "PRECAUCIÓN: el archivador fue hecho en una máquina con enteros más \n" "grandes, algunas operaciones podrían fallar\n" -#: pg_backup_archiver.c:3375 +#: pg_backup_archiver.c:3461 #, c-format msgid "expected format (%d) differs from format found in file (%d)\n" msgstr "el formato esperado (%d) difiere del formato encontrado en el archivo (%d)\n" -#: pg_backup_archiver.c:3391 +#: pg_backup_archiver.c:3477 #, c-format msgid "WARNING: archive is compressed, but this installation does not support compression -- no data will be available\n" msgstr "" "PRECAUCIÓN: el archivador está comprimido, pero esta instalación no soporta\n" "compresión -- no habrá datos disponibles\n" -#: pg_backup_archiver.c:3409 +#: pg_backup_archiver.c:3495 #, c-format msgid "WARNING: invalid creation date in header\n" msgstr "PRECAUCIÓN: la fecha de creación en el encabezado no es válida\n" -#: pg_backup_archiver.c:3497 +#: pg_backup_archiver.c:3571 #, c-format msgid "entering restore_toc_entries_prefork\n" msgstr "ingresando restore_toc_entries_prefork\n" -#: pg_backup_archiver.c:3541 +#: pg_backup_archiver.c:3615 #, c-format msgid "processing item %d %s %s\n" msgstr "procesando el elemento %d %s %s\n" -#: pg_backup_archiver.c:3593 +#: pg_backup_archiver.c:3667 #, c-format msgid "entering restore_toc_entries_parallel\n" msgstr "ingresando restore_toc_entries_parallel\n" -#: pg_backup_archiver.c:3641 +#: pg_backup_archiver.c:3715 #, c-format msgid "entering main parallel loop\n" msgstr "ingresando al bucle paralelo principal\n" -#: pg_backup_archiver.c:3652 +#: pg_backup_archiver.c:3726 #, c-format msgid "skipping item %d %s %s\n" msgstr "saltando el elemento %d %s %s\n" -#: pg_backup_archiver.c:3662 +#: pg_backup_archiver.c:3736 #, c-format msgid "launching item %d %s %s\n" msgstr "lanzando el elemento %d %s %s\n" -#: pg_backup_archiver.c:3720 +#: pg_backup_archiver.c:3794 #, c-format msgid "finished main parallel loop\n" msgstr "terminó el bucle paralelo principal\n" -#: pg_backup_archiver.c:3729 +#: pg_backup_archiver.c:3803 #, c-format msgid "entering restore_toc_entries_postfork\n" msgstr "ingresando restore_toc_entries_postfork\n" -#: pg_backup_archiver.c:3747 +#: pg_backup_archiver.c:3821 #, c-format msgid "processing missed item %d %s %s\n" msgstr "procesando el elemento saltado %d %s %s\n" -#: pg_backup_archiver.c:3896 +#: pg_backup_archiver.c:3970 #, c-format msgid "no item ready\n" msgstr "ningún elemento listo\n" -#: pg_backup_archiver.c:3946 +#: pg_backup_archiver.c:4020 #, c-format msgid "could not find slot of finished worker\n" msgstr "no se pudo localizar la entrada del proceso o hilo que terminó\n" -#: pg_backup_archiver.c:3948 +#: pg_backup_archiver.c:4022 #, c-format msgid "finished item %d %s %s\n" msgstr "terminó el elemento %d %s %s\n" -#: pg_backup_archiver.c:3961 +#: pg_backup_archiver.c:4035 #, c-format msgid "worker process failed: exit code %d\n" msgstr "el proceso hijo falló: código de salida %d\n" -#: pg_backup_archiver.c:4123 +#: pg_backup_archiver.c:4197 #, c-format msgid "transferring dependency %d -> %d to %d\n" msgstr "transferiendo la dependencia %d -> %d a %d\n" -#: pg_backup_archiver.c:4196 +#: pg_backup_archiver.c:4270 #, c-format msgid "reducing dependencies for %d\n" msgstr "reduciendo las dependencias para %d\n" -#: pg_backup_archiver.c:4235 +#: pg_backup_archiver.c:4309 #, c-format msgid "table \"%s\" could not be created, will not restore its data\n" msgstr "la tabla «%s» no pudo ser creada, no se recuperarán sus datos\n" #. translator: this is a module name -#: pg_backup_custom.c:93 +#: pg_backup_custom.c:94 msgid "custom archiver" msgstr "custom archiver" -#: pg_backup_custom.c:383 pg_backup_null.c:151 +#: pg_backup_custom.c:384 pg_backup_null.c:149 #, c-format msgid "invalid OID for large object\n" msgstr "OID no válido para objeto grande\n" -#: pg_backup_custom.c:454 +#: pg_backup_custom.c:455 #, c-format msgid "unrecognized data block type (%d) while searching archive\n" msgstr "tipo de bloque de datos (%d) no conocido al buscar en el archivador\n" -#: pg_backup_custom.c:465 +#: pg_backup_custom.c:466 #, c-format msgid "error during file seek: %s\n" msgstr "error durante el posicionamiento (seek) en el archivo: %s\n" -#: pg_backup_custom.c:475 +#: pg_backup_custom.c:476 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive\n" msgstr "no se pudo encontrar el bloque con ID %d en archivo -- posiblemente debido a una petición de restauración fuera de orden, la que no puede ser satisfecha debido a la falta de información de posicionamiento en el archivo\n" -#: pg_backup_custom.c:480 +#: pg_backup_custom.c:481 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file\n" msgstr "no se pudo encontrar el bloque con ID %d en archivo -- posiblemente debido a una petición de restauración fuera de orden, la que no puede ser completada debido a que en el archivo de entrada no es reposicionable (seekable)\n" -#: pg_backup_custom.c:485 +#: pg_backup_custom.c:486 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive\n" msgstr "no se pudo encontrar el bloque con ID %d en archivo -- posiblemente el archivo está corrupto\n" -#: pg_backup_custom.c:492 +#: pg_backup_custom.c:493 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d\n" msgstr "" "se encontró un bloque no esperado ID (%d) mientras se leían los\n" "datos -- se esperaba %d\n" -#: pg_backup_custom.c:506 +#: pg_backup_custom.c:507 #, c-format msgid "unrecognized data block type %d while restoring archive\n" msgstr "se encontró un bloque tipo %d no reconocido al restablecer el archivador\n" -#: pg_backup_custom.c:708 pg_backup_custom.c:758 pg_backup_custom.c:907 -#: pg_backup_tar.c:1086 +#: pg_backup_custom.c:709 pg_backup_custom.c:759 pg_backup_custom.c:908 +#: pg_backup_tar.c:1090 #, c-format msgid "could not determine seek position in archive file: %s\n" msgstr "no se pudo determinar la posición (seek) en el archivo del archivador: %s\n" -#: pg_backup_custom.c:726 pg_backup_custom.c:763 +#: pg_backup_custom.c:727 pg_backup_custom.c:764 #, c-format msgid "could not close archive file: %s\n" msgstr "no se pudo cerrar el archivo del archivador: %s\n" -#: pg_backup_custom.c:745 +#: pg_backup_custom.c:746 #, c-format msgid "can only reopen input archives\n" msgstr "sólo se pueden reabrir archivos de entrada\n" -#: pg_backup_custom.c:752 +#: pg_backup_custom.c:753 #, c-format msgid "parallel restore from standard input is not supported\n" msgstr "la restauración en paralelo desde entrada estándar (stdin) no está soportada\n" -#: pg_backup_custom.c:754 +#: pg_backup_custom.c:755 #, c-format msgid "parallel restore from non-seekable file is not supported\n" msgstr "la restauración en paralelo desde un archivo no posicionable no está soportada\n" -#: pg_backup_custom.c:773 +#: pg_backup_custom.c:774 #, c-format msgid "could not set seek position in archive file: %s\n" msgstr "no se pudo posicionar (seek) en el archivo del archivador: %s\n" -#: pg_backup_custom.c:791 +#: pg_backup_custom.c:792 #, c-format msgid "compressor active\n" msgstr "compresor activo\n" -#: pg_backup_custom.c:911 +#: pg_backup_custom.c:912 #, c-format msgid "WARNING: ftell mismatch with expected position -- ftell used\n" msgstr "ATENCIÓN: ftell no coincide con la posición esperada -- se usó ftell\n" #. translator: this is a module name -#: pg_backup_db.c:28 +#: pg_backup_db.c:29 msgid "archiver (db)" msgstr "archiver (bd)" -#: pg_backup_db.c:43 +#: pg_backup_db.c:44 #, c-format msgid "could not get server_version from libpq\n" msgstr "no se pudo obtener server_version desde libpq\n" -#: pg_backup_db.c:54 pg_dumpall.c:1934 +#: pg_backup_db.c:55 pg_dumpall.c:1965 #, c-format msgid "server version: %s; %s version: %s\n" msgstr "versión del servidor: %s; versión de %s: %s\n" -#: pg_backup_db.c:56 pg_dumpall.c:1936 +#: pg_backup_db.c:57 pg_dumpall.c:1967 #, c-format msgid "aborting because of server version mismatch\n" msgstr "abortando debido a que no coincide la versión del servidor\n" -#: pg_backup_db.c:127 +#: pg_backup_db.c:128 #, c-format msgid "connecting to database \"%s\" as user \"%s\"\n" msgstr "conectandose a la base de datos \"%s\" como el usuario «%s»\n" -#: pg_backup_db.c:132 pg_backup_db.c:184 pg_backup_db.c:231 pg_backup_db.c:277 -#: pg_dumpall.c:1764 pg_dumpall.c:1872 +#: pg_backup_db.c:133 pg_backup_db.c:185 pg_backup_db.c:232 pg_backup_db.c:278 +#: pg_dumpall.c:1795 pg_dumpall.c:1903 msgid "Password: " msgstr "Contraseña: " -#: pg_backup_db.c:165 +#: pg_backup_db.c:166 #, c-format msgid "failed to reconnect to database\n" msgstr "falló la reconexión a la base de datos\n" -#: pg_backup_db.c:170 +#: pg_backup_db.c:171 #, c-format msgid "could not reconnect to database: %s" msgstr "no se pudo hacer la reconexión a la base de datos: %s" -#: pg_backup_db.c:186 +#: pg_backup_db.c:187 #, c-format msgid "connection needs password\n" msgstr "la conexión necesita contraseña\n" -#: pg_backup_db.c:227 +#: pg_backup_db.c:228 #, c-format msgid "already connected to a database\n" msgstr "ya está conectado a una base de datos\n" -#: pg_backup_db.c:269 +#: pg_backup_db.c:270 #, c-format msgid "failed to connect to database\n" msgstr "falló la conexión a la base de datos\n" -#: pg_backup_db.c:288 +#: pg_backup_db.c:289 #, c-format msgid "connection to database \"%s\" failed: %s" msgstr "falló la conexión a la base de datos «%s»: %s" -#: pg_backup_db.c:343 +#: pg_backup_db.c:344 #, c-format msgid "query failed: %s" msgstr "la consulta falló: %s" -#: pg_backup_db.c:345 +#: pg_backup_db.c:346 #, c-format msgid "query was: %s\n" msgstr "la consulta era: %s\n" -#: pg_backup_db.c:409 +#: pg_backup_db.c:410 #, c-format msgid "%s: %s Command was: %s\n" msgstr "%s: %s La orden era: %s\n" -#: pg_backup_db.c:465 pg_backup_db.c:537 pg_backup_db.c:544 +#: pg_backup_db.c:466 pg_backup_db.c:540 pg_backup_db.c:547 msgid "could not execute query" msgstr "no se pudo ejecutar la consulta" -#: pg_backup_db.c:516 +#: pg_backup_db.c:519 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "PQputCopyData regresó un error: %s" -#: pg_backup_db.c:563 +#: pg_backup_db.c:568 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "PQputCopyEnd regresó un error: %s" -#: pg_backup_db.c:569 +#: pg_backup_db.c:574 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "COPY falló para la tabla «%s»: %s" -#: pg_backup_db.c:580 +#: pg_backup_db.c:587 msgid "could not start database transaction" msgstr "no se pudo iniciar la transacción en la base de datos" -#: pg_backup_db.c:586 +#: pg_backup_db.c:595 msgid "could not commit database transaction" msgstr "no se pudo terminar la transacción a la base de datos" #. translator: this is a module name -#: pg_backup_directory.c:63 +#: pg_backup_directory.c:64 msgid "directory archiver" msgstr "directory archiver" -#: pg_backup_directory.c:161 +#: pg_backup_directory.c:162 #, c-format msgid "no output directory specified\n" msgstr "no se especificó un directorio de salida\n" -#: pg_backup_directory.c:190 +#: pg_backup_directory.c:191 #, c-format msgid "could not read directory \"%s\": %s\n" msgstr "no se pudo leer el directorio «%s»: %s\n" -#: pg_backup_directory.c:194 +#: pg_backup_directory.c:195 #, c-format msgid "could not close directory \"%s\": %s\n" msgstr "no se pudo cerrar el directorio «%s»: %s\n" -#: pg_backup_directory.c:200 +#: pg_backup_directory.c:201 #, c-format msgid "could not create directory \"%s\": %s\n" msgstr "no se pudo crear el directorio «%s»: %s\n" -#: pg_backup_directory.c:412 +#: pg_backup_directory.c:413 #, c-format msgid "could not close data file: %s\n" msgstr "no se pudo cerrar el archivo de datos: %s\n" -#: pg_backup_directory.c:453 +#: pg_backup_directory.c:454 #, c-format msgid "could not open large object TOC file \"%s\" for input: %s\n" msgstr "no se pudo abrir el archivo de la tabla de contenidos de objetos grandes «%s» para su lectura: %s\n" -#: pg_backup_directory.c:464 +#: pg_backup_directory.c:465 #, c-format msgid "invalid line in large object TOC file \"%s\": \"%s\"\n" msgstr "línea no válida en el archivo de la tabla de contenido de objetos grandes «%s»: «%s»\n" -#: pg_backup_directory.c:473 +#: pg_backup_directory.c:474 #, c-format msgid "error reading large object TOC file \"%s\"\n" msgstr "error al leer el archivo de la tabla de contenidos de objetos grandes «%s»\n" -#: pg_backup_directory.c:477 +#: pg_backup_directory.c:478 #, c-format msgid "could not close large object TOC file \"%s\": %s\n" msgstr "no se pudo cerrar el archivo de la tabla de contenido de los objetos grandes «%s»: %s\n" -#: pg_backup_directory.c:687 +#: pg_backup_directory.c:688 #, c-format msgid "could not write to blobs TOC file\n" msgstr "no se pudo escribir al archivo de la tabla de contenidos de objetos grandes\n" -#: pg_backup_directory.c:719 +#: pg_backup_directory.c:720 #, c-format msgid "file name too long: \"%s\"\n" msgstr "nombre de archivo demasiado largo: «%s»\n" -#: pg_backup_directory.c:805 +#: pg_backup_directory.c:806 #, c-format msgid "error during backup\n" msgstr "error durante el volcado\n" -#: pg_backup_null.c:76 +#: pg_backup_null.c:74 #, c-format msgid "this format cannot be read\n" msgstr "no se puede leer este formato\n" #. translator: this is a module name -#: pg_backup_tar.c:109 +#: pg_backup_tar.c:108 msgid "tar archiver" msgstr "tar archiver" -#: pg_backup_tar.c:190 +#: pg_backup_tar.c:189 #, c-format msgid "could not open TOC file \"%s\" for output: %s\n" msgstr "no se pudo abrir el archivo de tabla de contenido «%s» para escribir: %s\n" -#: pg_backup_tar.c:198 +#: pg_backup_tar.c:197 #, c-format msgid "could not open TOC file for output: %s\n" msgstr "no se pudo abrir la tabla de contenido para escribir: %s\n" -#: pg_backup_tar.c:226 pg_backup_tar.c:382 +#: pg_backup_tar.c:218 pg_backup_tar.c:374 #, c-format msgid "compression is not supported by tar archive format\n" msgstr "la compresión no está soportada por el formato de salida tar\n" -#: pg_backup_tar.c:234 +#: pg_backup_tar.c:226 #, c-format msgid "could not open TOC file \"%s\" for input: %s\n" msgstr "no se pudo abrir el archivo de tabla de contenido «%s» para leer: %s\n" -#: pg_backup_tar.c:241 +#: pg_backup_tar.c:233 #, c-format msgid "could not open TOC file for input: %s\n" msgstr "no se pudo abrir la tabla de contenido para leer: %s\n" -#: pg_backup_tar.c:368 +#: pg_backup_tar.c:360 #, c-format msgid "could not find file \"%s\" in archive\n" msgstr "no se pudo encontrar el archivo «%s» en el archivador\n" -#: pg_backup_tar.c:424 +#: pg_backup_tar.c:426 #, c-format msgid "could not generate temporary file name: %s\n" msgstr "no se pudo generar el nombre de archivo temporal: %s\n" -#: pg_backup_tar.c:433 +#: pg_backup_tar.c:437 #, c-format msgid "could not open temporary file\n" msgstr "no se pudo abrir archivo temporal\n" -#: pg_backup_tar.c:460 +#: pg_backup_tar.c:464 #, c-format msgid "could not close tar member\n" msgstr "no se pudo cerrar miembro del archivo tar\n" -#: pg_backup_tar.c:573 +#: pg_backup_tar.c:577 #, c-format msgid "internal error -- neither th nor fh specified in tarReadRaw()\n" msgstr "error interno --- no se especificó th ni fh en tarReadRaw()\n" -#: pg_backup_tar.c:696 +#: pg_backup_tar.c:700 #, c-format msgid "unexpected COPY statement syntax: \"%s\"\n" msgstr "sintaxis de sentencia COPY inesperada: «%s»\n" -#: pg_backup_tar.c:958 +#: pg_backup_tar.c:962 #, c-format msgid "invalid OID for large object (%u)\n" msgstr "el OID del objeto grande no es válido (%u)\n" -#: pg_backup_tar.c:1095 +#: pg_backup_tar.c:1099 #, c-format msgid "archive member too large for tar format\n" msgstr "el miembro de archivador es demasiado grande para el formato tar\n" -#: pg_backup_tar.c:1109 +#: pg_backup_tar.c:1113 #, c-format msgid "could not close temporary file: %s\n" msgstr "no se pudo abrir archivo temporal: %s\n" -#: pg_backup_tar.c:1119 +#: pg_backup_tar.c:1123 #, c-format msgid "actual file length (%s) does not match expected (%s)\n" msgstr "el tamaño real del archivo (%s) no coincide con el esperado (%s)\n" -#: pg_backup_tar.c:1156 +#: pg_backup_tar.c:1160 #, c-format msgid "moving from position %s to next member at file position %s\n" msgstr "moviendo desde la posición %s a la posición del siguiente miembro %s\n" -#: pg_backup_tar.c:1167 +#: pg_backup_tar.c:1171 #, c-format msgid "now at file position %s\n" msgstr "ahora en la posición del archivo %s\n" -#: pg_backup_tar.c:1176 pg_backup_tar.c:1206 +#: pg_backup_tar.c:1180 pg_backup_tar.c:1210 #, c-format msgid "could not find header for file \"%s\" in tar archive\n" msgstr "no se pudo encontrar el encabezado para el archivo «%s» en el archivo tar\n" -#: pg_backup_tar.c:1190 +#: pg_backup_tar.c:1194 #, c-format msgid "skipping tar member %s\n" msgstr "saltando miembro del archivo tar %s\n" -#: pg_backup_tar.c:1194 +#: pg_backup_tar.c:1198 #, c-format msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file.\n" msgstr "" "la extracción de datos fuera de orden no está soportada en este formato:\n" "se requiere «%s», pero viene antes de «%s» en el archivador.\n" -#: pg_backup_tar.c:1241 +#: pg_backup_tar.c:1245 #, c-format msgid "incomplete tar header found (%lu byte)\n" msgid_plural "incomplete tar header found (%lu bytes)\n" msgstr[0] "se encontró un encabezado incompleto (%lu byte)\n" msgstr[1] "se encontró un encabezado incompleto (%lu bytes)\n" -#: pg_backup_tar.c:1279 +#: pg_backup_tar.c:1283 #, c-format msgid "TOC Entry %s at %s (length %lu, checksum %d)\n" msgstr "entrada TOC %s en %s (tamaño %lu, suma de integridad %d)\n" -#: pg_backup_tar.c:1289 +#: pg_backup_tar.c:1293 #, c-format msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s\n" msgstr "" @@ -1302,9 +1322,9 @@ msgstr "" msgid "%s: unrecognized section name: \"%s\"\n" msgstr "%s: nombre de sección «%s» no reconocido\n" -#: pg_backup_utils.c:56 pg_dump.c:539 pg_dump.c:556 pg_dumpall.c:305 -#: pg_dumpall.c:315 pg_dumpall.c:325 pg_dumpall.c:334 pg_dumpall.c:350 -#: pg_dumpall.c:408 pg_restore.c:278 pg_restore.c:294 pg_restore.c:306 +#: pg_backup_utils.c:56 pg_dump.c:521 pg_dump.c:538 pg_dumpall.c:300 +#: pg_dumpall.c:310 pg_dumpall.c:320 pg_dumpall.c:329 pg_dumpall.c:345 +#: pg_dumpall.c:403 pg_restore.c:277 pg_restore.c:293 pg_restore.c:305 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Prueba «%s --help» para más información.\n" @@ -1314,52 +1334,57 @@ msgstr "Prueba «%s --help» para más información.\n" msgid "out of on_exit_nicely slots\n" msgstr "elementos on_exit_nicely agotados\n" -#: pg_dump.c:554 pg_dumpall.c:313 pg_restore.c:292 +#: pg_dump.c:491 +#, c-format +msgid "compression level must be in range 0..9\n" +msgstr "nivel de compresión debe estar en el rango 0..9\n" + +#: pg_dump.c:536 pg_dumpall.c:308 pg_restore.c:291 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: demasiados argumentos en la línea de órdenes (el primero es «%s»)\n" -#: pg_dump.c:567 +#: pg_dump.c:549 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together\n" msgstr "las opciones -s/--schema-only y -a/--data-only no pueden usarse juntas\n" -#: pg_dump.c:573 +#: pg_dump.c:555 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together\n" msgstr "las opciones -c/--clean y -a/--data-only no pueden usarse juntas\n" -#: pg_dump.c:579 +#: pg_dump.c:561 #, c-format msgid "options --inserts/--column-inserts and -o/--oids cannot be used together\n" msgstr "las opciones --inserts/--column-inserts y -o/--oids no pueden usarse juntas\n" -#: pg_dump.c:580 +#: pg_dump.c:562 #, c-format msgid "(The INSERT command cannot set OIDs.)\n" msgstr "(La orden INSERT no puede establecer los OIDs).\n" -#: pg_dump.c:585 +#: pg_dump.c:567 #, c-format msgid "option --if-exists requires option -c/--clean\n" msgstr "la opción --if-exists requiere la opción -c/--clean\n" -#: pg_dump.c:613 +#: pg_dump.c:595 #, c-format msgid "%s: invalid number of parallel jobs\n" msgstr "%s: número de trabajos paralelos no válido\n" -#: pg_dump.c:617 +#: pg_dump.c:599 #, c-format msgid "parallel backup only supported by the directory format\n" msgstr "el volcado en paralelo sólo está soportado por el formato «directory»\n" -#: pg_dump.c:627 +#: pg_dump.c:609 #, c-format msgid "could not open output file \"%s\" for writing\n" msgstr "no se pudo abrir el archivo de salida «%s» para escritura\n" -#: pg_dump.c:686 +#: pg_dump.c:668 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1369,22 +1394,27 @@ msgstr "" "Los snapshots sincronizados no están soportados por esta versión del servidor.\n" "Ejecute con --no-synchronized-snapshots si no los necesita.\n" -#: pg_dump.c:699 +#: pg_dump.c:675 +#, c-format +msgid "Exported snapshots are not supported by this server version.\n" +msgstr "Los snapshot exportados no están soportados por esta versión de servidor.\n" + +#: pg_dump.c:686 #, c-format msgid "last built-in OID is %u\n" msgstr "el último OID interno es %u\n" -#: pg_dump.c:708 +#: pg_dump.c:695 #, c-format msgid "No matching schemas were found\n" msgstr "No se encontraron esquemas coincidentes\n" -#: pg_dump.c:720 +#: pg_dump.c:707 #, c-format msgid "No matching tables were found\n" msgstr "No se encontraron tablas coincidentes\n" -#: pg_dump.c:865 +#: pg_dump.c:861 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1393,17 +1423,17 @@ msgstr "" "%s extrae una base de datos en formato de texto o en otros formatos.\n" "\n" -#: pg_dump.c:866 pg_dumpall.c:553 pg_restore.c:432 +#: pg_dump.c:862 pg_dumpall.c:548 pg_restore.c:432 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_dump.c:867 +#: pg_dump.c:863 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPCIÓN]... [NOMBREDB]\n" -#: pg_dump.c:869 pg_dumpall.c:556 pg_restore.c:435 +#: pg_dump.c:865 pg_dumpall.c:551 pg_restore.c:435 #, c-format msgid "" "\n" @@ -1412,12 +1442,12 @@ msgstr "" "\n" "Opciones generales:\n" -#: pg_dump.c:870 +#: pg_dump.c:866 #, 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:871 +#: pg_dump.c:867 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1426,37 +1456,37 @@ 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:873 +#: pg_dump.c:869 #, 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:874 +#: pg_dump.c:870 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose modo verboso\n" -#: pg_dump.c:875 pg_dumpall.c:558 +#: pg_dump.c:871 pg_dumpall.c:553 #, 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:876 +#: pg_dump.c:872 #, 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:877 pg_dumpall.c:559 +#: pg_dump.c:873 pg_dumpall.c:554 #, 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:878 pg_dumpall.c:560 +#: pg_dump.c:874 pg_dumpall.c:555 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: pg_dump.c:880 pg_dumpall.c:561 +#: pg_dump.c:876 pg_dumpall.c:556 #, c-format msgid "" "\n" @@ -1465,49 +1495,49 @@ msgstr "" "\n" "Opciones que controlan el contenido de la salida:\n" -#: pg_dump.c:881 pg_dumpall.c:562 +#: pg_dump.c:877 pg_dumpall.c:557 #, 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:882 +#: pg_dump.c:878 #, 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:883 pg_restore.c:446 +#: pg_dump.c:879 pg_restore.c:446 #, 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:884 +#: pg_dump.c:880 #, 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:885 +#: pg_dump.c:881 #, 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:886 +#: pg_dump.c:882 #, c-format msgid " -n, --schema=SCHEMA dump the named schema(s) only\n" msgstr " -n, --schema=ESQUEMA extrae sólo el esquema nombrado\n" -#: pg_dump.c:887 +#: pg_dump.c:883 #, c-format msgid " -N, --exclude-schema=SCHEMA do NOT dump the named schema(s)\n" msgstr " -N, --exclude-schema=ESQUEMA NO extrae el o los esquemas nombrados\n" -#: pg_dump.c:888 pg_dumpall.c:565 +#: pg_dump.c:884 pg_dumpall.c:560 #, c-format msgid " -o, --oids include OIDs in dump\n" msgstr " -o, --oids incluye OIDs en la extracción\n" -#: pg_dump.c:889 +#: pg_dump.c:885 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1516,116 +1546,130 @@ msgstr "" " -O, --no-owner en formato de sólo texto, no reestablece\n" " los dueños de los objetos\n" -#: pg_dump.c:891 pg_dumpall.c:568 +#: pg_dump.c:887 pg_dumpall.c:563 #, 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:892 +#: pg_dump.c:888 #, 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:893 +#: pg_dump.c:889 #, c-format msgid " -t, --table=TABLE dump the named table(s) only\n" msgstr " -t, --table=TABLE extrae sólo la o las tablas nombradas\n" -#: pg_dump.c:894 +#: pg_dump.c:890 #, c-format msgid " -T, --exclude-table=TABLE do NOT dump the named table(s)\n" msgstr " -T, --exclude-table=TABLA NO extrae la(s) tabla(s) nombrada(s)\n" -#: pg_dump.c:895 pg_dumpall.c:571 +#: pg_dump.c:891 pg_dumpall.c:566 #, 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:896 pg_dumpall.c:572 +#: pg_dump.c:892 pg_dumpall.c:567 #, 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:897 pg_dumpall.c:573 +#: pg_dump.c:893 pg_dumpall.c:568 #, 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:898 pg_dumpall.c:574 +#: pg_dump.c:894 pg_dumpall.c:569 #, 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:899 pg_dumpall.c:575 pg_restore.c:462 +#: pg_dump.c:895 pg_dumpall.c:570 pg_restore.c:462 #, 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:900 +#: pg_dump.c:896 +#, c-format +msgid "" +" --enable-row-security enable row security (dump only content user has\n" +" access to)\n" +msgstr "" +" --enable-row-security activa seguridad de filas (volcar sólo el\n" +" contenido al que el usuario tiene acceso)\n" + +#: pg_dump.c:898 #, c-format msgid " --exclude-table-data=TABLE do NOT dump data for the named table(s)\n" msgstr " --exclude-table-data=TABLA NO extrae los datos de la(s) tabla(s) nombrada(s)\n" -#: pg_dump.c:901 pg_dumpall.c:576 pg_restore.c:463 +#: pg_dump.c:899 pg_dumpall.c:571 pg_restore.c:464 #, 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:902 pg_dumpall.c:577 +#: pg_dump.c:900 pg_dumpall.c:572 #, 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:903 pg_dumpall.c:578 +#: pg_dump.c:901 pg_dumpall.c:573 #, 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:904 +#: pg_dump.c:902 #, 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:905 pg_dumpall.c:579 +#: pg_dump.c:903 pg_dumpall.c:574 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces no volcar asignaciones de tablespace\n" -#: pg_dump.c:906 pg_dumpall.c:580 +#: pg_dump.c:904 pg_dumpall.c:575 #, 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:907 pg_dumpall.c:581 +#: pg_dump.c:905 pg_dumpall.c:576 #, 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:908 +#: pg_dump.c:906 #, 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:909 +#: pg_dump.c:907 #, 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:910 pg_dumpall.c:582 pg_restore.c:469 +#: pg_dump.c:908 +#, 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:909 pg_dumpall.c:577 pg_restore.c:470 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1636,7 +1680,7 @@ msgstr "" " usa órdenes SESSION AUTHORIZATION en lugar de\n" " ALTER OWNER para cambiar los dueño de los objetos\n" -#: pg_dump.c:914 pg_dumpall.c:586 pg_restore.c:473 +#: pg_dump.c:913 pg_dumpall.c:581 pg_restore.c:474 #, c-format msgid "" "\n" @@ -1645,46 +1689,46 @@ msgstr "" "\n" "Opciones de conexión:\n" -#: pg_dump.c:915 +#: pg_dump.c:914 #, 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:916 pg_dumpall.c:588 pg_restore.c:474 +#: pg_dump.c:915 pg_dumpall.c:583 pg_restore.c:475 #, 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:917 pg_dumpall.c:590 pg_restore.c:475 +#: pg_dump.c:916 pg_dumpall.c:585 pg_restore.c:476 #, 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:918 pg_dumpall.c:591 pg_restore.c:476 +#: pg_dump.c:917 pg_dumpall.c:586 pg_restore.c:477 #, 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:919 pg_dumpall.c:592 pg_restore.c:477 +#: pg_dump.c:918 pg_dumpall.c:587 pg_restore.c:478 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir una contraseña\n" -#: pg_dump.c:920 pg_dumpall.c:593 pg_restore.c:478 +#: pg_dump.c:919 pg_dumpall.c:588 pg_restore.c:479 #, 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:921 pg_dumpall.c:594 +#: pg_dump.c:920 pg_dumpall.c:589 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROL ejecuta SET ROLE antes del volcado\n" -#: pg_dump.c:923 +#: pg_dump.c:922 #, c-format msgid "" "\n" @@ -1697,7 +1741,7 @@ msgstr "" "de la variable de ambiente PGDATABASE.\n" "\n" -#: pg_dump.c:925 pg_dumpall.c:598 pg_restore.c:485 +#: pg_dump.c:924 pg_dumpall.c:593 pg_restore.c:486 #, c-format msgid "Report bugs to .\n" msgstr "Reporta errores a .\n" @@ -1707,322 +1751,352 @@ msgstr "Reporta errores a .\n" msgid "invalid client encoding \"%s\" specified\n" msgstr "la codificación de cliente especificada «%s» no es válida\n" -#: pg_dump.c:1105 +#: pg_dump.c:1128 #, c-format msgid "invalid output format \"%s\" specified\n" msgstr "el formato de salida especificado «%s» no es válido\n" -#: pg_dump.c:1127 +#: pg_dump.c:1150 #, c-format msgid "server version must be at least 7.3 to use schema selection switches\n" msgstr "" "la versión del servidor debe ser al menos 7.3 para usar los parámetros de\n" "selección de esquema\n" -#: pg_dump.c:1403 +#: pg_dump.c:1439 #, c-format -msgid "dumping contents of table %s\n" -msgstr "extrayendo el contenido de la tabla %s\n" +msgid "dumping contents of table \"%s.%s\"\n" +msgstr "extrayendo el contenido de la tabla «%s.%s»\n" -#: pg_dump.c:1526 +#: pg_dump.c:1563 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed.\n" msgstr "Falló la extracción del contenido de la tabla «%s»: PQgetCopyData() falló.\n" -#: pg_dump.c:1527 pg_dump.c:1537 +#: pg_dump.c:1564 pg_dump.c:1574 #, c-format msgid "Error message from server: %s" msgstr "Mensaje de error del servidor: %s" -#: pg_dump.c:1528 pg_dump.c:1538 +#: pg_dump.c:1565 pg_dump.c:1575 #, c-format msgid "The command was: %s\n" msgstr "La orden era: %s\n" -#: pg_dump.c:1536 +#: pg_dump.c:1573 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed.\n" msgstr "Falló la extracción del contenido de la tabla «%s»: PQgetResult() falló.\n" -#: pg_dump.c:2174 +#: pg_dump.c:2212 #, c-format msgid "saving database definition\n" msgstr "salvando las definiciones de la base de datos\n" -#: pg_dump.c:2503 +#: pg_dump.c:2545 #, c-format msgid "saving encoding = %s\n" msgstr "salvando codificaciones = %s\n" -#: pg_dump.c:2530 +#: pg_dump.c:2572 #, c-format msgid "saving standard_conforming_strings = %s\n" msgstr "salvando standard_conforming_strings = %s\n" -#: pg_dump.c:2563 +#: pg_dump.c:2605 #, c-format msgid "reading large objects\n" msgstr "leyendo objetos grandes\n" -#: pg_dump.c:2695 +#: pg_dump.c:2737 #, c-format msgid "saving large objects\n" msgstr "salvando objetos grandes\n" -#: pg_dump.c:2742 +#: pg_dump.c:2784 #, c-format msgid "error reading large object %u: %s" msgstr "error al leer el objeto grande %u: %s" -#: pg_dump.c:2935 +#: pg_dump.c:2836 +#, c-format +msgid "reading row security enabled for table \"%s.%s\"\n" +msgstr "leyendo si seguridad de filas está activa para la tabla «%s.%s»\n" + +#: pg_dump.c:2867 +#, c-format +msgid "reading policies for table \"%s.%s\"\n" +msgstr "extrayendo las políticas para la tabla «%s.%s»\n" + +#: pg_dump.c:2997 +#, c-format +msgid "unexpected policy command type: \"%s\"\n" +msgstr "tipo de orden inesperada en política: «%s»\n" + +#: pg_dump.c:3212 #, c-format msgid "could not find parent extension for %s\n" msgstr "no se pudo encontrar la extensión padre para %s\n" -#: pg_dump.c:3038 +#: pg_dump.c:3315 #, c-format msgid "WARNING: owner of schema \"%s\" appears to be invalid\n" msgstr "PRECAUCIÓN: el dueño del esquema «%s» parece no ser válido\n" -#: pg_dump.c:3081 +#: pg_dump.c:3358 #, c-format msgid "schema with OID %u does not exist\n" msgstr "el esquema con OID %u no existe\n" -#: pg_dump.c:3431 +#: pg_dump.c:3708 #, c-format msgid "WARNING: owner of data type \"%s\" appears to be invalid\n" msgstr "PRECAUCIÓN: el dueño del tipo «%s» parece no ser válido\n" -#: pg_dump.c:3542 +#: pg_dump.c:3819 #, c-format msgid "WARNING: owner of operator \"%s\" appears to be invalid\n" msgstr "PRECAUCIÓN: el dueño del operador «%s» parece no ser válido\n" -#: pg_dump.c:3801 +#: pg_dump.c:4078 #, c-format msgid "WARNING: owner of operator class \"%s\" appears to be invalid\n" msgstr "PRECAUCIÓN: el dueño de la clase de operadores «%s» parece no ser válido\n" -#: pg_dump.c:3889 +#: pg_dump.c:4166 #, c-format msgid "WARNING: owner of operator family \"%s\" appears to be invalid\n" msgstr "PRECAUCIÓN: el dueño de la familia de operadores «%s» parece no ser válido\n" -#: pg_dump.c:4048 +#: pg_dump.c:4304 #, c-format msgid "WARNING: owner of aggregate function \"%s\" appears to be invalid\n" msgstr "PRECAUCIÓN: el dueño de la función de agregación «%s» parece no ser válido\n" -#: pg_dump.c:4252 +#: pg_dump.c:4486 #, c-format msgid "WARNING: owner of function \"%s\" appears to be invalid\n" msgstr "PRECAUCIÓN: el dueño de la función «%s» parece no ser válido\n" -#: pg_dump.c:4870 +#: pg_dump.c:5159 #, c-format msgid "WARNING: owner of table \"%s\" appears to be invalid\n" msgstr "PRECAUCIÓN: el dueño de la tabla «%s» parece no ser válido\n" -#: pg_dump.c:5022 +#: pg_dump.c:5311 #, c-format -msgid "reading indexes for table \"%s\"\n" -msgstr "extrayendo los índices para la tabla «%s»\n" +msgid "reading indexes for table \"%s.%s\"\n" +msgstr "extrayendo los índices para la tabla «%s.%s»\n" -#: pg_dump.c:5388 +#: pg_dump.c:5678 #, c-format -msgid "reading foreign key constraints for table \"%s\"\n" -msgstr "extrayendo restricciones de llave foránea para la tabla «%s»\n" +msgid "reading foreign key constraints for table \"%s.%s\"\n" +msgstr "extrayendo restricciones de llave foránea para la tabla «%s.%s»\n" -#: pg_dump.c:5633 +#: pg_dump.c:5924 #, c-format msgid "failed sanity check, parent table OID %u of pg_rewrite entry OID %u not found\n" msgstr "falló la revisión de integridad: no se encontró la tabla padre OID %u del elemento con OID %u de pg_rewrite\n" -#: pg_dump.c:5726 +#: pg_dump.c:6017 #, c-format -msgid "reading triggers for table \"%s\"\n" -msgstr "extrayendo los disparadores (triggers) para la tabla «%s»\n" +msgid "reading triggers for table \"%s.%s\"\n" +msgstr "extrayendo los disparadores (triggers) para la tabla «%s.%s»\n" -#: pg_dump.c:5887 +#: pg_dump.c:6179 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)\n" msgstr "" "la consulta produjo un nombre de tabla nulo para la llave foránea del \n" "disparador \"%s\" en la tabla «%s» (OID de la tabla: %u)\n" -#: pg_dump.c:6339 +#: pg_dump.c:6751 #, c-format -msgid "finding the columns and types of table \"%s\"\n" -msgstr "buscando las columnas y tipos de la tabla «%s»\n" +msgid "finding the columns and types of table \"%s.%s\"\n" +msgstr "buscando las columnas y tipos de la tabla «%s.%s»\n" -#: pg_dump.c:6517 +#: pg_dump.c:6930 #, c-format msgid "invalid column numbering in table \"%s\"\n" msgstr "numeración de columnas no válida en la tabla «%s»\n" -#: pg_dump.c:6551 +#: pg_dump.c:6964 #, c-format -msgid "finding default expressions of table \"%s\"\n" -msgstr "buscando expresiones por omisión de la tabla «%s»\n" +msgid "finding default expressions of table \"%s.%s\"\n" +msgstr "buscando expresiones por omisión de la tabla «%s.%s»\n" -#: pg_dump.c:6603 +#: pg_dump.c:7017 #, c-format msgid "invalid adnum value %d for table \"%s\"\n" msgstr "el valor de adnum %d para la tabla «%s» no es válido\n" -#: pg_dump.c:6675 +#: pg_dump.c:7089 #, c-format -msgid "finding check constraints for table \"%s\"\n" -msgstr "buscando restricciones de revisión (check) para la tabla «%s»\n" +msgid "finding check constraints for table \"%s.%s\"\n" +msgstr "buscando restricciones de revisión (check) para la tabla «%s.%s»\n" -#: pg_dump.c:6770 +#: pg_dump.c:7185 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d\n" msgid_plural "expected %d check constraints on table \"%s\" but found %d\n" msgstr[0] "se esperaban %d restricciones CHECK en la tabla «%s» pero se encontraron %d\n" msgstr[1] "se esperaban %d restricciones CHECK en la tabla «%s» pero se encontraron %d\n" -#: pg_dump.c:6774 +#: pg_dump.c:7189 #, c-format msgid "(The system catalogs might be corrupted.)\n" msgstr "(Los catálogos del sistema podrían estar corruptos)\n" -#: pg_dump.c:8143 +#: pg_dump.c:8566 #, c-format msgid "WARNING: typtype of data type \"%s\" appears to be invalid\n" msgstr "PRECAUCIÓN: el typtype del tipo «%s» parece no ser válido\n" -#: pg_dump.c:9585 +#: pg_dump.c:10092 #, c-format msgid "WARNING: bogus value in proargmodes array\n" msgstr "PRECAUCIÓN: valor no válido en el arreglo proargmodes\n" -#: pg_dump.c:9913 +#: pg_dump.c:10443 #, c-format msgid "WARNING: could not parse proallargtypes array\n" msgstr "PRECAUCIÓN: no se pudo interpretar el arreglo proallargtypes\n" -#: pg_dump.c:9929 +#: pg_dump.c:10459 #, c-format msgid "WARNING: could not parse proargmodes array\n" msgstr "PRECAUCIÓN: no se pudo interpretar el arreglo proargmodes\n" -#: pg_dump.c:9943 +#: pg_dump.c:10473 #, c-format msgid "WARNING: could not parse proargnames array\n" msgstr "PRECAUCIÓN: no se pudo interpretar el arreglo proargnames\n" -#: pg_dump.c:9954 +#: pg_dump.c:10484 #, c-format msgid "WARNING: could not parse proconfig array\n" msgstr "PRECAUCIÓN: no se pudo interpretar el arreglo proconfig\n" -#: pg_dump.c:10009 +#: pg_dump.c:10555 #, c-format msgid "unrecognized provolatile value for function \"%s\"\n" msgstr "el valor del atributo «provolatile» para la función «%s» es desconocido\n" -#: pg_dump.c:10231 +#: pg_dump.c:10731 #, c-format msgid "WARNING: bogus value in pg_cast.castfunc or pg_cast.castmethod field\n" msgstr "PRECAUCIÓN: valor no válido en los campos pg_cast.castfunc o pg_cast.castmethod\n" -#: pg_dump.c:10234 +#: pg_dump.c:10734 #, c-format msgid "WARNING: bogus value in pg_cast.castmethod field\n" msgstr "PRECAUCIÓN: valor no válido en el campo pg_cast.castmethod\n" -#: pg_dump.c:10622 +#: pg_dump.c:10817 +#, c-format +msgid "WARNING: bogus transform definition, at least one of trffromsql and trftosql should be nonzero\n" +msgstr "PRECAUCIÓN: definición errónea de transformación; al menos uno de trffromsql and trftosql debe ser distinto de cero\n" + +#: pg_dump.c:10834 +#, c-format +msgid "WARNING: bogus value in pg_transform.trffromsql field\n" +msgstr "PRECAUCIÓN: valor erróneo en el campo pg_transform.trffromsql\n" + +#: pg_dump.c:10855 +#, c-format +msgid "WARNING: bogus value in pg_transform.trftosql field\n" +msgstr "PRECAUCIÓN: valor erróneo en el campo pg_transform.trftosql\n" + +#: pg_dump.c:11241 #, c-format msgid "WARNING: could not find operator with OID %s\n" msgstr "PRECAUCIÓN: no se pudo encontrar el operador con OID %s\n" -#: pg_dump.c:11797 +#: pg_dump.c:12416 #, c-format msgid "WARNING: aggregate function %s could not be dumped correctly for this database version; ignored\n" msgstr "" "PRECAUCIÓN: la función de agregación «%s» no se pudo extraer correctamente\n" "para esta versión de la base de datos; ignorada\n" -#: pg_dump.c:12622 +#: pg_dump.c:13241 #, c-format msgid "unrecognized object type in default privileges: %d\n" msgstr "tipo de objeto desconocido en privilegios por omisión: %d\n" -#: pg_dump.c:12637 +#: pg_dump.c:13256 #, c-format msgid "could not parse default ACL list (%s)\n" msgstr "no se pudo interpretar la lista de ACL (%s)\n" -#: pg_dump.c:12692 +#: pg_dump.c:13311 #, c-format msgid "could not parse ACL list (%s) for object \"%s\" (%s)\n" msgstr "no se pudo interpretar la lista de ACL (%s) para el objeto «%s» (%s)\n" -#: pg_dump.c:13109 +#: pg_dump.c:13728 #, c-format msgid "query to obtain definition of view \"%s\" returned no data\n" msgstr "la consulta para obtener la definición de la vista «%s» no regresó datos\n" -#: pg_dump.c:13112 +#: pg_dump.c:13731 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition\n" msgstr "la consulta para obtener la definición de la vista «%s» regresó más de una definición\n" -#: pg_dump.c:13119 +#: pg_dump.c:13738 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)\n" msgstr "la definición de la vista «%s» parece estar vacía (tamaño cero)\n" -#: pg_dump.c:13852 +#: pg_dump.c:14475 #, c-format msgid "invalid column number %d for table \"%s\"\n" msgstr "el número de columna %d no es válido para la tabla «%s»\n" -#: pg_dump.c:13976 +#: pg_dump.c:14599 #, c-format msgid "missing index for constraint \"%s\"\n" msgstr "falta un índice para restricción «%s»\n" -#: pg_dump.c:14163 +#: pg_dump.c:14786 #, c-format msgid "unrecognized constraint type: %c\n" msgstr "tipo de restricción inesperado: %c\n" -#: pg_dump.c:14312 pg_dump.c:14476 +#: pg_dump.c:14935 pg_dump.c:15099 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)\n" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)\n" msgstr[0] "la consulta para obtener los datos de la secuencia «%s» regresó %d entrada, pero se esperaba 1\n" msgstr[1] "la consulta para obtener los datos de la secuencia «%s» regresó %d entradas, pero se esperaba 1\n" -#: pg_dump.c:14323 +#: pg_dump.c:14946 #, c-format msgid "query to get data of sequence \"%s\" returned name \"%s\"\n" msgstr "la consulta para obtener los datos de la secuencia «%s» regresó el nombre «%s»\n" -#: pg_dump.c:14571 +#: pg_dump.c:15194 #, c-format msgid "unexpected tgtype value: %d\n" msgstr "tgtype no esperado: %d\n" -#: pg_dump.c:14653 +#: pg_dump.c:15276 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"\n" msgstr "argumento de cadena (%s) no válido para el disparador (trigger) «%s» en la tabla «%s»\n" -#: pg_dump.c:14841 +#: pg_dump.c:15463 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned\n" msgstr "la consulta para obtener la regla «%s» asociada con la tabla «%s» falló: retornó un número incorrecto de renglones\n" -#: pg_dump.c:15142 +#: pg_dump.c:15842 #, c-format msgid "reading dependency data\n" msgstr "obteniendo datos de dependencias\n" -#: pg_dump.c:15687 +#: pg_dump.c:16389 #, c-format msgid "query returned %d row instead of one: %s\n" msgid_plural "query returned %d rows instead of one: %s\n" @@ -2030,51 +2104,53 @@ msgstr[0] "la consulta regresó %d fila en lugar de una: %s\n" msgstr[1] "la consulta regresó %d filas en lugar de una: %s\n" #. translator: this is a module name -#: pg_dump_sort.c:21 +#: pg_dump_sort.c:23 msgid "sorter" msgstr "sorter" -#: pg_dump_sort.c:466 +#: pg_dump_sort.c:489 #, c-format msgid "invalid dumpId %d\n" msgstr "dumpId %d no válido\n" -#: pg_dump_sort.c:472 +#: pg_dump_sort.c:495 #, c-format msgid "invalid dependency %d\n" msgstr "dependencia %d no válida\n" -#: pg_dump_sort.c:705 +#: pg_dump_sort.c:728 #, c-format msgid "could not identify dependency loop\n" msgstr "no se pudo identificar bucle de dependencia\n" -#: pg_dump_sort.c:1227 +#: pg_dump_sort.c:1250 #, c-format -msgid "NOTICE: there are circular foreign-key constraints among these table(s):\n" -msgstr "NOTA: hay restricciones de llave foránea circulares entre las siguientes tablas:\n" +msgid "NOTICE: there are circular foreign-key constraints on this table:\n" +msgid_plural "NOTICE: there are circular foreign-key constraints among these tables:\n" +msgstr[0] "NOTA: hay restricciones de llave foránea circulares en la siguiente tabla:\n" +msgstr[1] "NOTA: hay restricciones de llave foránea circulares entre las siguientes tablas:\n" -#: pg_dump_sort.c:1229 pg_dump_sort.c:1249 +#: pg_dump_sort.c:1254 pg_dump_sort.c:1274 #, c-format msgid " %s\n" msgstr " %s\n" -#: pg_dump_sort.c:1230 +#: pg_dump_sort.c:1255 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints.\n" msgstr "Puede no ser capaz de restaurar el respaldo sin usar --disable-triggers o temporalmente eliminar las restricciones.\n" -#: pg_dump_sort.c:1231 +#: pg_dump_sort.c:1256 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem.\n" msgstr "Considere usar un volcado completo en lugar de --data-only para evitar este problema.\n" -#: pg_dump_sort.c:1243 +#: pg_dump_sort.c:1268 #, c-format msgid "WARNING: could not resolve dependency loop among these items:\n" msgstr "PRECAUCIÓN: no se pudo resolver el bucle de dependencias entre los siguientes elementos:\n" -#: pg_dumpall.c:182 +#: pg_dumpall.c:181 #, c-format msgid "" "The program \"pg_dump\" is needed by %s but was not found in the\n" @@ -2085,7 +2161,7 @@ msgstr "" "directorio que «%s».\n" "Verifique su instalación.\n" -#: pg_dumpall.c:189 +#: pg_dumpall.c:188 #, c-format msgid "" "The program \"pg_dump\" was found by \"%s\"\n" @@ -2096,32 +2172,32 @@ msgstr "" "pero no es de la misma versión que %s.\n" "Verifique su instalación.\n" -#: pg_dumpall.c:323 +#: pg_dumpall.c:318 #, c-format msgid "%s: options -g/--globals-only and -r/--roles-only cannot be used together\n" msgstr "%s: las opciones -g/--globals-only y -r/--roles-only no pueden usarse juntas\n" -#: pg_dumpall.c:332 +#: pg_dumpall.c:327 #, c-format msgid "%s: options -g/--globals-only and -t/--tablespaces-only cannot be used together\n" msgstr "%s: las opciones -g/--globals-only y -t/--tablespaces-only no pueden usarse juntas\n" -#: pg_dumpall.c:341 pg_restore.c:343 +#: pg_dumpall.c:336 pg_restore.c:343 #, c-format msgid "%s: option --if-exists requires option -c/--clean\n" msgstr "%s: la opción --if-exists requiere la opción -c/--clean\n" -#: pg_dumpall.c:348 +#: pg_dumpall.c:343 #, c-format msgid "%s: options -r/--roles-only and -t/--tablespaces-only cannot be used together\n" msgstr "%s: las opciones -r/--roles-only y -t/--tablespaces-only no pueden usarse juntas\n" -#: pg_dumpall.c:390 pg_dumpall.c:1861 +#: pg_dumpall.c:385 pg_dumpall.c:1892 #, c-format msgid "%s: could not connect to database \"%s\"\n" msgstr "%s: no se pudo establecer la conexión a la base de datos «%s»\n" -#: pg_dumpall.c:405 +#: pg_dumpall.c:400 #, c-format msgid "" "%s: could not connect to databases \"postgres\" or \"template1\"\n" @@ -2130,12 +2206,12 @@ msgstr "" "%s: 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.\n" -#: pg_dumpall.c:422 +#: pg_dumpall.c:417 #, c-format msgid "%s: could not open the output file \"%s\": %s\n" msgstr "%s: no se pudo abrir el archivo de salida «%s»: %s\n" -#: pg_dumpall.c:552 +#: pg_dumpall.c:547 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2145,63 +2221,63 @@ msgstr "" "guión (script) SQL.\n" "\n" -#: pg_dumpall.c:554 +#: pg_dumpall.c:549 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPCIÓN]...\n" -#: pg_dumpall.c:557 +#: pg_dumpall.c:552 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=ARCHIVO nombre del archivo de salida\n" -#: pg_dumpall.c:563 +#: pg_dumpall.c:558 #, 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:564 +#: pg_dumpall.c:559 #, 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:566 pg_restore.c:454 +#: pg_dumpall.c:561 pg_restore.c:454 #, 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:567 +#: pg_dumpall.c:562 #, 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:569 +#: pg_dumpall.c:564 #, 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:570 +#: pg_dumpall.c:565 #, 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:587 +#: pg_dumpall.c:582 #, 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:589 +#: pg_dumpall.c:584 #, 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:596 +#: pg_dumpall.c:591 #, c-format msgid "" "\n" @@ -2213,82 +2289,82 @@ msgstr "" "Si no se usa -f/--file, el volcado de SQL será escrito a la salida estándar.\n" "\n" -#: pg_dumpall.c:1101 +#: pg_dumpall.c:1118 #, c-format msgid "%s: could not parse ACL list (%s) for tablespace \"%s\"\n" msgstr "%s: no se pudo interpretar la lista de control de acceso (%s) del tablespace «%s»\n" -#: pg_dumpall.c:1418 +#: pg_dumpall.c:1449 #, c-format msgid "%s: could not parse ACL list (%s) for database \"%s\"\n" msgstr "%s: no se pudo interpretar la lista de control de acceso (%s) de la base de datos «%s»\n" -#: pg_dumpall.c:1628 +#: pg_dumpall.c:1659 #, c-format msgid "%s: dumping database \"%s\"...\n" msgstr "%s: extrayendo base de datos «%s»...\n" -#: pg_dumpall.c:1649 +#: pg_dumpall.c:1680 #, c-format msgid "%s: pg_dump failed on database \"%s\", exiting\n" msgstr "%s: pg_dump falló en la base de datos «%s», saliendo\n" -#: pg_dumpall.c:1658 +#: pg_dumpall.c:1689 #, c-format msgid "%s: could not re-open the output file \"%s\": %s\n" msgstr "%s: no se pudo reabrir el archivo de salida «%s»: %s\n" -#: pg_dumpall.c:1703 +#: pg_dumpall.c:1734 #, c-format msgid "%s: running \"%s\"\n" msgstr "%s: ejecutando «%s»\n" -#: pg_dumpall.c:1883 +#: pg_dumpall.c:1914 #, c-format msgid "%s: could not connect to database \"%s\": %s\n" msgstr "%s: no se pudo establecer la conexión a la base de datos «%s»: %s\n" -#: pg_dumpall.c:1913 +#: pg_dumpall.c:1944 #, c-format msgid "%s: could not get server version\n" msgstr "%s: no se pudo obtener la versión del servidor\n" -#: pg_dumpall.c:1919 +#: pg_dumpall.c:1950 #, c-format msgid "%s: could not parse server version \"%s\"\n" msgstr "%s: no se pudo interpretar la versión del servidor «%s»\n" -#: pg_dumpall.c:1997 pg_dumpall.c:2023 +#: pg_dumpall.c:2028 pg_dumpall.c:2054 #, c-format msgid "%s: executing %s\n" msgstr "%s: ejecutando %s\n" -#: pg_dumpall.c:2003 pg_dumpall.c:2029 +#: pg_dumpall.c:2034 pg_dumpall.c:2060 #, c-format msgid "%s: query failed: %s" msgstr "%s: falló la consulta: %s" -#: pg_dumpall.c:2005 pg_dumpall.c:2031 +#: pg_dumpall.c:2036 pg_dumpall.c:2062 #, c-format msgid "%s: query was: %s\n" msgstr "%s: la consulta era: %s\n" -#: pg_restore.c:304 +#: pg_restore.c:303 #, c-format msgid "%s: options -d/--dbname and -f/--file cannot be used together\n" msgstr "%s: las opciones -d/--dbname y -f/--file no pueden usarse juntas\n" -#: pg_restore.c:315 +#: pg_restore.c:314 #, c-format msgid "%s: options -s/--schema-only and -a/--data-only cannot be used together\n" msgstr "%s: las opciones -s/--schema-only y -a/--data-only no pueden usarse juntas\n" -#: pg_restore.c:322 +#: pg_restore.c:321 #, c-format msgid "%s: options -c/--clean and -a/--data-only cannot be used together\n" msgstr "%s: las opciones -c/--clean y -a/--data-only no pueden usarse juntas\n" -#: pg_restore.c:330 +#: pg_restore.c:329 #, c-format msgid "%s: cannot specify both --single-transaction and multiple jobs\n" msgstr "%s: no se puede especificar --single-transaction junto con múltiples tareas\n" @@ -2449,7 +2525,12 @@ msgstr " -x, --no-privileges no reestablece los privilegios (grant/revoke) msgid " -1, --single-transaction restore as a single transaction\n" msgstr " -1, --single-transaction reestablece en una única transacción\n" -#: pg_restore.c:464 +#: pg_restore.c:463 +#, c-format +msgid " --enable-row-security enable row security\n" +msgstr " --enable-row-security activa seguridad de filas\n" + +#: pg_restore.c:465 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not be\n" @@ -2459,29 +2540,29 @@ msgstr "" " no reestablece datos de tablas que no pudieron\n" " ser creadas\n" -#: pg_restore.c:466 +#: pg_restore.c:467 #, 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:467 +#: pg_restore.c:468 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces no vuelca asignaciones de tablespace\n" -#: pg_restore.c:468 +#: pg_restore.c:469 #, 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:479 +#: pg_restore.c:480 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=ROLENAME hace SET ROLE antes de restaurar\n" -#: pg_restore.c:481 +#: pg_restore.c:482 #, c-format msgid "" "\n" @@ -2492,7 +2573,7 @@ msgstr "" "Las opciones -I, -n, -P, -t, -T, y --section pueden ser combinadas y especificadas\n" "varias veces para seleccionar varios objetos.\n" -#: pg_restore.c:484 +#: pg_restore.c:485 #, c-format msgid "" "\n" diff --git a/src/bin/pg_dump/po/it.po b/src/bin/pg_dump/po/it.po index 8837e89bb81c9..696e03ed84ea6 100644 --- a/src/bin/pg_dump/po/it.po +++ b/src/bin/pg_dump/po/it.po @@ -22,10 +22,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_dump (Postgresql) 9.4\n" +"Project-Id-Version: pg_dump (Postgresql) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-08-23 05:12+0000\n" -"PO-Revision-Date: 2014-08-25 21:16+0100\n" +"POT-Creation-Date: 2015-08-15 18:43+0000\n" +"PO-Revision-Date: 2015-08-16 10:01+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -70,14 +70,14 @@ msgstr "lettura del link simbolico \"%s\" fallita" msgid "pclose failed: %s" msgstr "pclose fallita: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 pg_backup_db.c:134 pg_backup_db.c:189 -#: pg_backup_db.c:233 pg_backup_db.c:279 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 pg_backup_db.c:135 pg_backup_db.c:190 +#: pg_backup_db.c:234 pg_backup_db.c:280 #, c-format msgid "out of memory\n" msgstr "memoria esaurita\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "impossibile duplicare il puntatore nullo (errore interno)\n" @@ -117,225 +117,235 @@ msgstr "processo figlio terminato da segnale %d" msgid "child process exited with unrecognized status %d" msgstr "processo figlio uscito con stato non riconosciuto %d" -#: common.c:105 +#: common.c:109 #, c-format msgid "reading schemas\n" msgstr "lettura schemi\n" -#: common.c:116 +#: common.c:120 #, c-format msgid "reading user-defined tables\n" msgstr "lettura delle tabelle definite dall'utente\n" -#: common.c:124 +#: common.c:128 #, c-format msgid "reading extensions\n" msgstr "lettura delle estensioni\n" -#: common.c:128 +#: common.c:132 #, c-format msgid "reading user-defined functions\n" msgstr "lettura funzioni definite dall'utente\n" -#: common.c:134 +#: common.c:138 #, c-format msgid "reading user-defined types\n" msgstr "lettura tipi definiti dall'utente\n" -#: common.c:140 +#: common.c:144 #, c-format msgid "reading procedural languages\n" msgstr "lettura linguaggi procedurali\n" -#: common.c:144 +#: common.c:148 #, c-format msgid "reading user-defined aggregate functions\n" msgstr "lettura funzioni di aggregazione definite dall'utente\n" -#: common.c:148 +#: common.c:152 #, c-format msgid "reading user-defined operators\n" msgstr "lettura operatori definiti dall'utente\n" -#: common.c:153 +#: common.c:157 #, c-format msgid "reading user-defined operator classes\n" msgstr "lettura classi operatore definite dall'utente\n" -#: common.c:157 +#: common.c:161 #, c-format msgid "reading user-defined operator families\n" msgstr "lettura delle famiglie di operatori definiti dall'utente\n" -#: common.c:161 +#: common.c:165 #, c-format msgid "reading user-defined text search parsers\n" msgstr "lettura dei parser di ricerca testo definiti dall'utente\n" -#: common.c:165 +#: common.c:169 #, c-format msgid "reading user-defined text search templates\n" msgstr "lettura dei modelli di ricerca testo definiti dall'utente\n" -#: common.c:169 +#: common.c:173 #, c-format msgid "reading user-defined text search dictionaries\n" msgstr "lettura dei dizionari di ricerca testo definiti dall'utente\n" -#: common.c:173 +#: common.c:177 #, c-format msgid "reading user-defined text search configurations\n" msgstr "lettura delle configurazioni di ricerca testo definite dall'utente\n" -#: common.c:177 +#: common.c:181 #, c-format msgid "reading user-defined foreign-data wrappers\n" msgstr "lettura dei wrapper di dati esterni definiti dall'utente\n" -#: common.c:181 +#: common.c:185 #, c-format msgid "reading user-defined foreign servers\n" msgstr "lettura dei server esterni definiti dall'utente\n" -#: common.c:185 +#: common.c:189 #, c-format msgid "reading default privileges\n" msgstr "lettura dei privilegi predefiniti\n" -#: common.c:189 +#: common.c:193 #, c-format msgid "reading user-defined collations\n" msgstr "lettura degli ordini definiti dall'utente\n" -#: common.c:194 +#: common.c:198 #, c-format msgid "reading user-defined conversions\n" msgstr "lettura delle conversioni definite dall'utente\n" -#: common.c:198 +#: common.c:202 #, c-format msgid "reading type casts\n" msgstr "lettura delle conversioni dei tipi\n" -#: common.c:202 +#: common.c:206 +#, c-format +msgid "reading transforms\n" +msgstr "lettura delle trasformazioni\n" + +#: common.c:210 #, c-format msgid "reading table inheritance information\n" msgstr "lettura informazioni di ereditarietà delle tabelle\n" -#: common.c:206 +#: common.c:214 #, c-format msgid "reading event triggers\n" msgstr "lettura dei trigger di evento\n" -#: common.c:215 +#: common.c:223 #, c-format msgid "finding extension members\n" msgstr "ricerca degli elementi delle estensioni\n" -#: common.c:220 +#: common.c:228 #, c-format msgid "finding inheritance relationships\n" msgstr "ricerca delle relazioni di ereditarietà\n" -#: common.c:224 +#: common.c:232 #, c-format msgid "reading column info for interesting tables\n" msgstr "lettura informazioni di colonna per le tabelle interessate\n" -#: common.c:228 +#: common.c:236 #, c-format msgid "flagging inherited columns in subtables\n" msgstr "marcatura colonne ereditate nelle sottotabelle\n" -#: common.c:232 +#: common.c:240 #, c-format msgid "reading indexes\n" msgstr "lettura degli indici\n" -#: common.c:236 +#: common.c:244 #, c-format msgid "reading constraints\n" msgstr "lettura dei vincoli\n" -#: common.c:240 +#: common.c:248 #, c-format msgid "reading triggers\n" msgstr "lettura dei trigger\n" -#: common.c:244 +#: common.c:252 #, c-format msgid "reading rewrite rules\n" msgstr "lettura regole di riscrittura\n" -#: common.c:792 +#: common.c:256 +#, c-format +msgid "reading policies\n" +msgstr "lettura delle politiche\n" + +#: common.c:804 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found\n" msgstr "controllo di integrità fallito, OID padre %u della tabella \"%s\" (OID %u) non trovato\n" -#: common.c:834 +#: common.c:846 #, c-format msgid "could not parse numeric array \"%s\": too many numbers\n" msgstr "non è stato possibile interpretare l'array numerico \"%s\": troppi numeri\n" -#: common.c:849 +#: common.c:861 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number\n" msgstr "non è stato possibile interpretare l'array numerico \"%s\": caratteri non validi nel numero\n" #. translator: this is a module name -#: compress_io.c:78 +#: compress_io.c:79 msgid "compress_io" msgstr "compress_io" -#: compress_io.c:114 +#: compress_io.c:115 #, c-format msgid "invalid compression code: %d\n" msgstr "codice di compressione non valido: %d\n" -#: compress_io.c:138 compress_io.c:174 compress_io.c:195 compress_io.c:514 -#: compress_io.c:541 +#: compress_io.c:139 compress_io.c:175 compress_io.c:196 compress_io.c:529 +#: compress_io.c:572 #, c-format msgid "not built with zlib support\n" msgstr "compilato senza il supporto a zlib\n" -#: compress_io.c:245 compress_io.c:347 +#: compress_io.c:246 compress_io.c:348 #, c-format msgid "could not initialize compression library: %s\n" msgstr "inizializzazione della libreria di compressione fallita: %s\n" -#: compress_io.c:266 +#: compress_io.c:267 #, c-format msgid "could not close compression stream: %s\n" msgstr "chiusura dello stream di compressione fallita: %s\n" -#: compress_io.c:284 +#: compress_io.c:285 #, c-format msgid "could not compress data: %s\n" msgstr "compressione dei dati fallita: %s\n" -#: compress_io.c:367 compress_io.c:383 +#: compress_io.c:368 compress_io.c:384 #, c-format msgid "could not uncompress data: %s\n" msgstr "decompressione dei dati fallita: %s\n" -#: compress_io.c:391 +#: compress_io.c:392 #, c-format msgid "could not close compression library: %s\n" msgstr "chiusura della libreria di compressione fallita: %s\n" -#: compress_io.c:575 compress_io.c:611 pg_backup_custom.c:590 -#: pg_backup_tar.c:563 +#: compress_io.c:606 compress_io.c:642 pg_backup_custom.c:591 +#: pg_backup_tar.c:555 #, c-format msgid "could not read from input file: %s\n" msgstr "lettura dal file di input fallita: %s\n" -#: compress_io.c:614 pg_backup_custom.c:587 pg_backup_directory.c:551 -#: pg_backup_tar.c:799 pg_backup_tar.c:823 +#: compress_io.c:645 pg_backup_custom.c:588 pg_backup_directory.c:552 +#: pg_backup_tar.c:791 pg_backup_tar.c:815 #, c-format msgid "could not read from input file: end of file\n" msgstr "lettura dal file di input fallita: fine del file\n" -#: parallel.c:77 +#: parallel.c:78 msgid "parallel archiver" msgstr "archiviatore parallelo" @@ -349,22 +359,22 @@ msgstr "%s: WSAStartup fallita: %d\n" msgid "worker is terminating\n" msgstr "il worker sta terminando\n" -#: parallel.c:535 +#: parallel.c:537 #, c-format msgid "could not create communication channels: %s\n" msgstr "creazione dei canali di comunicazione fallita: %s\n" -#: parallel.c:608 +#: parallel.c:611 #, c-format msgid "could not create worker process: %s\n" msgstr "creazione del processo worker fallita: %s\n" -#: parallel.c:825 +#: parallel.c:828 #, c-format msgid "could not get relation name for OID %u: %s\n" msgstr "errore nell'ottenere il nome della relazione per l'OID %u: %s\n" -#: parallel.c:842 +#: parallel.c:845 #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" @@ -373,915 +383,925 @@ msgstr "" "errore nell'ottenere un lock sulla relazione \"%s\"\n" "Questo di solito vuol dire che qualcuno ha richiesto un lock ACCESS EXCLUSIVE sulla tabella dopo che il processo padre di pg_dump aveva ottenuto il lock ACCESS SHARE iniziale sulla tabella.\n" -#: parallel.c:926 +#: parallel.c:929 #, c-format msgid "unrecognized command on communication channel: %s\n" msgstr "comando sconosciuto sul canale di comunicazione: %s\n" -#: parallel.c:959 +#: parallel.c:962 #, c-format msgid "a worker process died unexpectedly\n" msgstr "un processo worker è morto inaspettatamente\n" -#: parallel.c:986 parallel.c:995 +#: parallel.c:989 parallel.c:998 #, c-format msgid "invalid message received from worker: %s\n" msgstr "messaggio non valido ricevuto dal worker: %s\n" -#: parallel.c:992 pg_backup_db.c:336 +#: parallel.c:995 pg_backup_db.c:337 #, c-format msgid "%s" msgstr "%s" -#: parallel.c:1044 parallel.c:1088 +#: parallel.c:1047 parallel.c:1091 #, c-format msgid "error processing a parallel work item\n" msgstr "errore nel processo di una unità di lavoro parallela\n" -#: parallel.c:1116 parallel.c:1254 +#: parallel.c:1119 parallel.c:1257 #, c-format msgid "could not write to the communication channel: %s\n" msgstr "scrittura nel canale di comunicazione fallita: %s\n" -#: parallel.c:1165 +#: parallel.c:1168 #, c-format msgid "terminated by user\n" msgstr "terminato dall'utente\n" -#: parallel.c:1217 +#: parallel.c:1220 #, c-format msgid "error in ListenToWorkers(): %s\n" msgstr "errore in ListenToWorkers(): %s\n" -#: parallel.c:1341 +#: parallel.c:1345 #, c-format msgid "pgpipe: could not create socket: error code %d\n" msgstr "pgpipe: errore nella creazione del socket: codice di errore %d\n" -#: parallel.c:1352 +#: parallel.c:1356 #, c-format msgid "pgpipe: could not bind: error code %d\n" msgstr "pgpipe: bind fallito: codice di errore %d\n" -#: parallel.c:1359 +#: parallel.c:1363 #, c-format msgid "pgpipe: could not listen: error code %d\n" msgstr "pgpipe: listen fallito: codice di errore %d\n" -#: parallel.c:1366 +#: parallel.c:1370 #, c-format msgid "pgpipe: getsockname() failed: error code %d\n" msgstr "pgpipe: getsockname() fallito: codice di errore %d\n" -#: parallel.c:1377 +#: parallel.c:1381 #, c-format msgid "pgpipe: could not create second socket: error code %d\n" msgstr "pgpipe: creazione del secondo socket fallita: codice di errore %d\n" -#: parallel.c:1386 +#: parallel.c:1390 #, c-format msgid "pgpipe: could not connect socket: error code %d\n" msgstr "pgpipe: connessione del socket fallita: codice di errore %d\n" -#: parallel.c:1393 +#: parallel.c:1397 #, c-format msgid "pgpipe: could not accept connection: error code %d\n" msgstr "pgpipe: accept della connessione fallito: codice di errore %d\n" #. translator: this is a module name -#: pg_backup_archiver.c:51 +#: pg_backup_archiver.c:53 msgid "archiver" msgstr "archiviatore" -#: pg_backup_archiver.c:169 pg_backup_archiver.c:1386 +#: pg_backup_archiver.c:230 pg_backup_archiver.c:1479 #, c-format msgid "could not close output file: %s\n" msgstr "chiusura del file di output fallita: %s\n" -#: pg_backup_archiver.c:204 pg_backup_archiver.c:209 +#: pg_backup_archiver.c:265 pg_backup_archiver.c:270 #, c-format msgid "WARNING: archive items not in correct section order\n" msgstr "ATTENZIONE: gli elementi dell'archivio non sono nell'ordine di sezione giusto\n" -#: pg_backup_archiver.c:215 +#: pg_backup_archiver.c:276 #, c-format msgid "unexpected section code %d\n" msgstr "codice di sezione non prevista %d\n" -#: pg_backup_archiver.c:247 +#: pg_backup_archiver.c:308 #, c-format msgid "-C and -1 are incompatible options\n" msgstr "-C e -1 sono opzioni incompatibili\n" -#: pg_backup_archiver.c:257 +#: pg_backup_archiver.c:318 #, c-format msgid "parallel restore is not supported with this archive file format\n" msgstr "il ripristino parallelo non è supportato con questo formato di archivio\n" -#: pg_backup_archiver.c:261 +#: pg_backup_archiver.c:322 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump\n" msgstr "il ripristino parallelo non è supportato con archivi eseguiti da pg_dump precedenti la versione 8.0\n" -#: pg_backup_archiver.c:279 +#: pg_backup_archiver.c:340 #, c-format msgid "cannot restore from compressed archive (compression not supported in this installation)\n" msgstr "non è possibile ripristinare da archivio compresso (compressione non supportata in questa installazione)\n" -#: pg_backup_archiver.c:296 +#: pg_backup_archiver.c:357 #, c-format msgid "connecting to database for restore\n" msgstr "connessione al database per il ripristino\n" -#: pg_backup_archiver.c:298 +#: pg_backup_archiver.c:359 #, c-format msgid "direct database connections are not supported in pre-1.3 archives\n" msgstr "le connessioni dirette al database non sono supportate negli archivi pre-1.3\n" -#: pg_backup_archiver.c:343 +#: pg_backup_archiver.c:404 #, c-format msgid "implied data-only restore\n" msgstr "ripristino implicito dei soli dati\n" -#: pg_backup_archiver.c:412 +#: pg_backup_archiver.c:474 #, c-format msgid "dropping %s %s\n" msgstr "cancellazione di %s %s\n" -#: pg_backup_archiver.c:548 +#: pg_backup_archiver.c:627 +#, c-format +msgid "setting owner and privileges for %s \"%s\".\"%s\"\n" +msgstr "impostazione di proprietario e permessi per %s \"%s\".\"%s\"\n" + +#: pg_backup_archiver.c:630 #, c-format -msgid "setting owner and privileges for %s %s\n" -msgstr "impostazione proprietario e privilegi per %s %s\n" +msgid "setting owner and privileges for %s \"%s\"\n" +msgstr "impostazione di proprietario e permessi per %s \"%s\"\n" -#: pg_backup_archiver.c:614 pg_backup_archiver.c:616 +#: pg_backup_archiver.c:696 pg_backup_archiver.c:698 #, c-format msgid "warning from original dump file: %s\n" msgstr "avvertimento dal file originale scaricato: %s\n" -#: pg_backup_archiver.c:623 +#: pg_backup_archiver.c:707 #, c-format -msgid "creating %s %s\n" -msgstr "creazione di %s %s\n" +msgid "creating %s \"%s\".\"%s\"\n" +msgstr "creazione di %s \"%s\".\"%s\"\n" -#: pg_backup_archiver.c:667 +#: pg_backup_archiver.c:710 +#, c-format +msgid "creating %s \"%s\"\n" +msgstr "creazione di %s \"%s\"\n" + +#: pg_backup_archiver.c:755 #, c-format msgid "connecting to new database \"%s\"\n" msgstr "connessione al nuovo database \"%s\"\n" -#: pg_backup_archiver.c:695 +#: pg_backup_archiver.c:783 #, c-format msgid "processing %s\n" msgstr "elaborazione di %s\n" -#: pg_backup_archiver.c:715 +#: pg_backup_archiver.c:803 #, c-format -msgid "processing data for table \"%s\"\n" -msgstr "elaborazione dei dati per la tabella \"%s\"\n" +msgid "processing data for table \"%s\".\"%s\"\n" +msgstr "elaborazione dati per la tabella \"%s\".\"%s\"\n" -#: pg_backup_archiver.c:777 +#: pg_backup_archiver.c:865 #, c-format msgid "executing %s %s\n" msgstr "esecuzione di %s %s\n" -#: pg_backup_archiver.c:814 +#: pg_backup_archiver.c:902 #, c-format msgid "disabling triggers for %s\n" msgstr "disabilitazione trigger per %s\n" -#: pg_backup_archiver.c:840 +#: pg_backup_archiver.c:928 #, c-format msgid "enabling triggers for %s\n" msgstr "abilitazione trigger per %s\n" -#: pg_backup_archiver.c:870 +#: pg_backup_archiver.c:958 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine\n" msgstr "errore interno -- WriteData non può essere chiamata al di fuori del contesto di una routine DataDumper\n" -#: pg_backup_archiver.c:1029 +#: pg_backup_archiver.c:1122 #, c-format msgid "large-object output not supported in chosen format\n" msgstr "emissione dei large object non supportata nel formato scelto\n" -#: pg_backup_archiver.c:1083 +#: pg_backup_archiver.c:1176 #, c-format msgid "restored %d large object\n" msgid_plural "restored %d large objects\n" msgstr[0] "ripristinato %d large object\n" msgstr[1] "ripristinati %d large object\n" -#: pg_backup_archiver.c:1104 pg_backup_tar.c:741 +#: pg_backup_archiver.c:1197 pg_backup_tar.c:733 #, c-format msgid "restoring large object with OID %u\n" msgstr "ripristino del large object con OID %u\n" -#: pg_backup_archiver.c:1116 +#: pg_backup_archiver.c:1209 #, c-format msgid "could not create large object %u: %s" msgstr "creazione il large object %u fallita: %s" -#: pg_backup_archiver.c:1121 pg_dump.c:2732 +#: pg_backup_archiver.c:1214 pg_dump.c:2773 #, c-format msgid "could not open large object %u: %s" msgstr "apertura del large object %u fallita: %s" -#: pg_backup_archiver.c:1178 +#: pg_backup_archiver.c:1271 #, c-format msgid "could not open TOC file \"%s\": %s\n" msgstr "apertura del file TOC \"%s\" fallita: %s\n" -#: pg_backup_archiver.c:1219 +#: pg_backup_archiver.c:1312 #, c-format msgid "WARNING: line ignored: %s\n" msgstr "ATTENZIONE: la riga è stata ignorata: %s\n" -#: pg_backup_archiver.c:1226 +#: pg_backup_archiver.c:1319 #, c-format msgid "could not find entry for ID %d\n" msgstr "non sono state trovate voci per l'ID %d\n" -#: pg_backup_archiver.c:1247 pg_backup_directory.c:229 -#: pg_backup_directory.c:600 +#: pg_backup_archiver.c:1340 pg_backup_directory.c:230 +#: pg_backup_directory.c:601 #, c-format msgid "could not close TOC file: %s\n" msgstr "chiusura del file TOC fallita: %s\n" -#: pg_backup_archiver.c:1356 pg_backup_custom.c:161 pg_backup_directory.c:340 -#: pg_backup_directory.c:586 pg_backup_directory.c:644 -#: pg_backup_directory.c:664 +#: pg_backup_archiver.c:1449 pg_backup_custom.c:162 pg_backup_directory.c:341 +#: pg_backup_directory.c:587 pg_backup_directory.c:645 +#: pg_backup_directory.c:665 #, c-format msgid "could not open output file \"%s\": %s\n" msgstr "apertura del file di output \"%s\" fallita: %s\n" -#: pg_backup_archiver.c:1359 pg_backup_custom.c:168 +#: pg_backup_archiver.c:1452 pg_backup_custom.c:169 #, c-format msgid "could not open output file: %s\n" msgstr "apertura del file di output fallita: %s\n" -#: pg_backup_archiver.c:1463 +#: pg_backup_archiver.c:1556 #, c-format msgid "wrote %lu byte of large object data (result = %lu)\n" msgid_plural "wrote %lu bytes of large object data (result = %lu)\n" msgstr[0] "scritto %lu byte di dati large object (risultato = %lu)\n" msgstr[1] "scritti %lu byte di dati large object (risultato = %lu)\n" -#: pg_backup_archiver.c:1469 +#: pg_backup_archiver.c:1562 #, c-format msgid "could not write to large object (result: %lu, expected: %lu)\n" msgstr "scrittura del large object fallita (risultato: %lu, previsto: %lu)\n" -#: pg_backup_archiver.c:1562 +#: pg_backup_archiver.c:1655 #, c-format msgid "Error while INITIALIZING:\n" msgstr "Errore durante INIZIALIZZAZIONE:\n" -#: pg_backup_archiver.c:1567 +#: pg_backup_archiver.c:1660 #, c-format msgid "Error while PROCESSING TOC:\n" msgstr "Errore durante ELABORAZIONE TOC:\n" -#: pg_backup_archiver.c:1572 +#: pg_backup_archiver.c:1665 #, c-format msgid "Error while FINALIZING:\n" msgstr "Errore durante FINALIZZAZIONE:\n" -#: pg_backup_archiver.c:1577 +#: pg_backup_archiver.c:1670 #, c-format msgid "Error from TOC entry %d; %u %u %s %s %s\n" msgstr "Errore nella voce TOC %d; %u %u %s %s %s\n" -#: pg_backup_archiver.c:1650 +#: pg_backup_archiver.c:1743 #, c-format msgid "bad dumpId\n" msgstr "dumpId errato\n" -#: pg_backup_archiver.c:1671 +#: pg_backup_archiver.c:1764 #, c-format msgid "bad table dumpId for TABLE DATA item\n" msgstr "dumpId di tabella errato per elemento TABLE DATA\n" -#: pg_backup_archiver.c:1763 +#: pg_backup_archiver.c:1856 #, c-format msgid "unexpected data offset flag %d\n" msgstr "flag di offset dati non previsto %d\n" -#: pg_backup_archiver.c:1776 +#: pg_backup_archiver.c:1869 #, c-format msgid "file offset in dump file is too large\n" msgstr "l'offset del file scaricato è troppo grande\n" -#: pg_backup_archiver.c:1889 +#: pg_backup_archiver.c:1982 #, c-format msgid "attempting to ascertain archive format\n" msgstr "tentativo di accertamento del formato dell'archivio\n" -#: pg_backup_archiver.c:1915 pg_backup_archiver.c:1925 +#: pg_backup_archiver.c:2008 pg_backup_archiver.c:2018 #, c-format msgid "directory name too long: \"%s\"\n" msgstr "nome della directory troppo lungo: \"%s\"\n" -#: pg_backup_archiver.c:1933 +#: pg_backup_archiver.c:2026 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)\n" msgstr "la directory \"%s\" non sembra un archivio valido (\"toc.dat\" non esiste)\n" -#: pg_backup_archiver.c:1941 pg_backup_custom.c:180 pg_backup_custom.c:769 -#: pg_backup_directory.c:213 pg_backup_directory.c:401 +#: pg_backup_archiver.c:2034 pg_backup_custom.c:181 pg_backup_custom.c:770 +#: pg_backup_directory.c:214 pg_backup_directory.c:402 #, c-format msgid "could not open input file \"%s\": %s\n" msgstr "apertura del file di input \"%s\" fallita: %s\n" -#: pg_backup_archiver.c:1949 pg_backup_custom.c:187 +#: pg_backup_archiver.c:2042 pg_backup_custom.c:188 #, c-format msgid "could not open input file: %s\n" msgstr "apertura del file di input fallita: %s\n" -#: pg_backup_archiver.c:1956 +#: pg_backup_archiver.c:2049 #, c-format msgid "could not read input file: %s\n" msgstr "lettura del file di input fallita: %s\n" -#: pg_backup_archiver.c:1958 +#: pg_backup_archiver.c:2051 #, c-format msgid "input file is too short (read %lu, expected 5)\n" msgstr "il file di input è troppo corto (letti %lu, previsti 5)\n" -#: pg_backup_archiver.c:2041 +#: pg_backup_archiver.c:2134 #, c-format msgid "input file appears to be a text format dump. Please use psql.\n" msgstr "il file di input sembra un dump in formato testo. Prego usare psql.\n" -#: pg_backup_archiver.c:2047 +#: pg_backup_archiver.c:2140 #, c-format msgid "input file does not appear to be a valid archive (too short?)\n" msgstr "il file di input non sembra essere un archivio valido (è troppo corto?)\n" -#: pg_backup_archiver.c:2053 +#: pg_backup_archiver.c:2146 #, c-format msgid "input file does not appear to be a valid archive\n" msgstr "il file di input non sembra essere un archivio valido\n" -#: pg_backup_archiver.c:2073 +#: pg_backup_archiver.c:2166 #, c-format msgid "could not close input file: %s\n" msgstr "chiusura del file di input fallita: %s\n" -#: pg_backup_archiver.c:2090 +#: pg_backup_archiver.c:2183 #, c-format msgid "allocating AH for %s, format %d\n" msgstr "allocazione AH per %s, formato %d\n" -#: pg_backup_archiver.c:2195 +#: pg_backup_archiver.c:2288 #, c-format msgid "unrecognized file format \"%d\"\n" msgstr "formato di file \"%d\" sconosciuto\n" -#: pg_backup_archiver.c:2345 +#: pg_backup_archiver.c:2438 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC\n" msgstr "la voce ID %d è fuori dall'intervallo consentito -- possibile corruzione della TOC\n" -#: pg_backup_archiver.c:2461 +#: pg_backup_archiver.c:2554 #, c-format msgid "read TOC entry %d (ID %d) for %s %s\n" msgstr "letta voce TOC %d (ID %d) per %s %s\n" -#: pg_backup_archiver.c:2495 +#: pg_backup_archiver.c:2588 #, c-format msgid "unrecognized encoding \"%s\"\n" msgstr "codifica sconosciuta \"%s\"\n" -#: pg_backup_archiver.c:2500 +#: pg_backup_archiver.c:2593 #, c-format msgid "invalid ENCODING item: %s\n" msgstr "elemento ENCODING non valido: %s\n" -#: pg_backup_archiver.c:2518 +#: pg_backup_archiver.c:2611 #, c-format msgid "invalid STDSTRINGS item: %s\n" msgstr "elemento STDSTRINGS non valido: %s\n" -#: pg_backup_archiver.c:2735 +#: pg_backup_archiver.c:2840 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "impostazione della sessione utente a \"%s\" fallita: %s" -#: pg_backup_archiver.c:2767 +#: pg_backup_archiver.c:2872 #, c-format msgid "could not set default_with_oids: %s" msgstr "impostazione di default_with_oids fallita: %s" -#: pg_backup_archiver.c:2905 +#: pg_backup_archiver.c:3010 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "impostazione di search_path a \"%s\" fallita: %s" -#: pg_backup_archiver.c:2966 +#: pg_backup_archiver.c:3071 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "impostazione di default_tablespace a %s fallita: %s" -#: pg_backup_archiver.c:3053 pg_backup_archiver.c:3236 +#: pg_backup_archiver.c:3158 pg_backup_archiver.c:3343 #, c-format msgid "WARNING: don't know how to set owner for object type %s\n" msgstr "ATTENZIONE: non si sa come impostare il proprietario per il tipo di oggetto %s\n" -#: pg_backup_archiver.c:3289 +#: pg_backup_archiver.c:3396 #, c-format msgid "WARNING: requested compression not available in this installation -- archive will be uncompressed\n" msgstr "ATTENZIONE: la compressione richiesta non è disponibile in questa installazione -- l'archivio non sarà compresso\n" -#: pg_backup_archiver.c:3328 +#: pg_backup_archiver.c:3435 #, c-format msgid "did not find magic string in file header\n" msgstr "magic string non trovata nell'intestazione del file\n" -#: pg_backup_archiver.c:3341 +#: pg_backup_archiver.c:3448 #, c-format msgid "unsupported version (%d.%d) in file header\n" msgstr "versione (%d.%d) non supportata nell'intestazione del file\n" -#: pg_backup_archiver.c:3346 +#: pg_backup_archiver.c:3453 #, c-format msgid "sanity check on integer size (%lu) failed\n" msgstr "verifica sulla dimensione degli interi (%lu) fallita\n" -#: pg_backup_archiver.c:3350 +#: pg_backup_archiver.c:3457 #, c-format msgid "WARNING: archive was made on a machine with larger integers, some operations might fail\n" msgstr "ATTENZIONE: L'archivio è stato creato su una macchina con interi lunghi, alcune operazioni potrebbero fallire\n" -#: pg_backup_archiver.c:3360 +#: pg_backup_archiver.c:3467 #, c-format msgid "expected format (%d) differs from format found in file (%d)\n" msgstr "il formato previsto (%d) differisce dal formato trovato nel file (%d)\n" -#: pg_backup_archiver.c:3376 +#: pg_backup_archiver.c:3483 #, c-format msgid "WARNING: archive is compressed, but this installation does not support compression -- no data will be available\n" msgstr "ATTENZIONE: l'archivio è compresso, ma questa installazione non supporta la compressione -- nessun dato sarà disponibile\n" -#: pg_backup_archiver.c:3394 +#: pg_backup_archiver.c:3501 #, c-format msgid "WARNING: invalid creation date in header\n" msgstr "ATTENZIONE: la data di creazione nell'intestazione non è valida\n" -#: pg_backup_archiver.c:3482 +#: pg_backup_archiver.c:3577 #, c-format msgid "entering restore_toc_entries_prefork\n" msgstr "inizio di restore_toc_entries_prefork\n" -#: pg_backup_archiver.c:3526 +#: pg_backup_archiver.c:3621 #, c-format msgid "processing item %d %s %s\n" msgstr "elaborazione elemento %d %s %s\n" -#: pg_backup_archiver.c:3578 +#: pg_backup_archiver.c:3673 #, c-format msgid "entering restore_toc_entries_parallel\n" msgstr "immissione restore_toc_entries_parallel\n" -#: pg_backup_archiver.c:3626 +#: pg_backup_archiver.c:3721 #, c-format msgid "entering main parallel loop\n" msgstr "inizio del loop principale parallelo\n" -#: pg_backup_archiver.c:3637 +#: pg_backup_archiver.c:3732 #, c-format msgid "skipping item %d %s %s\n" msgstr "saltato l'elemento %d %s %s\n" -#: pg_backup_archiver.c:3647 +#: pg_backup_archiver.c:3742 #, c-format msgid "launching item %d %s %s\n" msgstr "avvio dell'elemento %d %s %s\n" -#: pg_backup_archiver.c:3705 +#: pg_backup_archiver.c:3800 #, c-format msgid "finished main parallel loop\n" msgstr "loop principale parallelo terminato\n" -#: pg_backup_archiver.c:3714 +#: pg_backup_archiver.c:3809 #, c-format msgid "entering restore_toc_entries_postfork\n" msgstr "inizio di restore_toc_entries_postfork\n" -#: pg_backup_archiver.c:3732 +#: pg_backup_archiver.c:3827 #, c-format msgid "processing missed item %d %s %s\n" msgstr "elaborazione dell'elemento perduto %d %s %s\n" -#: pg_backup_archiver.c:3881 +#: pg_backup_archiver.c:3976 #, c-format msgid "no item ready\n" msgstr "nessun elemento pronto\n" -#: pg_backup_archiver.c:3931 +#: pg_backup_archiver.c:4026 #, c-format msgid "could not find slot of finished worker\n" msgstr "non è stato trovato alcuno slot di worker terminati\n" -#: pg_backup_archiver.c:3933 +#: pg_backup_archiver.c:4028 #, c-format msgid "finished item %d %s %s\n" msgstr "elemento %d %s %s terminato\n" -#: pg_backup_archiver.c:3946 +#: pg_backup_archiver.c:4041 #, c-format msgid "worker process failed: exit code %d\n" msgstr "processo worker fallito: codice di uscita %d\n" -#: pg_backup_archiver.c:4108 +#: pg_backup_archiver.c:4203 #, c-format msgid "transferring dependency %d -> %d to %d\n" msgstr "trasferimento di dipendenza %d -> %d a %d\n" -#: pg_backup_archiver.c:4177 +#: pg_backup_archiver.c:4276 #, c-format msgid "reducing dependencies for %d\n" msgstr "riduzione dipendenze per %d\n" -#: pg_backup_archiver.c:4216 +#: pg_backup_archiver.c:4315 #, c-format msgid "table \"%s\" could not be created, will not restore its data\n" msgstr "creazione della tabella \"%s\" fallita, i suoi dati non verranno ripristinati\n" #. translator: this is a module name -#: pg_backup_custom.c:93 +#: pg_backup_custom.c:94 msgid "custom archiver" msgstr "archiviatore personalizzato" -#: pg_backup_custom.c:383 pg_backup_null.c:151 +#: pg_backup_custom.c:384 pg_backup_null.c:149 #, c-format msgid "invalid OID for large object\n" msgstr "OID non valido per large object\n" -#: pg_backup_custom.c:454 +#: pg_backup_custom.c:455 #, c-format msgid "unrecognized data block type (%d) while searching archive\n" msgstr "tipo di blocco dati sconosciuto (%d) durante la ricerca in archivio\n" -#: pg_backup_custom.c:465 +#: pg_backup_custom.c:466 #, c-format msgid "error during file seek: %s\n" msgstr "errore durante lo spostamento nel file: %s\n" -#: pg_backup_custom.c:475 +#: pg_backup_custom.c:476 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive\n" msgstr "blocco ID %d non trovato nell'archivio -- forse per una richiesta di ripristino fuori ordine, che non può essere eseguita per la mancanza di offset dati nell'archivio\n" -#: pg_backup_custom.c:480 +#: pg_backup_custom.c:481 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file\n" msgstr "blocco ID %d non trovato nell'archivio -- forse per una richiesta di ripristino fuori ordine, che non può essere eseguita perché il file di input non supporta il seek\n" -#: pg_backup_custom.c:485 +#: pg_backup_custom.c:486 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive\n" msgstr "blocco ID %d non trovato nell'archivio -- forse l'archivio è corrotto\n" -#: pg_backup_custom.c:492 +#: pg_backup_custom.c:493 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d\n" msgstr "trovato il blocco ID (%d) inatteso leggendo i dati -- previsto %d\n" -#: pg_backup_custom.c:506 +#: pg_backup_custom.c:507 #, c-format msgid "unrecognized data block type %d while restoring archive\n" msgstr "tipo di blocco dati sconosciuto %d durante il ripristino dell'archivio\n" -#: pg_backup_custom.c:708 pg_backup_custom.c:758 pg_backup_custom.c:907 -#: pg_backup_tar.c:1086 +#: pg_backup_custom.c:709 pg_backup_custom.c:759 pg_backup_custom.c:908 +#: pg_backup_tar.c:1078 #, c-format msgid "could not determine seek position in archive file: %s\n" msgstr "non è stato possibile determinare la posizione per il seek nel file d'archivio: %s\n" -#: pg_backup_custom.c:726 pg_backup_custom.c:763 +#: pg_backup_custom.c:727 pg_backup_custom.c:764 #, c-format msgid "could not close archive file: %s\n" msgstr "chiusura del file di archivio fallita: %s\n" -#: pg_backup_custom.c:745 +#: pg_backup_custom.c:746 #, c-format msgid "can only reopen input archives\n" msgstr "solo gli archivi in input possono essere riaperti\n" -#: pg_backup_custom.c:752 +#: pg_backup_custom.c:753 #, c-format msgid "parallel restore from standard input is not supported\n" msgstr "il ripristino in parallelo da standard input non è supportato\n" -#: pg_backup_custom.c:754 +#: pg_backup_custom.c:755 #, c-format msgid "parallel restore from non-seekable file is not supported\n" msgstr "il ripristino in parallelo da un file che non supporta il seek non è supportato\n" -#: pg_backup_custom.c:773 +#: pg_backup_custom.c:774 #, c-format msgid "could not set seek position in archive file: %s\n" msgstr "spostamento nel file di archivio fallita: %s\n" -#: pg_backup_custom.c:791 +#: pg_backup_custom.c:792 #, c-format msgid "compressor active\n" msgstr "compressione attiva\n" -#: pg_backup_custom.c:911 +#: pg_backup_custom.c:912 #, c-format msgid "WARNING: ftell mismatch with expected position -- ftell used\n" msgstr "ATTENZIONE: ftell non corrisponde alla posizione prevista -- verrà usato il valore restituito da ftell\n" #. translator: this is a module name -#: pg_backup_db.c:28 +#: pg_backup_db.c:29 msgid "archiver (db)" msgstr "archiviatore (db)" -#: pg_backup_db.c:43 +#: pg_backup_db.c:44 #, c-format msgid "could not get server_version from libpq\n" msgstr "non è stato possibile ottenere server_version da libpq\n" -#: pg_backup_db.c:54 pg_dumpall.c:1933 +#: pg_backup_db.c:55 pg_dumpall.c:1954 #, c-format msgid "server version: %s; %s version: %s\n" msgstr "versione del server: %s; %s versione: %s\n" -#: pg_backup_db.c:56 pg_dumpall.c:1935 +#: pg_backup_db.c:57 pg_dumpall.c:1956 #, c-format msgid "aborting because of server version mismatch\n" msgstr "abortito perché la versione del server non corrisponde\n" -#: pg_backup_db.c:127 +#: pg_backup_db.c:128 #, c-format msgid "connecting to database \"%s\" as user \"%s\"\n" msgstr "connessione al database \"%s\" come utente \"%s\"\n" -#: pg_backup_db.c:132 pg_backup_db.c:184 pg_backup_db.c:231 pg_backup_db.c:277 -#: pg_dumpall.c:1763 pg_dumpall.c:1871 +#: pg_backup_db.c:133 pg_backup_db.c:185 pg_backup_db.c:232 pg_backup_db.c:278 +#: pg_dumpall.c:1784 pg_dumpall.c:1892 msgid "Password: " msgstr "Password: " -#: pg_backup_db.c:165 +#: pg_backup_db.c:166 #, c-format msgid "failed to reconnect to database\n" msgstr "riconnessione al database fallita\n" -#: pg_backup_db.c:170 +#: pg_backup_db.c:171 #, c-format msgid "could not reconnect to database: %s" msgstr "riconnessione al database fallita: %s" -#: pg_backup_db.c:186 +#: pg_backup_db.c:187 #, c-format msgid "connection needs password\n" msgstr "la connessione richiede la password\n" -#: pg_backup_db.c:227 +#: pg_backup_db.c:228 #, c-format msgid "already connected to a database\n" msgstr "già connesso ad un database\n" -#: pg_backup_db.c:269 +#: pg_backup_db.c:270 #, c-format msgid "failed to connect to database\n" msgstr "connessione al database fallita\n" -#: pg_backup_db.c:288 +#: pg_backup_db.c:289 #, c-format msgid "connection to database \"%s\" failed: %s" msgstr "connessione al database \"%s\" fallita: %s" -#: pg_backup_db.c:343 +#: pg_backup_db.c:344 #, c-format msgid "query failed: %s" msgstr "query fallita: %s" -#: pg_backup_db.c:345 +#: pg_backup_db.c:346 #, c-format msgid "query was: %s\n" msgstr "la query era: %s\n" -#: pg_backup_db.c:409 +#: pg_backup_db.c:410 #, c-format msgid "%s: %s Command was: %s\n" msgstr "%s: %s Il comando era: %s\n" -#: pg_backup_db.c:465 pg_backup_db.c:537 pg_backup_db.c:544 +#: pg_backup_db.c:466 pg_backup_db.c:540 pg_backup_db.c:547 msgid "could not execute query" msgstr "esecuzione della query fallita" -#: pg_backup_db.c:516 +#: pg_backup_db.c:519 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "errore restituito da PQputCopyData: %s" -#: pg_backup_db.c:563 +#: pg_backup_db.c:568 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "errore restituito da PQputCopyEnd: %s" -#: pg_backup_db.c:569 +#: pg_backup_db.c:574 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "COPY fallito per la tabella \"%s\": %s" -#: pg_backup_db.c:580 +#: pg_backup_db.c:587 msgid "could not start database transaction" msgstr "avvio della transazione database fallito" -#: pg_backup_db.c:586 +#: pg_backup_db.c:595 msgid "could not commit database transaction" msgstr "commit della transazione database fallito" #. translator: this is a module name -#: pg_backup_directory.c:63 +#: pg_backup_directory.c:64 msgid "directory archiver" msgstr "archiviatore di directory" -#: pg_backup_directory.c:161 +#: pg_backup_directory.c:162 #, c-format msgid "no output directory specified\n" msgstr "directory di output non specificata\n" -#: pg_backup_directory.c:190 +#: pg_backup_directory.c:191 #, c-format msgid "could not read directory \"%s\": %s\n" msgstr "lettura della directory \"%s\" fallita: %s\n" -#: pg_backup_directory.c:194 +#: pg_backup_directory.c:195 #, c-format msgid "could not close directory \"%s\": %s\n" msgstr "chiusura della directory \"%s\" fallita: %s\n" -#: pg_backup_directory.c:200 +#: pg_backup_directory.c:201 #, c-format msgid "could not create directory \"%s\": %s\n" msgstr "creazione della directory \"%s\" fallita: %s\n" -#: pg_backup_directory.c:412 +#: pg_backup_directory.c:413 #, c-format msgid "could not close data file: %s\n" msgstr "chiusura del file di dati fallita: %s\n" -#: pg_backup_directory.c:453 +#: pg_backup_directory.c:454 #, c-format msgid "could not open large object TOC file \"%s\" for input: %s\n" msgstr "apertura del file TOC dei large object \"%s\" per l'input fallita: %s\n" -#: pg_backup_directory.c:464 +#: pg_backup_directory.c:465 #, c-format msgid "invalid line in large object TOC file \"%s\": \"%s\"\n" msgstr "riga non valida nel file TOC dei large object \"%s\": \"%s\"\n" -#: pg_backup_directory.c:473 +#: pg_backup_directory.c:474 #, c-format msgid "error reading large object TOC file \"%s\"\n" msgstr "errore in lettura del file TOC dei large object \"%s\"\n" -#: pg_backup_directory.c:477 +#: pg_backup_directory.c:478 #, c-format msgid "could not close large object TOC file \"%s\": %s\n" msgstr "chiusura del file TOC dei large object \"%s\" fallita: %s\n" -#: pg_backup_directory.c:687 +#: pg_backup_directory.c:688 #, c-format msgid "could not write to blobs TOC file\n" msgstr "scrittura nel file TOC dei blob fallita\n" -#: pg_backup_directory.c:719 +#: pg_backup_directory.c:720 #, c-format msgid "file name too long: \"%s\"\n" msgstr "nome del file troppo lungo: \"%s\"\n" -#: pg_backup_directory.c:805 +#: pg_backup_directory.c:806 #, c-format msgid "error during backup\n" msgstr "errore durante il backup\n" -#: pg_backup_null.c:76 +#: pg_backup_null.c:74 #, c-format msgid "this format cannot be read\n" msgstr "questo formato non può essere letto\n" #. translator: this is a module name -#: pg_backup_tar.c:109 +#: pg_backup_tar.c:108 msgid "tar archiver" msgstr "archiviatore tar" -#: pg_backup_tar.c:190 +#: pg_backup_tar.c:189 #, c-format msgid "could not open TOC file \"%s\" for output: %s\n" msgstr "apertura del file TOC \"%s\" per l'output fallita: %s\n" -#: pg_backup_tar.c:198 +#: pg_backup_tar.c:197 #, c-format msgid "could not open TOC file for output: %s\n" msgstr "apertura del file TOC per l'output fallita: %s\n" -#: pg_backup_tar.c:226 pg_backup_tar.c:382 +#: pg_backup_tar.c:218 pg_backup_tar.c:374 #, c-format msgid "compression is not supported by tar archive format\n" msgstr "compressione non supportata dal formato di archivio tar\n" -#: pg_backup_tar.c:234 +#: pg_backup_tar.c:226 #, c-format msgid "could not open TOC file \"%s\" for input: %s\n" msgstr "apertura del file TOC \"%s\" per l'input fallita: %s\n" -#: pg_backup_tar.c:241 +#: pg_backup_tar.c:233 #, c-format msgid "could not open TOC file for input: %s\n" msgstr "apertura del file TOC per l'input fallita: %s\n" -#: pg_backup_tar.c:368 +#: pg_backup_tar.c:360 #, c-format msgid "could not find file \"%s\" in archive\n" msgstr "file \"%s\" non trovato nell'archivio\n" -#: pg_backup_tar.c:424 +#: pg_backup_tar.c:416 #, c-format msgid "could not generate temporary file name: %s\n" msgstr "generazione del nome del file temporaneo fallita: %s\n" -#: pg_backup_tar.c:433 +#: pg_backup_tar.c:425 #, c-format msgid "could not open temporary file\n" msgstr "apertura del file temporaneo fallita\n" -#: pg_backup_tar.c:460 +#: pg_backup_tar.c:452 #, c-format msgid "could not close tar member\n" msgstr "chiusura del membro tar fallita\n" -#: pg_backup_tar.c:573 +#: pg_backup_tar.c:565 #, c-format msgid "internal error -- neither th nor fh specified in tarReadRaw()\n" msgstr "errore interno -- né th né fh specificato in tarReadRaw()\n" -#: pg_backup_tar.c:696 +#: pg_backup_tar.c:688 #, c-format msgid "unexpected COPY statement syntax: \"%s\"\n" msgstr "sintassi dell'istruzione COPY imprevista: \"%s\"\n" -#: pg_backup_tar.c:958 +#: pg_backup_tar.c:950 #, c-format msgid "invalid OID for large object (%u)\n" msgstr "OID non valida per il large object (%u)\n" -#: pg_backup_tar.c:1095 +#: pg_backup_tar.c:1087 #, c-format msgid "archive member too large for tar format\n" msgstr "membro dell'archivio troppo grande per il formato tar\n" -#: pg_backup_tar.c:1109 +#: pg_backup_tar.c:1101 #, c-format msgid "could not close temporary file: %s\n" msgstr "chiusura del file temporaneo fallita: %s\n" -#: pg_backup_tar.c:1119 +#: pg_backup_tar.c:1111 #, c-format msgid "actual file length (%s) does not match expected (%s)\n" msgstr "la lunghezza del file (%s) non corrisponde con quella prevista (%s)\n" -#: pg_backup_tar.c:1156 +#: pg_backup_tar.c:1148 #, c-format msgid "moving from position %s to next member at file position %s\n" msgstr "spostamento dalla posizione %s al membro successivo alla posizione nel file %s\n" -#: pg_backup_tar.c:1167 +#: pg_backup_tar.c:1159 #, c-format msgid "now at file position %s\n" msgstr "attuale posizione nel file %s\n" -#: pg_backup_tar.c:1176 pg_backup_tar.c:1206 +#: pg_backup_tar.c:1168 pg_backup_tar.c:1198 #, c-format msgid "could not find header for file \"%s\" in tar archive\n" msgstr "intestazione per il file \"%s\" nell'archivio tar non trovata\n" -#: pg_backup_tar.c:1190 +#: pg_backup_tar.c:1182 #, c-format msgid "skipping tar member %s\n" msgstr "salto del membro tar %s\n" -#: pg_backup_tar.c:1194 +#: pg_backup_tar.c:1186 #, c-format msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file.\n" msgstr "il ripristino dei dati fuori ordine non è supportato in questo formato di archivio: è richiesto \"%s\", ma nel file d'archivio viene prima di \"%s\".\n" -#: pg_backup_tar.c:1241 +#: pg_backup_tar.c:1233 #, c-format msgid "incomplete tar header found (%lu byte)\n" msgid_plural "incomplete tar header found (%lu bytes)\n" msgstr[0] "intestazione del file tar incompleta (%lu byte)\n" msgstr[1] "intestazione del file tar incompleta (%lu byte)\n" -#: pg_backup_tar.c:1279 +#: pg_backup_tar.c:1271 #, c-format msgid "TOC Entry %s at %s (length %lu, checksum %d)\n" msgstr "Voce TOC %s a %s (lunghezza %lu, checksum %d)\n" -#: pg_backup_tar.c:1289 +#: pg_backup_tar.c:1281 #, c-format msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s\n" msgstr "intestazione tar corrotta in %s (previsti %d, calcolati %d) alla posizione file %s\n" @@ -1291,9 +1311,9 @@ msgstr "intestazione tar corrotta in %s (previsti %d, calcolati %d) alla posizio msgid "%s: unrecognized section name: \"%s\"\n" msgstr "%s: nome di sezione sconosciuto: \"%s\"\n" -#: pg_backup_utils.c:56 pg_dump.c:539 pg_dump.c:556 pg_dumpall.c:305 -#: pg_dumpall.c:315 pg_dumpall.c:325 pg_dumpall.c:334 pg_dumpall.c:350 -#: pg_dumpall.c:408 pg_restore.c:278 pg_restore.c:294 pg_restore.c:306 +#: pg_backup_utils.c:56 pg_dump.c:521 pg_dump.c:538 pg_dumpall.c:300 +#: pg_dumpall.c:310 pg_dumpall.c:320 pg_dumpall.c:329 pg_dumpall.c:345 +#: pg_dumpall.c:403 pg_restore.c:277 pg_restore.c:293 pg_restore.c:305 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Prova \"%s --help\" per maggiori informazioni.\n" @@ -1303,52 +1323,57 @@ msgstr "Prova \"%s --help\" per maggiori informazioni.\n" msgid "out of on_exit_nicely slots\n" msgstr "slot on_exit_nicely terminati\n" -#: pg_dump.c:554 pg_dumpall.c:313 pg_restore.c:292 +#: pg_dump.c:491 +#, c-format +msgid "compression level must be in range 0..9\n" +msgstr "il livello di compressione dev'essere tra 0 e 9\n" + +#: pg_dump.c:536 pg_dumpall.c:308 pg_restore.c:291 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: troppi argomenti nella riga di comando (il primo è \"%s\")\n" -#: pg_dump.c:567 +#: pg_dump.c:549 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together\n" msgstr "le opzioni -s/--schema-only e -a/--data-only non possono essere usate insieme\n" -#: pg_dump.c:573 +#: pg_dump.c:555 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together\n" msgstr "le opzioni -c/--clean e -a/--data-only non possono essere usate insieme\n" -#: pg_dump.c:579 +#: pg_dump.c:561 #, c-format msgid "options --inserts/--column-inserts and -o/--oids cannot be used together\n" msgstr "le opzioni --inserts/--column-inserts e -o/--oids non possono essere usate insieme\n" -#: pg_dump.c:580 +#: pg_dump.c:562 #, c-format msgid "(The INSERT command cannot set OIDs.)\n" msgstr "(Il comando INSERT non può impostare OID.)\n" -#: pg_dump.c:585 +#: pg_dump.c:567 #, c-format msgid "option --if-exists requires option -c/--clean\n" msgstr "l'opzione --if-exists richiede l'opzione -c/--clean\n" -#: pg_dump.c:613 +#: pg_dump.c:595 #, c-format msgid "%s: invalid number of parallel jobs\n" msgstr "%s: numero di job paralleli non valido\n" -#: pg_dump.c:617 +#: pg_dump.c:599 #, c-format msgid "parallel backup only supported by the directory format\n" msgstr "il backup parallelo è supportato solo con il formato directory.\n" -#: pg_dump.c:627 +#: pg_dump.c:609 #, c-format msgid "could not open output file \"%s\" for writing\n" msgstr "apertura del file di output \"%s\" per la scrittura fallita\n" -#: pg_dump.c:686 +#: pg_dump.c:668 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1359,22 +1384,27 @@ msgstr "" "del server. Puoi usare --no-synchronized-snapshots invece se non hai\n" "bisogno di snapshot sincronizzati.\n" -#: pg_dump.c:699 +#: pg_dump.c:675 +#, c-format +msgid "Exported snapshots are not supported by this server version.\n" +msgstr "Gli snapshot esportati non sono supportati da questa versione del server.\n" + +#: pg_dump.c:686 #, c-format msgid "last built-in OID is %u\n" msgstr "l'ultimo OID predefinito è %u\n" -#: pg_dump.c:708 +#: pg_dump.c:695 #, c-format msgid "No matching schemas were found\n" msgstr "Non è stato trovato nessuno schema corrispondente\n" -#: pg_dump.c:720 +#: pg_dump.c:707 #, c-format msgid "No matching tables were found\n" msgstr "Non è stata trovata nessuna tabella corrispondente\n" -#: pg_dump.c:865 +#: pg_dump.c:861 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1383,17 +1413,17 @@ msgstr "" "%s scarica un database in formato testo o in altri formati.\n" "\n" -#: pg_dump.c:866 pg_dumpall.c:553 pg_restore.c:432 +#: pg_dump.c:862 pg_dumpall.c:548 pg_restore.c:432 #, c-format msgid "Usage:\n" msgstr "Utilizzo:\n" -#: pg_dump.c:867 +#: pg_dump.c:863 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPZIONE]... [NOMEDB]\n" -#: pg_dump.c:869 pg_dumpall.c:556 pg_restore.c:435 +#: pg_dump.c:865 pg_dumpall.c:551 pg_restore.c:435 #, c-format msgid "" "\n" @@ -1402,12 +1432,12 @@ msgstr "" "\n" "Opzioni generali:\n" -#: pg_dump.c:870 +#: pg_dump.c:866 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=NOMEFILE nome del file o directory di output\n" -#: pg_dump.c:871 +#: pg_dump.c:867 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1416,39 +1446,39 @@ msgstr "" " -F, --format=c|d|t|p formato del file di output (custom, directory,\n" " tar, testo in chiaro (predefinito))\n" -#: pg_dump.c:873 +#: pg_dump.c:869 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM usa NUM job paralleli per il dump\n" -#: pg_dump.c:874 +#: pg_dump.c:870 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose stampa più informazioni\n" -#: pg_dump.c:875 pg_dumpall.c:558 +#: pg_dump.c:871 pg_dumpall.c:553 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informazioni sulla versione ed esci\n" -#: pg_dump.c:876 +#: pg_dump.c:872 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 livello di compressione per formati compressi\n" -#: pg_dump.c:877 pg_dumpall.c:559 +#: pg_dump.c:873 pg_dumpall.c:554 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr "" " --lock-wait-timeout=TIMEOUT termina con errore dopo un'attesa di TIMEOUT\n" " per un lock di tabella\n" -#: pg_dump.c:878 pg_dumpall.c:560 +#: pg_dump.c:874 pg_dumpall.c:555 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra questo aiuto ed esci\n" -#: pg_dump.c:880 pg_dumpall.c:561 +#: pg_dump.c:876 pg_dumpall.c:556 #, c-format msgid "" "\n" @@ -1457,51 +1487,51 @@ msgstr "" "\n" "Opzioni per il controllo del contenuto dell'output:\n" -#: pg_dump.c:881 pg_dumpall.c:562 +#: pg_dump.c:877 pg_dumpall.c:557 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only scarica solamente i dati, non lo schema\n" -#: pg_dump.c:882 +#: pg_dump.c:878 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs includi nell'archivio i large object\n" -#: pg_dump.c:883 pg_restore.c:446 +#: pg_dump.c:879 pg_restore.c:446 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr "" " -c, --clean svuota (drop) gli oggetti del database prima di\n" " ricrearli\n" -#: pg_dump.c:884 +#: pg_dump.c:880 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr "" " -C, --create include nell'archivio i comandi per creare\n" " i database\n" -#: pg_dump.c:885 +#: pg_dump.c:881 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=CODIFICA scarica i dati nella CODIFICA indicata\n" -#: pg_dump.c:886 +#: pg_dump.c:882 #, c-format msgid " -n, --schema=SCHEMA dump the named schema(s) only\n" msgstr " -n, --schema=SCHEMA scarica solo lo schema o gli schemi indicati\n" -#: pg_dump.c:887 +#: pg_dump.c:883 #, c-format msgid " -N, --exclude-schema=SCHEMA do NOT dump the named schema(s)\n" msgstr " -N, --exclude-schema=SCHEMA non scaricare lo schema o gli schemi indicati\n" -#: pg_dump.c:888 pg_dumpall.c:565 +#: pg_dump.c:884 pg_dumpall.c:560 #, c-format msgid " -o, --oids include OIDs in dump\n" msgstr " -o, --oids includi gli OID nel dump\n" -#: pg_dump.c:889 +#: pg_dump.c:885 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1510,118 +1540,128 @@ msgstr "" " -O, --no-owner salta il ripristino del proprietario degli\n" " oggetti nel formato testo in chiaro\n" -#: pg_dump.c:891 pg_dumpall.c:568 +#: pg_dump.c:887 pg_dumpall.c:563 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only scarica solo lo schema, non i dati\n" -#: pg_dump.c:892 +#: pg_dump.c:888 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr "" " -S, --superuser=NOME nome del superutente da usare nel formato testo\n" " in chiaro\n" -#: pg_dump.c:893 +#: pg_dump.c:889 #, c-format msgid " -t, --table=TABLE dump the named table(s) only\n" msgstr " -t, --table=TABELLA scarica solo la tabella o le tabelle indicate\n" -#: pg_dump.c:894 +#: pg_dump.c:890 #, c-format msgid " -T, --exclude-table=TABLE do NOT dump the named table(s)\n" msgstr " -T, --exclude-table=TABELLA NON scaricare la tabella o le tabelle indicate\n" -#: pg_dump.c:895 pg_dumpall.c:571 +#: pg_dump.c:891 pg_dumpall.c:566 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges non scaricare i privilegi (grant/revoke)\n" -#: pg_dump.c:896 pg_dumpall.c:572 +#: pg_dump.c:892 pg_dumpall.c:567 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade da utilizzare solo dall'utilità di aggiornamento\n" -#: pg_dump.c:897 pg_dumpall.c:573 +#: pg_dump.c:893 pg_dumpall.c:568 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr "" " --column-inserts scarica dati come comandi INSERT con nomi\n" " di colonna\n" -#: pg_dump.c:898 pg_dumpall.c:574 +#: pg_dump.c:894 pg_dumpall.c:569 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" " --disable-dollar-quoting disabilita la quotazione con dollari, usa la\n" " quotazione standard SQL\n" -#: pg_dump.c:899 pg_dumpall.c:575 pg_restore.c:462 +#: pg_dump.c:895 pg_dumpall.c:570 pg_restore.c:462 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr "" " --disable-triggers disabilita i trigger durante il ripristino\n" " dei soli dati\n" -#: pg_dump.c:900 +#: pg_dump.c:896 pg_restore.c:463 +#, c-format +msgid " --enable-row-security enable row level security\n" +msgstr " --enable-row-security abilita la sicurezza a livello di riga\n" + +#: pg_dump.c:897 #, c-format msgid " --exclude-table-data=TABLE do NOT dump data for the named table(s)\n" msgstr "" " --exclude-table-data=TABLE NON scaricare i dati per la tabella o le tabelle\n" " indicate\n" -#: pg_dump.c:901 pg_dumpall.c:576 pg_restore.c:463 +#: pg_dump.c:898 pg_dumpall.c:571 pg_restore.c:464 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists usa IF EXISTS nell'eliminare gli oggetti\n" -#: pg_dump.c:902 pg_dumpall.c:577 +#: pg_dump.c:899 pg_dumpall.c:572 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts scarica i dati come comandi INSERT anziché COPY\n" -#: pg_dump.c:903 pg_dumpall.c:578 +#: pg_dump.c:900 pg_dumpall.c:573 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels non scaricare le assegnazioni di sicurezza\n" -#: pg_dump.c:904 +#: pg_dump.c:901 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr " --no-synchronized-snapshots non usare snapshot sincronizzati nei job paralleli\n" -#: pg_dump.c:905 pg_dumpall.c:579 +#: pg_dump.c:902 pg_dumpall.c:574 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces non scarica le assegnazioni di tablespace\n" -#: pg_dump.c:906 pg_dumpall.c:580 +#: pg_dump.c:903 pg_dumpall.c:575 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data non scaricare i dati delle tabelle non loggate\n" -#: pg_dump.c:907 pg_dumpall.c:581 +#: pg_dump.c:904 pg_dumpall.c:576 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers metti tutti gli identificatori tra virgolette,\n" " anche se non sono parole chiave\n" -#: pg_dump.c:908 +#: pg_dump.c:905 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr "" " --section=SECTION scarica la sezione con questo nome (pre-data,\n" " data o post-data)\n" -#: pg_dump.c:909 +#: pg_dump.c:906 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr "" " --serializable-deferrable attendi prima che lo scaricamento possa essere\n" " eseguito senza anomalie\n" -#: pg_dump.c:910 pg_dumpall.c:582 pg_restore.c:469 +#: pg_dump.c:907 +#, c-format +msgid " --snapshot=SNAPSHOT use given synchronous snapshot for the dump\n" +msgstr " --snapshot=SNAPSHOT usa il dato snapshot sincrono per il dump\n" + +#: pg_dump.c:908 pg_dumpall.c:577 pg_restore.c:470 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1632,7 +1672,7 @@ msgstr "" " usa i comandi SET SESSION AUTHORIZATION invece\n" " di ALTER OWNER per impostare il proprietario\n" -#: pg_dump.c:914 pg_dumpall.c:586 pg_restore.c:473 +#: pg_dump.c:912 pg_dumpall.c:581 pg_restore.c:474 #, c-format msgid "" "\n" @@ -1641,44 +1681,44 @@ msgstr "" "\n" "Opzioni di connessione:\n" -#: pg_dump.c:915 +#: pg_dump.c:913 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=NOMEDB database da scaricare\n" -#: pg_dump.c:916 pg_dumpall.c:588 pg_restore.c:474 +#: pg_dump.c:914 pg_dumpall.c:583 pg_restore.c:475 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=NOMEHOST host server del database o directory socket\n" -#: pg_dump.c:917 pg_dumpall.c:590 pg_restore.c:475 +#: pg_dump.c:915 pg_dumpall.c:585 pg_restore.c:476 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORTA numero porta del server di database\n" -#: pg_dump.c:918 pg_dumpall.c:591 pg_restore.c:476 +#: pg_dump.c:916 pg_dumpall.c:586 pg_restore.c:477 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NOME connessione con l'utente di database specificato\n" -#: pg_dump.c:919 pg_dumpall.c:592 pg_restore.c:477 +#: pg_dump.c:917 pg_dumpall.c:587 pg_restore.c:478 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password non chiedere mai le password\n" -#: pg_dump.c:920 pg_dumpall.c:593 pg_restore.c:478 +#: pg_dump.c:918 pg_dumpall.c:588 pg_restore.c:479 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password forza la richiesta di una password (dovrebbe essere\n" " automatico)\n" -#: pg_dump.c:921 pg_dumpall.c:594 +#: pg_dump.c:919 pg_dumpall.c:589 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=NOMERUOLO esegui SET ROLE prima di scaricare\n" -#: pg_dump.c:923 +#: pg_dump.c:921 #, c-format msgid "" "\n" @@ -1691,326 +1731,356 @@ msgstr "" "della variabile di ambiente PGDATABASE.\n" "\n" -#: pg_dump.c:925 pg_dumpall.c:598 pg_restore.c:485 +#: pg_dump.c:923 pg_dumpall.c:593 pg_restore.c:486 #, c-format msgid "Report bugs to .\n" msgstr "Puoi segnalare eventuali bug a .\n" -#: pg_dump.c:943 +#: pg_dump.c:942 #, c-format msgid "invalid client encoding \"%s\" specified\n" msgstr "codifica client specificata \"%s\" non valida\n" -#: pg_dump.c:1105 +#: pg_dump.c:1127 #, c-format msgid "invalid output format \"%s\" specified\n" msgstr "formato di output specificato \"%s\" non valido\n" -#: pg_dump.c:1127 +#: pg_dump.c:1149 #, c-format msgid "server version must be at least 7.3 to use schema selection switches\n" msgstr "per usare le opzioni di selezione schema la versione del server deve essere almeno 7.3\n" -#: pg_dump.c:1403 +#: pg_dump.c:1438 #, c-format -msgid "dumping contents of table %s\n" -msgstr "scarico dei contenuti della tabella %s\n" +msgid "dumping contents of table \"%s\".\"%s\"\n" +msgstr "salvataggio del contenuto della tabella \"%s\".\"%s\"\n" -#: pg_dump.c:1526 +#: pg_dump.c:1562 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed.\n" msgstr "Lo scarico dei contenuti della tabella \"%s\" è fallito: PQgetCopyData() fallito.\n" -#: pg_dump.c:1527 pg_dump.c:1537 +#: pg_dump.c:1563 pg_dump.c:1573 #, c-format msgid "Error message from server: %s" msgstr "Messaggio di errore dal server: %s" -#: pg_dump.c:1528 pg_dump.c:1538 +#: pg_dump.c:1564 pg_dump.c:1574 #, c-format msgid "The command was: %s\n" msgstr "Il comando era: %s\n" -#: pg_dump.c:1536 +#: pg_dump.c:1572 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed.\n" msgstr "Scarico dei contenuti della tabella \"%s\" fallito: PQgetResult() fallito.\n" -#: pg_dump.c:2174 +#: pg_dump.c:2211 #, c-format msgid "saving database definition\n" msgstr "salvataggio definizione del database\n" -#: pg_dump.c:2503 +#: pg_dump.c:2544 #, c-format msgid "saving encoding = %s\n" msgstr "salvataggio codifica = %s\n" -#: pg_dump.c:2530 +#: pg_dump.c:2571 #, c-format msgid "saving standard_conforming_strings = %s\n" msgstr "salvataggio standard_conforming_strings = %s\n" -#: pg_dump.c:2563 +#: pg_dump.c:2604 #, c-format msgid "reading large objects\n" msgstr "lettura dei large object\n" -#: pg_dump.c:2695 +#: pg_dump.c:2736 #, c-format msgid "saving large objects\n" msgstr "salvataggio dei large object\n" -#: pg_dump.c:2742 +#: pg_dump.c:2783 #, c-format msgid "error reading large object %u: %s" msgstr "errore di lettura del large object %u: %s" -#: pg_dump.c:2935 +#: pg_dump.c:2835 +#, c-format +msgid "reading row security enabled for table \"%s\".\"%s\"\n" +msgstr "lettura dell'abilitazione della sicurezza delle righe per la tabella \"%s\".\"%s\"\n" + +#: pg_dump.c:2866 +#, c-format +msgid "reading policies for table \"%s\".\"%s\"\n" +msgstr "lettura delle politiche per la tabella \"%s\".\"%s\"\n" + +#: pg_dump.c:2996 +#, c-format +msgid "unexpected policy command type: \"%s\"\n" +msgstr "tipo di comando di politica imprevisto: \"%s\"\n" + +#: pg_dump.c:3211 #, c-format msgid "could not find parent extension for %s\n" msgstr "estensione genitore di %s non trovata\n" -#: pg_dump.c:3038 +#: pg_dump.c:3314 #, c-format msgid "WARNING: owner of schema \"%s\" appears to be invalid\n" msgstr "ATTENZIONE: il proprietario dello schema \"%s\" sembra non essere valido\n" -#: pg_dump.c:3081 +#: pg_dump.c:3357 #, c-format msgid "schema with OID %u does not exist\n" msgstr "lo schema con OID %u non esiste\n" -#: pg_dump.c:3431 +#: pg_dump.c:3707 #, c-format msgid "WARNING: owner of data type \"%s\" appears to be invalid\n" msgstr "ATTENZIONE: il proprietario del tipo dato \"%s\" non sembra essere valido\n" -#: pg_dump.c:3542 +#: pg_dump.c:3818 #, c-format msgid "WARNING: owner of operator \"%s\" appears to be invalid\n" msgstr "ATTENZIONE: il proprietario dell'operatore \"%s\" non sembra essere valido\n" -#: pg_dump.c:3801 +#: pg_dump.c:4077 #, c-format msgid "WARNING: owner of operator class \"%s\" appears to be invalid\n" msgstr "ATTENZIONE: il proprietario della classe operatore \"%s\" non sembra essere valido\n" -#: pg_dump.c:3889 +#: pg_dump.c:4165 #, c-format msgid "WARNING: owner of operator family \"%s\" appears to be invalid\n" msgstr "ATTENZIONE: il proprietario della famiglia di operatori \"%s\" non sembra essere valido\n" -#: pg_dump.c:4048 +#: pg_dump.c:4303 #, c-format msgid "WARNING: owner of aggregate function \"%s\" appears to be invalid\n" msgstr "ATTENZIONE: il proprietario della funzione di aggregazione \"%s\" non sembra essere valido\n" -#: pg_dump.c:4252 +#: pg_dump.c:4485 #, c-format msgid "WARNING: owner of function \"%s\" appears to be invalid\n" msgstr "ATTENZIONE: il proprietario della funzione \"%s\" non sembra essere valido\n" -#: pg_dump.c:4870 +#: pg_dump.c:5158 #, c-format msgid "WARNING: owner of table \"%s\" appears to be invalid\n" msgstr "ATTENZIONE: il proprietario della tabella \"%s\" non sembra essere valido\n" -#: pg_dump.c:5022 +#: pg_dump.c:5310 #, c-format -msgid "reading indexes for table \"%s\"\n" -msgstr "lettura degli indici per la tabella \"%s\"\n" +msgid "reading indexes for table \"%s\".\"%s\"\n" +msgstr "lettura degli indici della tabella \"%s\".\"%s\"\n" -#: pg_dump.c:5388 +#: pg_dump.c:5677 #, c-format -msgid "reading foreign key constraints for table \"%s\"\n" -msgstr "lettura dei vincoli di chiave esterna per la tabella \"%s\"\n" +msgid "reading foreign key constraints for table \"%s\".\"%s\"\n" +msgstr "lettura dei vincoli di chiave esterna per la tabella \"%s\".\"%s\"\n" -#: pg_dump.c:5633 +#: pg_dump.c:5923 #, c-format msgid "failed sanity check, parent table OID %u of pg_rewrite entry OID %u not found\n" msgstr "controllo integrità fallito, l'OID %u della tabella padre della voce OID %u di pg_rewrite non è stato trovato\n" -#: pg_dump.c:5726 +#: pg_dump.c:6016 #, c-format -msgid "reading triggers for table \"%s\"\n" -msgstr "lettura dei trigger per la tabella \"%s\"\n" +msgid "reading triggers for table \"%s\".\"%s\"\n" +msgstr "lettura dei trigger per la tabella \"%s\".\"%s\"\n" -#: pg_dump.c:5887 +#: pg_dump.c:6178 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)\n" msgstr "la query non ha prodotto nessun nome di tabella referenziata per il trigger di chiave esterna \"%s\" sulla tabella \"%s\" (OID della tabella: %u)\n" -#: pg_dump.c:6339 +#: pg_dump.c:6750 #, c-format -msgid "finding the columns and types of table \"%s\"\n" -msgstr "ricerca delle colonne e dei tipi della tabella \"%s\"\n" +msgid "finding the columns and types of table \"%s\".\"%s\"\n" +msgstr "ricerca delle colonne e dei tipi della tabella \"%s\".\"%s\"\n" -#: pg_dump.c:6517 +#: pg_dump.c:6929 #, c-format msgid "invalid column numbering in table \"%s\"\n" msgstr "numerazione delle colonne non valida nella tabella \"%s\"\n" -#: pg_dump.c:6551 +#: pg_dump.c:6963 #, c-format -msgid "finding default expressions of table \"%s\"\n" -msgstr "ricerca delle espressioni predefinite della tabella \"%s\"\n" +msgid "finding default expressions of table \"%s\".\"%s\"\n" +msgstr "ricerca delle espressioni di default della tabella \"%s\".\"%s\"\n" -#: pg_dump.c:6603 +#: pg_dump.c:7016 #, c-format msgid "invalid adnum value %d for table \"%s\"\n" msgstr "valore adnum %d non valido per la tabella \"%s\"\n" -#: pg_dump.c:6675 +#: pg_dump.c:7088 #, c-format -msgid "finding check constraints for table \"%s\"\n" -msgstr "ricerca dei vincoli di controllo per la tabella \"%s\"\n" +msgid "finding check constraints for table \"%s\".\"%s\"\n" +msgstr "ricerca dei vincoli di controllo per la tabella \"%s\".\"%s\"\n" -#: pg_dump.c:6770 +#: pg_dump.c:7184 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d\n" msgid_plural "expected %d check constraints on table \"%s\" but found %d\n" msgstr[0] "previsto %d vincolo di controllo sulla tabella \"%s\" ma trovato %d\n" msgstr[1] "previsti %d vincoli di controllo sulla tabella \"%s\" ma trovati %d\n" -#: pg_dump.c:6774 +#: pg_dump.c:7188 #, c-format msgid "(The system catalogs might be corrupted.)\n" msgstr "(I cataloghi di sistema potrebbero essere corrotti.)\n" -#: pg_dump.c:8143 +#: pg_dump.c:8565 #, c-format msgid "WARNING: typtype of data type \"%s\" appears to be invalid\n" msgstr "ATTENZIONE: il \"typtype\" del tipo dato \"%s\" sembra non essere valido\n" -#: pg_dump.c:9591 +#: pg_dump.c:10091 #, c-format msgid "WARNING: bogus value in proargmodes array\n" msgstr "ATTENZIONE: valore errato nell'array proargmode\n" -#: pg_dump.c:9919 +#: pg_dump.c:10442 #, c-format msgid "WARNING: could not parse proallargtypes array\n" msgstr "ATTENZIONE: non è stato possibile analizzare l'array proallargtype\n" -#: pg_dump.c:9935 +#: pg_dump.c:10458 #, c-format msgid "WARNING: could not parse proargmodes array\n" msgstr "ATTENZIONE: non è stato possibile analizzare l'array proargmode\n" -#: pg_dump.c:9949 +#: pg_dump.c:10472 #, c-format msgid "WARNING: could not parse proargnames array\n" msgstr "ATTENZIONE: non è stato possibile analizzare l'array proargname\n" -#: pg_dump.c:9960 +#: pg_dump.c:10483 #, c-format msgid "WARNING: could not parse proconfig array\n" msgstr "ATTENZIONE: non è stato possibile analizzare l'array preconfig\n" -#: pg_dump.c:10015 +#: pg_dump.c:10554 #, c-format msgid "unrecognized provolatile value for function \"%s\"\n" msgstr "valore provolatile sconosciuto per la funzione \"%s\"\n" -#: pg_dump.c:10237 +#: pg_dump.c:10732 #, c-format msgid "WARNING: bogus value in pg_cast.castfunc or pg_cast.castmethod field\n" msgstr "ATTENZIONE: valore non corretto nei campi pg_cast.castfunc o pg_cast.castmethod\n" -#: pg_dump.c:10240 +#: pg_dump.c:10735 #, c-format msgid "WARNING: bogus value in pg_cast.castmethod field\n" -msgstr "ATTENZIONE: valore fasullo nel campo pg_cast.castmethod\n" +msgstr "ATTENZIONE: valore non corretto nel campo pg_cast.castmethod\n" + +#: pg_dump.c:10820 +#, c-format +msgid "WARNING: bogus transform definition, at least one of trffromsql and trftosql should be nonzero\n" +msgstr "ATTENZIONE: definizione della trasformazione non corretta, almeno uno tra trffromsql e trftosql dovrebbe essere non-zero\n" + +#: pg_dump.c:10837 +#, c-format +msgid "WARNING: bogus value in pg_transform.trffromsql field\n" +msgstr "ATTENZIONE: valore non corretto nel campo pg_transform.trffromsql\n" -#: pg_dump.c:10628 +#: pg_dump.c:10858 +#, c-format +msgid "WARNING: bogus value in pg_transform.trftosql field\n" +msgstr "ATTENZIONE: valore non corretto nel campo pg_transform.trftosql\n" + +#: pg_dump.c:11244 #, c-format msgid "WARNING: could not find operator with OID %s\n" msgstr "ATTENZIONE: operatore con OID %s non trovato\n" -#: pg_dump.c:11803 +#: pg_dump.c:12419 #, c-format msgid "WARNING: aggregate function %s could not be dumped correctly for this database version; ignored\n" msgstr "ATTENZIONE: la funzione di aggregazione %s non può essere scaricata correttamente per questa versione database; ignorata\n" -#: pg_dump.c:12628 +#: pg_dump.c:13244 #, c-format msgid "unrecognized object type in default privileges: %d\n" msgstr "tipo di oggetto sconosciuto nei privilegi predefiniti: %d\n" -#: pg_dump.c:12643 +#: pg_dump.c:13259 #, c-format msgid "could not parse default ACL list (%s)\n" msgstr "non è stato possibile interpretare la ACL predefinita (%s)\n" -#: pg_dump.c:12698 +#: pg_dump.c:13314 #, c-format msgid "could not parse ACL list (%s) for object \"%s\" (%s)\n" msgstr "non è stato possibile analizzare la lista ACL (%s) per l'oggetto \"%s\" (%s)\n" -#: pg_dump.c:13115 +#: pg_dump.c:13731 #, c-format msgid "query to obtain definition of view \"%s\" returned no data\n" msgstr "la query per ottenere la definizione della vista \"%s\" non ha restituito dati\n" -#: pg_dump.c:13118 +#: pg_dump.c:13734 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition\n" msgstr "la query per ottenere la definizione della vista \"%s\" ha restituito più di una definizione\n" -#: pg_dump.c:13125 +#: pg_dump.c:13741 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)\n" msgstr "la definizione della vista \"%s\" sembra essere vuota (lunghezza zero)\n" -#: pg_dump.c:13858 +#: pg_dump.c:14478 #, c-format msgid "invalid column number %d for table \"%s\"\n" msgstr "il numero di colonne %d non è valido per la tabella \"%s\"\n" -#: pg_dump.c:13982 +#: pg_dump.c:14602 #, c-format msgid "missing index for constraint \"%s\"\n" msgstr "omesso indice per vincolo \"%s\"\n" -#: pg_dump.c:14169 +#: pg_dump.c:14789 #, c-format msgid "unrecognized constraint type: %c\n" msgstr "tipo di vincolo sconosciuto: %c\n" -#: pg_dump.c:14318 pg_dump.c:14482 +#: pg_dump.c:14938 pg_dump.c:15102 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)\n" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)\n" msgstr[0] "la query per ottenere i dati della sequenza \"%s\" ha restituito %d riga (prevista 1)\n" msgstr[1] "la query per ottenere i dati della sequenza \"%s\" ha restituito %d righe (prevista 1)\n" -#: pg_dump.c:14329 +#: pg_dump.c:14949 #, c-format msgid "query to get data of sequence \"%s\" returned name \"%s\"\n" msgstr "la query per ottenere dati della sequenza \"%s\" ha restituito il nome \"%s\"\n" -#: pg_dump.c:14577 +#: pg_dump.c:15197 #, c-format msgid "unexpected tgtype value: %d\n" msgstr "valore tgtype inatteso: %d\n" -#: pg_dump.c:14659 +#: pg_dump.c:15279 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"\n" msgstr "la stringa argomento (%s) non è valida per il trigger \"%s\" sulla tabella \"%s\"\n" -#: pg_dump.c:14847 +#: pg_dump.c:15466 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned\n" msgstr "la query per ottenere regole \"%s\" per la tabella \"%s\" ha fallito: ha restituito un numero errato di righe\n" -#: pg_dump.c:15148 +#: pg_dump.c:15845 #, c-format msgid "reading dependency data\n" msgstr "lettura dati di dipendenza\n" -#: pg_dump.c:15693 +#: pg_dump.c:16392 #, c-format msgid "query returned %d row instead of one: %s\n" msgid_plural "query returned %d rows instead of one: %s\n" @@ -2018,51 +2088,51 @@ msgstr[0] "la query ha restituito %d riga invece di una: %s\n" msgstr[1] "la query ha restituito %d righe invece di una: %s\n" #. translator: this is a module name -#: pg_dump_sort.c:21 +#: pg_dump_sort.c:23 msgid "sorter" msgstr "operatore_di_ordinamento" -#: pg_dump_sort.c:466 +#: pg_dump_sort.c:489 #, c-format msgid "invalid dumpId %d\n" msgstr "dumpId non valido %d\n" -#: pg_dump_sort.c:472 +#: pg_dump_sort.c:495 #, c-format msgid "invalid dependency %d\n" msgstr "dipendenza non valida %d\n" -#: pg_dump_sort.c:705 +#: pg_dump_sort.c:728 #, c-format msgid "could not identify dependency loop\n" msgstr "identificazione del ciclo di dipendenze fallito\n" -#: pg_dump_sort.c:1227 +#: pg_dump_sort.c:1250 #, c-format msgid "NOTICE: there are circular foreign-key constraints among these table(s):\n" msgstr "AVVISO: ci sono vincoli di dipendenza circolari tra chiavi esterne tra queste tabelle:\n" -#: pg_dump_sort.c:1229 pg_dump_sort.c:1249 +#: pg_dump_sort.c:1252 pg_dump_sort.c:1272 #, c-format msgid " %s\n" msgstr " %s\n" -#: pg_dump_sort.c:1230 +#: pg_dump_sort.c:1253 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints.\n" msgstr "Potreste non essere in grado di ripristinare l'archivio senza usare --disable-triggers o eliminare temporaneamente i vincoli.\n" -#: pg_dump_sort.c:1231 +#: pg_dump_sort.c:1254 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem.\n" msgstr "Considera l'uso di un salvataggio completo invece di uno --data-only per evitare questo problema.\n" -#: pg_dump_sort.c:1243 +#: pg_dump_sort.c:1266 #, c-format msgid "WARNING: could not resolve dependency loop among these items:\n" msgstr "ATTENZIONE: risoluzione del ciclo di dipendenze tra questi elementi fallito:\n" -#: pg_dumpall.c:182 +#: pg_dumpall.c:181 #, c-format msgid "" "The program \"pg_dump\" is needed by %s but was not found in the\n" @@ -2073,7 +2143,7 @@ msgstr "" "stessa directory di \"%s\".\n" "Verifica che l'installazione sia corretta.\n" -#: pg_dumpall.c:189 +#: pg_dumpall.c:188 #, c-format msgid "" "The program \"pg_dump\" was found by \"%s\"\n" @@ -2084,32 +2154,32 @@ msgstr "" "ma non è la stessa versione di %s.\n" "Controllate la vostra installazione.\n" -#: pg_dumpall.c:323 +#: pg_dumpall.c:318 #, c-format msgid "%s: options -g/--globals-only and -r/--roles-only cannot be used together\n" msgstr "%s: le opzioni -g/--globals-only e -r/--roles-only non possono essere usate insieme\n" -#: pg_dumpall.c:332 +#: pg_dumpall.c:327 #, c-format msgid "%s: options -g/--globals-only and -t/--tablespaces-only cannot be used together\n" msgstr "%s: le opzioni -g/--globals-only e -t/--tablespaces-only non possono essere usate insieme\n" -#: pg_dumpall.c:341 pg_restore.c:343 +#: pg_dumpall.c:336 pg_restore.c:343 #, c-format msgid "%s: option --if-exists requires option -c/--clean\n" msgstr "%s: l'opzione --if-exists richiede l'opzione -c/--clean\n" -#: pg_dumpall.c:348 +#: pg_dumpall.c:343 #, c-format msgid "%s: options -r/--roles-only and -t/--tablespaces-only cannot be used together\n" msgstr "%s: la opzioni -r/--roles-only e -t/--tablespaces-only non possono essere usate insieme\n" -#: pg_dumpall.c:390 pg_dumpall.c:1860 +#: pg_dumpall.c:385 pg_dumpall.c:1881 #, c-format msgid "%s: could not connect to database \"%s\"\n" msgstr "%s: connessione al database \"%s\" fallita\n" -#: pg_dumpall.c:405 +#: pg_dumpall.c:400 #, c-format msgid "" "%s: could not connect to databases \"postgres\" or \"template1\"\n" @@ -2118,12 +2188,12 @@ msgstr "" "%s: non stato è possibile connettersi ai database \"postgres\" o \"template1\"\n" "Specificare un database alternativo.\n" -#: pg_dumpall.c:422 +#: pg_dumpall.c:417 #, c-format msgid "%s: could not open the output file \"%s\": %s\n" msgstr "%s: apertura del file di output \"%s\" fallita: %s\n" -#: pg_dumpall.c:552 +#: pg_dumpall.c:547 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2132,57 +2202,57 @@ msgstr "" "%s estrae un cluster di database PostgreSQL in un file script SQL.\n" "\n" -#: pg_dumpall.c:554 +#: pg_dumpall.c:549 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPZIONE]...\n" -#: pg_dumpall.c:557 +#: pg_dumpall.c:552 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=NOMEFILE nome file di output\n" -#: pg_dumpall.c:563 +#: pg_dumpall.c:558 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean pulisci (drop) i database prima di ricrearli\n" -#: pg_dumpall.c:564 +#: pg_dumpall.c:559 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr " -g, --globals-only scarica solo gli oggetti globali e non i database\n" -#: pg_dumpall.c:566 pg_restore.c:454 +#: pg_dumpall.c:561 pg_restore.c:454 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner salta il ripristino del proprietario degli oggetti\n" -#: pg_dumpall.c:567 +#: pg_dumpall.c:562 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr " -r, --roles-only scarica solo i ruoli e non i database o i tablespace\n" -#: pg_dumpall.c:569 +#: pg_dumpall.c:564 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr " -S, --superuser=NOME nome del superutente da usare nel dump\n" -#: pg_dumpall.c:570 +#: pg_dumpall.c:565 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr " -t, --tablespaces-only scarica solo i tablespace e non i database o i ruoli\n" -#: pg_dumpall.c:587 +#: pg_dumpall.c:582 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=STRCONN connettiti usando la stringa di connessione\n" -#: pg_dumpall.c:589 +#: pg_dumpall.c:584 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=NOMEDB database predefinito alternativo\n" -#: pg_dumpall.c:596 +#: pg_dumpall.c:591 #, c-format msgid "" "\n" @@ -2195,82 +2265,82 @@ msgstr "" "output.\n" "\n" -#: pg_dumpall.c:1100 +#: pg_dumpall.c:1118 #, c-format msgid "%s: could not parse ACL list (%s) for tablespace \"%s\"\n" msgstr "%s: non è stato possibile analizzare la lista ACL (%s) per il tablespace \"%s\"\n" -#: pg_dumpall.c:1417 +#: pg_dumpall.c:1431 #, c-format msgid "%s: could not parse ACL list (%s) for database \"%s\"\n" msgstr "%s: non è stato possibile analizzare la lista ACL (%s) per il database \"%s\"\n" -#: pg_dumpall.c:1627 +#: pg_dumpall.c:1648 #, c-format msgid "%s: dumping database \"%s\"...\n" msgstr "%s: scaricamento del database \"%s\"...\n" -#: pg_dumpall.c:1648 +#: pg_dumpall.c:1669 #, c-format msgid "%s: pg_dump failed on database \"%s\", exiting\n" msgstr "%s: pg_dump fallito per il database \"%s\", in uscita\n" -#: pg_dumpall.c:1657 +#: pg_dumpall.c:1678 #, c-format msgid "%s: could not re-open the output file \"%s\": %s\n" msgstr "%s: riapertura del file di output \"%s\" fallita: %s\n" -#: pg_dumpall.c:1702 +#: pg_dumpall.c:1723 #, c-format msgid "%s: running \"%s\"\n" msgstr "%s: in elaborazione \"%s\"\n" -#: pg_dumpall.c:1882 +#: pg_dumpall.c:1903 #, c-format msgid "%s: could not connect to database \"%s\": %s\n" msgstr "%s: connessione al database \"%s\" fallita: %s\n" -#: pg_dumpall.c:1912 +#: pg_dumpall.c:1933 #, c-format msgid "%s: could not get server version\n" msgstr "%s: non è stato possibile ottenere la versione del server\n" -#: pg_dumpall.c:1918 +#: pg_dumpall.c:1939 #, c-format msgid "%s: could not parse server version \"%s\"\n" msgstr "%s: non è stato possibile analizzare la versione del server \"%s\"\n" -#: pg_dumpall.c:1996 pg_dumpall.c:2022 +#: pg_dumpall.c:2017 pg_dumpall.c:2043 #, c-format msgid "%s: executing %s\n" msgstr "%s: esecuzione di %s\n" -#: pg_dumpall.c:2002 pg_dumpall.c:2028 +#: pg_dumpall.c:2023 pg_dumpall.c:2049 #, c-format msgid "%s: query failed: %s" msgstr "%s: query fallita: %s" -#: pg_dumpall.c:2004 pg_dumpall.c:2030 +#: pg_dumpall.c:2025 pg_dumpall.c:2051 #, c-format msgid "%s: query was: %s\n" msgstr "%s: la query era: %s\n" -#: pg_restore.c:304 +#: pg_restore.c:303 #, c-format msgid "%s: options -d/--dbname and -f/--file cannot be used together\n" msgstr "%s: le opzioni -d/--dbname e -f/--file non possono essere usate insieme\n" -#: pg_restore.c:315 +#: pg_restore.c:314 #, c-format msgid "%s: options -s/--schema-only and -a/--data-only cannot be used together\n" msgstr "%s: le opzioni -s/--schema-only e -a/--data-only non possono essere usate insieme\n" -#: pg_restore.c:322 +#: pg_restore.c:321 #, c-format msgid "%s: options -c/--clean and -a/--data-only cannot be used together\n" msgstr "%s: le opzioni -c/--clean e -a/--data-only non possono essere usate insieme\n" -#: pg_restore.c:330 +#: pg_restore.c:329 #, c-format msgid "%s: cannot specify both --single-transaction and multiple jobs\n" msgstr "%s: non si può specificare insieme --single-transaction e job multipli\n" @@ -2404,8 +2474,8 @@ msgstr " -S, --superuser=NOME nome del superutente da usare per disabil #: pg_restore.c:458 #, c-format -msgid " -t, --table=NAME restore named table\n" -msgstr " -t, --table=NOME ripristina la tabella indicata\n" +msgid " -t, --table=NAME restore named relation (table, view, etc)\n" +msgstr " -t, --table=NOME ripristina la relazione nominata (tabella, vista, ecc.)\n" #: pg_restore.c:459 #, c-format @@ -2422,7 +2492,7 @@ msgstr " -x, --no-privileges salta il ripristino dei privilegi di acce msgid " -1, --single-transaction restore as a single transaction\n" msgstr " -1, --single-transaction ripristina in un'unica transazione\n" -#: pg_restore.c:464 +#: pg_restore.c:465 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not be\n" @@ -2431,27 +2501,27 @@ msgstr "" " --no-data-for-failed-tables non ripristinare i dati delle tabelle che non\n" " è stato possibile creare\n" -#: pg_restore.c:466 +#: pg_restore.c:467 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels do ripristinare le etichette di sicurezza\n" -#: pg_restore.c:467 +#: pg_restore.c:468 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces non ripristina le assegnazioni dei tablespace\n" -#: pg_restore.c:468 +#: pg_restore.c:469 #, c-format msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" msgstr " --section=SEZIONE ripristina la sezione indicata (pre-data, data o post-data)\n" -#: pg_restore.c:479 +#: pg_restore.c:480 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=NOMERUOLO esegui SET ROLE prima del ripristino\n" -#: pg_restore.c:481 +#: pg_restore.c:482 #, c-format msgid "" "\n" @@ -2462,7 +2532,7 @@ msgstr "" "Le opzioni -I, -n, -P, -t, -T e --section possono essere combinate e specificate\n" "più volte per selezionare più oggetti.\n" -#: pg_restore.c:484 +#: pg_restore.c:485 #, c-format msgid "" "\n" diff --git a/src/bin/pg_dump/po/pl.po b/src/bin/pg_dump/po/pl.po index 39c9e417c2945..c3fdf1c86a03d 100644 --- a/src/bin/pg_dump/po/pl.po +++ b/src/bin/pg_dump/po/pl.po @@ -2,13 +2,13 @@ # Copyright (C) 2011 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. # Begina Felicysym , 2011, 2012, 2013. -# grzegorz , 2014. +# grzegorz , 2014, 2015. msgid "" msgstr "" "Project-Id-Version: pg_dump (PostgreSQL 9.1)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-03-21 18:20+0000\n" -"PO-Revision-Date: 2014-03-22 20:55+0200\n" +"POT-Creation-Date: 2015-08-15 18:43+0000\n" +"PO-Revision-Date: 2015-08-16 12:55+0200\n" "Last-Translator: grzegorz \n" "Language-Team: begina.felicysym@wp.eu\n" "Language: pl\n" @@ -19,267 +19,319 @@ msgstr "" "|| n%100>=20) ? 1 : 2);\n" "X-Generator: Virtaal 0.7.1\n" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 pg_backup_db.c:134 pg_backup_db.c:189 -#: pg_backup_db.c:233 pg_backup_db.c:279 -#, c-format -msgid "out of memory\n" -msgstr "brak pamięci\n" - -#: ../../common/fe_memutils.c:77 -#, c-format -msgid "cannot duplicate null pointer (internal error)\n" -msgstr "nie można powielić pustego wskazania (błąd wewnętrzny)\n" - -#: ../../port/exec.c:127 ../../port/exec.c:241 ../../port/exec.c:284 +#: ../../common/exec.c:127 ../../common/exec.c:241 ../../common/exec.c:284 #, c-format msgid "could not identify current directory: %s" msgstr "nie można zidentyfikować aktualnego katalogu: %s" -#: ../../port/exec.c:146 +#: ../../common/exec.c:146 #, c-format msgid "invalid binary \"%s\"" msgstr "niepoprawny binarny \"%s\"" -#: ../../port/exec.c:195 +#: ../../common/exec.c:195 #, c-format msgid "could not read binary \"%s\"" msgstr "nie można odczytać binarnego \"%s\"" -#: ../../port/exec.c:202 +#: ../../common/exec.c:202 #, c-format msgid "could not find a \"%s\" to execute" msgstr "nie znaleziono \"%s\" do wykonania" -#: ../../port/exec.c:257 ../../port/exec.c:293 +#: ../../common/exec.c:257 ../../common/exec.c:293 #, c-format msgid "could not change directory to \"%s\": %s" msgstr "nie można zmienić katalogu na \"%s\": %s" -#: ../../port/exec.c:272 +#: ../../common/exec.c:272 #, c-format msgid "could not read symbolic link \"%s\"" msgstr "nie można odczytać odwołania symbolicznego \"%s\"" -#: ../../port/exec.c:523 +#: ../../common/exec.c:523 #, c-format msgid "pclose failed: %s" msgstr "pclose nie powiodło się: %s" -#: common.c:105 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 pg_backup_db.c:135 pg_backup_db.c:190 +#: pg_backup_db.c:234 pg_backup_db.c:280 +#, c-format +msgid "out of memory\n" +msgstr "brak pamięci\n" + +#: ../../common/fe_memutils.c:92 +#, 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:47 +#, c-format +msgid "command not executable" +msgstr "polecenie nie wykonywalne" + +#: ../../common/wait_error.c:51 +#, c-format +msgid "command not found" +msgstr "polecenie nie znalezione" + +#: ../../common/wait_error.c:56 +#, c-format +msgid "child process exited with exit code %d" +msgstr "proces potomny zakończył działanie z kodem %d" + +#: ../../common/wait_error.c:63 +#, 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:73 +#, c-format +msgid "child process was terminated by signal %s" +msgstr "proces potomny został zatrzymany przez sygnał %s" + +#: ../../common/wait_error.c:77 +#, c-format +msgid "child process was terminated by signal %d" +msgstr "proces potomny został zatrzymany przez sygnał %d" + +#: ../../common/wait_error.c:82 +#, c-format +msgid "child process exited with unrecognized status %d" +msgstr "proces potomny zakończył działanie z nieznanym stanem %d" + +#: common.c:109 #, c-format msgid "reading schemas\n" msgstr "odczyt schematów\n" -#: common.c:116 +#: common.c:120 #, c-format msgid "reading user-defined tables\n" msgstr "odczyt tabel użytkownika\n" -#: common.c:124 +#: common.c:128 #, c-format msgid "reading extensions\n" msgstr "odczyt rozszerzeń\n" -#: common.c:128 +#: common.c:132 #, c-format msgid "reading user-defined functions\n" msgstr "odczyt funkcji użytkownika\n" -#: common.c:134 +#: common.c:138 #, c-format msgid "reading user-defined types\n" msgstr "odczyt typów użytkownika\n" -#: common.c:140 +#: common.c:144 #, c-format msgid "reading procedural languages\n" msgstr "odczyt języków proceduralnych\n" -#: common.c:144 +#: common.c:148 #, c-format msgid "reading user-defined aggregate functions\n" msgstr "odczyt funkcji agregujących użytkownika\n" -#: common.c:148 +#: common.c:152 #, c-format msgid "reading user-defined operators\n" msgstr "odczyt operatorów użytkownika\n" -#: common.c:153 +#: common.c:157 #, c-format msgid "reading user-defined operator classes\n" msgstr "odczyt klas operatorów użytkownika\n" -#: common.c:157 +#: common.c:161 #, c-format msgid "reading user-defined operator families\n" msgstr "odczyt rodzin operatorów użytkownika\n" -#: common.c:161 +#: common.c:165 #, c-format msgid "reading user-defined text search parsers\n" msgstr "odczyt analizatorów wyszukiwania tekstowego użytkownika\n" -#: common.c:165 +#: common.c:169 #, c-format msgid "reading user-defined text search templates\n" msgstr "odczyt szablonów wyszukiwania tekstowego użytkownika\n" -#: common.c:169 +#: common.c:173 #, c-format msgid "reading user-defined text search dictionaries\n" msgstr "odczyt słowników wyszukiwania tekstowego użytkownika\n" -#: common.c:173 +#: common.c:177 #, c-format msgid "reading user-defined text search configurations\n" msgstr "odczyt konfiguracji wyszukiwania tekstowego użytkownika\n" -#: common.c:177 +#: common.c:181 #, c-format msgid "reading user-defined foreign-data wrappers\n" msgstr "odczyt opakowań obcych danych użytkownika\n" -#: common.c:181 +#: common.c:185 #, c-format msgid "reading user-defined foreign servers\n" msgstr "odczyt serwerów obcych użytkownika\n" -#: common.c:185 +#: common.c:189 #, c-format msgid "reading default privileges\n" msgstr "odczyt uprawnień domyślnych\n" -#: common.c:189 +#: common.c:193 #, c-format msgid "reading user-defined collations\n" msgstr "odczyt porównań użytkownika\n" -#: common.c:194 +#: common.c:198 #, c-format msgid "reading user-defined conversions\n" msgstr "odczyt konwersji użytkownika\n" -#: common.c:198 +#: common.c:202 #, c-format msgid "reading type casts\n" msgstr "odczyt rzutowań typów\n" -#: common.c:202 +#: common.c:206 +#, c-format +#| msgid "reading extensions\n" +msgid "reading transforms\n" +msgstr "odczyt transformacji\n" + +#: common.c:210 #, c-format msgid "reading table inheritance information\n" msgstr "odczyt informacji o dziedziczeniu tabel\n" -#: common.c:206 +#: common.c:214 #, c-format msgid "reading event triggers\n" msgstr "odczyt wyzwalaczy zdarzeń\n" -#: common.c:215 +#: common.c:223 #, c-format msgid "finding extension members\n" msgstr "odnajdywanie składników rozszerzeń\n" -#: common.c:220 +#: common.c:228 #, c-format msgid "finding inheritance relationships\n" msgstr "odnajdywanie relacji dziedziczenia\n" -#: common.c:224 +#: common.c:232 #, c-format msgid "reading column info for interesting tables\n" msgstr "odczyt notatek kolumn dla ciekawych tabel\n" -#: common.c:228 +#: common.c:236 #, c-format msgid "flagging inherited columns in subtables\n" msgstr "oznaczanie dziedziczonych kolumn w podtabelach\n" -#: common.c:232 +#: common.c:240 #, c-format msgid "reading indexes\n" msgstr "odczyt indeksów\n" -#: common.c:236 +#: common.c:244 #, c-format msgid "reading constraints\n" msgstr "odczyt ograniczeń\n" -#: common.c:240 +#: common.c:248 #, c-format msgid "reading triggers\n" msgstr "odczyt wyzwalaczy\n" -#: common.c:244 +#: common.c:252 #, c-format msgid "reading rewrite rules\n" msgstr "odczyt reguł przepisywania\n" -#: common.c:792 +#: common.c:256 +#, c-format +#| msgid "reading schemas\n" +msgid "reading policies\n" +msgstr "odczyt polityk\n" + +#: common.c:804 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found\n" msgstr "sprawdzenia nie powiodły się, nie odnaleziono nadrzędnego OID %u dla tabeli \"%s\" (OID %u)\n" -#: common.c:834 +#: common.c:846 #, c-format msgid "could not parse numeric array \"%s\": too many numbers\n" msgstr "nie można przetworzyć tablicy numerycznej \"%s\": zbyt wiele liczb\n" -#: common.c:849 +#: common.c:861 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number\n" msgstr "nie można przetworzyć tablicy numerycznej \"%s\": niepoprawny znak w liczbie\n" #. translator: this is a module name -#: compress_io.c:78 +#: compress_io.c:79 msgid "compress_io" msgstr "kompresuj_io" -#: compress_io.c:114 +#: compress_io.c:115 #, c-format msgid "invalid compression code: %d\n" msgstr "niepoprawny kod kompresji: %d\n" -#: compress_io.c:138 compress_io.c:174 compress_io.c:195 compress_io.c:528 -#: compress_io.c:555 +#: compress_io.c:139 compress_io.c:175 compress_io.c:196 compress_io.c:529 +#: compress_io.c:572 #, c-format msgid "not built with zlib support\n" msgstr "nie wbudowano obsługi zlib\n" -#: compress_io.c:243 compress_io.c:352 +#: compress_io.c:246 compress_io.c:348 #, c-format msgid "could not initialize compression library: %s\n" msgstr "nie udało się zainicjować biblioteki kompresji: %s\n" -#: compress_io.c:264 +#: compress_io.c:267 #, c-format msgid "could not close compression stream: %s\n" msgstr "nie udało się zamknąć strumienia kompresji: %s\n" -#: compress_io.c:282 +#: compress_io.c:285 #, c-format msgid "could not compress data: %s\n" msgstr "nie udało się spakować danych: %s\n" -#: compress_io.c:303 compress_io.c:440 pg_backup_archiver.c:1441 -#: pg_backup_archiver.c:1464 pg_backup_custom.c:661 pg_backup_directory.c:542 -#: pg_backup_tar.c:598 pg_backup_tar.c:1087 pg_backup_tar.c:1308 -#, c-format -msgid "could not write to output file: %s\n" -msgstr "nie można pisać do pliku wyjścia: %s\n" - -#: compress_io.c:372 compress_io.c:388 +#: compress_io.c:368 compress_io.c:384 #, c-format msgid "could not uncompress data: %s\n" msgstr "nie udało się rozpakować danych: %s\n" -#: compress_io.c:396 +#: compress_io.c:392 #, c-format msgid "could not close compression library: %s\n" msgstr "nie udało się zamknąć biblioteki kompresji: %s\n" -#: parallel.c:77 +#: compress_io.c:606 compress_io.c:642 pg_backup_custom.c:591 +#: pg_backup_tar.c:555 +#, c-format +msgid "could not read from input file: %s\n" +msgstr "nie można czytać z pliku wejścia: %s\n" + +#: compress_io.c:645 pg_backup_custom.c:588 pg_backup_directory.c:552 +#: pg_backup_tar.c:791 pg_backup_tar.c:815 +#, c-format +msgid "could not read from input file: end of file\n" +msgstr "nie można czytać pliku wejścia: koniec pliku\n" + +#: parallel.c:78 msgid "parallel archiver" msgstr "archiwizator równoległy" @@ -293,22 +345,22 @@ msgstr "%s: nie powiodło się WSAStartup: %d\n" msgid "worker is terminating\n" msgstr "pracownik kończy pracę\n" -#: parallel.c:535 +#: parallel.c:537 #, c-format msgid "could not create communication channels: %s\n" msgstr "nie można utworzyć kanałów komunikacyjnych: %s\n" -#: parallel.c:605 +#: parallel.c:611 #, c-format msgid "could not create worker process: %s\n" msgstr "nie można utworzyć procesu roboczego: %s\n" -#: parallel.c:822 +#: parallel.c:828 #, c-format msgid "could not get relation name for OID %u: %s\n" msgstr "nie można pobrać nazwy relacji dla OID %u: %s\n" -#: parallel.c:839 +#: parallel.c:845 #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" @@ -317,197 +369,212 @@ msgstr "" "nie udało się uzyskać blokady na relacji \"%s\"\n" "Oznacza to zazwyczaj że ktoś zażądał blokady ACCESS EXCLUSIVE na tabeli gdy wcześniej proces nadrzędny pg_dump uzyskał początkową blokadę ACCESS SHARE na tabeli.\n" -#: parallel.c:923 +#: parallel.c:929 #, c-format msgid "unrecognized command on communication channel: %s\n" msgstr "nierozpoznane polecenie w kanale komunikacyjnym: %s\n" -#: parallel.c:956 +#: parallel.c:962 #, c-format msgid "a worker process died unexpectedly\n" msgstr "proces roboczy nie zakończył się nieoczekiwanie\n" -#: parallel.c:983 parallel.c:992 +#: parallel.c:989 parallel.c:998 #, c-format msgid "invalid message received from worker: %s\n" msgstr "niepoprawny komunikat otrzymany od pracownika: %s\n" -#: parallel.c:989 pg_backup_db.c:336 +#: parallel.c:995 pg_backup_db.c:337 #, c-format msgid "%s" msgstr "%s" -#: parallel.c:1041 parallel.c:1085 +#: parallel.c:1047 parallel.c:1091 #, c-format msgid "error processing a parallel work item\n" msgstr "błąd przetwarzania równoległego elementu roboczego\n" -#: parallel.c:1113 parallel.c:1251 +#: parallel.c:1119 parallel.c:1257 #, c-format msgid "could not write to the communication channel: %s\n" msgstr "nie można zapisać do kanału komunikacyjnego: %s\n" -#: parallel.c:1162 +#: parallel.c:1168 #, c-format msgid "terminated by user\n" msgstr "zakończono przez użytkownika\n" -#: parallel.c:1214 +#: parallel.c:1220 #, c-format msgid "error in ListenToWorkers(): %s\n" msgstr "błąd w ListenToWorkers(): %s\n" -#: parallel.c:1333 +#: parallel.c:1345 #, c-format msgid "pgpipe: could not create socket: error code %d\n" msgstr "pgpipe: nie można utworzyć gniazda: kod błędu %d\n" -#: parallel.c:1344 +#: parallel.c:1356 #, c-format msgid "pgpipe: could not bind: error code %d\n" msgstr "pgpipe: nie udało się dowiązać: kod błędu %d\n" -#: parallel.c:1351 +#: parallel.c:1363 #, c-format msgid "pgpipe: could not listen: error code %d\n" msgstr "pgpipe: nie dało się nasłuchiwać: kod błędu %d\n" -#: parallel.c:1358 +#: parallel.c:1370 #, c-format msgid "pgpipe: getsockname() failed: error code %d\n" msgstr "pgpipe: getsockname() nie powiodła: kod błędu %d\n" -#: parallel.c:1365 +#: parallel.c:1381 #, c-format msgid "pgpipe: could not create second socket: error code %d\n" msgstr "pgpipe: nie można utworzyć drugiego gniazda: kod błędu %d\n" -#: parallel.c:1373 +#: parallel.c:1390 #, c-format msgid "pgpipe: could not connect socket: error code %d\n" msgstr "pgpipe: nie można połączyć się do gniazda: kod błędu %d\n" -#: parallel.c:1380 +#: parallel.c:1397 #, c-format msgid "pgpipe: could not accept connection: error code %d\n" msgstr "pgpipe: nie można przyjąć połączenia: kod błądu %d\n" #. translator: this is a module name -#: pg_backup_archiver.c:51 +#: pg_backup_archiver.c:53 msgid "archiver" msgstr "archiwizator" -#: pg_backup_archiver.c:169 pg_backup_archiver.c:1304 +#: pg_backup_archiver.c:230 pg_backup_archiver.c:1479 #, c-format msgid "could not close output file: %s\n" msgstr "nie można zamknąć pliku wyjścia: %s\n" -#: pg_backup_archiver.c:204 pg_backup_archiver.c:209 +#: pg_backup_archiver.c:265 pg_backup_archiver.c:270 #, c-format msgid "WARNING: archive items not in correct section order\n" msgstr "OSTRZEŻENIE: elementy archiwów w niepoprawnym porządku sekcji\n" -#: pg_backup_archiver.c:215 +#: pg_backup_archiver.c:276 #, c-format msgid "unexpected section code %d\n" msgstr "nieoczekiwany kod sekcji %d\n" -#: pg_backup_archiver.c:247 +#: pg_backup_archiver.c:308 #, c-format msgid "-C and -1 are incompatible options\n" msgstr "-C i -1 są opcjami niekompatybilnymi\n" -#: pg_backup_archiver.c:257 +#: pg_backup_archiver.c:318 #, c-format msgid "parallel restore is not supported with this archive file format\n" msgstr "odtwarzanie współbieżne nie jest obsługiwane w tym formacie archiwum\n" -#: pg_backup_archiver.c:261 +#: pg_backup_archiver.c:322 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump\n" msgstr "odtwarzanie współbieżne nie jest obsługiwane w archiwach utworzonych przez pg_dump sprzed 8.0\n" -#: pg_backup_archiver.c:279 +#: pg_backup_archiver.c:340 #, c-format msgid "cannot restore from compressed archive (compression not supported in this installation)\n" msgstr "nie można odtworzyć ze spakowanego archiwum (kompresja nie jest obsługiwana w tej instalacji)\n" -#: pg_backup_archiver.c:296 +#: pg_backup_archiver.c:357 #, c-format msgid "connecting to database for restore\n" msgstr "łączenie z bazą danych w celu odtworzenia\n" -#: pg_backup_archiver.c:298 +#: pg_backup_archiver.c:359 #, c-format msgid "direct database connections are not supported in pre-1.3 archives\n" msgstr "bezpośrednie połączenia bazy danych nie są obsługiwane w archiwach sprzed 1.3\n" -#: pg_backup_archiver.c:343 +#: pg_backup_archiver.c:404 #, c-format msgid "implied data-only restore\n" msgstr "domniemane przywrócenie wyłącznie danych\n" -#: pg_backup_archiver.c:412 +#: pg_backup_archiver.c:474 #, c-format msgid "dropping %s %s\n" msgstr "kasowanie %s %s\n" -#: pg_backup_archiver.c:479 +#: pg_backup_archiver.c:627 +#, c-format +#| msgid "setting owner and privileges for %s %s\n" +msgid "setting owner and privileges for %s \"%s\".\"%s\"\n" +msgstr "ustawienie właściciela i uprawnień dla %s \"%s\".\"%s\"\n" + +#: pg_backup_archiver.c:630 #, c-format -msgid "setting owner and privileges for %s %s\n" -msgstr "ustawienie właściciela i uprawnień dla %s %s\n" +#| msgid "setting owner and privileges for %s %s\n" +msgid "setting owner and privileges for %s \"%s\"\n" +msgstr "ustawienie właściciela i uprawnień dla %s \"%s\"\n" -#: pg_backup_archiver.c:545 pg_backup_archiver.c:547 +#: pg_backup_archiver.c:696 pg_backup_archiver.c:698 #, c-format msgid "warning from original dump file: %s\n" msgstr "ostrzeżenie z oryginalnego pliku zrzutu: %s\n" -#: pg_backup_archiver.c:554 +#: pg_backup_archiver.c:707 #, c-format -msgid "creating %s %s\n" -msgstr "tworzenie %s %s\n" +#| msgid "creating %s %s\n" +msgid "creating %s \"%s\".\"%s\"\n" +msgstr "tworzenie %s \"%s\".\"%s\"\n" -#: pg_backup_archiver.c:598 +#: pg_backup_archiver.c:710 +#, c-format +#| msgid "creating %s %s\n" +msgid "creating %s \"%s\"\n" +msgstr "tworzenie %s \"%s\"\n" + +#: pg_backup_archiver.c:755 #, c-format msgid "connecting to new database \"%s\"\n" msgstr "łączenie do nowej bazy danych \"%s\"\n" -#: pg_backup_archiver.c:626 +#: pg_backup_archiver.c:783 #, c-format msgid "processing %s\n" msgstr "przetwarzanie %s\n" -#: pg_backup_archiver.c:640 +#: pg_backup_archiver.c:803 #, c-format -msgid "processing data for table \"%s\"\n" -msgstr "przetwarzanie danych tabeli \"%s\"\n" +#| msgid "processing data for table \"%s\"\n" +msgid "processing data for table \"%s\".\"%s\"\n" +msgstr "przetwarzanie danych tabeli \"%s\".\"%s\"\n" -#: pg_backup_archiver.c:702 +#: pg_backup_archiver.c:865 #, c-format msgid "executing %s %s\n" msgstr "wykonywanie %s %s\n" -#: pg_backup_archiver.c:739 +#: pg_backup_archiver.c:902 #, c-format msgid "disabling triggers for %s\n" msgstr "wyłączanie wyzwalaczy dla %s\n" -#: pg_backup_archiver.c:765 +#: pg_backup_archiver.c:928 #, c-format msgid "enabling triggers for %s\n" msgstr "włączanie wyzwalaczy dla: %s\n" -#: pg_backup_archiver.c:795 +#: pg_backup_archiver.c:958 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine\n" msgstr "błąd wewnętrzny -- WriteData nie może być wywołana poza kontekstem procedury DataDumper\n" -#: pg_backup_archiver.c:952 +#: pg_backup_archiver.c:1122 #, c-format msgid "large-object output not supported in chosen format\n" msgstr "wyjście dużych obiektów nie jest obsługiwane w wybranym formacie\n" -#: pg_backup_archiver.c:1006 +#: pg_backup_archiver.c:1176 #, c-format msgid "restored %d large object\n" msgid_plural "restored %d large objects\n" @@ -515,55 +582,55 @@ msgstr[0] "odtworzono %d duży obiekt\n" msgstr[1] "odtworzono %d duże obiekty\n" msgstr[2] "odtworzono %d dużych obiektów\n" -#: pg_backup_archiver.c:1027 pg_backup_tar.c:731 +#: pg_backup_archiver.c:1197 pg_backup_tar.c:733 #, c-format msgid "restoring large object with OID %u\n" msgstr "odtwarzanie dużego obiektu z OID %u\n" -#: pg_backup_archiver.c:1039 +#: pg_backup_archiver.c:1209 #, c-format msgid "could not create large object %u: %s" msgstr "nie można utworzyć dużego obiektu %u: %s" -#: pg_backup_archiver.c:1044 pg_dump.c:2662 +#: pg_backup_archiver.c:1214 pg_dump.c:2773 #, c-format msgid "could not open large object %u: %s" msgstr "nie można otworzyć dużego obiektu %u: %s" -#: pg_backup_archiver.c:1101 +#: pg_backup_archiver.c:1271 #, c-format msgid "could not open TOC file \"%s\": %s\n" msgstr "nie można otworzyć pliku TOC \"%s\": %s\n" -#: pg_backup_archiver.c:1142 +#: pg_backup_archiver.c:1312 #, c-format msgid "WARNING: line ignored: %s\n" msgstr "OSTRZEŻENIE: zignorowano linię: %s\n" -#: pg_backup_archiver.c:1149 +#: pg_backup_archiver.c:1319 #, c-format msgid "could not find entry for ID %d\n" msgstr "nie znaleziono wpisu dla ID %d\n" -#: pg_backup_archiver.c:1170 pg_backup_directory.c:235 -#: pg_backup_directory.c:608 +#: pg_backup_archiver.c:1340 pg_backup_directory.c:230 +#: pg_backup_directory.c:601 #, c-format msgid "could not close TOC file: %s\n" msgstr "nie można zamknąć pliku TOC: %s\n" -#: pg_backup_archiver.c:1274 pg_backup_custom.c:161 pg_backup_directory.c:346 -#: pg_backup_directory.c:594 pg_backup_directory.c:652 -#: pg_backup_directory.c:672 +#: pg_backup_archiver.c:1449 pg_backup_custom.c:162 pg_backup_directory.c:341 +#: pg_backup_directory.c:587 pg_backup_directory.c:645 +#: pg_backup_directory.c:665 #, c-format msgid "could not open output file \"%s\": %s\n" msgstr "nie można otworzyć pliku wyjścia \"%s\": %s\n" -#: pg_backup_archiver.c:1277 pg_backup_custom.c:168 +#: pg_backup_archiver.c:1452 pg_backup_custom.c:169 #, c-format msgid "could not open output file: %s\n" msgstr "nie można otworzyć pliku wyjścia %s\n" -#: pg_backup_archiver.c:1377 +#: pg_backup_archiver.c:1556 #, c-format msgid "wrote %lu byte of large object data (result = %lu)\n" msgid_plural "wrote %lu bytes of large object data (result = %lu)\n" @@ -571,359 +638,339 @@ msgstr[0] "zapisano %lu bajt danych dużego obiektu (wynik = %lu)\n" msgstr[1] "zapisano %lu bajty danych dużego obiektu (wynik = %lu)\n" msgstr[2] "zapisano %lu bajtów danych dużego obiektu (wynik = %lu)\n" -#: pg_backup_archiver.c:1383 +#: pg_backup_archiver.c:1562 #, c-format msgid "could not write to large object (result: %lu, expected: %lu)\n" msgstr "nie udało się zapisać dużego obiektu (wynik: %lu, oczekiwano: %lu)\n" -#: pg_backup_archiver.c:1449 -#, c-format -msgid "could not write to custom output routine\n" -msgstr "nie można pisać do procedury wyjścia użytkownika\n" - -#: pg_backup_archiver.c:1487 +#: pg_backup_archiver.c:1655 #, c-format msgid "Error while INITIALIZING:\n" msgstr "Błąd podczas INICJACJI:\n" -#: pg_backup_archiver.c:1492 +#: pg_backup_archiver.c:1660 #, c-format msgid "Error while PROCESSING TOC:\n" msgstr "Błąd podczas PRZETWARZANIA TOC:\n" -#: pg_backup_archiver.c:1497 +#: pg_backup_archiver.c:1665 #, c-format msgid "Error while FINALIZING:\n" msgstr "Błąd podczas ZAKAŃCZANIA:\n" -#: pg_backup_archiver.c:1502 +#: pg_backup_archiver.c:1670 #, c-format msgid "Error from TOC entry %d; %u %u %s %s %s\n" msgstr "Błąd z wpisu %d TOC; %u %u %s %s %s\n" -#: pg_backup_archiver.c:1575 +#: pg_backup_archiver.c:1743 #, c-format msgid "bad dumpId\n" msgstr "niepoprawny dumpId\n" -#: pg_backup_archiver.c:1596 +#: pg_backup_archiver.c:1764 #, c-format msgid "bad table dumpId for TABLE DATA item\n" msgstr "niepoprawna tabela dumpId dla elementu TABLE DATA\n" -#: pg_backup_archiver.c:1688 +#: pg_backup_archiver.c:1856 #, c-format msgid "unexpected data offset flag %d\n" msgstr "nieoczekiwana dana flagi przesunięcia %d\n" -#: pg_backup_archiver.c:1701 +#: pg_backup_archiver.c:1869 #, c-format msgid "file offset in dump file is too large\n" msgstr "przesunięcie pliku w pliku zrzutu jest zbyt duże\n" -#: pg_backup_archiver.c:1795 pg_backup_archiver.c:3251 pg_backup_custom.c:639 -#: pg_backup_directory.c:522 pg_backup_tar.c:787 -#, c-format -msgid "unexpected end of file\n" -msgstr "nieoczekiwany koniec pliku\n" - -#: pg_backup_archiver.c:1812 +#: pg_backup_archiver.c:1982 #, c-format msgid "attempting to ascertain archive format\n" msgstr "próba ustalenia formatu archiwum\n" -#: pg_backup_archiver.c:1838 pg_backup_archiver.c:1848 +#: pg_backup_archiver.c:2008 pg_backup_archiver.c:2018 #, c-format msgid "directory name too long: \"%s\"\n" msgstr "zbyt długa nazwa pliku: \"%s\"\n" -#: pg_backup_archiver.c:1856 +#: pg_backup_archiver.c:2026 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)\n" msgstr "folder \"%s\" nie wydaje się być poprawnym archiwum (\"toc.dat\" nie istnieje)\n" -#: pg_backup_archiver.c:1864 pg_backup_custom.c:180 pg_backup_custom.c:771 -#: pg_backup_directory.c:219 pg_backup_directory.c:407 +#: pg_backup_archiver.c:2034 pg_backup_custom.c:181 pg_backup_custom.c:770 +#: pg_backup_directory.c:214 pg_backup_directory.c:402 #, c-format msgid "could not open input file \"%s\": %s\n" msgstr "nie można otworzyć pliku wejścia \"%s\": %s\n" -#: pg_backup_archiver.c:1872 pg_backup_custom.c:187 +#: pg_backup_archiver.c:2042 pg_backup_custom.c:188 #, c-format msgid "could not open input file: %s\n" msgstr "nie można otworzyć pliku wyjścia %s\n" -#: pg_backup_archiver.c:1881 +#: pg_backup_archiver.c:2049 #, c-format msgid "could not read input file: %s\n" msgstr "nie można odczytać pliku wejścia %s\n" -#: pg_backup_archiver.c:1883 +#: pg_backup_archiver.c:2051 #, c-format msgid "input file is too short (read %lu, expected 5)\n" msgstr "plik wejścia jest zbyt krótki (odczytano %lu, oczekiwano 5)\n" -#: pg_backup_archiver.c:1948 +#: pg_backup_archiver.c:2134 #, c-format msgid "input file appears to be a text format dump. Please use psql.\n" msgstr "plik wejścia wydaje się zrzutem w formacie tekstowym. Należy użyć psql.\n" -#: pg_backup_archiver.c:1952 +#: pg_backup_archiver.c:2140 #, c-format msgid "input file does not appear to be a valid archive (too short?)\n" msgstr "plik wejścia nie wydaje się być poprawnym archiwum (zbyt krótki?)\n" -#: pg_backup_archiver.c:1955 +#: pg_backup_archiver.c:2146 #, c-format msgid "input file does not appear to be a valid archive\n" msgstr "plik wejścia nie wydaje się być poprawnym archiwum\n" -#: pg_backup_archiver.c:1975 +#: pg_backup_archiver.c:2166 #, c-format msgid "could not close input file: %s\n" msgstr "nie można zamknąć pliku wejścia: %s\n" -#: pg_backup_archiver.c:1992 +#: pg_backup_archiver.c:2183 #, c-format msgid "allocating AH for %s, format %d\n" msgstr "przydzielenie AH da %s, format %d\n" -#: pg_backup_archiver.c:2097 +#: pg_backup_archiver.c:2288 #, c-format msgid "unrecognized file format \"%d\"\n" msgstr "nierozpoznany format pliku \"%d\"\n" -#: pg_backup_archiver.c:2247 +#: pg_backup_archiver.c:2438 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC\n" msgstr "wpis ID %d poza zasięgiem -- być może uszkodzony TOC\n" -#: pg_backup_archiver.c:2363 +#: pg_backup_archiver.c:2554 #, c-format msgid "read TOC entry %d (ID %d) for %s %s\n" msgstr "odczyt wpisu TOC %d (ID %d) dla %s %s\n" -#: pg_backup_archiver.c:2397 +#: pg_backup_archiver.c:2588 #, c-format msgid "unrecognized encoding \"%s\"\n" msgstr "niezrozumiały kodowanie \"%s\"\n" -#: pg_backup_archiver.c:2402 +#: pg_backup_archiver.c:2593 #, c-format msgid "invalid ENCODING item: %s\n" msgstr "niepoprawny element ENCODING: %s\n" -#: pg_backup_archiver.c:2420 +#: pg_backup_archiver.c:2611 #, c-format msgid "invalid STDSTRINGS item: %s\n" msgstr "niepoprawny element STDSTRINGS: %s\n" -#: pg_backup_archiver.c:2637 +#: pg_backup_archiver.c:2840 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "nie można ustalić użytkownika sesji na \"%s\": %s" -#: pg_backup_archiver.c:2669 +#: pg_backup_archiver.c:2872 #, c-format msgid "could not set default_with_oids: %s" msgstr "nie można ustawić default_with_oids: %s" -#: pg_backup_archiver.c:2807 +#: pg_backup_archiver.c:3010 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "nie można ustawić search_path na \"%s\": %s" -#: pg_backup_archiver.c:2868 +#: pg_backup_archiver.c:3071 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "nie można ustawić default_tablespace na %s: %s" -#: pg_backup_archiver.c:2978 pg_backup_archiver.c:3161 +#: pg_backup_archiver.c:3158 pg_backup_archiver.c:3343 #, c-format msgid "WARNING: don't know how to set owner for object type %s\n" msgstr "OSTRZEŻENIE: nie wiadomo jak ustalić właściciela dla typu obiektu %s\n" -#: pg_backup_archiver.c:3214 +#: pg_backup_archiver.c:3396 #, c-format msgid "WARNING: requested compression not available in this installation -- archive will be uncompressed\n" msgstr "OSTRZEŻENIE: żądana kompresja jest niedostępna w tej instalacji -- archiwum nie będzie spakowane\n" -#: pg_backup_archiver.c:3254 +#: pg_backup_archiver.c:3435 #, c-format msgid "did not find magic string in file header\n" msgstr "nie znaleziono magicznego zdania w nagłówku pliku\n" -#: pg_backup_archiver.c:3267 +#: pg_backup_archiver.c:3448 #, c-format msgid "unsupported version (%d.%d) in file header\n" msgstr "nieobsługiwana wersja (%d.%d) w nagłówku pliku\n" -#: pg_backup_archiver.c:3272 +#: pg_backup_archiver.c:3453 #, c-format msgid "sanity check on integer size (%lu) failed\n" msgstr "nie powiodło się sprawdzenie na rozmiarze liczby całkowitej (%lu)\n" -#: pg_backup_archiver.c:3276 +#: pg_backup_archiver.c:3457 #, c-format msgid "WARNING: archive was made on a machine with larger integers, some operations might fail\n" msgstr "OSTRZEŻENIE: archiwum zostało utworzone na komputerze o dłuższych liczbach całkowitych, niektóre operacje mogą się nie udać\n" -#: pg_backup_archiver.c:3286 +#: pg_backup_archiver.c:3467 #, c-format msgid "expected format (%d) differs from format found in file (%d)\n" msgstr "oczekiwany format (%d) różni się od formatu znalezionego w pliku (%d)\n" -#: pg_backup_archiver.c:3302 +#: pg_backup_archiver.c:3483 #, c-format msgid "WARNING: archive is compressed, but this installation does not support compression -- no data will be available\n" msgstr "OSTRZEŻENIE: archiwum jest spakowane, ale ta instalacja nie obsługuje kompresji -- dane nie będą dostępne\n" -#: pg_backup_archiver.c:3320 +#: pg_backup_archiver.c:3501 #, c-format msgid "WARNING: invalid creation date in header\n" msgstr "OSTRZEŻENIE: niepoprawna data utworzenia w nagłówku\n" -#: pg_backup_archiver.c:3409 +#: pg_backup_archiver.c:3577 #, c-format msgid "entering restore_toc_entries_prefork\n" msgstr "wejście do restore_toc_entries_prefork\n" -#: pg_backup_archiver.c:3453 +#: pg_backup_archiver.c:3621 #, c-format msgid "processing item %d %s %s\n" msgstr "przetwarzanie elementu %d %s %s\n" -#: pg_backup_archiver.c:3505 +#: pg_backup_archiver.c:3673 #, c-format msgid "entering restore_toc_entries_parallel\n" msgstr "wprowadzanie restore_toc_entries_parallel\n" -#: pg_backup_archiver.c:3553 +#: pg_backup_archiver.c:3721 #, c-format msgid "entering main parallel loop\n" msgstr "wejście w główną pętlę współbieżności\n" -#: pg_backup_archiver.c:3564 +#: pg_backup_archiver.c:3732 #, c-format msgid "skipping item %d %s %s\n" msgstr "pominięcie elementu %d %s %s\n" -#: pg_backup_archiver.c:3574 +#: pg_backup_archiver.c:3742 #, c-format msgid "launching item %d %s %s\n" msgstr "uruchomienie elementu %d %s %s\n" -#: pg_backup_archiver.c:3632 +#: pg_backup_archiver.c:3800 #, c-format msgid "finished main parallel loop\n" msgstr "kończenie głównej pętli współbieżności\n" -#: pg_backup_archiver.c:3641 +#: pg_backup_archiver.c:3809 #, c-format msgid "entering restore_toc_entries_postfork\n" msgstr "wejście do restore_toc_entries_postfork\n" -#: pg_backup_archiver.c:3659 +#: pg_backup_archiver.c:3827 #, c-format msgid "processing missed item %d %s %s\n" msgstr "przetwarzanie brakującego elementu %d %s %s\n" -#: pg_backup_archiver.c:3808 +#: pg_backup_archiver.c:3976 #, c-format msgid "no item ready\n" msgstr "brak gotowego elementu\n" -#: pg_backup_archiver.c:3858 +#: pg_backup_archiver.c:4026 #, c-format msgid "could not find slot of finished worker\n" msgstr "nie można znaleźć gniazda zakończonego procesu roboczego\n" -#: pg_backup_archiver.c:3860 +#: pg_backup_archiver.c:4028 #, c-format msgid "finished item %d %s %s\n" msgstr "ukończono element %d %s %s\n" -#: pg_backup_archiver.c:3873 +#: pg_backup_archiver.c:4041 #, c-format msgid "worker process failed: exit code %d\n" msgstr "proces roboczy nie powiódł się: kod wyjścia %d\n" -#: pg_backup_archiver.c:4035 +#: pg_backup_archiver.c:4203 #, c-format msgid "transferring dependency %d -> %d to %d\n" msgstr "przenoszenie zależności %d -> %d do %d\n" -#: pg_backup_archiver.c:4104 +#: pg_backup_archiver.c:4276 #, c-format msgid "reducing dependencies for %d\n" msgstr "redukcja zależności dla %d\n" -#: pg_backup_archiver.c:4143 +#: pg_backup_archiver.c:4315 #, c-format msgid "table \"%s\" could not be created, will not restore its data\n" msgstr "tabela \"%s\" nie mogła zostać utworzona, jej dane nie zostaną odtworzone\n" #. translator: this is a module name -#: pg_backup_custom.c:93 +#: pg_backup_custom.c:94 msgid "custom archiver" msgstr "archiwizer użytkownika" -#: pg_backup_custom.c:382 pg_backup_null.c:152 +#: pg_backup_custom.c:384 pg_backup_null.c:149 #, c-format msgid "invalid OID for large object\n" msgstr "niepoprawny OID dla dużego obiektu\n" -#: pg_backup_custom.c:453 +#: pg_backup_custom.c:455 #, c-format msgid "unrecognized data block type (%d) while searching archive\n" msgstr "nierozpoznany typ bloku danych (%d) podczas przeszukiwania archiwum\n" -#: pg_backup_custom.c:464 +#: pg_backup_custom.c:466 #, c-format msgid "error during file seek: %s\n" msgstr "błąd podczas przeglądania pliku: %s\n" -#: pg_backup_custom.c:474 +#: pg_backup_custom.c:476 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive\n" msgstr "nie można znaleźć bloku o ID %d w archiwum -- być może ze względu na żądanie nieuporządkowanego odtwarzania, które nie może być obsłużone przez brak offsetów danych w archiwum\n" -#: pg_backup_custom.c:479 +#: pg_backup_custom.c:481 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file\n" msgstr "nie można znaleźć bloku o ID %d w archiwum -- być może ze względu na uszkodzone żądanie odtwarzania, które nie może być obsłużone przez niepozycjonowany plik wejścia\n" -#: pg_backup_custom.c:484 +#: pg_backup_custom.c:486 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive\n" msgstr "nie można znaleźć bloku o ID %d w archiwum -- archiwum jest być może uszkodzone\n" -#: pg_backup_custom.c:491 +#: pg_backup_custom.c:493 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d\n" msgstr "podczas odczytu danych znaleziono nieoczekiwany blok o ID (%d) -- oczekiwano %d\n" -#: pg_backup_custom.c:505 +#: pg_backup_custom.c:507 #, c-format msgid "unrecognized data block type %d while restoring archive\n" msgstr "nierozpoznany typ bloku danych %d podczas odtwarzania archiwum\n" -#: pg_backup_custom.c:587 pg_backup_custom.c:995 -#, c-format -msgid "could not read from input file: end of file\n" -msgstr "nie można czytać pliku wejścia: koniec pliku\n" - -#: pg_backup_custom.c:590 pg_backup_custom.c:998 -#, c-format -msgid "could not read from input file: %s\n" -msgstr "nie można czytać z pliku wejścia: %s\n" - -#: pg_backup_custom.c:619 +#: pg_backup_custom.c:709 pg_backup_custom.c:759 pg_backup_custom.c:908 +#: pg_backup_tar.c:1078 #, c-format -msgid "could not write byte: %s\n" -msgstr "nie można zapisać bajtu: %s\n" +msgid "could not determine seek position in archive file: %s\n" +msgstr "nie można określić pozycji przesunięcia w pliku archiwum: %s\n" -#: pg_backup_custom.c:727 pg_backup_custom.c:765 +#: pg_backup_custom.c:727 pg_backup_custom.c:764 #, c-format msgid "could not close archive file: %s\n" msgstr "nie można zamknąć pliku archiwum: %s\n" @@ -943,325 +990,301 @@ msgstr "współbieżne odtwarzanie ze standardowego wejścia nie jest obsługiwa msgid "parallel restore from non-seekable file is not supported\n" msgstr "współbieżne odtwarzanie z nieprzeszukiwalnego pliku nie jest obsługiwane\n" -#: pg_backup_custom.c:760 -#, c-format -msgid "could not determine seek position in archive file: %s\n" -msgstr "nie można określić pozycji przesunięcia w pliku archiwum: %s\n" - -#: pg_backup_custom.c:775 +#: pg_backup_custom.c:774 #, c-format msgid "could not set seek position in archive file: %s\n" msgstr "nie można ustawić pozycji przeszukiwania w pliku archiwum: %s\n" -#: pg_backup_custom.c:793 +#: pg_backup_custom.c:792 #, c-format msgid "compressor active\n" msgstr "aktywny kompresor\n" -#: pg_backup_custom.c:903 +#: pg_backup_custom.c:912 #, c-format msgid "WARNING: ftell mismatch with expected position -- ftell used\n" msgstr "OSTRZEŻENIE: niezgodność ftell z oczekiwaną pozycją -- użyto ftel\n" #. translator: this is a module name -#: pg_backup_db.c:28 +#: pg_backup_db.c:29 msgid "archiver (db)" msgstr "archiwizator (db)" -#: pg_backup_db.c:43 +#: pg_backup_db.c:44 #, c-format msgid "could not get server_version from libpq\n" msgstr "nie można pobrać server_version z libpq\n" -#: pg_backup_db.c:54 pg_dumpall.c:1910 +#: pg_backup_db.c:55 pg_dumpall.c:1954 #, c-format msgid "server version: %s; %s version: %s\n" msgstr "wersja serwera: %s; %s w wersji: %s\n" -#: pg_backup_db.c:56 pg_dumpall.c:1912 +#: pg_backup_db.c:57 pg_dumpall.c:1956 #, c-format msgid "aborting because of server version mismatch\n" msgstr "przerwano z powodu niezgodności wersji serwera\n" -#: pg_backup_db.c:127 +#: pg_backup_db.c:128 #, c-format msgid "connecting to database \"%s\" as user \"%s\"\n" msgstr "łączenie z bazą danych \"%s\" jako użytkownik \"%s\"\n" -#: pg_backup_db.c:132 pg_backup_db.c:184 pg_backup_db.c:231 pg_backup_db.c:277 -#: pg_dumpall.c:1740 pg_dumpall.c:1848 +#: pg_backup_db.c:133 pg_backup_db.c:185 pg_backup_db.c:232 pg_backup_db.c:278 +#: pg_dumpall.c:1784 pg_dumpall.c:1892 msgid "Password: " msgstr "Hasło: " -#: pg_backup_db.c:165 +#: pg_backup_db.c:166 #, c-format msgid "failed to reconnect to database\n" msgstr "nie udało się połączyć ponownie z bazą danych\n" -#: pg_backup_db.c:170 +#: pg_backup_db.c:171 #, c-format msgid "could not reconnect to database: %s" msgstr "nie można połączyć się ponownie z bazą danych: %s" -#: pg_backup_db.c:186 +#: pg_backup_db.c:187 #, c-format msgid "connection needs password\n" msgstr "połączenie wymaga hasła\n" -#: pg_backup_db.c:227 +#: pg_backup_db.c:228 #, c-format msgid "already connected to a database\n" msgstr "już połączono z bazą danych\n" -#: pg_backup_db.c:269 +#: pg_backup_db.c:270 #, c-format msgid "failed to connect to database\n" msgstr "nie udało się połączyć z bazą danych\n" -#: pg_backup_db.c:288 +#: pg_backup_db.c:289 #, c-format msgid "connection to database \"%s\" failed: %s" msgstr "połączenie z bazą danych \"%s\" nie powiodło się: %s" -#: pg_backup_db.c:343 +#: pg_backup_db.c:344 #, c-format msgid "query failed: %s" msgstr "zapytanie nie powiodło się: %s" -#: pg_backup_db.c:345 +#: pg_backup_db.c:346 #, c-format msgid "query was: %s\n" msgstr "zapytanie brzmiało: %s\n" -#: pg_backup_db.c:409 +#: pg_backup_db.c:410 #, c-format msgid "%s: %s Command was: %s\n" msgstr "%s: %s Polecenie brzmiało: %s\n" -#: pg_backup_db.c:460 pg_backup_db.c:531 pg_backup_db.c:538 +#: pg_backup_db.c:466 pg_backup_db.c:540 pg_backup_db.c:547 msgid "could not execute query" msgstr "nie można wykonać zapytania" -#: pg_backup_db.c:511 +#: pg_backup_db.c:519 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "błąd zwrócony przez PQputCopyData: %s" -#: pg_backup_db.c:557 +#: pg_backup_db.c:568 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "błąd zwrócony przez PQputCopyEnd: %s" -#: pg_backup_db.c:563 +#: pg_backup_db.c:574 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "nie udało się COPY dla tabeli \"%s\": %s" -#: pg_backup_db.c:574 +#: pg_backup_db.c:587 msgid "could not start database transaction" msgstr "nie można uruchomić transakcji na bazie danych" -#: pg_backup_db.c:580 +#: pg_backup_db.c:595 msgid "could not commit database transaction" msgstr "nie można zatwierdzić transakcji na bazie danych" #. translator: this is a module name -#: pg_backup_directory.c:63 +#: pg_backup_directory.c:64 msgid "directory archiver" msgstr "archiwizator folderów" -#: pg_backup_directory.c:161 +#: pg_backup_directory.c:162 #, c-format msgid "no output directory specified\n" msgstr "nie wskazano folderu wyjściowego\n" -#: pg_backup_directory.c:196 +#: pg_backup_directory.c:191 #, c-format msgid "could not read directory \"%s\": %s\n" msgstr "nie można czytać katalogu \"%s\": %s\n" -#: pg_backup_directory.c:200 +#: pg_backup_directory.c:195 #, c-format -#| msgid "could not open directory \"%s\": %s\n" msgid "could not close directory \"%s\": %s\n" msgstr "nie można zamknąć katalogu \"%s\": %s\n" -#: pg_backup_directory.c:206 +#: pg_backup_directory.c:201 #, c-format msgid "could not create directory \"%s\": %s\n" msgstr "nie można utworzyć folderu \"%s\": %s\n" -#: pg_backup_directory.c:418 +#: pg_backup_directory.c:413 #, c-format msgid "could not close data file: %s\n" msgstr "nie można zamknąć pliku danych: %s\n" -#: pg_backup_directory.c:459 +#: pg_backup_directory.c:454 #, c-format msgid "could not open large object TOC file \"%s\" for input: %s\n" msgstr "nie można otworzyć pliku TOC dużych obiektów \"%s\" do odczytu: %s\n" -#: pg_backup_directory.c:469 +#: pg_backup_directory.c:465 #, c-format msgid "invalid line in large object TOC file \"%s\": \"%s\"\n" msgstr "niepoprawna linia w pliku TOC dużych obiektów \"%s\": \"%s\"\n" -#: pg_backup_directory.c:478 +#: pg_backup_directory.c:474 #, c-format msgid "error reading large object TOC file \"%s\"\n" msgstr "błąd odczytu pliku TOC dużych obiektów \"%s\"\n" -#: pg_backup_directory.c:482 +#: pg_backup_directory.c:478 #, c-format msgid "could not close large object TOC file \"%s\": %s\n" msgstr "nie można zamknąć pliku TOC dużych obiektów \"%s\": %s\n" -#: pg_backup_directory.c:503 -#, c-format -msgid "could not write byte\n" -msgstr "nie można zapisać bajtu\n" - -#: pg_backup_directory.c:695 +#: pg_backup_directory.c:688 #, c-format msgid "could not write to blobs TOC file\n" msgstr "nie można zapisać do pliku TOC blobów\n" -#: pg_backup_directory.c:727 +#: pg_backup_directory.c:720 #, c-format msgid "file name too long: \"%s\"\n" msgstr "zbyt długa nazwa pliku: \"%s\"\n" -#: pg_backup_directory.c:813 +#: pg_backup_directory.c:806 #, c-format msgid "error during backup\n" msgstr "błąd podczas tworzenia kopii zapasowej\n" -#: pg_backup_null.c:77 +#: pg_backup_null.c:74 #, c-format msgid "this format cannot be read\n" msgstr "ten format nie mógł zostać odczytany\n" #. translator: this is a module name -#: pg_backup_tar.c:109 +#: pg_backup_tar.c:108 msgid "tar archiver" msgstr "archiwizator tar" -#: pg_backup_tar.c:190 +#: pg_backup_tar.c:189 #, c-format msgid "could not open TOC file \"%s\" for output: %s\n" msgstr "nie można otworzyć pliku TOC \"%s\" do zapisu: %s\n" -#: pg_backup_tar.c:198 +#: pg_backup_tar.c:197 #, c-format msgid "could not open TOC file for output: %s\n" msgstr "nie można otworzyć pliku TOC do zapisu: %s\n" -#: pg_backup_tar.c:226 pg_backup_tar.c:382 +#: pg_backup_tar.c:218 pg_backup_tar.c:374 #, c-format msgid "compression is not supported by tar archive format\n" msgstr "kompresja nie jest obsługiwana przez format archiwum tar\n" -#: pg_backup_tar.c:234 +#: pg_backup_tar.c:226 #, c-format msgid "could not open TOC file \"%s\" for input: %s\n" msgstr "nie można otworzyć pliku TOC \"%s\" do odczytu: %s\n" -#: pg_backup_tar.c:241 +#: pg_backup_tar.c:233 #, c-format msgid "could not open TOC file for input: %s\n" msgstr "nie można otworzyć pliku TOC do odczytu: %s\n" -#: pg_backup_tar.c:368 +#: pg_backup_tar.c:360 #, c-format msgid "could not find file \"%s\" in archive\n" msgstr "nie można znaleźć pliku \"%s\" w archiwum\n" -#: pg_backup_tar.c:424 +#: pg_backup_tar.c:416 #, c-format msgid "could not generate temporary file name: %s\n" msgstr "nie można utworzyć nazwy pliku tymczasowego: %s\n" -#: pg_backup_tar.c:433 +#: pg_backup_tar.c:425 #, c-format msgid "could not open temporary file\n" msgstr "nie można otworzyć pliku tymczasowego\n" -#: pg_backup_tar.c:460 +#: pg_backup_tar.c:452 #, c-format msgid "could not close tar member\n" msgstr "nie można zamknąć składnika tar\n" -#: pg_backup_tar.c:560 +#: pg_backup_tar.c:565 #, c-format msgid "internal error -- neither th nor fh specified in tarReadRaw()\n" msgstr "błąd wewnętrzny -- nie wskazano ani th ani fh w tarReadRaw()\n" -#: pg_backup_tar.c:686 +#: pg_backup_tar.c:688 #, c-format msgid "unexpected COPY statement syntax: \"%s\"\n" msgstr "nieoczekiwana składnia deklaracji COPY: \"%s\"\n" -#: pg_backup_tar.c:889 -#, c-format -msgid "could not write null block at end of tar archive\n" -msgstr "nie można zapisać pustego bloku na końcu archiwum tar\n" - -#: pg_backup_tar.c:944 +#: pg_backup_tar.c:950 #, c-format msgid "invalid OID for large object (%u)\n" msgstr "niepoprawny OID dla dużego obiektu (%u)\n" -#: pg_backup_tar.c:1078 +#: pg_backup_tar.c:1087 #, c-format msgid "archive member too large for tar format\n" msgstr "składnik archiwum za duży dla formatu tar\n" -#: pg_backup_tar.c:1093 +#: pg_backup_tar.c:1101 #, c-format msgid "could not close temporary file: %s\n" msgstr "nie można zamknąć pliku tymczasowego: %s\n" -#: pg_backup_tar.c:1103 +#: pg_backup_tar.c:1111 #, c-format msgid "actual file length (%s) does not match expected (%s)\n" msgstr "faktyczna długość pliku (%s) nie zgadza z oczekiwaną (%s)\n" -#: pg_backup_tar.c:1111 -#, c-format -msgid "could not output padding at end of tar member\n" -msgstr "nie udało się wypełnić wyjścia na końcu składnika tar\n" - -#: pg_backup_tar.c:1140 +#: pg_backup_tar.c:1148 #, c-format msgid "moving from position %s to next member at file position %s\n" msgstr "przeniesienie z pozycji %s do następnego składnika na pozycji pliku %s\n" -#: pg_backup_tar.c:1151 +#: pg_backup_tar.c:1159 #, c-format msgid "now at file position %s\n" msgstr "obecnie na pozycji pliku %s\n" -#: pg_backup_tar.c:1160 pg_backup_tar.c:1190 +#: pg_backup_tar.c:1168 pg_backup_tar.c:1198 #, c-format msgid "could not find header for file \"%s\" in tar archive\n" msgstr "nie można znaleźć nagłówka dla pliku \"%s\" w archiwum tar\n" -#: pg_backup_tar.c:1174 +#: pg_backup_tar.c:1182 #, c-format msgid "skipping tar member %s\n" msgstr "pominięcie składnika tar %s\n" -#: pg_backup_tar.c:1178 +#: pg_backup_tar.c:1186 #, c-format msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file.\n" -msgstr "przywrócenie danych w niepoprawnej kolejności nie jest obsługiwane w tym formacie archiwum: wymagane jest \"%s\", ale występuje przed \"%s\" w pliku archiwum.\n" - -#: pg_backup_tar.c:1224 -#, c-format -msgid "mismatch in actual vs. predicted file position (%s vs. %s)\n" -msgstr "niezgodność między rzeczywistą i wyliczoną pozycją pliku (%s i %s)\n" +msgstr "przywrócenie danych w niepoprawnej kolejności nie jest obsługiwane w tym " +"formacie archiwum: wymagane jest \"%s\", ale występuje przed \"%s\" w pliku " +"archiwum.\n" -#: pg_backup_tar.c:1239 +#: pg_backup_tar.c:1233 #, c-format msgid "incomplete tar header found (%lu byte)\n" msgid_plural "incomplete tar header found (%lu bytes)\n" @@ -1269,12 +1292,12 @@ msgstr[0] "znaleziono niepełny nagłówek tar (%lu bajt)\n" msgstr[1] "znaleziono niepełny nagłówek tar (%lu bajty)\n" msgstr[2] "znaleziono niepełny nagłówek tar (%lu bajtów)\n" -#: pg_backup_tar.c:1277 +#: pg_backup_tar.c:1271 #, c-format msgid "TOC Entry %s at %s (length %lu, checksum %d)\n" msgstr "Wpis TOC %s na %s (długość %lu, suma kontrolna %d)\n" -#: pg_backup_tar.c:1287 +#: pg_backup_tar.c:1281 #, c-format msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s\n" msgstr "znaleziono uszkodzony nagłówek tar w %s (oczekiwano %d, wyliczono %d) pozycja pliku %s\n" @@ -1284,9 +1307,9 @@ msgstr "znaleziono uszkodzony nagłówek tar w %s (oczekiwano %d, wyliczono %d) msgid "%s: unrecognized section name: \"%s\"\n" msgstr "%s: nierozpoznana nazwa sekcji: \"%s\"\n" -#: pg_backup_utils.c:56 pg_dump.c:540 pg_dump.c:557 pg_dumpall.c:303 -#: pg_dumpall.c:313 pg_dumpall.c:323 pg_dumpall.c:332 pg_dumpall.c:341 -#: pg_dumpall.c:399 pg_restore.c:282 pg_restore.c:298 pg_restore.c:310 +#: pg_backup_utils.c:56 pg_dump.c:521 pg_dump.c:538 pg_dumpall.c:300 +#: pg_dumpall.c:310 pg_dumpall.c:320 pg_dumpall.c:329 pg_dumpall.c:345 +#: pg_dumpall.c:403 pg_restore.c:277 pg_restore.c:293 pg_restore.c:305 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Spróbuj \"%s --help\" aby uzyskać więcej informacji.\n" @@ -1296,73 +1319,89 @@ msgstr "Spróbuj \"%s --help\" aby uzyskać więcej informacji.\n" msgid "out of on_exit_nicely slots\n" msgstr "zabrakło gniazd on_exit_nicely\n" -#: pg_dump.c:555 pg_dumpall.c:311 pg_restore.c:296 +#: pg_dump.c:491 +#, c-format +msgid "compression level must be in range 0..9\n" +msgstr "poziom kompresji musi być z zakresu 0..9\n" + +#: pg_dump.c:536 pg_dumpall.c:308 pg_restore.c:291 #, 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_dump.c:567 +#: pg_dump.c:549 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together\n" msgstr "opcje -s/--schema-only i -a/--data-only nie mogą być używane razem\n" -#: pg_dump.c:570 +#: pg_dump.c:555 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together\n" msgstr "opcje -c/--clean i -a/--data-only nie mogą być używane razem\n" -#: pg_dump.c:574 +#: pg_dump.c:561 #, c-format msgid "options --inserts/--column-inserts and -o/--oids cannot be used together\n" msgstr "opcje --inserts/--column-inserts i -o/--oids nie mogą być używane razem\n" -#: pg_dump.c:575 +#: pg_dump.c:562 #, c-format msgid "(The INSERT command cannot set OIDs.)\n" msgstr "(Polecenie INSERT nie może ustawiać OIDów.)\n" -#: pg_dump.c:605 +#: pg_dump.c:567 +#, c-format +msgid "option --if-exists requires option -c/--clean\n" +msgstr "opcja --if-exists wymaga opcji -c/--clean\n" + +#: pg_dump.c:595 #, c-format msgid "%s: invalid number of parallel jobs\n" msgstr "%s: nieprawidłowa liczba zadań współbieżnych\n" -#: pg_dump.c:609 +#: pg_dump.c:599 #, c-format msgid "parallel backup only supported by the directory format\n" msgstr "współbieżne tworzenie kopii zapasowej nie jest obsługiwane w tym formacie archiwum\n" -#: pg_dump.c:619 +#: pg_dump.c:609 #, c-format msgid "could not open output file \"%s\" for writing\n" msgstr "nie można otworzyć pliku wyjścia \"%s\" do zapisu\n" -#: pg_dump.c:678 +#: pg_dump.c:668 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" "Run with --no-synchronized-snapshots instead if you do not need\n" "synchronized snapshots.\n" msgstr "" -"Synchronizowane migawki nie są obsługiwane przzez tą wersję serwera.\n" +"Synchronizowane migawki nie są obsługiwane przez tą wersję serwera.\n" "Można uruchomić z --no-synchronized-snapshots jeśli nie są potrzebne\n" "migawki synchronizowane.\n" -#: pg_dump.c:691 +#: pg_dump.c:675 +#, c-format +#| msgid "No per-database role settings support in this server version.\n" +msgid "Exported snapshots are not supported by this server version.\n" +msgstr "Eksportowane migawki nie są obsługiwane przez tą wersję serwera.\n" + +#: pg_dump.c:686 #, c-format msgid "last built-in OID is %u\n" msgstr "ostatni wbudowany OID to %u\n" -#: pg_dump.c:700 +#: pg_dump.c:695 #, c-format msgid "No matching schemas were found\n" msgstr "Nie znaleziono pasujących schematów\n" -#: pg_dump.c:712 +#: pg_dump.c:707 #, c-format msgid "No matching tables were found\n" msgstr "Nie znaleziono pasujących tabel\n" -#: pg_dump.c:856 +#: pg_dump.c:861 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1371,17 +1410,17 @@ msgstr "" "%s zrzuca bazę danych jako plik tekstowy lub do innych formatów.\n" "\n" -#: pg_dump.c:857 pg_dumpall.c:544 pg_restore.c:414 +#: pg_dump.c:862 pg_dumpall.c:548 pg_restore.c:432 #, c-format msgid "Usage:\n" msgstr "Składnia:\n" -#: pg_dump.c:858 +#: pg_dump.c:863 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPCJA]... [NAZWADB]\n" -#: pg_dump.c:860 pg_dumpall.c:547 pg_restore.c:417 +#: pg_dump.c:865 pg_dumpall.c:551 pg_restore.c:435 #, c-format msgid "" "\n" @@ -1390,53 +1429,54 @@ msgstr "" "\n" "Opcje ogólne:\n" -#: pg_dump.c:861 +#: pg_dump.c:866 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=NAZWAPLIKU nazwa pliku lub folderu wyjścia\n" -#: pg_dump.c:862 +#: pg_dump.c:867 #, 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 format pliku wyjścia (c-użytkownika, d-folder, \n" +" -F, --format=c|d|t|p format pliku wyjścia (c-użytkownika, " +"d-folder, \n" " t-tar, p-tekstowy (domyślny))\n" -#: pg_dump.c:864 +#: pg_dump.c:869 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM użycie tylu równoległych zadań przy zrzucie\n" -#: pg_dump.c:865 +#: pg_dump.c:870 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose tryb informacji szczegółowych\n" -#: pg_dump.c:866 pg_dumpall.c:549 +#: pg_dump.c:871 pg_dumpall.c:553 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version pokaż informacje o wersji i zakończ\n" -#: pg_dump.c:867 +#: pg_dump.c:872 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 poziom kompresji dla formatów kompresujących\n" -#: pg_dump.c:868 pg_dumpall.c:550 +#: pg_dump.c:873 pg_dumpall.c:554 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr "" " --lock-wait-timeout=LIMITCZASU\n" " niepowodzenie blokowania tabeli po LIMITCZASU\n" -#: pg_dump.c:869 pg_dumpall.c:551 +#: pg_dump.c:874 pg_dumpall.c:555 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help pokaż tą pomoc i zakończ działanie\n" -#: pg_dump.c:871 pg_dumpall.c:552 +#: pg_dump.c:876 pg_dumpall.c:556 #, c-format msgid "" "\n" @@ -1445,49 +1485,49 @@ msgstr "" "\n" "Opcje kontrolujące zawartość wyjścia:\n" -#: pg_dump.c:872 pg_dumpall.c:553 +#: pg_dump.c:877 pg_dumpall.c:557 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only zrzuca tylko dane, bez schematu\n" -#: pg_dump.c:873 +#: pg_dump.c:878 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs dodaje duże obiekty do zrzutu\n" -#: pg_dump.c:874 pg_restore.c:428 +#: pg_dump.c:879 pg_restore.c:446 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr " -c, --clean czyszczenie (kasowanie) obiektów baz danych przed odtworzeniem\n" -#: pg_dump.c:875 +#: pg_dump.c:880 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr " -C, --create dodaje polecenia tworzenia bazy danych w zrzucie\n" -#: pg_dump.c:876 +#: pg_dump.c:881 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=KODOWANIE zrzuca dane w kodowaniu KODOWANIE\n" -#: pg_dump.c:877 +#: pg_dump.c:882 #, c-format msgid " -n, --schema=SCHEMA dump the named schema(s) only\n" msgstr " -n, --schema=SCHEMAT zrzuca tylko nazwany schemat(y)\n" -#: pg_dump.c:878 +#: pg_dump.c:883 #, c-format msgid " -N, --exclude-schema=SCHEMA do NOT dump the named schema(s)\n" msgstr "" " -N, --exclude-schema=SCHEMAT\n" " NIE zrzuca nazwanych schematów\n" -#: pg_dump.c:879 pg_dumpall.c:556 +#: pg_dump.c:884 pg_dumpall.c:560 #, c-format msgid " -o, --oids include OIDs in dump\n" msgstr " -o, --oids dodaje OIDy do zrzutu\n" -#: pg_dump.c:880 +#: pg_dump.c:885 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1496,101 +1536,119 @@ msgstr "" " -O, --no-owner pomija odtworzenie wskazania właściciela obiektu\n" " w formacie tekstowym\n" -#: pg_dump.c:882 pg_dumpall.c:559 +#: pg_dump.c:887 pg_dumpall.c:563 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only zrzuca tylko schemat, bez danych\n" -#: pg_dump.c:883 +#: pg_dump.c:888 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr " -S, --superuser=NAZWA nazwa superużytkownika używana w formacie tekstowym\n" -#: pg_dump.c:884 +#: pg_dump.c:889 #, c-format msgid " -t, --table=TABLE dump the named table(s) only\n" msgstr " -t, --table=TABELA zrzuca tylko tabelę wedle nazwy\n" -#: pg_dump.c:885 +#: pg_dump.c:890 #, c-format msgid " -T, --exclude-table=TABLE do NOT dump the named table(s)\n" msgstr " -T, --exclude-table=TABELA NIE zrzuca tabeli o tej nazwie\n" -#: pg_dump.c:886 pg_dumpall.c:562 +#: pg_dump.c:891 pg_dumpall.c:566 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges nie zrzuca przywilejów (grant/revoke)\n" -#: pg_dump.c:887 pg_dumpall.c:563 +#: pg_dump.c:892 pg_dumpall.c:567 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade używane tylko przez narzędzia aktualizacji\n" -#: pg_dump.c:888 pg_dumpall.c:564 +#: pg_dump.c:893 pg_dumpall.c:568 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr " --column-inserts zrzuca dane jako polecenia INSERT z nazwami kolumn\n" -#: pg_dump.c:889 pg_dumpall.c:565 +#: pg_dump.c:894 pg_dumpall.c:569 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr " --disable-dollar-quoting blokuje cytowanie dolarem, używa standardowego cytowania SQL\n" -#: pg_dump.c:890 pg_dumpall.c:566 pg_restore.c:444 +#: pg_dump.c:895 pg_dumpall.c:570 pg_restore.c:462 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr " --disable-triggers wyłącza wyzwalacze podczas odtwarzania wyłącznie danych\n" -#: pg_dump.c:891 +#: pg_dump.c:896 pg_restore.c:463 +#, c-format +#| msgid " --no-security-labels do not restore security labels\n" +msgid " --enable-row-security enable row level security\n" +msgstr " --enable-row-security włącza zabezpieczenie na poziomie wierszy\n" + +#: pg_dump.c:897 #, c-format msgid " --exclude-table-data=TABLE do NOT dump data for the named table(s)\n" msgstr " ---exclude-table-data=TABELA NIE zrzuca danych tabeli o tej nazwie\n" -#: pg_dump.c:892 pg_dumpall.c:567 +#: pg_dump.c:898 pg_dumpall.c:571 pg_restore.c:464 +#, c-format +#| msgid " --if-exists don't report error if user doesn't exist\n" +msgid " --if-exists use IF EXISTS when dropping objects\n" +msgstr " --if-exists używa IF EXISTS podczas kasowania obiektów\n" + +#: pg_dump.c:899 pg_dumpall.c:572 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts zrzuca dane jako polecenia INSERT zamiast COPY\n" -#: pg_dump.c:893 pg_dumpall.c:568 +#: pg_dump.c:900 pg_dumpall.c:573 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels nie zrzuca przypisań etykiet bezpieczeństwa\n" -#: pg_dump.c:894 +#: pg_dump.c:901 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr " --no-synchronized-snapshots nie używaj migawek synchronizowanych w zadaniach współbieżnych\n" -#: pg_dump.c:895 pg_dumpall.c:569 +#: pg_dump.c:902 pg_dumpall.c:574 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces nie zrzuca przypisań do przestrzeni tabel\n" -#: pg_dump.c:896 pg_dumpall.c:570 +#: pg_dump.c:903 pg_dumpall.c:575 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data nie zrzuca niezalogowanych danych tabeli\n" -#: pg_dump.c:897 pg_dumpall.c:571 +#: pg_dump.c:904 pg_dumpall.c:576 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers cytuje wszystkie identyfikatory, jeśli tylko\n" " nie są to słowa kluczowe\n" -#: pg_dump.c:898 +#: pg_dump.c:905 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr " --section=SECTION zrzuca nazwaną sekcję (pre-dane, dane, lub post-dane)\n" -#: pg_dump.c:899 +#: pg_dump.c:906 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr "" " --serializable-deferrable czeka póki zrzut wykonuje się \n" " bez nieprawidłowości\n" -#: pg_dump.c:900 pg_dumpall.c:572 pg_restore.c:450 +#: pg_dump.c:907 +#, c-format +msgid " --snapshot=SNAPSHOT use given synchronous snapshot for the dump\n" +msgstr " --snapshot=MIGAWKA używa wskazanej migawki synchronicznej do " +"zrzutu\n" + +#: pg_dump.c:908 pg_dumpall.c:577 pg_restore.c:470 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1601,7 +1659,7 @@ msgstr "" " używa poleceń SET SESSION AUTHORIZATION zamiast\n" " poleceń ALTER OWNER by ustawić właściciela\n" -#: pg_dump.c:904 pg_dumpall.c:576 pg_restore.c:454 +#: pg_dump.c:912 pg_dumpall.c:581 pg_restore.c:474 #, c-format msgid "" "\n" @@ -1610,42 +1668,42 @@ msgstr "" "\n" "Opcje połączenia:\n" -#: pg_dump.c:905 +#: pg_dump.c:913 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=NAZWADB baza danych do utworzenia kopii\n" -#: pg_dump.c:906 pg_dumpall.c:578 pg_restore.c:455 +#: pg_dump.c:914 pg_dumpall.c:583 pg_restore.c:475 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=NAZWAHOSTA host serwera bazy danych lub katalog gniazda\n" -#: pg_dump.c:907 pg_dumpall.c:580 pg_restore.c:456 +#: pg_dump.c:915 pg_dumpall.c:585 pg_restore.c:476 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT numer portu na serwera bazy dnaych\n" -#: pg_dump.c:908 pg_dumpall.c:581 pg_restore.c:457 +#: pg_dump.c:916 pg_dumpall.c:586 pg_restore.c:477 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAZWA połączenie jako wskazany użytkownik bazy\n" -#: pg_dump.c:909 pg_dumpall.c:582 pg_restore.c:458 +#: pg_dump.c:917 pg_dumpall.c:587 pg_restore.c:478 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nie pytaj nigdy o hasło\n" -#: pg_dump.c:910 pg_dumpall.c:583 pg_restore.c:459 +#: pg_dump.c:918 pg_dumpall.c:588 pg_restore.c:479 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password wymuś pytanie o hasło (powinno nastąpić automatycznie)\n" -#: pg_dump.c:911 pg_dumpall.c:584 +#: pg_dump.c:919 pg_dumpall.c:589 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=NAZWAROLI wykonuje SET ROLE przed odtworzeniem\n" -#: pg_dump.c:913 +#: pg_dump.c:921 #, c-format msgid "" "\n" @@ -1658,182 +1716,208 @@ msgstr "" "środowiskowa PGDATABASE.\n" "\n" -#: pg_dump.c:915 pg_dumpall.c:588 pg_restore.c:463 +#: pg_dump.c:923 pg_dumpall.c:593 pg_restore.c:486 #, c-format msgid "Report bugs to .\n" msgstr "Błędy proszę przesyłać na adres .\n" -#: pg_dump.c:933 +#: pg_dump.c:942 #, c-format msgid "invalid client encoding \"%s\" specified\n" msgstr "wskazano niepoprawne kodowanie klienta \"%s\"\n" -#: pg_dump.c:1095 +#: pg_dump.c:1127 #, c-format msgid "invalid output format \"%s\" specified\n" msgstr "wskazano niepoprawny format wyjścia \"%s\"\n" -#: pg_dump.c:1117 +#: pg_dump.c:1149 #, c-format msgid "server version must be at least 7.3 to use schema selection switches\n" msgstr "serwer musi być w wersji co najmniej 7.3 by użyć przełączników wyboru schematu\n" -#: pg_dump.c:1393 +#: pg_dump.c:1438 #, c-format -msgid "dumping contents of table %s\n" -msgstr "zrzut zawartości tabeli \"%s\"\n" +#| msgid "dumping contents of table %s\n" +msgid "dumping contents of table \"%s\".\"%s\"\n" +msgstr "zrzut zawartości tabeli \"%s\".\"%s\"\n" -#: pg_dump.c:1516 +#: pg_dump.c:1562 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed.\n" msgstr "Nie powiódł się zrzut zawartości tabeli \"%s\": niepowodzenie PQgetCopyData().\n" -#: pg_dump.c:1517 pg_dump.c:1527 +#: pg_dump.c:1563 pg_dump.c:1573 #, c-format msgid "Error message from server: %s" msgstr "Komunikat błędu z serwera: %s" -#: pg_dump.c:1518 pg_dump.c:1528 +#: pg_dump.c:1564 pg_dump.c:1574 #, c-format msgid "The command was: %s\n" msgstr "Treść polecenia: %s\n" -#: pg_dump.c:1526 +#: pg_dump.c:1572 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed.\n" msgstr "Nie powiódł się zrzut zawartości tabeli \"%s\": niepowodzenie PQgetResult().\n" -#: pg_dump.c:2136 +#: pg_dump.c:2211 #, c-format msgid "saving database definition\n" msgstr "zapis definicji bazy danych\n" -#: pg_dump.c:2433 +#: pg_dump.c:2544 #, c-format msgid "saving encoding = %s\n" msgstr "zapis kodowania = %s\n" -#: pg_dump.c:2460 +#: pg_dump.c:2571 #, c-format msgid "saving standard_conforming_strings = %s\n" msgstr "zapis standard_conforming_strings = %s\n" -#: pg_dump.c:2493 +#: pg_dump.c:2604 #, c-format msgid "reading large objects\n" msgstr "odczyt dużych obiektów\n" -#: pg_dump.c:2625 +#: pg_dump.c:2736 #, c-format msgid "saving large objects\n" msgstr "zapis dużych obiektów\n" -#: pg_dump.c:2672 +#: pg_dump.c:2783 #, c-format msgid "error reading large object %u: %s" msgstr "błąd odczytu dużego obiektu %u: %s" -#: pg_dump.c:2865 +#: pg_dump.c:2835 +#, c-format +#| msgid "reading indexes for table \"%s\"\n" +msgid "reading row security enabled for table \"%s\".\"%s\"\n" +msgstr "odczyt włączonych zabezpieczeń wiersza dla tabeli \"%s\".\"%s\"\n" + +#: pg_dump.c:2866 +#, c-format +#| msgid "reading indexes for table \"%s\"\n" +msgid "reading policies for table \"%s\".\"%s\"\n" +msgstr "odczyt polityk dla tabeli \"%s\".\"%s\"\n" + +#: pg_dump.c:2996 +#, c-format +#| msgid "unexpected message type \"%c\"" +msgid "unexpected policy command type: \"%s\"\n" +msgstr "nieoczekiwany typ polecenia polityki \"%s\"\n" + +#: pg_dump.c:3211 #, c-format msgid "could not find parent extension for %s\n" msgstr "nie można odnaleźć rozszerzenia nadrzędnego dla %s\n" -#: pg_dump.c:2968 +#: pg_dump.c:3314 #, c-format msgid "WARNING: owner of schema \"%s\" appears to be invalid\n" msgstr "OSTRZEŻENIE: właściciel schematu \"%s\" wydaje się być niepoprawny\n" -#: pg_dump.c:3011 +#: pg_dump.c:3357 #, c-format msgid "schema with OID %u does not exist\n" msgstr "schemat z OID %u nie istnieje\n" -#: pg_dump.c:3361 +#: pg_dump.c:3707 #, c-format msgid "WARNING: owner of data type \"%s\" appears to be invalid\n" msgstr "OSTRZEŻENIE: właściciel typu danych \"%s\" wydaje się być niepoprawny\n" -#: pg_dump.c:3472 +#: pg_dump.c:3818 #, c-format msgid "WARNING: owner of operator \"%s\" appears to be invalid\n" msgstr "OSTRZEŻENIE: właściciel operatora \"%s\" wydaje się być niepoprawny\n" -#: pg_dump.c:3729 +#: pg_dump.c:4077 #, c-format msgid "WARNING: owner of operator class \"%s\" appears to be invalid\n" msgstr "OSTRZEŻENIE: właściciel klasy operatora \"%s\" wydaje się być niepoprawny\n" -#: pg_dump.c:3817 +#: pg_dump.c:4165 #, c-format msgid "WARNING: owner of operator family \"%s\" appears to be invalid\n" msgstr "OSTRZEŻENIE: właściciel rodziny operatora \"%s\" wydaje się być niepoprawny\n" -#: pg_dump.c:3976 +#: pg_dump.c:4303 #, c-format msgid "WARNING: owner of aggregate function \"%s\" appears to be invalid\n" msgstr "OSTRZEŻENIE: właściciel funkcji agregującej \"%s\" wydaje się być niepoprawny\n" -#: pg_dump.c:4180 +#: pg_dump.c:4485 #, c-format msgid "WARNING: owner of function \"%s\" appears to be invalid\n" msgstr "OSTRZEŻENIE: właściciel funkcji \"%s\" wydaje się być niepoprawny\n" -#: pg_dump.c:4734 +#: pg_dump.c:5158 #, c-format msgid "WARNING: owner of table \"%s\" appears to be invalid\n" msgstr "OSTRZEŻENIE: właściciel tabeli \"%s\" wydaje się być niepoprawny\n" -#: pg_dump.c:4885 +#: pg_dump.c:5310 #, c-format -msgid "reading indexes for table \"%s\"\n" -msgstr "odczyt indeksów dla tabeli \"%s\"\n" +#| msgid "reading indexes for table \"%s\"\n" +msgid "reading indexes for table \"%s\".\"%s\"\n" +msgstr "odczyt indeksów dla tabeli \"%s\".\"%s\"\n" -#: pg_dump.c:5218 +#: pg_dump.c:5677 #, c-format -msgid "reading foreign key constraints for table \"%s\"\n" -msgstr "odczyt ograniczeń kluczy obcych dla tabeli \"%s\"\n" +#| msgid "reading foreign key constraints for table \"%s\"\n" +msgid "reading foreign key constraints for table \"%s\".\"%s\"\n" +msgstr "odczyt ograniczeń kluczy obcych dla tabeli \"%s\".\"%s\"\n" -#: pg_dump.c:5463 +#: pg_dump.c:5923 #, c-format msgid "failed sanity check, parent table OID %u of pg_rewrite entry OID %u not found\n" msgstr "sprawdzenia nie powiodły się, nie odnaleziono tabeli nadrzędnej o OID %u dla wpisu pg_rewrite o OID %u\n" -#: pg_dump.c:5556 +#: pg_dump.c:6016 #, c-format -msgid "reading triggers for table \"%s\"\n" -msgstr "odczyt wyzwalaczy dla tabeli \"%s\"\n" +#| msgid "reading triggers for table \"%s\"\n" +msgid "reading triggers for table \"%s\".\"%s\"\n" +msgstr "odczyt wyzwalaczy dla tabeli \"%s\".\"%s\"\n" -#: pg_dump.c:5717 +#: pg_dump.c:6178 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)\n" -msgstr "zapytanie dało w wyniku puste wskazanie nazwy tabeli dla wyzwalacza klucza obcego \"%s\" dla tabeli \"%s\" (UID tabeli: %u)\n" +msgstr "zapytanie dało w wyniku puste wskazanie nazwy tabeli dla wyzwalacza klucza " +"obcego \"%s\" dla tabeli \"%s\" (UID tabeli: %u)\n" -#: pg_dump.c:6169 +#: pg_dump.c:6750 #, c-format -msgid "finding the columns and types of table \"%s\"\n" -msgstr "wyszukiwanie kolumn i typów dla tabeli \"%s\"\n" +#| msgid "finding the columns and types of table \"%s\"\n" +msgid "finding the columns and types of table \"%s\".\"%s\"\n" +msgstr "wyszukiwanie kolumn i typów dla tabeli \"%s\".\"%s\"\n" -#: pg_dump.c:6347 +#: pg_dump.c:6929 #, c-format msgid "invalid column numbering in table \"%s\"\n" msgstr "niepoprawna numeracja kolumn dla tabeli \"%s\"\n" -#: pg_dump.c:6381 +#: pg_dump.c:6963 #, c-format -msgid "finding default expressions of table \"%s\"\n" -msgstr "wyszukiwanie wyrażeń domyślnych dla tabeli \"%s\"\n" +#| msgid "finding default expressions of table \"%s\"\n" +msgid "finding default expressions of table \"%s\".\"%s\"\n" +msgstr "wyszukiwanie wyrażeń domyślnych dla tabeli \"%s\".\"%s\"\n" -#: pg_dump.c:6433 +#: pg_dump.c:7016 #, c-format msgid "invalid adnum value %d for table \"%s\"\n" msgstr "niepoprawna wartość adnum %d dla tabeli \"%s\"\n" -#: pg_dump.c:6505 +#: pg_dump.c:7088 #, c-format -msgid "finding check constraints for table \"%s\"\n" -msgstr "odczyt ograniczeń sprawdzających dla tabeli \"%s\"\n" +#| msgid "finding check constraints for table \"%s\"\n" +msgid "finding check constraints for table \"%s\".\"%s\"\n" +msgstr "odczyt ograniczeń sprawdzających dla tabeli \"%s\".\"%s\"\n" -#: pg_dump.c:6600 +#: pg_dump.c:7184 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d\n" msgid_plural "expected %d check constraints on table \"%s\" but found %d\n" @@ -1841,112 +1925,130 @@ msgstr[0] "oczekiwano %d-go ograniczenia sprawdzające na tabeli \"%s\" ale znal msgstr[1] "oczekiwano %d-ch ograniczeń sprawdzających na tabeli \"%s\" ale znaleziono %d\n" msgstr[2] "oczekiwano %d ograniczeń sprawdzających na tabeli \"%s\" ale znaleziono %d\n" -#: pg_dump.c:6604 +#: pg_dump.c:7188 #, c-format msgid "(The system catalogs might be corrupted.)\n" msgstr "(Foldery systemowe mogą być uszkodzone.)\n" -#: pg_dump.c:7970 +#: pg_dump.c:8565 #, c-format msgid "WARNING: typtype of data type \"%s\" appears to be invalid\n" msgstr "OSTRZEŻENIE: typtype typu danych \"%s\" wydaje się być niepoprawny\n" -#: pg_dump.c:9419 +#: pg_dump.c:10091 #, c-format msgid "WARNING: bogus value in proargmodes array\n" msgstr "OSTRZEŻENIE: błędna wartość w tablicy proargmodes\n" -#: pg_dump.c:9747 +#: pg_dump.c:10442 #, c-format msgid "WARNING: could not parse proallargtypes array\n" msgstr "OSTRZEŻENIE: nie można przeanalizować tablicy proallargtypes\n" -#: pg_dump.c:9763 +#: pg_dump.c:10458 #, c-format msgid "WARNING: could not parse proargmodes array\n" msgstr "OSTRZEŻENIE: nie można przeanalizować tablicy proargmodes\n" -#: pg_dump.c:9777 +#: pg_dump.c:10472 #, c-format msgid "WARNING: could not parse proargnames array\n" msgstr "OSTRZEŻENIE: nie można przeanalizować tablicy proargnames\n" -#: pg_dump.c:9788 +#: pg_dump.c:10483 #, c-format msgid "WARNING: could not parse proconfig array\n" msgstr "OSTRZEŻENIE: nie można przeanalizować tablicy proconfig\n" -#: pg_dump.c:9845 +#: pg_dump.c:10554 #, c-format msgid "unrecognized provolatile value for function \"%s\"\n" msgstr "nierozpoznana wartość provolatile dla funkcji \"%s\"\n" -#: pg_dump.c:10065 +#: pg_dump.c:10732 #, c-format msgid "WARNING: bogus value in pg_cast.castfunc or pg_cast.castmethod field\n" msgstr "OSTRZEŻENIE: błędna wartość w pg_cast.castfunc lub nie udało się wykonać pg_cast.castmethod\n" -#: pg_dump.c:10068 +#: pg_dump.c:10735 #, c-format msgid "WARNING: bogus value in pg_cast.castmethod field\n" msgstr "OSTRZEŻENIE: błędna wartość pola pg_cast.castmethod\n" -#: pg_dump.c:10437 +#: pg_dump.c:10820 +#, c-format +msgid "WARNING: bogus transform definition, at least one of trffromsql and trftosql should be nonzero\n" +msgstr "OSTRZEŻENIE: błędna definicja transformacji, co najmniej jedna z trffromsql " +"i trftosql powinna być niezerowa\n" + +#: pg_dump.c:10837 +#, c-format +#| msgid "WARNING: bogus value in pg_cast.castmethod field\n" +msgid "WARNING: bogus value in pg_transform.trffromsql field\n" +msgstr "OSTRZEŻENIE: błędna wartość pola pg_transform.trffromsql\n" + +#: pg_dump.c:10858 +#, c-format +#| msgid "WARNING: bogus value in pg_cast.castmethod field\n" +msgid "WARNING: bogus value in pg_transform.trftosql field\n" +msgstr "OSTRZEŻENIE: błędna wartość pola pg_transform.trftosql\n" + +#: pg_dump.c:11244 #, c-format msgid "WARNING: could not find operator with OID %s\n" msgstr "OSTRZEŻENIE: nie udało się odnaleźć operatora o OID %s\n" -#: pg_dump.c:11499 +#: pg_dump.c:12419 #, c-format msgid "WARNING: aggregate function %s could not be dumped correctly for this database version; ignored\n" msgstr "OSTRZEŻENIE: funkcja agregująca %s nie może być poprawnie zrzucona dla tej wersji bazy danych; zignorowano\n" -#: pg_dump.c:12275 +#: pg_dump.c:13244 #, c-format msgid "unrecognized object type in default privileges: %d\n" msgstr "nieznany typ obiektu w uprawnieniach domyślnych: %d\n" -#: pg_dump.c:12290 +#: pg_dump.c:13259 #, c-format msgid "could not parse default ACL list (%s)\n" msgstr "nie można przetworzyć domyślnej listy ACL (%s)\n" -#: pg_dump.c:12345 +#: pg_dump.c:13314 #, c-format msgid "could not parse ACL list (%s) for object \"%s\" (%s)\n" msgstr "nie udało się przetworzyć listy ACL (%s) dla obiektu \"%s\" (%s)\n" -#: pg_dump.c:12764 +#: pg_dump.c:13731 #, c-format msgid "query to obtain definition of view \"%s\" returned no data\n" msgstr "zapytanie o definicję widoku \"%s\" nie zwróciło danych\n" -#: pg_dump.c:12767 +#: pg_dump.c:13734 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition\n" msgstr "zapytanie o definicję widoku \"%s\" nie zwróciło więcej niż jedna definicję\n" -#: pg_dump.c:12774 +#: pg_dump.c:13741 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)\n" msgstr "definicja widoku \"%s\" wydaje się pusta (długość zero)\n" -#: pg_dump.c:13482 +#: pg_dump.c:14478 #, c-format msgid "invalid column number %d for table \"%s\"\n" msgstr "niepoprawny numer kolumny %d dla tabeli \"%s\"\n" -#: pg_dump.c:13597 +#: pg_dump.c:14602 #, c-format msgid "missing index for constraint \"%s\"\n" msgstr "brak indeksu dla ograniczenia \"%s\"\n" -#: pg_dump.c:13784 +#: pg_dump.c:14789 #, c-format msgid "unrecognized constraint type: %c\n" msgstr "nierozpoznany typ ograniczenia: %c\n" -#: pg_dump.c:13933 pg_dump.c:14097 +#: pg_dump.c:14938 pg_dump.c:15102 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)\n" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)\n" @@ -1954,32 +2056,32 @@ msgstr[0] "zapytanie o dane sekwencji \"%s\" zwróciło %d wiersz (oczekiwano 1) msgstr[1] "zapytanie o dane sekwencji \"%s\" zwróciło %d wiersze (oczekiwano 1)\n" msgstr[2] "zapytanie o dane sekwencji \"%s\" zwróciło %d wierszy (oczekiwano 1)\n" -#: pg_dump.c:13944 +#: pg_dump.c:14949 #, c-format msgid "query to get data of sequence \"%s\" returned name \"%s\"\n" msgstr "pytanie o dane sekwencji \"%s\" zwróciło nazwę \"%s\"\n" -#: pg_dump.c:14192 +#: pg_dump.c:15197 #, c-format msgid "unexpected tgtype value: %d\n" msgstr "nieoczekiwana wartość tgtype: %d\n" -#: pg_dump.c:14274 +#: pg_dump.c:15279 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"\n" msgstr "niepoprawny ciąg argumentu (%s) dla wyzwalacza \"%s\" tabeli \"%s\"\n" -#: pg_dump.c:14462 +#: pg_dump.c:15466 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned\n" msgstr "zapytanie o regułę \"%s\" dla tabeli \"%s\" nie powiodło się: zwróciło złą liczbę wierszy\n" -#: pg_dump.c:14763 +#: pg_dump.c:15845 #, c-format msgid "reading dependency data\n" msgstr "odczyt informacji o zależnościach\n" -#: pg_dump.c:15308 +#: pg_dump.c:16392 #, c-format msgid "query returned %d row instead of one: %s\n" msgid_plural "query returned %d rows instead of one: %s\n" @@ -1988,51 +2090,51 @@ msgstr[1] "zapytanie zwróciło %d wiersze zamiast: %s\n" msgstr[2] "zapytanie zwróciło %d wierszy zamiast: %s\n" #. translator: this is a module name -#: pg_dump_sort.c:21 +#: pg_dump_sort.c:23 msgid "sorter" msgstr "sortujący" -#: pg_dump_sort.c:465 +#: pg_dump_sort.c:489 #, c-format msgid "invalid dumpId %d\n" msgstr "niepoprawny dumpId %d\n" -#: pg_dump_sort.c:471 +#: pg_dump_sort.c:495 #, c-format msgid "invalid dependency %d\n" msgstr "niepoprawne powiązanie %d\n" -#: pg_dump_sort.c:685 +#: pg_dump_sort.c:728 #, c-format msgid "could not identify dependency loop\n" -msgstr "nie nie można zidentyfikować pętli powiązań\n" +msgstr "nie można zidentyfikować pętli powiązań\n" -#: pg_dump_sort.c:1135 +#: pg_dump_sort.c:1250 #, c-format msgid "NOTICE: there are circular foreign-key constraints among these table(s):\n" msgstr "UWAGA: występuje pętla kluczy obcych pomiędzy tabelami (w tabeli):\n" -#: pg_dump_sort.c:1137 pg_dump_sort.c:1157 +#: pg_dump_sort.c:1252 pg_dump_sort.c:1272 #, c-format msgid " %s\n" msgstr " %s\n" -#: pg_dump_sort.c:1138 +#: pg_dump_sort.c:1253 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints.\n" msgstr "Możesz nie być w stanie odtworzyć zrzutu bez użycia --disable-triggers lub tymczasowego usunięcia ograniczeń.\n" -#: pg_dump_sort.c:1139 +#: pg_dump_sort.c:1254 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem.\n" msgstr "Rozważ wykonanie pełnego zrzutu zamiast kopii --data-only by uniknąć tegoproblemu.\n" -#: pg_dump_sort.c:1151 +#: pg_dump_sort.c:1266 #, c-format msgid "WARNING: could not resolve dependency loop among these items:\n" msgstr "OSTRZEŻENIE: nie można rozwiązać pętli powiązań pomiędzy elementami:\n" -#: pg_dumpall.c:180 +#: pg_dumpall.c:181 #, c-format msgid "" "The program \"pg_dump\" is needed by %s but was not found in the\n" @@ -2043,7 +2145,7 @@ msgstr "" "w tym samym folderze co \"%s\".\n" "Sprawdź instalację.\n" -#: pg_dumpall.c:187 +#: pg_dumpall.c:188 #, c-format msgid "" "The program \"pg_dump\" was found by \"%s\"\n" @@ -2054,27 +2156,32 @@ msgstr "" "ale nie jest w tej samej wersji co %s.\n" "Sprawdź instalację.\n" -#: pg_dumpall.c:321 +#: pg_dumpall.c:318 #, c-format msgid "%s: options -g/--globals-only and -r/--roles-only cannot be used together\n" msgstr "%s: opcje -g/--globals-only i -r/--roles-only nie mogą być używane razem\n" -#: pg_dumpall.c:330 +#: pg_dumpall.c:327 #, c-format msgid "%s: options -g/--globals-only and -t/--tablespaces-only cannot be used together\n" msgstr "%s: opcje -g/--globals-only i -t/--tablespaces-only nie mogą być używane razem\n" -#: pg_dumpall.c:339 +#: pg_dumpall.c:336 pg_restore.c:343 +#, c-format +msgid "%s: option --if-exists requires option -c/--clean\n" +msgstr "%s: opcja --if-exists wymaga opcji -c/--clean\n" + +#: pg_dumpall.c:343 #, c-format msgid "%s: options -r/--roles-only and -t/--tablespaces-only cannot be used together\n" msgstr "%s: opcje -r/--roles-only i -t/--tablespaces-only nie mogą być używane razem\n" -#: pg_dumpall.c:381 pg_dumpall.c:1837 +#: pg_dumpall.c:385 pg_dumpall.c:1881 #, c-format msgid "%s: could not connect to database \"%s\"\n" msgstr "%s: nie można połączyć się do bazy danych \"%s\"\n" -#: pg_dumpall.c:396 +#: pg_dumpall.c:400 #, c-format msgid "" "%s: could not connect to databases \"postgres\" or \"template1\"\n" @@ -2083,12 +2190,12 @@ msgstr "" "%s: n ie udało się połączyć do bazy danych \"postgres\" ani \"template1\"\n" "Proszę wskazać alternatywną bazę danych.\n" -#: pg_dumpall.c:413 +#: pg_dumpall.c:417 #, c-format msgid "%s: could not open the output file \"%s\": %s\n" msgstr "%s: nie można otworzyć pliku wyjścia \"%s\": %s\n" -#: pg_dumpall.c:543 +#: pg_dumpall.c:547 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2097,57 +2204,57 @@ msgstr "" "%s wyciąga klaster bazy danych PostgreSQL do pliku skryptowego SQL.\n" "\n" -#: pg_dumpall.c:545 +#: pg_dumpall.c:549 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPCJA]...\n" -#: pg_dumpall.c:548 +#: pg_dumpall.c:552 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=NAZWAPLIKU nazwa pliku wyjścia\n" -#: pg_dumpall.c:554 +#: pg_dumpall.c:558 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean czyszczenie (kasowanie) baz danych przed odtworzeniem\n" -#: pg_dumpall.c:555 +#: pg_dumpall.c:559 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr " -g, --globals-only zrzuca tylko obiekty globalne, bez baz danych\n" -#: pg_dumpall.c:557 pg_restore.c:436 +#: pg_dumpall.c:561 pg_restore.c:454 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner bez odtwarzania posiadania obiektu\n" -#: pg_dumpall.c:558 +#: pg_dumpall.c:562 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr " -r, --roles-only zrzuca tylko role bez baz danych i przestrzeni tabel\n" -#: pg_dumpall.c:560 +#: pg_dumpall.c:564 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr " -S, --superuser=NAZWA nazwa superużytkownika używana w zrzucie\n" -#: pg_dumpall.c:561 +#: pg_dumpall.c:565 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr " -t, --tablespaces-only zrzuca tylko przestrzenie tabel, bez baz danych i ról\n" -#: pg_dumpall.c:577 +#: pg_dumpall.c:582 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=POLACZENIE połączenie do bazy danych wedle ciągu połączenia\n" -#: pg_dumpall.c:579 +#: pg_dumpall.c:584 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=NAZWADB alternatywna domyślna baza danych\n" -#: pg_dumpall.c:586 +#: pg_dumpall.c:591 #, c-format msgid "" "\n" @@ -2160,92 +2267,104 @@ msgstr "" "wyjścia.\n" "\n" -#: pg_dumpall.c:1086 +#: pg_dumpall.c:1118 #, c-format msgid "%s: could not parse ACL list (%s) for tablespace \"%s\"\n" msgstr "%s: nie udało się przeanalizować listy AC (%s) dla przestrzeni tabel \"%s\"\n" -#: pg_dumpall.c:1390 +#: pg_dumpall.c:1431 #, c-format msgid "%s: could not parse ACL list (%s) for database \"%s\"\n" msgstr "%s: nie udało się przeanalizować listy AC (%s) dla bazy danych \"%s\"\n" -#: pg_dumpall.c:1602 +#: pg_dumpall.c:1648 #, c-format msgid "%s: dumping database \"%s\"...\n" msgstr "%s: tworzenie kopii zapasowej bazy danych \"%s\"...\n" -#: pg_dumpall.c:1623 +#: pg_dumpall.c:1669 #, c-format msgid "%s: pg_dump failed on database \"%s\", exiting\n" msgstr "%s: pg_dump nie powiódł się na bazie danych \"%s\", wyjście\n" -#: pg_dumpall.c:1632 +#: pg_dumpall.c:1678 #, c-format msgid "%s: could not re-open the output file \"%s\": %s\n" msgstr "%s: nie można ponownie otworzyć pliku \"%s\": %s\n" -#: pg_dumpall.c:1679 +#: pg_dumpall.c:1723 #, c-format msgid "%s: running \"%s\"\n" msgstr "%s: uruchomiony \"%s\"\n" -#: pg_dumpall.c:1859 +#: pg_dumpall.c:1903 #, c-format msgid "%s: could not connect to database \"%s\": %s\n" msgstr "%s: nie można połączyć się do bazy danych \"%s\": %s\n" -#: pg_dumpall.c:1889 +#: pg_dumpall.c:1933 #, c-format msgid "%s: could not get server version\n" msgstr "%s: nie można pobrać wersji serwera\n" -#: pg_dumpall.c:1895 +#: pg_dumpall.c:1939 #, c-format msgid "%s: could not parse server version \"%s\"\n" msgstr "%s: nie można odczytać wersji serwera \"%s\"\n" -#: pg_dumpall.c:1973 pg_dumpall.c:1999 +#: pg_dumpall.c:2017 pg_dumpall.c:2043 #, c-format msgid "%s: executing %s\n" msgstr "%s: wykonanie %s\n" -#: pg_dumpall.c:1979 pg_dumpall.c:2005 +#: pg_dumpall.c:2023 pg_dumpall.c:2049 #, c-format msgid "%s: query failed: %s" msgstr "%s: zapytanie nie powiodło się: %s" -#: pg_dumpall.c:1981 pg_dumpall.c:2007 +#: pg_dumpall.c:2025 pg_dumpall.c:2051 #, c-format msgid "%s: query was: %s\n" msgstr "%s: zapytanie brzmiało: %s\n" -#: pg_restore.c:308 +#: pg_restore.c:303 #, c-format msgid "%s: options -d/--dbname and -f/--file cannot be used together\n" msgstr "%s: opcje -d/--dbname i -f/--file nie mogą być użyte razem\n" -#: pg_restore.c:320 +#: pg_restore.c:314 +#, c-format +#| msgid "options -s/--schema-only and -a/--data-only cannot be used together\n" +msgid "%s: options -s/--schema-only and -a/--data-only cannot be used together\n" +msgstr "%s: opcje -s/--schema-only i -a/--data-only nie mogą być używane razem\n" + +#: pg_restore.c:321 +#, c-format +#| msgid "options -c/--clean and -a/--data-only cannot be used together\n" +msgid "%s: options -c/--clean and -a/--data-only cannot be used together\n" +msgstr "%s: opcje -c/--clean i -a/--data-only nie mogą być używane razem\n" + +#: pg_restore.c:329 #, c-format msgid "%s: cannot specify both --single-transaction and multiple jobs\n" msgstr "%s: nie można wskazać jednocześnie --single-transaction i wielu zadań\n" -#: pg_restore.c:351 +#: pg_restore.c:369 #, c-format msgid "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"\n" msgstr "nierozpoznany format archiwum \"%s\"; proszę wskazać \"c\", \"d\", lub \"t\"\n" -#: pg_restore.c:381 +#: pg_restore.c:399 #, c-format msgid "%s: maximum number of parallel jobs is %d\n" msgstr "%s: maksymalna liczba zadań współbieżnych to %d\n" -#: pg_restore.c:399 +#: pg_restore.c:417 #, c-format msgid "WARNING: errors ignored on restore: %d\n" msgstr "OSTRZEŻENIE: błędy ignorowane przy odtworzeniu: %d\n" -#: pg_restore.c:413 +#: pg_restore.c:431 #, c-format msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" @@ -2254,47 +2373,47 @@ msgstr "" "%s odtwarza bazę danych PostgreSQL z archiwum utworzonego przez pg_dump.\n" "\n" -#: pg_restore.c:415 +#: pg_restore.c:433 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [OPCJA]... [PLIK]\n" -#: pg_restore.c:418 +#: pg_restore.c:436 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr " -d, --dbname=NAZWA połączenie do bazy danych o tej nazwie\n" -#: pg_restore.c:419 +#: pg_restore.c:437 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=NAZWAPLIKU nazwa pliku wyjścia\n" -#: pg_restore.c:420 +#: pg_restore.c:438 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" msgstr " -F, --format=c|d|t format pliku kopii zapasowej (powinien być automatyczny)\n" -#: pg_restore.c:421 +#: pg_restore.c:439 #, c-format msgid " -l, --list print summarized TOC of the archive\n" msgstr " -l, --list drukuje skrótowy spis treści archiwum\n" -#: pg_restore.c:422 +#: pg_restore.c:440 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose tryb informacji szczegółowych\n" -#: pg_restore.c:423 +#: pg_restore.c:441 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version pokaż informacje o wersji i zakończ\n" -#: pg_restore.c:424 +#: pg_restore.c:442 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help pokaż tą pomoc i zakończ działanie\n" -#: pg_restore.c:426 +#: pg_restore.c:444 #, c-format msgid "" "\n" @@ -2303,32 +2422,32 @@ msgstr "" "\n" "Opcje kontroli odtworzenia:\n" -#: pg_restore.c:427 +#: pg_restore.c:445 #, c-format msgid " -a, --data-only restore only the data, no schema\n" msgstr " -a, --data-only odtwarza tylko dane, bez schematu\n" -#: pg_restore.c:429 +#: pg_restore.c:447 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create utworzenie docelowej bazy danych\n" -#: pg_restore.c:430 +#: pg_restore.c:448 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" msgstr " -e, --exit-on-error wyjście w przypadku błędu, domyślna jest kontynuacja\n" -#: pg_restore.c:431 +#: pg_restore.c:449 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=NAZWA odtwarza indeks wedle nazwy\n" -#: pg_restore.c:432 +#: pg_restore.c:450 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" msgstr " -j, --jobs=NUM użycie tylu równoległych zadań przy odtwarzaniu\n" -#: pg_restore.c:433 +#: pg_restore.c:451 #, c-format msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" @@ -2337,47 +2456,49 @@ msgstr "" " -L, --use-list=NAZWAPLIKU użycie spisu treści z tego pliku by\n" " wskazać/uporządkować wyjście\n" -#: pg_restore.c:435 +#: pg_restore.c:453 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" msgstr " -n, --schema=NAZWA odtwarza tylko obiekty z tego schematu\n" -#: pg_restore.c:437 +#: pg_restore.c:455 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr " -P, --function=NAZWA(args) odtwarza funkcję wedle nazwy\n" -#: pg_restore.c:438 +#: pg_restore.c:456 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" msgstr " -s, --schema-only odtwarza tylko schemat, bez danych\n" -#: pg_restore.c:439 +#: pg_restore.c:457 #, c-format msgid " -S, --superuser=NAME superuser user name to use for disabling triggers\n" msgstr " -S, --superuser=NAZWA nazwa superużytkownika by użyć lub wyłączyć wyzwalacze\n" -#: pg_restore.c:440 +#: pg_restore.c:458 #, c-format -msgid " -t, --table=NAME restore named table(s)\n" -msgstr " -t, --table=NAZWA odtwarza tabele wedle nazwy\n" +#| msgid " -t, --table=NAME restore named table(s)\n" +msgid " -t, --table=NAME restore named relation (table, view, etc)\n" +msgstr " -t, --table=NAZWA odtwarza relacje wedle nazwy (tabela, widok, " +"itp.)\n" -#: pg_restore.c:441 +#: pg_restore.c:459 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=NAZWA odtwarza wyzwalacz wedle nazwy\n" -#: pg_restore.c:442 +#: pg_restore.c:460 #, c-format msgid " -x, --no-privileges skip restoration of access privileges (grant/revoke)\n" msgstr " -x, --no-privileges nie wykonuje odtwarzania przywilejów dostępu (grant/revoke)\n" -#: pg_restore.c:443 +#: pg_restore.c:461 #, c-format msgid " -1, --single-transaction restore as a single transaction\n" msgstr " -1, --single-transaction odtworzenie jako pojedyncza transakcja\n" -#: pg_restore.c:445 +#: pg_restore.c:465 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not be\n" @@ -2386,27 +2507,39 @@ msgstr "" " --no-data-for-failed-tables\n" " nie odtwarza danych z tabel, które nie mogły być odtworzone\n" -#: pg_restore.c:447 +#: pg_restore.c:467 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels nie odtwarza etykiet bezpieczeństwa\n" -#: pg_restore.c:448 +#: pg_restore.c:468 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces nie odtwarza przypisań do przestrzeni tabel\n" -#: pg_restore.c:449 +#: pg_restore.c:469 #, c-format msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" msgstr " --section=SECTION odtwarza nazwaną sekcję (pre-dane, dane, lub post-dane)\n" -#: pg_restore.c:460 +#: pg_restore.c:480 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=NAZWAROLI wykonuje SET ROLE przed odtworzeniem\n" -#: pg_restore.c:462 +#: pg_restore.c:482 +#, c-format +msgid "" +"\n" +"The options -I, -n, -P, -t, -T, and --section can be combined and specified\n" +"multiple times to select multiple objects.\n" +msgstr "" +"\n" +"Opcje -I, -n, -P, -t, -T i --section mogą być mieszane i używane " +"wielokrotnie\n" +"by wskazać wiele obiektów.\n" + +#: pg_restore.c:485 #, c-format msgid "" "\n" @@ -2417,38 +2550,47 @@ msgstr "" "Jeśli nie wskazano nazwy pliku, użyty zostanie wejście standardowe.\n" "\n" -#~ msgid "worker process crashed: status %d\n" -#~ msgstr "proces roboczy uległ awarii: status %d\n" +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "nie można zmienić katalogu na \"%s\"" -#~ msgid "parallel_restore should not return\n" -#~ msgstr "parallel_restore nie może zwracać wartości\n" +#~ msgid "cannot duplicate null pointer\n" +#~ msgstr "nie można powielić pustego wskaźnika\n" -#~ msgid "could not create worker thread: %s\n" -#~ msgstr "nie można utworzyć wątku roboczego: %s\n" +#~ msgid "%s: could not parse version \"%s\"\n" +#~ msgstr "%s: nie można odczytać wersji \"%s\"\n" #~ msgid "could not parse version string \"%s\"\n" #~ msgstr "nie można przetworzyć zapisu wersji \"%s\"\n" -#~ msgid "%s: could not parse version \"%s\"\n" -#~ msgstr "%s: nie można odczytać wersji \"%s\"\n" +#~ msgid "could not create worker thread: %s\n" +#~ msgstr "nie można utworzyć wątku roboczego: %s\n" -#~ msgid "cannot duplicate null pointer\n" -#~ msgstr "nie można powielić pustego wskaźnika\n" +#~ msgid "parallel_restore should not return\n" +#~ msgstr "parallel_restore nie może zwracać wartości\n" -#~ msgid "child process exited with unrecognized status %d" -#~ msgstr "proces potomny zakończył działanie z nieznanym stanem %d" +#~ msgid "worker process crashed: status %d\n" +#~ msgstr "proces roboczy uległ awarii: status %d\n" -#~ msgid "child process was terminated by signal %d" -#~ msgstr "proces potomny został zatrzymany przez sygnał %d" +#~ msgid "mismatch in actual vs. predicted file position (%s vs. %s)\n" +#~ msgstr "niezgodność między rzeczywistą i wyliczoną pozycją pliku (%s i %s)\n" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "proces potomny został zatrzymany przez sygnał %s" +#~ msgid "could not output padding at end of tar member\n" +#~ msgstr "nie udało się wypełnić wyjścia na końcu składnika tar\n" -#~ msgid "child process was terminated by exception 0x%X" -#~ msgstr "proces potomny został zatrzymany przez wyjątek 0x%X" +#~ msgid "could not write null block at end of tar archive\n" +#~ msgstr "nie można zapisać pustego bloku na końcu archiwum tar\n" -#~ msgid "child process exited with exit code %d" -#~ msgstr "proces potomny zakończył działanie z kodem %d" +#~ msgid "could not write byte\n" +#~ msgstr "nie można zapisać bajtu\n" -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "nie można zmienić katalogu na \"%s\"" +#~ msgid "could not write byte: %s\n" +#~ msgstr "nie można zapisać bajtu: %s\n" + +#~ msgid "unexpected end of file\n" +#~ msgstr "nieoczekiwany koniec pliku\n" + +#~ msgid "could not write to custom output routine\n" +#~ msgstr "nie można pisać do procedury wyjścia użytkownika\n" + +#~ msgid "could not write to output file: %s\n" +#~ msgstr "nie można pisać do pliku wyjścia: %s\n" diff --git a/src/bin/pg_dump/po/pt_BR.po b/src/bin/pg_dump/po/pt_BR.po index ecf0ef7949d2c..4fa89ccdc24e2 100644 --- a/src/bin/pg_dump/po/pt_BR.po +++ b/src/bin/pg_dump/po/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9.4\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-09-14 23:09-0300\n" +"POT-Creation-Date: 2015-10-04 16:08-0300\n" "PO-Revision-Date: 2005-10-04 23:16-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -53,14 +53,14 @@ msgstr "não pôde ler link simbólico \"%s\"" msgid "pclose failed: %s" msgstr "pclose falhou: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 pg_backup_db.c:134 pg_backup_db.c:189 -#: pg_backup_db.c:233 pg_backup_db.c:279 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 pg_backup_db.c:135 pg_backup_db.c:190 +#: pg_backup_db.c:234 pg_backup_db.c:280 #, c-format msgid "out of memory\n" msgstr "sem memória\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "não pode duplicar ponteiro nulo (erro interno)\n" @@ -100,225 +100,235 @@ msgstr "processo filho foi terminado pelo sinal %d" msgid "child process exited with unrecognized status %d" msgstr "processo filho terminou com status desconhecido %d" -#: common.c:105 +#: common.c:109 #, c-format msgid "reading schemas\n" msgstr "lendo esquemas\n" -#: common.c:116 +#: common.c:120 #, c-format msgid "reading user-defined tables\n" msgstr "lendo tabelas definidas pelo usuário\n" -#: common.c:124 +#: common.c:128 #, c-format msgid "reading extensions\n" msgstr "lendo extensões\n" -#: common.c:128 +#: common.c:132 #, c-format msgid "reading user-defined functions\n" msgstr "lendo funções definidas pelo usuário\n" -#: common.c:134 +#: common.c:138 #, c-format msgid "reading user-defined types\n" msgstr "lendo tipos definidos pelo usuário\n" -#: common.c:140 +#: common.c:144 #, c-format msgid "reading procedural languages\n" msgstr "lendo linguagens procedurais\n" -#: common.c:144 +#: common.c:148 #, c-format msgid "reading user-defined aggregate functions\n" msgstr "lendo funções de agregação definidas pelo usuário\n" -#: common.c:148 +#: common.c:152 #, c-format msgid "reading user-defined operators\n" msgstr "lendo operadores definidos pelo usuário\n" -#: common.c:153 +#: common.c:157 #, c-format msgid "reading user-defined operator classes\n" msgstr "lendo classes de operadores definidas pelo usuário\n" -#: common.c:157 +#: common.c:161 #, c-format msgid "reading user-defined operator families\n" msgstr "lendo famílias de operadores definidas pelo usuário\n" -#: common.c:161 +#: common.c:165 #, c-format msgid "reading user-defined text search parsers\n" msgstr "lendo analisadores de busca textual definidos pelo usuário\n" -#: common.c:165 +#: common.c:169 #, c-format msgid "reading user-defined text search templates\n" msgstr "lendo modelos de busca textual definidos pelo usuário\n" -#: common.c:169 +#: common.c:173 #, c-format msgid "reading user-defined text search dictionaries\n" msgstr "lendo dicionários de busca textual definidos pelo usuário\n" -#: common.c:173 +#: common.c:177 #, c-format msgid "reading user-defined text search configurations\n" msgstr "lendo configurações de busca textual definidas pelo usuário\n" -#: common.c:177 +#: common.c:181 #, c-format msgid "reading user-defined foreign-data wrappers\n" msgstr "lendo adaptadores de dados externos definidos pelo usuário\n" -#: common.c:181 +#: common.c:185 #, c-format msgid "reading user-defined foreign servers\n" msgstr "lendo servidores externos definidos pelo usuário\n" -#: common.c:185 +#: common.c:189 #, c-format msgid "reading default privileges\n" msgstr "lendo privilégios padrão\n" -#: common.c:189 +#: common.c:193 #, c-format msgid "reading user-defined collations\n" msgstr "lendo ordenações definidas pelo usuário\n" -#: common.c:194 +#: common.c:198 #, c-format msgid "reading user-defined conversions\n" msgstr "lendo conversões definidas pelo usuário\n" -#: common.c:198 +#: common.c:202 #, c-format msgid "reading type casts\n" msgstr "lendo conversões de tipo\n" -#: common.c:202 +#: common.c:206 +#, fuzzy, c-format +msgid "reading transforms\n" +msgstr "lendo transformações\n" + +#: common.c:210 #, c-format msgid "reading table inheritance information\n" msgstr "lendo informação de herança das tabelas\n" -#: common.c:206 +#: common.c:214 #, c-format msgid "reading event triggers\n" msgstr "lendo gatilhos de eventos\n" -#: common.c:215 +#: common.c:223 #, c-format msgid "finding extension members\n" msgstr "encontrando membros de extensões\n" -#: common.c:220 +#: common.c:228 #, c-format msgid "finding inheritance relationships\n" msgstr "encontrando relacionamentos herdados\n" -#: common.c:224 +#: common.c:232 #, c-format msgid "reading column info for interesting tables\n" msgstr "lendo informações das colunas em tabelas interessantes\n" -#: common.c:228 +#: common.c:236 #, c-format msgid "flagging inherited columns in subtables\n" msgstr "marcando colunas herdadas nas subtabelas\n" -#: common.c:232 +#: common.c:240 #, c-format msgid "reading indexes\n" msgstr "lendo índices\n" -#: common.c:236 +#: common.c:244 #, c-format msgid "reading constraints\n" msgstr "lendo restrições\n" -#: common.c:240 +#: common.c:248 #, c-format msgid "reading triggers\n" msgstr "lendo gatilhos\n" -#: common.c:244 +#: common.c:252 #, c-format msgid "reading rewrite rules\n" msgstr "lendo regras de reescrita\n" -#: common.c:792 +#: common.c:256 +#, fuzzy, c-format +msgid "reading policies\n" +msgstr "lendo políticas\n" + +#: common.c:804 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found\n" msgstr "verificação de sanidade falhou, OID pai %u da tabela \"%s\" (OID %u) não foi encontrado\n" -#: common.c:834 +#: common.c:846 #, c-format msgid "could not parse numeric array \"%s\": too many numbers\n" msgstr "não pôde validar matriz numérica \"%s\": muitos números\n" -#: common.c:849 +#: common.c:861 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number\n" msgstr "não pôde validar matriz numérica \"%s\": caracter inválido no número\n" #. translator: this is a module name -#: compress_io.c:78 +#: compress_io.c:79 msgid "compress_io" msgstr "compress_io" -#: compress_io.c:114 +#: compress_io.c:115 #, c-format msgid "invalid compression code: %d\n" msgstr "código de compressão é inválido: %d\n" -#: compress_io.c:138 compress_io.c:174 compress_io.c:195 compress_io.c:514 -#: compress_io.c:541 +#: compress_io.c:139 compress_io.c:175 compress_io.c:196 compress_io.c:529 +#: compress_io.c:572 #, c-format msgid "not built with zlib support\n" msgstr "não foi construído com suporte a zlib\n" -#: compress_io.c:245 compress_io.c:347 +#: compress_io.c:246 compress_io.c:348 #, c-format msgid "could not initialize compression library: %s\n" msgstr "não pôde inicializar biblioteca de compressão: %s\n" -#: compress_io.c:266 +#: compress_io.c:267 #, c-format msgid "could not close compression stream: %s\n" msgstr "não pôde fechar arquivo comprimido: %s\n" -#: compress_io.c:284 +#: compress_io.c:285 #, c-format msgid "could not compress data: %s\n" msgstr "não pôde comprimir dados: %s\n" -#: compress_io.c:367 compress_io.c:383 +#: compress_io.c:368 compress_io.c:384 #, c-format msgid "could not uncompress data: %s\n" msgstr "não pôde descomprimir dados: %s\n" -#: compress_io.c:391 +#: compress_io.c:392 #, c-format msgid "could not close compression library: %s\n" msgstr "não pôde fechar biblioteca de compressão: %s\n" -#: compress_io.c:575 compress_io.c:611 pg_backup_custom.c:590 -#: pg_backup_tar.c:563 +#: compress_io.c:606 compress_io.c:642 pg_backup_custom.c:591 +#: pg_backup_tar.c:567 #, c-format msgid "could not read from input file: %s\n" msgstr "não pôde ler arquivo de entrada: %s\n" -#: compress_io.c:614 pg_backup_custom.c:587 pg_backup_directory.c:551 -#: pg_backup_tar.c:799 pg_backup_tar.c:823 +#: compress_io.c:645 pg_backup_custom.c:588 pg_backup_directory.c:552 +#: pg_backup_tar.c:803 pg_backup_tar.c:827 #, c-format msgid "could not read from input file: end of file\n" msgstr "não pôde ler arquivo de entrada: fim do arquivo\n" -#: parallel.c:77 +#: parallel.c:78 msgid "parallel archiver" msgstr "arquivador paralelo" @@ -332,22 +342,22 @@ msgstr "%s: WSAStartup falhou: %d\n" msgid "worker is terminating\n" msgstr "processo filho está terminando\n" -#: parallel.c:535 +#: parallel.c:537 #, c-format msgid "could not create communication channels: %s\n" msgstr "não pôde criar canais de comunicação: %s\n" -#: parallel.c:608 +#: parallel.c:611 #, c-format msgid "could not create worker process: %s\n" msgstr "não pôde criar processo filho: %s\n" -#: parallel.c:825 +#: parallel.c:828 #, c-format msgid "could not get relation name for OID %u: %s\n" msgstr "não pôde obter nome de relação pelo OID %u: %s\n" -#: parallel.c:842 +#: parallel.c:845 #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" @@ -356,915 +366,925 @@ msgstr "" "não pôde obter bloqueio na relação \"%s\"\n" "Isso geralmente significa que alguém solicitou um bloqueio ACCESS EXCLUSIVE na tabela após o processo pai do pg_dump ter obtido o bloqueio ACCESS SHARE inicial na tabela.\n" -#: parallel.c:926 +#: parallel.c:929 #, c-format msgid "unrecognized command on communication channel: %s\n" msgstr "comando desconhecido em canal de comunicação: %s\n" -#: parallel.c:959 +#: parallel.c:962 #, c-format msgid "a worker process died unexpectedly\n" msgstr "um processo filho morreu inesperadamente\n" -#: parallel.c:986 parallel.c:995 +#: parallel.c:989 parallel.c:998 #, c-format msgid "invalid message received from worker: %s\n" msgstr "mensagem inválida recebida do processo filho: %s\n" -#: parallel.c:992 pg_backup_db.c:336 +#: parallel.c:995 pg_backup_db.c:337 #, c-format msgid "%s" msgstr "%s" -#: parallel.c:1044 parallel.c:1088 +#: parallel.c:1047 parallel.c:1091 #, c-format msgid "error processing a parallel work item\n" msgstr "erro ao processar um item de trabalho paralelo\n" -#: parallel.c:1116 parallel.c:1254 +#: parallel.c:1119 parallel.c:1257 #, c-format msgid "could not write to the communication channel: %s\n" msgstr "não pôde escrever no canal de comunicação: %s\n" -#: parallel.c:1165 +#: parallel.c:1168 #, c-format msgid "terminated by user\n" msgstr "terminado pelo usuário\n" -#: parallel.c:1217 +#: parallel.c:1220 #, c-format msgid "error in ListenToWorkers(): %s\n" msgstr "erro em ListenToWorkers(): %s\n" -#: parallel.c:1341 +#: parallel.c:1345 #, c-format msgid "pgpipe: could not create socket: error code %d\n" msgstr "pgpipe: não pôde criar soquete: código de erro %d\n" -#: parallel.c:1352 +#: parallel.c:1356 #, c-format msgid "pgpipe: could not bind: error code %d\n" msgstr "pgpipe: não pôde se ligar: código de erro %d\n" -#: parallel.c:1359 +#: parallel.c:1363 #, c-format msgid "pgpipe: could not listen: error code %d\n" msgstr "pgpipe: não pôde escutar: código de erro %d\n" -#: parallel.c:1366 +#: parallel.c:1370 #, c-format msgid "pgpipe: getsockname() failed: error code %d\n" msgstr "pgpipe: getsockname() falhou: código de erro %d\n" -#: parallel.c:1377 +#: parallel.c:1381 #, c-format msgid "pgpipe: could not create second socket: error code %d\n" msgstr "pgpipe: não pôde criar segundo soquete: código de erro %d\n" -#: parallel.c:1386 +#: parallel.c:1390 #, c-format msgid "pgpipe: could not connect socket: error code %d\n" msgstr "pgpipe: não pôde se conectar ao soquete: código de erro %d\n" -#: parallel.c:1393 +#: parallel.c:1397 #, c-format msgid "pgpipe: could not accept connection: error code %d\n" msgstr "pgpipe: não pôde aceitar conexão: código de erro %d\n" #. translator: this is a module name -#: pg_backup_archiver.c:51 +#: pg_backup_archiver.c:53 msgid "archiver" msgstr "arquivador" -#: pg_backup_archiver.c:169 pg_backup_archiver.c:1386 +#: pg_backup_archiver.c:230 pg_backup_archiver.c:1479 #, c-format msgid "could not close output file: %s\n" msgstr "não pôde fechar arquivo de saída: %s\n" -#: pg_backup_archiver.c:204 pg_backup_archiver.c:209 +#: pg_backup_archiver.c:265 pg_backup_archiver.c:270 #, c-format msgid "WARNING: archive items not in correct section order\n" msgstr "AVISO: itens do archive não estão na ordem correta de seções\n" -#: pg_backup_archiver.c:215 +#: pg_backup_archiver.c:276 #, c-format msgid "unexpected section code %d\n" msgstr "código de seção %d inesperado\n" -#: pg_backup_archiver.c:247 +#: pg_backup_archiver.c:308 #, c-format msgid "-C and -1 are incompatible options\n" msgstr "-C e -1 são opções incompatíveis\n" -#: pg_backup_archiver.c:257 +#: pg_backup_archiver.c:318 #, c-format msgid "parallel restore is not supported with this archive file format\n" msgstr "restauração paralela não é suportada por este formato de arquivo\n" -#: pg_backup_archiver.c:261 +#: pg_backup_archiver.c:322 #, c-format msgid "parallel restore is not supported with archives made by pre-8.0 pg_dump\n" msgstr "restauração paralela não é suportada por arquivos produzidos por pg_dum anterior a 8.0\n" -#: pg_backup_archiver.c:279 +#: pg_backup_archiver.c:340 #, c-format msgid "cannot restore from compressed archive (compression not supported in this installation)\n" msgstr "não pode recuperar arquivo comprimido (compressão não é suportada nesta instalação)\n" -#: pg_backup_archiver.c:296 +#: pg_backup_archiver.c:357 #, c-format msgid "connecting to database for restore\n" msgstr "conectando ao banco de dados para restauração\n" -#: pg_backup_archiver.c:298 +#: pg_backup_archiver.c:359 #, c-format msgid "direct database connections are not supported in pre-1.3 archives\n" msgstr "conexões diretas ao banco de dados não são suportadas em arquivos anteriores a versão 1.3\n" -#: pg_backup_archiver.c:343 +#: pg_backup_archiver.c:404 #, c-format msgid "implied data-only restore\n" msgstr "restauração do tipo somente dados implícita\n" -#: pg_backup_archiver.c:412 +#: pg_backup_archiver.c:474 #, c-format msgid "dropping %s %s\n" msgstr "removendo %s %s\n" -#: pg_backup_archiver.c:548 +#: pg_backup_archiver.c:627 +#, c-format +msgid "setting owner and privileges for %s \"%s.%s\"\n" +msgstr "definindo dono e privilégios para %s \"%s.%s\"\n" + +#: pg_backup_archiver.c:630 #, c-format -msgid "setting owner and privileges for %s %s\n" -msgstr "definindo dono e privilégios para %s %s\n" +msgid "setting owner and privileges for %s \"%s\"\n" +msgstr "definindo dono e privilégios para %s \"%s\"\n" -#: pg_backup_archiver.c:614 pg_backup_archiver.c:616 +#: pg_backup_archiver.c:696 pg_backup_archiver.c:698 #, c-format msgid "warning from original dump file: %s\n" msgstr "aviso do arquivo de cópia de segurança: %s\n" -#: pg_backup_archiver.c:623 +#: pg_backup_archiver.c:707 +#, c-format +msgid "creating %s \"%s.%s\"\n" +msgstr "criando %s \"%s.%s\"\n" + +#: pg_backup_archiver.c:710 #, c-format -msgid "creating %s %s\n" -msgstr "criando %s %s\n" +msgid "creating %s \"%s\"\n" +msgstr "criando %s \"%s\"\n" -#: pg_backup_archiver.c:667 +#: pg_backup_archiver.c:755 #, c-format msgid "connecting to new database \"%s\"\n" msgstr "conectando ao novo banco de dados \"%s\"\n" -#: pg_backup_archiver.c:695 +#: pg_backup_archiver.c:783 #, c-format msgid "processing %s\n" msgstr "processando %s\n" -#: pg_backup_archiver.c:715 +#: pg_backup_archiver.c:803 #, c-format -msgid "processing data for table \"%s\"\n" -msgstr "processando dados da tabela \"%s\"\n" +msgid "processing data for table \"%s.%s\"\n" +msgstr "processando dados da tabela \"%s.%s\"\n" -#: pg_backup_archiver.c:777 +#: pg_backup_archiver.c:865 #, c-format msgid "executing %s %s\n" msgstr "executando %s %s\n" -#: pg_backup_archiver.c:814 +#: pg_backup_archiver.c:902 #, c-format msgid "disabling triggers for %s\n" msgstr "desabilitando gatilhos para %s\n" -#: pg_backup_archiver.c:840 +#: pg_backup_archiver.c:928 #, c-format msgid "enabling triggers for %s\n" msgstr "habilitando gatilhos para %s\n" -#: pg_backup_archiver.c:870 +#: pg_backup_archiver.c:958 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine\n" msgstr "erro interno -- WriteData não pode ser chamada fora do contexto de uma rotina DataDumper\n" -#: pg_backup_archiver.c:1029 +#: pg_backup_archiver.c:1122 #, c-format msgid "large-object output not supported in chosen format\n" msgstr "cópia de segurança de objetos grandes não é suportada no formato escolhido\n" -#: pg_backup_archiver.c:1083 +#: pg_backup_archiver.c:1176 #, c-format msgid "restored %d large object\n" msgid_plural "restored %d large objects\n" msgstr[0] "restaurado %d objeto grande\n" msgstr[1] "restaurado %d objetos grandes\n" -#: pg_backup_archiver.c:1104 pg_backup_tar.c:741 +#: pg_backup_archiver.c:1197 pg_backup_tar.c:745 #, c-format msgid "restoring large object with OID %u\n" msgstr "restaurando objeto grande com OID %u\n" -#: pg_backup_archiver.c:1116 +#: pg_backup_archiver.c:1209 #, c-format msgid "could not create large object %u: %s" msgstr "não pôde criar objeto grande %u: %s" -#: pg_backup_archiver.c:1121 pg_dump.c:2732 +#: pg_backup_archiver.c:1214 pg_dump.c:2774 #, c-format msgid "could not open large object %u: %s" msgstr "não pôde abrir objeto grande %u: %s" -#: pg_backup_archiver.c:1178 +#: pg_backup_archiver.c:1271 #, c-format msgid "could not open TOC file \"%s\": %s\n" msgstr "não pôde abrir arquivo TOC \"%s\": %s\n" -#: pg_backup_archiver.c:1219 +#: pg_backup_archiver.c:1312 #, c-format msgid "WARNING: line ignored: %s\n" msgstr "AVISO: linha ignorada: %s\n" -#: pg_backup_archiver.c:1226 +#: pg_backup_archiver.c:1319 #, c-format msgid "could not find entry for ID %d\n" msgstr "não pôde encontrar registro para ID %d\n" -#: pg_backup_archiver.c:1247 pg_backup_directory.c:229 -#: pg_backup_directory.c:600 +#: pg_backup_archiver.c:1340 pg_backup_directory.c:230 +#: pg_backup_directory.c:601 #, c-format msgid "could not close TOC file: %s\n" msgstr "não pôde fechar arquivo TOC: %s\n" -#: pg_backup_archiver.c:1356 pg_backup_custom.c:161 pg_backup_directory.c:340 -#: pg_backup_directory.c:586 pg_backup_directory.c:644 -#: pg_backup_directory.c:664 +#: pg_backup_archiver.c:1449 pg_backup_custom.c:162 pg_backup_directory.c:341 +#: pg_backup_directory.c:587 pg_backup_directory.c:645 +#: pg_backup_directory.c:665 #, c-format msgid "could not open output file \"%s\": %s\n" msgstr "não pôde abrir arquivo de saída \"%s\": %s\n" -#: pg_backup_archiver.c:1359 pg_backup_custom.c:168 +#: pg_backup_archiver.c:1452 pg_backup_custom.c:169 #, c-format msgid "could not open output file: %s\n" msgstr "não pôde abrir arquivo de saída: %s\n" -#: pg_backup_archiver.c:1463 +#: pg_backup_archiver.c:1556 #, c-format msgid "wrote %lu byte of large object data (result = %lu)\n" msgid_plural "wrote %lu bytes of large object data (result = %lu)\n" msgstr[0] "escreveu %lu byte de dados de objeto grande (resultado = %lu)\n" msgstr[1] "escreveu %lu bytes de dados de objeto grande (resultado = %lu)\n" -#: pg_backup_archiver.c:1469 +#: pg_backup_archiver.c:1562 #, c-format msgid "could not write to large object (result: %lu, expected: %lu)\n" msgstr "não pôde escrever objeto grande (resultado: %lu, esperado %lu)\n" -#: pg_backup_archiver.c:1562 +#: pg_backup_archiver.c:1655 #, c-format msgid "Error while INITIALIZING:\n" msgstr "Erro ao INICIALIZAR:\n" -#: pg_backup_archiver.c:1567 +#: pg_backup_archiver.c:1660 #, c-format msgid "Error while PROCESSING TOC:\n" msgstr "Erro ao PROCESSAR TOC:\n" -#: pg_backup_archiver.c:1572 +#: pg_backup_archiver.c:1665 #, c-format msgid "Error while FINALIZING:\n" msgstr "Erro ao FINALIZAR:\n" -#: pg_backup_archiver.c:1577 +#: pg_backup_archiver.c:1670 #, c-format msgid "Error from TOC entry %d; %u %u %s %s %s\n" msgstr "Erro no registro do TOC %d; %u %u %s %s %s\n" -#: pg_backup_archiver.c:1650 +#: pg_backup_archiver.c:1743 #, c-format msgid "bad dumpId\n" msgstr "dumpId inválido\n" -#: pg_backup_archiver.c:1671 +#: pg_backup_archiver.c:1764 #, c-format msgid "bad table dumpId for TABLE DATA item\n" msgstr "dumpId de tabela inválido para item TABLE DATA\n" -#: pg_backup_archiver.c:1763 +#: pg_backup_archiver.c:1856 #, c-format msgid "unexpected data offset flag %d\n" msgstr "Marcador de deslocamento de dado %d é inesperado\n" -#: pg_backup_archiver.c:1776 +#: pg_backup_archiver.c:1869 #, c-format msgid "file offset in dump file is too large\n" msgstr "deslocamento no arquivo de cópia de segurança é muito grande\n" -#: pg_backup_archiver.c:1889 +#: pg_backup_archiver.c:1982 #, c-format msgid "attempting to ascertain archive format\n" msgstr "tentando verificar formato de arquivo\n" -#: pg_backup_archiver.c:1915 pg_backup_archiver.c:1925 +#: pg_backup_archiver.c:2008 pg_backup_archiver.c:2018 #, c-format msgid "directory name too long: \"%s\"\n" msgstr "nome de diretório é muito longo: \"%s\"\n" -#: pg_backup_archiver.c:1933 +#: pg_backup_archiver.c:2026 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)\n" msgstr "diretório \"%s\" não parece ser um archive válido (\"toc.dat\" não existe)\n" -#: pg_backup_archiver.c:1941 pg_backup_custom.c:180 pg_backup_custom.c:769 -#: pg_backup_directory.c:213 pg_backup_directory.c:401 +#: pg_backup_archiver.c:2034 pg_backup_custom.c:181 pg_backup_custom.c:770 +#: pg_backup_directory.c:214 pg_backup_directory.c:402 #, c-format msgid "could not open input file \"%s\": %s\n" msgstr "não pôde abrir arquivo de entrada \"%s\": %s\n" -#: pg_backup_archiver.c:1949 pg_backup_custom.c:187 +#: pg_backup_archiver.c:2042 pg_backup_custom.c:188 #, c-format msgid "could not open input file: %s\n" msgstr "não pôde abrir arquivo de entrada: %s\n" -#: pg_backup_archiver.c:1956 +#: pg_backup_archiver.c:2049 #, c-format msgid "could not read input file: %s\n" msgstr "não pôde ler arquivo de entrada: %s\n" -#: pg_backup_archiver.c:1958 +#: pg_backup_archiver.c:2051 #, c-format msgid "input file is too short (read %lu, expected 5)\n" msgstr "arquivo de entrada é muito pequeno (lido %lu, esperado 5)\n" -#: pg_backup_archiver.c:2041 +#: pg_backup_archiver.c:2134 #, c-format msgid "input file appears to be a text format dump. Please use psql.\n" msgstr "arquivo de entrada parece estar no formato texto. Por favor utilize o psql.\n" -#: pg_backup_archiver.c:2047 +#: pg_backup_archiver.c:2140 #, c-format msgid "input file does not appear to be a valid archive (too short?)\n" msgstr "arquivo de entrada não parece ser um arquivo válido (muito pequeno?)\n" -#: pg_backup_archiver.c:2053 +#: pg_backup_archiver.c:2146 #, c-format msgid "input file does not appear to be a valid archive\n" msgstr "arquivo de entrada não parece ser um arquivo válido\n" -#: pg_backup_archiver.c:2073 +#: pg_backup_archiver.c:2166 #, c-format msgid "could not close input file: %s\n" msgstr "não pôde fechar arquivo de entrada: %s\n" -#: pg_backup_archiver.c:2090 +#: pg_backup_archiver.c:2183 #, c-format msgid "allocating AH for %s, format %d\n" msgstr "alocando AH para %s, formato %d\n" -#: pg_backup_archiver.c:2195 +#: pg_backup_archiver.c:2288 #, c-format msgid "unrecognized file format \"%d\"\n" msgstr "formato de arquivo \"%d\" é desconhecido\n" -#: pg_backup_archiver.c:2345 +#: pg_backup_archiver.c:2438 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC\n" msgstr "ID do registro %d fora do intervalo -- talvez o TOC esteja corrompido\n" -#: pg_backup_archiver.c:2461 +#: pg_backup_archiver.c:2554 #, c-format msgid "read TOC entry %d (ID %d) for %s %s\n" msgstr "lendo registro do TOC %d (ID %d) de %s %s\n" -#: pg_backup_archiver.c:2495 +#: pg_backup_archiver.c:2588 #, c-format msgid "unrecognized encoding \"%s\"\n" msgstr "codificação \"%s\" é desconhecida\n" -#: pg_backup_archiver.c:2500 +#: pg_backup_archiver.c:2593 #, c-format msgid "invalid ENCODING item: %s\n" msgstr "item ENCODING inválido: %s\n" -#: pg_backup_archiver.c:2518 +#: pg_backup_archiver.c:2611 #, c-format msgid "invalid STDSTRINGS item: %s\n" msgstr "item STDSTRINGS inválido: %s\n" -#: pg_backup_archiver.c:2735 +#: pg_backup_archiver.c:2834 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "não pôde definir \"%s\" como usuário da sessão: %s" -#: pg_backup_archiver.c:2767 +#: pg_backup_archiver.c:2866 #, c-format msgid "could not set default_with_oids: %s" msgstr "não pôde definir default_with_oids: %s" -#: pg_backup_archiver.c:2905 +#: pg_backup_archiver.c:3004 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "não pôde definir search_path para \"%s\": %s" -#: pg_backup_archiver.c:2966 +#: pg_backup_archiver.c:3065 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "não pôde definir default_tablespace para %s: %s" -#: pg_backup_archiver.c:3053 pg_backup_archiver.c:3236 +#: pg_backup_archiver.c:3152 pg_backup_archiver.c:3337 #, c-format msgid "WARNING: don't know how to set owner for object type %s\n" msgstr "AVISO: não se sabe como definir o dono para tipo de objeto %s\n" -#: pg_backup_archiver.c:3289 +#: pg_backup_archiver.c:3390 #, c-format msgid "WARNING: requested compression not available in this installation -- archive will be uncompressed\n" msgstr "AVISO: compressão requerida não está disponível nesta instalação -- arquivo será descomprimido\n" -#: pg_backup_archiver.c:3328 +#: pg_backup_archiver.c:3429 #, c-format msgid "did not find magic string in file header\n" msgstr "não encontrou cadeia de caracteres mágica no cabeçalho do arquivo\n" -#: pg_backup_archiver.c:3341 +#: pg_backup_archiver.c:3442 #, c-format msgid "unsupported version (%d.%d) in file header\n" msgstr "versão não é suportada (%d.%d) no cabeçalho do arquivo\n" -#: pg_backup_archiver.c:3346 +#: pg_backup_archiver.c:3447 #, c-format msgid "sanity check on integer size (%lu) failed\n" msgstr "verificação de sanidade no tamanho do inteiro (%lu) falhou\n" -#: pg_backup_archiver.c:3350 +#: pg_backup_archiver.c:3451 #, c-format msgid "WARNING: archive was made on a machine with larger integers, some operations might fail\n" msgstr "AVISO: arquivo foi feito em uma máquina com inteiros longos, algumas operações podem falhar\n" -#: pg_backup_archiver.c:3360 +#: pg_backup_archiver.c:3461 #, c-format msgid "expected format (%d) differs from format found in file (%d)\n" msgstr "formato esperado (%d) difere do formato encontrado no arquivo (%d)\n" -#: pg_backup_archiver.c:3376 +#: pg_backup_archiver.c:3477 #, c-format msgid "WARNING: archive is compressed, but this installation does not support compression -- no data will be available\n" msgstr "AVISO: arquivo está comprimido, mas esta instalação não suporta compressão -- nenhum dado está disponível\n" -#: pg_backup_archiver.c:3394 +#: pg_backup_archiver.c:3495 #, c-format msgid "WARNING: invalid creation date in header\n" msgstr "AVISO: data de criação inválida no cabeçalho\n" -#: pg_backup_archiver.c:3482 +#: pg_backup_archiver.c:3571 #, c-format msgid "entering restore_toc_entries_prefork\n" msgstr "executando restore_toc_entries_prefork\n" -#: pg_backup_archiver.c:3526 +#: pg_backup_archiver.c:3615 #, c-format msgid "processing item %d %s %s\n" msgstr "processando item %d %s %s\n" -#: pg_backup_archiver.c:3578 +#: pg_backup_archiver.c:3667 #, c-format msgid "entering restore_toc_entries_parallel\n" msgstr "executando restore_toc_entries_parallel\n" -#: pg_backup_archiver.c:3626 +#: pg_backup_archiver.c:3715 #, c-format msgid "entering main parallel loop\n" msgstr "executando laço paralelo principal\n" -#: pg_backup_archiver.c:3637 +#: pg_backup_archiver.c:3726 #, c-format msgid "skipping item %d %s %s\n" msgstr "ignorando item %d %s %s\n" -#: pg_backup_archiver.c:3647 +#: pg_backup_archiver.c:3736 #, c-format msgid "launching item %d %s %s\n" msgstr "iniciando item %d %s %s\n" -#: pg_backup_archiver.c:3705 +#: pg_backup_archiver.c:3794 #, c-format msgid "finished main parallel loop\n" msgstr "laço paralelo principal terminado\n" -#: pg_backup_archiver.c:3714 +#: pg_backup_archiver.c:3803 #, c-format msgid "entering restore_toc_entries_postfork\n" msgstr "executando restore_toc_entries_postfork\n" -#: pg_backup_archiver.c:3732 +#: pg_backup_archiver.c:3821 #, c-format msgid "processing missed item %d %s %s\n" msgstr "iniciando item adiado %d %s %s\n" -#: pg_backup_archiver.c:3881 +#: pg_backup_archiver.c:3970 #, c-format msgid "no item ready\n" msgstr "nenhum item está pronto\n" -#: pg_backup_archiver.c:3931 +#: pg_backup_archiver.c:4020 #, c-format msgid "could not find slot of finished worker\n" msgstr "não pôde encontrar entrada do processo filho terminado\n" -#: pg_backup_archiver.c:3933 +#: pg_backup_archiver.c:4022 #, c-format msgid "finished item %d %s %s\n" msgstr "item terminado %d %s %s\n" -#: pg_backup_archiver.c:3946 +#: pg_backup_archiver.c:4035 #, c-format msgid "worker process failed: exit code %d\n" msgstr "processo filho falhou: código de saída %d\n" -#: pg_backup_archiver.c:4108 +#: pg_backup_archiver.c:4197 #, c-format msgid "transferring dependency %d -> %d to %d\n" msgstr "tranferindo dependência %d -> %d para %d\n" -#: pg_backup_archiver.c:4177 +#: pg_backup_archiver.c:4270 #, c-format msgid "reducing dependencies for %d\n" msgstr "reduzindo dependências para %d\n" -#: pg_backup_archiver.c:4216 +#: pg_backup_archiver.c:4309 #, c-format msgid "table \"%s\" could not be created, will not restore its data\n" msgstr "tabela \"%s\" não pôde ser criada, não restaurará os seus dados\n" #. translator: this is a module name -#: pg_backup_custom.c:93 +#: pg_backup_custom.c:94 msgid "custom archiver" msgstr "arquivador personalizado" -#: pg_backup_custom.c:383 pg_backup_null.c:151 +#: pg_backup_custom.c:384 pg_backup_null.c:149 #, c-format msgid "invalid OID for large object\n" msgstr "OID inválido para objeto grande\n" -#: pg_backup_custom.c:454 +#: pg_backup_custom.c:455 #, c-format msgid "unrecognized data block type (%d) while searching archive\n" msgstr "tipo de bloco de dados desconhecido (%d) durante busca no arquivo\n" -#: pg_backup_custom.c:465 +#: pg_backup_custom.c:466 #, c-format msgid "error during file seek: %s\n" msgstr "erro durante busca no arquivo: %s\n" -#: pg_backup_custom.c:475 +#: pg_backup_custom.c:476 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to lack of data offsets in archive\n" msgstr "não pôde encontrar bloco com ID %d no arquivo -- possivelmente por causa de pedido de restauração fora de ordem, que não pode ser manipulado pela falta de deslocamentos no arquivo\n" -#: pg_backup_custom.c:480 +#: pg_backup_custom.c:481 #, c-format msgid "could not find block ID %d in archive -- possibly due to out-of-order restore request, which cannot be handled due to non-seekable input file\n" msgstr "não pôde encontrar bloco com ID %d no arquivo -- possivelmente por causa de pedido de restauração fora de ordem, que não pode ser manipulado por arquivo de entrada não posicionável\n" -#: pg_backup_custom.c:485 +#: pg_backup_custom.c:486 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive\n" msgstr "não pôde encontrar bloco com ID %d em arquivo -- possivelmente arquivo corrompido\n" -#: pg_backup_custom.c:492 +#: pg_backup_custom.c:493 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d\n" msgstr "encontrado bloco inesperado com ID (%d) durante leitura de dados -- esperado %d\n" -#: pg_backup_custom.c:506 +#: pg_backup_custom.c:507 #, c-format msgid "unrecognized data block type %d while restoring archive\n" msgstr "tipo de bloco de dados desconhecido %d durante restauração do arquivo\n" -#: pg_backup_custom.c:708 pg_backup_custom.c:758 pg_backup_custom.c:907 -#: pg_backup_tar.c:1086 +#: pg_backup_custom.c:709 pg_backup_custom.c:759 pg_backup_custom.c:908 +#: pg_backup_tar.c:1090 #, c-format msgid "could not determine seek position in archive file: %s\n" msgstr "não pôde determinar posição de busca no arquivo: %s\n" -#: pg_backup_custom.c:726 pg_backup_custom.c:763 +#: pg_backup_custom.c:727 pg_backup_custom.c:764 #, c-format msgid "could not close archive file: %s\n" msgstr "não pôde fechar arquivo: %s\n" -#: pg_backup_custom.c:745 +#: pg_backup_custom.c:746 #, c-format msgid "can only reopen input archives\n" msgstr "não pôde reabrir arquivos de entrada\n" -#: pg_backup_custom.c:752 +#: pg_backup_custom.c:753 #, c-format msgid "parallel restore from standard input is not supported\n" msgstr "restauração paralela da entrada padrão não é suportada\n" -#: pg_backup_custom.c:754 +#: pg_backup_custom.c:755 #, c-format msgid "parallel restore from non-seekable file is not supported\n" msgstr "restauração paralela de arquivo não posicionável não é suportada\n" -#: pg_backup_custom.c:773 +#: pg_backup_custom.c:774 #, c-format msgid "could not set seek position in archive file: %s\n" msgstr "não pôde definir posição de busca no arquivo: %s\n" -#: pg_backup_custom.c:791 +#: pg_backup_custom.c:792 #, c-format msgid "compressor active\n" msgstr "compressor ativo\n" -#: pg_backup_custom.c:911 +#: pg_backup_custom.c:912 #, c-format msgid "WARNING: ftell mismatch with expected position -- ftell used\n" msgstr "AVISO: ftell não corresponde com posição esperada -- ftell utilizado\n" #. translator: this is a module name -#: pg_backup_db.c:28 +#: pg_backup_db.c:29 msgid "archiver (db)" msgstr "arquivador (bd)" -#: pg_backup_db.c:43 +#: pg_backup_db.c:44 #, c-format msgid "could not get server_version from libpq\n" msgstr "não pôde obter versão do servidor a partir da libpq\n" -#: pg_backup_db.c:54 pg_dumpall.c:1933 +#: pg_backup_db.c:55 pg_dumpall.c:1965 #, c-format msgid "server version: %s; %s version: %s\n" msgstr "versão do servidor: %s; versão do %s: %s\n" -#: pg_backup_db.c:56 pg_dumpall.c:1935 +#: pg_backup_db.c:57 pg_dumpall.c:1967 #, c-format msgid "aborting because of server version mismatch\n" msgstr "interrompendo porque a versão do servidor não corresponde\n" -#: pg_backup_db.c:127 +#: pg_backup_db.c:128 #, c-format msgid "connecting to database \"%s\" as user \"%s\"\n" msgstr "conectando ao banco de dados \"%s\" como usuário \"%s\"\n" -#: pg_backup_db.c:132 pg_backup_db.c:184 pg_backup_db.c:231 pg_backup_db.c:277 -#: pg_dumpall.c:1763 pg_dumpall.c:1871 +#: pg_backup_db.c:133 pg_backup_db.c:185 pg_backup_db.c:232 pg_backup_db.c:278 +#: pg_dumpall.c:1795 pg_dumpall.c:1903 msgid "Password: " msgstr "Senha: " -#: pg_backup_db.c:165 +#: pg_backup_db.c:166 #, c-format msgid "failed to reconnect to database\n" msgstr "falhou ao reconectar ao banco de dados\n" -#: pg_backup_db.c:170 +#: pg_backup_db.c:171 #, c-format msgid "could not reconnect to database: %s" msgstr "não pôde reconectar ao banco de dados: %s" -#: pg_backup_db.c:186 +#: pg_backup_db.c:187 #, c-format msgid "connection needs password\n" msgstr "conexão precisa de senha\n" -#: pg_backup_db.c:227 +#: pg_backup_db.c:228 #, c-format msgid "already connected to a database\n" msgstr "já está conectado ao banco de dados\n" -#: pg_backup_db.c:269 +#: pg_backup_db.c:270 #, c-format msgid "failed to connect to database\n" msgstr "falhou ao conectar ao banco de dados\n" -#: pg_backup_db.c:288 +#: pg_backup_db.c:289 #, c-format msgid "connection to database \"%s\" failed: %s" msgstr "conexão com banco de dados \"%s\" falhou: %s" -#: pg_backup_db.c:343 +#: pg_backup_db.c:344 #, c-format msgid "query failed: %s" msgstr "consulta falhou: %s" -#: pg_backup_db.c:345 +#: pg_backup_db.c:346 #, c-format msgid "query was: %s\n" msgstr "consulta foi: %s\n" -#: pg_backup_db.c:409 +#: pg_backup_db.c:410 #, c-format msgid "%s: %s Command was: %s\n" msgstr "%s: %s Comando foi: %s\n" -#: pg_backup_db.c:465 pg_backup_db.c:537 pg_backup_db.c:544 +#: pg_backup_db.c:466 pg_backup_db.c:540 pg_backup_db.c:547 msgid "could not execute query" msgstr "não pôde executar consulta" -#: pg_backup_db.c:516 +#: pg_backup_db.c:519 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "erro retornado pelo PQputCopyData: %s" -#: pg_backup_db.c:563 +#: pg_backup_db.c:568 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "erro retornado pelo PQputCopyEnd: %s" -#: pg_backup_db.c:569 +#: pg_backup_db.c:574 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "COPY falhou para tabela \"%s\": %s" -#: pg_backup_db.c:580 +#: pg_backup_db.c:587 msgid "could not start database transaction" msgstr "não pôde iniciar transação do banco de dados" -#: pg_backup_db.c:586 +#: pg_backup_db.c:595 msgid "could not commit database transaction" msgstr "não pôde efetivar transação do banco de dados" #. translator: this is a module name -#: pg_backup_directory.c:63 +#: pg_backup_directory.c:64 msgid "directory archiver" msgstr "arquivador diretório" -#: pg_backup_directory.c:161 +#: pg_backup_directory.c:162 #, c-format msgid "no output directory specified\n" msgstr "nenhum diretório de destino foi especificado\n" -#: pg_backup_directory.c:190 +#: pg_backup_directory.c:191 #, c-format msgid "could not read directory \"%s\": %s\n" msgstr "não pôde ler diretório \"%s\": %s\n" -#: pg_backup_directory.c:194 +#: pg_backup_directory.c:195 #, c-format msgid "could not close directory \"%s\": %s\n" msgstr "não pôde fechar diretório \"%s\": %s\n" -#: pg_backup_directory.c:200 +#: pg_backup_directory.c:201 #, c-format msgid "could not create directory \"%s\": %s\n" msgstr "não pôde criar diretório \"%s\": %s\n" -#: pg_backup_directory.c:412 +#: pg_backup_directory.c:413 #, c-format msgid "could not close data file: %s\n" msgstr "não pôde fechar arquivo de dados: %s\n" -#: pg_backup_directory.c:453 +#: pg_backup_directory.c:454 #, c-format msgid "could not open large object TOC file \"%s\" for input: %s\n" msgstr "não pôde abrir arquivo TOC de objetos grandes \"%s\" para entrada: %s\n" -#: pg_backup_directory.c:464 +#: pg_backup_directory.c:465 #, c-format msgid "invalid line in large object TOC file \"%s\": \"%s\"\n" msgstr "linha inválida em arquivo TOC de objetos grandes \"%s\": \"%s\"\n" -#: pg_backup_directory.c:473 +#: pg_backup_directory.c:474 #, c-format msgid "error reading large object TOC file \"%s\"\n" msgstr "erro ao ler arquivo TOC de objetos grandes \"%s\"\n" -#: pg_backup_directory.c:477 +#: pg_backup_directory.c:478 #, c-format msgid "could not close large object TOC file \"%s\": %s\n" msgstr "não pôde fechar arquivo TOC de objetos grandes \"%s\": %s\n" -#: pg_backup_directory.c:687 +#: pg_backup_directory.c:688 #, c-format msgid "could not write to blobs TOC file\n" msgstr "não pôde escrever em arquivo TOC de objetos grandes\n" -#: pg_backup_directory.c:719 +#: pg_backup_directory.c:720 #, c-format msgid "file name too long: \"%s\"\n" msgstr "nome de arquivo muito longo: \"%s\"\n" -#: pg_backup_directory.c:805 +#: pg_backup_directory.c:806 #, c-format msgid "error during backup\n" msgstr "erro durante cópia de segurança\n" -#: pg_backup_null.c:76 +#: pg_backup_null.c:74 #, c-format msgid "this format cannot be read\n" msgstr "este formato não pode ser lido\n" #. translator: this is a module name -#: pg_backup_tar.c:109 +#: pg_backup_tar.c:108 msgid "tar archiver" msgstr "arquivador tar" -#: pg_backup_tar.c:190 +#: pg_backup_tar.c:189 #, c-format msgid "could not open TOC file \"%s\" for output: %s\n" msgstr "não pôde abrir arquivo TOC \"%s\" para saída: %s\n" -#: pg_backup_tar.c:198 +#: pg_backup_tar.c:197 #, c-format msgid "could not open TOC file for output: %s\n" msgstr "não pôde abrir arquivo TOC para saída: %s\n" -#: pg_backup_tar.c:226 pg_backup_tar.c:382 +#: pg_backup_tar.c:218 pg_backup_tar.c:374 #, c-format msgid "compression is not supported by tar archive format\n" msgstr "compressão não é suportada pelo formato tar\n" -#: pg_backup_tar.c:234 +#: pg_backup_tar.c:226 #, c-format msgid "could not open TOC file \"%s\" for input: %s\n" msgstr "não pôde abrir arquivo TOC \"%s\" para entrada: %s\n" -#: pg_backup_tar.c:241 +#: pg_backup_tar.c:233 #, c-format msgid "could not open TOC file for input: %s\n" msgstr "não pôde abrir arquivo TOC para entrada: %s\n" -#: pg_backup_tar.c:368 +#: pg_backup_tar.c:360 #, c-format msgid "could not find file \"%s\" in archive\n" msgstr "não pôde encontrar arquivo \"%s\" no arquivo de dados\n" -#: pg_backup_tar.c:424 +#: pg_backup_tar.c:426 #, c-format msgid "could not generate temporary file name: %s\n" msgstr "não pôde gerar arquivo temporário: %s\n" -#: pg_backup_tar.c:433 +#: pg_backup_tar.c:437 #, c-format msgid "could not open temporary file\n" msgstr "não pôde abrir arquivo temporário\n" -#: pg_backup_tar.c:460 +#: pg_backup_tar.c:464 #, c-format msgid "could not close tar member\n" msgstr "não pôde fechar membro tar\n" -#: pg_backup_tar.c:573 +#: pg_backup_tar.c:577 #, c-format msgid "internal error -- neither th nor fh specified in tarReadRaw()\n" msgstr "erro interno -- th e fh não foram especificados em tarReadRaw()\n" -#: pg_backup_tar.c:696 +#: pg_backup_tar.c:700 #, c-format msgid "unexpected COPY statement syntax: \"%s\"\n" msgstr "sintaxe do comando COPY inesperada: \"%s\"\n" -#: pg_backup_tar.c:958 +#: pg_backup_tar.c:962 #, c-format msgid "invalid OID for large object (%u)\n" msgstr "OID inválido para objeto grande (%u)\n" -#: pg_backup_tar.c:1095 +#: pg_backup_tar.c:1099 #, c-format msgid "archive member too large for tar format\n" msgstr "membro de arquivo muito grande para o formato tar\n" -#: pg_backup_tar.c:1109 +#: pg_backup_tar.c:1113 #, c-format msgid "could not close temporary file: %s\n" msgstr "não pôde fechar arquivo temporário: %s\n" -#: pg_backup_tar.c:1119 +#: pg_backup_tar.c:1123 #, c-format msgid "actual file length (%s) does not match expected (%s)\n" msgstr "tamanho do arquivo atual (%s) não corresponde ao esperado (%s)\n" -#: pg_backup_tar.c:1156 +#: pg_backup_tar.c:1160 #, c-format msgid "moving from position %s to next member at file position %s\n" msgstr "movendo da posição %s para próximo membro na posição %s do arquivo\n" -#: pg_backup_tar.c:1167 +#: pg_backup_tar.c:1171 #, c-format msgid "now at file position %s\n" msgstr "agora na posição %s do arquivo\n" -#: pg_backup_tar.c:1176 pg_backup_tar.c:1206 +#: pg_backup_tar.c:1180 pg_backup_tar.c:1210 #, c-format msgid "could not find header for file \"%s\" in tar archive\n" msgstr "não pôde encontrar cabeçalho do arquivo \"%s\" no arquivo tar\n" -#: pg_backup_tar.c:1190 +#: pg_backup_tar.c:1194 #, c-format msgid "skipping tar member %s\n" msgstr "ignorando membro tar %s\n" -#: pg_backup_tar.c:1194 +#: pg_backup_tar.c:1198 #, c-format msgid "restoring data out of order is not supported in this archive format: \"%s\" is required, but comes before \"%s\" in the archive file.\n" msgstr "restaurar dados fora da ordem não é suportado neste formato de arquivo: \"%s\" é requerido, mas vem antes de \"%s\" no arquivo.\n" -#: pg_backup_tar.c:1241 +#: pg_backup_tar.c:1245 #, c-format msgid "incomplete tar header found (%lu byte)\n" msgid_plural "incomplete tar header found (%lu bytes)\n" msgstr[0] "cabeçalho tar incompleto encontrado (%lu byte)\n" msgstr[1] "cabeçalho tar incompleto encontrado (%lu bytes)\n" -#: pg_backup_tar.c:1279 +#: pg_backup_tar.c:1283 #, c-format msgid "TOC Entry %s at %s (length %lu, checksum %d)\n" msgstr "Registro TOC %s em %s (tamanho %lu, soma de verificação %d)\n" -#: pg_backup_tar.c:1289 +#: pg_backup_tar.c:1293 #, c-format msgid "corrupt tar header found in %s (expected %d, computed %d) file position %s\n" msgstr "cabeçalho tar corrompido foi encontrado em %s (esperado %d, computado %d) na posição %s do arquivo\n" @@ -1274,9 +1294,9 @@ msgstr "cabeçalho tar corrompido foi encontrado em %s (esperado %d, computado % msgid "%s: unrecognized section name: \"%s\"\n" msgstr "%s: nome de seção desconhecido: \"%s\"\n" -#: pg_backup_utils.c:56 pg_dump.c:539 pg_dump.c:556 pg_dumpall.c:305 -#: pg_dumpall.c:315 pg_dumpall.c:325 pg_dumpall.c:334 pg_dumpall.c:350 -#: pg_dumpall.c:408 pg_restore.c:278 pg_restore.c:294 pg_restore.c:306 +#: pg_backup_utils.c:56 pg_dump.c:521 pg_dump.c:538 pg_dumpall.c:300 +#: pg_dumpall.c:310 pg_dumpall.c:320 pg_dumpall.c:329 pg_dumpall.c:345 +#: pg_dumpall.c:403 pg_restore.c:277 pg_restore.c:293 pg_restore.c:305 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Tente \"%s --help\" para obter informações adicionais.\n" @@ -1286,52 +1306,57 @@ msgstr "Tente \"%s --help\" para obter informações adicionais.\n" msgid "out of on_exit_nicely slots\n" msgstr "acabaram os elementos para on_exit_nicely\n" -#: pg_dump.c:554 pg_dumpall.c:313 pg_restore.c:292 +#: pg_dump.c:491 +#, c-format +msgid "compression level must be in range 0..9\n" +msgstr "nível de compressão deve estar no intervalo de 0..9\n" + +#: pg_dump.c:536 pg_dumpall.c:308 pg_restore.c:291 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: muitos argumentos de linha de comando (primeiro é \"%s\")\n" -#: pg_dump.c:567 +#: pg_dump.c:549 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together\n" msgstr "opções -s/--schema-only e -a/--data-only não podem ser utilizadas juntas\n" -#: pg_dump.c:573 +#: pg_dump.c:555 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together\n" msgstr "opções -c/--clean e -a/--data-only não podem ser utilizadas juntas\n" -#: pg_dump.c:579 +#: pg_dump.c:561 #, c-format msgid "options --inserts/--column-inserts and -o/--oids cannot be used together\n" msgstr "opções --inserts/--column-inserts e -o/--oids não podem ser utilizadas juntas\n" -#: pg_dump.c:580 +#: pg_dump.c:562 #, c-format msgid "(The INSERT command cannot set OIDs.)\n" msgstr "(O comando INSERT não pode definir OIDs.)\n" -#: pg_dump.c:585 +#: pg_dump.c:567 #, c-format msgid "option --if-exists requires option -c/--clean\n" msgstr "opção --if-exists requer opção -c/--clean\n" -#: pg_dump.c:613 +#: pg_dump.c:595 #, c-format msgid "%s: invalid number of parallel jobs\n" msgstr "%s: número de tarefas paralelas inválido\n" -#: pg_dump.c:617 +#: pg_dump.c:599 #, c-format msgid "parallel backup only supported by the directory format\n" msgstr "cópia de segurança paralela somente é suportada pelo formato diretório\n" -#: pg_dump.c:627 +#: pg_dump.c:609 #, c-format msgid "could not open output file \"%s\" for writing\n" msgstr "não pôde abrir arquivo de saída \"%s\" para escrita\n" -#: pg_dump.c:686 +#: pg_dump.c:668 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1342,22 +1367,27 @@ msgstr "" "Execute com --no-synchronized-snapshots se você não precisa de\n" "instantâneos sincronizados.\n" -#: pg_dump.c:699 +#: pg_dump.c:675 +#, c-format +msgid "Exported snapshots are not supported by this server version.\n" +msgstr "Instantâneos exportados não são suportados por esta versão do servidor.\n" + +#: pg_dump.c:686 #, c-format msgid "last built-in OID is %u\n" msgstr "último OID interno é %u\n" -#: pg_dump.c:708 +#: pg_dump.c:695 #, c-format msgid "No matching schemas were found\n" msgstr "Nenhum esquema correspondente foi encontrado\n" -#: pg_dump.c:720 +#: pg_dump.c:707 #, c-format msgid "No matching tables were found\n" msgstr "Nenhuma tabela correspondente foi encontrada\n" -#: pg_dump.c:865 +#: pg_dump.c:861 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1366,17 +1396,17 @@ msgstr "" "%s salva um banco de dados em um arquivo texto ou em outros formatos.\n" "\n" -#: pg_dump.c:866 pg_dumpall.c:553 pg_restore.c:432 +#: pg_dump.c:862 pg_dumpall.c:548 pg_restore.c:432 #, c-format msgid "Usage:\n" msgstr "Uso:\n" -#: pg_dump.c:867 +#: pg_dump.c:863 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPÇÃO]... [NOMEBD]\n" -#: pg_dump.c:869 pg_dumpall.c:556 pg_restore.c:435 +#: pg_dump.c:865 pg_dumpall.c:551 pg_restore.c:435 #, c-format msgid "" "\n" @@ -1385,12 +1415,12 @@ msgstr "" "\n" "Opções gerais:\n" -#: pg_dump.c:870 +#: pg_dump.c:866 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=ARQUIVO nome do arquivo ou diretório de saída\n" -#: pg_dump.c:871 +#: pg_dump.c:867 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1399,37 +1429,37 @@ msgstr "" " -F, --format=c|d|t|p formato do arquivo de saída (personalizado, diretório,\n" " tar, texto (padrão))\n" -#: pg_dump.c:873 +#: pg_dump.c:869 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM use esse número de tarefas paralelas para copiar\n" -#: pg_dump.c:874 +#: pg_dump.c:870 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose modo informações detalhadas\n" -#: pg_dump.c:875 pg_dumpall.c:558 +#: pg_dump.c:871 pg_dumpall.c:553 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informação sobre a versão e termina\n" -#: pg_dump.c:876 +#: pg_dump.c:872 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 nível de compressão para formatos comprimidos\n" -#: pg_dump.c:877 pg_dumpall.c:559 +#: pg_dump.c:873 pg_dumpall.c:554 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=TEMPO falha após esperar TEMPO por um travamento de tabela\n" -#: pg_dump.c:878 pg_dumpall.c:560 +#: pg_dump.c:874 pg_dumpall.c:555 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra essa ajuda e termina\n" -#: pg_dump.c:880 pg_dumpall.c:561 +#: pg_dump.c:876 pg_dumpall.c:556 #, c-format msgid "" "\n" @@ -1438,47 +1468,47 @@ msgstr "" "\n" "Opções que controlam a saída do conteúdo:\n" -#: pg_dump.c:881 pg_dumpall.c:562 +#: pg_dump.c:877 pg_dumpall.c:557 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only copia somente os dados, não o esquema\n" -#: pg_dump.c:882 +#: pg_dump.c:878 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs inclui objetos grandes na cópia de segurança\n" -#: pg_dump.c:883 pg_restore.c:446 +#: pg_dump.c:879 pg_restore.c:446 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr " -c, --clean exclui (remove) bancos de dados antes de criá-lo novamente\n" -#: pg_dump.c:884 +#: pg_dump.c:880 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr " -C, --create inclui comandos para criação dos bancos de dados na cópia de segurança\n" -#: pg_dump.c:885 +#: pg_dump.c:881 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=CODIFICAÇÃO copia dados na codificação CODIFICAÇÃO\n" -#: pg_dump.c:886 +#: pg_dump.c:882 #, c-format msgid " -n, --schema=SCHEMA dump the named schema(s) only\n" msgstr " -n, --schema=ESQUEMA copia somente o(s) esquema(s) especificado(s)\n" -#: pg_dump.c:887 +#: pg_dump.c:883 #, c-format msgid " -N, --exclude-schema=SCHEMA do NOT dump the named schema(s)\n" msgstr " -N, --exclude-schema=ESQUEMA NÃO copia o(s) esquema(s) especificado(s)\n" -#: pg_dump.c:888 pg_dumpall.c:565 +#: pg_dump.c:884 pg_dumpall.c:560 #, c-format msgid " -o, --oids include OIDs in dump\n" msgstr " -o, --oids inclui OIDs na cópia de segurança\n" -#: pg_dump.c:889 +#: pg_dump.c:885 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1487,102 +1517,117 @@ msgstr "" " -O, --no-owner ignora restauração do dono dos objetos\n" " no formato texto\n" -#: pg_dump.c:891 pg_dumpall.c:568 +#: pg_dump.c:887 pg_dumpall.c:563 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only copia somente o esquema, e não os dados\n" -#: pg_dump.c:892 +#: pg_dump.c:888 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr " -S, --superuser=NOME nome de super-usuário a ser usado no formato texto\n" -#: pg_dump.c:893 +#: pg_dump.c:889 #, c-format msgid " -t, --table=TABLE dump the named table(s) only\n" msgstr " -t, --table=TABELA copia somente a(s) tabela(s) especificada(s)\n" -#: pg_dump.c:894 +#: pg_dump.c:890 #, c-format msgid " -T, --exclude-table=TABLE do NOT dump the named table(s)\n" msgstr " -T, --exclude-table=TABELA NÃO copia a(s) tabela(s) especificada(s)\n" -#: pg_dump.c:895 pg_dumpall.c:571 +#: pg_dump.c:891 pg_dumpall.c:566 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges não copia os privilégios (grant/revoke)\n" -#: pg_dump.c:896 pg_dumpall.c:572 +#: pg_dump.c:892 pg_dumpall.c:567 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade usado somente por utilitários de atualização\n" -#: pg_dump.c:897 pg_dumpall.c:573 +#: pg_dump.c:893 pg_dumpall.c:568 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr " --column-inserts copia dados utilizando comandos INSERT com nomes das colunas\n" -#: pg_dump.c:898 pg_dumpall.c:574 +#: pg_dump.c:894 pg_dumpall.c:569 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr " --disable-dollar-quoting desabilita delimitação por cifrão, usa delimitadores do padrão SQL\n" -#: pg_dump.c:899 pg_dumpall.c:575 pg_restore.c:462 +#: pg_dump.c:895 pg_dumpall.c:570 pg_restore.c:462 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr " --disable-triggers desabilita gatilhos durante a restauração do tipo somente dados\n" -#: pg_dump.c:900 +#: pg_dump.c:896 +#, fuzzy, c-format +msgid "" +" --enable-row-security enable row security (dump only content user has\n" +" access to)\n" +msgstr "" +" --enable-row-security habilita segurança de registros (copia somente conteúdo\n" +" que usuário tenha acesso)\n" + +#: pg_dump.c:898 #, c-format msgid " --exclude-table-data=TABLE do NOT dump data for the named table(s)\n" msgstr " --exclude-table-data=TABELA NÃO copia os dados da(s) tabela(s) especificada(s)\n" -#: pg_dump.c:901 pg_dumpall.c:576 pg_restore.c:463 +#: pg_dump.c:899 pg_dumpall.c:571 pg_restore.c:464 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists use IF EXISTS ao remover objetos\n" -#: pg_dump.c:902 pg_dumpall.c:577 +#: pg_dump.c:900 pg_dumpall.c:572 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts copia dados utilizando comandos INSERT, ao invés de comandos COPY\n" -#: pg_dump.c:903 pg_dumpall.c:578 +#: pg_dump.c:901 pg_dumpall.c:573 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels não copia atribuições de rótulos de segurança\n" -#: pg_dump.c:904 +#: pg_dump.c:902 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr " --no-synchronized-snapshots não utiliza instantâneos sincronizados em tarefas paralelas\n" -#: pg_dump.c:905 pg_dumpall.c:579 +#: pg_dump.c:903 pg_dumpall.c:574 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces não copia atribuições de tablespaces\n" -#: pg_dump.c:906 pg_dumpall.c:580 +#: pg_dump.c:904 pg_dumpall.c:575 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data não copia dados de tabelas unlogged\n" -#: pg_dump.c:907 pg_dumpall.c:581 +#: pg_dump.c:905 pg_dumpall.c:576 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr " --quote-all-identifiers todos os identificadores entre aspas, mesmo que não sejam palavras chave\n" -#: pg_dump.c:908 +#: pg_dump.c:906 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr " --section=SEÇÃO copia seção especificada (pre-data, data ou post-data)\n" -#: pg_dump.c:909 +#: pg_dump.c:907 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr " --serializable-deferrable espera até que a cópia seja executada sem anomalias\n" -#: pg_dump.c:910 pg_dumpall.c:582 pg_restore.c:469 +#: pg_dump.c:908 +#, fuzzy, c-format +#| msgid " --snapshot=SNAPSHOT use given synchronous snapshot for the dump\n" +msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" +msgstr " --snapshot=INSTANTÂNEO utiliza instantâneo síncrono informado para a cópia\n" + +#: pg_dump.c:909 pg_dumpall.c:577 pg_restore.c:470 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1593,7 +1638,7 @@ msgstr "" " usa comandos SET SESSION AUTHORIZATION ao invés de\n" " comandos ALTER OWNER para definir o dono\n" -#: pg_dump.c:914 pg_dumpall.c:586 pg_restore.c:473 +#: pg_dump.c:913 pg_dumpall.c:581 pg_restore.c:474 #, c-format msgid "" "\n" @@ -1602,42 +1647,42 @@ msgstr "" "\n" "Opções de conexão:\n" -#: pg_dump.c:915 +#: pg_dump.c:914 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=NOMEBD banco de dados a ser copiado\n" -#: pg_dump.c:916 pg_dumpall.c:588 pg_restore.c:474 +#: pg_dump.c:915 pg_dumpall.c:583 pg_restore.c:475 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=MÁQUINA máquina do servidor de banco de dados ou diretório do soquete\n" -#: pg_dump.c:917 pg_dumpall.c:590 pg_restore.c:475 +#: pg_dump.c:916 pg_dumpall.c:585 pg_restore.c:476 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORTA número da porta do servidor de banco de dados\n" -#: pg_dump.c:918 pg_dumpall.c:591 pg_restore.c:476 +#: pg_dump.c:917 pg_dumpall.c:586 pg_restore.c:477 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NOME conecta como usuário do banco de dados especificado\n" -#: pg_dump.c:919 pg_dumpall.c:592 pg_restore.c:477 +#: pg_dump.c:918 pg_dumpall.c:587 pg_restore.c:478 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pergunta senha\n" -#: pg_dump.c:920 pg_dumpall.c:593 pg_restore.c:478 +#: pg_dump.c:919 pg_dumpall.c:588 pg_restore.c:479 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password pergunta senha (pode ocorrer automaticamente)\n" -#: pg_dump.c:921 pg_dumpall.c:594 +#: pg_dump.c:920 pg_dumpall.c:589 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=NOMEROLE executa SET ROLE antes da cópia de segurança\n" -#: pg_dump.c:923 +#: pg_dump.c:922 #, c-format msgid "" "\n" @@ -1650,7 +1695,7 @@ msgstr "" "PGDATABASE é utilizada.\n" "\n" -#: pg_dump.c:925 pg_dumpall.c:598 pg_restore.c:485 +#: pg_dump.c:924 pg_dumpall.c:593 pg_restore.c:486 #, c-format msgid "Report bugs to .\n" msgstr "Relate erros a .\n" @@ -1660,316 +1705,346 @@ msgstr "Relate erros a .\n" msgid "invalid client encoding \"%s\" specified\n" msgstr "codificação de cliente \"%s\" especificada é inválida\n" -#: pg_dump.c:1105 +#: pg_dump.c:1128 #, c-format msgid "invalid output format \"%s\" specified\n" msgstr "formato de saída especificado \"%s\" é inválido\n" -#: pg_dump.c:1127 +#: pg_dump.c:1150 #, c-format msgid "server version must be at least 7.3 to use schema selection switches\n" msgstr "versão do servidor deve ser pelo menos versão 7.3 para utilizar opções com esquemas\n" -#: pg_dump.c:1403 +#: pg_dump.c:1439 #, c-format -msgid "dumping contents of table %s\n" -msgstr "copiando conteúdo da tabela %s\n" +msgid "dumping contents of table \"%s.%s\"\n" +msgstr "copiando conteúdo da tabela \"%s.%s\"\n" -#: pg_dump.c:1526 +#: pg_dump.c:1563 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed.\n" msgstr "Cópia do conteúdo da tabela \"%s\" falhou: PQgetCopyData() falhou.\n" -#: pg_dump.c:1527 pg_dump.c:1537 +#: pg_dump.c:1564 pg_dump.c:1574 #, c-format msgid "Error message from server: %s" msgstr "Mensagem de erro do servidor: %s" -#: pg_dump.c:1528 pg_dump.c:1538 +#: pg_dump.c:1565 pg_dump.c:1575 #, c-format msgid "The command was: %s\n" msgstr "O comando foi: %s\n" -#: pg_dump.c:1536 +#: pg_dump.c:1573 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed.\n" msgstr "Cópia do conteúdo da tabela \"%s\" falhou: PQgetResult() falhou.\n" -#: pg_dump.c:2174 +#: pg_dump.c:2212 #, c-format msgid "saving database definition\n" msgstr "salvando definição do banco de dados\n" -#: pg_dump.c:2503 +#: pg_dump.c:2545 #, c-format msgid "saving encoding = %s\n" msgstr "salvando codificação = %s\n" -#: pg_dump.c:2530 +#: pg_dump.c:2572 #, c-format msgid "saving standard_conforming_strings = %s\n" msgstr "salvando padrão de escape de cadeia de caracteres = %s\n" -#: pg_dump.c:2563 +#: pg_dump.c:2605 #, c-format msgid "reading large objects\n" msgstr "lendo objetos grandes\n" -#: pg_dump.c:2695 +#: pg_dump.c:2737 #, c-format msgid "saving large objects\n" msgstr "salvando objetos grandes\n" -#: pg_dump.c:2742 +#: pg_dump.c:2784 #, c-format msgid "error reading large object %u: %s" msgstr "erro ao ler objeto grande %u: %s" -#: pg_dump.c:2935 +#: pg_dump.c:2836 +#, fuzzy, c-format +msgid "reading row security enabled for table \"%s.%s\"\n" +msgstr "lendo segurança de registros da tabela \"%s.%s\"\n" + +#: pg_dump.c:2867 +#, fuzzy, c-format +msgid "reading policies for table \"%s.%s\"\n" +msgstr "lendo políticas da tabela \"%s.%s\"\n" + +#: pg_dump.c:2997 +#, fuzzy, c-format +msgid "unexpected policy command type: \"%s\"\n" +msgstr "tipo de comando da política inesperado: \"%s\"\n" + +#: pg_dump.c:3212 #, c-format msgid "could not find parent extension for %s\n" msgstr "não pôde encontrar extensão pai para %s\n" -#: pg_dump.c:3038 +#: pg_dump.c:3315 #, c-format msgid "WARNING: owner of schema \"%s\" appears to be invalid\n" msgstr "AVISO: dono do esquema \"%s\" parece ser inválido\n" -#: pg_dump.c:3081 +#: pg_dump.c:3358 #, c-format msgid "schema with OID %u does not exist\n" msgstr "esquema com OID %u não existe\n" -#: pg_dump.c:3431 +#: pg_dump.c:3708 #, c-format msgid "WARNING: owner of data type \"%s\" appears to be invalid\n" msgstr "AVISO: dono do tipo de dado \"%s\" parece ser inválido\n" -#: pg_dump.c:3542 +#: pg_dump.c:3819 #, c-format msgid "WARNING: owner of operator \"%s\" appears to be invalid\n" msgstr "AVISO: dono do operador \"%s\" parece ser inválido\n" -#: pg_dump.c:3801 +#: pg_dump.c:4078 #, c-format msgid "WARNING: owner of operator class \"%s\" appears to be invalid\n" msgstr "AVISO: dono da classe de operadores \"%s\" parece ser inválido\n" -#: pg_dump.c:3889 +#: pg_dump.c:4166 #, c-format msgid "WARNING: owner of operator family \"%s\" appears to be invalid\n" msgstr "AVISO: dono da família de operadores \"%s\" parece ser inválido\n" -#: pg_dump.c:4048 +#: pg_dump.c:4304 #, c-format msgid "WARNING: owner of aggregate function \"%s\" appears to be invalid\n" msgstr "AVISO: dono da função de agregação \"%s\" parece ser inválido\n" -#: pg_dump.c:4252 +#: pg_dump.c:4486 #, c-format msgid "WARNING: owner of function \"%s\" appears to be invalid\n" msgstr "AVISO: dono da função \"%s\" parece ser inválido\n" -#: pg_dump.c:4870 +#: pg_dump.c:5159 #, c-format msgid "WARNING: owner of table \"%s\" appears to be invalid\n" msgstr "AVISO: dono da tabela \"%s\" parece ser inválido\n" -#: pg_dump.c:5022 +#: pg_dump.c:5311 #, c-format -msgid "reading indexes for table \"%s\"\n" -msgstr "lendo índices da tabela \"%s\"\n" +msgid "reading indexes for table \"%s.%s\"\n" +msgstr "lendo índices da tabela \"%s.%s\"\n" -#: pg_dump.c:5388 +#: pg_dump.c:5678 #, c-format -msgid "reading foreign key constraints for table \"%s\"\n" -msgstr "lendo restrições de chave estrangeira da tabela \"%s\"\n" +msgid "reading foreign key constraints for table \"%s.%s\"\n" +msgstr "lendo restrições de chave estrangeira da tabela \"%s.%s\"\n" -#: pg_dump.c:5633 +#: pg_dump.c:5924 #, c-format msgid "failed sanity check, parent table OID %u of pg_rewrite entry OID %u not found\n" msgstr "verificação de sanidade falhou, OID %u da tabela pai de pg_rewrite com OID %u não foi encontrado\n" -#: pg_dump.c:5726 +#: pg_dump.c:6017 #, c-format -msgid "reading triggers for table \"%s\"\n" -msgstr "lendo gatilhos da tabela \"%s\"\n" +msgid "reading triggers for table \"%s.%s\"\n" +msgstr "lendo gatilhos da tabela \"%s.%s\"\n" -#: pg_dump.c:5887 +#: pg_dump.c:6179 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)\n" msgstr "consulta produziu nome nulo da tabela referenciada pelo gatilho de chave estrangeira \"%s\" na tabela \"%s\" (OID da tabela: %u)\n" -#: pg_dump.c:6339 +#: pg_dump.c:6751 #, c-format -msgid "finding the columns and types of table \"%s\"\n" -msgstr "encontrando as colunas e tipos da tabela \"%s\"\n" +msgid "finding the columns and types of table \"%s.%s\"\n" +msgstr "encontrando as colunas e tipos da tabela \"%s.%s\"\n" -#: pg_dump.c:6517 +#: pg_dump.c:6930 #, c-format msgid "invalid column numbering in table \"%s\"\n" -msgstr "númeração de coluna inválida para tabela \"%s\"\n" +msgstr "numeração de coluna inválida para tabela \"%s\"\n" -#: pg_dump.c:6551 +#: pg_dump.c:6964 #, c-format -msgid "finding default expressions of table \"%s\"\n" -msgstr "encontrando expressões padrão da tabela \"%s\"\n" +msgid "finding default expressions of table \"%s.%s\"\n" +msgstr "encontrando expressões padrão da tabela \"%s.%s\"\n" -#: pg_dump.c:6603 +#: pg_dump.c:7017 #, c-format msgid "invalid adnum value %d for table \"%s\"\n" msgstr "valor %d do número da coluna é inválido para tabela \"%s\"\n" -#: pg_dump.c:6675 +#: pg_dump.c:7089 #, c-format -msgid "finding check constraints for table \"%s\"\n" -msgstr "encontrando restrições de verificação para tabela \"%s\"\n" +msgid "finding check constraints for table \"%s.%s\"\n" +msgstr "encontrando restrições de verificação para tabela \"%s.%s\"\n" -#: pg_dump.c:6770 +#: pg_dump.c:7185 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d\n" msgid_plural "expected %d check constraints on table \"%s\" but found %d\n" msgstr[0] "esperado %d restrição de verificação na tabela \"%s\" mas encontrou %d\n" msgstr[1] "esperado %d restrições de verificação na tabela \"%s\" mas encontrou %d\n" -#: pg_dump.c:6774 +#: pg_dump.c:7189 #, c-format msgid "(The system catalogs might be corrupted.)\n" msgstr "(O catálogo do sistema pode estar corrompido).\n" -#: pg_dump.c:8143 +#: pg_dump.c:8566 #, c-format msgid "WARNING: typtype of data type \"%s\" appears to be invalid\n" msgstr "AVISO: typtype do tipo de dado \"%s\" parece ser inválido\n" -#: pg_dump.c:9591 +#: pg_dump.c:10092 #, c-format msgid "WARNING: bogus value in proargmodes array\n" msgstr "AVISO: valor inválido na matriz proargmodes\n" -#: pg_dump.c:9919 +#: pg_dump.c:10443 #, c-format msgid "WARNING: could not parse proallargtypes array\n" msgstr "AVISO: não pôde validar matriz proallargtypes\n" -#: pg_dump.c:9935 +#: pg_dump.c:10459 #, c-format msgid "WARNING: could not parse proargmodes array\n" msgstr "AVISO: não pôde validar matriz proargmodes\n" -#: pg_dump.c:9949 +#: pg_dump.c:10473 #, c-format msgid "WARNING: could not parse proargnames array\n" msgstr "AVISO: não pôde validar matriz proargnames\n" -#: pg_dump.c:9960 +#: pg_dump.c:10484 #, c-format msgid "WARNING: could not parse proconfig array\n" msgstr "AVISO: não pôde validar matriz proconfig\n" -#: pg_dump.c:10015 +#: pg_dump.c:10555 #, c-format msgid "unrecognized provolatile value for function \"%s\"\n" msgstr "valor de provolatile desconhecido para função \"%s\"\n" -#: pg_dump.c:10237 +#: pg_dump.c:10731 #, c-format msgid "WARNING: bogus value in pg_cast.castfunc or pg_cast.castmethod field\n" msgstr "AVISO: valor inválido no campo pg_cast.castfunc ou pg_cast.castmethod\n" -#: pg_dump.c:10240 +#: pg_dump.c:10734 #, c-format msgid "WARNING: bogus value in pg_cast.castmethod field\n" msgstr "AVISO: valor inválido no campo pg_cast.castmethod\n" -#: pg_dump.c:10628 +#: pg_dump.c:10817 +#, fuzzy, c-format +msgid "WARNING: bogus transform definition, at least one of trffromsql and trftosql should be nonzero\n" +msgstr "AVISO: definição de transformação inválida, pelo menos um dos trffromsql e trftosql não devem ser zero\n" + +#: pg_dump.c:10834 +#, c-format +msgid "WARNING: bogus value in pg_transform.trffromsql field\n" +msgstr "AVISO: valor inválido no campo pg_transform.trffromsql\n" + +#: pg_dump.c:10855 +#, c-format +msgid "WARNING: bogus value in pg_transform.trftosql field\n" +msgstr "AVISO: valor inválido no campo pg_cast.trftosql\n" + +#: pg_dump.c:11241 #, c-format msgid "WARNING: could not find operator with OID %s\n" msgstr "AVISO: não pôde encontrar operador com OID %s\n" -#: pg_dump.c:11803 +#: pg_dump.c:12416 #, c-format msgid "WARNING: aggregate function %s could not be dumped correctly for this database version; ignored\n" msgstr "AVISO: função de agregação %s não pôde ser copiada corretamente para esta versão do banco de dados; ignorado\n" -#: pg_dump.c:12628 +#: pg_dump.c:13241 #, c-format msgid "unrecognized object type in default privileges: %d\n" msgstr "tipo de objeto desconhecido em privilégios padrão: %d\n" -#: pg_dump.c:12643 +#: pg_dump.c:13256 #, c-format msgid "could not parse default ACL list (%s)\n" msgstr "não pôde validar a lista ACL (%s)\n" -#: pg_dump.c:12698 +#: pg_dump.c:13311 #, c-format msgid "could not parse ACL list (%s) for object \"%s\" (%s)\n" msgstr "não pôde validar a lista ACL (%s) para objeto \"%s\" (%s)\n" -#: pg_dump.c:13115 +#: pg_dump.c:13728 #, c-format msgid "query to obtain definition of view \"%s\" returned no data\n" msgstr "consulta para obter definição da visão \"%s\" não retornou dados\n" -#: pg_dump.c:13118 +#: pg_dump.c:13731 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition\n" msgstr "consulta para obter definição da visão \"%s\" retornou mais de uma definição\n" -#: pg_dump.c:13125 +#: pg_dump.c:13738 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)\n" msgstr "definição da visão \"%s\" parece estar vazia (tamanho zero)\n" -#: pg_dump.c:13858 +#: pg_dump.c:14475 #, c-format msgid "invalid column number %d for table \"%s\"\n" msgstr "número de colunas %d é inválido para tabela \"%s\"\n" -#: pg_dump.c:13982 +#: pg_dump.c:14599 #, c-format msgid "missing index for constraint \"%s\"\n" msgstr "faltando índice para restrição \"%s\"\n" -#: pg_dump.c:14169 +#: pg_dump.c:14786 #, c-format msgid "unrecognized constraint type: %c\n" msgstr "tipo de restrição é desconhecido: %c\n" -#: pg_dump.c:14318 pg_dump.c:14482 +#: pg_dump.c:14935 pg_dump.c:15099 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)\n" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)\n" msgstr[0] "consulta para obter dados da sequência \"%s\" retornou %d linha (esperado 1)\n" msgstr[1] "consulta para obter dados da sequência \"%s\" retornou %d linhas (esperado 1)\n" -#: pg_dump.c:14329 +#: pg_dump.c:14946 #, c-format msgid "query to get data of sequence \"%s\" returned name \"%s\"\n" msgstr "consulta para obter dados sobre sequência \"%s\" retornou nome \"%s\"\n" -#: pg_dump.c:14577 +#: pg_dump.c:15194 #, c-format msgid "unexpected tgtype value: %d\n" msgstr "valor tgtype inesperado: %d\n" -#: pg_dump.c:14659 +#: pg_dump.c:15276 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"\n" msgstr "argumento inválido (%s) para gatilho \"%s\" na tabela \"%s\"\n" -#: pg_dump.c:14847 +#: pg_dump.c:15463 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned\n" msgstr "consulta para obter regra \"%s\" para tabela \"%s\" falhou: número incorreto de registros foi retornado\n" -#: pg_dump.c:15148 +#: pg_dump.c:15842 #, c-format msgid "reading dependency data\n" msgstr "lendo dados sobre dependência\n" -#: pg_dump.c:15693 +#: pg_dump.c:16389 #, c-format msgid "query returned %d row instead of one: %s\n" msgid_plural "query returned %d rows instead of one: %s\n" @@ -1977,51 +2052,53 @@ msgstr[0] "consulta retornou %d linha ao invés de uma: %s\n" msgstr[1] "consulta retornou %d linhas ao invés de uma: %s\n" #. translator: this is a module name -#: pg_dump_sort.c:21 +#: pg_dump_sort.c:23 msgid "sorter" msgstr "classificador" -#: pg_dump_sort.c:466 +#: pg_dump_sort.c:489 #, c-format msgid "invalid dumpId %d\n" msgstr "dumpId %d é inválido\n" -#: pg_dump_sort.c:472 +#: pg_dump_sort.c:495 #, c-format msgid "invalid dependency %d\n" msgstr "dependência %d é inválida\n" -#: pg_dump_sort.c:705 +#: pg_dump_sort.c:728 #, c-format msgid "could not identify dependency loop\n" msgstr "não pôde identificar dependência circular\n" -#: pg_dump_sort.c:1227 +#: pg_dump_sort.c:1250 #, c-format -msgid "NOTICE: there are circular foreign-key constraints among these table(s):\n" -msgstr "NOTA: há restrições de chave estrangeiras circulares entre essa(s) tabela(s):\n" +msgid "NOTICE: there are circular foreign-key constraints on this table:\n" +msgid_plural "NOTICE: there are circular foreign-key constraints among these tables:\n" +msgstr[0] "NOTA: há restrições de chave estrangeiras circulares nessa tabela:\n" +msgstr[1] "NOTA: há restrições de chave estrangeiras circulares entre essas tabelas:\n" -#: pg_dump_sort.c:1229 pg_dump_sort.c:1249 +#: pg_dump_sort.c:1254 pg_dump_sort.c:1274 #, c-format msgid " %s\n" msgstr " %s\n" -#: pg_dump_sort.c:1230 +#: pg_dump_sort.c:1255 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints.\n" msgstr "Você pode não ser capaz de restaurar a cópia de segurança sem utilizar --disable-triggers ou removendo temporariamente as restrições.\n" -#: pg_dump_sort.c:1231 +#: pg_dump_sort.c:1256 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem.\n" msgstr "Considere utilizar uma cópia de segurança completa ao invés de cópia com --data-only para evitar este problema.\n" -#: pg_dump_sort.c:1243 +#: pg_dump_sort.c:1268 #, c-format msgid "WARNING: could not resolve dependency loop among these items:\n" msgstr "AVISO: não pôde resolver dependência circular entre esses itens:\n" -#: pg_dumpall.c:182 +#: pg_dumpall.c:181 #, c-format msgid "" "The program \"pg_dump\" is needed by %s but was not found in the\n" @@ -2032,7 +2109,7 @@ msgstr "" "mesmo diretório que \"%s\".\n" "Verifique sua instalação.\n" -#: pg_dumpall.c:189 +#: pg_dumpall.c:188 #, c-format msgid "" "The program \"pg_dump\" was found by \"%s\"\n" @@ -2043,32 +2120,32 @@ msgstr "" "mas não tem a mesma versão que %s.\n" "Verifique sua instalação.\n" -#: pg_dumpall.c:323 +#: pg_dumpall.c:318 #, c-format msgid "%s: options -g/--globals-only and -r/--roles-only cannot be used together\n" msgstr "%s: opções -g/--globals-only e -r/--roles-only não podem ser utilizadas juntas\n" -#: pg_dumpall.c:332 +#: pg_dumpall.c:327 #, c-format msgid "%s: options -g/--globals-only and -t/--tablespaces-only cannot be used together\n" msgstr "%s: opções -g/--globals-only e -t/--tablespaces-only não podem ser utilizadas juntas\n" -#: pg_dumpall.c:341 pg_restore.c:343 +#: pg_dumpall.c:336 pg_restore.c:343 #, c-format msgid "%s: option --if-exists requires option -c/--clean\n" msgstr "%s: opção --if-exists requer opção -c/--clean\n" -#: pg_dumpall.c:348 +#: pg_dumpall.c:343 #, c-format msgid "%s: options -r/--roles-only and -t/--tablespaces-only cannot be used together\n" msgstr "%s: opções -r/--roles-only e -t/--tablespaces-only não podem ser utilizadas juntas\n" -#: pg_dumpall.c:390 pg_dumpall.c:1860 +#: pg_dumpall.c:385 pg_dumpall.c:1892 #, c-format msgid "%s: could not connect to database \"%s\"\n" msgstr "%s: não pôde conectar ao banco de dados \"%s\"\n" -#: pg_dumpall.c:405 +#: pg_dumpall.c:400 #, c-format msgid "" "%s: could not connect to databases \"postgres\" or \"template1\"\n" @@ -2077,12 +2154,12 @@ msgstr "" "%s: não pôde se conectar aos bancos de dados \"postgres\" ou \"template1\"\n" "Por favor especifique um banco de dados alternativo.\n" -#: pg_dumpall.c:422 +#: pg_dumpall.c:417 #, c-format msgid "%s: could not open the output file \"%s\": %s\n" msgstr "%s: não pôde abrir o arquivo de saída \"%s\": %s\n" -#: pg_dumpall.c:552 +#: pg_dumpall.c:547 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2091,57 +2168,57 @@ msgstr "" "%s salva os bancos de dados de um agrupamento do PostgreSQL em um arquivo de script.\n" "\n" -#: pg_dumpall.c:554 +#: pg_dumpall.c:549 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPÇÃO]...\n" -#: pg_dumpall.c:557 +#: pg_dumpall.c:552 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=ARQUIVO nome do arquivo de saída\n" -#: pg_dumpall.c:563 +#: pg_dumpall.c:558 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean exclui (remove) bancos de dados antes de criá-los novamente\n" -#: pg_dumpall.c:564 +#: pg_dumpall.c:559 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr " -g, --globals-only copia somente objetos globais, e não bancos de dados\n" -#: pg_dumpall.c:566 pg_restore.c:454 +#: pg_dumpall.c:561 pg_restore.c:454 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner ignora restauração dos donos dos objetos\n" -#: pg_dumpall.c:567 +#: pg_dumpall.c:562 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr " -r, --roles-only copia somente roles, e não bancos de dados ou tablespaces\n" -#: pg_dumpall.c:569 +#: pg_dumpall.c:564 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr " -S, --superuser=NOME especifica o nome do super-usuário a ser usado na cópia de segurança\n" -#: pg_dumpall.c:570 +#: pg_dumpall.c:565 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr " -t, --tablespaces-only copia somente tablespaces, e não bancos de dados ou roles\n" -#: pg_dumpall.c:587 +#: pg_dumpall.c:582 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=TEXTO cadeia de caracteres de conexão\n" -#: pg_dumpall.c:589 +#: pg_dumpall.c:584 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=NOMEBD especifica um banco de dados padrão alternativo\n" -#: pg_dumpall.c:596 +#: pg_dumpall.c:591 #, c-format msgid "" "\n" @@ -2154,82 +2231,82 @@ msgstr "" " padrão.\n" "\n" -#: pg_dumpall.c:1100 +#: pg_dumpall.c:1118 #, c-format msgid "%s: could not parse ACL list (%s) for tablespace \"%s\"\n" msgstr "%s: não pôde validar lista ACL (%s) da tablespace \"%s\"\n" -#: pg_dumpall.c:1417 +#: pg_dumpall.c:1449 #, c-format msgid "%s: could not parse ACL list (%s) for database \"%s\"\n" msgstr "%s: não pôde validar lista ACL (%s) do banco de dados \"%s\"\n" -#: pg_dumpall.c:1627 +#: pg_dumpall.c:1659 #, c-format msgid "%s: dumping database \"%s\"...\n" msgstr "%s: copiando banco de dados \"%s\"...\n" -#: pg_dumpall.c:1648 +#: pg_dumpall.c:1680 #, c-format msgid "%s: pg_dump failed on database \"%s\", exiting\n" msgstr "%s: pg_dump falhou no banco de dados \"%s\", terminando\n" -#: pg_dumpall.c:1657 +#: pg_dumpall.c:1689 #, c-format msgid "%s: could not re-open the output file \"%s\": %s\n" msgstr "%s: não pôde abrir o arquivo de saída \"%s\" novamente: %s\n" -#: pg_dumpall.c:1702 +#: pg_dumpall.c:1734 #, c-format msgid "%s: running \"%s\"\n" msgstr "%s: executando \"%s\"\n" -#: pg_dumpall.c:1882 +#: pg_dumpall.c:1914 #, c-format msgid "%s: could not connect to database \"%s\": %s\n" msgstr "%s: não pôde conectar ao banco de dados \"%s\": %s\n" -#: pg_dumpall.c:1912 +#: pg_dumpall.c:1944 #, c-format msgid "%s: could not get server version\n" msgstr "%s: não pôde obter a versão do servidor\n" -#: pg_dumpall.c:1918 +#: pg_dumpall.c:1950 #, c-format msgid "%s: could not parse server version \"%s\"\n" msgstr "%s: não pôde validar a versão do servidor \"%s\"\n" -#: pg_dumpall.c:1996 pg_dumpall.c:2022 +#: pg_dumpall.c:2028 pg_dumpall.c:2054 #, c-format msgid "%s: executing %s\n" msgstr "%s: executando %s\n" -#: pg_dumpall.c:2002 pg_dumpall.c:2028 +#: pg_dumpall.c:2034 pg_dumpall.c:2060 #, c-format msgid "%s: query failed: %s" msgstr "%s: consulta falhou: %s" -#: pg_dumpall.c:2004 pg_dumpall.c:2030 +#: pg_dumpall.c:2036 pg_dumpall.c:2062 #, c-format msgid "%s: query was: %s\n" msgstr "%s: consulta foi: %s\n" -#: pg_restore.c:304 +#: pg_restore.c:303 #, c-format msgid "%s: options -d/--dbname and -f/--file cannot be used together\n" msgstr "%s: opções -d/--dbname e -f/--file não podem ser utilizadas juntas\n" -#: pg_restore.c:315 +#: pg_restore.c:314 #, c-format msgid "%s: options -s/--schema-only and -a/--data-only cannot be used together\n" msgstr "%s: opções -s/--schema-only e -a/--data-only não podem ser utilizadas juntas\n" -#: pg_restore.c:322 +#: pg_restore.c:321 #, c-format msgid "%s: options -c/--clean and -a/--data-only cannot be used together\n" msgstr "%s: opções -c/--clean e -a/--data-only não podem ser utilizadas juntas\n" -#: pg_restore.c:330 +#: pg_restore.c:329 #, c-format msgid "%s: cannot specify both --single-transaction and multiple jobs\n" msgstr "%s: não pode especificar ambas opções --single-transaction e múltiplas tarefas\n" @@ -2381,7 +2458,12 @@ msgstr " -x, --no-privileges ignora restauração dos privilégios de msgid " -1, --single-transaction restore as a single transaction\n" msgstr " -1, --single-transaction restaura como uma transação única\n" -#: pg_restore.c:464 +#: pg_restore.c:463 +#, fuzzy, c-format +msgid " --enable-row-security enable row security\n" +msgstr " --enable-row-security habilita segurança de registros\n" + +#: pg_restore.c:465 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not be\n" @@ -2390,27 +2472,27 @@ msgstr "" " --no-data-for-failed-tables não restaura dados de tabelas que não puderam ser\n" " criadas\n" -#: pg_restore.c:466 +#: pg_restore.c:467 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels não restaura as atribuições de rótulos de segurança\n" -#: pg_restore.c:467 +#: pg_restore.c:468 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces não restaura as atribuições de tablespaces\n" -#: pg_restore.c:468 +#: pg_restore.c:469 #, c-format msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" msgstr " --section=SEÇÃO restaura seção especificada (pre-data, data ou post-data)\n" -#: pg_restore.c:479 +#: pg_restore.c:480 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=NOMEROLE executa SET ROLE antes da restauração\n" -#: pg_restore.c:481 +#: pg_restore.c:482 #, c-format msgid "" "\n" @@ -2421,7 +2503,7 @@ msgstr "" "As opções -I, -n, -P, -t, -T e --section podem ser combinadas e especificadas\n" "múltiplas vezes para selecionar múltiplos objetos.\n" -#: pg_restore.c:484 +#: pg_restore.c:485 #, c-format msgid "" "\n" diff --git a/src/bin/pg_dump/po/ru.po b/src/bin/pg_dump/po/ru.po index b2a7608341976..4d92f9cc3345a 100644 --- a/src/bin/pg_dump/po/ru.po +++ b/src/bin/pg_dump/po/ru.po @@ -27,8 +27,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9 current\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-09-05 23:12+0000\n" -"PO-Revision-Date: 2014-09-06 07:55+0400\n" +"POT-Creation-Date: 2015-07-27 18:14+0000\n" +"PO-Revision-Date: 2015-07-27 22:11+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -76,14 +76,14 @@ msgstr "не удалось прочитать символическую ссы msgid "pclose failed: %s" msgstr "ошибка pclose: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 pg_backup_db.c:134 pg_backup_db.c:189 -#: pg_backup_db.c:233 pg_backup_db.c:279 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 pg_backup_db.c:135 pg_backup_db.c:190 +#: pg_backup_db.c:234 pg_backup_db.c:280 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" @@ -123,225 +123,235 @@ msgstr "дочерний процесс завершён по сигналу %d" msgid "child process exited with unrecognized status %d" msgstr "дочерний процесс завершился с нераспознанным состоянием %d" -#: common.c:105 +#: common.c:109 #, c-format msgid "reading schemas\n" msgstr "чтение схем\n" -#: common.c:116 +#: common.c:120 #, c-format msgid "reading user-defined tables\n" msgstr "чтение пользовательских таблиц\n" -#: common.c:124 +#: common.c:128 #, c-format msgid "reading extensions\n" msgstr "чтение расширений\n" -#: common.c:128 +#: common.c:132 #, c-format msgid "reading user-defined functions\n" msgstr "чтение пользовательских функций\n" -#: common.c:134 +#: common.c:138 #, c-format msgid "reading user-defined types\n" msgstr "чтение пользовательских типов\n" -#: common.c:140 +#: common.c:144 #, c-format msgid "reading procedural languages\n" msgstr "чтение процедурных языков\n" -#: common.c:144 +#: common.c:148 #, c-format msgid "reading user-defined aggregate functions\n" msgstr "чтение пользовательских агрегатных функций\n" -#: common.c:148 +#: common.c:152 #, c-format msgid "reading user-defined operators\n" msgstr "чтение пользовательских операторов\n" -#: common.c:153 +#: common.c:157 #, c-format msgid "reading user-defined operator classes\n" msgstr "чтение пользовательских классов операторов\n" -#: common.c:157 +#: common.c:161 #, c-format msgid "reading user-defined operator families\n" msgstr "чтение пользовательских семейств операторов\n" -#: common.c:161 +#: common.c:165 #, c-format msgid "reading user-defined text search parsers\n" msgstr "чтение пользовательских анализаторов текстового поиска\n" -#: common.c:165 +#: common.c:169 #, c-format msgid "reading user-defined text search templates\n" msgstr "чтение пользовательских шаблонов текстового поиска\n" -#: common.c:169 +#: common.c:173 #, c-format msgid "reading user-defined text search dictionaries\n" msgstr "чтение пользовательских словарей текстового поиска\n" -#: common.c:173 +#: common.c:177 #, c-format msgid "reading user-defined text search configurations\n" msgstr "чтение пользовательских конфигураций текстового поиска\n" -#: common.c:177 +#: common.c:181 #, c-format msgid "reading user-defined foreign-data wrappers\n" msgstr "чтение пользовательских оболочек сторонних данных\n" -#: common.c:181 +#: common.c:185 #, c-format msgid "reading user-defined foreign servers\n" msgstr "чтение пользовательских сторонних серверов\n" -#: common.c:185 +#: common.c:189 #, c-format msgid "reading default privileges\n" msgstr "чтение прав по умолчанию\n" -#: common.c:189 +#: common.c:193 #, c-format msgid "reading user-defined collations\n" msgstr "чтение пользовательских правил сортировки\n" -#: common.c:194 +#: common.c:198 #, c-format msgid "reading user-defined conversions\n" msgstr "чтение пользовательских преобразований\n" -#: common.c:198 +#: common.c:202 #, c-format msgid "reading type casts\n" msgstr "чтение приведений типов\n" -#: common.c:202 +#: common.c:206 +#, c-format +msgid "reading transforms\n" +msgstr "чтение преобразований\n" + +#: common.c:210 #, c-format msgid "reading table inheritance information\n" msgstr "чтение информации о наследовании таблиц\n" -#: common.c:206 +#: common.c:214 #, c-format msgid "reading event triggers\n" msgstr "чтение событийных триггеров\n" -#: common.c:215 +#: common.c:223 #, c-format msgid "finding extension members\n" msgstr "поиск элементов расширений\n" -#: common.c:220 +#: common.c:228 #, c-format msgid "finding inheritance relationships\n" msgstr "поиск связей наследования\n" -#: common.c:224 +#: common.c:232 #, c-format msgid "reading column info for interesting tables\n" msgstr "чтение информации о колонках интересующих таблиц\n" -#: common.c:228 +#: common.c:236 #, c-format msgid "flagging inherited columns in subtables\n" msgstr "пометка наследованных колонок в подтаблицах\n" -#: common.c:232 +#: common.c:240 #, c-format msgid "reading indexes\n" msgstr "чтение индексов\n" -#: common.c:236 +#: common.c:244 #, c-format msgid "reading constraints\n" msgstr "чтение ограничений\n" -#: common.c:240 +#: common.c:248 #, c-format msgid "reading triggers\n" msgstr "чтение триггеров\n" -#: common.c:244 +#: common.c:252 #, c-format msgid "reading rewrite rules\n" msgstr "чтение правил перезаписи\n" -#: common.c:792 +#: common.c:256 +#, c-format +msgid "reading policies\n" +msgstr "чтение политик\n" + +#: common.c:804 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found\n" msgstr "родительская таблица с OID %u для таблицы \"%s\" (OID %u) не найдена\n" -#: common.c:834 +#: common.c:846 #, c-format msgid "could not parse numeric array \"%s\": too many numbers\n" msgstr "не удалось разобрать числовой массив \"%s\": слишком много чисел\n" -#: common.c:849 +#: common.c:861 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number\n" msgstr "не удалось разобрать числовой массив \"%s\": неверный символ в числе\n" #. translator: this is a module name -#: compress_io.c:78 +#: compress_io.c:79 msgid "compress_io" msgstr "compress_io" -#: compress_io.c:114 +#: compress_io.c:115 #, c-format msgid "invalid compression code: %d\n" msgstr "неверный код сжатия: %d\n" -#: compress_io.c:138 compress_io.c:174 compress_io.c:195 compress_io.c:514 -#: compress_io.c:541 +#: compress_io.c:139 compress_io.c:175 compress_io.c:196 compress_io.c:529 +#: compress_io.c:572 #, c-format msgid "not built with zlib support\n" msgstr "программа собрана без поддержки zlib\n" -#: compress_io.c:245 compress_io.c:347 +#: compress_io.c:246 compress_io.c:348 #, c-format msgid "could not initialize compression library: %s\n" msgstr "не удалось инициализировать библиотеку сжатия: %s\n" -#: compress_io.c:266 +#: compress_io.c:267 #, c-format msgid "could not close compression stream: %s\n" msgstr "не удалось закрыть поток сжатых данных: %s\n" -#: compress_io.c:284 +#: compress_io.c:285 #, c-format msgid "could not compress data: %s\n" msgstr "не удалось сжать данные: %s\n" -#: compress_io.c:367 compress_io.c:383 +#: compress_io.c:368 compress_io.c:384 #, c-format msgid "could not uncompress data: %s\n" msgstr "не удалось распаковать данные: %s\n" -#: compress_io.c:391 +#: compress_io.c:392 #, c-format msgid "could not close compression library: %s\n" msgstr "не удалось закрыть библиотеку сжатия: %s\n" -#: compress_io.c:575 compress_io.c:611 pg_backup_custom.c:590 -#: pg_backup_tar.c:563 +#: compress_io.c:606 compress_io.c:642 pg_backup_custom.c:591 +#: pg_backup_tar.c:555 #, c-format msgid "could not read from input file: %s\n" msgstr "не удалось прочитать входной файл: %s\n" -#: compress_io.c:614 pg_backup_custom.c:587 pg_backup_directory.c:551 -#: pg_backup_tar.c:799 pg_backup_tar.c:823 +#: compress_io.c:645 pg_backup_custom.c:588 pg_backup_directory.c:552 +#: pg_backup_tar.c:791 pg_backup_tar.c:815 #, c-format msgid "could not read from input file: end of file\n" msgstr "не удалось прочитать входной файл: конец файла\n" -#: parallel.c:77 +#: parallel.c:78 msgid "parallel archiver" msgstr "параллельный архиватор" @@ -355,22 +365,22 @@ msgstr "%s: ошибка WSAStartup: %d\n" msgid "worker is terminating\n" msgstr "рабочий процесс прерывается\n" -#: parallel.c:535 +#: parallel.c:537 #, c-format msgid "could not create communication channels: %s\n" msgstr "не удалось создать каналы межпроцессного взаимодействия: %s\n" -#: parallel.c:608 +#: parallel.c:611 #, c-format msgid "could not create worker process: %s\n" msgstr "не удалось создать рабочий процесс: %s\n" -#: parallel.c:825 +#: parallel.c:828 #, c-format msgid "could not get relation name for OID %u: %s\n" msgstr "не удалось получить имя отношения с OID %u: %s\n" -#: parallel.c:842 +#: parallel.c:845 #, c-format msgid "" "could not obtain lock on relation \"%s\"\n" @@ -383,116 +393,116 @@ msgstr "" "этой таблицы после того, как родительский процесс pg_dump получил для неё " "начальную блокировку ACCESS SHARE.\n" -#: parallel.c:926 +#: parallel.c:929 #, c-format msgid "unrecognized command on communication channel: %s\n" msgstr "Неизвестная команда в канале взаимодействия: %s\n" -#: parallel.c:959 +#: parallel.c:962 #, c-format msgid "a worker process died unexpectedly\n" msgstr "рабочий процесс неожиданно прекратился\n" -#: parallel.c:986 parallel.c:995 +#: parallel.c:989 parallel.c:998 #, c-format msgid "invalid message received from worker: %s\n" msgstr "от рабочего процесса получено ошибочное сообщение: %s\n" -#: parallel.c:992 pg_backup_db.c:336 +#: parallel.c:995 pg_backup_db.c:337 #, c-format msgid "%s" msgstr "%s" -#: parallel.c:1044 parallel.c:1088 +#: parallel.c:1047 parallel.c:1091 #, c-format msgid "error processing a parallel work item\n" msgstr "ошибка выполнения части параллельной работы\n" -#: parallel.c:1116 parallel.c:1254 +#: parallel.c:1119 parallel.c:1257 #, c-format msgid "could not write to the communication channel: %s\n" msgstr "не удалось записать в канал взаимодействия: %s\n" -#: parallel.c:1165 +#: parallel.c:1168 #, c-format msgid "terminated by user\n" msgstr "прервано пользователем\n" -#: parallel.c:1217 +#: parallel.c:1220 #, c-format msgid "error in ListenToWorkers(): %s\n" msgstr "ошибка в ListenToWorkers(): %s\n" -#: parallel.c:1341 +#: parallel.c:1345 #, c-format msgid "pgpipe: could not create socket: error code %d\n" -msgstr "pgpipe: не удалось создать сокет (код ошибки %d)\n" +msgstr "pgpipe: не удалось создать сокет (код ошибки: %d)\n" -#: parallel.c:1352 +#: parallel.c:1356 #, c-format msgid "pgpipe: could not bind: error code %d\n" -msgstr "pgpipe: не удалось привязаться к сокету (код ошибки %d)\n" +msgstr "pgpipe: не удалось привязаться к сокету (код ошибки: %d)\n" -#: parallel.c:1359 +#: parallel.c:1363 #, c-format msgid "pgpipe: could not listen: error code %d\n" -msgstr "pgpipe: не удалось начать приём (код ошибки %d)\n" +msgstr "pgpipe: не удалось начать приём (код ошибки: %d)\n" -#: parallel.c:1366 +#: parallel.c:1370 #, c-format msgid "pgpipe: getsockname() failed: error code %d\n" -msgstr "pgpipe: ошибка в getsockname() (код ошибки %d)\n" +msgstr "pgpipe: ошибка в getsockname() (код ошибки: %d)\n" -#: parallel.c:1377 +#: parallel.c:1381 #, c-format msgid "pgpipe: could not create second socket: error code %d\n" -msgstr "pgpipe: не удалось создать второй сокет (код ошибки %d)\n" +msgstr "pgpipe: не удалось создать второй сокет (код ошибки: %d)\n" -#: parallel.c:1386 +#: parallel.c:1390 #, c-format msgid "pgpipe: could not connect socket: error code %d\n" -msgstr "pgpipe: не удалось подключить сокет (код ошибки %d)\n" +msgstr "pgpipe: не удалось подключить сокет (код ошибки: %d)\n" -#: parallel.c:1393 +#: parallel.c:1397 #, c-format msgid "pgpipe: could not accept connection: error code %d\n" msgstr "pgpipe: не удалось принять соединение (код ошибки: %d)\n" #. translator: this is a module name -#: pg_backup_archiver.c:51 +#: pg_backup_archiver.c:53 msgid "archiver" msgstr "архиватор" -#: pg_backup_archiver.c:169 pg_backup_archiver.c:1386 +#: pg_backup_archiver.c:230 pg_backup_archiver.c:1479 #, c-format msgid "could not close output file: %s\n" msgstr "не удалось закрыть выходной файл: %s\n" -#: pg_backup_archiver.c:204 pg_backup_archiver.c:209 +#: pg_backup_archiver.c:265 pg_backup_archiver.c:270 #, c-format msgid "WARNING: archive items not in correct section order\n" msgstr "" "ПРЕДУПРЕЖДЕНИЕ: в последовательности элементов архива нарушен порядок " "разделов\n" -#: pg_backup_archiver.c:215 +#: pg_backup_archiver.c:276 #, c-format msgid "unexpected section code %d\n" msgstr "неожиданный код раздела %d\n" -#: pg_backup_archiver.c:247 +#: pg_backup_archiver.c:308 #, c-format msgid "-C and -1 are incompatible options\n" msgstr "Параметры -C и -1 несовместимы\n" -#: pg_backup_archiver.c:257 +#: pg_backup_archiver.c:318 #, c-format msgid "parallel restore is not supported with this archive file format\n" msgstr "" "параллельное восстановление не поддерживается с выбранным форматом архивного " "файла\n" -#: pg_backup_archiver.c:261 +#: pg_backup_archiver.c:322 #, c-format msgid "" "parallel restore is not supported with archives made by pre-8.0 pg_dump\n" @@ -500,7 +510,7 @@ msgstr "" "параллельное восстановление возможно только для архивов, созданных pg_dump " "версии 8.0 и новее\n" -#: pg_backup_archiver.c:279 +#: pg_backup_archiver.c:340 #, c-format msgid "" "cannot restore from compressed archive (compression not supported in this " @@ -509,73 +519,83 @@ msgstr "" "восстановить данные из сжатого архива нельзя (установленная версия не " "поддерживает сжатие)\n" -#: pg_backup_archiver.c:296 +#: pg_backup_archiver.c:357 #, c-format msgid "connecting to database for restore\n" msgstr "подключение к базе данных для восстановления\n" -#: pg_backup_archiver.c:298 +#: pg_backup_archiver.c:359 #, c-format msgid "direct database connections are not supported in pre-1.3 archives\n" msgstr "" "прямые подключения к базе данных не поддерживаются в архивах до версии 1.3\n" -#: pg_backup_archiver.c:343 +#: pg_backup_archiver.c:404 #, c-format msgid "implied data-only restore\n" msgstr "подразумевается восстановление только данных\n" -#: pg_backup_archiver.c:412 +#: pg_backup_archiver.c:474 #, c-format msgid "dropping %s %s\n" msgstr "удаляется %s %s\n" -#: pg_backup_archiver.c:548 +#: pg_backup_archiver.c:627 #, c-format -msgid "setting owner and privileges for %s %s\n" -msgstr "установка владельца и прав: %s %s\n" +msgid "setting owner and privileges for %s \"%s\".\"%s\"\n" +msgstr "установка владельца и прав: %s \"%s\".\"%s\"\n" -#: pg_backup_archiver.c:614 pg_backup_archiver.c:616 +#: pg_backup_archiver.c:630 +#, c-format +msgid "setting owner and privileges for %s \"%s\"\n" +msgstr "установка владельца и прав: %s \"%s\"\n" + +#: pg_backup_archiver.c:696 pg_backup_archiver.c:698 #, c-format msgid "warning from original dump file: %s\n" msgstr "предупреждение из исходного файла: %s\n" -#: pg_backup_archiver.c:623 +#: pg_backup_archiver.c:707 +#, c-format +msgid "creating %s \"%s\".\"%s\"\n" +msgstr "создаётся %s \"%s\".\"%s\"\n" + +#: pg_backup_archiver.c:710 #, c-format -msgid "creating %s %s\n" -msgstr "создаётся %s %s\n" +msgid "creating %s \"%s\"\n" +msgstr "создаётся %s \"%s\"\n" -#: pg_backup_archiver.c:667 +#: pg_backup_archiver.c:755 #, c-format msgid "connecting to new database \"%s\"\n" msgstr "подключение к новой базе данных \"%s\"\n" -#: pg_backup_archiver.c:695 +#: pg_backup_archiver.c:783 #, c-format msgid "processing %s\n" msgstr "обрабатывается %s\n" -#: pg_backup_archiver.c:715 +#: pg_backup_archiver.c:803 #, c-format -msgid "processing data for table \"%s\"\n" -msgstr "обрабатываются данные таблицы \"%s\"\n" +msgid "processing data for table \"%s\".\"%s\"\n" +msgstr "обрабатываются данные таблицы \"%s\".\"%s\"\n" -#: pg_backup_archiver.c:777 +#: pg_backup_archiver.c:865 #, c-format msgid "executing %s %s\n" msgstr "выполняется %s %s\n" -#: pg_backup_archiver.c:814 +#: pg_backup_archiver.c:902 #, c-format msgid "disabling triggers for %s\n" msgstr "отключаются триггеры таблицы %s\n" -#: pg_backup_archiver.c:840 +#: pg_backup_archiver.c:928 #, c-format msgid "enabling triggers for %s\n" msgstr "включаются триггеры таблицы %s\n" -#: pg_backup_archiver.c:870 +#: pg_backup_archiver.c:958 #, c-format msgid "" "internal error -- WriteData cannot be called outside the context of a " @@ -584,12 +604,12 @@ msgstr "" "внутренняя ошибка -- WriteData нельзя вызывать вне контекста процедуры " "DataDumper\n" -#: pg_backup_archiver.c:1029 +#: pg_backup_archiver.c:1122 #, c-format msgid "large-object output not supported in chosen format\n" msgstr "выбранный формат не поддерживает выгрузку больших объектов\n" -#: pg_backup_archiver.c:1083 +#: pg_backup_archiver.c:1176 #, c-format msgid "restored %d large object\n" msgid_plural "restored %d large objects\n" @@ -597,55 +617,55 @@ msgstr[0] "восстановлен %d большой объект\n" msgstr[1] "восстановлено %d больших объекта\n" msgstr[2] "восстановлено %d больших объектов\n" -#: pg_backup_archiver.c:1104 pg_backup_tar.c:741 +#: pg_backup_archiver.c:1197 pg_backup_tar.c:733 #, c-format msgid "restoring large object with OID %u\n" msgstr "восстановление большого объекта с OID %u\n" -#: pg_backup_archiver.c:1116 +#: pg_backup_archiver.c:1209 #, c-format msgid "could not create large object %u: %s" msgstr "не удалось создать большой объект %u: %s" -#: pg_backup_archiver.c:1121 pg_dump.c:2732 +#: pg_backup_archiver.c:1214 pg_dump.c:2777 #, c-format msgid "could not open large object %u: %s" msgstr "не удалось открыть большой объект %u: %s" -#: pg_backup_archiver.c:1178 +#: pg_backup_archiver.c:1271 #, c-format msgid "could not open TOC file \"%s\": %s\n" msgstr "не удалось открыть файл оглавления \"%s\": %s\n" -#: pg_backup_archiver.c:1219 +#: pg_backup_archiver.c:1312 #, c-format msgid "WARNING: line ignored: %s\n" -msgstr "ВНИМАНИЕ: строка проигнорирована: %s\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: строка проигнорирована: %s\n" -#: pg_backup_archiver.c:1226 +#: pg_backup_archiver.c:1319 #, c-format msgid "could not find entry for ID %d\n" msgstr "не найдена запись для ID %d\n" -#: pg_backup_archiver.c:1247 pg_backup_directory.c:229 -#: pg_backup_directory.c:600 +#: pg_backup_archiver.c:1340 pg_backup_directory.c:230 +#: pg_backup_directory.c:601 #, c-format msgid "could not close TOC file: %s\n" msgstr "не удалось закрыть файл оглавления: %s\n" -#: pg_backup_archiver.c:1356 pg_backup_custom.c:161 pg_backup_directory.c:340 -#: pg_backup_directory.c:586 pg_backup_directory.c:644 -#: pg_backup_directory.c:664 +#: pg_backup_archiver.c:1449 pg_backup_custom.c:162 pg_backup_directory.c:341 +#: pg_backup_directory.c:587 pg_backup_directory.c:645 +#: pg_backup_directory.c:665 #, c-format msgid "could not open output file \"%s\": %s\n" msgstr "не удалось открыть выходной файл \"%s\": %s\n" -#: pg_backup_archiver.c:1359 pg_backup_custom.c:168 +#: pg_backup_archiver.c:1452 pg_backup_custom.c:169 #, c-format msgid "could not open output file: %s\n" msgstr "не удалось открыть выходной файл: %s\n" -#: pg_backup_archiver.c:1463 +#: pg_backup_archiver.c:1556 #, c-format msgid "wrote %lu byte of large object data (result = %lu)\n" msgid_plural "wrote %lu bytes of large object data (result = %lu)\n" @@ -653,323 +673,326 @@ msgstr[0] "записан %lu байт данных большого объек msgstr[1] "записано %lu байта данных большого объекта (результат = %lu)\n" msgstr[2] "записано %lu байт данных большого объекта (результат = %lu)\n" -#: pg_backup_archiver.c:1469 +#: pg_backup_archiver.c:1562 #, c-format msgid "could not write to large object (result: %lu, expected: %lu)\n" msgstr "не удалось записать большой объект (результат: %lu, ожидалось: %lu)\n" -#: pg_backup_archiver.c:1562 +#: pg_backup_archiver.c:1655 #, c-format msgid "Error while INITIALIZING:\n" msgstr "Ошибка при инициализации:\n" -#: pg_backup_archiver.c:1567 +#: pg_backup_archiver.c:1660 #, c-format msgid "Error while PROCESSING TOC:\n" msgstr "Ошибка при обработке оглавления:\n" -#: pg_backup_archiver.c:1572 +#: pg_backup_archiver.c:1665 #, c-format msgid "Error while FINALIZING:\n" msgstr "Ошибка при завершении:\n" -#: pg_backup_archiver.c:1577 +#: pg_backup_archiver.c:1670 #, c-format msgid "Error from TOC entry %d; %u %u %s %s %s\n" msgstr "Ошибка из записи оглавления %d; %u %u %s %s %s\n" -#: pg_backup_archiver.c:1650 +#: pg_backup_archiver.c:1743 #, c-format msgid "bad dumpId\n" msgstr "неверный dumpId\n" -#: pg_backup_archiver.c:1671 +#: pg_backup_archiver.c:1764 #, c-format msgid "bad table dumpId for TABLE DATA item\n" msgstr "неверный dumpId таблицы в элементе TABLE DATA\n" -#: pg_backup_archiver.c:1763 +#: pg_backup_archiver.c:1856 #, c-format msgid "unexpected data offset flag %d\n" msgstr "неожиданный флаг смещения данных: %d\n" -#: pg_backup_archiver.c:1776 +#: pg_backup_archiver.c:1869 #, c-format msgid "file offset in dump file is too large\n" msgstr "слишком большое смещение в файле вывода\n" -#: pg_backup_archiver.c:1889 +#: pg_backup_archiver.c:1982 #, c-format msgid "attempting to ascertain archive format\n" msgstr "попытка выяснить формат архива\n" -#: pg_backup_archiver.c:1915 pg_backup_archiver.c:1925 +#: pg_backup_archiver.c:2008 pg_backup_archiver.c:2018 #, c-format msgid "directory name too long: \"%s\"\n" msgstr "слишком длинное имя каталога: \"%s\"\n" -#: pg_backup_archiver.c:1933 +#: pg_backup_archiver.c:2026 #, c-format msgid "" "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not " "exist)\n" msgstr "каталог \"%s\" не похож на архивный (в нём отсутствует \"toc.dat\")\n" -#: pg_backup_archiver.c:1941 pg_backup_custom.c:180 pg_backup_custom.c:769 -#: pg_backup_directory.c:213 pg_backup_directory.c:401 +#: pg_backup_archiver.c:2034 pg_backup_custom.c:181 pg_backup_custom.c:770 +#: pg_backup_directory.c:214 pg_backup_directory.c:402 #, c-format msgid "could not open input file \"%s\": %s\n" msgstr "не удалось открыть входной файл \"%s\": %s\n" -#: pg_backup_archiver.c:1949 pg_backup_custom.c:187 +#: pg_backup_archiver.c:2042 pg_backup_custom.c:188 #, c-format msgid "could not open input file: %s\n" msgstr "не удалось открыть входной файл: %s\n" -#: pg_backup_archiver.c:1956 +#: pg_backup_archiver.c:2049 #, c-format msgid "could not read input file: %s\n" msgstr "не удалось прочитать входной файл: %s\n" -#: pg_backup_archiver.c:1958 +#: pg_backup_archiver.c:2051 #, c-format msgid "input file is too short (read %lu, expected 5)\n" msgstr "входной файл слишком короткий (прочитано байт: %lu, ожидалось: 5)\n" -#: pg_backup_archiver.c:2041 +#: pg_backup_archiver.c:2134 #, c-format msgid "input file appears to be a text format dump. Please use psql.\n" msgstr "" "входной файл похоже имеет текстовый формат. Загрузите его с помощью psql.\n" -#: pg_backup_archiver.c:2047 +#: pg_backup_archiver.c:2140 #, c-format msgid "input file does not appear to be a valid archive (too short?)\n" msgstr "входной файл не похож на архив (возможно, слишком мал?)\n" -#: pg_backup_archiver.c:2053 +#: pg_backup_archiver.c:2146 #, c-format msgid "input file does not appear to be a valid archive\n" msgstr "входной файл не похож на архив\n" -#: pg_backup_archiver.c:2073 +#: pg_backup_archiver.c:2166 #, c-format msgid "could not close input file: %s\n" msgstr "не удалось закрыть входной файл: %s\n" -#: pg_backup_archiver.c:2090 +#: pg_backup_archiver.c:2183 #, c-format msgid "allocating AH for %s, format %d\n" msgstr "выделение структуры AH для %s, формат %d\n" -#: pg_backup_archiver.c:2195 +#: pg_backup_archiver.c:2288 #, c-format msgid "unrecognized file format \"%d\"\n" msgstr "неопознанный формат файла: \"%d\"\n" -#: pg_backup_archiver.c:2345 +#: pg_backup_archiver.c:2438 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC\n" msgstr "ID записи %d вне диапазона - возможно повреждено оглавление\n" -#: pg_backup_archiver.c:2461 +#: pg_backup_archiver.c:2554 #, c-format msgid "read TOC entry %d (ID %d) for %s %s\n" msgstr "прочитана запись оглавления %d (ID %d): %s %s\n" -#: pg_backup_archiver.c:2495 +#: pg_backup_archiver.c:2588 #, c-format msgid "unrecognized encoding \"%s\"\n" msgstr "нераспознанная кодировка \"%s\"\n" -#: pg_backup_archiver.c:2500 +#: pg_backup_archiver.c:2593 #, c-format msgid "invalid ENCODING item: %s\n" msgstr "неверный элемент ENCODING: %s\n" -#: pg_backup_archiver.c:2518 +#: pg_backup_archiver.c:2611 #, c-format msgid "invalid STDSTRINGS item: %s\n" msgstr "неверный элемент STDSTRINGS: %s\n" -#: pg_backup_archiver.c:2735 +#: pg_backup_archiver.c:2840 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "не удалось переключить пользователя сессии на \"%s\": %s" -#: pg_backup_archiver.c:2767 +#: pg_backup_archiver.c:2872 #, c-format msgid "could not set default_with_oids: %s" msgstr "не удалось установить параметр default_with_oids: %s" -#: pg_backup_archiver.c:2905 +#: pg_backup_archiver.c:3010 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "не удалось присвоить search_path значение \"%s\": %s" -#: pg_backup_archiver.c:2966 +#: pg_backup_archiver.c:3071 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "не удалось задать для default_tablespace значение %s: %s" -#: pg_backup_archiver.c:3053 pg_backup_archiver.c:3236 +#: pg_backup_archiver.c:3158 pg_backup_archiver.c:3343 #, c-format msgid "WARNING: don't know how to set owner for object type %s\n" -msgstr "ВНИМАНИЕ: неизвестно, как назначить владельца для объекта типа %s\n" +msgstr "" +"ПРЕДУПРЕЖДЕНИЕ: неизвестно, как назначить владельца для объекта типа %s\n" -#: pg_backup_archiver.c:3289 +#: pg_backup_archiver.c:3396 #, c-format msgid "" "WARNING: requested compression not available in this installation -- archive " "will be uncompressed\n" msgstr "" -"ВНИМАНИЕ: установленная версия программы не поддерживает сжатие -- архив не " +"ПРЕДУПРЕЖДЕНИЕ: установленная версия программы не поддерживает сжатие -- " +"архив не " "будет сжиматься\n" -#: pg_backup_archiver.c:3328 +#: pg_backup_archiver.c:3435 #, c-format msgid "did not find magic string in file header\n" msgstr "в файле заголовка не найдена магическая строка\n" -#: pg_backup_archiver.c:3341 +#: pg_backup_archiver.c:3448 #, c-format msgid "unsupported version (%d.%d) in file header\n" msgstr "неподдерживаемая версия (%d.%d) в заголовке файла\n" -#: pg_backup_archiver.c:3346 +#: pg_backup_archiver.c:3453 #, c-format msgid "sanity check on integer size (%lu) failed\n" msgstr "несоответствие размера integer (%lu)\n" -#: pg_backup_archiver.c:3350 +#: pg_backup_archiver.c:3457 #, c-format msgid "" "WARNING: archive was made on a machine with larger integers, some operations " "might fail\n" msgstr "" -"ВНИМАНИЕ: архив был сделан на компьютере большей разрядности -- возможен " +"ПРЕДУПРЕЖДЕНИЕ: архив был сделан на компьютере большей разрядности -- " +"возможен " "сбой некоторых операций\n" -#: pg_backup_archiver.c:3360 +#: pg_backup_archiver.c:3467 #, c-format msgid "expected format (%d) differs from format found in file (%d)\n" msgstr "ожидаемый формат (%d) отличается от формата, указанного в файле (%d)\n" -#: pg_backup_archiver.c:3376 +#: pg_backup_archiver.c:3483 #, c-format msgid "" "WARNING: archive is compressed, but this installation does not support " "compression -- no data will be available\n" msgstr "" -"ВНИМАНИЕ: архив сжат, но установленная версия не поддерживает сжатие -- " +"ПРЕДУПРЕЖДЕНИЕ: архив сжат, но установленная версия не поддерживает сжатие -- " "данные недоступны\n" -#: pg_backup_archiver.c:3394 +#: pg_backup_archiver.c:3501 #, c-format msgid "WARNING: invalid creation date in header\n" -msgstr "ВНИМАНИЕ: неверная дата создания в заголовке\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: неверная дата создания в заголовке\n" -#: pg_backup_archiver.c:3482 +#: pg_backup_archiver.c:3577 #, c-format msgid "entering restore_toc_entries_prefork\n" msgstr "вход в restore_toc_entries_prefork\n" -#: pg_backup_archiver.c:3526 +#: pg_backup_archiver.c:3621 #, c-format msgid "processing item %d %s %s\n" msgstr "обработка объекта %d %s %s\n" -#: pg_backup_archiver.c:3578 +#: pg_backup_archiver.c:3673 #, c-format msgid "entering restore_toc_entries_parallel\n" msgstr "вход в restore_toc_entries_parallel\n" -#: pg_backup_archiver.c:3626 +#: pg_backup_archiver.c:3721 #, c-format msgid "entering main parallel loop\n" msgstr "вход в основной параллельный цикл\n" -#: pg_backup_archiver.c:3637 +#: pg_backup_archiver.c:3732 #, c-format msgid "skipping item %d %s %s\n" msgstr "объект %d %s %s пропускается\n" -#: pg_backup_archiver.c:3647 +#: pg_backup_archiver.c:3742 #, c-format msgid "launching item %d %s %s\n" msgstr "объект %d %s %s запускается\n" -#: pg_backup_archiver.c:3705 +#: pg_backup_archiver.c:3800 #, c-format msgid "finished main parallel loop\n" msgstr "основной параллельный цикл закончен\n" -#: pg_backup_archiver.c:3714 +#: pg_backup_archiver.c:3809 #, c-format msgid "entering restore_toc_entries_postfork\n" msgstr "вход в restore_toc_entries_postfork\n" -#: pg_backup_archiver.c:3732 +#: pg_backup_archiver.c:3827 #, c-format msgid "processing missed item %d %s %s\n" msgstr "обработка пропущенного объекта %d %s %s\n" -#: pg_backup_archiver.c:3881 +#: pg_backup_archiver.c:3976 #, c-format msgid "no item ready\n" msgstr "элемент не готов\n" -#: pg_backup_archiver.c:3931 +#: pg_backup_archiver.c:4026 #, c-format msgid "could not find slot of finished worker\n" msgstr "не удалось найти слот законченного рабочего объекта\n" -#: pg_backup_archiver.c:3933 +#: pg_backup_archiver.c:4028 #, c-format msgid "finished item %d %s %s\n" msgstr "закончен объект %d %s %s\n" -#: pg_backup_archiver.c:3946 +#: pg_backup_archiver.c:4041 #, c-format msgid "worker process failed: exit code %d\n" msgstr "рабочий процесс завершился с кодом возврата %d\n" -#: pg_backup_archiver.c:4108 +#: pg_backup_archiver.c:4203 #, c-format msgid "transferring dependency %d -> %d to %d\n" msgstr "переключение зависимости %d -> %d на %d\n" -#: pg_backup_archiver.c:4177 +#: pg_backup_archiver.c:4276 #, c-format msgid "reducing dependencies for %d\n" msgstr "уменьшение зависимостей для %d\n" -#: pg_backup_archiver.c:4216 +#: pg_backup_archiver.c:4315 #, c-format msgid "table \"%s\" could not be created, will not restore its data\n" msgstr "создать таблицу \"%s\" не удалось, её данные не будут восстановлены\n" #. translator: this is a module name -#: pg_backup_custom.c:93 +#: pg_backup_custom.c:94 msgid "custom archiver" msgstr "внешний архиватор" -#: pg_backup_custom.c:383 pg_backup_null.c:151 +#: pg_backup_custom.c:384 pg_backup_null.c:149 #, c-format msgid "invalid OID for large object\n" msgstr "неверный OID большого объекта\n" -#: pg_backup_custom.c:454 +#: pg_backup_custom.c:455 #, c-format msgid "unrecognized data block type (%d) while searching archive\n" msgstr "нераспознанный тип блока данных (%d) при поиске архива\n" -#: pg_backup_custom.c:465 +#: pg_backup_custom.c:466 #, c-format msgid "error during file seek: %s\n" msgstr "ошибка при перемещении в файле: %s\n" -#: pg_backup_custom.c:475 +#: pg_backup_custom.c:476 #, c-format msgid "" "could not find block ID %d in archive -- possibly due to out-of-order " @@ -980,7 +1003,7 @@ msgstr "" "последовательного запроса восстановления, который нельзя обработать из-за " "отсутствия смещений данных в архиве\n" -#: pg_backup_custom.c:480 +#: pg_backup_custom.c:481 #, c-format msgid "" "could not find block ID %d in archive -- possibly due to out-of-order " @@ -990,338 +1013,339 @@ msgstr "" "последовательного запроса восстановления, который нельзя обработать с " "файлом, не допускающим произвольный доступ\n" -#: pg_backup_custom.c:485 +#: pg_backup_custom.c:486 #, c-format msgid "could not find block ID %d in archive -- possibly corrupt archive\n" msgstr "не удалось найти в архиве блок с ID %d -- возможно, архив испорчен\n" -#: pg_backup_custom.c:492 +#: pg_backup_custom.c:493 #, c-format msgid "found unexpected block ID (%d) when reading data -- expected %d\n" msgstr "при чтении данных получен неожиданный ID блока (%d) -- ожидался: %d\n" -#: pg_backup_custom.c:506 +#: pg_backup_custom.c:507 #, c-format msgid "unrecognized data block type %d while restoring archive\n" msgstr "нераспознанный тип блока данных %d при восстановлении архива\n" -#: pg_backup_custom.c:708 pg_backup_custom.c:758 pg_backup_custom.c:907 -#: pg_backup_tar.c:1086 +#: pg_backup_custom.c:709 pg_backup_custom.c:759 pg_backup_custom.c:908 +#: pg_backup_tar.c:1078 #, c-format msgid "could not determine seek position in archive file: %s\n" msgstr "не удалось определить позицию в файле архива: %s\n" -#: pg_backup_custom.c:726 pg_backup_custom.c:763 +#: pg_backup_custom.c:727 pg_backup_custom.c:764 #, c-format msgid "could not close archive file: %s\n" msgstr "не удалось закрыть файл архива: %s\n" -#: pg_backup_custom.c:745 +#: pg_backup_custom.c:746 #, c-format msgid "can only reopen input archives\n" msgstr "повторно открыть можно только входные файлы\n" -#: pg_backup_custom.c:752 +#: pg_backup_custom.c:753 #, c-format msgid "parallel restore from standard input is not supported\n" msgstr "параллельное восстановление из стандартного ввода не поддерживается\n" -#: pg_backup_custom.c:754 +#: pg_backup_custom.c:755 #, c-format msgid "parallel restore from non-seekable file is not supported\n" msgstr "" "параллельное восстановление возможно только с файлом произвольного доступа\n" -#: pg_backup_custom.c:773 +#: pg_backup_custom.c:774 #, c-format msgid "could not set seek position in archive file: %s\n" msgstr "не удалось задать текущую позицию в файле архива: %s\n" -#: pg_backup_custom.c:791 +#: pg_backup_custom.c:792 #, c-format msgid "compressor active\n" msgstr "сжатие активно\n" -#: pg_backup_custom.c:911 +#: pg_backup_custom.c:912 #, c-format msgid "WARNING: ftell mismatch with expected position -- ftell used\n" msgstr "" -"ВНИМАНИЕ: позиция ftell не соответствует ожидаемой -- используется ftell\n" +"ПРЕДУПРЕЖДЕНИЕ: позиция ftell не соответствует ожидаемой -- используется " +"ftell\n" #. translator: this is a module name -#: pg_backup_db.c:28 +#: pg_backup_db.c:29 msgid "archiver (db)" msgstr "архиватор (БД)" -#: pg_backup_db.c:43 +#: pg_backup_db.c:44 #, c-format msgid "could not get server_version from libpq\n" msgstr "не удалось получить версию сервера из libpq\n" -#: pg_backup_db.c:54 pg_dumpall.c:1933 +#: pg_backup_db.c:55 pg_dumpall.c:1954 #, c-format msgid "server version: %s; %s version: %s\n" msgstr "версия сервера: %s; версия %s: %s\n" -#: pg_backup_db.c:56 pg_dumpall.c:1935 +#: pg_backup_db.c:57 pg_dumpall.c:1956 #, c-format msgid "aborting because of server version mismatch\n" msgstr "продолжение работы с другой версией сервера невозможно\n" -#: pg_backup_db.c:127 +#: pg_backup_db.c:128 #, c-format msgid "connecting to database \"%s\" as user \"%s\"\n" msgstr "подключение к базе \"%s\" с именем пользователя \"%s\"\n" -#: pg_backup_db.c:132 pg_backup_db.c:184 pg_backup_db.c:231 pg_backup_db.c:277 -#: pg_dumpall.c:1763 pg_dumpall.c:1871 +#: pg_backup_db.c:133 pg_backup_db.c:185 pg_backup_db.c:232 pg_backup_db.c:278 +#: pg_dumpall.c:1784 pg_dumpall.c:1892 msgid "Password: " msgstr "Пароль: " -#: pg_backup_db.c:165 +#: pg_backup_db.c:166 #, c-format msgid "failed to reconnect to database\n" msgstr "ошибка переподключения к базе данных\n" -#: pg_backup_db.c:170 +#: pg_backup_db.c:171 #, c-format msgid "could not reconnect to database: %s" msgstr "не удалось переподключиться к базе: %s" -#: pg_backup_db.c:186 +#: pg_backup_db.c:187 #, c-format msgid "connection needs password\n" msgstr "для подключения необходим пароль\n" -#: pg_backup_db.c:227 +#: pg_backup_db.c:228 #, c-format msgid "already connected to a database\n" msgstr "подключение к базе данных уже установлено\n" -#: pg_backup_db.c:269 +#: pg_backup_db.c:270 #, c-format msgid "failed to connect to database\n" msgstr "ошибка подключения к базе данных\n" -#: pg_backup_db.c:288 +#: pg_backup_db.c:289 #, c-format msgid "connection to database \"%s\" failed: %s" msgstr "не удалось подключиться к базе \"%s\": %s" -#: pg_backup_db.c:343 +#: pg_backup_db.c:344 #, c-format msgid "query failed: %s" msgstr "ошибка при выполнении запроса: %s" -#: pg_backup_db.c:345 +#: pg_backup_db.c:346 #, c-format msgid "query was: %s\n" msgstr "запрос: %s\n" -#: pg_backup_db.c:409 +#: pg_backup_db.c:410 #, c-format msgid "%s: %s Command was: %s\n" msgstr "%s: %s Выполнялась команда: %s\n" -#: pg_backup_db.c:465 pg_backup_db.c:537 pg_backup_db.c:544 +#: pg_backup_db.c:466 pg_backup_db.c:540 pg_backup_db.c:547 msgid "could not execute query" msgstr "не удалось выполнить запрос" -#: pg_backup_db.c:516 +#: pg_backup_db.c:519 #, c-format msgid "error returned by PQputCopyData: %s" msgstr "ошибка в PQputCopyData: %s" -#: pg_backup_db.c:563 +#: pg_backup_db.c:568 #, c-format msgid "error returned by PQputCopyEnd: %s" msgstr "ошибка в PQputCopyEnd: %s" -#: pg_backup_db.c:569 +#: pg_backup_db.c:574 #, c-format msgid "COPY failed for table \"%s\": %s" msgstr "сбой команды COPY для таблицы \"%s\": %s" -#: pg_backup_db.c:580 +#: pg_backup_db.c:587 msgid "could not start database transaction" msgstr "не удаётся начать транзакцию" -#: pg_backup_db.c:586 +#: pg_backup_db.c:595 msgid "could not commit database transaction" msgstr "не удалось зафиксировать транзакцию" #. translator: this is a module name -#: pg_backup_directory.c:63 +#: pg_backup_directory.c:64 msgid "directory archiver" msgstr "каталоговый архиватор" -#: pg_backup_directory.c:161 +#: pg_backup_directory.c:162 #, c-format msgid "no output directory specified\n" msgstr "выходной каталог не указан\n" -#: pg_backup_directory.c:190 +#: pg_backup_directory.c:191 #, c-format msgid "could not read directory \"%s\": %s\n" msgstr "не удалось прочитать каталог \"%s\": %s\n" -#: pg_backup_directory.c:194 +#: pg_backup_directory.c:195 #, c-format msgid "could not close directory \"%s\": %s\n" msgstr "не удалось закрыть каталог \"%s\": %s\n" -#: pg_backup_directory.c:200 +#: pg_backup_directory.c:201 #, c-format msgid "could not create directory \"%s\": %s\n" msgstr "создать каталог \"%s\" не удалось: %s\n" -#: pg_backup_directory.c:412 +#: pg_backup_directory.c:413 #, c-format msgid "could not close data file: %s\n" msgstr "не удалось закрыть файл данных: %s\n" -#: pg_backup_directory.c:453 +#: pg_backup_directory.c:454 #, c-format msgid "could not open large object TOC file \"%s\" for input: %s\n" msgstr "" "не удалось открыть для чтения файл оглавления больших объектов \"%s\": %s\n" -#: pg_backup_directory.c:464 +#: pg_backup_directory.c:465 #, c-format msgid "invalid line in large object TOC file \"%s\": \"%s\"\n" msgstr "неверная строка в файле оглавления больших объектов \"%s\": \"%s\"\n" -#: pg_backup_directory.c:473 +#: pg_backup_directory.c:474 #, c-format msgid "error reading large object TOC file \"%s\"\n" msgstr "ошибка чтения файла оглавления больших объектов \"%s\"\n" -#: pg_backup_directory.c:477 +#: pg_backup_directory.c:478 #, c-format msgid "could not close large object TOC file \"%s\": %s\n" msgstr "не удалось закрыть файл оглавления больших объектов \"%s\": %s\n" -#: pg_backup_directory.c:687 +#: pg_backup_directory.c:688 #, c-format msgid "could not write to blobs TOC file\n" msgstr "не удалось записать в файл оглавления больших объектов\n" -#: pg_backup_directory.c:719 +#: pg_backup_directory.c:720 #, c-format msgid "file name too long: \"%s\"\n" msgstr "слишком длинное имя файла: \"%s\"\n" -#: pg_backup_directory.c:805 +#: pg_backup_directory.c:806 #, c-format msgid "error during backup\n" msgstr "ошибка в процессе резервного копирования\n" -#: pg_backup_null.c:76 +#: pg_backup_null.c:74 #, c-format msgid "this format cannot be read\n" msgstr "этот формат нельзя прочитать\n" #. translator: this is a module name -#: pg_backup_tar.c:109 +#: pg_backup_tar.c:108 msgid "tar archiver" msgstr "архиватор tar" -#: pg_backup_tar.c:190 +#: pg_backup_tar.c:189 #, c-format msgid "could not open TOC file \"%s\" for output: %s\n" msgstr "не удалось открыть для записи файл оглавления \"%s\": %s\n" -#: pg_backup_tar.c:198 +#: pg_backup_tar.c:197 #, c-format msgid "could not open TOC file for output: %s\n" msgstr "не удалось открыть для записи файл оглавления: %s\n" -#: pg_backup_tar.c:226 pg_backup_tar.c:382 +#: pg_backup_tar.c:218 pg_backup_tar.c:374 #, c-format msgid "compression is not supported by tar archive format\n" msgstr "формат архива tar не поддерживает сжатие\n" -#: pg_backup_tar.c:234 +#: pg_backup_tar.c:226 #, c-format msgid "could not open TOC file \"%s\" for input: %s\n" msgstr "не удалось открыть для чтения файл оглавления \"%s\": %s\n" -#: pg_backup_tar.c:241 +#: pg_backup_tar.c:233 #, c-format msgid "could not open TOC file for input: %s\n" msgstr "не удалось открыть для чтения файл оглавления: %s\n" -#: pg_backup_tar.c:368 +#: pg_backup_tar.c:360 #, c-format msgid "could not find file \"%s\" in archive\n" msgstr "не удалось найти файл \"%s\" в архиве\n" -#: pg_backup_tar.c:424 +#: pg_backup_tar.c:416 #, c-format msgid "could not generate temporary file name: %s\n" msgstr "не удалось создать временный файл: %s\n" -#: pg_backup_tar.c:433 +#: pg_backup_tar.c:425 #, c-format msgid "could not open temporary file\n" msgstr "не удалось открыть временный файл\n" -#: pg_backup_tar.c:460 +#: pg_backup_tar.c:452 #, c-format msgid "could not close tar member\n" msgstr "не удалось закрыть компонент tar-архива\n" -#: pg_backup_tar.c:573 +#: pg_backup_tar.c:565 #, c-format msgid "internal error -- neither th nor fh specified in tarReadRaw()\n" msgstr "внутренняя ошибка -- в tarReadRaw() не указан ни th, ни fh\n" -#: pg_backup_tar.c:696 +#: pg_backup_tar.c:688 #, c-format msgid "unexpected COPY statement syntax: \"%s\"\n" msgstr "недопустимый синтаксис оператора COPY: \"%s\"\n" -#: pg_backup_tar.c:958 +#: pg_backup_tar.c:950 #, c-format msgid "invalid OID for large object (%u)\n" msgstr "неверный OID для большого объекта (%u)\n" -#: pg_backup_tar.c:1095 +#: pg_backup_tar.c:1087 #, c-format msgid "archive member too large for tar format\n" msgstr "компонент архива слишком велик для формата tar\n" -#: pg_backup_tar.c:1109 +#: pg_backup_tar.c:1101 #, c-format msgid "could not close temporary file: %s\n" msgstr "не удалось закрыть временный файл: %s\n" -#: pg_backup_tar.c:1119 +#: pg_backup_tar.c:1111 #, c-format msgid "actual file length (%s) does not match expected (%s)\n" msgstr "действительная длина файла (%s) не равна ожидаемой (%s)\n" -#: pg_backup_tar.c:1156 +#: pg_backup_tar.c:1148 #, c-format msgid "moving from position %s to next member at file position %s\n" msgstr "переход от позиции %s к следующему компоненту в позиции %s\n" -#: pg_backup_tar.c:1167 +#: pg_backup_tar.c:1159 #, c-format msgid "now at file position %s\n" msgstr "текущая позиция в файле %s\n" -#: pg_backup_tar.c:1176 pg_backup_tar.c:1206 +#: pg_backup_tar.c:1168 pg_backup_tar.c:1198 #, c-format msgid "could not find header for file \"%s\" in tar archive\n" msgstr "в архиве tar не найден заголовок для файла \"%s\"\n" -#: pg_backup_tar.c:1190 +#: pg_backup_tar.c:1182 #, c-format msgid "skipping tar member %s\n" msgstr "пропускается компонент tar %s\n" -#: pg_backup_tar.c:1194 +#: pg_backup_tar.c:1186 #, c-format msgid "" "restoring data out of order is not supported in this archive format: \"%s\" " @@ -1331,7 +1355,7 @@ msgstr "" "поддерживается: требуется компонент \"%s\", но в файле архива прежде идёт " "\"%s\".\n" -#: pg_backup_tar.c:1241 +#: pg_backup_tar.c:1233 #, c-format msgid "incomplete tar header found (%lu byte)\n" msgid_plural "incomplete tar header found (%lu bytes)\n" @@ -1339,12 +1363,12 @@ msgstr[0] "найден неполный tar-заголовок (размер %l msgstr[1] "найден неполный tar-заголовок (размер %lu байта)\n" msgstr[2] "найден неполный tar-заголовок (размер %lu байтов)\n" -#: pg_backup_tar.c:1279 +#: pg_backup_tar.c:1271 #, c-format msgid "TOC Entry %s at %s (length %lu, checksum %d)\n" msgstr "Запись оглавления %s в %s (длина: %lu, контр. сумма: %d)\n" -#: pg_backup_tar.c:1289 +#: pg_backup_tar.c:1281 #, c-format msgid "" "corrupt tar header found in %s (expected %d, computed %d) file position %s\n" @@ -1357,9 +1381,9 @@ msgstr "" msgid "%s: unrecognized section name: \"%s\"\n" msgstr "%s: нераспознанное имя раздела: \"%s\"\n" -#: pg_backup_utils.c:56 pg_dump.c:539 pg_dump.c:556 pg_dumpall.c:305 -#: pg_dumpall.c:315 pg_dumpall.c:325 pg_dumpall.c:334 pg_dumpall.c:350 -#: pg_dumpall.c:408 pg_restore.c:278 pg_restore.c:294 pg_restore.c:306 +#: pg_backup_utils.c:56 pg_dump.c:520 pg_dump.c:537 pg_dumpall.c:300 +#: pg_dumpall.c:310 pg_dumpall.c:320 pg_dumpall.c:329 pg_dumpall.c:345 +#: pg_dumpall.c:403 pg_restore.c:277 pg_restore.c:293 pg_restore.c:305 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" @@ -1369,56 +1393,61 @@ msgstr "Для дополнительной информации попробу msgid "out of on_exit_nicely slots\n" msgstr "превышен предел обработчиков штатного выхода\n" -#: pg_dump.c:554 pg_dumpall.c:313 pg_restore.c:292 +#: pg_dump.c:490 +#, c-format +msgid "compression level must be in range 0..9\n" +msgstr "уровень сжатия должен быть в диапазоне 0..9\n" + +#: pg_dump.c:535 pg_dumpall.c:308 pg_restore.c:291 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: слишком много аргументов командной строки (первый: \"%s\")\n" -#: pg_dump.c:567 +#: pg_dump.c:548 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together\n" msgstr "параметры -s/--schema-only и -a/--data-only исключают друг друга\n" -#: pg_dump.c:573 +#: pg_dump.c:554 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together\n" msgstr "параметры -c/--clean и -a/--data-only исключают друг друга\n" -#: pg_dump.c:579 +#: pg_dump.c:560 #, c-format msgid "" "options --inserts/--column-inserts and -o/--oids cannot be used together\n" msgstr "" "параметры --inserts/--column-inserts и -o/--oids исключают друг друга\n" -#: pg_dump.c:580 +#: pg_dump.c:561 #, c-format msgid "(The INSERT command cannot set OIDs.)\n" msgstr "(В INSERT нельзя определять OID.)\n" -#: pg_dump.c:585 +#: pg_dump.c:566 #, c-format msgid "option --if-exists requires option -c/--clean\n" msgstr "параметру --if-exists требуется параметр -c/--clean\n" -#: pg_dump.c:613 +#: pg_dump.c:594 #, c-format msgid "%s: invalid number of parallel jobs\n" msgstr "%s: неверное число параллельных заданий\n" -#: pg_dump.c:617 +#: pg_dump.c:598 #, c-format msgid "parallel backup only supported by the directory format\n" msgstr "" "параллельное резервное копирование поддерживается только с форматом \"каталог" "\"\n" -#: pg_dump.c:627 +#: pg_dump.c:608 #, c-format msgid "could not open output file \"%s\" for writing\n" msgstr "не удалось открыть выходной файл \"%s\" для записи\n" -#: pg_dump.c:686 +#: pg_dump.c:667 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1429,22 +1458,27 @@ msgstr "" "Если они вам не нужны, укажите при запуске ключ\n" "--no-synchronized-snapshots.\n" -#: pg_dump.c:699 +#: pg_dump.c:674 +#, c-format +msgid "Exported snapshots are not supported by this server version.\n" +msgstr "Экспортированные снимки не поддерживаются этой версией сервера.\n" + +#: pg_dump.c:685 #, c-format msgid "last built-in OID is %u\n" msgstr "последний системный OID: %u\n" -#: pg_dump.c:708 +#: pg_dump.c:694 #, c-format msgid "No matching schemas were found\n" msgstr "Соответствующие схемы не найдены\n" -#: pg_dump.c:720 +#: pg_dump.c:706 #, c-format msgid "No matching tables were found\n" msgstr "Соответствующие таблицы не найдены\n" -#: pg_dump.c:865 +#: pg_dump.c:860 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1453,17 +1487,17 @@ msgstr "" "%s сохраняет резервную копию БД в текстовом файле или другом виде.\n" "\n" -#: pg_dump.c:866 pg_dumpall.c:553 pg_restore.c:432 +#: pg_dump.c:861 pg_dumpall.c:548 pg_restore.c:432 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_dump.c:867 +#: pg_dump.c:862 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД]\n" -#: pg_dump.c:869 pg_dumpall.c:556 pg_restore.c:435 +#: pg_dump.c:864 pg_dumpall.c:551 pg_restore.c:435 #, c-format msgid "" "\n" @@ -1472,12 +1506,12 @@ msgstr "" "\n" "Общие параметры:\n" -#: pg_dump.c:870 +#: pg_dump.c:865 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=ИМЯ имя выходного файла или каталога\n" -#: pg_dump.c:871 +#: pg_dump.c:866 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1487,7 +1521,7 @@ msgstr "" " (пользовательский | каталог | tar |\n" " текстовый (по умолчанию))\n" -#: pg_dump.c:873 +#: pg_dump.c:868 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr "" @@ -1495,23 +1529,23 @@ msgstr "" "число\n" " заданий\n" -#: pg_dump.c:874 +#: pg_dump.c:869 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose режим подробных сообщений\n" -#: pg_dump.c:875 pg_dumpall.c:558 +#: pg_dump.c:870 pg_dumpall.c:553 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_dump.c:876 +#: pg_dump.c:871 #, c-format msgid "" " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 уровень сжатия при архивации\n" -#: pg_dump.c:877 pg_dumpall.c:559 +#: pg_dump.c:872 pg_dumpall.c:554 #, c-format msgid "" " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" @@ -1519,12 +1553,12 @@ msgstr "" " --lock-wait-timeout=ТАЙМАУТ прервать операцию при таймауте блокировки " "таблицы\n" -#: pg_dump.c:878 pg_dumpall.c:560 +#: pg_dump.c:873 pg_dumpall.c:555 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_dump.c:880 pg_dumpall.c:561 +#: pg_dump.c:875 pg_dumpall.c:556 #, c-format msgid "" "\n" @@ -1533,17 +1567,17 @@ msgstr "" "\n" "Параметры, управляющие выводом:\n" -#: pg_dump.c:881 pg_dumpall.c:562 +#: pg_dump.c:876 pg_dumpall.c:557 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only выгрузить только данные, без схемы\n" -#: pg_dump.c:882 +#: pg_dump.c:877 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs выгрузить также большие объекты\n" -#: pg_dump.c:883 pg_restore.c:446 +#: pg_dump.c:878 pg_restore.c:446 #, c-format msgid "" " -c, --clean clean (drop) database objects before " @@ -1552,7 +1586,7 @@ msgstr "" " -c, --clean очистить (удалить) объекты БД при " "восстановлении\n" -#: pg_dump.c:884 +#: pg_dump.c:879 #, c-format msgid "" " -C, --create include commands to create database in dump\n" @@ -1560,27 +1594,27 @@ msgstr "" " -C, --create добавить в копию команды создания базы " "данных\n" -#: pg_dump.c:885 +#: pg_dump.c:880 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=КОДИРОВКА выгружать данные в заданной кодировке\n" -#: pg_dump.c:886 +#: pg_dump.c:881 #, c-format msgid " -n, --schema=SCHEMA dump the named schema(s) only\n" msgstr " -n, --schema=СХЕМА выгрузить только указанную схему(ы)\n" -#: pg_dump.c:887 +#: pg_dump.c:882 #, c-format msgid " -N, --exclude-schema=SCHEMA do NOT dump the named schema(s)\n" msgstr " -N, --exclude-schema=СХЕМА НЕ выгружать указанную схему(ы)\n" -#: pg_dump.c:888 pg_dumpall.c:565 +#: pg_dump.c:883 pg_dumpall.c:560 #, c-format msgid " -o, --oids include OIDs in dump\n" msgstr " -o, --oids выгружать данные с OID\n" -#: pg_dump.c:889 +#: pg_dump.c:884 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1589,12 +1623,12 @@ msgstr "" " -O, --no-owner не восстанавливать владение объектами\n" " при использовании текстового формата\n" -#: pg_dump.c:891 pg_dumpall.c:568 +#: pg_dump.c:886 pg_dumpall.c:563 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only выгрузить только схему, без данных\n" -#: pg_dump.c:892 +#: pg_dump.c:887 #, c-format msgid "" " -S, --superuser=NAME superuser user name to use in plain-text " @@ -1603,27 +1637,27 @@ msgstr "" " -S, --superuser=ИМЯ имя пользователя, который будет задействован\n" " при восстановлении из текстового формата\n" -#: pg_dump.c:893 +#: pg_dump.c:888 #, c-format msgid " -t, --table=TABLE dump the named table(s) only\n" msgstr " -t, --table=ТАБЛИЦА выгрузить только указанную таблицу(ы)\n" -#: pg_dump.c:894 +#: pg_dump.c:889 #, c-format msgid " -T, --exclude-table=TABLE do NOT dump the named table(s)\n" msgstr " -T, --exclude-table=ТАБЛИЦА НЕ выгружать указанную таблицу(ы)\n" -#: pg_dump.c:895 pg_dumpall.c:571 +#: pg_dump.c:890 pg_dumpall.c:566 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges не выгружать права (назначение/отзыв)\n" -#: pg_dump.c:896 pg_dumpall.c:572 +#: pg_dump.c:891 pg_dumpall.c:567 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade только для утилит обновления БД\n" -#: pg_dump.c:897 pg_dumpall.c:573 +#: pg_dump.c:892 pg_dumpall.c:568 #, c-format msgid "" " --column-inserts dump data as INSERT commands with column " @@ -1632,7 +1666,7 @@ msgstr "" " --column-inserts выгружать данные в виде INSERT с именами " "колонок\n" -#: pg_dump.c:898 pg_dumpall.c:574 +#: pg_dump.c:893 pg_dumpall.c:569 #, c-format msgid "" " --disable-dollar-quoting disable dollar quoting, use SQL standard " @@ -1641,7 +1675,7 @@ msgstr "" " --disable-dollar-quoting отключить спецстроки с $, выводить строки\n" " по стандарту SQL\n" -#: pg_dump.c:899 pg_dumpall.c:575 pg_restore.c:462 +#: pg_dump.c:894 pg_dumpall.c:570 pg_restore.c:462 #, c-format msgid "" " --disable-triggers disable triggers during data-only restore\n" @@ -1649,19 +1683,24 @@ msgstr "" " --disable-triggers отключить триггеры при восстановлении\n" " только данных, без схемы\n" -#: pg_dump.c:900 +#: pg_dump.c:895 pg_restore.c:463 +#, c-format +msgid " --enable-row-security enable row level security\n" +msgstr " --enable-row-security включить защиту на уровне строк\n" + +#: pg_dump.c:896 #, c-format msgid "" " --exclude-table-data=TABLE do NOT dump data for the named table(s)\n" msgstr " --exclude-table-data=ТАБЛИЦА НЕ выгружать указанную таблицу(ы)\n" -#: pg_dump.c:901 pg_dumpall.c:576 pg_restore.c:463 +#: pg_dump.c:897 pg_dumpall.c:571 pg_restore.c:464 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr "" " --if-exists применять IF EXISTS при удалении объектов\n" -#: pg_dump.c:902 pg_dumpall.c:577 +#: pg_dump.c:898 pg_dumpall.c:572 #, c-format msgid "" " --inserts dump data as INSERT commands, rather than " @@ -1670,13 +1709,13 @@ msgstr "" " --inserts выгрузить данные в виде команд INSERT, не " "COPY\n" -#: pg_dump.c:903 pg_dumpall.c:578 +#: pg_dump.c:899 pg_dumpall.c:573 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr "" " --no-security-labels не выгружать назначения меток безопасности\n" -#: pg_dump.c:904 +#: pg_dump.c:900 #, c-format msgid "" " --no-synchronized-snapshots do not use synchronized snapshots in parallel " @@ -1685,20 +1724,20 @@ msgstr "" " --no-synchronized-snapshots не использовать синхронизированные снимки\n" " в параллельных заданиях\n" -#: pg_dump.c:905 pg_dumpall.c:579 +#: pg_dump.c:901 pg_dumpall.c:574 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr "" " --no-tablespaces не выгружать назначения табличных " "пространств\n" -#: pg_dump.c:906 pg_dumpall.c:580 +#: pg_dump.c:902 pg_dumpall.c:575 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr "" " --no-unlogged-table-data не выгружать данные нежурналируемых таблиц\n" -#: pg_dump.c:907 pg_dumpall.c:581 +#: pg_dump.c:903 pg_dumpall.c:576 #, c-format msgid "" " --quote-all-identifiers quote all identifiers, even if not key words\n" @@ -1706,7 +1745,7 @@ msgstr "" " --quote-all-identifiers заключать в кавычки все идентификаторы,\n" " а не только ключевые слова\n" -#: pg_dump.c:908 +#: pg_dump.c:904 #, c-format msgid "" " --section=SECTION dump named section (pre-data, data, or post-" @@ -1715,7 +1754,7 @@ msgstr "" " --section=РАЗДЕЛ выгрузить заданный раздел\n" " (pre-data, data или post-data)\n" -#: pg_dump.c:909 +#: pg_dump.c:905 #, c-format msgid "" " --serializable-deferrable wait until the dump can run without " @@ -1724,7 +1763,15 @@ msgstr "" " --serializable-deferrable дождаться момента для выгрузки данных без " "аномалий\n" -#: pg_dump.c:910 pg_dumpall.c:582 pg_restore.c:469 +#: pg_dump.c:906 +#, c-format +msgid "" +" --snapshot=SNAPSHOT use given synchronous snapshot for the dump\n" +msgstr "" +" --snapshot=СНИМОК использовать при выгрузке заданный синхронный " +"снимок\n" + +#: pg_dump.c:907 pg_dumpall.c:577 pg_restore.c:470 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1736,7 +1783,7 @@ msgstr "" " устанавливать владельца, используя команды\n" " SET SESSION AUTHORIZATION вместо ALTER OWNER\n" -#: pg_dump.c:914 pg_dumpall.c:586 pg_restore.c:473 +#: pg_dump.c:911 pg_dumpall.c:581 pg_restore.c:474 #, c-format msgid "" "\n" @@ -1745,33 +1792,33 @@ msgstr "" "\n" "Параметры подключения:\n" -#: pg_dump.c:915 +#: pg_dump.c:912 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=БД имя базы данных для выгрузки\n" -#: pg_dump.c:916 pg_dumpall.c:588 pg_restore.c:474 +#: pg_dump.c:913 pg_dumpall.c:583 pg_restore.c:475 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n" -#: pg_dump.c:917 pg_dumpall.c:590 pg_restore.c:475 +#: pg_dump.c:914 pg_dumpall.c:585 pg_restore.c:476 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=ПОРТ номер порта сервера БД\n" -#: pg_dump.c:918 pg_dumpall.c:591 pg_restore.c:476 +#: pg_dump.c:915 pg_dumpall.c:586 pg_restore.c:477 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=ИМЯ имя пользователя баз данных\n" -#: pg_dump.c:919 pg_dumpall.c:592 pg_restore.c:477 +#: pg_dump.c:916 pg_dumpall.c:587 pg_restore.c:478 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: pg_dump.c:920 pg_dumpall.c:593 pg_restore.c:478 +#: pg_dump.c:917 pg_dumpall.c:588 pg_restore.c:479 #, c-format msgid "" " -W, --password force password prompt (should happen " @@ -1779,12 +1826,12 @@ msgid "" msgstr "" " -W, --password запрашивать пароль всегда (обычно не требуется)\n" -#: pg_dump.c:921 pg_dumpall.c:594 +#: pg_dump.c:918 pg_dumpall.c:589 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ИМЯ_РОЛИ выполнить SET ROLE перед выгрузкой\n" -#: pg_dump.c:923 +#: pg_dump.c:920 #, c-format msgid "" "\n" @@ -1797,147 +1844,165 @@ msgstr "" "PGDATABASE.\n" "\n" -#: pg_dump.c:925 pg_dumpall.c:598 pg_restore.c:485 +#: pg_dump.c:922 pg_dumpall.c:593 pg_restore.c:486 #, c-format msgid "Report bugs to .\n" msgstr "Об ошибках сообщайте по адресу .\n" -#: pg_dump.c:943 +#: pg_dump.c:941 #, c-format msgid "invalid client encoding \"%s\" specified\n" msgstr "указана неверная клиентская кодировка \"%s\"\n" -#: pg_dump.c:1105 +#: pg_dump.c:1126 #, c-format msgid "invalid output format \"%s\" specified\n" msgstr "указан неверный формат вывода: \"%s\"\n" -#: pg_dump.c:1127 +#: pg_dump.c:1148 #, c-format msgid "server version must be at least 7.3 to use schema selection switches\n" msgstr "" "для использования параметров выбора схемы нужен сервер версии 7.3 или новее\n" -#: pg_dump.c:1403 +#: pg_dump.c:1442 #, c-format -msgid "dumping contents of table %s\n" -msgstr "выгрузка содержимого таблицы %s\n" +msgid "dumping contents of table \"%s\".\"%s\"\n" +msgstr "выгрузка содержимого таблицы \"%s\".\"%s\"\n" -#: pg_dump.c:1526 +#: pg_dump.c:1566 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed.\n" msgstr "Ошибка выгрузки таблицы \"%s\": сбой в PQendcopy().\n" -#: pg_dump.c:1527 pg_dump.c:1537 +#: pg_dump.c:1567 pg_dump.c:1577 #, c-format msgid "Error message from server: %s" msgstr "Сообщение об ошибке с сервера: %s" -#: pg_dump.c:1528 pg_dump.c:1538 +#: pg_dump.c:1568 pg_dump.c:1578 #, c-format msgid "The command was: %s\n" msgstr "Выполнялась команда: %s\n" -#: pg_dump.c:1536 +#: pg_dump.c:1576 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed.\n" msgstr "Ошибка выгрузки таблицы \"%s\": сбой в PQgetResult().\n" -#: pg_dump.c:2174 +#: pg_dump.c:2215 #, c-format msgid "saving database definition\n" msgstr "сохранение определения базы данных\n" -#: pg_dump.c:2503 +#: pg_dump.c:2548 #, c-format msgid "saving encoding = %s\n" msgstr "сохранение кодировки (%s)\n" -#: pg_dump.c:2530 +#: pg_dump.c:2575 #, c-format msgid "saving standard_conforming_strings = %s\n" msgstr "сохранение standard_conforming_strings (%s)\n" -#: pg_dump.c:2563 +#: pg_dump.c:2608 #, c-format msgid "reading large objects\n" msgstr "чтение больших объектов\n" -#: pg_dump.c:2695 +#: pg_dump.c:2740 #, c-format msgid "saving large objects\n" msgstr "сохранение больших объектов\n" -#: pg_dump.c:2742 +#: pg_dump.c:2787 #, c-format msgid "error reading large object %u: %s" msgstr "ошибка чтения большого объекта %u: %s" -#: pg_dump.c:2935 +#: pg_dump.c:2839 +#, c-format +msgid "reading row security enabled for table \"%s\".\"%s\"\n" +msgstr "чтение информации о защите строк для таблицы \"%s\".\"%s\"\n" + +#: pg_dump.c:2870 +#, c-format +msgid "reading policies for table \"%s\".\"%s\"\n" +msgstr "чтение политик таблицы \"%s\".\"%s\"\n" + +#: pg_dump.c:3000 +#, c-format +msgid "unexpected policy command type: \"%s\"\n" +msgstr "нераспознанный тип команды в политике: \"%s\"\n" + +#: pg_dump.c:3215 #, c-format msgid "could not find parent extension for %s\n" msgstr "не удалось найти родительское расширение для %s\n" # TO REVIEW -#: pg_dump.c:3038 +#: pg_dump.c:3318 #, c-format msgid "WARNING: owner of schema \"%s\" appears to be invalid\n" -msgstr "ВНИМАНИЕ: у схемы \"%s\" по-видимому неправильный владелец\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: у схемы \"%s\" по-видимому неправильный владелец\n" -#: pg_dump.c:3081 +#: pg_dump.c:3361 #, c-format msgid "schema with OID %u does not exist\n" msgstr "схема с OID %u не существует\n" -#: pg_dump.c:3431 +#: pg_dump.c:3711 #, c-format msgid "WARNING: owner of data type \"%s\" appears to be invalid\n" -msgstr "ВНИМАНИЕ: у типа данных \"%s\" по-видимому неправильный владелец\n" +msgstr "" +"ПРЕДУПРЕЖДЕНИЕ: у типа данных \"%s\" по-видимому неправильный владелец\n" -#: pg_dump.c:3542 +#: pg_dump.c:3822 #, c-format msgid "WARNING: owner of operator \"%s\" appears to be invalid\n" -msgstr "ВНИМАНИЕ: у оператора \"%s\" по-видимому неправильный владелец\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: у оператора \"%s\" по-видимому неправильный владелец\n" -#: pg_dump.c:3801 +#: pg_dump.c:4081 #, c-format msgid "WARNING: owner of operator class \"%s\" appears to be invalid\n" msgstr "" -"ВНИМАНИЕ: у класса операторов \"%s\" по-видимому неправильный владелец\n" +"ПРЕДУПРЕЖДЕНИЕ: у класса операторов \"%s\" по-видимому неправильный владелец\n" -#: pg_dump.c:3889 +#: pg_dump.c:4169 #, c-format msgid "WARNING: owner of operator family \"%s\" appears to be invalid\n" msgstr "" -"ВНИМАНИЕ: у семейства операторов \"%s\" по-видимому неправильный владелец\n" +"ПРЕДУПРЕЖДЕНИЕ: у семейства операторов \"%s\" по-видимому неправильный " +"владелец\n" -#: pg_dump.c:4048 +#: pg_dump.c:4307 #, c-format msgid "WARNING: owner of aggregate function \"%s\" appears to be invalid\n" msgstr "" -"ВНИМАНИЕ: у агрегатной функции \"%s\" по-видимому неправильный владелец\n" +"ПРЕДУПРЕЖДЕНИЕ: у агрегатной функции \"%s\" по-видимому неправильный " +"владелец\n" -#: pg_dump.c:4252 +#: pg_dump.c:4489 #, c-format msgid "WARNING: owner of function \"%s\" appears to be invalid\n" -msgstr "ВНИМАНИЕ: у функции \"%s\" по-видимому неправильный владелец\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: у функции \"%s\" по-видимому неправильный владелец\n" -#: pg_dump.c:4870 +#: pg_dump.c:5162 #, c-format msgid "WARNING: owner of table \"%s\" appears to be invalid\n" -msgstr "ВНИМАНИЕ: у таблицы \"%s\" по-видимому неправильный владелец\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: у таблицы \"%s\" по-видимому неправильный владелец\n" -#: pg_dump.c:5022 +#: pg_dump.c:5314 #, c-format -msgid "reading indexes for table \"%s\"\n" -msgstr "чтение индексов таблицы \"%s\"\n" +msgid "reading indexes for table \"%s\".\"%s\"\n" +msgstr "чтение индексов таблицы \"%s\".\"%s\"\n" -#: pg_dump.c:5388 +#: pg_dump.c:5681 #, c-format -msgid "reading foreign key constraints for table \"%s\"\n" -msgstr "чтение ограничений внешних ключей таблицы \"%s\"\n" +msgid "reading foreign key constraints for table \"%s\".\"%s\"\n" +msgstr "чтение ограничений внешних ключей таблицы \"%s\".\"%s\"\n" -#: pg_dump.c:5633 +#: pg_dump.c:5927 #, c-format msgid "" "failed sanity check, parent table OID %u of pg_rewrite entry OID %u not " @@ -1946,12 +2011,12 @@ msgstr "" "по OID %u не удалось найти родительскую таблицу для записи pg_rewrite с OID " "%u\n" -#: pg_dump.c:5726 +#: pg_dump.c:6020 #, c-format -msgid "reading triggers for table \"%s\"\n" -msgstr "чтение триггеров таблицы \"%s\"\n" +msgid "reading triggers for table \"%s\".\"%s\"\n" +msgstr "чтение триггеров таблицы \"%s\".\"%s\"\n" -#: pg_dump.c:5887 +#: pg_dump.c:6182 #, c-format msgid "" "query produced null referenced table name for foreign key trigger \"%s\" on " @@ -1960,32 +2025,32 @@ msgstr "" "запрос не вернул имя целевой таблицы для триггера внешнего ключа \"%s\" в " "таблице \"%s\" (OID целевой таблицы: %u)\n" -#: pg_dump.c:6339 +#: pg_dump.c:6745 #, c-format -msgid "finding the columns and types of table \"%s\"\n" -msgstr "поиск колонок и типов таблицы \"%s\"\n" +msgid "finding the columns and types of table \"%s\".\"%s\"\n" +msgstr "поиск колонок и типов таблицы \"%s\".\"%s\"\n" -#: pg_dump.c:6517 +#: pg_dump.c:6924 #, c-format msgid "invalid column numbering in table \"%s\"\n" msgstr "неверная нумерация колонок в таблице \"%s\"\n" -#: pg_dump.c:6551 +#: pg_dump.c:6958 #, c-format -msgid "finding default expressions of table \"%s\"\n" -msgstr "поиск выражений по умолчанию для таблицы \"%s\"\n" +msgid "finding default expressions of table \"%s\".\"%s\"\n" +msgstr "поиск выражений по умолчанию для таблицы \"%s\".\"%s\"\n" -#: pg_dump.c:6603 +#: pg_dump.c:7011 #, c-format msgid "invalid adnum value %d for table \"%s\"\n" msgstr "неверное значение adnum (%d) в таблице \"%s\"\n" -#: pg_dump.c:6675 +#: pg_dump.c:7083 #, c-format -msgid "finding check constraints for table \"%s\"\n" -msgstr "поиск ограничений-проверок для таблицы \"%s\"\n" +msgid "finding check constraints for table \"%s\".\"%s\"\n" +msgstr "поиск ограничений-проверок для таблицы \"%s\".\"%s\"\n" -#: pg_dump.c:6770 +#: pg_dump.c:7179 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d\n" msgid_plural "expected %d check constraints on table \"%s\" but found %d\n" @@ -1996,95 +2061,115 @@ msgstr[1] "" msgstr[2] "" "ожидалось %d ограничений-проверок для таблицы \"%s\", но найдено: %d\n" -#: pg_dump.c:6774 +#: pg_dump.c:7183 #, c-format msgid "(The system catalogs might be corrupted.)\n" msgstr "(Возможно повреждены системные каталоги.)\n" -#: pg_dump.c:8143 +#: pg_dump.c:8558 #, c-format msgid "WARNING: typtype of data type \"%s\" appears to be invalid\n" -msgstr "ВНИМАНИЕ: у типа данных \"%s\" по-видимому неправильный тип типа\n" +msgstr "" +"ПРЕДУПРЕЖДЕНИЕ: у типа данных \"%s\" по-видимому неправильный тип типа\n" -#: pg_dump.c:9591 +#: pg_dump.c:10017 #, c-format msgid "WARNING: bogus value in proargmodes array\n" -msgstr "ВНИМАНИЕ: неприемлемое значение в массиве proargmodes\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: неприемлемое значение в массиве proargmodes\n" -#: pg_dump.c:9919 +#: pg_dump.c:10368 #, c-format msgid "WARNING: could not parse proallargtypes array\n" -msgstr "ВНИМАНИЕ: не удалось разобрать массив proallargtypes\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: не удалось разобрать массив proallargtypes\n" -#: pg_dump.c:9935 +#: pg_dump.c:10384 #, c-format msgid "WARNING: could not parse proargmodes array\n" -msgstr "ВНИМАНИЕ: не удалось разобрать массив proargmodes\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: не удалось разобрать массив proargmodes\n" -#: pg_dump.c:9949 +#: pg_dump.c:10398 #, c-format msgid "WARNING: could not parse proargnames array\n" -msgstr "ВНИМАНИЕ: не удалось разобрать массив proargnames\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: не удалось разобрать массив proargnames\n" -#: pg_dump.c:9960 +#: pg_dump.c:10409 #, c-format msgid "WARNING: could not parse proconfig array\n" -msgstr "ВНИМАНИЕ: не удалось разобрать массив proconfig\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: не удалось разобрать массив proconfig\n" # TO REVEIW -#: pg_dump.c:10015 +#: pg_dump.c:10480 #, c-format msgid "unrecognized provolatile value for function \"%s\"\n" msgstr "недопустимое значение provolatile для функции \"%s\"\n" -#: pg_dump.c:10237 +#: pg_dump.c:10658 #, c-format msgid "WARNING: bogus value in pg_cast.castfunc or pg_cast.castmethod field\n" msgstr "" -"WARNING: неприемлемое значение в поле pg_cast.castfunc или pg_cast." +"ПРЕДУПРЕЖДЕНИЕ: неприемлемое значение в поле pg_cast.castfunc или pg_cast." "castmethod\n" -#: pg_dump.c:10240 +#: pg_dump.c:10661 #, c-format msgid "WARNING: bogus value in pg_cast.castmethod field\n" -msgstr "WARNING: неприемлемое значение в поле pg_cast.castmethod\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: неприемлемое значение в поле pg_cast.castmethod\n" + +#: pg_dump.c:10746 +#, c-format +msgid "" +"WARNING: bogus transform definition, at least one of trffromsql and trftosql " +"should be nonzero\n" +msgstr "" +"ПРЕДУПРЕЖДЕНИЕ: неприемлемое определение преобразования (trffromsql или " +"trftosql должно быть ненулевым)\n" + +#: pg_dump.c:10763 +#, c-format +msgid "WARNING: bogus value in pg_transform.trffromsql field\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: неприемлемое значение в поле pg_transform.trffromsql\n" + +#: pg_dump.c:10784 +#, c-format +msgid "WARNING: bogus value in pg_transform.trftosql field\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: неприемлемое значение в поле pg_transform.trftosql\n" -#: pg_dump.c:10628 +#: pg_dump.c:11170 #, c-format msgid "WARNING: could not find operator with OID %s\n" -msgstr "ВНИМАНИЕ: оператор с OID %s не найден\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: оператор с OID %s не найден\n" -#: pg_dump.c:11803 +#: pg_dump.c:12345 #, c-format msgid "" "WARNING: aggregate function %s could not be dumped correctly for this " "database version; ignored\n" msgstr "" -"ВНИМАНИЕ: агрегатная функция %s не может быть правильно выгружена для этой " -"версии базы данных; функция проигнорирована\n" +"ПРЕДУПРЕЖДЕНИЕ: агрегатная функция %s не может быть правильно выгружена для " +"этой версии базы данных; функция проигнорирована\n" -#: pg_dump.c:12628 +#: pg_dump.c:13170 #, c-format msgid "unrecognized object type in default privileges: %d\n" msgstr "нераспознанный тип объекта в определении прав по умолчанию: %d)\n" -#: pg_dump.c:12643 +#: pg_dump.c:13185 #, c-format msgid "could not parse default ACL list (%s)\n" msgstr "не удалось разобрать список прав по умолчанию (%s)\n" -#: pg_dump.c:12698 +#: pg_dump.c:13240 #, c-format msgid "could not parse ACL list (%s) for object \"%s\" (%s)\n" msgstr "не удалось разобрать список прав (%s) для объекта \"%s\" (%s)\n" -#: pg_dump.c:13115 +#: pg_dump.c:13657 #, c-format msgid "query to obtain definition of view \"%s\" returned no data\n" msgstr "" "запрос на получение определения представления \"%s\" не возвратил данные\n" -#: pg_dump.c:13118 +#: pg_dump.c:13660 #, c-format msgid "" "query to obtain definition of view \"%s\" returned more than one definition\n" @@ -2092,27 +2177,27 @@ msgstr "" "запрос на получения определения представления \"%s\" возвратил несколько " "определений\n" -#: pg_dump.c:13125 +#: pg_dump.c:13667 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)\n" msgstr "определение представления \"%s\" пустое (длина равна нулю)\n" -#: pg_dump.c:13858 +#: pg_dump.c:14404 #, c-format msgid "invalid column number %d for table \"%s\"\n" msgstr "неверный номер колонки %d для таблицы \"%s\"\n" -#: pg_dump.c:13982 +#: pg_dump.c:14528 #, c-format msgid "missing index for constraint \"%s\"\n" msgstr "отсутствует индекс для ограничения \"%s\"\n" -#: pg_dump.c:14169 +#: pg_dump.c:14715 #, c-format msgid "unrecognized constraint type: %c\n" msgstr "нераспознанный тип ограничения: %c\n" -#: pg_dump.c:14318 pg_dump.c:14482 +#: pg_dump.c:14864 pg_dump.c:15028 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)\n" msgid_plural "" @@ -2127,23 +2212,23 @@ msgstr[2] "" "запрос на получение данных последовательности \"%s\" вернул %d строк " "(ожидалась 1)\n" -#: pg_dump.c:14329 +#: pg_dump.c:14875 #, c-format msgid "query to get data of sequence \"%s\" returned name \"%s\"\n" msgstr "" "запрос на получение данных последовательности \"%s\" вернул имя \"%s\"\n" -#: pg_dump.c:14577 +#: pg_dump.c:15123 #, c-format msgid "unexpected tgtype value: %d\n" msgstr "неожиданное значение tgtype: %d\n" -#: pg_dump.c:14659 +#: pg_dump.c:15205 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"\n" msgstr "неверная строка аргументов (%s) для триггера \"%s\" таблицы \"%s\"\n" -#: pg_dump.c:14847 +#: pg_dump.c:15392 #, c-format msgid "" "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows " @@ -2152,12 +2237,12 @@ msgstr "" "запрос на получение правила \"%s\" для таблицы \"%s\" возвратил неверное " "число строк\n" -#: pg_dump.c:15148 +#: pg_dump.c:15771 #, c-format msgid "reading dependency data\n" msgstr "чтение данных о зависимостях\n" -#: pg_dump.c:15693 +#: pg_dump.c:16318 #, c-format msgid "query returned %d row instead of one: %s\n" msgid_plural "query returned %d rows instead of one: %s\n" @@ -2166,38 +2251,38 @@ msgstr[1] "запрос вернул %d строки вместо одной: %s msgstr[2] "запрос вернул %d строк вместо одной: %s\n" #. translator: this is a module name -#: pg_dump_sort.c:21 +#: pg_dump_sort.c:23 msgid "sorter" msgstr "sorter" -#: pg_dump_sort.c:466 +#: pg_dump_sort.c:489 #, c-format msgid "invalid dumpId %d\n" msgstr "неверный dumpId %d\n" -#: pg_dump_sort.c:472 +#: pg_dump_sort.c:495 #, c-format msgid "invalid dependency %d\n" msgstr "неверная зависимость %d\n" -#: pg_dump_sort.c:705 +#: pg_dump_sort.c:728 #, c-format msgid "could not identify dependency loop\n" msgstr "не удалось определить цикл зависимостей\n" -#: pg_dump_sort.c:1227 +#: pg_dump_sort.c:1250 #, c-format msgid "" "NOTICE: there are circular foreign-key constraints among these table(s):\n" msgstr "" "ЗАМЕЧАНИЕ: в следующих таблицах зациклены ограничения внешних ключей :\n" -#: pg_dump_sort.c:1229 pg_dump_sort.c:1249 +#: pg_dump_sort.c:1252 pg_dump_sort.c:1272 #, c-format msgid " %s\n" msgstr " %s\n" -#: pg_dump_sort.c:1230 +#: pg_dump_sort.c:1253 #, c-format msgid "" "You might not be able to restore the dump without using --disable-triggers " @@ -2206,7 +2291,7 @@ msgstr "" "Возможно для восстановления базы вам потребуется использовать --disable-" "triggers или временно удалить ограничения.\n" -#: pg_dump_sort.c:1231 +#: pg_dump_sort.c:1254 #, c-format msgid "" "Consider using a full dump instead of a --data-only dump to avoid this " @@ -2215,13 +2300,14 @@ msgstr "" "Во избежание этой проблемы, вам вероятно стоит выгружать всю базу данных, а " "не только данные (--data-only).\n" -#: pg_dump_sort.c:1243 +#: pg_dump_sort.c:1266 #, c-format msgid "WARNING: could not resolve dependency loop among these items:\n" msgstr "" -"ВНИМАНИЕ: не удалось разрешить цикл зависимостей для следующих объектов:\n" +"ПРЕДУПРЕЖДЕНИЕ: не удалось разрешить цикл зависимостей для следующих " +"объектов:\n" -#: pg_dumpall.c:182 +#: pg_dumpall.c:181 #, c-format msgid "" "The program \"pg_dump\" is needed by %s but was not found in the\n" @@ -2232,7 +2318,7 @@ msgstr "" "в каталоге \"%s\".\n" "Проверьте вашу установку PostgreSQL.\n" -#: pg_dumpall.c:189 +#: pg_dumpall.c:188 #, c-format msgid "" "The program \"pg_dump\" was found by \"%s\"\n" @@ -2243,14 +2329,14 @@ msgstr "" "но её версия отличается от версии %s.\n" "Проверьте вашу установку PostgreSQL.\n" -#: pg_dumpall.c:323 +#: pg_dumpall.c:318 #, c-format msgid "" "%s: options -g/--globals-only and -r/--roles-only cannot be used together\n" msgstr "" "%s: параметры -g/--globals-only и -r/--roles-only исключают друг друга\n" -#: pg_dumpall.c:332 +#: pg_dumpall.c:327 #, c-format msgid "" "%s: options -g/--globals-only and -t/--tablespaces-only cannot be used " @@ -2259,12 +2345,12 @@ msgstr "" "%s: параметры -g/--globals-only и -t/--tablespaces-only исключают друг " "друга\n" -#: pg_dumpall.c:341 pg_restore.c:343 +#: pg_dumpall.c:336 pg_restore.c:343 #, c-format msgid "%s: option --if-exists requires option -c/--clean\n" msgstr "%s: параметру --if-exists требуется параметр -c/--clean\n" -#: pg_dumpall.c:348 +#: pg_dumpall.c:343 #, c-format msgid "" "%s: options -r/--roles-only and -t/--tablespaces-only cannot be used " @@ -2272,12 +2358,12 @@ msgid "" msgstr "" "%s: параметры -r/--roles-only и -t/--tablespaces-only исключают друг друга\n" -#: pg_dumpall.c:390 pg_dumpall.c:1860 +#: pg_dumpall.c:385 pg_dumpall.c:1881 #, c-format msgid "%s: could not connect to database \"%s\"\n" msgstr "%s: не удалось подключиться к базе данных: \"%s\"\n" -#: pg_dumpall.c:405 +#: pg_dumpall.c:400 #, c-format msgid "" "%s: could not connect to databases \"postgres\" or \"template1\"\n" @@ -2286,12 +2372,12 @@ msgstr "" "%s: не удалось подключиться к базе данных \"postgres\" или \"template1\"\n" "Укажите другую базу данных.\n" -#: pg_dumpall.c:422 +#: pg_dumpall.c:417 #, c-format msgid "%s: could not open the output file \"%s\": %s\n" msgstr "%s: не удалось открыть выходной файл \"%s\": %s\n" -#: pg_dumpall.c:552 +#: pg_dumpall.c:547 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2300,17 +2386,17 @@ msgstr "" "%s экспортирует всё содержимое кластера баз данных PostgreSQL в SQL-скрипт.\n" "\n" -#: pg_dumpall.c:554 +#: pg_dumpall.c:549 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [ПАРАМЕТР]...\n" -#: pg_dumpall.c:557 +#: pg_dumpall.c:552 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=ИМЯ_ФАЙЛА имя выходного файла\n" -#: pg_dumpall.c:563 +#: pg_dumpall.c:558 #, c-format msgid "" " -c, --clean clean (drop) databases before recreating\n" @@ -2318,18 +2404,18 @@ msgstr "" " -c, --clean очистить (удалить) базы данных перед\n" " восстановлением\n" -#: pg_dumpall.c:564 +#: pg_dumpall.c:559 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr "" " -g, --globals-only выгрузить только глобальные объекты, без баз\n" -#: pg_dumpall.c:566 pg_restore.c:454 +#: pg_dumpall.c:561 pg_restore.c:454 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner не восстанавливать владение объектами\n" -#: pg_dumpall.c:567 +#: pg_dumpall.c:562 #, c-format msgid "" " -r, --roles-only dump only roles, no databases or tablespaces\n" @@ -2337,13 +2423,13 @@ msgstr "" " -r, --roles-only выгрузить только роли, без баз данных\n" " и табличных пространств\n" -#: pg_dumpall.c:569 +#: pg_dumpall.c:564 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr "" " -S, --superuser=ИМЯ имя пользователя для выполнения выгрузки\n" -#: pg_dumpall.c:570 +#: pg_dumpall.c:565 #, c-format msgid "" " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" @@ -2351,17 +2437,17 @@ msgstr "" " -t, --tablespaces-only выгружать только табличные пространства,\n" " без баз данных и ролей\n" -#: pg_dumpall.c:587 +#: pg_dumpall.c:582 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=СТРОКА подключиться с данной строкой подключения\n" -#: pg_dumpall.c:589 +#: pg_dumpall.c:584 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=ИМЯ_БД выбор другой базы данных по умолчанию\n" -#: pg_dumpall.c:596 +#: pg_dumpall.c:591 #, c-format msgid "" "\n" @@ -2375,88 +2461,88 @@ msgstr "" "вывод.\n" "\n" -#: pg_dumpall.c:1100 +#: pg_dumpall.c:1118 #, c-format msgid "%s: could not parse ACL list (%s) for tablespace \"%s\"\n" msgstr "" "%s: не удалось разобрать список управления доступом (%s) для табл. " "пространства \"%s\"\n" -#: pg_dumpall.c:1417 +#: pg_dumpall.c:1431 #, c-format msgid "%s: could not parse ACL list (%s) for database \"%s\"\n" msgstr "" "%s: не удалось разобрать список управления доступом (%s) для базы данных \"%s" "\"\n" -#: pg_dumpall.c:1627 +#: pg_dumpall.c:1648 #, c-format msgid "%s: dumping database \"%s\"...\n" msgstr "%s: выгрузка базы данных \"%s\"...\n" -#: pg_dumpall.c:1648 +#: pg_dumpall.c:1669 #, c-format msgid "%s: pg_dump failed on database \"%s\", exiting\n" msgstr "%s: ошибка pg_dump для базы данных \"%s\", выход...\n" -#: pg_dumpall.c:1657 +#: pg_dumpall.c:1678 #, c-format msgid "%s: could not re-open the output file \"%s\": %s\n" msgstr "%s: не удалось повторно открыть выходной файл \"%s\": %s\n" -#: pg_dumpall.c:1702 +#: pg_dumpall.c:1723 #, c-format msgid "%s: running \"%s\"\n" msgstr "%s: выполняется \"%s\"\n" -#: pg_dumpall.c:1882 +#: pg_dumpall.c:1903 #, c-format msgid "%s: could not connect to database \"%s\": %s\n" msgstr "%s: не удалось подключиться к базе \"%s\": %s\n" -#: pg_dumpall.c:1912 +#: pg_dumpall.c:1933 #, c-format msgid "%s: could not get server version\n" msgstr "%s: не удалось узнать версию сервера\n" -#: pg_dumpall.c:1918 +#: pg_dumpall.c:1939 #, c-format msgid "%s: could not parse server version \"%s\"\n" msgstr "%s: не удалось разобрать строку версии сервера \"%s\"\n" -#: pg_dumpall.c:1996 pg_dumpall.c:2022 +#: pg_dumpall.c:2017 pg_dumpall.c:2043 #, c-format msgid "%s: executing %s\n" msgstr "%s: выполняется %s\n" -#: pg_dumpall.c:2002 pg_dumpall.c:2028 +#: pg_dumpall.c:2023 pg_dumpall.c:2049 #, c-format msgid "%s: query failed: %s" msgstr "%s: ошибка при выполнении запроса: %s" -#: pg_dumpall.c:2004 pg_dumpall.c:2030 +#: pg_dumpall.c:2025 pg_dumpall.c:2051 #, c-format msgid "%s: query was: %s\n" msgstr "%s: запрос: %s\n" # TO REVEIW -#: pg_restore.c:304 +#: pg_restore.c:303 #, c-format msgid "%s: options -d/--dbname and -f/--file cannot be used together\n" msgstr "%s: параметры -d/--dbname и -f/--file исключают друг друга\n" -#: pg_restore.c:315 +#: pg_restore.c:314 #, c-format msgid "" "%s: options -s/--schema-only and -a/--data-only cannot be used together\n" msgstr "%s: параметры -s/--schema-only и -a/--data-only исключают друг друга\n" -#: pg_restore.c:322 +#: pg_restore.c:321 #, c-format msgid "%s: options -c/--clean and -a/--data-only cannot be used together\n" msgstr "%s: параметры -c/--clean and -a/--data-only исключают друг друга\n" -#: pg_restore.c:330 +#: pg_restore.c:329 #, c-format msgid "%s: cannot specify both --single-transaction and multiple jobs\n" msgstr "" @@ -2602,8 +2688,11 @@ msgstr "" #: pg_restore.c:458 #, c-format -msgid " -t, --table=NAME restore named table\n" -msgstr " -t, --table=ИМЯ восстановить заданную таблицу\n" +msgid "" +" -t, --table=NAME restore named relation (table, view, etc)\n" +msgstr "" +" -t, --table=ИМЯ восстановить заданное отношение (таблицу, " +"представление и т.п.)\n" #: pg_restore.c:459 #, c-format @@ -2625,7 +2714,7 @@ msgid " -1, --single-transaction restore as a single transaction\n" msgstr "" " -1, --single-transaction выполнить восстановление в одной транзакции\n" -#: pg_restore.c:464 +#: pg_restore.c:465 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not " @@ -2635,19 +2724,19 @@ msgstr "" " --no-data-for-failed-tables не восстанавливать данные таблиц, которые\n" " не удалось создать\n" -#: pg_restore.c:466 +#: pg_restore.c:467 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels не восстанавливать метки безопасности\n" -#: pg_restore.c:467 +#: pg_restore.c:468 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr "" " --no-tablespaces не восстанавливать назначения табл. " "пространств\n" -#: pg_restore.c:468 +#: pg_restore.c:469 #, c-format msgid "" " --section=SECTION restore named section (pre-data, data, or " @@ -2656,12 +2745,12 @@ msgstr "" " --section=РАЗДЕЛ восстановить заданный раздел\n" " (pre-data, data или post-data)\n" -#: pg_restore.c:479 +#: pg_restore.c:480 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=ИМЯ_РОЛИ выполнить SET ROLE перед восстановлением\n" -#: pg_restore.c:481 +#: pg_restore.c:482 #, c-format msgid "" "\n" @@ -2672,7 +2761,7 @@ msgstr "" "Параметры -I, -n, -P, -t, -T и --section можно комбинировать и указывать\n" "несколько раз для выбора нескольких объектов.\n" -#: pg_restore.c:484 +#: pg_restore.c:485 #, c-format msgid "" "\n" diff --git a/src/bin/pg_resetxlog/pg_resetxlog.c b/src/bin/pg_resetxlog/pg_resetxlog.c index 6ffe795348d1e..882696012192d 100644 --- a/src/bin/pg_resetxlog/pg_resetxlog.c +++ b/src/bin/pg_resetxlog/pg_resetxlog.c @@ -56,8 +56,6 @@ #include "common/restricted_token.h" #include "storage/large_object.h" #include "pg_getopt.h" -#include "replication/logical.h" -#include "replication/origin.h" static ControlFileData ControlFile; /* pg_control values */ @@ -261,7 +259,7 @@ main(int argc, char *argv[]) break; case 'l': - if (strspn(optarg, "01234567890ABCDEFabcdef") != 24) + if (strspn(optarg, "01234567890ABCDEFabcdef") != XLOG_FNAME_LEN) { fprintf(stderr, _("%s: invalid argument for option %s\n"), progname, "-l"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); @@ -667,9 +665,9 @@ PrintControlValues(bool guessed) ControlFile.checkPointCopy.oldestMulti); printf(_("Latest checkpoint's oldestMulti's DB: %u\n"), ControlFile.checkPointCopy.oldestMultiDB); - printf(_("Latest checkpoint's oldest CommitTs: %u\n"), + printf(_("Latest checkpoint's oldestCommitTs: %u\n"), ControlFile.checkPointCopy.oldestCommitTs); - printf(_("Latest checkpoint's newest CommitTs: %u\n"), + printf(_("Latest checkpoint's newestCommitTs: %u\n"), ControlFile.checkPointCopy.newestCommitTs); printf(_("Maximum data alignment: %u\n"), ControlFile.maxAlign); @@ -906,7 +904,8 @@ FindEndOfXLOG(void) while (errno = 0, (xlde = readdir(xldir)) != NULL) { - if (IsXLogFileName(xlde->d_name)) + if (IsXLogFileName(xlde->d_name) || + IsPartialXLogFileName(xlde->d_name)) { unsigned int tli, log, @@ -976,8 +975,8 @@ KillExistingXLOG(void) while (errno = 0, (xlde = readdir(xldir)) != NULL) { - if (strlen(xlde->d_name) == 24 && - strspn(xlde->d_name, "0123456789ABCDEF") == 24) + if (IsXLogFileName(xlde->d_name) || + IsPartialXLogFileName(xlde->d_name)) { snprintf(path, MAXPGPATH, "%s/%s", XLOGDIR, xlde->d_name); if (unlink(path) < 0) @@ -1027,9 +1026,11 @@ KillExistingArchiveStatus(void) while (errno = 0, (xlde = readdir(xldir)) != NULL) { - if (strspn(xlde->d_name, "0123456789ABCDEF") == 24 && - (strcmp(xlde->d_name + 24, ".ready") == 0 || - strcmp(xlde->d_name + 24, ".done") == 0)) + if (strspn(xlde->d_name, "0123456789ABCDEF") == XLOG_FNAME_LEN && + (strcmp(xlde->d_name + XLOG_FNAME_LEN, ".ready") == 0 || + strcmp(xlde->d_name + XLOG_FNAME_LEN, ".done") == 0 || + strcmp(xlde->d_name + XLOG_FNAME_LEN, ".partial.ready") == 0 || + strcmp(xlde->d_name + XLOG_FNAME_LEN, ".partial.done") == 0)) { snprintf(path, MAXPGPATH, "%s/%s", ARCHSTATDIR, xlde->d_name); if (unlink(path) < 0) @@ -1164,10 +1165,11 @@ static void usage(void) { printf(_("%s resets the PostgreSQL transaction log.\n\n"), progname); - printf(_("Usage:\n %s [OPTION]... {[-D] DATADIR}\n\n"), progname); + printf(_("Usage:\n %s [OPTION]... DATADIR\n\n"), progname); printf(_("Options:\n")); printf(_(" -c XID,XID set oldest and newest transactions bearing commit timestamp\n")); printf(_(" (zero in either value means no change)\n")); + printf(_(" [-D] DATADIR data directory\n")); printf(_(" -e XIDEPOCH set next transaction ID epoch\n")); printf(_(" -f force update to be done\n")); printf(_(" -l XLOGFILE force minimum WAL starting location for new transaction log\n")); diff --git a/src/bin/pg_resetxlog/po/de.po b/src/bin/pg_resetxlog/po/de.po index c7797bf92ea37..e0c2ea2478fb3 100644 --- a/src/bin/pg_resetxlog/po/de.po +++ b/src/bin/pg_resetxlog/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-05-19 16:13+0000\n" -"PO-Revision-Date: 2015-05-19 20:46-0400\n" +"POT-Creation-Date: 2015-09-27 02:43+0000\n" +"PO-Revision-Date: 2015-09-26 23:50-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -19,7 +19,7 @@ msgstr "" #: ../../common/restricted_token.c:68 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -msgstr "%s: WARNUNG: auf dieser Platform können keine beschränkten Token erzeugt werden\n" +msgstr "%s: WARNUNG: auf dieser Plattform können keine beschränkten Token erzeugt werden\n" #: ../../common/restricted_token.c:77 #, c-format @@ -52,86 +52,86 @@ msgid "%s: could not get exit code from subprocess: error code %lu\n" msgstr "%s: konnte Statuscode des Subprozesses nicht ermitteln: Fehlercode %lu\n" #. translator: the second %s is a command line argument (-e, etc) -#: pg_resetxlog.c:142 pg_resetxlog.c:157 pg_resetxlog.c:172 pg_resetxlog.c:179 -#: pg_resetxlog.c:203 pg_resetxlog.c:218 pg_resetxlog.c:226 pg_resetxlog.c:252 -#: pg_resetxlog.c:266 +#: pg_resetxlog.c:140 pg_resetxlog.c:155 pg_resetxlog.c:170 pg_resetxlog.c:177 +#: pg_resetxlog.c:201 pg_resetxlog.c:216 pg_resetxlog.c:224 pg_resetxlog.c:250 +#: pg_resetxlog.c:264 #, c-format msgid "%s: invalid argument for option %s\n" msgstr "%s: ungültiges Argument für Option %s\n" -#: pg_resetxlog.c:143 pg_resetxlog.c:158 pg_resetxlog.c:173 pg_resetxlog.c:180 -#: pg_resetxlog.c:204 pg_resetxlog.c:219 pg_resetxlog.c:227 pg_resetxlog.c:253 -#: pg_resetxlog.c:267 pg_resetxlog.c:274 pg_resetxlog.c:287 pg_resetxlog.c:295 +#: pg_resetxlog.c:141 pg_resetxlog.c:156 pg_resetxlog.c:171 pg_resetxlog.c:178 +#: pg_resetxlog.c:202 pg_resetxlog.c:217 pg_resetxlog.c:225 pg_resetxlog.c:251 +#: pg_resetxlog.c:265 pg_resetxlog.c:272 pg_resetxlog.c:285 pg_resetxlog.c:293 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie „%s --help“ für weitere Informationen.\n" -#: pg_resetxlog.c:148 +#: pg_resetxlog.c:146 #, c-format msgid "%s: transaction ID epoch (-e) must not be -1\n" msgstr "%s: Transaktions-ID-Epoche (-e) darf nicht -1 sein\n" -#: pg_resetxlog.c:163 +#: pg_resetxlog.c:161 #, c-format msgid "%s: transaction ID (-x) must not be 0\n" msgstr "%s: Transaktions-ID (-x) darf nicht 0 sein\n" -#: pg_resetxlog.c:187 pg_resetxlog.c:194 +#: pg_resetxlog.c:185 pg_resetxlog.c:192 #, c-format msgid "%s: transaction ID (-c) must be either 0 or greater than or equal to 2\n" msgstr "%s: Transaktions-ID (-c) muss entweder 0 oder größer oder gleich 2 sein\n" -#: pg_resetxlog.c:209 +#: pg_resetxlog.c:207 #, c-format msgid "%s: OID (-o) must not be 0\n" msgstr "%s: OID (-o) darf nicht 0 sein\n" -#: pg_resetxlog.c:232 +#: pg_resetxlog.c:230 #, c-format msgid "%s: multitransaction ID (-m) must not be 0\n" msgstr "%s: Multitransaktions-ID (-m) darf nicht 0 sein\n" -#: pg_resetxlog.c:242 +#: pg_resetxlog.c:240 #, c-format msgid "%s: oldest multitransaction ID (-m) must not be 0\n" msgstr "%s: älteste Multitransaktions-ID (-m) darf nicht 0 sein\n" -#: pg_resetxlog.c:258 +#: pg_resetxlog.c:256 #, c-format msgid "%s: multitransaction offset (-O) must not be -1\n" msgstr "%s: Multitransaktions-Offset (-O) darf nicht -1 sein\n" -#: pg_resetxlog.c:285 +#: pg_resetxlog.c:283 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: zu viele Kommandozeilenargumente (das erste ist „%s“)\n" -#: pg_resetxlog.c:294 +#: pg_resetxlog.c:292 #, c-format msgid "%s: no data directory specified\n" msgstr "%s: kein Datenverzeichnis angegeben\n" -#: pg_resetxlog.c:308 +#: pg_resetxlog.c:306 #, c-format msgid "%s: cannot be executed by \"root\"\n" msgstr "%s: kann nicht von „root“ ausgeführt werden\n" -#: pg_resetxlog.c:310 +#: pg_resetxlog.c:308 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "Sie müssen %s als PostgreSQL-Superuser ausführen.\n" -#: pg_resetxlog.c:320 +#: pg_resetxlog.c:318 #, c-format msgid "%s: could not change directory to \"%s\": %s\n" msgstr "%s: konnte nicht in Verzeichnis „%s“ wechseln: %s\n" -#: pg_resetxlog.c:333 pg_resetxlog.c:479 +#: pg_resetxlog.c:331 pg_resetxlog.c:477 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: konnte Datei „%s“ nicht zum Lesen öffnen: %s\n" -#: pg_resetxlog.c:340 +#: pg_resetxlog.c:338 #, c-format msgid "" "%s: lock file \"%s\" exists\n" @@ -140,7 +140,7 @@ msgstr "" "%s: Sperrdatei „%s“ existiert bereits\n" "Läuft der Server? Wenn nicht, dann Sperrdatei löschen und nochmal versuchen.\n" -#: pg_resetxlog.c:427 +#: pg_resetxlog.c:425 #, c-format msgid "" "\n" @@ -150,7 +150,7 @@ msgstr "" "Wenn diese Werte akzeptabel scheinen, dann benutzen Sie -f um das\n" "Zurücksetzen zu erzwingen.\n" -#: pg_resetxlog.c:439 +#: pg_resetxlog.c:437 #, c-format msgid "" "The database server was not shut down cleanly.\n" @@ -162,12 +162,12 @@ msgstr "" "Wenn Sie trotzdem weiter machen wollen, benutzen Sie -f, um das\n" "Zurücksetzen zu erzwingen.\n" -#: pg_resetxlog.c:453 +#: pg_resetxlog.c:451 #, c-format msgid "Transaction log reset\n" msgstr "Transaktionslog wurde zurück gesetzt\n" -#: pg_resetxlog.c:482 +#: pg_resetxlog.c:480 #, c-format msgid "" "If you are sure the data directory path is correct, execute\n" @@ -178,22 +178,22 @@ msgstr "" " touch %s\n" "aus und versuchen Sie es erneut.\n" -#: pg_resetxlog.c:495 +#: pg_resetxlog.c:493 #, c-format msgid "%s: could not read file \"%s\": %s\n" msgstr "%s: konnte Datei „%s“ nicht lesen: %s\n" -#: pg_resetxlog.c:518 +#: pg_resetxlog.c:516 #, c-format msgid "%s: pg_control exists but has invalid CRC; proceed with caution\n" msgstr "%s: pg_control existiert, aber mit ungültiger CRC; mit Vorsicht fortfahren\n" -#: pg_resetxlog.c:527 +#: pg_resetxlog.c:525 #, c-format msgid "%s: pg_control exists but is broken or unknown version; ignoring it\n" msgstr "%s: pg_control existiert, aber ist kaputt oder hat unbekannte Version; wird ignoriert\n" -#: pg_resetxlog.c:630 +#: pg_resetxlog.c:628 #, c-format msgid "" "Guessed pg_control values:\n" @@ -202,7 +202,7 @@ msgstr "" "Geschätzte pg_control-Werte:\n" "\n" -#: pg_resetxlog.c:632 +#: pg_resetxlog.c:630 #, c-format msgid "" "Current pg_control values:\n" @@ -211,178 +211,176 @@ msgstr "" "Aktuelle pg_control-Werte:\n" "\n" -#: pg_resetxlog.c:641 +#: pg_resetxlog.c:639 #, c-format msgid "pg_control version number: %u\n" -msgstr "pg_control-Versionsnummer: %u\n" +msgstr "pg_control-Versionsnummer: %u\n" -#: pg_resetxlog.c:643 +#: pg_resetxlog.c:641 #, c-format msgid "Catalog version number: %u\n" -msgstr "Katalogversionsnummer: %u\n" +msgstr "Katalogversionsnummer: %u\n" -#: pg_resetxlog.c:645 +#: pg_resetxlog.c:643 #, c-format msgid "Database system identifier: %s\n" -msgstr "Datenbanksystemidentifikation: %s\n" +msgstr "Datenbanksystemidentifikation: %s\n" -#: pg_resetxlog.c:647 +#: pg_resetxlog.c:645 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" -msgstr "TimeLineID des letzten Checkpoints: %u\n" +msgstr "TimeLineID des letzten Checkpoints: %u\n" -#: pg_resetxlog.c:649 +#: pg_resetxlog.c:647 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" -msgstr "full_page_writes des letzten Checkpoints: %s\n" +msgstr "full_page_writes des letzten Checkpoints: %s\n" -#: pg_resetxlog.c:650 +#: pg_resetxlog.c:648 msgid "off" msgstr "aus" -#: pg_resetxlog.c:650 +#: pg_resetxlog.c:648 msgid "on" msgstr "an" -#: pg_resetxlog.c:651 +#: pg_resetxlog.c:649 #, c-format msgid "Latest checkpoint's NextXID: %u/%u\n" -msgstr "NextXID des letzten Checkpoints: %u/%u\n" +msgstr "NextXID des letzten Checkpoints: %u/%u\n" -#: pg_resetxlog.c:654 +#: pg_resetxlog.c:652 #, c-format msgid "Latest checkpoint's NextOID: %u\n" -msgstr "NextOID des letzten Checkpoints: %u\n" +msgstr "NextOID des letzten Checkpoints: %u\n" -#: pg_resetxlog.c:656 +#: pg_resetxlog.c:654 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" -msgstr "NextMultiXactId des letzten Checkpoints: %u\n" +msgstr "NextMultiXactId des letzten Checkpoints: %u\n" -#: pg_resetxlog.c:658 +#: pg_resetxlog.c:656 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" -msgstr "NextMultiOffset des letzten Checkpoints: %u\n" +msgstr "NextMultiOffset des letzten Checkpoints: %u\n" -#: pg_resetxlog.c:660 +#: pg_resetxlog.c:658 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" -msgstr "oldestXID des letzten Checkpoints: %u\n" +msgstr "oldestXID des letzten Checkpoints: %u\n" -#: pg_resetxlog.c:662 +#: pg_resetxlog.c:660 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" -msgstr "DB der oldestXID des letzten Checkpoints: %u\n" +msgstr "DB der oldestXID des letzten Checkpoints: %u\n" -#: pg_resetxlog.c:664 +#: pg_resetxlog.c:662 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" -msgstr "oldestActiveXID des letzten Checkpoints: %u\n" +msgstr "oldestActiveXID des letzten Checkpoints: %u\n" -#: pg_resetxlog.c:666 +#: pg_resetxlog.c:664 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" -msgstr "oldestMultiXid des letzten Checkpoints: %u\n" +msgstr "oldestMultiXid des letzten Checkpoints: %u\n" -#: pg_resetxlog.c:668 +#: pg_resetxlog.c:666 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" -msgstr "DB des oldestMulti des letzten Checkpoints: %u\n" +msgstr "DB des oldestMulti des letzten Checkpoints: %u\n" + +#: pg_resetxlog.c:668 +#, c-format +msgid "Latest checkpoint's oldestCommitTs: %u\n" +msgstr "oldestCommitTs des letzten Checkpoints: %u\n" #: pg_resetxlog.c:670 -#, fuzzy, c-format -#| msgid "Latest checkpoint's oldestCommitTs: %u\n" -msgid "Latest checkpoint's oldest CommitTs: %u\n" -msgstr "oldestCommitTs des letzten Checkpoints: %u\n" +#, c-format +msgid "Latest checkpoint's newestCommitTs: %u\n" +msgstr "newestCommitTs des letzten Checkpoints: %u\n" #: pg_resetxlog.c:672 -#, fuzzy, c-format -#| msgid "Latest checkpoint's oldestCommitTs: %u\n" -msgid "Latest checkpoint's newest CommitTs: %u\n" -msgstr "oldestCommitTs des letzten Checkpoints: %u\n" - -#: pg_resetxlog.c:674 #, c-format msgid "Maximum data alignment: %u\n" -msgstr "Maximale Datenausrichtung (Alignment): %u\n" +msgstr "Maximale Datenausrichtung (Alignment): %u\n" -#: pg_resetxlog.c:677 +#: pg_resetxlog.c:675 #, c-format msgid "Database block size: %u\n" -msgstr "Datenbankblockgröße: %u\n" +msgstr "Datenbankblockgröße: %u\n" -#: pg_resetxlog.c:679 +#: pg_resetxlog.c:677 #, c-format msgid "Blocks per segment of large relation: %u\n" -msgstr "Blöcke pro Segment: %u\n" +msgstr "Blöcke pro Segment: %u\n" -#: pg_resetxlog.c:681 +#: pg_resetxlog.c:679 #, c-format msgid "WAL block size: %u\n" -msgstr "WAL-Blockgröße: %u\n" +msgstr "WAL-Blockgröße: %u\n" -#: pg_resetxlog.c:683 +#: pg_resetxlog.c:681 #, c-format msgid "Bytes per WAL segment: %u\n" -msgstr "Bytes pro WAL-Segment: %u\n" +msgstr "Bytes pro WAL-Segment: %u\n" -#: pg_resetxlog.c:685 +#: pg_resetxlog.c:683 #, c-format msgid "Maximum length of identifiers: %u\n" -msgstr "Maximale Bezeichnerlänge: %u\n" +msgstr "Maximale Bezeichnerlänge: %u\n" -#: pg_resetxlog.c:687 +#: pg_resetxlog.c:685 #, c-format msgid "Maximum columns in an index: %u\n" -msgstr "Maximale Spalten in einem Index: %u\n" +msgstr "Maximale Spalten in einem Index: %u\n" -#: pg_resetxlog.c:689 +#: pg_resetxlog.c:687 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" -msgstr "Maximale Größe eines Stücks TOAST: %u\n" +msgstr "Maximale Größe eines Stücks TOAST: %u\n" -#: pg_resetxlog.c:691 +#: pg_resetxlog.c:689 #, c-format msgid "Size of a large-object chunk: %u\n" -msgstr "Größe eines Large-Object-Chunks: %u\n" +msgstr "Größe eines Large-Object-Chunks: %u\n" -#: pg_resetxlog.c:693 +#: pg_resetxlog.c:691 #, c-format msgid "Date/time type storage: %s\n" -msgstr "Speicherung von Datum/Zeit-Typen: %s\n" +msgstr "Speicherung von Datum/Zeit-Typen: %s\n" -#: pg_resetxlog.c:694 +#: pg_resetxlog.c:692 msgid "64-bit integers" msgstr "64-Bit-Ganzzahlen" -#: pg_resetxlog.c:694 +#: pg_resetxlog.c:692 msgid "floating-point numbers" msgstr "Gleitkommazahlen" -#: pg_resetxlog.c:695 +#: pg_resetxlog.c:693 #, c-format msgid "Float4 argument passing: %s\n" -msgstr "Übergabe von Float4-Argumenten: %s\n" +msgstr "Übergabe von Float4-Argumenten: %s\n" -#: pg_resetxlog.c:696 pg_resetxlog.c:698 +#: pg_resetxlog.c:694 pg_resetxlog.c:696 msgid "by reference" msgstr "Referenz" -#: pg_resetxlog.c:696 pg_resetxlog.c:698 +#: pg_resetxlog.c:694 pg_resetxlog.c:696 msgid "by value" msgstr "Wert" -#: pg_resetxlog.c:697 +#: pg_resetxlog.c:695 #, c-format msgid "Float8 argument passing: %s\n" -msgstr "Übergabe von Float8-Argumenten: %s\n" +msgstr "Übergabe von Float8-Argumenten: %s\n" -#: pg_resetxlog.c:699 +#: pg_resetxlog.c:697 #, c-format msgid "Data page checksum version: %u\n" -msgstr "Datenseitenprüfsummenversion: %u\n" +msgstr "Datenseitenprüfsummenversion: %u\n" -#: pg_resetxlog.c:713 +#: pg_resetxlog.c:711 #, c-format msgid "" "\n" @@ -395,117 +393,117 @@ msgstr "" "Zu ändernde Werte:\n" "\n" -#: pg_resetxlog.c:716 +#: pg_resetxlog.c:714 #, c-format msgid "First log segment after reset: %s\n" -msgstr "Erstes Logdateisegment nach Zurücksetzen: %s\n" +msgstr "Erstes Logdateisegment nach Zurücksetzen: %s\n" -#: pg_resetxlog.c:720 +#: pg_resetxlog.c:718 #, c-format msgid "NextMultiXactId: %u\n" -msgstr "NextMultiXactId: %u\n" +msgstr "NextMultiXactId: %u\n" -#: pg_resetxlog.c:722 +#: pg_resetxlog.c:720 #, c-format msgid "OldestMultiXid: %u\n" -msgstr "OldestMultiXid: %u\n" +msgstr "OldestMultiXid: %u\n" -#: pg_resetxlog.c:724 +#: pg_resetxlog.c:722 #, c-format msgid "OldestMulti's DB: %u\n" -msgstr "OldestMulti's DB: %u\n" +msgstr "OldestMulti's DB: %u\n" -#: pg_resetxlog.c:730 +#: pg_resetxlog.c:728 #, c-format msgid "NextMultiOffset: %u\n" -msgstr "NextMultiOffset: %u\n" +msgstr "NextMultiOffset: %u\n" -#: pg_resetxlog.c:736 +#: pg_resetxlog.c:734 #, c-format msgid "NextOID: %u\n" -msgstr "NextOID: %u\n" +msgstr "NextOID: %u\n" -#: pg_resetxlog.c:742 +#: pg_resetxlog.c:740 #, c-format msgid "NextXID: %u\n" -msgstr "NextXID: %u\n" +msgstr "NextXID: %u\n" -#: pg_resetxlog.c:744 +#: pg_resetxlog.c:742 #, c-format msgid "OldestXID: %u\n" -msgstr "OldestXID: %u\n" +msgstr "OldestXID: %u\n" -#: pg_resetxlog.c:746 +#: pg_resetxlog.c:744 #, c-format msgid "OldestXID's DB: %u\n" -msgstr "OldestXID's DB: %u\n" +msgstr "OldestXID's DB: %u\n" -#: pg_resetxlog.c:752 +#: pg_resetxlog.c:750 #, c-format msgid "NextXID epoch: %u\n" -msgstr "NextXID-Epoche: %u\n" +msgstr "NextXID-Epoche: %u\n" -#: pg_resetxlog.c:758 +#: pg_resetxlog.c:756 #, c-format msgid "oldestCommitTs: %u\n" -msgstr "oldestCommitTs: %u\n" +msgstr "oldestCommitTs: %u\n" -#: pg_resetxlog.c:763 +#: pg_resetxlog.c:761 #, c-format msgid "newestCommitTs: %u\n" -msgstr "newestCommitTs: %u\n" +msgstr "newestCommitTs: %u\n" -#: pg_resetxlog.c:829 +#: pg_resetxlog.c:827 #, c-format msgid "%s: internal error -- sizeof(ControlFileData) is too large ... fix PG_CONTROL_SIZE\n" msgstr "%s: interner Fehler -- sizeof(ControlFileData) ist zu groß ... PG_CONTROL_SIZE reparieren\n" -#: pg_resetxlog.c:844 +#: pg_resetxlog.c:842 #, c-format msgid "%s: could not create pg_control file: %s\n" msgstr "%s: konnte pg_control-Datei nicht erstellen: %s\n" -#: pg_resetxlog.c:855 +#: pg_resetxlog.c:853 #, c-format msgid "%s: could not write pg_control file: %s\n" msgstr "%sL konnte pg_control-Datei nicht schreiben: %s\n" -#: pg_resetxlog.c:862 pg_resetxlog.c:1155 +#: pg_resetxlog.c:860 pg_resetxlog.c:1156 #, c-format msgid "%s: fsync error: %s\n" msgstr "%s: fsync-Fehler: %s\n" -#: pg_resetxlog.c:902 pg_resetxlog.c:972 pg_resetxlog.c:1023 +#: pg_resetxlog.c:900 pg_resetxlog.c:971 pg_resetxlog.c:1022 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: konnte Verzeichnis „%s“ nicht öffnen: %s\n" -#: pg_resetxlog.c:937 pg_resetxlog.c:994 pg_resetxlog.c:1046 +#: pg_resetxlog.c:936 pg_resetxlog.c:993 pg_resetxlog.c:1047 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: konnte Verzeichnis „%s“ nicht lesen: %s\n" -#: pg_resetxlog.c:944 pg_resetxlog.c:1001 pg_resetxlog.c:1053 +#: pg_resetxlog.c:943 pg_resetxlog.c:1000 pg_resetxlog.c:1054 #, c-format msgid "%s: could not close directory \"%s\": %s\n" msgstr "%s: konnte Verzeichnis „%s“ nicht schließen: %s\n" -#: pg_resetxlog.c:985 pg_resetxlog.c:1037 +#: pg_resetxlog.c:984 pg_resetxlog.c:1038 #, c-format msgid "%s: could not delete file \"%s\": %s\n" msgstr "%s: konnte Datei „%s“ nicht löschen: %s\n" -#: pg_resetxlog.c:1122 +#: pg_resetxlog.c:1123 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: konnte Datei „%s“ nicht öffnen: %s\n" -#: pg_resetxlog.c:1133 pg_resetxlog.c:1147 +#: pg_resetxlog.c:1134 pg_resetxlog.c:1148 #, c-format msgid "%s: could not write file \"%s\": %s\n" msgstr "%s: konnte Datei „%s“ nicht schreiben: %s\n" -#: pg_resetxlog.c:1166 +#: pg_resetxlog.c:1167 #, c-format msgid "" "%s resets the PostgreSQL transaction log.\n" @@ -514,91 +512,90 @@ msgstr "" "%s setzt den PostgreSQL-Transaktionslog zurück.\n" "\n" -#: pg_resetxlog.c:1167 -#, fuzzy, c-format -#| msgid "" -#| "Usage:\n" -#| " %s [OPTION]... DATADIR\n" -#| "\n" +#: pg_resetxlog.c:1168 +#, c-format msgid "" "Usage:\n" -" %s [OPTION]... {[-D] DATADIR}\n" +" %s [OPTION]... DATADIR\n" "\n" msgstr "" "Aufruf:\n" " %s [OPTION]... DATENVERZEICHNIS\n" "\n" -#: pg_resetxlog.c:1168 +#: pg_resetxlog.c:1169 #, c-format msgid "Options:\n" msgstr "Optionen:\n" -#: pg_resetxlog.c:1169 -#, fuzzy, c-format -#| msgid " -m MXID,MXID set next and oldest multitransaction ID\n" +#: pg_resetxlog.c:1170 +#, c-format msgid " -c XID,XID set oldest and newest transactions bearing commit timestamp\n" -msgstr " -m MXID,MXID nächste und älteste Multitransaktions-ID setzen\n" +msgstr " -c XID,XID älteste und neuste Transaktion mit Commit-Timestamp setzen\n" -#: pg_resetxlog.c:1170 -#, fuzzy, c-format -#| msgid " -O allow system table structure changes\n" +#: pg_resetxlog.c:1171 +#, c-format msgid " (zero in either value means no change)\n" -msgstr " -O erlaube Änderungen an Systemtabellenstruktur\n" +msgstr " (Null in einem Wert bedeutet keine Änderung)\n" -#: pg_resetxlog.c:1171 +#: pg_resetxlog.c:1172 +#, c-format +msgid " [-D] DATADIR data directory\n" +msgstr " [-D] DATENVERZ Datenbankverzeichnis\n" + +#: pg_resetxlog.c:1173 #, c-format msgid " -e XIDEPOCH set next transaction ID epoch\n" msgstr " -e XIDEPOCHE nächste Transaktions-ID-Epoche setzen\n" -#: pg_resetxlog.c:1172 +#: pg_resetxlog.c:1174 #, c-format msgid " -f force update to be done\n" msgstr " -f Änderung erzwingen\n" -#: pg_resetxlog.c:1173 +#: pg_resetxlog.c:1175 #, c-format msgid " -l XLOGFILE force minimum WAL starting location for new transaction log\n" msgstr " -l XLOGDATEI minimale WAL-Startposition für neuen Log erzwingen\n" -#: pg_resetxlog.c:1174 +#: pg_resetxlog.c:1176 #, c-format msgid " -m MXID,MXID set next and oldest multitransaction ID\n" msgstr " -m MXID,MXID nächste und älteste Multitransaktions-ID setzen\n" -#: pg_resetxlog.c:1175 +#: pg_resetxlog.c:1177 #, c-format msgid " -n no update, just show what would be done (for testing)\n" msgstr "" " -n keine Änderungen; nur zeigen, was gemacht werden würde (zum\n" " Testen)\n" -#: pg_resetxlog.c:1176 +#: pg_resetxlog.c:1178 #, c-format msgid " -o OID set next OID\n" msgstr " -o OID nächste OID setzen\n" -#: pg_resetxlog.c:1177 +#: pg_resetxlog.c:1179 #, c-format msgid " -O OFFSET set next multitransaction offset\n" msgstr " -O OFFSET nächsten Multitransaktions-Offset setzen\n" -#: pg_resetxlog.c:1178 +#: pg_resetxlog.c:1180 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_resetxlog.c:1179 +#: pg_resetxlog.c:1181 #, c-format msgid " -x XID set next transaction ID\n" msgstr " -x XID nächste Transaktions-ID setzen\n" -#: pg_resetxlog.c:1180 +#: pg_resetxlog.c:1182 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_resetxlog.c:1181 +#: pg_resetxlog.c:1183 #, c-format msgid "" "\n" diff --git a/src/bin/pg_resetxlog/po/es.po b/src/bin/pg_resetxlog/po/es.po index 88115919f5087..094f49e39e3f5 100644 --- a/src/bin/pg_resetxlog/po/es.po +++ b/src/bin/pg_resetxlog/po/es.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_resetxlog (PostgreSQL 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:41+0000\n" -"PO-Revision-Date: 2014-12-16 12:13-0300\n" +"POT-Creation-Date: 2015-10-04 00:43+0000\n" +"PO-Revision-Date: 2015-09-30 12:34-0300\n" "Last-Translator: Martín Marqués \n" "Language-Team: Español \n" "Language: es\n" @@ -22,109 +22,131 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.4\n" -#: pg_resetxlog.c:130 +#: ../../common/restricted_token.c:68 #, c-format -msgid "%s: invalid argument for option -e\n" -msgstr "%s: argumento no válido para la opción -e\n" +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: ATENCIÓN: no se pueden crear tokens restrigidos en esta plataforma\n" -#: pg_resetxlog.c:131 pg_resetxlog.c:146 pg_resetxlog.c:161 pg_resetxlog.c:176 -#: pg_resetxlog.c:184 pg_resetxlog.c:210 pg_resetxlog.c:224 pg_resetxlog.c:231 -#: pg_resetxlog.c:239 +#: ../../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: no se pudo abrir el token de proceso: código de error %lu\n" + +#: ../../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: no se pudo emplazar los SIDs: código de error %lu\n" + +#: ../../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: no se pudo crear el token restringido: código de error %lu\n" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: no se pudo iniciar el proceso para la orden «%s»: código de error %lu\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: no se pudo re-ejecutar con el token restringido: código de error %lu\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: no se pudo obtener el código de salida del subproceso»: código de error %lu\n" + +#. translator: the second %s is a command line argument (-e, etc) +#: pg_resetxlog.c:140 pg_resetxlog.c:155 pg_resetxlog.c:170 pg_resetxlog.c:177 +#: pg_resetxlog.c:201 pg_resetxlog.c:216 pg_resetxlog.c:224 pg_resetxlog.c:250 +#: pg_resetxlog.c:264 +#, c-format +msgid "%s: invalid argument for option %s\n" +msgstr "%s: argumento no válido para la opción %s\n" + +#: pg_resetxlog.c:141 pg_resetxlog.c:156 pg_resetxlog.c:171 pg_resetxlog.c:178 +#: pg_resetxlog.c:202 pg_resetxlog.c:217 pg_resetxlog.c:225 pg_resetxlog.c:251 +#: pg_resetxlog.c:265 pg_resetxlog.c:272 pg_resetxlog.c:285 pg_resetxlog.c:293 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Prueba con «%s --help» para más información\n" -#: pg_resetxlog.c:136 +#: pg_resetxlog.c:146 #, c-format msgid "%s: transaction ID epoch (-e) must not be -1\n" msgstr "%s: el «epoch» de ID de transacción (-e) no debe ser -1\n" -#: pg_resetxlog.c:145 -#, c-format -msgid "%s: invalid argument for option -x\n" -msgstr "%s: argumento no válido para la opción -x\n" - -#: pg_resetxlog.c:151 +#: pg_resetxlog.c:161 #, c-format msgid "%s: transaction ID (-x) must not be 0\n" msgstr "%s: el ID de transacción (-x) no debe ser 0\n" -#: pg_resetxlog.c:160 +#: pg_resetxlog.c:185 pg_resetxlog.c:192 #, c-format -msgid "%s: invalid argument for option -o\n" -msgstr "%s: argumento no válido para la opción -o\n" +msgid "%s: transaction ID (-c) must be either 0 or greater than or equal to 2\n" +msgstr "%s: el ID de transacción (-c) debe ser 0 o bien mayor o igual a 2\n" -#: pg_resetxlog.c:166 +#: pg_resetxlog.c:207 #, c-format msgid "%s: OID (-o) must not be 0\n" msgstr "%s: OID (-o) no debe ser cero\n" -#: pg_resetxlog.c:175 pg_resetxlog.c:183 -#, c-format -msgid "%s: invalid argument for option -m\n" -msgstr "%s: argumento no válido para la opción -m\n" - -#: pg_resetxlog.c:189 +#: pg_resetxlog.c:230 #, c-format msgid "%s: multitransaction ID (-m) must not be 0\n" msgstr "%s: el ID de multitransacción (-m) no debe ser 0\n" -#: pg_resetxlog.c:199 +#: pg_resetxlog.c:240 #, c-format msgid "%s: oldest multitransaction ID (-m) must not be 0\n" msgstr "%s: el ID de multitransacción más antiguo (-m) no debe ser 0\n" -#: pg_resetxlog.c:209 -#, c-format -msgid "%s: invalid argument for option -O\n" -msgstr "%s: argumento no válido para la opción -O\n" - -#: pg_resetxlog.c:215 +#: pg_resetxlog.c:256 #, c-format msgid "%s: multitransaction offset (-O) must not be -1\n" msgstr "%s: la posición de multitransacción (-O) no debe ser -1\n" -#: pg_resetxlog.c:223 +#: pg_resetxlog.c:283 #, c-format -msgid "%s: invalid argument for option -l\n" -msgstr "%s: argumento no válido para la opción -l\n" +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: demasiados argumentos de línea de órdenes (el primero es «%s»)\n" -#: pg_resetxlog.c:238 +#: pg_resetxlog.c:292 #, c-format msgid "%s: no data directory specified\n" msgstr "%s: directorio de datos no especificado\n" -#: pg_resetxlog.c:252 +#: pg_resetxlog.c:306 #, c-format msgid "%s: cannot be executed by \"root\"\n" msgstr "%s: no puede ser ejecutado con el usuario «root»\n" -#: pg_resetxlog.c:254 +#: pg_resetxlog.c:308 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "Debe ejecutar %s con el superusuario de PostgreSQL.\n" -#: pg_resetxlog.c:264 +#: pg_resetxlog.c:318 #, c-format msgid "%s: could not change directory to \"%s\": %s\n" msgstr "%s: no se pudo cambiar al directorio «%s»: %s\n" -#: pg_resetxlog.c:277 pg_resetxlog.c:418 +#: pg_resetxlog.c:331 pg_resetxlog.c:477 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: no se pudo abrir el archivo «%s» para lectura: %s\n" -#: pg_resetxlog.c:284 +#: pg_resetxlog.c:338 #, c-format msgid "" "%s: lock file \"%s\" exists\n" "Is a server running? If not, delete the lock file and try again.\n" msgstr "" "%s: el archivo candado «%s» existe\n" -"¿Hay un servidor corriendo? Si no, borre el archivo candado e inténtelo de " -"nuevo\n" +"¿Hay un servidor corriendo? Si no, borre el archivo candado e inténtelo de nuevo\n" -#: pg_resetxlog.c:366 +#: pg_resetxlog.c:425 #, c-format msgid "" "\n" @@ -133,7 +155,7 @@ msgstr "" "\n" "Si estos valores parecen aceptables, use -f para forzar reinicio.\n" -#: pg_resetxlog.c:378 +#: pg_resetxlog.c:437 #, c-format msgid "" "The database server was not shut down cleanly.\n" @@ -144,12 +166,12 @@ msgstr "" "Reiniciar la bitácora de transacciones puede causar pérdida de datos.\n" "Si de todas formas quiere proceder, use -f para forzar su reinicio.\n" -#: pg_resetxlog.c:392 +#: pg_resetxlog.c:451 #, c-format msgid "Transaction log reset\n" msgstr "Bitácora de transacciones reiniciada\n" -#: pg_resetxlog.c:421 +#: pg_resetxlog.c:480 #, c-format msgid "" "If you are sure the data directory path is correct, execute\n" @@ -160,24 +182,22 @@ msgstr "" " touch %s\n" "y pruebe de nuevo.\n" -#: pg_resetxlog.c:434 +#: pg_resetxlog.c:493 #, c-format msgid "%s: could not read file \"%s\": %s\n" msgstr "%s: no se pudo leer el archivo «%s»: %s\n" -#: pg_resetxlog.c:457 +#: pg_resetxlog.c:516 #, c-format msgid "%s: pg_control exists but has invalid CRC; proceed with caution\n" -msgstr "" -"%s: existe pg_control pero tiene un CRC no válido, proceda con precaución\n" +msgstr "%s: existe pg_control pero tiene un CRC no válido, proceda con precaución\n" -#: pg_resetxlog.c:466 +#: pg_resetxlog.c:525 #, c-format msgid "%s: pg_control exists but is broken or unknown version; ignoring it\n" -msgstr "" -"%s: existe pg_control pero está roto o se desconoce su versión; ignorándolo\n" +msgstr "%s: existe pg_control pero está roto o se desconoce su versión; ignorándolo\n" -#: pg_resetxlog.c:568 +#: pg_resetxlog.c:628 #, c-format msgid "" "Guessed pg_control values:\n" @@ -186,7 +206,7 @@ msgstr "" "Valores de pg_control asumidos:\n" "\n" -#: pg_resetxlog.c:570 +#: pg_resetxlog.c:630 #, c-format msgid "" "Current pg_control values:\n" @@ -195,166 +215,176 @@ msgstr "" "Valores actuales de pg_control:\n" "\n" -#: pg_resetxlog.c:579 +#: pg_resetxlog.c:639 #, c-format msgid "pg_control version number: %u\n" msgstr "Número de versión de pg_control: %u\n" -#: pg_resetxlog.c:581 +#: pg_resetxlog.c:641 #, c-format msgid "Catalog version number: %u\n" msgstr "Número de versión de catálogo: %u\n" -#: pg_resetxlog.c:583 +#: pg_resetxlog.c:643 #, c-format msgid "Database system identifier: %s\n" msgstr "Identificador de sistema: %s\n" -#: pg_resetxlog.c:585 +#: pg_resetxlog.c:645 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "TimeLineID del checkpoint más reciente: %u\n" -#: pg_resetxlog.c:587 +#: pg_resetxlog.c:647 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "full_page_writes del checkpoint más reciente: %s\n" -#: pg_resetxlog.c:588 +#: pg_resetxlog.c:648 msgid "off" msgstr "desactivado" -#: pg_resetxlog.c:588 +#: pg_resetxlog.c:648 msgid "on" msgstr "activado" -#: pg_resetxlog.c:589 +#: pg_resetxlog.c:649 #, c-format msgid "Latest checkpoint's NextXID: %u/%u\n" msgstr "NextXID del checkpoint más reciente: %u/%u\n" -#: pg_resetxlog.c:592 +#: pg_resetxlog.c:652 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID del checkpoint más reciente: %u\n" -#: pg_resetxlog.c:594 +#: pg_resetxlog.c:654 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId del checkpoint más reciente: %u\n" -#: pg_resetxlog.c:596 +#: pg_resetxlog.c:656 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset del checkpoint más reciente: %u\n" -#: pg_resetxlog.c:598 +#: pg_resetxlog.c:658 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID del checkpoint más reciente: %u\n" -#: pg_resetxlog.c:600 +#: pg_resetxlog.c:660 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "BD del oldestXID del checkpoint más reciente: %u\n" -#: pg_resetxlog.c:602 +#: pg_resetxlog.c:662 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID del checkpoint más reciente: %u\n" -#: pg_resetxlog.c:604 +#: pg_resetxlog.c:664 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid del checkpoint más reciente: %u\n" -#: pg_resetxlog.c:606 +#: pg_resetxlog.c:666 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "BD del oldestMultiXid del checkpt. más reciente: %u\n" -#: pg_resetxlog.c:608 +#: pg_resetxlog.c:668 +#, c-format +msgid "Latest checkpoint's oldestCommitTs: %u\n" +msgstr "oldestCommitTs del último checkpoint: %u\n" + +#: pg_resetxlog.c:670 +#, c-format +msgid "Latest checkpoint's newestCommitTs: %u\n" +msgstr "newestCommitTs del último checkpoint: %u\n" + +#: pg_resetxlog.c:672 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Máximo alineamiento de datos: %u\n" -#: pg_resetxlog.c:611 +#: pg_resetxlog.c:675 #, c-format msgid "Database block size: %u\n" msgstr "Tamaño del bloque de la base de datos: %u\n" -#: pg_resetxlog.c:613 +#: pg_resetxlog.c:677 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Bloques por segmento de relación grande: %u\n" -#: pg_resetxlog.c:615 +#: pg_resetxlog.c:679 #, c-format msgid "WAL block size: %u\n" msgstr "Tamaño del bloque de WAL: %u\n" -#: pg_resetxlog.c:617 +#: pg_resetxlog.c:681 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Bytes por segmento WAL: %u\n" -#: pg_resetxlog.c:619 +#: pg_resetxlog.c:683 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Longitud máxima de identificadores: %u\n" -#: pg_resetxlog.c:621 +#: pg_resetxlog.c:685 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Máximo número de columnas en un índice: %u\n" -#: pg_resetxlog.c:623 +#: pg_resetxlog.c:687 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Longitud máxima de un trozo TOAST: %u\n" -#: pg_resetxlog.c:625 +#: pg_resetxlog.c:689 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Longitud máxima de un trozo de objeto grande: %u\n" -#: pg_resetxlog.c:627 +#: pg_resetxlog.c:691 #, c-format msgid "Date/time type storage: %s\n" msgstr "Tipo de almacenamiento hora/fecha: %s\n" -#: pg_resetxlog.c:628 +#: pg_resetxlog.c:692 msgid "64-bit integers" msgstr "enteros de 64 bits" -#: pg_resetxlog.c:628 +#: pg_resetxlog.c:692 msgid "floating-point numbers" -msgstr "números de punto flotante" +msgstr "números de coma flotante" -#: pg_resetxlog.c:629 +#: pg_resetxlog.c:693 #, c-format msgid "Float4 argument passing: %s\n" msgstr "Paso de parámetros float4: %s\n" -#: pg_resetxlog.c:630 pg_resetxlog.c:632 +#: pg_resetxlog.c:694 pg_resetxlog.c:696 msgid "by reference" msgstr "por referencia" -#: pg_resetxlog.c:630 pg_resetxlog.c:632 +#: pg_resetxlog.c:694 pg_resetxlog.c:696 msgid "by value" msgstr "por valor" -#: pg_resetxlog.c:631 +#: pg_resetxlog.c:695 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Paso de parámetros float8: %s\n" -#: pg_resetxlog.c:633 +#: pg_resetxlog.c:697 #, c-format msgid "Data page checksum version: %u\n" msgstr "Versión de suma de verificación de datos: %u\n" -#: pg_resetxlog.c:647 +#: pg_resetxlog.c:711 #, c-format msgid "" "\n" @@ -367,111 +397,117 @@ msgstr "" "Valores a cambiar:\n" "\n" -#: pg_resetxlog.c:650 +#: pg_resetxlog.c:714 #, c-format msgid "First log segment after reset: %s\n" msgstr "Primer segmento de log después de reiniciar: %s\n" -#: pg_resetxlog.c:654 +#: pg_resetxlog.c:718 #, c-format msgid "NextMultiXactId: %u\n" msgstr "NextMultiXactId: %u\n" -#: pg_resetxlog.c:656 +#: pg_resetxlog.c:720 #, c-format msgid "OldestMultiXid: %u\n" msgstr "OldestMultiXid: %u\n" -#: pg_resetxlog.c:658 +#: pg_resetxlog.c:722 #, c-format msgid "OldestMulti's DB: %u\n" msgstr "Base de datos del OldestMulti: %u\n" -#: pg_resetxlog.c:664 +#: pg_resetxlog.c:728 #, c-format msgid "NextMultiOffset: %u\n" msgstr "NextMultiOffset: %u\n" -#: pg_resetxlog.c:670 +#: pg_resetxlog.c:734 #, c-format msgid "NextOID: %u\n" msgstr "NextOID: %u\n" -#: pg_resetxlog.c:676 +#: pg_resetxlog.c:740 #, c-format msgid "NextXID: %u\n" msgstr "NextXID: %u\n" -#: pg_resetxlog.c:678 +#: pg_resetxlog.c:742 #, c-format msgid "OldestXID: %u\n" msgstr "OldestXID: %u\n" -#: pg_resetxlog.c:680 +#: pg_resetxlog.c:744 #, c-format msgid "OldestXID's DB: %u\n" msgstr "Base de datos del OldestXID: %u\n" -#: pg_resetxlog.c:686 +#: pg_resetxlog.c:750 #, c-format msgid "NextXID epoch: %u\n" msgstr "Epoch del NextXID: %u\n" -#: pg_resetxlog.c:751 +#: pg_resetxlog.c:756 #, c-format -msgid "" -"%s: internal error -- sizeof(ControlFileData) is too large ... fix " -"PG_CONTROL_SIZE\n" -msgstr "" -"%s: error interno -- sizeof(ControlFileData) es demasiado grande ... corrija " -"PG_CONTROL_SIZE\n" +msgid "oldestCommitTs: %u\n" +msgstr "OldestCommitTs: %u\n" -#: pg_resetxlog.c:766 +#: pg_resetxlog.c:761 +#, c-format +msgid "newestCommitTs: %u\n" +msgstr "newestCommitTs: %u\n" + +#: pg_resetxlog.c:827 +#, c-format +msgid "%s: internal error -- sizeof(ControlFileData) is too large ... fix PG_CONTROL_SIZE\n" +msgstr "%s: error interno -- sizeof(ControlFileData) es demasiado grande ... corrija PG_CONTROL_SIZE\n" + +#: pg_resetxlog.c:842 #, c-format msgid "%s: could not create pg_control file: %s\n" msgstr "%s: no se pudo crear el archivo pg_control: %s\n" -#: pg_resetxlog.c:777 +#: pg_resetxlog.c:853 #, c-format msgid "%s: could not write pg_control file: %s\n" msgstr "%s: no se pudo escribir el archivo pg_control: %s\n" -#: pg_resetxlog.c:784 pg_resetxlog.c:1068 +#: pg_resetxlog.c:860 pg_resetxlog.c:1156 #, c-format msgid "%s: fsync error: %s\n" msgstr "%s: error de fsync: %s\n" -#: pg_resetxlog.c:824 pg_resetxlog.c:890 pg_resetxlog.c:941 +#: pg_resetxlog.c:900 pg_resetxlog.c:971 pg_resetxlog.c:1022 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: no se pudo abrir el directorio «%s»: %s\n" -#: pg_resetxlog.c:855 pg_resetxlog.c:912 pg_resetxlog.c:964 +#: pg_resetxlog.c:936 pg_resetxlog.c:993 pg_resetxlog.c:1047 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: no se pudo leer el directorio «%s»: %s\n" -#: pg_resetxlog.c:862 pg_resetxlog.c:919 pg_resetxlog.c:971 +#: pg_resetxlog.c:943 pg_resetxlog.c:1000 pg_resetxlog.c:1054 #, c-format msgid "%s: could not close directory \"%s\": %s\n" msgstr "%s: no se pudo cerrar el directorio «%s»: %s\n" -#: pg_resetxlog.c:903 pg_resetxlog.c:955 +#: pg_resetxlog.c:984 pg_resetxlog.c:1038 #, c-format msgid "%s: could not delete file \"%s\": %s\n" msgstr "%s: no se pudo borrar el archivo «%s»: %s\n" -#: pg_resetxlog.c:1035 +#: pg_resetxlog.c:1123 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: no se pudo abrir el archivo «%s»: %s\n" -#: pg_resetxlog.c:1046 pg_resetxlog.c:1060 +#: pg_resetxlog.c:1134 pg_resetxlog.c:1148 #, c-format msgid "%s: could not write file \"%s\": %s\n" msgstr "%s: no se pudo escribir en el archivo «%s»: %s\n" -#: pg_resetxlog.c:1079 +#: pg_resetxlog.c:1167 #, c-format msgid "" "%s resets the PostgreSQL transaction log.\n" @@ -480,7 +516,7 @@ msgstr "" "%s reinicia la bitácora de transacciones de PostgreSQL.\n" "\n" -#: pg_resetxlog.c:1080 +#: pg_resetxlog.c:1168 #, c-format msgid "" "Usage:\n" @@ -491,71 +527,81 @@ msgstr "" " %s [OPCIÓN]... DATADIR\n" "\n" -#: pg_resetxlog.c:1081 +#: pg_resetxlog.c:1169 #, c-format msgid "Options:\n" msgstr "Opciones:\n" -#: pg_resetxlog.c:1082 +#: pg_resetxlog.c:1170 +#, c-format +msgid " -c XID,XID set oldest and newest transactions bearing commit timestamp\n" +msgstr "" +" -c XID,XID asigna los ID de transacciones más antiguo y más nuevo que llevan\n" +" timestamp de commit\n" + +#: pg_resetxlog.c:1171 +#, c-format +msgid " (zero in either value means no change)\n" +msgstr " (cero en cualquiera de ellos significa no cambiar)\n" + +#: pg_resetxlog.c:1172 +#, c-format +msgid " [-D] DATADIR data directory\n" +msgstr " [-D] DATADIR directorio de datos\n" + +#: pg_resetxlog.c:1173 #, c-format msgid " -e XIDEPOCH set next transaction ID epoch\n" msgstr " -e XIDEPOCH asigna el siguiente «epoch» de ID de transacción\n" -#: pg_resetxlog.c:1083 +#: pg_resetxlog.c:1174 #, c-format msgid " -f force update to be done\n" msgstr " -f fuerza que la actualización sea hecha\n" -#: pg_resetxlog.c:1084 +#: pg_resetxlog.c:1175 #, c-format -msgid "" -" -l XLOGFILE force minimum WAL starting location for new transaction " -"log\n" +msgid " -l XLOGFILE force minimum WAL starting location for new transaction log\n" msgstr "" " -l XLOGFILE fuerza una posición mínima de inicio de WAL para una\n" " nueva transacción\n" -#: pg_resetxlog.c:1085 +#: pg_resetxlog.c:1176 #, c-format msgid " -m MXID,MXID set next and oldest multitransaction ID\n" -msgstr "" -" -m MXID,MXID asigna el siguiente ID de multitransacción y el más " -"antiguo\n" +msgstr " -m MXID,MXID asigna el siguiente ID de multitransacción y el más antiguo\n" -#: pg_resetxlog.c:1086 +#: pg_resetxlog.c:1177 #, c-format -msgid "" -" -n no update, just show what would be done (for testing)\n" -msgstr "" -" -n no actualiza, sólo muestra lo que va a hacer (para " -"pruebas)\n" +msgid " -n no update, just show what would be done (for testing)\n" +msgstr " -n no actualiza, sólo muestra lo que va a hacer (para pruebas)\n" -#: pg_resetxlog.c:1087 +#: pg_resetxlog.c:1178 #, c-format msgid " -o OID set next OID\n" msgstr " -o OID asigna el siguiente OID\n" -#: pg_resetxlog.c:1088 +#: pg_resetxlog.c:1179 #, c-format msgid " -O OFFSET set next multitransaction offset\n" msgstr " -O OFFSET asigna la siguiente posición de multitransacción\n" -#: pg_resetxlog.c:1089 +#: pg_resetxlog.c:1180 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version muestra información de la versión, luego sale\n" -#: pg_resetxlog.c:1090 +#: pg_resetxlog.c:1181 #, c-format msgid " -x XID set next transaction ID\n" msgstr " -x XID asigna el siguiente ID de transacción\n" -#: pg_resetxlog.c:1091 +#: pg_resetxlog.c:1182 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help muestra esta ayuda, luego sale\n" -#: pg_resetxlog.c:1092 +#: pg_resetxlog.c:1183 #, c-format msgid "" "\n" diff --git a/src/bin/pg_resetxlog/po/it.po b/src/bin/pg_resetxlog/po/it.po index 553c89f050f2e..20333db54d671 100644 --- a/src/bin/pg_resetxlog/po/it.po +++ b/src/bin/pg_resetxlog/po/it.po @@ -21,10 +21,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pg_resetxlog (PostgreSQL) 9.4\n" +"Project-Id-Version: pg_resetxlog (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-08-11 14:42+0000\n" -"PO-Revision-Date: 2014-08-12 00:10+0100\n" +"POT-Creation-Date: 2015-07-06 14:43+0000\n" +"PO-Revision-Date: 2015-07-07 03:01+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -34,99 +34,122 @@ msgstr "" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 1.5.4\n" -#: pg_resetxlog.c:130 +#: ../../common/restricted_token.c:68 #, c-format -msgid "%s: invalid argument for option -e\n" -msgstr "%s: parametro errato per l'opzione -e\n" +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: ATTENZIONE: non è possibile creare token ristretti su questa piattaforma\n" -#: pg_resetxlog.c:131 pg_resetxlog.c:146 pg_resetxlog.c:161 pg_resetxlog.c:176 -#: pg_resetxlog.c:184 pg_resetxlog.c:210 pg_resetxlog.c:224 pg_resetxlog.c:231 -#: pg_resetxlog.c:239 +#: ../../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: apertura del token di processo fallita: codice di errore %lu\n" + +#: ../../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: allocazione dei SID fallita: codice di errore: %lu\n" + +#: ../../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: creazione del token ristretto fallita: codice di errore %lu\n" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: avvio del processo fallito per il comando \"%s\": codice di errore %lu\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: ri-esecuzione con token ristretto fallita: codice di errore %lu\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: lettura del codice di uscita del sottoprocesso fallita: codice di errore %lu\n" + +#. translator: the second %s is a command line argument (-e, etc) +#: pg_resetxlog.c:142 pg_resetxlog.c:157 pg_resetxlog.c:172 pg_resetxlog.c:179 +#: pg_resetxlog.c:203 pg_resetxlog.c:218 pg_resetxlog.c:226 pg_resetxlog.c:252 +#: pg_resetxlog.c:266 +#, c-format +msgid "%s: invalid argument for option %s\n" +msgstr "%s: argomento non valido per l'opzione %s\n" + +#: pg_resetxlog.c:143 pg_resetxlog.c:158 pg_resetxlog.c:173 pg_resetxlog.c:180 +#: pg_resetxlog.c:204 pg_resetxlog.c:219 pg_resetxlog.c:227 pg_resetxlog.c:253 +#: pg_resetxlog.c:267 pg_resetxlog.c:274 pg_resetxlog.c:287 pg_resetxlog.c:295 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Prova \"%s --help\" per maggiori informazioni.\n" -#: pg_resetxlog.c:136 +#: pg_resetxlog.c:148 #, c-format msgid "%s: transaction ID epoch (-e) must not be -1\n" msgstr "%s: l'ID epoch della transazione (-e) non deve essere -1\n" -#: pg_resetxlog.c:145 -#, c-format -msgid "%s: invalid argument for option -x\n" -msgstr "%s: parametro errato per l'opzione -x\n" - -#: pg_resetxlog.c:151 +#: pg_resetxlog.c:163 #, c-format msgid "%s: transaction ID (-x) must not be 0\n" msgstr "%s: l'ID della transazione (-x) non deve essere 0\n" -#: pg_resetxlog.c:160 +#: pg_resetxlog.c:187 pg_resetxlog.c:194 #, c-format -msgid "%s: invalid argument for option -o\n" -msgstr "%s: parametro errato per l'opzione -o\n" +msgid "%s: transaction ID (-c) must be either 0 or greater than or equal to 2\n" +msgstr "%s: l'ID di transazione (-c) dev'essere 0 or maggiore o uguale a 2\n" -#: pg_resetxlog.c:166 +#: pg_resetxlog.c:209 #, c-format msgid "%s: OID (-o) must not be 0\n" msgstr "%s: l'OID (-o) non deve essere 0\n" -#: pg_resetxlog.c:175 pg_resetxlog.c:183 -#, c-format -msgid "%s: invalid argument for option -m\n" -msgstr "%s: parametro errato per l'opzione -m\n" - -#: pg_resetxlog.c:189 +#: pg_resetxlog.c:232 #, c-format msgid "%s: multitransaction ID (-m) must not be 0\n" msgstr "%s: l'ID della multitransazione (-m) non deve essere 0\n" -#: pg_resetxlog.c:199 +#: pg_resetxlog.c:242 #, c-format msgid "%s: oldest multitransaction ID (-m) must not be 0\n" msgstr "%s: l'ID multitransazione più vecchio (-m) non può essere 0\n" -#: pg_resetxlog.c:209 -#, c-format -msgid "%s: invalid argument for option -O\n" -msgstr "%s: parametro errato per l'opzione -O\n" - -#: pg_resetxlog.c:215 +#: pg_resetxlog.c:258 #, c-format msgid "%s: multitransaction offset (-O) must not be -1\n" msgstr "%s: l'offset di una multitransazione (-O) non può essere -1\n" -#: pg_resetxlog.c:223 +#: pg_resetxlog.c:285 #, c-format -msgid "%s: invalid argument for option -l\n" -msgstr "%s: parametro errato per l'opzione -l\n" +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: troppi argomenti di riga di comando (il primo è \"%s\")\n" -#: pg_resetxlog.c:238 +#: pg_resetxlog.c:294 #, c-format msgid "%s: no data directory specified\n" msgstr "%s: non è stata specificata una directory per i dati\n" -#: pg_resetxlog.c:252 +#: pg_resetxlog.c:308 #, c-format msgid "%s: cannot be executed by \"root\"\n" msgstr "%s non può essere eseguito da \"root\"\n" -#: pg_resetxlog.c:254 +#: pg_resetxlog.c:310 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "È obbligatorio eseguire %s come superutente di PostgreSQL.\n" -#: pg_resetxlog.c:264 +#: pg_resetxlog.c:320 #, c-format msgid "%s: could not change directory to \"%s\": %s\n" msgstr "%s: spostamento nella directory \"%s\" fallito: %s\n" -#: pg_resetxlog.c:277 pg_resetxlog.c:418 +#: pg_resetxlog.c:333 pg_resetxlog.c:479 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: errore nell'apertura del file \"%s\" per la lettura: %s\n" -#: pg_resetxlog.c:284 +#: pg_resetxlog.c:340 #, c-format msgid "" "%s: lock file \"%s\" exists\n" @@ -135,7 +158,7 @@ msgstr "" "%s: il file di lock \"%s\" esiste\n" "Il server è in esecuzione? Se non lo è, cancella il file di lock e riprova.\n" -#: pg_resetxlog.c:366 +#: pg_resetxlog.c:427 #, c-format msgid "" "\n" @@ -144,7 +167,7 @@ msgstr "" "\n" "Se questi parametri sembrano accettabili, utilizza -f per forzare un reset.\n" -#: pg_resetxlog.c:378 +#: pg_resetxlog.c:439 #, c-format msgid "" "The database server was not shut down cleanly.\n" @@ -155,12 +178,12 @@ msgstr "" "Resettare il registro delle transazioni può causare una perdita di dati.\n" "Se vuoi continuare comunque, utilizza -f per forzare il reset.\n" -#: pg_resetxlog.c:392 +#: pg_resetxlog.c:453 #, c-format msgid "Transaction log reset\n" msgstr "Registro delle transazioni riavviato\n" -#: pg_resetxlog.c:421 +#: pg_resetxlog.c:482 #, c-format msgid "" "If you are sure the data directory path is correct, execute\n" @@ -171,22 +194,22 @@ msgstr "" " touch %s\n" "e riprova.\n" -#: pg_resetxlog.c:434 +#: pg_resetxlog.c:495 #, c-format msgid "%s: could not read file \"%s\": %s\n" msgstr "%s: lettura del file \"%s\" fallita: %s\n" -#: pg_resetxlog.c:457 +#: pg_resetxlog.c:518 #, c-format msgid "%s: pg_control exists but has invalid CRC; proceed with caution\n" msgstr "%s: pg_control esiste ma ha un CRC non valido; procedere con cautela\n" -#: pg_resetxlog.c:466 +#: pg_resetxlog.c:527 #, c-format msgid "%s: pg_control exists but is broken or unknown version; ignoring it\n" msgstr "%s: pg_control esiste ma è inutilizzabile o è una versione sconosciuta; verrà ignorato\n" -#: pg_resetxlog.c:568 +#: pg_resetxlog.c:630 #, c-format msgid "" "Guessed pg_control values:\n" @@ -195,7 +218,7 @@ msgstr "" "Valori pg_control indovinati:\n" "\n" -#: pg_resetxlog.c:570 +#: pg_resetxlog.c:632 #, c-format msgid "" "Current pg_control values:\n" @@ -204,166 +227,176 @@ msgstr "" "Valori pg_control attuali:\n" "\n" -#: pg_resetxlog.c:579 +#: pg_resetxlog.c:641 #, c-format msgid "pg_control version number: %u\n" msgstr "Numero di versione di pg_control: %u\n" -#: pg_resetxlog.c:581 +#: pg_resetxlog.c:643 #, c-format msgid "Catalog version number: %u\n" msgstr "Numero di versione del catalogo: %u\n" -#: pg_resetxlog.c:583 +#: pg_resetxlog.c:645 #, c-format msgid "Database system identifier: %s\n" msgstr "Identificatore di sistema del database: %s\n" -#: pg_resetxlog.c:585 +#: pg_resetxlog.c:647 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "TimeLineId dell'ultimo checkpoint: %u\n" -#: pg_resetxlog.c:587 +#: pg_resetxlog.c:649 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "full_page_writes dell'ultimo checkpoint: %s\n" -#: pg_resetxlog.c:588 +#: pg_resetxlog.c:650 msgid "off" msgstr "disattivato" -#: pg_resetxlog.c:588 +#: pg_resetxlog.c:650 msgid "on" msgstr "attivato" -#: pg_resetxlog.c:589 +#: pg_resetxlog.c:651 #, c-format msgid "Latest checkpoint's NextXID: %u/%u\n" msgstr "NextXID dell'ultimo checkpoint: %u%u\n" -#: pg_resetxlog.c:592 +#: pg_resetxlog.c:654 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID dell'ultimo checkpoint: %u\n" -#: pg_resetxlog.c:594 +#: pg_resetxlog.c:656 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId dell'ultimo checkpoint: %u\n" -#: pg_resetxlog.c:596 +#: pg_resetxlog.c:658 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset dell'ultimo checkpoint: %u\n" -#: pg_resetxlog.c:598 +#: pg_resetxlog.c:660 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID dell'ultimo checkpoint: %u\n" -#: pg_resetxlog.c:600 +#: pg_resetxlog.c:662 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "DB dell'oldestXID dell'ultimo checkpoint: %u\n" -#: pg_resetxlog.c:602 +#: pg_resetxlog.c:664 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID dell'ultimo checkpoint: %u\n" -#: pg_resetxlog.c:604 +#: pg_resetxlog.c:666 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXID dell'ultimo checkpoint: %u\n" -#: pg_resetxlog.c:606 +#: pg_resetxlog.c:668 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "DB dell'oldestMulti dell'ultimo checkpoint: %u\n" -#: pg_resetxlog.c:608 +#: pg_resetxlog.c:670 +#, c-format +msgid "Latest checkpoint's oldest CommitTs: %u\n" +msgstr "CommitTs più vecchio ultimo checkpoint: %u\n" + +#: pg_resetxlog.c:672 +#, c-format +msgid "Latest checkpoint's newest CommitTs: %u\n" +msgstr "CommitTs più nuovo dell'ultimo checkpoint: %u\n" + +#: pg_resetxlog.c:674 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Massimo allineamento dei dati: %u\n" -#: pg_resetxlog.c:611 +#: pg_resetxlog.c:677 #, c-format msgid "Database block size: %u\n" msgstr "Dimensione blocco database: %u\n" -#: pg_resetxlog.c:613 +#: pg_resetxlog.c:679 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Blocchi per ogni segmento grosse tabelle: %u\n" -#: pg_resetxlog.c:615 +#: pg_resetxlog.c:681 #, c-format msgid "WAL block size: %u\n" msgstr "Dimensione blocco WAL: %u\n" -#: pg_resetxlog.c:617 +#: pg_resetxlog.c:683 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Byte per segmento WAL: %u\n" -#: pg_resetxlog.c:619 +#: pg_resetxlog.c:685 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Lunghezza massima degli identificatori: %u\n" -#: pg_resetxlog.c:621 +#: pg_resetxlog.c:687 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Massimo numero di colonne in un indice: %u\n" -#: pg_resetxlog.c:623 +#: pg_resetxlog.c:689 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Massima dimensione di un segmento TOAST: %u\n" -#: pg_resetxlog.c:625 +#: pg_resetxlog.c:691 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Dimensione di un blocco large-object: %u\n" -#: pg_resetxlog.c:627 +#: pg_resetxlog.c:693 #, c-format msgid "Date/time type storage: %s\n" msgstr "Memorizzazione per tipi data/ora: %s\n" -#: pg_resetxlog.c:628 +#: pg_resetxlog.c:694 msgid "64-bit integers" msgstr "interi a 64 bit" -#: pg_resetxlog.c:628 +#: pg_resetxlog.c:694 msgid "floating-point numbers" msgstr "numeri in virgola mobile" -#: pg_resetxlog.c:629 +#: pg_resetxlog.c:695 #, c-format msgid "Float4 argument passing: %s\n" msgstr "Passaggio di argomenti Float4: %s\n" -#: pg_resetxlog.c:630 pg_resetxlog.c:632 +#: pg_resetxlog.c:696 pg_resetxlog.c:698 msgid "by reference" msgstr "per riferimento" -#: pg_resetxlog.c:630 pg_resetxlog.c:632 +#: pg_resetxlog.c:696 pg_resetxlog.c:698 msgid "by value" msgstr "per valore" -#: pg_resetxlog.c:631 +#: pg_resetxlog.c:697 #, c-format msgid "Float8 argument passing: %s\n" msgstr "passaggio di argomenti Float8: %s\n" -#: pg_resetxlog.c:633 +#: pg_resetxlog.c:699 #, c-format msgid "Data page checksum version: %u\n" msgstr "Versione somma di controllo dati pagine: %u\n" -#: pg_resetxlog.c:647 +#: pg_resetxlog.c:713 #, c-format msgid "" "\n" @@ -376,107 +409,117 @@ msgstr "" "Valori da cambiare:\n" "\n" -#: pg_resetxlog.c:650 +#: pg_resetxlog.c:716 #, c-format msgid "First log segment after reset: %s\n" msgstr "Primo segmento di log dopo il reset: %s\n" -#: pg_resetxlog.c:654 +#: pg_resetxlog.c:720 #, c-format msgid "NextMultiXactId: %u\n" msgstr "NextMultiXactId: %u\n" -#: pg_resetxlog.c:656 +#: pg_resetxlog.c:722 #, c-format msgid "OldestMultiXid: %u\n" msgstr "OldestMultiXid: %u\n" -#: pg_resetxlog.c:658 +#: pg_resetxlog.c:724 #, c-format msgid "OldestMulti's DB: %u\n" msgstr "DB di OldestMulti: %u\n" -#: pg_resetxlog.c:664 +#: pg_resetxlog.c:730 #, c-format msgid "NextMultiOffset: %u\n" msgstr "NextMultiOffset: %u\n" -#: pg_resetxlog.c:670 +#: pg_resetxlog.c:736 #, c-format msgid "NextOID: %u\n" msgstr "NextOID: %u\n" -#: pg_resetxlog.c:676 +#: pg_resetxlog.c:742 #, c-format msgid "NextXID: %u\n" msgstr "NextXID: %u\n" -#: pg_resetxlog.c:678 +#: pg_resetxlog.c:744 #, c-format msgid "OldestXID: %u\n" msgstr "OldestXID: %u\n" -#: pg_resetxlog.c:680 +#: pg_resetxlog.c:746 #, c-format msgid "OldestXID's DB: %u\n" msgstr "DB di OldestXID: %u\n" -#: pg_resetxlog.c:686 +#: pg_resetxlog.c:752 #, c-format msgid "NextXID epoch: %u\n" msgstr "Epoca del NextXID: %u\n" -#: pg_resetxlog.c:751 +#: pg_resetxlog.c:758 +#, c-format +msgid "oldestCommitTs: %u\n" +msgstr "oldestCommitTs: %u\n" + +#: pg_resetxlog.c:763 +#, c-format +msgid "newestCommitTs: %u\n" +msgstr "newestCommitTs: %u\n" + +#: pg_resetxlog.c:829 #, c-format msgid "%s: internal error -- sizeof(ControlFileData) is too large ... fix PG_CONTROL_SIZE\n" msgstr "%s: errore interno -- sizeof(ControlFileData) è troppo grande ... correggere PG_CONTROL_SIZE\n" -#: pg_resetxlog.c:766 +#: pg_resetxlog.c:844 #, c-format msgid "%s: could not create pg_control file: %s\n" msgstr "%s: creazione del file pg_control fallita: %s\n" -#: pg_resetxlog.c:777 +#: pg_resetxlog.c:855 #, c-format msgid "%s: could not write pg_control file: %s\n" msgstr "%s: scrittura del file pg_control fallita: %s\n" -#: pg_resetxlog.c:784 pg_resetxlog.c:1068 +#: pg_resetxlog.c:862 pg_resetxlog.c:1158 #, c-format msgid "%s: fsync error: %s\n" msgstr "%s: errore fsync: %s\n" -#: pg_resetxlog.c:824 pg_resetxlog.c:890 pg_resetxlog.c:941 +#: pg_resetxlog.c:902 pg_resetxlog.c:973 pg_resetxlog.c:1024 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: apertura della directory \"%s\" fallita: %s\n" -#: pg_resetxlog.c:855 pg_resetxlog.c:912 pg_resetxlog.c:964 +#: pg_resetxlog.c:938 pg_resetxlog.c:995 pg_resetxlog.c:1049 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: lettura della directory \"%s\" fallita: %s\n" -#: pg_resetxlog.c:862 pg_resetxlog.c:919 pg_resetxlog.c:971 +#: pg_resetxlog.c:945 pg_resetxlog.c:1002 pg_resetxlog.c:1056 #, c-format msgid "%s: could not close directory \"%s\": %s\n" msgstr "%s: chiusura della directory \"%s\" fallita: %s\n" -#: pg_resetxlog.c:903 pg_resetxlog.c:955 +#: pg_resetxlog.c:986 pg_resetxlog.c:1040 #, c-format msgid "%s: could not delete file \"%s\": %s\n" msgstr "%s: cancellazione del file \"%s\" fallita: %s\n" -#: pg_resetxlog.c:1035 +#: pg_resetxlog.c:1125 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: apertura del file \"%s\" fallita: %s\n" -#: pg_resetxlog.c:1046 pg_resetxlog.c:1060 +#: pg_resetxlog.c:1136 pg_resetxlog.c:1150 #, c-format msgid "%s: could not write file \"%s\": %s\n" msgstr "%s: errore nella scrittura del file \"%s\": %s\n" -#: pg_resetxlog.c:1079 +#: pg_resetxlog.c:1169 #, c-format msgid "" "%s resets the PostgreSQL transaction log.\n" @@ -485,73 +528,83 @@ msgstr "" "%s riavvia il registro delle transazioni di PostgreSQL.\n" "\n" -#: pg_resetxlog.c:1080 +#: pg_resetxlog.c:1170 #, c-format msgid "" "Usage:\n" -" %s [OPTION]... DATADIR\n" +" %s [OPTION]... {[-D] DATADIR}\n" "\n" msgstr "" "Utilizzo:\n" -" %s [OPZIONI]... DATADIR\n" +" %s [OPZIONE]... {[-D] DATADIR}\n" "\n" -#: pg_resetxlog.c:1081 +#: pg_resetxlog.c:1171 #, c-format msgid "Options:\n" msgstr "Opzioni:\n" -#: pg_resetxlog.c:1082 +#: pg_resetxlog.c:1172 +#, c-format +msgid " -c XID,XID set oldest and newest transactions bearing commit timestamp\n" +msgstr " -c XID,XID imposta le transazione più vecchia e più nuova che portano l'ora di commit\n" + +#: pg_resetxlog.c:1173 +#, c-format +msgid " (zero in either value means no change)\n" +msgstr " (zero in uno dei dei valori vuol dire nessun cambiamento)\n" + +#: pg_resetxlog.c:1174 #, c-format msgid " -e XIDEPOCH set next transaction ID epoch\n" msgstr " -e XIDEPOCH imposta il prossimo ID epoch transazione\n" -#: pg_resetxlog.c:1083 +#: pg_resetxlog.c:1175 #, c-format msgid " -f force update to be done\n" msgstr " -f forza l'esecuzione dell'aggiornamento\n" -#: pg_resetxlog.c:1084 +#: pg_resetxlog.c:1176 #, c-format msgid " -l XLOGFILE force minimum WAL starting location for new transaction log\n" msgstr " -l XLOGFILE forza la locazione di inizio WAL minima per il nuovo log transazioni\n" -#: pg_resetxlog.c:1085 +#: pg_resetxlog.c:1177 #, c-format msgid " -m MXID,MXID set next and oldest multitransaction ID\n" msgstr " -m MXID,MXID imposta gli ID multitransazione successivo e più vecchio\n" -#: pg_resetxlog.c:1086 +#: pg_resetxlog.c:1178 #, c-format msgid " -n no update, just show what would be done (for testing)\n" msgstr " -n nessuna modifica, mostra solo cosa sarebbe fatto (per prova)\n" -#: pg_resetxlog.c:1087 +#: pg_resetxlog.c:1179 #, c-format msgid " -o OID set next OID\n" msgstr " -o OID imposta il prossimo OID\n" -#: pg_resetxlog.c:1088 +#: pg_resetxlog.c:1180 #, c-format msgid " -O OFFSET set next multitransaction offset\n" msgstr " -O OFFSET imposta il prossimo offset multitransazione\n" -#: pg_resetxlog.c:1089 +#: pg_resetxlog.c:1181 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informazioni sulla versione ed esci\n" -#: pg_resetxlog.c:1090 +#: pg_resetxlog.c:1182 #, c-format msgid " -x XID set next transaction ID\n" msgstr " -x XID imposta il prossimo ID di transazione\n" -#: pg_resetxlog.c:1091 +#: pg_resetxlog.c:1183 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra questo aiuto ed esci\n" -#: pg_resetxlog.c:1092 +#: pg_resetxlog.c:1184 #, c-format msgid "" "\n" diff --git a/src/bin/pg_resetxlog/po/pl.po b/src/bin/pg_resetxlog/po/pl.po index 5fbc60c798c4b..b896a8592392c 100644 --- a/src/bin/pg_resetxlog/po/pl.po +++ b/src/bin/pg_resetxlog/po/pl.po @@ -2,13 +2,13 @@ # Copyright (C) 2011 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. # Begina Felicysym , 2011, 2012, 2013. -# grzegorz , 2014. +# grzegorz , 2014, 2015. msgid "" msgstr "" "Project-Id-Version: pg_resetxlog (PostgreSQL 9.1)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-11-10 20:42+0000\n" -"PO-Revision-Date: 2014-11-10 23:08+0200\n" +"POT-Creation-Date: 2015-08-15 18:43+0000\n" +"PO-Revision-Date: 2015-08-16 13:09+0200\n" "Last-Translator: grzegorz \n" "Language-Team: begina.felicysym@wp.eu\n" "Language: pl\n" @@ -19,99 +19,124 @@ msgstr "" "|| n%100>=20) ? 1 : 2);\n" "X-Generator: Virtaal 0.7.1\n" -#: pg_resetxlog.c:130 +#: ../../common/restricted_token.c:68 #, c-format -msgid "%s: invalid argument for option -e\n" -msgstr "%s: niepoprawny argument dla opcji -e\n" +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_resetxlog.c:131 pg_resetxlog.c:146 pg_resetxlog.c:161 pg_resetxlog.c:176 -#: pg_resetxlog.c:184 pg_resetxlog.c:210 pg_resetxlog.c:224 pg_resetxlog.c:231 -#: pg_resetxlog.c:239 +#: ../../common/restricted_token.c:77 +#, 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" + +#: ../../common/restricted_token.c:90 +#, 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" + +#: ../../common/restricted_token.c:110 +#, 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" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: nie udało się uruchomić procesu dla polecenia \"%s\": kod błędu %lu\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: nie udało się ponownie wykonać ograniczonego tokena: %lu\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: nie udało uzyskać kodu wyjścia z usługi podrzędnej: kod błędu %lu\n" + +#. translator: the second %s is a command line argument (-e, etc) +#: pg_resetxlog.c:140 pg_resetxlog.c:155 pg_resetxlog.c:170 pg_resetxlog.c:177 +#: pg_resetxlog.c:201 pg_resetxlog.c:216 pg_resetxlog.c:224 pg_resetxlog.c:250 +#: pg_resetxlog.c:264 +#, c-format +#| msgid "%s: invalid argument for option -e\n" +msgid "%s: invalid argument for option %s\n" +msgstr "%s: niepoprawny argument dla opcji %s\n" + +#: pg_resetxlog.c:141 pg_resetxlog.c:156 pg_resetxlog.c:171 pg_resetxlog.c:178 +#: pg_resetxlog.c:202 pg_resetxlog.c:217 pg_resetxlog.c:225 pg_resetxlog.c:251 +#: pg_resetxlog.c:265 pg_resetxlog.c:272 pg_resetxlog.c:285 pg_resetxlog.c:293 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Spróbuj \"%s --help\" aby uzyskać więcej informacji.\n" -#: pg_resetxlog.c:136 +#: pg_resetxlog.c:146 #, c-format msgid "%s: transaction ID epoch (-e) must not be -1\n" msgstr "%s: epoka ID transakcji (-e) nie może być -1\n" -#: pg_resetxlog.c:145 -#, c-format -msgid "%s: invalid argument for option -x\n" -msgstr "%s: niepoprawny argument dla opcji -x\n" - -#: pg_resetxlog.c:151 +#: pg_resetxlog.c:161 #, c-format msgid "%s: transaction ID (-x) must not be 0\n" msgstr "%s: ID transakcji (-x) nie może być 0\n" -#: pg_resetxlog.c:160 +#: pg_resetxlog.c:185 pg_resetxlog.c:192 #, c-format -msgid "%s: invalid argument for option -o\n" -msgstr "%s: niepoprawny argument dla opcji -o\n" +#| msgid "%s: transfer rate must be greater than zero\n" +msgid "%s: transaction ID (-c) must be either 0 or greater than or equal to 2\n" +msgstr "%s: ID transakcji (-c) musi być albo 0 albo większa lub równa 2\n" -#: pg_resetxlog.c:166 +#: pg_resetxlog.c:207 #, c-format msgid "%s: OID (-o) must not be 0\n" msgstr "%s: OID (-o) nie może być 0\n" -#: pg_resetxlog.c:175 pg_resetxlog.c:183 -#, c-format -msgid "%s: invalid argument for option -m\n" -msgstr "%s: niepoprawny argument dla opcji -m\n" - -#: pg_resetxlog.c:189 +#: pg_resetxlog.c:230 #, c-format msgid "%s: multitransaction ID (-m) must not be 0\n" msgstr "%s: ID multitransakcji (-m) nie może być 0\n" -#: pg_resetxlog.c:199 +#: pg_resetxlog.c:240 #, c-format msgid "%s: oldest multitransaction ID (-m) must not be 0\n" msgstr "%s: najstarszy ID multitransakcji (-m) nie może być 0\n" -#: pg_resetxlog.c:209 -#, c-format -msgid "%s: invalid argument for option -O\n" -msgstr "%s: niepoprawny argument dla opcji -O\n" - -#: pg_resetxlog.c:215 +#: pg_resetxlog.c:256 #, c-format msgid "%s: multitransaction offset (-O) must not be -1\n" msgstr "%s: offset multitransakcji (-O) nie może być -1\n" -#: pg_resetxlog.c:223 +#: pg_resetxlog.c:283 #, c-format -msgid "%s: invalid argument for option -l\n" -msgstr "%s: niepoprawny argument dla opcji -l\n" +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: za duża ilość parametrów (pierwszy to \"%s\")\n" -#: pg_resetxlog.c:238 +#: pg_resetxlog.c:292 #, c-format msgid "%s: no data directory specified\n" msgstr "%s: katalog danych nie został ustawiony\n" -#: pg_resetxlog.c:252 +#: pg_resetxlog.c:306 #, c-format msgid "%s: cannot be executed by \"root\"\n" msgstr "%s: nie może być wykonywane pod \"rootem\"\n" -#: pg_resetxlog.c:254 +#: pg_resetxlog.c:308 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "Musisz uruchomić %s jako superużytkownik PostgreSQL.\n" -#: pg_resetxlog.c:264 +#: pg_resetxlog.c:318 #, c-format msgid "%s: could not change directory to \"%s\": %s\n" msgstr "%s: nie można zmienić katalogu na \"%s\": %s\n" -#: pg_resetxlog.c:277 pg_resetxlog.c:418 +#: pg_resetxlog.c:331 pg_resetxlog.c:477 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: nie można otworzyć pliku \"%s\" do odczytu: %s\n" -#: pg_resetxlog.c:284 +#: pg_resetxlog.c:338 #, c-format msgid "" "%s: lock file \"%s\" exists\n" @@ -120,7 +145,7 @@ msgstr "" "%s: plik blokady \"%s\" istnieje\n" "Czy serwer działa? Jeśli nie, usuń plik blokady i spróbuj ponownie.\n" -#: pg_resetxlog.c:366 +#: pg_resetxlog.c:425 #, c-format msgid "" "\n" @@ -129,7 +154,7 @@ msgstr "" "\n" "Jeśli te wartości wydają się do przyjęcia, użyj -f by wymusić reset.\n" -#: pg_resetxlog.c:378 +#: pg_resetxlog.c:437 #, c-format msgid "" "The database server was not shut down cleanly.\n" @@ -140,12 +165,12 @@ msgstr "" "Zresetowanie dziennika transakcji może spowodować utratę danych.\n" "Jeśli chcesz kontynuować, użyj -f, aby wymusić reset.\n" -#: pg_resetxlog.c:392 +#: pg_resetxlog.c:451 #, c-format msgid "Transaction log reset\n" msgstr "Reset dziennika transakcji\n" -#: pg_resetxlog.c:421 +#: pg_resetxlog.c:480 #, c-format msgid "" "If you are sure the data directory path is correct, execute\n" @@ -156,22 +181,22 @@ msgstr "" " touch %s\n" "i spróbuj ponownie.\n" -#: pg_resetxlog.c:434 +#: pg_resetxlog.c:493 #, c-format msgid "%s: could not read file \"%s\": %s\n" msgstr "%s: nie można odczytać z pliku \"%s\": %s\n" -#: pg_resetxlog.c:457 +#: pg_resetxlog.c:516 #, c-format msgid "%s: pg_control exists but has invalid CRC; proceed with caution\n" msgstr "%s: pg_control istnieje ale ma niepoprawne CRC; postępuj ostrożnie\n" -#: pg_resetxlog.c:466 +#: pg_resetxlog.c:525 #, c-format msgid "%s: pg_control exists but is broken or unknown version; ignoring it\n" msgstr "%s: pg_control istnieje ale jest uszkodzony lub ma nieznaną wersję, zignorowano\n" -#: pg_resetxlog.c:568 +#: pg_resetxlog.c:628 #, c-format msgid "" "Guessed pg_control values:\n" @@ -180,11 +205,8 @@ msgstr "" "Odgadnięte wartości pg_control:\n" "\n" -#: pg_resetxlog.c:570 +#: pg_resetxlog.c:630 #, c-format -#| msgid "" -#| "pg_control values:\n" -#| "\n" msgid "" "Current pg_control values:\n" "\n" @@ -192,167 +214,178 @@ msgstr "" "Bieżące wartości pg_control:\n" "\n" -#: pg_resetxlog.c:579 +#: pg_resetxlog.c:639 #, c-format msgid "pg_control version number: %u\n" msgstr "pg_control w wersji numer: %u\n" -#: pg_resetxlog.c:581 +#: pg_resetxlog.c:641 #, c-format msgid "Catalog version number: %u\n" msgstr "Katalog w wersji numer: %u\n" -#: pg_resetxlog.c:583 +#: pg_resetxlog.c:643 #, c-format msgid "Database system identifier: %s\n" msgstr "Identyfikator systemu bazy danych: %s\n" -#: pg_resetxlog.c:585 +#: pg_resetxlog.c:645 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "TimeLineID najnowszego punktu kontrolnego: %u\n" -#: pg_resetxlog.c:587 +#: pg_resetxlog.c:647 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "full_page_writes najnowszego punktu kontrolnego: %s\n" -#: pg_resetxlog.c:588 +#: pg_resetxlog.c:648 msgid "off" msgstr "wyłączone" -#: pg_resetxlog.c:588 +#: pg_resetxlog.c:648 msgid "on" msgstr "włączone" -#: pg_resetxlog.c:589 +#: pg_resetxlog.c:649 #, c-format msgid "Latest checkpoint's NextXID: %u/%u\n" msgstr "NextXID najnowszego punktu kontrolnego: %u/%u\n" -#: pg_resetxlog.c:592 +#: pg_resetxlog.c:652 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID najnowszego punktu kontrolnego: %u\n" -#: pg_resetxlog.c:594 +#: pg_resetxlog.c:654 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId najnowszego punktu kontrolnego: %u\n" -#: pg_resetxlog.c:596 +#: pg_resetxlog.c:656 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset najnowszego punktu kontrolnego: %u\n" -#: pg_resetxlog.c:598 +#: pg_resetxlog.c:658 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID najnowszego punktu kontrolnego: %u\n" -#: pg_resetxlog.c:600 +#: pg_resetxlog.c:660 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "DB oldestXID'u najnowszego punktu kontrolnego: %u\n" -#: pg_resetxlog.c:602 +#: pg_resetxlog.c:662 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "NextXID najnowszego punktu kontrolnego: %u\n" -#: pg_resetxlog.c:604 +#: pg_resetxlog.c:664 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid najnowszego punktu kontrolnego: %u\n" -#: pg_resetxlog.c:606 +#: pg_resetxlog.c:666 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "DB oldestMulti'u najnowszego punktu kontrolnego: %u\n" -#: pg_resetxlog.c:608 +#: pg_resetxlog.c:668 +#, c-format +#| msgid "Latest checkpoint's oldestActiveXID: %u\n" +msgid "Latest checkpoint's oldest CommitTs: %u\n" +msgstr "najstarszy CommitTs najnowszego punktu kontrolnego: %u\n" + +#: pg_resetxlog.c:670 +#, c-format +#| msgid "Latest checkpoint's NextMultiXactId: %u\n" +msgid "Latest checkpoint's newest CommitTs: %u\n" +msgstr "najświeższy CommitTs najnowszego punktu kontrolnego: %u\n" + +#: pg_resetxlog.c:672 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Maksymalne wyrównanie danych: %u\n" -#: pg_resetxlog.c:611 +#: pg_resetxlog.c:675 #, c-format msgid "Database block size: %u\n" msgstr "Wielkość bloku bazy danych: %u\n" -#: pg_resetxlog.c:613 +#: pg_resetxlog.c:677 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Bloki na segment są w relacji: %u\n" -#: pg_resetxlog.c:615 +#: pg_resetxlog.c:679 #, c-format msgid "WAL block size: %u\n" msgstr "Wielkość bloku WAL: %u\n" -#: pg_resetxlog.c:617 +#: pg_resetxlog.c:681 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Bajtów na segment WAL: %u\n" -#: pg_resetxlog.c:619 +#: pg_resetxlog.c:683 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Maksymalna długość identyfikatorów: %u\n" -#: pg_resetxlog.c:621 +#: pg_resetxlog.c:685 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Maksymalna liczba kolumn w indeksie: %u\n" -#: pg_resetxlog.c:623 +#: pg_resetxlog.c:687 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Maksymalny rozmiar fragmentu TOAST: %u\n" -#: pg_resetxlog.c:625 +#: pg_resetxlog.c:689 #, c-format -#| msgid "Maximum size of a TOAST chunk: %u\n" msgid "Size of a large-object chunk: %u\n" msgstr "Rozmiar fragmentu dużego obiektu: %u\n" -#: pg_resetxlog.c:627 +#: pg_resetxlog.c:691 #, c-format msgid "Date/time type storage: %s\n" msgstr "Typ przechowywania daty/czasu: %s\n" -#: pg_resetxlog.c:628 +#: pg_resetxlog.c:692 msgid "64-bit integers" msgstr "64-bit'owe zmienne integer" -#: pg_resetxlog.c:628 +#: pg_resetxlog.c:692 msgid "floating-point numbers" msgstr "liczby zmiennoprzecinkowe" -#: pg_resetxlog.c:629 +#: pg_resetxlog.c:693 #, c-format msgid "Float4 argument passing: %s\n" msgstr "Przekazywanie parametru float4: %s\n" -#: pg_resetxlog.c:630 pg_resetxlog.c:632 +#: pg_resetxlog.c:694 pg_resetxlog.c:696 msgid "by reference" msgstr "przez referencję" -#: pg_resetxlog.c:630 pg_resetxlog.c:632 +#: pg_resetxlog.c:694 pg_resetxlog.c:696 msgid "by value" msgstr "przez wartość" -#: pg_resetxlog.c:631 +#: pg_resetxlog.c:695 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Przekazywanie parametru float8: %s\n" -#: pg_resetxlog.c:633 +#: pg_resetxlog.c:697 #, c-format msgid "Data page checksum version: %u\n" msgstr "Suma kontrolna strony danych w wersji numer: %u\n" -#: pg_resetxlog.c:647 +#: pg_resetxlog.c:711 #, c-format msgid "" "\n" @@ -365,116 +398,119 @@ msgstr "" "Wartości do zmiany:\n" "\n" -#: pg_resetxlog.c:650 +#: pg_resetxlog.c:714 #, c-format msgid "First log segment after reset: %s\n" msgstr "Pierwszy segment dziennika po resecie: %s\n" -#: pg_resetxlog.c:654 +#: pg_resetxlog.c:718 #, c-format -#| msgid "WAL block size: %u\n" msgid "NextMultiXactId: %u\n" msgstr "NextMultiXactId: %u\n" -#: pg_resetxlog.c:656 +#: pg_resetxlog.c:720 #, c-format -#| msgid "WAL block size: %u\n" msgid "OldestMultiXid: %u\n" msgstr "OldestMultiXid: %u\n" -#: pg_resetxlog.c:658 +#: pg_resetxlog.c:722 #, c-format -#| msgid "WAL block size: %u\n" msgid "OldestMulti's DB: %u\n" msgstr "DB OldestMulti'u: %u\n" -#: pg_resetxlog.c:664 +#: pg_resetxlog.c:728 #, c-format -#| msgid "WAL block size: %u\n" msgid "NextMultiOffset: %u\n" msgstr "NextMultiOffset: %u\n" -#: pg_resetxlog.c:670 +#: pg_resetxlog.c:734 #, c-format -#| msgid "WAL block size: %u\n" msgid "NextOID: %u\n" msgstr "NextOID: %u\n" -#: pg_resetxlog.c:676 +#: pg_resetxlog.c:740 #, c-format -#| msgid "WAL block size: %u\n" msgid "NextXID: %u\n" msgstr "NextXID: %u\n" -#: pg_resetxlog.c:678 +#: pg_resetxlog.c:742 #, c-format -#| msgid "WAL block size: %u\n" msgid "OldestXID: %u\n" msgstr "OldestXID: %u\n" -#: pg_resetxlog.c:680 +#: pg_resetxlog.c:744 #, c-format -#| msgid "WAL block size: %u\n" msgid "OldestXID's DB: %u\n" msgstr "DB OldestXIDu: %u\n" -#: pg_resetxlog.c:686 +#: pg_resetxlog.c:750 #, c-format -#| msgid "WAL block size: %u\n" msgid "NextXID epoch: %u\n" msgstr "Epoka NextXID: %u\n" -#: pg_resetxlog.c:751 +#: pg_resetxlog.c:756 +#, c-format +#| msgid "OldestMultiXid: %u\n" +msgid "oldestCommitTs: %u\n" +msgstr "oldestCommitTs: %u\n" + +#: pg_resetxlog.c:761 +#, c-format +#| msgid "OldestMultiXid: %u\n" +msgid "newestCommitTs: %u\n" +msgstr "newestCommitTs: %u\n" + +#: pg_resetxlog.c:827 #, c-format msgid "%s: internal error -- sizeof(ControlFileData) is too large ... fix PG_CONTROL_SIZE\n" msgstr "%s: błąd wewnętrzny -- sizeof(ControlFileData) jest zbyt duża ... popraw PG_CONTROL_SIZE\n" -#: pg_resetxlog.c:766 +#: pg_resetxlog.c:842 #, c-format msgid "%s: could not create pg_control file: %s\n" msgstr "%s: nie można utworzyć pliku pg_control: %s\n" -#: pg_resetxlog.c:777 +#: pg_resetxlog.c:853 #, c-format msgid "%s: could not write pg_control file: %s\n" msgstr "%s: nie można pisać do pliku pg_control: %s\n" -#: pg_resetxlog.c:784 pg_resetxlog.c:1068 +#: pg_resetxlog.c:860 pg_resetxlog.c:1156 #, c-format msgid "%s: fsync error: %s\n" msgstr "%s: błąd fsync: %s\n" -#: pg_resetxlog.c:824 pg_resetxlog.c:890 pg_resetxlog.c:941 +#: pg_resetxlog.c:900 pg_resetxlog.c:971 pg_resetxlog.c:1022 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: nie można otworzyć katalogu \"%s\": %s\n" -#: pg_resetxlog.c:855 pg_resetxlog.c:912 pg_resetxlog.c:964 +#: pg_resetxlog.c:936 pg_resetxlog.c:993 pg_resetxlog.c:1047 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: nie można odczytać katalogu \"%s\": %s\n" -#: pg_resetxlog.c:862 pg_resetxlog.c:919 pg_resetxlog.c:971 +#: pg_resetxlog.c:943 pg_resetxlog.c:1000 pg_resetxlog.c:1054 #, c-format msgid "%s: could not close directory \"%s\": %s\n" msgstr "%s: nie można zamknąć katalogu \"%s\": %s\n" -#: pg_resetxlog.c:903 pg_resetxlog.c:955 +#: pg_resetxlog.c:984 pg_resetxlog.c:1038 #, c-format msgid "%s: could not delete file \"%s\": %s\n" msgstr "%s: nie można usunąć pliku \"%s\": %s\n" -#: pg_resetxlog.c:1035 +#: pg_resetxlog.c:1123 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: nie można otworzyć pliku \"%s\": %s\n" -#: pg_resetxlog.c:1046 pg_resetxlog.c:1060 +#: pg_resetxlog.c:1134 pg_resetxlog.c:1148 #, c-format msgid "%s: could not write file \"%s\": %s\n" msgstr "%s: nie można zapisać pliku \"%s\": %s\n" -#: pg_resetxlog.c:1079 +#: pg_resetxlog.c:1167 #, c-format msgid "" "%s resets the PostgreSQL transaction log.\n" @@ -483,76 +519,90 @@ msgstr "" "%s resetuje log transakcji PostgreSQL.\n" "\n" -#: pg_resetxlog.c:1080 +#: pg_resetxlog.c:1168 #, c-format +#| msgid "" +#| "Usage:\n" +#| " %s [OPTION]... DATADIR\n" +#| "\n" msgid "" "Usage:\n" -" %s [OPTION]... DATADIR\n" +" %s [OPTION]... {[-D] DATADIR}\n" "\n" msgstr "" "Sposób użycia:\n" -" %s [OPCJA]... FOLDERDANYCH\n" +" %s [OPCJA]... {[-D] FOLDERDANYCH}\n" "\n" -#: pg_resetxlog.c:1081 +#: pg_resetxlog.c:1169 #, c-format msgid "Options:\n" msgstr "Opcje:\n" -#: pg_resetxlog.c:1082 +#: pg_resetxlog.c:1170 +#, c-format +#| msgid " -m MXID,MXID set next and oldest multitransaction ID\n" +msgid " -c XID,XID set oldest and newest transactions bearing commit timestamp\n" +msgstr " -c XID,XID ustawia najstarszy i najświeższy znacznik czasu " +"wykonywanego zatwierdzenia\n" + +#: pg_resetxlog.c:1171 +#, c-format +#| msgid " -O allow system table structure changes\n" +msgid " (zero in either value means no change)\n" +msgstr " (zero w obu wartościach oznacza brak zmian)\n" + +#: pg_resetxlog.c:1172 #, c-format msgid " -e XIDEPOCH set next transaction ID epoch\n" msgstr " -e XIDEPOCH ustawia epokę ID następnej transakcji\n" -#: pg_resetxlog.c:1083 +#: pg_resetxlog.c:1173 #, c-format msgid " -f force update to be done\n" msgstr " -f wymusza wykonanie modyfikacji\n" -#: pg_resetxlog.c:1084 +#: pg_resetxlog.c:1174 #, c-format msgid " -l XLOGFILE force minimum WAL starting location for new transaction log\n" -msgstr " -l XLOGFILE wymusza minimalne położenie początkowe WAL dla nowego " -"komunikatu transakcji\n" +msgstr " -l XLOGFILE wymusza minimalne położenie początkowe WAL dla nowego komunikatu transakcji\n" -#: pg_resetxlog.c:1085 +#: pg_resetxlog.c:1175 #, c-format msgid " -m MXID,MXID set next and oldest multitransaction ID\n" -msgstr " -x XID,MXID ustawia ID następnej i najstarszej multitransakcji\n" +msgstr " -m XID,MXID ustawia ID następnej i najstarszej multitransakcji\n" -#: pg_resetxlog.c:1086 +#: pg_resetxlog.c:1176 #, c-format -#| msgid " -n no update, just show extracted control values (for testing)\n" msgid " -n no update, just show what would be done (for testing)\n" -msgstr " -n bez modyfikacji, po prostu wyświetl co będzie zrobione " -"(do testowania)\n" +msgstr " -n bez modyfikacji, po prostu wyświetl co będzie zrobione (do testowania)\n" -#: pg_resetxlog.c:1087 +#: pg_resetxlog.c:1177 #, c-format msgid " -o OID set next OID\n" msgstr " -o OID ustawia następny OID\n" -#: pg_resetxlog.c:1088 +#: pg_resetxlog.c:1178 #, c-format msgid " -O OFFSET set next multitransaction offset\n" msgstr " -O OFFSET ustawia następny offset multitransakcji\n" -#: pg_resetxlog.c:1089 +#: pg_resetxlog.c:1179 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version wypisuje informacje o wersji i kończy\n" -#: pg_resetxlog.c:1090 +#: pg_resetxlog.c:1180 #, c-format msgid " -x XID set next transaction ID\n" msgstr " -x XID ustawia ID następnej transakcji\n" -#: pg_resetxlog.c:1091 +#: pg_resetxlog.c:1181 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help pokazuje ten ekran pomocy i kończy\n" -#: pg_resetxlog.c:1092 +#: pg_resetxlog.c:1182 #, c-format msgid "" "\n" @@ -561,8 +611,23 @@ msgstr "" "\n" "Błędy proszę przesyłać na adres .\n" +#~ msgid "First log file ID after reset: %u\n" +#~ msgstr "Pierwszy plik dziennika po resecie: %u\n" + #~ msgid "%s: could not read from directory \"%s\": %s\n" #~ msgstr "%s: nie można odczytać katalogu \"%s\": %s\n" -#~ msgid "First log file ID after reset: %u\n" -#~ msgstr "Pierwszy plik dziennika po resecie: %u\n" +#~ msgid "%s: invalid argument for option -l\n" +#~ msgstr "%s: niepoprawny argument dla opcji -l\n" + +#~ msgid "%s: invalid argument for option -O\n" +#~ msgstr "%s: niepoprawny argument dla opcji -O\n" + +#~ msgid "%s: invalid argument for option -m\n" +#~ msgstr "%s: niepoprawny argument dla opcji -m\n" + +#~ msgid "%s: invalid argument for option -o\n" +#~ msgstr "%s: niepoprawny argument dla opcji -o\n" + +#~ msgid "%s: invalid argument for option -x\n" +#~ msgstr "%s: niepoprawny argument dla opcji -x\n" diff --git a/src/bin/pg_resetxlog/po/pt_BR.po b/src/bin/pg_resetxlog/po/pt_BR.po index 038cb3ecbda7a..c8b465b6a3835 100644 --- a/src/bin/pg_resetxlog/po/pt_BR.po +++ b/src/bin/pg_resetxlog/po/pt_BR.po @@ -3,13 +3,13 @@ # This file is distributed under the same license as the PostgreSQL package. # Cesar Suga , 2002. # Roberto Mello , 2002. -# Euler Taveira de Oliveira , 2003-2014. +# Euler Taveira de Oliveira , 2003-2015. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-09-14 23:09-0300\n" +"POT-Creation-Date: 2015-10-04 16:26-0300\n" "PO-Revision-Date: 2005-10-04 22:55-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -18,99 +18,122 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: pg_resetxlog.c:130 +#: ../../common/restricted_token.c:68 #, c-format -msgid "%s: invalid argument for option -e\n" -msgstr "%s: argumento inválido para opção -e\n" +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: AVISO: não pode criar informações restritas nessa plataforma\n" -#: pg_resetxlog.c:131 pg_resetxlog.c:146 pg_resetxlog.c:161 pg_resetxlog.c:176 -#: pg_resetxlog.c:184 pg_resetxlog.c:210 pg_resetxlog.c:224 pg_resetxlog.c:231 -#: pg_resetxlog.c:239 +#: ../../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: não pôde abrir informação sobre processo: código de erro %lu\n" + +#: ../../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: não pôde alocar SIDs: código de erro %lu\n" + +#: ../../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: não pôde criar informação restrita: código de erro %lu\n" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: não pôde iniciar processo para comando \"%s\": código de erro %lu\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: não pôde executar novamente com informação restrita: código de erro %lu\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: não pôde obter código de saída de subprocesso: código de erro %lu\n" + +#. translator: the second %s is a command line argument (-e, etc) +#: pg_resetxlog.c:140 pg_resetxlog.c:155 pg_resetxlog.c:170 pg_resetxlog.c:177 +#: pg_resetxlog.c:201 pg_resetxlog.c:216 pg_resetxlog.c:224 pg_resetxlog.c:250 +#: pg_resetxlog.c:264 +#, c-format +msgid "%s: invalid argument for option %s\n" +msgstr "%s: argumento inválido para opção %s\n" + +#: pg_resetxlog.c:141 pg_resetxlog.c:156 pg_resetxlog.c:171 pg_resetxlog.c:178 +#: pg_resetxlog.c:202 pg_resetxlog.c:217 pg_resetxlog.c:225 pg_resetxlog.c:251 +#: pg_resetxlog.c:265 pg_resetxlog.c:272 pg_resetxlog.c:285 pg_resetxlog.c:293 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Tente \"%s --help\" para obter informações adicionais.\n" -#: pg_resetxlog.c:136 +#: pg_resetxlog.c:146 #, c-format msgid "%s: transaction ID epoch (-e) must not be -1\n" msgstr "%s: época do ID da transação (-e) não deve ser -1\n" -#: pg_resetxlog.c:145 -#, c-format -msgid "%s: invalid argument for option -x\n" -msgstr "%s: argumento inválido para opção -x\n" - -#: pg_resetxlog.c:151 +#: pg_resetxlog.c:161 #, c-format msgid "%s: transaction ID (-x) must not be 0\n" msgstr "%s: ID da transação (-x) não deve ser 0\n" -#: pg_resetxlog.c:160 +#: pg_resetxlog.c:185 pg_resetxlog.c:192 #, c-format -msgid "%s: invalid argument for option -o\n" -msgstr "%s: argumento inválido para opção -o\n" +msgid "%s: transaction ID (-c) must be either 0 or greater than or equal to 2\n" +msgstr "%s: ID de transação (-c) deve ser 0 ou maior ou igual a 2\n" -#: pg_resetxlog.c:166 +#: pg_resetxlog.c:207 #, c-format msgid "%s: OID (-o) must not be 0\n" msgstr "%s: OID (-o) não deve ser 0\n" -#: pg_resetxlog.c:175 pg_resetxlog.c:183 -#, c-format -msgid "%s: invalid argument for option -m\n" -msgstr "%s: argumento inválido para opção -m\n" - -#: pg_resetxlog.c:189 +#: pg_resetxlog.c:230 #, c-format msgid "%s: multitransaction ID (-m) must not be 0\n" msgstr "%s: ID de transação múltipla (-m) não deve ser 0\n" -#: pg_resetxlog.c:199 +#: pg_resetxlog.c:240 #, c-format msgid "%s: oldest multitransaction ID (-m) must not be 0\n" msgstr "%s: ID de transação múltipla mais velho (-m) não deve ser 0\n" -#: pg_resetxlog.c:209 -#, c-format -msgid "%s: invalid argument for option -O\n" -msgstr "%s: argumento inválido para opção -O\n" - -#: pg_resetxlog.c:215 +#: pg_resetxlog.c:256 #, c-format msgid "%s: multitransaction offset (-O) must not be -1\n" msgstr "%s: deslocamento da transação múltipla (-O) não deve ser -1\n" -#: pg_resetxlog.c:223 +#: pg_resetxlog.c:283 #, c-format -msgid "%s: invalid argument for option -l\n" -msgstr "%s: argumento inválido para opção -l\n" +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: muitos argumentos de linha de comando (primeiro é \"%s\")\n" -#: pg_resetxlog.c:238 +#: pg_resetxlog.c:292 #, c-format msgid "%s: no data directory specified\n" msgstr "%s: nenhum diretório de dados foi especificado\n" -#: pg_resetxlog.c:252 +#: pg_resetxlog.c:306 #, c-format msgid "%s: cannot be executed by \"root\"\n" msgstr "%s: não pode ser executado pelo \"root\"\n" -#: pg_resetxlog.c:254 +#: pg_resetxlog.c:308 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "Você deve executar %s como um super-usuário do PostgreSQL.\n" -#: pg_resetxlog.c:264 +#: pg_resetxlog.c:318 #, c-format msgid "%s: could not change directory to \"%s\": %s\n" msgstr "%s: não pôde mudar diretório para \"%s\": %s\n" -#: pg_resetxlog.c:277 pg_resetxlog.c:418 +#: pg_resetxlog.c:331 pg_resetxlog.c:477 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: não pôde abrir arquivo \"%s\" para leitura: %s\n" -#: pg_resetxlog.c:284 +#: pg_resetxlog.c:338 #, c-format msgid "" "%s: lock file \"%s\" exists\n" @@ -119,7 +142,7 @@ msgstr "" "%s: arquivo de bloqueio \"%s\" existe\n" "O servidor está executando? Se não, apague o arquivo de bloqueio e tente novamente.\n" -#: pg_resetxlog.c:366 +#: pg_resetxlog.c:425 #, c-format msgid "" "\n" @@ -128,7 +151,7 @@ msgstr "" "\n" "Se estes valores lhe parecem aceitáveis, use -f para forçar o reinício.\n" -#: pg_resetxlog.c:378 +#: pg_resetxlog.c:437 #, c-format msgid "" "The database server was not shut down cleanly.\n" @@ -139,12 +162,12 @@ msgstr "" "Reiniciar o log de transação pode causar perda de dados.\n" "Se você quer continuar mesmo assim, use -f para forçar o reinício.\n" -#: pg_resetxlog.c:392 +#: pg_resetxlog.c:451 #, c-format msgid "Transaction log reset\n" msgstr "Log de transação reiniciado\n" -#: pg_resetxlog.c:421 +#: pg_resetxlog.c:480 #, c-format msgid "" "If you are sure the data directory path is correct, execute\n" @@ -155,22 +178,22 @@ msgstr "" " touch %s\n" "e tente novamente.\n" -#: pg_resetxlog.c:434 +#: pg_resetxlog.c:493 #, c-format msgid "%s: could not read file \"%s\": %s\n" msgstr "%s: não pôde ler arquivo \"%s\": %s\n" -#: pg_resetxlog.c:457 +#: pg_resetxlog.c:516 #, c-format msgid "%s: pg_control exists but has invalid CRC; proceed with caution\n" msgstr "%s: pg_control existe mas tem CRC inválido: prossiga com cuidado\n" -#: pg_resetxlog.c:466 +#: pg_resetxlog.c:525 #, c-format msgid "%s: pg_control exists but is broken or unknown version; ignoring it\n" msgstr "%s: pg_control existe mas não funciona ou sua versão é desconhecida; ignorando-o\n" -#: pg_resetxlog.c:568 +#: pg_resetxlog.c:628 #, c-format msgid "" "Guessed pg_control values:\n" @@ -179,7 +202,7 @@ msgstr "" "Valores supostos do pg_control:\n" "\n" -#: pg_resetxlog.c:570 +#: pg_resetxlog.c:630 #, c-format msgid "" "Current pg_control values:\n" @@ -188,166 +211,176 @@ msgstr "" "Valores atuais do pg_control:\n" "\n" -#: pg_resetxlog.c:579 +#: pg_resetxlog.c:639 #, c-format msgid "pg_control version number: %u\n" msgstr "número da versão do pg_control: %u\n" -#: pg_resetxlog.c:581 +#: pg_resetxlog.c:641 #, c-format msgid "Catalog version number: %u\n" msgstr "Número da versão do catálogo: %u\n" -#: pg_resetxlog.c:583 +#: pg_resetxlog.c:643 #, c-format msgid "Database system identifier: %s\n" msgstr "Identificador do sistema de banco de dados: %s\n" -#: pg_resetxlog.c:585 +#: pg_resetxlog.c:645 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "TimeLineID do último ponto de controle: %u\n" -#: pg_resetxlog.c:587 +#: pg_resetxlog.c:647 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "full_page_writes do último ponto de controle: %s\n" -#: pg_resetxlog.c:588 +#: pg_resetxlog.c:648 msgid "off" msgstr "desabilitado" -#: pg_resetxlog.c:588 +#: pg_resetxlog.c:648 msgid "on" msgstr "habilitado" -#: pg_resetxlog.c:589 +#: pg_resetxlog.c:649 #, c-format msgid "Latest checkpoint's NextXID: %u/%u\n" msgstr "NextXID do último ponto de controle: %u/%u\n" -#: pg_resetxlog.c:592 +#: pg_resetxlog.c:652 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID do último ponto de controle: %u\n" -#: pg_resetxlog.c:594 +#: pg_resetxlog.c:654 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId do último ponto de controle: %u\n" -#: pg_resetxlog.c:596 +#: pg_resetxlog.c:656 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset do último ponto de controle: %u\n" -#: pg_resetxlog.c:598 +#: pg_resetxlog.c:658 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID do último ponto de controle: %u\n" -#: pg_resetxlog.c:600 +#: pg_resetxlog.c:660 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "BD do oldestXID do último ponto de controle: %u\n" -#: pg_resetxlog.c:602 +#: pg_resetxlog.c:662 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID do último ponto de controle: %u\n" -#: pg_resetxlog.c:604 +#: pg_resetxlog.c:664 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid do último ponto de controle: %u\n" -#: pg_resetxlog.c:606 +#: pg_resetxlog.c:666 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "BD do oldestMulti do último ponto de controle: %u\n" -#: pg_resetxlog.c:608 +#: pg_resetxlog.c:668 +#, c-format +msgid "Latest checkpoint's oldestCommitTs: %u\n" +msgstr "oldestCommitTs do último ponto de controle: %u\n" + +#: pg_resetxlog.c:670 +#, c-format +msgid "Latest checkpoint's newestCommitTs: %u\n" +msgstr "newestCommitTs do último ponto de controle: %u\n" + +#: pg_resetxlog.c:672 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Máximo alinhamento de dado: %u\n" -#: pg_resetxlog.c:611 +#: pg_resetxlog.c:675 #, c-format msgid "Database block size: %u\n" msgstr "Tamanho do bloco do banco de dados: %u\n" -#: pg_resetxlog.c:613 +#: pg_resetxlog.c:677 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Blocos por segmento da relação grande: %u\n" -#: pg_resetxlog.c:615 +#: pg_resetxlog.c:679 #, c-format msgid "WAL block size: %u\n" msgstr "Tamanho do bloco do WAL: %u\n" -#: pg_resetxlog.c:617 +#: pg_resetxlog.c:681 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Bytes por segmento do WAL: %u\n" -#: pg_resetxlog.c:619 +#: pg_resetxlog.c:683 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Tamanho máximo de identificadores: %u\n" -#: pg_resetxlog.c:621 +#: pg_resetxlog.c:685 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Máximo de colunas em um índice: %u\n" -#: pg_resetxlog.c:623 +#: pg_resetxlog.c:687 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Tamanho máximo do bloco TOAST: %u\n" -#: pg_resetxlog.c:625 +#: pg_resetxlog.c:689 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Tamanho do bloco de um objeto grande: %u\n" -#: pg_resetxlog.c:627 +#: pg_resetxlog.c:691 #, c-format msgid "Date/time type storage: %s\n" msgstr "Tipo de data/hora do repositório: %s\n" -#: pg_resetxlog.c:628 +#: pg_resetxlog.c:692 msgid "64-bit integers" msgstr "inteiros de 64 bits" -#: pg_resetxlog.c:628 +#: pg_resetxlog.c:692 msgid "floating-point numbers" msgstr "números de ponto flutuante" -#: pg_resetxlog.c:629 +#: pg_resetxlog.c:693 #, c-format msgid "Float4 argument passing: %s\n" msgstr "Passagem de argumento float4: %s\n" -#: pg_resetxlog.c:630 pg_resetxlog.c:632 +#: pg_resetxlog.c:694 pg_resetxlog.c:696 msgid "by reference" msgstr "por referência" -#: pg_resetxlog.c:630 pg_resetxlog.c:632 +#: pg_resetxlog.c:694 pg_resetxlog.c:696 msgid "by value" msgstr "por valor" -#: pg_resetxlog.c:631 +#: pg_resetxlog.c:695 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Passagem de argumento float8: %s\n" -#: pg_resetxlog.c:633 +#: pg_resetxlog.c:697 #, c-format msgid "Data page checksum version: %u\n" msgstr "Versão da verificação de páginas de dados: %u\n" -#: pg_resetxlog.c:647 +#: pg_resetxlog.c:711 #, c-format msgid "" "\n" @@ -360,107 +393,117 @@ msgstr "" "Valores a serem alterados:\n" "\n" -#: pg_resetxlog.c:650 +#: pg_resetxlog.c:714 #, c-format msgid "First log segment after reset: %s\n" msgstr "Primeiro segmento do arquivo de log após reinício: %s\n" -#: pg_resetxlog.c:654 +#: pg_resetxlog.c:718 #, c-format msgid "NextMultiXactId: %u\n" msgstr "NextMultiXactId: %u\n" -#: pg_resetxlog.c:656 +#: pg_resetxlog.c:720 #, c-format msgid "OldestMultiXid: %u\n" msgstr "OldestMultiXid: %u\n" -#: pg_resetxlog.c:658 +#: pg_resetxlog.c:722 #, c-format msgid "OldestMulti's DB: %u\n" msgstr "BD do OldestMulti: %u\n" -#: pg_resetxlog.c:664 +#: pg_resetxlog.c:728 #, c-format msgid "NextMultiOffset: %u\n" msgstr "NextMultiOffset: %u\n" -#: pg_resetxlog.c:670 +#: pg_resetxlog.c:734 #, c-format msgid "NextOID: %u\n" msgstr "NextOID: %u\n" -#: pg_resetxlog.c:676 +#: pg_resetxlog.c:740 #, c-format msgid "NextXID: %u\n" msgstr "NextXID: %u\n" -#: pg_resetxlog.c:678 +#: pg_resetxlog.c:742 #, c-format msgid "OldestXID: %u\n" msgstr "OldestXID: %u\n" -#: pg_resetxlog.c:680 +#: pg_resetxlog.c:744 #, c-format msgid "OldestXID's DB: %u\n" msgstr "BD do OldestXID: %u\n" -#: pg_resetxlog.c:686 +#: pg_resetxlog.c:750 #, c-format msgid "NextXID epoch: %u\n" msgstr "época do NextXID: %u\n" -#: pg_resetxlog.c:751 +#: pg_resetxlog.c:756 +#, c-format +msgid "oldestCommitTs: %u\n" +msgstr "oldestCommitTs: %u\n" + +#: pg_resetxlog.c:761 +#, c-format +msgid "newestCommitTs: %u\n" +msgstr "newestCommitTs: %u\n" + +#: pg_resetxlog.c:827 #, c-format msgid "%s: internal error -- sizeof(ControlFileData) is too large ... fix PG_CONTROL_SIZE\n" msgstr "%s: erro interno -- sizeof(ControlFileData) é muito grande ... conserte o PG_CONTROL_SIZE\n" -#: pg_resetxlog.c:766 +#: pg_resetxlog.c:842 #, c-format msgid "%s: could not create pg_control file: %s\n" msgstr "%s: não pôde criar arquivo do pg_control: %s\n" -#: pg_resetxlog.c:777 +#: pg_resetxlog.c:853 #, c-format msgid "%s: could not write pg_control file: %s\n" msgstr "%s: não pôde escrever no arquivo do pg_control: %s\n" -#: pg_resetxlog.c:784 pg_resetxlog.c:1068 +#: pg_resetxlog.c:860 pg_resetxlog.c:1156 #, c-format msgid "%s: fsync error: %s\n" msgstr "%s: erro ao executar fsync: %s\n" -#: pg_resetxlog.c:824 pg_resetxlog.c:890 pg_resetxlog.c:941 +#: pg_resetxlog.c:900 pg_resetxlog.c:971 pg_resetxlog.c:1022 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: não pôde abrir diretório \"%s\": %s\n" -#: pg_resetxlog.c:855 pg_resetxlog.c:912 pg_resetxlog.c:964 +#: pg_resetxlog.c:936 pg_resetxlog.c:993 pg_resetxlog.c:1047 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: não pôde ler diretório \"%s\": %s\n" -#: pg_resetxlog.c:862 pg_resetxlog.c:919 pg_resetxlog.c:971 +#: pg_resetxlog.c:943 pg_resetxlog.c:1000 pg_resetxlog.c:1054 #, c-format msgid "%s: could not close directory \"%s\": %s\n" msgstr "%s: não pôde fechar diretório \"%s\": %s\n" -#: pg_resetxlog.c:903 pg_resetxlog.c:955 +#: pg_resetxlog.c:984 pg_resetxlog.c:1038 #, c-format msgid "%s: could not delete file \"%s\": %s\n" msgstr "%s: não pôde apagar arquivo \"%s\": %s\n" -#: pg_resetxlog.c:1035 +#: pg_resetxlog.c:1123 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: não pôde abrir arquivo \"%s\": %s\n" -#: pg_resetxlog.c:1046 pg_resetxlog.c:1060 +#: pg_resetxlog.c:1134 pg_resetxlog.c:1148 #, c-format msgid "%s: could not write file \"%s\": %s\n" msgstr "%s: não pôde escrever no arquivo \"%s\": %s\n" -#: pg_resetxlog.c:1079 +#: pg_resetxlog.c:1167 #, c-format msgid "" "%s resets the PostgreSQL transaction log.\n" @@ -469,7 +512,7 @@ msgstr "" "%s reinicia o log de transação do PostgreSQL.\n" "\n" -#: pg_resetxlog.c:1080 +#: pg_resetxlog.c:1168 #, c-format msgid "" "Usage:\n" @@ -477,65 +520,80 @@ msgid "" "\n" msgstr "" "Uso:\n" -" %s [OPÇÃO] DIRDADOS\n" +" %s [OPÇÃO]... DIRDADOS\n" "\n" -#: pg_resetxlog.c:1081 +#: pg_resetxlog.c:1169 #, c-format msgid "Options:\n" msgstr "Opções:\n" -#: pg_resetxlog.c:1082 +#: pg_resetxlog.c:1170 +#, c-format +msgid " -c XID,XID set oldest and newest transactions bearing commit timestamp\n" +msgstr " -c XID,XID define transações mais velha e mais nova contendo timestamp de efetivação\n" + +#: pg_resetxlog.c:1171 +#, c-format +msgid " (zero in either value means no change)\n" +msgstr " (zero em qualquer valor significa nenhuma mudança)\n" + +#: pg_resetxlog.c:1172 +#, c-format +msgid " [-D] DATADIR data directory\n" +msgstr " [-D] DIRDADOS diretório de dados\n" + +#: pg_resetxlog.c:1173 #, c-format msgid " -e XIDEPOCH set next transaction ID epoch\n" msgstr " -e ÉPOCA_XID define próxima época do ID de transação\n" -#: pg_resetxlog.c:1083 +#: pg_resetxlog.c:1174 #, c-format msgid " -f force update to be done\n" msgstr " -f força atualização ser feita\n" -#: pg_resetxlog.c:1084 +#: pg_resetxlog.c:1175 #, c-format msgid " -l XLOGFILE force minimum WAL starting location for new transaction log\n" msgstr " -l XLOGFILE força local inicial mínimo do WAL para novo log de transação\n" -#: pg_resetxlog.c:1085 +#: pg_resetxlog.c:1176 #, c-format msgid " -m MXID,MXID set next and oldest multitransaction ID\n" msgstr " -m MXID,MXID define próximo e mais velho ID de transação múltipla\n" -#: pg_resetxlog.c:1086 +#: pg_resetxlog.c:1177 #, c-format msgid " -n no update, just show what would be done (for testing)\n" msgstr " -n sem atualização, mostra o que seria feito (para teste)\n" -#: pg_resetxlog.c:1087 +#: pg_resetxlog.c:1178 #, c-format msgid " -o OID set next OID\n" msgstr " -o OID define próximo OID\n" -#: pg_resetxlog.c:1088 +#: pg_resetxlog.c:1179 #, c-format msgid " -O OFFSET set next multitransaction offset\n" msgstr " -O OFFSET define próxima posição de transação múltipla\n" -#: pg_resetxlog.c:1089 +#: pg_resetxlog.c:1180 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informação sobre a versão e termina\n" -#: pg_resetxlog.c:1090 +#: pg_resetxlog.c:1181 #, c-format msgid " -x XID set next transaction ID\n" msgstr " -x XID define próximo ID de transação\n" -#: pg_resetxlog.c:1091 +#: pg_resetxlog.c:1182 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra essa ajuda e termina\n" -#: pg_resetxlog.c:1092 +#: pg_resetxlog.c:1183 #, c-format msgid "" "\n" diff --git a/src/bin/pg_resetxlog/po/ru.po b/src/bin/pg_resetxlog/po/ru.po index 387ca27b6ddd3..66d481e433673 100644 --- a/src/bin/pg_resetxlog/po/ru.po +++ b/src/bin/pg_resetxlog/po/ru.po @@ -29,8 +29,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9 current\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-08-19 10:12+0000\n" -"PO-Revision-Date: 2014-08-24 08:37+0400\n" +"POT-Creation-Date: 2015-07-22 00:13+0000\n" +"PO-Revision-Date: 2015-07-27 16:10+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -41,99 +41,125 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Lokalize 1.5\n" -#: pg_resetxlog.c:130 +#: ../../common/restricted_token.c:68 #, c-format -msgid "%s: invalid argument for option -e\n" -msgstr "%s: недопустимый аргумент параметра -e\n" +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: ПРЕДУПРЕЖДЕНИЕ: в этой ОС нельзя создавать ограниченные маркеры\n" -#: pg_resetxlog.c:131 pg_resetxlog.c:146 pg_resetxlog.c:161 pg_resetxlog.c:176 -#: pg_resetxlog.c:184 pg_resetxlog.c:210 pg_resetxlog.c:224 pg_resetxlog.c:231 -#: pg_resetxlog.c:239 +#: ../../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: не удалось открыть маркер процесса (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: не удалось подготовить структуры SID (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: не удалось создать ограниченный маркер (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "" +"%s: не удалось запустить процесс для команды \"%s\" (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "" +"%s: не удалось перезапуститься с ограниченным маркером (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: не удалось получить код выхода от подпроцесса (код ошибки: %lu)\n" + +#. translator: the second %s is a command line argument (-e, etc) +#: pg_resetxlog.c:142 pg_resetxlog.c:157 pg_resetxlog.c:172 pg_resetxlog.c:179 +#: pg_resetxlog.c:203 pg_resetxlog.c:218 pg_resetxlog.c:226 pg_resetxlog.c:252 +#: pg_resetxlog.c:266 +#, c-format +msgid "%s: invalid argument for option %s\n" +msgstr "%s: недопустимый аргумент параметра %s\n" + +#: pg_resetxlog.c:143 pg_resetxlog.c:158 pg_resetxlog.c:173 pg_resetxlog.c:180 +#: pg_resetxlog.c:204 pg_resetxlog.c:219 pg_resetxlog.c:227 pg_resetxlog.c:253 +#: pg_resetxlog.c:267 pg_resetxlog.c:274 pg_resetxlog.c:287 pg_resetxlog.c:295 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_resetxlog.c:136 +#: pg_resetxlog.c:148 #, c-format msgid "%s: transaction ID epoch (-e) must not be -1\n" msgstr "%s: эпоха ID транзакции (-e) не должна быть равна -1\n" -#: pg_resetxlog.c:145 -#, c-format -msgid "%s: invalid argument for option -x\n" -msgstr "%s: недопустимый аргумент параметра -x\n" - -#: pg_resetxlog.c:151 +#: pg_resetxlog.c:163 #, c-format msgid "%s: transaction ID (-x) must not be 0\n" msgstr "%s: ID транзакции (-x) не должен быть равен 0\n" -#: pg_resetxlog.c:160 +#: pg_resetxlog.c:187 pg_resetxlog.c:194 #, c-format -msgid "%s: invalid argument for option -o\n" -msgstr "%s: недопустимый аргумент параметра -o\n" +msgid "" +"%s: transaction ID (-c) must be either 0 or greater than or equal to 2\n" +msgstr "%s: ID транзакции (-c) должен быть равен 0, либо больше или равен 2\n" -#: pg_resetxlog.c:166 +#: pg_resetxlog.c:209 #, c-format msgid "%s: OID (-o) must not be 0\n" msgstr "%s: OID (-o) не должен быть равен 0\n" -#: pg_resetxlog.c:175 pg_resetxlog.c:183 -#, c-format -msgid "%s: invalid argument for option -m\n" -msgstr "%s: недопустимый аргумент параметра -m\n" - -#: pg_resetxlog.c:189 +#: pg_resetxlog.c:232 #, c-format msgid "%s: multitransaction ID (-m) must not be 0\n" msgstr "%s: ID мультитранзакции (-m) не должен быть равен 0\n" -#: pg_resetxlog.c:199 +#: pg_resetxlog.c:242 #, c-format msgid "%s: oldest multitransaction ID (-m) must not be 0\n" msgstr "%s: ID старейшей мультитранзакции (-m) не должен быть равен 0\n" -#: pg_resetxlog.c:209 -#, c-format -msgid "%s: invalid argument for option -O\n" -msgstr "%s: недопустимый аргумент параметра -O\n" - -#: pg_resetxlog.c:215 +#: pg_resetxlog.c:258 #, c-format msgid "%s: multitransaction offset (-O) must not be -1\n" msgstr "%s: смещение мультитранзакции (-O) не должно быть равно -1\n" -#: pg_resetxlog.c:223 +#: pg_resetxlog.c:285 #, c-format -msgid "%s: invalid argument for option -l\n" -msgstr "%s: недопустимый аргумент параметра -l\n" +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: слишком много аргументов командной строки (первый: \"%s\")\n" -#: pg_resetxlog.c:238 +#: pg_resetxlog.c:294 #, c-format msgid "%s: no data directory specified\n" msgstr "%s: каталог данных не указан\n" -#: pg_resetxlog.c:252 +#: pg_resetxlog.c:308 #, c-format msgid "%s: cannot be executed by \"root\"\n" msgstr "%s: программу не должен запускать root\n" -#: pg_resetxlog.c:254 +#: pg_resetxlog.c:310 #, c-format msgid "You must run %s as the PostgreSQL superuser.\n" msgstr "Запускать %s нужно от имени суперпользователя PostgreSQL.\n" -#: pg_resetxlog.c:264 +#: pg_resetxlog.c:320 #, c-format msgid "%s: could not change directory to \"%s\": %s\n" msgstr "%s: не удалось перейти в каталог \"%s\": %s\n" -#: pg_resetxlog.c:277 pg_resetxlog.c:418 +#: pg_resetxlog.c:333 pg_resetxlog.c:479 #, c-format msgid "%s: could not open file \"%s\" for reading: %s\n" msgstr "%s: не удалось открыть файл \"%s\" для чтения: %s\n" -#: pg_resetxlog.c:284 +#: pg_resetxlog.c:340 #, c-format msgid "" "%s: lock file \"%s\" exists\n" @@ -142,7 +168,7 @@ msgstr "" "%s: обнаружен файл блокировки \"%s\"\n" "Возможно, сервер запущен? Если нет, удалите этот файл и попробуйте снова.\n" -#: pg_resetxlog.c:366 +#: pg_resetxlog.c:427 #, c-format msgid "" "\n" @@ -152,7 +178,7 @@ msgstr "" "Если эти значения приемлемы, выполните сброс принудительно, добавив ключ -" "f.\n" -#: pg_resetxlog.c:378 +#: pg_resetxlog.c:439 #, c-format msgid "" "The database server was not shut down cleanly.\n" @@ -163,12 +189,12 @@ msgstr "" "Сброс журнала транзакций может привести к потере данных.\n" "Если вы хотите сбросить его, несмотря на это, добавьте ключ -f.\n" -#: pg_resetxlog.c:392 +#: pg_resetxlog.c:453 #, c-format msgid "Transaction log reset\n" msgstr "Журнал транзакций сброшен\n" -#: pg_resetxlog.c:421 +#: pg_resetxlog.c:482 #, c-format msgid "" "If you are sure the data directory path is correct, execute\n" @@ -179,25 +205,25 @@ msgstr "" " touch %s\n" "и повторите попытку.\n" -#: pg_resetxlog.c:434 +#: pg_resetxlog.c:495 #, c-format msgid "%s: could not read file \"%s\": %s\n" msgstr "%s: не удалось прочитать файл \"%s\": %s\n" -#: pg_resetxlog.c:457 +#: pg_resetxlog.c:518 #, c-format msgid "%s: pg_control exists but has invalid CRC; proceed with caution\n" msgstr "" "%s: pg_control существует, но его контрольная сумма неверна; продолжайте с " "осторожностью\n" -#: pg_resetxlog.c:466 +#: pg_resetxlog.c:527 #, c-format msgid "%s: pg_control exists but is broken or unknown version; ignoring it\n" msgstr "" "%s: pg_control испорчен или имеет неизвестную версию; игнорируется...\n" -#: pg_resetxlog.c:568 +#: pg_resetxlog.c:630 #, c-format msgid "" "Guessed pg_control values:\n" @@ -206,7 +232,7 @@ msgstr "" "Предполагаемые значения pg_control:\n" "\n" -#: pg_resetxlog.c:570 +#: pg_resetxlog.c:632 #, c-format msgid "" "Current pg_control values:\n" @@ -215,166 +241,176 @@ msgstr "" "Текущие значения pg_control:\n" "\n" -#: pg_resetxlog.c:579 +#: pg_resetxlog.c:641 #, c-format msgid "pg_control version number: %u\n" msgstr "Номер версии pg_control: %u\n" -#: pg_resetxlog.c:581 +#: pg_resetxlog.c:643 #, c-format msgid "Catalog version number: %u\n" msgstr "Номер версии каталога: %u\n" -#: pg_resetxlog.c:583 +#: pg_resetxlog.c:645 #, c-format msgid "Database system identifier: %s\n" msgstr "Идентификатор системы баз данных: %s\n" -#: pg_resetxlog.c:585 +#: pg_resetxlog.c:647 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "Линия времени последней конт. точки: %u\n" -#: pg_resetxlog.c:587 +#: pg_resetxlog.c:649 #, c-format msgid "Latest checkpoint's full_page_writes: %s\n" msgstr "Режим full_page_writes последней к.т: %s\n" -#: pg_resetxlog.c:588 +#: pg_resetxlog.c:650 msgid "off" msgstr "выкл." -#: pg_resetxlog.c:588 +#: pg_resetxlog.c:650 msgid "on" msgstr "вкл." -#: pg_resetxlog.c:589 +#: pg_resetxlog.c:651 #, c-format msgid "Latest checkpoint's NextXID: %u/%u\n" msgstr "NextXID последней конт. точки: %u/%u\n" -#: pg_resetxlog.c:592 +#: pg_resetxlog.c:654 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID последней конт. точки: %u\n" -#: pg_resetxlog.c:594 +#: pg_resetxlog.c:656 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId послед. конт. точки: %u\n" -#: pg_resetxlog.c:596 +#: pg_resetxlog.c:658 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset послед. конт. точки: %u\n" -#: pg_resetxlog.c:598 +#: pg_resetxlog.c:660 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID последней конт. точки: %u\n" -#: pg_resetxlog.c:600 +#: pg_resetxlog.c:662 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "БД с oldestXID последней конт. точки: %u\n" -#: pg_resetxlog.c:602 +#: pg_resetxlog.c:664 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID последней к.т.: %u\n" -#: pg_resetxlog.c:604 +#: pg_resetxlog.c:666 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid последней конт. точки: %u\n" -#: pg_resetxlog.c:606 +#: pg_resetxlog.c:668 #, c-format msgid "Latest checkpoint's oldestMulti's DB: %u\n" msgstr "БД с oldestMulti последней к.т.: %u\n" -#: pg_resetxlog.c:608 +#: pg_resetxlog.c:670 +#, c-format +msgid "Latest checkpoint's oldest CommitTs: %u\n" +msgstr "Старейший CommitTs последней к.т.: %u\n" + +#: pg_resetxlog.c:672 +#, c-format +msgid "Latest checkpoint's newest CommitTs: %u\n" +msgstr "Новейший CommitTs последней к.т.: %u\n" + +#: pg_resetxlog.c:674 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Макс. предел выравнивания данных: %u\n" -#: pg_resetxlog.c:611 +#: pg_resetxlog.c:677 #, c-format msgid "Database block size: %u\n" msgstr "Размер блока БД: %u\n" -#: pg_resetxlog.c:613 +#: pg_resetxlog.c:679 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Блоков в макс. сегменте отношений: %u\n" -#: pg_resetxlog.c:615 +#: pg_resetxlog.c:681 #, c-format msgid "WAL block size: %u\n" msgstr "Размер блока WAL: %u\n" -#: pg_resetxlog.c:617 +#: pg_resetxlog.c:683 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Байт в сегменте WAL: %u\n" -#: pg_resetxlog.c:619 +#: pg_resetxlog.c:685 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Максимальная длина идентификаторов: %u\n" -#: pg_resetxlog.c:621 +#: pg_resetxlog.c:687 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Максимальное число колонок в индексе: %u\n" -#: pg_resetxlog.c:623 +#: pg_resetxlog.c:689 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Максимальный размер порции TOAST: %u\n" -#: pg_resetxlog.c:625 +#: pg_resetxlog.c:691 #, c-format msgid "Size of a large-object chunk: %u\n" -msgstr "Размер порции большого объекта: %u\n" +msgstr "Размер порции большого объекта: %u\n" -#: pg_resetxlog.c:627 +#: pg_resetxlog.c:693 #, c-format msgid "Date/time type storage: %s\n" msgstr "Формат хранения даты/времени: %s\n" -#: pg_resetxlog.c:628 +#: pg_resetxlog.c:694 msgid "64-bit integers" msgstr "64-битные целые" -#: pg_resetxlog.c:628 +#: pg_resetxlog.c:694 msgid "floating-point numbers" msgstr "числа с плавающей точкой" -#: pg_resetxlog.c:629 +#: pg_resetxlog.c:695 #, c-format msgid "Float4 argument passing: %s\n" msgstr "Передача аргумента Float4: %s\n" -#: pg_resetxlog.c:630 pg_resetxlog.c:632 +#: pg_resetxlog.c:696 pg_resetxlog.c:698 msgid "by reference" msgstr "по ссылке" -#: pg_resetxlog.c:630 pg_resetxlog.c:632 +#: pg_resetxlog.c:696 pg_resetxlog.c:698 msgid "by value" msgstr "по значению" -#: pg_resetxlog.c:631 +#: pg_resetxlog.c:697 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Передача аргумента Float8: %s\n" -#: pg_resetxlog.c:633 +#: pg_resetxlog.c:699 #, c-format msgid "Data page checksum version: %u\n" msgstr "Версия контрольных сумм страниц: %u\n" -#: pg_resetxlog.c:647 +#: pg_resetxlog.c:713 #, c-format msgid "" "\n" @@ -387,57 +423,67 @@ msgstr "" "Значения, которые будут изменены:\n" "\n" -#: pg_resetxlog.c:650 +#: pg_resetxlog.c:716 #, c-format msgid "First log segment after reset: %s\n" msgstr "Первый сегмент журнала после сброса: %s\n" -#: pg_resetxlog.c:654 +#: pg_resetxlog.c:720 #, c-format msgid "NextMultiXactId: %u\n" msgstr "NextMultiXactId: %u\n" -#: pg_resetxlog.c:656 +#: pg_resetxlog.c:722 #, c-format msgid "OldestMultiXid: %u\n" msgstr "OldestMultiXid: %u\n" -#: pg_resetxlog.c:658 +#: pg_resetxlog.c:724 #, c-format msgid "OldestMulti's DB: %u\n" msgstr "БД с oldestMultiXid: %u\n" -#: pg_resetxlog.c:664 +#: pg_resetxlog.c:730 #, c-format msgid "NextMultiOffset: %u\n" msgstr "NextMultiOffset: %u\n" -#: pg_resetxlog.c:670 +#: pg_resetxlog.c:736 #, c-format msgid "NextOID: %u\n" msgstr "NextOID: %u\n" -#: pg_resetxlog.c:676 +#: pg_resetxlog.c:742 #, c-format msgid "NextXID: %u\n" msgstr "NextXID: %u\n" -#: pg_resetxlog.c:678 +#: pg_resetxlog.c:744 #, c-format msgid "OldestXID: %u\n" msgstr "OldestXID: %u\n" -#: pg_resetxlog.c:680 +#: pg_resetxlog.c:746 #, c-format msgid "OldestXID's DB: %u\n" msgstr "БД с oldestXID: %u\n" -#: pg_resetxlog.c:686 +#: pg_resetxlog.c:752 #, c-format msgid "NextXID epoch: %u\n" msgstr "Эпоха NextXID: %u\n" -#: pg_resetxlog.c:751 +#: pg_resetxlog.c:758 +#, c-format +msgid "oldestCommitTs: %u\n" +msgstr "oldestCommitTs: %u\n" + +#: pg_resetxlog.c:763 +#, c-format +msgid "newestCommitTs: %u\n" +msgstr "newestCommitTs: %u\n" + +#: pg_resetxlog.c:829 #, c-format msgid "" "%s: internal error -- sizeof(ControlFileData) is too large ... fix " @@ -446,52 +492,52 @@ msgstr "" "%s: внутренняя ошибка -- размер ControlFileData слишком велик -- исправьте " "PG_CONTROL_SIZE\n" -#: pg_resetxlog.c:766 +#: pg_resetxlog.c:844 #, c-format msgid "%s: could not create pg_control file: %s\n" msgstr "%s: не удалось создать файл pg_control: %s\n" -#: pg_resetxlog.c:777 +#: pg_resetxlog.c:855 #, c-format msgid "%s: could not write pg_control file: %s\n" msgstr "%s: не удалось записать файл pg_control: %s\n" -#: pg_resetxlog.c:784 pg_resetxlog.c:1068 +#: pg_resetxlog.c:862 pg_resetxlog.c:1158 #, c-format msgid "%s: fsync error: %s\n" msgstr "%s: ошибка синхронизации с ФС: %s\n" -#: pg_resetxlog.c:824 pg_resetxlog.c:890 pg_resetxlog.c:941 +#: pg_resetxlog.c:902 pg_resetxlog.c:973 pg_resetxlog.c:1024 #, c-format msgid "%s: could not open directory \"%s\": %s\n" msgstr "%s: не удалось открыть каталог \"%s\": %s\n" -#: pg_resetxlog.c:855 pg_resetxlog.c:912 pg_resetxlog.c:964 +#: pg_resetxlog.c:938 pg_resetxlog.c:995 pg_resetxlog.c:1049 #, c-format msgid "%s: could not read directory \"%s\": %s\n" msgstr "%s: не удалось прочитать каталог \"%s\": %s\n" -#: pg_resetxlog.c:862 pg_resetxlog.c:919 pg_resetxlog.c:971 +#: pg_resetxlog.c:945 pg_resetxlog.c:1002 pg_resetxlog.c:1056 #, c-format msgid "%s: could not close directory \"%s\": %s\n" msgstr "%s: не удалось закрыть каталог \"%s\": %s\n" -#: pg_resetxlog.c:903 pg_resetxlog.c:955 +#: pg_resetxlog.c:986 pg_resetxlog.c:1040 #, c-format msgid "%s: could not delete file \"%s\": %s\n" msgstr "%s: ошибка при удалении файла \"%s\": %s\n" -#: pg_resetxlog.c:1035 +#: pg_resetxlog.c:1125 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: не удалось открыть файл \"%s\": %s\n" -#: pg_resetxlog.c:1046 pg_resetxlog.c:1060 +#: pg_resetxlog.c:1136 pg_resetxlog.c:1150 #, c-format msgid "%s: could not write file \"%s\": %s\n" msgstr "%s: не удалось записать файл \"%s\": %s\n" -#: pg_resetxlog.c:1079 +#: pg_resetxlog.c:1169 #, c-format msgid "" "%s resets the PostgreSQL transaction log.\n" @@ -500,33 +546,47 @@ msgstr "" "%s сбрасывает журнал транзакций PostgreSQL.\n" "\n" -#: pg_resetxlog.c:1080 +#: pg_resetxlog.c:1170 #, c-format msgid "" "Usage:\n" -" %s [OPTION]... DATADIR\n" +" %s [OPTION]... {[-D] DATADIR}\n" "\n" msgstr "" -"Использование:\n" -" %s [ПАРАМЕТР]... КАТАЛОГ_ДАННЫХ\n" +"Usage:\n" +" %s [ПАРАМЕТР]... {[-D] КАТАЛОГ_ДАННЫХ}\n" "\n" -#: pg_resetxlog.c:1081 +#: pg_resetxlog.c:1171 #, c-format msgid "Options:\n" msgstr "Параметры:\n" -#: pg_resetxlog.c:1082 +#: pg_resetxlog.c:1172 +#, c-format +msgid "" +" -c XID,XID set oldest and newest transactions bearing commit " +"timestamp\n" +msgstr "" +" -c XID,XID задать старейшую и новейшую транзакции, несущие метку " +"времени фиксации\n" + +#: pg_resetxlog.c:1173 +#, c-format +msgid " (zero in either value means no change)\n" +msgstr " (0 в любом из аргументов игнорируется)\n" + +#: pg_resetxlog.c:1174 #, c-format msgid " -e XIDEPOCH set next transaction ID epoch\n" msgstr " -e XIDEPOCH задать эпоху в ID следующей транзакции\n" -#: pg_resetxlog.c:1083 +#: pg_resetxlog.c:1175 #, c-format msgid " -f force update to be done\n" msgstr " -f принудительное выполнение операции\n" -#: pg_resetxlog.c:1084 +#: pg_resetxlog.c:1176 #, c-format msgid "" " -l XLOGFILE force minimum WAL starting location for new transaction " @@ -535,12 +595,12 @@ msgstr "" " -l XLOGFILE задать минимальное начальное положение WAL для нового\n" " журнала транзакций\n" -#: pg_resetxlog.c:1085 +#: pg_resetxlog.c:1177 #, c-format msgid " -m MXID,MXID set next and oldest multitransaction ID\n" msgstr " -m MXID,MXID задать ID следующей и старейшей мультитранзакции\n" -#: pg_resetxlog.c:1086 +#: pg_resetxlog.c:1178 #, c-format msgid "" " -n no update, just show what would be done (for testing)\n" @@ -549,32 +609,32 @@ msgstr "" "их\n" " (для проверки)\n" -#: pg_resetxlog.c:1087 +#: pg_resetxlog.c:1179 #, c-format msgid " -o OID set next OID\n" msgstr " -o OID задать следующий OID\n" -#: pg_resetxlog.c:1088 +#: pg_resetxlog.c:1180 #, c-format msgid " -O OFFSET set next multitransaction offset\n" msgstr " -O СМЕЩЕНИЕ задать смещение следующей мультитранзакции\n" -#: pg_resetxlog.c:1089 +#: pg_resetxlog.c:1181 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_resetxlog.c:1090 +#: pg_resetxlog.c:1182 #, c-format msgid " -x XID set next transaction ID\n" msgstr " -x XID задать ID следующей транзакции\n" -#: pg_resetxlog.c:1091 +#: pg_resetxlog.c:1183 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_resetxlog.c:1092 +#: pg_resetxlog.c:1184 #, c-format msgid "" "\n" @@ -583,6 +643,21 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу .\n" +#~ msgid "%s: invalid argument for option -x\n" +#~ msgstr "%s: недопустимый аргумент параметра -x\n" + +#~ msgid "%s: invalid argument for option -o\n" +#~ msgstr "%s: недопустимый аргумент параметра -o\n" + +#~ msgid "%s: invalid argument for option -m\n" +#~ msgstr "%s: недопустимый аргумент параметра -m\n" + +#~ msgid "%s: invalid argument for option -O\n" +#~ msgstr "%s: недопустимый аргумент параметра -O\n" + +#~ msgid "%s: invalid argument for option -l\n" +#~ msgstr "%s: недопустимый аргумент параметра -l\n" + #~ msgid " -m XID,OLDEST set next multitransaction ID and oldest value\n" #~ msgstr "" #~ " -m XID,СТАРЕЙШАЯ задать ID следующей мультитранзакции и ID старейшей\n" diff --git a/src/bin/pg_rewind/.gitignore b/src/bin/pg_rewind/.gitignore index 9ade7efcce4e0..79ddca3eec901 100644 --- a/src/bin/pg_rewind/.gitignore +++ b/src/bin/pg_rewind/.gitignore @@ -4,4 +4,3 @@ # Generated by test suite /tmp_check/ -/regress_log/ diff --git a/src/bin/pg_rewind/Makefile b/src/bin/pg_rewind/Makefile index 7d607157e3883..92b5d20afa707 100644 --- a/src/bin/pg_rewind/Makefile +++ b/src/bin/pg_rewind/Makefile @@ -45,7 +45,7 @@ uninstall: clean distclean maintainer-clean: rm -f pg_rewind$(X) $(OBJS) xlogreader.c - rm -rf tmp_check regress_log + rm -rf tmp_check check: $(prove_check) diff --git a/src/bin/pg_rewind/RewindTest.pm b/src/bin/pg_rewind/RewindTest.pm index 5219ec967ae94..a2b7a58ad1c4a 100644 --- a/src/bin/pg_rewind/RewindTest.pm +++ b/src/bin/pg_rewind/RewindTest.pm @@ -13,16 +13,18 @@ package RewindTest; # # 2. setup_cluster - creates a PostgreSQL cluster that runs as the master # -# 3. create_standby - runs pg_basebackup to initialize a standby server, and +# 3. start_master - starts the master server +# +# 4. create_standby - runs pg_basebackup to initialize a standby server, and # sets it up to follow the master. # -# 4. promote_standby - runs "pg_ctl promote" to promote the standby server. +# 5. promote_standby - runs "pg_ctl promote" to promote the standby server. # The old master keeps running. # -# 5. run_pg_rewind - stops the old master (if it's still running) and runs +# 6. run_pg_rewind - stops the old master (if it's still running) and runs # pg_rewind to synchronize it with the now-promoted standby server. # -# 6. clean_rewind_test - stops both servers used in the test, if they're +# 7. clean_rewind_test - stops both servers used in the test, if they're # still running. # # The test script can use the helper functions master_psql and standby_psql @@ -56,30 +58,20 @@ our @EXPORT = qw( init_rewind_test setup_cluster + start_master create_standby promote_standby run_pg_rewind clean_rewind_test ); -# A temporary directory created with 'tempdir' is deleted automatically at -# the end of the tests. You can change it to a constant if you need to keep it -# for debugging purposes, -my $testroot = tempdir; - -our $test_master_datadir = "$testroot/data_master"; -our $test_standby_datadir = "$testroot/data_standby"; - -mkdir $testroot; - -# Log files are created here -mkdir "regress_log"; +our $test_master_datadir = "$tmp_check/data_master"; +our $test_standby_datadir = "$tmp_check/data_standby"; # Define non-conflicting ports for both nodes. my $port_master = $ENV{PGPORT}; my $port_standby = $port_master + 1; -my $log_path; my $tempdir_short; my $connstr_master = "port=$port_master"; @@ -91,14 +83,16 @@ sub master_psql { my $cmd = shift; - system_or_bail("psql -q --no-psqlrc -d $connstr_master -c \"$cmd\""); + system_or_bail 'psql', '-q', '--no-psqlrc', '-d', $connstr_master, + '-c', "$cmd"; } sub standby_psql { my $cmd = shift; - system_or_bail("psql -q --no-psqlrc -d $connstr_standby -c \"$cmd\""); + system_or_bail 'psql', '-q', '--no-psqlrc', '-d', $connstr_standby, + '-c', "$cmd"; } # Run a query against the master, and check that the output matches what's @@ -171,16 +165,6 @@ sub append_to_file close $fh; } -sub init_rewind_test -{ - my $testname = shift; - my $test_mode = shift; - - $log_path = "regress_log/pg_rewind_log_${testname}_${test_mode}"; - - remove_tree $log_path; -} - sub setup_cluster { $tempdir_short = tempdir_short; @@ -208,10 +192,15 @@ max_connections = 10 "$test_master_datadir/pg_hba.conf", qq( local replication all trust )); +} - system_or_bail( -"pg_ctl -w -D $test_master_datadir -o \"-k $tempdir_short --listen-addresses='' -p $port_master\" start >>$log_path 2>&1" - ); +sub start_master +{ + system_or_bail('pg_ctl' , '-w', + '-D' , $test_master_datadir, + '-l', "$log_path/master.log", + "-o", "-k $tempdir_short --listen-addresses='' -p $port_master", + 'start'); #### Now run the test-specific parts to initialize the master before setting # up standby @@ -225,8 +214,8 @@ sub create_standby remove_tree $test_standby_datadir; # Base backup is taken with xlog files included - system_or_bail( -"pg_basebackup -D $test_standby_datadir -p $port_master -x >>$log_path 2>&1"); + system_or_bail('pg_basebackup', '-D', $test_standby_datadir, + '-p', $port_master, '-x'); append_to_file( "$test_standby_datadir/recovery.conf", qq( primary_conninfo='$connstr_master application_name=rewind_standby' @@ -235,16 +224,13 @@ recovery_target_timeline='latest' )); # Start standby - system_or_bail( -"pg_ctl -w -D $test_standby_datadir -o \"-k $tempdir_short --listen-addresses='' -p $port_standby\" start >>$log_path 2>&1" - ); - - # Wait until the standby has caught up with the primary, by polling - # pg_stat_replication. - my $caughtup_query = -"SELECT pg_current_xlog_location() = replay_location FROM pg_stat_replication WHERE application_name = 'rewind_standby';"; - poll_query_until($caughtup_query, $connstr_master) - or die "Timed out while waiting for standby to catch up"; + system_or_bail('pg_ctl', '-w', '-D', $test_standby_datadir, + '-l', "$log_path/standby.log", + '-o', "-k $tempdir_short --listen-addresses='' -p $port_standby", + 'start'); + + # The standby may have WAL to apply before it matches the primary. That + # is fine, because no test examines the standby before promotion. } sub promote_standby @@ -252,11 +238,16 @@ sub promote_standby #### Now run the test-specific parts to run after standby has been started # up standby + # Wait for the standby to receive and write all WAL. + my $wal_received_query = +"SELECT pg_current_xlog_location() = write_location FROM pg_stat_replication WHERE application_name = 'rewind_standby';"; + poll_query_until($wal_received_query, $connstr_master) + or die "Timed out while waiting for standby to receive and write WAL"; + # Now promote slave and insert some new data on master, this will put # the master out-of-sync with the standby. Wait until the standby is # out of recovery mode, and is ready to accept read-write connections. - system_or_bail( - "pg_ctl -w -D $test_standby_datadir promote >>$log_path 2>&1"); + system_or_bail('pg_ctl', '-w', '-D', $test_standby_datadir, 'promote'); poll_query_until("SELECT NOT pg_is_in_recovery()", $connstr_standby) or die "Timed out while waiting for promotion of standby"; @@ -274,8 +265,7 @@ sub run_pg_rewind my $test_mode = shift; # Stop the master and be ready to perform the rewind - system_or_bail( - "pg_ctl -w -D $test_master_datadir stop -m fast >>$log_path 2>&1"); + system_or_bail('pg_ctl', '-D', $test_master_datadir, 'stop', '-m', 'fast'); # At this point, the rewind processing is ready to run. # We now have a very simple scenario with a few diverged WAL record. @@ -284,42 +274,30 @@ sub run_pg_rewind # Keep a temporary postgresql.conf for master node or it would be # overwritten during the rewind. - copy( - "$test_master_datadir/postgresql.conf", - "$testroot/master-postgresql.conf.tmp"); + copy("$test_master_datadir/postgresql.conf", + "$tmp_check/master-postgresql.conf.tmp"); # Now run pg_rewind if ($test_mode eq "local") { - # Do rewind using a local pgdata as source # Stop the master and be ready to perform the rewind - system_or_bail( - "pg_ctl -w -D $test_standby_datadir stop -m fast >>$log_path 2>&1" - ); - my $result = run( - [ 'pg_rewind', - "--debug", - "--source-pgdata=$test_standby_datadir", - "--target-pgdata=$test_master_datadir" ], - '>>', - $log_path, - '2>&1'); - ok($result, 'pg_rewind local'); + system_or_bail('pg_ctl', '-D', $test_standby_datadir, 'stop', + '-m', 'fast'); + command_ok(['pg_rewind', + "--debug", + "--source-pgdata=$test_standby_datadir", + "--target-pgdata=$test_master_datadir"], + 'pg_rewind local'); } elsif ($test_mode eq "remote") { - # Do rewind using a remote connection as source - my $result = run( - [ 'pg_rewind', - "--source-server", - "port=$port_standby dbname=postgres", - "--target-pgdata=$test_master_datadir" ], - '>>', - $log_path, - '2>&1'); - ok($result, 'pg_rewind remote'); + command_ok(['pg_rewind', + "--source-server", + "port=$port_standby dbname=postgres", + "--target-pgdata=$test_master_datadir"], + 'pg_rewind remote'); } else { @@ -329,9 +307,8 @@ sub run_pg_rewind } # Now move back postgresql.conf with old settings - move( - "$testroot/master-postgresql.conf.tmp", - "$test_master_datadir/postgresql.conf"); + move("$tmp_check/master-postgresql.conf.tmp", + "$test_master_datadir/postgresql.conf"); # Plug-in rewound node to the now-promoted standby node append_to_file( @@ -342,9 +319,10 @@ recovery_target_timeline='latest' )); # Restart the master to check that rewind went correctly - system_or_bail( -"pg_ctl -w -D $test_master_datadir -o \"-k $tempdir_short --listen-addresses='' -p $port_master\" start >>$log_path 2>&1" - ); + system_or_bail('pg_ctl', '-w', '-D', $test_master_datadir, + '-l', "$log_path/master.log", + '-o', "-k $tempdir_short --listen-addresses='' -p $port_master", + 'start'); #### Now run the test-specific parts to check the result } @@ -355,12 +333,12 @@ sub clean_rewind_test if ($test_master_datadir) { system - "pg_ctl -D $test_master_datadir -s -m immediate stop 2> /dev/null"; + 'pg_ctl', '-D', $test_master_datadir, '-m', 'immediate', 'stop'; } if ($test_standby_datadir) { system - "pg_ctl -D $test_standby_datadir -s -m immediate stop 2> /dev/null"; + 'pg_ctl', '-D', $test_standby_datadir, '-m', 'immediate', 'stop'; } } diff --git a/src/bin/pg_rewind/file_ops.c b/src/bin/pg_rewind/file_ops.c index c2d8aa193960b..193b72e9a2a39 100644 --- a/src/bin/pg_rewind/file_ops.c +++ b/src/bin/pg_rewind/file_ops.c @@ -198,7 +198,7 @@ truncate_target_file(const char *path, off_t newsize) dstpath, strerror(errno)); if (ftruncate(fd, newsize) != 0) - pg_fatal("could not truncate file \"%s\" to %u bytes: %s\n", + pg_fatal("could not truncate file \"%s\" to %u: %s\n", dstpath, (unsigned int) newsize, strerror(errno)); close(fd); diff --git a/src/bin/pg_rewind/filemap.c b/src/bin/pg_rewind/filemap.c index 05eff68185edd..fb26d093160a9 100644 --- a/src/bin/pg_rewind/filemap.c +++ b/src/bin/pg_rewind/filemap.c @@ -78,6 +78,14 @@ process_source_file(const char *path, file_type_t type, size_t newsize, strcmp(path, "postmaster.opts") == 0) return; + /* + * Pretend that pg_xlog is a directory, even if it's really a symlink. + * We don't want to mess with the symlink itself, nor complain if it's a + * symlink in source but not in target or vice versa. + */ + if (strcmp(path, "pg_xlog") == 0 && type == FILE_TYPE_SYMLINK) + type = FILE_TYPE_DIRECTORY; + /* * Skip temporary files, .../pgsql_tmp/... and .../pgsql_tmp.* in source. * This has the effect that all temporary files in the destination will be @@ -112,7 +120,7 @@ process_source_file(const char *path, file_type_t type, size_t newsize, switch (type) { case FILE_TYPE_DIRECTORY: - if (exists && !S_ISDIR(statbuf.st_mode)) + if (exists && !S_ISDIR(statbuf.st_mode) && strcmp(path, "pg_xlog") != 0) { /* it's a directory in source, but not in target. Strange.. */ pg_fatal("\"%s\" is not a directory\n", localpath); @@ -285,6 +293,12 @@ process_target_file(const char *path, file_type_t type, size_t oldsize, strcmp(path, "postmaster.opts") == 0) return; + /* + * Like in process_source_file, pretend that xlog is always a directory. + */ + if (strcmp(path, "pg_xlog") == 0 && type == FILE_TYPE_SYMLINK) + type = FILE_TYPE_DIRECTORY; + key.path = (char *) path; key_ptr = &key; exists = (bsearch(&key_ptr, map->array, map->narray, sizeof(file_entry_t *), diff --git a/src/bin/pg_rewind/libpq_fetch.c b/src/bin/pg_rewind/libpq_fetch.c index 05aa133cf36ea..41d687ba403f8 100644 --- a/src/bin/pg_rewind/libpq_fetch.c +++ b/src/bin/pg_rewind/libpq_fetch.c @@ -69,7 +69,7 @@ libpqConnect(const char *connstr) pg_free(str); /* - * Also check that full_page_writes is enabled. We can get torn pages if + * Also check that full_page_writes is enabled. We can get torn pages if * a page is modified while we read it with pg_read_binary_file(), and we * rely on full page images to fix them. */ @@ -81,6 +81,7 @@ libpqConnect(const char *connstr) /* * Runs a query that returns a single value. + * The result should be pg_free'd after use. */ static char * run_simple_query(const char *sql) @@ -119,10 +120,12 @@ libpqGetCurrentXlogInsertLocation(void) val = run_simple_query("SELECT pg_current_xlog_insert_location()"); if (sscanf(val, "%X/%X", &hi, &lo) != 2) - pg_fatal("unrecognized result \"%s\" for current XLOG insert location\n", val); + pg_fatal("unrecognized result \"%s\" for current WAL insert location\n", val); result = ((uint64) hi) << 32 | lo; + pg_free(val); + return result; } @@ -201,6 +204,7 @@ libpqProcessFileList(void) process_source_file(path, type, filesize, link_target); } + PQclear(res); } /*---- @@ -244,7 +248,7 @@ receiveFileChunks(const char *sql) continue; /* final zero-row result */ default: - pg_fatal("unexpected result while fetching remote files: %s\n", + pg_fatal("unexpected result while fetching remote files: %s", PQresultErrorMessage(res)); } @@ -296,7 +300,7 @@ receiveFileChunks(const char *sql) if (PQgetisnull(res, 0, 2)) { pg_log(PG_DEBUG, - "received NULL chunk for file \"%s\", file has been deleted\n", + "received null value for chunk for file \"%s\", file has been deleted\n", filename); pg_free(filename); PQclear(res); @@ -346,6 +350,8 @@ libpqGetFile(const char *filename, size_t *filesize) memcpy(result, PQgetvalue(res, 0, 0), len); result[len] = '\0'; + PQclear(res); + pg_log(PG_DEBUG, "fetched file \"%s\", length %d\n", filename, len); if (filesize) @@ -406,6 +412,7 @@ libpq_executeFileMap(filemap_t *map) if (PQresultStatus(res) != PGRES_COMMAND_OK) pg_fatal("could not create temporary table: %s", PQresultErrorMessage(res)); + PQclear(res); sql = "COPY fetchchunks FROM STDIN"; res = PQexec(conn, sql); @@ -413,6 +420,7 @@ libpq_executeFileMap(filemap_t *map) if (PQresultStatus(res) != PGRES_COPY_IN) pg_fatal("could not send file list: %s", PQresultErrorMessage(res)); + PQclear(res); for (i = 0; i < map->narray; i++) { @@ -460,6 +468,7 @@ libpq_executeFileMap(filemap_t *map) if (PQresultStatus(res) != PGRES_COMMAND_OK) pg_fatal("unexpected result while sending file list: %s", PQresultErrorMessage(res)); + PQclear(res); } /* diff --git a/src/bin/pg_rewind/nls.mk b/src/bin/pg_rewind/nls.mk index d6eb536b56b21..371e5cd0e8311 100644 --- a/src/bin/pg_rewind/nls.mk +++ b/src/bin/pg_rewind/nls.mk @@ -1,7 +1,7 @@ # src/bin/pg_rewind/nls.mk CATALOG_NAME = pg_rewind -AVAIL_LANGUAGES =de -GETTEXT_FILES = copy_fetch.c datapagemap.c fetch.c file_ops.c filemap.c libpq_fetch.c logging.c parsexlog.c pg_rewind.c timeline.c ../../common/fe_memutils.c ../../common/restricted_token.c ../../../src/backend/access/transam/xlogreader.c +AVAIL_LANGUAGES =de es it pl ru +GETTEXT_FILES = copy_fetch.c datapagemap.c fetch.c file_ops.c filemap.c libpq_fetch.c logging.c parsexlog.c pg_rewind.c timeline.c ../../common/fe_memutils.c ../../common/restricted_token.c xlogreader.c GETTEXT_TRIGGERS = pg_log:2 pg_fatal report_invalid_record:2 GETTEXT_FLAGS = pg_log:2:c-format \ diff --git a/src/bin/pg_rewind/pg_rewind.c b/src/bin/pg_rewind/pg_rewind.c index 032301fc2add6..a2d9ca36aa1f0 100644 --- a/src/bin/pg_rewind/pg_rewind.c +++ b/src/bin/pg_rewind/pg_rewind.c @@ -60,8 +60,8 @@ usage(const char *progname) printf(_("Usage:\n %s [OPTION]...\n\n"), progname); printf(_("Options:\n")); printf(_(" -D, --target-pgdata=DIRECTORY existing data directory to modify\n")); - printf(_(" --source-pgdata=DIRECTORY source data directory to sync with\n")); - printf(_(" --source-server=CONNSTR source server to sync with\n")); + printf(_(" --source-pgdata=DIRECTORY source data directory to synchronize with\n")); + printf(_(" --source-server=CONNSTR source server to synchronize with\n")); printf(_(" -n, --dry-run stop before modifying anything\n")); printf(_(" -P, --progress write progress messages\n")); printf(_(" --debug write a lot of debug messages\n")); @@ -215,7 +215,7 @@ main(int argc, char **argv) pg_fatal("source and target cluster are on the same timeline\n"); findCommonAncestorTimeline(&divergerec, &lastcommontli); - printf(_("The servers diverged at WAL position %X/%X on timeline %u.\n"), + printf(_("servers diverged at WAL position %X/%X on timeline %u\n"), (uint32) (divergerec >> 32), (uint32) divergerec, lastcommontli); /* @@ -250,13 +250,13 @@ main(int argc, char **argv) if (!rewind_needed) { - printf(_("No rewind required.\n")); + printf(_("no rewind required\n")); exit(0); } findLastCheckpoint(datadir_target, divergerec, lastcommontli, &chkptrec, &chkpttli, &chkptredo); - printf(_("Rewinding from last common checkpoint at %X/%X on timeline %u\n"), + printf(_("rewinding from last common checkpoint at %X/%X on timeline %u\n"), (uint32) (chkptrec >> 32), (uint32) chkptrec, chkpttli); diff --git a/src/bin/pg_rewind/po/de.po b/src/bin/pg_rewind/po/de.po index 3d24312dfece3..6a885209ffb22 100644 --- a/src/bin/pg_rewind/po/de.po +++ b/src/bin/pg_rewind/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-06-23 01:14+0000\n" -"PO-Revision-Date: 2015-06-24 21:54-0400\n" +"POT-Creation-Date: 2015-10-03 13:43+0000\n" +"PO-Revision-Date: 2015-10-03 12:17-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -16,144 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../../src/backend/access/transam/xlogreader.c:267 -#, c-format -msgid "invalid record offset at %X/%X" -msgstr "ungültiger Datensatz-Offset bei %X/%X" - -#: ../../../src/backend/access/transam/xlogreader.c:275 -#, c-format -msgid "contrecord is requested by %X/%X" -msgstr "Contrecord angefordert von %X/%X" - -#: ../../../src/backend/access/transam/xlogreader.c:315 -#: ../../../src/backend/access/transam/xlogreader.c:606 -#, c-format -msgid "invalid record length at %X/%X" -msgstr "ungültige Datensatzlänge bei %X/%X" - -#: ../../../src/backend/access/transam/xlogreader.c:329 -#, c-format -msgid "record length %u at %X/%X too long" -msgstr "Datensatzlänge %u bei %X/%X ist zu lang" - -#: ../../../src/backend/access/transam/xlogreader.c:370 -#, c-format -msgid "there is no contrecord flag at %X/%X" -msgstr "keine Contrecord-Flag bei %X/%X" - -#: ../../../src/backend/access/transam/xlogreader.c:383 -#, c-format -msgid "invalid contrecord length %u at %X/%X" -msgstr "ungültige Contrecord-Länge %u bei %X/%X" - -#: ../../../src/backend/access/transam/xlogreader.c:613 -#, c-format -msgid "invalid resource manager ID %u at %X/%X" -msgstr "ungültige Resource-Manager-ID %u bei %X/%X" - -#: ../../../src/backend/access/transam/xlogreader.c:627 -#: ../../../src/backend/access/transam/xlogreader.c:644 -#, c-format -msgid "record with incorrect prev-link %X/%X at %X/%X" -msgstr "Datensatz mit falschem Prev-Link %X/%X bei %X/%X" - -#: ../../../src/backend/access/transam/xlogreader.c:681 -#, 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" - -#: ../../../src/backend/access/transam/xlogreader.c:714 -#, c-format -msgid "invalid magic number %04X in log segment %s, offset %u" -msgstr "ungültige magische Zahl %04X in Logsegment %s, Offset %u" - -#: ../../../src/backend/access/transam/xlogreader.c:728 -#: ../../../src/backend/access/transam/xlogreader.c:779 -#, c-format -msgid "invalid info bits %04X in log segment %s, offset %u" -msgstr "ungültige Info-Bits %04X in Logsegment %s, Offset %u" - -#: ../../../src/backend/access/transam/xlogreader.c:754 -#, c-format -msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s." -msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Datenbanksystemidentifikator in WAL-Datei ist %s, Datenbanksystemidentifikator in pg_control ist %s." - -#: ../../../src/backend/access/transam/xlogreader.c:761 -#, c-format -msgid "WAL file is from different database system: Incorrect XLOG_SEG_SIZE in page header." -msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Falsche XLOG_SEG_SIZE im Seitenkopf." - -#: ../../../src/backend/access/transam/xlogreader.c:767 -#, 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." - -#: ../../../src/backend/access/transam/xlogreader.c:793 -#, c-format -msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" -msgstr "unerwartete Pageaddr %X/%X in Logsegment %s, Offset %u" - -#: ../../../src/backend/access/transam/xlogreader.c:818 -#, 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" - -#: ../../../src/backend/access/transam/xlogreader.c:1027 -#, c-format -msgid "out-of-order block_id %u at %X/%X" -msgstr "" - -#: ../../../src/backend/access/transam/xlogreader.c:1049 -#, 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" - -#: ../../../src/backend/access/transam/xlogreader.c:1056 -#, 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" - -#: ../../../src/backend/access/transam/xlogreader.c:1089 -#, c-format -msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" -msgstr "" - -#: ../../../src/backend/access/transam/xlogreader.c:1105 -#, c-format -msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" -msgstr "" - -#: ../../../src/backend/access/transam/xlogreader.c:1120 -#, c-format -msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" -msgstr "" - -#: ../../../src/backend/access/transam/xlogreader.c:1135 -#, c-format -msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" -msgstr "" - -#: ../../../src/backend/access/transam/xlogreader.c:1151 -#, c-format -msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" -msgstr "" - -#: ../../../src/backend/access/transam/xlogreader.c:1163 -#, c-format -msgid "invalid block_id %u at %X/%X" -msgstr "ungültige block_id %u bei %X/%X" - -#: ../../../src/backend/access/transam/xlogreader.c:1228 -#, c-format -msgid "record with invalid length at %X/%X" -msgstr "Datensatz mit ungültiger Länge bei %X/%X" - -#: ../../../src/backend/access/transam/xlogreader.c:1317 -#, c-format -msgid "invalid compressed image at %X/%X, block %d" -msgstr "" - #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 parsexlog.c:74 parsexlog.c:127 #: parsexlog.c:179 @@ -169,7 +31,7 @@ msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" #: ../../common/restricted_token.c:68 #, c-format msgid "%s: WARNING: cannot create restricted tokens on this platform\n" -msgstr "%s: WARNUNG: auf dieser Platform können keine beschränkten Token erzeugt werden\n" +msgstr "%s: WARNUNG: auf dieser Plattform können keine beschränkten Token erzeugt werden\n" #: ../../common/restricted_token.c:77 #, c-format @@ -206,7 +68,7 @@ msgstr "%s: konnte Statuscode des Subprozesses nicht ermitteln: Fehlercode %lu\n msgid "could not open directory \"%s\": %s\n" msgstr "konnte Verzeichnis „%s“ nicht öffnen: %s\n" -#: copy_fetch.c:93 filemap.c:104 filemap.c:259 +#: copy_fetch.c:93 filemap.c:112 filemap.c:267 #, c-format msgid "could not stat file \"%s\": %s\n" msgstr "konnte „stat“ für Datei „%s“ nicht ausführen: %s\n" @@ -284,7 +146,7 @@ msgstr "konnte Datei „%s“ nicht schreiben: %s\n" #: file_ops.c:165 #, c-format msgid "invalid action (CREATE) for regular file\n" -msgstr "" +msgstr "ungültige Aktion (CREATE) für normale Datei\n" #: file_ops.c:180 #, c-format @@ -297,10 +159,9 @@ msgid "could not open file \"%s\" for truncation: %s\n" msgstr "konnte Datei „%s“ nicht zum Kürzen öffnen: %s\n" #: file_ops.c:201 -#, fuzzy, c-format -#| msgid "could not truncate file \"%s\" to %u: %m" -msgid "could not truncate file \"%s\" to %u bytes: %s\n" -msgstr "konnte Datei „%s“ nicht auf %u kürzen: %m" +#, c-format +msgid "could not truncate file \"%s\" to %u: %s\n" +msgstr "konnte Datei „%s“ nicht auf %u kürzen: %s\n" #: file_ops.c:217 #, c-format @@ -327,35 +188,35 @@ msgstr "konnte symbolische Verknüpfung „%s“ nicht löschen: %s\n" msgid "could not open file \"%s\" for reading: %s\n" msgstr "konnte Datei „%s“ nicht zum Lesen öffnen: %s\n" -#: filemap.c:96 +#: filemap.c:104 #, c-format msgid "data file \"%s\" in source is not a regular file\n" msgstr "Datendatei „%s“ in der Quelle ist keine normale Datei\n" -#: filemap.c:118 +#: filemap.c:126 #, c-format msgid "\"%s\" is not a directory\n" msgstr "„%s“ ist kein Verzeichnis\n" -#: filemap.c:141 +#: filemap.c:149 #, c-format msgid "\"%s\" is not a symbolic link\n" msgstr "„%s“ ist keine symbolische Verknüpfung\n" -#: filemap.c:153 +#: filemap.c:161 #, c-format msgid "\"%s\" is not a regular file\n" msgstr "„%s“ ist keine normale Datei\n" -#: filemap.c:271 +#: filemap.c:279 #, c-format msgid "source file list is empty\n" msgstr "Quelldateiliste ist leer\n" -#: filemap.c:387 +#: filemap.c:401 #, c-format msgid "unexpected page modification for directory or symbolic link \"%s\"\n" -msgstr "" +msgstr "unerwartete Seitenänderung für Verzeichnis oder symbolische Verknüpfung „%s“\n" #: libpq_fetch.c:55 #, c-format @@ -377,118 +238,122 @@ msgstr "Quell-Server darf nicht im Wiederherstellungsmodus sein\n" msgid "full_page_writes must be enabled in the source server\n" msgstr "full_page_writes muss im Quell-Server eingeschaltet sein\n" -#: libpq_fetch.c:94 +#: libpq_fetch.c:95 #, c-format msgid "error running query (%s) in source server: %s" msgstr "Fehler beim Ausführen einer Anfrage (%s) im Quellserver: %s" -#: libpq_fetch.c:99 +#: libpq_fetch.c:100 #, c-format msgid "unexpected result set from query\n" msgstr "Anfrage ergab unerwartete Ergebnismenge\n" -#: libpq_fetch.c:122 +#: libpq_fetch.c:123 #, c-format -msgid "unrecognized result \"%s\" for current XLOG insert location\n" -msgstr "" +msgid "unrecognized result \"%s\" for current WAL insert location\n" +msgstr "unbekanntes Ergebnis „%s“ für aktuelle WAL-Einfügeposition\n" -#: libpq_fetch.c:170 +#: libpq_fetch.c:173 #, c-format msgid "could not fetch file list: %s" msgstr "konnte Dateiliste nicht holen: %s" -#: libpq_fetch.c:175 +#: libpq_fetch.c:178 #, c-format msgid "unexpected result set while fetching file list\n" msgstr "unerwartete Ergebnismenge beim Holen der Dateiliste\n" -#: libpq_fetch.c:213 +#: libpq_fetch.c:226 #, c-format msgid "could not send query: %s" msgstr "konnte Anfrage nicht senden: %s" -#: libpq_fetch.c:215 +#: libpq_fetch.c:228 #, c-format -msgid "getting file chunks" -msgstr "" +msgid "getting file chunks\n" +msgstr "hole Dateistücke\n" -#: libpq_fetch.c:218 +#: libpq_fetch.c:231 #, c-format msgid "could not set libpq connection to single row mode\n" msgstr "konnte libpq-Verbindung nicht in den Einzelzeilenmodus setzen\n" -#: libpq_fetch.c:238 +#: libpq_fetch.c:251 #, c-format -msgid "unexpected result while fetching remote files: %s\n" -msgstr "" +msgid "unexpected result while fetching remote files: %s" +msgstr "unerwartetes Ergebnis beim Holen von fernen Dateien: %s" -#: libpq_fetch.c:244 +#: libpq_fetch.c:257 #, c-format msgid "unexpected result set size while fetching remote files\n" -msgstr "" +msgstr "unerwartete Ergebnismengengröße beim Holen von fernen Dateien\n" -#: libpq_fetch.c:250 +#: libpq_fetch.c:263 #, c-format msgid "unexpected data types in result set while fetching remote files: %u %u %u\n" -msgstr "" +msgstr "unerwartete Datentypen in Ergebnismenge beim Holen von fernen Dateien: %u %u %u\n" -#: libpq_fetch.c:258 +#: libpq_fetch.c:271 #, c-format msgid "unexpected result format while fetching remote files\n" -msgstr "" +msgstr "unerwartetes Ergebnisformat beim Holen von fernen Dateien\n" -#: libpq_fetch.c:265 +#: libpq_fetch.c:277 #, c-format msgid "unexpected null values in result while fetching remote files\n" -msgstr "" +msgstr "unerwartete NULL-Werte im Ergebnis beim Holen von fernen Dateien\n" -#: libpq_fetch.c:269 +#: libpq_fetch.c:281 #, c-format msgid "unexpected result length while fetching remote files\n" -msgstr "" +msgstr "unerwartete Ergebnislänge beim Holen von fernen Dateien\n" + +#: libpq_fetch.c:303 +#, c-format +msgid "received null value for chunk for file \"%s\", file has been deleted\n" +msgstr "NULL-Wert für Stück von Datei „%s“ empfangen, Datei wurde gelöscht\n" -#: libpq_fetch.c:283 +#: libpq_fetch.c:310 #, c-format msgid "received chunk for file \"%s\", offset %d, size %d\n" -msgstr "" +msgstr "Stück von Datei „%s“ empfangen, Offset %d, Größe %d\n" -#: libpq_fetch.c:312 -#, fuzzy, c-format -#| msgid "could not remove file \"%s\": %s\n" +#: libpq_fetch.c:339 +#, c-format msgid "could not fetch remote file \"%s\": %s" -msgstr "konnte Datei „%s“ nicht löschen: %s\n" +msgstr "konnte ferne Datei „%s“ nicht holen: %s" -#: libpq_fetch.c:317 +#: libpq_fetch.c:344 #, c-format msgid "unexpected result set while fetching remote file \"%s\"\n" -msgstr "" +msgstr "unerwartete Ergebnismenge beim Holen der fernen Datei „%s“\n" -#: libpq_fetch.c:326 +#: libpq_fetch.c:355 #, c-format msgid "fetched file \"%s\", length %d\n" -msgstr "" +msgstr "Datei „%s“ geholt, Länge %d\n" -#: libpq_fetch.c:358 +#: libpq_fetch.c:387 #, c-format msgid "could not send COPY data: %s" msgstr "konnte COPY-Daten nicht senden: %s" -#: libpq_fetch.c:384 +#: libpq_fetch.c:413 #, c-format msgid "could not create temporary table: %s" msgstr "konnte temporäre Tabelle nicht erzeugen: %s" -#: libpq_fetch.c:391 +#: libpq_fetch.c:421 #, c-format msgid "could not send file list: %s" msgstr "konnte Dateiliste nicht senden: %s" -#: libpq_fetch.c:432 +#: libpq_fetch.c:463 #, c-format msgid "could not send end-of-COPY: %s" msgstr "konnte COPY-Ende nicht senden: %s" -#: libpq_fetch.c:438 +#: libpq_fetch.c:469 #, c-format msgid "unexpected result while sending file list: %s" msgstr "unerwartetes Ergebnis beim Senden der Dateiliste: %s" @@ -551,7 +416,9 @@ msgstr "" msgid "" "%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n" "\n" -msgstr "%s resynchronisiert einen PostgreSQL-Cluster mit einer Kopie des Clusters.\n\n" +msgstr "" +"%s resynchronisiert einen PostgreSQL-Cluster mit einer Kopie des Clusters.\n" +"\n" #: pg_rewind.c:60 #, c-format @@ -576,14 +443,14 @@ msgstr " -D, --target-pgdata=VERZ bestehendes zu modifizierendes Datenver #: pg_rewind.c:63 #, c-format -msgid " --source-pgdata=DIRECTORY source data directory to sync with\n" +msgid " --source-pgdata=DIRECTORY source data directory to synchronize with\n" msgstr "" " --source-pgdata=VERZ Quelldatenverzeichnis, mit dem synchronisiert\n" " werden soll\n" #: pg_rewind.c:64 #, c-format -msgid " --source-server=CONNSTR source server to sync with\n" +msgid " --source-server=CONNSTR source server to synchronize with\n" msgstr " --source-server=VERB Quellserver, mit dem synchronisiert werden soll\n" #: pg_rewind.c:65 @@ -653,22 +520,22 @@ msgstr "Sie müssen %s als PostgreSQL-Superuser ausführen.\n" #: pg_rewind.c:215 #, c-format msgid "source and target cluster are on the same timeline\n" -msgstr "" +msgstr "Quell- und Ziel-Cluster sind auf der gleichen Zeitleiste\n" #: pg_rewind.c:218 #, c-format -msgid "The servers diverged at WAL position %X/%X on timeline %u.\n" -msgstr "" +msgid "servers diverged at WAL position %X/%X on timeline %u\n" +msgstr "Server divergierten bei WAL-Position %X/%X auf Zeitleiste %u\n" #: pg_rewind.c:253 #, c-format -msgid "No rewind required.\n" -msgstr "" +msgid "no rewind required\n" +msgstr "kein Rückspulen nötig\n" #: pg_rewind.c:259 #, c-format -msgid "Rewinding from last common checkpoint at %X/%X on timeline %u\n" -msgstr "" +msgid "rewinding from last common checkpoint at %X/%X on timeline %u\n" +msgstr "Rückspulen ab letztem gemeinsamen Checkpoint bei %X/%X auf Zeitleiste %u\n" #: pg_rewind.c:267 #, c-format @@ -732,7 +599,7 @@ msgstr "Quelldatenverzeichnis muss sauber heruntergefahren worden sein\n" #: pg_rewind.c:456 #, c-format msgid "could not find common ancestor of the source and target cluster's timelines\n" -msgstr "" +msgstr "konnte keinen gemeinsamen Anfangspunkt in den Zeitleisten von Quell- und Ziel-Cluster finden\n" #: pg_rewind.c:496 #, c-format @@ -761,8 +628,8 @@ msgstr "Eine numerische Zeitleisten-ID wurde erwartet.\n" #: timeline.c:83 #, c-format -msgid "Expected an XLOG switchpoint location.\n" -msgstr "" +msgid "Expected a transaction log switchpoint location.\n" +msgstr "Eine Transaktionslog-Switchpoint-Position wurde erwartet.\n" #: timeline.c:88 #, c-format @@ -783,3 +650,138 @@ msgstr "ungültige Daten in History-Datei\n" #, c-format msgid "Timeline IDs must be less than child timeline's ID.\n" msgstr "Zeitleisten-IDs müssen kleiner als die Zeitleisten-ID des Kindes sein.\n" + +#: xlogreader.c:264 +#, c-format +msgid "invalid record offset at %X/%X" +msgstr "ungültiger Datensatz-Offset bei %X/%X" + +#: xlogreader.c:272 +#, c-format +msgid "contrecord is requested by %X/%X" +msgstr "Contrecord angefordert von %X/%X" + +#: xlogreader.c:312 xlogreader.c:603 +#, c-format +msgid "invalid record length at %X/%X" +msgstr "ungültige Datensatzlänge bei %X/%X" + +#: xlogreader.c:326 +#, c-format +msgid "record length %u at %X/%X too long" +msgstr "Datensatzlänge %u bei %X/%X ist zu lang" + +#: xlogreader.c:367 +#, c-format +msgid "there is no contrecord flag at %X/%X" +msgstr "keine Contrecord-Flag bei %X/%X" + +#: xlogreader.c:380 +#, c-format +msgid "invalid contrecord length %u at %X/%X" +msgstr "ungültige Contrecord-Länge %u bei %X/%X" + +#: xlogreader.c:610 +#, c-format +msgid "invalid resource manager ID %u at %X/%X" +msgstr "ungültige Resource-Manager-ID %u bei %X/%X" + +#: xlogreader.c:624 xlogreader.c:641 +#, c-format +msgid "record with incorrect prev-link %X/%X at %X/%X" +msgstr "Datensatz mit falschem Prev-Link %X/%X bei %X/%X" + +#: xlogreader.c:678 +#, c-format +msgid "incorrect resource manager data checksum in record at %X/%X" +msgstr "ungültige Resource-Manager-Datenprüfsumme in Datensatz bei %X/%X" + +#: xlogreader.c:711 +#, c-format +msgid "invalid magic number %04X in log segment %s, offset %u" +msgstr "ungültige magische Zahl %04X in Logsegment %s, Offset %u" + +#: xlogreader.c:725 xlogreader.c:776 +#, c-format +msgid "invalid info bits %04X in log segment %s, offset %u" +msgstr "ungültige Info-Bits %04X in Logsegment %s, Offset %u" + +#: xlogreader.c:751 +#, c-format +msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" +msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Datenbanksystemidentifikator in WAL-Datei ist %s, Datenbanksystemidentifikator in pg_control ist %s" + +#: xlogreader.c:758 +#, c-format +msgid "WAL file is from different database system: incorrect XLOG_SEG_SIZE in page header" +msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Falsche XLOG_SEG_SIZE im Seitenkopf" + +#: xlogreader.c:764 +#, c-format +msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" +msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Falsche XLOG_BLCKSZ im Seitenkopf" + +#: xlogreader.c:790 +#, c-format +msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" +msgstr "unerwartete Pageaddr %X/%X in Logsegment %s, Offset %u" + +#: xlogreader.c:815 +#, c-format +msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" +msgstr "Zeitleisten-ID %u außer der Reihe (nach %u) in Logsegment %s, Offset %u" + +#: xlogreader.c:1024 +#, c-format +msgid "out-of-order block_id %u at %X/%X" +msgstr "block_id %u außer der Reihe bei %X/%X" + +#: xlogreader.c:1046 +#, c-format +msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" +msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%X" + +#: xlogreader.c:1053 +#, c-format +msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" +msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%X" + +#: xlogreader.c:1086 +#, c-format +msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" +msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%X" + +#: xlogreader.c:1102 +#, c-format +msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" +msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%X" + +#: xlogreader.c:1117 +#, c-format +msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" +msgstr "BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%X" + +#: xlogreader.c:1132 +#, c-format +msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" +msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%X" + +#: xlogreader.c:1148 +#, c-format +msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" +msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%X" + +#: xlogreader.c:1160 +#, c-format +msgid "invalid block_id %u at %X/%X" +msgstr "ungültige block_id %u bei %X/%X" + +#: xlogreader.c:1225 +#, c-format +msgid "record with invalid length at %X/%X" +msgstr "Datensatz mit ungültiger Länge bei %X/%X" + +#: xlogreader.c:1314 +#, c-format +msgid "invalid compressed image at %X/%X, block %d" +msgstr "ungültiges komprimiertes Abbild bei %X/%X, Block %d" diff --git a/src/bin/pg_rewind/po/es.po b/src/bin/pg_rewind/po/es.po new file mode 100644 index 0000000000000..e32fd4086a7fc --- /dev/null +++ b/src/bin/pg_rewind/po/es.po @@ -0,0 +1,785 @@ +# Spanish message translation file for pg_rewind +# Copyright (C) 2015 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# Álvaro Herrera , 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_rewind (PostgreSQL) 9.5\n" +"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" +"POT-Creation-Date: 2015-10-04 00:43+0000\n" +"PO-Revision-Date: 2015-10-02 16:25-0300\n" +"Last-Translator: Álvaro Herrera \n" +"Language-Team: PgSQL Español \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 parsexlog.c:74 parsexlog.c:127 +#: parsexlog.c:179 +#, c-format +msgid "out of memory\n" +msgstr "memoria agotada\n" + +#: ../../common/fe_memutils.c:92 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "no se puede duplicar un puntero nulo (error interno)\n" + +#: ../../common/restricted_token.c:68 +#, c-format +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: ATENCIÓN: no se pueden crear tokens restrigidos en esta plataforma\n" + +#: ../../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: no se pudo abrir el token de proceso: código de error %lu\n" + +#: ../../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: no se pudo emplazar los SIDs: código de error %lu\n" + +#: ../../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: no se pudo crear el token restringido: código de error %lu\n" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: no se pudo iniciar el proceso para la orden «%s»: código de error %lu\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: no se pudo re-ejecutar con el token restringido: código de error %lu\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: no se pudo obtener el código de salida del subproceso»: código de error %lu\n" + +#: copy_fetch.c:64 +#, c-format +msgid "could not open directory \"%s\": %s\n" +msgstr "no se pudo abrir el directorio «%s»: %s\n" + +#: copy_fetch.c:93 filemap.c:112 filemap.c:267 +#, c-format +msgid "could not stat file \"%s\": %s\n" +msgstr "no se pudo hacer stat del archivo «%s»: %s\n" + +#: copy_fetch.c:122 +#, c-format +msgid "could not read symbolic link \"%s\": %s\n" +msgstr "no se pudo leer link simbólico «%s»: %s\n" + +#: copy_fetch.c:125 +#, c-format +msgid "symbolic link \"%s\" target is too long\n" +msgstr "el destino del link simbólico «%s» es demasiado largo\n" + +#: copy_fetch.c:140 +#, c-format +msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform\n" +msgstr "«%s» es un link simbólico, pero los links simbólicos no están soportados en esta plataforma\n" + +#: copy_fetch.c:147 +#, c-format +msgid "could not read directory \"%s\": %s\n" +msgstr "no se pudo leer el directorio «%s»: %s\n" + +#: copy_fetch.c:151 +#, c-format +msgid "could not close directory \"%s\": %s\n" +msgstr "no se pudo cerrar el directorio «%s»: %s\n" + +#: copy_fetch.c:171 +#, c-format +msgid "could not open source file \"%s\": %s\n" +msgstr "no se pudo abrir el archivo de origen «%s»: %s\n" + +#: copy_fetch.c:175 +#, c-format +msgid "could not seek in source file: %s\n" +msgstr "no se pudo posicionar en archivo de origen: %s\n" + +#: copy_fetch.c:192 file_ops.c:301 +#, c-format +msgid "could not read file \"%s\": %s\n" +msgstr "no se pudo leer el archivo «%s»: %s\n" + +#: copy_fetch.c:195 +#, c-format +msgid "unexpected EOF while reading file \"%s\"\n" +msgstr "EOF inesperado mientras se leía el archivo «%s»\n" + +#: copy_fetch.c:202 +#, c-format +msgid "could not close file \"%s\": %s\n" +msgstr "no se pudo cerrar el archivo «%s»: %s\n" + +#: file_ops.c:64 +#, c-format +msgid "could not open target file \"%s\": %s\n" +msgstr "no se pudo abrir el archivo de destino «%s»: %s\n" + +#: file_ops.c:78 +#, c-format +msgid "could not close target file \"%s\": %s\n" +msgstr "no se pudo cerrar el archivo de destino «%s»: %s\n" + +#: file_ops.c:99 +#, c-format +msgid "could not seek in target file \"%s\": %s\n" +msgstr "no se pudo posicionar en archivo de destino «%s»: %s\n" + +#: file_ops.c:115 +#, c-format +msgid "could not write file \"%s\": %s\n" +msgstr "no se pudo escribir el archivo «%s»: %s\n" + +#: file_ops.c:165 +#, c-format +msgid "invalid action (CREATE) for regular file\n" +msgstr "acción no válida (CREATE) para archivo regular\n" + +#: file_ops.c:180 +#, c-format +msgid "could not remove file \"%s\": %s\n" +msgstr "no se pudo eliminar el archivo «%s»: %s\n" + +#: file_ops.c:197 +#, c-format +msgid "could not open file \"%s\" for truncation: %s\n" +msgstr "no se pudo abrir el archivo «%s» para truncarlo: %s\n" + +#: file_ops.c:201 +#, c-format +msgid "could not truncate file \"%s\" to %u: %s\n" +msgstr "no se pudo truncar el archivo «%s» a %u: %s\n" + +#: file_ops.c:217 +#, c-format +msgid "could not create directory \"%s\": %s\n" +msgstr "no se pudo crear el directorio «%s»: %s\n" + +#: file_ops.c:231 +#, c-format +msgid "could not remove directory \"%s\": %s\n" +msgstr "no se pudo eliminar el directorio «%s»: %s\n" + +#: file_ops.c:245 +#, c-format +msgid "could not create symbolic link at \"%s\": %s\n" +msgstr "no se pudo crear el link simbólico en «%s»: %s\n" + +#: file_ops.c:259 +#, c-format +msgid "could not remove symbolic link \"%s\": %s\n" +msgstr "no se pudo eliminar el link simbólico «%s»: %s\n" + +#: file_ops.c:289 file_ops.c:293 +#, c-format +msgid "could not open file \"%s\" for reading: %s\n" +msgstr "no se pudo abrir el archivo «%s» para lectura: %s\n" + +#: filemap.c:104 +#, c-format +msgid "data file \"%s\" in source is not a regular file\n" +msgstr "el archivo de datos «%s» en el origen no es un archivo regular\n" + +#: filemap.c:126 +#, c-format +msgid "\"%s\" is not a directory\n" +msgstr "«%s» no es un directorio\n" + +#: filemap.c:149 +#, c-format +msgid "\"%s\" is not a symbolic link\n" +msgstr "«%s» no es un link simbólico\n" + +#: filemap.c:161 +#, c-format +msgid "\"%s\" is not a regular file\n" +msgstr "«%s» no es un archivo regular\n" + +#: filemap.c:279 +#, c-format +msgid "source file list is empty\n" +msgstr "el listado de archivos de origen está vacío\n" + +#: filemap.c:401 +#, c-format +msgid "unexpected page modification for directory or symbolic link \"%s\"\n" +msgstr "modificación de página inesperada para el directorio o link simbólico «%s»\n" + +#: libpq_fetch.c:55 +#, c-format +msgid "could not connect to server: %s" +msgstr "no se pudo conectar al servidor: %s" + +#: libpq_fetch.c:58 +#, c-format +msgid "connected to server\n" +msgstr "conectado al servidor\n" + +#: libpq_fetch.c:68 +#, c-format +msgid "source server must not be in recovery mode\n" +msgstr "el servidor de origen no debe estar en modo de recuperación\n" + +#: libpq_fetch.c:78 +#, c-format +msgid "full_page_writes must be enabled in the source server\n" +msgstr "full_page_writes debe estar activado en el servidor de origen\n" + +#: libpq_fetch.c:95 +#, c-format +msgid "error running query (%s) in source server: %s" +msgstr "error ejecutando consulta (%s) en el servidor de origen: %s" + +#: libpq_fetch.c:100 +#, c-format +msgid "unexpected result set from query\n" +msgstr "conjunto de resultados inesperados de la consulta\n" + +#: libpq_fetch.c:123 +#, c-format +msgid "unrecognized result \"%s\" for current WAL insert location\n" +msgstr "resultado «%s» no reconocido para la ubicación de inserción WAL actual\n" + +#: libpq_fetch.c:173 +#, c-format +msgid "could not fetch file list: %s" +msgstr "no se pudo obtener el listado de archivos: %s" + +#: libpq_fetch.c:178 +#, c-format +msgid "unexpected result set while fetching file list\n" +msgstr "conjunto de resultados inesperado mientras se obtenía el listado de archivos\n" + +#: libpq_fetch.c:226 +#, c-format +msgid "could not send query: %s" +msgstr "no se pudo enviar la consulta: %s" + +#: libpq_fetch.c:228 +#, c-format +msgid "getting file chunks\n" +msgstr "obteniendo trozos de archivos\n" + +#: libpq_fetch.c:231 +#, c-format +msgid "could not set libpq connection to single row mode\n" +msgstr "no se pudo establecer la coneción libpq a modo «single row»\n" + +#: libpq_fetch.c:251 +#, c-format +msgid "unexpected result while fetching remote files: %s" +msgstr "resultados inesperados mientras se obtenían archivos remotos: %s" + +#: libpq_fetch.c:257 +#, c-format +msgid "unexpected result set size while fetching remote files\n" +msgstr "tamaño del conjunto de resultados inesperado mientras se obtenían archivos remotos\n" + +#: libpq_fetch.c:263 +#, c-format +msgid "unexpected data types in result set while fetching remote files: %u %u %u\n" +msgstr "tipos de dato inesperados en el conjunto de resultados mientras se obtenían archivos remotos: %u %u %u\n" + +#: libpq_fetch.c:271 +#, c-format +msgid "unexpected result format while fetching remote files\n" +msgstr "formato de resultados inesperado mientras se obtenían archivos remotos\n" + +#: libpq_fetch.c:277 +#, c-format +msgid "unexpected null values in result while fetching remote files\n" +msgstr "valores nulos inesperados en el resultado mientras se obtenían archivos remotos\n" + +#: libpq_fetch.c:281 +#, c-format +msgid "unexpected result length while fetching remote files\n" +msgstr "largo del resultado inesperado mientras se obtenían los archivos remotos\n" + +#: libpq_fetch.c:303 +#, c-format +msgid "received null value for chunk for file \"%s\", file has been deleted\n" +msgstr "recibido un valor NULL para un trozo del archivo «%s», el archivo ha sido borrado\n" + +#: libpq_fetch.c:310 +#, c-format +msgid "received chunk for file \"%s\", offset %d, size %d\n" +msgstr "recibido un trozo para el archivo «%s», posición %d, tamaño %d\n" + +#: libpq_fetch.c:339 +#, c-format +msgid "could not fetch remote file \"%s\": %s" +msgstr "no se pudo obtener el archivo remoto «%s»: %s" + +#: libpq_fetch.c:344 +#, c-format +msgid "unexpected result set while fetching remote file \"%s\"\n" +msgstr "conjunto de resultados inesperado mientras se obtenía el archivo remoto «%s»\n" + +#: libpq_fetch.c:355 +#, c-format +msgid "fetched file \"%s\", length %d\n" +msgstr "obtenido archivo «%s», largo %d\n" + +#: libpq_fetch.c:387 +#, c-format +msgid "could not send COPY data: %s" +msgstr "no se pudo enviar datos COPY: %s" + +#: libpq_fetch.c:413 +#, c-format +msgid "could not create temporary table: %s" +msgstr "no se pudo crear tabla temporal: %s" + +#: libpq_fetch.c:421 +#, c-format +msgid "could not send file list: %s" +msgstr "no se pudo enviar el listado de archivos: %s" + +#: libpq_fetch.c:463 +#, c-format +msgid "could not send end-of-COPY: %s" +msgstr "no se pudo enviar fin-de-COPY: %s" + +#: libpq_fetch.c:469 +#, c-format +msgid "unexpected result while sending file list: %s" +msgstr "resultados inesperados mientras se enviaba el listado de archivos: %s" + +#: logging.c:57 +msgid "Failure, exiting\n" +msgstr "Falló, saliendo\n" + +#: logging.c:140 +#, c-format +msgid "%*s/%s kB (%d%%) copied" +msgstr "%*s/%s kB (%d%%) copiados" + +#: parsexlog.c:87 parsexlog.c:133 +#, c-format +msgid "could not read WAL record at %X/%X: %s\n" +msgstr "no se pudo leer el registro WAL en %X/%X: %s\n" + +#: parsexlog.c:91 parsexlog.c:136 +#, c-format +msgid "could not read WAL record at %X/%X\n" +msgstr "no se pudo leer el registro WAL en %X/%X\n" + +#: parsexlog.c:191 +#, c-format +msgid "could not find previous WAL record at %X/%X: %s\n" +msgstr "no se pudo encontrar el registro WAL anterior en %X/%X: %s\n" + +#: parsexlog.c:195 +#, c-format +msgid "could not find previous WAL record at %X/%X\n" +msgstr "no se pudo encontrar el registro WAL anterior en %X/%X\n" + +#: parsexlog.c:268 +#, c-format +msgid "could not open file \"%s\": %s\n" +msgstr "no se pudo abrir el archivo «%s»: %s\n" + +#: parsexlog.c:282 +#, c-format +msgid "could not seek in file \"%s\": %s\n" +msgstr "no se pudo posicionar en archivo «%s»: %s\n" + +#: parsexlog.c:289 +#, c-format +msgid "could not read from file \"%s\": %s\n" +msgstr "no se pudo leer el archivo «%s»: %s\n" + +#: parsexlog.c:357 +#, c-format +msgid "" +"WAL record modifies a relation, but record type is not recognized\n" +"lsn: %X/%X, rmgr: %s, info: %02X\n" +msgstr "" +"el registro WAL modifica una relación, pero el tipo de registro no es reconocido\n" +"lsn: %X/%X, rmgr: %s, info: %02X\n" + +#: pg_rewind.c:59 +#, c-format +msgid "" +"%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n" +"\n" +msgstr "" +"%s resincroniza un cluster PostgreSQL con otra copia del cluster.\n" +"\n" + +#: pg_rewind.c:60 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]...\n" +"\n" +msgstr "" +"Empleo:\n" +" %s [OPCION]...\n" +"\n" + +#: pg_rewind.c:61 +#, c-format +msgid "Options:\n" +msgstr "Opciones:\n" + +#: pg_rewind.c:62 +#, c-format +msgid " -D, --target-pgdata=DIRECTORY existing data directory to modify\n" +msgstr " -D, --target-pgdata=DIRECTORIO directorio de datos existente a modificar\n" + +#: pg_rewind.c:63 +#, c-format +msgid " --source-pgdata=DIRECTORY source data directory to synchronize with\n" +msgstr " --source-pgdata=DIRECTORIO directorio de datos de origen a sincronizar\n" + +#: pg_rewind.c:64 +#, c-format +msgid " --source-server=CONNSTR source server to synchronize with\n" +msgstr " --source-server=CONN servidor de origen a sincronizar\n" + +#: pg_rewind.c:65 +#, c-format +msgid " -n, --dry-run stop before modifying anything\n" +msgstr " -n, --dry-run detener antes de modificar nada\n" + +#: pg_rewind.c:66 +#, c-format +msgid " -P, --progress write progress messages\n" +msgstr " -P, --progress escribir mensajes de progreso\n" + +#: pg_rewind.c:67 +#, c-format +msgid " --debug write a lot of debug messages\n" +msgstr " --debug escribir muchos mensajes de depuración\n" + +#: pg_rewind.c:68 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version mostrar información de versión y salir\n" + +#: pg_rewind.c:69 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help mostrar esta ayuda y salir\n" + +#: pg_rewind.c:70 +#, c-format +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Reporte errores a .\n" + +#: pg_rewind.c:125 pg_rewind.c:156 pg_rewind.c:163 pg_rewind.c:171 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Pruebe «%s --help» para mayor información.\n" + +#: pg_rewind.c:155 +#, c-format +msgid "%s: no source specified (--source-pgdata or --source-server)\n" +msgstr "%s: no se especificó origen (--source-pgdata o --source-server)\n" + +#: pg_rewind.c:162 +#, c-format +msgid "%s: no target data directory specified (--target-pgdata)\n" +msgstr "%s: no se especificó directorio de datos de destino (--target-pgdata)\n" + +#: pg_rewind.c:169 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: demasiados argumentos de línea de órdenes (el primero es «%s»)\n" + +#: pg_rewind.c:184 +#, c-format +msgid "cannot be executed by \"root\"\n" +msgstr "no puede ser ejecutado por «root»\n" + +#: pg_rewind.c:185 +#, c-format +msgid "You must run %s as the PostgreSQL superuser.\n" +msgstr "Debe ejecutar %s con el superusuario de PostgreSQL.\n" + +#: pg_rewind.c:215 +#, c-format +msgid "source and target cluster are on the same timeline\n" +msgstr "el cluster de origen y destino están en el mismo timeline\n" + +#: pg_rewind.c:218 +#, c-format +msgid "servers diverged at WAL position %X/%X on timeline %u\n" +msgstr "servidores divergieron en la posición de WAL %X/%X del timeline %u\n" + +#: pg_rewind.c:253 +#, c-format +msgid "no rewind required\n" +msgstr "no se requiere rebobinar\n" + +#: pg_rewind.c:259 +#, c-format +msgid "rewinding from last common checkpoint at %X/%X on timeline %u\n" +msgstr "rebobinando desde el último checkpoint común en %X/%X en el timeline %u\n" + +#: pg_rewind.c:267 +#, c-format +msgid "reading source file list\n" +msgstr "leyendo la lista de archivos de origen\n" + +#: pg_rewind.c:269 +#, c-format +msgid "reading target file list\n" +msgstr "leyendo la lista de archivos de destino\n" + +#: pg_rewind.c:279 +#, c-format +msgid "reading WAL in target\n" +msgstr "leyendo WAL en destino\n" + +#: pg_rewind.c:296 +#, c-format +msgid "need to copy %lu MB (total source directory size is %lu MB)\n" +msgstr "se necesitan copiar %lu MB (tamaño total de directorio de origen es %lu MB)\n" + +#: pg_rewind.c:313 +#, c-format +msgid "" +"\n" +"creating backup label and updating control file\n" +msgstr "" +"\n" +"creando etiqueta de respaldo y actualizando archivo de control\n" + +#: pg_rewind.c:341 +#, c-format +msgid "Done!\n" +msgstr "¡Listo!\n" + +#: pg_rewind.c:353 +#, c-format +msgid "source and target clusters are from different systems\n" +msgstr "clusters de origen y destino son de sistemas diferentes\n" + +#: pg_rewind.c:361 +#, c-format +msgid "clusters are not compatible with this version of pg_rewind\n" +msgstr "los clusters no son compatibles con esta versión de pg_rewind\n" + +#: pg_rewind.c:371 +#, c-format +msgid "target server needs to use either data checksums or \"wal_log_hints = on\"\n" +msgstr "el servidor de destino necesita tener sumas de verificación de datos o «wal_log_hints» activados\n" + +#: pg_rewind.c:381 +#, c-format +msgid "target server must be shut down cleanly\n" +msgstr "el directorio de destino debe estar apagado limpiamente\n" + +#: pg_rewind.c:389 +#, c-format +msgid "source data directory must be shut down cleanly\n" +msgstr "el directorio de origen debe estar apagado limpiamente\n" + +#: pg_rewind.c:456 +#, c-format +msgid "could not find common ancestor of the source and target cluster's timelines\n" +msgstr "no se pudo encontrar un ancestro común en el timeline de los clusters de origen y destino\n" + +#: pg_rewind.c:496 +#, c-format +msgid "backup label buffer too small\n" +msgstr "el búfer del backup label es demasiado pequeño\n" + +#: pg_rewind.c:518 +#, c-format +msgid "unexpected control file CRC\n" +msgstr "CRC de archivo de control inesperado\n" + +#: pg_rewind.c:528 +#, c-format +msgid "unexpected control file size %d, expected %d\n" +msgstr "tamaño del archivo de control %d inesperado, se esperaba %d\n" + +#: timeline.c:76 timeline.c:82 +#, c-format +msgid "syntax error in history file: %s\n" +msgstr "error de sintaxis en archivo de historia: %s\n" + +#: timeline.c:77 +#, c-format +msgid "Expected a numeric timeline ID.\n" +msgstr "Se esperaba un ID de timeline numérico.\n" + +#: timeline.c:83 +#, c-format +msgid "Expected a transaction log switchpoint location.\n" +msgstr "Se esperaba una ubicación de punto de cambio del registro de transacciones.\n" + +#: timeline.c:88 +#, c-format +msgid "invalid data in history file: %s\n" +msgstr "datos no válidos en archivo de historia: %s\n" + +#: timeline.c:89 +#, c-format +msgid "Timeline IDs must be in increasing sequence.\n" +msgstr "IDs de timeline debe estar en secuencia creciente.\n" + +#: timeline.c:109 +#, c-format +msgid "invalid data in history file\n" +msgstr "datos no válidos en archivo de historia\n" + +#: timeline.c:110 +#, c-format +msgid "Timeline IDs must be less than child timeline's ID.\n" +msgstr "IDs de timeline deben ser menores que los ID de timelines «hijos».\n" + +#: xlogreader.c:264 +#, c-format +msgid "invalid record offset at %X/%X" +msgstr "posición de registro no válida en %X/%X" + +#: xlogreader.c:272 +#, c-format +msgid "contrecord is requested by %X/%X" +msgstr "contrecord solicitado por %X/%X" + +#: xlogreader.c:312 xlogreader.c:603 +#, c-format +msgid "invalid record length at %X/%X" +msgstr "largo de registro no válido en %X/%X" + +#: xlogreader.c:326 +#, c-format +msgid "record length %u at %X/%X too long" +msgstr "largo de registro %u en %X/%X demasiado largo" + +#: xlogreader.c:367 +#, c-format +msgid "there is no contrecord flag at %X/%X" +msgstr "no hay bandera de contrecord en %X/%X" + +#: xlogreader.c:380 +#, c-format +msgid "invalid contrecord length %u at %X/%X" +msgstr "largo de contrecord %u no válido en %X/%X" + +#: xlogreader.c:610 +#, 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:624 xlogreader.c:641 +#, 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:678 +#, 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:711 +#, 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:725 xlogreader.c:776 +#, 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:751 +#, c-format +msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s" +msgstr "archivo WAL es de un sistema de bases de datos distinto: identificador de sistema en archivo WAL es %s, identificador en pg_control es %s" + +#: xlogreader.c:758 +#, c-format +msgid "WAL file is from different database system: incorrect XLOG_SEG_SIZE in page header" +msgstr "archivo WAL es de un sistema de bases de datos distinto: XLOG_SEG_SIZE incorrecto en cabecera de página" + +#: xlogreader.c:764 +#, 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:790 +#, 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:815 +#, 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:1024 +#, c-format +msgid "out-of-order block_id %u at %X/%X" +msgstr "block_id %u fuera de orden en %X/%X" + +#: xlogreader.c:1046 +#, 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:1053 +#, 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:1086 +#, 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:1102 +#, 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:1117 +#, 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:1132 +#, 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:1148 +#, 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:1160 +#, c-format +msgid "invalid block_id %u at %X/%X" +msgstr "block_id %u no válido en %X/%X" + +#: xlogreader.c:1225 +#, c-format +msgid "record with invalid length at %X/%X" +msgstr "registro con largo no válido en %X/%X" + +#: xlogreader.c:1314 +#, 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/it.po b/src/bin/pg_rewind/po/it.po new file mode 100644 index 0000000000000..c1c8febf519de --- /dev/null +++ b/src/bin/pg_rewind/po/it.po @@ -0,0 +1,799 @@ +# +# Translation of pg_rewind to Italian +# PostgreSQL Project +# +# Associazione Culturale ITPUG - Italian PostgreSQL Users Group +# http://www.itpug.org/ - info@itpug.org +# +# Traduttori: +# * Daniele Varrazzo +# +# Copyright (c) 2010, Associazione Culturale ITPUG +# Distributed under the same license of the PostgreSQL project +# +msgid "" +msgstr "" +"Project-Id-Version: pg_rewind (PostgreSQL) 9.5\n" +"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" +"POT-Creation-Date: 2015-07-06 21:14+0000\n" +"PO-Revision-Date: 2015-07-07 02:32+0100\n" +"Last-Translator: Daniele Varrazzo \n" +"Language-Team: Gruppo traduzioni ITPUG \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Generator: Poedit 1.5.4\n" + +#: ../../../src/backend/access/transam/xlogreader.c:267 +#, c-format +msgid "invalid record offset at %X/%X" +msgstr "offset del record non valido a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:275 +#, c-format +msgid "contrecord is requested by %X/%X" +msgstr "contrecord richiesto da %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:315 +#: ../../../src/backend/access/transam/xlogreader.c:606 +#, c-format +msgid "invalid record length at %X/%X" +msgstr "lunghezza del record non valida a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:329 +#, c-format +msgid "record length %u at %X/%X too long" +msgstr "lunghezza del record %u a %X/%X eccessiva" + +#: ../../../src/backend/access/transam/xlogreader.c:370 +#, c-format +msgid "there is no contrecord flag at %X/%X" +msgstr "non c'è un flag di contrecord a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:383 +#, c-format +msgid "invalid contrecord length %u at %X/%X" +msgstr "lunghezza di contrecord %u non valida a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:613 +#, c-format +msgid "invalid resource manager ID %u at %X/%X" +msgstr "ID di gestione risorse %u non valido a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:627 +#: ../../../src/backend/access/transam/xlogreader.c:644 +#, c-format +msgid "record with incorrect prev-link %X/%X at %X/%X" +msgstr "record con link-precedente %X/%X non corretto a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:681 +#, c-format +msgid "incorrect resource manager data checksum in record at %X/%X" +msgstr "checksum dei dati del manager di risorse non corretto nel record a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:714 +#, c-format +msgid "invalid magic number %04X in log segment %s, offset %u" +msgstr "numero magico %04X non valido nel segmento di log %s, offset %u" + +#: ../../../src/backend/access/transam/xlogreader.c:728 +#: ../../../src/backend/access/transam/xlogreader.c:779 +#, c-format +msgid "invalid info bits %04X in log segment %s, offset %u" +msgstr "bit di info %04X non validi nel segmento di log %s, offset %u" + +#: ../../../src/backend/access/transam/xlogreader.c:754 +#, c-format +msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s." +msgstr "Il file di WAL è di un database diverso: l'identificatore del file di WAL del database è %s, l'identificatore di pg_control del database è %s." + +#: ../../../src/backend/access/transam/xlogreader.c:761 +#, c-format +msgid "WAL file is from different database system: Incorrect XLOG_SEG_SIZE in page header." +msgstr "Il file di WAL è di un database diverso: XLOG_SEG_SIZE non corretto nell'header di pagina." + +#: ../../../src/backend/access/transam/xlogreader.c:767 +#, c-format +msgid "WAL file is from different database system: Incorrect XLOG_BLCKSZ in page header." +msgstr "Il file di WAL è di un database diverso: XLOG_BLCKSZ non corretto nell'header di pagina." + +#: ../../../src/backend/access/transam/xlogreader.c:793 +#, c-format +msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" +msgstr "pageaddr inaspettato %X/%X nel segmento di log %s, offset %u" + +#: ../../../src/backend/access/transam/xlogreader.c:818 +#, c-format +msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" +msgstr "ID della timeline %u (dopo %u) fuori sequenza nel segmento di log %s, offset %u" + +#: ../../../src/backend/access/transam/xlogreader.c:1027 +#, c-format +msgid "out-of-order block_id %u at %X/%X" +msgstr "block_id fuori sequenza %u a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1049 +#, c-format +msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" +msgstr "BKPBLOCK_HAS_DATA impostato, ma dati non inclusi a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1056 +#, c-format +msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" +msgstr "BKPBLOCK_HAS_DATA non impostato, ma la lunghezza dei dati è %u a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1089 +#, c-format +msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" +msgstr "BKPIMAGE_HAS_HOLE impostato, ma offset buco %u lunghezza %u lunghezza dell'immagine del blocco %u a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1105 +#, c-format +msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" +msgstr "BKPIMAGE_HAS_HOLE non impostato, ma offset buco %u lunghezza %u a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1120 +#, c-format +msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" +msgstr "BKPIMAGE_IS_COMPRESSED impostato, ma la lunghezza dell'immagine del blocco è %u a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1135 +#, c-format +msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" +msgstr "né BKPIMAGE_HAS_HOLE né BKPIMAGE_IS_COMPRESSED impostati, ma la lunghezza dell'immagine del blocco è %u a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1151 +#, c-format +msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" +msgstr "BKPBLOCK_SAME_REL impostato ma non c'è un rel precedente a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1163 +#, c-format +msgid "invalid block_id %u at %X/%X" +msgstr "block_id %u non valido a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1228 +#, c-format +msgid "record with invalid length at %X/%X" +msgstr "record con lunghezza non valida a %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1317 +#, c-format +msgid "invalid compressed image at %X/%X, block %d" +msgstr "immagine compressa non valida a %X/%X, blocco %d" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 parsexlog.c:74 parsexlog.c:127 +#: parsexlog.c:179 +#, c-format +msgid "out of memory\n" +msgstr "memoria esaurita\n" + +#: ../../common/fe_memutils.c:92 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "impossibile duplicare il puntatore nullo (errore interno)\n" + +#: ../../common/restricted_token.c:68 +#, c-format +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: ATTENZIONE: non è possibile creare token ristretti su questa piattaforma\n" + +#: ../../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: apertura del token di processo fallita: codice di errore %lu\n" + +#: ../../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: allocazione dei SID fallita: codice di errore: %lu\n" + +#: ../../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: creazione del token ristretto fallita: codice di errore %lu\n" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: avvio del processo fallito per il comando \"%s\": codice di errore %lu\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: ri-esecuzione con token ristretto fallita: codice di errore %lu\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: lettura del codice di uscita del sottoprocesso fallita: codice di errore %lu\n" + +#: copy_fetch.c:64 +#, c-format +msgid "could not open directory \"%s\": %s\n" +msgstr "apertura della directory \"%s\" fallita: %s\n" + +#: copy_fetch.c:93 filemap.c:104 filemap.c:259 +#, c-format +msgid "could not stat file \"%s\": %s\n" +msgstr "richiesta informazioni sul file \"%s\" fallita: %s\n" + +#: copy_fetch.c:122 +#, c-format +msgid "could not read symbolic link \"%s\": %s\n" +msgstr "lettura del link simbolico \"%s\" fallita: %s\n" + +#: copy_fetch.c:125 +#, c-format +msgid "symbolic link \"%s\" target is too long\n" +msgstr "destinazione del link simbolico \"%s\" troppo lunga\n" + +#: copy_fetch.c:140 +#, c-format +msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform\n" +msgstr "\"%s\" è un link simbolico, ma i link simbolici non sono supportati su questa piattaforma\n" + +#: copy_fetch.c:147 +#, c-format +msgid "could not read directory \"%s\": %s\n" +msgstr "lettura della directory \"%s\" fallita: %s\n" + +#: copy_fetch.c:151 +#, c-format +msgid "could not close directory \"%s\": %s\n" +msgstr "chiusura della directory \"%s\" fallita: %s\n" + +#: copy_fetch.c:171 +#, c-format +msgid "could not open source file \"%s\": %s\n" +msgstr "apertura del file di origine \"%s\" fallita: %s\n" + +#: copy_fetch.c:175 +#, c-format +msgid "could not seek in source file: %s\n" +msgstr "spostamento nel file di origine fallito: %s\n" + +#: copy_fetch.c:192 file_ops.c:301 +#, c-format +msgid "could not read file \"%s\": %s\n" +msgstr "lettura del file \"%s\" fallita: %s\n" + +#: copy_fetch.c:195 +#, c-format +msgid "unexpected EOF while reading file \"%s\"\n" +msgstr "fine file inattesa leggendo il file \"%s\"\n" + +#: copy_fetch.c:202 +#, c-format +msgid "could not close file \"%s\": %s\n" +msgstr "chiusura del file \"%s\" fallita: %s\n" + +#: file_ops.c:64 +#, c-format +msgid "could not open target file \"%s\": %s\n" +msgstr "apertura del file di destinazione \"%s\" fallita: %s\n" + +#: file_ops.c:78 +#, c-format +msgid "could not close target file \"%s\": %s\n" +msgstr "chiusura del file di destinazione \"%s\" fallita: %s\n" + +#: file_ops.c:99 +#, c-format +msgid "could not seek in target file \"%s\": %s\n" +msgstr "spostamento nel file di destinazione \"%s\" fallito: %s\n" + +#: file_ops.c:115 +#, c-format +msgid "could not write file \"%s\": %s\n" +msgstr "scrittura nel file \"%s\" fallita: %s\n" + +#: file_ops.c:165 +#, c-format +msgid "invalid action (CREATE) for regular file\n" +msgstr "azione non valida (CREATE) per file regolari\n" + +#: file_ops.c:180 +#, c-format +msgid "could not remove file \"%s\": %s\n" +msgstr "rimozione del file \"%s\" fallita: %s\n" + +#: file_ops.c:197 +#, c-format +msgid "could not open file \"%s\" for truncation: %s\n" +msgstr "apertura del file \"%s\" per troncamento fallita: %s\n" + +#: file_ops.c:201 +#, c-format +msgid "could not truncate file \"%s\" to %u bytes: %s\n" +msgstr "troncamento del file \"%s\" a %u byte fallita: %s\n" + +#: file_ops.c:217 +#, c-format +msgid "could not create directory \"%s\": %s\n" +msgstr "creazione della directory \"%s\" fallita: %s\n" + +#: file_ops.c:231 +#, c-format +msgid "could not remove directory \"%s\": %s\n" +msgstr "rimozione della directory \"%s\" fallita: %s\n" + +#: file_ops.c:245 +#, c-format +msgid "could not create symbolic link at \"%s\": %s\n" +msgstr "creazione del link simbolico a \"%s\" fallita: %s\n" + +#: file_ops.c:259 +#, c-format +msgid "could not remove symbolic link \"%s\": %s\n" +msgstr "rimozione del link simbolico \"%s\" fallita: %s\n" + +#: file_ops.c:289 file_ops.c:293 +#, c-format +msgid "could not open file \"%s\" for reading: %s\n" +msgstr "apertura del file \"%s\" in lettura fallita: %s\n" + +#: filemap.c:96 +#, c-format +msgid "data file \"%s\" in source is not a regular file\n" +msgstr "il file di dati di origine \"%s\" non è un file regolare\n" + +#: filemap.c:118 +#, c-format +msgid "\"%s\" is not a directory\n" +msgstr "\"%s\" non è una directory\n" + +#: filemap.c:141 +#, c-format +msgid "\"%s\" is not a symbolic link\n" +msgstr "\"%s\" non è un link simbolico\n" + +#: filemap.c:153 +#, c-format +msgid "\"%s\" is not a regular file\n" +msgstr "\"%s\" non è un file regolare\n" + +#: filemap.c:271 +#, c-format +msgid "source file list is empty\n" +msgstr "la lista dei file di origine è vuota\n" + +#: filemap.c:387 +#, c-format +msgid "unexpected page modification for directory or symbolic link \"%s\"\n" +msgstr "modifica di pagina imprevista per la directory o il link simbolico \"%s\"\n" + +#: libpq_fetch.c:55 +#, c-format +msgid "could not connect to server: %s" +msgstr "connessione al server fallita: %s" + +#: libpq_fetch.c:58 +#, c-format +msgid "connected to server\n" +msgstr "connesso al server\n" + +#: libpq_fetch.c:68 +#, c-format +msgid "source server must not be in recovery mode\n" +msgstr "il server di origine non dev'essere in modalità di recupero\n" + +#: libpq_fetch.c:78 +#, c-format +msgid "full_page_writes must be enabled in the source server\n" +msgstr "full_page_writes dev'essere abilitato nel server di origine\n" + +#: libpq_fetch.c:94 +#, c-format +msgid "error running query (%s) in source server: %s" +msgstr "errore nell'esecuzione della query (%s) nel server di origine: %s" + +#: libpq_fetch.c:99 +#, c-format +msgid "unexpected result set from query\n" +msgstr "risultato imprevisto dalla query\n" + +#: libpq_fetch.c:122 +#, c-format +msgid "unrecognized result \"%s\" for current XLOG insert location\n" +msgstr "risultato \"%s\" non riconosciuto per la locazione di inserimento XLOG corrente\n" + +#: libpq_fetch.c:170 +#, c-format +msgid "could not fetch file list: %s" +msgstr "ricezione della lista dei file fallita: %s" + +#: libpq_fetch.c:175 +#, c-format +msgid "unexpected result set while fetching file list\n" +msgstr "risultato imprevisto ricevendo la lista dei file\n" + +#: libpq_fetch.c:222 +#, c-format +msgid "could not send query: %s" +msgstr "invio della query non riuscito: %s" + +#: libpq_fetch.c:224 +#, c-format +msgid "getting file chunks\n" +msgstr "ricezione blocchi del file\n" + +#: libpq_fetch.c:227 +#, c-format +msgid "could not set libpq connection to single row mode\n" +msgstr "impostazione della connessione libpq in modalità riga singola fallita\n" + +#: libpq_fetch.c:247 +#, c-format +msgid "unexpected result while fetching remote files: %s\n" +msgstr "risultato imprevisto ricevendo i file remoti: %s\n" + +#: libpq_fetch.c:253 +#, c-format +msgid "unexpected result set size while fetching remote files\n" +msgstr "dimensione del risultato imprevisto ricevendo i file remoti\n" + +#: libpq_fetch.c:259 +#, c-format +msgid "unexpected data types in result set while fetching remote files: %u %u %u\n" +msgstr "tipo di dati imprevisto nel risultato ricevendo i file remoti: %u %u %u\n" + +#: libpq_fetch.c:267 +#, c-format +msgid "unexpected result format while fetching remote files\n" +msgstr "formato del risultato imprevisto ricevendo i file remoti\n" + +#: libpq_fetch.c:273 +#, c-format +msgid "unexpected null values in result while fetching remote files\n" +msgstr "valori null non previsti nel risultato ricevendo i file remoti\n" + +#: libpq_fetch.c:277 +#, c-format +msgid "unexpected result length while fetching remote files\n" +msgstr "lunghezza del risultato non prevista ricevendo i file remoti\n" + +#: libpq_fetch.c:299 +#, c-format +msgid "received NULL chunk for file \"%s\", file has been deleted\n" +msgstr "ricevuto blocco NULL per il file \"%s\", il file è stato cancellato\n" + +#: libpq_fetch.c:306 +#, c-format +msgid "received chunk for file \"%s\", offset %d, size %d\n" +msgstr "ricevuto blocco per il file \"%s\", offset %d, dimensione %d\n" + +#: libpq_fetch.c:335 +#, c-format +msgid "could not fetch remote file \"%s\": %s" +msgstr "ricezione del file remoto \"%s\" fallita: %s" + +#: libpq_fetch.c:340 +#, c-format +msgid "unexpected result set while fetching remote file \"%s\"\n" +msgstr "risultato inatteso leggendo il file remoto \"%s\"\n" + +#: libpq_fetch.c:349 +#, c-format +msgid "fetched file \"%s\", length %d\n" +msgstr "ricevuto il file \"%s\", lunghezza %d\n" + +#: libpq_fetch.c:381 +#, c-format +msgid "could not send COPY data: %s" +msgstr "invio dei dati di COPY fallito: %s" + +#: libpq_fetch.c:407 +#, c-format +msgid "could not create temporary table: %s" +msgstr "creazione della tabella temporanea fallita: %s" + +#: libpq_fetch.c:414 +#, c-format +msgid "could not send file list: %s" +msgstr "invio della lista dei file fallito: %s" + +#: libpq_fetch.c:455 +#, c-format +msgid "could not send end-of-COPY: %s" +msgstr "invio del fine-COPY fallito: %s" + +#: libpq_fetch.c:461 +#, c-format +msgid "unexpected result while sending file list: %s" +msgstr "risultato imprevisto inviando la lista dei file: %s" + +#: logging.c:57 +msgid "Failure, exiting\n" +msgstr "Errore, uscita\n" + +#: logging.c:140 +#, c-format +msgid "%*s/%s kB (%d%%) copied" +msgstr "%*s/%s kB (%d%%) copiati" + +#: parsexlog.c:87 parsexlog.c:133 +#, c-format +msgid "could not read WAL record at %X/%X: %s\n" +msgstr "lettura del record WAL a %X/%X fallita: %s\n" + +#: parsexlog.c:91 parsexlog.c:136 +#, c-format +msgid "could not read WAL record at %X/%X\n" +msgstr "lettura del record WAL a %X/%X fallita\n" + +#: parsexlog.c:191 +#, c-format +msgid "could not find previous WAL record at %X/%X: %s\n" +msgstr "ricerca del file WAL precedente a %X/%X fallita: %s\n" + +#: parsexlog.c:195 +#, c-format +msgid "could not find previous WAL record at %X/%X\n" +msgstr "ricerca del file WAL precedente a %X/%X fallita\n" + +#: parsexlog.c:268 +#, c-format +msgid "could not open file \"%s\": %s\n" +msgstr "apertura del file \"%s\" fallita: %s\n" + +#: parsexlog.c:282 +#, c-format +msgid "could not seek in file \"%s\": %s\n" +msgstr "spostamento nel file \"%s\" fallito: %s\n" + +#: parsexlog.c:289 +#, c-format +msgid "could not read from file \"%s\": %s\n" +msgstr "lettura dal file \"%s\" fallita: %s\n" + +#: parsexlog.c:357 +#, c-format +msgid "" +"WAL record modifies a relation, but record type is not recognized\n" +"lsn: %X/%X, rmgr: %s, info: %02X\n" +msgstr "" +"il file WAL modifica una relazione, ma il tipo di record non è riconosciuto\n" +"lsn: %X/%X, rmgr: %s, info: %02X\n" + +#: pg_rewind.c:59 +#, c-format +msgid "" +"%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n" +"\n" +msgstr "" +"%s risincronizza un cluster PostgreSQL con un'altra copia del cluster.\n" +"\n" + +#: pg_rewind.c:60 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]...\n" +"\n" +msgstr "" +"Utilizzo:\n" +" %s [OPZIONE]...\n" +"\n" + +#: pg_rewind.c:61 +#, c-format +msgid "Options:\n" +msgstr "Opzioni:\n" + +#: pg_rewind.c:62 +#, c-format +msgid " -D, --target-pgdata=DIRECTORY existing data directory to modify\n" +msgstr " -D, --target-pgdata=DIRECTORY directory dati esistente da modificare\n" + +#: pg_rewind.c:63 +#, c-format +msgid " --source-pgdata=DIRECTORY source data directory to sync with\n" +msgstr " --source-pgdata=DIRECTORY directory dati di partenza con cui sincronizzare\n" + +#: pg_rewind.c:64 +#, c-format +msgid " --source-server=CONNSTR source server to sync with\n" +msgstr " --source-server=CONNSTR server di origine con cui sincronizzare\n" + +#: pg_rewind.c:65 +#, c-format +msgid " -n, --dry-run stop before modifying anything\n" +msgstr " -n, --dry-run fermati prima di modificare qualunque cosa\n" + +#: pg_rewind.c:66 +#, c-format +msgid " -P, --progress write progress messages\n" +msgstr " -P, --progress stampa messaggi di avanzamento\n" + +#: pg_rewind.c:67 +#, c-format +msgid " --debug write a lot of debug messages\n" +msgstr " --debug stampa una gran quantità di messaggi di debug\n" + +#: pg_rewind.c:68 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version stampa informazioni sulla versione ed esci\n" + +#: pg_rewind.c:69 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help mostra questo aiuto ed esci\n" + +#: pg_rewind.c:70 +#, c-format +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Puoi segnalare eventuali bug a .\n" + +#: pg_rewind.c:125 pg_rewind.c:156 pg_rewind.c:163 pg_rewind.c:171 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Prova \"%s --help\" per maggiori informazioni.\n" + +#: pg_rewind.c:155 +#, c-format +msgid "%s: no source specified (--source-pgdata or --source-server)\n" +msgstr "%s: nessuna origine specificata (--source-pgdata o --source-server)\n" + +#: pg_rewind.c:162 +#, c-format +msgid "%s: no target data directory specified (--target-pgdata)\n" +msgstr "%s: nessuna directory di dati di destinazione specificata (--target-pgdata)\n" + +#: pg_rewind.c:169 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: troppi argomenti nella riga di comando (il primo è \"%s\")\n" + +#: pg_rewind.c:184 +#, c-format +msgid "cannot be executed by \"root\"\n" +msgstr "non può essere eseguito da \"root\"\n" + +#: pg_rewind.c:185 +#, c-format +msgid "You must run %s as the PostgreSQL superuser.\n" +msgstr "È obbligatorio eseguire %s come superutente di PostgreSQL.\n" + +#: pg_rewind.c:215 +#, c-format +msgid "source and target cluster are on the same timeline\n" +msgstr "i cluster di origine e di destinazione sono sulla stessa linea temporale\n" + +#: pg_rewind.c:218 +#, c-format +msgid "The servers diverged at WAL position %X/%X on timeline %u.\n" +msgstr "I server sono andati a divergere alla posizione WAL %X/%X sulla timeline %u.\n" + +#: pg_rewind.c:253 +#, c-format +msgid "No rewind required.\n" +msgstr "Rewind non richiesto.\n" + +#: pg_rewind.c:259 +#, c-format +msgid "Rewinding from last common checkpoint at %X/%X on timeline %u\n" +msgstr "Riavvolgimento all'ultimo checkpoint in comune a %X/%X sulla timeline %u\n" + +#: pg_rewind.c:267 +#, c-format +msgid "reading source file list\n" +msgstr "lettura della lista dei file di origine\n" + +#: pg_rewind.c:269 +#, c-format +msgid "reading target file list\n" +msgstr "lettura della lista dei file di destinazione\n" + +#: pg_rewind.c:279 +#, c-format +msgid "reading WAL in target\n" +msgstr "lettura del WAL nella destinazione\n" + +#: pg_rewind.c:296 +#, c-format +msgid "need to copy %lu MB (total source directory size is %lu MB)\n" +msgstr "è necessario copiare %lu MB (la dimensione totale della directory di origine è di %lu MB)\n" + +#: pg_rewind.c:313 +#, c-format +msgid "" +"\n" +"creating backup label and updating control file\n" +msgstr "" +"\n" +"creazione dell'etichetta di backup e aggiornamento del file di controllo\n" + +#: pg_rewind.c:341 +#, c-format +msgid "Done!\n" +msgstr "Fatto!\n" + +#: pg_rewind.c:353 +#, c-format +msgid "source and target clusters are from different systems\n" +msgstr "i cluster di origine e di destinazione sono di sistemi diversi\n" + +#: pg_rewind.c:361 +#, c-format +msgid "clusters are not compatible with this version of pg_rewind\n" +msgstr "i cluster non sono compatibili con questa versione di pg_rewind\n" + +#: pg_rewind.c:371 +#, c-format +msgid "target server needs to use either data checksums or \"wal_log_hints = on\"\n" +msgstr "il server di destinazione deve usare o il checksum dei dati o \"wal_log_hints = on\"\n" + +#: pg_rewind.c:381 +#, c-format +msgid "target server must be shut down cleanly\n" +msgstr "il server di destinazione dev'essere arrestato in maniera pulita\n" + +#: pg_rewind.c:389 +#, c-format +msgid "source data directory must be shut down cleanly\n" +msgstr "la directory dei dati di origine deve essere arrestata in maniera pulita\n" + +#: pg_rewind.c:456 +#, c-format +msgid "could not find common ancestor of the source and target cluster's timelines\n" +msgstr "impossibile trovare un antenato comune nelle timeline dei cluster di origine e di destinazione\n" + +#: pg_rewind.c:496 +#, c-format +msgid "backup label buffer too small\n" +msgstr "buffer dell'etichetta di backup troppo piccolo\n" + +#: pg_rewind.c:518 +#, c-format +msgid "unexpected control file CRC\n" +msgstr "CRC del file di controllo imprevisto\n" + +#: pg_rewind.c:528 +#, c-format +msgid "unexpected control file size %d, expected %d\n" +msgstr "dimensione del file di controllo %d imprevista, atteso %d\n" + +#: timeline.c:76 timeline.c:82 +#, c-format +msgid "syntax error in history file: %s\n" +msgstr "errore di sintassi nel file di storia: %s\n" + +#: timeline.c:77 +#, c-format +msgid "Expected a numeric timeline ID.\n" +msgstr "Atteso un ID numerico di timeline.\n" + +#: timeline.c:83 +#, c-format +msgid "Expected an XLOG switchpoint location.\n" +msgstr "Attesa una locazione di punto di switch XLOG.\n" + +#: timeline.c:88 +#, c-format +msgid "invalid data in history file: %s\n" +msgstr "dati non validi nel file di storia: %s\n" + +#: timeline.c:89 +#, c-format +msgid "Timeline IDs must be in increasing sequence.\n" +msgstr "Gli ID di timeline devono essere in sequenza crescente.\n" + +#: timeline.c:109 +#, c-format +msgid "invalid data in history file\n" +msgstr "dati non validi nel file di storia\n" + +#: timeline.c:110 +#, c-format +msgid "Timeline IDs must be less than child timeline's ID.\n" +msgstr "Gli ID della timeline devono essere meno dell'ID della timeline del figlio.\n" diff --git a/src/bin/pg_rewind/po/pl.po b/src/bin/pg_rewind/po/pl.po new file mode 100644 index 0000000000000..e4bcce79c6c78 --- /dev/null +++ b/src/bin/pg_rewind/po/pl.po @@ -0,0 +1,813 @@ +# LANGUAGE message translation file for pg_rewind +# Copyright (C) 2015 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# FIRST AUTHOR , 2015. +# grzegorz , 2015. +msgid "" +msgstr "" +"Project-Id-Version: pg_rewind (PostgreSQL) 9.5\n" +"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" +"POT-Creation-Date: 2015-08-15 18:44+0000\n" +"PO-Revision-Date: 2015-08-16 16:37+0200\n" +"Last-Translator: grzegorz \n" +"Language-Team: begina.felicysym@wp.eu\n" +"Language: 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" + +#: ../../../src/backend/access/transam/xlogreader.c:264 +#, c-format +msgid "invalid record offset at %X/%X" +msgstr "niepoprawne przesunięcie rekordu w %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:272 +#, c-format +msgid "contrecord is requested by %X/%X" +msgstr "wymagany kontrekord w %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:312 +#: ../../../src/backend/access/transam/xlogreader.c:603 +#, c-format +msgid "invalid record length at %X/%X" +msgstr "niepoprawna długość rekordu w %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:326 +#, c-format +msgid "record length %u at %X/%X too long" +msgstr "za duża długość rekordu %u w %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:367 +#, c-format +msgid "there is no contrecord flag at %X/%X" +msgstr "brak flagi kontrekordu na %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:380 +#, c-format +msgid "invalid contrecord length %u at %X/%X" +msgstr "niepoprawna długość kontrekordu %u na %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:610 +#, c-format +msgid "invalid resource manager ID %u at %X/%X" +msgstr "niepoprawny ID menażera zasobów %u w %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:624 +#: ../../../src/backend/access/transam/xlogreader.c:641 +#, c-format +msgid "record with incorrect prev-link %X/%X at %X/%X" +msgstr "rekord z niepoprawnym poprz-linkiem %X/%X w %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:678 +#, c-format +msgid "incorrect resource manager data checksum in record at %X/%X" +msgstr "niepoprawna suma kontrolna danych menadżera zasobów w rekordzie w %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:711 +#, c-format +msgid "invalid magic number %04X in log segment %s, offset %u" +msgstr "" +"niepoprawny magiczny numer %04X w segmencie dziennika %s, przesunięcie %u" + +#: ../../../src/backend/access/transam/xlogreader.c:725 +#: ../../../src/backend/access/transam/xlogreader.c:776 +#, c-format +msgid "invalid info bits %04X in log segment %s, offset %u" +msgstr "" +"niepoprawny bity informacji %04X w segmencie dziennika %s, przesunięcie %u" + +#: ../../../src/backend/access/transam/xlogreader.c:751 +#, c-format +msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s." +msgstr "" +"plik WAL pochodzi z innego systemu bazy danych: identyfikator systemu bazy " +"danych z pliku WAL to %s, a identyfikator systemu bazy danych z pg_control " +"to %s." + +#: ../../../src/backend/access/transam/xlogreader.c:758 +#, c-format +msgid "WAL file is from different database system: Incorrect XLOG_SEG_SIZE in page header." +msgstr "" +"plik WAL pochodzi z innego systemu bazy danych: Niepoprawny XLOG_SEG_SIZE w " +"nagłówku strony." + +#: ../../../src/backend/access/transam/xlogreader.c:764 +#, c-format +msgid "WAL file is from different database system: Incorrect XLOG_BLCKSZ in page header." +msgstr "" +"plik WAL pochodzi z innego systemu bazy danych: Niepoprawny XLOG_BLCKSZ w " +"nagłówku strony." + +#: ../../../src/backend/access/transam/xlogreader.c:790 +#, c-format +msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" +msgstr "nieoczekiwany adrstrony %X/%X w segmencie dziennika %s, przesunięcie %u" + +#: ../../../src/backend/access/transam/xlogreader.c:815 +#, c-format +msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" +msgstr "" +"nieoczekiwany ID linii czasu %u (po %u) w segmencie dziennika %s, " +"przesunięcie %u" + +#: ../../../src/backend/access/transam/xlogreader.c:1024 +#, c-format +msgid "out-of-order block_id %u at %X/%X" +msgstr "poza porządkiem block_id %u na %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1046 +#, c-format +msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" +msgstr "BKPBLOCK_HAS_DATA jest ustawione, ale nie załączono danych na %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1053 +#, c-format +msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" +msgstr "BKPBLOCK_HAS_DATA nie jest ustawione, długość danych to %u na %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1086 +#, c-format +msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" +msgstr "" +"BKPIMAGE_HAS_HOLE jest ustawione, ale przesunięcie dziury %u długości %u " +"blok obrazu o długości %u na %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1102 +#, c-format +msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" +msgstr "" +"BKPIMAGE_HAS_HOLE nie jest ustawione, ale przesunięcie dziury %u o długości " +"%u na %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1117 +#, c-format +msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" +msgstr "" +"BKPIMAGE_IS_COMPRESSED jest ustawione, ale blok obrazu o długości %u na %X/%" +"X" + +#: ../../../src/backend/access/transam/xlogreader.c:1132 +#, c-format +msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" +msgstr "" +"ani BKPIMAGE_HAS_HOLE ani BKPIMAGE_IS_COMPRESSED nie jest ustawione, ale " +"długość bloku obrazu to %u na %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1148 +#, c-format +msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" +msgstr "BKPBLOCK_SAME_REL jest ustawione ale brak poprzedniej rel na %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1160 +#, c-format +msgid "invalid block_id %u at %X/%X" +msgstr "niepoprawny block_id %u na %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1225 +#, c-format +msgid "record with invalid length at %X/%X" +msgstr "rekord o niepoprawnej długości w %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1314 +#, c-format +msgid "invalid compressed image at %X/%X, block %d" +msgstr "niepoprawny skompresowany obraz na %X/%X, blok %d" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 parsexlog.c:74 parsexlog.c:127 +#: parsexlog.c:179 +#, c-format +msgid "out of memory\n" +msgstr "brak pamięci\n" + +#: ../../common/fe_memutils.c:92 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "nie można powielić pustego wskazania (błąd wewnętrzny)\n" + +#: ../../common/restricted_token.c:68 +#, 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" + +#: ../../common/restricted_token.c:77 +#, 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" + +#: ../../common/restricted_token.c:90 +#, 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" + +#: ../../common/restricted_token.c:110 +#, 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" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "%s: nie udało się uruchomić procesu dla polecenia \"%s\": kod błędu %lu\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "%s: nie udało się ponownie wykonać ograniczonego tokena: %lu\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: nie udało uzyskać kodu wyjścia z usługi podrzędnej: kod błędu %lu\n" + +#: copy_fetch.c:64 +#, c-format +msgid "could not open directory \"%s\": %s\n" +msgstr "nie można otworzyć katalogu \"%s\": %s\n" + +#: copy_fetch.c:93 filemap.c:112 filemap.c:267 +#, c-format +msgid "could not stat file \"%s\": %s\n" +msgstr "nie można wykonać stat na pliku \"%s\": %s\n" + +#: copy_fetch.c:122 +#, c-format +msgid "could not read symbolic link \"%s\": %s\n" +msgstr "nie można odczytać linku symbolicznego \"%s\": %s\n" + +#: copy_fetch.c:125 +#, c-format +msgid "symbolic link \"%s\" target is too long\n" +msgstr "cel linku symbolicznego \"%s\" jest za długi\n" + +#: copy_fetch.c:140 +#, c-format +msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform\n" +msgstr "\"%s\" jest dowiązaniem symbolicznym, ale linki symboliczne nie są obsługiwane " +"na tej platformie\n" + +#: copy_fetch.c:147 +#, c-format +msgid "could not read directory \"%s\": %s\n" +msgstr "nie można czytać katalogu \"%s\": %s\n" + +#: copy_fetch.c:151 +#, c-format +msgid "could not close directory \"%s\": %s\n" +msgstr "nie można zamknąć katalogu \"%s\": %s\n" + +#: copy_fetch.c:171 +#, c-format +msgid "could not open source file \"%s\": %s\n" +msgstr "nie można otworzyć pliku źródłowego \"%s\": %s\n" + +#: copy_fetch.c:175 +#, c-format +msgid "could not seek in source file: %s\n" +msgstr "nie można pozycjonować w pliku wyjścia %s\n" + +#: copy_fetch.c:192 file_ops.c:301 +#, c-format +msgid "could not read file \"%s\": %s\n" +msgstr "nie można czytać pliku \"%s\": %s\n" + +#: copy_fetch.c:195 +#, c-format +msgid "unexpected EOF while reading file \"%s\"\n" +msgstr "nieoczekiwany EOF podczas czytania pliku \"%s\"\n" + +#: copy_fetch.c:202 +#, c-format +msgid "could not close file \"%s\": %s\n" +msgstr "nie można zamknąć pliku \"%s\": %s\n" + +#: file_ops.c:64 +#, c-format +msgid "could not open target file \"%s\": %s\n" +msgstr "nie można otworzyć pliku docelowego \"%s\": %s\n" + +#: file_ops.c:78 +#, c-format +msgid "could not close target file \"%s\": %s\n" +msgstr "nie można zamknąć pliku docelowego \"%s\": %s\n" + +#: file_ops.c:99 +#, c-format +msgid "could not seek in target file \"%s\": %s\n" +msgstr "nie można przeszukiwać pliku docelowego \"%s\": %s\n" + +#: file_ops.c:115 +#, c-format +msgid "could not write file \"%s\": %s\n" +msgstr "nie można pisać do pliku \"%s\": %s\n" + +#: file_ops.c:165 +#, c-format +msgid "invalid action (CREATE) for regular file\n" +msgstr "nieprawidłowe działanie (CREATE) dla zwykłego pliku\n" + +#: file_ops.c:180 +#, c-format +msgid "could not remove file \"%s\": %s\n" +msgstr "nie można usunąć pliku \"%s\": %s\n" + +#: file_ops.c:197 +#, c-format +msgid "could not open file \"%s\" for truncation: %s\n" +msgstr "nie można otworzyć pliku \"%s\" do obcięcia: %s\n" + +#: file_ops.c:201 +#, c-format +msgid "could not truncate file \"%s\" to %u bytes: %s\n" +msgstr "nie można obciąć pliku \"%s\" do %u bajtów: %s\n" + +#: file_ops.c:217 +#, c-format +msgid "could not create directory \"%s\": %s\n" +msgstr "nie można utworzyć folderu \"%s\": %s\n" + +#: file_ops.c:231 +#, c-format +msgid "could not remove directory \"%s\": %s\n" +msgstr "nie można usunąć folderu \"%s\": %s\n" + +#: file_ops.c:245 +#, c-format +msgid "could not create symbolic link at \"%s\": %s\n" +msgstr "nie można utworzyć linku symbolicznego na \"%s\": %s\n" + +#: file_ops.c:259 +#, c-format +msgid "could not remove symbolic link \"%s\": %s\n" +msgstr "nie można usunąć linku symbolicznego \"%s\": %s\n" + +#: file_ops.c:289 file_ops.c:293 +#, c-format +msgid "could not open file \"%s\" for reading: %s\n" +msgstr "nie można otworzyć pliku \"%s\" do odczytu: %s\n" + +#: filemap.c:104 +#, c-format +msgid "data file \"%s\" in source is not a regular file\n" +msgstr "plik danych źródła \"%s\" nie jest zwykłym plikiem\n" + +#: filemap.c:126 +#, c-format +msgid "\"%s\" is not a directory\n" +msgstr "\"%s\" nie jest katalogiem\n" + +#: filemap.c:149 +#, c-format +msgid "\"%s\" is not a symbolic link\n" +msgstr "\"%s\" nie jest dowiązaniem symbolicznym\n" + +#: filemap.c:161 +#, c-format +msgid "\"%s\" is not a regular file\n" +msgstr "\"%s\" nie jest zwykłym plikiem\n" + +#: filemap.c:279 +#, c-format +msgid "source file list is empty\n" +msgstr "źródłowa lista plików jest pusta\n" + +#: filemap.c:401 +#, c-format +msgid "unexpected page modification for directory or symbolic link \"%s\"\n" +msgstr "nieoczekiwana modyfikacja strony dla folderu lub linku symbolicznego \"%s\"\n" + +#: libpq_fetch.c:55 +#, c-format +msgid "could not connect to server: %s" +msgstr "nie można połączyć z serwerem: %s" + +#: libpq_fetch.c:58 +#, c-format +msgid "connected to server\n" +msgstr "połączono z serwerem\n" + +#: libpq_fetch.c:68 +#, c-format +msgid "source server must not be in recovery mode\n" +msgstr "serwer źródłowy nie może być w trybie odzyskiwania\n" + +#: libpq_fetch.c:78 +#, c-format +msgid "full_page_writes must be enabled in the source server\n" +msgstr "full_page_writes musi być włączony na serwerze źródłowym\n" + +#: libpq_fetch.c:95 +#, c-format +msgid "error running query (%s) in source server: %s" +msgstr "błąd wykonania zapytania (%s) na serwerze źródłowym: %s" + +#: libpq_fetch.c:100 +#, c-format +msgid "unexpected result set from query\n" +msgstr "nieoczekiwany zbiór wynikowy z zapytania\n" + +#: libpq_fetch.c:123 +#, c-format +msgid "unrecognized result \"%s\" for current XLOG insert location\n" +msgstr "nierozpoznany wynik \"%s\" dla bieżącego położenia wstawiania XLOG\n" + +#: libpq_fetch.c:173 +#, c-format +msgid "could not fetch file list: %s" +msgstr "nie można pobrać listy plików: %s" + +#: libpq_fetch.c:178 +#, c-format +msgid "unexpected result set while fetching file list\n" +msgstr "nieoczekiwana zbiór wynikowy przy pobieraniu listy plików\n" + +#: libpq_fetch.c:226 +#, c-format +msgid "could not send query: %s" +msgstr "nie udało się wysłać zapytania: %s" + +#: libpq_fetch.c:228 +#, c-format +msgid "getting file chunks\n" +msgstr "pobieranie kawałków pliku\n" + +#: libpq_fetch.c:231 +#, c-format +msgid "could not set libpq connection to single row mode\n" +msgstr "nie można ustalić połączenia libpq na tryb pojedynczego wiersza\n" + +#: libpq_fetch.c:251 +#, c-format +msgid "unexpected result while fetching remote files: %s\n" +msgstr "nieoczekiwany wynik przy pobieraniu plików zdalnych: %s\n" + +#: libpq_fetch.c:257 +#, c-format +msgid "unexpected result set size while fetching remote files\n" +msgstr "nieoczekiwana długość zbioru wynikowego przy pobieraniu plików zdalnych\n" + +#: libpq_fetch.c:263 +#, c-format +msgid "unexpected data types in result set while fetching remote files: %u %u %u\n" +msgstr "nieoczekiwane typy danych w zbiorze wartości przy pobieraniu plików " +"zdalnych: %u %u %u\n" + +#: libpq_fetch.c:271 +#, c-format +msgid "unexpected result format while fetching remote files\n" +msgstr "nieoczekiwany format wyniku przy pobieraniu plików zdalnych\n" + +#: libpq_fetch.c:277 +#, c-format +msgid "unexpected null values in result while fetching remote files\n" +msgstr "nieoczekiwane wartości puste przy pobieraniu plików zdalnych\n" + +#: libpq_fetch.c:281 +#, c-format +msgid "unexpected result length while fetching remote files\n" +msgstr "nieoczekiwana długość wyniku przy pobieraniu plików zdalnych\n" + +#: libpq_fetch.c:303 +#, c-format +msgid "received NULL chunk for file \"%s\", file has been deleted\n" +msgstr "otrzymano kawałek NULL dla pliku \"%s\", plik został usunięty\n" + +#: libpq_fetch.c:310 +#, c-format +msgid "received chunk for file \"%s\", offset %d, size %d\n" +msgstr "otrzymany kawałek pliku \"%s\", pozycja %d, rozmiar %d\n" + +#: libpq_fetch.c:339 +#, c-format +msgid "could not fetch remote file \"%s\": %s" +msgstr "nie można pobrać pliku zdalnego \"%s\": %s" + +#: libpq_fetch.c:344 +#, c-format +msgid "unexpected result set while fetching remote file \"%s\"\n" +msgstr "nieoczekiwany zbiór wynikowy przy pobieraniu pliku zdalnego: \"%s\"\n" + +#: libpq_fetch.c:355 +#, c-format +msgid "fetched file \"%s\", length %d\n" +msgstr "pobrano plik \"%s\", długość %d\n" + +#: libpq_fetch.c:387 +#, c-format +msgid "could not send COPY data: %s" +msgstr "nie można wysłać danych COPY: %s" + +#: libpq_fetch.c:413 +#, c-format +msgid "could not create temporary table: %s" +msgstr "nie można utworzyć tabeli tymczasowej: %s" + +#: libpq_fetch.c:421 +#, c-format +msgid "could not send file list: %s" +msgstr "nie można przesłać listy plików: %s" + +#: libpq_fetch.c:463 +#, c-format +msgid "could not send end-of-COPY: %s" +msgstr "nie można wysłać end-of-COPY: %s" + +#: libpq_fetch.c:469 +#, c-format +msgid "unexpected result while sending file list: %s" +msgstr "nieoczekiwany wynik podczas wysyłania listy plików: %s" + +#: logging.c:57 +msgid "Failure, exiting\n" +msgstr "Niepowodzenie, wyjście\n" + +#: logging.c:140 +#, c-format +msgid "%*s/%s kB (%d%%) copied" +msgstr "%*s/%s kB (%d%%) skopiowano" + +#: parsexlog.c:87 parsexlog.c:133 +#, c-format +msgid "could not read WAL record at %X/%X: %s\n" +msgstr "nie udało się odczytać rekordu WAL na %X/%X: %s\n" + +#: parsexlog.c:91 parsexlog.c:136 +#, c-format +msgid "could not read WAL record at %X/%X\n" +msgstr "nie udało się odczytać rekordu WAL na %X/%X\n" + +#: parsexlog.c:191 +#, c-format +msgid "could not find previous WAL record at %X/%X: %s\n" +msgstr "nie udało się odnaleźć poprzedniego rekordu WAL na %X/%X: %s\n" + +#: parsexlog.c:195 +#, c-format +msgid "could not find previous WAL record at %X/%X\n" +msgstr "nie udało się odnaleźć poprzedniego rekordu WAL na %X/%X\n" + +#: parsexlog.c:268 +#, c-format +msgid "could not open file \"%s\": %s\n" +msgstr "nie można otworzyć pliku \"%s\": %s\n" + +#: parsexlog.c:282 +#, c-format +msgid "could not seek in file \"%s\": %s\n" +msgstr "nie można pozycjonować w pliku \"%s\": %s\n" + +#: parsexlog.c:289 +#, c-format +msgid "could not read from file \"%s\": %s\n" +msgstr "nie można czytać z pliku \"%s\": %s\n" + +#: parsexlog.c:357 +#, c-format +msgid "" +"WAL record modifies a relation, but record type is not recognized\n" +"lsn: %X/%X, rmgr: %s, info: %02X\n" +msgstr "" +"rekord WAL zmienia relację, butale typ rekordu nie został rozpoznany\n" +"lsn: %X/%X, rmgr: %s, info: %02X\n" + +#: pg_rewind.c:59 +#, c-format +msgid "" +"%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n" +"\n" +msgstr "" +"%s resynchronizuje klaster PostgreSQL z inną kopią tego klastra.\n" +"\n" + +#: pg_rewind.c:60 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]...\n" +"\n" +msgstr "" +"Użycie:\n" +" %s [OPCJE]...\n" +"\n" + +#: pg_rewind.c:61 +#, c-format +msgid "Options:\n" +msgstr "Opcje:\n" + +#: pg_rewind.c:62 +#, c-format +msgid " -D, --target-pgdata=DIRECTORY existing data directory to modify\n" +msgstr " -D, --target-pgdata=FOLDER istniejący folder danych do zmiany\n" + +#: pg_rewind.c:63 +#, c-format +msgid " --source-pgdata=DIRECTORY source data directory to sync with\n" +msgstr " --source-pgdata=FOLDER źródłowy folder danych do wykonania sync\n" + +#: pg_rewind.c:64 +#, c-format +msgid " --source-server=CONNSTR source server to sync with\n" +msgstr " --source-server=CONNSTR serwer źródłowy do wykonania sync\n" + +#: pg_rewind.c:65 +#, c-format +msgid " -n, --dry-run stop before modifying anything\n" +msgstr " -n, --dry-run zatrzymaj przed zmianą czegokolwiek\n" + +#: pg_rewind.c:66 +#, c-format +msgid " -P, --progress write progress messages\n" +msgstr " -P, --progress wypisz komunikaty postępu\n" + +#: pg_rewind.c:67 +#, c-format +msgid " --debug write a lot of debug messages\n" +msgstr " --debug wypisz masę komunikatów debugowania\n" + +#: pg_rewind.c:68 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version pokaż informacje o wersji i zakończ\n" + +#: pg_rewind.c:69 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help pokaż tą pomoc i zakończ działanie\n" + +#: pg_rewind.c:70 +#, c-format +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Błędy proszę przesyłać na adres .\n" + +#: pg_rewind.c:125 pg_rewind.c:156 pg_rewind.c:163 pg_rewind.c:171 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Użyj \"%s --help\" aby uzyskać więcej informacji.\n" + +#: pg_rewind.c:155 +#, c-format +msgid "%s: no source specified (--source-pgdata or --source-server)\n" +msgstr "%s: nie wskazano źródła (--source-pgdata lub --source-server)\n" + +#: pg_rewind.c:162 +#, c-format +msgid "%s: no target data directory specified (--target-pgdata)\n" +msgstr "%s: nie wskazano docelowego folderu danych (--target-pgdata)\n" + +#: pg_rewind.c:169 +#, 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_rewind.c:184 +#, c-format +msgid "cannot be executed by \"root\"\n" +msgstr "nie może być wykonywane pod \"rootem\"\n" + +#: pg_rewind.c:185 +#, c-format +msgid "You must run %s as the PostgreSQL superuser.\n" +msgstr "Musisz uruchomić %s jako superużytkownik PostgreSQL.\n" + +#: pg_rewind.c:215 +#, c-format +msgid "source and target cluster are on the same timeline\n" +msgstr "klaster źródłowy i docelowy są na tej samej linii czasowej\n" + +#: pg_rewind.c:218 +#, c-format +msgid "The servers diverged at WAL position %X/%X on timeline %u.\n" +msgstr "Serwery rozeszły się na pozycji WAL %X/%X linii czasowej %u.\n" + +#: pg_rewind.c:253 +#, c-format +msgid "No rewind required.\n" +msgstr "Przewinięcie nie jest konieczne.\n" + +#: pg_rewind.c:259 +#, c-format +msgid "Rewinding from last common checkpoint at %X/%X on timeline %u\n" +msgstr "Przewinięcie do ostatniego zgodnego punktu kontrolnego na %X/%X linii " +"czasowej %u\n" + +#: pg_rewind.c:267 +#, c-format +msgid "reading source file list\n" +msgstr "odczyt źródłowej listy plików\n" + +#: pg_rewind.c:269 +#, c-format +msgid "reading target file list\n" +msgstr "odczyt docelowej listy plików\n" + +#: pg_rewind.c:279 +#, c-format +msgid "reading WAL in target\n" +msgstr "odczyt WAL docelowy\n" + +#: pg_rewind.c:296 +#, c-format +msgid "need to copy %lu MB (total source directory size is %lu MB)\n" +msgstr "potrzeba skopiować %lu MB (pełna wielkość folderu źródłowego to %lu MB)\n" + +#: pg_rewind.c:313 +#, c-format +msgid "" +"\n" +"creating backup label and updating control file\n" +msgstr "" +"\n" +"tworzenie etykiety kopii zapasowej i aktualizacja pliku sterującego\n" + +#: pg_rewind.c:341 +#, c-format +msgid "Done!\n" +msgstr "Wykonano!\n" + +#: pg_rewind.c:353 +#, c-format +msgid "source and target clusters are from different systems\n" +msgstr "klastry źródłowy i docelowy pochodzą z innych systemów\n" + +#: pg_rewind.c:361 +#, c-format +msgid "clusters are not compatible with this version of pg_rewind\n" +msgstr "klastry nie są kompatybilne z tą wersją pg_rewind\n" + +#: pg_rewind.c:371 +#, c-format +msgid "target server needs to use either data checksums or \"wal_log_hints = on\"\n" +msgstr "serwer docelowy wymaga użycia albo sum kontrolnych albo \"wal_log_hints = on\"\n" + +#: pg_rewind.c:381 +#, c-format +msgid "target server must be shut down cleanly\n" +msgstr "serwer docelowy musi zostać czysto wyłączony\n" + +#: pg_rewind.c:389 +#, c-format +msgid "source data directory must be shut down cleanly\n" +msgstr "źródłowy folder danych musi być czysto wyłączony\n" + +#: pg_rewind.c:456 +#, c-format +msgid "could not find common ancestor of the source and target cluster's timelines\n" +msgstr "nie można znaleźć wspólnego przodka źródłowej i docelowej osi czasu klastra\n" + +#: pg_rewind.c:496 +#, c-format +msgid "backup label buffer too small\n" +msgstr "bufor etykiety kopii zapasowej jest za mały\n" + +#: pg_rewind.c:518 +#, c-format +msgid "unexpected control file CRC\n" +msgstr "nieoczekiwane CRC pliku kontrolnego\n" + +#: pg_rewind.c:528 +#, c-format +msgid "unexpected control file size %d, expected %d\n" +msgstr "nieoczekiwana długość pliku kontrolnego %d, oczekiwano %d\n" + +#: timeline.c:76 timeline.c:82 +#, c-format +msgid "syntax error in history file: %s\n" +msgstr "błąd składni w pliku historii: %s\n" + +#: timeline.c:77 +#, c-format +msgid "Expected a numeric timeline ID.\n" +msgstr "Oczekiwano numerycznego ID linii czasu.\n" + +#: timeline.c:83 +#, c-format +msgid "Expected an XLOG switchpoint location.\n" +msgstr "Oczekiwano położenia przełączenia XLOG.\n" + +#: timeline.c:88 +#, c-format +msgid "invalid data in history file: %s\n" +msgstr "niepoprawne dane w pliku historii: %s\n" + +#: timeline.c:89 +#, c-format +msgid "Timeline IDs must be in increasing sequence.\n" +msgstr "IDy linii czasu muszą być w kolejności rosnącej.\n" + +#: timeline.c:109 +#, c-format +msgid "invalid data in history file\n" +msgstr "niepoprawne dane w pliku historii\n" + +#: timeline.c:110 +#, c-format +msgid "Timeline IDs must be less than child timeline's ID.\n" +msgstr "IDy linii czasu muszą być mniejsze niż ID potomnej linii czasu.\n" diff --git a/src/bin/pg_rewind/po/ru.po b/src/bin/pg_rewind/po/ru.po new file mode 100644 index 0000000000000..ebdac9712c8b0 --- /dev/null +++ b/src/bin/pg_rewind/po/ru.po @@ -0,0 +1,857 @@ +# LANGUAGE message translation file for pg_rewind +# Copyright (C) 2015 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# +# Alexander Lakhin , 2015. +msgid "" +msgstr "" +"Project-Id-Version: pg_rewind (PostgreSQL) 9.6\n" +"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" +"POT-Creation-Date: 2015-07-22 00:14+0000\n" +"PO-Revision-Date: 2015-07-27 23:01+0300\n" +"Last-Translator: Alexander Lakhin \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<" +"=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Lokalize 1.5\n" + +#: ../../../src/backend/access/transam/xlogreader.c:267 +#, c-format +msgid "invalid record offset at %X/%X" +msgstr "неверное смещение записи: %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:275 +#, c-format +msgid "contrecord is requested by %X/%X" +msgstr "по смещению %X/%X запрошено продолжение записи" + +#: ../../../src/backend/access/transam/xlogreader.c:315 +#: ../../../src/backend/access/transam/xlogreader.c:606 +#, c-format +msgid "invalid record length at %X/%X" +msgstr "неверная длина записи по смещению %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:329 +#, c-format +msgid "record length %u at %X/%X too long" +msgstr "длина записи %u по смещению %X/%X слишком велика" + +#: ../../../src/backend/access/transam/xlogreader.c:370 +#, c-format +msgid "there is no contrecord flag at %X/%X" +msgstr "нет флага contrecord в позиции %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:383 +#, c-format +msgid "invalid contrecord length %u at %X/%X" +msgstr "неверная длина contrecord (%u) в позиции %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:613 +#, c-format +msgid "invalid resource manager ID %u at %X/%X" +msgstr "неверный ID менеджера ресурсов %u по смещению %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:627 +#: ../../../src/backend/access/transam/xlogreader.c:644 +#, c-format +msgid "record with incorrect prev-link %X/%X at %X/%X" +msgstr "запись с неверной ссылкой назад %X/%X по смещению %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:681 +#, c-format +msgid "incorrect resource manager data checksum in record at %X/%X" +msgstr "" +"некорректная контрольная сумма данных менеджера ресурсов в записи по смещению " +"%X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:714 +#, c-format +msgid "invalid magic number %04X in log segment %s, offset %u" +msgstr "неверное магическое число %04X в сегменте журнала %s, смещение %u" + +#: ../../../src/backend/access/transam/xlogreader.c:728 +#: ../../../src/backend/access/transam/xlogreader.c:779 +#, c-format +msgid "invalid info bits %04X in log segment %s, offset %u" +msgstr "неверные информационные биты %04X в сегменте журнала %s, смещение %u" + +#: ../../../src/backend/access/transam/xlogreader.c:754 +#, c-format +msgid "" +"WAL file is from different database system: WAL file database system " +"identifier is %s, pg_control database system identifier is %s." +msgstr "" +"Файл WAL принадлежит другой СУБД: в нём указан идентификатор системы БД %s, а " +"идентификатор системы pg_control: %s." + +#: ../../../src/backend/access/transam/xlogreader.c:761 +#, c-format +msgid "" +"WAL file is from different database system: Incorrect XLOG_SEG_SIZE in page " +"header." +msgstr "" +"Файл WAL принадлежит другой СУБД: некорректный XLOG_SEG_SIZE в заголовке " +"страницы." + +#: ../../../src/backend/access/transam/xlogreader.c:767 +#, c-format +msgid "" +"WAL file is from different database system: Incorrect XLOG_BLCKSZ in page " +"header." +msgstr "" +"Файл WAL принадлежит другой СУБД: некорректный XLOG_BLCKSZ в заголовке " +"страницы." + +#: ../../../src/backend/access/transam/xlogreader.c:793 +#, c-format +msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" +msgstr "неожиданный pageaddr %X/%X в сегменте журнала %s, смещение %u" + +#: ../../../src/backend/access/transam/xlogreader.c:818 +#, c-format +msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" +msgstr "" +"нарушение последовательности ID линии времени %u (после %u) в сегменте " +"журнала %s, смещение %u" + +#: ../../../src/backend/access/transam/xlogreader.c:1027 +#, c-format +msgid "out-of-order block_id %u at %X/%X" +msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1049 +#, c-format +msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" +msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%X нет" + +#: ../../../src/backend/access/transam/xlogreader.c:1056 +#, c-format +msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" +msgstr "" +"BKPBLOCK_HAS_DATA не установлен, но длина данных равна %u в позиции %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1089 +#, 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" + +#: ../../../src/backend/access/transam/xlogreader.c:1105 +#, 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" + +#: ../../../src/backend/access/transam/xlogreader.c:1120 +#, c-format +msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" +msgstr "" +"BKPIMAGE_IS_COMPRESSED установлен, но длина образа блока равна %u в позиции %" +"X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1135 +#, 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" + +#: ../../../src/backend/access/transam/xlogreader.c:1151 +#, c-format +msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" +msgstr "" +"BKPBLOCK_SAME_REL установлен, но предыдущее значение не задано в позиции %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1163 +#, c-format +msgid "invalid block_id %u at %X/%X" +msgstr "неверный идентификатор блока %u в позиции %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1228 +#, c-format +msgid "record with invalid length at %X/%X" +msgstr "запись с неверной длиной в позиции %X/%X" + +#: ../../../src/backend/access/transam/xlogreader.c:1317 +#, c-format +msgid "invalid compressed image at %X/%X, block %d" +msgstr "неверный сжатый образ в позиции %X/%X, блок %d" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 parsexlog.c:74 parsexlog.c:127 +#: parsexlog.c:179 +#, c-format +msgid "out of memory\n" +msgstr "нехватка памяти\n" + +#: ../../common/fe_memutils.c:92 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" + +#: ../../common/restricted_token.c:68 +#, c-format +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: ПРЕДУПРЕЖДЕНИЕ: в этой ОС нельзя создавать ограниченные маркеры\n" + +#: ../../common/restricted_token.c:77 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: не удалось открыть маркер процесса (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:90 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: не удалось подготовить структуры SID (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:110 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: не удалось создать ограниченный маркер (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:132 +#, c-format +msgid "%s: could not start process for command \"%s\": error code %lu\n" +msgstr "" +"%s: не удалось запустить процесс для команды \"%s\" (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:170 +#, c-format +msgid "%s: could not re-execute with restricted token: error code %lu\n" +msgstr "" +"%s: не удалось перезапуститься с ограниченным маркером (код ошибки: %lu)\n" + +#: ../../common/restricted_token.c:186 +#, c-format +msgid "%s: could not get exit code from subprocess: error code %lu\n" +msgstr "%s: не удалось получить код выхода от подпроцесса (код ошибки: %lu)\n" + +#: copy_fetch.c:64 +#, c-format +msgid "could not open directory \"%s\": %s\n" +msgstr "не удалось открыть каталог \"%s\": %s\n" + +#: copy_fetch.c:93 filemap.c:104 filemap.c:259 +#, c-format +msgid "could not stat file \"%s\": %s\n" +msgstr "не удалось получить информацию о файле \"%s\": %s\n" + +#: copy_fetch.c:122 +#, c-format +msgid "could not read symbolic link \"%s\": %s\n" +msgstr "не удалось прочитать символическую ссылку \"%s\": %s\n" + +#: copy_fetch.c:125 +#, c-format +msgid "symbolic link \"%s\" target is too long\n" +msgstr "целевой путь символической ссылки \"%s\" слишком длинный\n" + +#: copy_fetch.c:140 +#, c-format +msgid "" +"\"%s\" is a symbolic link, but symbolic links are not supported on this " +"platform\n" +msgstr "" +"\"%s\" - символическая ссылка, но в этой ОС символические ссылки не " +"поддерживаются\n" + +#: copy_fetch.c:147 +#, c-format +msgid "could not read directory \"%s\": %s\n" +msgstr "не удалось прочитать каталог \"%s\": %s\n" + +#: copy_fetch.c:151 +#, c-format +msgid "could not close directory \"%s\": %s\n" +msgstr "не удалось закрыть каталог \"%s\": %s\n" + +#: copy_fetch.c:171 +#, c-format +msgid "could not open source file \"%s\": %s\n" +msgstr "не удалось открыть исходный файл \"%s\": %s\n" + +#: copy_fetch.c:175 +#, c-format +msgid "could not seek in source file: %s\n" +msgstr "не удалось переместиться в исходном файле: %s\n" + +#: copy_fetch.c:192 file_ops.c:301 +#, c-format +msgid "could not read file \"%s\": %s\n" +msgstr "не удалось прочитать файл \"%s\": %s\n" + +#: copy_fetch.c:195 +#, c-format +msgid "unexpected EOF while reading file \"%s\"\n" +msgstr "неожиданный конец при чтении файла \"%s\"\n" + +#: copy_fetch.c:202 +#, c-format +msgid "could not close file \"%s\": %s\n" +msgstr "не удалось закрыть файл \"%s\": %s\n" + +#: file_ops.c:64 +#, c-format +msgid "could not open target file \"%s\": %s\n" +msgstr "не удалось открыть целевой файл \"%s\": %s\n" + +#: file_ops.c:78 +#, c-format +msgid "could not close target file \"%s\": %s\n" +msgstr "не удалось закрыть целевой файл \"%s\": %s\n" + +#: file_ops.c:99 +#, c-format +msgid "could not seek in target file \"%s\": %s\n" +msgstr "не удалось переместиться в целевом файле \"%s\": %s\n" + +#: file_ops.c:115 +#, c-format +msgid "could not write file \"%s\": %s\n" +msgstr "не удалось записать файл \"%s\": %s\n" + +#: file_ops.c:165 +#, c-format +msgid "invalid action (CREATE) for regular file\n" +msgstr "неверное действие (CREATE) для обычного файла\n" + +#: file_ops.c:180 +#, c-format +msgid "could not remove file \"%s\": %s\n" +msgstr "не удалось стереть файл \"%s\": %s\n" + +#: file_ops.c:197 +#, c-format +msgid "could not open file \"%s\" for truncation: %s\n" +msgstr "не удалось открыть файл \"%s\" для усечения: %s\n" + +#: file_ops.c:201 +#, c-format +msgid "could not truncate file \"%s\" to %u bytes: %s\n" +msgstr "не удалось усечь файл \"%s\" до нужного числа байт (%u): %s\n" + +#: file_ops.c:217 +#, c-format +msgid "could not create directory \"%s\": %s\n" +msgstr "создать каталог \"%s\" не удалось: %s\n" + +#: file_ops.c:231 +#, c-format +msgid "could not remove directory \"%s\": %s\n" +msgstr "ошибка при удалении каталога \"%s\": %s\n" + +#: file_ops.c:245 +#, c-format +msgid "could not create symbolic link at \"%s\": %s\n" +msgstr "не удалось создать символическую ссылку \"%s\": %s\n" + +#: file_ops.c:259 +#, c-format +msgid "could not remove symbolic link \"%s\": %s\n" +msgstr "ошибка при удалении символической ссылки \"%s\": %s\n" + +#: file_ops.c:289 file_ops.c:293 +#, c-format +msgid "could not open file \"%s\" for reading: %s\n" +msgstr "не удалось открыть файл \"%s\" для чтения: %s\n" + +#: filemap.c:96 +#, c-format +msgid "data file \"%s\" in source is not a regular file\n" +msgstr "файл данных \"%s\" в источнике не является обычным файлом\n" + +#: filemap.c:118 +#, c-format +msgid "\"%s\" is not a directory\n" +msgstr "\"%s\" не является каталогом\n" + +#: filemap.c:141 +#, c-format +msgid "\"%s\" is not a symbolic link\n" +msgstr "\"%s\" не является символической ссылкой\n" + +#: filemap.c:153 +#, c-format +msgid "\"%s\" is not a regular file\n" +msgstr "\"%s\" не является обычным файлом\n" + +#: filemap.c:271 +#, c-format +msgid "source file list is empty\n" +msgstr "список файлов в источнике пуст\n" + +#: filemap.c:387 +#, c-format +msgid "unexpected page modification for directory or symbolic link \"%s\"\n" +msgstr "" +"неожиданная модификация страницы для каталога или символической ссылки \"%" +"s\"\n" + +#: libpq_fetch.c:55 +#, c-format +msgid "could not connect to server: %s" +msgstr "не удалось подключиться к серверу: %s" + +#: libpq_fetch.c:58 +#, c-format +msgid "connected to server\n" +msgstr "подключение к серверу установлено\n" + +#: libpq_fetch.c:68 +#, c-format +msgid "source server must not be in recovery mode\n" +msgstr "исходный сервер должен быть в режиме восстановления\n" + +#: libpq_fetch.c:78 +#, c-format +msgid "full_page_writes must be enabled in the source server\n" +msgstr "на исходном сервере должен быть включен режим full_page_writes\n" + +#: libpq_fetch.c:95 +#, c-format +msgid "error running query (%s) in source server: %s" +msgstr "ошибка выполнения запроса (%s) на исходном сервере: %s" + +#: libpq_fetch.c:100 +#, c-format +msgid "unexpected result set from query\n" +msgstr "неожиданный результат запроса\n" + +#: libpq_fetch.c:123 +#, c-format +msgid "unrecognized result \"%s\" for current XLOG insert location\n" +msgstr "" +"нераспознанный результат \"%s\" вместо текущей позиции добавления в XLOG\n" + +#: libpq_fetch.c:173 +#, c-format +msgid "could not fetch file list: %s" +msgstr "не удалось получить список файлов: %s" + +#: libpq_fetch.c:178 +#, c-format +msgid "unexpected result set while fetching file list\n" +msgstr "неожиданный результат при получении списка файлов\n" + +#: libpq_fetch.c:226 +#, c-format +msgid "could not send query: %s" +msgstr "не удалось отправить запрос: %s" + +#: libpq_fetch.c:228 +#, c-format +msgid "getting file chunks\n" +msgstr "получение сегментов файлов\n" + +#: libpq_fetch.c:231 +#, c-format +msgid "could not set libpq connection to single row mode\n" +msgstr "не удалось перевести подключение libpq в однострочный режим\n" + +#: libpq_fetch.c:251 +#, c-format +msgid "unexpected result while fetching remote files: %s\n" +msgstr "неожиданный результат при получении удалённых файлов: %s\n" + +#: libpq_fetch.c:257 +#, c-format +msgid "unexpected result set size while fetching remote files\n" +msgstr "неожиданный размер набора результатов при получении удалённых файлов\n" + +#: libpq_fetch.c:263 +#, c-format +msgid "" +"unexpected data types in result set while fetching remote files: %u %u %u\n" +msgstr "" +"неожиданные типы данных в наборе результатов при получении удалённых файлов: %" +"u %u %u\n" + +#: libpq_fetch.c:271 +#, c-format +msgid "unexpected result format while fetching remote files\n" +msgstr "неожиданный формат результата при получении удалённых файлов\n" + +#: libpq_fetch.c:277 +#, c-format +msgid "unexpected null values in result while fetching remote files\n" +msgstr "" +"неожиданные значения NULL в результате при получении удалённых файлов\n" + +#: libpq_fetch.c:281 +#, c-format +msgid "unexpected result length while fetching remote files\n" +msgstr "неожиданная длина результата при получении удалённых файлов\n" + +#: libpq_fetch.c:303 +#, c-format +msgid "received NULL chunk for file \"%s\", file has been deleted\n" +msgstr "для файла \"%s\" получен NULL-сегмент, файл удалён\n" + +#: libpq_fetch.c:310 +#, c-format +msgid "received chunk for file \"%s\", offset %d, size %d\n" +msgstr "получен сегмент файла \"%s\": смещение %d, размер %d\n" + +#: libpq_fetch.c:339 +#, c-format +msgid "could not fetch remote file \"%s\": %s" +msgstr "не удалось получить удалённый файл \"%s\": %s" + +#: libpq_fetch.c:344 +#, c-format +msgid "unexpected result set while fetching remote file \"%s\"\n" +msgstr "неожиданный набор результатов при получении удалённого файла \"%s\"\n" + +#: libpq_fetch.c:353 +#, c-format +msgid "fetched file \"%s\", length %d\n" +msgstr "получен файл \"%s\", длина %d\n" + +#: libpq_fetch.c:385 +#, c-format +msgid "could not send COPY data: %s" +msgstr "не удалось отправить данные COPY: %s" + +#: libpq_fetch.c:411 +#, c-format +msgid "could not create temporary table: %s" +msgstr "не удалось создать временную таблицу: %s" + +#: libpq_fetch.c:418 +#, c-format +msgid "could not send file list: %s" +msgstr "не удалось отправить список файлов: %s" + +#: libpq_fetch.c:459 +#, c-format +msgid "could not send end-of-COPY: %s" +msgstr "не удалось отправить сообщение о завершении копирования: %s" + +#: libpq_fetch.c:465 +#, c-format +msgid "unexpected result while sending file list: %s" +msgstr "неожиданный результат при передаче списка: %s" + +#: logging.c:57 +msgid "Failure, exiting\n" +msgstr "Ошибка, выполняется выход\n" + +#: logging.c:140 +#, c-format +msgid "%*s/%s kB (%d%%) copied" +msgstr "%*s/%s КБ (%d%%) скопировано" + +#: parsexlog.c:87 parsexlog.c:133 +#, c-format +msgid "could not read WAL record at %X/%X: %s\n" +msgstr "не удалось прочитать запись WAL в позиции %X/%X: %s\n" + +#: parsexlog.c:91 parsexlog.c:136 +#, c-format +msgid "could not read WAL record at %X/%X\n" +msgstr "не удалось прочитать запись WAL в позиции %X/%X\n" + +#: parsexlog.c:191 +#, c-format +msgid "could not find previous WAL record at %X/%X: %s\n" +msgstr "не удалось найти предыдущую запись WAL в позиции %X/%X: %s\n" + +#: parsexlog.c:195 +#, c-format +msgid "could not find previous WAL record at %X/%X\n" +msgstr "не удалось найти предыдущую запись WAL в позиции %X/%X\n" + +#: parsexlog.c:268 +#, c-format +msgid "could not open file \"%s\": %s\n" +msgstr "не удалось открыть файл \"%s\": %s\n" + +#: parsexlog.c:282 +#, c-format +msgid "could not seek in file \"%s\": %s\n" +msgstr "не удалось переместиться в файле \"%s\": %s\n" + +#: parsexlog.c:289 +#, c-format +msgid "could not read from file \"%s\": %s\n" +msgstr "не удалось прочитать файл \"%s\": %s\n" + +#: parsexlog.c:357 +#, c-format +msgid "" +"WAL record modifies a relation, but record type is not recognized\n" +"lsn: %X/%X, rmgr: %s, info: %02X\n" +msgstr "" +"Запись WAL модифицирует отношение, но тип записи не распознан\n" +"lsn: %X/%X, rmgr: %s, info: %02X\n" + +#: pg_rewind.c:59 +#, c-format +msgid "" +"%s resynchronizes a PostgreSQL cluster with another copy of the cluster.\n" +"\n" +msgstr "" +"%s синхронизирует кластер PostgreSQL с другой копией кластера.\n" +"\n" + +#: pg_rewind.c:60 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]...\n" +"\n" +msgstr "" +"Пример запуска:\n" +" %s [ПАРАМЕТР]...\n" +"\n" + +#: pg_rewind.c:61 +#, c-format +msgid "Options:\n" +msgstr "Параметры:\n" + +#: pg_rewind.c:62 +#, c-format +msgid " -D, --target-pgdata=DIRECTORY existing data directory to modify\n" +msgstr "" +" -D, --target-pgdata=КАТАЛОГ существующий каталог, куда будут записаны " +"данные\n" + +#: pg_rewind.c:63 +#, c-format +msgid " --source-pgdata=DIRECTORY source data directory to sync with\n" +msgstr "" +" --source-pgdata=КАТАЛОГ исходный каталог, с которым будет проведена " +"синхронизация\n" + +#: pg_rewind.c:64 +#, c-format +msgid " --source-server=CONNSTR source server to sync with\n" +msgstr "" +" --source-server=СТР_ПОДКЛ сервер, с которым будет проведена " +"синхронизация\n" + +#: pg_rewind.c:65 +#, c-format +msgid " -n, --dry-run stop before modifying anything\n" +msgstr "" +" -n, --dry-run остановиться до внесения каких-либо " +"изменений\n" + +#: pg_rewind.c:66 +#, c-format +msgid " -P, --progress write progress messages\n" +msgstr " -P, --progress выводить сообщения о ходе процесса\n" + +#: pg_rewind.c:67 +#, c-format +msgid " --debug write a lot of debug messages\n" +msgstr "" +" --debug выдавать множество отладочных сообщений\n" + +#: pg_rewind.c:68 +#, c-format +msgid "" +" -V, --version output version information, then exit\n" +msgstr " -V, --version показать версию и выйти\n" + +#: pg_rewind.c:69 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показать эту справку и выйти\n" + +#: pg_rewind.c:70 +#, c-format +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Об ошибках сообщайте по адресу .\n" + +#: pg_rewind.c:125 pg_rewind.c:156 pg_rewind.c:163 pg_rewind.c:171 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" + +#: pg_rewind.c:155 +#, c-format +msgid "%s: no source specified (--source-pgdata or --source-server)\n" +msgstr "" +"%s: источник не указан (требуется --source-pgdata или --source-server)\n" + +#: pg_rewind.c:162 +#, c-format +msgid "%s: no target data directory specified (--target-pgdata)\n" +msgstr "%s: целевой каталог данных не указан (--target-pgdata)\n" + +#: pg_rewind.c:169 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: слишком много аргументов командной строки (первый: \"%s\")\n" + +#: pg_rewind.c:184 +#, c-format +msgid "cannot be executed by \"root\"\n" +msgstr "программу не должен запускать root\n" + +#: pg_rewind.c:185 +#, c-format +msgid "You must run %s as the PostgreSQL superuser.\n" +msgstr "Запускать %s нужно от имени суперпользователя PostgreSQL.\n" + +#: pg_rewind.c:215 +#, c-format +msgid "source and target cluster are on the same timeline\n" +msgstr "исходный и целевой кластер уже на одной линии времени\n" + +#: pg_rewind.c:218 +#, c-format +msgid "The servers diverged at WAL position %X/%X on timeline %u.\n" +msgstr "Серверы разошлись в позиции WAL %X/%X на линии времени %u.\n" + +#: pg_rewind.c:253 +#, c-format +msgid "No rewind required.\n" +msgstr "Перемотка не требуется.\n" + +#: pg_rewind.c:259 +#, c-format +msgid "Rewinding from last common checkpoint at %X/%X on timeline %u\n" +msgstr "" +"Перемотка от последней общей контрольной точки в позиции %X/%X на линии " +"времени %u\n" + +#: pg_rewind.c:267 +#, c-format +msgid "reading source file list\n" +msgstr "чтение списка исходных файлов\n" + +#: pg_rewind.c:269 +#, c-format +msgid "reading target file list\n" +msgstr "чтение списка целевых файлов\n" + +#: pg_rewind.c:279 +#, c-format +msgid "reading WAL in target\n" +msgstr "чтение WAL в целевом кластере\n" + +#: pg_rewind.c:296 +#, c-format +msgid "need to copy %lu MB (total source directory size is %lu MB)\n" +msgstr "" +"требуется скопировать %lu МБ (общий размер исходного каталога: %lu МБ)\n" + +#: pg_rewind.c:313 +#, c-format +msgid "" +"\n" +"creating backup label and updating control file\n" +msgstr "" +"\n" +"создание метки копии и модификация управляющего файла\n" + +#: pg_rewind.c:341 +#, c-format +msgid "Done!\n" +msgstr "Готово!\n" + +#: pg_rewind.c:353 +#, c-format +msgid "source and target clusters are from different systems\n" +msgstr "исходный и целевой кластеры относятся к разным системам\n" + +#: pg_rewind.c:361 +#, c-format +msgid "clusters are not compatible with this version of pg_rewind\n" +msgstr "кластеры несовместимы с этой версией pg_rewind\n" + +#: pg_rewind.c:371 +#, c-format +msgid "" +"target server needs to use either data checksums or \"wal_log_hints = on\"\n" +msgstr "" +"на целевом сервере должны быть контрольные суммы данных или \"wal_log_hints = " +"on\"\n" + +#: pg_rewind.c:381 +#, c-format +msgid "target server must be shut down cleanly\n" +msgstr "целевой сервер должен быть выключен штатно\n" + +#: pg_rewind.c:389 +#, c-format +msgid "source data directory must be shut down cleanly\n" +msgstr "работа с исходным каталогом данных должна быть завершена штатно\n" + +#: pg_rewind.c:456 +#, c-format +msgid "" +"could not find common ancestor of the source and target cluster's timelines\n" +msgstr "" +"не удалось найти общего предка линий времени исходного и целевых кластеров\n" + +#: pg_rewind.c:496 +#, c-format +msgid "backup label buffer too small\n" +msgstr "буфер для метки копии слишком мал\n" + +#: pg_rewind.c:518 +#, c-format +msgid "unexpected control file CRC\n" +msgstr "неверная контрольная сумма управляющего файла\n" + +#: pg_rewind.c:528 +#, c-format +msgid "unexpected control file size %d, expected %d\n" +msgstr "неверный размер управляющего файла (%d), ожидалось: %d\n" + +#: timeline.c:76 timeline.c:82 +#, c-format +msgid "syntax error in history file: %s\n" +msgstr "синтаксическая ошибка в файле истории: %s\n" + +#: timeline.c:77 +#, c-format +msgid "Expected a numeric timeline ID.\n" +msgstr "Ожидается числовой идентификатор линии времени.\n" + +#: timeline.c:83 +#, c-format +msgid "Expected an XLOG switchpoint location.\n" +msgstr "Ожидается позиция точки переключения в XLOG.\n" + +#: timeline.c:88 +#, c-format +msgid "invalid data in history file: %s\n" +msgstr "неверные данные в файле истории: %s\n" + +#: timeline.c:89 +#, c-format +msgid "Timeline IDs must be in increasing sequence.\n" +msgstr "Идентификаторы линий времени должны возрастать.\n" + +#: timeline.c:109 +#, c-format +msgid "invalid data in history file\n" +msgstr "неверные данные в файле истории\n" + +#: timeline.c:110 +#, c-format +msgid "Timeline IDs must be less than child timeline's ID.\n" +msgstr "" +"Идентификаторы линий времени должны быть меньше идентификатора " +"линии-потомка.\n" + + diff --git a/src/bin/pg_rewind/t/001_basic.pl b/src/bin/pg_rewind/t/001_basic.pl index f60368bd307e7..1764b17c907a1 100644 --- a/src/bin/pg_rewind/t/001_basic.pl +++ b/src/bin/pg_rewind/t/001_basic.pl @@ -9,8 +9,8 @@ sub run_test { my $test_mode = shift; - RewindTest::init_rewind_test('basic', $test_mode); RewindTest::setup_cluster(); + RewindTest::start_master(); # Create a test table and insert a row in master. master_psql("CREATE TABLE tbl1 (d text)"); diff --git a/src/bin/pg_rewind/t/002_databases.pl b/src/bin/pg_rewind/t/002_databases.pl index 7564fa98a5377..f10899d44017f 100644 --- a/src/bin/pg_rewind/t/002_databases.pl +++ b/src/bin/pg_rewind/t/002_databases.pl @@ -9,8 +9,8 @@ sub run_test { my $test_mode = shift; - RewindTest::init_rewind_test('databases', $test_mode); RewindTest::setup_cluster(); + RewindTest::start_master(); # Create a database in master. master_psql('CREATE DATABASE inmaster'); diff --git a/src/bin/pg_rewind/t/003_extrafiles.pl b/src/bin/pg_rewind/t/003_extrafiles.pl index 9a952685be91a..d317f53186bf6 100644 --- a/src/bin/pg_rewind/t/003_extrafiles.pl +++ b/src/bin/pg_rewind/t/003_extrafiles.pl @@ -14,8 +14,8 @@ sub run_test { my $test_mode = shift; - RewindTest::init_rewind_test('extrafiles', $test_mode); RewindTest::setup_cluster(); + RewindTest::start_master(); my $test_master_datadir = $RewindTest::test_master_datadir; diff --git a/src/bin/pg_rewind/t/004_pg_xlog_symlink.pl b/src/bin/pg_rewind/t/004_pg_xlog_symlink.pl new file mode 100644 index 0000000000000..634c623afab8d --- /dev/null +++ b/src/bin/pg_rewind/t/004_pg_xlog_symlink.pl @@ -0,0 +1,70 @@ +# +# Test pg_rewind when the target's pg_xlog directory is a symlink. +# +use strict; +use warnings; +use File::Copy; +use File::Path qw(remove_tree); +use TestLib; +use Test::More tests => 4; + +use RewindTest; + +sub run_test +{ + my $test_mode = shift; + + my $master_xlogdir = "$tmp_check/xlog_master"; + + remove_tree($master_xlogdir); + RewindTest::setup_cluster(); + + # turn pg_xlog into a symlink + print("moving $test_master_datadir/pg_xlog to $master_xlogdir\n"); + move("$test_master_datadir/pg_xlog", $master_xlogdir) or die; + symlink($master_xlogdir, "$test_master_datadir/pg_xlog") or die; + + RewindTest::start_master(); + + # Create a test table and insert a row in master. + master_psql("CREATE TABLE tbl1 (d text)"); + master_psql("INSERT INTO tbl1 VALUES ('in master')"); + + master_psql("CHECKPOINT"); + + RewindTest::create_standby(); + + # Insert additional data on master that will be replicated to standby + master_psql("INSERT INTO tbl1 values ('in master, before promotion')"); + + master_psql('CHECKPOINT'); + + RewindTest::promote_standby(); + + # Insert a row in the old master. This causes the master and standby + # to have "diverged", it's no longer possible to just apply the + # standy's logs over master directory - you need to rewind. + master_psql("INSERT INTO tbl1 VALUES ('in master, after promotion')"); + + # Also insert a new row in the standby, which won't be present in the + # old master. + standby_psql("INSERT INTO tbl1 VALUES ('in standby, after promotion')"); + + RewindTest::run_pg_rewind($test_mode); + + check_query( + 'SELECT * FROM tbl1', + qq(in master +in master, before promotion +in standby, after promotion +), + 'table content'); + + RewindTest::clean_rewind_test(); +} + +# Run the test in both modes +run_test('local'); +run_test('remote'); + +exit(0); diff --git a/src/bin/pg_rewind/timeline.c b/src/bin/pg_rewind/timeline.c index 752623058ec0a..e734310505e05 100644 --- a/src/bin/pg_rewind/timeline.c +++ b/src/bin/pg_rewind/timeline.c @@ -80,7 +80,7 @@ rewind_parseTimeLineHistory(char *buffer, TimeLineID targetTLI, int *nentries) if (nfields != 3) { fprintf(stderr, _("syntax error in history file: %s\n"), fline); - fprintf(stderr, _("Expected an XLOG switchpoint location.\n")); + fprintf(stderr, _("Expected a transaction log switchpoint location.\n")); exit(1); } if (entries && tli <= lasttli) diff --git a/src/bin/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c index 6978ae991b2c7..8a86e45979f93 100644 --- a/src/bin/pg_upgrade/controldata.c +++ b/src/bin/pg_upgrade/controldata.c @@ -37,15 +37,16 @@ get_control_data(ClusterInfo *cluster, bool live_check) char bufin[MAX_STRING]; FILE *output; char *p; + bool got_tli = false; + bool got_log_id = false; + bool got_log_seg = false; bool got_xid = false; bool got_oid = false; - bool got_nextxlogfile = false; bool got_multi = false; - bool got_mxoff = false; bool got_oldestmulti = false; - bool got_log_id = false; - bool got_log_seg = false; - bool got_tli = false; + bool got_mxoff = false; + bool got_nextxlogfile = false; + bool got_float8_pass_by_value = false; bool got_align = false; bool got_blocksz = false; bool got_largesz = false; @@ -56,7 +57,6 @@ get_control_data(ClusterInfo *cluster, bool live_check) bool got_toast = false; bool got_large_object = false; bool got_date_is_int = false; - bool got_float8_pass_by_value = false; bool got_data_checksum_version = false; char *lc_collate = NULL; char *lc_ctype = NULL; @@ -67,9 +67,9 @@ get_control_data(ClusterInfo *cluster, bool live_check) char *language = NULL; char *lc_all = NULL; char *lc_messages = NULL; + uint32 tli = 0; uint32 logid = 0; uint32 segno = 0; - uint32 tli = 0; /* @@ -154,7 +154,7 @@ get_control_data(ClusterInfo *cluster, bool live_check) p++; /* remove ':' char */ cluster->controldata.cat_ver = str2uint(p); } - else if ((p = strstr(bufin, "First log file ID after reset:")) != NULL) + else if ((p = strstr(bufin, "Latest checkpoint's TimeLineID:")) != NULL) { p = strchr(p, ':'); @@ -162,10 +162,10 @@ get_control_data(ClusterInfo *cluster, bool live_check) pg_fatal("%d: controldata retrieval problem\n", __LINE__); p++; /* remove ':' char */ - logid = str2uint(p); - got_log_id = true; + tli = str2uint(p); + got_tli = true; } - else if ((p = strstr(bufin, "First log file segment after reset:")) != NULL) + else if ((p = strstr(bufin, "First log file ID after reset:")) != NULL) { p = strchr(p, ':'); @@ -173,10 +173,10 @@ get_control_data(ClusterInfo *cluster, bool live_check) pg_fatal("%d: controldata retrieval problem\n", __LINE__); p++; /* remove ':' char */ - segno = str2uint(p); - got_log_seg = true; + logid = str2uint(p); + got_log_id = true; } - else if ((p = strstr(bufin, "Latest checkpoint's TimeLineID:")) != NULL) + else if ((p = strstr(bufin, "First log file segment after reset:")) != NULL) { p = strchr(p, ':'); @@ -184,8 +184,8 @@ get_control_data(ClusterInfo *cluster, bool live_check) pg_fatal("%d: controldata retrieval problem\n", __LINE__); p++; /* remove ':' char */ - tli = str2uint(p); - got_tli = true; + segno = str2uint(p); + got_log_seg = true; } else if ((p = strstr(bufin, "Latest checkpoint's NextXID:")) != NULL) { @@ -266,6 +266,18 @@ get_control_data(ClusterInfo *cluster, bool live_check) strlcpy(cluster->controldata.nextxlogfile, p, 25); got_nextxlogfile = true; } + else if ((p = strstr(bufin, "Float8 argument passing:")) != NULL) + { + p = strchr(p, ':'); + + if (p == NULL || strlen(p) <= 1) + pg_fatal("%d: controldata retrieval problem\n", __LINE__); + + p++; /* remove ':' char */ + /* used later for contrib check */ + cluster->controldata.float8_pass_by_value = strstr(p, "by value") != NULL; + got_float8_pass_by_value = true; + } else if ((p = strstr(bufin, "Maximum data alignment:")) != NULL) { p = strchr(p, ':'); @@ -376,18 +388,6 @@ get_control_data(ClusterInfo *cluster, bool live_check) cluster->controldata.date_is_int = strstr(p, "64-bit integers") != NULL; got_date_is_int = true; } - else if ((p = strstr(bufin, "Float8 argument passing:")) != NULL) - { - p = strchr(p, ':'); - - if (p == NULL || strlen(p) <= 1) - pg_fatal("%d: controldata retrieval problem\n", __LINE__); - - p++; /* remove ':' char */ - /* used later for contrib check */ - cluster->controldata.float8_pass_by_value = strstr(p, "by value") != NULL; - got_float8_pass_by_value = true; - } else if ((p = strstr(bufin, "checksum")) != NULL) { p = strchr(p, ':'); @@ -449,11 +449,12 @@ get_control_data(ClusterInfo *cluster, bool live_check) (!got_oldestmulti && cluster->controldata.cat_ver >= MULTIXACT_FORMATCHANGE_CAT_VER) || !got_mxoff || (!live_check && !got_nextxlogfile) || - !got_align || !got_blocksz || !got_largesz || !got_walsz || - !got_walseg || !got_ident || !got_index || !got_toast || + !got_float8_pass_by_value || !got_align || !got_blocksz || + !got_largesz || !got_walsz || !got_walseg || !got_ident || + !got_index || !got_toast || (!got_large_object && cluster->controldata.ctrl_ver >= LARGE_OBJECT_SIZE_PG_CONTROL_VER) || - !got_date_is_int || !got_float8_pass_by_value || !got_data_checksum_version) + !got_date_is_int || !got_data_checksum_version) { pg_log(PG_REPORT, "The %s cluster lacks some required control information:\n", @@ -478,6 +479,9 @@ get_control_data(ClusterInfo *cluster, bool live_check) if (!live_check && !got_nextxlogfile) pg_log(PG_REPORT, " first WAL segment after reset\n"); + if (!got_float8_pass_by_value) + pg_log(PG_REPORT, " float8 argument passing method\n"); + if (!got_align) pg_log(PG_REPORT, " maximum alignment\n"); @@ -509,9 +513,6 @@ get_control_data(ClusterInfo *cluster, bool live_check) if (!got_date_is_int) pg_log(PG_REPORT, " dates/times are integers?\n"); - if (!got_float8_pass_by_value) - pg_log(PG_REPORT, " float8 argument passing method\n"); - /* value added in Postgres 9.3 */ if (!got_data_checksum_version) pg_log(PG_REPORT, " data checksum version\n"); @@ -563,7 +564,10 @@ check_control_data(ControlData *oldctrl, if (oldctrl->date_is_int != newctrl->date_is_int) pg_fatal("old and new pg_controldata date/time storage types do not match\n"); - /* float8_pass_by_value does not need to match */ + /* + * float8_pass_by_value does not need to match, but is used in + * check_for_isn_and_int8_passing_mismatch(). + */ /* * We might eventually allow upgrades from checksum to no-checksum diff --git a/src/bin/pg_upgrade/info.c b/src/bin/pg_upgrade/info.c index e158c9ff8b01a..e980c9f989fed 100644 --- a/src/bin/pg_upgrade/info.c +++ b/src/bin/pg_upgrade/info.c @@ -140,6 +140,7 @@ create_rel_filename_map(const char *old_data, const char *new_data, const RelInfo *old_rel, const RelInfo *new_rel, FileNameMap *map) { + /* In case old/new tablespaces don't match, do them separately. */ if (strlen(old_rel->tablespace) == 0) { /* @@ -147,16 +148,24 @@ create_rel_filename_map(const char *old_data, const char *new_data, * exist in the data directories. */ map->old_tablespace = old_data; - map->new_tablespace = new_data; map->old_tablespace_suffix = "/base"; - map->new_tablespace_suffix = "/base"; } else { /* relation belongs to a tablespace, so use the tablespace location */ map->old_tablespace = old_rel->tablespace; - map->new_tablespace = new_rel->tablespace; map->old_tablespace_suffix = old_cluster.tablespace_suffix; + } + + /* Do the same for new tablespaces */ + if (strlen(new_rel->tablespace) == 0) + { + map->new_tablespace = new_data; + map->new_tablespace_suffix = "/base"; + } + else + { + map->new_tablespace = new_rel->tablespace; map->new_tablespace_suffix = new_cluster.tablespace_suffix; } diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh index fef64dfb5f87a..aa7f3994caa6b 100644 --- a/src/bin/pg_upgrade/test.sh +++ b/src/bin/pg_upgrade/test.sh @@ -21,6 +21,10 @@ unset MAKELEVEL # authentication configuration. standard_initdb() { "$1" -N + if [ -n "$TEMP_CONFIG" -a -r "$TEMP_CONFIG" ] + then + cat "$TEMP_CONFIG" >> "$PGDATA/postgresql.conf" + fi ../../test/regress/pg_regress --config-auth "$PGDATA" } @@ -62,7 +66,8 @@ esac POSTMASTER_OPTS="-F -c listen_addresses=$LISTEN_ADDRESSES -k \"$PGHOST\"" export PGHOST -temp_root=$PWD/tmp_check +# don't rely on $PWD here, as old shells don't set it +temp_root=`pwd`/tmp_check if [ "$1" = '--install' ]; then temp_install=$temp_root/install @@ -70,7 +75,6 @@ if [ "$1" = '--install' ]; then libdir=$temp_install/$libdir "$MAKE" -s -C ../.. install DESTDIR="$temp_install" - "$MAKE" -s -C . install DESTDIR="$temp_install" # platform-specific magic to find the shared libraries; see pg_regress.c LD_LIBRARY_PATH=$libdir:$LD_LIBRARY_PATH @@ -104,7 +108,7 @@ PGDATA="$BASE_PGDATA.old" export PGDATA rm -rf "$BASE_PGDATA" "$PGDATA" -logdir=$PWD/log +logdir=`pwd`/log rm -rf "$logdir" mkdir "$logdir" @@ -215,10 +219,11 @@ case $testhost in *) sh ./delete_old_cluster.sh ;; esac -if diff -q "$temp_root"/dump1.sql "$temp_root"/dump2.sql; then +if diff "$temp_root"/dump1.sql "$temp_root"/dump2.sql >/dev/null; then echo PASSED exit 0 else + echo "Files $temp_root/dump1.sql and $temp_root/dump2.sql differ" echo "dumps were not identical" exit 1 fi diff --git a/src/bin/pg_xlogdump/rmgrdesc.c b/src/bin/pg_xlogdump/rmgrdesc.c index 2205d6e689634..5b88a8dd67a83 100644 --- a/src/bin/pg_xlogdump/rmgrdesc.c +++ b/src/bin/pg_xlogdump/rmgrdesc.c @@ -25,6 +25,7 @@ #include "commands/dbcommands_xlog.h" #include "commands/sequence.h" #include "commands/tablespace.h" +#include "replication/origin.h" #include "rmgrdesc.h" #include "storage/standby.h" #include "utils/relmapper.h" diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index 2c3e3650c8a30..f7125d25b0e35 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -390,8 +390,7 @@ usage(void) " -f, --file=FILENAME read transaction script from FILENAME\n" " -j, --jobs=NUM number of threads (default: 1)\n" " -l, --log write transaction times to log file\n" - " -L, --latency-limit=NUM count transactions lasting more than NUM ms\n" - " as late.\n" + " -L, --latency-limit=NUM count transactions lasting more than NUM ms as late\n" " -M, --protocol=simple|extended|prepared\n" " protocol for submitting queries (default: simple)\n" " -n, --no-vacuum do not run VACUUM before tests\n" @@ -667,7 +666,7 @@ doConnect(void) if (!conn) { - fprintf(stderr, "Connection to database \"%s\" failed\n", + fprintf(stderr, "connection to database \"%s\" failed\n", dbName); return NULL; } @@ -685,7 +684,7 @@ doConnect(void) /* check to see that the backend connection was successfully made */ if (PQstatus(conn) == CONNECTION_BAD) { - fprintf(stderr, "Connection to database \"%s\" failed:\n%s", + fprintf(stderr, "connection to database \"%s\" failed:\n%s", dbName, PQerrorMessage(conn)); PQfinish(conn); return NULL; @@ -779,7 +778,8 @@ putVariable(CState *st, const char *context, char *name, char *value) */ if (!isLegalVariableName(name)) { - fprintf(stderr, "%s: invalid variable name '%s'\n", context, name); + fprintf(stderr, "%s: invalid variable name: \"%s\"\n", + context, name); return false; } @@ -924,7 +924,7 @@ evaluateExpr(CState *st, PgBenchExpr *expr, int64 *retval) if ((var = getVariable(st, expr->u.variable.varname)) == NULL) { - fprintf(stderr, "undefined variable %s\n", + fprintf(stderr, "undefined variable \"%s\"\n", expr->u.variable.varname); return false; } @@ -1024,14 +1024,15 @@ runShellCommand(CState *st, char *variable, char **argv, int argc) } else if ((arg = getVariable(st, argv[i] + 1)) == NULL) { - fprintf(stderr, "%s: undefined variable %s\n", argv[0], argv[i]); + fprintf(stderr, "%s: undefined variable \"%s\"\n", + argv[0], argv[i]); return false; } arglen = strlen(arg); if (len + arglen + (i > 0 ? 1 : 0) >= SHELL_COMMAND_SIZE - 1) { - fprintf(stderr, "%s: too long shell command\n", argv[0]); + fprintf(stderr, "%s: shell command is too long\n", argv[0]); return false; } @@ -1049,7 +1050,7 @@ runShellCommand(CState *st, char *variable, char **argv, int argc) if (system(command)) { if (!timer_exceeded) - fprintf(stderr, "%s: cannot launch shell command\n", argv[0]); + fprintf(stderr, "%s: could not launch shell command\n", argv[0]); return false; } return true; @@ -1058,19 +1059,19 @@ runShellCommand(CState *st, char *variable, char **argv, int argc) /* Execute the command with pipe and read the standard output. */ if ((fp = popen(command, "r")) == NULL) { - fprintf(stderr, "%s: cannot launch shell command\n", argv[0]); + fprintf(stderr, "%s: could not launch shell command\n", argv[0]); return false; } if (fgets(res, sizeof(res), fp) == NULL) { if (!timer_exceeded) - fprintf(stderr, "%s: cannot read the result\n", argv[0]); + fprintf(stderr, "%s: could not read result of shell command\n", argv[0]); (void) pclose(fp); return false; } if (pclose(fp) < 0) { - fprintf(stderr, "%s: cannot close shell command\n", argv[0]); + fprintf(stderr, "%s: could not close shell command\n", argv[0]); return false; } @@ -1080,7 +1081,8 @@ runShellCommand(CState *st, char *variable, char **argv, int argc) endptr++; if (*res == '\0' || *endptr != '\0') { - fprintf(stderr, "%s: must return an integer ('%s' returned)\n", argv[0], res); + fprintf(stderr, "%s: shell command must return an integer (not \"%s\")\n", + argv[0], res); return false; } snprintf(res, sizeof(res), "%d", retval); @@ -1088,7 +1090,7 @@ runShellCommand(CState *st, char *variable, char **argv, int argc) return false; #ifdef DEBUG - printf("shell parameter name: %s, value: %s\n", argv[1], res); + printf("shell parameter name: \"%s\", value: \"%s\"\n", argv[1], res); #endif return true; } @@ -1151,11 +1153,12 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa * first time it's needed, and reuse the same value throughout this * function after that. This also ensures that e.g. the calculated latency * reported in the log file and in the totals are the same. Zero means - * "not set yet". + * "not set yet". Reset "now" when we step to the next command with "goto + * top", though. */ +top: INSTR_TIME_SET_ZERO(now); -top: commands = sql_files[st->use_file]; /* @@ -1244,7 +1247,7 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa fprintf(stderr, "client %d receiving\n", st->id); if (!PQconsumeInput(st->con)) { /* there's something wrong */ - fprintf(stderr, "Client %d aborted in state %d. Probably the backend died while processing.\n", st->id, st->state); + fprintf(stderr, "client %d aborted in state %d; perhaps the backend died while processing\n", st->id, st->state); return clientDone(st, false); } if (PQisBusy(st->con)) @@ -1313,7 +1316,7 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa case PGRES_TUPLES_OK: break; /* OK */ default: - fprintf(stderr, "Client %d aborted in state %d: %s", + fprintf(stderr, "client %d aborted in state %d: %s", st->id, st->state, PQerrorMessage(st->con)); PQclear(res); return clientDone(st, false); @@ -1364,7 +1367,8 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa INSTR_TIME_SET_CURRENT(start); if ((st->con = doConnect()) == NULL) { - fprintf(stderr, "Client %d aborted in establishing connection.\n", st->id); + fprintf(stderr, "client %d aborted while establishing connection\n", + st->id); return clientDone(st, false); } INSTR_TIME_SET_CURRENT(end); @@ -1468,7 +1472,8 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa if (r == 0) { if (debug) - fprintf(stderr, "client %d cannot send %s\n", st->id, command->argv[0]); + fprintf(stderr, "client %d could not send %s\n", + st->id, command->argv[0]); st->ecnt++; } else @@ -1500,7 +1505,8 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa { if ((var = getVariable(st, argv[2] + 1)) == NULL) { - fprintf(stderr, "%s: undefined variable %s\n", argv[0], argv[2]); + fprintf(stderr, "%s: undefined variable \"%s\"\n", + argv[0], argv[2]); st->ecnt++; return true; } @@ -1509,20 +1515,12 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa else min = strtoint64(argv[2]); -#ifdef NOT_USED - if (min < 0) - { - fprintf(stderr, "%s: invalid minimum number %d\n", argv[0], min); - st->ecnt++; - return; - } -#endif - if (*argv[3] == ':') { if ((var = getVariable(st, argv[3] + 1)) == NULL) { - fprintf(stderr, "%s: undefined variable %s\n", argv[0], argv[3]); + fprintf(stderr, "%s: undefined variable \"%s\"\n", + argv[0], argv[3]); st->ecnt++; return true; } @@ -1533,7 +1531,8 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa if (max < min) { - fprintf(stderr, "%s: maximum is less than minimum\n", argv[0]); + fprintf(stderr, "%s: \\setrandom maximum is less than minimum\n", + argv[0]); st->ecnt++; return true; } @@ -1548,7 +1547,8 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa */ if (max - min < 0 || (max - min) + 1 < 0) { - fprintf(stderr, "%s: range too large\n", argv[0]); + fprintf(stderr, "%s: \\setrandom range is too large\n", + argv[0]); st->ecnt++; return true; } @@ -1569,7 +1569,8 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa { if ((var = getVariable(st, argv[5] + 1)) == NULL) { - fprintf(stderr, "%s: invalid threshold number %s\n", argv[0], argv[5]); + fprintf(stderr, "%s: invalid threshold number: \"%s\"\n", + argv[0], argv[5]); st->ecnt++; return true; } @@ -1582,7 +1583,7 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa { if (threshold < MIN_GAUSSIAN_THRESHOLD) { - fprintf(stderr, "%s: gaussian threshold must be at least %f\n,", argv[5], MIN_GAUSSIAN_THRESHOLD); + fprintf(stderr, "gaussian threshold must be at least %f (not \"%s\")\n", MIN_GAUSSIAN_THRESHOLD, argv[5]); st->ecnt++; return true; } @@ -1595,7 +1596,7 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa { if (threshold <= 0.0) { - fprintf(stderr, "%s: exponential threshold must be strictly positive\n,", argv[5]); + fprintf(stderr, "exponential threshold must be greater than zero (not \"%s\")\n", argv[5]); st->ecnt++; return true; } @@ -1607,7 +1608,8 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa } else /* this means an error somewhere in the parsing phase... */ { - fprintf(stderr, "%s: unexpected arguments\n", argv[0]); + fprintf(stderr, "%s: invalid arguments for \\setrandom\n", + argv[0]); st->ecnt++; return true; } @@ -1651,7 +1653,8 @@ doCustom(TState *thread, CState *st, instr_time *conn_time, FILE *logfile, AggVa { if ((var = getVariable(st, argv[1] + 1)) == NULL) { - fprintf(stderr, "%s: undefined variable %s\n", argv[0], argv[1]); + fprintf(stderr, "%s: undefined variable \"%s\"\n", + argv[0], argv[1]); st->ecnt++; return true; } @@ -2505,7 +2508,7 @@ process_file(char *filename) if (num_files >= MAX_FILES) { - fprintf(stderr, "Up to only %d SQL files are allowed\n", MAX_FILES); + fprintf(stderr, "at most %d SQL files are allowed\n", MAX_FILES); exit(1); } @@ -2516,7 +2519,8 @@ process_file(char *filename) fd = stdin; else if ((fd = fopen(filename, "r")) == NULL) { - fprintf(stderr, "%s: %s\n", filename, strerror(errno)); + fprintf(stderr, "could not open file \"%s\": %s\n", + filename, strerror(errno)); pg_free(my_commands); return false; } @@ -2627,7 +2631,7 @@ printResults(int ttype, int64 normal_xacts, int nclients, time_include = INSTR_TIME_GET_DOUBLE(total_time); tps_include = normal_xacts / time_include; tps_exclude = normal_xacts / (time_include - - (INSTR_TIME_GET_DOUBLE(conn_total_time) / nthreads)); + (INSTR_TIME_GET_DOUBLE(conn_total_time) / nclients)); if (ttype == 0) s = "TPC-B (sort of)"; @@ -2896,7 +2900,8 @@ main(int argc, char **argv) nclients = atoi(optarg); if (nclients <= 0 || nclients > MAXCLIENTS) { - fprintf(stderr, "invalid number of clients: %d\n", nclients); + fprintf(stderr, "invalid number of clients: \"%s\"\n", + optarg); exit(1); } #ifdef HAVE_GETRLIMIT @@ -2909,10 +2914,11 @@ main(int argc, char **argv) fprintf(stderr, "getrlimit failed: %s\n", strerror(errno)); exit(1); } - if (rlim.rlim_cur <= (nclients + 2)) + if (rlim.rlim_cur < nclients + 3) { - fprintf(stderr, "You need at least %d open files but you are only allowed to use %ld.\n", nclients + 2, (long) rlim.rlim_cur); - fprintf(stderr, "Use limit/ulimit to increase the limit before using pgbench.\n"); + fprintf(stderr, "need at least %d open files, but system limit is %ld\n", + nclients + 3, (long) rlim.rlim_cur); + fprintf(stderr, "Reduce number of clients, or use limit/ulimit to increase the system limit.\n"); exit(1); } #endif /* HAVE_GETRLIMIT */ @@ -2922,7 +2928,8 @@ main(int argc, char **argv) nthreads = atoi(optarg); if (nthreads <= 0) { - fprintf(stderr, "invalid number of threads: %d\n", nthreads); + fprintf(stderr, "invalid number of threads: \"%s\"\n", + optarg); exit(1); } break; @@ -2939,7 +2946,7 @@ main(int argc, char **argv) scale = atoi(optarg); if (scale <= 0) { - fprintf(stderr, "invalid scaling factor: %d\n", scale); + fprintf(stderr, "invalid scaling factor: \"%s\"\n", optarg); exit(1); } break; @@ -2947,13 +2954,14 @@ main(int argc, char **argv) benchmarking_option_set = true; if (duration > 0) { - fprintf(stderr, "specify either a number of transactions (-t) or a duration (-T), not both.\n"); + fprintf(stderr, "specify either a number of transactions (-t) or a duration (-T), not both\n"); exit(1); } nxacts = atoi(optarg); if (nxacts <= 0) { - fprintf(stderr, "invalid number of transactions: %d\n", nxacts); + fprintf(stderr, "invalid number of transactions: \"%s\"\n", + optarg); exit(1); } break; @@ -2961,13 +2969,13 @@ main(int argc, char **argv) benchmarking_option_set = true; if (nxacts > 0) { - fprintf(stderr, "specify either a number of transactions (-t) or a duration (-T), not both.\n"); + fprintf(stderr, "specify either a number of transactions (-t) or a duration (-T), not both\n"); exit(1); } duration = atoi(optarg); if (duration <= 0) { - fprintf(stderr, "invalid duration: %d\n", duration); + fprintf(stderr, "invalid duration: \"%s\"\n", optarg); exit(1); } break; @@ -2997,7 +3005,8 @@ main(int argc, char **argv) if ((p = strchr(optarg, '=')) == NULL || p == optarg || *(p + 1) == '\0') { - fprintf(stderr, "invalid variable definition: %s\n", optarg); + fprintf(stderr, "invalid variable definition: \"%s\"\n", + optarg); exit(1); } @@ -3009,9 +3018,9 @@ main(int argc, char **argv) case 'F': initialization_option_set = true; fillfactor = atoi(optarg); - if ((fillfactor < 10) || (fillfactor > 100)) + if (fillfactor < 10 || fillfactor > 100) { - fprintf(stderr, "invalid fillfactor: %d\n", fillfactor); + fprintf(stderr, "invalid fillfactor: \"%s\"\n", optarg); exit(1); } break; @@ -3019,7 +3028,7 @@ main(int argc, char **argv) benchmarking_option_set = true; if (num_files > 0) { - fprintf(stderr, "query mode (-M) should be specified before transaction scripts (-f)\n"); + fprintf(stderr, "query mode (-M) should be specified before any transaction scripts (-f)\n"); exit(1); } for (querymode = 0; querymode < NUM_QUERYMODE; querymode++) @@ -3027,7 +3036,8 @@ main(int argc, char **argv) break; if (querymode >= NUM_QUERYMODE) { - fprintf(stderr, "invalid query mode (-M): %s\n", optarg); + fprintf(stderr, "invalid query mode (-M): \"%s\"\n", + optarg); exit(1); } break; @@ -3036,8 +3046,7 @@ main(int argc, char **argv) progress = atoi(optarg); if (progress <= 0) { - fprintf(stderr, - "thread progress delay (-P) must be positive (%s)\n", + fprintf(stderr, "invalid thread progress delay: \"%s\"\n", optarg); exit(1); } @@ -3051,7 +3060,7 @@ main(int argc, char **argv) if (throttle_value <= 0.0) { - fprintf(stderr, "invalid rate limit: %s\n", optarg); + fprintf(stderr, "invalid rate limit: \"%s\"\n", optarg); exit(1); } /* Invert rate limit into a time offset */ @@ -3064,7 +3073,8 @@ main(int argc, char **argv) if (limit_ms <= 0.0) { - fprintf(stderr, "invalid latency limit: %s\n", optarg); + fprintf(stderr, "invalid latency limit: \"%s\"\n", + optarg); exit(1); } benchmarking_option_set = true; @@ -3089,20 +3099,21 @@ main(int argc, char **argv) sample_rate = atof(optarg); if (sample_rate <= 0.0 || sample_rate > 1.0) { - fprintf(stderr, "invalid sampling rate: %f\n", sample_rate); + fprintf(stderr, "invalid sampling rate: \"%s\"\n", optarg); exit(1); } break; case 5: #ifdef WIN32 - fprintf(stderr, "--aggregate-interval is not currently supported on Windows"); + fprintf(stderr, "--aggregate-interval is not currently supported on Windows\n"); exit(1); #else benchmarking_option_set = true; agg_interval = atoi(optarg); if (agg_interval <= 0) { - fprintf(stderr, "invalid number of seconds for aggregation: %d\n", agg_interval); + fprintf(stderr, "invalid number of seconds for aggregation: \"%s\"\n", + optarg); exit(1); } #endif @@ -3133,7 +3144,7 @@ main(int argc, char **argv) { if (benchmarking_option_set) { - fprintf(stderr, "some options cannot be used in initialization (-i) mode\n"); + fprintf(stderr, "some of the specified options cannot be used in initialization (-i) mode\n"); exit(1); } @@ -3144,7 +3155,7 @@ main(int argc, char **argv) { if (initialization_option_set) { - fprintf(stderr, "some options cannot be used in benchmarking mode\n"); + fprintf(stderr, "some of the specified options cannot be used in benchmarking mode\n"); exit(1); } } @@ -3162,30 +3173,30 @@ main(int argc, char **argv) /* --sampling-rate may be used only with -l */ if (sample_rate > 0.0 && !use_log) { - fprintf(stderr, "log sampling rate is allowed only when logging transactions (-l) \n"); + fprintf(stderr, "log sampling (--sampling-rate) is allowed only when logging transactions (-l)\n"); exit(1); } /* --sampling-rate may must not be used with --aggregate-interval */ if (sample_rate > 0.0 && agg_interval > 0) { - fprintf(stderr, "log sampling (--sampling-rate) and aggregation (--aggregate-interval) can't be used at the same time\n"); + fprintf(stderr, "log sampling (--sampling-rate) and aggregation (--aggregate-interval) cannot be used at the same time\n"); exit(1); } - if (agg_interval > 0 && (!use_log)) + if (agg_interval > 0 && !use_log) { fprintf(stderr, "log aggregation is allowed only when actually logging transactions\n"); exit(1); } - if ((duration > 0) && (agg_interval > duration)) + if (duration > 0 && agg_interval > duration) { - fprintf(stderr, "number of seconds for aggregation (%d) must not be higher that test duration (%d)\n", agg_interval, duration); + fprintf(stderr, "number of seconds for aggregation (%d) must not be higher than test duration (%d)\n", agg_interval, duration); exit(1); } - if ((duration > 0) && (agg_interval > 0) && (duration % agg_interval != 0)) + if (duration > 0 && agg_interval > 0 && duration % agg_interval != 0) { fprintf(stderr, "duration (%d) must be a multiple of aggregation interval (%d)\n", duration, agg_interval); exit(1); @@ -3251,7 +3262,7 @@ main(int argc, char **argv) if (PQstatus(con) == CONNECTION_BAD) { - fprintf(stderr, "Connection to database '%s' failed.\n", dbName); + fprintf(stderr, "connection to database \"%s\" failed\n", dbName); fprintf(stderr, "%s", PQerrorMessage(con)); exit(1); } @@ -3271,7 +3282,8 @@ main(int argc, char **argv) scale = atoi(PQgetvalue(res, 0, 0)); if (scale < 0) { - fprintf(stderr, "count(*) from pgbench_branches invalid (%d)\n", scale); + fprintf(stderr, "invalid count(*) from pgbench_branches: \"%s\"\n", + PQgetvalue(res, 0, 0)); exit(1); } PQclear(res); @@ -3279,7 +3291,7 @@ main(int argc, char **argv) /* warn if we override user-given -s switch */ if (scale_given) fprintf(stderr, - "Scale option ignored, using pgbench_branches table count = %d\n", + "scale option ignored, using count from pgbench_branches table (%d)\n", scale); } @@ -3416,7 +3428,7 @@ main(int argc, char **argv) if (err != 0 || thread->thread == INVALID_THREAD) { - fprintf(stderr, "cannot create thread: %s\n", strerror(err)); + fprintf(stderr, "could not create thread: %s\n", strerror(err)); exit(1); } } @@ -3528,7 +3540,8 @@ threadRun(void *arg) if (logfile == NULL) { - fprintf(stderr, "Couldn't open logfile \"%s\": %s", logpath, strerror(errno)); + fprintf(stderr, "could not open logfile \"%s\": %s\n", + logpath, strerror(errno)); goto done; } } @@ -3562,7 +3575,8 @@ threadRun(void *arg) if (st->ecnt > prev_ecnt && commands[st->state]->type == META_COMMAND) { - fprintf(stderr, "Client %d aborted in state %d. Execution meta-command failed.\n", i, st->state); + fprintf(stderr, "client %d aborted in state %d; execution of meta-command failed\n", + i, st->state); remains--; /* I've aborted */ PQfinish(st->con); st->con = NULL; @@ -3638,6 +3652,33 @@ threadRun(void *arg) maxsock = sock; } + /* also wake up to print the next progress report on time */ + if (progress && min_usec > 0 +#if !defined(PTHREAD_FORK_EMULATION) + && thread->tid == 0 +#endif /* !PTHREAD_FORK_EMULATION */ + ) + { + /* get current time if needed */ + if (now_usec == 0) + { + instr_time now; + + INSTR_TIME_SET_CURRENT(now); + now_usec = INSTR_TIME_GET_MICROSEC(now); + } + + if (now_usec >= next_report) + min_usec = 0; + else if ((next_report - now_usec) < min_usec) + min_usec = next_report - now_usec; + } + + /* + * Sleep until we receive data from the server, or a nap-time + * specified in the script ends, or it's time to print a progress + * report. + */ if (min_usec > 0 && maxsock != -1) { int nsocks; /* return from select(2) */ @@ -3657,7 +3698,7 @@ threadRun(void *arg) if (errno == EINTR) continue; /* must be something wrong */ - fprintf(stderr, "select failed: %s\n", strerror(errno)); + fprintf(stderr, "select() failed: %s\n", strerror(errno)); goto done; } } @@ -3678,7 +3719,8 @@ threadRun(void *arg) if (st->ecnt > prev_ecnt && commands[st->state]->type == META_COMMAND) { - fprintf(stderr, "Client %d aborted in state %d. Execution of meta-command failed.\n", i, st->state); + fprintf(stderr, "client %d aborted in state %d; execution of meta-command failed\n", + i, st->state); remains--; /* I've aborted */ PQfinish(st->con); st->con = NULL; @@ -3743,7 +3785,15 @@ threadRun(void *arg) last_lags = lags; last_report = now; last_skipped = thread->throttle_latency_skipped; - next_report += (int64) progress *1000000; + + /* + * Ensure that the next report is in the future, in case + * pgbench/postgres got stuck somewhere. + */ + do + { + next_report += (int64) progress *1000000; + } while (now >= next_report); } } #else @@ -3807,7 +3857,15 @@ threadRun(void *arg) last_lags = lags; last_report = now; last_skipped = thread->throttle_latency_skipped; - next_report += (int64) progress *1000000; + + /* + * Ensure that the next report is in the future, in case + * pgbench/postgres got stuck somewhere. + */ + do + { + next_report += (int64) progress *1000000; + } while (now >= next_report); } } #endif /* PTHREAD_FORK_EMULATION */ @@ -3961,7 +4019,7 @@ setalarm(int seconds) win32_timer_callback, NULL, seconds * 1000, 0, WT_EXECUTEINTIMERTHREAD | WT_EXECUTEONLYONCE)) { - fprintf(stderr, "Failed to set timer\n"); + fprintf(stderr, "failed to set timer\n"); exit(1); } } diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 38253fa09886e..fd7bb7db1fce6 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -1641,7 +1641,8 @@ do_connect(char *dbname, char *user, char *host, char *port) * positional syntax. */ keep_password = - ((strcmp(user, PQuser(o_conn)) == 0) && + (o_conn && + (strcmp(user, PQuser(o_conn)) == 0) && (!host || strcmp(host, PQhost(o_conn)) == 0) && (strcmp(port, PQport(o_conn)) == 0) && !has_connection_string); @@ -1768,7 +1769,8 @@ do_connect(char *dbname, char *user, char *host, char *port) /* Tell the user about the new connection */ if (!pset.quiet) { - if (param_is_newly_set(PQhost(o_conn), PQhost(pset.db)) || + if (!o_conn || + param_is_newly_set(PQhost(o_conn), PQhost(pset.db)) || param_is_newly_set(PQport(o_conn), PQport(pset.db))) { char *host = PQhost(pset.db); @@ -2300,11 +2302,11 @@ _align2string(enum printFormat in) } /* - * Parse entered unicode linestyle. Returns true, when entered string is - * known linestyle: single, double else returns false. + * Parse entered unicode linestyle. If ok, update *linestyle and return + * true, else return false. */ static bool -set_unicode_line_style(printQueryOpt *popt, const char *value, size_t vallen, +set_unicode_line_style(const char *value, size_t vallen, unicode_linestyle *linestyle) { if (pg_strncasecmp("single", value, vallen) == 0) @@ -2313,10 +2315,6 @@ set_unicode_line_style(printQueryOpt *popt, const char *value, size_t vallen, *linestyle = UNICODE_LINESTYLE_DOUBLE; else return false; - - /* input is ok, generate new unicode style */ - refresh_utf8format(&(popt->topt)); - return true; } @@ -2372,7 +2370,7 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) popt->topt.format = PRINT_TROFF_MS; else { - psql_error("\\pset: allowed formats are unaligned, aligned, wrapped, html, asciidoc, latex, troff-ms\n"); + psql_error("\\pset: allowed formats are unaligned, aligned, wrapped, html, asciidoc, latex, latex-longtable, troff-ms\n"); return false; } @@ -2402,10 +2400,12 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) { if (!value) ; - else if (!set_unicode_line_style(popt, value, vallen, - &popt->topt.unicode_border_linestyle)) + else if (set_unicode_line_style(value, vallen, + &popt->topt.unicode_border_linestyle)) + refresh_utf8format(&(popt->topt)); + else { - psql_error("\\pset: allowed unicode border linestyle are single, double\n"); + psql_error("\\pset: allowed unicode border linestyles are single, double\n"); return false; } } @@ -2415,10 +2415,12 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) { if (!value) ; - else if (!set_unicode_line_style(popt, value, vallen, - &popt->topt.unicode_column_linestyle)) + else if (set_unicode_line_style(value, vallen, + &popt->topt.unicode_column_linestyle)) + refresh_utf8format(&(popt->topt)); + else { - psql_error("\\pset: allowed unicode column linestyle are single, double\n"); + psql_error("\\pset: allowed unicode column linestyles are single, double\n"); return false; } } @@ -2428,10 +2430,12 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) { if (!value) ; - else if (!set_unicode_line_style(popt, value, vallen, - &popt->topt.unicode_header_linestyle)) + else if (set_unicode_line_style(value, vallen, + &popt->topt.unicode_header_linestyle)) + refresh_utf8format(&(popt->topt)); + else { - psql_error("\\pset: allowed unicode header linestyle are single, double\n"); + psql_error("\\pset: allowed unicode header linestyles are single, double\n"); return false; } } @@ -2690,7 +2694,9 @@ printPsetInfo(const char *param, struct printQueryOpt *popt) /* show minimum lines for pager use */ else if (strcmp(param, "pager_min_lines") == 0) { - printf(_("Pager won't be used for less than %d lines\n"), + printf(ngettext("Pager won't be used for less than %d line.\n", + "Pager won't be used for less than %d lines.\n", + popt->topt.pager_min_lines), popt->topt.pager_min_lines); } @@ -2754,7 +2760,7 @@ printPsetInfo(const char *param, struct printQueryOpt *popt) else if (strcmp(param, "unicode_header_linestyle") == 0) { - printf(_("Unicode border linestyle is \"%s\".\n"), + printf(_("Unicode header linestyle is \"%s\".\n"), _unicode_linestyle2string(popt->topt.unicode_header_linestyle)); } diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index db568096dcef9..92ed6e297038a 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -1234,6 +1234,7 @@ describeOneTableDetails(const char *schemaname, bool hasrules; bool hastriggers; bool rowsecurity; + bool forcerowsecurity; bool hasoids; Oid tablespace; char *reloptions; @@ -1259,8 +1260,8 @@ describeOneTableDetails(const char *schemaname, { printfPQExpBuffer(&buf, "SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, " - "c.relhastriggers, c.relrowsecurity, c.relhasoids, " - "%s, c.reltablespace, " + "c.relhastriggers, c.relrowsecurity, c.relforcerowsecurity, " + "c.relhasoids, %s, c.reltablespace, " "CASE WHEN c.reloftype = 0 THEN '' ELSE c.reloftype::pg_catalog.regtype::pg_catalog.text END, " "c.relpersistence, c.relreplident\n" "FROM pg_catalog.pg_class c\n " @@ -1276,7 +1277,7 @@ describeOneTableDetails(const char *schemaname, { printfPQExpBuffer(&buf, "SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, " - "c.relhastriggers, false, c.relhasoids, " + "c.relhastriggers, false, false, c.relhasoids, " "%s, c.reltablespace, " "CASE WHEN c.reloftype = 0 THEN '' ELSE c.reloftype::pg_catalog.regtype::pg_catalog.text END, " "c.relpersistence, c.relreplident\n" @@ -1293,7 +1294,7 @@ describeOneTableDetails(const char *schemaname, { printfPQExpBuffer(&buf, "SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, " - "c.relhastriggers, false, c.relhasoids, " + "c.relhastriggers, false, false, c.relhasoids, " "%s, c.reltablespace, " "CASE WHEN c.reloftype = 0 THEN '' ELSE c.reloftype::pg_catalog.regtype::pg_catalog.text END, " "c.relpersistence\n" @@ -1310,7 +1311,7 @@ describeOneTableDetails(const char *schemaname, { printfPQExpBuffer(&buf, "SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, " - "c.relhastriggers, false, c.relhasoids, " + "c.relhastriggers, false, false, c.relhasoids, " "%s, c.reltablespace, " "CASE WHEN c.reloftype = 0 THEN '' ELSE c.reloftype::pg_catalog.regtype::pg_catalog.text END\n" "FROM pg_catalog.pg_class c\n " @@ -1326,7 +1327,7 @@ describeOneTableDetails(const char *schemaname, { printfPQExpBuffer(&buf, "SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, " - "c.relhastriggers, false, c.relhasoids, " + "c.relhastriggers, false, false, c.relhasoids, " "%s, c.reltablespace\n" "FROM pg_catalog.pg_class c\n " "LEFT JOIN pg_catalog.pg_class tc ON (c.reltoastrelid = tc.oid)\n" @@ -1341,7 +1342,7 @@ describeOneTableDetails(const char *schemaname, { printfPQExpBuffer(&buf, "SELECT relchecks, relkind, relhasindex, relhasrules, " - "reltriggers <> 0, false, relhasoids, " + "reltriggers <> 0, false, false, relhasoids, " "%s, reltablespace\n" "FROM pg_catalog.pg_class WHERE oid = '%s';", (verbose ? @@ -1352,7 +1353,7 @@ describeOneTableDetails(const char *schemaname, { printfPQExpBuffer(&buf, "SELECT relchecks, relkind, relhasindex, relhasrules, " - "reltriggers <> 0, false, relhasoids, " + "reltriggers <> 0, false, false, relhasoids, " "'', reltablespace\n" "FROM pg_catalog.pg_class WHERE oid = '%s';", oid); @@ -1361,7 +1362,7 @@ describeOneTableDetails(const char *schemaname, { printfPQExpBuffer(&buf, "SELECT relchecks, relkind, relhasindex, relhasrules, " - "reltriggers <> 0, false, relhasoids, " + "reltriggers <> 0, false, false, relhasoids, " "'', ''\n" "FROM pg_catalog.pg_class WHERE oid = '%s';", oid); @@ -1385,18 +1386,19 @@ describeOneTableDetails(const char *schemaname, tableinfo.hasrules = strcmp(PQgetvalue(res, 0, 3), "t") == 0; tableinfo.hastriggers = strcmp(PQgetvalue(res, 0, 4), "t") == 0; tableinfo.rowsecurity = strcmp(PQgetvalue(res, 0, 5), "t") == 0; - tableinfo.hasoids = strcmp(PQgetvalue(res, 0, 6), "t") == 0; + tableinfo.forcerowsecurity = strcmp(PQgetvalue(res, 0, 6), "t") == 0; + tableinfo.hasoids = strcmp(PQgetvalue(res, 0, 7), "t") == 0; tableinfo.reloptions = (pset.sversion >= 80200) ? - pg_strdup(PQgetvalue(res, 0, 7)) : NULL; + pg_strdup(PQgetvalue(res, 0, 8)) : NULL; tableinfo.tablespace = (pset.sversion >= 80000) ? - atooid(PQgetvalue(res, 0, 8)) : 0; + atooid(PQgetvalue(res, 0, 9)) : 0; tableinfo.reloftype = (pset.sversion >= 90000 && - strcmp(PQgetvalue(res, 0, 9), "") != 0) ? - pg_strdup(PQgetvalue(res, 0, 9)) : NULL; + strcmp(PQgetvalue(res, 0, 10), "") != 0) ? + pg_strdup(PQgetvalue(res, 0, 10)) : NULL; tableinfo.relpersistence = (pset.sversion >= 90100) ? - *(PQgetvalue(res, 0, 10)) : 0; + *(PQgetvalue(res, 0, 11)) : 0; tableinfo.relreplident = (pset.sversion >= 90400) ? - *(PQgetvalue(res, 0, 11)) : 'd'; + *(PQgetvalue(res, 0, 12)) : 'd'; PQclear(res); res = NULL; @@ -1611,7 +1613,7 @@ describeOneTableDetails(const char *schemaname, if (!PQgetisnull(res, i, 5)) { if (tmpbuf.len > 0) - appendPQExpBufferStr(&tmpbuf, " "); + appendPQExpBufferChar(&tmpbuf, ' '); appendPQExpBuffer(&tmpbuf, _("collate %s"), PQgetvalue(res, i, 5)); } @@ -1619,7 +1621,7 @@ describeOneTableDetails(const char *schemaname, if (strcmp(PQgetvalue(res, i, 3), "t") == 0) { if (tmpbuf.len > 0) - appendPQExpBufferStr(&tmpbuf, " "); + appendPQExpBufferChar(&tmpbuf, ' '); appendPQExpBufferStr(&tmpbuf, _("not null")); } @@ -1628,7 +1630,7 @@ describeOneTableDetails(const char *schemaname, if (strlen(PQgetvalue(res, i, 2)) != 0) { if (tmpbuf.len > 0) - appendPQExpBufferStr(&tmpbuf, " "); + appendPQExpBufferChar(&tmpbuf, ' '); /* translator: default values of column definitions */ appendPQExpBuffer(&tmpbuf, _("default %s"), PQgetvalue(res, i, 2)); @@ -2057,12 +2059,18 @@ describeOneTableDetails(const char *schemaname, * there aren't policies, or RLS isn't enabled but there are * policies */ - if (tableinfo.rowsecurity && tuples > 0) + if (tableinfo.rowsecurity && !tableinfo.forcerowsecurity && tuples > 0) printTableAddFooter(&cont, _("Policies:")); - if (tableinfo.rowsecurity && tuples == 0) + if (tableinfo.rowsecurity && tableinfo.forcerowsecurity && tuples > 0) + printTableAddFooter(&cont, _("Policies (Forced Row Security Enabled):")); + + if (tableinfo.rowsecurity && !tableinfo.forcerowsecurity && tuples == 0) printTableAddFooter(&cont, _("Policies (Row Security Enabled): (None)")); + if (tableinfo.rowsecurity && tableinfo.forcerowsecurity && tuples == 0) + printTableAddFooter(&cont, _("Policies (Forced Row Security Enabled): (None)")); + if (!tableinfo.rowsecurity && tuples > 0) printTableAddFooter(&cont, _("Policies (Row Security Disabled):")); @@ -2083,11 +2091,11 @@ describeOneTableDetails(const char *schemaname, } if (!PQgetisnull(result, i, 2)) - appendPQExpBuffer(&buf, "\n USING %s", + appendPQExpBuffer(&buf, "\n USING (%s)", PQgetvalue(result, i, 2)); if (!PQgetisnull(result, i, 3)) - appendPQExpBuffer(&buf, "\n WITH CHECK %s", + appendPQExpBuffer(&buf, "\n WITH CHECK (%s)", PQgetvalue(result, i, 3)); printTableAddFooter(&cont, buf.data); @@ -2440,7 +2448,7 @@ describeOneTableDetails(const char *schemaname, printfPQExpBuffer(&buf, "%*s %s", sw, "", PQgetvalue(result, i, 0)); if (i < tuples - 1) - appendPQExpBufferStr(&buf, ","); + appendPQExpBufferChar(&buf, ','); printTableAddFooter(&cont, buf.data); } diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index b523054825f5e..5fb11ed526a5a 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -81,14 +81,15 @@ usage(unsigned short int pager) fprintf(output, _(" -f, --file=FILENAME execute commands from file, then exit\n")); fprintf(output, _(" -l, --list list available databases, then exit\n")); fprintf(output, _(" -v, --set=, --variable=NAME=VALUE\n" - " set psql variable NAME to VALUE e.g.: -v ON_ERROR_STOP=1\n")); + " set psql variable NAME to VALUE\n" + " (e.g., -v ON_ERROR_STOP=1)\n")); fprintf(output, _(" -V, --version output version information, then exit\n")); fprintf(output, _(" -X, --no-psqlrc do not read startup file (~/.psqlrc)\n")); fprintf(output, _(" -1 (\"one\"), --single-transaction\n" " execute as a single transaction (if non-interactive)\n")); fprintf(output, _(" -?, --help[=options] show this help, then exit\n")); - fprintf(output, _(" --help=variables show a list of all specially treated variables, then exit\n")); - fprintf(output, _(" --help=commands show a list of backslash commands, then exit\n")); + fprintf(output, _(" --help=commands list backslash commands, then exit\n")); + fprintf(output, _(" --help=variables list special variables, then exit\n")); fprintf(output, _("\nInput and output options:\n")); fprintf(output, _(" -a, --echo-all echo all input from script\n")); diff --git a/src/bin/psql/input.c b/src/bin/psql/input.c index 437fa4d663ae6..e3771040072f6 100644 --- a/src/bin/psql/input.c +++ b/src/bin/psql/input.c @@ -378,10 +378,10 @@ initializeInput(int flags) * * max_lines: if >= 0, limit history file to that many entries. */ +#ifdef USE_READLINE static bool saveHistory(char *fname, int max_lines) { -#ifdef USE_READLINE int errnum; /* @@ -446,10 +446,10 @@ saveHistory(char *fname, int max_lines) psql_error("could not save history to file \"%s\": %s\n", fname, strerror(errnum)); } -#endif - return false; } +#endif + /* diff --git a/src/bin/psql/po/de.po b/src/bin/psql/po/de.po index e08e27e5c5a9d..2b1d1da364485 100644 --- a/src/bin/psql/po/de.po +++ b/src/bin/psql/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-05-19 00:43+0000\n" -"PO-Revision-Date: 2015-05-18 22:54-0400\n" +"POT-Creation-Date: 2015-09-29 15:13+0000\n" +"PO-Revision-Date: 2015-10-01 22:28-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -138,7 +138,7 @@ msgstr "konnte Home-Verzeichnis für Benutzer-ID %ld nicht ermitteln: %s\n" msgid "\\%s: could not change directory to \"%s\": %s\n" msgstr "\\%s: konnte nicht in das Verzeichnis „%s“ wechseln: %s\n" -#: command.c:304 common.c:442 common.c:500 common.c:966 +#: command.c:304 common.c:442 common.c:500 common.c:962 #, c-format msgid "You are currently not connected to a database.\n" msgstr "Sie sind gegenwärtig nicht mit einer Datenbank verbunden.\n" @@ -153,12 +153,12 @@ msgstr "Sie sind verbunden mit der Datenbank „%s“ als Benutzer „%s“ via 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:535 command.c:605 command.c:1404 +#: command.c:535 command.c:605 command.c:1405 #, c-format msgid "no query buffer\n" msgstr "kein Anfragepuffer\n" -#: command.c:568 command.c:3158 +#: command.c:568 command.c:3161 #, c-format msgid "invalid line number: %s\n" msgstr "ungültige Zeilennummer: %s\n" @@ -178,7 +178,7 @@ msgid "%s: invalid encoding name or conversion procedure not found\n" msgstr "%s: ungültiger Kodierungsname oder Umwandlungsprozedur nicht gefunden\n" #: command.c:830 command.c:880 command.c:894 command.c:911 command.c:1018 -#: command.c:1181 command.c:1384 command.c:1415 +#: command.c:1182 command.c:1385 command.c:1416 #, c-format msgid "\\%s: missing required argument\n" msgstr "\\%s: notwendiges Argument fehlt\n" @@ -205,108 +205,108 @@ msgstr "Passwörter stimmten nicht überein.\n" msgid "Password encryption failed.\n" msgstr "Passwortverschlüsselung ist fehlgeschlagen.\n" -#: command.c:1047 command.c:1162 command.c:1389 +#: command.c:1047 command.c:1163 command.c:1390 #, c-format msgid "\\%s: error while setting variable\n" msgstr "\\%s: Fehler beim Setzen der Variable\n" -#: command.c:1109 +#: command.c:1110 msgid "Query buffer reset (cleared)." msgstr "Anfragepuffer wurde gelöscht." -#: command.c:1121 +#: command.c:1122 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Befehlsgeschichte in Datei „%s“ geschrieben.\n" -#: command.c:1186 +#: command.c:1187 #, c-format msgid "\\%s: environment variable name must not contain \"=\"\n" msgstr "\\%s: Name der Umgebungsvariable darf kein „=“ enthalten\n" -#: command.c:1228 +#: command.c:1229 #, c-format msgid "The server (version %d.%d) does not support showing function source.\n" msgstr "Der Server (Version %d.%d) unterstützt das Anzeigen des Funktionsquelltextes nicht.\n" -#: command.c:1234 +#: command.c:1235 #, c-format msgid "function name is required\n" msgstr "Funktionsname wird benötigt\n" -#: command.c:1369 +#: command.c:1370 msgid "Timing is on." msgstr "Zeitmessung ist an." -#: command.c:1371 +#: command.c:1372 msgid "Timing is off." msgstr "Zeitmessung ist aus." -#: command.c:1432 command.c:1452 command.c:2081 command.c:2084 command.c:2087 -#: command.c:2093 command.c:2095 command.c:2103 command.c:2113 command.c:2122 -#: command.c:2136 command.c:2153 command.c:2212 common.c:74 copy.c:333 +#: command.c:1433 command.c:1453 command.c:2084 command.c:2087 command.c:2090 +#: command.c:2096 command.c:2098 command.c:2106 command.c:2116 command.c:2125 +#: command.c:2139 command.c:2156 command.c:2215 common.c:74 copy.c:333 #: copy.c:393 copy.c:408 psqlscan.l:1700 psqlscan.l:1711 psqlscan.l:1721 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" -#: command.c:1543 +#: command.c:1544 #, c-format msgid "+ opt(%d) = |%s|\n" msgstr "+ opt(%d) = |%s|\n" -#: command.c:1569 startup.c:195 +#: command.c:1570 startup.c:195 msgid "Password: " msgstr "Passwort: " -#: command.c:1574 startup.c:197 +#: command.c:1575 startup.c:197 #, c-format msgid "Password for user %s: " msgstr "Passwort für Benutzer %s: " -#: command.c:1621 +#: command.c:1622 #, c-format msgid "All connection parameters must be supplied because no database connection exists\n" msgstr "Alle Verbindungsparameter müssen angegeben werden, weil keine Datenbankverbindung besteht\n" -#: command.c:1738 command.c:3192 common.c:120 common.c:413 common.c:1009 -#: common.c:1034 common.c:1134 copy.c:492 copy.c:700 large_obj.c:156 +#: command.c:1740 command.c:3195 common.c:120 common.c:413 common.c:1005 +#: common.c:1030 common.c:1130 copy.c:492 copy.c:702 large_obj.c:156 #: large_obj.c:191 large_obj.c:253 psqlscan.l:1972 #, c-format msgid "%s" msgstr "%s" -#: command.c:1742 +#: command.c:1744 #, c-format msgid "Previous connection kept\n" msgstr "Vorherige Verbindung wurde behalten\n" -#: command.c:1746 +#: command.c:1748 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:1779 +#: command.c:1782 #, 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:1782 +#: command.c:1785 #, 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:1786 +#: command.c:1789 #, 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:1820 +#: command.c:1823 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, Server %s)\n" -#: command.c:1828 +#: command.c:1831 #, c-format msgid "" "WARNING: %s major version %d.%d, server major version %d.%d.\n" @@ -315,24 +315,24 @@ msgstr "" "WARNUNG: %s-Hauptversion %d.%d, Server-Hauptversion %d.%d.\n" " Einige Features von psql werden eventuell nicht funktionieren.\n" -#: command.c:1862 +#: command.c:1865 #, 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:1863 command.c:1864 command.c:1865 +#: command.c:1866 command.c:1867 command.c:1868 msgid "unknown" msgstr "unbekannt" -#: command.c:1866 help.c:46 +#: command.c:1869 help.c:46 msgid "off" msgstr "aus" -#: command.c:1866 help.c:46 +#: command.c:1869 help.c:46 msgid "on" msgstr "an" -#: command.c:1886 +#: command.c:1889 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -344,232 +344,232 @@ msgstr "" " richtig. Einzelheiten finden Sie auf der psql-Handbuchseite unter\n" " „Notes for Windows users“.\n" -#: command.c:1970 +#: command.c:1973 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number\n" msgstr "Umgebungsvariable PSQL_EDITOR_LINENUMBER_ARG muss gesetzt werden, um eine Zeilennummer angeben zu können\n" -#: command.c:1999 +#: command.c:2002 #, c-format msgid "could not start editor \"%s\"\n" msgstr "konnte Editor „%s“ nicht starten\n" -#: command.c:2001 +#: command.c:2004 #, c-format msgid "could not start /bin/sh\n" msgstr "konnte /bin/sh nicht starten\n" -#: command.c:2039 +#: command.c:2042 #, c-format msgid "could not locate temporary directory: %s\n" msgstr "konnte temporäres Verzeichnis nicht finden: %s\n" -#: command.c:2066 +#: command.c:2069 #, c-format msgid "could not open temporary file \"%s\": %s\n" msgstr "konnte temporäre Datei „%s“ nicht öffnen: %s\n" -#: command.c:2374 +#: command.c:2377 #, c-format -msgid "\\pset: allowed formats are unaligned, aligned, wrapped, html, asciidoc, latex, troff-ms\n" -msgstr "\\pset: zulässige Formate sind unaligned, aligned, wrapped, html, asciidoc, latex, troff-ms\n" +msgid "\\pset: allowed formats are unaligned, aligned, wrapped, html, asciidoc, latex, latex-longtable, troff-ms\n" +msgstr "\\pset: zulässige Formate sind unaligned, aligned, wrapped, html, asciidoc, latex, latex-longtable, troff-ms\n" -#: command.c:2393 +#: command.c:2396 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" msgstr "\\pset: zulässige Linienstile sind ascii, old-ascii, unicode\n" -#: command.c:2407 +#: command.c:2410 #, fuzzy, c-format #| msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" msgid "\\pset: allowed unicode border linestyle are single, double\n" msgstr "\\pset: zulässige Linienstile sind ascii, old-ascii, unicode\n" -#: command.c:2420 +#: command.c:2423 #, fuzzy, c-format #| msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" msgid "\\pset: allowed unicode column linestyle are single, double\n" msgstr "\\pset: zulässige Linienstile sind ascii, old-ascii, unicode\n" -#: command.c:2433 +#: command.c:2436 #, fuzzy, c-format #| msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" msgid "\\pset: allowed unicode header linestyle are single, double\n" msgstr "\\pset: zulässige Linienstile sind ascii, old-ascii, unicode\n" -#: command.c:2585 command.c:2762 +#: command.c:2588 command.c:2765 #, c-format msgid "\\pset: unknown option: %s\n" msgstr "\\pset: unbekannte Option: %s\n" -#: command.c:2603 +#: command.c:2606 #, c-format msgid "Border style is %d.\n" msgstr "Rahmenstil ist %d.\n" -#: command.c:2609 +#: command.c:2612 #, c-format msgid "Target width is unset.\n" msgstr "Zielbreite ist nicht gesetzt.\n" -#: command.c:2611 +#: command.c:2614 #, c-format msgid "Target width is %d.\n" msgstr "Zielbreite ist %d.\n" -#: command.c:2618 +#: command.c:2621 #, c-format msgid "Expanded display is on.\n" msgstr "Erweiterte Anzeige ist an.\n" -#: command.c:2620 +#: command.c:2623 #, c-format msgid "Expanded display is used automatically.\n" msgstr "Erweiterte Anzeige wird automatisch verwendet.\n" -#: command.c:2622 +#: command.c:2625 #, c-format msgid "Expanded display is off.\n" msgstr "Erweiterte Anzeige ist aus.\n" -#: command.c:2629 command.c:2637 +#: command.c:2632 command.c:2640 #, c-format msgid "Field separator is zero byte.\n" msgstr "Feldtrennzeichen ist ein Null-Byte.\n" -#: command.c:2631 +#: command.c:2634 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Feldtrennzeichen ist „%s“.\n" -#: command.c:2644 +#: command.c:2647 #, c-format msgid "Default footer is on.\n" msgstr "Standardfußzeile ist an.\n" -#: command.c:2646 +#: command.c:2649 #, c-format msgid "Default footer is off.\n" msgstr "Standardfußzeile ist aus.\n" -#: command.c:2652 +#: command.c:2655 #, c-format msgid "Output format is %s.\n" msgstr "Ausgabeformat ist „%s“.\n" -#: command.c:2658 +#: command.c:2661 #, c-format msgid "Line style is %s.\n" msgstr "Linienstil ist %s.\n" -#: command.c:2665 +#: command.c:2668 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null-Anzeige ist „%s“.\n" -#: command.c:2673 +#: command.c:2676 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "Lokalisiertes Format für numerische Daten ist an.\n" -#: command.c:2675 +#: command.c:2678 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "Lokalisiertes Format für numerische Daten ist aus.\n" -#: command.c:2682 +#: command.c:2685 #, c-format msgid "Pager is used for long output.\n" msgstr "Pager wird für lange Ausgaben verwendet.\n" -#: command.c:2684 +#: command.c:2687 #, c-format msgid "Pager is always used.\n" msgstr "Pager wird immer verwendet.\n" -#: command.c:2686 +#: command.c:2689 #, c-format msgid "Pager usage is off.\n" msgstr "Pager-Verwendung ist aus.\n" -#: command.c:2692 +#: command.c:2695 #, c-format msgid "Pager won't be used for less than %d lines\n" -msgstr "" +msgstr "Pager wird nicht für weniger als %d Zeilen verwendet werden\n" -#: command.c:2700 command.c:2710 +#: command.c:2703 command.c:2713 #, c-format msgid "Record separator is zero byte.\n" msgstr "Satztrennzeichen ist ein Null-Byte.\n" -#: command.c:2702 +#: command.c:2705 #, c-format msgid "Record separator is .\n" msgstr "Satztrennzeichen ist .\n" -#: command.c:2704 +#: command.c:2707 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Satztrennzeichen ist „%s“.\n" -#: command.c:2717 +#: command.c:2720 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Tabellenattribute sind „%s“.\n" -#: command.c:2720 +#: command.c:2723 #, c-format msgid "Table attributes unset.\n" msgstr "Tabellenattribute sind nicht gesetzt.\n" -#: command.c:2727 +#: command.c:2730 #, c-format msgid "Title is \"%s\".\n" msgstr "Titel ist „%s“.\n" -#: command.c:2729 +#: command.c:2732 #, c-format msgid "Title is unset.\n" msgstr "Titel ist nicht gesetzt.\n" -#: command.c:2736 +#: command.c:2739 #, c-format msgid "Tuples only is on.\n" msgstr "Nur Datenzeilen ist an.\n" -#: command.c:2738 +#: command.c:2741 #, c-format msgid "Tuples only is off.\n" msgstr "Nur Datenzeilen ist aus.\n" -#: command.c:2744 command.c:2756 +#: command.c:2747 command.c:2759 #, fuzzy, c-format #| msgid "Border style is %d.\n" msgid "Unicode border linestyle is \"%s\".\n" msgstr "Rahmenstil ist %d.\n" -#: command.c:2750 +#: command.c:2753 #, fuzzy, c-format #| msgid "Line style is %s.\n" msgid "Unicode column linestyle is \"%s\".\n" msgstr "Linienstil ist %s.\n" -#: command.c:2916 +#: command.c:2919 #, c-format msgid "\\!: failed\n" msgstr "\\!: fehlgeschlagen\n" -#: command.c:2936 common.c:549 +#: command.c:2939 common.c:548 #, c-format msgid "\\watch cannot be used with an empty query\n" msgstr "\\watch kann nicht mit einer leeren Anfrage verwendet werden\n" -#: command.c:2957 +#: command.c:2960 #, c-format msgid "Watch every %lds\t%s" msgstr "\\watch alle %lds\t%s" -#: command.c:3008 command.c:3015 common.c:448 common.c:455 common.c:992 +#: command.c:3011 command.c:3018 common.c:448 common.c:455 common.c:988 #, c-format msgid "" "********* QUERY **********\n" @@ -602,52 +602,52 @@ msgstr "Fehlgeschlagen.\n" msgid "Succeeded.\n" msgstr "Erfolgreich.\n" -#: common.c:403 common.c:760 common.c:931 +#: common.c:403 common.c:759 common.c:927 #, c-format msgid "unexpected PQresultStatus: %d\n" msgstr "unerwarteter PQresultStatus: %d\n" -#: common.c:556 +#: common.c:555 #, c-format msgid "\\watch cannot be used with COPY\n" msgstr "\\watch kann nicht mit COPY verwendet werden\n" -#: common.c:561 +#: common.c:560 #, c-format msgid "unexpected result status for \\watch\n" msgstr "unerwarteter Ergebnisstatus für \\watch\n" -#: common.c:572 common.c:1150 +#: common.c:571 common.c:1146 #, c-format msgid "Time: %.3f ms\n" msgstr "Zeit: %.3f ms\n" -#: common.c:590 +#: common.c:589 #, c-format msgid "Asynchronous notification \"%s\" with payload \"%s\" received from server process with PID %d.\n" msgstr "Asynchrone Benachrichtigung „%s“ mit Daten „%s“ vom Serverprozess mit PID %d empfangen.\n" -#: common.c:593 +#: common.c:592 #, c-format msgid "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "Asynchrone Benachrichtigung „%s“ vom Serverprozess mit PID %d empfangen.\n" -#: common.c:655 +#: common.c:654 #, c-format msgid "no rows returned for \\gset\n" msgstr "keine Zeilen für \\gset zurückgegeben\n" -#: common.c:660 +#: common.c:659 #, c-format msgid "more than one row returned for \\gset\n" msgstr "mehr als eine Zeile für \\gset zurückgegeben\n" -#: common.c:686 +#: common.c:685 #, c-format msgid "could not set variable \"%s\"\n" msgstr "konnte Variable „%s“ nicht setzen\n" -#: common.c:974 +#: common.c:970 #, c-format msgid "" "***(Single step mode: verify command)*******************************************\n" @@ -658,17 +658,17 @@ msgstr "" "%s\n" "***(Drücken Sie die Eingabetaste um fortzufahren oder „x“ um abzubrechen)*******\n" -#: common.c:1025 +#: common.c:1021 #, c-format msgid "The server (version %d.%d) does not support savepoints for ON_ERROR_ROLLBACK.\n" msgstr "Der Server (Version %d.%d) unterstützt keine Sicherungspunkte für ON_ERROR_ROLLBACK.\n" -#: common.c:1079 +#: common.c:1075 #, c-format msgid "STATEMENT: %s\n" msgstr "ANWEISUNG: %s\n" -#: common.c:1122 +#: common.c:1118 #, c-format msgid "unexpected transaction status (%d)\n" msgstr "unerwarteter Transaktionsstatus (%d)\n" @@ -730,11 +730,11 @@ msgstr "" "Geben Sie die zu kopierenden Daten ein, gefolgt von einem Zeilenende.\n" "Beenden Sie mit einem Backslash und einem Punkt alleine auf einer Zeile." -#: copy.c:672 +#: copy.c:674 msgid "aborted because of read failure" msgstr "abgebrochen wegen Lesenfehlers" -#: copy.c:696 +#: copy.c:698 msgid "trying to exit copy mode" msgstr "versuche, den COPY-Modus zu verlassen" @@ -957,7 +957,7 @@ msgstr "Spaltenprivilegien" #: describe.c:818 msgid "Policies" -msgstr "" +msgstr "Policys" #: describe.c:844 describe.c:4601 describe.c:4605 msgid "Access privileges" @@ -1183,7 +1183,7 @@ msgstr "Fremdschlüsselverweise von:" #: describe.c:2061 msgid "Policies:" -msgstr "" +msgstr "Policys:" #: describe.c:2064 msgid "Policies (Row Security Enabled): (None)" @@ -1749,7 +1749,7 @@ msgstr "" "psql ist das interaktive PostgreSQL-Terminal.\n" "\n" -#: help.c:71 help.c:313 help.c:346 help.c:373 +#: help.c:71 help.c:314 help.c:347 help.c:374 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" @@ -1791,28 +1791,27 @@ msgid " -l, --list list available databases, then exit\n" msgstr " -l, --list verfügbare Datenbanken auflisten und beenden\n" #: help.c:83 -#, fuzzy, c-format -#| msgid "" -#| " -v, --set=, --variable=NAME=VALUE\n" -#| " set psql variable NAME to VALUE\n" +#, c-format msgid "" " -v, --set=, --variable=NAME=VALUE\n" -" set psql variable NAME to VALUE e.g.: -v ON_ERROR_STOP=1\n" +" set psql variable NAME to VALUE\n" +" (e.g., -v ON_ERROR_STOP=1)\n" msgstr "" " -v, --set=, --variable=NAME=WERT\n" " psql-Variable NAME auf WERT setzen\n" +" (z.B. -v ON_ERROR_STOP=1)\n" -#: help.c:85 +#: help.c:86 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: help.c:86 +#: help.c:87 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr " -X, --no-psqlrc Startdatei (~/.psqlrc) nicht lesen\n" -#: help.c:87 +#: help.c:88 #, c-format msgid "" " -1 (\"one\"), --single-transaction\n" @@ -1822,24 +1821,23 @@ msgstr "" " als eine einzige Transaktion ausführen (wenn nicht\n" " interaktiv)\n" -#: help.c:89 -#, fuzzy, c-format -#| msgid " -?, --help show this help, then exit\n" -msgid " -?, --help[=options] show this help, then exit\n" -msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" - #: help.c:90 #, c-format -msgid " --help=variables show a list of all specially treated variables, then exit\n" -msgstr "" +msgid " -?, --help[=options] show this help, then exit\n" +msgstr " -?, --help[=options] diese Hilfe anzeigen, dann beenden\n" #: help.c:91 #, fuzzy, c-format +msgid " --help=commands list backslash commands, then exit\n" +msgstr " --help=commands Backslash-Befehle auflisten, dann beenden\n" + +#: help.c:92 +#, fuzzy, c-format #| msgid " -?, --help show this help, then exit\n" -msgid " --help=commands show a list of backslash commands, then exit\n" +msgid " --help=variables list special variables, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: help.c:93 +#: help.c:94 #, c-format msgid "" "\n" @@ -1848,62 +1846,61 @@ msgstr "" "\n" "Eingabe- und Ausgabeoptionen:\n" -#: help.c:94 +#: help.c:95 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all Skript-Inhalt wiedergeben\n" -#: help.c:95 -#, fuzzy, c-format -#| msgid " -e, --echo-queries echo commands sent to server\n" +#: help.c:96 +#, c-format msgid " -b, --echo-errors echo failed commands\n" -msgstr " -e, --echo-queries an den Server geschickte Anweisungen zeigen\n" +msgstr " -b, --echo-errors fehlgeschlagene Anweisungen wiedergeben\n" -#: help.c:96 +#: help.c:97 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr " -e, --echo-queries an den Server geschickte Anweisungen zeigen\n" -#: help.c:97 +#: help.c:98 #, c-format msgid " -E, --echo-hidden display queries that internal commands generate\n" msgstr " -E, --echo-hidden von internen Anweisungen erzeugte Anfragen zeigen\n" -#: help.c:98 +#: help.c:99 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" msgstr "" " -L, --log-file=DATEINAME\n" " Sitzungslog in Datei senden\n" -#: help.c:99 +#: help.c:100 #, c-format msgid " -n, --no-readline disable enhanced command line editing (readline)\n" msgstr " -n, --no-readline erweiterte Zeilenbearbeitung (Readline) ausschalten\n" -#: help.c:100 +#: help.c:101 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" msgstr " -o, --output=DATEINAME Anfrageergebnisse in Datei (oder |Pipe) senden\n" -#: help.c:101 +#: help.c:102 #, c-format msgid " -q, --quiet run quietly (no messages, only query output)\n" msgstr "" " -q, --quiet stille Ausführung (keine Mitteilungen, nur\n" " Anfrageergebnisse)\n" -#: help.c:102 +#: help.c:103 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" msgstr " -s, --single-step Einzelschrittmodus (jede Anfrage bestätigen)\n" -#: help.c:103 +#: help.c:104 #, c-format msgid " -S, --single-line single-line mode (end of line terminates SQL command)\n" msgstr " -S, --single-line Einzelzeilenmodus (Zeilenende beendet SQL-Anweisung)\n" -#: help.c:105 +#: help.c:106 #, c-format msgid "" "\n" @@ -1912,12 +1909,12 @@ msgstr "" "\n" "Ausgabeformatoptionen:\n" -#: help.c:106 +#: help.c:107 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr " -A, --no-align unausgerichteter Tabellenausgabemodus\n" -#: help.c:107 +#: help.c:108 #, c-format msgid "" " -F, --field-separator=STRING\n" @@ -1927,19 +1924,19 @@ msgstr "" " Feldtrennzeichen für unausgerichteten Ausgabemodus\n" " (Standard: „%s“)\n" -#: help.c:110 +#: help.c:111 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html HTML-Tabellenausgabemodus\n" -#: help.c:111 +#: help.c:112 #, c-format msgid " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset command)\n" msgstr "" " -P, --pset=VAR[=ARG] Ausgabeoption VAR auf ARG setzen (siehe\n" " \\pset-Anweisung)\n" -#: help.c:112 +#: help.c:113 #, c-format msgid "" " -R, --record-separator=STRING\n" @@ -1949,22 +1946,22 @@ msgstr "" " Satztrennzeichen für unausgerichteten Ausgabemodus\n" " (Standard: Newline)\n" -#: help.c:114 +#: help.c:115 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr " -t, --tuples-only nur Datenzeilen ausgeben\n" -#: help.c:115 +#: help.c:116 #, c-format msgid " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)\n" msgstr " -T, --table-attr=TEXT HTML „table“-Tag-Attribute setzen (z.B. width, border)\n" -#: help.c:116 +#: help.c:117 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded erweiterte Tabellenausgabe einschalten\n" -#: help.c:117 +#: help.c:118 #, c-format msgid "" " -z, --field-separator-zero\n" @@ -1974,7 +1971,7 @@ msgstr "" " Feldtrennzeichen für unausgerichteten Ausgabemodus auf\n" " Null-Byte setzen\n" -#: help.c:119 +#: help.c:120 #, c-format msgid "" " -0, --record-separator-zero\n" @@ -1984,7 +1981,7 @@ msgstr "" " Satztrennzeichen für unausgerichteten Ausgabemodus auf\n" " Null-Byte setzen\n" -#: help.c:122 +#: help.c:123 #, c-format msgid "" "\n" @@ -1993,38 +1990,38 @@ msgstr "" "\n" "Verbindungsoptionen:\n" -#: help.c:125 +#: help.c:126 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory (default: \"%s\")\n" msgstr "" " -h, --host=HOSTNAME Hostname des Datenbankservers oder\n" " Socket-Verzeichnis (Standard: „%s“)\n" -#: help.c:126 +#: help.c:127 msgid "local socket" msgstr "lokales Socket" -#: help.c:129 +#: help.c:130 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr " -p, --port=PORT Port des Datenbankservers (Standard: „%s“)\n" -#: help.c:135 +#: help.c:136 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr " -U, --username=NAME Datenbank-Benutzername (Standard: „%s“)\n" -#: help.c:136 +#: help.c:137 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password niemals nach Passwort fragen\n" -#: help.c:137 +#: help.c:138 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password nach Passwort fragen (sollte automatisch geschehen)\n" -#: help.c:139 +#: help.c:140 #, c-format msgid "" "\n" @@ -2039,61 +2036,61 @@ msgstr "" "Abschnitt der PostgreSQL-Dokumentation.\n" "\n" -#: help.c:142 +#: help.c:143 #, c-format msgid "Report bugs to .\n" msgstr "Berichten Sie Fehler an .\n" -#: help.c:165 +#: help.c:166 #, c-format msgid "General\n" msgstr "Allgemein\n" -#: help.c:166 +#: help.c:167 #, c-format msgid " \\copyright show PostgreSQL usage and distribution terms\n" msgstr " \\copyright PostgreSQL-Urheberrechtsinformationen zeigen\n" -#: help.c:167 +#: help.c:168 #, c-format msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" msgstr "" " \\g [DATEI] oder ; SQL-Anweisung ausführen (und Ergebnis in Datei oder\n" " |Pipe schreiben)\n" -#: help.c:168 +#: help.c:169 #, c-format msgid " \\gset [PREFIX] execute query and store results in psql variables\n" msgstr "" " \\gset [PREFIX] SQL-Anweisung ausführen und Ergebnis in psql-Variablen\n" " ablegen\n" -#: help.c:169 +#: help.c:170 #, c-format msgid " \\q quit psql\n" msgstr " \\q psql beenden\n" -#: help.c:170 +#: help.c:171 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEK] Anfrage alle SEK Sekunden ausführen\n" -#: help.c:173 +#: help.c:174 #, c-format msgid "Help\n" -msgstr "" +msgstr "Hilfe\n" -#: help.c:175 +#: help.c:176 #, c-format msgid " \\? [commands] description of all psql backslash commands\n" msgstr "" -#: help.c:176 +#: help.c:177 #, c-format msgid " \\? options description of all psql commandline options\n" msgstr "" -#: help.c:177 +#: help.c:178 #, fuzzy, c-format #| msgid " --sysconfdir show location of system-wide configuration files\n" msgid " \\? variables description of all psql configuration variables\n" @@ -2101,325 +2098,321 @@ msgstr "" " --sysconfdir zeige Installationsverzeichnis der systemweiten\n" " Konfigurationsdateien\n" -#: help.c:178 +#: help.c:179 #, 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:181 +#: help.c:182 #, c-format msgid "Query Buffer\n" msgstr "Anfragepuffer\n" -#: help.c:182 +#: help.c:183 #, 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:183 +#: help.c:184 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr " \\ef [FUNKNAME [LINE]] Funktionsdefinition mit externem Editor bearbeiten\n" -#: help.c:184 +#: help.c:185 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p aktuellen Inhalt der Anfragepuffers zeigen\n" -#: help.c:185 +#: help.c:186 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r Anfragepuffer löschen\n" -#: help.c:187 +#: help.c:188 #, 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:189 +#: help.c:190 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w DATEI Anfragepuffer in Datei schreiben\n" -#: help.c:192 +#: help.c:193 #, c-format msgid "Input/Output\n" msgstr "Eingabe/Ausgabe\n" -#: help.c:193 +#: help.c:194 #, 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:194 +#: help.c:195 #, c-format msgid " \\echo [STRING] write string to standard output\n" msgstr " \\echo [TEXT] Text auf Standardausgabe schreiben\n" -#: help.c:195 +#: help.c:196 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i DATEI Befehle aus Datei ausführen\n" -#: help.c:196 +#: help.c:197 #, 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:197 +#: help.c:198 #, 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:198 +#: help.c:199 #, c-format msgid " \\qecho [STRING] write string to query output stream (see \\o)\n" msgstr "" " \\qecho [TEXT] Text auf Ausgabestrom für Anfrageergebnisse schreiben\n" " (siehe \\o)\n" -#: help.c:201 +#: help.c:202 #, c-format msgid "Informational\n" msgstr "Informationen\n" -#: help.c:202 +#: help.c:203 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (Optionen: S = Systemobjekte zeigen, + = zusätzliche Details zeigen)\n" -#: help.c:203 +#: help.c:204 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] Tabellen, Sichten und Sequenzen auflisten\n" -#: help.c:204 +#: help.c:205 #, 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:205 +#: help.c:206 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [MUSTER] Aggregatfunktionen auflisten\n" -#: help.c:206 +#: help.c:207 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [MUSTER] Tablespaces auflisten\n" -#: help.c:207 +#: help.c:208 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [MUSTER] Konversionen auflisten\n" -#: help.c:208 +#: help.c:209 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [MUSTER] Typumwandlungen (Casts) auflisten\n" -#: help.c:209 +#: help.c:210 #, 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:210 +#: help.c:211 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [MUSTER] Vorgabeprivilegien auflisten\n" -#: help.c:211 +#: help.c:212 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [MUSTER] Domänen auflisten\n" -#: help.c:212 +#: help.c:213 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [MUSTER] Fremdtabellen auflisten\n" -#: help.c:213 +#: help.c:214 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [MUSTER] Fremdserver auflisten\n" -#: help.c:214 +#: help.c:215 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [MUSTER] Benutzerabbildungen auflisten\n" -#: help.c:215 +#: help.c:216 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [MUSTER] Fremddaten-Wrapper auflisten\n" -#: help.c:216 +#: help.c:217 #, c-format msgid " \\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions\n" msgstr " \\df[antw][S+] [MUSTR] Funktionen [nur Agg/normale/Trigger/Fenster] auflisten\n" -#: help.c:217 +#: help.c:218 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [MUSTER] Textsuchekonfigurationen auflisten\n" -#: help.c:218 +#: help.c:219 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [MUSTER] Textsuchewörterbücher auflisten\n" -#: help.c:219 +#: help.c:220 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [MUSTER] Textsucheparser auflisten\n" -#: help.c:220 +#: help.c:221 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [MUSTER] Textsuchevorlagen auflisten\n" -#: help.c:221 +#: help.c:222 #, c-format msgid " \\dg[+] [PATTERN] list roles\n" msgstr " \\dg[+] [MUSTER] Rollen auflisten\n" -#: help.c:222 +#: help.c:223 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [MUSTER] Indexe auflisten\n" -#: help.c:223 +#: help.c:224 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl Large Objects auflisten, wie \\lo_list\n" -#: help.c:224 +#: help.c:225 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [MUSTER] prozedurale Sprachen auflisten\n" -#: help.c:225 +#: help.c:226 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [MUSTER] materialisierte Sichten auflisten\n" -#: help.c:226 +#: help.c:227 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [MUSTER] Schemas auflisten\n" -#: help.c:227 +#: help.c:228 #, c-format msgid " \\do[S] [PATTERN] list operators\n" msgstr " \\do[S] [MUSTER] Operatoren auflisten\n" -#: help.c:228 +#: help.c:229 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [MUSTER] Sortierfolgen auflisten\n" -#: help.c:229 +#: help.c:230 #, 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:230 +#: help.c:231 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [MUSTER1 [MUSTER2]] datenbankspezifische Rolleneinstellungen auflisten\n" -#: help.c:231 +#: help.c:232 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [MUSTER] Sequenzen auflisten\n" -#: help.c:232 +#: help.c:233 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [MUSTER] Tabellen auflisten\n" -#: help.c:233 +#: help.c:234 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [MUSTER] Datentypen auflisten\n" -#: help.c:234 +#: help.c:235 #, c-format msgid " \\du[+] [PATTERN] list roles\n" msgstr " \\du[+] [MUSTER] Rollen auflisten\n" -#: help.c:235 +#: help.c:236 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [MUSTER] Sichten auflisten\n" -#: help.c:236 +#: help.c:237 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [MUSTER] Fremdtabellen auflisten\n" -#: help.c:237 +#: help.c:238 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [MUSTER] Erweiterungen auflisten\n" -#: help.c:238 +#: help.c:239 #, c-format msgid " \\dy [PATTERN] list event triggers\n" msgstr " \\dy [MUSTER] Ereignistrigger auflisten\n" -#: help.c:239 +#: help.c:240 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [MUSTER] Datenbanken auflisten\n" -#: help.c:240 +#: help.c:241 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] [FUNKNAME] Funktionsdefinition zeigen\n" -#: help.c:241 +#: help.c:242 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [MUSTER] äquivalent zu \\dp\n" -#: help.c:244 +#: help.c:245 #, c-format msgid "Formatting\n" msgstr "Formatierung\n" -#: help.c:245 +#: help.c:246 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr "" " \\a zwischen unausgerichtetem und ausgerichtetem Ausgabemodus\n" " umschalten\n" -#: help.c:246 +#: help.c:247 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr " \\C [TEXT] Tabellentitel setzen oder löschen\n" -#: help.c:247 +#: help.c:248 #, 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:248 +#: help.c:249 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H HTML-Ausgabemodus umschalten (gegenwärtig %s)\n" -#: help.c:250 -#, fuzzy, c-format -#| msgid "" -#| " \\pset [NAME [VALUE]] set table output option\n" -#| " (NAME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|\n" -#| " numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})\n" +#: help.c:251 +#, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" " (NAME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|\n" @@ -2428,29 +2421,30 @@ msgid "" msgstr "" " \\pset [NAME [WERT]] Tabellenausgabeoption setzen\n" " (NAME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|\n" -" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})\n" +" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager|\n" +" unicode_border_linestyle|unicode_column_linestyle|unicode_header_linestyle})\n" -#: help.c:254 +#: help.c:255 #, 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:256 +#: help.c:257 #, 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:257 +#: help.c:258 #, 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:261 +#: help.c:262 #, c-format msgid "Connection\n" msgstr "Verbindung\n" -#: help.c:263 +#: help.c:264 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -2459,7 +2453,7 @@ msgstr "" " \\c[onnect] {[DBNAME|- BENUTZER|- HOST|- PORT|-] | conninfo}\n" " mit neuer Datenbank verbinden (aktuell „%s“)\n" -#: help.c:267 +#: help.c:268 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -2468,74 +2462,74 @@ msgstr "" " \\c[onnect] {[DBNAME|- BENUTZER|- HOST|- PORT|-] | conninfo}\n" " mit neuer Datenbank verbinden (aktuell keine Verbindung)\n" -#: help.c:269 +#: help.c:270 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [KODIERUNG] Client-Kodierung zeigen oder setzen\n" -#: help.c:270 +#: help.c:271 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr "" " \\password [BENUTZERNAME]\n" " sicheres Ändern eines Benutzerpasswortes\n" -#: help.c:271 +#: help.c:272 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo Informationen über aktuelle Verbindung anzeigen\n" -#: help.c:274 +#: help.c:275 #, c-format msgid "Operating System\n" msgstr "Betriebssystem\n" -#: help.c:275 +#: help.c:276 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [VERZ] Arbeitsverzeichnis wechseln\n" -#: help.c:276 +#: help.c:277 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NAME [WERT] Umgebungsvariable setzen oder löschen\n" -#: help.c:277 +#: help.c:278 #, 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:279 +#: help.c:280 #, 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:282 +#: help.c:283 #, c-format msgid "Variables\n" msgstr "Variablen\n" -#: help.c:283 +#: help.c:284 #, 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:284 +#: help.c:285 #, 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:285 +#: help.c:286 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset NAME interne Variable löschen\n" -#: help.c:288 +#: help.c:289 #, c-format msgid "Large Objects\n" msgstr "Large Objects\n" -#: help.c:289 +#: help.c:290 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -2548,18 +2542,18 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID Large-Object-Operationen\n" -#: help.c:310 +#: help.c:311 #, c-format msgid "List of specially treated variables.\n" msgstr "" -#: help.c:312 +#: help.c:313 #, fuzzy, c-format #| msgid "Variables\n" msgid "psql variables:\n" msgstr "Variablen\n" -#: help.c:314 +#: help.c:315 #, c-format msgid "" " psql --set=NAME=VALUE\n" @@ -2567,115 +2561,115 @@ msgid "" "\n" msgstr "" -#: help.c:316 +#: help.c:317 #, c-format msgid " AUTOCOMMIT if set, successful SQL commands are automatically committed\n" msgstr "" -#: help.c:317 +#: help.c:318 #, c-format msgid "" " COMP_KEYWORD_CASE determine the case used to complete SQL keywords\n" " [lower, upper, preserve-lower, preserve-upper]\n" msgstr "" -#: help.c:319 +#: help.c:320 #, fuzzy, c-format #| msgid " -d, --dbname=NAME connect to database name\n" msgid " DBNAME the currently connected database name\n" msgstr " -d, --dbname=NAME mit angegebener Datenbank verbinden\n" -#: help.c:320 +#: help.c:321 #, c-format msgid "" " ECHO control what input is written to standard output\n" " [all, errors, none, queries]\n" msgstr "" -#: help.c:322 +#: help.c:323 #, c-format msgid "" " ECHO_HIDDEN display internal queries executed by backslash commands when it is set\n" " or with [noexec] just show without execution\n" msgstr "" -#: help.c:324 +#: help.c:325 #, fuzzy, c-format #| msgid "Sets the client's character set encoding." msgid " ENCODING current client character set encoding\n" msgstr "Setzt die Zeichensatzkodierung des Clients." -#: help.c:325 +#: help.c:326 #, c-format msgid "" " FETCH_COUNT the number of result rows to fetch and display at a time\n" " (default: 0=unlimited)\n" msgstr "" -#: help.c:327 +#: help.c:328 #, c-format msgid " HISTCONTROL control history list [ignorespace, ignoredups, ignoreboth]\n" msgstr "" -#: help.c:328 +#: help.c:329 #, c-format msgid " HISTFILE file name used to store the history list\n" msgstr "" -#: help.c:329 +#: help.c:330 #, c-format msgid " HISTSIZE the number of commands to store in the command history\n" msgstr "" -#: help.c:330 +#: help.c:331 #, fuzzy, c-format #| msgid " -C, --create create the target database\n" msgid " HOST the currently connected database server\n" msgstr " -C, --create Zieldatenbank erzeugen\n" -#: help.c:331 +#: help.c:332 #, c-format msgid " IGNOREEOF if unset, sending an EOF to interactive session terminates application\n" msgstr "" -#: help.c:332 +#: help.c:333 #, fuzzy, c-format #| msgid " -o OID set next OID\n" msgid " LASTOID the value of last affected OID\n" msgstr " -o OID nächste OID setzen\n" -#: help.c:333 +#: help.c:334 #, c-format msgid " ON_ERROR_ROLLBACK if set, an error doesn't stop a transaction (uses implicit SAVEPOINTs)\n" msgstr "" -#: help.c:334 +#: help.c:335 #, c-format msgid " ON_ERROR_STOP stop batch execution after error\n" msgstr "" -#: help.c:335 +#: help.c:336 #, fuzzy, c-format #| msgid " \\conninfo display information about current connection\n" msgid " PORT server port of the current connection\n" msgstr " \\conninfo Informationen über aktuelle Verbindung anzeigen\n" -#: help.c:336 +#: help.c:337 #, c-format msgid " PROMPT1 specify the standard psql prompt\n" msgstr "" -#: help.c:337 +#: help.c:338 #, c-format msgid " PROMPT2 specify the prompt used when a statement continues from a previous line\n" msgstr "" -#: help.c:338 +#: help.c:339 #, c-format msgid " PROMPT3 specify the prompt used during COPY ... FROM STDIN\n" msgstr "" -#: help.c:339 +#: help.c:340 #, fuzzy, c-format #| msgid " -q, --quiet run quietly (no messages, only query output)\n" msgid " QUIET run quietly (same as -q option)\n" @@ -2683,35 +2677,35 @@ msgstr "" " -q, --quiet stille Ausführung (keine Mitteilungen, nur\n" " Anfrageergebnisse)\n" -#: help.c:340 +#: help.c:341 #, c-format msgid " SINGLELINE end of line terminates SQL command mode (same as -S option)\n" msgstr "" -#: help.c:341 +#: help.c:342 #, c-format msgid " SINGLESTEP single-step mode (same as -s option)\n" msgstr "" -#: help.c:342 +#: help.c:343 #, fuzzy, c-format #| msgid " -C, --create create the target database\n" msgid " USER the currently connected database user\n" msgstr " -C, --create Zieldatenbank erzeugen\n" -#: help.c:343 +#: help.c:344 #, c-format msgid " VERBOSITY control verbosity of error reports [default, verbose, terse]\n" msgstr "" -#: help.c:345 +#: help.c:346 #, c-format msgid "" "\n" "Display influencing variables:\n" msgstr "" -#: help.c:347 +#: help.c:348 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -2719,23 +2713,23 @@ msgid "" "\n" msgstr "" -#: help.c:349 +#: help.c:350 #, c-format msgid " border border style (number)\n" msgstr "" -#: help.c:350 +#: help.c:351 #, c-format msgid " columns set the target width for the wrapped format\n" msgstr "" -#: help.c:351 +#: help.c:352 #, fuzzy, c-format #| msgid " -x, --expanded turn on expanded table output\n" msgid " expanded (or x) toggle expanded output\n" msgstr " -x, --expanded erweiterte Tabellenausgabe einschalten\n" -#: help.c:352 +#: help.c:353 #, fuzzy, c-format #| msgid "" #| " -F, --field-separator=STRING\n" @@ -2746,7 +2740,7 @@ msgstr "" " Feldtrennzeichen für unausgerichteten Ausgabemodus\n" " (Standard: „%s“)\n" -#: help.c:353 +#: help.c:354 #, fuzzy, c-format #| msgid "" #| " -z, --field-separator-zero\n" @@ -2757,41 +2751,41 @@ msgstr "" " Feldtrennzeichen für unausgerichteten Ausgabemodus auf\n" " Null-Byte setzen\n" -#: help.c:354 +#: help.c:355 #, fuzzy, c-format #| msgid "\\pset: allowed formats are unaligned, aligned, wrapped, html, latex, troff-ms\n" msgid " format set output format [unaligned, aligned, wrapped, html, asciidoc, ...]\n" msgstr "\\pset: zulässige Formate sind unaligned, aligned, wrapped, html, latex, troff-ms\n" -#: help.c:355 +#: help.c:356 #, c-format msgid " footer enable or disable display of the table footer [on, off]\n" msgstr "" -#: help.c:356 +#: help.c:357 #, fuzzy, c-format #| msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" msgid " linestyle set the border line drawing style [ascii, old-ascii, unicode]\n" msgstr "\\pset: zulässige Linienstile sind ascii, old-ascii, unicode\n" -#: help.c:357 +#: help.c:358 #, c-format msgid " null set the string to be printed in place of a null value\n" msgstr "" -#: help.c:358 +#: help.c:359 #, c-format msgid "" " numericlocale enable or disable display of a locale-specific character to separate\n" " groups of digits [on, off]\n" msgstr "" -#: help.c:360 +#: help.c:361 #, c-format msgid " pager control when an external pager is used [yes, no, always]\n" msgstr "" -#: help.c:361 +#: help.c:362 #, fuzzy, c-format #| msgid "" #| " -0, --record-separator-zero\n" @@ -2802,7 +2796,7 @@ msgstr "" " Satztrennzeichen für unausgerichteten Ausgabemodus auf\n" " Null-Byte setzen\n" -#: help.c:362 +#: help.c:363 #, fuzzy, c-format #| msgid "" #| " -0, --record-separator-zero\n" @@ -2813,49 +2807,49 @@ msgstr "" " Satztrennzeichen für unausgerichteten Ausgabemodus auf\n" " Null-Byte setzen\n" -#: help.c:363 +#: help.c:364 #, c-format msgid "" " tableattr (or T) specify attributes for table tag in html format or proportional\n" " column width of left aligned data type in latex format\n" msgstr "" -#: help.c:365 +#: help.c:366 #, fuzzy, c-format #| msgid " \\C [STRING] set table title, or unset if none\n" msgid " title set the table title for any subsequently printed tables\n" msgstr " \\C [TEXT] Tabellentitel setzen oder löschen\n" -#: help.c:366 +#: help.c:367 #, c-format msgid " tuples_only if set, only actual table data is shown\n" msgstr "" -#: help.c:367 +#: help.c:368 #, c-format msgid " unicode_border_linestyle\n" msgstr "" -#: help.c:368 +#: help.c:369 #, c-format msgid " unicode_column_linestyle\n" msgstr "" -#: help.c:369 +#: help.c:370 #, c-format msgid "" " unicode_header_linestyle\n" " set the style of unicode line drawing [single, double]\n" msgstr "" -#: help.c:372 +#: help.c:373 #, c-format msgid "" "\n" "Environment variables:\n" msgstr "" -#: help.c:376 +#: help.c:377 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -2863,7 +2857,7 @@ msgid "" "\n" msgstr "" -#: help.c:378 +#: help.c:379 #, c-format msgid "" " set NAME=VALUE\n" @@ -2872,64 +2866,64 @@ msgid "" "\n" msgstr "" -#: help.c:381 +#: help.c:382 #, c-format msgid " COLUMNS number of columns for wrapped format\n" msgstr "" -#: help.c:382 +#: help.c:383 #, fuzzy, c-format #| msgid " -x NUM internal use\n" msgid " PAGER name of external pager program\n" msgstr " -x NUM interne Verwendung\n" -#: help.c:383 +#: help.c:384 #, c-format msgid " PGAPPNAME same as the application_name connection parameter\n" msgstr "" -#: help.c:384 +#: help.c:385 #, c-format msgid " PGDATABASE same as the dbname connection parameter\n" msgstr "" -#: help.c:385 +#: help.c:386 #, fuzzy, c-format #| msgid " -l enable SSL connections\n" msgid " PGHOST same as the host connection parameter\n" msgstr " -l ermögliche SSL-Verbindungen\n" -#: help.c:386 +#: help.c:387 #, fuzzy, c-format #| msgid " -l enable SSL connections\n" msgid " PGPORT same as the port connection parameter\n" msgstr " -l ermögliche SSL-Verbindungen\n" -#: help.c:387 +#: help.c:388 #, fuzzy, c-format #| msgid " DBNAME database name (defaults to user name)\n" msgid " PGUSER same as the user connection parameter\n" msgstr " DBNAME Datenbankname (Vorgabe: Benutzername)\n" -#: help.c:388 +#: help.c:389 #, c-format msgid " PGPASSWORD connection password (not recommended)\n" msgstr "" -#: help.c:389 +#: help.c:390 #, fuzzy, c-format #| msgid " -f, --file=FILENAME output file name\n" msgid " PGPASSFILE password file name\n" msgstr " -f, --file=DATEINAME Name der Ausgabedatei\n" -#: help.c:390 +#: help.c:391 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" " editor used by the \\e and \\ef commands\n" msgstr "" -#: help.c:392 +#: help.c:393 #, fuzzy, c-format #| msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number\n" msgid "" @@ -2937,32 +2931,32 @@ msgid "" " how to specify a line number when invoking the editor\n" msgstr "Umgebungsvariable PSQL_EDITOR_LINENUMBER_ARG muss gesetzt werden, um eine Zeilennummer angeben zu können\n" -#: help.c:394 +#: help.c:395 #, c-format msgid " PSQL_HISTORY alternative location for the command history file\n" msgstr "" -#: help.c:395 +#: help.c:396 #, c-format msgid " PSQLRC alternative location for the user's .psqlrc file\n" msgstr "" -#: help.c:396 +#: help.c:397 #, c-format msgid " SHELL shell used by the \\! command\n" msgstr "" -#: help.c:397 +#: help.c:398 #, fuzzy, c-format #| msgid " -L DIRECTORY where to find the input files\n" msgid " TMPDIR directory for temporary files\n" msgstr " -L VERZEICHNIS wo sind die Eingabedateien zu finden\n" -#: help.c:440 +#: help.c:441 msgid "Available help:\n" msgstr "Verfügbare Hilfe:\n" -#: help.c:524 +#: help.c:525 #, c-format msgid "" "Command: %s\n" @@ -2977,7 +2971,7 @@ msgstr "" "%s\n" "\n" -#: help.c:540 +#: help.c:541 #, c-format msgid "" "No help available for \"%s\".\n" @@ -3034,6 +3028,9 @@ msgid "" "The input is a PostgreSQL custom-format dump.\n" "Use the pg_restore command-line client to restore this dump to a database.\n" msgstr "" +"Die Eingabe ist ein PostgreSQL-Dump im Custom-Format.\n" +"Verwenden Sie den Kommandozeilen-Client pg_restore, um diesen Dump in die\n" +"Datenbank zurückzuspielen.\n" #: mainloop.c:203 msgid "You are using psql, the command-line interface to PostgreSQL." @@ -3054,29 +3051,29 @@ msgstr "" " \\g oder Semikolon, um eine Anfrage auszuführen\n" " \\q um zu beenden\n" -#: print.c:334 +#: print.c:344 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu Zeile)" msgstr[1] "(%lu Zeilen)" -#: print.c:2783 +#: print.c:2801 #, c-format msgid "Interrupted\n" msgstr "Unterbrochen\n" -#: print.c:2849 +#: print.c:2867 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "Kann keinen weiteren Spaltenkopf zur Tabelle hinzufügen: Spaltenzahl %d überschritten.\n" -#: print.c:2889 +#: print.c:2907 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "Cann keine weitere Zelle zur Tabelle hinzufügen: Zellengesamtzahl %d überschritten.\n" -#: print.c:3121 +#: print.c:3139 #, c-format msgid "invalid output format (internal error): %d" msgstr "ungültiges Ausgabeformat (interner Fehler): %d" @@ -3127,31 +3124,31 @@ msgstr "Escape kann nicht ohne aktive Verbindung ausgeführt werden\n" #: sql_help.c:1157 sql_help.c:1159 sql_help.c:1161 sql_help.c:1211 #: sql_help.c:1249 sql_help.c:1252 sql_help.c:1254 sql_help.c:1256 #: sql_help.c:1258 sql_help.c:1260 sql_help.c:1263 sql_help.c:1303 -#: sql_help.c:1547 sql_help.c:1563 sql_help.c:1576 sql_help.c:1627 -#: sql_help.c:1631 sql_help.c:1641 sql_help.c:1661 sql_help.c:1686 -#: sql_help.c:1704 sql_help.c:1732 sql_help.c:1806 sql_help.c:1849 -#: sql_help.c:1871 sql_help.c:1891 sql_help.c:1892 sql_help.c:1927 -#: sql_help.c:1947 sql_help.c:1969 sql_help.c:1982 sql_help.c:2014 -#: sql_help.c:2039 sql_help.c:2083 sql_help.c:2269 sql_help.c:2282 -#: sql_help.c:2299 sql_help.c:2315 sql_help.c:2354 sql_help.c:2405 -#: sql_help.c:2409 sql_help.c:2411 sql_help.c:2417 sql_help.c:2435 -#: sql_help.c:2462 sql_help.c:2497 sql_help.c:2509 sql_help.c:2518 -#: sql_help.c:2568 sql_help.c:2596 sql_help.c:2604 sql_help.c:2612 -#: sql_help.c:2620 sql_help.c:2628 sql_help.c:2636 sql_help.c:2644 -#: sql_help.c:2652 sql_help.c:2661 sql_help.c:2672 sql_help.c:2680 -#: sql_help.c:2688 sql_help.c:2696 sql_help.c:2704 sql_help.c:2714 -#: sql_help.c:2723 sql_help.c:2732 sql_help.c:2740 sql_help.c:2749 -#: sql_help.c:2757 sql_help.c:2766 sql_help.c:2774 sql_help.c:2782 -#: sql_help.c:2790 sql_help.c:2798 sql_help.c:2806 sql_help.c:2814 -#: sql_help.c:2822 sql_help.c:2830 sql_help.c:2847 sql_help.c:2856 -#: sql_help.c:2864 sql_help.c:2881 sql_help.c:2896 sql_help.c:3161 -#: sql_help.c:3212 sql_help.c:3241 sql_help.c:3249 sql_help.c:3667 -#: sql_help.c:3715 sql_help.c:3855 +#: sql_help.c:1550 sql_help.c:1566 sql_help.c:1579 sql_help.c:1630 +#: sql_help.c:1634 sql_help.c:1644 sql_help.c:1664 sql_help.c:1689 +#: sql_help.c:1707 sql_help.c:1735 sql_help.c:1809 sql_help.c:1852 +#: sql_help.c:1874 sql_help.c:1894 sql_help.c:1895 sql_help.c:1930 +#: sql_help.c:1950 sql_help.c:1972 sql_help.c:1985 sql_help.c:2017 +#: sql_help.c:2042 sql_help.c:2086 sql_help.c:2272 sql_help.c:2285 +#: sql_help.c:2302 sql_help.c:2318 sql_help.c:2357 sql_help.c:2408 +#: sql_help.c:2412 sql_help.c:2414 sql_help.c:2420 sql_help.c:2438 +#: sql_help.c:2465 sql_help.c:2500 sql_help.c:2512 sql_help.c:2521 +#: sql_help.c:2571 sql_help.c:2599 sql_help.c:2607 sql_help.c:2615 +#: sql_help.c:2623 sql_help.c:2631 sql_help.c:2639 sql_help.c:2647 +#: sql_help.c:2655 sql_help.c:2664 sql_help.c:2675 sql_help.c:2683 +#: sql_help.c:2691 sql_help.c:2699 sql_help.c:2707 sql_help.c:2717 +#: sql_help.c:2726 sql_help.c:2735 sql_help.c:2743 sql_help.c:2752 +#: sql_help.c:2760 sql_help.c:2769 sql_help.c:2777 sql_help.c:2785 +#: sql_help.c:2793 sql_help.c:2801 sql_help.c:2809 sql_help.c:2817 +#: sql_help.c:2825 sql_help.c:2833 sql_help.c:2850 sql_help.c:2859 +#: sql_help.c:2867 sql_help.c:2884 sql_help.c:2899 sql_help.c:3164 +#: sql_help.c:3215 sql_help.c:3244 sql_help.c:3252 sql_help.c:3671 +#: sql_help.c:3719 sql_help.c:3860 msgid "name" msgstr "Name" -#: sql_help.c:34 sql_help.c:37 sql_help.c:40 sql_help.c:306 sql_help.c:1366 -#: sql_help.c:2569 sql_help.c:3464 +#: sql_help.c:34 sql_help.c:37 sql_help.c:40 sql_help.c:306 sql_help.c:1367 +#: sql_help.c:2572 sql_help.c:3467 msgid "aggregate_signature" msgstr "Aggregatsignatur" @@ -3170,7 +3167,7 @@ msgstr "neuer_Name" #: sql_help.c:578 sql_help.c:633 sql_help.c:649 sql_help.c:673 sql_help.c:728 #: sql_help.c:826 sql_help.c:852 sql_help.c:872 sql_help.c:1013 #: sql_help.c:1031 sql_help.c:1074 sql_help.c:1095 sql_help.c:1153 -#: sql_help.c:1255 sql_help.c:2255 +#: sql_help.c:1255 sql_help.c:2258 msgid "new_owner" msgstr "neuer_Eigentümer" @@ -3182,68 +3179,66 @@ msgstr "neuer_Eigentümer" msgid "new_schema" msgstr "neues_Schema" -#: sql_help.c:42 sql_help.c:1417 sql_help.c:2570 sql_help.c:3483 +#: sql_help.c:42 sql_help.c:1420 sql_help.c:2573 sql_help.c:3486 msgid "where aggregate_signature is:" msgstr "wobei Aggregatsignatur Folgendes ist:" #: sql_help.c:43 sql_help.c:46 sql_help.c:49 sql_help.c:316 sql_help.c:341 #: sql_help.c:344 sql_help.c:347 sql_help.c:484 sql_help.c:489 sql_help.c:494 -#: sql_help.c:499 sql_help.c:1384 sql_help.c:1418 sql_help.c:1421 -#: sql_help.c:1424 sql_help.c:1548 sql_help.c:1564 sql_help.c:1567 -#: sql_help.c:1807 sql_help.c:2571 sql_help.c:2574 sql_help.c:2577 -#: sql_help.c:2662 sql_help.c:3047 sql_help.c:3379 sql_help.c:3470 -#: sql_help.c:3484 sql_help.c:3487 sql_help.c:3490 +#: sql_help.c:499 sql_help.c:1385 sql_help.c:1421 sql_help.c:1424 +#: sql_help.c:1427 sql_help.c:1551 sql_help.c:1567 sql_help.c:1570 +#: sql_help.c:1810 sql_help.c:2574 sql_help.c:2577 sql_help.c:2580 +#: sql_help.c:2665 sql_help.c:3050 sql_help.c:3382 sql_help.c:3473 +#: sql_help.c:3487 sql_help.c:3490 sql_help.c:3493 msgid "argmode" msgstr "Argmodus" #: sql_help.c:44 sql_help.c:47 sql_help.c:50 sql_help.c:317 sql_help.c:342 #: sql_help.c:345 sql_help.c:348 sql_help.c:485 sql_help.c:490 sql_help.c:495 -#: sql_help.c:500 sql_help.c:1385 sql_help.c:1419 sql_help.c:1422 -#: sql_help.c:1425 sql_help.c:1549 sql_help.c:1565 sql_help.c:1568 -#: sql_help.c:1808 sql_help.c:2572 sql_help.c:2575 sql_help.c:2578 -#: sql_help.c:2663 sql_help.c:3471 sql_help.c:3485 sql_help.c:3488 -#: sql_help.c:3491 +#: sql_help.c:500 sql_help.c:1386 sql_help.c:1422 sql_help.c:1425 +#: sql_help.c:1428 sql_help.c:1552 sql_help.c:1568 sql_help.c:1571 +#: sql_help.c:1811 sql_help.c:2575 sql_help.c:2578 sql_help.c:2581 +#: sql_help.c:2666 sql_help.c:3474 sql_help.c:3488 sql_help.c:3491 +#: sql_help.c:3494 msgid "argname" msgstr "Argname" #: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:318 sql_help.c:343 #: sql_help.c:346 sql_help.c:349 sql_help.c:486 sql_help.c:491 sql_help.c:496 -#: sql_help.c:501 sql_help.c:1386 sql_help.c:1420 sql_help.c:1423 -#: sql_help.c:1426 sql_help.c:1809 sql_help.c:2573 sql_help.c:2576 -#: sql_help.c:2579 sql_help.c:2664 sql_help.c:3472 sql_help.c:3486 -#: sql_help.c:3489 sql_help.c:3492 +#: sql_help.c:501 sql_help.c:1387 sql_help.c:1423 sql_help.c:1426 +#: sql_help.c:1429 sql_help.c:1812 sql_help.c:2576 sql_help.c:2579 +#: sql_help.c:2582 sql_help.c:2667 sql_help.c:3475 sql_help.c:3489 +#: sql_help.c:3492 sql_help.c:3495 msgid "argtype" msgstr "Argtyp" #: sql_help.c:107 sql_help.c:365 sql_help.c:443 sql_help.c:455 sql_help.c:784 #: sql_help.c:869 sql_help.c:1090 sql_help.c:1206 sql_help.c:1234 -#: sql_help.c:1474 sql_help.c:1480 sql_help.c:1735 sql_help.c:1767 -#: sql_help.c:1774 sql_help.c:1850 sql_help.c:2015 sql_help.c:2104 -#: sql_help.c:2284 sql_help.c:2463 sql_help.c:2485 sql_help.c:2915 -#: sql_help.c:3081 +#: sql_help.c:1477 sql_help.c:1483 sql_help.c:1738 sql_help.c:1770 +#: sql_help.c:1777 sql_help.c:1853 sql_help.c:2018 sql_help.c:2107 +#: sql_help.c:2287 sql_help.c:2466 sql_help.c:2488 sql_help.c:2918 +#: sql_help.c:3084 msgid "option" msgstr "Option" -#: sql_help.c:108 sql_help.c:785 sql_help.c:1207 sql_help.c:1851 -#: sql_help.c:2016 sql_help.c:2464 +#: sql_help.c:108 sql_help.c:785 sql_help.c:1207 sql_help.c:1854 +#: sql_help.c:2019 sql_help.c:2467 msgid "where option can be:" msgstr "wobei Option Folgendes sein kann:" -#: sql_help.c:109 sql_help.c:1668 -#, fuzzy -#| msgid "template" -msgid "istemplate" -msgstr "Vorlage" - -#: sql_help.c:110 sql_help.c:1669 +#: sql_help.c:109 sql_help.c:1671 msgid "allowconn" -msgstr "" +msgstr "allowconn" -#: sql_help.c:111 sql_help.c:786 sql_help.c:1208 sql_help.c:1670 -#: sql_help.c:2017 sql_help.c:2465 +#: sql_help.c:110 sql_help.c:786 sql_help.c:1208 sql_help.c:1672 +#: sql_help.c:2020 sql_help.c:2468 msgid "connlimit" msgstr "Verbindungslimit" +#: sql_help.c:111 sql_help.c:1673 +msgid "istemplate" +msgstr "istemplate" + #: sql_help.c:117 sql_help.c:557 sql_help.c:619 sql_help.c:634 sql_help.c:969 #: sql_help.c:1006 msgid "new_tablespace" @@ -3252,7 +3247,7 @@ msgstr "neuer_Tablespace" #: sql_help.c:119 sql_help.c:122 sql_help.c:124 sql_help.c:506 sql_help.c:508 #: sql_help.c:509 sql_help.c:793 sql_help.c:797 sql_help.c:800 sql_help.c:885 #: sql_help.c:888 sql_help.c:1214 sql_help.c:1217 sql_help.c:1219 -#: sql_help.c:1818 sql_help.c:3266 sql_help.c:3656 +#: sql_help.c:1821 sql_help.c:3269 sql_help.c:3660 msgid "configuration_parameter" msgstr "Konfigurationsparameter" @@ -3260,11 +3255,11 @@ msgstr "Konfigurationsparameter" #: sql_help.c:507 sql_help.c:552 sql_help.c:625 sql_help.c:631 sql_help.c:794 #: sql_help.c:870 sql_help.c:886 sql_help.c:887 sql_help.c:988 sql_help.c:1008 #: sql_help.c:1034 sql_help.c:1091 sql_help.c:1215 sql_help.c:1235 -#: sql_help.c:1736 sql_help.c:1768 sql_help.c:1775 sql_help.c:1819 -#: sql_help.c:1820 sql_help.c:1879 sql_help.c:1911 sql_help.c:2105 -#: sql_help.c:2179 sql_help.c:2187 sql_help.c:2219 sql_help.c:2241 -#: sql_help.c:2258 sql_help.c:2285 sql_help.c:2486 sql_help.c:3082 -#: sql_help.c:3657 sql_help.c:3658 +#: sql_help.c:1739 sql_help.c:1771 sql_help.c:1778 sql_help.c:1822 +#: sql_help.c:1823 sql_help.c:1882 sql_help.c:1914 sql_help.c:2108 +#: sql_help.c:2182 sql_help.c:2190 sql_help.c:2222 sql_help.c:2244 +#: sql_help.c:2261 sql_help.c:2288 sql_help.c:2489 sql_help.c:3085 +#: sql_help.c:3661 sql_help.c:3662 msgid "value" msgstr "Wert" @@ -3272,9 +3267,9 @@ msgstr "Wert" msgid "target_role" msgstr "Zielrolle" -#: sql_help.c:183 sql_help.c:1719 sql_help.c:2063 sql_help.c:2068 -#: sql_help.c:3029 sql_help.c:3036 sql_help.c:3050 sql_help.c:3056 -#: sql_help.c:3361 sql_help.c:3368 sql_help.c:3382 sql_help.c:3388 +#: sql_help.c:183 sql_help.c:1722 sql_help.c:2066 sql_help.c:2071 +#: sql_help.c:3032 sql_help.c:3039 sql_help.c:3053 sql_help.c:3059 +#: sql_help.c:3364 sql_help.c:3371 sql_help.c:3385 sql_help.c:3391 msgid "schema_name" msgstr "Schemaname" @@ -3289,31 +3284,31 @@ msgstr "wobei abgekürztes_Grant_oder_Revoke Folgendes sein kann:" #: sql_help.c:186 sql_help.c:187 sql_help.c:188 sql_help.c:189 sql_help.c:190 #: sql_help.c:191 sql_help.c:192 sql_help.c:193 sql_help.c:531 sql_help.c:556 #: sql_help.c:618 sql_help.c:746 sql_help.c:804 sql_help.c:968 sql_help.c:1222 -#: sql_help.c:1854 sql_help.c:1855 sql_help.c:1856 sql_help.c:1857 -#: sql_help.c:1858 sql_help.c:1984 sql_help.c:2020 sql_help.c:2021 -#: sql_help.c:2022 sql_help.c:2023 sql_help.c:2024 sql_help.c:2468 -#: sql_help.c:2469 sql_help.c:2470 sql_help.c:2471 sql_help.c:2472 -#: sql_help.c:3063 sql_help.c:3064 sql_help.c:3065 sql_help.c:3362 -#: sql_help.c:3366 sql_help.c:3369 sql_help.c:3371 sql_help.c:3373 -#: sql_help.c:3375 sql_help.c:3377 sql_help.c:3383 sql_help.c:3385 -#: sql_help.c:3387 sql_help.c:3389 sql_help.c:3391 sql_help.c:3393 -#: sql_help.c:3394 sql_help.c:3395 sql_help.c:3677 +#: sql_help.c:1857 sql_help.c:1858 sql_help.c:1859 sql_help.c:1860 +#: sql_help.c:1861 sql_help.c:1987 sql_help.c:2023 sql_help.c:2024 +#: sql_help.c:2025 sql_help.c:2026 sql_help.c:2027 sql_help.c:2471 +#: sql_help.c:2472 sql_help.c:2473 sql_help.c:2474 sql_help.c:2475 +#: sql_help.c:3066 sql_help.c:3067 sql_help.c:3068 sql_help.c:3365 +#: sql_help.c:3369 sql_help.c:3372 sql_help.c:3374 sql_help.c:3376 +#: sql_help.c:3378 sql_help.c:3380 sql_help.c:3386 sql_help.c:3388 +#: sql_help.c:3390 sql_help.c:3392 sql_help.c:3394 sql_help.c:3396 +#: sql_help.c:3397 sql_help.c:3398 sql_help.c:3681 msgid "role_name" msgstr "Rollenname" #: sql_help.c:219 sql_help.c:431 sql_help.c:979 sql_help.c:981 sql_help.c:1251 -#: sql_help.c:1689 sql_help.c:1693 sql_help.c:1778 sql_help.c:1782 -#: sql_help.c:1875 sql_help.c:2191 sql_help.c:2201 sql_help.c:2223 -#: sql_help.c:3112 sql_help.c:3127 sql_help.c:3129 sql_help.c:3542 -#: sql_help.c:3543 sql_help.c:3552 sql_help.c:3593 sql_help.c:3594 -#: sql_help.c:3595 sql_help.c:3596 sql_help.c:3597 sql_help.c:3598 -#: sql_help.c:3631 sql_help.c:3632 sql_help.c:3637 sql_help.c:3642 -#: sql_help.c:3780 sql_help.c:3781 sql_help.c:3790 sql_help.c:3831 -#: sql_help.c:3832 sql_help.c:3833 sql_help.c:3834 sql_help.c:3835 -#: sql_help.c:3836 sql_help.c:3883 sql_help.c:3885 sql_help.c:3918 -#: sql_help.c:3973 sql_help.c:3974 sql_help.c:3983 sql_help.c:4024 -#: sql_help.c:4025 sql_help.c:4026 sql_help.c:4027 sql_help.c:4028 -#: sql_help.c:4029 +#: sql_help.c:1692 sql_help.c:1696 sql_help.c:1781 sql_help.c:1785 +#: sql_help.c:1878 sql_help.c:2194 sql_help.c:2204 sql_help.c:2226 +#: sql_help.c:3115 sql_help.c:3130 sql_help.c:3132 sql_help.c:3546 +#: sql_help.c:3547 sql_help.c:3556 sql_help.c:3597 sql_help.c:3598 +#: sql_help.c:3599 sql_help.c:3600 sql_help.c:3601 sql_help.c:3602 +#: sql_help.c:3635 sql_help.c:3636 sql_help.c:3641 sql_help.c:3646 +#: sql_help.c:3785 sql_help.c:3786 sql_help.c:3795 sql_help.c:3836 +#: sql_help.c:3837 sql_help.c:3838 sql_help.c:3839 sql_help.c:3840 +#: sql_help.c:3841 sql_help.c:3888 sql_help.c:3890 sql_help.c:3923 +#: sql_help.c:3979 sql_help.c:3980 sql_help.c:3989 sql_help.c:4030 +#: sql_help.c:4031 sql_help.c:4032 sql_help.c:4033 sql_help.c:4034 +#: sql_help.c:4035 msgid "expression" msgstr "Ausdruck" @@ -3323,8 +3318,8 @@ msgstr "Domänen-Constraint" #: sql_help.c:224 sql_help.c:226 sql_help.c:229 sql_help.c:446 sql_help.c:447 #: sql_help.c:961 sql_help.c:994 sql_help.c:995 sql_help.c:996 sql_help.c:1016 -#: sql_help.c:1372 sql_help.c:1374 sql_help.c:1692 sql_help.c:1777 -#: sql_help.c:1781 sql_help.c:2190 sql_help.c:2200 sql_help.c:3124 +#: sql_help.c:1373 sql_help.c:1375 sql_help.c:1695 sql_help.c:1780 +#: sql_help.c:1784 sql_help.c:2193 sql_help.c:2203 sql_help.c:3127 msgid "constraint_name" msgstr "Constraint-Name" @@ -3344,17 +3339,17 @@ msgstr "Elementobjekt" msgid "where member_object is:" msgstr "wobei Elementobjekt Folgendes ist:" -#: sql_help.c:305 sql_help.c:1365 sql_help.c:3463 +#: sql_help.c:305 sql_help.c:1366 sql_help.c:3466 msgid "aggregate_name" msgstr "Aggregatname" -#: sql_help.c:307 sql_help.c:1367 sql_help.c:1607 sql_help.c:1611 -#: sql_help.c:1613 sql_help.c:2587 +#: sql_help.c:307 sql_help.c:1368 sql_help.c:1610 sql_help.c:1614 +#: sql_help.c:1616 sql_help.c:2590 msgid "source_type" msgstr "Quelltyp" -#: sql_help.c:308 sql_help.c:1368 sql_help.c:1608 sql_help.c:1612 -#: sql_help.c:1614 sql_help.c:2588 +#: sql_help.c:308 sql_help.c:1369 sql_help.c:1611 sql_help.c:1615 +#: sql_help.c:1617 sql_help.c:2591 msgid "target_type" msgstr "Zieltyp" @@ -3362,57 +3357,57 @@ msgstr "Zieltyp" #: sql_help.c:314 sql_help.c:319 sql_help.c:323 sql_help.c:325 sql_help.c:327 #: sql_help.c:328 sql_help.c:329 sql_help.c:330 sql_help.c:331 sql_help.c:332 #: sql_help.c:333 sql_help.c:334 sql_help.c:335 sql_help.c:338 sql_help.c:339 -#: sql_help.c:1369 sql_help.c:1376 sql_help.c:1377 sql_help.c:1378 -#: sql_help.c:1379 sql_help.c:1380 sql_help.c:1381 sql_help.c:1382 -#: sql_help.c:1387 sql_help.c:1389 sql_help.c:1393 sql_help.c:1395 -#: sql_help.c:1397 sql_help.c:1398 sql_help.c:1401 sql_help.c:1402 -#: sql_help.c:1403 sql_help.c:1404 sql_help.c:1405 sql_help.c:1406 -#: sql_help.c:1407 sql_help.c:1408 sql_help.c:1409 sql_help.c:1414 -#: sql_help.c:1415 sql_help.c:3460 sql_help.c:3465 sql_help.c:3466 -#: sql_help.c:3467 sql_help.c:3468 sql_help.c:3474 sql_help.c:3475 -#: sql_help.c:3476 sql_help.c:3477 sql_help.c:3478 sql_help.c:3479 -#: sql_help.c:3480 sql_help.c:3481 +#: sql_help.c:1370 sql_help.c:1377 sql_help.c:1378 sql_help.c:1379 +#: sql_help.c:1380 sql_help.c:1381 sql_help.c:1382 sql_help.c:1383 +#: sql_help.c:1388 sql_help.c:1390 sql_help.c:1394 sql_help.c:1396 +#: sql_help.c:1400 sql_help.c:1401 sql_help.c:1404 sql_help.c:1405 +#: sql_help.c:1406 sql_help.c:1407 sql_help.c:1408 sql_help.c:1409 +#: sql_help.c:1410 sql_help.c:1411 sql_help.c:1412 sql_help.c:1417 +#: sql_help.c:1418 sql_help.c:3463 sql_help.c:3468 sql_help.c:3469 +#: sql_help.c:3470 sql_help.c:3471 sql_help.c:3477 sql_help.c:3478 +#: sql_help.c:3479 sql_help.c:3480 sql_help.c:3481 sql_help.c:3482 +#: sql_help.c:3483 sql_help.c:3484 msgid "object_name" msgstr "Objektname" -#: sql_help.c:315 sql_help.c:713 sql_help.c:1383 sql_help.c:1609 -#: sql_help.c:1644 sql_help.c:1707 sql_help.c:1928 sql_help.c:1959 -#: sql_help.c:2359 sql_help.c:3046 sql_help.c:3378 sql_help.c:3469 -#: sql_help.c:3571 sql_help.c:3575 sql_help.c:3579 sql_help.c:3582 -#: sql_help.c:3809 sql_help.c:3813 sql_help.c:3817 sql_help.c:3820 -#: sql_help.c:4002 sql_help.c:4006 sql_help.c:4010 sql_help.c:4013 +#: sql_help.c:315 sql_help.c:713 sql_help.c:1384 sql_help.c:1612 +#: sql_help.c:1647 sql_help.c:1710 sql_help.c:1931 sql_help.c:1962 +#: sql_help.c:2362 sql_help.c:3049 sql_help.c:3381 sql_help.c:3472 +#: sql_help.c:3575 sql_help.c:3579 sql_help.c:3583 sql_help.c:3586 +#: sql_help.c:3814 sql_help.c:3818 sql_help.c:3822 sql_help.c:3825 +#: sql_help.c:4008 sql_help.c:4012 sql_help.c:4016 sql_help.c:4019 msgid "function_name" msgstr "Funktionsname" -#: sql_help.c:320 sql_help.c:706 sql_help.c:1390 sql_help.c:1952 +#: sql_help.c:320 sql_help.c:706 sql_help.c:1391 sql_help.c:1955 msgid "operator_name" msgstr "Operatorname" -#: sql_help.c:321 sql_help.c:647 sql_help.c:651 sql_help.c:1391 -#: sql_help.c:1929 sql_help.c:2705 +#: sql_help.c:321 sql_help.c:647 sql_help.c:651 sql_help.c:1392 +#: sql_help.c:1932 sql_help.c:2708 msgid "left_type" msgstr "linker_Typ" -#: sql_help.c:322 sql_help.c:648 sql_help.c:652 sql_help.c:1392 -#: sql_help.c:1930 sql_help.c:2706 +#: sql_help.c:322 sql_help.c:648 sql_help.c:652 sql_help.c:1393 +#: sql_help.c:1933 sql_help.c:2709 msgid "right_type" msgstr "rechter_Typ" #: sql_help.c:324 sql_help.c:326 sql_help.c:669 sql_help.c:672 sql_help.c:675 #: sql_help.c:704 sql_help.c:716 sql_help.c:724 sql_help.c:727 sql_help.c:730 -#: sql_help.c:1394 sql_help.c:1396 sql_help.c:1949 sql_help.c:1970 -#: sql_help.c:2206 sql_help.c:2715 sql_help.c:2724 +#: sql_help.c:1395 sql_help.c:1397 sql_help.c:1952 sql_help.c:1973 +#: sql_help.c:2209 sql_help.c:2718 sql_help.c:2727 msgid "index_method" msgstr "Indexmethode" -#: sql_help.c:336 sql_help.c:1012 sql_help.c:1410 sql_help.c:1815 -#: sql_help.c:2182 sql_help.c:2328 sql_help.c:2838 sql_help.c:3060 -#: sql_help.c:3392 +#: sql_help.c:336 sql_help.c:1012 sql_help.c:1413 sql_help.c:1818 +#: sql_help.c:2185 sql_help.c:2331 sql_help.c:2841 sql_help.c:3063 +#: sql_help.c:3395 msgid "type_name" msgstr "Typname" -#: sql_help.c:337 sql_help.c:1411 sql_help.c:1814 sql_help.c:2329 -#: sql_help.c:2553 sql_help.c:2839 sql_help.c:3052 sql_help.c:3384 +#: sql_help.c:337 sql_help.c:1414 sql_help.c:1817 sql_help.c:2332 +#: sql_help.c:2556 sql_help.c:2842 sql_help.c:3055 sql_help.c:3387 msgid "lang_name" msgstr "Sprachname" @@ -3420,16 +3415,16 @@ msgstr "Sprachname" msgid "and aggregate_signature is:" msgstr "und Aggregatsignatur Folgendes ist:" -#: sql_help.c:363 sql_help.c:1733 +#: sql_help.c:363 sql_help.c:1736 msgid "handler_function" msgstr "Handler-Funktion" -#: sql_help.c:364 sql_help.c:1734 +#: sql_help.c:364 sql_help.c:1737 msgid "validator_function" msgstr "Validator-Funktion" #: sql_help.c:413 sql_help.c:487 sql_help.c:609 sql_help.c:956 sql_help.c:1151 -#: sql_help.c:2197 sql_help.c:2198 sql_help.c:2214 sql_help.c:2215 +#: sql_help.c:2200 sql_help.c:2201 sql_help.c:2217 sql_help.c:2218 msgid "action" msgstr "Aktion" @@ -3439,16 +3434,16 @@ msgstr "Aktion" #: sql_help.c:626 sql_help.c:628 sql_help.c:850 sql_help.c:958 sql_help.c:971 #: sql_help.c:975 sql_help.c:976 sql_help.c:980 sql_help.c:982 sql_help.c:983 #: sql_help.c:984 sql_help.c:986 sql_help.c:989 sql_help.c:991 sql_help.c:1250 -#: sql_help.c:1253 sql_help.c:1273 sql_help.c:1371 sql_help.c:1471 -#: sql_help.c:1476 sql_help.c:1490 sql_help.c:1491 sql_help.c:1492 -#: sql_help.c:1765 sql_help.c:1812 sql_help.c:1874 sql_help.c:1909 -#: sql_help.c:2090 sql_help.c:2170 sql_help.c:2183 sql_help.c:2202 -#: sql_help.c:2204 sql_help.c:2211 sql_help.c:2222 sql_help.c:2239 -#: sql_help.c:2362 sql_help.c:2498 sql_help.c:3031 sql_help.c:3032 -#: sql_help.c:3111 sql_help.c:3126 sql_help.c:3128 sql_help.c:3130 -#: sql_help.c:3363 sql_help.c:3364 sql_help.c:3462 sql_help.c:3602 -#: sql_help.c:3840 sql_help.c:3882 sql_help.c:3884 sql_help.c:3886 -#: sql_help.c:3903 sql_help.c:3906 sql_help.c:4033 +#: sql_help.c:1253 sql_help.c:1273 sql_help.c:1372 sql_help.c:1474 +#: sql_help.c:1479 sql_help.c:1493 sql_help.c:1494 sql_help.c:1495 +#: sql_help.c:1768 sql_help.c:1815 sql_help.c:1877 sql_help.c:1912 +#: sql_help.c:2093 sql_help.c:2173 sql_help.c:2186 sql_help.c:2205 +#: sql_help.c:2207 sql_help.c:2214 sql_help.c:2225 sql_help.c:2242 +#: sql_help.c:2365 sql_help.c:2501 sql_help.c:3034 sql_help.c:3035 +#: sql_help.c:3114 sql_help.c:3129 sql_help.c:3131 sql_help.c:3133 +#: sql_help.c:3366 sql_help.c:3367 sql_help.c:3465 sql_help.c:3606 +#: sql_help.c:3845 sql_help.c:3887 sql_help.c:3889 sql_help.c:3891 +#: sql_help.c:3908 sql_help.c:3911 sql_help.c:4039 msgid "column_name" msgstr "Spaltenname" @@ -3461,19 +3456,19 @@ msgid "where action is one of:" msgstr "wobei Aktion Folgendes sein kann:" #: sql_help.c:423 sql_help.c:428 sql_help.c:972 sql_help.c:977 sql_help.c:1166 -#: sql_help.c:1170 sql_help.c:1687 sql_help.c:1766 sql_help.c:1948 -#: sql_help.c:2171 sql_help.c:2407 sql_help.c:3213 +#: sql_help.c:1170 sql_help.c:1690 sql_help.c:1769 sql_help.c:1951 +#: sql_help.c:2174 sql_help.c:2410 sql_help.c:3216 msgid "data_type" msgstr "Datentyp" #: sql_help.c:424 sql_help.c:429 sql_help.c:973 sql_help.c:978 sql_help.c:1167 -#: sql_help.c:1171 sql_help.c:1688 sql_help.c:1769 sql_help.c:1876 -#: sql_help.c:2172 sql_help.c:2408 sql_help.c:2414 sql_help.c:3121 +#: sql_help.c:1171 sql_help.c:1691 sql_help.c:1772 sql_help.c:1879 +#: sql_help.c:2175 sql_help.c:2411 sql_help.c:2417 sql_help.c:3124 msgid "collation" msgstr "Sortierfolge" -#: sql_help.c:425 sql_help.c:974 sql_help.c:1770 sql_help.c:2173 -#: sql_help.c:2184 +#: sql_help.c:425 sql_help.c:974 sql_help.c:1773 sql_help.c:2176 +#: sql_help.c:2187 msgid "column_constraint" msgstr "Spalten-Constraint" @@ -3486,70 +3481,66 @@ msgstr "ganze_Zahl" msgid "attribute_option" msgstr "Attributoption" -#: sql_help.c:445 sql_help.c:992 sql_help.c:1771 sql_help.c:2174 -#: sql_help.c:2185 +#: sql_help.c:445 sql_help.c:992 sql_help.c:1774 sql_help.c:2177 +#: sql_help.c:2188 msgid "table_constraint" msgstr "Tabellen-Constraint" #: sql_help.c:448 sql_help.c:449 sql_help.c:450 sql_help.c:451 sql_help.c:997 -#: sql_help.c:998 sql_help.c:999 sql_help.c:1000 sql_help.c:1412 +#: sql_help.c:998 sql_help.c:999 sql_help.c:1000 sql_help.c:1415 msgid "trigger_name" msgstr "Triggername" #: sql_help.c:452 sql_help.c:453 sql_help.c:1010 sql_help.c:1011 -#: sql_help.c:1772 sql_help.c:2177 +#: sql_help.c:1775 sql_help.c:2180 msgid "parent_table" msgstr "Elterntabelle" -#: sql_help.c:504 sql_help.c:1816 +#: sql_help.c:504 sql_help.c:1819 msgid "execution_cost" msgstr "Ausführungskosten" -#: sql_help.c:505 sql_help.c:1817 +#: sql_help.c:505 sql_help.c:1820 msgid "result_rows" msgstr "Ergebniszeilen" #: sql_help.c:526 sql_help.c:528 sql_help.c:783 sql_help.c:791 sql_help.c:795 #: sql_help.c:798 sql_help.c:801 sql_help.c:1205 sql_help.c:1213 -#: sql_help.c:1216 sql_help.c:1218 sql_help.c:1220 sql_help.c:2064 -#: sql_help.c:2066 sql_help.c:2069 sql_help.c:2070 sql_help.c:3030 -#: sql_help.c:3034 sql_help.c:3037 sql_help.c:3039 sql_help.c:3041 -#: sql_help.c:3043 sql_help.c:3045 sql_help.c:3051 sql_help.c:3053 -#: sql_help.c:3055 sql_help.c:3057 sql_help.c:3059 sql_help.c:3061 -#, fuzzy -#| msgid "Replication" +#: sql_help.c:1216 sql_help.c:1218 sql_help.c:1220 sql_help.c:2067 +#: sql_help.c:2069 sql_help.c:2072 sql_help.c:2073 sql_help.c:3033 +#: sql_help.c:3037 sql_help.c:3040 sql_help.c:3042 sql_help.c:3044 +#: sql_help.c:3046 sql_help.c:3048 sql_help.c:3054 sql_help.c:3056 +#: sql_help.c:3058 sql_help.c:3060 sql_help.c:3062 sql_help.c:3064 msgid "role_specification" -msgstr "Replikation" +msgstr "Rollenangabe" -#: sql_help.c:527 sql_help.c:529 sql_help.c:1232 sql_help.c:1662 -#: sql_help.c:2072 sql_help.c:2483 sql_help.c:2872 sql_help.c:3687 +#: sql_help.c:527 sql_help.c:529 sql_help.c:1232 sql_help.c:1665 +#: sql_help.c:2075 sql_help.c:2486 sql_help.c:2875 sql_help.c:3691 msgid "user_name" msgstr "Benutzername" -#: sql_help.c:530 sql_help.c:803 sql_help.c:1221 sql_help.c:2071 -#: sql_help.c:3062 -#, fuzzy -#| msgid "where option can be:" +#: sql_help.c:530 sql_help.c:803 sql_help.c:1221 sql_help.c:2074 +#: sql_help.c:3065 msgid "where role_specification can be:" -msgstr "wobei Option Folgendes sein kann:" +msgstr "wobei Rollenangabe Folgendes sein kann:" #: sql_help.c:532 msgid "group_name" msgstr "Gruppenname" -#: sql_help.c:549 sql_help.c:1667 sql_help.c:1880 sql_help.c:1912 -#: sql_help.c:2180 sql_help.c:2188 sql_help.c:2220 sql_help.c:2242 -#: sql_help.c:2254 sql_help.c:3058 sql_help.c:3390 +#: sql_help.c:549 sql_help.c:1670 sql_help.c:1883 sql_help.c:1915 +#: sql_help.c:2183 sql_help.c:2191 sql_help.c:2223 sql_help.c:2245 +#: sql_help.c:2257 sql_help.c:3061 sql_help.c:3393 msgid "tablespace_name" msgstr "Tablespace-Name" #: sql_help.c:551 sql_help.c:554 sql_help.c:630 sql_help.c:632 sql_help.c:1007 -#: sql_help.c:1009 sql_help.c:1878 sql_help.c:1910 sql_help.c:2178 -#: sql_help.c:2186 sql_help.c:2218 sql_help.c:2240 +#: sql_help.c:1009 sql_help.c:1881 sql_help.c:1913 sql_help.c:2181 +#: sql_help.c:2189 sql_help.c:2221 sql_help.c:2243 msgid "storage_parameter" msgstr "Storage-Parameter" -#: sql_help.c:577 sql_help.c:1388 sql_help.c:3473 +#: sql_help.c:577 sql_help.c:1389 sql_help.c:3476 msgid "large_object_oid" msgstr "Large-Object-OID" @@ -3558,85 +3549,81 @@ msgstr "Large-Object-OID" msgid "index_name" msgstr "Indexname" -#: sql_help.c:705 sql_help.c:717 sql_help.c:1951 +#: sql_help.c:705 sql_help.c:717 sql_help.c:1954 msgid "strategy_number" msgstr "Strategienummer" #: sql_help.c:707 sql_help.c:708 sql_help.c:711 sql_help.c:712 sql_help.c:718 -#: sql_help.c:719 sql_help.c:721 sql_help.c:722 sql_help.c:1953 -#: sql_help.c:1954 sql_help.c:1957 sql_help.c:1958 +#: sql_help.c:719 sql_help.c:721 sql_help.c:722 sql_help.c:1956 +#: sql_help.c:1957 sql_help.c:1960 sql_help.c:1961 msgid "op_type" msgstr "Optyp" -#: sql_help.c:709 sql_help.c:1955 +#: sql_help.c:709 sql_help.c:1958 msgid "sort_family_name" msgstr "Sortierfamilienname" -#: sql_help.c:710 sql_help.c:720 sql_help.c:1956 +#: sql_help.c:710 sql_help.c:720 sql_help.c:1959 msgid "support_number" msgstr "Unterst-Nummer" -#: sql_help.c:714 sql_help.c:1610 sql_help.c:1960 sql_help.c:2331 -#: sql_help.c:2333 +#: sql_help.c:714 sql_help.c:1613 sql_help.c:1963 sql_help.c:2334 +#: sql_help.c:2336 msgid "argument_type" msgstr "Argumenttyp" #: sql_help.c:744 sql_help.c:813 sql_help.c:849 sql_help.c:1130 -#: sql_help.c:1272 sql_help.c:1312 sql_help.c:1373 sql_help.c:1400 -#: sql_help.c:1413 sql_help.c:1470 sql_help.c:1475 sql_help.c:1764 -#: sql_help.c:1872 sql_help.c:1908 sql_help.c:1983 sql_help.c:2041 -#: sql_help.c:2089 sql_help.c:2169 sql_help.c:2181 sql_help.c:2238 -#: sql_help.c:2356 sql_help.c:2532 sql_help.c:2741 sql_help.c:2758 -#: sql_help.c:2848 sql_help.c:3028 sql_help.c:3033 sql_help.c:3078 -#: sql_help.c:3109 sql_help.c:3360 sql_help.c:3365 sql_help.c:3461 -#: sql_help.c:3557 sql_help.c:3559 sql_help.c:3608 sql_help.c:3647 -#: sql_help.c:3795 sql_help.c:3797 sql_help.c:3846 sql_help.c:3880 -#: sql_help.c:3902 sql_help.c:3904 sql_help.c:3905 sql_help.c:3988 -#: sql_help.c:3990 sql_help.c:4039 +#: sql_help.c:1272 sql_help.c:1312 sql_help.c:1374 sql_help.c:1399 +#: sql_help.c:1403 sql_help.c:1416 sql_help.c:1473 sql_help.c:1478 +#: sql_help.c:1767 sql_help.c:1875 sql_help.c:1911 sql_help.c:1986 +#: sql_help.c:2044 sql_help.c:2092 sql_help.c:2172 sql_help.c:2184 +#: sql_help.c:2241 sql_help.c:2359 sql_help.c:2535 sql_help.c:2744 +#: sql_help.c:2761 sql_help.c:2851 sql_help.c:3031 sql_help.c:3036 +#: sql_help.c:3081 sql_help.c:3112 sql_help.c:3363 sql_help.c:3368 +#: sql_help.c:3464 sql_help.c:3561 sql_help.c:3563 sql_help.c:3612 +#: sql_help.c:3651 sql_help.c:3800 sql_help.c:3802 sql_help.c:3851 +#: sql_help.c:3885 sql_help.c:3907 sql_help.c:3909 sql_help.c:3910 +#: sql_help.c:3994 sql_help.c:3996 sql_help.c:4045 msgid "table_name" msgstr "Tabellenname" -#: sql_help.c:747 sql_help.c:1985 -#, fuzzy -#| msgid "missing expression" +#: sql_help.c:747 sql_help.c:1988 msgid "using_expression" -msgstr "Ausdruck fehlt" +msgstr "Using-Ausdruck" -#: sql_help.c:748 sql_help.c:1986 -#, fuzzy -#| msgid "expression" +#: sql_help.c:748 sql_help.c:1989 msgid "check_expression" -msgstr "Ausdruck" +msgstr "Check-Ausdruck" -#: sql_help.c:787 sql_help.c:1209 sql_help.c:1852 sql_help.c:2018 -#: sql_help.c:2466 +#: sql_help.c:787 sql_help.c:1209 sql_help.c:1855 sql_help.c:2021 +#: sql_help.c:2469 msgid "password" msgstr "Passwort" -#: sql_help.c:788 sql_help.c:1210 sql_help.c:1853 sql_help.c:2019 -#: sql_help.c:2467 +#: sql_help.c:788 sql_help.c:1210 sql_help.c:1856 sql_help.c:2022 +#: sql_help.c:2470 msgid "timestamp" msgstr "Zeit" -#: sql_help.c:792 sql_help.c:796 sql_help.c:799 sql_help.c:802 sql_help.c:3038 -#: sql_help.c:3370 +#: sql_help.c:792 sql_help.c:796 sql_help.c:799 sql_help.c:802 sql_help.c:3041 +#: sql_help.c:3373 msgid "database_name" msgstr "Datenbankname" -#: sql_help.c:843 sql_help.c:2084 +#: sql_help.c:843 sql_help.c:2087 msgid "increment" msgstr "Inkrement" -#: sql_help.c:844 sql_help.c:2085 +#: sql_help.c:844 sql_help.c:2088 msgid "minvalue" msgstr "Minwert" -#: sql_help.c:845 sql_help.c:2086 +#: sql_help.c:845 sql_help.c:2089 msgid "maxvalue" msgstr "Maxwert" -#: sql_help.c:846 sql_help.c:2087 sql_help.c:3555 sql_help.c:3645 -#: sql_help.c:3793 sql_help.c:3922 sql_help.c:3986 +#: sql_help.c:846 sql_help.c:2090 sql_help.c:3559 sql_help.c:3649 +#: sql_help.c:3798 sql_help.c:3927 sql_help.c:3992 msgid "start" msgstr "Start" @@ -3644,7 +3631,7 @@ msgstr "Start" msgid "restart" msgstr "Restart" -#: sql_help.c:848 sql_help.c:2088 +#: sql_help.c:848 sql_help.c:2091 msgid "cache" msgstr "Cache" @@ -3660,7 +3647,7 @@ msgstr "Regelname" msgid "and table_constraint_using_index is:" msgstr "und Tabellen-Constraint-für-Index Folgendes ist:" -#: sql_help.c:1033 sql_help.c:1036 sql_help.c:2257 +#: sql_help.c:1033 sql_help.c:1036 sql_help.c:2260 msgid "tablespace_option" msgstr "Tablespace-Option" @@ -3681,7 +3668,7 @@ msgid "new_dictionary" msgstr "neues_Wörterbuch" #: sql_help.c:1155 sql_help.c:1165 sql_help.c:1168 sql_help.c:1169 -#: sql_help.c:2406 +#: sql_help.c:2409 msgid "attribute_name" msgstr "Attributname" @@ -3697,803 +3684,787 @@ msgstr "neuer_Enum-Wert" msgid "existing_enum_value" msgstr "existierender_Enum-Wert" -#: sql_help.c:1233 sql_help.c:1773 sql_help.c:2100 sql_help.c:2484 -#: sql_help.c:2873 sql_help.c:3044 sql_help.c:3079 sql_help.c:3376 +#: sql_help.c:1233 sql_help.c:1776 sql_help.c:2103 sql_help.c:2487 +#: sql_help.c:2876 sql_help.c:3047 sql_help.c:3082 sql_help.c:3379 msgid "server_name" msgstr "Servername" -#: sql_help.c:1261 sql_help.c:1264 sql_help.c:2499 +#: sql_help.c:1261 sql_help.c:1264 sql_help.c:2502 msgid "view_option_name" msgstr "Sichtoptionsname" -#: sql_help.c:1262 sql_help.c:2500 +#: sql_help.c:1262 sql_help.c:2503 msgid "view_option_value" msgstr "Sichtoptionswert" -#: sql_help.c:1287 sql_help.c:3703 sql_help.c:3705 sql_help.c:3729 +#: sql_help.c:1287 sql_help.c:3707 sql_help.c:3709 sql_help.c:3733 msgid "transaction_mode" msgstr "Transaktionsmodus" -#: sql_help.c:1288 sql_help.c:3706 sql_help.c:3730 +#: sql_help.c:1288 sql_help.c:3710 sql_help.c:3734 msgid "where transaction_mode is one of:" msgstr "wobei Transaktionsmodus Folgendes sein kann:" -#: sql_help.c:1370 +#: sql_help.c:1371 msgid "relation_name" msgstr "Relationsname" -#: sql_help.c:1375 sql_help.c:3040 sql_help.c:3372 +#: sql_help.c:1376 sql_help.c:3043 sql_help.c:3375 msgid "domain_name" msgstr "Domänenname" -#: sql_help.c:1399 +#: sql_help.c:1398 +msgid "policy_name" +msgstr "Policy-Name" + +#: sql_help.c:1402 msgid "rule_name" msgstr "Regelname" -#: sql_help.c:1416 +#: sql_help.c:1419 msgid "text" msgstr "Text" -#: sql_help.c:1441 sql_help.c:3222 sql_help.c:3410 +#: sql_help.c:1444 sql_help.c:3225 sql_help.c:3413 msgid "transaction_id" msgstr "Transaktions-ID" -#: sql_help.c:1472 sql_help.c:1478 sql_help.c:3148 +#: sql_help.c:1475 sql_help.c:1481 sql_help.c:3151 msgid "filename" msgstr "Dateiname" -#: sql_help.c:1473 sql_help.c:1479 sql_help.c:2043 sql_help.c:2044 -#: sql_help.c:2045 +#: sql_help.c:1476 sql_help.c:1482 sql_help.c:2046 sql_help.c:2047 +#: sql_help.c:2048 msgid "command" msgstr "Befehl" -#: sql_help.c:1477 sql_help.c:1913 sql_help.c:2243 sql_help.c:2501 -#: sql_help.c:2519 sql_help.c:3113 +#: sql_help.c:1480 sql_help.c:1916 sql_help.c:2246 sql_help.c:2504 +#: sql_help.c:2522 sql_help.c:3116 msgid "query" msgstr "Anfrage" -#: sql_help.c:1481 sql_help.c:2918 +#: sql_help.c:1484 sql_help.c:2921 msgid "where option can be one of:" msgstr "wobei Option eine der folgenden sein kann:" -#: sql_help.c:1482 +#: sql_help.c:1485 msgid "format_name" msgstr "Formatname" -#: sql_help.c:1483 sql_help.c:1484 sql_help.c:1487 sql_help.c:2919 -#: sql_help.c:2920 sql_help.c:2921 sql_help.c:2922 sql_help.c:2923 +#: sql_help.c:1486 sql_help.c:1487 sql_help.c:1490 sql_help.c:2922 +#: sql_help.c:2923 sql_help.c:2924 sql_help.c:2925 sql_help.c:2926 msgid "boolean" msgstr "boolean" -#: sql_help.c:1485 +#: sql_help.c:1488 msgid "delimiter_character" msgstr "Trennzeichen" -#: sql_help.c:1486 +#: sql_help.c:1489 msgid "null_string" msgstr "Null-Zeichenkette" -#: sql_help.c:1488 +#: sql_help.c:1491 msgid "quote_character" msgstr "Quote-Zeichen" -#: sql_help.c:1489 +#: sql_help.c:1492 msgid "escape_character" msgstr "Escape-Zeichen" -#: sql_help.c:1493 +#: sql_help.c:1496 msgid "encoding_name" msgstr "Kodierungsname" -#: sql_help.c:1550 sql_help.c:1566 sql_help.c:1569 +#: sql_help.c:1553 sql_help.c:1569 sql_help.c:1572 msgid "arg_data_type" msgstr "Arg-Datentyp" -#: sql_help.c:1551 sql_help.c:1570 sql_help.c:1578 +#: sql_help.c:1554 sql_help.c:1573 sql_help.c:1581 msgid "sfunc" msgstr "Übergangsfunktion" -#: sql_help.c:1552 sql_help.c:1571 sql_help.c:1579 +#: sql_help.c:1555 sql_help.c:1574 sql_help.c:1582 msgid "state_data_type" msgstr "Zustandsdatentyp" -#: sql_help.c:1553 sql_help.c:1572 sql_help.c:1580 +#: sql_help.c:1556 sql_help.c:1575 sql_help.c:1583 msgid "state_data_size" msgstr "Zustandsdatengröße" -#: sql_help.c:1554 sql_help.c:1573 sql_help.c:1581 +#: sql_help.c:1557 sql_help.c:1576 sql_help.c:1584 msgid "ffunc" msgstr "Abschlussfunktion" -#: sql_help.c:1555 sql_help.c:1574 sql_help.c:1582 +#: sql_help.c:1558 sql_help.c:1577 sql_help.c:1585 msgid "initial_condition" msgstr "Anfangswert" -#: sql_help.c:1556 sql_help.c:1583 +#: sql_help.c:1559 sql_help.c:1586 msgid "msfunc" msgstr "Moving-Übergangsfunktion" -#: sql_help.c:1557 sql_help.c:1584 +#: sql_help.c:1560 sql_help.c:1587 msgid "minvfunc" msgstr "Moving-Inversfunktion" -#: sql_help.c:1558 sql_help.c:1585 +#: sql_help.c:1561 sql_help.c:1588 msgid "mstate_data_type" msgstr "Moving-Zustandsdatentyp" -#: sql_help.c:1559 sql_help.c:1586 +#: sql_help.c:1562 sql_help.c:1589 msgid "mstate_data_size" msgstr "Moving-Zustandsdatengröße" -#: sql_help.c:1560 sql_help.c:1587 +#: sql_help.c:1563 sql_help.c:1590 msgid "mffunc" msgstr "Moving-Abschlussfunktion" -#: sql_help.c:1561 sql_help.c:1588 +#: sql_help.c:1564 sql_help.c:1591 msgid "minitial_condition" msgstr "Moving-Anfangswert" -#: sql_help.c:1562 sql_help.c:1589 +#: sql_help.c:1565 sql_help.c:1592 msgid "sort_operator" msgstr "Sortieroperator" -#: sql_help.c:1575 +#: sql_help.c:1578 msgid "or the old syntax" msgstr "oder die alte Syntax" -#: sql_help.c:1577 +#: sql_help.c:1580 msgid "base_type" msgstr "Basistyp" -#: sql_help.c:1628 +#: sql_help.c:1631 msgid "locale" msgstr "Locale" -#: sql_help.c:1629 sql_help.c:1665 +#: sql_help.c:1632 sql_help.c:1668 msgid "lc_collate" msgstr "lc_collate" -#: sql_help.c:1630 sql_help.c:1666 +#: sql_help.c:1633 sql_help.c:1669 msgid "lc_ctype" msgstr "lc_ctype" -#: sql_help.c:1632 +#: sql_help.c:1635 msgid "existing_collation" msgstr "existierende_Sortierfolge" -#: sql_help.c:1642 +#: sql_help.c:1645 msgid "source_encoding" msgstr "Quellkodierung" -#: sql_help.c:1643 +#: sql_help.c:1646 msgid "dest_encoding" msgstr "Zielkodierung" -#: sql_help.c:1663 sql_help.c:2283 +#: sql_help.c:1666 sql_help.c:2286 msgid "template" msgstr "Vorlage" -#: sql_help.c:1664 +#: sql_help.c:1667 msgid "encoding" msgstr "Kodierung" -#: sql_help.c:1690 +#: sql_help.c:1693 msgid "constraint" msgstr "Constraint" -#: sql_help.c:1691 +#: sql_help.c:1694 msgid "where constraint is:" msgstr "wobei Constraint Folgendes ist:" -#: sql_help.c:1705 sql_help.c:2040 sql_help.c:2355 +#: sql_help.c:1708 sql_help.c:2043 sql_help.c:2358 msgid "event" msgstr "Ereignis" -#: sql_help.c:1706 +#: sql_help.c:1709 msgid "filter_variable" msgstr "Filtervariable" -#: sql_help.c:1718 +#: sql_help.c:1721 msgid "extension_name" msgstr "Erweiterungsname" -#: sql_help.c:1720 +#: sql_help.c:1723 msgid "version" msgstr "Version" -#: sql_help.c:1721 +#: sql_help.c:1724 msgid "old_version" msgstr "alte_Version" -#: sql_help.c:1776 sql_help.c:2189 +#: sql_help.c:1779 sql_help.c:2192 msgid "where column_constraint is:" msgstr "wobei Spalten-Constraint Folgendes ist:" -#: sql_help.c:1779 sql_help.c:1810 sql_help.c:2192 +#: sql_help.c:1782 sql_help.c:1813 sql_help.c:2195 msgid "default_expr" msgstr "Vorgabeausdruck" -#: sql_help.c:1780 sql_help.c:2199 +#: sql_help.c:1783 sql_help.c:2202 msgid "and table_constraint is:" msgstr "und Tabellen-Constraint Folgendes ist:" -#: sql_help.c:1811 +#: sql_help.c:1814 msgid "rettype" msgstr "Rückgabetyp" -#: sql_help.c:1813 +#: sql_help.c:1816 msgid "column_type" msgstr "Spaltentyp" -#: sql_help.c:1821 +#: sql_help.c:1824 msgid "definition" msgstr "Definition" -#: sql_help.c:1822 +#: sql_help.c:1825 msgid "obj_file" msgstr "Objektdatei" -#: sql_help.c:1823 +#: sql_help.c:1826 msgid "link_symbol" msgstr "Linksymbol" -#: sql_help.c:1824 +#: sql_help.c:1827 msgid "attribute" msgstr "Attribut" -#: sql_help.c:1859 sql_help.c:2025 sql_help.c:2473 +#: sql_help.c:1862 sql_help.c:2028 sql_help.c:2476 msgid "uid" msgstr "Uid" -#: sql_help.c:1873 +#: sql_help.c:1876 msgid "method" msgstr "Methode" -#: sql_help.c:1877 sql_help.c:2224 sql_help.c:3122 +#: sql_help.c:1880 sql_help.c:2227 sql_help.c:3125 msgid "opclass" msgstr "Opklasse" -#: sql_help.c:1881 sql_help.c:2210 +#: sql_help.c:1884 sql_help.c:2213 msgid "predicate" msgstr "Prädikat" -#: sql_help.c:1893 +#: sql_help.c:1896 msgid "call_handler" msgstr "Handler" -#: sql_help.c:1894 +#: sql_help.c:1897 msgid "inline_handler" msgstr "Inline-Handler" -#: sql_help.c:1895 +#: sql_help.c:1898 msgid "valfunction" msgstr "Valfunktion" -#: sql_help.c:1931 +#: sql_help.c:1934 msgid "com_op" msgstr "Kommutator-Op" -#: sql_help.c:1932 +#: sql_help.c:1935 msgid "neg_op" msgstr "Umkehrungs-Op" -#: sql_help.c:1933 +#: sql_help.c:1936 msgid "res_proc" msgstr "Res-Funktion" -#: sql_help.c:1934 +#: sql_help.c:1937 msgid "join_proc" msgstr "Join-Funktion" -#: sql_help.c:1950 +#: sql_help.c:1953 msgid "family_name" msgstr "Familienname" -#: sql_help.c:1961 +#: sql_help.c:1964 msgid "storage_type" msgstr "Storage-Typ" -#: sql_help.c:2042 sql_help.c:2358 sql_help.c:2535 sql_help.c:3132 -#: sql_help.c:3546 sql_help.c:3548 sql_help.c:3636 sql_help.c:3638 -#: sql_help.c:3784 sql_help.c:3786 sql_help.c:3889 sql_help.c:3977 -#: sql_help.c:3979 +#: sql_help.c:2045 sql_help.c:2361 sql_help.c:2538 sql_help.c:3135 +#: sql_help.c:3550 sql_help.c:3552 sql_help.c:3640 sql_help.c:3642 +#: sql_help.c:3789 sql_help.c:3791 sql_help.c:3894 sql_help.c:3983 +#: sql_help.c:3985 msgid "condition" msgstr "Bedingung" -#: sql_help.c:2046 sql_help.c:2361 +#: sql_help.c:2049 sql_help.c:2364 msgid "where event can be one of:" msgstr "wobei Ereignis eins der folgenden sein kann:" -#: sql_help.c:2065 sql_help.c:2067 +#: sql_help.c:2068 sql_help.c:2070 msgid "schema_element" msgstr "Schemaelement" -#: sql_help.c:2101 +#: sql_help.c:2104 msgid "server_type" msgstr "Servertyp" -#: sql_help.c:2102 +#: sql_help.c:2105 msgid "server_version" msgstr "Serverversion" -#: sql_help.c:2103 sql_help.c:3042 sql_help.c:3374 +#: sql_help.c:2106 sql_help.c:3045 sql_help.c:3377 msgid "fdw_name" msgstr "FDW-Name" -#: sql_help.c:2175 +#: sql_help.c:2178 msgid "source_table" msgstr "Quelltabelle" -#: sql_help.c:2176 +#: sql_help.c:2179 msgid "like_option" msgstr "Like-Option" -#: sql_help.c:2193 sql_help.c:2194 sql_help.c:2203 sql_help.c:2205 -#: sql_help.c:2209 +#: sql_help.c:2196 sql_help.c:2197 sql_help.c:2206 sql_help.c:2208 +#: sql_help.c:2212 msgid "index_parameters" msgstr "Indexparameter" -#: sql_help.c:2195 sql_help.c:2212 +#: sql_help.c:2198 sql_help.c:2215 msgid "reftable" msgstr "Reftabelle" -#: sql_help.c:2196 sql_help.c:2213 +#: sql_help.c:2199 sql_help.c:2216 msgid "refcolumn" msgstr "Refspalte" -#: sql_help.c:2207 +#: sql_help.c:2210 msgid "exclude_element" msgstr "Exclude-Element" -#: sql_help.c:2208 sql_help.c:3553 sql_help.c:3643 sql_help.c:3791 -#: sql_help.c:3920 sql_help.c:3984 +#: sql_help.c:2211 sql_help.c:3557 sql_help.c:3647 sql_help.c:3796 +#: sql_help.c:3925 sql_help.c:3990 msgid "operator" msgstr "Operator" -#: sql_help.c:2216 +#: sql_help.c:2219 msgid "and like_option is:" msgstr "und Like-Option Folgendes ist:" -#: sql_help.c:2217 +#: sql_help.c:2220 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "Indexparameter bei UNIQUE-, PRIMARY KEY- und EXCLUDE-Constraints sind:" -#: sql_help.c:2221 +#: sql_help.c:2224 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "Exclude-Element in einem EXCLUDE-Constraint ist:" -#: sql_help.c:2256 +#: sql_help.c:2259 msgid "directory" msgstr "Verzeichnis" -#: sql_help.c:2270 +#: sql_help.c:2273 msgid "parser_name" msgstr "Parser-Name" -#: sql_help.c:2271 +#: sql_help.c:2274 msgid "source_config" msgstr "Quellkonfig" -#: sql_help.c:2300 +#: sql_help.c:2303 msgid "start_function" msgstr "Startfunktion" -#: sql_help.c:2301 +#: sql_help.c:2304 msgid "gettoken_function" msgstr "Gettext-Funktion" -#: sql_help.c:2302 +#: sql_help.c:2305 msgid "end_function" msgstr "Endfunktion" -#: sql_help.c:2303 +#: sql_help.c:2306 msgid "lextypes_function" msgstr "Lextypenfunktion" -#: sql_help.c:2304 +#: sql_help.c:2307 msgid "headline_function" msgstr "Headline-Funktion" -#: sql_help.c:2316 +#: sql_help.c:2319 msgid "init_function" msgstr "Init-Funktion" -#: sql_help.c:2317 +#: sql_help.c:2320 msgid "lexize_function" msgstr "Lexize-Funktion" -#: sql_help.c:2330 -#, fuzzy -#| msgid "function_name" +#: sql_help.c:2333 msgid "from_sql_function_name" -msgstr "Funktionsname" +msgstr "From-SQL-Funktionsname" -#: sql_help.c:2332 -#, fuzzy -#| msgid "function_name" +#: sql_help.c:2335 msgid "to_sql_function_name" -msgstr "Funktionsname" +msgstr "To-SQL-Funktionsname" -#: sql_help.c:2357 +#: sql_help.c:2360 msgid "referenced_table_name" msgstr "verwiesener_Tabellenname" -#: sql_help.c:2360 +#: sql_help.c:2363 msgid "arguments" msgstr "Argumente" -#: sql_help.c:2410 sql_help.c:3482 +#: sql_help.c:2413 sql_help.c:3485 msgid "label" msgstr "Label" -#: sql_help.c:2412 +#: sql_help.c:2415 msgid "subtype" msgstr "Untertyp" -#: sql_help.c:2413 +#: sql_help.c:2416 msgid "subtype_operator_class" msgstr "Untertyp-Operatorklasse" -#: sql_help.c:2415 +#: sql_help.c:2418 msgid "canonical_function" msgstr "Canonical-Funktion" -#: sql_help.c:2416 +#: sql_help.c:2419 msgid "subtype_diff_function" msgstr "Untertyp-Diff-Funktion" -#: sql_help.c:2418 +#: sql_help.c:2421 msgid "input_function" msgstr "Eingabefunktion" -#: sql_help.c:2419 +#: sql_help.c:2422 msgid "output_function" msgstr "Ausgabefunktion" -#: sql_help.c:2420 +#: sql_help.c:2423 msgid "receive_function" msgstr "Empfangsfunktion" -#: sql_help.c:2421 +#: sql_help.c:2424 msgid "send_function" msgstr "Sendefunktion" -#: sql_help.c:2422 +#: sql_help.c:2425 msgid "type_modifier_input_function" msgstr "Typmod-Eingabefunktion" -#: sql_help.c:2423 +#: sql_help.c:2426 msgid "type_modifier_output_function" msgstr "Typmod-Ausgabefunktion" -#: sql_help.c:2424 +#: sql_help.c:2427 msgid "analyze_function" msgstr "Analyze-Funktion" -#: sql_help.c:2425 +#: sql_help.c:2428 msgid "internallength" msgstr "interne_Länge" -#: sql_help.c:2426 +#: sql_help.c:2429 msgid "alignment" msgstr "Ausrichtung" -#: sql_help.c:2427 +#: sql_help.c:2430 msgid "storage" msgstr "Speicherung" -#: sql_help.c:2428 +#: sql_help.c:2431 msgid "like_type" msgstr "wie_Typ" -#: sql_help.c:2429 +#: sql_help.c:2432 msgid "category" msgstr "Kategorie" -#: sql_help.c:2430 +#: sql_help.c:2433 msgid "preferred" msgstr "bevorzugt" -#: sql_help.c:2431 +#: sql_help.c:2434 msgid "default" msgstr "Vorgabewert" -#: sql_help.c:2432 +#: sql_help.c:2435 msgid "element" msgstr "Element" -#: sql_help.c:2433 +#: sql_help.c:2436 msgid "delimiter" msgstr "Trennzeichen" -#: sql_help.c:2434 +#: sql_help.c:2437 msgid "collatable" msgstr "sortierbar" -#: sql_help.c:2531 sql_help.c:3108 sql_help.c:3541 sql_help.c:3630 -#: sql_help.c:3779 sql_help.c:3879 sql_help.c:3972 +#: sql_help.c:2534 sql_help.c:3111 sql_help.c:3545 sql_help.c:3634 +#: sql_help.c:3784 sql_help.c:3884 sql_help.c:3978 msgid "with_query" msgstr "With-Anfrage" -#: sql_help.c:2533 sql_help.c:3110 sql_help.c:3560 sql_help.c:3566 -#: sql_help.c:3569 sql_help.c:3573 sql_help.c:3577 sql_help.c:3585 -#: sql_help.c:3798 sql_help.c:3804 sql_help.c:3807 sql_help.c:3811 -#: sql_help.c:3815 sql_help.c:3823 sql_help.c:3881 sql_help.c:3991 -#: sql_help.c:3997 sql_help.c:4000 sql_help.c:4004 sql_help.c:4008 -#: sql_help.c:4016 +#: sql_help.c:2536 sql_help.c:3113 sql_help.c:3564 sql_help.c:3570 +#: sql_help.c:3573 sql_help.c:3577 sql_help.c:3581 sql_help.c:3589 +#: sql_help.c:3803 sql_help.c:3809 sql_help.c:3812 sql_help.c:3816 +#: sql_help.c:3820 sql_help.c:3828 sql_help.c:3886 sql_help.c:3997 +#: sql_help.c:4003 sql_help.c:4006 sql_help.c:4010 sql_help.c:4014 +#: sql_help.c:4022 msgid "alias" msgstr "Alias" -#: sql_help.c:2534 +#: sql_help.c:2537 msgid "using_list" msgstr "Using-Liste" -#: sql_help.c:2536 sql_help.c:2949 sql_help.c:3189 sql_help.c:3890 +#: sql_help.c:2539 sql_help.c:2952 sql_help.c:3192 sql_help.c:3895 msgid "cursor_name" msgstr "Cursor-Name" -#: sql_help.c:2537 sql_help.c:3116 sql_help.c:3891 +#: sql_help.c:2540 sql_help.c:3119 sql_help.c:3896 msgid "output_expression" msgstr "Ausgabeausdruck" -#: sql_help.c:2538 sql_help.c:3117 sql_help.c:3544 sql_help.c:3633 -#: sql_help.c:3782 sql_help.c:3892 sql_help.c:3975 +#: sql_help.c:2541 sql_help.c:3120 sql_help.c:3548 sql_help.c:3637 +#: sql_help.c:3787 sql_help.c:3897 sql_help.c:3981 msgid "output_name" msgstr "Ausgabename" -#: sql_help.c:2554 +#: sql_help.c:2557 msgid "code" msgstr "Code" -#: sql_help.c:2897 +#: sql_help.c:2900 msgid "parameter" msgstr "Parameter" -#: sql_help.c:2916 sql_help.c:2917 sql_help.c:3214 +#: sql_help.c:2919 sql_help.c:2920 sql_help.c:3217 msgid "statement" msgstr "Anweisung" -#: sql_help.c:2948 sql_help.c:3188 +#: sql_help.c:2951 sql_help.c:3191 msgid "direction" msgstr "Richtung" -#: sql_help.c:2950 sql_help.c:3190 +#: sql_help.c:2953 sql_help.c:3193 msgid "where direction can be empty or one of:" msgstr "wobei Richtung leer sein kann oder Folgendes:" -#: sql_help.c:2951 sql_help.c:2952 sql_help.c:2953 sql_help.c:2954 -#: sql_help.c:2955 sql_help.c:3191 sql_help.c:3192 sql_help.c:3193 -#: sql_help.c:3194 sql_help.c:3195 sql_help.c:3554 sql_help.c:3556 -#: sql_help.c:3644 sql_help.c:3646 sql_help.c:3792 sql_help.c:3794 -#: sql_help.c:3921 sql_help.c:3923 sql_help.c:3985 sql_help.c:3987 +#: sql_help.c:2954 sql_help.c:2955 sql_help.c:2956 sql_help.c:2957 +#: sql_help.c:2958 sql_help.c:3194 sql_help.c:3195 sql_help.c:3196 +#: sql_help.c:3197 sql_help.c:3198 sql_help.c:3558 sql_help.c:3560 +#: sql_help.c:3648 sql_help.c:3650 sql_help.c:3797 sql_help.c:3799 +#: sql_help.c:3926 sql_help.c:3928 sql_help.c:3991 sql_help.c:3993 msgid "count" msgstr "Anzahl" -#: sql_help.c:3035 sql_help.c:3367 +#: sql_help.c:3038 sql_help.c:3370 msgid "sequence_name" msgstr "Sequenzname" -#: sql_help.c:3048 sql_help.c:3380 +#: sql_help.c:3051 sql_help.c:3383 msgid "arg_name" msgstr "Argname" -#: sql_help.c:3049 sql_help.c:3381 +#: sql_help.c:3052 sql_help.c:3384 msgid "arg_type" msgstr "Argtyp" -#: sql_help.c:3054 sql_help.c:3386 +#: sql_help.c:3057 sql_help.c:3389 msgid "loid" msgstr "Large-Object-OID" -#: sql_help.c:3077 -#, fuzzy -#| msgid "remove a schema" +#: sql_help.c:3080 msgid "remote_schema" -msgstr "entfernt ein Schema" +msgstr "fernes_Schema" -#: sql_help.c:3080 -#, fuzzy -#| msgid "local socket" +#: sql_help.c:3083 msgid "local_schema" -msgstr "lokales Socket" +msgstr "lokales_Schema" -#: sql_help.c:3114 +#: sql_help.c:3117 msgid "conflict_target" -msgstr "" +msgstr "Konfliktziel" -#: sql_help.c:3115 -#, fuzzy -#| msgid "canonical_function" +#: sql_help.c:3118 msgid "conflict_action" -msgstr "Canonical-Funktion" +msgstr "Konfliktaktion" -#: sql_help.c:3118 -#, fuzzy -#| msgid "where from_item can be one of:" +#: sql_help.c:3121 msgid "where conflict_target can be one of:" -msgstr "wobei From-Element Folgendes sein kann:" +msgstr "wobei Konfliktziel Folgendes sein kann:" -#: sql_help.c:3119 +#: sql_help.c:3122 #, fuzzy #| msgid "column_name" msgid "column_name_index" msgstr "Spaltenname" -#: sql_help.c:3120 +#: sql_help.c:3123 #, fuzzy #| msgid "expression" msgid "expression_index" msgstr "Ausdruck" -#: sql_help.c:3123 +#: sql_help.c:3126 #, fuzzy #| msgid "predicate" msgid "index_predicate" msgstr "Prädikat" -#: sql_help.c:3125 -#, fuzzy -#| msgid "where action is one of:" +#: sql_help.c:3128 msgid "and conflict_action is one of:" -msgstr "wobei Aktion Folgendes sein kann:" +msgstr "und Konfliktaktion Folgendes sein kann:" -#: sql_help.c:3131 sql_help.c:3887 +#: sql_help.c:3134 sql_help.c:3892 msgid "sub-SELECT" msgstr "" -#: sql_help.c:3140 sql_help.c:3203 sql_help.c:3863 +#: sql_help.c:3143 sql_help.c:3206 sql_help.c:3868 msgid "channel" msgstr "Kanal" -#: sql_help.c:3162 +#: sql_help.c:3165 msgid "lockmode" msgstr "Sperrmodus" -#: sql_help.c:3163 +#: sql_help.c:3166 msgid "where lockmode is one of:" msgstr "wobei Sperrmodus Folgendes sein kann:" -#: sql_help.c:3204 +#: sql_help.c:3207 msgid "payload" msgstr "Payload" -#: sql_help.c:3231 +#: sql_help.c:3234 msgid "old_role" msgstr "alte_Rolle" -#: sql_help.c:3232 +#: sql_help.c:3235 msgid "new_role" msgstr "neue_Rolle" -#: sql_help.c:3257 sql_help.c:3418 sql_help.c:3426 +#: sql_help.c:3260 sql_help.c:3421 sql_help.c:3429 msgid "savepoint_name" -msgstr "Savepoint-Name" +msgstr "Sicherungspunktsname" -#: sql_help.c:3459 +#: sql_help.c:3462 msgid "provider" msgstr "Provider" -#: sql_help.c:3545 sql_help.c:3587 sql_help.c:3589 sql_help.c:3635 -#: sql_help.c:3783 sql_help.c:3825 sql_help.c:3827 sql_help.c:3976 -#: sql_help.c:4018 sql_help.c:4020 +#: sql_help.c:3549 sql_help.c:3591 sql_help.c:3593 sql_help.c:3639 +#: sql_help.c:3788 sql_help.c:3830 sql_help.c:3832 sql_help.c:3982 +#: sql_help.c:4024 sql_help.c:4026 msgid "from_item" msgstr "From-Element" -#: sql_help.c:3547 sql_help.c:3599 sql_help.c:3785 sql_help.c:3837 -#: sql_help.c:3978 sql_help.c:4030 -#, fuzzy -#| msgid "wrong element type" +#: sql_help.c:3551 sql_help.c:3603 sql_help.c:3790 sql_help.c:3842 +#: sql_help.c:3984 sql_help.c:4036 msgid "grouping_element" -msgstr "falscher Elementtyp" +msgstr "Gruppierelement" -#: sql_help.c:3549 sql_help.c:3639 sql_help.c:3787 sql_help.c:3980 +#: sql_help.c:3553 sql_help.c:3643 sql_help.c:3792 sql_help.c:3986 msgid "window_name" msgstr "Fenstername" -#: sql_help.c:3550 sql_help.c:3640 sql_help.c:3788 sql_help.c:3981 +#: sql_help.c:3554 sql_help.c:3644 sql_help.c:3793 sql_help.c:3987 msgid "window_definition" msgstr "Fensterdefinition" -#: sql_help.c:3551 sql_help.c:3565 sql_help.c:3603 sql_help.c:3641 -#: sql_help.c:3789 sql_help.c:3803 sql_help.c:3841 sql_help.c:3982 -#: sql_help.c:3996 sql_help.c:4034 +#: sql_help.c:3555 sql_help.c:3569 sql_help.c:3607 sql_help.c:3645 +#: sql_help.c:3794 sql_help.c:3808 sql_help.c:3846 sql_help.c:3988 +#: sql_help.c:4002 sql_help.c:4040 msgid "select" msgstr "Select" -#: sql_help.c:3558 sql_help.c:3796 sql_help.c:3989 +#: sql_help.c:3562 sql_help.c:3801 sql_help.c:3995 msgid "where from_item can be one of:" msgstr "wobei From-Element Folgendes sein kann:" -#: sql_help.c:3561 sql_help.c:3567 sql_help.c:3570 sql_help.c:3574 -#: sql_help.c:3586 sql_help.c:3799 sql_help.c:3805 sql_help.c:3808 -#: sql_help.c:3812 sql_help.c:3824 sql_help.c:3992 sql_help.c:3998 -#: sql_help.c:4001 sql_help.c:4005 sql_help.c:4017 +#: sql_help.c:3565 sql_help.c:3571 sql_help.c:3574 sql_help.c:3578 +#: sql_help.c:3590 sql_help.c:3804 sql_help.c:3810 sql_help.c:3813 +#: sql_help.c:3817 sql_help.c:3829 sql_help.c:3998 sql_help.c:4004 +#: sql_help.c:4007 sql_help.c:4011 sql_help.c:4023 msgid "column_alias" msgstr "Spaltenalias" -#: sql_help.c:3562 sql_help.c:3800 sql_help.c:3993 -#, fuzzy -#| msgid "index_method" +#: sql_help.c:3566 sql_help.c:3805 sql_help.c:3999 msgid "sampling_method" -msgstr "Indexmethode" +msgstr "Stichprobenmethode" -#: sql_help.c:3563 sql_help.c:3572 sql_help.c:3576 sql_help.c:3580 -#: sql_help.c:3583 sql_help.c:3801 sql_help.c:3810 sql_help.c:3814 -#: sql_help.c:3818 sql_help.c:3821 sql_help.c:3994 sql_help.c:4003 -#: sql_help.c:4007 sql_help.c:4011 sql_help.c:4014 +#: sql_help.c:3567 sql_help.c:3576 sql_help.c:3580 sql_help.c:3584 +#: sql_help.c:3587 sql_help.c:3806 sql_help.c:3815 sql_help.c:3819 +#: sql_help.c:3823 sql_help.c:3826 sql_help.c:4000 sql_help.c:4009 +#: sql_help.c:4013 sql_help.c:4017 sql_help.c:4020 msgid "argument" msgstr "Argument" -#: sql_help.c:3564 sql_help.c:3802 sql_help.c:3995 +#: sql_help.c:3568 sql_help.c:3807 sql_help.c:4001 msgid "seed" msgstr "" -#: sql_help.c:3568 sql_help.c:3601 sql_help.c:3806 sql_help.c:3839 -#: sql_help.c:3999 sql_help.c:4032 +#: sql_help.c:3572 sql_help.c:3605 sql_help.c:3811 sql_help.c:3844 +#: sql_help.c:4005 sql_help.c:4038 msgid "with_query_name" msgstr "With-Anfragename" -#: sql_help.c:3578 sql_help.c:3581 sql_help.c:3584 sql_help.c:3816 -#: sql_help.c:3819 sql_help.c:3822 sql_help.c:4009 sql_help.c:4012 -#: sql_help.c:4015 +#: sql_help.c:3582 sql_help.c:3585 sql_help.c:3588 sql_help.c:3821 +#: sql_help.c:3824 sql_help.c:3827 sql_help.c:4015 sql_help.c:4018 +#: sql_help.c:4021 msgid "column_definition" msgstr "Spaltendefinition" -#: sql_help.c:3588 sql_help.c:3826 sql_help.c:4019 +#: sql_help.c:3592 sql_help.c:3831 sql_help.c:4025 msgid "join_type" msgstr "Verbundtyp" -#: sql_help.c:3590 sql_help.c:3828 sql_help.c:4021 +#: sql_help.c:3594 sql_help.c:3833 sql_help.c:4027 msgid "join_condition" msgstr "Verbundbedingung" -#: sql_help.c:3591 sql_help.c:3829 sql_help.c:4022 +#: sql_help.c:3595 sql_help.c:3834 sql_help.c:4028 msgid "join_column" msgstr "Verbundspalte" -#: sql_help.c:3592 sql_help.c:3830 sql_help.c:4023 -#, fuzzy -#| msgid "where event can be one of:" +#: sql_help.c:3596 sql_help.c:3835 sql_help.c:4029 msgid "and grouping_element can be one of:" -msgstr "wobei Ereignis eins der folgenden sein kann:" +msgstr "und Gruppierelement eins der folgenden sein kann:" -#: sql_help.c:3600 sql_help.c:3838 sql_help.c:4031 +#: sql_help.c:3604 sql_help.c:3843 sql_help.c:4037 msgid "and with_query is:" msgstr "und With-Anfrage ist:" -#: sql_help.c:3604 sql_help.c:3842 sql_help.c:4035 +#: sql_help.c:3608 sql_help.c:3847 sql_help.c:4041 msgid "values" msgstr "values" -#: sql_help.c:3605 sql_help.c:3843 sql_help.c:4036 +#: sql_help.c:3609 sql_help.c:3848 sql_help.c:4042 msgid "insert" msgstr "insert" -#: sql_help.c:3606 sql_help.c:3844 sql_help.c:4037 +#: sql_help.c:3610 sql_help.c:3849 sql_help.c:4043 msgid "update" msgstr "update" -#: sql_help.c:3607 sql_help.c:3845 sql_help.c:4038 +#: sql_help.c:3611 sql_help.c:3850 sql_help.c:4044 msgid "delete" msgstr "delete" -#: sql_help.c:3634 +#: sql_help.c:3638 msgid "new_table" msgstr "neue_Tabelle" -#: sql_help.c:3659 +#: sql_help.c:3663 msgid "timezone" msgstr "Zeitzone" -#: sql_help.c:3704 +#: sql_help.c:3708 msgid "snapshot_id" msgstr "Snapshot-ID" -#: sql_help.c:3888 +#: sql_help.c:3893 msgid "from_list" msgstr "From-Liste" -#: sql_help.c:3919 +#: sql_help.c:3924 msgid "sort_expression" msgstr "Sortierausdruck" @@ -4578,10 +4549,8 @@ msgid "change the definition of an operator family" msgstr "ändert die Definition einer Operatorfamilie" #: sql_help.h:297 -#, fuzzy -#| msgid "change the definition of a domain" msgid "change the definition of a policy" -msgstr "ändert die Definition einer Domäne" +msgstr "ändert die Definition einer Policy" #: sql_help.h:302 sql_help.h:372 msgid "change a database role" @@ -4756,10 +4725,8 @@ msgid "define a new operator family" msgstr "definiert eine neue Operatorfamilie" #: sql_help.h:522 -#, fuzzy -#| msgid "define a new foreign table" msgid "define a new policy for a table" -msgstr "definiert eine neue Fremdtabelle" +msgstr "definiert eine neue Policy für eine Tabelle" #: sql_help.h:532 msgid "define a new rewrite rule" @@ -4806,10 +4773,8 @@ msgid "define a new text search template" msgstr "definiert eine neue Textsuchevorlage" #: sql_help.h:587 -#, fuzzy -#| msgid "define a new operator" msgid "define a new transform" -msgstr "definiert einen neuen Operator" +msgstr "definiert eine neue Transformation" #: sql_help.h:592 msgid "define a new trigger" @@ -4924,10 +4889,8 @@ msgid "remove database objects owned by a database role" msgstr "entfernt die einer Datenbankrolle gehörenden Datenbankobjekte" #: sql_help.h:737 -#, fuzzy -#| msgid "remove a foreign table" msgid "remove a policy from a table" -msgstr "entfernt eine Fremdtabelle" +msgstr "entfernt eine Policy von einer Tabelle" #: sql_help.h:747 msgid "remove a rewrite rule" @@ -4970,10 +4933,8 @@ msgid "remove a text search template" msgstr "entfernt eine Textsuchevorlage" #: sql_help.h:797 -#, fuzzy -#| msgid "remove an operator" msgid "remove a transform" -msgstr "entfernt einen Operator" +msgstr "entfernt eine Transformation" #: sql_help.h:802 msgid "remove a trigger" @@ -5008,10 +4969,8 @@ msgid "define access privileges" msgstr "definiert Zugriffsprivilegien" #: sql_help.h:852 -#, fuzzy -#| msgid "change the definition of a foreign server" msgid "import table definitions from a foreign server" -msgstr "ändert die Definition eines Fremdservers" +msgstr "importiert Tabellendefinitionen von einem Fremdserver" #: sql_help.h:857 msgid "create new rows in a table" @@ -5059,7 +5018,7 @@ msgstr "baut Indexe neu" #: sql_help.h:912 msgid "destroy a previously defined savepoint" -msgstr "gibt einen zuvor definierten Savepoint frei" +msgstr "gibt einen zuvor definierten Sicherungspunkt frei" #: sql_help.h:917 msgid "restore the value of a run-time parameter to the default value" @@ -5075,11 +5034,11 @@ msgstr "storniert eine Transaktion, die vorher für Two-Phase-Commit vorbereitet #: sql_help.h:937 msgid "roll back to a savepoint" -msgstr "rollt eine Transaktion bis zu einem Savepoint zurück" +msgstr "rollt eine Transaktion bis zu einem Sicherungspunkt zurück" #: sql_help.h:942 msgid "define a new savepoint within the current transaction" -msgstr "definiert einen neuen Savepoint in der aktuellen Transaktion" +msgstr "definiert einen neuen Sicherungspunkt in der aktuellen Transaktion" #: sql_help.h:947 msgid "define or change a security label applied to an object" @@ -5187,7 +5146,7 @@ msgstr "%s: konnte eigene Programmdatei nicht finden\n" msgid "unrecognized value \"%s\" for \"%s\"; assuming \"%s\"\n" msgstr "unbekannter Wert „%s“ für „%s“; „%s“ wird angenommen\n" -#: tab-complete.c:4511 +#: tab-complete.c:4566 #, c-format msgid "" "tab completion query failed: %s\n" @@ -5197,6 +5156,3 @@ msgstr "" "Anfrage zur Tab-Vervollständigung fehlgeschlagen: %s\n" "Anfrage war:\n" "%s\n" - -#~ msgid "(No rows)\n" -#~ msgstr "(keine Zeilen)\n" diff --git a/src/bin/psql/po/es.po b/src/bin/psql/po/es.po index c038dc62a7870..51f7583d0f2ee 100644 --- a/src/bin/psql/po/es.po +++ b/src/bin/psql/po/es.po @@ -3,16 +3,16 @@ # Copyright (C) 2003-2013 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. # -# Alvaro Herrera, , 2003-2014 +# Alvaro Herrera, , 2003-2015 # Diego A. Gil , 2005 # Martín Marqués , 2013 # msgid "" msgstr "" -"Project-Id-Version: psql (PostgreSQL 9.4)\n" +"Project-Id-Version: psql (PostgreSQL 9.5)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:41+0000\n" -"PO-Revision-Date: 2014-12-15 16:08-0300\n" +"POT-Creation-Date: 2015-10-04 02:43+0000\n" +"PO-Revision-Date: 2015-10-05 11:40-0300\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL Español \n" "Language: es\n" @@ -56,14 +56,14 @@ msgstr "no se pudo leer el enlace simbólico «%s»" msgid "pclose failed: %s" msgstr "pclose falló: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 command.c:321 input.c:205 mainloop.c:72 -#: mainloop.c:234 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 command.c:318 input.c:205 mainloop.c:73 +#: mainloop.c:253 #, c-format msgid "out of memory\n" msgstr "memoria agotada\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" @@ -73,14 +73,14 @@ 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:47 command.c:276 +#: ../../common/username.c:47 command.c:273 msgid "user does not exist" msgstr "el usuario no existe" -#: ../../common/username.c:61 +#: ../../common/username.c:62 #, c-format -msgid "user name lookup failure: %s" -msgstr "falló la búsqueda de nombre de usuario: %s" +msgid "user name lookup failure: error code %lu" +msgstr "fallo en la búsqueda de nombre de usuario: código de error %lu" #: ../../common/wait_error.c:47 #, c-format @@ -117,202 +117,202 @@ msgstr "el proceso hijo fue terminado por una señal %d" msgid "child process exited with unrecognized status %d" msgstr "el proceso hijo terminó con código no reconocido %d" -#: command.c:117 +#: command.c:114 #, c-format msgid "Invalid command \\%s. Try \\? for help.\n" msgstr "Orden \\%s no válida. Use \\? para obtener ayuda.\n" -#: command.c:119 +#: command.c:116 #, c-format msgid "invalid command \\%s\n" msgstr "orden \\%s no válida\n" -#: command.c:130 +#: command.c:127 #, c-format msgid "\\%s: extra argument \"%s\" ignored\n" msgstr "\\%s: argumento extra «%s» ignorado\n" -#: command.c:274 +#: command.c:271 #, c-format msgid "could not get home directory for user ID %ld: %s\n" msgstr "no se pudo obtener directorio home para el usuario de ID %ld: %s\n" -#: command.c:292 +#: command.c:289 #, c-format msgid "\\%s: could not change directory to \"%s\": %s\n" msgstr "\\%s: no se pudo cambiar directorio a «%s»: %s\n" -#: command.c:307 common.c:446 common.c:886 +#: command.c:304 common.c:442 common.c:500 common.c:962 #, c-format msgid "You are currently not connected to a database.\n" msgstr "No está conectado a una base de datos.\n" -#: command.c:334 +#: command.c:331 #, 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:337 +#: command.c:334 #, 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:538 command.c:608 command.c:1403 +#: command.c:535 command.c:605 command.c:1405 #, c-format msgid "no query buffer\n" msgstr "no hay búfer de consulta\n" -#: command.c:571 command.c:2998 +#: command.c:568 command.c:3161 #, c-format msgid "invalid line number: %s\n" msgstr "número de línea no válido: %s\n" -#: command.c:602 +#: command.c:599 #, c-format msgid "The server (version %d.%d) does not support editing function source.\n" msgstr "El servidor (versión %d.%d) no soporta la edición del código fuente de funciones.\n" -#: command.c:682 +#: command.c:679 msgid "No changes" msgstr "Sin cambios" -#: command.c:736 +#: command.c:733 #, c-format msgid "%s: invalid encoding name or conversion procedure not found\n" msgstr "" "%s: nombre de codificación no válido o procedimiento de conversión\n" "no encontrado\n" -#: command.c:833 command.c:883 command.c:897 command.c:914 command.c:1021 -#: command.c:1180 command.c:1383 command.c:1414 +#: command.c:830 command.c:880 command.c:894 command.c:911 command.c:1018 +#: command.c:1182 command.c:1385 command.c:1416 #, c-format msgid "\\%s: missing required argument\n" msgstr "\\%s: falta argumento requerido\n" -#: command.c:946 +#: command.c:943 msgid "Query buffer is empty." msgstr "El búfer de consulta está vacío." -#: command.c:956 +#: command.c:953 msgid "Enter new password: " msgstr "Ingrese la nueva contraseña: " -#: command.c:957 +#: command.c:954 msgid "Enter it again: " msgstr "Ingrésela nuevamente: " -#: command.c:961 +#: command.c:958 #, c-format msgid "Passwords didn't match.\n" msgstr "Las constraseñas no coinciden.\n" -#: command.c:979 +#: command.c:976 #, c-format msgid "Password encryption failed.\n" msgstr "El cifrado de la contraseña falló.\n" -#: command.c:1050 command.c:1161 command.c:1388 +#: command.c:1047 command.c:1163 command.c:1390 #, c-format msgid "\\%s: error while setting variable\n" msgstr "\\%s: error mientras se definía la variable\n" -#: command.c:1108 +#: command.c:1110 msgid "Query buffer reset (cleared)." msgstr "El búfer de consulta ha sido reiniciado (limpiado)." -#: command.c:1120 +#: command.c:1122 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Se escribió la historia en el archivo «%s».\n" -#: command.c:1185 +#: command.c:1187 #, c-format msgid "\\%s: environment variable name must not contain \"=\"\n" msgstr "\\%s: el nombre de variable de ambiente no debe contener «=»\n" -#: command.c:1227 +#: command.c:1229 #, c-format msgid "The server (version %d.%d) does not support showing function source.\n" msgstr "El servidor (versión %d.%d) no soporta el despliegue del código fuente de funciones.\n" -#: command.c:1233 +#: command.c:1235 #, c-format msgid "function name is required\n" msgstr "el nombre de la función es requerido\n" -#: command.c:1368 +#: command.c:1370 msgid "Timing is on." msgstr "El despliegue de duración está activado." -#: command.c:1370 +#: command.c:1372 msgid "Timing is off." msgstr "El despliegue de duración está desactivado." -#: command.c:1431 command.c:1451 command.c:2039 command.c:2042 command.c:2045 -#: command.c:2051 command.c:2053 command.c:2061 command.c:2071 command.c:2080 -#: command.c:2094 command.c:2111 command.c:2170 common.c:74 copy.c:333 -#: copy.c:393 copy.c:408 psqlscan.l:1677 psqlscan.l:1688 psqlscan.l:1698 +#: command.c:1433 command.c:1453 command.c:2084 command.c:2087 command.c:2090 +#: command.c:2096 command.c:2098 command.c:2106 command.c:2116 command.c:2125 +#: command.c:2139 command.c:2156 command.c:2215 common.c:74 copy.c:333 +#: copy.c:393 copy.c:408 psqlscan.l:1700 psqlscan.l:1711 psqlscan.l:1721 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" -#: command.c:1530 +#: command.c:1544 #, c-format msgid "+ opt(%d) = |%s|\n" msgstr "+ opt(%d) = |%s|\n" -#: command.c:1556 startup.c:184 +#: command.c:1570 startup.c:195 msgid "Password: " msgstr "Contraseña: " -#: command.c:1561 startup.c:186 +#: command.c:1575 startup.c:197 #, c-format msgid "Password for user %s: " msgstr "Contraseña para usuario %s: " -#: command.c:1606 +#: command.c:1622 #, c-format msgid "All connection parameters must be supplied because no database connection exists\n" msgstr "Debe proveer todos los parámetros de conexión porque no existe conexión a una base de datos\n" -#: command.c:1692 command.c:3032 common.c:120 common.c:413 common.c:478 -#: common.c:929 common.c:954 common.c:1051 copy.c:492 copy.c:695 -#: large_obj.c:158 large_obj.c:193 large_obj.c:255 psqlscan.l:1949 +#: command.c:1740 command.c:3195 common.c:120 common.c:413 common.c:1005 +#: common.c:1030 common.c:1130 copy.c:492 copy.c:702 large_obj.c:156 +#: large_obj.c:191 large_obj.c:253 psqlscan.l:1972 #, c-format msgid "%s" msgstr "%s" -#: command.c:1696 +#: command.c:1744 #, c-format msgid "Previous connection kept\n" msgstr "Se ha mantenido la conexión anterior\n" -#: command.c:1700 +#: command.c:1748 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:1733 +#: command.c:1782 #, 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:1736 +#: command.c:1785 #, 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:1740 +#: command.c:1789 #, 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:1774 +#: command.c:1823 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, servidor %s)\n" -#: command.c:1782 +#: command.c:1831 #, c-format msgid "" "WARNING: %s major version %d.%d, server major version %d.%d.\n" @@ -321,25 +321,24 @@ msgstr "" "ADVERTENCIA: %s versión %d.%d, servidor versión %d.%d.\n" " Algunas características de psql podrían no funcionar.\n" -#: command.c:1812 +#: command.c:1865 #, c-format -msgid "SSL connection (protocol: %s, cipher: %s, bits: %d, compression: %s)\n" -msgstr "conexión SSL (protocolo: %s, cifrado: %s, bits: %d, compresión: %s)\n" +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:1866 command.c:1867 command.c:1868 +msgid "unknown" +msgstr "desconocido" -#: command.c:1814 help.c:46 +#: command.c:1869 help.c:46 msgid "off" msgstr "desactivado" -#: command.c:1814 help.c:46 +#: command.c:1869 help.c:46 msgid "on" msgstr "activado" -#: command.c:1823 -#, c-format -msgid "SSL connection (unknown cipher)\n" -msgstr "conexión SSL (cifrado desconocido)\n" - -#: command.c:1844 +#: command.c:1889 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -352,205 +351,238 @@ msgstr "" " Vea la página de referencia de psql «Notes for Windows users»\n" " para obtener más detalles.\n" -#: command.c:1928 +#: command.c:1973 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number\n" msgstr "la variable de ambiente PSQL_EDITOR_LINENUMBER_SWITCH debe estar definida para poder especificar un número de línea\n" -#: command.c:1957 +#: command.c:2002 #, c-format msgid "could not start editor \"%s\"\n" msgstr "no se pudo iniciar el editor «%s»\n" -#: command.c:1959 +#: command.c:2004 #, c-format msgid "could not start /bin/sh\n" msgstr "no se pudo iniciar /bin/sh\n" -#: command.c:1997 +#: command.c:2042 #, c-format msgid "could not locate temporary directory: %s\n" msgstr "no se pudo ubicar el directorio temporal: %s\n" -#: command.c:2024 +#: command.c:2069 #, c-format msgid "could not open temporary file \"%s\": %s\n" msgstr "no se pudo abrir archivo temporal «%s»: %s\n" -#: command.c:2292 +#: command.c:2377 #, c-format -msgid "\\pset: allowed formats are unaligned, aligned, wrapped, html, latex, troff-ms\n" -msgstr "\\pset: formatos permitidos son unaligned, aligned, wrapped, html, latex, troff-ms\n" +msgid "\\pset: allowed formats are unaligned, aligned, wrapped, html, asciidoc, latex, latex-longtable, troff-ms\n" +msgstr "\\pset: formatos permitidos son unaligned, aligned, wrapped, html, asciidoc, latex, latex-longtable, troff-ms\n" -#: command.c:2311 +#: command.c:2396 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" msgstr "\\pset: estilos de línea permitidos son ascii, old-ascii, unicode\n" -#: command.c:2453 command.c:2604 +#: command.c:2410 +#, c-format +msgid "\\pset: allowed unicode border linestyle are single, double\n" +msgstr "\\pset: estilos de línea unicode de borde permitidos son single, double\n" + +#: command.c:2423 +#, c-format +msgid "\\pset: allowed unicode column linestyle are single, double\n" +msgstr "\\pset: estilos de línea unicode de columna permitidos son single, double\n" + +#: command.c:2436 +#, c-format +msgid "\\pset: allowed unicode header linestyle are single, double\n" +msgstr "\\pset: estilos de línea unicode de encabezado permitidos son single, double\n" + +#: command.c:2588 command.c:2765 #, c-format msgid "\\pset: unknown option: %s\n" msgstr "\\pset: opción desconocida: %s\n" -#: command.c:2471 +#: command.c:2606 #, c-format msgid "Border style is %d.\n" msgstr "El estilo de borde es %d.\n" -#: command.c:2477 +#: command.c:2612 #, c-format msgid "Target width is unset.\n" msgstr "El ancho no está definido.\n" -#: command.c:2479 +#: command.c:2614 #, c-format msgid "Target width is %d.\n" msgstr "El ancho es %d.\n" -#: command.c:2486 +#: command.c:2621 #, c-format msgid "Expanded display is on.\n" msgstr "Se ha activado el despliegue expandido.\n" -#: command.c:2488 +#: command.c:2623 #, c-format msgid "Expanded display is used automatically.\n" msgstr "El despliegue expandido se usa automáticamente.\n" -#: command.c:2490 +#: command.c:2625 #, c-format msgid "Expanded display is off.\n" msgstr "Se ha desactivado el despliegue expandido.\n" -#: command.c:2497 command.c:2505 +#: command.c:2632 command.c:2640 #, c-format msgid "Field separator is zero byte.\n" msgstr "El separador de campos es el byte cero.\n" -#: command.c:2499 +#: command.c:2634 #, c-format msgid "Field separator is \"%s\".\n" msgstr "El separador de campos es «%s».\n" -#: command.c:2512 +#: command.c:2647 #, c-format msgid "Default footer is on.\n" msgstr "El pie por omisión está activo.\n" -#: command.c:2514 +#: command.c:2649 #, c-format msgid "Default footer is off.\n" msgstr "El pie de página por omisión está desactivado.\n" -#: command.c:2520 +#: command.c:2655 #, c-format msgid "Output format is %s.\n" msgstr "El formato de salida es %s.\n" -#: command.c:2526 +#: command.c:2661 #, c-format msgid "Line style is %s.\n" msgstr "El estilo de línea es %s.\n" -#: command.c:2533 +#: command.c:2668 #, c-format msgid "Null display is \"%s\".\n" msgstr "Despliegue de nulos es «%s».\n" -#: command.c:2541 +#: command.c:2676 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "La salida numérica ajustada localmente está habilitada.\n" -#: command.c:2543 +#: command.c:2678 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "La salida numérica ajustada localmente está deshabilitada.\n" -#: command.c:2550 +#: command.c:2685 #, c-format msgid "Pager is used for long output.\n" msgstr "El paginador se usará para salida larga.\n" -#: command.c:2552 +#: command.c:2687 #, c-format msgid "Pager is always used.\n" msgstr "El paginador se usará siempre.\n" -#: command.c:2554 +#: command.c:2689 #, c-format msgid "Pager usage is off.\n" msgstr "El paginador no se usará.\n" -#: command.c:2561 command.c:2571 +#: command.c:2695 +#, c-format +msgid "Pager won't be used for less than %d lines\n" +msgstr "El paginador no se usará para menos de %d líneas\n" + +#: command.c:2703 command.c:2713 #, c-format msgid "Record separator is zero byte.\n" msgstr "El separador de filas es el byte cero.\n" -#: command.c:2563 +#: command.c:2705 #, c-format msgid "Record separator is .\n" msgstr "El separador de filas es .\n" -#: command.c:2565 +#: command.c:2707 #, c-format msgid "Record separator is \"%s\".\n" msgstr "El separador de filas es «%s».\n" -#: command.c:2578 +#: command.c:2720 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Los atributos de tabla son «%s».\n" -#: command.c:2581 +#: command.c:2723 #, c-format msgid "Table attributes unset.\n" msgstr "Los atributos de tabla han sido indefinidos.\n" -#: command.c:2588 +#: command.c:2730 #, c-format msgid "Title is \"%s\".\n" msgstr "El título es «%s».\n" -#: command.c:2590 +#: command.c:2732 #, c-format msgid "Title is unset.\n" msgstr "El título ha sido indefinido.\n" -#: command.c:2597 +#: command.c:2739 #, c-format msgid "Tuples only is on.\n" msgstr "Mostrar sólo filas está desactivado.\n" -#: command.c:2599 +#: command.c:2741 #, c-format msgid "Tuples only is off.\n" msgstr "Mostrar sólo filas está desactivado.\n" -#: command.c:2750 +#: command.c:2747 command.c:2759 +#, c-format +msgid "Unicode border linestyle is \"%s\".\n" +msgstr "El estilo unicode de borde es «%s».\n" + +#: command.c:2753 +#, c-format +msgid "Unicode column linestyle is \"%s\".\n" +msgstr "El estilo de línea unicode de columna es «%s».\n" + +#: command.c:2919 #, c-format msgid "\\!: failed\n" msgstr "\\!: falló\n" -#: command.c:2770 command.c:2828 +#: command.c:2939 common.c:548 #, c-format msgid "\\watch cannot be used with an empty query\n" msgstr "\\watch no puede ser usado con una consulta vacía\n" -#: command.c:2791 +#: command.c:2960 #, c-format msgid "Watch every %lds\t%s" msgstr "Ejecución cada %lds\t%s" -#: command.c:2835 -#, c-format -msgid "\\watch cannot be used with COPY\n" -msgstr "no se puede usar \\watch con COPY\n" - -#: command.c:2841 +#: command.c:3011 command.c:3018 common.c:448 common.c:455 common.c:988 #, c-format -msgid "unexpected result status for \\watch\n" -msgstr "Estado de resultado inesperado de \\watch\n" +msgid "" +"********* QUERY **********\n" +"%s\n" +"**************************\n" +"\n" +msgstr "" +"********* QUERY **********\n" +"%s\n" +"**************************\n" +"\n" #: common.c:287 #, c-format @@ -572,50 +604,52 @@ msgstr "falló.\n" msgid "Succeeded.\n" msgstr "con éxito.\n" -#: common.c:403 common.c:683 common.c:851 +#: common.c:403 common.c:759 common.c:927 #, c-format msgid "unexpected PQresultStatus: %d\n" msgstr "PQresultStatus no esperado: %d\n" -#: common.c:452 common.c:459 common.c:912 +#: common.c:555 #, c-format -msgid "" -"********* QUERY **********\n" -"%s\n" -"**************************\n" -"\n" -msgstr "" -"********* QUERY **********\n" -"%s\n" -"**************************\n" -"\n" +msgid "\\watch cannot be used with COPY\n" +msgstr "no se puede usar \\watch con COPY\n" + +#: common.c:560 +#, c-format +msgid "unexpected result status for \\watch\n" +msgstr "Estado de resultado inesperado de \\watch\n" + +#: common.c:571 common.c:1146 +#, c-format +msgid "Time: %.3f ms\n" +msgstr "Duración: %.3f ms\n" -#: common.c:513 +#: common.c:589 #, c-format msgid "Asynchronous notification \"%s\" with payload \"%s\" received from server process with PID %d.\n" msgstr "Notificación asíncrona «%s» con carga «%s» recibida del proceso de servidor con PID %d.\n" -#: common.c:516 +#: common.c:592 #, c-format msgid "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "Notificación asíncrona «%s» recibida del proceso de servidor con PID %d.\n" -#: common.c:578 +#: common.c:654 #, c-format msgid "no rows returned for \\gset\n" msgstr "\\gset no retornó renglón alguno\n" -#: common.c:583 +#: common.c:659 #, c-format msgid "more than one row returned for \\gset\n" msgstr "\\gset retornó más de un renglón\n" -#: common.c:609 +#: common.c:685 #, c-format msgid "could not set variable \"%s\"\n" msgstr "no se pudo definir la variable «%s»\n" -#: common.c:894 +#: common.c:970 #, c-format msgid "" "***(Single step mode: verify command)*******************************************\n" @@ -626,20 +660,20 @@ msgstr "" "%s\n" "***(presione enter para continuar, o x y enter para cancelar)*******************\n" -#: common.c:945 +#: common.c:1021 #, c-format msgid "The server (version %d.%d) does not support savepoints for ON_ERROR_ROLLBACK.\n" msgstr "El servidor (versión %d.%d) no soporta savepoints para ON_ERROR_ROLLBACK.\n" -#: common.c:1039 +#: common.c:1075 #, c-format -msgid "unexpected transaction status (%d)\n" -msgstr "estado de transacción inesperado (%d)\n" +msgid "STATEMENT: %s\n" +msgstr "SENTENCIA: %s\n" -#: common.c:1067 +#: common.c:1118 #, c-format -msgid "Time: %.3f ms\n" -msgstr "Duración: %.3f ms\n" +msgid "unexpected transaction status (%d)\n" +msgstr "estado de transacción inesperado (%d)\n" #: copy.c:98 #, c-format @@ -690,7 +724,7 @@ msgstr "falló la transferencia de datos COPY: %s" msgid "canceled by user" msgstr "cancelada por el usuario" -#: copy.c:544 +#: copy.c:545 msgid "" "Enter data to be copied followed by a newline.\n" "End with a backslash and a period on a line by itself." @@ -698,48 +732,48 @@ msgstr "" "Ingrese los datos a ser copiados seguidos de un fin de línea.\n" "Termine con un backslash y un punto." -#: copy.c:667 +#: copy.c:674 msgid "aborted because of read failure" msgstr "se abortó por un error de lectura" -#: copy.c:691 +#: copy.c:698 msgid "trying to exit copy mode" msgstr "tratando de salir del modo copy" -#: describe.c:71 describe.c:259 describe.c:491 describe.c:615 describe.c:758 -#: describe.c:844 describe.c:914 describe.c:2759 describe.c:2964 -#: describe.c:3054 describe.c:3299 describe.c:3436 describe.c:3665 -#: describe.c:3737 describe.c:3748 describe.c:3807 describe.c:4215 -#: describe.c:4294 +#: describe.c:71 describe.c:264 describe.c:496 describe.c:626 describe.c:769 +#: describe.c:886 describe.c:956 describe.c:2921 describe.c:3126 +#: describe.c:3216 describe.c:3461 describe.c:3598 describe.c:3827 +#: describe.c:3899 describe.c:3910 describe.c:3969 describe.c:4377 +#: describe.c:4456 msgid "Schema" msgstr "Esquema" -#: describe.c:72 describe.c:156 describe.c:164 describe.c:260 describe.c:492 -#: describe.c:616 describe.c:677 describe.c:759 describe.c:915 describe.c:2760 -#: describe.c:2886 describe.c:2965 describe.c:3055 describe.c:3134 -#: describe.c:3300 describe.c:3364 describe.c:3437 describe.c:3666 -#: describe.c:3738 describe.c:3749 describe.c:3808 describe.c:3997 -#: describe.c:4078 describe.c:4292 +#: describe.c:72 describe.c:156 describe.c:164 describe.c:265 describe.c:497 +#: describe.c:627 describe.c:688 describe.c:770 describe.c:957 describe.c:2922 +#: describe.c:3048 describe.c:3127 describe.c:3217 describe.c:3296 +#: describe.c:3462 describe.c:3526 describe.c:3599 describe.c:3828 +#: describe.c:3900 describe.c:3911 describe.c:3970 describe.c:4159 +#: describe.c:4240 describe.c:4454 msgid "Name" msgstr "Nombre" -#: describe.c:73 describe.c:272 describe.c:318 describe.c:335 +#: describe.c:73 describe.c:277 describe.c:323 describe.c:340 msgid "Result data type" msgstr "Tipo de dato de salida" -#: describe.c:81 describe.c:94 describe.c:98 describe.c:273 describe.c:319 -#: describe.c:336 +#: describe.c:81 describe.c:94 describe.c:98 describe.c:278 describe.c:324 +#: describe.c:341 msgid "Argument data types" msgstr "Tipos de datos de argumentos" -#: describe.c:105 describe.c:182 describe.c:365 describe.c:534 describe.c:631 -#: describe.c:702 describe.c:917 describe.c:1486 describe.c:2564 -#: describe.c:2793 describe.c:2917 describe.c:2991 describe.c:3064 -#: describe.c:3147 describe.c:3215 describe.c:3307 describe.c:3373 -#: describe.c:3438 describe.c:3574 describe.c:3614 describe.c:3682 -#: describe.c:3741 describe.c:3750 describe.c:3809 describe.c:4023 -#: describe.c:4100 describe.c:4229 describe.c:4295 large_obj.c:291 -#: large_obj.c:301 +#: describe.c:105 describe.c:187 describe.c:370 describe.c:545 describe.c:642 +#: describe.c:713 describe.c:959 describe.c:1570 describe.c:2722 +#: describe.c:2955 describe.c:3079 describe.c:3153 describe.c:3226 +#: describe.c:3309 describe.c:3377 describe.c:3469 describe.c:3535 +#: describe.c:3600 describe.c:3736 describe.c:3776 describe.c:3844 +#: describe.c:3903 describe.c:3912 describe.c:3971 describe.c:4185 +#: describe.c:4262 describe.c:4391 describe.c:4457 large_obj.c:289 +#: large_obj.c:299 msgid "Description" msgstr "Descripción" @@ -752,9 +786,9 @@ msgstr "Listado de funciones de agregación" msgid "The server (version %d.%d) does not support tablespaces.\n" msgstr "El servidor (versión %d.%d) no soporta tablespaces.\n" -#: describe.c:157 describe.c:165 describe.c:362 describe.c:678 describe.c:843 -#: describe.c:2769 describe.c:2890 describe.c:3136 describe.c:3365 -#: describe.c:3998 describe.c:4079 large_obj.c:290 +#: describe.c:157 describe.c:165 describe.c:367 describe.c:535 describe.c:689 +#: describe.c:885 describe.c:2931 describe.c:3052 describe.c:3298 +#: describe.c:3527 describe.c:4160 describe.c:4241 large_obj.c:288 msgid "Owner" msgstr "Dueño" @@ -762,821 +796,846 @@ msgstr "Dueño" msgid "Location" msgstr "Ubicación" -#: describe.c:177 describe.c:2382 +#: describe.c:177 describe.c:2535 msgid "Options" msgstr "Opciones" -#: describe.c:199 +#: describe.c:182 describe.c:508 describe.c:705 describe.c:2947 +#: describe.c:2951 +msgid "Size" +msgstr "Tamaño" + +#: describe.c:204 msgid "List of tablespaces" msgstr "Listado de tablespaces" -#: describe.c:236 +#: describe.c:241 #, c-format msgid "\\df only takes [antwS+] as options\n" msgstr "\\df sólo acepta las opciones [antwS+]\n" -#: describe.c:242 +#: describe.c:247 #, c-format msgid "\\df does not take a \"w\" option with server version %d.%d\n" msgstr "\\df no acepta la opción «w» en un servidor versión %d.%d\n" #. translator: "agg" is short for "aggregate" -#: describe.c:275 describe.c:321 describe.c:338 +#: describe.c:280 describe.c:326 describe.c:343 msgid "agg" msgstr "agg" -#: describe.c:276 +#: describe.c:281 msgid "window" msgstr "ventana" -#: describe.c:277 describe.c:322 describe.c:339 describe.c:1028 +#: describe.c:282 describe.c:327 describe.c:344 describe.c:1093 msgid "trigger" msgstr "disparador" -#: describe.c:278 describe.c:323 describe.c:340 +#: describe.c:283 describe.c:328 describe.c:345 msgid "normal" msgstr "normal" -#: describe.c:279 describe.c:324 describe.c:341 describe.c:765 describe.c:853 -#: describe.c:1455 describe.c:2768 describe.c:2966 describe.c:4097 +#: describe.c:284 describe.c:329 describe.c:346 describe.c:776 describe.c:895 +#: describe.c:1539 describe.c:2930 describe.c:3128 describe.c:4259 msgid "Type" msgstr "Tipo" -#: describe.c:355 +#: describe.c:360 msgid "definer" msgstr "definidor" -#: describe.c:356 +#: describe.c:361 msgid "invoker" msgstr "invocador" -#: describe.c:357 +#: describe.c:362 msgid "Security" msgstr "Seguridad" -#: describe.c:358 +#: describe.c:363 msgid "immutable" msgstr "inmutable" -#: describe.c:359 +#: describe.c:364 msgid "stable" msgstr "estable" -#: describe.c:360 +#: describe.c:365 msgid "volatile" msgstr "volátil" -#: describe.c:361 +#: describe.c:366 msgid "Volatility" msgstr "Volatilidad" -#: describe.c:363 +#: describe.c:368 msgid "Language" msgstr "Lenguaje" -#: describe.c:364 +#: describe.c:369 msgid "Source code" msgstr "Código fuente" -#: describe.c:462 +#: describe.c:467 msgid "List of functions" msgstr "Listado de funciones" -#: describe.c:502 +#: describe.c:507 msgid "Internal name" msgstr "Nombre interno" -#: describe.c:503 describe.c:694 describe.c:2785 describe.c:2789 -msgid "Size" -msgstr "Tamaño" - -#: describe.c:524 +#: describe.c:529 msgid "Elements" msgstr "Elementos" -#: describe.c:574 +#: describe.c:585 msgid "List of data types" msgstr "Listado de tipos de dato" -#: describe.c:617 +#: describe.c:628 msgid "Left arg type" msgstr "Tipo arg izq" -#: describe.c:618 +#: describe.c:629 msgid "Right arg type" msgstr "Tipo arg der" -#: describe.c:619 +#: describe.c:630 msgid "Result type" msgstr "Tipo resultado" -#: describe.c:624 describe.c:3206 describe.c:3573 +#: describe.c:635 describe.c:3368 describe.c:3735 msgid "Function" msgstr "Función" -#: describe.c:649 +#: describe.c:660 msgid "List of operators" msgstr "Listado de operadores" -#: describe.c:679 +#: describe.c:690 msgid "Encoding" msgstr "Codificación" -#: describe.c:684 describe.c:3301 +#: describe.c:695 describe.c:3463 msgid "Collate" msgstr "Collate" -#: describe.c:685 describe.c:3302 +#: describe.c:696 describe.c:3464 msgid "Ctype" msgstr "Ctype" -#: describe.c:698 +#: describe.c:709 msgid "Tablespace" msgstr "Tablespace" -#: describe.c:720 +#: describe.c:731 msgid "List of databases" msgstr "Listado de base de datos" -#: describe.c:760 describe.c:846 describe.c:2761 +#: describe.c:771 describe.c:888 describe.c:2923 msgid "table" msgstr "tabla" -#: describe.c:761 describe.c:2762 +#: describe.c:772 describe.c:2924 msgid "view" msgstr "vista" -#: describe.c:762 describe.c:2763 +#: describe.c:773 describe.c:2925 msgid "materialized view" msgstr "vistas materializadas" -#: describe.c:763 describe.c:848 describe.c:2765 +#: describe.c:774 describe.c:890 describe.c:2927 msgid "sequence" msgstr "secuencia" -#: describe.c:764 describe.c:2767 +#: describe.c:775 describe.c:2929 msgid "foreign table" msgstr "tabla foránea" -#: describe.c:776 -msgid "Column access privileges" +#: describe.c:787 +msgid "Column privileges" msgstr "Privilegios de acceso a columnas" -#: describe.c:802 describe.c:4439 describe.c:4443 +#: describe.c:818 +msgid "Policies" +msgstr "Políticas" + +#: describe.c:844 describe.c:4601 describe.c:4605 msgid "Access privileges" msgstr "Privilegios" -#: describe.c:831 +#: describe.c:873 #, c-format msgid "The server (version %d.%d) does not support altering default privileges.\n" msgstr "El servidor (versión %d.%d) no soporta la alteración de privilegios por omisión.\n" -#: describe.c:850 +#: describe.c:892 msgid "function" msgstr "función" -#: describe.c:852 +#: describe.c:894 msgid "type" msgstr "tipo" -#: describe.c:876 +#: describe.c:918 msgid "Default access privileges" msgstr "Privilegios de acceso por omisión" -#: describe.c:916 +#: describe.c:958 msgid "Object" msgstr "Objeto" -#: describe.c:930 sql_help.c:1595 -msgid "constraint" -msgstr "restricción" +#: describe.c:972 +msgid "table constraint" +msgstr "restricción de tabla" -#: describe.c:957 +#: describe.c:994 +msgid "domain constraint" +msgstr "restricción de dominio" + +#: describe.c:1022 msgid "operator class" msgstr "clase de operadores" -#: describe.c:986 +#: describe.c:1051 msgid "operator family" msgstr "familia de operadores" -#: describe.c:1008 +#: describe.c:1073 msgid "rule" msgstr "regla" -#: describe.c:1050 +#: describe.c:1115 msgid "Object descriptions" msgstr "Descripciones de objetos" -#: describe.c:1104 +#: describe.c:1169 #, c-format msgid "Did not find any relation named \"%s\".\n" msgstr "No se encontró relación llamada «%s».\n" -#: describe.c:1295 +#: describe.c:1378 #, c-format msgid "Did not find any relation with OID %s.\n" msgstr "No se encontró relación con OID %s.\n" -#: describe.c:1399 +#: describe.c:1483 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "Tabla unlogged «%s.%s»" -#: describe.c:1402 +#: describe.c:1486 #, c-format msgid "Table \"%s.%s\"" msgstr "Tabla «%s.%s»" -#: describe.c:1406 +#: describe.c:1490 #, c-format msgid "View \"%s.%s\"" msgstr "Vista «%s.%s»" -#: describe.c:1411 +#: describe.c:1495 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "Vista materializada unlogged «%s.%s»" -#: describe.c:1414 +#: describe.c:1498 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "Vista materializada \"%s.%s\"" -#: describe.c:1418 +#: describe.c:1502 #, c-format msgid "Sequence \"%s.%s\"" msgstr "Secuencia «%s.%s»" -#: describe.c:1423 +#: describe.c:1507 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "Índice unlogged «%s.%s»" -#: describe.c:1426 +#: describe.c:1510 #, c-format msgid "Index \"%s.%s\"" msgstr "Índice «%s.%s»" -#: describe.c:1431 +#: describe.c:1515 #, c-format msgid "Special relation \"%s.%s\"" msgstr "Relación especial «%s.%s»" -#: describe.c:1435 +#: describe.c:1519 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "Tabla TOAST «%s.%s»" -#: describe.c:1439 +#: describe.c:1523 #, c-format msgid "Composite type \"%s.%s\"" msgstr "Tipo compuesto «%s.%s»" -#: describe.c:1443 +#: describe.c:1527 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "Tabla foránea «%s.%s»" -#: describe.c:1454 +#: describe.c:1538 msgid "Column" msgstr "Columna" -#: describe.c:1463 +#: describe.c:1547 msgid "Modifiers" msgstr "Modificadores" -#: describe.c:1468 +#: describe.c:1552 msgid "Value" msgstr "Valor" -#: describe.c:1471 +#: describe.c:1555 msgid "Definition" msgstr "Definición" -#: describe.c:1474 describe.c:4018 describe.c:4099 describe.c:4167 -#: describe.c:4228 +#: describe.c:1558 describe.c:4180 describe.c:4261 describe.c:4329 +#: describe.c:4390 msgid "FDW Options" msgstr "Opciones de FDW" -#: describe.c:1478 +#: describe.c:1562 msgid "Storage" msgstr "Almacenamiento" -#: describe.c:1481 +#: describe.c:1565 msgid "Stats target" msgstr "Estadísticas" -#: describe.c:1531 +#: describe.c:1615 #, c-format msgid "collate %s" msgstr "collate %s" -#: describe.c:1539 +#: describe.c:1623 msgid "not null" msgstr "not null" #. translator: default values of column definitions -#: describe.c:1549 +#: describe.c:1633 #, c-format msgid "default %s" msgstr "valor por omisión %s" -#: describe.c:1664 +#: describe.c:1748 msgid "primary key, " msgstr "llave primaria, " -#: describe.c:1666 +#: describe.c:1750 msgid "unique, " msgstr "único, " -#: describe.c:1672 +#: describe.c:1756 #, c-format msgid "for table \"%s.%s\"" msgstr "de tabla «%s.%s»" -#: describe.c:1676 +#: describe.c:1760 #, c-format msgid ", predicate (%s)" msgstr ", predicado (%s)" -#: describe.c:1679 +#: describe.c:1763 msgid ", clustered" msgstr ", clustered" -#: describe.c:1682 +#: describe.c:1766 msgid ", invalid" msgstr ", no válido" -#: describe.c:1685 +#: describe.c:1769 msgid ", deferrable" msgstr ", postergable" -#: describe.c:1688 +#: describe.c:1772 msgid ", initially deferred" msgstr ", inicialmente postergada" -#: describe.c:1691 +#: describe.c:1775 msgid ", replica identity" msgstr ", identidad de replicación" -#: describe.c:1726 +#: describe.c:1810 #, c-format msgid "Owned by: %s" msgstr "Asociada a: %s" -#: describe.c:1786 +#: describe.c:1870 msgid "Indexes:" msgstr "Índices:" -#: describe.c:1870 +#: describe.c:1954 msgid "Check constraints:" msgstr "Restricciones CHECK:" -#: describe.c:1901 +#: describe.c:1985 msgid "Foreign-key constraints:" msgstr "Restricciones de llave foránea:" -#: describe.c:1932 +#: describe.c:2016 msgid "Referenced by:" msgstr "Referenciada por:" -#: describe.c:2014 describe.c:2064 +#: describe.c:2061 +msgid "Policies:" +msgstr "Políticas:" + +#: describe.c:2064 +msgid "Policies (Row Security Enabled): (None)" +msgstr "Políticas (Seguridad de filas activa): (Ninguna)" + +#: describe.c:2067 +msgid "Policies (Row Security Disabled):" +msgstr "Políticas (Seguridad de filas inactiva):" + +#: describe.c:2167 describe.c:2217 msgid "Rules:" msgstr "Reglas:" -#: describe.c:2017 +#: describe.c:2170 msgid "Disabled rules:" msgstr "Reglas deshabilitadas:" -#: describe.c:2020 +#: describe.c:2173 msgid "Rules firing always:" msgstr "Reglas que se activan siempre:" -#: describe.c:2023 +#: describe.c:2176 msgid "Rules firing on replica only:" msgstr "Reglas que se activan sólo en las réplicas:" -#: describe.c:2047 +#: describe.c:2200 msgid "View definition:" msgstr "Definición de vista:" -#: describe.c:2182 +#: describe.c:2335 msgid "Triggers:" msgstr "Triggers:" -#: describe.c:2186 +#: describe.c:2339 msgid "Disabled user triggers:" msgstr "Disparadores de usuario deshabilitados:" -#: describe.c:2188 +#: describe.c:2341 msgid "Disabled triggers:" msgstr "Disparadores deshabilitados:" -#: describe.c:2191 +#: describe.c:2344 msgid "Disabled internal triggers:" msgstr "Disparadores internos deshabilitados:" -#: describe.c:2194 +#: describe.c:2347 msgid "Triggers firing always:" msgstr "Disparadores que siempre se ejecutan:" -#: describe.c:2197 +#: describe.c:2350 msgid "Triggers firing on replica only:" msgstr "Disparadores que se ejecutan sólo en las réplicas:" -#: describe.c:2276 +#: describe.c:2429 msgid "Inherits" msgstr "Hereda" -#: describe.c:2315 +#: describe.c:2468 #, c-format msgid "Number of child tables: %d (Use \\d+ to list them.)" msgstr "Número de tablas hijas: %d (Use \\d+ para listarlas.)" -#: describe.c:2322 +#: describe.c:2475 msgid "Child tables" msgstr "Tablas hijas" -#: describe.c:2344 +#: describe.c:2497 #, c-format msgid "Typed table of type: %s" msgstr "Tabla tipada de tipo: %s" -#: describe.c:2358 +#: describe.c:2511 msgid "Replica Identity" msgstr "Identidad de replicación" -#: describe.c:2371 +#: describe.c:2524 msgid "Has OIDs: yes" msgstr "Tiene OIDs: sí" -#: describe.c:2460 +#: describe.c:2613 #, c-format msgid "Tablespace: \"%s\"" msgstr "Tablespace: «%s»" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:2472 +#: describe.c:2625 #, c-format msgid ", tablespace \"%s\"" msgstr ", tablespace «%s»" -#: describe.c:2557 +#: describe.c:2715 msgid "List of roles" msgstr "Lista de roles" -#: describe.c:2559 +#: describe.c:2717 msgid "Role name" msgstr "Nombre de rol" -#: describe.c:2560 +#: describe.c:2718 msgid "Attributes" msgstr "Atributos" -#: describe.c:2561 +#: describe.c:2719 msgid "Member of" msgstr "Miembro de" -#: describe.c:2572 +#: describe.c:2730 msgid "Superuser" msgstr "Superusuario" -#: describe.c:2575 +#: describe.c:2733 msgid "No inheritance" msgstr "Sin herencia" -#: describe.c:2578 +#: describe.c:2736 msgid "Create role" msgstr "Crear rol" -#: describe.c:2581 +#: describe.c:2739 msgid "Create DB" msgstr "Crear BD" -#: describe.c:2584 +#: describe.c:2742 msgid "Cannot login" msgstr "No puede conectarse" -#: describe.c:2588 +#: describe.c:2746 msgid "Replication" msgstr "Replicación" -#: describe.c:2597 +#: describe.c:2750 +msgid "Bypass RLS" +msgstr "Ignora RLS" + +#: describe.c:2759 msgid "No connections" msgstr "Ninguna conexión" -#: describe.c:2599 +#: describe.c:2761 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d conexión" msgstr[1] "%d conexiones" -#: describe.c:2609 +#: describe.c:2771 msgid "Password valid until " msgstr "Constraseña válida hasta " -#: describe.c:2665 +#: describe.c:2827 msgid "Role" msgstr "Nombre de rol" -#: describe.c:2666 +#: describe.c:2828 msgid "Database" msgstr "Base de Datos" -#: describe.c:2667 +#: describe.c:2829 msgid "Settings" msgstr "Seteos" -#: describe.c:2677 +#: describe.c:2839 #, c-format msgid "No per-database role settings support in this server version.\n" msgstr "Este servidor no permite parámetros por usuario por base de datos.\n" -#: describe.c:2688 +#: describe.c:2850 #, c-format msgid "No matching settings found.\n" msgstr "No se encontraron parámetros coincidentes.\n" -#: describe.c:2690 +#: describe.c:2852 #, c-format msgid "No settings found.\n" msgstr "No se encontraron parámetros.\n" -#: describe.c:2695 +#: describe.c:2857 msgid "List of settings" msgstr "Listado de parámetros" -#: describe.c:2764 +#: describe.c:2926 msgid "index" msgstr "índice" -#: describe.c:2766 +#: describe.c:2928 msgid "special" msgstr "especial" -#: describe.c:2774 describe.c:4216 +#: describe.c:2936 describe.c:4378 msgid "Table" msgstr "Tabla" -#: describe.c:2850 +#: describe.c:3012 #, c-format msgid "No matching relations found.\n" msgstr "No se encontraron relaciones coincidentes.\n" -#: describe.c:2852 +#: describe.c:3014 #, c-format msgid "No relations found.\n" msgstr "No se encontraron relaciones.\n" -#: describe.c:2857 +#: describe.c:3019 msgid "List of relations" msgstr "Listado de relaciones" -#: describe.c:2894 +#: describe.c:3056 msgid "Trusted" msgstr "Confiable" -#: describe.c:2902 +#: describe.c:3064 msgid "Internal Language" msgstr "Lenguaje interno" -#: describe.c:2903 +#: describe.c:3065 msgid "Call Handler" msgstr "Manejador de llamada" -#: describe.c:2904 describe.c:4005 +#: describe.c:3066 describe.c:4167 msgid "Validator" msgstr "Validador" -#: describe.c:2907 +#: describe.c:3069 msgid "Inline Handler" msgstr "Manejador en línea" -#: describe.c:2935 +#: describe.c:3097 msgid "List of languages" msgstr "Lista de lenguajes" -#: describe.c:2979 +#: describe.c:3141 msgid "Modifier" msgstr "Modificador" -#: describe.c:2980 +#: describe.c:3142 msgid "Check" msgstr "Check" -#: describe.c:3022 +#: describe.c:3184 msgid "List of domains" msgstr "Listado de dominios" -#: describe.c:3056 +#: describe.c:3218 msgid "Source" msgstr "Fuente" -#: describe.c:3057 +#: describe.c:3219 msgid "Destination" msgstr "Destino" -#: describe.c:3058 describe.c:3207 +#: describe.c:3220 describe.c:3369 msgid "no" msgstr "no" -#: describe.c:3058 describe.c:3209 +#: describe.c:3220 describe.c:3371 msgid "yes" msgstr "sí" -#: describe.c:3059 +#: describe.c:3221 msgid "Default?" msgstr "Por omisión?" -#: describe.c:3096 +#: describe.c:3258 msgid "List of conversions" msgstr "Listado de conversiones" -#: describe.c:3135 +#: describe.c:3297 msgid "Event" msgstr "Evento" -#: describe.c:3137 +#: describe.c:3299 msgid "enabled" msgstr "activo" -#: describe.c:3138 +#: describe.c:3300 msgid "replica" msgstr "réplica" -#: describe.c:3139 +#: describe.c:3301 msgid "always" msgstr "siempre" -#: describe.c:3140 +#: describe.c:3302 msgid "disabled" msgstr "inactivo" -#: describe.c:3141 +#: describe.c:3303 msgid "Enabled" msgstr "Activo" -#: describe.c:3142 +#: describe.c:3304 msgid "Procedure" msgstr "Procedimiento" -#: describe.c:3143 +#: describe.c:3305 msgid "Tags" msgstr "Etiquetas" -#: describe.c:3162 +#: describe.c:3324 msgid "List of event triggers" msgstr "Listado de disparadores por eventos" -#: describe.c:3204 +#: describe.c:3366 msgid "Source type" msgstr "Tipo fuente" -#: describe.c:3205 +#: describe.c:3367 msgid "Target type" msgstr "Tipo destino" -#: describe.c:3208 +#: describe.c:3370 msgid "in assignment" msgstr "en asignación" -#: describe.c:3210 +#: describe.c:3372 msgid "Implicit?" msgstr "Implícito?" -#: describe.c:3261 +#: describe.c:3423 msgid "List of casts" msgstr "Listado de conversiones de tipo (casts)" -#: describe.c:3287 +#: describe.c:3449 #, c-format msgid "The server (version %d.%d) does not support collations.\n" msgstr "El servidor (versión %d.%d) no soporta «collations».\n" -#: describe.c:3337 +#: describe.c:3499 msgid "List of collations" msgstr "Listado de ordenamientos" -#: describe.c:3396 +#: describe.c:3558 msgid "List of schemas" msgstr "Listado de esquemas" -#: describe.c:3419 describe.c:3654 describe.c:3722 describe.c:3790 +#: describe.c:3581 describe.c:3816 describe.c:3884 describe.c:3952 #, c-format msgid "The server (version %d.%d) does not support full text search.\n" msgstr "El servidor (versión %d.%d) no soporta búsqueda en texto.\n" -#: describe.c:3453 +#: describe.c:3615 msgid "List of text search parsers" msgstr "Listado de analizadores de búsqueda en texto" -#: describe.c:3496 +#: describe.c:3658 #, c-format msgid "Did not find any text search parser named \"%s\".\n" msgstr "No se encontró ningún analizador de búsqueda en texto llamado «%s».\n" -#: describe.c:3571 +#: describe.c:3733 msgid "Start parse" msgstr "Inicio de parse" -#: describe.c:3572 +#: describe.c:3734 msgid "Method" msgstr "Método" -#: describe.c:3576 +#: describe.c:3738 msgid "Get next token" msgstr "Obtener siguiente elemento" -#: describe.c:3578 +#: describe.c:3740 msgid "End parse" msgstr "Fin de parse" -#: describe.c:3580 +#: describe.c:3742 msgid "Get headline" msgstr "Obtener encabezado" -#: describe.c:3582 +#: describe.c:3744 msgid "Get token types" msgstr "Obtener tipos de elemento" -#: describe.c:3592 +#: describe.c:3754 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Analizador de búsqueda en texto «%s.%s»" -#: describe.c:3594 +#: describe.c:3756 #, c-format msgid "Text search parser \"%s\"" msgstr "Analizador de búsqueda en texto «%s»" -#: describe.c:3613 +#: describe.c:3775 msgid "Token name" msgstr "Nombre de elemento" -#: describe.c:3624 +#: describe.c:3786 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Tipos de elemento para el analizador «%s.%s»" -#: describe.c:3626 +#: describe.c:3788 #, c-format msgid "Token types for parser \"%s\"" msgstr "Tipos de elemento para el analizador «%s»" -#: describe.c:3676 +#: describe.c:3838 msgid "Template" msgstr "Plantilla" -#: describe.c:3677 +#: describe.c:3839 msgid "Init options" msgstr "Opciones de inicialización" -#: describe.c:3699 +#: describe.c:3861 msgid "List of text search dictionaries" msgstr "Listado de diccionarios de búsqueda en texto" -#: describe.c:3739 +#: describe.c:3901 msgid "Init" msgstr "Inicializador" -#: describe.c:3740 +#: describe.c:3902 msgid "Lexize" msgstr "Fn. análisis léx." -#: describe.c:3767 +#: describe.c:3929 msgid "List of text search templates" msgstr "Listado de plantillas de búsqueda en texto" -#: describe.c:3824 +#: describe.c:3986 msgid "List of text search configurations" msgstr "Listado de configuraciones de búsqueda en texto" -#: describe.c:3868 +#: describe.c:4030 #, c-format msgid "Did not find any text search configuration named \"%s\".\n" msgstr "No se encontró una configuración de búsqueda en texto llamada «%s».\n" -#: describe.c:3934 +#: describe.c:4096 msgid "Token" msgstr "Elemento" -#: describe.c:3935 +#: describe.c:4097 msgid "Dictionaries" msgstr "Diccionarios" -#: describe.c:3946 +#: describe.c:4108 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Configuración de búsqueda en texto «%s.%s»" -#: describe.c:3949 +#: describe.c:4111 #, c-format msgid "Text search configuration \"%s\"" msgstr "Configuración de búsqueda en texto «%s»" -#: describe.c:3953 +#: describe.c:4115 #, c-format msgid "" "\n" @@ -1585,7 +1644,7 @@ msgstr "" "\n" "Analizador: «%s.%s»" -#: describe.c:3956 +#: describe.c:4118 #, c-format msgid "" "\n" @@ -1594,96 +1653,96 @@ msgstr "" "\n" "Analizador: «%s»" -#: describe.c:3988 +#: describe.c:4150 #, c-format msgid "The server (version %d.%d) does not support foreign-data wrappers.\n" msgstr "El servidor (versión %d.%d) no soporta conectores de datos externos.\n" -#: describe.c:4002 +#: describe.c:4164 msgid "Handler" msgstr "Manejador" -#: describe.c:4045 +#: describe.c:4207 msgid "List of foreign-data wrappers" msgstr "Listado de conectores de datos externos" -#: describe.c:4068 +#: describe.c:4230 #, c-format msgid "The server (version %d.%d) does not support foreign servers.\n" msgstr "El servidor (versión %d.%d) no soporta servidores foráneos.\n" -#: describe.c:4080 +#: describe.c:4242 msgid "Foreign-data wrapper" msgstr "Conectores de datos externos" -#: describe.c:4098 describe.c:4293 +#: describe.c:4260 describe.c:4455 msgid "Version" msgstr "Versión" -#: describe.c:4124 +#: describe.c:4286 msgid "List of foreign servers" msgstr "Listado de servidores foráneos" -#: describe.c:4147 +#: describe.c:4309 #, c-format msgid "The server (version %d.%d) does not support user mappings.\n" msgstr "El servidor (versión %d.%d) no soporta mapeos de usuario.\n" -#: describe.c:4156 describe.c:4217 +#: describe.c:4318 describe.c:4379 msgid "Server" msgstr "Servidor" -#: describe.c:4157 +#: describe.c:4319 msgid "User name" msgstr "Nombre de usuario" -#: describe.c:4182 +#: describe.c:4344 msgid "List of user mappings" msgstr "Listado de mapeos de usuario" -#: describe.c:4205 +#: describe.c:4367 #, c-format msgid "The server (version %d.%d) does not support foreign tables.\n" msgstr "El servidor (versión %d.%d) no soporta tablas foráneas.\n" -#: describe.c:4256 +#: describe.c:4418 msgid "List of foreign tables" msgstr "Listado de tablas foráneas" -#: describe.c:4279 describe.c:4333 +#: describe.c:4441 describe.c:4495 #, c-format msgid "The server (version %d.%d) does not support extensions.\n" msgstr "El servidor (versión %d.%d) no soporta extensiones.\n" -#: describe.c:4310 +#: describe.c:4472 msgid "List of installed extensions" msgstr "Listado de extensiones instaladas" -#: describe.c:4360 +#: describe.c:4522 #, c-format msgid "Did not find any extension named \"%s\".\n" msgstr "No se encontró extensión llamada «%s».\n" -#: describe.c:4363 +#: describe.c:4525 #, c-format msgid "Did not find any extensions.\n" msgstr "No se encontró ninguna extensión.\n" -#: describe.c:4407 +#: describe.c:4569 msgid "Object Description" msgstr "Descripciones de objetos" -#: describe.c:4416 +#: describe.c:4578 #, c-format msgid "Objects in extension \"%s\"" msgstr "Objetos en extensión «%s»" -#: help.c:62 +#: help.c:63 #, c-format msgid "%s\n" msgstr "%s\n" -#: help.c:67 +#: help.c:70 #, c-format msgid "" "psql is the PostgreSQL interactive terminal.\n" @@ -1692,12 +1751,12 @@ msgstr "" "psql es el terminal interactivo de PostgreSQL.\n" "\n" -#: help.c:68 +#: help.c:71 help.c:314 help.c:347 help.c:374 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: help.c:69 +#: help.c:72 #, c-format msgid "" " psql [OPTION]... [DBNAME [USERNAME]]\n" @@ -1706,53 +1765,55 @@ msgstr "" " psql [OPCIONES]... [BASE-DE-DATOS [USUARIO]]\n" "\n" -#: help.c:71 +#: help.c:74 #, c-format msgid "General options:\n" msgstr "Opciones generales:\n" -#: help.c:76 +#: help.c:79 #, c-format msgid " -c, --command=COMMAND run only single command (SQL or internal) and exit\n" msgstr " -c, --command=ORDEN ejecutar sólo una orden (SQL o interna) y salir\n" -#: help.c:77 +#: help.c:80 #, c-format msgid " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" msgstr "" " -d, --dbname=NOMBRE nombre de base de datos a conectarse\n" " (por omisión: «%s»)\n" -#: help.c:78 +#: help.c:81 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" msgstr " -f, --file=ARCHIVO ejecutar órdenes desde archivo, luego salir\n" -#: help.c:79 +#: help.c:82 #, c-format msgid " -l, --list list available databases, then exit\n" msgstr " -l, --list listar bases de datos, luego salir\n" -#: help.c:80 +#: help.c:83 #, c-format msgid "" " -v, --set=, --variable=NAME=VALUE\n" " set psql variable NAME to VALUE\n" +" (e.g., -v ON_ERROR_STOP=1)\n" msgstr "" " -v, --set=, --variable=NOMBRE=VALOR\n" " definir variable de psql NOMBRE a VALOR\n" +" (p.ej. -v ON_ERROR_STOP=1)\n" -#: help.c:82 +#: help.c:86 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión, luego salir\n" -#: help.c:83 +#: help.c:87 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr " -X, --no-psqlrc no leer archivo de configuración (~/.psqlrc)\n" -#: help.c:84 +#: help.c:88 #, c-format msgid "" " -1 (\"one\"), --single-transaction\n" @@ -1761,12 +1822,22 @@ msgstr "" " -1 («uno»), --single-transaction\n" " ejecuta órdenes en una única transacción\n" -#: help.c:86 +#: help.c:90 #, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help mostrar esta ayuda, luego salir\n" +msgid " -?, --help[=options] show this help, then exit\n" +msgstr " -?, --help[=opcs] mostrar esta ayuda, luego salir\n" -#: help.c:88 +#: help.c:91 +#, c-format +msgid " --help=commands list backslash commands, then exit\n" +msgstr " --help=commands listar órdenes backslash, luego salir\n" + +#: help.c:92 +#, c-format +msgid " --help=variables list special variables, then exit\n" +msgstr " --help=variables listar variables especiales, luego salir\n" + +#: help.c:94 #, c-format msgid "" "\n" @@ -1775,52 +1846,57 @@ msgstr "" "\n" "Opciones de entrada y salida:\n" -#: help.c:89 +#: help.c:95 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all mostrar las órdenes del script\n" -#: help.c:90 +#: help.c:96 +#, c-format +msgid " -b, --echo-errors echo failed commands\n" +msgstr " -b, --echo-errors mostrar órdenes fallidas\n" + +#: help.c:97 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr " -e, --echo-queries mostrar órdenes enviadas al servidor\n" -#: help.c:91 +#: help.c:98 #, c-format msgid " -E, --echo-hidden display queries that internal commands generate\n" msgstr " -E, --echo-hidden mostrar consultas generadas por órdenes internas\n" -#: help.c:92 +#: help.c:99 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" msgstr " -L, --log-file=ARCH envía el registro de la sesión a un archivo\n" -#: help.c:93 +#: help.c:100 #, c-format msgid " -n, --no-readline disable enhanced command line editing (readline)\n" msgstr " -n, --no-readline deshabilitar edición de línea de órdenes (readline)\n" -#: help.c:94 +#: help.c:101 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" msgstr " -o, --output=ARCHIVO enviar resultados de consultas a archivo (u |orden)\n" -#: help.c:95 +#: help.c:102 #, c-format msgid " -q, --quiet run quietly (no messages, only query output)\n" msgstr " -q, --quiet modo silencioso (sin mensajes, sólo resultados)\n" -#: help.c:96 +#: help.c:103 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" msgstr " -s, --single-step modo paso a paso (confirmar cada consulta)\n" -#: help.c:97 +#: help.c:104 #, c-format msgid " -S, --single-line single-line mode (end of line terminates SQL command)\n" msgstr " -S, --single-line modo de líneas (fin de línea termina la orden SQL)\n" -#: help.c:99 +#: help.c:106 #, c-format msgid "" "\n" @@ -1829,12 +1905,12 @@ msgstr "" "\n" "Opciones de formato de salida:\n" -#: help.c:100 +#: help.c:107 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr " -A, --no-align modo de salida desalineado\n" -#: help.c:101 +#: help.c:108 #, c-format msgid "" " -F, --field-separator=STRING\n" @@ -1843,17 +1919,17 @@ msgstr "" " -F, --field-separator=CADENA separador de campos para salida desalineada\n" " (por omisión: «%s»)\n" -#: help.c:104 +#: help.c:111 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html modo de salida en tablas HTML\n" -#: help.c:105 +#: help.c:112 #, c-format msgid " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset command)\n" msgstr " -P, --pset=VAR[=ARG] definir opción de impresión VAR en ARG (ver orden \\pset)\n" -#: help.c:106 +#: help.c:113 #, c-format msgid "" " -R, --record-separator=STRING\n" @@ -1862,24 +1938,24 @@ msgstr "" " -R, --record-separator=CADENA separador de registros para salida desalineada\n" " (por omisión: salto de línea)\n" -#: help.c:108 +#: help.c:115 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr " -t, --tuples-only sólo muestra registros\n" -#: help.c:109 +#: help.c:116 #, c-format msgid " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)\n" msgstr "" " -T, --table-attr=TEXTO\n" " definir atributos de marcas de tabla HTML (ancho, borde)\n" -#: help.c:110 +#: help.c:117 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded activar modo expandido de salida de tablas\n" -#: help.c:111 +#: help.c:118 #, c-format msgid "" " -z, --field-separator-zero\n" @@ -1888,7 +1964,7 @@ msgstr "" " -z, --field-separator-zero\n" " definir separador de campos para salida desalineada al byte cero\n" -#: help.c:113 +#: help.c:120 #, c-format msgid "" " -0, --record-separator-zero\n" @@ -1897,7 +1973,7 @@ msgstr "" " -0, --record-separator-zero\n" " definir separador de filas para salida desalineada al byte cero\n" -#: help.c:116 +#: help.c:123 #, c-format msgid "" "\n" @@ -1906,42 +1982,42 @@ msgstr "" "\n" "Opciones de conexión:\n" -#: help.c:119 +#: help.c:126 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory (default: \"%s\")\n" msgstr "" " -h, --host=NOMBRE nombre del anfitrión o directorio de socket\n" " (por omisión: «%s»)\n" -#: help.c:120 +#: help.c:127 msgid "local socket" msgstr "socket local" -#: help.c:123 +#: help.c:130 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr " -p, --port=PUERTO puerto del servidor (por omisión: «%s»)\n" -#: help.c:129 +#: help.c:136 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr "" " -U, --username=NOMBRE\n" " nombre de usuario (por omisión: «%s»)\n" -#: help.c:130 +#: help.c:137 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir contraseña\n" -#: help.c:131 +#: help.c:138 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password forzar petición de contraseña\n" " (debería ser automático)\n" -#: help.c:133 +#: help.c:140 #, c-format msgid "" "\n" @@ -1956,485 +2032,507 @@ msgstr "" "en la documentación de PostgreSQL.\n" "\n" -#: help.c:136 +#: help.c:143 #, c-format msgid "Report bugs to .\n" msgstr "Reporte errores a .\n" -#: help.c:157 +#: help.c:166 #, c-format msgid "General\n" msgstr "General\n" -#: help.c:158 +#: help.c:167 #, c-format msgid " \\copyright show PostgreSQL usage and distribution terms\n" msgstr " \\copyright mostrar términos de uso y distribución de PostgreSQL\n" -#: help.c:159 +#: help.c:168 #, c-format msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" msgstr "" " \\g [ARCH] o ; enviar búfer de consulta al servidor\n" " (y resultados a archivo u |orden)\n" -#: help.c:160 +#: help.c:169 #, c-format msgid " \\gset [PREFIX] execute query and store results in psql variables\n" msgstr "" " \\gset [PREFIJO] ejecutar la consulta y almacenar los resultados en variables\n" " de psql\n" -#: help.c:161 -#, 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:162 +#: help.c:170 #, c-format msgid " \\q quit psql\n" msgstr " \\q salir de psql\n" -#: help.c:163 +#: help.c:171 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEGS] ejecutar consulta cada SEGS segundos\n" -#: help.c:166 +#: help.c:174 +#, c-format +msgid "Help\n" +msgstr "Ayuda\n" + +#: help.c:176 +#, c-format +msgid " \\? [commands] description of all psql backslash commands\n" +msgstr " \\? [commands] descripción de todas las órdenes backslash de psql\n" + +#: help.c:177 +#, c-format +msgid " \\? options description of all psql commandline options\n" +msgstr " \\? options descripción de las opciones de línea de órdenes de psql\n" + +#: help.c:178 +#, c-format +msgid " \\? variables description of all psql configuration variables\n" +msgstr " \\? variables descripción de las variables de configuración de psql\n" + +#: help.c:179 +#, 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:182 #, c-format msgid "Query Buffer\n" msgstr "Búfer de consulta\n" -#: help.c:167 +#: help.c:183 #, 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:168 +#: help.c:184 #, 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:169 +#: help.c:185 #, 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:170 +#: help.c:186 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r reiniciar (limpiar) el búfer de consulta\n" -#: help.c:172 +#: help.c:188 #, 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:174 +#: help.c:190 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w ARCHIVO escribir búfer de consulta a archivo\n" -#: help.c:177 +#: help.c:193 #, c-format msgid "Input/Output\n" msgstr "Entrada/Salida\n" -#: help.c:178 +#: help.c:194 #, 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:179 +#: help.c:195 #, c-format msgid " \\echo [STRING] write string to standard output\n" msgstr " \\echo [CADENA] escribir cadena a salida estándar\n" -#: help.c:180 +#: help.c:196 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i ARCHIVO ejecutar órdenes desde archivo\n" -#: help.c:181 +#: help.c:197 #, 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:182 +#: help.c:198 #, 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:183 +#: help.c:199 #, c-format msgid " \\qecho [STRING] write string to query output stream (see \\o)\n" msgstr " \\qecho [CADENA] escribir cadena a salida de consultas (ver \\o)\n" -#: help.c:186 +#: help.c:202 #, c-format msgid "Informational\n" msgstr "Informativo\n" -#: help.c:187 +#: help.c:203 #, 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:188 +#: help.c:204 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] listar tablas, vistas y secuencias\n" -#: help.c:189 +#: help.c:205 #, 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:190 +#: help.c:206 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [PATRÓN] listar funciones de agregación\n" -#: help.c:191 +#: help.c:207 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [PATRÓN] listar tablespaces\n" -#: help.c:192 +#: help.c:208 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [PATRÓN] listar conversiones\n" -#: help.c:193 +#: help.c:209 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [PATRÓN] listar conversiones de tipo (casts)\n" -#: help.c:194 +#: help.c:210 #, 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:195 +#: help.c:211 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [PATRÓN] listar privilegios por omisión\n" -#: help.c:196 +#: help.c:212 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [PATRÓN] listar dominios\n" -#: help.c:197 +#: help.c:213 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [PATRÓN] listar tablas foráneas\n" -#: help.c:198 +#: help.c:214 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [PATRÓN] listar servidores foráneos\n" -#: help.c:199 +#: help.c:215 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [PATRÓN] listar mapeos de usuario\n" -#: help.c:200 +#: help.c:216 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [PATRÓN] listar conectores de datos externos\n" -#: help.c:201 +#: help.c:217 #, c-format msgid " \\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions\n" msgstr " \\df[antw][S+] [PATRÓN] listar funciones [sólo ag./normal/trigger/ventana]\n" -#: help.c:202 +#: help.c:218 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [PATRÓN] listar configuraciones de búsqueda en texto\n" -#: help.c:203 +#: help.c:219 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [PATRÓN] listar diccionarios de búsqueda en texto\n" -#: help.c:204 +#: help.c:220 #, 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:205 +#: help.c:221 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [PATRÓN] listar plantillas de búsqueda en texto\n" -#: help.c:206 +#: help.c:222 #, c-format msgid " \\dg[+] [PATTERN] list roles\n" msgstr " \\dg[+] [PATRÓN] listar roles\n" -#: help.c:207 +#: help.c:223 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [PATRÓN] listar índices\n" -#: help.c:208 +#: help.c:224 #, 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:209 +#: help.c:225 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [PATRÓN] listar lenguajes procedurales\n" -#: help.c:210 +#: help.c:226 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [PATRÓN] listar vistas materializadas\n" -#: help.c:211 +#: help.c:227 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [PATRÓN] listar esquemas\n" -#: help.c:212 +#: help.c:228 #, c-format msgid " \\do[S] [PATTERN] list operators\n" msgstr " \\do[S] [PATRÓN] listar operadores\n" -#: help.c:213 +#: help.c:229 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S] [PATRÓN] listar ordenamientos (collations)\n" -#: help.c:214 +#: help.c:230 #, 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:215 +#: help.c:231 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [PAT1 [PAT2]] listar parámetros de rol por base de datos\n" -#: help.c:216 +#: help.c:232 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [PATRÓN] listar secuencias\n" -#: help.c:217 +#: help.c:233 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [PATRÓN] listar tablas\n" -#: help.c:218 +#: help.c:234 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [PATRÓN] listar tipos de dato\n" -#: help.c:219 +#: help.c:235 #, c-format msgid " \\du[+] [PATTERN] list roles\n" msgstr " \\du[+] [PATRÓN] listar roles\n" -#: help.c:220 +#: help.c:236 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [PATRÓN] listar vistas\n" -#: help.c:221 +#: help.c:237 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [PATRÓN] listar tablas foráneas\n" -#: help.c:222 +#: help.c:238 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [PATRÓN] listar extensiones\n" -#: help.c:223 +#: help.c:239 #, c-format msgid " \\dy [PATTERN] list event triggers\n" -msgstr " \\dy [PATRÓN] listar disparadores por eventos\n" +msgstr " \\dy [PATRÓN] listar disparadores por eventos\n" -#: help.c:224 +#: help.c:240 #, c-format msgid " \\l[+] [PATTERN] list databases\n" -msgstr " \\l[+] [PATRÓN] listar bases de datos\n" +msgstr " \\l[+] [PATRÓN] listar bases de datos\n" -#: help.c:225 +#: help.c:241 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" -msgstr " \\sf[+] FUNCIÓN mostrar la definición de una función\n" +msgstr " \\sf[+] FUNCIÓN mostrar la definición de una función\n" -#: help.c:226 +#: help.c:242 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [PATRÓN] lo mismo que \\dp\n" -#: help.c:229 +#: help.c:245 #, c-format msgid "Formatting\n" msgstr "Formato\n" -#: help.c:230 +#: help.c:246 #, 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:231 +#: help.c:247 #, 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:232 +#: help.c:248 #, 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:233 +#: help.c:249 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H cambiar modo de salida HTML (actualmente %s)\n" -#: help.c:235 +#: help.c:251 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" " (NAME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|\n" -" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})\n" +" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager|\n" +" unicode_border_linestyle|unicode_column_linestyle|unicode_header_linestyle})\n" msgstr "" -" \\pset NOMBRE [VALOR] define opción de salida de tabla\n" +" \\pset [NOMBRE [VALOR]] define opción de salida de tabla\n" " (NOMBRE := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|\n" -" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})\n" +" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager|\n" +" unicode_border_linestyle|unicode_column_linestyle|unicode_header_linestyle})\n" -#: help.c:238 +#: help.c:255 #, 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:240 +#: help.c:257 #, 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:241 +#: help.c:258 #, 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:245 +#: help.c:262 #, c-format msgid "Connection\n" msgstr "Conexiones\n" -#: help.c:247 +#: help.c:264 #, c-format msgid "" -" \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently \"%s\")\n" msgstr "" -" \\c[onnect] [BASE-DE-DATOS|- USUARIO|- ANFITRIÓN|- PUERTO|-]\n" +" \\c[onnect] [BASE-DE-DATOS|- USUARIO|- ANFITRIÓN|- PUERTO|- | conninfo]\n" " conectar a una nueva base de datos (actual: «%s»)\n" -#: help.c:251 +#: help.c:268 #, c-format msgid "" -" \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently no connection)\n" msgstr "" -" \\c[onnect] [BASE-DE-DATOS|- USUARIO|- ANFITRIÓN|- PUERTO|-]\n" +" \\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:253 +#: help.c:270 #, 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:254 +#: help.c:271 #, 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:255 +#: help.c:272 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo despliega la información sobre la conexión actual\n" -#: help.c:258 +#: help.c:275 #, c-format msgid "Operating System\n" msgstr "Sistema Operativo\n" -#: help.c:259 +#: help.c:276 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [DIR] cambiar el directorio de trabajo actual\n" -#: help.c:260 +#: help.c:277 #, 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:261 +#: help.c:278 #, 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:263 +#: help.c:280 #, 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:266 +#: help.c:283 #, c-format msgid "Variables\n" msgstr "Variables\n" -#: help.c:267 +#: help.c:284 #, 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:268 +#: help.c:285 #, 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:269 +#: help.c:286 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset NOMBRE indefinir (eliminar) variable interna\n" -#: help.c:272 +#: help.c:289 #, c-format msgid "Large Objects\n" msgstr "Objetos Grandes\n" -#: help.c:273 +#: help.c:290 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -2447,11 +2545,426 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID operaciones con objetos grandes\n" +#: help.c:311 +#, c-format +msgid "List of specially treated variables.\n" +msgstr "Lista de variables con tratamiento especial.\n" + +#: help.c:313 +#, c-format +msgid "psql variables:\n" +msgstr "Variables psql:\n" + +#: help.c:315 +#, c-format +msgid "" +" psql --set=NAME=VALUE\n" +" or \\set NAME VALUE in interactive mode\n" +"\n" +msgstr "" +" psql --set=NOMBRE=VALOR\n" +" o \\set NOMBRE VALOR en modo interactivo\n" + +#: help.c:317 +#, c-format +msgid " AUTOCOMMIT if set, successful SQL commands are automatically committed\n" +msgstr "" +" AUTOCOMMIT si está definida, órdenes SQL exitosas se comprometen\n" +" automáticamente\n" + +#: help.c:318 +#, c-format +msgid "" +" COMP_KEYWORD_CASE determine the case used to complete SQL keywords\n" +" [lower, upper, preserve-lower, preserve-upper]\n" +msgstr "" +" COMP_KEYWORD_CASE determina si usar mayúsculas al completar palabras SQL\n" +" [lower, upper, preserve-lower, preserve-upper]\n" + #: help.c:320 +#, c-format +msgid " DBNAME the currently connected database name\n" +msgstr " DBNAME la base de datos actualmente conectada\n" + +#: help.c:321 +#, c-format +msgid "" +" ECHO control what input is written to standard output\n" +" [all, errors, none, queries]\n" +msgstr "" +" ECHO controla qué entrada se escribe a la salida estándar\n" +" [all, errors, none, queries]\n" + +#: help.c:323 +#, c-format +msgid "" +" ECHO_HIDDEN display internal queries executed by backslash commands when it is set\n" +" or with [noexec] just show without execution\n" +msgstr "" +" ECHO_HIDDEN muestra consultas internas usadas por órdenes backslash\n" +" con [noexec] sólo las muestra sin ejecutarlas\n" + +#: help.c:325 +#, c-format +msgid " ENCODING current client character set encoding\n" +msgstr "" +" ENCODING codificación actual del cliente\n" + +#: help.c:326 +#, c-format +msgid "" +" FETCH_COUNT the number of result rows to fetch and display at a time\n" +" (default: 0=unlimited)\n" +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:328 +#, c-format +msgid " HISTCONTROL control history list [ignorespace, ignoredups, ignoreboth]\n" +msgstr "" +" HISTCONTROL controla la lista de historia\n" +" [ignorespace, ignoredups, ignoreboth]\n" + +#: help.c:329 +#, c-format +msgid " HISTFILE file name used to store the history list\n" +msgstr " HISTFILE nombre de archivo usado para almacenar la historia\n" + +#: help.c:330 +#, c-format +msgid " HISTSIZE the 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:331 +#, c-format +msgid " HOST the currently connected database server\n" +msgstr " HOST el servidor actualmente conectado\n" + +#: help.c:332 +#, c-format +msgid " IGNOREEOF if unset, sending an EOF to interactive session terminates application\n" +msgstr "" +" IGNOREEOF set no está definida, enviar un EOF a sesión interactiva\n" +" termina la aplicación\n" + +#: help.c:333 +#, c-format +msgid " LASTOID the value of last affected OID\n" +msgstr " LASTOID el valor del último OID afectado\n" + +#: help.c:334 +#, c-format +msgid " ON_ERROR_ROLLBACK if set, an error doesn't stop a transaction (uses implicit SAVEPOINTs)\n" +msgstr "" +" ON_ERROR_ROLLBACK si está definido, un error no aborta la transacción\n" +" (usa SAVEPOINTs implícitos)\n" + +#: help.c:335 +#, c-format +msgid " ON_ERROR_STOP stop batch execution after error\n" +msgstr " ON_ERROR_STOP detiene ejecución por lotes al ocurrir un error\n" + +#: help.c:336 +#, c-format +msgid " PORT server port of the current connection\n" +msgstr " PORT puerto del servidor de la conexión actual\n" + +#: help.c:337 +#, c-format +msgid " PROMPT1 specify the standard psql prompt\n" +msgstr " PROMPT1 especifica el prompt estándar de psql\n" + +#: help.c:338 +#, c-format +msgid " PROMPT2 specify the prompt used when a statement continues from a previous line\n" +msgstr "" +" PROMPT2 especifica el prompt usado cuando una sentencia continúa\n" +" de una línea anterior\n" + +#: help.c:339 +#, c-format +msgid " PROMPT3 specify the prompt used during COPY ... FROM STDIN\n" +msgstr " PROMPT3 especifica el prompt usado durante COPY ... FROM STDIN\n" + +#: help.c:340 +#, c-format +msgid " QUIET run quietly (same as -q option)\n" +msgstr " QUIET ejecuta silenciosamente (igual que -q)\n" + +#: help.c:341 +#, c-format +msgid " SINGLELINE end of line terminates SQL command mode (same as -S option)\n" +msgstr " SINGLELINE fin de línea termina modo de órdenes SQL (igual que -S)\n" + +#: help.c:342 +#, c-format +msgid " SINGLESTEP single-step mode (same as -s option)\n" +msgstr " SINGLESTEP modo paso a paso (igual que -s)\n" + +#: help.c:343 +#, c-format +msgid " USER the currently connected database user\n" +msgstr " USER el usuario actualmente conectado\n" + +#: help.c:344 +#, c-format +msgid " VERBOSITY control verbosity of error reports [default, verbose, terse]\n" +msgstr " VERBOSITY controla la verbosidad de errores [default, verbose, terse]\n" + +#: help.c:346 +#, c-format +msgid "" +"\n" +"Display influencing variables:\n" +msgstr "" +"\n" +"Variables que influencian el despliegue:\n" + + +#: help.c:348 +#, c-format +msgid "" +" psql --pset=NAME[=VALUE]\n" +" or \\pset NAME [VALUE] in interactive mode\n" +"\n" +msgstr "" +" psql --pset=NOMBRE[=VALOR]\n" +" o \\pset NOMBRE [VALOR] en modo interactivo\n" +"\n" + +#: help.c:350 +#, c-format +msgid " border border style (number)\n" +msgstr " border estilo de borde (número)\n" + +#: help.c:351 +#, c-format +msgid " columns set the target width for the wrapped format\n" +msgstr " columns define el ancho para formato «wrapped»\n" + +#: help.c:352 +#, c-format +msgid " expanded (or x) toggle expanded output\n" +msgstr " expanded (o x) cambia el modo expandido\n" + +#: help.c:353 +#, c-format +msgid " fieldsep field separator for unaligned output (default '|')\n" +msgstr "" +" fieldsep separador de campos para salida desalineada\n" +" (por omisión: «|»)\n" + +#: help.c:354 +#, c-format +msgid " fieldsep_zero set field separator in unaligned mode to zero\n" +msgstr "" +" fieldsep_zero define el separador de campos a cero\n" + +#: help.c:355 +#, c-format +msgid " format set output format [unaligned, aligned, wrapped, html, asciidoc, ...]\n" +msgstr " format define el formato de salida [unaligned, aligned, wrapped, html, asciidoc, ...]\n" + +#: help.c:356 +#, c-format +msgid " footer 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:357 +#, c-format +msgid " linestyle 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:358 +#, c-format +msgid " null 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:359 +#, c-format +msgid "" +" numericlocale enable or disable display of a locale-specific character to separate\n" +" groups of digits [on, off]\n" +msgstr "" +" numericlocale activa o desactiva despliegue de carácter específico del lenguaje para\n" +" separar grupos de dígitos [on, off]\n" + +#: help.c:361 +#, c-format +msgid " pager 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:362 +#, c-format +msgid " recordsep specify the record (line) separator to use in unaligned output format\n" +msgstr "" +" recordsep especifica el separador de registros a usar en formato de salida «unaligned»\n" + +#: help.c:363 +#, c-format +msgid " recordsep_zero set the record separator to use in unaligned output format to a zero byte.\n" +msgstr "" +" recordsep_zero define el separador de registros en formato «unaligned» al byte cero\n" + +#: help.c:364 +#, c-format +# XXX WTF does this mean? +msgid "" +" tableattr (or T) specify attributes for table tag in html format or proportional\n" +" column width of left aligned data type in latex format\n" +msgstr "" +" tableattr (o T) especifica atributos para el tag «table» en formato «html», o ancho proporcional\n" +" de columnas de tipos de dato alineados a la izquierda en formato «latex»\n" + +#: help.c:366 +#, c-format +msgid " title set the table title for any subsequently printed tables\n" +msgstr " title define el título de tablas\n" + +#: help.c:367 +#, c-format +msgid " tuples_only 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:368 +#, c-format +msgid " unicode_border_linestyle\n" +msgstr " unicode_border_linestyle\n" + +#: help.c:369 +#, c-format +msgid " unicode_column_linestyle\n" +msgstr " unicode_column_linestyle\n" + +#: help.c:370 +#, c-format +msgid "" +" unicode_header_linestyle\n" +" set the style of unicode line drawing [single, double]\n" +msgstr "" +" unicode_header_linestyle\n" +" define el estilo de líneas «unicode» [single, double]\n" + +#: help.c:373 +#, c-format +msgid "" +"\n" +"Environment variables:\n" +msgstr "" +"\n" +"Variables de ambiente:\n" + +#: help.c:377 +#, c-format +msgid "" +" NAME=VALUE [NAME=VALUE] psql ...\n" +" or \\setenv NAME [VALUE] in interactive mode\n" +"\n" +msgstr "" +" NOMBRE=VALOR [NOMBRE=VALOR] psql ...\n" +" o \\setenv NOMBRE [VALOR] en modo interactivo\n" + +#: help.c:379 +#, c-format +msgid "" +" set NAME=VALUE\n" +" psql ...\n" +" or \\setenv NAME VALUE in interactive mode\n" +"\n" +msgstr "" +" set NOMBRE=VALOR\n" +" psql ...\n" +" o \\setenv NOMBRE VALOR en modo interactivo\n" + +#: help.c:382 +#, c-format +msgid " COLUMNS number of columns for wrapped format\n" +msgstr " COLUMNS número de columnas para formato «wrapped»\n" + +#: help.c:383 +#, c-format +msgid " PAGER name of external pager program\n" +msgstr " PAGER nombre de programa paginador externo\n" + +#: help.c:384 +#, c-format +msgid " PGAPPNAME same as the application_name connection parameter\n" +msgstr " PGAPPNAME igual que el parámetro de conexión application_name\n" + +#: help.c:385 +#, c-format +msgid " PGDATABASE same as the dbname connection parameter\n" +msgstr " PGDATABASE igual que el parámetro de conexión dbname\n" + +#: help.c:386 +#, c-format +msgid " PGHOST same as the host connection parameter\n" +msgstr " PGHOST igual que el parámetro de conexión host\n" + +#: help.c:387 +#, c-format +msgid " PGPORT same as the port connection parameter\n" +msgstr " PGPORT igual que el parámetro de conexión port\n" + +#: help.c:388 +#, c-format +msgid " PGUSER same as the user connection parameter\n" +msgstr " PGUSER igual que el parámetro de conexión user\n" + +#: help.c:389 +#, c-format +msgid " PGPASSWORD connection password (not recommended)\n" +msgstr " PGPASSWORD contraseña de la conexión (no recomendado)\n" + +#: help.c:390 +#, c-format +msgid " PGPASSFILE password file name\n" +msgstr " PGPASSFILE nombre de archivo de contraseñas\n" + +#: help.c:391 +#, c-format +msgid "" +" PSQL_EDITOR, EDITOR, VISUAL\n" +" editor used by the \\e and \\ef commands\n" +msgstr "" +" PSQL_EDITOR, EDITOR, VISUAL\n" +" editor usado por órdenes \\e y \\ef\n" + +#: help.c:393 +#, c-format +msgid "" +" PSQL_EDITOR_LINENUMBER_ARG\n" +" how to specify a line number when invoking the editor\n" +msgstr "" +" PSQL_EDITOR_LINENUMBER_ARGS\n" +" cómo especificar número de línea al invocar al editor\n" + +#: help.c:395 +#, c-format +msgid " PSQL_HISTORY alternative location for the command history file\n" +msgstr " PSQL_HISTORY ubicación alternativa del archivo de historia de órdenes\n" + +#: help.c:396 +#, c-format +msgid " PSQLRC alternative location for the user's .psqlrc file\n" +msgstr " PSQLRC ubicación alternativa para el archivo .psqlrc del usuario\n" + +#: help.c:397 +#, c-format +msgid " SHELL shell used by the \\! command\n" +msgstr " SHELL intérprete usado por la orden \\!\n" + +#: help.c:398 +#, c-format +msgid " TMPDIR directory for temporary files\n" +msgstr " TMPDIR directorio para archivos temporales\n" + +#: help.c:441 msgid "Available help:\n" msgstr "Ayuda disponible:\n" -#: help.c:404 +#: help.c:525 #, c-format msgid "" "Command: %s\n" @@ -2466,7 +2979,7 @@ msgstr "" "%s\n" "\n" -#: help.c:420 +#: help.c:541 #, c-format msgid "" "No help available for \"%s\".\n" @@ -2480,49 +2993,57 @@ msgstr "" msgid "could not read from input file: %s\n" msgstr "no se pudo leer el archivo de entrada: %s\n" -#: input.c:451 input.c:490 +#: input.c:446 input.c:485 #, c-format msgid "could not save history to file \"%s\": %s\n" msgstr "no se pudo guardar historial a archivo «%s»: %s\n" -#: input.c:510 +#: input.c:505 #, c-format msgid "history is not supported by this installation\n" msgstr "el historial de órdenes no está soportado en esta instalación\n" -#: large_obj.c:66 +#: large_obj.c:64 #, c-format msgid "%s: not connected to a database\n" msgstr "%s: no está conectado a una base de datos\n" -#: large_obj.c:85 +#: large_obj.c:83 #, c-format msgid "%s: current transaction is aborted\n" msgstr "%s: transacción en curso está abortada\n" -#: large_obj.c:88 +#: large_obj.c:86 #, c-format msgid "%s: unknown transaction status\n" msgstr "%s: estado de transacción desconocido\n" -#: large_obj.c:289 large_obj.c:300 +#: large_obj.c:287 large_obj.c:298 msgid "ID" msgstr "ID" -#: large_obj.c:310 +#: large_obj.c:308 msgid "Large objects" msgstr "Objetos grandes" -#: mainloop.c:159 +#: mainloop.c:161 #, c-format msgid "Use \"\\q\" to leave %s.\n" msgstr "Use «\\q» para salir de %s.\n" -#: mainloop.c:189 +#: mainloop.c:183 +msgid "" +"The input is a PostgreSQL custom-format dump.\n" +"Use the pg_restore command-line client to restore this dump to a database.\n" +msgstr "" +"La entrada es un dump de PostgreSQL en formato custom.\n" +"Use el programa pg_restore para restaurar este dump a una base de datos.\n" + +#: mainloop.c:203 msgid "You are using psql, the command-line interface to PostgreSQL." msgstr "Está usando psql, la interfaz de línea de órdenes de PostgreSQL." -#: mainloop.c:190 +#: mainloop.c:204 #, c-format msgid "" "Type: \\copyright for distribution terms\n" @@ -2537,1914 +3058,2054 @@ msgstr "" " \\g o punto y coma («;») para ejecutar la consulta\n" " \\q para salir\n" -#: print.c:272 +#: print.c:344 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu fila)" msgstr[1] "(%lu filas)" -#: print.c:1174 -#, c-format -msgid "(No rows)\n" -msgstr "(Sin filas)\n" - -#: print.c:2238 +#: print.c:2801 #, c-format msgid "Interrupted\n" msgstr "Interrumpido\n" -#: print.c:2304 +#: print.c:2867 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "No se puede agregar un encabezado al contenido de la tabla: la cantidad de columnas de %d ha sido excedida.\n" -#: print.c:2344 +#: print.c:2907 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "No se puede agregar una celda al contenido de la tabla: la cantidad de celdas de %d ha sido excedida.\n" -#: print.c:2570 +#: print.c:3139 #, c-format msgid "invalid output format (internal error): %d" msgstr "formato de salida no válido (error interno): %d" -#: psqlscan.l:727 +#: psqlscan.l:751 #, c-format msgid "skipping recursive expansion of variable \"%s\"\n" msgstr "saltando expansión recursiva de la variable «%s»\n" -#: psqlscan.l:1604 +#: psqlscan.l:1627 #, c-format msgid "unterminated quoted string\n" msgstr "cadena en comillas sin terminar\n" -#: psqlscan.l:1704 +#: psqlscan.l:1727 #, c-format msgid "%s: out of memory\n" msgstr "%s: memoria agotada\n" -#: psqlscan.l:1933 +#: psqlscan.l:1956 #, c-format msgid "can't escape without active connection\n" msgstr "no se puede escapar sin una conexión activa\n" -#: sql_help.c:32 sql_help.c:35 sql_help.c:38 sql_help.c:60 sql_help.c:62 -#: sql_help.c:64 sql_help.c:75 sql_help.c:77 sql_help.c:79 sql_help.c:103 -#: sql_help.c:107 sql_help.c:109 sql_help.c:111 sql_help.c:113 sql_help.c:116 -#: sql_help.c:118 sql_help.c:120 sql_help.c:213 sql_help.c:215 sql_help.c:216 -#: sql_help.c:218 sql_help.c:220 sql_help.c:223 sql_help.c:225 sql_help.c:227 -#: sql_help.c:229 sql_help.c:241 sql_help.c:242 sql_help.c:243 sql_help.c:245 -#: sql_help.c:290 sql_help.c:292 sql_help.c:294 sql_help.c:296 sql_help.c:354 -#: sql_help.c:359 sql_help.c:361 sql_help.c:396 sql_help.c:398 sql_help.c:401 -#: sql_help.c:403 sql_help.c:460 sql_help.c:465 sql_help.c:470 sql_help.c:475 -#: sql_help.c:515 sql_help.c:517 sql_help.c:519 sql_help.c:522 sql_help.c:524 -#: sql_help.c:535 sql_help.c:537 sql_help.c:577 sql_help.c:579 sql_help.c:582 -#: sql_help.c:584 sql_help.c:586 sql_help.c:612 sql_help.c:616 sql_help.c:629 -#: sql_help.c:632 sql_help.c:635 sql_help.c:655 sql_help.c:667 sql_help.c:675 -#: sql_help.c:678 sql_help.c:681 sql_help.c:711 sql_help.c:717 sql_help.c:719 -#: sql_help.c:723 sql_help.c:726 sql_help.c:729 sql_help.c:738 sql_help.c:749 -#: sql_help.c:751 sql_help.c:768 sql_help.c:777 sql_help.c:779 sql_help.c:781 -#: sql_help.c:793 sql_help.c:797 sql_help.c:799 sql_help.c:878 sql_help.c:880 -#: sql_help.c:883 sql_help.c:886 sql_help.c:888 sql_help.c:890 sql_help.c:951 -#: sql_help.c:953 sql_help.c:955 sql_help.c:958 sql_help.c:979 sql_help.c:982 -#: sql_help.c:985 sql_help.c:988 sql_help.c:992 sql_help.c:994 sql_help.c:996 -#: sql_help.c:998 sql_help.c:1012 sql_help.c:1015 sql_help.c:1017 -#: sql_help.c:1019 sql_help.c:1029 sql_help.c:1031 sql_help.c:1041 -#: sql_help.c:1043 sql_help.c:1052 sql_help.c:1073 sql_help.c:1075 -#: sql_help.c:1077 sql_help.c:1080 sql_help.c:1082 sql_help.c:1084 -#: sql_help.c:1122 sql_help.c:1128 sql_help.c:1130 sql_help.c:1133 -#: sql_help.c:1135 sql_help.c:1137 sql_help.c:1164 sql_help.c:1167 -#: sql_help.c:1169 sql_help.c:1171 sql_help.c:1173 sql_help.c:1175 -#: sql_help.c:1178 sql_help.c:1218 sql_help.c:1456 sql_help.c:1472 -#: sql_help.c:1485 sql_help.c:1536 sql_help.c:1540 sql_help.c:1550 -#: sql_help.c:1568 sql_help.c:1591 sql_help.c:1609 sql_help.c:1637 -#: sql_help.c:1696 sql_help.c:1738 sql_help.c:1760 sql_help.c:1780 -#: sql_help.c:1781 sql_help.c:1816 sql_help.c:1836 sql_help.c:1858 -#: sql_help.c:1886 sql_help.c:1911 sql_help.c:1947 sql_help.c:2133 -#: sql_help.c:2146 sql_help.c:2163 sql_help.c:2179 sql_help.c:2202 -#: sql_help.c:2253 sql_help.c:2257 sql_help.c:2259 sql_help.c:2265 -#: sql_help.c:2283 sql_help.c:2310 sql_help.c:2345 sql_help.c:2357 -#: sql_help.c:2366 sql_help.c:2416 sql_help.c:2444 sql_help.c:2452 -#: sql_help.c:2460 sql_help.c:2468 sql_help.c:2476 sql_help.c:2484 -#: sql_help.c:2492 sql_help.c:2500 sql_help.c:2509 sql_help.c:2520 -#: sql_help.c:2528 sql_help.c:2536 sql_help.c:2544 sql_help.c:2552 -#: sql_help.c:2562 sql_help.c:2571 sql_help.c:2580 sql_help.c:2588 -#: sql_help.c:2596 sql_help.c:2605 sql_help.c:2613 sql_help.c:2621 -#: sql_help.c:2629 sql_help.c:2637 sql_help.c:2645 sql_help.c:2653 -#: sql_help.c:2661 sql_help.c:2669 sql_help.c:2677 sql_help.c:2686 -#: sql_help.c:2694 sql_help.c:2711 sql_help.c:2726 sql_help.c:2932 -#: sql_help.c:2983 sql_help.c:3011 sql_help.c:3019 sql_help.c:3417 -#: sql_help.c:3465 sql_help.c:3585 +#: sql_help.c:33 sql_help.c:36 sql_help.c:39 sql_help.c:61 sql_help.c:63 +#: sql_help.c:65 sql_help.c:76 sql_help.c:78 sql_help.c:80 sql_help.c:106 +#: sql_help.c:112 sql_help.c:114 sql_help.c:116 sql_help.c:118 sql_help.c:121 +#: sql_help.c:123 sql_help.c:125 sql_help.c:218 sql_help.c:220 sql_help.c:221 +#: sql_help.c:223 sql_help.c:225 sql_help.c:228 sql_help.c:230 sql_help.c:232 +#: sql_help.c:234 sql_help.c:246 sql_help.c:247 sql_help.c:248 sql_help.c:250 +#: sql_help.c:296 sql_help.c:298 sql_help.c:300 sql_help.c:302 sql_help.c:362 +#: sql_help.c:367 sql_help.c:369 sql_help.c:412 sql_help.c:414 sql_help.c:417 +#: sql_help.c:419 sql_help.c:483 sql_help.c:488 sql_help.c:493 sql_help.c:498 +#: sql_help.c:546 sql_help.c:548 sql_help.c:550 sql_help.c:553 sql_help.c:555 +#: sql_help.c:566 sql_help.c:568 sql_help.c:608 sql_help.c:610 sql_help.c:613 +#: sql_help.c:615 sql_help.c:617 sql_help.c:646 sql_help.c:650 sql_help.c:668 +#: sql_help.c:671 sql_help.c:674 sql_help.c:703 sql_help.c:715 sql_help.c:723 +#: sql_help.c:726 sql_help.c:729 sql_help.c:743 sql_help.c:789 sql_help.c:812 +#: sql_help.c:823 sql_help.c:825 sql_help.c:842 sql_help.c:851 sql_help.c:853 +#: sql_help.c:855 sql_help.c:867 sql_help.c:871 sql_help.c:873 sql_help.c:955 +#: sql_help.c:957 sql_help.c:960 sql_help.c:963 sql_help.c:965 sql_help.c:967 +#: sql_help.c:1028 sql_help.c:1030 sql_help.c:1032 sql_help.c:1035 +#: sql_help.c:1056 sql_help.c:1059 sql_help.c:1062 sql_help.c:1065 +#: sql_help.c:1069 sql_help.c:1071 sql_help.c:1073 sql_help.c:1075 +#: sql_help.c:1089 sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 +#: sql_help.c:1106 sql_help.c:1108 sql_help.c:1118 sql_help.c:1120 +#: sql_help.c:1129 sql_help.c:1150 sql_help.c:1152 sql_help.c:1154 +#: sql_help.c:1157 sql_help.c:1159 sql_help.c:1161 sql_help.c:1211 +#: sql_help.c:1249 sql_help.c:1252 sql_help.c:1254 sql_help.c:1256 +#: sql_help.c:1258 sql_help.c:1260 sql_help.c:1263 sql_help.c:1303 +#: sql_help.c:1550 sql_help.c:1566 sql_help.c:1579 sql_help.c:1630 +#: sql_help.c:1634 sql_help.c:1644 sql_help.c:1664 sql_help.c:1689 +#: sql_help.c:1707 sql_help.c:1735 sql_help.c:1809 sql_help.c:1852 +#: sql_help.c:1874 sql_help.c:1894 sql_help.c:1895 sql_help.c:1930 +#: sql_help.c:1950 sql_help.c:1972 sql_help.c:1985 sql_help.c:2017 +#: sql_help.c:2042 sql_help.c:2086 sql_help.c:2272 sql_help.c:2285 +#: sql_help.c:2302 sql_help.c:2318 sql_help.c:2357 sql_help.c:2408 +#: sql_help.c:2412 sql_help.c:2414 sql_help.c:2420 sql_help.c:2438 +#: sql_help.c:2465 sql_help.c:2500 sql_help.c:2512 sql_help.c:2521 +#: sql_help.c:2571 sql_help.c:2599 sql_help.c:2607 sql_help.c:2615 +#: sql_help.c:2623 sql_help.c:2631 sql_help.c:2639 sql_help.c:2647 +#: sql_help.c:2655 sql_help.c:2664 sql_help.c:2675 sql_help.c:2683 +#: sql_help.c:2691 sql_help.c:2699 sql_help.c:2707 sql_help.c:2717 +#: sql_help.c:2726 sql_help.c:2735 sql_help.c:2743 sql_help.c:2752 +#: sql_help.c:2760 sql_help.c:2769 sql_help.c:2777 sql_help.c:2785 +#: sql_help.c:2793 sql_help.c:2801 sql_help.c:2809 sql_help.c:2817 +#: sql_help.c:2825 sql_help.c:2833 sql_help.c:2850 sql_help.c:2859 +#: sql_help.c:2867 sql_help.c:2884 sql_help.c:2899 sql_help.c:3164 +#: sql_help.c:3215 sql_help.c:3244 sql_help.c:3252 sql_help.c:3671 +#: sql_help.c:3719 sql_help.c:3860 msgid "name" msgstr "nombre" -#: sql_help.c:33 sql_help.c:36 sql_help.c:39 sql_help.c:300 sql_help.c:1279 -#: sql_help.c:2417 sql_help.c:3234 +#: sql_help.c:34 sql_help.c:37 sql_help.c:40 sql_help.c:306 sql_help.c:1367 +#: sql_help.c:2572 sql_help.c:3467 msgid "aggregate_signature" msgstr "signatura_func_agregación" -#: sql_help.c:34 sql_help.c:61 sql_help.c:76 sql_help.c:108 sql_help.c:228 -#: sql_help.c:246 sql_help.c:362 sql_help.c:402 sql_help.c:469 sql_help.c:502 -#: sql_help.c:516 sql_help.c:536 sql_help.c:583 sql_help.c:631 sql_help.c:677 -#: sql_help.c:718 sql_help.c:740 sql_help.c:750 sql_help.c:780 sql_help.c:800 -#: sql_help.c:887 sql_help.c:952 sql_help.c:995 sql_help.c:1016 -#: sql_help.c:1030 sql_help.c:1042 sql_help.c:1054 sql_help.c:1081 -#: sql_help.c:1129 sql_help.c:1172 +#: sql_help.c:35 sql_help.c:62 sql_help.c:77 sql_help.c:113 sql_help.c:233 +#: sql_help.c:251 sql_help.c:370 sql_help.c:418 sql_help.c:492 sql_help.c:533 +#: sql_help.c:547 sql_help.c:567 sql_help.c:614 sql_help.c:670 sql_help.c:725 +#: sql_help.c:745 sql_help.c:790 sql_help.c:814 sql_help.c:824 sql_help.c:854 +#: sql_help.c:874 sql_help.c:964 sql_help.c:1029 sql_help.c:1072 +#: sql_help.c:1093 sql_help.c:1107 sql_help.c:1119 sql_help.c:1131 +#: sql_help.c:1158 sql_help.c:1212 sql_help.c:1257 msgid "new_name" msgstr "nuevo_nombre" -#: sql_help.c:37 sql_help.c:63 sql_help.c:78 sql_help.c:110 sql_help.c:226 -#: sql_help.c:244 sql_help.c:360 sql_help.c:431 sql_help.c:474 sql_help.c:538 -#: sql_help.c:547 sql_help.c:602 sql_help.c:615 sql_help.c:634 sql_help.c:680 -#: sql_help.c:752 sql_help.c:778 sql_help.c:798 sql_help.c:935 sql_help.c:954 -#: sql_help.c:997 sql_help.c:1018 sql_help.c:1076 sql_help.c:1170 +#: sql_help.c:38 sql_help.c:64 sql_help.c:79 sql_help.c:115 sql_help.c:231 +#: sql_help.c:249 sql_help.c:368 sql_help.c:454 sql_help.c:497 sql_help.c:569 +#: sql_help.c:578 sql_help.c:633 sql_help.c:649 sql_help.c:673 sql_help.c:728 +#: sql_help.c:826 sql_help.c:852 sql_help.c:872 sql_help.c:1013 +#: sql_help.c:1031 sql_help.c:1074 sql_help.c:1095 sql_help.c:1153 +#: sql_help.c:1255 sql_help.c:2258 msgid "new_owner" msgstr "nuevo_dueño" -#: sql_help.c:40 sql_help.c:65 sql_help.c:80 sql_help.c:230 sql_help.c:293 -#: sql_help.c:404 sql_help.c:479 sql_help.c:585 sql_help.c:619 sql_help.c:637 -#: sql_help.c:683 sql_help.c:782 sql_help.c:889 sql_help.c:999 sql_help.c:1020 -#: sql_help.c:1032 sql_help.c:1044 sql_help.c:1083 sql_help.c:1174 +#: sql_help.c:41 sql_help.c:66 sql_help.c:81 sql_help.c:235 sql_help.c:299 +#: sql_help.c:420 sql_help.c:502 sql_help.c:616 sql_help.c:653 sql_help.c:676 +#: sql_help.c:731 sql_help.c:856 sql_help.c:966 sql_help.c:1076 +#: sql_help.c:1097 sql_help.c:1109 sql_help.c:1121 sql_help.c:1160 +#: sql_help.c:1259 msgid "new_schema" msgstr "nuevo_esquema" -#: sql_help.c:41 sql_help.c:1326 sql_help.c:2418 sql_help.c:3253 +#: sql_help.c:42 sql_help.c:1420 sql_help.c:2573 sql_help.c:3486 msgid "where aggregate_signature is:" msgstr "donde signatura_func_agregación es:" -#: sql_help.c:42 sql_help.c:45 sql_help.c:48 sql_help.c:310 sql_help.c:333 -#: sql_help.c:336 sql_help.c:339 sql_help.c:461 sql_help.c:466 sql_help.c:471 -#: sql_help.c:476 sql_help.c:1295 sql_help.c:1327 sql_help.c:1330 -#: sql_help.c:1333 sql_help.c:1457 sql_help.c:1473 sql_help.c:1476 -#: sql_help.c:1697 sql_help.c:2419 sql_help.c:2422 sql_help.c:2425 -#: sql_help.c:2510 sql_help.c:2870 sql_help.c:3149 sql_help.c:3240 -#: sql_help.c:3254 sql_help.c:3257 sql_help.c:3260 +#: sql_help.c:43 sql_help.c:46 sql_help.c:49 sql_help.c:316 sql_help.c:341 +#: sql_help.c:344 sql_help.c:347 sql_help.c:484 sql_help.c:489 sql_help.c:494 +#: sql_help.c:499 sql_help.c:1385 sql_help.c:1421 sql_help.c:1424 +#: sql_help.c:1427 sql_help.c:1551 sql_help.c:1567 sql_help.c:1570 +#: sql_help.c:1810 sql_help.c:2574 sql_help.c:2577 sql_help.c:2580 +#: sql_help.c:2665 sql_help.c:3050 sql_help.c:3382 sql_help.c:3473 +#: sql_help.c:3487 sql_help.c:3490 sql_help.c:3493 msgid "argmode" msgstr "modo_arg" -#: sql_help.c:43 sql_help.c:46 sql_help.c:49 sql_help.c:311 sql_help.c:334 -#: sql_help.c:337 sql_help.c:340 sql_help.c:462 sql_help.c:467 sql_help.c:472 -#: sql_help.c:477 sql_help.c:1296 sql_help.c:1328 sql_help.c:1331 -#: sql_help.c:1334 sql_help.c:1458 sql_help.c:1474 sql_help.c:1477 -#: sql_help.c:1698 sql_help.c:2420 sql_help.c:2423 sql_help.c:2426 -#: sql_help.c:2511 sql_help.c:3241 sql_help.c:3255 sql_help.c:3258 -#: sql_help.c:3261 +#: sql_help.c:44 sql_help.c:47 sql_help.c:50 sql_help.c:317 sql_help.c:342 +#: sql_help.c:345 sql_help.c:348 sql_help.c:485 sql_help.c:490 sql_help.c:495 +#: sql_help.c:500 sql_help.c:1386 sql_help.c:1422 sql_help.c:1425 +#: sql_help.c:1428 sql_help.c:1552 sql_help.c:1568 sql_help.c:1571 +#: sql_help.c:1811 sql_help.c:2575 sql_help.c:2578 sql_help.c:2581 +#: sql_help.c:2666 sql_help.c:3474 sql_help.c:3488 sql_help.c:3491 +#: sql_help.c:3494 msgid "argname" msgstr "nombre_arg" -#: sql_help.c:44 sql_help.c:47 sql_help.c:50 sql_help.c:312 sql_help.c:335 -#: sql_help.c:338 sql_help.c:341 sql_help.c:463 sql_help.c:468 sql_help.c:473 -#: sql_help.c:478 sql_help.c:1297 sql_help.c:1329 sql_help.c:1332 -#: sql_help.c:1335 sql_help.c:1699 sql_help.c:2421 sql_help.c:2424 -#: sql_help.c:2427 sql_help.c:2512 sql_help.c:3242 sql_help.c:3256 -#: sql_help.c:3259 sql_help.c:3262 +#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:318 sql_help.c:343 +#: sql_help.c:346 sql_help.c:349 sql_help.c:486 sql_help.c:491 sql_help.c:496 +#: sql_help.c:501 sql_help.c:1387 sql_help.c:1423 sql_help.c:1426 +#: sql_help.c:1429 sql_help.c:1812 sql_help.c:2576 sql_help.c:2579 +#: sql_help.c:2582 sql_help.c:2667 sql_help.c:3475 sql_help.c:3489 +#: sql_help.c:3492 sql_help.c:3495 msgid "argtype" msgstr "tipo_arg" -#: sql_help.c:104 sql_help.c:357 sql_help.c:425 sql_help.c:432 sql_help.c:712 -#: sql_help.c:795 sql_help.c:1013 sql_help.c:1123 sql_help.c:1149 -#: sql_help.c:1383 sql_help.c:1389 sql_help.c:1640 sql_help.c:1664 -#: sql_help.c:1669 sql_help.c:1739 sql_help.c:1887 sql_help.c:1968 -#: sql_help.c:2148 sql_help.c:2311 sql_help.c:2333 sql_help.c:2745 +#: sql_help.c:107 sql_help.c:365 sql_help.c:443 sql_help.c:455 sql_help.c:784 +#: sql_help.c:869 sql_help.c:1090 sql_help.c:1206 sql_help.c:1234 +#: sql_help.c:1477 sql_help.c:1483 sql_help.c:1738 sql_help.c:1770 +#: sql_help.c:1777 sql_help.c:1853 sql_help.c:2018 sql_help.c:2107 +#: sql_help.c:2287 sql_help.c:2466 sql_help.c:2488 sql_help.c:2918 +#: sql_help.c:3084 msgid "option" msgstr "opción" -#: sql_help.c:105 sql_help.c:713 sql_help.c:1124 sql_help.c:1740 -#: sql_help.c:1888 sql_help.c:2312 +#: sql_help.c:108 sql_help.c:785 sql_help.c:1207 sql_help.c:1854 +#: sql_help.c:2019 sql_help.c:2467 msgid "where option can be:" msgstr "donde opción puede ser:" -#: sql_help.c:106 sql_help.c:714 sql_help.c:1125 sql_help.c:1575 -#: sql_help.c:1889 sql_help.c:2313 +#: sql_help.c:109 sql_help.c:1671 +msgid "allowconn" +msgstr "allowconn" + +#: sql_help.c:110 sql_help.c:786 sql_help.c:1208 sql_help.c:1672 +#: sql_help.c:2020 sql_help.c:2468 msgid "connlimit" msgstr "límite_conexiones" -#: sql_help.c:112 sql_help.c:526 sql_help.c:588 sql_help.c:603 sql_help.c:892 -#: sql_help.c:936 +#: sql_help.c:111 sql_help.c:1673 +msgid "istemplate" +msgstr "esplantilla" + +#: sql_help.c:117 sql_help.c:557 sql_help.c:619 sql_help.c:634 sql_help.c:969 +#: sql_help.c:1006 msgid "new_tablespace" msgstr "nuevo_tablespace" -#: sql_help.c:114 sql_help.c:117 sql_help.c:119 sql_help.c:483 sql_help.c:485 -#: sql_help.c:486 sql_help.c:721 sql_help.c:725 sql_help.c:728 sql_help.c:811 -#: sql_help.c:814 sql_help.c:1131 sql_help.c:1134 sql_help.c:1136 -#: sql_help.c:1707 sql_help.c:3036 sql_help.c:3406 +#: sql_help.c:119 sql_help.c:122 sql_help.c:124 sql_help.c:506 sql_help.c:508 +#: sql_help.c:509 sql_help.c:793 sql_help.c:797 sql_help.c:800 sql_help.c:885 +#: sql_help.c:888 sql_help.c:1214 sql_help.c:1217 sql_help.c:1219 +#: sql_help.c:1821 sql_help.c:3269 sql_help.c:3660 msgid "configuration_parameter" msgstr "parámetro_de_configuración" -#: sql_help.c:115 sql_help.c:358 sql_help.c:421 sql_help.c:426 sql_help.c:433 -#: sql_help.c:484 sql_help.c:521 sql_help.c:594 sql_help.c:600 sql_help.c:722 -#: sql_help.c:796 sql_help.c:812 sql_help.c:813 sql_help.c:911 sql_help.c:930 -#: sql_help.c:957 sql_help.c:1014 sql_help.c:1132 sql_help.c:1150 -#: sql_help.c:1641 sql_help.c:1665 sql_help.c:1670 sql_help.c:1708 -#: sql_help.c:1709 sql_help.c:1768 sql_help.c:1800 sql_help.c:1969 -#: sql_help.c:2043 sql_help.c:2051 sql_help.c:2083 sql_help.c:2105 -#: sql_help.c:2122 sql_help.c:2149 sql_help.c:2334 sql_help.c:3407 -#: sql_help.c:3408 +#: sql_help.c:120 sql_help.c:366 sql_help.c:438 sql_help.c:444 sql_help.c:456 +#: sql_help.c:507 sql_help.c:552 sql_help.c:625 sql_help.c:631 sql_help.c:794 +#: sql_help.c:870 sql_help.c:886 sql_help.c:887 sql_help.c:988 sql_help.c:1008 +#: sql_help.c:1034 sql_help.c:1091 sql_help.c:1215 sql_help.c:1235 +#: sql_help.c:1739 sql_help.c:1771 sql_help.c:1778 sql_help.c:1822 +#: sql_help.c:1823 sql_help.c:1882 sql_help.c:1914 sql_help.c:2108 +#: sql_help.c:2182 sql_help.c:2190 sql_help.c:2222 sql_help.c:2244 +#: sql_help.c:2261 sql_help.c:2288 sql_help.c:2489 sql_help.c:3085 +#: sql_help.c:3661 sql_help.c:3662 msgid "value" msgstr "valor" -#: sql_help.c:177 +#: sql_help.c:182 msgid "target_role" msgstr "rol_destino" -#: sql_help.c:178 sql_help.c:1624 sql_help.c:1929 sql_help.c:1934 -#: sql_help.c:2852 sql_help.c:2859 sql_help.c:2873 sql_help.c:2879 -#: sql_help.c:3131 sql_help.c:3138 sql_help.c:3152 sql_help.c:3158 +#: sql_help.c:183 sql_help.c:1722 sql_help.c:2066 sql_help.c:2071 +#: sql_help.c:3032 sql_help.c:3039 sql_help.c:3053 sql_help.c:3059 +#: sql_help.c:3364 sql_help.c:3371 sql_help.c:3385 sql_help.c:3391 msgid "schema_name" msgstr "nombre_de_esquema" -#: sql_help.c:179 +#: sql_help.c:184 msgid "abbreviated_grant_or_revoke" msgstr "grant_o_revoke_abreviado" -#: sql_help.c:180 +#: sql_help.c:185 msgid "where abbreviated_grant_or_revoke is one of:" msgstr "donde grant_o_revoke_abreviado es uno de:" -#: sql_help.c:181 sql_help.c:182 sql_help.c:183 sql_help.c:184 sql_help.c:185 -#: sql_help.c:186 sql_help.c:187 sql_help.c:188 sql_help.c:525 sql_help.c:587 -#: sql_help.c:891 sql_help.c:1743 sql_help.c:1744 sql_help.c:1745 -#: sql_help.c:1746 sql_help.c:1747 sql_help.c:1892 sql_help.c:1893 -#: sql_help.c:1894 sql_help.c:1895 sql_help.c:1896 sql_help.c:2316 -#: sql_help.c:2317 sql_help.c:2318 sql_help.c:2319 sql_help.c:2320 -#: sql_help.c:2853 sql_help.c:2857 sql_help.c:2860 sql_help.c:2862 -#: sql_help.c:2864 sql_help.c:2866 sql_help.c:2868 sql_help.c:2874 -#: sql_help.c:2876 sql_help.c:2878 sql_help.c:2880 sql_help.c:2882 -#: sql_help.c:2884 sql_help.c:2885 sql_help.c:2886 sql_help.c:3132 -#: sql_help.c:3136 sql_help.c:3139 sql_help.c:3141 sql_help.c:3143 -#: sql_help.c:3145 sql_help.c:3147 sql_help.c:3153 sql_help.c:3155 -#: sql_help.c:3157 sql_help.c:3159 sql_help.c:3161 sql_help.c:3163 -#: sql_help.c:3164 sql_help.c:3165 sql_help.c:3427 +#: sql_help.c:186 sql_help.c:187 sql_help.c:188 sql_help.c:189 sql_help.c:190 +#: sql_help.c:191 sql_help.c:192 sql_help.c:193 sql_help.c:531 sql_help.c:556 +#: sql_help.c:618 sql_help.c:746 sql_help.c:804 sql_help.c:968 sql_help.c:1222 +#: sql_help.c:1857 sql_help.c:1858 sql_help.c:1859 sql_help.c:1860 +#: sql_help.c:1861 sql_help.c:1987 sql_help.c:2023 sql_help.c:2024 +#: sql_help.c:2025 sql_help.c:2026 sql_help.c:2027 sql_help.c:2471 +#: sql_help.c:2472 sql_help.c:2473 sql_help.c:2474 sql_help.c:2475 +#: sql_help.c:3066 sql_help.c:3067 sql_help.c:3068 sql_help.c:3365 +#: sql_help.c:3369 sql_help.c:3372 sql_help.c:3374 sql_help.c:3376 +#: sql_help.c:3378 sql_help.c:3380 sql_help.c:3386 sql_help.c:3388 +#: sql_help.c:3390 sql_help.c:3392 sql_help.c:3394 sql_help.c:3396 +#: sql_help.c:3397 sql_help.c:3398 sql_help.c:3681 msgid "role_name" msgstr "nombre_de_rol" -#: sql_help.c:214 sql_help.c:414 sql_help.c:902 sql_help.c:904 sql_help.c:1166 -#: sql_help.c:1594 sql_help.c:1598 sql_help.c:1764 sql_help.c:2055 -#: sql_help.c:2065 sql_help.c:2087 sql_help.c:2900 sql_help.c:3303 -#: sql_help.c:3304 sql_help.c:3308 sql_help.c:3313 sql_help.c:3381 -#: sql_help.c:3382 sql_help.c:3387 sql_help.c:3392 sql_help.c:3521 -#: sql_help.c:3522 sql_help.c:3526 sql_help.c:3531 sql_help.c:3611 -#: sql_help.c:3613 sql_help.c:3644 sql_help.c:3690 sql_help.c:3691 -#: sql_help.c:3695 sql_help.c:3700 +#: sql_help.c:219 sql_help.c:431 sql_help.c:979 sql_help.c:981 sql_help.c:1251 +#: sql_help.c:1692 sql_help.c:1696 sql_help.c:1781 sql_help.c:1785 +#: sql_help.c:1878 sql_help.c:2194 sql_help.c:2204 sql_help.c:2226 +#: sql_help.c:3115 sql_help.c:3130 sql_help.c:3132 sql_help.c:3546 +#: sql_help.c:3547 sql_help.c:3556 sql_help.c:3597 sql_help.c:3598 +#: sql_help.c:3599 sql_help.c:3600 sql_help.c:3601 sql_help.c:3602 +#: sql_help.c:3635 sql_help.c:3636 sql_help.c:3641 sql_help.c:3646 +#: sql_help.c:3785 sql_help.c:3786 sql_help.c:3795 sql_help.c:3836 +#: sql_help.c:3837 sql_help.c:3838 sql_help.c:3839 sql_help.c:3840 +#: sql_help.c:3841 sql_help.c:3888 sql_help.c:3890 sql_help.c:3923 +#: sql_help.c:3979 sql_help.c:3980 sql_help.c:3989 sql_help.c:4030 +#: sql_help.c:4031 sql_help.c:4032 sql_help.c:4033 sql_help.c:4034 +#: sql_help.c:4035 msgid "expression" msgstr "expresión" -#: sql_help.c:217 +#: sql_help.c:222 msgid "domain_constraint" msgstr "restricción_de_dominio" -#: sql_help.c:219 sql_help.c:221 sql_help.c:224 sql_help.c:884 sql_help.c:917 -#: sql_help.c:918 sql_help.c:919 sql_help.c:939 sql_help.c:1285 -#: sql_help.c:1597 sql_help.c:1672 sql_help.c:2054 sql_help.c:2064 +#: sql_help.c:224 sql_help.c:226 sql_help.c:229 sql_help.c:446 sql_help.c:447 +#: sql_help.c:961 sql_help.c:994 sql_help.c:995 sql_help.c:996 sql_help.c:1016 +#: sql_help.c:1373 sql_help.c:1375 sql_help.c:1695 sql_help.c:1780 +#: sql_help.c:1784 sql_help.c:2193 sql_help.c:2203 sql_help.c:3127 msgid "constraint_name" msgstr "nombre_restricción" -#: sql_help.c:222 sql_help.c:885 +#: sql_help.c:227 sql_help.c:962 msgid "new_constraint_name" msgstr "nuevo_nombre_restricción" -#: sql_help.c:291 sql_help.c:794 +#: sql_help.c:297 sql_help.c:868 msgid "new_version" msgstr "nueva_versión" -#: sql_help.c:295 sql_help.c:297 +#: sql_help.c:301 sql_help.c:303 msgid "member_object" msgstr "objeto_miembro" -#: sql_help.c:298 +#: sql_help.c:304 msgid "where member_object is:" msgstr "dondo objeto_miembro es:" -#: sql_help.c:299 sql_help.c:1278 sql_help.c:3233 +#: sql_help.c:305 sql_help.c:1366 sql_help.c:3466 msgid "aggregate_name" msgstr "nombre_función_agregación" -#: sql_help.c:301 sql_help.c:1280 sql_help.c:1516 sql_help.c:1520 -#: sql_help.c:1522 sql_help.c:2435 +#: sql_help.c:307 sql_help.c:1368 sql_help.c:1610 sql_help.c:1614 +#: sql_help.c:1616 sql_help.c:2590 msgid "source_type" msgstr "tipo_fuente" -#: sql_help.c:302 sql_help.c:1281 sql_help.c:1517 sql_help.c:1521 -#: sql_help.c:1523 sql_help.c:2436 +#: sql_help.c:308 sql_help.c:1369 sql_help.c:1611 sql_help.c:1615 +#: sql_help.c:1617 sql_help.c:2591 msgid "target_type" msgstr "tipo_destino" -#: sql_help.c:303 sql_help.c:304 sql_help.c:305 sql_help.c:306 sql_help.c:307 -#: sql_help.c:308 sql_help.c:313 sql_help.c:317 sql_help.c:319 sql_help.c:321 -#: sql_help.c:322 sql_help.c:323 sql_help.c:324 sql_help.c:325 sql_help.c:326 -#: sql_help.c:327 sql_help.c:328 sql_help.c:329 sql_help.c:330 sql_help.c:331 -#: sql_help.c:1282 sql_help.c:1287 sql_help.c:1288 sql_help.c:1289 -#: sql_help.c:1290 sql_help.c:1291 sql_help.c:1292 sql_help.c:1293 -#: sql_help.c:1298 sql_help.c:1300 sql_help.c:1304 sql_help.c:1306 -#: sql_help.c:1308 sql_help.c:1309 sql_help.c:1312 sql_help.c:1313 -#: sql_help.c:1314 sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 -#: sql_help.c:1318 sql_help.c:1319 sql_help.c:1320 sql_help.c:1323 -#: sql_help.c:1324 sql_help.c:3230 sql_help.c:3235 sql_help.c:3236 -#: sql_help.c:3237 sql_help.c:3238 sql_help.c:3244 sql_help.c:3245 -#: sql_help.c:3246 sql_help.c:3247 sql_help.c:3248 sql_help.c:3249 -#: sql_help.c:3250 sql_help.c:3251 +#: sql_help.c:309 sql_help.c:310 sql_help.c:311 sql_help.c:312 sql_help.c:313 +#: sql_help.c:314 sql_help.c:319 sql_help.c:323 sql_help.c:325 sql_help.c:327 +#: sql_help.c:328 sql_help.c:329 sql_help.c:330 sql_help.c:331 sql_help.c:332 +#: sql_help.c:333 sql_help.c:334 sql_help.c:335 sql_help.c:338 sql_help.c:339 +#: sql_help.c:1370 sql_help.c:1377 sql_help.c:1378 sql_help.c:1379 +#: sql_help.c:1380 sql_help.c:1381 sql_help.c:1382 sql_help.c:1383 +#: sql_help.c:1388 sql_help.c:1390 sql_help.c:1394 sql_help.c:1396 +#: sql_help.c:1400 sql_help.c:1401 sql_help.c:1404 sql_help.c:1405 +#: sql_help.c:1406 sql_help.c:1407 sql_help.c:1408 sql_help.c:1409 +#: sql_help.c:1410 sql_help.c:1411 sql_help.c:1412 sql_help.c:1417 +#: sql_help.c:1418 sql_help.c:3463 sql_help.c:3468 sql_help.c:3469 +#: sql_help.c:3470 sql_help.c:3471 sql_help.c:3477 sql_help.c:3478 +#: sql_help.c:3479 sql_help.c:3480 sql_help.c:3481 sql_help.c:3482 +#: sql_help.c:3483 sql_help.c:3484 msgid "object_name" msgstr "nombre_de_objeto" -#: sql_help.c:309 sql_help.c:665 sql_help.c:1294 sql_help.c:1518 -#: sql_help.c:1553 sql_help.c:1612 sql_help.c:1817 sql_help.c:1848 -#: sql_help.c:2207 sql_help.c:2869 sql_help.c:3148 sql_help.c:3239 -#: sql_help.c:3329 sql_help.c:3333 sql_help.c:3337 sql_help.c:3340 -#: sql_help.c:3547 sql_help.c:3551 sql_help.c:3555 sql_help.c:3558 -#: sql_help.c:3716 sql_help.c:3720 sql_help.c:3724 sql_help.c:3727 +#: sql_help.c:315 sql_help.c:713 sql_help.c:1384 sql_help.c:1612 +#: sql_help.c:1647 sql_help.c:1710 sql_help.c:1931 sql_help.c:1962 +#: sql_help.c:2362 sql_help.c:3049 sql_help.c:3381 sql_help.c:3472 +#: sql_help.c:3575 sql_help.c:3579 sql_help.c:3583 sql_help.c:3586 +#: sql_help.c:3814 sql_help.c:3818 sql_help.c:3822 sql_help.c:3825 +#: sql_help.c:4008 sql_help.c:4012 sql_help.c:4016 sql_help.c:4019 msgid "function_name" msgstr "nombre_de_función" -#: sql_help.c:314 sql_help.c:658 sql_help.c:1301 sql_help.c:1841 +#: sql_help.c:320 sql_help.c:706 sql_help.c:1391 sql_help.c:1955 msgid "operator_name" msgstr "nombre_operador" -#: sql_help.c:315 sql_help.c:613 sql_help.c:617 sql_help.c:1302 -#: sql_help.c:1818 sql_help.c:2553 +#: sql_help.c:321 sql_help.c:647 sql_help.c:651 sql_help.c:1392 +#: sql_help.c:1932 sql_help.c:2708 msgid "left_type" msgstr "tipo_izq" -#: sql_help.c:316 sql_help.c:614 sql_help.c:618 sql_help.c:1303 -#: sql_help.c:1819 sql_help.c:2554 +#: sql_help.c:322 sql_help.c:648 sql_help.c:652 sql_help.c:1393 +#: sql_help.c:1933 sql_help.c:2709 msgid "right_type" msgstr "tipo_der" -#: sql_help.c:318 sql_help.c:320 sql_help.c:630 sql_help.c:633 sql_help.c:636 -#: sql_help.c:656 sql_help.c:668 sql_help.c:676 sql_help.c:679 sql_help.c:682 -#: sql_help.c:1305 sql_help.c:1307 sql_help.c:1838 sql_help.c:1859 -#: sql_help.c:2070 sql_help.c:2563 sql_help.c:2572 +#: sql_help.c:324 sql_help.c:326 sql_help.c:669 sql_help.c:672 sql_help.c:675 +#: sql_help.c:704 sql_help.c:716 sql_help.c:724 sql_help.c:727 sql_help.c:730 +#: sql_help.c:1395 sql_help.c:1397 sql_help.c:1952 sql_help.c:1973 +#: sql_help.c:2209 sql_help.c:2718 sql_help.c:2727 msgid "index_method" msgstr "método_de_índice" -#: sql_help.c:332 +#: sql_help.c:336 sql_help.c:1012 sql_help.c:1413 sql_help.c:1818 +#: sql_help.c:2185 sql_help.c:2331 sql_help.c:2841 sql_help.c:3063 +#: sql_help.c:3395 +msgid "type_name" +msgstr "nombre_de_tipo" + +#: sql_help.c:337 sql_help.c:1414 sql_help.c:1817 sql_help.c:2332 +#: sql_help.c:2556 sql_help.c:2842 sql_help.c:3055 sql_help.c:3387 +msgid "lang_name" +msgstr "nombre_lenguaje" + +#: sql_help.c:340 msgid "and aggregate_signature is:" msgstr "y signatura_func_agregación es:" -#: sql_help.c:355 sql_help.c:1638 +#: sql_help.c:363 sql_help.c:1736 msgid "handler_function" msgstr "función_manejadora" -#: sql_help.c:356 sql_help.c:1639 +#: sql_help.c:364 sql_help.c:1737 msgid "validator_function" msgstr "función_validadora" -#: sql_help.c:397 sql_help.c:464 sql_help.c:578 sql_help.c:879 sql_help.c:1074 -#: sql_help.c:2061 sql_help.c:2062 sql_help.c:2078 sql_help.c:2079 +#: sql_help.c:413 sql_help.c:487 sql_help.c:609 sql_help.c:956 sql_help.c:1151 +#: sql_help.c:2200 sql_help.c:2201 sql_help.c:2217 sql_help.c:2218 msgid "action" msgstr "acción" -#: sql_help.c:399 sql_help.c:406 sql_help.c:410 sql_help.c:411 sql_help.c:413 -#: sql_help.c:415 sql_help.c:416 sql_help.c:417 sql_help.c:419 sql_help.c:422 -#: sql_help.c:424 sql_help.c:580 sql_help.c:590 sql_help.c:592 sql_help.c:595 -#: sql_help.c:597 sql_help.c:776 sql_help.c:881 sql_help.c:894 sql_help.c:898 -#: sql_help.c:899 sql_help.c:903 sql_help.c:905 sql_help.c:906 sql_help.c:907 -#: sql_help.c:909 sql_help.c:912 sql_help.c:914 sql_help.c:1165 -#: sql_help.c:1168 sql_help.c:1188 sql_help.c:1284 sql_help.c:1380 -#: sql_help.c:1385 sql_help.c:1399 sql_help.c:1400 sql_help.c:1401 -#: sql_help.c:1662 sql_help.c:1702 sql_help.c:1763 sql_help.c:1798 -#: sql_help.c:1954 sql_help.c:2034 sql_help.c:2047 sql_help.c:2066 -#: sql_help.c:2068 sql_help.c:2075 sql_help.c:2086 sql_help.c:2103 -#: sql_help.c:2210 sql_help.c:2346 sql_help.c:2854 sql_help.c:2855 -#: sql_help.c:2899 sql_help.c:3133 sql_help.c:3134 sql_help.c:3232 -#: sql_help.c:3352 sql_help.c:3570 sql_help.c:3610 sql_help.c:3612 -#: sql_help.c:3629 sql_help.c:3632 sql_help.c:3739 +#: sql_help.c:415 sql_help.c:422 sql_help.c:426 sql_help.c:427 sql_help.c:430 +#: sql_help.c:432 sql_help.c:433 sql_help.c:434 sql_help.c:436 sql_help.c:439 +#: sql_help.c:441 sql_help.c:442 sql_help.c:611 sql_help.c:621 sql_help.c:623 +#: sql_help.c:626 sql_help.c:628 sql_help.c:850 sql_help.c:958 sql_help.c:971 +#: sql_help.c:975 sql_help.c:976 sql_help.c:980 sql_help.c:982 sql_help.c:983 +#: sql_help.c:984 sql_help.c:986 sql_help.c:989 sql_help.c:991 sql_help.c:1250 +#: sql_help.c:1253 sql_help.c:1273 sql_help.c:1372 sql_help.c:1474 +#: sql_help.c:1479 sql_help.c:1493 sql_help.c:1494 sql_help.c:1495 +#: sql_help.c:1768 sql_help.c:1815 sql_help.c:1877 sql_help.c:1912 +#: sql_help.c:2093 sql_help.c:2173 sql_help.c:2186 sql_help.c:2205 +#: sql_help.c:2207 sql_help.c:2214 sql_help.c:2225 sql_help.c:2242 +#: sql_help.c:2365 sql_help.c:2501 sql_help.c:3034 sql_help.c:3035 +#: sql_help.c:3114 sql_help.c:3129 sql_help.c:3131 sql_help.c:3133 +#: sql_help.c:3366 sql_help.c:3367 sql_help.c:3465 sql_help.c:3606 +#: sql_help.c:3845 sql_help.c:3887 sql_help.c:3889 sql_help.c:3891 +#: sql_help.c:3908 sql_help.c:3911 sql_help.c:4039 msgid "column_name" msgstr "nombre_de_columna" -#: sql_help.c:400 sql_help.c:581 sql_help.c:882 +#: sql_help.c:416 sql_help.c:612 sql_help.c:959 msgid "new_column_name" msgstr "nuevo_nombre_de_columna" -#: sql_help.c:405 sql_help.c:480 sql_help.c:589 sql_help.c:893 sql_help.c:1087 +#: sql_help.c:421 sql_help.c:503 sql_help.c:620 sql_help.c:970 sql_help.c:1164 msgid "where action is one of:" msgstr "donde acción es una de:" -#: sql_help.c:407 sql_help.c:412 sql_help.c:895 sql_help.c:900 sql_help.c:1089 -#: sql_help.c:1093 sql_help.c:1592 sql_help.c:1663 sql_help.c:1837 -#: sql_help.c:2035 sql_help.c:2255 sql_help.c:2984 +#: sql_help.c:423 sql_help.c:428 sql_help.c:972 sql_help.c:977 sql_help.c:1166 +#: sql_help.c:1170 sql_help.c:1690 sql_help.c:1769 sql_help.c:1951 +#: sql_help.c:2174 sql_help.c:2410 sql_help.c:3216 msgid "data_type" msgstr "tipo_de_dato" -#: sql_help.c:408 sql_help.c:896 sql_help.c:901 sql_help.c:1090 -#: sql_help.c:1094 sql_help.c:1593 sql_help.c:1666 sql_help.c:1765 -#: sql_help.c:2036 sql_help.c:2256 sql_help.c:2262 +#: sql_help.c:424 sql_help.c:429 sql_help.c:973 sql_help.c:978 sql_help.c:1167 +#: sql_help.c:1171 sql_help.c:1691 sql_help.c:1772 sql_help.c:1879 +#: sql_help.c:2175 sql_help.c:2411 sql_help.c:2417 sql_help.c:3124 msgid "collation" msgstr "ordenamiento" -#: sql_help.c:409 sql_help.c:897 sql_help.c:1667 sql_help.c:2037 -#: sql_help.c:2048 +#: sql_help.c:425 sql_help.c:974 sql_help.c:1773 sql_help.c:2176 +#: sql_help.c:2187 msgid "column_constraint" msgstr "restricción_de_columna" -#: sql_help.c:418 sql_help.c:591 sql_help.c:908 +#: sql_help.c:435 sql_help.c:622 sql_help.c:985 msgid "integer" msgstr "entero" -#: sql_help.c:420 sql_help.c:423 sql_help.c:593 sql_help.c:596 sql_help.c:910 -#: sql_help.c:913 +#: sql_help.c:437 sql_help.c:440 sql_help.c:624 sql_help.c:627 sql_help.c:987 +#: sql_help.c:990 msgid "attribute_option" msgstr "opción_de_atributo" -#: sql_help.c:427 sql_help.c:428 sql_help.c:429 sql_help.c:430 sql_help.c:920 -#: sql_help.c:921 sql_help.c:922 sql_help.c:923 sql_help.c:1321 +#: sql_help.c:445 sql_help.c:992 sql_help.c:1774 sql_help.c:2177 +#: sql_help.c:2188 +msgid "table_constraint" +msgstr "restricción_de_tabla" + +#: sql_help.c:448 sql_help.c:449 sql_help.c:450 sql_help.c:451 sql_help.c:997 +#: sql_help.c:998 sql_help.c:999 sql_help.c:1000 sql_help.c:1415 msgid "trigger_name" msgstr "nombre_disparador" -#: sql_help.c:481 sql_help.c:1705 +#: sql_help.c:452 sql_help.c:453 sql_help.c:1010 sql_help.c:1011 +#: sql_help.c:1775 sql_help.c:2180 +msgid "parent_table" +msgstr "tabla_padre" + +#: sql_help.c:504 sql_help.c:1819 msgid "execution_cost" msgstr "costo_de_ejecución" -#: sql_help.c:482 sql_help.c:1706 +#: sql_help.c:505 sql_help.c:1820 msgid "result_rows" msgstr "núm_de_filas" -#: sql_help.c:497 sql_help.c:499 sql_help.c:501 -msgid "group_name" -msgstr "nombre_de_grupo" - -#: sql_help.c:498 sql_help.c:500 sql_help.c:1147 sql_help.c:1569 -#: sql_help.c:1930 sql_help.c:1932 sql_help.c:1935 sql_help.c:1936 -#: sql_help.c:2119 sql_help.c:2331 sql_help.c:2702 sql_help.c:3437 +#: sql_help.c:526 sql_help.c:528 sql_help.c:783 sql_help.c:791 sql_help.c:795 +#: sql_help.c:798 sql_help.c:801 sql_help.c:1205 sql_help.c:1213 +#: sql_help.c:1216 sql_help.c:1218 sql_help.c:1220 sql_help.c:2067 +#: sql_help.c:2069 sql_help.c:2072 sql_help.c:2073 sql_help.c:3033 +#: sql_help.c:3037 sql_help.c:3040 sql_help.c:3042 sql_help.c:3044 +#: sql_help.c:3046 sql_help.c:3048 sql_help.c:3054 sql_help.c:3056 +#: sql_help.c:3058 sql_help.c:3060 sql_help.c:3062 sql_help.c:3064 +msgid "role_specification" +msgstr "especificación_de_rol" + +#: sql_help.c:527 sql_help.c:529 sql_help.c:1232 sql_help.c:1665 +#: sql_help.c:2075 sql_help.c:2486 sql_help.c:2875 sql_help.c:3691 msgid "user_name" msgstr "nombre_de_usuario" -#: sql_help.c:518 sql_help.c:1574 sql_help.c:1769 sql_help.c:1801 -#: sql_help.c:2044 sql_help.c:2052 sql_help.c:2084 sql_help.c:2106 -#: sql_help.c:2118 sql_help.c:2881 sql_help.c:3160 +#: sql_help.c:530 sql_help.c:803 sql_help.c:1221 sql_help.c:2074 +#: sql_help.c:3065 +msgid "where role_specification can be:" +msgstr "donde especificación_de_rol puede ser:" + +#: sql_help.c:532 +msgid "group_name" +msgstr "nombre_de_grupo" + +#: sql_help.c:549 sql_help.c:1670 sql_help.c:1883 sql_help.c:1915 +#: sql_help.c:2183 sql_help.c:2191 sql_help.c:2223 sql_help.c:2245 +#: sql_help.c:2257 sql_help.c:3061 sql_help.c:3393 msgid "tablespace_name" msgstr "nombre_de_tablespace" -#: sql_help.c:520 sql_help.c:523 sql_help.c:599 sql_help.c:601 sql_help.c:929 -#: sql_help.c:931 sql_help.c:1767 sql_help.c:1799 sql_help.c:2042 -#: sql_help.c:2050 sql_help.c:2082 sql_help.c:2104 +#: sql_help.c:551 sql_help.c:554 sql_help.c:630 sql_help.c:632 sql_help.c:1007 +#: sql_help.c:1009 sql_help.c:1881 sql_help.c:1913 sql_help.c:2181 +#: sql_help.c:2189 sql_help.c:2221 sql_help.c:2243 msgid "storage_parameter" msgstr "parámetro_de_almacenamiento" -#: sql_help.c:546 sql_help.c:1299 sql_help.c:3243 +#: sql_help.c:577 sql_help.c:1389 sql_help.c:3476 msgid "large_object_oid" msgstr "oid_de_objeto_grande" -#: sql_help.c:598 sql_help.c:928 sql_help.c:937 sql_help.c:940 sql_help.c:1228 +#: sql_help.c:629 sql_help.c:1005 sql_help.c:1014 sql_help.c:1017 +#: sql_help.c:1313 msgid "index_name" msgstr "nombre_índice" -#: sql_help.c:657 sql_help.c:669 sql_help.c:1840 +#: sql_help.c:705 sql_help.c:717 sql_help.c:1954 msgid "strategy_number" msgstr "número_de_estrategia" -#: sql_help.c:659 sql_help.c:660 sql_help.c:663 sql_help.c:664 sql_help.c:670 -#: sql_help.c:671 sql_help.c:673 sql_help.c:674 sql_help.c:1842 -#: sql_help.c:1843 sql_help.c:1846 sql_help.c:1847 +#: sql_help.c:707 sql_help.c:708 sql_help.c:711 sql_help.c:712 sql_help.c:718 +#: sql_help.c:719 sql_help.c:721 sql_help.c:722 sql_help.c:1956 +#: sql_help.c:1957 sql_help.c:1960 sql_help.c:1961 msgid "op_type" msgstr "tipo_op" -#: sql_help.c:661 sql_help.c:1844 +#: sql_help.c:709 sql_help.c:1958 msgid "sort_family_name" msgstr "nombre_familia_ordenamiento" -#: sql_help.c:662 sql_help.c:672 sql_help.c:1845 +#: sql_help.c:710 sql_help.c:720 sql_help.c:1959 msgid "support_number" msgstr "número_de_soporte" -#: sql_help.c:666 sql_help.c:1519 sql_help.c:1849 +#: sql_help.c:714 sql_help.c:1613 sql_help.c:1963 sql_help.c:2334 +#: sql_help.c:2336 msgid "argument_type" msgstr "tipo_argumento" -#: sql_help.c:715 sql_help.c:1126 sql_help.c:1741 sql_help.c:1890 -#: sql_help.c:2314 +#: sql_help.c:744 sql_help.c:813 sql_help.c:849 sql_help.c:1130 +#: sql_help.c:1272 sql_help.c:1312 sql_help.c:1374 sql_help.c:1399 +#: sql_help.c:1403 sql_help.c:1416 sql_help.c:1473 sql_help.c:1478 +#: sql_help.c:1767 sql_help.c:1875 sql_help.c:1911 sql_help.c:1986 +#: sql_help.c:2044 sql_help.c:2092 sql_help.c:2172 sql_help.c:2184 +#: sql_help.c:2241 sql_help.c:2359 sql_help.c:2535 sql_help.c:2744 +#: sql_help.c:2761 sql_help.c:2851 sql_help.c:3031 sql_help.c:3036 +#: sql_help.c:3081 sql_help.c:3112 sql_help.c:3363 sql_help.c:3368 +#: sql_help.c:3464 sql_help.c:3561 sql_help.c:3563 sql_help.c:3612 +#: sql_help.c:3651 sql_help.c:3800 sql_help.c:3802 sql_help.c:3851 +#: sql_help.c:3885 sql_help.c:3907 sql_help.c:3909 sql_help.c:3910 +#: sql_help.c:3994 sql_help.c:3996 sql_help.c:4045 +msgid "table_name" +msgstr "nombre_de_tabla" + +#: sql_help.c:747 sql_help.c:1988 +msgid "using_expression" +msgstr "expresión_using" + +#: sql_help.c:748 sql_help.c:1989 +msgid "check_expression" +msgstr "expresión_check" + +#: sql_help.c:787 sql_help.c:1209 sql_help.c:1855 sql_help.c:2021 +#: sql_help.c:2469 msgid "password" msgstr "contraseña" -#: sql_help.c:716 sql_help.c:1127 sql_help.c:1742 sql_help.c:1891 -#: sql_help.c:2315 +#: sql_help.c:788 sql_help.c:1210 sql_help.c:1856 sql_help.c:2022 +#: sql_help.c:2470 msgid "timestamp" msgstr "fecha_hora" -#: sql_help.c:720 sql_help.c:724 sql_help.c:727 sql_help.c:730 sql_help.c:2861 -#: sql_help.c:3140 +#: sql_help.c:792 sql_help.c:796 sql_help.c:799 sql_help.c:802 sql_help.c:3041 +#: sql_help.c:3373 msgid "database_name" msgstr "nombre_de_base_de_datos" -#: sql_help.c:739 sql_help.c:775 sql_help.c:1053 sql_help.c:1187 -#: sql_help.c:1227 sql_help.c:1286 sql_help.c:1311 sql_help.c:1322 -#: sql_help.c:1379 sql_help.c:1384 sql_help.c:1661 sql_help.c:1761 -#: sql_help.c:1797 sql_help.c:1913 sql_help.c:1953 sql_help.c:2033 -#: sql_help.c:2045 sql_help.c:2102 sql_help.c:2204 sql_help.c:2380 -#: sql_help.c:2597 sql_help.c:2678 sql_help.c:2851 sql_help.c:2856 -#: sql_help.c:2898 sql_help.c:3130 sql_help.c:3135 sql_help.c:3231 -#: sql_help.c:3318 sql_help.c:3320 sql_help.c:3358 sql_help.c:3397 -#: sql_help.c:3536 sql_help.c:3538 sql_help.c:3576 sql_help.c:3608 -#: sql_help.c:3628 sql_help.c:3630 sql_help.c:3631 sql_help.c:3705 -#: sql_help.c:3707 sql_help.c:3745 -msgid "table_name" -msgstr "nombre_de_tabla" - -#: sql_help.c:769 sql_help.c:1948 +#: sql_help.c:843 sql_help.c:2087 msgid "increment" msgstr "incremento" -#: sql_help.c:770 sql_help.c:1949 +#: sql_help.c:844 sql_help.c:2088 msgid "minvalue" msgstr "valormin" -#: sql_help.c:771 sql_help.c:1950 +#: sql_help.c:845 sql_help.c:2089 msgid "maxvalue" msgstr "valormax" -#: sql_help.c:772 sql_help.c:1951 sql_help.c:3316 sql_help.c:3395 -#: sql_help.c:3534 sql_help.c:3648 sql_help.c:3703 +#: sql_help.c:846 sql_help.c:2090 sql_help.c:3559 sql_help.c:3649 +#: sql_help.c:3798 sql_help.c:3927 sql_help.c:3992 msgid "start" msgstr "inicio" -#: sql_help.c:773 +#: sql_help.c:847 msgid "restart" msgstr "reinicio" -#: sql_help.c:774 sql_help.c:1952 +#: sql_help.c:848 sql_help.c:2091 msgid "cache" msgstr "cache" -#: sql_help.c:915 sql_help.c:2038 sql_help.c:2049 -msgid "table_constraint" -msgstr "restricción_de_tabla" - -#: sql_help.c:916 +#: sql_help.c:993 msgid "table_constraint_using_index" msgstr "restricción_de_tabla_con_índice" -#: sql_help.c:924 sql_help.c:925 sql_help.c:926 sql_help.c:927 +#: sql_help.c:1001 sql_help.c:1002 sql_help.c:1003 sql_help.c:1004 msgid "rewrite_rule_name" msgstr "nombre_regla_de_reescritura" -#: sql_help.c:932 sql_help.c:933 sql_help.c:2041 -msgid "parent_table" -msgstr "tabla_padre" - -#: sql_help.c:934 sql_help.c:2046 sql_help.c:2883 sql_help.c:3162 -msgid "type_name" -msgstr "nombre_de_tipo" - -#: sql_help.c:938 +#: sql_help.c:1015 msgid "and table_constraint_using_index is:" msgstr "y restricción_de_tabla_con_índice es:" -#: sql_help.c:956 sql_help.c:959 sql_help.c:2121 +#: sql_help.c:1033 sql_help.c:1036 sql_help.c:2260 msgid "tablespace_option" msgstr "opción_de_tablespace" -#: sql_help.c:980 sql_help.c:983 sql_help.c:989 sql_help.c:993 +#: sql_help.c:1057 sql_help.c:1060 sql_help.c:1066 sql_help.c:1070 msgid "token_type" msgstr "tipo_de_token" -#: sql_help.c:981 sql_help.c:984 +#: sql_help.c:1058 sql_help.c:1061 msgid "dictionary_name" msgstr "nombre_diccionario" -#: sql_help.c:986 sql_help.c:990 +#: sql_help.c:1063 sql_help.c:1067 msgid "old_dictionary" msgstr "diccionario_antiguo" -#: sql_help.c:987 sql_help.c:991 +#: sql_help.c:1064 sql_help.c:1068 msgid "new_dictionary" msgstr "diccionario_nuevo" -#: sql_help.c:1078 sql_help.c:1088 sql_help.c:1091 sql_help.c:1092 -#: sql_help.c:2254 +#: sql_help.c:1155 sql_help.c:1165 sql_help.c:1168 sql_help.c:1169 +#: sql_help.c:2409 msgid "attribute_name" msgstr "nombre_atributo" -#: sql_help.c:1079 +#: sql_help.c:1156 msgid "new_attribute_name" msgstr "nuevo_nombre_atributo" -#: sql_help.c:1085 +#: sql_help.c:1162 msgid "new_enum_value" msgstr "nuevo_valor_enum" -#: sql_help.c:1086 +#: sql_help.c:1163 msgid "existing_enum_value" msgstr "valor_enum_existente" -#: sql_help.c:1148 sql_help.c:1668 sql_help.c:1964 sql_help.c:2332 -#: sql_help.c:2703 sql_help.c:2867 sql_help.c:3146 +#: sql_help.c:1233 sql_help.c:1776 sql_help.c:2103 sql_help.c:2487 +#: sql_help.c:2876 sql_help.c:3047 sql_help.c:3082 sql_help.c:3379 msgid "server_name" msgstr "nombre_de_servidor" -#: sql_help.c:1176 sql_help.c:1179 sql_help.c:2347 +#: sql_help.c:1261 sql_help.c:1264 sql_help.c:2502 msgid "view_option_name" msgstr "nombre_opción_de_vista" -#: sql_help.c:1177 sql_help.c:2348 +#: sql_help.c:1262 sql_help.c:2503 msgid "view_option_value" msgstr "valor_opción_de_vista" -#: sql_help.c:1202 sql_help.c:3453 sql_help.c:3455 sql_help.c:3479 +#: sql_help.c:1287 sql_help.c:3707 sql_help.c:3709 sql_help.c:3733 msgid "transaction_mode" msgstr "modo_de_transacción" -#: sql_help.c:1203 sql_help.c:3456 sql_help.c:3480 +#: sql_help.c:1288 sql_help.c:3710 sql_help.c:3734 msgid "where transaction_mode is one of:" msgstr "donde modo_de_transacción es uno de:" -#: sql_help.c:1283 +#: sql_help.c:1371 msgid "relation_name" msgstr "nombre_relación" -#: sql_help.c:1310 +#: sql_help.c:1376 sql_help.c:3043 sql_help.c:3375 +msgid "domain_name" +msgstr "nombre_de_dominio" + +#: sql_help.c:1398 +msgid "policy_name" +msgstr "nombre_de_política" + +#: sql_help.c:1402 msgid "rule_name" msgstr "nombre_regla" -#: sql_help.c:1325 +#: sql_help.c:1419 msgid "text" msgstr "texto" -#: sql_help.c:1350 sql_help.c:2993 sql_help.c:3180 +#: sql_help.c:1444 sql_help.c:3225 sql_help.c:3413 msgid "transaction_id" msgstr "id_de_transacción" -#: sql_help.c:1381 sql_help.c:1387 sql_help.c:2919 +#: sql_help.c:1475 sql_help.c:1481 sql_help.c:3151 msgid "filename" msgstr "nombre_de_archivo" -#: sql_help.c:1382 sql_help.c:1388 sql_help.c:1915 sql_help.c:1916 -#: sql_help.c:1917 +#: sql_help.c:1476 sql_help.c:1482 sql_help.c:2046 sql_help.c:2047 +#: sql_help.c:2048 msgid "command" msgstr "orden" -#: sql_help.c:1386 sql_help.c:1802 sql_help.c:2107 sql_help.c:2349 -#: sql_help.c:2367 sql_help.c:2901 +#: sql_help.c:1480 sql_help.c:1916 sql_help.c:2246 sql_help.c:2504 +#: sql_help.c:2522 sql_help.c:3116 msgid "query" msgstr "consulta" -#: sql_help.c:1390 sql_help.c:2748 +#: sql_help.c:1484 sql_help.c:2921 msgid "where option can be one of:" msgstr "donde opción puede ser una de:" -#: sql_help.c:1391 +#: sql_help.c:1485 msgid "format_name" msgstr "nombre_de_formato" -#: sql_help.c:1392 sql_help.c:1393 sql_help.c:1396 sql_help.c:2749 -#: sql_help.c:2750 sql_help.c:2751 sql_help.c:2752 sql_help.c:2753 +#: sql_help.c:1486 sql_help.c:1487 sql_help.c:1490 sql_help.c:2922 +#: sql_help.c:2923 sql_help.c:2924 sql_help.c:2925 sql_help.c:2926 msgid "boolean" msgstr "booleano" -#: sql_help.c:1394 +#: sql_help.c:1488 msgid "delimiter_character" msgstr "carácter_delimitador" -#: sql_help.c:1395 +#: sql_help.c:1489 msgid "null_string" msgstr "cadena_null" -#: sql_help.c:1397 +#: sql_help.c:1491 msgid "quote_character" msgstr "carácter_de_comilla" -#: sql_help.c:1398 +#: sql_help.c:1492 msgid "escape_character" msgstr "carácter_de_escape" -#: sql_help.c:1402 +#: sql_help.c:1496 msgid "encoding_name" msgstr "nombre_codificación" -#: sql_help.c:1459 sql_help.c:1475 sql_help.c:1478 +#: sql_help.c:1553 sql_help.c:1569 sql_help.c:1572 msgid "arg_data_type" msgstr "tipo_de_dato_arg" -#: sql_help.c:1460 sql_help.c:1479 sql_help.c:1487 +#: sql_help.c:1554 sql_help.c:1573 sql_help.c:1581 msgid "sfunc" msgstr "func_transición" -#: sql_help.c:1461 sql_help.c:1480 sql_help.c:1488 +#: sql_help.c:1555 sql_help.c:1574 sql_help.c:1582 msgid "state_data_type" msgstr "tipo_de_dato_de_estado" -#: sql_help.c:1462 sql_help.c:1481 sql_help.c:1489 +#: sql_help.c:1556 sql_help.c:1575 sql_help.c:1583 msgid "state_data_size" msgstr "tamaño_de_dato_de_estado" -#: sql_help.c:1463 sql_help.c:1482 sql_help.c:1490 +#: sql_help.c:1557 sql_help.c:1576 sql_help.c:1584 msgid "ffunc" msgstr "func_final" -#: sql_help.c:1464 sql_help.c:1483 sql_help.c:1491 +#: sql_help.c:1558 sql_help.c:1577 sql_help.c:1585 msgid "initial_condition" msgstr "condición_inicial" -#: sql_help.c:1465 sql_help.c:1492 +#: sql_help.c:1559 sql_help.c:1586 msgid "msfunc" msgstr "func_transición_m" -#: sql_help.c:1466 sql_help.c:1493 +#: sql_help.c:1560 sql_help.c:1587 msgid "minvfunc" msgstr "func_inv_m" -#: sql_help.c:1467 sql_help.c:1494 +#: sql_help.c:1561 sql_help.c:1588 msgid "mstate_data_type" msgstr "tipo_de_dato_de_estado_m" -#: sql_help.c:1468 sql_help.c:1495 +#: sql_help.c:1562 sql_help.c:1589 msgid "mstate_data_size" msgstr "tamaño_de_dato_de_estado_m" -#: sql_help.c:1469 sql_help.c:1496 +#: sql_help.c:1563 sql_help.c:1590 msgid "mffunc" msgstr "func_final_m" -#: sql_help.c:1470 sql_help.c:1497 +#: sql_help.c:1564 sql_help.c:1591 msgid "minitial_condition" msgstr "condición_inicial_m" -#: sql_help.c:1471 sql_help.c:1498 +#: sql_help.c:1565 sql_help.c:1592 msgid "sort_operator" msgstr "operador_de_ordenamiento" -#: sql_help.c:1484 +#: sql_help.c:1578 msgid "or the old syntax" msgstr "o la sintaxis antigua" -#: sql_help.c:1486 +#: sql_help.c:1580 msgid "base_type" msgstr "tipo_base" -#: sql_help.c:1537 +#: sql_help.c:1631 msgid "locale" msgstr "configuración regional" -#: sql_help.c:1538 sql_help.c:1572 +#: sql_help.c:1632 sql_help.c:1668 msgid "lc_collate" msgstr "lc_collate" -#: sql_help.c:1539 sql_help.c:1573 +#: sql_help.c:1633 sql_help.c:1669 msgid "lc_ctype" msgstr "lc_ctype" -#: sql_help.c:1541 +#: sql_help.c:1635 msgid "existing_collation" msgstr "ordenamiento_existente" -#: sql_help.c:1551 +#: sql_help.c:1645 msgid "source_encoding" msgstr "codificación_origen" -#: sql_help.c:1552 +#: sql_help.c:1646 msgid "dest_encoding" msgstr "codificación_destino" -#: sql_help.c:1570 sql_help.c:2147 +#: sql_help.c:1666 sql_help.c:2286 msgid "template" msgstr "plantilla" -#: sql_help.c:1571 +#: sql_help.c:1667 msgid "encoding" msgstr "codificación" -#: sql_help.c:1596 +#: sql_help.c:1693 +msgid "constraint" +msgstr "restricción" + +#: sql_help.c:1694 msgid "where constraint is:" msgstr "donde restricción es:" -#: sql_help.c:1610 sql_help.c:1912 sql_help.c:2203 +#: sql_help.c:1708 sql_help.c:2043 sql_help.c:2358 msgid "event" msgstr "evento" -#: sql_help.c:1611 +#: sql_help.c:1709 msgid "filter_variable" msgstr "variable_de_filtrado" -#: sql_help.c:1623 +#: sql_help.c:1721 msgid "extension_name" msgstr "nombre_de_extensión" -#: sql_help.c:1625 +#: sql_help.c:1723 msgid "version" msgstr "versión" -#: sql_help.c:1626 +#: sql_help.c:1724 msgid "old_version" msgstr "versión_antigua" -#: sql_help.c:1671 sql_help.c:2053 +#: sql_help.c:1779 sql_help.c:2192 msgid "where column_constraint is:" msgstr "donde restricción_de_columna es:" -#: sql_help.c:1673 sql_help.c:1700 sql_help.c:2056 +#: sql_help.c:1782 sql_help.c:1813 sql_help.c:2195 msgid "default_expr" msgstr "expr_por_omisión" -#: sql_help.c:1701 +#: sql_help.c:1783 sql_help.c:2202 +msgid "and table_constraint is:" +msgstr "y restricción_de_tabla es:" + +#: sql_help.c:1814 msgid "rettype" msgstr "tipo_ret" -#: sql_help.c:1703 +#: sql_help.c:1816 msgid "column_type" msgstr "tipo_columna" -#: sql_help.c:1704 sql_help.c:2401 sql_help.c:2875 sql_help.c:3154 -msgid "lang_name" -msgstr "nombre_lenguaje" - -#: sql_help.c:1710 +#: sql_help.c:1824 msgid "definition" msgstr "definición" -#: sql_help.c:1711 +#: sql_help.c:1825 msgid "obj_file" msgstr "archivo_obj" -#: sql_help.c:1712 +#: sql_help.c:1826 msgid "link_symbol" msgstr "símbolo_enlace" -#: sql_help.c:1713 +#: sql_help.c:1827 msgid "attribute" msgstr "atributo" -#: sql_help.c:1748 sql_help.c:1897 sql_help.c:2321 +#: sql_help.c:1862 sql_help.c:2028 sql_help.c:2476 msgid "uid" msgstr "uid" -#: sql_help.c:1762 +#: sql_help.c:1876 msgid "method" msgstr "método" -#: sql_help.c:1766 sql_help.c:2088 +#: sql_help.c:1880 sql_help.c:2227 sql_help.c:3125 msgid "opclass" msgstr "clase_de_ops" -#: sql_help.c:1770 sql_help.c:2074 +#: sql_help.c:1884 sql_help.c:2213 msgid "predicate" msgstr "predicado" -#: sql_help.c:1782 +#: sql_help.c:1896 msgid "call_handler" msgstr "manejador_de_llamada" -#: sql_help.c:1783 +#: sql_help.c:1897 msgid "inline_handler" msgstr "manejador_en_línea" -#: sql_help.c:1784 +#: sql_help.c:1898 msgid "valfunction" msgstr "función_val" -#: sql_help.c:1820 +#: sql_help.c:1934 msgid "com_op" msgstr "op_conm" -#: sql_help.c:1821 +#: sql_help.c:1935 msgid "neg_op" msgstr "op_neg" -#: sql_help.c:1822 +#: sql_help.c:1936 msgid "res_proc" msgstr "proc_res" -#: sql_help.c:1823 +#: sql_help.c:1937 msgid "join_proc" msgstr "proc_join" -#: sql_help.c:1839 +#: sql_help.c:1953 msgid "family_name" msgstr "nombre_familia" -#: sql_help.c:1850 +#: sql_help.c:1964 msgid "storage_type" msgstr "tipo_almacenamiento" -#: sql_help.c:1914 sql_help.c:2206 sql_help.c:2383 sql_help.c:3307 -#: sql_help.c:3309 sql_help.c:3386 sql_help.c:3388 sql_help.c:3525 -#: sql_help.c:3527 sql_help.c:3615 sql_help.c:3694 sql_help.c:3696 +#: sql_help.c:2045 sql_help.c:2361 sql_help.c:2538 sql_help.c:3135 +#: sql_help.c:3550 sql_help.c:3552 sql_help.c:3640 sql_help.c:3642 +#: sql_help.c:3789 sql_help.c:3791 sql_help.c:3894 sql_help.c:3983 +#: sql_help.c:3985 msgid "condition" msgstr "condición" -#: sql_help.c:1918 sql_help.c:2209 +#: sql_help.c:2049 sql_help.c:2364 msgid "where event can be one of:" msgstr "donde evento puede ser una de:" -#: sql_help.c:1931 sql_help.c:1933 +#: sql_help.c:2068 sql_help.c:2070 msgid "schema_element" msgstr "elemento_de_esquema" -#: sql_help.c:1965 +#: sql_help.c:2104 msgid "server_type" msgstr "tipo_de_servidor" -#: sql_help.c:1966 +#: sql_help.c:2105 msgid "server_version" msgstr "versión_de_servidor" -#: sql_help.c:1967 sql_help.c:2865 sql_help.c:3144 +#: sql_help.c:2106 sql_help.c:3045 sql_help.c:3377 msgid "fdw_name" msgstr "nombre_fdw" -#: sql_help.c:2039 +#: sql_help.c:2178 msgid "source_table" msgstr "tabla_origen" -#: sql_help.c:2040 +#: sql_help.c:2179 msgid "like_option" msgstr "opción_de_like" -#: sql_help.c:2057 sql_help.c:2058 sql_help.c:2067 sql_help.c:2069 -#: sql_help.c:2073 +#: sql_help.c:2196 sql_help.c:2197 sql_help.c:2206 sql_help.c:2208 +#: sql_help.c:2212 msgid "index_parameters" msgstr "parámetros_de_índice" -#: sql_help.c:2059 sql_help.c:2076 +#: sql_help.c:2198 sql_help.c:2215 msgid "reftable" msgstr "tabla_ref" -#: sql_help.c:2060 sql_help.c:2077 +#: sql_help.c:2199 sql_help.c:2216 msgid "refcolumn" msgstr "columna_ref" -#: sql_help.c:2063 -msgid "and table_constraint is:" -msgstr "y restricción_de_tabla es:" - -#: sql_help.c:2071 +#: sql_help.c:2210 msgid "exclude_element" msgstr "elemento_de_exclusión" -#: sql_help.c:2072 sql_help.c:3314 sql_help.c:3393 sql_help.c:3532 -#: sql_help.c:3646 sql_help.c:3701 +#: sql_help.c:2211 sql_help.c:3557 sql_help.c:3647 sql_help.c:3796 +#: sql_help.c:3925 sql_help.c:3990 msgid "operator" msgstr "operador" -#: sql_help.c:2080 +#: sql_help.c:2219 msgid "and like_option is:" msgstr "y opción_de_like es:" -#: sql_help.c:2081 +#: sql_help.c:2220 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "parámetros_de_índice en UNIQUE, PRIMARY KEY y EXCLUDE son:" -#: sql_help.c:2085 +#: sql_help.c:2224 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "elemento_de_exclusión en una restricción EXCLUDE es:" -#: sql_help.c:2120 +#: sql_help.c:2259 msgid "directory" msgstr "directorio" -#: sql_help.c:2134 +#: sql_help.c:2273 msgid "parser_name" msgstr "nombre_de_parser" -#: sql_help.c:2135 +#: sql_help.c:2274 msgid "source_config" msgstr "config_origen" -#: sql_help.c:2164 +#: sql_help.c:2303 msgid "start_function" msgstr "función_inicio" -#: sql_help.c:2165 +#: sql_help.c:2304 msgid "gettoken_function" msgstr "función_gettoken" -#: sql_help.c:2166 +#: sql_help.c:2305 msgid "end_function" msgstr "función_fin" -#: sql_help.c:2167 +#: sql_help.c:2306 msgid "lextypes_function" msgstr "función_lextypes" -#: sql_help.c:2168 +#: sql_help.c:2307 msgid "headline_function" msgstr "función_headline" -#: sql_help.c:2180 +#: sql_help.c:2319 msgid "init_function" msgstr "función_init" -#: sql_help.c:2181 +#: sql_help.c:2320 msgid "lexize_function" msgstr "función_lexize" -#: sql_help.c:2205 +#: sql_help.c:2333 +msgid "from_sql_function_name" +msgstr "nombre_de_función_from" + +#: sql_help.c:2335 +msgid "to_sql_function_name" +msgstr "nombre_de_función_to" + +#: sql_help.c:2360 msgid "referenced_table_name" msgstr "nombre_tabla_referenciada" -#: sql_help.c:2208 +#: sql_help.c:2363 msgid "arguments" msgstr "argumentos" -#: sql_help.c:2258 sql_help.c:3252 +#: sql_help.c:2413 sql_help.c:3485 msgid "label" msgstr "etiqueta" -#: sql_help.c:2260 +#: sql_help.c:2415 msgid "subtype" msgstr "subtipo" -#: sql_help.c:2261 +#: sql_help.c:2416 msgid "subtype_operator_class" msgstr "clase_de_operador_del_subtipo" -#: sql_help.c:2263 +#: sql_help.c:2418 msgid "canonical_function" msgstr "función_canónica" -#: sql_help.c:2264 +#: sql_help.c:2419 msgid "subtype_diff_function" msgstr "función_diff_del_subtipo" -#: sql_help.c:2266 +#: sql_help.c:2421 msgid "input_function" msgstr "función_entrada" -#: sql_help.c:2267 +#: sql_help.c:2422 msgid "output_function" msgstr "función_salida" -#: sql_help.c:2268 +#: sql_help.c:2423 msgid "receive_function" msgstr "función_receive" -#: sql_help.c:2269 +#: sql_help.c:2424 msgid "send_function" msgstr "función_send" -#: sql_help.c:2270 +#: sql_help.c:2425 msgid "type_modifier_input_function" msgstr "función_entrada_del_modificador_de_tipo" -#: sql_help.c:2271 +#: sql_help.c:2426 msgid "type_modifier_output_function" msgstr "función_salida_del_modificador_de_tipo" -#: sql_help.c:2272 +#: sql_help.c:2427 msgid "analyze_function" msgstr "función_analyze" -#: sql_help.c:2273 +#: sql_help.c:2428 msgid "internallength" msgstr "largo_interno" -#: sql_help.c:2274 +#: sql_help.c:2429 msgid "alignment" msgstr "alineamiento" -#: sql_help.c:2275 +#: sql_help.c:2430 msgid "storage" msgstr "almacenamiento" -#: sql_help.c:2276 +#: sql_help.c:2431 msgid "like_type" msgstr "como_tipo" -#: sql_help.c:2277 +#: sql_help.c:2432 msgid "category" msgstr "categoría" -#: sql_help.c:2278 +#: sql_help.c:2433 msgid "preferred" msgstr "preferido" -#: sql_help.c:2279 +#: sql_help.c:2434 msgid "default" msgstr "valor_por_omisión" -#: sql_help.c:2280 +#: sql_help.c:2435 msgid "element" msgstr "elemento" -#: sql_help.c:2281 +#: sql_help.c:2436 msgid "delimiter" msgstr "delimitador" -#: sql_help.c:2282 +#: sql_help.c:2437 msgid "collatable" msgstr "ordenable" -#: sql_help.c:2379 sql_help.c:2897 sql_help.c:3302 sql_help.c:3380 -#: sql_help.c:3520 sql_help.c:3607 sql_help.c:3689 +#: sql_help.c:2534 sql_help.c:3111 sql_help.c:3545 sql_help.c:3634 +#: sql_help.c:3784 sql_help.c:3884 sql_help.c:3978 msgid "with_query" msgstr "consulta_with" -#: sql_help.c:2381 sql_help.c:3321 sql_help.c:3324 sql_help.c:3327 -#: sql_help.c:3331 sql_help.c:3335 sql_help.c:3343 sql_help.c:3539 -#: sql_help.c:3542 sql_help.c:3545 sql_help.c:3549 sql_help.c:3553 -#: sql_help.c:3561 sql_help.c:3609 sql_help.c:3708 sql_help.c:3711 -#: sql_help.c:3714 sql_help.c:3718 sql_help.c:3722 sql_help.c:3730 +#: sql_help.c:2536 sql_help.c:3113 sql_help.c:3564 sql_help.c:3570 +#: sql_help.c:3573 sql_help.c:3577 sql_help.c:3581 sql_help.c:3589 +#: sql_help.c:3803 sql_help.c:3809 sql_help.c:3812 sql_help.c:3816 +#: sql_help.c:3820 sql_help.c:3828 sql_help.c:3886 sql_help.c:3997 +#: sql_help.c:4003 sql_help.c:4006 sql_help.c:4010 sql_help.c:4014 +#: sql_help.c:4022 msgid "alias" msgstr "alias" -#: sql_help.c:2382 +#: sql_help.c:2537 msgid "using_list" msgstr "lista_using" -#: sql_help.c:2384 sql_help.c:2779 sql_help.c:2960 sql_help.c:3616 +#: sql_help.c:2539 sql_help.c:2952 sql_help.c:3192 sql_help.c:3895 msgid "cursor_name" msgstr "nombre_de_cursor" -#: sql_help.c:2385 sql_help.c:2902 sql_help.c:3617 +#: sql_help.c:2540 sql_help.c:3119 sql_help.c:3896 msgid "output_expression" msgstr "expresión_de_salida" -#: sql_help.c:2386 sql_help.c:2903 sql_help.c:3305 sql_help.c:3383 -#: sql_help.c:3523 sql_help.c:3618 sql_help.c:3692 +#: sql_help.c:2541 sql_help.c:3120 sql_help.c:3548 sql_help.c:3637 +#: sql_help.c:3787 sql_help.c:3897 sql_help.c:3981 msgid "output_name" msgstr "nombre_de_salida" -#: sql_help.c:2402 +#: sql_help.c:2557 msgid "code" msgstr "código" -#: sql_help.c:2727 +#: sql_help.c:2900 msgid "parameter" msgstr "parámetro" -#: sql_help.c:2746 sql_help.c:2747 sql_help.c:2985 +#: sql_help.c:2919 sql_help.c:2920 sql_help.c:3217 msgid "statement" msgstr "sentencia" -#: sql_help.c:2778 sql_help.c:2959 +#: sql_help.c:2951 sql_help.c:3191 msgid "direction" msgstr "dirección" -#: sql_help.c:2780 sql_help.c:2961 +#: sql_help.c:2953 sql_help.c:3193 msgid "where direction can be empty or one of:" msgstr "donde dirección puede ser vacío o uno de:" -#: sql_help.c:2781 sql_help.c:2782 sql_help.c:2783 sql_help.c:2784 -#: sql_help.c:2785 sql_help.c:2962 sql_help.c:2963 sql_help.c:2964 -#: sql_help.c:2965 sql_help.c:2966 sql_help.c:3315 sql_help.c:3317 -#: sql_help.c:3394 sql_help.c:3396 sql_help.c:3533 sql_help.c:3535 -#: sql_help.c:3647 sql_help.c:3649 sql_help.c:3702 sql_help.c:3704 +#: sql_help.c:2954 sql_help.c:2955 sql_help.c:2956 sql_help.c:2957 +#: sql_help.c:2958 sql_help.c:3194 sql_help.c:3195 sql_help.c:3196 +#: sql_help.c:3197 sql_help.c:3198 sql_help.c:3558 sql_help.c:3560 +#: sql_help.c:3648 sql_help.c:3650 sql_help.c:3797 sql_help.c:3799 +#: sql_help.c:3926 sql_help.c:3928 sql_help.c:3991 sql_help.c:3993 msgid "count" msgstr "cantidad" -#: sql_help.c:2858 sql_help.c:3137 +#: sql_help.c:3038 sql_help.c:3370 msgid "sequence_name" msgstr "nombre_secuencia" -#: sql_help.c:2863 sql_help.c:3142 -msgid "domain_name" -msgstr "nombre_de_dominio" - -#: sql_help.c:2871 sql_help.c:3150 +#: sql_help.c:3051 sql_help.c:3383 msgid "arg_name" msgstr "nombre_arg" -#: sql_help.c:2872 sql_help.c:3151 +#: sql_help.c:3052 sql_help.c:3384 msgid "arg_type" msgstr "tipo_arg" -#: sql_help.c:2877 sql_help.c:3156 +#: sql_help.c:3057 sql_help.c:3389 msgid "loid" msgstr "loid" -#: sql_help.c:2911 sql_help.c:2974 sql_help.c:3593 +#: sql_help.c:3080 +msgid "remote_schema" +msgstr "schema_remoto" + +#: sql_help.c:3083 +msgid "local_schema" +msgstr "schema_local" + +#: sql_help.c:3117 +msgid "conflict_target" +msgstr "destino_de_conflict" + +#: sql_help.c:3118 +msgid "conflict_action" +msgstr "acción_de_conflict" + +#: sql_help.c:3121 +msgid "where conflict_target can be one of:" +msgstr "donde destino_de_conflict puede ser uno de:" + +#: sql_help.c:3122 +msgid "column_name_index" +msgstr "nombre_de_columna_en_índice" + +#: sql_help.c:3123 +msgid "expression_index" +msgstr "expresión_índice" + +#: sql_help.c:3126 +msgid "index_predicate" +msgstr "predicado_de_índice" + +#: sql_help.c:3128 +msgid "and conflict_action is one of:" +msgstr "donde acción_de_conflict es una de:" + +#: sql_help.c:3134 sql_help.c:3892 +msgid "sub-SELECT" +msgstr "sub-SELECT" + +#: sql_help.c:3143 sql_help.c:3206 sql_help.c:3868 msgid "channel" msgstr "canal" -#: sql_help.c:2933 +#: sql_help.c:3165 msgid "lockmode" msgstr "modo_bloqueo" -#: sql_help.c:2934 +#: sql_help.c:3166 msgid "where lockmode is one of:" msgstr "donde modo_bloqueo es uno de:" -#: sql_help.c:2975 +#: sql_help.c:3207 msgid "payload" msgstr "carga" -#: sql_help.c:3001 +#: sql_help.c:3234 msgid "old_role" msgstr "rol_antiguo" -#: sql_help.c:3002 +#: sql_help.c:3235 msgid "new_role" msgstr "rol_nuevo" -#: sql_help.c:3027 sql_help.c:3188 sql_help.c:3196 +#: sql_help.c:3260 sql_help.c:3421 sql_help.c:3429 msgid "savepoint_name" msgstr "nombre_de_savepoint" -#: sql_help.c:3229 +#: sql_help.c:3462 msgid "provider" msgstr "proveedor" -#: sql_help.c:3306 sql_help.c:3345 sql_help.c:3347 sql_help.c:3385 -#: sql_help.c:3524 sql_help.c:3563 sql_help.c:3565 sql_help.c:3693 -#: sql_help.c:3732 sql_help.c:3734 +#: sql_help.c:3549 sql_help.c:3591 sql_help.c:3593 sql_help.c:3639 +#: sql_help.c:3788 sql_help.c:3830 sql_help.c:3832 sql_help.c:3982 +#: sql_help.c:4024 sql_help.c:4026 msgid "from_item" msgstr "item_de_from" -#: sql_help.c:3310 sql_help.c:3389 sql_help.c:3528 sql_help.c:3697 +#: sql_help.c:3551 sql_help.c:3603 sql_help.c:3790 sql_help.c:3842 +#: sql_help.c:3984 sql_help.c:4036 +msgid "grouping_element" +msgstr "elemento_agrupante" + +#: sql_help.c:3553 sql_help.c:3643 sql_help.c:3792 sql_help.c:3986 msgid "window_name" msgstr "nombre_de_ventana" -#: sql_help.c:3311 sql_help.c:3390 sql_help.c:3529 sql_help.c:3698 +#: sql_help.c:3554 sql_help.c:3644 sql_help.c:3793 sql_help.c:3987 msgid "window_definition" msgstr "definición_de_ventana" -#: sql_help.c:3312 sql_help.c:3323 sql_help.c:3353 sql_help.c:3391 -#: sql_help.c:3530 sql_help.c:3541 sql_help.c:3571 sql_help.c:3699 -#: sql_help.c:3710 sql_help.c:3740 +#: sql_help.c:3555 sql_help.c:3569 sql_help.c:3607 sql_help.c:3645 +#: sql_help.c:3794 sql_help.c:3808 sql_help.c:3846 sql_help.c:3988 +#: sql_help.c:4002 sql_help.c:4040 msgid "select" msgstr "select" -#: sql_help.c:3319 sql_help.c:3537 sql_help.c:3706 +#: sql_help.c:3562 sql_help.c:3801 sql_help.c:3995 msgid "where from_item can be one of:" msgstr "donde item_de_from puede ser uno de:" -#: sql_help.c:3322 sql_help.c:3325 sql_help.c:3328 sql_help.c:3332 -#: sql_help.c:3344 sql_help.c:3540 sql_help.c:3543 sql_help.c:3546 -#: sql_help.c:3550 sql_help.c:3562 sql_help.c:3709 sql_help.c:3712 -#: sql_help.c:3715 sql_help.c:3719 sql_help.c:3731 +#: sql_help.c:3565 sql_help.c:3571 sql_help.c:3574 sql_help.c:3578 +#: sql_help.c:3590 sql_help.c:3804 sql_help.c:3810 sql_help.c:3813 +#: sql_help.c:3817 sql_help.c:3829 sql_help.c:3998 sql_help.c:4004 +#: sql_help.c:4007 sql_help.c:4011 sql_help.c:4023 msgid "column_alias" msgstr "alias_de_columna" -#: sql_help.c:3326 sql_help.c:3351 sql_help.c:3544 sql_help.c:3569 -#: sql_help.c:3713 sql_help.c:3738 -msgid "with_query_name" -msgstr "nombre_consulta_with" +#: sql_help.c:3566 sql_help.c:3805 sql_help.c:3999 +msgid "sampling_method" +msgstr "método_de_sampleo" -#: sql_help.c:3330 sql_help.c:3334 sql_help.c:3338 sql_help.c:3341 -#: sql_help.c:3548 sql_help.c:3552 sql_help.c:3556 sql_help.c:3559 -#: sql_help.c:3717 sql_help.c:3721 sql_help.c:3725 sql_help.c:3728 +#: sql_help.c:3567 sql_help.c:3576 sql_help.c:3580 sql_help.c:3584 +#: sql_help.c:3587 sql_help.c:3806 sql_help.c:3815 sql_help.c:3819 +#: sql_help.c:3823 sql_help.c:3826 sql_help.c:4000 sql_help.c:4009 +#: sql_help.c:4013 sql_help.c:4017 sql_help.c:4020 msgid "argument" msgstr "argumento" -#: sql_help.c:3336 sql_help.c:3339 sql_help.c:3342 sql_help.c:3554 -#: sql_help.c:3557 sql_help.c:3560 sql_help.c:3723 sql_help.c:3726 -#: sql_help.c:3729 +#: sql_help.c:3568 sql_help.c:3807 sql_help.c:4001 +msgid "seed" +msgstr "semilla" + +#: sql_help.c:3572 sql_help.c:3605 sql_help.c:3811 sql_help.c:3844 +#: sql_help.c:4005 sql_help.c:4038 +msgid "with_query_name" +msgstr "nombre_consulta_with" + +#: sql_help.c:3582 sql_help.c:3585 sql_help.c:3588 sql_help.c:3821 +#: sql_help.c:3824 sql_help.c:3827 sql_help.c:4015 sql_help.c:4018 +#: sql_help.c:4021 msgid "column_definition" msgstr "definición_de_columna" -#: sql_help.c:3346 sql_help.c:3564 sql_help.c:3733 +#: sql_help.c:3592 sql_help.c:3831 sql_help.c:4025 msgid "join_type" msgstr "tipo_de_join" -#: sql_help.c:3348 sql_help.c:3566 sql_help.c:3735 +#: sql_help.c:3594 sql_help.c:3833 sql_help.c:4027 msgid "join_condition" msgstr "condición_de_join" -#: sql_help.c:3349 sql_help.c:3567 sql_help.c:3736 +#: sql_help.c:3595 sql_help.c:3834 sql_help.c:4028 msgid "join_column" msgstr "columna_de_join" -#: sql_help.c:3350 sql_help.c:3568 sql_help.c:3737 +#: sql_help.c:3596 sql_help.c:3835 sql_help.c:4029 +msgid "and grouping_element can be one of:" +msgstr "donde elemento_agrupante puede ser una de:" + +#: sql_help.c:3604 sql_help.c:3843 sql_help.c:4037 msgid "and with_query is:" msgstr "y consulta_with es:" -#: sql_help.c:3354 sql_help.c:3572 sql_help.c:3741 +#: sql_help.c:3608 sql_help.c:3847 sql_help.c:4041 msgid "values" msgstr "valores" -#: sql_help.c:3355 sql_help.c:3573 sql_help.c:3742 +#: sql_help.c:3609 sql_help.c:3848 sql_help.c:4042 msgid "insert" msgstr "insert" -#: sql_help.c:3356 sql_help.c:3574 sql_help.c:3743 +#: sql_help.c:3610 sql_help.c:3849 sql_help.c:4043 msgid "update" msgstr "update" -#: sql_help.c:3357 sql_help.c:3575 sql_help.c:3744 +#: sql_help.c:3611 sql_help.c:3850 sql_help.c:4044 msgid "delete" msgstr "delete" -#: sql_help.c:3384 +#: sql_help.c:3638 msgid "new_table" msgstr "nueva_tabla" -#: sql_help.c:3409 +#: sql_help.c:3663 msgid "timezone" msgstr "huso_horario" -#: sql_help.c:3454 +#: sql_help.c:3708 msgid "snapshot_id" msgstr "id_de_snapshot" -#: sql_help.c:3614 +#: sql_help.c:3893 msgid "from_list" msgstr "lista_from" -#: sql_help.c:3645 +#: sql_help.c:3924 msgid "sort_expression" msgstr "expresión_orden" -#: sql_help.h:191 sql_help.h:891 +#: sql_help.h:197 sql_help.h:927 msgid "abort the current transaction" msgstr "aborta la transacción en curso" -#: sql_help.h:196 +#: sql_help.h:202 msgid "change the definition of an aggregate function" msgstr "cambia la definición de una función de agregación" -#: sql_help.h:201 +#: sql_help.h:207 msgid "change the definition of a collation" msgstr "cambia la definición de un ordenamiento" -#: sql_help.h:206 +#: sql_help.h:212 msgid "change the definition of a conversion" msgstr "cambia la definición de una conversión" -#: sql_help.h:211 +#: sql_help.h:217 msgid "change a database" msgstr "cambia una base de datos" -#: sql_help.h:216 +#: sql_help.h:222 msgid "define default access privileges" msgstr "define privilegios de acceso por omisión" -#: sql_help.h:221 +#: sql_help.h:227 msgid "change the definition of a domain" msgstr "cambia la definición de un dominio" -#: sql_help.h:226 +#: sql_help.h:232 msgid "change the definition of an event trigger" msgstr "cambia la definición de un disparador por evento" -#: sql_help.h:231 +#: sql_help.h:237 msgid "change the definition of an extension" msgstr "cambia la definición de una extensión" -#: sql_help.h:236 +#: sql_help.h:242 msgid "change the definition of a foreign-data wrapper" msgstr "cambia la definición de un conector de datos externos" -#: sql_help.h:241 +#: sql_help.h:247 msgid "change the definition of a foreign table" msgstr "cambia la definición de una tabla foránea" -#: sql_help.h:246 +#: sql_help.h:252 msgid "change the definition of a function" msgstr "cambia la definición de una función" -#: sql_help.h:251 +#: sql_help.h:257 msgid "change role name or membership" msgstr "cambiar nombre del rol o membresía" -#: sql_help.h:256 +#: sql_help.h:262 msgid "change the definition of an index" msgstr "cambia la definición de un índice" -#: sql_help.h:261 +#: sql_help.h:267 msgid "change the definition of a procedural language" msgstr "cambia la definición de un lenguaje procedural" -#: sql_help.h:266 +#: sql_help.h:272 msgid "change the definition of a large object" msgstr "cambia la definición de un objeto grande" -#: sql_help.h:271 +#: sql_help.h:277 msgid "change the definition of a materialized view" msgstr "cambia la definición de una vista materializada" -#: sql_help.h:276 +#: sql_help.h:282 msgid "change the definition of an operator" msgstr "cambia la definición de un operador" -#: sql_help.h:281 +#: sql_help.h:287 msgid "change the definition of an operator class" msgstr "cambia la definición de una clase de operadores" -#: sql_help.h:286 +#: sql_help.h:292 msgid "change the definition of an operator family" msgstr "cambia la definición de una familia de operadores" -#: sql_help.h:291 sql_help.h:361 +#: sql_help.h:297 +msgid "change the definition of a policy" +msgstr "cambia la definición de una política" + +#: sql_help.h:302 sql_help.h:372 msgid "change a database role" msgstr "cambia un rol de la base de datos" -#: sql_help.h:296 +#: sql_help.h:307 msgid "change the definition of a rule" msgstr "cambia la definición de una regla" -#: sql_help.h:301 +#: sql_help.h:312 msgid "change the definition of a schema" msgstr "cambia la definición de un esquema" -#: sql_help.h:306 +#: sql_help.h:317 msgid "change the definition of a sequence generator" msgstr "cambia la definición de un generador secuencial" -#: sql_help.h:311 +#: sql_help.h:322 msgid "change the definition of a foreign server" msgstr "cambia la definición de un servidor foráneo" -#: sql_help.h:316 +#: sql_help.h:327 msgid "change a server configuration parameter" msgstr "cambia un parámetro de configuración del servidor" -#: sql_help.h:321 +#: sql_help.h:332 msgid "change the definition of a table" msgstr "cambia la definición de una tabla" -#: sql_help.h:326 +#: sql_help.h:337 msgid "change the definition of a tablespace" msgstr "cambia la definición de un tablespace" -#: sql_help.h:331 +#: sql_help.h:342 msgid "change the definition of a text search configuration" msgstr "cambia la definición de una configuración de búsqueda en texto" -#: sql_help.h:336 +#: sql_help.h:347 msgid "change the definition of a text search dictionary" msgstr "cambia la definición de un diccionario de búsqueda en texto" -#: sql_help.h:341 +#: sql_help.h:352 msgid "change the definition of a text search parser" msgstr "cambia la definición de un analizador de búsqueda en texto" -#: sql_help.h:346 +#: sql_help.h:357 msgid "change the definition of a text search template" msgstr "cambia la definición de una plantilla de búsqueda en texto" -#: sql_help.h:351 +#: sql_help.h:362 msgid "change the definition of a trigger" msgstr "cambia la definición de un disparador" -#: sql_help.h:356 +#: sql_help.h:367 msgid "change the definition of a type" msgstr "cambia la definición de un tipo" -#: sql_help.h:366 +#: sql_help.h:377 msgid "change the definition of a user mapping" msgstr "cambia la definición de un mapeo de usuario" -#: sql_help.h:371 +#: sql_help.h:382 msgid "change the definition of a view" msgstr "cambia la definición de una vista" -#: sql_help.h:376 +#: sql_help.h:387 msgid "collect statistics about a database" msgstr "recolecta estadísticas sobre una base de datos" -#: sql_help.h:381 sql_help.h:956 +#: sql_help.h:392 sql_help.h:992 msgid "start a transaction block" msgstr "inicia un bloque de transacción" -#: sql_help.h:386 +#: sql_help.h:397 msgid "force a transaction log checkpoint" msgstr "fuerza un checkpoint del registro de transacciones" -#: sql_help.h:391 +#: sql_help.h:402 msgid "close a cursor" msgstr "cierra un cursor" -#: sql_help.h:396 +#: sql_help.h:407 msgid "cluster a table according to an index" msgstr "reordena una tabla siguiendo un índice" -#: sql_help.h:401 +#: sql_help.h:412 msgid "define or change the comment of an object" msgstr "define o cambia un comentario sobre un objeto" -#: sql_help.h:406 sql_help.h:796 +#: sql_help.h:417 sql_help.h:827 msgid "commit the current transaction" msgstr "compromete la transacción en curso" -#: sql_help.h:411 +#: sql_help.h:422 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "confirma una transacción que fue preparada para two-phase commit" -#: sql_help.h:416 +#: sql_help.h:427 msgid "copy data between a file and a table" msgstr "copia datos entre un archivo y una tabla" -#: sql_help.h:421 +#: sql_help.h:432 msgid "define a new aggregate function" msgstr "define una nueva función de agregación" -#: sql_help.h:426 +#: sql_help.h:437 msgid "define a new cast" msgstr "define una nueva conversión de tipo" -#: sql_help.h:431 +#: sql_help.h:442 msgid "define a new collation" msgstr "define un nuevo ordenamiento" -#: sql_help.h:436 +#: sql_help.h:447 msgid "define a new encoding conversion" msgstr "define una nueva conversión de codificación" -#: sql_help.h:441 +#: sql_help.h:452 msgid "create a new database" msgstr "crea una nueva base de datos" -#: sql_help.h:446 +#: sql_help.h:457 msgid "define a new domain" msgstr "define un nuevo dominio" -#: sql_help.h:451 +#: sql_help.h:462 msgid "define a new event trigger" msgstr "define un nuevo disparador por evento" -#: sql_help.h:456 +#: sql_help.h:467 msgid "install an extension" msgstr "instala una extensión" -#: sql_help.h:461 +#: sql_help.h:472 msgid "define a new foreign-data wrapper" msgstr "define un nuevo conector de datos externos" -#: sql_help.h:466 +#: sql_help.h:477 msgid "define a new foreign table" msgstr "define una nueva tabla foránea" -#: sql_help.h:471 +#: sql_help.h:482 msgid "define a new function" msgstr "define una nueva función" -#: sql_help.h:476 sql_help.h:511 sql_help.h:581 +#: sql_help.h:487 sql_help.h:527 sql_help.h:602 msgid "define a new database role" msgstr "define un nuevo rol de la base de datos" -#: sql_help.h:481 +#: sql_help.h:492 msgid "define a new index" msgstr "define un nuevo índice" -#: sql_help.h:486 +#: sql_help.h:497 msgid "define a new procedural language" msgstr "define un nuevo lenguaje procedural" -#: sql_help.h:491 +#: sql_help.h:502 msgid "define a new materialized view" msgstr "define una nueva vista materializada" -#: sql_help.h:496 +#: sql_help.h:507 msgid "define a new operator" msgstr "define un nuevo operador" -#: sql_help.h:501 +#: sql_help.h:512 msgid "define a new operator class" msgstr "define una nueva clase de operadores" -#: sql_help.h:506 +#: sql_help.h:517 msgid "define a new operator family" msgstr "define una nueva familia de operadores" -#: sql_help.h:516 +#: sql_help.h:522 +msgid "define a new policy for a table" +msgstr "define una nueva política para una tabla" + +#: sql_help.h:532 msgid "define a new rewrite rule" msgstr "define una nueva regla de reescritura" -#: sql_help.h:521 +#: sql_help.h:537 msgid "define a new schema" msgstr "define un nuevo schema" -#: sql_help.h:526 +#: sql_help.h:542 msgid "define a new sequence generator" msgstr "define un nuevo generador secuencial" -#: sql_help.h:531 +#: sql_help.h:547 msgid "define a new foreign server" msgstr "define un nuevo servidor foráneo" -#: sql_help.h:536 +#: sql_help.h:552 msgid "define a new table" msgstr "define una nueva tabla" -#: sql_help.h:541 sql_help.h:921 +#: sql_help.h:557 sql_help.h:957 msgid "define a new table from the results of a query" msgstr "crea una nueva tabla usando los resultados de una consulta" -#: sql_help.h:546 +#: sql_help.h:562 msgid "define a new tablespace" msgstr "define un nuevo tablespace" -#: sql_help.h:551 +#: sql_help.h:567 msgid "define a new text search configuration" msgstr "define una nueva configuración de búsqueda en texto" -#: sql_help.h:556 +#: sql_help.h:572 msgid "define a new text search dictionary" msgstr "define un nuevo diccionario de búsqueda en texto" -#: sql_help.h:561 +#: sql_help.h:577 msgid "define a new text search parser" msgstr "define un nuevo analizador de búsqueda en texto" -#: sql_help.h:566 +#: sql_help.h:582 msgid "define a new text search template" msgstr "define una nueva plantilla de búsqueda en texto" -#: sql_help.h:571 +#: sql_help.h:587 +msgid "define a new transform" +msgstr "define una nueva transformación" + +#: sql_help.h:592 msgid "define a new trigger" msgstr "define un nuevo disparador" -#: sql_help.h:576 +#: sql_help.h:597 msgid "define a new data type" msgstr "define un nuevo tipo de datos" -#: sql_help.h:586 +#: sql_help.h:607 msgid "define a new mapping of a user to a foreign server" msgstr "define un nuevo mapa de usuario a servidor foráneo" -#: sql_help.h:591 +#: sql_help.h:612 msgid "define a new view" msgstr "define una nueva vista" -#: sql_help.h:596 +#: sql_help.h:617 msgid "deallocate a prepared statement" msgstr "elimina una sentencia preparada" -#: sql_help.h:601 +#: sql_help.h:622 msgid "define a cursor" msgstr "define un nuevo cursor" -#: sql_help.h:606 +#: sql_help.h:627 msgid "delete rows of a table" msgstr "elimina filas de una tabla" -#: sql_help.h:611 +#: sql_help.h:632 msgid "discard session state" msgstr "descartar datos de la sesión" -#: sql_help.h:616 +#: sql_help.h:637 msgid "execute an anonymous code block" msgstr "ejecutar un bloque anónimo de código" -#: sql_help.h:621 +#: sql_help.h:642 msgid "remove an aggregate function" msgstr "elimina una función de agregación" -#: sql_help.h:626 +#: sql_help.h:647 msgid "remove a cast" msgstr "elimina una conversión de tipo" -#: sql_help.h:631 +#: sql_help.h:652 msgid "remove a collation" msgstr "elimina un ordenamiento" -#: sql_help.h:636 +#: sql_help.h:657 msgid "remove a conversion" msgstr "elimina una conversión de codificación" -#: sql_help.h:641 +#: sql_help.h:662 msgid "remove a database" msgstr "elimina una base de datos" -#: sql_help.h:646 +#: sql_help.h:667 msgid "remove a domain" msgstr "elimina un dominio" -#: sql_help.h:651 +#: sql_help.h:672 msgid "remove an event trigger" msgstr "elimina un disparador por evento" -#: sql_help.h:656 +#: sql_help.h:677 msgid "remove an extension" msgstr "elimina una extensión" -#: sql_help.h:661 +#: sql_help.h:682 msgid "remove a foreign-data wrapper" msgstr "elimina un conector de datos externos" -#: sql_help.h:666 +#: sql_help.h:687 msgid "remove a foreign table" msgstr "elimina una tabla foránea" -#: sql_help.h:671 +#: sql_help.h:692 msgid "remove a function" msgstr "elimina una función" -#: sql_help.h:676 sql_help.h:716 sql_help.h:781 +#: sql_help.h:697 sql_help.h:742 sql_help.h:812 msgid "remove a database role" msgstr "elimina un rol de base de datos" -#: sql_help.h:681 +#: sql_help.h:702 msgid "remove an index" msgstr "elimina un índice" -#: sql_help.h:686 +#: sql_help.h:707 msgid "remove a procedural language" msgstr "elimina un lenguaje procedural" -#: sql_help.h:691 +#: sql_help.h:712 msgid "remove a materialized view" msgstr "elimina una vista materializada" -#: sql_help.h:696 +#: sql_help.h:717 msgid "remove an operator" msgstr "elimina un operador" -#: sql_help.h:701 +#: sql_help.h:722 msgid "remove an operator class" msgstr "elimina una clase de operadores" -#: sql_help.h:706 +#: sql_help.h:727 msgid "remove an operator family" msgstr "elimina una familia de operadores" -#: sql_help.h:711 +#: sql_help.h:732 msgid "remove database objects owned by a database role" msgstr "elimina objetos de propiedad de un rol de la base de datos" -#: sql_help.h:721 +#: sql_help.h:737 +msgid "remove a policy from a table" +msgstr "elimina una política de una tabla" + +#: sql_help.h:747 msgid "remove a rewrite rule" msgstr "elimina una regla de reescritura" -#: sql_help.h:726 +#: sql_help.h:752 msgid "remove a schema" msgstr "elimina un schema" -#: sql_help.h:731 +#: sql_help.h:757 msgid "remove a sequence" msgstr "elimina un generador secuencial" -#: sql_help.h:736 +#: sql_help.h:762 msgid "remove a foreign server descriptor" msgstr "elimina un descriptor de servidor foráneo" -#: sql_help.h:741 +#: sql_help.h:767 msgid "remove a table" msgstr "elimina una tabla" -#: sql_help.h:746 +#: sql_help.h:772 msgid "remove a tablespace" msgstr "elimina un tablespace" -#: sql_help.h:751 +#: sql_help.h:777 msgid "remove a text search configuration" msgstr "elimina una configuración de búsqueda en texto" -#: sql_help.h:756 +#: sql_help.h:782 msgid "remove a text search dictionary" msgstr "elimina un diccionario de búsqueda en texto" -#: sql_help.h:761 +#: sql_help.h:787 msgid "remove a text search parser" msgstr "elimina un analizador de búsqueda en texto" -#: sql_help.h:766 +#: sql_help.h:792 msgid "remove a text search template" msgstr "elimina una plantilla de búsqueda en texto" -#: sql_help.h:771 +#: sql_help.h:797 +msgid "remove a transform" +msgstr "elimina una transformación" + +#: sql_help.h:802 msgid "remove a trigger" msgstr "elimina un disparador" -#: sql_help.h:776 +#: sql_help.h:807 msgid "remove a data type" msgstr "elimina un tipo de datos" -#: sql_help.h:786 +#: sql_help.h:817 msgid "remove a user mapping for a foreign server" msgstr "elimina un mapeo de usuario para un servidor remoto" -#: sql_help.h:791 +#: sql_help.h:822 msgid "remove a view" msgstr "elimina una vista" -#: sql_help.h:801 +#: sql_help.h:832 msgid "execute a prepared statement" msgstr "ejecuta una sentencia preparada" -#: sql_help.h:806 +#: sql_help.h:837 msgid "show the execution plan of a statement" msgstr "muestra el plan de ejecución de una sentencia" -#: sql_help.h:811 +#: sql_help.h:842 msgid "retrieve rows from a query using a cursor" msgstr "recupera filas de una consulta usando un cursor" -#: sql_help.h:816 +#: sql_help.h:847 msgid "define access privileges" msgstr "define privilegios de acceso" -#: sql_help.h:821 +#: sql_help.h:852 +msgid "import table definitions from a foreign server" +msgstr "importa definiciones de tablas desde un servidor foráneo" + +#: sql_help.h:857 msgid "create new rows in a table" msgstr "crea nuevas filas en una tabla" -#: sql_help.h:826 +#: sql_help.h:862 msgid "listen for a notification" msgstr "escucha notificaciones" -#: sql_help.h:831 +#: sql_help.h:867 msgid "load a shared library file" msgstr "carga un archivo de biblioteca compartida" -#: sql_help.h:836 +#: sql_help.h:872 msgid "lock a table" msgstr "bloquea una tabla" -#: sql_help.h:841 +#: sql_help.h:877 msgid "position a cursor" msgstr "reposiciona un cursor" -#: sql_help.h:846 +#: sql_help.h:882 msgid "generate a notification" msgstr "genera una notificación" -#: sql_help.h:851 +#: sql_help.h:887 msgid "prepare a statement for execution" msgstr "prepara una sentencia para ejecución" -#: sql_help.h:856 +#: sql_help.h:892 msgid "prepare the current transaction for two-phase commit" msgstr "prepara la transacción actual para two-phase commit" -#: sql_help.h:861 +#: sql_help.h:897 msgid "change the ownership of database objects owned by a database role" msgstr "cambia de dueño a los objetos de propiedad de un rol de la base de datos" -#: sql_help.h:866 +#: sql_help.h:902 msgid "replace the contents of a materialized view" msgstr "reemplaza los contenidos de una vista materializada" -#: sql_help.h:871 +#: sql_help.h:907 msgid "rebuild indexes" msgstr "reconstruye índices" -#: sql_help.h:876 +#: sql_help.h:912 msgid "destroy a previously defined savepoint" msgstr "destruye un savepoint previamente definido" -#: sql_help.h:881 +#: sql_help.h:917 msgid "restore the value of a run-time parameter to the default value" msgstr "restaura el valor de un parámetro de configuración al valor inicial" -#: sql_help.h:886 +#: sql_help.h:922 msgid "remove access privileges" msgstr "revoca privilegios de acceso" -#: sql_help.h:896 +#: sql_help.h:932 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "cancela una transacción que fue previamente preparada para two-phase commit." -#: sql_help.h:901 +#: sql_help.h:937 msgid "roll back to a savepoint" msgstr "descartar hacia un savepoint" -#: sql_help.h:906 +#: sql_help.h:942 msgid "define a new savepoint within the current transaction" msgstr "define un nuevo savepoint en la transacción en curso" -#: sql_help.h:911 +#: sql_help.h:947 msgid "define or change a security label applied to an object" msgstr "define o cambia una etiqueta de seguridad sobre un objeto" -#: sql_help.h:916 sql_help.h:961 sql_help.h:991 +#: sql_help.h:952 sql_help.h:997 sql_help.h:1027 msgid "retrieve rows from a table or view" msgstr "recupera filas desde una tabla o vista" -#: sql_help.h:926 +#: sql_help.h:962 msgid "change a run-time parameter" msgstr "cambia un parámetro de configuración" -#: sql_help.h:931 +#: sql_help.h:967 msgid "set constraint check timing for the current transaction" msgstr "define el modo de verificación de las restricciones de la transacción en curso" -#: sql_help.h:936 +#: sql_help.h:972 msgid "set the current user identifier of the current session" msgstr "define el identificador de usuario actual de la sesión actual" -#: sql_help.h:941 +#: sql_help.h:977 msgid "set the session user identifier and the current user identifier of the current session" msgstr "" "define el identificador del usuario de sesión y el identificador\n" "del usuario actual de la sesión en curso" -#: sql_help.h:946 +#: sql_help.h:982 msgid "set the characteristics of the current transaction" msgstr "define las características de la transacción en curso" -#: sql_help.h:951 +#: sql_help.h:987 msgid "show the value of a run-time parameter" msgstr "muestra el valor de un parámetro de configuración" -#: sql_help.h:966 +#: sql_help.h:1002 msgid "empty a table or set of tables" msgstr "vacía una tabla o conjunto de tablas" -#: sql_help.h:971 +#: sql_help.h:1007 msgid "stop listening for a notification" msgstr "deja de escuchar una notificación" -#: sql_help.h:976 +#: sql_help.h:1012 msgid "update rows of a table" msgstr "actualiza filas de una tabla" -#: sql_help.h:981 +#: sql_help.h:1017 msgid "garbage-collect and optionally analyze a database" msgstr "recolecta basura y opcionalmente estadísticas sobre una base de datos" -#: sql_help.h:986 +#: sql_help.h:1022 msgid "compute a set of rows" msgstr "calcula un conjunto de registros" -#: startup.c:166 +#: startup.c:177 #, c-format msgid "%s: -1 can only be used in non-interactive mode\n" msgstr "%s: -1 sólo puede ser usado en modo no interactivo\n" -#: startup.c:266 +#: startup.c:277 #, c-format msgid "%s: could not open log file \"%s\": %s\n" msgstr "%s: no se pudo abrir archivo de log «%s»: %s\n" -#: startup.c:328 +#: startup.c:339 #, c-format msgid "" "Type \"help\" for help.\n" @@ -4453,37 +5114,42 @@ msgstr "" "Digite «help» para obtener ayuda.\n" "\n" -#: startup.c:471 +#: startup.c:486 #, c-format msgid "%s: could not set printing parameter \"%s\"\n" msgstr "%s: no se pudo definir parámetro de impresión «%s»\n" -#: startup.c:511 +#: startup.c:526 #, c-format msgid "%s: could not delete variable \"%s\"\n" msgstr "%s: no se pudo eliminar la variable «%s»\n" -#: startup.c:521 +#: startup.c:536 #, c-format msgid "%s: could not set variable \"%s\"\n" msgstr "%s: no se pudo definir la variable «%s»\n" -#: startup.c:564 startup.c:570 +#: startup.c:596 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Use «%s --help» para obtener más información.\n" -#: startup.c:587 +#: startup.c:613 #, c-format msgid "%s: warning: extra command-line argument \"%s\" ignored\n" msgstr "%s: atención: se ignoró argumento extra «%s» en línea de órdenes\n" -#: startup.c:609 +#: startup.c:635 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: no se pudo encontrar el ejecutable propio\n" -#: tab-complete.c:4111 +#: startup.c:757 startup.c:804 startup.c:825 startup.c:862 variables.c:121 +#, c-format +msgid "unrecognized value \"%s\" for \"%s\"; assuming \"%s\"\n" +msgstr "valor «%s» no reconocido para «%s»; asumiendo «%s»\n" + +#: tab-complete.c:4566 #, c-format msgid "" "tab completion query failed: %s\n" @@ -4494,7 +5160,8 @@ msgstr "" "La consulta era:\n" "%s\n" -#: variables.c:115 -#, c-format -msgid "unrecognized Boolean value; assuming \"on\"\n" -msgstr "valor booleano no reconocido; asumiendo «verdadero»\n" +#~ msgid "(No rows)\n" +#~ msgstr "(Sin filas)\n" + +#~ msgid "SSL connection (unknown cipher)\n" +#~ msgstr "conexión SSL (cifrado desconocido)\n" diff --git a/src/bin/psql/po/it.po b/src/bin/psql/po/it.po index 642a646be2f4c..2518b3f75b704 100644 --- a/src/bin/psql/po/it.po +++ b/src/bin/psql/po/it.po @@ -22,10 +22,10 @@ # msgid "" msgstr "" -"Project-Id-Version: psql (PostgreSQL) 9.4\n" +"Project-Id-Version: psql (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-11-19 21:11+0000\n" -"PO-Revision-Date: 2014-11-13 14:09+0100\n" +"POT-Creation-Date: 2015-07-19 17:43+0000\n" +"PO-Revision-Date: 2015-07-07 00:56+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -71,13 +71,14 @@ msgstr "lettura del link simbolico \"%s\" fallita" msgid "pclose failed: %s" msgstr "pclose fallita: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 input.c:205 mainloop.c:72 mainloop.c:234 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 command.c:331 input.c:205 mainloop.c:73 +#: mainloop.c:253 #, c-format msgid "out of memory\n" msgstr "memoria esaurita\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "impossibile duplicare il puntatore nullo (errore interno)\n" @@ -87,14 +88,14 @@ msgstr "impossibile duplicare il puntatore nullo (errore interno)\n" msgid "could not look up effective user ID %ld: %s" msgstr "ID utente effettivo %ld non trovato: %s" -#: ../../common/username.c:47 command.c:276 +#: ../../common/username.c:47 command.c:286 msgid "user does not exist" msgstr "l'utente non esiste" -#: ../../common/username.c:61 +#: ../../common/username.c:62 #, c-format -msgid "user name lookup failure: %s" -msgstr "errore nella ricerca del nome: %s" +msgid "user name lookup failure: error code %lu" +msgstr "ricerca del nome utente fallita: codice di errore %lu" #: ../../common/wait_error.c:47 #, c-format @@ -131,200 +132,215 @@ msgstr "processo figlio terminato da segnale %d" msgid "child process exited with unrecognized status %d" msgstr "processo figlio uscito con stato non riconosciuto %d" -#: command.c:117 +#: command.c:127 #, c-format msgid "Invalid command \\%s. Try \\? for help.\n" msgstr "Comando errato \\%s. Prova \\? per la guida.\n" -#: command.c:119 +#: command.c:129 #, c-format msgid "invalid command \\%s\n" msgstr "comando errato \\%s\n" -#: command.c:130 +#: command.c:140 #, c-format msgid "\\%s: extra argument \"%s\" ignored\n" msgstr "\\%s: parametro in eccesso \"%s\" ignorato\n" -#: command.c:274 +#: command.c:284 #, c-format msgid "could not get home directory for user ID %ld: %s\n" msgstr "directory home non trovata per l'ID utente %ld: %s\n" -#: command.c:292 +#: command.c:302 #, c-format msgid "\\%s: could not change directory to \"%s\": %s\n" msgstr "\\%s: spostamento della directory a \"%s\" fallito: %s\n" -#: command.c:308 common.c:446 common.c:886 +#: command.c:317 common.c:442 common.c:500 common.c:962 #, c-format msgid "You are currently not connected to a database.\n" msgstr "Al momento non sei connesso ad un database.\n" -#: command.c:315 +#: command.c:344 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Sei collegato al database \"%s\" con nome utente \"%s\" tramite il socket in \"%s\" porta \"%s\".\n" -#: command.c:318 +#: command.c:347 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Sei collegato al database \"%s\" con nome utente \"%s\" sull'host \"%s\" porta \"%s\".\n" -#: command.c:517 command.c:587 command.c:1382 +#: command.c:548 command.c:618 command.c:714 command.c:1517 #, c-format msgid "no query buffer\n" msgstr "Nessun buffer query\n" -#: command.c:550 command.c:2978 +#: command.c:581 command.c:3364 #, c-format msgid "invalid line number: %s\n" msgstr "numero di riga non valido: \"%s\"\n" -#: command.c:581 +#: command.c:612 #, c-format msgid "The server (version %d.%d) does not support editing function source.\n" msgstr "Il server (versione %d.%d) non supporta la modifica dei sorgenti delle funzioni.\n" -#: command.c:661 +#: command.c:692 command.c:760 msgid "No changes" msgstr "Nessuna modifica" -#: command.c:715 +#: command.c:708 +#, c-format +msgid "The server (version %d.%d) does not support editing view definitions.\n" +msgstr "Il server (versione %d.%d) non supporta la modifica della definizione delle viste.\n" + +#: command.c:814 #, c-format msgid "%s: invalid encoding name or conversion procedure not found\n" msgstr "%s: nome codifica errato oppure non esiste una procedura di conversione\n" -#: command.c:812 command.c:862 command.c:876 command.c:893 command.c:1000 -#: command.c:1159 command.c:1362 command.c:1393 +#: command.c:911 command.c:961 command.c:975 command.c:992 command.c:1099 +#: command.c:1263 command.c:1497 command.c:1528 #, c-format msgid "\\%s: missing required argument\n" msgstr "\\%s: parametro richiesto mancante\n" -#: command.c:925 +#: command.c:1024 msgid "Query buffer is empty." msgstr "Il buffer query è vuoto." -#: command.c:935 +#: command.c:1034 msgid "Enter new password: " msgstr "Inserire la nuova password: " -#: command.c:936 +#: command.c:1035 msgid "Enter it again: " msgstr "Conferma password: " -#: command.c:940 +#: command.c:1039 #, c-format msgid "Passwords didn't match.\n" msgstr "Le password non corrispondono.\n" -#: command.c:958 +#: command.c:1057 #, c-format msgid "Password encryption failed.\n" msgstr "Criptazione password fallita.\n" -#: command.c:1029 command.c:1140 command.c:1367 +#: command.c:1128 command.c:1244 command.c:1502 #, c-format msgid "\\%s: error while setting variable\n" msgstr "\\%s: errore durante l'assegnamento della variabile\n" -#: command.c:1087 +#: command.c:1191 msgid "Query buffer reset (cleared)." msgstr "Buffer query resettato (svuotato)." -#: command.c:1099 +#: command.c:1203 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Storia scritta nel file \"%s\".\n" -#: command.c:1164 +#: command.c:1268 #, c-format msgid "\\%s: environment variable name must not contain \"=\"\n" msgstr "\\%s: il nome della variabile d'ambiente non deve contenere \"=\"\n" -#: command.c:1206 +#: command.c:1310 #, c-format msgid "The server (version %d.%d) does not support showing function source.\n" msgstr "Il server (versione %d.%d) non supporta mostrare i sorgenti delle funzioni.\n" -#: command.c:1212 +#: command.c:1316 #, c-format msgid "function name is required\n" msgstr "il nome della funzione è richiesto\n" -#: command.c:1347 +#: command.c:1389 +#, c-format +msgid "The server (version %d.%d) does not support showing view definitions.\n" +msgstr "Il server (versione %d.%d) non supporta la visualizzazione della definizione delle viste.\n" + +#: command.c:1395 +#, c-format +msgid "view name is required\n" +msgstr "il nome della vista è richiesto\n" + +#: command.c:1482 msgid "Timing is on." msgstr "Controllo tempo attivato" -#: command.c:1349 +#: command.c:1484 msgid "Timing is off." msgstr "Controllo tempo disattivato." -#: command.c:1410 command.c:1430 command.c:2018 command.c:2021 command.c:2024 -#: command.c:2030 command.c:2032 command.c:2040 command.c:2050 command.c:2059 -#: command.c:2073 command.c:2090 command.c:2149 common.c:74 copy.c:333 -#: copy.c:393 copy.c:408 psqlscan.l:1677 psqlscan.l:1688 psqlscan.l:1698 +#: command.c:1545 command.c:1565 command.c:2196 command.c:2199 command.c:2202 +#: command.c:2208 command.c:2210 command.c:2218 command.c:2228 command.c:2237 +#: command.c:2251 command.c:2268 command.c:2327 common.c:74 copy.c:333 +#: copy.c:393 copy.c:408 psqlscan.l:1700 psqlscan.l:1711 psqlscan.l:1721 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" -#: command.c:1509 +#: command.c:1656 #, c-format msgid "+ opt(%d) = |%s|\n" msgstr "+ opt(%d) = |%s|\n" -#: command.c:1535 startup.c:184 +#: command.c:1682 startup.c:195 msgid "Password: " msgstr "Password: " -#: command.c:1540 startup.c:186 +#: command.c:1687 startup.c:197 #, c-format msgid "Password for user %s: " msgstr "Inserisci la password per l'utente %s: " -#: command.c:1585 +#: command.c:1734 #, c-format msgid "All connection parameters must be supplied because no database connection exists\n" msgstr "Tutti i parametri di connessione devono essere forniti perché non esiste alcuna connessione di database\n" -#: command.c:1671 command.c:3012 common.c:120 common.c:413 common.c:478 -#: common.c:929 common.c:954 common.c:1051 copy.c:492 copy.c:695 -#: large_obj.c:158 large_obj.c:193 large_obj.c:255 psqlscan.l:1949 +#: command.c:1852 command.c:3466 common.c:120 common.c:413 common.c:1005 +#: common.c:1030 common.c:1130 copy.c:492 copy.c:702 large_obj.c:156 +#: large_obj.c:191 large_obj.c:253 psqlscan.l:1972 #, c-format msgid "%s" msgstr "%s" -#: command.c:1675 +#: command.c:1856 #, c-format msgid "Previous connection kept\n" msgstr "Connessione precedente mantenuta\n" -#: command.c:1679 +#: command.c:1860 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:1712 +#: command.c:1894 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Adesso sei collegato al database \"%s\" con nome utente \"%s\" tramite socket \"%s\" porta \"%s\".\n" -#: command.c:1715 +#: command.c:1897 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Adesso sei collegato al database \"%s\" con nome utente \"%s\" sull'host \"%s\" porta \"%s\".\n" -#: command.c:1719 +#: command.c:1901 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Sei collegato al database \"%s\" con nome utente \"%s\".\n" -#: command.c:1753 +#: command.c:1935 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, server %s)\n" -#: command.c:1761 +#: command.c:1943 #, c-format msgid "" "WARNING: %s major version %d.%d, server major version %d.%d.\n" @@ -333,25 +349,24 @@ msgstr "" "ATTENZIONE: versione maggiore %s %d.%d, versione maggiore server %d.%d.\n" " Alcune caratteristiche di psql potrebbero non funzionare.\n" -#: command.c:1791 +#: command.c:1977 #, c-format -msgid "SSL connection (protocol: %s, cipher: %s, bits: %d, compression: %s)\n" -msgstr "Connessione SSL (protocollo: %s, cifrario: %s, bits: %d, compressione: %s)\n" +msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" +msgstr "connessione SSL (protocollo: %s, cifrario: %s, bit: %s, compressione: %s)\n" -#: command.c:1793 help.c:46 +#: command.c:1978 command.c:1979 command.c:1980 +msgid "unknown" +msgstr "sconosciuto" + +#: command.c:1981 help.c:46 msgid "off" msgstr "disattivato" -#: command.c:1793 help.c:46 +#: command.c:1981 help.c:46 msgid "on" msgstr "attivato" -#: command.c:1802 -#, c-format -msgid "SSL connection (unknown cipher)\n" -msgstr "connessione SSL (codice sconosciuto)\n" - -#: command.c:1823 +#: command.c:2001 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -363,205 +378,243 @@ msgstr "" " funzionare correttamente. Vedi le pagine di riferimento\n" " psql \"Note per utenti Windows\" per i dettagli.\n" -#: command.c:1907 +#: command.c:2085 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number\n" msgstr "la variabile di ambiente PSQL_EDITOR_LINENUMBER_ARG deve specificare un numero di riga\n" -#: command.c:1936 +#: command.c:2114 #, c-format msgid "could not start editor \"%s\"\n" msgstr "avvio dell'editor \"%s\" fallito\n" -#: command.c:1938 +#: command.c:2116 #, c-format msgid "could not start /bin/sh\n" msgstr "avvio di /bin/sh fallito\n" -#: command.c:1976 +#: command.c:2154 #, c-format msgid "could not locate temporary directory: %s\n" msgstr "directory temporanea non trovata: %s\n" -#: command.c:2003 +#: command.c:2181 #, c-format msgid "could not open temporary file \"%s\": %s\n" msgstr "apertura del file temporaneo \"%s\" fallita: %s\n" -#: command.c:2271 +#: command.c:2489 #, c-format -msgid "\\pset: allowed formats are unaligned, aligned, wrapped, html, latex, troff-ms\n" -msgstr "\\pset: i formati disponibili sono unaligned, aligned, wrapped, html, latex, troff-ms\n" +msgid "\\pset: allowed formats are unaligned, aligned, wrapped, html, asciidoc, latex, troff-ms\n" +msgstr "\\pset: i formati consentiti sono unaligned, aligned, wrapped, html, asciidoc, latex, troff-ms\n" -#: command.c:2290 +#: command.c:2508 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" msgstr "\\pset: gli stili di linea permessi sono ascii, old-ascii, unicode\n" -#: command.c:2432 command.c:2583 +#: command.c:2522 +#, c-format +msgid "\\pset: allowed unicode border linestyle are single, double\n" +msgstr "\\pset: gli stili riga unicode dei bordi are single, double\n" + +#: command.c:2535 +#, c-format +msgid "\\pset: allowed unicode column linestyle are single, double\n" +msgstr "\\pset: gli stili riga unicode delle colonne are single, double\n" + +#: command.c:2548 +#, c-format +msgid "\\pset: allowed unicode header linestyle are single, double\n" +msgstr "\\pset: gli stili riga unicode delle intestazioni are single, double\n" + +#: command.c:2700 command.c:2877 #, c-format msgid "\\pset: unknown option: %s\n" msgstr "\\pset: opzione sconosciuta: %s\n" -#: command.c:2450 +#: command.c:2718 #, c-format msgid "Border style is %d.\n" msgstr "Lo stile del bordo è %d.\n" -#: command.c:2456 +#: command.c:2724 #, c-format msgid "Target width is unset.\n" msgstr "La lunghezza di destinazione non è impostata.\n" -#: command.c:2458 +#: command.c:2726 #, c-format msgid "Target width is %d.\n" msgstr "La larghezza di destinazione è %d.\n" -#: command.c:2465 +#: command.c:2733 #, c-format msgid "Expanded display is on.\n" msgstr "La visualizzazione espansa è attiva.\n" -#: command.c:2467 +#: command.c:2735 #, c-format msgid "Expanded display is used automatically.\n" msgstr "La visualizzazione espansa è usata automaticamente.\n" -#: command.c:2469 +#: command.c:2737 #, c-format msgid "Expanded display is off.\n" msgstr "La visualizzazione espansa è disattivata.\n" -#: command.c:2476 command.c:2484 +#: command.c:2744 command.c:2752 #, c-format msgid "Field separator is zero byte.\n" msgstr "Il separatore di campo è il byte zero.\n" -#: command.c:2478 +#: command.c:2746 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Il separatore di campo è \"%s\".\n" -#: command.c:2491 +#: command.c:2759 #, c-format msgid "Default footer is on.\n" msgstr "Il piè di pagina di default è attivo.\n" -#: command.c:2493 +#: command.c:2761 #, c-format msgid "Default footer is off.\n" msgstr "Il piè di pagina di default è disattivato.\n" -#: command.c:2499 +#: command.c:2767 #, c-format msgid "Output format is %s.\n" msgstr "Il formato di output è %s.\n" -#: command.c:2505 +#: command.c:2773 #, c-format msgid "Line style is %s.\n" msgstr "Lo stile della linea è %s.\n" -#: command.c:2512 +#: command.c:2780 #, c-format msgid "Null display is \"%s\".\n" msgstr "La visualizzazione dei null è \"%s\".\n" -#: command.c:2520 +#: command.c:2788 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "La correzione dell'output numerico secondo il locale è attiva.\n" -#: command.c:2522 +#: command.c:2790 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "La correzione dell'output numerico secondo il locale è disattivata.\n" -#: command.c:2529 +#: command.c:2797 #, c-format msgid "Pager is used for long output.\n" msgstr "Usa la paginazione per risultati estesi.\n" -#: command.c:2531 +#: command.c:2799 #, c-format msgid "Pager is always used.\n" msgstr "Paginazione sempre attiva.\n" -#: command.c:2533 +#: command.c:2801 #, c-format msgid "Pager usage is off.\n" msgstr "Paginazione disattivata.\n" -#: command.c:2540 command.c:2550 +#: command.c:2807 +#, c-format +msgid "Pager won't be used for less than %d lines\n" +msgstr "La paginazione non verrà usata per meno di %d righe\n" + +#: command.c:2815 command.c:2825 #, c-format msgid "Record separator is zero byte.\n" msgstr "Il separatore di record è il byte zero.\n" -#: command.c:2542 +#: command.c:2817 #, c-format msgid "Record separator is .\n" msgstr "Il separatore di record è .\n" -#: command.c:2544 +#: command.c:2819 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Il separatore di record è \"%s\".\n" -#: command.c:2557 +#: command.c:2832 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Gli attributi di tabella sono \"%s\".\n" -#: command.c:2560 +#: command.c:2835 #, c-format msgid "Table attributes unset.\n" msgstr "Gli attributi di tabella non sono specificati.\n" -#: command.c:2567 +#: command.c:2842 #, c-format msgid "Title is \"%s\".\n" msgstr "Il titolo è \"%s\".\n" -#: command.c:2569 +#: command.c:2844 #, c-format msgid "Title is unset.\n" msgstr "Il titolo non è assegnato.\n" -#: command.c:2576 +#: command.c:2851 #, c-format msgid "Tuples only is on.\n" msgstr "La visualizzazione dei soli dati è attiva.\n" -#: command.c:2578 +#: command.c:2853 #, c-format msgid "Tuples only is off.\n" msgstr "La visualizzazione dei soli dati è disattivata.\n" -#: command.c:2729 +#: command.c:2859 command.c:2871 +#, c-format +msgid "Unicode border linestyle is \"%s\".\n" +msgstr "Lo stile riga unicode dei bordi è \"%s\".\n" + +#: command.c:2865 +#, c-format +msgid "Unicode column linestyle is \"%s\".\n" +msgstr "Lo stile riga unicode delle colonne è \"%s\".\n" + +#: command.c:3031 #, c-format msgid "\\!: failed\n" msgstr "\\!: fallita\n" -#: command.c:2749 command.c:2808 +#: command.c:3051 common.c:548 #, c-format msgid "\\watch cannot be used with an empty query\n" msgstr "\\watch non può essere usato con una query vuota\n" -#: command.c:2771 +#: command.c:3072 #, c-format msgid "Watch every %lds\t%s" msgstr "Esegui ogni %lds\t%s" -#: command.c:2815 +#: command.c:3123 command.c:3130 common.c:448 common.c:455 common.c:988 #, c-format -msgid "\\watch cannot be used with COPY\n" -msgstr "\\watch non può essere usato con COPY\n" +msgid "" +"********* QUERY **********\n" +"%s\n" +"**************************\n" +"\n" +msgstr "" +"********* QUERY **********\n" +"%s\n" +"**************************\n" +"\n" -#: command.c:2821 +#: command.c:3281 #, c-format -msgid "unexpected result status for \\watch\n" -msgstr "risultato imprevisto per \\watch\n" +msgid "%s.%s is not a view\n" +msgstr "%s.%s non è una vista\n" #: common.c:287 #, c-format @@ -583,50 +636,52 @@ msgstr "Fallito.\n" msgid "Succeeded.\n" msgstr "Riuscito.\n" -#: common.c:403 common.c:683 common.c:851 +#: common.c:403 common.c:759 common.c:927 #, c-format msgid "unexpected PQresultStatus: %d\n" msgstr "PQresultStatus imprevisto: %d\n" -#: common.c:452 common.c:459 common.c:912 +#: common.c:555 #, c-format -msgid "" -"********* QUERY **********\n" -"%s\n" -"**************************\n" -"\n" -msgstr "" -"********* QUERY **********\n" -"%s\n" -"**************************\n" -"\n" +msgid "\\watch cannot be used with COPY\n" +msgstr "\\watch non può essere usato con COPY\n" + +#: common.c:560 +#, c-format +msgid "unexpected result status for \\watch\n" +msgstr "risultato imprevisto per \\watch\n" + +#: common.c:571 common.c:1146 +#, c-format +msgid "Time: %.3f ms\n" +msgstr "Tempo: %.3f ms\n" -#: common.c:513 +#: common.c:589 #, c-format msgid "Asynchronous notification \"%s\" with payload \"%s\" received from server process with PID %d.\n" msgstr "Notifica asincrona \"%s\" con payload \"%s\" ricevuta dal processo server con PID %d.\n" -#: common.c:516 +#: common.c:592 #, c-format msgid "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "Notifica asincrona \"%s\" ricevuta dal processo server con PID %d.\n" -#: common.c:578 +#: common.c:654 #, c-format msgid "no rows returned for \\gset\n" msgstr "nessuna riga restituita per \\gset\n" -#: common.c:583 +#: common.c:659 #, c-format msgid "more than one row returned for \\gset\n" msgstr "più di una riga restituita per \\gset\n" -#: common.c:609 +#: common.c:685 #, c-format msgid "could not set variable \"%s\"\n" msgstr "impostazione della variabile \"%s\" fallita\n" -#: common.c:894 +#: common.c:970 #, c-format msgid "" "***(Single step mode: verify command)*******************************************\n" @@ -637,20 +692,20 @@ msgstr "" "%s\n" "***(premi invio per procedere oppure digita x ed invio per annullare)***********\n" -#: common.c:945 +#: common.c:1021 #, c-format msgid "The server (version %d.%d) does not support savepoints for ON_ERROR_ROLLBACK.\n" msgstr "Questa versione (%d.%d) del server non supporta savepoint per ON_ERROR_ROLLBACK..\n" -#: common.c:1039 +#: common.c:1075 #, c-format -msgid "unexpected transaction status (%d)\n" -msgstr "stato della transazione imprevisto (%d)\n" +msgid "STATEMENT: %s\n" +msgstr "COMANDO: %s\n" -#: common.c:1067 +#: common.c:1118 #, c-format -msgid "Time: %.3f ms\n" -msgstr "Tempo: %.3f ms\n" +msgid "unexpected transaction status (%d)\n" +msgstr "stato della transazione imprevisto (%d)\n" #: copy.c:98 #, c-format @@ -701,7 +756,7 @@ msgstr "trasferimento dei dati COPY fallito: %s" msgid "canceled by user" msgstr "annullata dall'utente" -#: copy.c:544 +#: copy.c:545 msgid "" "Enter data to be copied followed by a newline.\n" "End with a backslash and a period on a line by itself." @@ -709,48 +764,48 @@ msgstr "" "Inserire i dati da copiare seguiti da un \"a capo\".\n" "Terminare con un backslash ed un punto su una singola riga." -#: copy.c:667 +#: copy.c:674 msgid "aborted because of read failure" msgstr "interrotto a causa di lettura non riuscita" -#: copy.c:691 +#: copy.c:698 msgid "trying to exit copy mode" msgstr "tentativo di uscita dalla modalità copy" -#: describe.c:71 describe.c:259 describe.c:491 describe.c:615 describe.c:758 -#: describe.c:844 describe.c:914 describe.c:2759 describe.c:2964 -#: describe.c:3054 describe.c:3299 describe.c:3436 describe.c:3665 -#: describe.c:3737 describe.c:3748 describe.c:3807 describe.c:4215 -#: describe.c:4294 +#: describe.c:71 describe.c:264 describe.c:496 describe.c:626 describe.c:769 +#: describe.c:886 describe.c:956 describe.c:2921 describe.c:3126 +#: describe.c:3216 describe.c:3461 describe.c:3598 describe.c:3827 +#: describe.c:3899 describe.c:3910 describe.c:3969 describe.c:4377 +#: describe.c:4456 msgid "Schema" msgstr "Schema" -#: describe.c:72 describe.c:156 describe.c:164 describe.c:260 describe.c:492 -#: describe.c:616 describe.c:677 describe.c:759 describe.c:915 describe.c:2760 -#: describe.c:2886 describe.c:2965 describe.c:3055 describe.c:3134 -#: describe.c:3300 describe.c:3364 describe.c:3437 describe.c:3666 -#: describe.c:3738 describe.c:3749 describe.c:3808 describe.c:3997 -#: describe.c:4078 describe.c:4292 +#: describe.c:72 describe.c:156 describe.c:164 describe.c:265 describe.c:497 +#: describe.c:627 describe.c:688 describe.c:770 describe.c:957 describe.c:2922 +#: describe.c:3048 describe.c:3127 describe.c:3217 describe.c:3296 +#: describe.c:3462 describe.c:3526 describe.c:3599 describe.c:3828 +#: describe.c:3900 describe.c:3911 describe.c:3970 describe.c:4159 +#: describe.c:4240 describe.c:4454 msgid "Name" msgstr "Nome" -#: describe.c:73 describe.c:272 describe.c:318 describe.c:335 +#: describe.c:73 describe.c:277 describe.c:323 describe.c:340 msgid "Result data type" msgstr "Tipo dato del risultato" -#: describe.c:81 describe.c:94 describe.c:98 describe.c:273 describe.c:319 -#: describe.c:336 +#: describe.c:81 describe.c:94 describe.c:98 describe.c:278 describe.c:324 +#: describe.c:341 msgid "Argument data types" msgstr "Tipo dato dei parametri" -#: describe.c:105 describe.c:182 describe.c:365 describe.c:534 describe.c:631 -#: describe.c:702 describe.c:917 describe.c:1486 describe.c:2564 -#: describe.c:2793 describe.c:2917 describe.c:2991 describe.c:3064 -#: describe.c:3147 describe.c:3215 describe.c:3307 describe.c:3373 -#: describe.c:3438 describe.c:3574 describe.c:3614 describe.c:3682 -#: describe.c:3741 describe.c:3750 describe.c:3809 describe.c:4023 -#: describe.c:4100 describe.c:4229 describe.c:4295 large_obj.c:291 -#: large_obj.c:301 +#: describe.c:105 describe.c:187 describe.c:370 describe.c:545 describe.c:642 +#: describe.c:713 describe.c:959 describe.c:1570 describe.c:2722 +#: describe.c:2955 describe.c:3079 describe.c:3153 describe.c:3226 +#: describe.c:3309 describe.c:3377 describe.c:3469 describe.c:3535 +#: describe.c:3600 describe.c:3736 describe.c:3776 describe.c:3844 +#: describe.c:3903 describe.c:3912 describe.c:3971 describe.c:4185 +#: describe.c:4262 describe.c:4391 describe.c:4457 large_obj.c:289 +#: large_obj.c:299 msgid "Description" msgstr "Descrizione" @@ -763,9 +818,9 @@ msgstr "Lista delle funzione aggregate" msgid "The server (version %d.%d) does not support tablespaces.\n" msgstr "Il server (versione %d.%d) non supporta i tablespace.\n" -#: describe.c:157 describe.c:165 describe.c:362 describe.c:678 describe.c:843 -#: describe.c:2769 describe.c:2890 describe.c:3136 describe.c:3365 -#: describe.c:3998 describe.c:4079 large_obj.c:290 +#: describe.c:157 describe.c:165 describe.c:367 describe.c:535 describe.c:689 +#: describe.c:885 describe.c:2931 describe.c:3052 describe.c:3298 +#: describe.c:3527 describe.c:4160 describe.c:4241 large_obj.c:288 msgid "Owner" msgstr "Proprietario" @@ -773,821 +828,846 @@ msgstr "Proprietario" msgid "Location" msgstr "Posizione" -#: describe.c:177 describe.c:2382 +#: describe.c:177 describe.c:2535 msgid "Options" msgstr "Opzioni" -#: describe.c:199 +#: describe.c:182 describe.c:508 describe.c:705 describe.c:2947 +#: describe.c:2951 +msgid "Size" +msgstr "Dimensione" + +#: describe.c:204 msgid "List of tablespaces" msgstr "Lista dei tablespace" -#: describe.c:236 +#: describe.c:241 #, c-format msgid "\\df only takes [antwS+] as options\n" msgstr "\\df accetta come opzione solo [antwS+]\n" -#: describe.c:242 +#: describe.c:247 #, c-format msgid "\\df does not take a \"w\" option with server version %d.%d\n" msgstr "\\df non accetta un'opzione \"w\" con la versione del server %d.%d\n" #. translator: "agg" is short for "aggregate" -#: describe.c:275 describe.c:321 describe.c:338 +#: describe.c:280 describe.c:326 describe.c:343 msgid "agg" msgstr "aggr" -#: describe.c:276 +#: describe.c:281 msgid "window" msgstr "finestra" -#: describe.c:277 describe.c:322 describe.c:339 describe.c:1028 +#: describe.c:282 describe.c:327 describe.c:344 describe.c:1093 msgid "trigger" msgstr "trigger" -#: describe.c:278 describe.c:323 describe.c:340 +#: describe.c:283 describe.c:328 describe.c:345 msgid "normal" msgstr "normale" -#: describe.c:279 describe.c:324 describe.c:341 describe.c:765 describe.c:853 -#: describe.c:1455 describe.c:2768 describe.c:2966 describe.c:4097 +#: describe.c:284 describe.c:329 describe.c:346 describe.c:776 describe.c:895 +#: describe.c:1539 describe.c:2930 describe.c:3128 describe.c:4259 msgid "Type" msgstr "Tipo" -#: describe.c:355 +#: describe.c:360 msgid "definer" msgstr "definitore" -#: describe.c:356 +#: describe.c:361 msgid "invoker" msgstr "invocatore" -#: describe.c:357 +#: describe.c:362 msgid "Security" msgstr "Sicurezza" -#: describe.c:358 +#: describe.c:363 msgid "immutable" msgstr "immutabile" -#: describe.c:359 +#: describe.c:364 msgid "stable" msgstr "stabile" -#: describe.c:360 +#: describe.c:365 msgid "volatile" msgstr "volatile" -#: describe.c:361 +#: describe.c:366 msgid "Volatility" msgstr "Volatilità" -#: describe.c:363 +#: describe.c:368 msgid "Language" msgstr "Linguaggio" -#: describe.c:364 +#: describe.c:369 msgid "Source code" msgstr "Codice sorgente" -#: describe.c:462 +#: describe.c:467 msgid "List of functions" msgstr "Lista delle funzioni" -#: describe.c:502 +#: describe.c:507 msgid "Internal name" msgstr "Nome interno" -#: describe.c:503 describe.c:694 describe.c:2785 describe.c:2789 -msgid "Size" -msgstr "Dimensione" - -#: describe.c:524 +#: describe.c:529 msgid "Elements" msgstr "Elementi" -#: describe.c:574 +#: describe.c:585 msgid "List of data types" msgstr "Lista dei tipi di dati" -#: describe.c:617 +#: describe.c:628 msgid "Left arg type" msgstr "Argomento sinistro" -#: describe.c:618 +#: describe.c:629 msgid "Right arg type" msgstr "Argomento destro" -#: describe.c:619 +#: describe.c:630 msgid "Result type" msgstr "Tipo di risultato" -#: describe.c:624 describe.c:3206 describe.c:3573 +#: describe.c:635 describe.c:3368 describe.c:3735 msgid "Function" msgstr "Funzione" -#: describe.c:649 +#: describe.c:660 msgid "List of operators" msgstr "Lista degli operatori" -#: describe.c:679 +#: describe.c:690 msgid "Encoding" msgstr "Codifica" -#: describe.c:684 describe.c:3301 +#: describe.c:695 describe.c:3463 msgid "Collate" msgstr "Ordinamento" -#: describe.c:685 describe.c:3302 +#: describe.c:696 describe.c:3464 msgid "Ctype" msgstr "Ctype" -#: describe.c:698 +#: describe.c:709 msgid "Tablespace" msgstr "Tablespace" -#: describe.c:720 +#: describe.c:731 msgid "List of databases" msgstr "Lista dei database" -#: describe.c:760 describe.c:846 describe.c:2761 +#: describe.c:771 describe.c:888 describe.c:2923 msgid "table" msgstr "tabella" -#: describe.c:761 describe.c:2762 +#: describe.c:772 describe.c:2924 msgid "view" msgstr "vista" -#: describe.c:762 describe.c:2763 +#: describe.c:773 describe.c:2925 msgid "materialized view" msgstr "vista materializzata" -#: describe.c:763 describe.c:848 describe.c:2765 +#: describe.c:774 describe.c:890 describe.c:2927 msgid "sequence" msgstr "sequenza" -#: describe.c:764 describe.c:2767 +#: describe.c:775 describe.c:2929 msgid "foreign table" msgstr "tabella esterna" -#: describe.c:776 -msgid "Column access privileges" -msgstr "Privilegi di accesso colonna" +#: describe.c:787 +msgid "Column privileges" +msgstr "Privilegi di colonna" + +#: describe.c:818 +msgid "Policies" +msgstr "Politiche" -#: describe.c:802 describe.c:4439 describe.c:4443 +#: describe.c:844 describe.c:4601 describe.c:4605 msgid "Access privileges" msgstr "Privilegi di accesso" -#: describe.c:831 +#: describe.c:873 #, c-format msgid "The server (version %d.%d) does not support altering default privileges.\n" msgstr "Il server (versione %d.%d) non supporta la modifica dei privilegi di default.\n" -#: describe.c:850 +#: describe.c:892 msgid "function" msgstr "funzione" -#: describe.c:852 +#: describe.c:894 msgid "type" msgstr "tipo" -#: describe.c:876 +#: describe.c:918 msgid "Default access privileges" msgstr "Privilegi di accesso di default" -#: describe.c:916 +#: describe.c:958 msgid "Object" msgstr "Oggetto" -#: describe.c:930 sql_help.c:1595 -msgid "constraint" -msgstr "vincolo" +#: describe.c:972 +msgid "table constraint" +msgstr "vincolo di tabella" -#: describe.c:957 +#: describe.c:994 +msgid "domain constraint" +msgstr "vincolo di dominio" + +#: describe.c:1022 msgid "operator class" msgstr "classe operatori" -#: describe.c:986 +#: describe.c:1051 msgid "operator family" msgstr "famiglia operatori" -#: describe.c:1008 +#: describe.c:1073 msgid "rule" msgstr "regola" -#: describe.c:1050 +#: describe.c:1115 msgid "Object descriptions" msgstr "Descrizioni oggetti" -#: describe.c:1104 +#: describe.c:1169 #, c-format msgid "Did not find any relation named \"%s\".\n" msgstr "Non ho trovato alcuna relazione di nome \"%s\".\n" -#: describe.c:1295 +#: describe.c:1378 #, c-format msgid "Did not find any relation with OID %s.\n" msgstr "Non ho trovato nessuna relazione con OID %s.\n" -#: describe.c:1399 +#: describe.c:1483 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "Tabella non loggata \"%s.%s\"" -#: describe.c:1402 +#: describe.c:1486 #, c-format msgid "Table \"%s.%s\"" msgstr "Tabella \"%s.%s\"" -#: describe.c:1406 +#: describe.c:1490 #, c-format msgid "View \"%s.%s\"" msgstr "Vista \"%s.%s\"" -#: describe.c:1411 +#: describe.c:1495 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "Vista materializzata non loggata \"%s.%s\"" -#: describe.c:1414 +#: describe.c:1498 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "Vista materializzata \"%s.%s\"" -#: describe.c:1418 +#: describe.c:1502 #, c-format msgid "Sequence \"%s.%s\"" msgstr "Sequenza \"%s.%s\"" -#: describe.c:1423 +#: describe.c:1507 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "Indice non loggato \"%s.%s\"" -#: describe.c:1426 +#: describe.c:1510 #, c-format msgid "Index \"%s.%s\"" msgstr "Indice \"%s.%s\"" -#: describe.c:1431 +#: describe.c:1515 #, c-format msgid "Special relation \"%s.%s\"" msgstr "relazione speciale \"%s.%s\"" -#: describe.c:1435 +#: describe.c:1519 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "Tabella TOAST \"%s.%s\"" -#: describe.c:1439 +#: describe.c:1523 #, c-format msgid "Composite type \"%s.%s\"" msgstr "Tipo composito \"%s.%s\"" -#: describe.c:1443 +#: describe.c:1527 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "Tabella esterna \"%s.%s\"" -#: describe.c:1454 +#: describe.c:1538 msgid "Column" msgstr "Colonna" -#: describe.c:1463 +#: describe.c:1547 msgid "Modifiers" msgstr "Modificatori" -#: describe.c:1468 +#: describe.c:1552 msgid "Value" msgstr "Valore" -#: describe.c:1471 +#: describe.c:1555 msgid "Definition" msgstr "Definizione" -#: describe.c:1474 describe.c:4018 describe.c:4099 describe.c:4167 -#: describe.c:4228 +#: describe.c:1558 describe.c:4180 describe.c:4261 describe.c:4329 +#: describe.c:4390 msgid "FDW Options" msgstr "Opzioni FDW" -#: describe.c:1478 +#: describe.c:1562 msgid "Storage" msgstr "Memorizzazione" -#: describe.c:1481 +#: describe.c:1565 msgid "Stats target" msgstr "Dest. stat." -#: describe.c:1531 +#: describe.c:1615 #, c-format msgid "collate %s" msgstr "ordinamento %s" -#: describe.c:1539 +#: describe.c:1623 msgid "not null" msgstr "non null" #. translator: default values of column definitions -#: describe.c:1549 +#: describe.c:1633 #, c-format msgid "default %s" msgstr "preimpostato %s" -#: describe.c:1664 +#: describe.c:1748 msgid "primary key, " msgstr "chiave primaria, " -#: describe.c:1666 +#: describe.c:1750 msgid "unique, " msgstr "univoco, " -#: describe.c:1672 +#: describe.c:1756 #, c-format msgid "for table \"%s.%s\"" msgstr "per la tabella \"%s.%s\"" -#: describe.c:1676 +#: describe.c:1760 #, c-format msgid ", predicate (%s)" msgstr ", predicato (%s)" -#: describe.c:1679 +#: describe.c:1763 msgid ", clustered" msgstr ", raggruppato" -#: describe.c:1682 +#: describe.c:1766 msgid ", invalid" msgstr ", non valido" -#: describe.c:1685 +#: describe.c:1769 msgid ", deferrable" msgstr ", deferibile" -#: describe.c:1688 +#: describe.c:1772 msgid ", initially deferred" msgstr ", inizialmente deferito" -#: describe.c:1691 +#: describe.c:1775 msgid ", replica identity" msgstr ", identità di replica" -#: describe.c:1726 +#: describe.c:1810 #, c-format msgid "Owned by: %s" msgstr "Proprietario: %s" -#: describe.c:1786 +#: describe.c:1870 msgid "Indexes:" msgstr "Indici:" -#: describe.c:1870 +#: describe.c:1954 msgid "Check constraints:" msgstr "Vincoli di controllo:" -#: describe.c:1901 +#: describe.c:1985 msgid "Foreign-key constraints:" msgstr "Vincoli di integrità referenziale" -#: describe.c:1932 +#: describe.c:2016 msgid "Referenced by:" msgstr "Referenziato da:" -#: describe.c:2014 describe.c:2064 +#: describe.c:2061 +msgid "Policies:" +msgstr "Politiche:" + +#: describe.c:2064 +msgid "Policies (Row Security Enabled): (None)" +msgstr "Politiche (Sicurezza di Riga Abilitata): (Nessuna)" + +#: describe.c:2067 +msgid "Policies (Row Security Disabled):" +msgstr "Politiche (Sicurezza di Riga Disabilitata):" + +#: describe.c:2167 describe.c:2217 msgid "Rules:" msgstr "Regole:" -#: describe.c:2017 +#: describe.c:2170 msgid "Disabled rules:" msgstr "Regole disabilitate:" -#: describe.c:2020 +#: describe.c:2173 msgid "Rules firing always:" msgstr "Regole sempre abilitate:" -#: describe.c:2023 +#: describe.c:2176 msgid "Rules firing on replica only:" msgstr "Regole abilitate solo su replica:" -#: describe.c:2047 +#: describe.c:2200 msgid "View definition:" msgstr "Definizione vista:" -#: describe.c:2182 +#: describe.c:2335 msgid "Triggers:" msgstr "Trigger:" -#: describe.c:2186 +#: describe.c:2339 msgid "Disabled user triggers:" msgstr "Trigger utente disabilitati:" -#: describe.c:2188 +#: describe.c:2341 msgid "Disabled triggers:" msgstr "Trigger disabilitati:" -#: describe.c:2191 +#: describe.c:2344 msgid "Disabled internal triggers:" msgstr "Trigger interni disabilitati:" -#: describe.c:2194 +#: describe.c:2347 msgid "Triggers firing always:" msgstr "Trigger sempre abilitati:" -#: describe.c:2197 +#: describe.c:2350 msgid "Triggers firing on replica only:" msgstr "Trigger abilitati solo su replica." -#: describe.c:2276 +#: describe.c:2429 msgid "Inherits" msgstr "Eredita" -#: describe.c:2315 +#: describe.c:2468 #, c-format msgid "Number of child tables: %d (Use \\d+ to list them.)" msgstr "Numero di tabelle figlio: %d (Usa \\d+ per elencarle.)" -#: describe.c:2322 +#: describe.c:2475 msgid "Child tables" msgstr "Tabelle figlio" -#: describe.c:2344 +#: describe.c:2497 #, c-format msgid "Typed table of type: %s" msgstr "Tabella di tipo: %s" -#: describe.c:2358 +#: describe.c:2511 msgid "Replica Identity" msgstr "Identità di replica" -#: describe.c:2371 +#: describe.c:2524 msgid "Has OIDs: yes" msgstr "Ha OID: sì" -#: describe.c:2460 +#: describe.c:2613 #, c-format msgid "Tablespace: \"%s\"" msgstr "Tablespace: \"%s\"" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:2472 +#: describe.c:2625 #, c-format msgid ", tablespace \"%s\"" msgstr ", tablespace \"%s\"" -#: describe.c:2557 +#: describe.c:2715 msgid "List of roles" msgstr "Lista dei ruoli" -#: describe.c:2559 +#: describe.c:2717 msgid "Role name" msgstr "Nome ruolo" -#: describe.c:2560 +#: describe.c:2718 msgid "Attributes" msgstr "Attributi" -#: describe.c:2561 +#: describe.c:2719 msgid "Member of" msgstr "Membro di" -#: describe.c:2572 +#: describe.c:2730 msgid "Superuser" msgstr "Superutente" -#: describe.c:2575 +#: describe.c:2733 msgid "No inheritance" msgstr "Nessuna ereditarietà" -#: describe.c:2578 +#: describe.c:2736 msgid "Create role" msgstr "Crea ruoli" -#: describe.c:2581 +#: describe.c:2739 msgid "Create DB" msgstr "Crea DB" -#: describe.c:2584 +#: describe.c:2742 msgid "Cannot login" msgstr "Login non possibile" -#: describe.c:2588 +#: describe.c:2746 msgid "Replication" msgstr "Replica" -#: describe.c:2597 +#: describe.c:2750 +msgid "Bypass RLS" +msgstr "Scavalca RLS" + +#: describe.c:2759 msgid "No connections" msgstr "Niente connessioni" -#: describe.c:2599 +#: describe.c:2761 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d connessione" msgstr[1] "%d connessioni" -#: describe.c:2609 +#: describe.c:2771 msgid "Password valid until " msgstr "Password valida fino a " -#: describe.c:2665 +#: describe.c:2827 msgid "Role" msgstr "Ruolo" -#: describe.c:2666 +#: describe.c:2828 msgid "Database" msgstr "Database" -#: describe.c:2667 +#: describe.c:2829 msgid "Settings" msgstr "Impostazioni" -#: describe.c:2677 +#: describe.c:2839 #, c-format msgid "No per-database role settings support in this server version.\n" msgstr "Questa versione del server non supporta l'impostazione dei ruoli per database.\n" -#: describe.c:2688 +#: describe.c:2850 #, c-format msgid "No matching settings found.\n" msgstr "Nessuna impostazione corrispondente trovata.\n" -#: describe.c:2690 +#: describe.c:2852 #, c-format msgid "No settings found.\n" msgstr "Nessuna impostazione trovata.\n" -#: describe.c:2695 +#: describe.c:2857 msgid "List of settings" msgstr "Lista delle impostazioni" -#: describe.c:2764 +#: describe.c:2926 msgid "index" msgstr "indice" -#: describe.c:2766 +#: describe.c:2928 msgid "special" msgstr "speciale" -#: describe.c:2774 describe.c:4216 +#: describe.c:2936 describe.c:4378 msgid "Table" msgstr "Tabella" -#: describe.c:2850 +#: describe.c:3012 #, c-format msgid "No matching relations found.\n" msgstr "Nessuna relazione corrispondente trovata.\n" -#: describe.c:2852 +#: describe.c:3014 #, c-format msgid "No relations found.\n" msgstr "Nessuna relazione trovata.\n" -#: describe.c:2857 +#: describe.c:3019 msgid "List of relations" msgstr "Lista delle relazioni" -#: describe.c:2894 +#: describe.c:3056 msgid "Trusted" msgstr "Fidato" -#: describe.c:2902 +#: describe.c:3064 msgid "Internal Language" msgstr "Linguaggio interno" -#: describe.c:2903 +#: describe.c:3065 msgid "Call Handler" msgstr "Gestore Chiamate" -#: describe.c:2904 describe.c:4005 +#: describe.c:3066 describe.c:4167 msgid "Validator" msgstr "Validatore" -#: describe.c:2907 +#: describe.c:3069 msgid "Inline Handler" msgstr "Handler Inline" -#: describe.c:2935 +#: describe.c:3097 msgid "List of languages" msgstr "Lista dei linguaggi" -#: describe.c:2979 +#: describe.c:3141 msgid "Modifier" msgstr "Modificatore" -#: describe.c:2980 +#: describe.c:3142 msgid "Check" msgstr "Controllo" -#: describe.c:3022 +#: describe.c:3184 msgid "List of domains" msgstr "Lista dei domini" -#: describe.c:3056 +#: describe.c:3218 msgid "Source" msgstr "Sorgente" -#: describe.c:3057 +#: describe.c:3219 msgid "Destination" msgstr "Destinazione" -#: describe.c:3058 describe.c:3207 +#: describe.c:3220 describe.c:3369 msgid "no" msgstr "no" -#: describe.c:3058 describe.c:3209 +#: describe.c:3220 describe.c:3371 msgid "yes" msgstr "sì" -#: describe.c:3059 +#: describe.c:3221 msgid "Default?" msgstr "Predefinito?" -#: describe.c:3096 +#: describe.c:3258 msgid "List of conversions" msgstr "Lista delle conversioni" -#: describe.c:3135 +#: describe.c:3297 msgid "Event" msgstr "Evento" -#: describe.c:3137 +#: describe.c:3299 msgid "enabled" msgstr "abilitato" -#: describe.c:3138 +#: describe.c:3300 msgid "replica" msgstr "replica" -#: describe.c:3139 +#: describe.c:3301 msgid "always" msgstr "sempre" -#: describe.c:3140 +#: describe.c:3302 msgid "disabled" msgstr "disabilitato" -#: describe.c:3141 +#: describe.c:3303 msgid "Enabled" msgstr "Abilitato" -#: describe.c:3142 +#: describe.c:3304 msgid "Procedure" msgstr "Procedura" -#: describe.c:3143 +#: describe.c:3305 msgid "Tags" msgstr "Tag" -#: describe.c:3162 +#: describe.c:3324 msgid "List of event triggers" msgstr "Lista di trigger di evento" -#: describe.c:3204 +#: describe.c:3366 msgid "Source type" msgstr "Tipo di partenza" -#: describe.c:3205 +#: describe.c:3367 msgid "Target type" msgstr "Tipo di arrivo" -#: describe.c:3208 +#: describe.c:3370 msgid "in assignment" msgstr "in assegnazione" -#: describe.c:3210 +#: describe.c:3372 msgid "Implicit?" msgstr "Implicito?" -#: describe.c:3261 +#: describe.c:3423 msgid "List of casts" msgstr "Lista delle conversioni di tipo" -#: describe.c:3287 +#: describe.c:3449 #, c-format msgid "The server (version %d.%d) does not support collations.\n" msgstr "Il server (versione %d.%d) non supporta gli ordinamenti.\n" -#: describe.c:3337 +#: describe.c:3499 msgid "List of collations" msgstr "Lista degli ordinamenti" -#: describe.c:3396 +#: describe.c:3558 msgid "List of schemas" msgstr "Lista degli schemi" -#: describe.c:3419 describe.c:3654 describe.c:3722 describe.c:3790 +#: describe.c:3581 describe.c:3816 describe.c:3884 describe.c:3952 #, c-format msgid "The server (version %d.%d) does not support full text search.\n" msgstr "Il server (versione %d.%d) non supporta la ricerca full text.\n" -#: describe.c:3453 +#: describe.c:3615 msgid "List of text search parsers" msgstr "Lista degli analizzatori di ricerca resto" -#: describe.c:3496 +#: describe.c:3658 #, c-format msgid "Did not find any text search parser named \"%s\".\n" msgstr "Non ho trovato alcun analizzatore di ricerca testo chiamato \"%s\".\n" -#: describe.c:3571 +#: describe.c:3733 msgid "Start parse" msgstr "Inizio analisi" -#: describe.c:3572 +#: describe.c:3734 msgid "Method" msgstr "Metodo" -#: describe.c:3576 +#: describe.c:3738 msgid "Get next token" msgstr "Ottiene il token successivo" -#: describe.c:3578 +#: describe.c:3740 msgid "End parse" msgstr "Fine analisi" -#: describe.c:3580 +#: describe.c:3742 msgid "Get headline" msgstr "Ottiene intestazione" -#: describe.c:3582 +#: describe.c:3744 msgid "Get token types" msgstr "Ottieni i tipi token" -#: describe.c:3592 +#: describe.c:3754 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Analizzatore di ricerca teso \"%s.%s\"" -#: describe.c:3594 +#: describe.c:3756 #, c-format msgid "Text search parser \"%s\"" msgstr "Analizzatore di ricerca testo \"%s\"" -#: describe.c:3613 +#: describe.c:3775 msgid "Token name" msgstr "Nome token" -#: describe.c:3624 +#: describe.c:3786 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Tipi token per l'analizzatore \"%s.%s\"" -#: describe.c:3626 +#: describe.c:3788 #, c-format msgid "Token types for parser \"%s\"" msgstr "Tipi token per l'analizzatore \"%s\"" -#: describe.c:3676 +#: describe.c:3838 msgid "Template" msgstr "Modello" -#: describe.c:3677 +#: describe.c:3839 msgid "Init options" msgstr "Opzioni iniziali:" -#: describe.c:3699 +#: describe.c:3861 msgid "List of text search dictionaries" msgstr "Lista dei dizionari di ricerca testo" -#: describe.c:3739 +#: describe.c:3901 msgid "Init" msgstr "Init" -#: describe.c:3740 +#: describe.c:3902 msgid "Lexize" msgstr "Lexize" -#: describe.c:3767 +#: describe.c:3929 msgid "List of text search templates" msgstr "Lista dei modelli di ricerca testo" -#: describe.c:3824 +#: describe.c:3986 msgid "List of text search configurations" msgstr "Lista delle configurazioni di ricerca testo" -#: describe.c:3868 +#: describe.c:4030 #, c-format msgid "Did not find any text search configuration named \"%s\".\n" msgstr "Non trovata alcuna configurazione di ricerca testo chiamata \"%s\".\n" -#: describe.c:3934 +#: describe.c:4096 msgid "Token" msgstr "Token" -#: describe.c:3935 +#: describe.c:4097 msgid "Dictionaries" msgstr "Dizionari" -#: describe.c:3946 +#: describe.c:4108 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Configurazione di ricerca testo \"%s.%s\"" -#: describe.c:3949 +#: describe.c:4111 #, c-format msgid "Text search configuration \"%s\"" msgstr "Configurazione di ricerca testo \"%s\"" -#: describe.c:3953 +#: describe.c:4115 #, c-format msgid "" "\n" @@ -1596,7 +1676,7 @@ msgstr "" "\n" "Analizzatore \"%s.%s\"" -#: describe.c:3956 +#: describe.c:4118 #, c-format msgid "" "\n" @@ -1605,96 +1685,96 @@ msgstr "" "\n" "Analizzatore: \"%s\"" -#: describe.c:3988 +#: describe.c:4150 #, c-format msgid "The server (version %d.%d) does not support foreign-data wrappers.\n" msgstr "Il server (versione %d.%d) non supporta i wrapper di dati esterni.\n" -#: describe.c:4002 +#: describe.c:4164 msgid "Handler" msgstr "Handler" -#: describe.c:4045 +#: describe.c:4207 msgid "List of foreign-data wrappers" msgstr "Lista dei wrapper di dati esterni" -#: describe.c:4068 +#: describe.c:4230 #, c-format msgid "The server (version %d.%d) does not support foreign servers.\n" msgstr "Il server (versione %d.%d) non supporta server esterni.\n" -#: describe.c:4080 +#: describe.c:4242 msgid "Foreign-data wrapper" msgstr "Wrapper per dati esterni" -#: describe.c:4098 describe.c:4293 +#: describe.c:4260 describe.c:4455 msgid "Version" msgstr "Versione" -#: describe.c:4124 +#: describe.c:4286 msgid "List of foreign servers" msgstr "Lista dei server esterni" -#: describe.c:4147 +#: describe.c:4309 #, c-format msgid "The server (version %d.%d) does not support user mappings.\n" msgstr "IL server (versione %d.%d) non supporta la mappatura di utenti.\n" -#: describe.c:4156 describe.c:4217 +#: describe.c:4318 describe.c:4379 msgid "Server" msgstr "Server" -#: describe.c:4157 +#: describe.c:4319 msgid "User name" msgstr "Nome utente" -#: describe.c:4182 +#: describe.c:4344 msgid "List of user mappings" msgstr "Lista delle mappature degli utenti" -#: describe.c:4205 +#: describe.c:4367 #, c-format msgid "The server (version %d.%d) does not support foreign tables.\n" msgstr "Il server (versione %d.%d) non supporta tabelle esterne.\n" -#: describe.c:4256 +#: describe.c:4418 msgid "List of foreign tables" msgstr "Lista delle tabelle esterne" -#: describe.c:4279 describe.c:4333 +#: describe.c:4441 describe.c:4495 #, c-format msgid "The server (version %d.%d) does not support extensions.\n" msgstr "Il server (versione %d.%d) non supporta le estensioni.\n" -#: describe.c:4310 +#: describe.c:4472 msgid "List of installed extensions" msgstr "Lista delle estensioni installate" -#: describe.c:4360 +#: describe.c:4522 #, c-format msgid "Did not find any extension named \"%s\".\n" msgstr "Non ho trovato alcuna estensione nominata \"%s\".\n" -#: describe.c:4363 +#: describe.c:4525 #, c-format msgid "Did not find any extensions.\n" msgstr "Non ho trovato alcuna estensione.\n" -#: describe.c:4407 +#: describe.c:4569 msgid "Object Description" msgstr "Descrizione Oggetto" -#: describe.c:4416 +#: describe.c:4578 #, c-format msgid "Objects in extension \"%s\"" msgstr "Oggetti nell'estensione \"%s\"" -#: help.c:62 +#: help.c:63 #, c-format msgid "%s\n" msgstr "%s\n" -#: help.c:67 +#: help.c:70 #, c-format msgid "" "psql is the PostgreSQL interactive terminal.\n" @@ -1703,12 +1783,12 @@ msgstr "" "psql è il terminale interattivo per PostgreSQL.\n" "\n" -#: help.c:68 +#: help.c:71 help.c:315 help.c:348 help.c:375 #, c-format msgid "Usage:\n" msgstr "Utilizzo:\n" -#: help.c:69 +#: help.c:72 #, c-format msgid "" " psql [OPTION]... [DBNAME [USERNAME]]\n" @@ -1717,55 +1797,55 @@ msgstr "" " psql [OPZIONI]... [NOME DB [NOME UTENTE]]\n" "\n" -#: help.c:71 +#: help.c:74 #, c-format msgid "General options:\n" msgstr "Opzioni generali:\n" -#: help.c:76 +#: help.c:79 #, c-format msgid " -c, --command=COMMAND run only single command (SQL or internal) and exit\n" msgstr "" " -c, --command=COMANDO esegue solamente un comando singolo (SQL o interno)\n" " e termina\n" -#: help.c:77 +#: help.c:80 #, c-format msgid " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" msgstr "" " -d, --dbname=NOMEDB specifica il nome del database a cui connettersi\n" " (default: \"%s\")\n" -#: help.c:78 +#: help.c:81 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" msgstr " -f, --file=NOME FILE esegui i comandi da un file ed esci\n" -#: help.c:79 +#: help.c:82 #, c-format msgid " -l, --list list available databases, then exit\n" msgstr " -l --list elenca i database disponibili ed esci\n" -#: help.c:80 +#: help.c:83 #, c-format msgid "" " -v, --set=, --variable=NAME=VALUE\n" -" set psql variable NAME to VALUE\n" +" set psql variable NAME to VALUE e.g.: -v ON_ERROR_STOP=1\n" msgstr "" -" -v, --set=, --veariable=NOME=VALORE\n" -" imposta la variabile psql NOME a VALORE\n" +" -v, --set=, --variable=NOME=VALORE\n" +" imposta la variablie psql NOME a VALORE, es.: -v ON_ERROR_STOP=1\n" -#: help.c:82 +#: help.c:85 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informazioni sulla versione ed esci\n" -#: help.c:83 +#: help.c:86 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr " -X, --no-psqlrc non leggere il file di avvio (~/.psqlrc)\n" -#: help.c:84 +#: help.c:87 #, c-format msgid "" " -1 (\"one\"), --single-transaction\n" @@ -1774,12 +1854,22 @@ msgstr "" " -1 (\"uno\"), --single-transaction\n" " esegui in un'unica transazione (se non interattivo)\n" -#: help.c:86 +#: help.c:89 +#, c-format +msgid " -?, --help[=options] show this help, then exit\n" +msgstr " -?, --help[=opzioni] mostra quest'aiuto ed esci\n" + +#: help.c:90 +#, c-format +msgid " --help=variables show a list of all specially treated variables, then exit\n" +msgstr " --help=variabili mostra una lista di tutte le variabili speciali ed esci\n" + +#: help.c:91 #, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help mostra questo aiuto ed esci\n" +msgid " --help=commands show a list of backslash commands, then exit\n" +msgstr " --help=comandi mostra una lista dei comandi backslash ed esci\n" -#: help.c:88 +#: help.c:93 #, c-format msgid "" "\n" @@ -1788,60 +1878,65 @@ msgstr "" "\n" "Opzioni di input e output:\n" -#: help.c:89 +#: help.c:94 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all mostra tutti gli input dallo script\n" -#: help.c:90 +#: help.c:95 +#, c-format +msgid " -b, --echo-errors echo failed commands\n" +msgstr " -b, --echo-errors mostra i comandi falliti\n" + +#: help.c:96 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr " -e, --echo-queries mostra i comandi inviati al server\n" -#: help.c:91 +#: help.c:97 #, c-format msgid " -E, --echo-hidden display queries that internal commands generate\n" msgstr " -E, --echo-hidden mostra le query generate dai comandi interni\n" -#: help.c:92 +#: help.c:98 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" msgstr " -L, --log-file=NOME_FILE invia log di sessione al file\n" -#: help.c:93 +#: help.c:99 #, c-format msgid " -n, --no-readline disable enhanced command line editing (readline)\n" msgstr "" " -n, --no-readline disabilita la modifica avanzata della riga\n" " di comando (readline)\n" -#: help.c:94 +#: help.c:100 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" msgstr "" " -o, --output=NOME_FILE reindirizza i risultati al file specificato\n" " (oppure |pipe)\n" -#: help.c:95 +#: help.c:101 #, c-format msgid " -q, --quiet run quietly (no messages, only query output)\n" msgstr "" " -q, --quiet esegui in modo silenzioso (nessun messaggio, solo\n" " risultati query)\n" -#: help.c:96 +#: help.c:102 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" msgstr " -s, --single-step modalità passo singolo (conferma ogni query)\n" -#: help.c:97 +#: help.c:103 #, c-format msgid " -S, --single-line single-line mode (end of line terminates SQL command)\n" msgstr "" " -S, --single-line modalità riga singola (la fine riga termina\n" " il comando SQL)\n" -#: help.c:99 +#: help.c:105 #, c-format msgid "" "\n" @@ -1850,12 +1945,12 @@ msgstr "" "\n" "Opzioni formato output:\n" -#: help.c:100 +#: help.c:106 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr " -A, --no-align modo output tabelle disallineato\n" -#: help.c:101 +#: help.c:107 #, c-format msgid "" " -F, --field-separator=STRING\n" @@ -1865,19 +1960,19 @@ msgstr "" " separatore di campo per output non allineato\n" " (default: \"%s\")\n" -#: help.c:104 +#: help.c:110 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html modo output tabelle in HTML\n" -#: help.c:105 +#: help.c:111 #, c-format msgid " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset command)\n" msgstr "" " -P, --pset=VAR[=ARG] imposta l'opzione di stampa VAR ad ARG (vedi anche\n" " il comando \\pset)\n" -#: help.c:106 +#: help.c:112 #, c-format msgid "" " -R, --record-separator=STRING\n" @@ -1887,24 +1982,24 @@ msgstr "" " separatore di record per output non allineato\n" " (default: \"a capo\")\n" -#: help.c:108 +#: help.c:114 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr " -t, --tuples-only mostra solo le righe\n" -#: help.c:109 +#: help.c:115 #, c-format msgid " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)\n" msgstr "" " -T, --table-attr=TESTO imposta gli attributi delle tabelle HTML\n" " (es: larghezza, bordo)\n" -#: help.c:110 +#: help.c:116 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded attiva output tabelle espanso\n" -#: help.c:111 +#: help.c:117 #, c-format msgid "" " -z, --field-separator-zero\n" @@ -1914,7 +2009,7 @@ msgstr "" " usa il byte zero come separatore di campo per l'output\n" " non allineato\n" -#: help.c:113 +#: help.c:119 #, c-format msgid "" " -0, --record-separator-zero\n" @@ -1924,7 +2019,7 @@ msgstr "" " usa il byte zero come separatore di record per l'output\n" " non allineato\n" -#: help.c:116 +#: help.c:122 #, c-format msgid "" "\n" @@ -1933,40 +2028,40 @@ msgstr "" "\n" "Opzioni di connessione:\n" -#: help.c:119 +#: help.c:125 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory (default: \"%s\")\n" msgstr "" " -h, --host=HOSTNAME host server del database o directory socket\n" " (default: \"%s\")\n" -#: help.c:120 +#: help.c:126 msgid "local socket" msgstr "sockect locale" -#: help.c:123 +#: help.c:129 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr " -p, --port=PORTA porta di ascolto del database (default: \"%s\")\n" -#: help.c:129 +#: help.c:135 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr " -U, --username=UTENTE nome utente del database (default: \"%s\")\n" -#: help.c:130 +#: help.c:136 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password non chiedere mai le password\n" -#: help.c:131 +#: help.c:137 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password forza la richiesta di una password (dovrebbe essere\n" " automatico)\n" -#: help.c:133 +#: help.c:139 #, c-format msgid "" "\n" @@ -1981,491 +2076,525 @@ msgstr "" "documentazione PostgreSQL.\n" "\n" -#: help.c:136 +#: help.c:142 #, c-format msgid "Report bugs to .\n" msgstr "Puoi segnalare eventuali bug a .\n" -#: help.c:157 +#: help.c:165 #, c-format msgid "General\n" msgstr "Generali\n" -#: help.c:158 +#: help.c:166 #, c-format msgid " \\copyright show PostgreSQL usage and distribution terms\n" msgstr " \\copyright mostra i termini di uso e distribuzione di PostgreSQL\n" -#: help.c:159 +#: help.c:167 #, c-format msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" msgstr "" " \\g [FILE] o ; esegui la query (ed invia i risultati ad un file o\n" " ad una |pipe)\n" -#: help.c:160 +#: help.c:168 #, c-format msgid " \\gset [PREFIX] execute query and store results in psql variables\n" msgstr " \\gset [PREFIX] esegui la query e salva il risultato in una variabile psql\n" -#: help.c:161 -#, c-format -msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" -msgstr "" -" \\h [NOME] mostra aiuto sulla sintassi dei comandi SQL, * mostra\n" -" tutti i comandi\n" - -#: help.c:162 +#: help.c:169 #, c-format msgid " \\q quit psql\n" msgstr " \\q esci da psql\n" -#: help.c:163 +#: help.c:170 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEC] esegui una query ogni SEC secondi\n" -#: help.c:166 +#: help.c:173 +#, c-format +msgid "Help\n" +msgstr "Aiuto\n" + +#: help.c:175 +#, c-format +msgid " \\? [commands] description of all psql backslash commands\n" +msgstr " \\? [comandi] descrizione di tutti i comandi backslash psql\n" + +#: help.c:176 +#, c-format +msgid " \\? options description of all psql commandline options\n" +msgstr " \\? opzioni descrizione di tutte le opzioni di riga di comando psql\n" + +#: help.c:177 +#, c-format +msgid " \\? variables description of all psql configuration variables\n" +msgstr " \\? variabili descrizione di tutte le variabili di configurazione psql\n" + +#: help.c:178 +#, c-format +msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" +msgstr "" +" \\h [NOME] mostra aiuto sulla sintassi dei comandi SQL, * mostra\n" +" tutti i comandi\n" + +#: help.c:181 #, c-format msgid "Query Buffer\n" msgstr "Buffer Query\n" -#: help.c:167 +#: help.c:182 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr "" " \\e [FILE] [RIGA] modifica il buffer della query (o il file) con\n" " l'editor esterno\n" -#: help.c:168 +#: help.c:183 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr "" " \\ef [NOME_FUN [RIGA]] modifica la definizione della funzione con l'editor\n" " esterno\n" -#: help.c:169 +#: help.c:184 +#, c-format +msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" +msgstr "" +" \\ev [NOMEVISTA [RIGA]] modifica la definizione della vista con l'editor\n" +" esterno\n" + +#: help.c:185 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p mostra i contenuti del buffer query\n" -#: help.c:170 +#: help.c:186 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r reimposta (cancella) il buffer query\n" -#: help.c:172 +#: help.c:188 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [FILE] mostra la cronologia salvala in un file\n" -#: help.c:174 +#: help.c:190 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w FILE scrivi il buffer query su file\n" -#: help.c:177 +#: help.c:193 #, c-format msgid "Input/Output\n" msgstr "Input/Output\n" -#: help.c:178 +#: help.c:194 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr " \\copy ... esegui una SQL COPY con flusso di dati dal client\n" -#: help.c:179 +#: help.c:195 #, c-format msgid " \\echo [STRING] write string to standard output\n" msgstr " \\echo [STRINGA] stampa la stringa su standard output\n" -#: help.c:180 +#: help.c:196 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i FILE esegui i comandi dal file\n" -#: help.c:181 +#: help.c:197 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr "" " \\ir FILE come \\i, ma relativo alla posizione nello script\n" " corrente\n" -#: help.c:182 +#: help.c:198 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr "" " \\o [FILE] invia i risultati della query ad un file oppure\n" " una |pipe\n" -#: help.c:183 +#: help.c:199 #, c-format msgid " \\qecho [STRING] write string to query output stream (see \\o)\n" msgstr "" " \\qecho [STRINGA] scrivi la stringa nello stream di output della query\n" " (vedi \\o)\n" -#: help.c:186 +#: help.c:202 #, c-format msgid "Informational\n" msgstr "Informativi\n" -#: help.c:187 +#: help.c:203 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (opzioni: S = mostra gli oggetti di sistema, + = dettagli addizionali)\n" -#: help.c:188 +#: help.c:204 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] elenca le tabelle, le viste e le sequenze\n" -#: help.c:189 +#: help.c:205 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] NOME descrive la tabella, vista, sequenza o indice\n" -#: help.c:190 +#: help.c:206 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [MODELLO] elenca le funzioni di aggregazione\n" -#: help.c:191 +#: help.c:207 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [MODELLO] elenca i tablespace\n" -#: help.c:192 +#: help.c:208 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [MODELLO] elenca le conversioni di codifica\n" -#: help.c:193 +#: help.c:209 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [MODELLO] elenca le conversioni di tipo\n" -#: help.c:194 +#: help.c:210 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr " \\dd[S] [MODELLO] mostra la descrizione di oggetti non elencati altrove\n" -#: help.c:195 +#: help.c:211 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [MODELLO] elenca i privilegi predefiniti\n" -#: help.c:196 +#: help.c:212 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [MODELLO] elenca i domini\n" -#: help.c:197 +#: help.c:213 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [MODELLO] elenca le tabelle esterne\n" -#: help.c:198 +#: help.c:214 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [MODELLO] elenca i server esterni\n" -#: help.c:199 +#: help.c:215 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [MODELLO] elenca le mappature degli utenti\n" -#: help.c:200 +#: help.c:216 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [MODELLO] elenca i wrapper di dati esterni\n" -#: help.c:201 +#: help.c:217 #, c-format msgid " \\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions\n" msgstr " \\df[antw][S+] [MOD] elenca le funzioni [solo aggr/normali/trigger/finestra]\n" -#: help.c:202 +#: help.c:218 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [MODELLO] elenca le configurazioni di ricerca testo\n" -#: help.c:203 +#: help.c:219 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [MODELLO] elenca i dizionari di ricerca testo\n" -#: help.c:204 +#: help.c:220 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [MODELLO] elenca gli analizzatori di ricerca testo\n" -#: help.c:205 +#: help.c:221 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [MODELLO] elenca i modelli di ricerca di testo\n" -#: help.c:206 +#: help.c:222 #, c-format msgid " \\dg[+] [PATTERN] list roles\n" msgstr " \\dg[+] [MODELLO] elenca i ruoli\n" -#: help.c:207 +#: help.c:223 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [MODELLO] elenca gli indici\n" -#: help.c:208 +#: help.c:224 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl elenca i large object, stesso risultato di \\lo_list\n" -#: help.c:209 +#: help.c:225 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [MODELLO] elenca i linguaggi procedurali\n" -#: help.c:210 +#: help.c:226 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [PATTERN] elenca le viste materializzate\n" -#: help.c:211 +#: help.c:227 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [MODELLO] elenca gli schemi\n" -#: help.c:212 +#: help.c:228 #, c-format msgid " \\do[S] [PATTERN] list operators\n" msgstr " \\do[S] [MODELLO] elenca gli operatori\n" -#: help.c:213 +#: help.c:229 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [MODELLO] elenca gli ordinamenti\n" -#: help.c:214 +#: help.c:230 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr "" " \\dp [MODELLO] elenca i permessi di accesso alla tabella, vista\n" " o sequenza\n" -#: help.c:215 +#: help.c:231 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [MOD1 [MOD2]] elenca le impostazioni dei ruoli per database\n" -#: help.c:216 +#: help.c:232 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [MODELLO] elenca le sequenze\n" -#: help.c:217 +#: help.c:233 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [MODELLO] elenca le tabelle\n" -#: help.c:218 +#: help.c:234 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [MODELLO] elenca i tipi di dato\n" -#: help.c:219 +#: help.c:235 #, c-format msgid " \\du[+] [PATTERN] list roles\n" msgstr " \\du[+] [MODELLO] elenca i ruoli\n" -#: help.c:220 +#: help.c:236 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [MODELLO] elenca le viste\n" -#: help.c:221 +#: help.c:237 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [MODELLO] elenca le tabelle esterne\n" -#: help.c:222 +#: help.c:238 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [MODELLO] elenca le estensioni\n" -#: help.c:223 +#: help.c:239 #, c-format msgid " \\dy [PATTERN] list event triggers\n" msgstr " \\dy [PATTERN] elenca i trigger di evento\n" -#: help.c:224 +#: help.c:240 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [PATTERN] elenca i database\n" -#: help.c:225 +#: help.c:241 #, c-format -msgid " \\sf[+] FUNCNAME show a function's definition\n" -msgstr " \\sf[+] NOME_FUNZ elenca la definizione della funzione\n" +msgid " \\sf[+] FUNCNAME show a function's definition\n" +msgstr " \\sf[+] NOMEFUNZ mostra la definizione di una funzione\n" -#: help.c:226 +#: help.c:242 +#, c-format +msgid " \\sv[+] VIEWNAME show a view's definition\n" +msgstr " \\sv[+] NOMEVISTA mostra la definizione di una vista\n" + +#: help.c:243 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [MODELLO] uguale a \\dp\n" -#: help.c:229 +#: help.c:246 #, c-format msgid "Formatting\n" msgstr "Formattazione\n" -#: help.c:230 +#: help.c:247 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr " \\a alterna tra modalità di output allineata e disallineata\n" -#: help.c:231 +#: help.c:248 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr "" " \\C [STRINGA] imposta nome tabella oppure elimina se la stringa\n" " non è specificata\n" -#: help.c:232 +#: help.c:249 #, c-format msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr "" " \\f [STRINGA] mostra o imposta il separatore di campo per l'output\n" " query disallineato\n" -#: help.c:233 +#: help.c:250 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H cambia modalità HTML (attualmente %s)\n" -#: help.c:235 +#: help.c:252 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" " (NAME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|\n" -" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})\n" +" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager|\n" +" unicode_border_linestyle|unicode_column_linestyle|unicode_header_linestyle})\n" msgstr "" " \\pset [NOME [VALORE]] imposta opzioni di output tabella\n" " (NOME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|\n" -" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})\n" +" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager|\n" +" unicode_border_linestyle|unicode_column_linestyle|unicode_header_linestyle})\n" -#: help.c:238 +#: help.c:256 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] mostra solo le righe (attualmente %s)\n" -#: help.c:240 +#: help.c:258 #, c-format msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" msgstr "" " \\T [STRINGA] imposta gli attributi HTML di
, se non\n" " specificato allora annullali\n" -#: help.c:241 +#: help.c:259 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr "" " \\x [on|off|auto] cambia modalità output espansa\n" " (attualmente %s)\n" -#: help.c:245 +#: help.c:263 #, c-format msgid "Connection\n" msgstr "Connessione\n" -#: help.c:247 +#: help.c:265 #, c-format msgid "" -" \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently \"%s\")\n" msgstr "" -" \\c[onnect] [NOMEDB|- UTENTE|- HOST|- PORTA|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connetti ad un nuovo database (attualmente \"%s\")\n" -#: help.c:251 +#: help.c:269 #, c-format msgid "" -" \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently no connection)\n" msgstr "" -" \\c[onnect] [NOMEDB|- UTENTE|- HOST|- PORTA|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connetti ad un nuovo database (nessuna connessione attiva)\n" -#: help.c:253 +#: help.c:271 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [CODIFICA] mostra o imposta la codifica del client\n" -#: help.c:254 +#: help.c:272 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr " \\password [UTENTE] cambia la password per un utente in sicurezza\n" -#: help.c:255 +#: help.c:273 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo mostra le informazioni su la connessione corrente\n" -#: help.c:258 +#: help.c:276 #, c-format msgid "Operating System\n" msgstr "Sistema operativo\n" -#: help.c:259 +#: help.c:277 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [DIRECTORY] cambia la directory di lavoro\n" -#: help.c:260 +#: help.c:278 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NOME [VALORE] imposta o elimina una variabile d'ambiente\n" -#: help.c:261 +#: help.c:279 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr "" " \\timing [on|off] imposta cronometro dei comandi\n" " (attualmente %s)\n" -#: help.c:263 +#: help.c:281 #, c-format msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr "" " \\! [COMANDO] esegui un comando in una shell oppure avvia una shell\n" " interattiva\n" -#: help.c:266 +#: help.c:284 #, c-format msgid "Variables\n" msgstr "Variabili\n" -#: help.c:267 +#: help.c:285 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr " \\prompt [TESTO] NOME richiedi all'utente di impostare una variabile interna\n" -#: help.c:268 +#: help.c:286 #, c-format msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" msgstr "" " \\set [NOME [VALORE]] imposta una variabile interna, oppure mostrale tutte\n" " se non sono specificati parametri\n" -#: help.c:269 +#: help.c:287 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset NOME cancella una variabile interna\n" -#: help.c:272 +#: help.c:290 #, c-format msgid "Large Objects\n" msgstr "Large Object\n" -#: help.c:273 +#: help.c:291 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -2478,11 +2607,413 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID operazioni sui large object\n" -#: help.c:320 +#: help.c:312 +#, c-format +msgid "List of specially treated variables.\n" +msgstr "Lista di variabili speciali.\n" + +#: help.c:314 +#, c-format +msgid "psql variables:\n" +msgstr "variabili psql:\n" + +#: help.c:316 +#, c-format +msgid "" +" psql --set=NAME=VALUE\n" +" or \\set NAME VALUE in interactive mode\n" +"\n" +msgstr "" +" psql --set=NOME=VALORE\n" +" o \\set NOME VALORE in modalità interattiva\n" +"\n" + +#: help.c:318 +#, c-format +msgid " AUTOCOMMIT if set, successful SQL commands are automatically committed\n" +msgstr " AUTOCOMMIT se impostato, i comandi SQL riusciti sono salvati automaticamente\n" + +#: help.c:319 +#, c-format +msgid "" +" COMP_KEYWORD_CASE determine the case used to complete SQL keywords\n" +" [lower, upper, preserve-lower, preserve-upper]\n" +msgstr "" +" COMP_KEYWORD_CASE determina il caso usato per completare le parole chiave SQL\n" +" [lower, upper, preserve-lower, preserve-upper]\n" + +#: help.c:321 +#, c-format +msgid " DBNAME the currently connected database name\n" +msgstr " DBNAME il nome del database attualmente connesso\n" + +#: help.c:322 +#, c-format +msgid "" +" ECHO control what input is written to standard output\n" +" [all, errors, none, queries]\n" +msgstr "" +" ECHO controlla quale input è scritto su stardard output\n" +" [all, errors, none, queries]\n" + +#: help.c:324 +#, c-format +msgid "" +" ECHO_HIDDEN display internal queries executed by backslash commands when it is set\n" +" or with [noexec] just show without execution\n" +msgstr "" +" ECHO_HIDDEN mostra le query interne eseguite dai comandi backslash quando impostato\n" +" o con [noexec] mostrali solo senza eseguirli\n" + +#: help.c:326 +#, c-format +msgid " ENCODING current client character set encoding\n" +msgstr " ENCODING codifica del set di caratteri del client corrente\n" + +#: help.c:327 +#, c-format +msgid "" +" FETCH_COUNT the number of result rows to fetch and display at a time\n" +" (default: 0=unlimited)\n" +msgstr "" +" FETCH_COUNT il numero di righe del risultato da leggere e mostrare pr volta\n" +" (default: 0=tutte)\n" + +#: help.c:329 +#, c-format +msgid " HISTCONTROL control history list [ignorespace, ignoredups, ignoreboth]\n" +msgstr " HISTCONTROL lista di controllo storia [ignorespace, ignoredups, ignoreboth]\n" + +#: help.c:330 +#, c-format +msgid " HISTFILE file name used to store the history list\n" +msgstr " HISTFILE nome del file usato per memorizzare la lista della storia\n" + +#: help.c:331 +#, c-format +msgid " HISTSIZE the number of commands to store in the command history\n" +msgstr " HISTSIZE il numero di comandi da memorizzare nella storia dei comandi\n" + +#: help.c:332 +#, c-format +msgid " HOST the currently connected database server\n" +msgstr " HOST il server del database attualmente connesso\n" + +#: help.c:333 +#, c-format +msgid " IGNOREEOF if unset, sending an EOF to interactive session terminates application\n" +msgstr " IGNOREEOF se non impostato, invare un EOF alla sessione interattiva termina l'applicazione\n" + +#: help.c:334 +#, c-format +msgid " LASTOID the value of last affected OID\n" +msgstr " LASTOID il valore dell'ultimo OID interessato\n" + +#: help.c:335 +#, c-format +msgid " ON_ERROR_ROLLBACK if set, an error doesn't stop a transaction (uses implicit SAVEPOINTs)\n" +msgstr " ON_ERROR_ROLLBACK se impostato, un errore non termina una transazione (usa SAVEPOINT impliciti)\n" + +#: help.c:336 +#, c-format +msgid " ON_ERROR_STOP stop batch execution after error\n" +msgstr " ON_ERROR_STOP termina l'esecuzione batch dopo un errore\n" + +#: help.c:337 +#, c-format +msgid " PORT server port of the current connection\n" +msgstr " PORT porta del server attualmente connesso\n" + +#: help.c:338 +#, c-format +msgid " PROMPT1 specify the standard psql prompt\n" +msgstr " PROMPT1 specifica il prompt psql standard\n" + +#: help.c:339 +#, c-format +msgid " PROMPT2 specify the prompt used when a statement continues from a previous line\n" +msgstr " PROMPT2 specifica il prompt usato quando un'istruzione continua da una riga precedente\n" + +#: help.c:340 +#, c-format +msgid " PROMPT3 specify the prompt used during COPY ... FROM STDIN\n" +msgstr " PROMPT3 specifica il prompt usato in COPY ... FROM STDIN\n" + +#: help.c:341 +#, c-format +msgid " QUIET run quietly (same as -q option)\n" +msgstr " QUIET esegui silenziosamente (come con l'opzione -q)\n" + +#: help.c:342 +#, c-format +msgid " SINGLELINE end of line terminates SQL command mode (same as -S option)\n" +msgstr " SINGLELINE la fine riga termina i comandi SQL (come con l'opzione -S)\n" + +#: help.c:343 +#, c-format +msgid " SINGLESTEP single-step mode (same as -s option)\n" +msgstr " SINGLESTEP modalità passo singolo (come con l'opzione -s)\n" + +#: help.c:344 +#, c-format +msgid " USER the currently connected database user\n" +msgstr " USER l'utente database attualmente connesso\n" + +#: help.c:345 +#, c-format +msgid " VERBOSITY control verbosity of error reports [default, verbose, terse]\n" +msgstr " VERBOSITY controlla la loquacità dei report degli errori [default, verbose, terse]\n" + +#: help.c:347 +#, c-format +msgid "" +"\n" +"Display influencing variables:\n" +msgstr "" +"\n" +"Variabili che influenzano la visualizzazione:\n" + +#: help.c:349 +#, c-format +msgid "" +" psql --pset=NAME[=VALUE]\n" +" or \\pset NAME [VALUE] in interactive mode\n" +"\n" +msgstr "" +" psql --pset=NOME[=VALORE]\n" +" or \\pset NOME [VALORE] in modo interattivo\n" +"\n" + +#: help.c:351 +#, c-format +msgid " border border style (number)\n" +msgstr " border stile bordo (numero)\n" + +#: help.c:352 +#, c-format +msgid " columns set the target width for the wrapped format\n" +msgstr " columns imposta la larghezza obiettivo per il formato wrapped\n" + +#: help.c:353 +#, c-format +msgid " expanded (or x) toggle expanded output\n" +msgstr " expanded (or x) attiva/disattiva l'output espanso\n" + +#: help.c:354 +#, c-format +msgid " fieldsep field separator for unaligned output (default '|')\n" +msgstr " fieldsep separatore di caompo per l'output non allineato (default '|')\n" + +#: help.c:355 +#, c-format +msgid " fieldsep_zero set field separator in unaligned mode to zero\n" +msgstr " fieldsep_zero imposta il separatore di campo in modo non allineato a zero\n" + +#: help.c:356 +#, c-format +msgid " format set output format [unaligned, aligned, wrapped, html, asciidoc, ...]\n" +msgstr " format imposta il formato di output [unaligned, aligned, wrapped, html, asciidoc, ...]\n" + +#: help.c:357 +#, c-format +msgid " footer enable or disable display of the table footer [on, off]\n" +msgstr " footer abilita o disabilita la visualizzazione del piè di pagina [on, off]\n" + +#: help.c:358 +#, c-format +msgid " linestyle set the border line drawing style [ascii, old-ascii, unicode]\n" +msgstr " linestyle imposta lo stile di disegno delle righe dei bordi [ascii, old-ascii, unicode]\n" + +#: help.c:359 +#, c-format +msgid " null set the string to be printed in place of a null value\n" +msgstr " null imposta la stringa da visualizzare al posto dei valori null\n" + +#: help.c:360 +#, c-format +msgid "" +" numericlocale enable or disable display of a locale-specific character to separate\n" +" groups of digits [on, off]\n" +msgstr "" +" numericlocale abilita o disabilita i caratteri specifici per il locale per separare\n" +" i gruppi di cifre [on, off]\n" + +#: help.c:362 +#, c-format +msgid " pager control when an external pager is used [yes, no, always]\n" +msgstr " pager controlla quando usare la paginazione esterna [yes, no, always]\n" + +#: help.c:363 +#, c-format +msgid " recordsep specify the record (line) separator to use in unaligned output format\n" +msgstr "" +" recordsep specifica il separatore di record (riga) da usare nel formato di output\n" +" non allneato\n" + +#: help.c:364 +#, c-format +msgid " recordsep_zero set the record separator to use in unaligned output format to a zero byte.\n" +msgstr " recordsep_zero imposta il separatore di record da usare in output non allineato al byte zero.\n" + +#: help.c:365 +#, c-format +msgid "" +" tableattr (or T) specify attributes for table tag in html format or proportional\n" +" column width of left aligned data type in latex format\n" +msgstr "" +" tableattr (or T) specifica gli attributi per il tag table in formato html o la\n" +" larghezza colonna proporzionale dei dati allineati a sx in latex\n" + +#: help.c:367 +#, c-format +msgid " title set the table title for any subsequently printed tables\n" +msgstr " title imposta il titolo della tabella per ogni tabella stampata in seguto\n" + +#: help.c:368 +#, c-format +msgid " tuples_only if set, only actual table data is shown\n" +msgstr " tuples_only se impostato, mostra solo i dati della tabella\n" + +#: help.c:369 +#, c-format +msgid " unicode_border_linestyle\n" +msgstr " unicode_border_linestyle\n" + +#: help.c:370 +#, c-format +msgid " unicode_column_linestyle\n" +msgstr " unicode_column_linestyle\n" + +#: help.c:371 +#, c-format +msgid "" +" unicode_header_linestyle\n" +" set the style of unicode line drawing [single, double]\n" +msgstr "" +" unicode_header_linestyle\n" +" imposta lo stile di disegno delle righe unicode [single, double]\n" + +#: help.c:374 +#, c-format +msgid "" +"\n" +"Environment variables:\n" +msgstr "" +"\n" +"Variabili d'ambiente:\n" + +#: help.c:378 +#, c-format +msgid "" +" NAME=VALUE [NAME=VALUE] psql ...\n" +" or \\setenv NAME [VALUE] in interactive mode\n" +"\n" +msgstr "" +" NOME=VALORE [NOME=VALORE] psql ...\n" +" o \\setenv NOME [VALORE] in modalità interattiva\n" +"\n" + +#: help.c:380 +#, c-format +msgid "" +" set NAME=VALUE\n" +" psql ...\n" +" or \\setenv NAME VALUE in interactive mode\n" +"\n" +msgstr "" +" imposta NOME=VALORE\n" +" psql ...\n" +" o \\setenv NOME VALORE in modalità interattiva\n" +"\n" + +#: help.c:383 +#, c-format +msgid " COLUMNS number of columns for wrapped format\n" +msgstr " COLUMNS numero di colonne per il formato wrapped\n" + +#: help.c:384 +#, c-format +msgid " PAGER name of external pager program\n" +msgstr " PAGER nome del programma di paginazione esterno\n" + +#: help.c:385 +#, c-format +msgid " PGAPPNAME same as the application_name connection parameter\n" +msgstr " PGAPPNAME come il parametro di connessione application_name\n" + +#: help.c:386 +#, c-format +msgid " PGDATABASE same as the dbname connection parameter\n" +msgstr " PGDATABASE come il parametro di connessione dbname\n" + +#: help.c:387 +#, c-format +msgid " PGHOST same as the host connection parameter\n" +msgstr " PGHOST come il parametro di connessione host\n" + +#: help.c:388 +#, c-format +msgid " PGPORT same as the port connection parameter\n" +msgstr " PGPORT come il parametro di connessione port\n" + +#: help.c:389 +#, c-format +msgid " PGUSER same as the user connection parameter\n" +msgstr " PGUSER come il parametro di connessione user\n" + +#: help.c:390 +#, c-format +msgid " PGPASSWORD connection password (not recommended)\n" +msgstr " PGPASSWORD password di connessione (uso non raccomandato)\n" + +#: help.c:391 +#, c-format +msgid " PGPASSFILE password file name\n" +msgstr " PGPASSFILE nome del file delle password\n" + +#: help.c:392 +#, c-format +msgid "" +" PSQL_EDITOR, EDITOR, VISUAL\n" +" editor used by the \\e, \\ef, and \\ev commands\n" +msgstr "" +" PSQL_EDITOR, EDITOR, VISUAL\n" +" editor usato dai comandi \\e, \\ef, \\ev\n" + +#: help.c:394 +#, 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" +" come specificare un numero di riga quando si invoca l'editor\n" + +#: help.c:396 +#, c-format +msgid " PSQL_HISTORY alternative location for the command history file\n" +msgstr " PSQL_HISTORY posizione alternativa del file della storia dei comandi\n" + +#: help.c:397 +#, c-format +msgid " PSQLRC alternative location for the user's .psqlrc file\n" +msgstr " PSQLRC posizione alternativa del file .psqlrc dell'utente\n" + +#: help.c:398 +#, c-format +msgid " SHELL shell used by the \\! command\n" +msgstr " SHELL shell usata dal comando \\!\n" + +#: help.c:399 +#, c-format +msgid " TMPDIR directory for temporary files\n" +msgstr " TMPDIR directory per i file temporanei\n" + +#: help.c:442 msgid "Available help:\n" msgstr "Aiuti disponibili:\n" -#: help.c:404 +#: help.c:526 #, c-format msgid "" "Command: %s\n" @@ -2497,7 +3028,7 @@ msgstr "" "%s\n" "\n" -#: help.c:420 +#: help.c:542 #, c-format msgid "" "No help available for \"%s\".\n" @@ -2511,49 +3042,57 @@ msgstr "" msgid "could not read from input file: %s\n" msgstr "lettura dal file di input fallita: %s\n" -#: input.c:451 input.c:490 +#: input.c:446 input.c:485 #, c-format msgid "could not save history to file \"%s\": %s\n" msgstr "salvataggio della cronologia nel file \"%s\" fallita: %s\n" -#: input.c:510 +#: input.c:505 #, c-format msgid "history is not supported by this installation\n" msgstr "history non è supportata da questa installazione\n" -#: large_obj.c:66 +#: large_obj.c:64 #, c-format msgid "%s: not connected to a database\n" msgstr "%s: non connesso ad un database\n" -#: large_obj.c:85 +#: large_obj.c:83 #, c-format msgid "%s: current transaction is aborted\n" msgstr "%s: questa transazione è stata interrotta\n" -#: large_obj.c:88 +#: large_obj.c:86 #, c-format msgid "%s: unknown transaction status\n" msgstr "%s: stato della transazione sconosciuto\n" -#: large_obj.c:289 large_obj.c:300 +#: large_obj.c:287 large_obj.c:298 msgid "ID" msgstr "ID" -#: large_obj.c:310 +#: large_obj.c:308 msgid "Large objects" msgstr "Large object" -#: mainloop.c:159 +#: mainloop.c:161 #, c-format msgid "Use \"\\q\" to leave %s.\n" msgstr "Utilizza \"\\q\" per uscire %s.\n" -#: mainloop.c:189 +#: mainloop.c:183 +msgid "" +"The input is a PostgreSQL custom-format dump.\n" +"Use the pg_restore command-line client to restore this dump to a database.\n" +msgstr "" +"L'input è un file di dump in formato PostgreSQL.\n" +"Usa il tool di riga di comando pg_restore per ripristinare questo dump in un database.\n" + +#: mainloop.c:203 msgid "You are using psql, the command-line interface to PostgreSQL." msgstr "Stai utilizzando psql, l'interfaccia a riga di comando di PostgreSQL." -#: mainloop.c:190 +#: mainloop.c:204 #, c-format msgid "" "Type: \\copyright for distribution terms\n" @@ -2568,1912 +3107,2049 @@ msgstr "" " \\g o termina con punto e virgola per eseguire la query\n" " \\q per uscire\n" -#: print.c:272 +#: print.c:338 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu riga)" msgstr[1] "(%lu righe)" -#: print.c:1174 -#, c-format -msgid "(No rows)\n" -msgstr "(Nessuna riga)\n" - -#: print.c:2238 +#: print.c:2795 #, c-format msgid "Interrupted\n" msgstr "Interrotto\n" -#: print.c:2304 +#: print.c:2861 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "Non è possibile aggiungere l'intestazione al contenuto della tabella: il numero di colonne %d è stato superato.\n" -#: print.c:2344 +#: print.c:2901 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "Non è possibile aggiungere celle al contenuto della tabella: il numero totale di celle %d è stato superato.\n" -#: print.c:2570 +#: print.c:3133 #, c-format msgid "invalid output format (internal error): %d" msgstr "il formato di output non è valido (errore interno): %d" -#: psqlscan.l:727 +#: psqlscan.l:751 #, c-format msgid "skipping recursive expansion of variable \"%s\"\n" msgstr "espansione ricorsiva della variabile \"%s\" evitata\n" -#: psqlscan.l:1604 +#: psqlscan.l:1627 #, c-format msgid "unterminated quoted string\n" msgstr "stringa tra virgolette non terminata\n" -#: psqlscan.l:1704 +#: psqlscan.l:1727 #, c-format msgid "%s: out of memory\n" msgstr "%s: memoria esaurita\n" -#: psqlscan.l:1933 +#: psqlscan.l:1956 #, c-format msgid "can't escape without active connection\n" msgstr "non è possibile effettuare l'escape senza una connessione attiva\n" -#: sql_help.c:32 sql_help.c:35 sql_help.c:38 sql_help.c:60 sql_help.c:62 -#: sql_help.c:64 sql_help.c:75 sql_help.c:77 sql_help.c:79 sql_help.c:103 -#: sql_help.c:107 sql_help.c:109 sql_help.c:111 sql_help.c:113 sql_help.c:116 -#: sql_help.c:118 sql_help.c:120 sql_help.c:213 sql_help.c:215 sql_help.c:216 -#: sql_help.c:218 sql_help.c:220 sql_help.c:223 sql_help.c:225 sql_help.c:227 -#: sql_help.c:229 sql_help.c:241 sql_help.c:242 sql_help.c:243 sql_help.c:245 -#: sql_help.c:290 sql_help.c:292 sql_help.c:294 sql_help.c:296 sql_help.c:354 -#: sql_help.c:359 sql_help.c:361 sql_help.c:396 sql_help.c:398 sql_help.c:401 -#: sql_help.c:403 sql_help.c:460 sql_help.c:465 sql_help.c:470 sql_help.c:475 -#: sql_help.c:515 sql_help.c:517 sql_help.c:519 sql_help.c:522 sql_help.c:524 -#: sql_help.c:535 sql_help.c:537 sql_help.c:577 sql_help.c:579 sql_help.c:582 -#: sql_help.c:584 sql_help.c:586 sql_help.c:612 sql_help.c:616 sql_help.c:629 -#: sql_help.c:632 sql_help.c:635 sql_help.c:655 sql_help.c:667 sql_help.c:675 -#: sql_help.c:678 sql_help.c:681 sql_help.c:711 sql_help.c:717 sql_help.c:719 -#: sql_help.c:723 sql_help.c:726 sql_help.c:729 sql_help.c:738 sql_help.c:749 -#: sql_help.c:751 sql_help.c:768 sql_help.c:777 sql_help.c:779 sql_help.c:781 -#: sql_help.c:793 sql_help.c:797 sql_help.c:799 sql_help.c:878 sql_help.c:880 -#: sql_help.c:883 sql_help.c:886 sql_help.c:888 sql_help.c:890 sql_help.c:951 -#: sql_help.c:953 sql_help.c:955 sql_help.c:958 sql_help.c:979 sql_help.c:982 -#: sql_help.c:985 sql_help.c:988 sql_help.c:992 sql_help.c:994 sql_help.c:996 -#: sql_help.c:998 sql_help.c:1012 sql_help.c:1015 sql_help.c:1017 -#: sql_help.c:1019 sql_help.c:1029 sql_help.c:1031 sql_help.c:1041 -#: sql_help.c:1043 sql_help.c:1052 sql_help.c:1073 sql_help.c:1075 -#: sql_help.c:1077 sql_help.c:1080 sql_help.c:1082 sql_help.c:1084 -#: sql_help.c:1122 sql_help.c:1128 sql_help.c:1130 sql_help.c:1133 -#: sql_help.c:1135 sql_help.c:1137 sql_help.c:1164 sql_help.c:1167 -#: sql_help.c:1169 sql_help.c:1171 sql_help.c:1173 sql_help.c:1175 -#: sql_help.c:1178 sql_help.c:1218 sql_help.c:1456 sql_help.c:1472 -#: sql_help.c:1485 sql_help.c:1536 sql_help.c:1540 sql_help.c:1550 -#: sql_help.c:1568 sql_help.c:1591 sql_help.c:1609 sql_help.c:1637 -#: sql_help.c:1696 sql_help.c:1738 sql_help.c:1760 sql_help.c:1780 -#: sql_help.c:1781 sql_help.c:1816 sql_help.c:1836 sql_help.c:1858 -#: sql_help.c:1886 sql_help.c:1911 sql_help.c:1947 sql_help.c:2133 -#: sql_help.c:2146 sql_help.c:2163 sql_help.c:2179 sql_help.c:2202 -#: sql_help.c:2253 sql_help.c:2257 sql_help.c:2259 sql_help.c:2265 -#: sql_help.c:2283 sql_help.c:2310 sql_help.c:2345 sql_help.c:2357 -#: sql_help.c:2366 sql_help.c:2416 sql_help.c:2444 sql_help.c:2452 -#: sql_help.c:2460 sql_help.c:2468 sql_help.c:2476 sql_help.c:2484 -#: sql_help.c:2492 sql_help.c:2500 sql_help.c:2509 sql_help.c:2520 -#: sql_help.c:2528 sql_help.c:2536 sql_help.c:2544 sql_help.c:2552 -#: sql_help.c:2562 sql_help.c:2571 sql_help.c:2580 sql_help.c:2588 -#: sql_help.c:2596 sql_help.c:2605 sql_help.c:2613 sql_help.c:2621 -#: sql_help.c:2629 sql_help.c:2637 sql_help.c:2645 sql_help.c:2653 -#: sql_help.c:2661 sql_help.c:2669 sql_help.c:2677 sql_help.c:2686 -#: sql_help.c:2694 sql_help.c:2711 sql_help.c:2726 sql_help.c:2932 -#: sql_help.c:2983 sql_help.c:3011 sql_help.c:3019 sql_help.c:3417 -#: sql_help.c:3465 sql_help.c:3585 +#: sql_help.c:33 sql_help.c:36 sql_help.c:39 sql_help.c:61 sql_help.c:63 +#: sql_help.c:65 sql_help.c:76 sql_help.c:78 sql_help.c:80 sql_help.c:106 +#: sql_help.c:112 sql_help.c:114 sql_help.c:116 sql_help.c:118 sql_help.c:121 +#: sql_help.c:123 sql_help.c:125 sql_help.c:218 sql_help.c:220 sql_help.c:221 +#: sql_help.c:223 sql_help.c:225 sql_help.c:228 sql_help.c:230 sql_help.c:232 +#: sql_help.c:234 sql_help.c:246 sql_help.c:247 sql_help.c:248 sql_help.c:250 +#: sql_help.c:296 sql_help.c:298 sql_help.c:300 sql_help.c:302 sql_help.c:362 +#: sql_help.c:367 sql_help.c:369 sql_help.c:412 sql_help.c:414 sql_help.c:417 +#: sql_help.c:419 sql_help.c:483 sql_help.c:488 sql_help.c:493 sql_help.c:498 +#: sql_help.c:546 sql_help.c:548 sql_help.c:550 sql_help.c:553 sql_help.c:555 +#: sql_help.c:566 sql_help.c:568 sql_help.c:608 sql_help.c:610 sql_help.c:613 +#: sql_help.c:615 sql_help.c:617 sql_help.c:651 sql_help.c:655 sql_help.c:659 +#: sql_help.c:678 sql_help.c:681 sql_help.c:684 sql_help.c:713 sql_help.c:725 +#: sql_help.c:733 sql_help.c:736 sql_help.c:739 sql_help.c:753 sql_help.c:799 +#: sql_help.c:822 sql_help.c:833 sql_help.c:835 sql_help.c:852 sql_help.c:861 +#: sql_help.c:863 sql_help.c:865 sql_help.c:877 sql_help.c:881 sql_help.c:883 +#: sql_help.c:965 sql_help.c:967 sql_help.c:970 sql_help.c:973 sql_help.c:975 +#: sql_help.c:977 sql_help.c:1038 sql_help.c:1040 sql_help.c:1042 +#: sql_help.c:1045 sql_help.c:1066 sql_help.c:1069 sql_help.c:1072 +#: sql_help.c:1075 sql_help.c:1079 sql_help.c:1081 sql_help.c:1083 +#: sql_help.c:1085 sql_help.c:1099 sql_help.c:1102 sql_help.c:1104 +#: sql_help.c:1106 sql_help.c:1116 sql_help.c:1118 sql_help.c:1128 +#: sql_help.c:1130 sql_help.c:1139 sql_help.c:1160 sql_help.c:1162 +#: sql_help.c:1164 sql_help.c:1167 sql_help.c:1169 sql_help.c:1171 +#: sql_help.c:1221 sql_help.c:1259 sql_help.c:1262 sql_help.c:1264 +#: sql_help.c:1266 sql_help.c:1268 sql_help.c:1270 sql_help.c:1273 +#: sql_help.c:1313 sql_help.c:1557 sql_help.c:1573 sql_help.c:1586 +#: sql_help.c:1637 sql_help.c:1641 sql_help.c:1651 sql_help.c:1671 +#: sql_help.c:1696 sql_help.c:1714 sql_help.c:1742 sql_help.c:1816 +#: sql_help.c:1859 sql_help.c:1881 sql_help.c:1901 sql_help.c:1902 +#: sql_help.c:1937 sql_help.c:1957 sql_help.c:1979 sql_help.c:1992 +#: sql_help.c:2024 sql_help.c:2049 sql_help.c:2093 sql_help.c:2279 +#: sql_help.c:2292 sql_help.c:2309 sql_help.c:2325 sql_help.c:2364 +#: sql_help.c:2415 sql_help.c:2419 sql_help.c:2421 sql_help.c:2427 +#: sql_help.c:2445 sql_help.c:2472 sql_help.c:2507 sql_help.c:2519 +#: sql_help.c:2528 sql_help.c:2578 sql_help.c:2606 sql_help.c:2614 +#: sql_help.c:2622 sql_help.c:2630 sql_help.c:2638 sql_help.c:2646 +#: sql_help.c:2654 sql_help.c:2662 sql_help.c:2671 sql_help.c:2682 +#: sql_help.c:2690 sql_help.c:2698 sql_help.c:2706 sql_help.c:2714 +#: sql_help.c:2724 sql_help.c:2733 sql_help.c:2742 sql_help.c:2750 +#: sql_help.c:2759 sql_help.c:2767 sql_help.c:2776 sql_help.c:2784 +#: sql_help.c:2792 sql_help.c:2800 sql_help.c:2808 sql_help.c:2816 +#: sql_help.c:2824 sql_help.c:2832 sql_help.c:2840 sql_help.c:2857 +#: sql_help.c:2866 sql_help.c:2874 sql_help.c:2891 sql_help.c:2906 +#: sql_help.c:3171 sql_help.c:3222 sql_help.c:3251 sql_help.c:3259 +#: sql_help.c:3677 sql_help.c:3725 sql_help.c:3865 msgid "name" msgstr "nome" -#: sql_help.c:33 sql_help.c:36 sql_help.c:39 sql_help.c:300 sql_help.c:1279 -#: sql_help.c:2417 sql_help.c:3234 +#: sql_help.c:34 sql_help.c:37 sql_help.c:40 sql_help.c:306 sql_help.c:1376 +#: sql_help.c:2579 sql_help.c:3474 msgid "aggregate_signature" msgstr "signature_aggregato" -#: sql_help.c:34 sql_help.c:61 sql_help.c:76 sql_help.c:108 sql_help.c:228 -#: sql_help.c:246 sql_help.c:362 sql_help.c:402 sql_help.c:469 sql_help.c:502 -#: sql_help.c:516 sql_help.c:536 sql_help.c:583 sql_help.c:631 sql_help.c:677 -#: sql_help.c:718 sql_help.c:740 sql_help.c:750 sql_help.c:780 sql_help.c:800 -#: sql_help.c:887 sql_help.c:952 sql_help.c:995 sql_help.c:1016 -#: sql_help.c:1030 sql_help.c:1042 sql_help.c:1054 sql_help.c:1081 -#: sql_help.c:1129 sql_help.c:1172 +#: sql_help.c:35 sql_help.c:62 sql_help.c:77 sql_help.c:113 sql_help.c:233 +#: sql_help.c:251 sql_help.c:370 sql_help.c:418 sql_help.c:492 sql_help.c:533 +#: sql_help.c:547 sql_help.c:567 sql_help.c:614 sql_help.c:680 sql_help.c:735 +#: sql_help.c:755 sql_help.c:800 sql_help.c:824 sql_help.c:834 sql_help.c:864 +#: sql_help.c:884 sql_help.c:974 sql_help.c:1039 sql_help.c:1082 +#: sql_help.c:1103 sql_help.c:1117 sql_help.c:1129 sql_help.c:1141 +#: sql_help.c:1168 sql_help.c:1222 sql_help.c:1267 msgid "new_name" msgstr "nuovo_nome" -#: sql_help.c:37 sql_help.c:63 sql_help.c:78 sql_help.c:110 sql_help.c:226 -#: sql_help.c:244 sql_help.c:360 sql_help.c:431 sql_help.c:474 sql_help.c:538 -#: sql_help.c:547 sql_help.c:602 sql_help.c:615 sql_help.c:634 sql_help.c:680 -#: sql_help.c:752 sql_help.c:778 sql_help.c:798 sql_help.c:935 sql_help.c:954 -#: sql_help.c:997 sql_help.c:1018 sql_help.c:1076 sql_help.c:1170 +#: sql_help.c:38 sql_help.c:64 sql_help.c:79 sql_help.c:115 sql_help.c:231 +#: sql_help.c:249 sql_help.c:368 sql_help.c:454 sql_help.c:497 sql_help.c:569 +#: sql_help.c:578 sql_help.c:633 sql_help.c:654 sql_help.c:683 sql_help.c:738 +#: sql_help.c:836 sql_help.c:862 sql_help.c:882 sql_help.c:1023 +#: sql_help.c:1041 sql_help.c:1084 sql_help.c:1105 sql_help.c:1163 +#: sql_help.c:1265 sql_help.c:2265 msgid "new_owner" msgstr "nuovo_proprietario" -#: sql_help.c:40 sql_help.c:65 sql_help.c:80 sql_help.c:230 sql_help.c:293 -#: sql_help.c:404 sql_help.c:479 sql_help.c:585 sql_help.c:619 sql_help.c:637 -#: sql_help.c:683 sql_help.c:782 sql_help.c:889 sql_help.c:999 sql_help.c:1020 -#: sql_help.c:1032 sql_help.c:1044 sql_help.c:1083 sql_help.c:1174 +#: sql_help.c:41 sql_help.c:66 sql_help.c:81 sql_help.c:235 sql_help.c:299 +#: sql_help.c:420 sql_help.c:502 sql_help.c:616 sql_help.c:658 sql_help.c:686 +#: sql_help.c:741 sql_help.c:866 sql_help.c:976 sql_help.c:1086 +#: sql_help.c:1107 sql_help.c:1119 sql_help.c:1131 sql_help.c:1170 +#: sql_help.c:1269 msgid "new_schema" msgstr "nuovo_schema" -#: sql_help.c:41 sql_help.c:1326 sql_help.c:2418 sql_help.c:3253 +#: sql_help.c:42 sql_help.c:1427 sql_help.c:2580 sql_help.c:3493 msgid "where aggregate_signature is:" msgstr "dove signature_aggregato è:" -#: sql_help.c:42 sql_help.c:45 sql_help.c:48 sql_help.c:310 sql_help.c:333 -#: sql_help.c:336 sql_help.c:339 sql_help.c:461 sql_help.c:466 sql_help.c:471 -#: sql_help.c:476 sql_help.c:1295 sql_help.c:1327 sql_help.c:1330 -#: sql_help.c:1333 sql_help.c:1457 sql_help.c:1473 sql_help.c:1476 -#: sql_help.c:1697 sql_help.c:2419 sql_help.c:2422 sql_help.c:2425 -#: sql_help.c:2510 sql_help.c:2870 sql_help.c:3149 sql_help.c:3240 -#: sql_help.c:3254 sql_help.c:3257 sql_help.c:3260 +#: sql_help.c:43 sql_help.c:46 sql_help.c:49 sql_help.c:316 sql_help.c:341 +#: sql_help.c:344 sql_help.c:347 sql_help.c:484 sql_help.c:489 sql_help.c:494 +#: sql_help.c:499 sql_help.c:1394 sql_help.c:1428 sql_help.c:1431 +#: sql_help.c:1434 sql_help.c:1558 sql_help.c:1574 sql_help.c:1577 +#: sql_help.c:1817 sql_help.c:2581 sql_help.c:2584 sql_help.c:2587 +#: sql_help.c:2672 sql_help.c:3057 sql_help.c:3389 sql_help.c:3480 +#: sql_help.c:3494 sql_help.c:3497 sql_help.c:3500 msgid "argmode" msgstr "modo_arg" -#: sql_help.c:43 sql_help.c:46 sql_help.c:49 sql_help.c:311 sql_help.c:334 -#: sql_help.c:337 sql_help.c:340 sql_help.c:462 sql_help.c:467 sql_help.c:472 -#: sql_help.c:477 sql_help.c:1296 sql_help.c:1328 sql_help.c:1331 -#: sql_help.c:1334 sql_help.c:1458 sql_help.c:1474 sql_help.c:1477 -#: sql_help.c:1698 sql_help.c:2420 sql_help.c:2423 sql_help.c:2426 -#: sql_help.c:2511 sql_help.c:3241 sql_help.c:3255 sql_help.c:3258 -#: sql_help.c:3261 +#: sql_help.c:44 sql_help.c:47 sql_help.c:50 sql_help.c:317 sql_help.c:342 +#: sql_help.c:345 sql_help.c:348 sql_help.c:485 sql_help.c:490 sql_help.c:495 +#: sql_help.c:500 sql_help.c:1395 sql_help.c:1429 sql_help.c:1432 +#: sql_help.c:1435 sql_help.c:1559 sql_help.c:1575 sql_help.c:1578 +#: sql_help.c:1818 sql_help.c:2582 sql_help.c:2585 sql_help.c:2588 +#: sql_help.c:2673 sql_help.c:3481 sql_help.c:3495 sql_help.c:3498 +#: sql_help.c:3501 msgid "argname" msgstr "nome_arg" -#: sql_help.c:44 sql_help.c:47 sql_help.c:50 sql_help.c:312 sql_help.c:335 -#: sql_help.c:338 sql_help.c:341 sql_help.c:463 sql_help.c:468 sql_help.c:473 -#: sql_help.c:478 sql_help.c:1297 sql_help.c:1329 sql_help.c:1332 -#: sql_help.c:1335 sql_help.c:1699 sql_help.c:2421 sql_help.c:2424 -#: sql_help.c:2427 sql_help.c:2512 sql_help.c:3242 sql_help.c:3256 -#: sql_help.c:3259 sql_help.c:3262 +#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:318 sql_help.c:343 +#: sql_help.c:346 sql_help.c:349 sql_help.c:486 sql_help.c:491 sql_help.c:496 +#: sql_help.c:501 sql_help.c:1396 sql_help.c:1430 sql_help.c:1433 +#: sql_help.c:1436 sql_help.c:1819 sql_help.c:2583 sql_help.c:2586 +#: sql_help.c:2589 sql_help.c:2674 sql_help.c:3482 sql_help.c:3496 +#: sql_help.c:3499 sql_help.c:3502 msgid "argtype" msgstr "tipo_arg" -#: sql_help.c:104 sql_help.c:357 sql_help.c:425 sql_help.c:432 sql_help.c:712 -#: sql_help.c:795 sql_help.c:1013 sql_help.c:1123 sql_help.c:1149 -#: sql_help.c:1383 sql_help.c:1389 sql_help.c:1640 sql_help.c:1664 -#: sql_help.c:1669 sql_help.c:1739 sql_help.c:1887 sql_help.c:1968 -#: sql_help.c:2148 sql_help.c:2311 sql_help.c:2333 sql_help.c:2745 +#: sql_help.c:107 sql_help.c:365 sql_help.c:443 sql_help.c:455 sql_help.c:794 +#: sql_help.c:879 sql_help.c:1100 sql_help.c:1216 sql_help.c:1244 +#: sql_help.c:1484 sql_help.c:1490 sql_help.c:1745 sql_help.c:1777 +#: sql_help.c:1784 sql_help.c:1860 sql_help.c:2025 sql_help.c:2114 +#: sql_help.c:2294 sql_help.c:2473 sql_help.c:2495 sql_help.c:2925 +#: sql_help.c:3091 msgid "option" msgstr "opzione" -#: sql_help.c:105 sql_help.c:713 sql_help.c:1124 sql_help.c:1740 -#: sql_help.c:1888 sql_help.c:2312 +#: sql_help.c:108 sql_help.c:795 sql_help.c:1217 sql_help.c:1861 +#: sql_help.c:2026 sql_help.c:2474 msgid "where option can be:" msgstr "dove opzione può essere:" -#: sql_help.c:106 sql_help.c:714 sql_help.c:1125 sql_help.c:1575 -#: sql_help.c:1889 sql_help.c:2313 +#: sql_help.c:109 sql_help.c:1678 +msgid "istemplate" +msgstr "è_template" + +#: sql_help.c:110 sql_help.c:1679 +msgid "allowconn" +msgstr "permetti_conn" + +#: sql_help.c:111 sql_help.c:796 sql_help.c:1218 sql_help.c:1680 +#: sql_help.c:2027 sql_help.c:2475 msgid "connlimit" msgstr "limite_conn" -#: sql_help.c:112 sql_help.c:526 sql_help.c:588 sql_help.c:603 sql_help.c:892 -#: sql_help.c:936 +#: sql_help.c:117 sql_help.c:557 sql_help.c:619 sql_help.c:634 sql_help.c:979 +#: sql_help.c:1016 msgid "new_tablespace" msgstr "nuovo_tablespace" -#: sql_help.c:114 sql_help.c:117 sql_help.c:119 sql_help.c:483 sql_help.c:485 -#: sql_help.c:486 sql_help.c:721 sql_help.c:725 sql_help.c:728 sql_help.c:811 -#: sql_help.c:814 sql_help.c:1131 sql_help.c:1134 sql_help.c:1136 -#: sql_help.c:1707 sql_help.c:3036 sql_help.c:3406 +#: sql_help.c:119 sql_help.c:122 sql_help.c:124 sql_help.c:506 sql_help.c:508 +#: sql_help.c:509 sql_help.c:803 sql_help.c:807 sql_help.c:810 sql_help.c:895 +#: sql_help.c:898 sql_help.c:1224 sql_help.c:1227 sql_help.c:1229 +#: sql_help.c:1828 sql_help.c:3276 sql_help.c:3666 msgid "configuration_parameter" msgstr "parametro_config" -#: sql_help.c:115 sql_help.c:358 sql_help.c:421 sql_help.c:426 sql_help.c:433 -#: sql_help.c:484 sql_help.c:521 sql_help.c:594 sql_help.c:600 sql_help.c:722 -#: sql_help.c:796 sql_help.c:812 sql_help.c:813 sql_help.c:911 sql_help.c:930 -#: sql_help.c:957 sql_help.c:1014 sql_help.c:1132 sql_help.c:1150 -#: sql_help.c:1641 sql_help.c:1665 sql_help.c:1670 sql_help.c:1708 -#: sql_help.c:1709 sql_help.c:1768 sql_help.c:1800 sql_help.c:1969 -#: sql_help.c:2043 sql_help.c:2051 sql_help.c:2083 sql_help.c:2105 -#: sql_help.c:2122 sql_help.c:2149 sql_help.c:2334 sql_help.c:3407 -#: sql_help.c:3408 +#: sql_help.c:120 sql_help.c:366 sql_help.c:438 sql_help.c:444 sql_help.c:456 +#: sql_help.c:507 sql_help.c:552 sql_help.c:625 sql_help.c:631 sql_help.c:804 +#: sql_help.c:880 sql_help.c:896 sql_help.c:897 sql_help.c:998 sql_help.c:1018 +#: sql_help.c:1044 sql_help.c:1101 sql_help.c:1225 sql_help.c:1245 +#: sql_help.c:1746 sql_help.c:1778 sql_help.c:1785 sql_help.c:1829 +#: sql_help.c:1830 sql_help.c:1889 sql_help.c:1921 sql_help.c:2115 +#: sql_help.c:2189 sql_help.c:2197 sql_help.c:2229 sql_help.c:2251 +#: sql_help.c:2268 sql_help.c:2295 sql_help.c:2496 sql_help.c:3092 +#: sql_help.c:3667 sql_help.c:3668 msgid "value" msgstr "valore" -#: sql_help.c:177 +#: sql_help.c:182 msgid "target_role" msgstr "ruolo_destinazione" -#: sql_help.c:178 sql_help.c:1624 sql_help.c:1929 sql_help.c:1934 -#: sql_help.c:2852 sql_help.c:2859 sql_help.c:2873 sql_help.c:2879 -#: sql_help.c:3131 sql_help.c:3138 sql_help.c:3152 sql_help.c:3158 +#: sql_help.c:183 sql_help.c:1729 sql_help.c:2073 sql_help.c:2078 +#: sql_help.c:3039 sql_help.c:3046 sql_help.c:3060 sql_help.c:3066 +#: sql_help.c:3371 sql_help.c:3378 sql_help.c:3392 sql_help.c:3398 msgid "schema_name" msgstr "nome_schema" -#: sql_help.c:179 +#: sql_help.c:184 msgid "abbreviated_grant_or_revoke" msgstr "grant_o_revoke_abbreviato" -#: sql_help.c:180 +#: sql_help.c:185 msgid "where abbreviated_grant_or_revoke is one of:" msgstr "dove grant_o_revoke_abbreviato è uno di:" -#: sql_help.c:181 sql_help.c:182 sql_help.c:183 sql_help.c:184 sql_help.c:185 -#: sql_help.c:186 sql_help.c:187 sql_help.c:188 sql_help.c:525 sql_help.c:587 -#: sql_help.c:891 sql_help.c:1743 sql_help.c:1744 sql_help.c:1745 -#: sql_help.c:1746 sql_help.c:1747 sql_help.c:1892 sql_help.c:1893 -#: sql_help.c:1894 sql_help.c:1895 sql_help.c:1896 sql_help.c:2316 -#: sql_help.c:2317 sql_help.c:2318 sql_help.c:2319 sql_help.c:2320 -#: sql_help.c:2853 sql_help.c:2857 sql_help.c:2860 sql_help.c:2862 -#: sql_help.c:2864 sql_help.c:2866 sql_help.c:2868 sql_help.c:2874 -#: sql_help.c:2876 sql_help.c:2878 sql_help.c:2880 sql_help.c:2882 -#: sql_help.c:2884 sql_help.c:2885 sql_help.c:2886 sql_help.c:3132 -#: sql_help.c:3136 sql_help.c:3139 sql_help.c:3141 sql_help.c:3143 -#: sql_help.c:3145 sql_help.c:3147 sql_help.c:3153 sql_help.c:3155 -#: sql_help.c:3157 sql_help.c:3159 sql_help.c:3161 sql_help.c:3163 -#: sql_help.c:3164 sql_help.c:3165 sql_help.c:3427 +#: sql_help.c:186 sql_help.c:187 sql_help.c:188 sql_help.c:189 sql_help.c:190 +#: sql_help.c:191 sql_help.c:192 sql_help.c:193 sql_help.c:531 sql_help.c:556 +#: sql_help.c:618 sql_help.c:756 sql_help.c:814 sql_help.c:978 sql_help.c:1232 +#: sql_help.c:1864 sql_help.c:1865 sql_help.c:1866 sql_help.c:1867 +#: sql_help.c:1868 sql_help.c:1994 sql_help.c:2030 sql_help.c:2031 +#: sql_help.c:2032 sql_help.c:2033 sql_help.c:2034 sql_help.c:2478 +#: sql_help.c:2479 sql_help.c:2480 sql_help.c:2481 sql_help.c:2482 +#: sql_help.c:3073 sql_help.c:3074 sql_help.c:3075 sql_help.c:3372 +#: sql_help.c:3376 sql_help.c:3379 sql_help.c:3381 sql_help.c:3383 +#: sql_help.c:3385 sql_help.c:3387 sql_help.c:3393 sql_help.c:3395 +#: sql_help.c:3397 sql_help.c:3399 sql_help.c:3401 sql_help.c:3403 +#: sql_help.c:3404 sql_help.c:3405 sql_help.c:3687 msgid "role_name" msgstr "nome_ruolo" -#: sql_help.c:214 sql_help.c:414 sql_help.c:902 sql_help.c:904 sql_help.c:1166 -#: sql_help.c:1594 sql_help.c:1598 sql_help.c:1764 sql_help.c:2055 -#: sql_help.c:2065 sql_help.c:2087 sql_help.c:2900 sql_help.c:3303 -#: sql_help.c:3304 sql_help.c:3308 sql_help.c:3313 sql_help.c:3381 -#: sql_help.c:3382 sql_help.c:3387 sql_help.c:3392 sql_help.c:3521 -#: sql_help.c:3522 sql_help.c:3526 sql_help.c:3531 sql_help.c:3611 -#: sql_help.c:3613 sql_help.c:3644 sql_help.c:3690 sql_help.c:3691 -#: sql_help.c:3695 sql_help.c:3700 +#: sql_help.c:219 sql_help.c:431 sql_help.c:989 sql_help.c:991 sql_help.c:1261 +#: sql_help.c:1699 sql_help.c:1703 sql_help.c:1788 sql_help.c:1792 +#: sql_help.c:1885 sql_help.c:2201 sql_help.c:2211 sql_help.c:2233 +#: sql_help.c:3122 sql_help.c:3137 sql_help.c:3139 sql_help.c:3552 +#: sql_help.c:3553 sql_help.c:3562 sql_help.c:3603 sql_help.c:3604 +#: sql_help.c:3605 sql_help.c:3606 sql_help.c:3607 sql_help.c:3608 +#: sql_help.c:3641 sql_help.c:3642 sql_help.c:3647 sql_help.c:3652 +#: sql_help.c:3790 sql_help.c:3791 sql_help.c:3800 sql_help.c:3841 +#: sql_help.c:3842 sql_help.c:3843 sql_help.c:3844 sql_help.c:3845 +#: sql_help.c:3846 sql_help.c:3893 sql_help.c:3895 sql_help.c:3928 +#: sql_help.c:3983 sql_help.c:3984 sql_help.c:3993 sql_help.c:4034 +#: sql_help.c:4035 sql_help.c:4036 sql_help.c:4037 sql_help.c:4038 +#: sql_help.c:4039 msgid "expression" msgstr "espressione" -#: sql_help.c:217 +#: sql_help.c:222 msgid "domain_constraint" msgstr "vincolo_di_dominio" -#: sql_help.c:219 sql_help.c:221 sql_help.c:224 sql_help.c:884 sql_help.c:917 -#: sql_help.c:918 sql_help.c:919 sql_help.c:939 sql_help.c:1285 -#: sql_help.c:1597 sql_help.c:1672 sql_help.c:2054 sql_help.c:2064 +#: sql_help.c:224 sql_help.c:226 sql_help.c:229 sql_help.c:446 sql_help.c:447 +#: sql_help.c:971 sql_help.c:1004 sql_help.c:1005 sql_help.c:1006 +#: sql_help.c:1026 sql_help.c:1382 sql_help.c:1384 sql_help.c:1702 +#: sql_help.c:1787 sql_help.c:1791 sql_help.c:2200 sql_help.c:2210 +#: sql_help.c:3134 msgid "constraint_name" msgstr "nome_vincolo" -#: sql_help.c:222 sql_help.c:885 +#: sql_help.c:227 sql_help.c:972 msgid "new_constraint_name" msgstr "nuovo_nome_vincolo" -#: sql_help.c:291 sql_help.c:794 +#: sql_help.c:297 sql_help.c:878 msgid "new_version" msgstr "nuova_versione" -#: sql_help.c:295 sql_help.c:297 +#: sql_help.c:301 sql_help.c:303 msgid "member_object" msgstr "oggetto_membro" -#: sql_help.c:298 +#: sql_help.c:304 msgid "where member_object is:" msgstr "dove oggetto_membro è:" -#: sql_help.c:299 sql_help.c:1278 sql_help.c:3233 +#: sql_help.c:305 sql_help.c:1375 sql_help.c:3473 msgid "aggregate_name" msgstr "nome_aggregato" -#: sql_help.c:301 sql_help.c:1280 sql_help.c:1516 sql_help.c:1520 -#: sql_help.c:1522 sql_help.c:2435 +#: sql_help.c:307 sql_help.c:1377 sql_help.c:1617 sql_help.c:1621 +#: sql_help.c:1623 sql_help.c:2597 msgid "source_type" msgstr "tipo_sorgente" -#: sql_help.c:302 sql_help.c:1281 sql_help.c:1517 sql_help.c:1521 -#: sql_help.c:1523 sql_help.c:2436 +#: sql_help.c:308 sql_help.c:1378 sql_help.c:1618 sql_help.c:1622 +#: sql_help.c:1624 sql_help.c:2598 msgid "target_type" msgstr "tipo_destinazione" -#: sql_help.c:303 sql_help.c:304 sql_help.c:305 sql_help.c:306 sql_help.c:307 -#: sql_help.c:308 sql_help.c:313 sql_help.c:317 sql_help.c:319 sql_help.c:321 -#: sql_help.c:322 sql_help.c:323 sql_help.c:324 sql_help.c:325 sql_help.c:326 -#: sql_help.c:327 sql_help.c:328 sql_help.c:329 sql_help.c:330 sql_help.c:331 -#: sql_help.c:1282 sql_help.c:1287 sql_help.c:1288 sql_help.c:1289 -#: sql_help.c:1290 sql_help.c:1291 sql_help.c:1292 sql_help.c:1293 -#: sql_help.c:1298 sql_help.c:1300 sql_help.c:1304 sql_help.c:1306 -#: sql_help.c:1308 sql_help.c:1309 sql_help.c:1312 sql_help.c:1313 -#: sql_help.c:1314 sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 -#: sql_help.c:1318 sql_help.c:1319 sql_help.c:1320 sql_help.c:1323 -#: sql_help.c:1324 sql_help.c:3230 sql_help.c:3235 sql_help.c:3236 -#: sql_help.c:3237 sql_help.c:3238 sql_help.c:3244 sql_help.c:3245 -#: sql_help.c:3246 sql_help.c:3247 sql_help.c:3248 sql_help.c:3249 -#: sql_help.c:3250 sql_help.c:3251 +#: sql_help.c:309 sql_help.c:310 sql_help.c:311 sql_help.c:312 sql_help.c:313 +#: sql_help.c:314 sql_help.c:319 sql_help.c:323 sql_help.c:325 sql_help.c:327 +#: sql_help.c:328 sql_help.c:329 sql_help.c:330 sql_help.c:331 sql_help.c:332 +#: sql_help.c:333 sql_help.c:334 sql_help.c:335 sql_help.c:338 sql_help.c:339 +#: sql_help.c:1379 sql_help.c:1386 sql_help.c:1387 sql_help.c:1388 +#: sql_help.c:1389 sql_help.c:1390 sql_help.c:1391 sql_help.c:1392 +#: sql_help.c:1397 sql_help.c:1399 sql_help.c:1403 sql_help.c:1405 +#: sql_help.c:1407 sql_help.c:1408 sql_help.c:1411 sql_help.c:1412 +#: sql_help.c:1413 sql_help.c:1414 sql_help.c:1415 sql_help.c:1416 +#: sql_help.c:1417 sql_help.c:1418 sql_help.c:1419 sql_help.c:1424 +#: sql_help.c:1425 sql_help.c:3470 sql_help.c:3475 sql_help.c:3476 +#: sql_help.c:3477 sql_help.c:3478 sql_help.c:3484 sql_help.c:3485 +#: sql_help.c:3486 sql_help.c:3487 sql_help.c:3488 sql_help.c:3489 +#: sql_help.c:3490 sql_help.c:3491 msgid "object_name" msgstr "nome_oggetto" -#: sql_help.c:309 sql_help.c:665 sql_help.c:1294 sql_help.c:1518 -#: sql_help.c:1553 sql_help.c:1612 sql_help.c:1817 sql_help.c:1848 -#: sql_help.c:2207 sql_help.c:2869 sql_help.c:3148 sql_help.c:3239 -#: sql_help.c:3329 sql_help.c:3333 sql_help.c:3337 sql_help.c:3340 -#: sql_help.c:3547 sql_help.c:3551 sql_help.c:3555 sql_help.c:3558 -#: sql_help.c:3716 sql_help.c:3720 sql_help.c:3724 sql_help.c:3727 +#: sql_help.c:315 sql_help.c:723 sql_help.c:1393 sql_help.c:1619 +#: sql_help.c:1654 sql_help.c:1717 sql_help.c:1938 sql_help.c:1969 +#: sql_help.c:2369 sql_help.c:3056 sql_help.c:3388 sql_help.c:3479 +#: sql_help.c:3581 sql_help.c:3585 sql_help.c:3589 sql_help.c:3592 +#: sql_help.c:3819 sql_help.c:3823 sql_help.c:3827 sql_help.c:3830 +#: sql_help.c:4012 sql_help.c:4016 sql_help.c:4020 sql_help.c:4023 msgid "function_name" msgstr "nome_funzione" -#: sql_help.c:314 sql_help.c:658 sql_help.c:1301 sql_help.c:1841 +#: sql_help.c:320 sql_help.c:716 sql_help.c:1400 sql_help.c:1962 msgid "operator_name" msgstr "nome_operatore" -#: sql_help.c:315 sql_help.c:613 sql_help.c:617 sql_help.c:1302 -#: sql_help.c:1818 sql_help.c:2553 +#: sql_help.c:321 sql_help.c:652 sql_help.c:656 sql_help.c:660 sql_help.c:1401 +#: sql_help.c:1939 sql_help.c:2715 msgid "left_type" msgstr "tipo_sx" -#: sql_help.c:316 sql_help.c:614 sql_help.c:618 sql_help.c:1303 -#: sql_help.c:1819 sql_help.c:2554 +#: sql_help.c:322 sql_help.c:653 sql_help.c:657 sql_help.c:661 sql_help.c:1402 +#: sql_help.c:1940 sql_help.c:2716 msgid "right_type" msgstr "tipo_dx" -#: sql_help.c:318 sql_help.c:320 sql_help.c:630 sql_help.c:633 sql_help.c:636 -#: sql_help.c:656 sql_help.c:668 sql_help.c:676 sql_help.c:679 sql_help.c:682 -#: sql_help.c:1305 sql_help.c:1307 sql_help.c:1838 sql_help.c:1859 -#: sql_help.c:2070 sql_help.c:2563 sql_help.c:2572 +#: sql_help.c:324 sql_help.c:326 sql_help.c:679 sql_help.c:682 sql_help.c:685 +#: sql_help.c:714 sql_help.c:726 sql_help.c:734 sql_help.c:737 sql_help.c:740 +#: sql_help.c:1404 sql_help.c:1406 sql_help.c:1959 sql_help.c:1980 +#: sql_help.c:2216 sql_help.c:2725 sql_help.c:2734 msgid "index_method" msgstr "metodo_indice" -#: sql_help.c:332 +#: sql_help.c:336 sql_help.c:1022 sql_help.c:1420 sql_help.c:1825 +#: sql_help.c:2192 sql_help.c:2338 sql_help.c:2848 sql_help.c:3070 +#: sql_help.c:3402 +msgid "type_name" +msgstr "nome_di_tipo" + +#: sql_help.c:337 sql_help.c:1421 sql_help.c:1824 sql_help.c:2339 +#: sql_help.c:2563 sql_help.c:2849 sql_help.c:3062 sql_help.c:3394 +msgid "lang_name" +msgstr "nome_linguaggio" + +#: sql_help.c:340 msgid "and aggregate_signature is:" msgstr "e signature_aggregato è:" -#: sql_help.c:355 sql_help.c:1638 +#: sql_help.c:363 sql_help.c:1743 msgid "handler_function" msgstr "funzione_handler" -#: sql_help.c:356 sql_help.c:1639 +#: sql_help.c:364 sql_help.c:1744 msgid "validator_function" msgstr "funzione_validazione" -#: sql_help.c:397 sql_help.c:464 sql_help.c:578 sql_help.c:879 sql_help.c:1074 -#: sql_help.c:2061 sql_help.c:2062 sql_help.c:2078 sql_help.c:2079 +#: sql_help.c:413 sql_help.c:487 sql_help.c:609 sql_help.c:966 sql_help.c:1161 +#: sql_help.c:2207 sql_help.c:2208 sql_help.c:2224 sql_help.c:2225 msgid "action" msgstr "azione" -#: sql_help.c:399 sql_help.c:406 sql_help.c:410 sql_help.c:411 sql_help.c:413 -#: sql_help.c:415 sql_help.c:416 sql_help.c:417 sql_help.c:419 sql_help.c:422 -#: sql_help.c:424 sql_help.c:580 sql_help.c:590 sql_help.c:592 sql_help.c:595 -#: sql_help.c:597 sql_help.c:776 sql_help.c:881 sql_help.c:894 sql_help.c:898 -#: sql_help.c:899 sql_help.c:903 sql_help.c:905 sql_help.c:906 sql_help.c:907 -#: sql_help.c:909 sql_help.c:912 sql_help.c:914 sql_help.c:1165 -#: sql_help.c:1168 sql_help.c:1188 sql_help.c:1284 sql_help.c:1380 -#: sql_help.c:1385 sql_help.c:1399 sql_help.c:1400 sql_help.c:1401 -#: sql_help.c:1662 sql_help.c:1702 sql_help.c:1763 sql_help.c:1798 -#: sql_help.c:1954 sql_help.c:2034 sql_help.c:2047 sql_help.c:2066 -#: sql_help.c:2068 sql_help.c:2075 sql_help.c:2086 sql_help.c:2103 -#: sql_help.c:2210 sql_help.c:2346 sql_help.c:2854 sql_help.c:2855 -#: sql_help.c:2899 sql_help.c:3133 sql_help.c:3134 sql_help.c:3232 -#: sql_help.c:3352 sql_help.c:3570 sql_help.c:3610 sql_help.c:3612 -#: sql_help.c:3629 sql_help.c:3632 sql_help.c:3739 +#: sql_help.c:415 sql_help.c:422 sql_help.c:426 sql_help.c:427 sql_help.c:430 +#: sql_help.c:432 sql_help.c:433 sql_help.c:434 sql_help.c:436 sql_help.c:439 +#: sql_help.c:441 sql_help.c:442 sql_help.c:611 sql_help.c:621 sql_help.c:623 +#: sql_help.c:626 sql_help.c:628 sql_help.c:860 sql_help.c:968 sql_help.c:981 +#: sql_help.c:985 sql_help.c:986 sql_help.c:990 sql_help.c:992 sql_help.c:993 +#: sql_help.c:994 sql_help.c:996 sql_help.c:999 sql_help.c:1001 +#: sql_help.c:1260 sql_help.c:1263 sql_help.c:1283 sql_help.c:1381 +#: sql_help.c:1481 sql_help.c:1486 sql_help.c:1500 sql_help.c:1501 +#: sql_help.c:1502 sql_help.c:1775 sql_help.c:1822 sql_help.c:1884 +#: sql_help.c:1919 sql_help.c:2100 sql_help.c:2180 sql_help.c:2193 +#: sql_help.c:2212 sql_help.c:2214 sql_help.c:2221 sql_help.c:2232 +#: sql_help.c:2249 sql_help.c:2372 sql_help.c:2508 sql_help.c:3041 +#: sql_help.c:3042 sql_help.c:3121 sql_help.c:3136 sql_help.c:3138 +#: sql_help.c:3140 sql_help.c:3373 sql_help.c:3374 sql_help.c:3472 +#: sql_help.c:3612 sql_help.c:3850 sql_help.c:3892 sql_help.c:3894 +#: sql_help.c:3896 sql_help.c:3913 sql_help.c:3916 sql_help.c:4043 msgid "column_name" msgstr "nome_colonna" -#: sql_help.c:400 sql_help.c:581 sql_help.c:882 +#: sql_help.c:416 sql_help.c:612 sql_help.c:969 msgid "new_column_name" msgstr "nuovo_nome_colonna" -#: sql_help.c:405 sql_help.c:480 sql_help.c:589 sql_help.c:893 sql_help.c:1087 +#: sql_help.c:421 sql_help.c:503 sql_help.c:620 sql_help.c:980 sql_help.c:1174 msgid "where action is one of:" msgstr "dove azione è una di:" -#: sql_help.c:407 sql_help.c:412 sql_help.c:895 sql_help.c:900 sql_help.c:1089 -#: sql_help.c:1093 sql_help.c:1592 sql_help.c:1663 sql_help.c:1837 -#: sql_help.c:2035 sql_help.c:2255 sql_help.c:2984 +#: sql_help.c:423 sql_help.c:428 sql_help.c:982 sql_help.c:987 sql_help.c:1176 +#: sql_help.c:1180 sql_help.c:1697 sql_help.c:1776 sql_help.c:1958 +#: sql_help.c:2181 sql_help.c:2417 sql_help.c:3223 msgid "data_type" msgstr "tipo_di_dato" -#: sql_help.c:408 sql_help.c:896 sql_help.c:901 sql_help.c:1090 -#: sql_help.c:1094 sql_help.c:1593 sql_help.c:1666 sql_help.c:1765 -#: sql_help.c:2036 sql_help.c:2256 sql_help.c:2262 +#: sql_help.c:424 sql_help.c:429 sql_help.c:983 sql_help.c:988 sql_help.c:1177 +#: sql_help.c:1181 sql_help.c:1698 sql_help.c:1779 sql_help.c:1886 +#: sql_help.c:2182 sql_help.c:2418 sql_help.c:2424 sql_help.c:3131 msgid "collation" msgstr "ordinamento" -#: sql_help.c:409 sql_help.c:897 sql_help.c:1667 sql_help.c:2037 -#: sql_help.c:2048 +#: sql_help.c:425 sql_help.c:984 sql_help.c:1780 sql_help.c:2183 +#: sql_help.c:2194 msgid "column_constraint" msgstr "vincolo_di_colonna" -#: sql_help.c:418 sql_help.c:591 sql_help.c:908 +#: sql_help.c:435 sql_help.c:622 sql_help.c:995 msgid "integer" msgstr "intero" -#: sql_help.c:420 sql_help.c:423 sql_help.c:593 sql_help.c:596 sql_help.c:910 -#: sql_help.c:913 +#: sql_help.c:437 sql_help.c:440 sql_help.c:624 sql_help.c:627 sql_help.c:997 +#: sql_help.c:1000 msgid "attribute_option" msgstr "opzione_attributo" -#: sql_help.c:427 sql_help.c:428 sql_help.c:429 sql_help.c:430 sql_help.c:920 -#: sql_help.c:921 sql_help.c:922 sql_help.c:923 sql_help.c:1321 +#: sql_help.c:445 sql_help.c:1002 sql_help.c:1781 sql_help.c:2184 +#: sql_help.c:2195 +msgid "table_constraint" +msgstr "vincoli_di_tabella" + +#: sql_help.c:448 sql_help.c:449 sql_help.c:450 sql_help.c:451 sql_help.c:1007 +#: sql_help.c:1008 sql_help.c:1009 sql_help.c:1010 sql_help.c:1422 msgid "trigger_name" msgstr "nome_trigger" -#: sql_help.c:481 sql_help.c:1705 +#: sql_help.c:452 sql_help.c:453 sql_help.c:1020 sql_help.c:1021 +#: sql_help.c:1782 sql_help.c:2187 +msgid "parent_table" +msgstr "tabella_padre" + +#: sql_help.c:504 sql_help.c:1826 msgid "execution_cost" msgstr "costo_di_esecuzione" -#: sql_help.c:482 sql_help.c:1706 +#: sql_help.c:505 sql_help.c:1827 msgid "result_rows" msgstr "righe_risultato" -#: sql_help.c:497 sql_help.c:499 sql_help.c:501 -msgid "group_name" -msgstr "nome_gruppo" - -#: sql_help.c:498 sql_help.c:500 sql_help.c:1147 sql_help.c:1569 -#: sql_help.c:1930 sql_help.c:1932 sql_help.c:1935 sql_help.c:1936 -#: sql_help.c:2119 sql_help.c:2331 sql_help.c:2702 sql_help.c:3437 +#: sql_help.c:526 sql_help.c:528 sql_help.c:793 sql_help.c:801 sql_help.c:805 +#: sql_help.c:808 sql_help.c:811 sql_help.c:1215 sql_help.c:1223 +#: sql_help.c:1226 sql_help.c:1228 sql_help.c:1230 sql_help.c:2074 +#: sql_help.c:2076 sql_help.c:2079 sql_help.c:2080 sql_help.c:3040 +#: sql_help.c:3044 sql_help.c:3047 sql_help.c:3049 sql_help.c:3051 +#: sql_help.c:3053 sql_help.c:3055 sql_help.c:3061 sql_help.c:3063 +#: sql_help.c:3065 sql_help.c:3067 sql_help.c:3069 sql_help.c:3071 +msgid "role_specification" +msgstr "specifica_ruolo" + +#: sql_help.c:527 sql_help.c:529 sql_help.c:1242 sql_help.c:1672 +#: sql_help.c:2082 sql_help.c:2493 sql_help.c:2882 sql_help.c:3697 msgid "user_name" msgstr "nome_utente" -#: sql_help.c:518 sql_help.c:1574 sql_help.c:1769 sql_help.c:1801 -#: sql_help.c:2044 sql_help.c:2052 sql_help.c:2084 sql_help.c:2106 -#: sql_help.c:2118 sql_help.c:2881 sql_help.c:3160 +#: sql_help.c:530 sql_help.c:813 sql_help.c:1231 sql_help.c:2081 +#: sql_help.c:3072 +msgid "where role_specification can be:" +msgstr "dove specifica_ruolo può essere:" + +#: sql_help.c:532 +msgid "group_name" +msgstr "nome_gruppo" + +#: sql_help.c:549 sql_help.c:1677 sql_help.c:1890 sql_help.c:1922 +#: sql_help.c:2190 sql_help.c:2198 sql_help.c:2230 sql_help.c:2252 +#: sql_help.c:2264 sql_help.c:3068 sql_help.c:3400 msgid "tablespace_name" msgstr "nome_tablespace" -#: sql_help.c:520 sql_help.c:523 sql_help.c:599 sql_help.c:601 sql_help.c:929 -#: sql_help.c:931 sql_help.c:1767 sql_help.c:1799 sql_help.c:2042 -#: sql_help.c:2050 sql_help.c:2082 sql_help.c:2104 +#: sql_help.c:551 sql_help.c:554 sql_help.c:630 sql_help.c:632 sql_help.c:1017 +#: sql_help.c:1019 sql_help.c:1888 sql_help.c:1920 sql_help.c:2188 +#: sql_help.c:2196 sql_help.c:2228 sql_help.c:2250 msgid "storage_parameter" msgstr "parametro_di_memorizzazione" -#: sql_help.c:546 sql_help.c:1299 sql_help.c:3243 +#: sql_help.c:577 sql_help.c:1398 sql_help.c:3483 msgid "large_object_oid" msgstr "oid_large_object" -#: sql_help.c:598 sql_help.c:928 sql_help.c:937 sql_help.c:940 sql_help.c:1228 +#: sql_help.c:629 sql_help.c:1015 sql_help.c:1024 sql_help.c:1027 +#: sql_help.c:1323 msgid "index_name" msgstr "nome_indice" -#: sql_help.c:657 sql_help.c:669 sql_help.c:1840 +#: sql_help.c:662 sql_help.c:1943 +msgid "res_proc" +msgstr "res_proc" + +#: sql_help.c:663 sql_help.c:1944 +msgid "join_proc" +msgstr "proc_join" + +#: sql_help.c:715 sql_help.c:727 sql_help.c:1961 msgid "strategy_number" msgstr "strategia_num" -#: sql_help.c:659 sql_help.c:660 sql_help.c:663 sql_help.c:664 sql_help.c:670 -#: sql_help.c:671 sql_help.c:673 sql_help.c:674 sql_help.c:1842 -#: sql_help.c:1843 sql_help.c:1846 sql_help.c:1847 +#: sql_help.c:717 sql_help.c:718 sql_help.c:721 sql_help.c:722 sql_help.c:728 +#: sql_help.c:729 sql_help.c:731 sql_help.c:732 sql_help.c:1963 +#: sql_help.c:1964 sql_help.c:1967 sql_help.c:1968 msgid "op_type" msgstr "tipo_op" -#: sql_help.c:661 sql_help.c:1844 +#: sql_help.c:719 sql_help.c:1965 msgid "sort_family_name" msgstr "nome_famiglia_sort" -#: sql_help.c:662 sql_help.c:672 sql_help.c:1845 +#: sql_help.c:720 sql_help.c:730 sql_help.c:1966 msgid "support_number" msgstr "num_supporto" -#: sql_help.c:666 sql_help.c:1519 sql_help.c:1849 +#: sql_help.c:724 sql_help.c:1620 sql_help.c:1970 sql_help.c:2341 +#: sql_help.c:2343 msgid "argument_type" msgstr "tipo_argomento" -#: sql_help.c:715 sql_help.c:1126 sql_help.c:1741 sql_help.c:1890 -#: sql_help.c:2314 +#: sql_help.c:754 sql_help.c:823 sql_help.c:859 sql_help.c:1140 +#: sql_help.c:1282 sql_help.c:1322 sql_help.c:1383 sql_help.c:1410 +#: sql_help.c:1423 sql_help.c:1480 sql_help.c:1485 sql_help.c:1774 +#: sql_help.c:1882 sql_help.c:1918 sql_help.c:1993 sql_help.c:2051 +#: sql_help.c:2099 sql_help.c:2179 sql_help.c:2191 sql_help.c:2248 +#: sql_help.c:2366 sql_help.c:2542 sql_help.c:2751 sql_help.c:2768 +#: sql_help.c:2858 sql_help.c:3038 sql_help.c:3043 sql_help.c:3088 +#: sql_help.c:3119 sql_help.c:3370 sql_help.c:3375 sql_help.c:3471 +#: sql_help.c:3567 sql_help.c:3569 sql_help.c:3618 sql_help.c:3657 +#: sql_help.c:3805 sql_help.c:3807 sql_help.c:3856 sql_help.c:3890 +#: sql_help.c:3912 sql_help.c:3914 sql_help.c:3915 sql_help.c:3998 +#: sql_help.c:4000 sql_help.c:4049 +msgid "table_name" +msgstr "nome_tabella" + +#: sql_help.c:757 sql_help.c:1995 +msgid "using_expression" +msgstr "espressione_using" + +#: sql_help.c:758 sql_help.c:1996 +msgid "check_expression" +msgstr "espressione_check" + +#: sql_help.c:797 sql_help.c:1219 sql_help.c:1862 sql_help.c:2028 +#: sql_help.c:2476 msgid "password" msgstr "password" -#: sql_help.c:716 sql_help.c:1127 sql_help.c:1742 sql_help.c:1891 -#: sql_help.c:2315 +#: sql_help.c:798 sql_help.c:1220 sql_help.c:1863 sql_help.c:2029 +#: sql_help.c:2477 msgid "timestamp" msgstr "timestamp" -#: sql_help.c:720 sql_help.c:724 sql_help.c:727 sql_help.c:730 sql_help.c:2861 -#: sql_help.c:3140 +#: sql_help.c:802 sql_help.c:806 sql_help.c:809 sql_help.c:812 sql_help.c:3048 +#: sql_help.c:3380 msgid "database_name" msgstr "nome_database" -#: sql_help.c:739 sql_help.c:775 sql_help.c:1053 sql_help.c:1187 -#: sql_help.c:1227 sql_help.c:1286 sql_help.c:1311 sql_help.c:1322 -#: sql_help.c:1379 sql_help.c:1384 sql_help.c:1661 sql_help.c:1761 -#: sql_help.c:1797 sql_help.c:1913 sql_help.c:1953 sql_help.c:2033 -#: sql_help.c:2045 sql_help.c:2102 sql_help.c:2204 sql_help.c:2380 -#: sql_help.c:2597 sql_help.c:2678 sql_help.c:2851 sql_help.c:2856 -#: sql_help.c:2898 sql_help.c:3130 sql_help.c:3135 sql_help.c:3231 -#: sql_help.c:3318 sql_help.c:3320 sql_help.c:3358 sql_help.c:3397 -#: sql_help.c:3536 sql_help.c:3538 sql_help.c:3576 sql_help.c:3608 -#: sql_help.c:3628 sql_help.c:3630 sql_help.c:3631 sql_help.c:3705 -#: sql_help.c:3707 sql_help.c:3745 -msgid "table_name" -msgstr "nome_tabella" - -#: sql_help.c:769 sql_help.c:1948 +#: sql_help.c:853 sql_help.c:2094 msgid "increment" msgstr "incremento" -#: sql_help.c:770 sql_help.c:1949 +#: sql_help.c:854 sql_help.c:2095 msgid "minvalue" msgstr "valoremin" -#: sql_help.c:771 sql_help.c:1950 +#: sql_help.c:855 sql_help.c:2096 msgid "maxvalue" msgstr "valoremax" -#: sql_help.c:772 sql_help.c:1951 sql_help.c:3316 sql_help.c:3395 -#: sql_help.c:3534 sql_help.c:3648 sql_help.c:3703 +#: sql_help.c:856 sql_help.c:2097 sql_help.c:3565 sql_help.c:3655 +#: sql_help.c:3803 sql_help.c:3932 sql_help.c:3996 msgid "start" msgstr "inizio" -#: sql_help.c:773 +#: sql_help.c:857 msgid "restart" msgstr "riavvio" -#: sql_help.c:774 sql_help.c:1952 +#: sql_help.c:858 sql_help.c:2098 msgid "cache" msgstr "cache" -#: sql_help.c:915 sql_help.c:2038 sql_help.c:2049 -msgid "table_constraint" -msgstr "vincoli_di_tabella" - -#: sql_help.c:916 +#: sql_help.c:1003 msgid "table_constraint_using_index" msgstr "vincoli_di_tabella_con_indice" -#: sql_help.c:924 sql_help.c:925 sql_help.c:926 sql_help.c:927 +#: sql_help.c:1011 sql_help.c:1012 sql_help.c:1013 sql_help.c:1014 msgid "rewrite_rule_name" msgstr "nome_regola_di_riscrittura" -#: sql_help.c:932 sql_help.c:933 sql_help.c:2041 -msgid "parent_table" -msgstr "tabella_padre" - -#: sql_help.c:934 sql_help.c:2046 sql_help.c:2883 sql_help.c:3162 -msgid "type_name" -msgstr "nome_di_tipo" - -#: sql_help.c:938 +#: sql_help.c:1025 msgid "and table_constraint_using_index is:" msgstr "e vincolo_di_tabella_con_indice è:" -#: sql_help.c:956 sql_help.c:959 sql_help.c:2121 +#: sql_help.c:1043 sql_help.c:1046 sql_help.c:2267 msgid "tablespace_option" msgstr "opzione_tablespace" -#: sql_help.c:980 sql_help.c:983 sql_help.c:989 sql_help.c:993 +#: sql_help.c:1067 sql_help.c:1070 sql_help.c:1076 sql_help.c:1080 msgid "token_type" msgstr "tipo_di_token" -#: sql_help.c:981 sql_help.c:984 +#: sql_help.c:1068 sql_help.c:1071 msgid "dictionary_name" msgstr "nome_dizionario" -#: sql_help.c:986 sql_help.c:990 +#: sql_help.c:1073 sql_help.c:1077 msgid "old_dictionary" msgstr "vecchio_dizionario" -#: sql_help.c:987 sql_help.c:991 +#: sql_help.c:1074 sql_help.c:1078 msgid "new_dictionary" msgstr "nuovo_dizionario" -#: sql_help.c:1078 sql_help.c:1088 sql_help.c:1091 sql_help.c:1092 -#: sql_help.c:2254 +#: sql_help.c:1165 sql_help.c:1175 sql_help.c:1178 sql_help.c:1179 +#: sql_help.c:2416 msgid "attribute_name" msgstr "nome_attributo" -#: sql_help.c:1079 +#: sql_help.c:1166 msgid "new_attribute_name" msgstr "nuovo_nome_attributo" -#: sql_help.c:1085 +#: sql_help.c:1172 msgid "new_enum_value" msgstr "nuovo_valore_enum" -#: sql_help.c:1086 +#: sql_help.c:1173 msgid "existing_enum_value" msgstr "valore_enum_esistente" -#: sql_help.c:1148 sql_help.c:1668 sql_help.c:1964 sql_help.c:2332 -#: sql_help.c:2703 sql_help.c:2867 sql_help.c:3146 +#: sql_help.c:1243 sql_help.c:1783 sql_help.c:2110 sql_help.c:2494 +#: sql_help.c:2883 sql_help.c:3054 sql_help.c:3089 sql_help.c:3386 msgid "server_name" msgstr "nome_server" -#: sql_help.c:1176 sql_help.c:1179 sql_help.c:2347 +#: sql_help.c:1271 sql_help.c:1274 sql_help.c:2509 msgid "view_option_name" msgstr "nome_opzione_vista" -#: sql_help.c:1177 sql_help.c:2348 +#: sql_help.c:1272 sql_help.c:2510 msgid "view_option_value" msgstr "valore_opzione_vista" -#: sql_help.c:1202 sql_help.c:3453 sql_help.c:3455 sql_help.c:3479 +#: sql_help.c:1297 sql_help.c:3713 sql_help.c:3715 sql_help.c:3739 msgid "transaction_mode" msgstr "modalità_transazione" -#: sql_help.c:1203 sql_help.c:3456 sql_help.c:3480 +#: sql_help.c:1298 sql_help.c:3716 sql_help.c:3740 msgid "where transaction_mode is one of:" msgstr "dove modalità_transazione è una di:" -#: sql_help.c:1283 +#: sql_help.c:1380 msgid "relation_name" msgstr "nome_relazione" -#: sql_help.c:1310 +#: sql_help.c:1385 sql_help.c:3050 sql_help.c:3382 +msgid "domain_name" +msgstr "nome_dominio" + +#: sql_help.c:1409 msgid "rule_name" msgstr "nome_ruolo" -#: sql_help.c:1325 +#: sql_help.c:1426 msgid "text" msgstr "testo" -#: sql_help.c:1350 sql_help.c:2993 sql_help.c:3180 +#: sql_help.c:1451 sql_help.c:3232 sql_help.c:3420 msgid "transaction_id" msgstr "id_transazione" -#: sql_help.c:1381 sql_help.c:1387 sql_help.c:2919 +#: sql_help.c:1482 sql_help.c:1488 sql_help.c:3158 msgid "filename" msgstr "nome_file" -#: sql_help.c:1382 sql_help.c:1388 sql_help.c:1915 sql_help.c:1916 -#: sql_help.c:1917 +#: sql_help.c:1483 sql_help.c:1489 sql_help.c:2053 sql_help.c:2054 +#: sql_help.c:2055 msgid "command" msgstr "comando" -#: sql_help.c:1386 sql_help.c:1802 sql_help.c:2107 sql_help.c:2349 -#: sql_help.c:2367 sql_help.c:2901 +#: sql_help.c:1487 sql_help.c:1923 sql_help.c:2253 sql_help.c:2511 +#: sql_help.c:2529 sql_help.c:3123 msgid "query" msgstr "query" -#: sql_help.c:1390 sql_help.c:2748 +#: sql_help.c:1491 sql_help.c:2928 msgid "where option can be one of:" msgstr "dove opzione può essere una di:" -#: sql_help.c:1391 +#: sql_help.c:1492 msgid "format_name" msgstr "nome_formato" -#: sql_help.c:1392 sql_help.c:1393 sql_help.c:1396 sql_help.c:2749 -#: sql_help.c:2750 sql_help.c:2751 sql_help.c:2752 sql_help.c:2753 +#: sql_help.c:1493 sql_help.c:1494 sql_help.c:1497 sql_help.c:2929 +#: sql_help.c:2930 sql_help.c:2931 sql_help.c:2932 sql_help.c:2933 msgid "boolean" msgstr "booleano" -#: sql_help.c:1394 +#: sql_help.c:1495 msgid "delimiter_character" msgstr "carattere_delimitatore" -#: sql_help.c:1395 +#: sql_help.c:1496 msgid "null_string" msgstr "stringa_nulla" -#: sql_help.c:1397 +#: sql_help.c:1498 msgid "quote_character" msgstr "carattere_virgolette" -#: sql_help.c:1398 +#: sql_help.c:1499 msgid "escape_character" msgstr "carattere_di_escape" -#: sql_help.c:1402 +#: sql_help.c:1503 msgid "encoding_name" msgstr "nome_codifica" -#: sql_help.c:1459 sql_help.c:1475 sql_help.c:1478 +#: sql_help.c:1560 sql_help.c:1576 sql_help.c:1579 msgid "arg_data_type" msgstr "topo_dato_argomento" -#: sql_help.c:1460 sql_help.c:1479 sql_help.c:1487 +#: sql_help.c:1561 sql_help.c:1580 sql_help.c:1588 msgid "sfunc" msgstr "sfunz" -#: sql_help.c:1461 sql_help.c:1480 sql_help.c:1488 +#: sql_help.c:1562 sql_help.c:1581 sql_help.c:1589 msgid "state_data_type" msgstr "tipo_dato_stato" -#: sql_help.c:1462 sql_help.c:1481 sql_help.c:1489 +#: sql_help.c:1563 sql_help.c:1582 sql_help.c:1590 msgid "state_data_size" msgstr "dimensione_dato_stato" -#: sql_help.c:1463 sql_help.c:1482 sql_help.c:1490 +#: sql_help.c:1564 sql_help.c:1583 sql_help.c:1591 msgid "ffunc" msgstr "ffunz" -#: sql_help.c:1464 sql_help.c:1483 sql_help.c:1491 +#: sql_help.c:1565 sql_help.c:1584 sql_help.c:1592 msgid "initial_condition" msgstr "condizione_iniziale" -#: sql_help.c:1465 sql_help.c:1492 +#: sql_help.c:1566 sql_help.c:1593 msgid "msfunc" msgstr "msfunz" -#: sql_help.c:1466 sql_help.c:1493 +#: sql_help.c:1567 sql_help.c:1594 msgid "minvfunc" msgstr "minvfunz" -#: sql_help.c:1467 sql_help.c:1494 +#: sql_help.c:1568 sql_help.c:1595 msgid "mstate_data_type" msgstr "tipo_dato_mstato" -#: sql_help.c:1468 sql_help.c:1495 +#: sql_help.c:1569 sql_help.c:1596 msgid "mstate_data_size" msgstr "tipo_dato_mstato" -#: sql_help.c:1469 sql_help.c:1496 +#: sql_help.c:1570 sql_help.c:1597 msgid "mffunc" msgstr "mffunz" -#: sql_help.c:1470 sql_help.c:1497 +#: sql_help.c:1571 sql_help.c:1598 msgid "minitial_condition" msgstr "condizione_minima" -#: sql_help.c:1471 sql_help.c:1498 +#: sql_help.c:1572 sql_help.c:1599 msgid "sort_operator" msgstr "operatore_di_ordinamento" -#: sql_help.c:1484 +#: sql_help.c:1585 msgid "or the old syntax" msgstr "o la vecchia sintassi" -#: sql_help.c:1486 +#: sql_help.c:1587 msgid "base_type" msgstr "tipo_base" -#: sql_help.c:1537 +#: sql_help.c:1638 msgid "locale" msgstr "locale" -#: sql_help.c:1538 sql_help.c:1572 +#: sql_help.c:1639 sql_help.c:1675 msgid "lc_collate" msgstr "lc_collate" -#: sql_help.c:1539 sql_help.c:1573 +#: sql_help.c:1640 sql_help.c:1676 msgid "lc_ctype" msgstr "lc_ctype" -#: sql_help.c:1541 +#: sql_help.c:1642 msgid "existing_collation" msgstr "ordinamento_esistente" -#: sql_help.c:1551 +#: sql_help.c:1652 msgid "source_encoding" msgstr "codifica_origine" -#: sql_help.c:1552 +#: sql_help.c:1653 msgid "dest_encoding" msgstr "codifica_destinazione" -#: sql_help.c:1570 sql_help.c:2147 +#: sql_help.c:1673 sql_help.c:2293 msgid "template" msgstr "template" -#: sql_help.c:1571 +#: sql_help.c:1674 msgid "encoding" msgstr "codifica" -#: sql_help.c:1596 +#: sql_help.c:1700 +msgid "constraint" +msgstr "vincolo" + +#: sql_help.c:1701 msgid "where constraint is:" msgstr "dove vincolo di è:" -#: sql_help.c:1610 sql_help.c:1912 sql_help.c:2203 +#: sql_help.c:1715 sql_help.c:2050 sql_help.c:2365 msgid "event" msgstr "evento" -#: sql_help.c:1611 +#: sql_help.c:1716 msgid "filter_variable" msgstr "valiabile_filtro" -#: sql_help.c:1623 +#: sql_help.c:1728 msgid "extension_name" msgstr "nome_estensione" -#: sql_help.c:1625 +#: sql_help.c:1730 msgid "version" msgstr "versione" -#: sql_help.c:1626 +#: sql_help.c:1731 msgid "old_version" msgstr "vecchia_versione" -#: sql_help.c:1671 sql_help.c:2053 +#: sql_help.c:1786 sql_help.c:2199 msgid "where column_constraint is:" msgstr "dove vincolo_di_colonna è:" -#: sql_help.c:1673 sql_help.c:1700 sql_help.c:2056 +#: sql_help.c:1789 sql_help.c:1820 sql_help.c:2202 msgid "default_expr" msgstr "expr_default" -#: sql_help.c:1701 +#: sql_help.c:1790 sql_help.c:2209 +msgid "and table_constraint is:" +msgstr "e vincolo_di_tabella è:" + +#: sql_help.c:1821 msgid "rettype" msgstr "tipo_ritorno" -#: sql_help.c:1703 +#: sql_help.c:1823 msgid "column_type" msgstr "tipo_colonna" -#: sql_help.c:1704 sql_help.c:2401 sql_help.c:2875 sql_help.c:3154 -msgid "lang_name" -msgstr "nome_linguaggio" - -#: sql_help.c:1710 +#: sql_help.c:1831 msgid "definition" msgstr "definizione" -#: sql_help.c:1711 +#: sql_help.c:1832 msgid "obj_file" msgstr "file_obj" -#: sql_help.c:1712 +#: sql_help.c:1833 msgid "link_symbol" msgstr "simbolo_link" -#: sql_help.c:1713 +#: sql_help.c:1834 msgid "attribute" msgstr "attributo" -#: sql_help.c:1748 sql_help.c:1897 sql_help.c:2321 +#: sql_help.c:1869 sql_help.c:2035 sql_help.c:2483 msgid "uid" msgstr "uid" -#: sql_help.c:1762 +#: sql_help.c:1883 msgid "method" msgstr "metodo" -#: sql_help.c:1766 sql_help.c:2088 +#: sql_help.c:1887 sql_help.c:2234 sql_help.c:3132 msgid "opclass" msgstr "classe_op" -#: sql_help.c:1770 sql_help.c:2074 +#: sql_help.c:1891 sql_help.c:2220 msgid "predicate" msgstr "predicato" -#: sql_help.c:1782 +#: sql_help.c:1903 msgid "call_handler" msgstr "handler_chiamata" -#: sql_help.c:1783 +#: sql_help.c:1904 msgid "inline_handler" msgstr "handler_inline" -#: sql_help.c:1784 +#: sql_help.c:1905 msgid "valfunction" msgstr "funzione_valid" -#: sql_help.c:1820 +#: sql_help.c:1941 msgid "com_op" msgstr "com_op" -#: sql_help.c:1821 +#: sql_help.c:1942 msgid "neg_op" msgstr "neg_op" -#: sql_help.c:1822 -msgid "res_proc" -msgstr "res_proc" - -#: sql_help.c:1823 -msgid "join_proc" -msgstr "proc_join" - -#: sql_help.c:1839 +#: sql_help.c:1960 msgid "family_name" msgstr "nome_famiglia" -#: sql_help.c:1850 +#: sql_help.c:1971 msgid "storage_type" msgstr "tipo_memorizzazione" -#: sql_help.c:1914 sql_help.c:2206 sql_help.c:2383 sql_help.c:3307 -#: sql_help.c:3309 sql_help.c:3386 sql_help.c:3388 sql_help.c:3525 -#: sql_help.c:3527 sql_help.c:3615 sql_help.c:3694 sql_help.c:3696 +#: sql_help.c:2052 sql_help.c:2368 sql_help.c:2545 sql_help.c:3142 +#: sql_help.c:3556 sql_help.c:3558 sql_help.c:3646 sql_help.c:3648 +#: sql_help.c:3794 sql_help.c:3796 sql_help.c:3899 sql_help.c:3987 +#: sql_help.c:3989 msgid "condition" msgstr "condizione" -#: sql_help.c:1918 sql_help.c:2209 +#: sql_help.c:2056 sql_help.c:2371 msgid "where event can be one of:" msgstr "dove evento può essere uno di:" -#: sql_help.c:1931 sql_help.c:1933 +#: sql_help.c:2075 sql_help.c:2077 msgid "schema_element" msgstr "elemento_di_schema" -#: sql_help.c:1965 +#: sql_help.c:2111 msgid "server_type" msgstr "tipo_di_server" -#: sql_help.c:1966 +#: sql_help.c:2112 msgid "server_version" msgstr "versione_server" -#: sql_help.c:1967 sql_help.c:2865 sql_help.c:3144 +#: sql_help.c:2113 sql_help.c:3052 sql_help.c:3384 msgid "fdw_name" msgstr "nome_fdw" -#: sql_help.c:2039 +#: sql_help.c:2185 msgid "source_table" msgstr "tabella_origine" -#: sql_help.c:2040 +#: sql_help.c:2186 msgid "like_option" msgstr "opzioni_di_like" -#: sql_help.c:2057 sql_help.c:2058 sql_help.c:2067 sql_help.c:2069 -#: sql_help.c:2073 +#: sql_help.c:2203 sql_help.c:2204 sql_help.c:2213 sql_help.c:2215 +#: sql_help.c:2219 msgid "index_parameters" msgstr "parametri_di_indice" -#: sql_help.c:2059 sql_help.c:2076 +#: sql_help.c:2205 sql_help.c:2222 msgid "reftable" msgstr "tabella_ref" -#: sql_help.c:2060 sql_help.c:2077 +#: sql_help.c:2206 sql_help.c:2223 msgid "refcolumn" msgstr "colonna_ref" -#: sql_help.c:2063 -msgid "and table_constraint is:" -msgstr "e vincolo_di_tabella è:" - -#: sql_help.c:2071 +#: sql_help.c:2217 msgid "exclude_element" msgstr "elemento_di_esclusione" -#: sql_help.c:2072 sql_help.c:3314 sql_help.c:3393 sql_help.c:3532 -#: sql_help.c:3646 sql_help.c:3701 +#: sql_help.c:2218 sql_help.c:3563 sql_help.c:3653 sql_help.c:3801 +#: sql_help.c:3930 sql_help.c:3994 msgid "operator" msgstr "operatore" -#: sql_help.c:2080 +#: sql_help.c:2226 msgid "and like_option is:" msgstr "e opzione_like è:" -#: sql_help.c:2081 +#: sql_help.c:2227 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "parametri_di_indice nei vincoli UNIQUE, PRIMARY KEY e EXCLUDE sono:" -#: sql_help.c:2085 +#: sql_help.c:2231 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "elemento_di_esclusione in un vincolo EXCLUDE è:" -#: sql_help.c:2120 +#: sql_help.c:2266 msgid "directory" msgstr "directory" -#: sql_help.c:2134 +#: sql_help.c:2280 msgid "parser_name" msgstr "nome_parser" -#: sql_help.c:2135 +#: sql_help.c:2281 msgid "source_config" msgstr "config_origine" -#: sql_help.c:2164 +#: sql_help.c:2310 msgid "start_function" msgstr "funzione_inizio" -#: sql_help.c:2165 +#: sql_help.c:2311 msgid "gettoken_function" msgstr "funzione_gettoken" -#: sql_help.c:2166 +#: sql_help.c:2312 msgid "end_function" msgstr "funzione_fine" -#: sql_help.c:2167 +#: sql_help.c:2313 msgid "lextypes_function" msgstr "funzione_lextypes" -#: sql_help.c:2168 +#: sql_help.c:2314 msgid "headline_function" msgstr "funzione_headline" -#: sql_help.c:2180 +#: sql_help.c:2326 msgid "init_function" msgstr "funzione_init" -#: sql_help.c:2181 +#: sql_help.c:2327 msgid "lexize_function" msgstr "funzione_lexize" -#: sql_help.c:2205 +#: sql_help.c:2340 +msgid "from_sql_function_name" +msgstr "nome_funzione_from_sql" + +#: sql_help.c:2342 +msgid "to_sql_function_name" +msgstr "nome_funzione_to_sql" + +#: sql_help.c:2367 msgid "referenced_table_name" msgstr "nome_tabella_referenziata" -#: sql_help.c:2208 +#: sql_help.c:2370 msgid "arguments" msgstr "argomenti" -#: sql_help.c:2258 sql_help.c:3252 +#: sql_help.c:2420 sql_help.c:3492 msgid "label" msgstr "etichetta" -#: sql_help.c:2260 +#: sql_help.c:2422 msgid "subtype" msgstr "sottotipo" -#: sql_help.c:2261 +#: sql_help.c:2423 msgid "subtype_operator_class" msgstr "classe_operatore_sottotipo" -#: sql_help.c:2263 +#: sql_help.c:2425 msgid "canonical_function" msgstr "funzione_canonica" -#: sql_help.c:2264 +#: sql_help.c:2426 msgid "subtype_diff_function" msgstr "funzione_diff_sottotipo" -#: sql_help.c:2266 +#: sql_help.c:2428 msgid "input_function" msgstr "funzione_input" -#: sql_help.c:2267 +#: sql_help.c:2429 msgid "output_function" msgstr "funzione_output" -#: sql_help.c:2268 +#: sql_help.c:2430 msgid "receive_function" msgstr "funzione_receive" -#: sql_help.c:2269 +#: sql_help.c:2431 msgid "send_function" msgstr "funzione_send" -#: sql_help.c:2270 +#: sql_help.c:2432 msgid "type_modifier_input_function" msgstr "funzione_input_modificatore_tipo" -#: sql_help.c:2271 +#: sql_help.c:2433 msgid "type_modifier_output_function" msgstr "funzione_output_modificatore_tipo" -#: sql_help.c:2272 +#: sql_help.c:2434 msgid "analyze_function" msgstr "funzione_analyze" -#: sql_help.c:2273 +#: sql_help.c:2435 msgid "internallength" msgstr "lunghezza_interna" -#: sql_help.c:2274 +#: sql_help.c:2436 msgid "alignment" msgstr "allineamento" -#: sql_help.c:2275 +#: sql_help.c:2437 msgid "storage" msgstr "memorizzazione" -#: sql_help.c:2276 +#: sql_help.c:2438 msgid "like_type" msgstr "tipo_like" -#: sql_help.c:2277 +#: sql_help.c:2439 msgid "category" msgstr "categoria" -#: sql_help.c:2278 +#: sql_help.c:2440 msgid "preferred" msgstr "preferito" -#: sql_help.c:2279 +#: sql_help.c:2441 msgid "default" msgstr "predefinito" -#: sql_help.c:2280 +#: sql_help.c:2442 msgid "element" msgstr "elemento" -#: sql_help.c:2281 +#: sql_help.c:2443 msgid "delimiter" msgstr "delimitatore" -#: sql_help.c:2282 +#: sql_help.c:2444 msgid "collatable" msgstr "ordinabile" -#: sql_help.c:2379 sql_help.c:2897 sql_help.c:3302 sql_help.c:3380 -#: sql_help.c:3520 sql_help.c:3607 sql_help.c:3689 +#: sql_help.c:2541 sql_help.c:3118 sql_help.c:3551 sql_help.c:3640 +#: sql_help.c:3789 sql_help.c:3889 sql_help.c:3982 msgid "with_query" msgstr "query_with" -#: sql_help.c:2381 sql_help.c:3321 sql_help.c:3324 sql_help.c:3327 -#: sql_help.c:3331 sql_help.c:3335 sql_help.c:3343 sql_help.c:3539 -#: sql_help.c:3542 sql_help.c:3545 sql_help.c:3549 sql_help.c:3553 -#: sql_help.c:3561 sql_help.c:3609 sql_help.c:3708 sql_help.c:3711 -#: sql_help.c:3714 sql_help.c:3718 sql_help.c:3722 sql_help.c:3730 +#: sql_help.c:2543 sql_help.c:3120 sql_help.c:3570 sql_help.c:3576 +#: sql_help.c:3579 sql_help.c:3583 sql_help.c:3587 sql_help.c:3595 +#: sql_help.c:3808 sql_help.c:3814 sql_help.c:3817 sql_help.c:3821 +#: sql_help.c:3825 sql_help.c:3833 sql_help.c:3891 sql_help.c:4001 +#: sql_help.c:4007 sql_help.c:4010 sql_help.c:4014 sql_help.c:4018 +#: sql_help.c:4026 msgid "alias" msgstr "alias" -#: sql_help.c:2382 +#: sql_help.c:2544 msgid "using_list" msgstr "lista_using" -#: sql_help.c:2384 sql_help.c:2779 sql_help.c:2960 sql_help.c:3616 +#: sql_help.c:2546 sql_help.c:2959 sql_help.c:3199 sql_help.c:3900 msgid "cursor_name" msgstr "nome_cursore" -#: sql_help.c:2385 sql_help.c:2902 sql_help.c:3617 +#: sql_help.c:2547 sql_help.c:3126 sql_help.c:3901 msgid "output_expression" msgstr "espressione_output" -#: sql_help.c:2386 sql_help.c:2903 sql_help.c:3305 sql_help.c:3383 -#: sql_help.c:3523 sql_help.c:3618 sql_help.c:3692 +#: sql_help.c:2548 sql_help.c:3127 sql_help.c:3554 sql_help.c:3643 +#: sql_help.c:3792 sql_help.c:3902 sql_help.c:3985 msgid "output_name" msgstr "nome_output" -#: sql_help.c:2402 +#: sql_help.c:2564 msgid "code" msgstr "codice" -#: sql_help.c:2727 +#: sql_help.c:2907 msgid "parameter" msgstr "parametro" -#: sql_help.c:2746 sql_help.c:2747 sql_help.c:2985 +#: sql_help.c:2926 sql_help.c:2927 sql_help.c:3224 msgid "statement" msgstr "istruzione" -#: sql_help.c:2778 sql_help.c:2959 +#: sql_help.c:2958 sql_help.c:3198 msgid "direction" msgstr "direzione" -#: sql_help.c:2780 sql_help.c:2961 +#: sql_help.c:2960 sql_help.c:3200 msgid "where direction can be empty or one of:" msgstr "dove direzione può essere vuota o una di:" -#: sql_help.c:2781 sql_help.c:2782 sql_help.c:2783 sql_help.c:2784 -#: sql_help.c:2785 sql_help.c:2962 sql_help.c:2963 sql_help.c:2964 -#: sql_help.c:2965 sql_help.c:2966 sql_help.c:3315 sql_help.c:3317 -#: sql_help.c:3394 sql_help.c:3396 sql_help.c:3533 sql_help.c:3535 -#: sql_help.c:3647 sql_help.c:3649 sql_help.c:3702 sql_help.c:3704 +#: sql_help.c:2961 sql_help.c:2962 sql_help.c:2963 sql_help.c:2964 +#: sql_help.c:2965 sql_help.c:3201 sql_help.c:3202 sql_help.c:3203 +#: sql_help.c:3204 sql_help.c:3205 sql_help.c:3564 sql_help.c:3566 +#: sql_help.c:3654 sql_help.c:3656 sql_help.c:3802 sql_help.c:3804 +#: sql_help.c:3931 sql_help.c:3933 sql_help.c:3995 sql_help.c:3997 msgid "count" msgstr "conteggio" -#: sql_help.c:2858 sql_help.c:3137 +#: sql_help.c:3045 sql_help.c:3377 msgid "sequence_name" msgstr "nome_sequenza" -#: sql_help.c:2863 sql_help.c:3142 -msgid "domain_name" -msgstr "nome_dominio" - -#: sql_help.c:2871 sql_help.c:3150 +#: sql_help.c:3058 sql_help.c:3390 msgid "arg_name" msgstr "nome_arg" -#: sql_help.c:2872 sql_help.c:3151 +#: sql_help.c:3059 sql_help.c:3391 msgid "arg_type" msgstr "tipo_arg" -#: sql_help.c:2877 sql_help.c:3156 +#: sql_help.c:3064 sql_help.c:3396 msgid "loid" msgstr "loid" -#: sql_help.c:2911 sql_help.c:2974 sql_help.c:3593 +#: sql_help.c:3087 +msgid "remote_schema" +msgstr "schema_remoto" + +#: sql_help.c:3090 +msgid "local_schema" +msgstr "schema_locale" + +#: sql_help.c:3124 +msgid "conflict_target" +msgstr "target_conflitto" + +#: sql_help.c:3125 +msgid "conflict_action" +msgstr "azione_conflitto" + +#: sql_help.c:3128 +msgid "where conflict_target can be one of:" +msgstr "dove target_conflitto può essere uno di:" + +#: sql_help.c:3129 +msgid "column_name_index" +msgstr "indice_nome_colonna" + +#: sql_help.c:3130 +msgid "expression_index" +msgstr "indice_espressione" + +#: sql_help.c:3133 +msgid "index_predicate" +msgstr "indice_predicato" + +#: sql_help.c:3135 +msgid "and conflict_action is one of:" +msgstr "e azione_conflitto è una di:" + +#: sql_help.c:3141 sql_help.c:3897 +msgid "sub-SELECT" +msgstr "sub-SELECT" + +#: sql_help.c:3150 sql_help.c:3213 sql_help.c:3873 msgid "channel" msgstr "canale" -#: sql_help.c:2933 +#: sql_help.c:3172 msgid "lockmode" msgstr "modalità_lock" -#: sql_help.c:2934 +#: sql_help.c:3173 msgid "where lockmode is one of:" msgstr "dove modalità_lock è una di:" -#: sql_help.c:2975 +#: sql_help.c:3214 msgid "payload" msgstr "payload" -#: sql_help.c:3001 +#: sql_help.c:3241 msgid "old_role" msgstr "vecchio_ruolo" -#: sql_help.c:3002 +#: sql_help.c:3242 msgid "new_role" msgstr "nuovo_ruolo" -#: sql_help.c:3027 sql_help.c:3188 sql_help.c:3196 +#: sql_help.c:3267 sql_help.c:3428 sql_help.c:3436 msgid "savepoint_name" msgstr "nome_punto_salvataggio" -#: sql_help.c:3229 +#: sql_help.c:3469 msgid "provider" msgstr "provider" -#: sql_help.c:3306 sql_help.c:3345 sql_help.c:3347 sql_help.c:3385 -#: sql_help.c:3524 sql_help.c:3563 sql_help.c:3565 sql_help.c:3693 -#: sql_help.c:3732 sql_help.c:3734 +#: sql_help.c:3555 sql_help.c:3597 sql_help.c:3599 sql_help.c:3645 +#: sql_help.c:3793 sql_help.c:3835 sql_help.c:3837 sql_help.c:3986 +#: sql_help.c:4028 sql_help.c:4030 msgid "from_item" msgstr "elemento_from" -#: sql_help.c:3310 sql_help.c:3389 sql_help.c:3528 sql_help.c:3697 +#: sql_help.c:3557 sql_help.c:3609 sql_help.c:3795 sql_help.c:3847 +#: sql_help.c:3988 sql_help.c:4040 +msgid "grouping_element" +msgstr "elemento_raggruppante" + +#: sql_help.c:3559 sql_help.c:3649 sql_help.c:3797 sql_help.c:3990 msgid "window_name" msgstr "nome_finestra" -#: sql_help.c:3311 sql_help.c:3390 sql_help.c:3529 sql_help.c:3698 +#: sql_help.c:3560 sql_help.c:3650 sql_help.c:3798 sql_help.c:3991 msgid "window_definition" msgstr "definizione_finestra" -#: sql_help.c:3312 sql_help.c:3323 sql_help.c:3353 sql_help.c:3391 -#: sql_help.c:3530 sql_help.c:3541 sql_help.c:3571 sql_help.c:3699 -#: sql_help.c:3710 sql_help.c:3740 +#: sql_help.c:3561 sql_help.c:3575 sql_help.c:3613 sql_help.c:3651 +#: sql_help.c:3799 sql_help.c:3813 sql_help.c:3851 sql_help.c:3992 +#: sql_help.c:4006 sql_help.c:4044 msgid "select" msgstr "select" -#: sql_help.c:3319 sql_help.c:3537 sql_help.c:3706 +#: sql_help.c:3568 sql_help.c:3806 sql_help.c:3999 msgid "where from_item can be one of:" msgstr "dove from_item può essere uno di:" -#: sql_help.c:3322 sql_help.c:3325 sql_help.c:3328 sql_help.c:3332 -#: sql_help.c:3344 sql_help.c:3540 sql_help.c:3543 sql_help.c:3546 -#: sql_help.c:3550 sql_help.c:3562 sql_help.c:3709 sql_help.c:3712 -#: sql_help.c:3715 sql_help.c:3719 sql_help.c:3731 +#: sql_help.c:3571 sql_help.c:3577 sql_help.c:3580 sql_help.c:3584 +#: sql_help.c:3596 sql_help.c:3809 sql_help.c:3815 sql_help.c:3818 +#: sql_help.c:3822 sql_help.c:3834 sql_help.c:4002 sql_help.c:4008 +#: sql_help.c:4011 sql_help.c:4015 sql_help.c:4027 msgid "column_alias" msgstr "alias_colonna" -#: sql_help.c:3326 sql_help.c:3351 sql_help.c:3544 sql_help.c:3569 -#: sql_help.c:3713 sql_help.c:3738 -msgid "with_query_name" -msgstr "nome_query_with" +#: sql_help.c:3572 sql_help.c:3810 sql_help.c:4003 +msgid "sampling_method" +msgstr "metodo_di_campionamento" -#: sql_help.c:3330 sql_help.c:3334 sql_help.c:3338 sql_help.c:3341 -#: sql_help.c:3548 sql_help.c:3552 sql_help.c:3556 sql_help.c:3559 -#: sql_help.c:3717 sql_help.c:3721 sql_help.c:3725 sql_help.c:3728 +#: sql_help.c:3573 sql_help.c:3582 sql_help.c:3586 sql_help.c:3590 +#: sql_help.c:3593 sql_help.c:3811 sql_help.c:3820 sql_help.c:3824 +#: sql_help.c:3828 sql_help.c:3831 sql_help.c:4004 sql_help.c:4013 +#: sql_help.c:4017 sql_help.c:4021 sql_help.c:4024 msgid "argument" msgstr "argomento" -#: sql_help.c:3336 sql_help.c:3339 sql_help.c:3342 sql_help.c:3554 -#: sql_help.c:3557 sql_help.c:3560 sql_help.c:3723 sql_help.c:3726 -#: sql_help.c:3729 +#: sql_help.c:3574 sql_help.c:3812 sql_help.c:4005 +msgid "seed" +msgstr "seme" + +#: sql_help.c:3578 sql_help.c:3611 sql_help.c:3816 sql_help.c:3849 +#: sql_help.c:4009 sql_help.c:4042 +msgid "with_query_name" +msgstr "nome_query_with" + +#: sql_help.c:3588 sql_help.c:3591 sql_help.c:3594 sql_help.c:3826 +#: sql_help.c:3829 sql_help.c:3832 sql_help.c:4019 sql_help.c:4022 +#: sql_help.c:4025 msgid "column_definition" msgstr "definizione_colonna" -#: sql_help.c:3346 sql_help.c:3564 sql_help.c:3733 +#: sql_help.c:3598 sql_help.c:3836 sql_help.c:4029 msgid "join_type" msgstr "tipo_join" -#: sql_help.c:3348 sql_help.c:3566 sql_help.c:3735 +#: sql_help.c:3600 sql_help.c:3838 sql_help.c:4031 msgid "join_condition" msgstr "condizione_join" -#: sql_help.c:3349 sql_help.c:3567 sql_help.c:3736 +#: sql_help.c:3601 sql_help.c:3839 sql_help.c:4032 msgid "join_column" msgstr "colonna_join" -#: sql_help.c:3350 sql_help.c:3568 sql_help.c:3737 +#: sql_help.c:3602 sql_help.c:3840 sql_help.c:4033 +msgid "and grouping_element can be one of:" +msgstr "e elemento_raggruppante può essere uno di:" + +#: sql_help.c:3610 sql_help.c:3848 sql_help.c:4041 msgid "and with_query is:" msgstr "e with_query è:" -#: sql_help.c:3354 sql_help.c:3572 sql_help.c:3741 +#: sql_help.c:3614 sql_help.c:3852 sql_help.c:4045 msgid "values" msgstr "valori" -#: sql_help.c:3355 sql_help.c:3573 sql_help.c:3742 +#: sql_help.c:3615 sql_help.c:3853 sql_help.c:4046 msgid "insert" msgstr "insert" -#: sql_help.c:3356 sql_help.c:3574 sql_help.c:3743 +#: sql_help.c:3616 sql_help.c:3854 sql_help.c:4047 msgid "update" msgstr "update" -#: sql_help.c:3357 sql_help.c:3575 sql_help.c:3744 +#: sql_help.c:3617 sql_help.c:3855 sql_help.c:4048 msgid "delete" msgstr "delete" -#: sql_help.c:3384 +#: sql_help.c:3644 msgid "new_table" msgstr "nuova_tabella" -#: sql_help.c:3409 +#: sql_help.c:3669 msgid "timezone" msgstr "timezone" -#: sql_help.c:3454 +#: sql_help.c:3714 msgid "snapshot_id" msgstr "id_snapshot" -#: sql_help.c:3614 +#: sql_help.c:3898 msgid "from_list" msgstr "lista_from" -#: sql_help.c:3645 +#: sql_help.c:3929 msgid "sort_expression" msgstr "espressione_ordinamento" -#: sql_help.h:191 sql_help.h:891 +#: sql_help.h:197 sql_help.h:927 msgid "abort the current transaction" msgstr "annulla la transazione corrente" -#: sql_help.h:196 +#: sql_help.h:202 msgid "change the definition of an aggregate function" msgstr "cambia la definizione di una funzione di aggregazione" -#: sql_help.h:201 +#: sql_help.h:207 msgid "change the definition of a collation" msgstr "cambia la definizione di un ordinamento" -#: sql_help.h:206 +#: sql_help.h:212 msgid "change the definition of a conversion" msgstr "cambia la definizione di una conversione" -#: sql_help.h:211 +#: sql_help.h:217 msgid "change a database" msgstr "cambia un database" -#: sql_help.h:216 +#: sql_help.h:222 msgid "define default access privileges" msgstr "definisci i privilegi di accesso di default" -#: sql_help.h:221 +#: sql_help.h:227 msgid "change the definition of a domain" msgstr "cambia la definizione di un dominio" -#: sql_help.h:226 +#: sql_help.h:232 msgid "change the definition of an event trigger" msgstr "cambia la definizione di un trigger di evento" -#: sql_help.h:231 +#: sql_help.h:237 msgid "change the definition of an extension" msgstr "cambia la definizione di una estensione" -#: sql_help.h:236 +#: sql_help.h:242 msgid "change the definition of a foreign-data wrapper" msgstr "cambia la definizione di un wrapper di dati esterni" -#: sql_help.h:241 +#: sql_help.h:247 msgid "change the definition of a foreign table" msgstr "cambia la definizione di una tabella esterna" -#: sql_help.h:246 +#: sql_help.h:252 msgid "change the definition of a function" msgstr "cambia la definizione di una funzione" -#: sql_help.h:251 +#: sql_help.h:257 msgid "change role name or membership" msgstr "cambia il nome del ruolo o l'appartenenza" -#: sql_help.h:256 +#: sql_help.h:262 msgid "change the definition of an index" msgstr "cambia la definizione di un indice" -#: sql_help.h:261 +#: sql_help.h:267 msgid "change the definition of a procedural language" msgstr "cambia la definizione di un linguaggio procedurale" -#: sql_help.h:266 +#: sql_help.h:272 msgid "change the definition of a large object" msgstr "cambia la definizione di un large object" -#: sql_help.h:271 +#: sql_help.h:277 msgid "change the definition of a materialized view" msgstr "cambia la definizione di una vista materializzata" -#: sql_help.h:276 +#: sql_help.h:282 msgid "change the definition of an operator" msgstr "cambia la definizione di un operatore" -#: sql_help.h:281 +#: sql_help.h:287 msgid "change the definition of an operator class" msgstr "cambia la definizione di una classe di operatori" -#: sql_help.h:286 +#: sql_help.h:292 msgid "change the definition of an operator family" msgstr "cambia la definizione di una famiglia di operatori" -#: sql_help.h:291 sql_help.h:361 +#: sql_help.h:297 +msgid "change the definition of a policy" +msgstr "cambia la definizione di una politica" + +#: sql_help.h:302 sql_help.h:372 msgid "change a database role" msgstr "cambia un ruolo di database" -#: sql_help.h:296 +#: sql_help.h:307 msgid "change the definition of a rule" msgstr "cambia la definizione di una regola" -#: sql_help.h:301 +#: sql_help.h:312 msgid "change the definition of a schema" msgstr "cambia la definizione di uno schema" -#: sql_help.h:306 +#: sql_help.h:317 msgid "change the definition of a sequence generator" msgstr "cambia la definizione di un generatore di sequenza" -#: sql_help.h:311 +#: sql_help.h:322 msgid "change the definition of a foreign server" msgstr "cambia la definizione di un server esterno" -#: sql_help.h:316 +#: sql_help.h:327 msgid "change a server configuration parameter" msgstr "cambia un parametro di configurazione del server" -#: sql_help.h:321 +#: sql_help.h:332 msgid "change the definition of a table" msgstr "cambia la definizione di una tabella" -#: sql_help.h:326 +#: sql_help.h:337 msgid "change the definition of a tablespace" msgstr "cambia la definizione di un tablespace" -#: sql_help.h:331 +#: sql_help.h:342 msgid "change the definition of a text search configuration" msgstr "cambia la definizione di una configurazione di ricerca testo" -#: sql_help.h:336 +#: sql_help.h:347 msgid "change the definition of a text search dictionary" msgstr "cambia la definizione di un dizionario di ricerca testo" -#: sql_help.h:341 +#: sql_help.h:352 msgid "change the definition of a text search parser" msgstr "cambia la definizione di un analizzatore di ricerca testo" -#: sql_help.h:346 +#: sql_help.h:357 msgid "change the definition of a text search template" msgstr "cambia la definizione di un modello di ricerca testo" -#: sql_help.h:351 +#: sql_help.h:362 msgid "change the definition of a trigger" msgstr "cambia la definizione di un trigger" -#: sql_help.h:356 +#: sql_help.h:367 msgid "change the definition of a type" msgstr "cambia la definizione di un tipo di dato" -#: sql_help.h:366 +#: sql_help.h:377 msgid "change the definition of a user mapping" msgstr "cambia la definizione di una mappatura degli" -#: sql_help.h:371 +#: sql_help.h:382 msgid "change the definition of a view" msgstr "cambia la definizione di una vista" -#: sql_help.h:376 +#: sql_help.h:387 msgid "collect statistics about a database" msgstr "raccogli statistiche sul database" -#: sql_help.h:381 sql_help.h:956 +#: sql_help.h:392 sql_help.h:992 msgid "start a transaction block" msgstr "avvia un blocco di transazione" -#: sql_help.h:386 +#: sql_help.h:397 msgid "force a transaction log checkpoint" msgstr "forza un punto di controllo nel log delle transazioni" -#: sql_help.h:391 +#: sql_help.h:402 msgid "close a cursor" msgstr "chiudi un cursore" -#: sql_help.h:396 +#: sql_help.h:407 msgid "cluster a table according to an index" msgstr "raggruppa una tabella in base ad un indice" -#: sql_help.h:401 +#: sql_help.h:412 msgid "define or change the comment of an object" msgstr "definisci o modifica il commento di un oggetto" -#: sql_help.h:406 sql_help.h:796 +#: sql_help.h:417 sql_help.h:827 msgid "commit the current transaction" msgstr "rendi persistente la transazione corrente" -#: sql_help.h:411 +#: sql_help.h:422 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "concludi transazione che è stata precedentemente preparata per un commit a due fasi" -#: sql_help.h:416 +#: sql_help.h:427 msgid "copy data between a file and a table" msgstr "copia i dati tra un file ed una tabella" -#: sql_help.h:421 +#: sql_help.h:432 msgid "define a new aggregate function" msgstr "definisci una nuova funzione aggregata" -#: sql_help.h:426 +#: sql_help.h:437 msgid "define a new cast" msgstr "definisci una nuova conversione di tipi" -#: sql_help.h:431 +#: sql_help.h:442 msgid "define a new collation" msgstr "definisci un nuovo ordinamento" -#: sql_help.h:436 +#: sql_help.h:447 msgid "define a new encoding conversion" msgstr "definisci una nuova conversione di codifica" -#: sql_help.h:441 +#: sql_help.h:452 msgid "create a new database" msgstr "crea un nuovo database" -#: sql_help.h:446 +#: sql_help.h:457 msgid "define a new domain" msgstr "definisci un nuovo dominio" -#: sql_help.h:451 +#: sql_help.h:462 msgid "define a new event trigger" msgstr "definisci un nuovo trigger di evento" -#: sql_help.h:456 +#: sql_help.h:467 msgid "install an extension" msgstr "installa un'estensione" -#: sql_help.h:461 +#: sql_help.h:472 msgid "define a new foreign-data wrapper" msgstr "definisci un nuovo wrapper di dati esterni" -#: sql_help.h:466 +#: sql_help.h:477 msgid "define a new foreign table" msgstr "definisci una nuova tabella esterna" -#: sql_help.h:471 +#: sql_help.h:482 msgid "define a new function" msgstr "definisci una nuova funzione" -#: sql_help.h:476 sql_help.h:511 sql_help.h:581 +#: sql_help.h:487 sql_help.h:527 sql_help.h:602 msgid "define a new database role" msgstr "definisci un nuovo ruolo database" -#: sql_help.h:481 +#: sql_help.h:492 msgid "define a new index" msgstr "crea un nuovo indice" -#: sql_help.h:486 +#: sql_help.h:497 msgid "define a new procedural language" msgstr "definisci un nuovo linguaggio procedurale" -#: sql_help.h:491 +#: sql_help.h:502 msgid "define a new materialized view" msgstr "definisci una nuova vista materializzata" -#: sql_help.h:496 +#: sql_help.h:507 msgid "define a new operator" msgstr "definisci un nuovo operatore" -#: sql_help.h:501 +#: sql_help.h:512 msgid "define a new operator class" msgstr "definisci una nuova classe di operatori" -#: sql_help.h:506 +#: sql_help.h:517 msgid "define a new operator family" msgstr "definisci una nuova famiglia operatore" -#: sql_help.h:516 +#: sql_help.h:522 +msgid "define a new policy for a table" +msgstr "definisci una nuova politica per una tabella" + +#: sql_help.h:532 msgid "define a new rewrite rule" msgstr "definisci una nuova regola di riscrittura" -#: sql_help.h:521 +#: sql_help.h:537 msgid "define a new schema" msgstr "crea un nuovo schema" -#: sql_help.h:526 +#: sql_help.h:542 msgid "define a new sequence generator" msgstr "definisci un nuovo generatore di sequenze" -#: sql_help.h:531 +#: sql_help.h:547 msgid "define a new foreign server" msgstr "definisci un nuovo server esterno" -#: sql_help.h:536 +#: sql_help.h:552 msgid "define a new table" msgstr "crea una nuova tabella" -#: sql_help.h:541 sql_help.h:921 +#: sql_help.h:557 sql_help.h:957 msgid "define a new table from the results of a query" msgstr "crea una nuova tabella dai risultati di una query" -#: sql_help.h:546 +#: sql_help.h:562 msgid "define a new tablespace" msgstr "crea un nuovo tablespace" -#: sql_help.h:551 +#: sql_help.h:567 msgid "define a new text search configuration" msgstr "definisci una nuova configurazione di ricerca testo" -#: sql_help.h:556 +#: sql_help.h:572 msgid "define a new text search dictionary" msgstr "definisci un nuovo dizionario di ricerca testo" -#: sql_help.h:561 +#: sql_help.h:577 msgid "define a new text search parser" msgstr "definisci un nuovo analizzatore di ricerca testo" -#: sql_help.h:566 +#: sql_help.h:582 msgid "define a new text search template" msgstr "definisci un nuovo modello di ricerca testo" -#: sql_help.h:571 +#: sql_help.h:587 +msgid "define a new transform" +msgstr "definisci una nuova trasformazione" + +#: sql_help.h:592 msgid "define a new trigger" msgstr "definisci un nuovo trigger" -#: sql_help.h:576 +#: sql_help.h:597 msgid "define a new data type" msgstr "definisci un nuovo tipo di dato" -#: sql_help.h:586 +#: sql_help.h:607 msgid "define a new mapping of a user to a foreign server" msgstr "definisci una nuova mappatura di un utente ad un server esterno" -#: sql_help.h:591 +#: sql_help.h:612 msgid "define a new view" msgstr "definisci una nuova vista" -#: sql_help.h:596 +#: sql_help.h:617 msgid "deallocate a prepared statement" msgstr "dealloca una istruzione preparata" -#: sql_help.h:601 +#: sql_help.h:622 msgid "define a cursor" msgstr "definisci un cursore" -#: sql_help.h:606 +#: sql_help.h:627 msgid "delete rows of a table" msgstr "elimina le righe di una tabella" -#: sql_help.h:611 +#: sql_help.h:632 msgid "discard session state" msgstr "cancella lo stato della sessione" -#: sql_help.h:616 +#: sql_help.h:637 msgid "execute an anonymous code block" msgstr "esegui un blocco di codice anonimo" -#: sql_help.h:621 +#: sql_help.h:642 msgid "remove an aggregate function" msgstr "elimina una funzione aggregata" -#: sql_help.h:626 +#: sql_help.h:647 msgid "remove a cast" msgstr "elimina una conversione di tipi" -#: sql_help.h:631 +#: sql_help.h:652 msgid "remove a collation" msgstr "elimina un ordinamento" -#: sql_help.h:636 +#: sql_help.h:657 msgid "remove a conversion" msgstr "elimina una conversione" -#: sql_help.h:641 +#: sql_help.h:662 msgid "remove a database" msgstr "elimina un database" -#: sql_help.h:646 +#: sql_help.h:667 msgid "remove a domain" msgstr "elimina un dominio" -#: sql_help.h:651 +#: sql_help.h:672 msgid "remove an event trigger" msgstr "elimina un trigger di evento" -#: sql_help.h:656 +#: sql_help.h:677 msgid "remove an extension" msgstr "elimina una estensione" -#: sql_help.h:661 +#: sql_help.h:682 msgid "remove a foreign-data wrapper" msgstr "elimina un wrapper di dati esterni" -#: sql_help.h:666 +#: sql_help.h:687 msgid "remove a foreign table" msgstr "elimina una tabella esterna" -#: sql_help.h:671 +#: sql_help.h:692 msgid "remove a function" msgstr "elimina una funzione" -#: sql_help.h:676 sql_help.h:716 sql_help.h:781 +#: sql_help.h:697 sql_help.h:742 sql_help.h:812 msgid "remove a database role" msgstr "elimina un ruolo di database" -#: sql_help.h:681 +#: sql_help.h:702 msgid "remove an index" msgstr "elimina un indice" -#: sql_help.h:686 +#: sql_help.h:707 msgid "remove a procedural language" msgstr "elimina un linguaggio procedurale" -#: sql_help.h:691 +#: sql_help.h:712 msgid "remove a materialized view" msgstr "elimina una vista materializzata" -#: sql_help.h:696 +#: sql_help.h:717 msgid "remove an operator" msgstr "elimina un operatore" -#: sql_help.h:701 +#: sql_help.h:722 msgid "remove an operator class" msgstr "elimina una classe di operatori" -#: sql_help.h:706 +#: sql_help.h:727 msgid "remove an operator family" msgstr "elimina una famiglia operatore" -#: sql_help.h:711 +#: sql_help.h:732 msgid "remove database objects owned by a database role" msgstr "elimina gli oggetti database di proprietà di un ruolo di database" -#: sql_help.h:721 +#: sql_help.h:737 +msgid "remove a policy from a table" +msgstr "elimina una politica da una tabella" + +#: sql_help.h:747 msgid "remove a rewrite rule" msgstr "elimina una regola di riscrittura" -#: sql_help.h:726 +#: sql_help.h:752 msgid "remove a schema" msgstr "elimina uno schema" -#: sql_help.h:731 +#: sql_help.h:757 msgid "remove a sequence" msgstr "elimina una sequenza" -#: sql_help.h:736 +#: sql_help.h:762 msgid "remove a foreign server descriptor" msgstr "elimina una descrizione server esterno" -#: sql_help.h:741 +#: sql_help.h:767 msgid "remove a table" msgstr "elimina una tabella" -#: sql_help.h:746 +#: sql_help.h:772 msgid "remove a tablespace" msgstr "elimina un tablespace" -#: sql_help.h:751 +#: sql_help.h:777 msgid "remove a text search configuration" msgstr "elimina una configurazione di ricerca testo" -#: sql_help.h:756 +#: sql_help.h:782 msgid "remove a text search dictionary" msgstr "elimina un dizionario di ricerca testo" -#: sql_help.h:761 +#: sql_help.h:787 msgid "remove a text search parser" msgstr "elimina un analizzatore di ricerca testo" -#: sql_help.h:766 +#: sql_help.h:792 msgid "remove a text search template" msgstr "elimina un modello di ricerca testo" -#: sql_help.h:771 +#: sql_help.h:797 +msgid "remove a transform" +msgstr "elimina una trasformazione" + +#: sql_help.h:802 msgid "remove a trigger" msgstr "elimina un trigger" -#: sql_help.h:776 +#: sql_help.h:807 msgid "remove a data type" msgstr "elimina un tipo di dato" -#: sql_help.h:786 +#: sql_help.h:817 msgid "remove a user mapping for a foreign server" msgstr "elimina la mappatura degli utenti per un server esterno" -#: sql_help.h:791 +#: sql_help.h:822 msgid "remove a view" msgstr "elimina una vista" -#: sql_help.h:801 +#: sql_help.h:832 msgid "execute a prepared statement" msgstr "esegui una istruzione preparata" -#: sql_help.h:806 +#: sql_help.h:837 msgid "show the execution plan of a statement" msgstr "mostra il piano di esecuzione di una istruzione" -#: sql_help.h:811 +#: sql_help.h:842 msgid "retrieve rows from a query using a cursor" msgstr "estrai delle righe da una query utilizzando un cursore" -#: sql_help.h:816 +#: sql_help.h:847 msgid "define access privileges" msgstr "definisci i privilegi di accesso" -#: sql_help.h:821 +#: sql_help.h:852 +msgid "import table definitions from a foreign server" +msgstr "importa le definizioni di tabella da un server remoto" + +#: sql_help.h:857 msgid "create new rows in a table" msgstr "crea nuove righe in una tabella" -#: sql_help.h:826 +#: sql_help.h:862 msgid "listen for a notification" msgstr "attendi l'arrivo di notifiche" -#: sql_help.h:831 +#: sql_help.h:867 msgid "load a shared library file" msgstr "carica un file di libreria condivisa" -#: sql_help.h:836 +#: sql_help.h:872 msgid "lock a table" msgstr "blocca una tabella" -#: sql_help.h:841 +#: sql_help.h:877 msgid "position a cursor" msgstr "posiziona un cursore" -#: sql_help.h:846 +#: sql_help.h:882 msgid "generate a notification" msgstr "genera una notifica" -#: sql_help.h:851 +#: sql_help.h:887 msgid "prepare a statement for execution" msgstr "prepara una istruzione per l'esecuzione" -#: sql_help.h:856 +#: sql_help.h:892 msgid "prepare the current transaction for two-phase commit" msgstr "prepara la transazione corrente per un commit a due fasi" -#: sql_help.h:861 +#: sql_help.h:897 msgid "change the ownership of database objects owned by a database role" msgstr "cambia il proprietario degli oggetti del database posseduti da un ruolo" -#: sql_help.h:866 +#: sql_help.h:902 msgid "replace the contents of a materialized view" msgstr "sostituisci il contenuto di una vista materializzata" -#: sql_help.h:871 +#: sql_help.h:907 msgid "rebuild indexes" msgstr "ricostruisci indici" -#: sql_help.h:876 +#: sql_help.h:912 msgid "destroy a previously defined savepoint" msgstr "distruggi un punto di salvataggio precedentemente definito" -#: sql_help.h:881 +#: sql_help.h:917 msgid "restore the value of a run-time parameter to the default value" msgstr "ripristina un parametro di esecuzione al suo valore di predefinito" -#: sql_help.h:886 +#: sql_help.h:922 msgid "remove access privileges" msgstr "elimina i privilegi di accesso" -#: sql_help.h:896 +#: sql_help.h:932 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "annulla una transazione che era stata preparata per un commit a due fasi" -#: sql_help.h:901 +#: sql_help.h:937 msgid "roll back to a savepoint" msgstr "annulla le modifiche fino a un punto di salvataggio" -#: sql_help.h:906 +#: sql_help.h:942 msgid "define a new savepoint within the current transaction" msgstr "definisci un nuovo punto di salvataggio per la transazione corrente" -#: sql_help.h:911 +#: sql_help.h:947 msgid "define or change a security label applied to an object" msgstr "definisci o modifica un'etichetta di sicurezza applicata a un oggetto" -#: sql_help.h:916 sql_help.h:961 sql_help.h:991 +#: sql_help.h:952 sql_help.h:997 sql_help.h:1027 msgid "retrieve rows from a table or view" msgstr "estrai righe da una tabella o una vista" -#: sql_help.h:926 +#: sql_help.h:962 msgid "change a run-time parameter" msgstr "modifica un parametro di esecuzione" -#: sql_help.h:931 +#: sql_help.h:967 msgid "set constraint check timing for the current transaction" msgstr "imposta il momento del controllo dei vincoli per la transazione corrente" -#: sql_help.h:936 +#: sql_help.h:972 msgid "set the current user identifier of the current session" msgstr "imposta l'identificativo utente della sessione corrente" -#: sql_help.h:941 +#: sql_help.h:977 msgid "set the session user identifier and the current user identifier of the current session" msgstr "imposta l'identificazione utente della sessione e l'identificazione utente corrente della sessione corrente" -#: sql_help.h:946 +#: sql_help.h:982 msgid "set the characteristics of the current transaction" msgstr "imposta le caratteristiche della transazione corrente" -#: sql_help.h:951 +#: sql_help.h:987 msgid "show the value of a run-time parameter" msgstr "mostra il valore di un parametro di esecuzione" -#: sql_help.h:966 +#: sql_help.h:1002 msgid "empty a table or set of tables" msgstr "svuota una tabella o una lista di tabelle" -#: sql_help.h:971 +#: sql_help.h:1007 msgid "stop listening for a notification" msgstr "termina l'attesa di notifiche" -#: sql_help.h:976 +#: sql_help.h:1012 msgid "update rows of a table" msgstr "modifica le righe di una tabella" -#: sql_help.h:981 +#: sql_help.h:1017 msgid "garbage-collect and optionally analyze a database" msgstr "pulisci ed eventualmente analizza il database" -#: sql_help.h:986 +#: sql_help.h:1022 msgid "compute a set of rows" msgstr "genera una sequenza di righe" -#: startup.c:166 +#: startup.c:177 #, c-format msgid "%s: -1 can only be used in non-interactive mode\n" msgstr "%s: -1 può essere usato solo in modalità non interattiva\n" -#: startup.c:266 +#: startup.c:277 #, c-format msgid "%s: could not open log file \"%s\": %s\n" msgstr "%s: apertura del file di log \"%s\" fallita: %s\n" -#: startup.c:328 +#: startup.c:339 #, c-format msgid "" "Type \"help\" for help.\n" @@ -4482,37 +5158,42 @@ msgstr "" "Digita \"help\" per avere un aiuto.\n" "\n" -#: startup.c:471 +#: startup.c:486 #, c-format msgid "%s: could not set printing parameter \"%s\"\n" msgstr "%s: impostazione del parametro di stampa \"%s\" fallito\n" -#: startup.c:511 +#: startup.c:526 #, c-format msgid "%s: could not delete variable \"%s\"\n" msgstr "%s: cancellazione della variabile \"%s\" fallita\n" -#: startup.c:521 +#: startup.c:536 #, c-format msgid "%s: could not set variable \"%s\"\n" msgstr "%s: impostazione della variabile \"%s\" fallita\n" -#: startup.c:564 startup.c:570 +#: startup.c:596 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Prova \"%s --help\" per maggiori informazioni.\n" -#: startup.c:587 +#: startup.c:613 #, c-format msgid "%s: warning: extra command-line argument \"%s\" ignored\n" msgstr "%s: attenzione: parametro in eccesso \"%s\" nella riga di comando ignorato\n" -#: startup.c:609 +#: startup.c:635 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: il proprio programma eseguibile non è stato trovato\n" -#: tab-complete.c:4110 +#: startup.c:757 startup.c:804 startup.c:825 startup.c:862 variables.c:121 +#, c-format +msgid "unrecognized value \"%s\" for \"%s\"; assuming \"%s\"\n" +msgstr "valore \"%s\" non riconosciuto per \"%s\"; interpretato come \"%s\"\n" + +#: tab-complete.c:4543 #, c-format msgid "" "tab completion query failed: %s\n" @@ -4522,8 +5203,3 @@ msgstr "" "query per il completamento tab fallita: %s\n" "La query era:\n" "%s\n" - -#: variables.c:115 -#, c-format -msgid "unrecognized Boolean value; assuming \"on\"\n" -msgstr "valore booleano sconosciuto; interpretato come \"attivato\"\n" diff --git a/src/bin/psql/po/ja.po b/src/bin/psql/po/ja.po index 56df5ffd73bfd..309fbbdf7a385 100644 --- a/src/bin/psql/po/ja.po +++ b/src/bin/psql/po/ja.po @@ -3,11 +3,11 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.1 beta2\n" +"Project-Id-Version: PostgreSQL 9.4.2\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2013-08-18 12:11+0900\n" -"PO-Revision-Date: 2014-05-20 02:38+0900\n" -"Last-Translator: SAWADA Masahiko \n" +"POT-Creation-Date: 2015-05-23 22:59+0900\n" +"PO-Revision-Date: 2015-05-27 18:55+0900\n" +"Last-Translator: KOIZUMI Satoru \n" "Language-Team: jpug-doc \n" "Language: ja\n" "MIME-Version: 1.0\n" @@ -15,286 +15,297 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 command.c:1130 input.c:204 mainloop.c:72 -#: mainloop.c:234 tab-complete.c:3845 -#, c-format -msgid "out of memory\n" -msgstr "メモリ不足です\n" - -#: ../../common/fe_memutils.c:77 -#, c-format -msgid "cannot duplicate null pointer (internal error)\n" -msgstr "null ポインタを複製できません(内部エラー)。\n" - -#: ../../port/exec.c:127 ../../port/exec.c:241 ../../port/exec.c:284 +#: ../../common/exec.c:127 ../../common/exec.c:241 ../../common/exec.c:284 #, c-format msgid "could not identify current directory: %s" msgstr "カレントディレクトリを識別できませんでした。: %s" -#: ../../port/exec.c:146 +#: ../../common/exec.c:146 #, c-format msgid "invalid binary \"%s\"" msgstr "\"%s\" は有効なバイナリファイルではありません。" -#: ../../port/exec.c:195 +#: ../../common/exec.c:195 #, c-format msgid "could not read binary \"%s\"" msgstr "バイナリファイル \"%s\" を読み込めませんでした。" -#: ../../port/exec.c:202 +#: ../../common/exec.c:202 #, c-format msgid "could not find a \"%s\" to execute" msgstr "実行に必要な \"%s\" が見つかりません。" -#: ../../port/exec.c:257 ../../port/exec.c:293 +#: ../../common/exec.c:257 ../../common/exec.c:293 #, c-format msgid "could not change directory to \"%s\": %s" msgstr "ディレクトリ\"%s\"に移動できませんでした: %s" -#: ../../port/exec.c:272 +#: ../../common/exec.c:272 #, c-format msgid "could not read symbolic link \"%s\"" msgstr "シンボリックリンク \"%s\" を読み込めませんでした。" -#: ../../port/exec.c:523 +#: ../../common/exec.c:523 #, c-format msgid "pclose failed: %s" msgstr "pcloseが失敗しました: %s" -#: ../../port/wait_error.c:47 +#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 +#: ../../common/fe_memutils.c:83 command.c:321 input.c:205 mainloop.c:72 +#: mainloop.c:234 +#, c-format +msgid "out of memory\n" +msgstr "メモリ不足です\n" + +#: ../../common/fe_memutils.c:77 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "null ポインタを複製できません(内部エラー)。\n" + +#: ../../common/username.c:45 +#, c-format +msgid "could not look up effective user ID %ld: %s" +msgstr "実効ユーザID %ld が見つかりませんでした: %s" + +#: ../../common/username.c:47 command.c:276 +msgid "user does not exist" +msgstr "ユーザが存在しません" + +#: ../../common/username.c:62 +#, c-format +msgid "user name lookup failure: error code %lu" +msgstr "ユーザ名の検索に失敗: エラーコード %lu" + +#: ../../common/wait_error.c:47 #, c-format msgid "command not executable" msgstr "コマンドは実行形式ではありません" -#: ../../port/wait_error.c:51 +#: ../../common/wait_error.c:51 #, c-format msgid "command not found" msgstr "コマンドが見つかりません" -#: ../../port/wait_error.c:56 +#: ../../common/wait_error.c:56 #, c-format msgid "child process exited with exit code %d" msgstr "子プロセスが終了コード %d で終了しました。" -#: ../../port/wait_error.c:63 +#: ../../common/wait_error.c:63 #, c-format msgid "child process was terminated by exception 0x%X" msgstr "子プロセスが例外 0x%X で終了させられました。" -#: ../../port/wait_error.c:73 +#: ../../common/wait_error.c:73 #, c-format msgid "child process was terminated by signal %s" msgstr "子プロセスがシグナル %s で終了させられました。" -#: ../../port/wait_error.c:77 +#: ../../common/wait_error.c:77 #, c-format msgid "child process was terminated by signal %d" msgstr "子プロセスがシグナル %d で終了させられました。" -#: ../../port/wait_error.c:82 +#: ../../common/wait_error.c:82 #, c-format msgid "child process exited with unrecognized status %d" msgstr "子プロセスが不明な状態%dにより終了しました。" -#: command.c:115 +#: command.c:117 #, c-format msgid "Invalid command \\%s. Try \\? for help.\n" msgstr "\\%sコマンドは無効です。\\? でヘルプを参照してください。\n" -#: command.c:117 +#: command.c:119 #, c-format msgid "invalid command \\%s\n" -msgstr "\\%sは無効なコマンドです:\n" +msgstr "\\%sは無効なコマンドです\n" -#: command.c:128 +#: command.c:130 #, c-format msgid "\\%s: extra argument \"%s\" ignored\n" msgstr "\\%s: 余分な引数 \"%s\" は無視されました。\n" -#: command.c:270 +#: command.c:274 #, c-format -msgid "could not get home directory: %s\n" -msgstr "ホームディレクトリ \"%s\" の位置を特定できません。\n" +msgid "could not get home directory for user ID %ld: %s\n" +msgstr "ユーザID %ld のホームディレクトリを特定できません: %s\n" -#: command.c:286 +#: command.c:292 #, c-format msgid "\\%s: could not change directory to \"%s\": %s\n" msgstr "\\%s: ディレクトリを \"%s\" に変更できません:%s\n" -#: command.c:307 common.c:446 common.c:851 +#: command.c:307 common.c:446 common.c:886 #, c-format msgid "You are currently not connected to a database.\n" msgstr "現在データベースには接続していません。\n" -#: command.c:314 +#: command.c:334 #, 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:317 +#: command.c:337 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "ホスト\"%3$s\"上のポート\"%4$s\"のデータベース\"%1$s\"にユーザ\"%2$s\"で接続しています\n" -#: command.c:516 command.c:586 command.c:1382 +#: command.c:538 command.c:608 command.c:1403 #, c-format msgid "no query buffer\n" msgstr "問い合わせバッファがありません。\n" -#: command.c:549 command.c:2826 +#: command.c:571 command.c:3035 #, c-format msgid "invalid line number: %s\n" msgstr "無効な行番号です: %s\n" -#: command.c:580 +#: command.c:602 #, c-format msgid "The server (version %d.%d) does not support editing function source.\n" msgstr "このサーバーのバージョン (%d.%d) は関数のソース編集をサポートしていません\n" -#: command.c:660 +#: command.c:682 msgid "No changes" msgstr "変更なし" -#: command.c:714 +#: command.c:736 #, c-format msgid "%s: invalid encoding name or conversion procedure not found\n" msgstr "%s: 符号化方式名が無効、または変換用プロシージャが見つかりません。\n" -#: command.c:810 command.c:860 command.c:874 command.c:891 command.c:998 -#: command.c:1048 command.c:1158 command.c:1362 command.c:1393 +#: command.c:833 command.c:883 command.c:897 command.c:914 command.c:1021 +#: command.c:1180 command.c:1383 command.c:1414 #, c-format msgid "\\%s: missing required argument\n" msgstr "\\%s: 必要な引数がありません\n" -#: command.c:923 +#: command.c:946 msgid "Query buffer is empty." msgstr "問い合わせバッファは空です。" -#: command.c:933 +#: command.c:956 msgid "Enter new password: " msgstr "新しいパスワード: " -#: command.c:934 +#: command.c:957 msgid "Enter it again: " msgstr "もう一度入力してください:" -#: command.c:938 +#: command.c:961 #, c-format msgid "Passwords didn't match.\n" msgstr "パスワードが一致しません。\n" -#: command.c:956 +#: command.c:979 #, c-format msgid "Password encryption failed.\n" msgstr "パスワードの暗号化に失敗しました。\n" -#: command.c:1027 command.c:1139 command.c:1367 +#: command.c:1050 command.c:1161 command.c:1388 #, c-format msgid "\\%s: error while setting variable\n" msgstr "\\%s: 変数を設定している時にエラー\n" -#: command.c:1068 +#: command.c:1108 msgid "Query buffer reset (cleared)." msgstr "問い合わせバッファがリセット(クリア)されました。" -#: command.c:1092 +#: command.c:1120 #, c-format -msgid "Wrote history to file \"%s/%s\".\n" -msgstr "ファイル\"%s/%s\"に履歴を出力しました。\n" +msgid "Wrote history to file \"%s\".\n" +msgstr "ファイル\"%s\"に履歴を出力しました。\n" -#: command.c:1163 +#: command.c:1185 #, c-format msgid "\\%s: environment variable name must not contain \"=\"\n" msgstr "\\%s: 環境変数の名前には\"=\"を含められません\n" -#: command.c:1206 +#: command.c:1227 #, c-format msgid "The server (version %d.%d) does not support showing function source.\n" msgstr "このサーバ(バージョン%d.%d)は関数ソースの表示をサポートしていません。\n" -#: command.c:1212 +#: command.c:1233 #, c-format msgid "function name is required\n" msgstr "関数名が必要です\n" -#: command.c:1347 +#: command.c:1368 msgid "Timing is on." msgstr "タイミングは on です。" -#: command.c:1349 +#: command.c:1370 msgid "Timing is off." msgstr "タイミングは off です。" -#: command.c:1410 command.c:1430 command.c:2027 command.c:2034 command.c:2043 -#: command.c:2053 command.c:2062 command.c:2076 command.c:2093 command.c:2152 -#: common.c:74 copy.c:342 copy.c:395 copy.c:410 psqlscan.l:1674 -#: psqlscan.l:1685 psqlscan.l:1695 +#: command.c:1431 command.c:1451 command.c:2072 command.c:2075 command.c:2078 +#: command.c:2084 command.c:2086 command.c:2094 command.c:2104 command.c:2113 +#: command.c:2127 command.c:2144 command.c:2203 common.c:74 copy.c:333 +#: copy.c:393 copy.c:408 psqlscan.l:1677 psqlscan.l:1688 psqlscan.l:1698 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" -#: command.c:1509 +#: command.c:1530 #, c-format msgid "+ opt(%d) = |%s|\n" msgstr "+ opt(%d) = |%s|\n" -#: command.c:1535 startup.c:185 +#: command.c:1556 startup.c:184 msgid "Password: " msgstr "パスワード: " -#: command.c:1542 startup.c:188 startup.c:190 +#: command.c:1561 startup.c:186 #, c-format msgid "Password for user %s: " msgstr "ユーザ %s のパスワード: " -#: command.c:1587 +#: command.c:1608 #, c-format msgid "All connection parameters must be supplied because no database connection exists\n" msgstr "データベース接続がありませんのですべての接続パラメータを指定しなければなりません\n" -#: command.c:1673 command.c:2860 common.c:120 common.c:413 common.c:478 -#: common.c:894 common.c:919 common.c:1016 copy.c:504 copy.c:696 -#: large_obj.c:158 large_obj.c:193 large_obj.c:255 psqlscan.l:1946 +#: command.c:1725 command.c:3069 common.c:120 common.c:413 common.c:478 +#: common.c:929 common.c:954 common.c:1051 copy.c:492 copy.c:695 +#: large_obj.c:158 large_obj.c:193 large_obj.c:255 psqlscan.l:1949 #, c-format msgid "%s" msgstr "%s" -#: command.c:1677 +#: command.c:1729 #, c-format msgid "Previous connection kept\n" msgstr "以前の接続は保持されています。\n" -#: command.c:1681 +#: command.c:1733 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:1714 +#: command.c:1766 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "ポート\"%4$s\"のソケット\"%3$s\"経由でデータベース\"%1$s\"にユーザ\"%2$s\"として接続しました。\n" -#: command.c:1717 +#: command.c:1769 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "ホスト\"%3$s\"上のポート\"%4$s\"でデータベース\"%1$s\"にユーザ\"%2$s\"として接続しました。\n" -#: command.c:1721 +#: command.c:1773 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "データベース \"%s\" にユーザ\"%s\"として接続しました。\n" -#: command.c:1755 +#: command.c:1807 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, サーバー %s)\n" -#: command.c:1763 +#: command.c:1815 #, c-format -#| msgid "" -#| "WARNING: %s version %d.%d, server version %d.%d.\n" -#| " Some psql features might not work.\n" msgid "" "WARNING: %s major version %d.%d, server major version %d.%d.\n" " Some psql features might not work.\n" @@ -302,17 +313,25 @@ msgstr "" "注意: %s メジャーバージョン %d.%d, サーバーバージョン %d.%d.\n" " psql の機能の中で、動作しないものがあるかもしれません。\n" -#: command.c:1793 +#: command.c:1845 #, c-format -msgid "SSL connection (cipher: %s, bits: %d)\n" -msgstr "SSL 接続 (暗号化方式: %s, ビット長: %d)\n" +msgid "SSL connection (protocol: %s, cipher: %s, bits: %d, compression: %s)\n" +msgstr "SSL接続(プロトコル: %s, 暗号化方式: %s, ビット長: %d, 圧縮: %s)\n" + +#: command.c:1847 help.c:46 +msgid "off" +msgstr "オフ" + +#: command.c:1847 help.c:46 +msgid "on" +msgstr "オン" -#: command.c:1803 +#: command.c:1856 #, c-format msgid "SSL connection (unknown cipher)\n" msgstr "SSL 接続 (未定義の暗号化方式)\n" -#: command.c:1824 +#: command.c:1877 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -325,190 +344,203 @@ msgstr "" " (ウィンドウズユーザのために)を参照してください。\n" "\n" -#: command.c:1908 +#: command.c:1961 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number\n" msgstr "行番号を指定するためにはPSQL_EDITOR_LINENUMBER_ARG変数を設定しなければなりません\n" -#: command.c:1945 +#: command.c:1990 #, c-format msgid "could not start editor \"%s\"\n" msgstr "エディタ \"%s\" を起動できませんでした。\n" -#: command.c:1947 +#: command.c:1992 #, c-format msgid "could not start /bin/sh\n" msgstr "/bin/sh を起動できませんでした。\n" -#: command.c:1985 +#: command.c:2030 #, c-format msgid "could not locate temporary directory: %s\n" msgstr "一時ディレクトリに移動できません: %s\n" -#: command.c:2012 +#: command.c:2057 #, c-format msgid "could not open temporary file \"%s\": %s\n" msgstr "一時ファイル \"%s\" を開けません: %s\n" -#: command.c:2274 +#: command.c:2325 #, c-format msgid "\\pset: allowed formats are unaligned, aligned, wrapped, html, latex, troff-ms\n" msgstr "\\pset: 有効なフォーマットは unaligned, aligned, wrapped, html, latex, troff-ms です。\n" -#: command.c:2279 -#, c-format -msgid "Output format is %s.\n" -msgstr "出力フォーマットは %s です。\n" - -#: command.c:2295 +#: command.c:2344 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" msgstr "\\pset: 有効な行スタイルは ascii, old-ascii, unicode です。\n" -#: command.c:2300 +#: command.c:2490 command.c:2641 #, c-format -msgid "Line style is %s.\n" -msgstr "境界線のスタイルは %s です。\n" +msgid "\\pset: unknown option: %s\n" +msgstr "\\pset: 未定義のオプション:%s\n" -#: command.c:2311 +#: command.c:2508 #, c-format msgid "Border style is %d.\n" msgstr "境界線のスタイルは %d です。\n" -#: command.c:2326 +#: command.c:2514 +#, c-format +msgid "Target width is unset.\n" +msgstr "対象幅はセットされていません。\n" + +#: command.c:2516 +#, c-format +msgid "Target width is %d.\n" +msgstr "対象幅は%dです。\n" + +#: command.c:2523 #, c-format msgid "Expanded display is on.\n" msgstr "拡張表示は on です。\n" -#: command.c:2328 +#: command.c:2525 #, c-format msgid "Expanded display is used automatically.\n" msgstr "拡張表示が自動的に使用されます\n" -#: command.c:2330 +#: command.c:2527 #, c-format msgid "Expanded display is off.\n" msgstr "拡張表示は off です。\n" -#: command.c:2344 -msgid "Showing locale-adjusted numeric output." -msgstr "ロケールで調整された数値出力を表示しています。" +#: command.c:2534 command.c:2542 +#, c-format +msgid "Field separator is zero byte.\n" +msgstr "フィールド区切り文字はゼロバイトです。\n" + +#: command.c:2536 +#, c-format +msgid "Field separator is \"%s\".\n" +msgstr "フィールド区切り文字は \"%s\" です。\n" + +#: command.c:2549 +#, c-format +msgid "Default footer is on.\n" +msgstr "デフォルトのフッタは on です。\n" -#: command.c:2346 -msgid "Locale-adjusted numeric output is off." -msgstr "「数値出力のロケール調整」は off です。" +#: command.c:2551 +#, c-format +msgid "Default footer is off.\n" +msgstr "デフォルトのフッタは off です。\n" -#: command.c:2359 +#: command.c:2557 +#, c-format +msgid "Output format is %s.\n" +msgstr "出力フォーマットは %s です。\n" + +#: command.c:2563 +#, c-format +msgid "Line style is %s.\n" +msgstr "境界線のスタイルは %s です。\n" + +#: command.c:2570 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null 表示は \"%s\" です。\n" -#: command.c:2374 command.c:2386 +#: command.c:2578 #, c-format -msgid "Field separator is zero byte.\n" -msgstr "フィールド区切り文字はゼロバイトです。\n" +msgid "Locale-adjusted numeric output is on.\n" +msgstr "「数値出力のロケール調整」は on です。\n" -#: command.c:2376 +#: command.c:2580 #, c-format -msgid "Field separator is \"%s\".\n" -msgstr "フィールド区切り文字は \"%s\" です。\n" +msgid "Locale-adjusted numeric output is off.\n" +msgstr "「数値出力のロケール調整」は off です。\n" -#: command.c:2401 command.c:2415 +#: command.c:2587 #, c-format -msgid "Record separator is zero byte.\n" -msgstr "レコード区切り文字はゼロバイトです。\n" +msgid "Pager is used for long output.\n" +msgstr "出力が長い場合はページャが使われます。\n" -#: command.c:2403 +#: command.c:2589 #, c-format -msgid "Record separator is ." -msgstr "レコード区切り文字は です。" +msgid "Pager is always used.\n" +msgstr "常にページャが使われます。\n" -#: command.c:2405 +#: command.c:2591 #, c-format -msgid "Record separator is \"%s\".\n" -msgstr "レコード区切り文字は \"%s\" です。\n" +msgid "Pager usage is off.\n" +msgstr "「ページャを使う」は off です。\n" -#: command.c:2428 -msgid "Showing only tuples." -msgstr "タプルのみを表示しています。" - -#: command.c:2430 -msgid "Tuples only is off." -msgstr "「タプルのみ表示」は off です。" +#: command.c:2598 command.c:2608 +#, c-format +msgid "Record separator is zero byte.\n" +msgstr "レコード区切り文字はゼロバイトです。\n" -#: command.c:2446 +#: command.c:2600 #, c-format -msgid "Title is \"%s\".\n" -msgstr "タイトルは \"%s\" です。\n" +msgid "Record separator is .\n" +msgstr "レコード区切り文字は です。\n" -#: command.c:2448 +#: command.c:2602 #, c-format -msgid "Title is unset.\n" -msgstr "タイトルはセットされていません。\n" +msgid "Record separator is \"%s\".\n" +msgstr "レコード区切り文字は \"%s\" です。\n" -#: command.c:2464 +#: command.c:2615 #, c-format -msgid "Table attribute is \"%s\".\n" +msgid "Table attributes are \"%s\".\n" msgstr "テーブル属性は \"%s\" です。\n" -#: command.c:2466 +#: command.c:2618 #, c-format msgid "Table attributes unset.\n" msgstr "テーブル属性はセットされていません。\n" -#: command.c:2487 -msgid "Pager is used for long output." -msgstr "出力が長い場合はページャが使われます。" - -#: command.c:2489 -msgid "Pager is always used." -msgstr "常にページャが使われます。" - -#: command.c:2491 -msgid "Pager usage is off." -msgstr "「ページャを使う」は off です。" - -#: command.c:2505 -msgid "Default footer is on." -msgstr "デフォルトのフッタは on です。" +#: command.c:2625 +#, c-format +msgid "Title is \"%s\".\n" +msgstr "タイトルは \"%s\" です。\n" -#: command.c:2507 -msgid "Default footer is off." -msgstr "デフォルトのフッタは off です。" +#: command.c:2627 +#, c-format +msgid "Title is unset.\n" +msgstr "タイトルはセットされていません。\n" -#: command.c:2518 +#: command.c:2634 #, c-format -msgid "Target width is %d.\n" -msgstr "対象幅は%dです。\n" +msgid "Tuples only is on.\n" +msgstr "「タプルのみ表示」は on です。\n" -#: command.c:2523 +#: command.c:2636 #, c-format -msgid "\\pset: unknown option: %s\n" -msgstr "\\pset: 未定義のオプション:%s\n" +msgid "Tuples only is off.\n" +msgstr "「タプルのみ表示」は off です。\n" -#: command.c:2577 +#: command.c:2787 #, c-format msgid "\\!: failed\n" msgstr "\\!: 失敗\n" -#: command.c:2597 command.c:2656 +#: command.c:2807 command.c:2865 #, c-format msgid "\\watch cannot be used with an empty query\n" msgstr "\\watchを空の問い合わせで使用することができません\n" -#: command.c:2619 +#: command.c:2828 #, c-format msgid "Watch every %lds\t%s" -msgstr "%lds\\t%s毎に監視します" +msgstr "%ld秒毎に監視します\t%s" -#: command.c:2663 +#: command.c:2872 #, c-format msgid "\\watch cannot be used with COPY\n" msgstr "\\watchではCOPYを使用することができません\n" -#: command.c:2669 +#: command.c:2878 #, c-format -#| msgid "unexpected PQresultStatus: %d\n" msgid "unexpected result status for \\watch\n" msgstr "\\watchに対する想定外の結果状態\n" @@ -532,12 +564,12 @@ msgstr "失敗。\n" msgid "Succeeded.\n" msgstr "成功。\n" -#: common.c:403 common.c:683 common.c:816 +#: common.c:403 common.c:683 common.c:851 #, c-format msgid "unexpected PQresultStatus: %d\n" msgstr "想定外のPQresultStatus: %d\n" -#: common.c:452 common.c:459 common.c:877 +#: common.c:452 common.c:459 common.c:912 #, c-format msgid "" "********* QUERY **********\n" @@ -562,23 +594,20 @@ msgstr "PID %2$d を持つサーバープロセスから非同期通知 \"%1$s\" #: common.c:578 #, c-format -#| msgid "%s: no data returned from server\n" msgid "no rows returned for \\gset\n" msgstr "\\gsetに対して行が返されませんでした\n" #: common.c:583 #, c-format -#| msgid "more than one operator named %s" msgid "more than one row returned for \\gset\n" msgstr "\\gsetに対して複数の行が返されました\n" -#: common.c:611 +#: common.c:609 #, c-format -#| msgid "%s: could not set variable \"%s\"\n" msgid "could not set variable \"%s\"\n" msgstr "変数 \"%s\" をセットできませんでした\n" -#: common.c:859 +#: common.c:894 #, c-format msgid "" "***(Single step mode: verify command)*******************************************\n" @@ -589,68 +618,71 @@ msgstr "" "%s\n" "***([Enter] を押して進むか、x [Enter] でキャンセル)**************\n" -#: common.c:910 +#: common.c:945 #, c-format msgid "The server (version %d.%d) does not support savepoints for ON_ERROR_ROLLBACK.\n" msgstr "このサーバー(バージョン%d.%d)では、ON_ERROR_ROLLBACK用のセーブポイントをサポートしていません。\n" -#: common.c:1004 +#: common.c:1039 #, c-format msgid "unexpected transaction status (%d)\n" msgstr "想定外のトランザクション状態 (%d)\n" -#: common.c:1032 +#: common.c:1067 #, c-format msgid "Time: %.3f ms\n" msgstr "時間: %.3f ms\n" -#: copy.c:100 +#: copy.c:98 #, c-format msgid "\\copy: arguments required\n" msgstr "\\copy: 引数がありません。\n" -#: copy.c:255 +#: copy.c:253 #, c-format msgid "\\copy: parse error at \"%s\"\n" msgstr "\\copy: \"%s\" でパースエラー発生\n" -#: copy.c:257 +#: copy.c:255 #, c-format msgid "\\copy: parse error at end of line\n" msgstr "\\copy: 行末でパースエラー発生\n" -#: copy.c:339 +#: copy.c:330 #, c-format -#| msgid "%s: could not execute command \"%s\": %s\n" msgid "could not execute command \"%s\": %s\n" msgstr "コマンド\"%s\"を実行できませんでした: %s\n" -#: copy.c:355 +#: copy.c:346 +#, c-format +msgid "could not stat file \"%s\": %s\n" +msgstr "ファイル\"%s\"のstatができませんでした: %s\n" + +#: copy.c:350 #, c-format msgid "%s: cannot copy from/to a directory\n" msgstr "%s: ディレクトリから/ディレクトリへのコピーはできません。\n" -#: copy.c:389 +#: copy.c:387 #, c-format -#| msgid "could not close compression stream: %s\n" msgid "could not close pipe to external command: %s\n" msgstr "外部コマンドに対するパイプをクローズできませんでした: %s\n" -#: copy.c:457 copy.c:467 +#: copy.c:455 copy.c:466 #, c-format msgid "could not write COPY data: %s\n" msgstr "COPY 対象データを書き込めませんでした:%s\n" -#: copy.c:474 +#: copy.c:473 #, c-format msgid "COPY data transfer failed: %s" msgstr "COPY 対象データの転送に失敗しました:%s" -#: copy.c:544 +#: copy.c:534 msgid "canceled by user" msgstr "ユーザによりキャンセルされました" -#: copy.c:554 +#: copy.c:544 msgid "" "Enter data to be copied followed by a newline.\n" "End with a backslash and a period on a line by itself." @@ -658,860 +690,885 @@ msgstr "" "コピーするデータに続いて改行を入力します。\n" "バックスラッシュ(\\)とピリオドだけの行で終了します。" -#: copy.c:672 +#: copy.c:667 msgid "aborted because of read failure" msgstr "読み込みに失敗したため異常終了しました" -#: copy.c:692 +#: copy.c:691 msgid "trying to exit copy mode" msgstr "コピーモードを終了しようとしています。" -#: describe.c:71 describe.c:247 describe.c:478 describe.c:605 describe.c:737 -#: describe.c:822 describe.c:891 describe.c:2666 describe.c:2870 -#: describe.c:2959 describe.c:3197 describe.c:3333 describe.c:3560 -#: describe.c:3632 describe.c:3643 describe.c:3702 describe.c:4110 -#: describe.c:4189 +#: describe.c:71 describe.c:259 describe.c:491 describe.c:615 describe.c:758 +#: describe.c:844 describe.c:914 describe.c:2759 describe.c:2964 +#: describe.c:3054 describe.c:3299 describe.c:3436 describe.c:3665 +#: describe.c:3737 describe.c:3748 describe.c:3807 describe.c:4215 +#: describe.c:4294 msgid "Schema" msgstr "スキーマ" -#: describe.c:72 describe.c:149 describe.c:157 describe.c:248 describe.c:479 -#: describe.c:606 describe.c:656 describe.c:738 describe.c:892 describe.c:2667 -#: describe.c:2792 describe.c:2871 describe.c:2960 describe.c:3038 -#: describe.c:3198 describe.c:3261 describe.c:3334 describe.c:3561 -#: describe.c:3633 describe.c:3644 describe.c:3703 describe.c:3892 -#: describe.c:3973 describe.c:4187 +#: describe.c:72 describe.c:156 describe.c:164 describe.c:260 describe.c:492 +#: describe.c:616 describe.c:677 describe.c:759 describe.c:915 describe.c:2760 +#: describe.c:2886 describe.c:2965 describe.c:3055 describe.c:3134 +#: describe.c:3300 describe.c:3364 describe.c:3437 describe.c:3666 +#: describe.c:3738 describe.c:3749 describe.c:3808 describe.c:3997 +#: describe.c:4078 describe.c:4292 msgid "Name" msgstr "名前" -#: describe.c:73 describe.c:260 describe.c:306 describe.c:323 +#: describe.c:73 describe.c:272 describe.c:318 describe.c:335 msgid "Result data type" msgstr "結果のデータ型" -#: describe.c:87 describe.c:91 describe.c:261 describe.c:307 describe.c:324 +#: describe.c:81 describe.c:94 describe.c:98 describe.c:273 describe.c:319 +#: describe.c:336 msgid "Argument data types" msgstr "引数のデータ型" -#: describe.c:98 describe.c:170 describe.c:353 describe.c:521 describe.c:610 -#: describe.c:681 describe.c:894 describe.c:1442 describe.c:2471 -#: describe.c:2700 describe.c:2823 describe.c:2897 describe.c:2969 -#: describe.c:3047 describe.c:3114 describe.c:3205 describe.c:3270 -#: describe.c:3335 describe.c:3471 describe.c:3510 describe.c:3577 -#: describe.c:3636 describe.c:3645 describe.c:3704 describe.c:3918 -#: describe.c:3995 describe.c:4124 describe.c:4190 large_obj.c:291 +#: describe.c:105 describe.c:182 describe.c:365 describe.c:534 describe.c:631 +#: describe.c:702 describe.c:917 describe.c:1486 describe.c:2564 +#: describe.c:2793 describe.c:2917 describe.c:2991 describe.c:3064 +#: describe.c:3147 describe.c:3215 describe.c:3307 describe.c:3373 +#: describe.c:3438 describe.c:3574 describe.c:3614 describe.c:3682 +#: describe.c:3741 describe.c:3750 describe.c:3809 describe.c:4023 +#: describe.c:4100 describe.c:4229 describe.c:4295 large_obj.c:291 #: large_obj.c:301 msgid "Description" msgstr "説明" -#: describe.c:116 +#: describe.c:123 msgid "List of aggregate functions" msgstr "集約関数一覧" -#: describe.c:137 +#: describe.c:144 #, c-format msgid "The server (version %d.%d) does not support tablespaces.\n" msgstr "このサーバーのバージョン (%d.%d) はテーブルスペースをサポートしていません。\n" -#: describe.c:150 describe.c:158 describe.c:350 describe.c:657 describe.c:821 -#: describe.c:2676 describe.c:2796 describe.c:3040 describe.c:3262 -#: describe.c:3893 describe.c:3974 large_obj.c:290 +#: describe.c:157 describe.c:165 describe.c:362 describe.c:678 describe.c:843 +#: describe.c:2769 describe.c:2890 describe.c:3136 describe.c:3365 +#: describe.c:3998 describe.c:4079 large_obj.c:290 msgid "Owner" msgstr "所有者" -#: describe.c:151 describe.c:159 +#: describe.c:158 describe.c:166 msgid "Location" msgstr "場所" -#: describe.c:187 +#: describe.c:177 describe.c:2382 +msgid "Options" +msgstr "オプション" + +#: describe.c:199 msgid "List of tablespaces" msgstr "テーブルスペース一覧" -#: describe.c:224 +#: describe.c:236 #, c-format msgid "\\df only takes [antwS+] as options\n" msgstr "\\dfはオプションとして[antwS+]のみを取ることができます\n" -#: describe.c:230 +#: describe.c:242 #, c-format msgid "\\df does not take a \"w\" option with server version %d.%d\n" msgstr "サーバーバージョン%d.%dでは\\dfは\"w\"オプションを受け付けません\n" #. translator: "agg" is short for "aggregate" -#: describe.c:263 describe.c:309 describe.c:326 +#: describe.c:275 describe.c:321 describe.c:338 msgid "agg" msgstr "agg(集約)" -#: describe.c:264 +#: describe.c:276 msgid "window" msgstr "window(ウィンドウ)" -#: describe.c:265 describe.c:310 describe.c:327 describe.c:1005 +#: describe.c:277 describe.c:322 describe.c:339 describe.c:1028 msgid "trigger" msgstr "trigger(トリガ)" -#: describe.c:266 describe.c:311 describe.c:328 +#: describe.c:278 describe.c:323 describe.c:340 msgid "normal" msgstr "normal(通常)" -#: describe.c:267 describe.c:312 describe.c:329 describe.c:744 describe.c:831 -#: describe.c:1411 describe.c:2675 describe.c:2872 describe.c:3992 +#: describe.c:279 describe.c:324 describe.c:341 describe.c:765 describe.c:853 +#: describe.c:1455 describe.c:2768 describe.c:2966 describe.c:4097 msgid "Type" msgstr "型" -#: describe.c:343 -#| msgid "define a cursor" +#: describe.c:355 msgid "definer" msgstr "定義元" -#: describe.c:344 +#: describe.c:356 msgid "invoker" msgstr "呼び出し元" -#: describe.c:345 +#: describe.c:357 msgid "Security" msgstr "セキュリティ" -#: describe.c:346 +#: describe.c:358 msgid "immutable" msgstr "不変" -#: describe.c:347 +#: describe.c:359 msgid "stable" msgstr "安定" -#: describe.c:348 +#: describe.c:360 msgid "volatile" msgstr "揮発性" -#: describe.c:349 +#: describe.c:361 msgid "Volatility" msgstr "揮発性" -#: describe.c:351 +#: describe.c:363 msgid "Language" msgstr "言語" -#: describe.c:352 +#: describe.c:364 msgid "Source code" msgstr "ソースコード" -#: describe.c:450 +#: describe.c:462 msgid "List of functions" msgstr "関数一覧" -#: describe.c:489 +#: describe.c:502 msgid "Internal name" msgstr "内部名" -#: describe.c:490 describe.c:673 describe.c:2692 describe.c:2696 +#: describe.c:503 describe.c:694 describe.c:2785 describe.c:2789 msgid "Size" msgstr "サイズ" -#: describe.c:511 +#: describe.c:524 msgid "Elements" msgstr "要素" -#: describe.c:561 +#: describe.c:574 msgid "List of data types" msgstr "データ型一覧" -#: describe.c:607 +#: describe.c:617 msgid "Left arg type" msgstr "左辺の型" -#: describe.c:608 +#: describe.c:618 msgid "Right arg type" msgstr "右辺の型" -#: describe.c:609 +#: describe.c:619 msgid "Result type" msgstr "結果の型" -#: describe.c:628 +#: describe.c:624 describe.c:3206 describe.c:3573 +msgid "Function" +msgstr "関数" + +#: describe.c:649 msgid "List of operators" msgstr "演算子一覧" -#: describe.c:658 +#: describe.c:679 msgid "Encoding" msgstr "エンコーディング" -#: describe.c:663 describe.c:3199 +#: describe.c:684 describe.c:3301 msgid "Collate" msgstr "照合順序" -#: describe.c:664 describe.c:3200 +#: describe.c:685 describe.c:3302 msgid "Ctype" msgstr "Ctype(変換演算子)" -#: describe.c:677 +#: describe.c:698 msgid "Tablespace" msgstr "テーブルスペース" -#: describe.c:699 +#: describe.c:720 msgid "List of databases" msgstr "データベース一覧" -#: describe.c:739 describe.c:824 describe.c:2668 +#: describe.c:760 describe.c:846 describe.c:2761 msgid "table" msgstr "テーブル" -#: describe.c:740 describe.c:2669 +#: describe.c:761 describe.c:2762 msgid "view" msgstr "ビュー" -#: describe.c:741 describe.c:2670 +#: describe.c:762 describe.c:2763 msgid "materialized view" msgstr "マテリアライズドビュー" -#: describe.c:742 describe.c:826 describe.c:2672 +#: describe.c:763 describe.c:848 describe.c:2765 msgid "sequence" msgstr "シーケンス" -#: describe.c:743 describe.c:2674 +#: describe.c:764 describe.c:2767 msgid "foreign table" msgstr "外部テーブル" -#: describe.c:755 +#: describe.c:776 msgid "Column access privileges" msgstr "列のアクセス権限" -#: describe.c:781 describe.c:4334 describe.c:4338 +#: describe.c:802 describe.c:4439 describe.c:4443 msgid "Access privileges" msgstr "アクセス権" -#: describe.c:809 +#: describe.c:831 #, c-format msgid "The server (version %d.%d) does not support altering default privileges.\n" msgstr "このサーバー(バージョン%d.%d)は代替のデフォルト権限をサポートしていません。\n" -#: describe.c:828 +#: describe.c:850 msgid "function" msgstr "関数" -#: describe.c:830 -#| msgid "Ctype" +#: describe.c:852 msgid "type" msgstr "型" -#: describe.c:854 +#: describe.c:876 msgid "Default access privileges" msgstr "デフォルトのアクセス権限" -#: describe.c:893 +#: describe.c:916 msgid "Object" msgstr "オブジェクト" -#: describe.c:907 sql_help.c:1459 +#: describe.c:930 sql_help.c:1595 msgid "constraint" msgstr "制約" -#: describe.c:934 +#: describe.c:957 msgid "operator class" msgstr "演算子クラス" -#: describe.c:963 +#: describe.c:986 msgid "operator family" msgstr "演算子族" -#: describe.c:985 +#: describe.c:1008 msgid "rule" msgstr "ルール" -#: describe.c:1027 +#: describe.c:1050 msgid "Object descriptions" msgstr "オブジェクトの説明" -#: describe.c:1080 +#: describe.c:1104 #, c-format msgid "Did not find any relation named \"%s\".\n" msgstr "\"%s\" という名前のリレーションが見つかりません。\n" -#: describe.c:1253 +#: describe.c:1295 #, c-format msgid "Did not find any relation with OID %s.\n" msgstr "OID %s を持つリレーションが見つかりません。\n" -#: describe.c:1355 +#: describe.c:1399 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "ログを取らないテーブル \"%s.%s\"" -#: describe.c:1358 +#: describe.c:1402 #, c-format msgid "Table \"%s.%s\"" msgstr "テーブル \"%s.%s\"" -#: describe.c:1362 +#: describe.c:1406 #, c-format msgid "View \"%s.%s\"" msgstr "ビュー \"%s.%s\"" -#: describe.c:1367 +#: describe.c:1411 #, c-format -#| msgid "Unlogged table \"%s.%s\"" msgid "Unlogged materialized view \"%s.%s\"" msgstr "ログを取らないマテリアライズドビュー \"%s.%s\"" -#: describe.c:1370 +#: describe.c:1414 #, c-format -#| msgid "analyzing \"%s.%s\"" msgid "Materialized view \"%s.%s\"" msgstr "マテリアライズドビュー \"%s.%s\"" -#: describe.c:1374 +#: describe.c:1418 #, c-format msgid "Sequence \"%s.%s\"" msgstr "シーケンス \"%s.%s\"" -#: describe.c:1379 +#: describe.c:1423 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "ログを取らないインデックス \"%s.%s\"" -#: describe.c:1382 +#: describe.c:1426 #, c-format msgid "Index \"%s.%s\"" msgstr "インデックス \"%s.%s\"" -#: describe.c:1387 +#: describe.c:1431 #, c-format msgid "Special relation \"%s.%s\"" msgstr "特殊なリレーション \"%s.%s\"" -#: describe.c:1391 +#: describe.c:1435 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "TOAST テーブル \"%s.%s\"" -#: describe.c:1395 +#: describe.c:1439 #, c-format msgid "Composite type \"%s.%s\"" msgstr "複合型 \"%s.%s\"" -#: describe.c:1399 +#: describe.c:1443 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "外部テーブル \"%s.%s\"" -#: describe.c:1410 +#: describe.c:1454 msgid "Column" msgstr "列" -#: describe.c:1419 +#: describe.c:1463 msgid "Modifiers" msgstr "修飾語" -#: describe.c:1424 +#: describe.c:1468 msgid "Value" msgstr "値" -#: describe.c:1427 +#: describe.c:1471 msgid "Definition" msgstr "定義" -#: describe.c:1430 describe.c:3913 describe.c:3994 describe.c:4062 -#: describe.c:4123 +#: describe.c:1474 describe.c:4018 describe.c:4099 describe.c:4167 +#: describe.c:4228 msgid "FDW Options" msgstr "FDWオプション" -#: describe.c:1434 +#: describe.c:1478 msgid "Storage" msgstr "ストレージ" -#: describe.c:1437 +#: describe.c:1481 msgid "Stats target" msgstr "対象統計情報" -#: describe.c:1487 +#: describe.c:1531 #, c-format msgid "collate %s" msgstr "照合順序 %s" -#: describe.c:1495 +#: describe.c:1539 msgid "not null" msgstr "not null" #. translator: default values of column definitions -#: describe.c:1505 +#: describe.c:1549 #, c-format msgid "default %s" msgstr "default %s" -#: describe.c:1613 +#: describe.c:1664 msgid "primary key, " msgstr "プライマリキー, " -#: describe.c:1615 +#: describe.c:1666 msgid "unique, " msgstr "ユニーク, " -#: describe.c:1621 +#: describe.c:1672 #, c-format msgid "for table \"%s.%s\"" msgstr "テーブル \"%s.%s\" 用" -#: describe.c:1625 +#: describe.c:1676 #, c-format msgid ", predicate (%s)" msgstr ", 述語 (%s)" -#: describe.c:1628 +#: describe.c:1679 msgid ", clustered" msgstr ", クラスタ化済み" -#: describe.c:1631 +#: describe.c:1682 msgid ", invalid" msgstr ", 無効" -#: describe.c:1634 +#: describe.c:1685 msgid ", deferrable" msgstr ", 遅延可能" -#: describe.c:1637 +#: describe.c:1688 msgid ", initially deferred" msgstr ", 最初から遅延されている" -#: describe.c:1672 +#: describe.c:1691 +msgid ", replica identity" +msgstr "レプリカ特性" + +#: describe.c:1726 #, c-format msgid "Owned by: %s" msgstr "所有者: %s" -#: describe.c:1728 +#: describe.c:1786 msgid "Indexes:" msgstr "インデックス:" -#: describe.c:1809 +#: describe.c:1870 msgid "Check constraints:" msgstr "検査制約:" -#: describe.c:1840 +#: describe.c:1901 msgid "Foreign-key constraints:" msgstr "外部キー制約:" -#: describe.c:1871 +#: describe.c:1932 msgid "Referenced by:" msgstr "参照元:" -#: describe.c:1953 describe.c:2003 +#: describe.c:2014 describe.c:2064 msgid "Rules:" msgstr "ルール:" -#: describe.c:1956 +#: describe.c:2017 msgid "Disabled rules:" msgstr "無効にされたルール:" -#: describe.c:1959 +#: describe.c:2020 msgid "Rules firing always:" msgstr "常に無視されるルール" -#: describe.c:1962 +#: describe.c:2023 msgid "Rules firing on replica only:" msgstr "レプリカでのみ無視されるルール" -#: describe.c:1986 +#: describe.c:2047 msgid "View definition:" msgstr "ビュー定義:" -#: describe.c:2109 +#: describe.c:2182 msgid "Triggers:" msgstr "トリガ:" -#: describe.c:2112 +#: describe.c:2186 +msgid "Disabled user triggers:" +msgstr "無効にされたユーザトリガ:" + +#: describe.c:2188 msgid "Disabled triggers:" msgstr "無効にされたトリガ:" -#: describe.c:2115 +#: describe.c:2191 +msgid "Disabled internal triggers:" +msgstr "無効にされた内部トリガ:" + +#: describe.c:2194 msgid "Triggers firing always:" msgstr "常に無視されるトリガ" -#: describe.c:2118 +#: describe.c:2197 msgid "Triggers firing on replica only:" msgstr "レプリカでのみ無視されるトリガ" -#: describe.c:2197 +#: describe.c:2276 msgid "Inherits" msgstr "継承" -#: describe.c:2236 +#: describe.c:2315 #, c-format msgid "Number of child tables: %d (Use \\d+ to list them.)" msgstr "子テーブルの数:%d(\\d+ で一覧表示)" -#: describe.c:2243 +#: describe.c:2322 msgid "Child tables" msgstr "子テーブル" -#: describe.c:2265 +#: describe.c:2344 #, c-format msgid "Typed table of type: %s" msgstr "型付けされたテーブルの型:%s" -#: describe.c:2272 -msgid "Has OIDs" -msgstr "OID を持つ" +#: describe.c:2358 +msgid "Replica Identity" +msgstr "レプリカ特性" -#: describe.c:2275 describe.c:2963 describe.c:3106 -msgid "no" -msgstr "no" +#: describe.c:2371 +msgid "Has OIDs: yes" +msgstr "OID を持つ: はい" -#: describe.c:2275 describe.c:2963 describe.c:3108 -msgid "yes" -msgstr "yes" - -#: describe.c:2288 -msgid "Options" -msgstr "オプション" - -#: describe.c:2366 +#: describe.c:2460 #, c-format msgid "Tablespace: \"%s\"" msgstr "テーブルスペース \"%s\"" -#: describe.c:2379 +#. translator: before this string there's an index description like +#. '"foo_pkey" PRIMARY KEY, btree (a)' +#: describe.c:2472 #, c-format msgid ", tablespace \"%s\"" msgstr "テーブルスペース \"%s\"" -#: describe.c:2464 +#: describe.c:2557 msgid "List of roles" msgstr "ロール一覧" -#: describe.c:2466 +#: describe.c:2559 msgid "Role name" msgstr "ロール名" -#: describe.c:2467 +#: describe.c:2560 msgid "Attributes" msgstr "属性" -#: describe.c:2468 +#: describe.c:2561 msgid "Member of" msgstr "メンバー" -#: describe.c:2479 +#: describe.c:2572 msgid "Superuser" msgstr "スーパーユーザ" -#: describe.c:2482 +#: describe.c:2575 msgid "No inheritance" msgstr "継承なし" -#: describe.c:2485 +#: describe.c:2578 msgid "Create role" msgstr "ロールを作成できる" -#: describe.c:2488 +#: describe.c:2581 msgid "Create DB" msgstr "DBを作成できる" -#: describe.c:2491 +#: describe.c:2584 msgid "Cannot login" msgstr "ログインできない" -#: describe.c:2495 +#: describe.c:2588 msgid "Replication" msgstr "レプリケーション" -#: describe.c:2504 +#: describe.c:2597 msgid "No connections" msgstr "接続なし" -#: describe.c:2506 +#: describe.c:2599 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d 個の接続" msgstr[1] "%d 個の接続" -#: describe.c:2516 +#: describe.c:2609 msgid "Password valid until " msgstr "パスワード有効期限" -#: describe.c:2572 -#| msgid "Role name" +#: describe.c:2665 msgid "Role" msgstr "ロール" -#: describe.c:2573 -#| msgid "database %s" +#: describe.c:2666 msgid "Database" msgstr "データベース" -#: describe.c:2574 +#: describe.c:2667 msgid "Settings" msgstr "設定" -#: describe.c:2584 +#: describe.c:2677 #, c-format msgid "No per-database role settings support in this server version.\n" msgstr "このバージョンのサーバーでは、データベース毎のロール設定をサポートしていません。\n" -#: describe.c:2595 +#: describe.c:2688 #, c-format msgid "No matching settings found.\n" msgstr "マッチする設定が見つかりません\n" -#: describe.c:2597 +#: describe.c:2690 #, c-format msgid "No settings found.\n" msgstr "設定がありません。\n" -#: describe.c:2602 +#: describe.c:2695 msgid "List of settings" msgstr "設定の一覧" -#: describe.c:2671 +#: describe.c:2764 msgid "index" msgstr "インデックス" -#: describe.c:2673 +#: describe.c:2766 msgid "special" msgstr "特殊" -#: describe.c:2681 describe.c:4111 +#: describe.c:2774 describe.c:4216 msgid "Table" msgstr "テーブル" -#: describe.c:2757 +#: describe.c:2850 #, c-format msgid "No matching relations found.\n" msgstr "マッチするリレーションが見つかりません\n" -#: describe.c:2759 +#: describe.c:2852 #, c-format msgid "No relations found.\n" msgstr "リレーションがありません。\n" -#: describe.c:2764 +#: describe.c:2857 msgid "List of relations" msgstr "リレーションの一覧" -#: describe.c:2800 +#: describe.c:2894 msgid "Trusted" msgstr "信頼?" -#: describe.c:2808 +#: describe.c:2902 msgid "Internal Language" msgstr "内部言語" -#: describe.c:2809 +#: describe.c:2903 msgid "Call Handler" msgstr "呼び出しハンドラー" -#: describe.c:2810 describe.c:3900 +#: describe.c:2904 describe.c:4005 msgid "Validator" msgstr "バリデータ" -#: describe.c:2813 +#: describe.c:2907 msgid "Inline Handler" msgstr "インラインハンドラー" -#: describe.c:2841 +#: describe.c:2935 msgid "List of languages" msgstr "言語一覧" -#: describe.c:2885 +#: describe.c:2979 msgid "Modifier" msgstr "修飾語" -#: describe.c:2886 +#: describe.c:2980 msgid "Check" msgstr "チェック" -#: describe.c:2928 +#: describe.c:3022 msgid "List of domains" msgstr "ドメイン一覧" -#: describe.c:2961 +#: describe.c:3056 msgid "Source" msgstr "ソース" -#: describe.c:2962 +#: describe.c:3057 msgid "Destination" msgstr "宛先" -#: describe.c:2964 +#: describe.c:3058 describe.c:3207 +msgid "no" +msgstr "no" + +#: describe.c:3058 describe.c:3209 +msgid "yes" +msgstr "yes" + +#: describe.c:3059 msgid "Default?" msgstr "デフォルト?" -#: describe.c:3001 +#: describe.c:3096 msgid "List of conversions" msgstr "変換ルール一覧" -#: describe.c:3039 -#| msgid "event" +#: describe.c:3135 msgid "Event" msgstr "イベント" -#: describe.c:3041 -#| msgid "table" +#: describe.c:3137 +msgid "enabled" +msgstr "有効" + +#: describe.c:3138 +msgid "replica" +msgstr "レプリカ" + +#: describe.c:3139 +msgid "always" +msgstr "常に" + +#: describe.c:3140 +msgid "disabled" +msgstr "無効" + +#: describe.c:3141 msgid "Enabled" msgstr "有効" -#: describe.c:3042 -#| msgid "Procedural Languages" +#: describe.c:3142 msgid "Procedure" msgstr "プロシージャ" -#: describe.c:3043 +#: describe.c:3143 msgid "Tags" msgstr "タグ" -#: describe.c:3062 -#| msgid "List of settings" +#: describe.c:3162 msgid "List of event triggers" msgstr "イベントトリガの一覧" -#: describe.c:3103 +#: describe.c:3204 msgid "Source type" msgstr "ソースの型" -#: describe.c:3104 +#: describe.c:3205 msgid "Target type" msgstr "ターゲットの型" -#: describe.c:3105 describe.c:3470 -msgid "Function" -msgstr "関数" - -#: describe.c:3107 +#: describe.c:3208 msgid "in assignment" msgstr "代入" -#: describe.c:3109 +#: describe.c:3210 msgid "Implicit?" msgstr "暗黙?" -#: describe.c:3160 +#: describe.c:3261 msgid "List of casts" msgstr "キャスト一覧" -#: describe.c:3185 +#: describe.c:3287 #, c-format msgid "The server (version %d.%d) does not support collations.\n" msgstr "このサーバーのバージョン (%d.%d) は照合順序をサポートしていません。\n" -#: describe.c:3235 +#: describe.c:3337 msgid "List of collations" msgstr "照合順序一覧" -#: describe.c:3293 +#: describe.c:3396 msgid "List of schemas" msgstr "スキーマ一覧" -#: describe.c:3316 describe.c:3549 describe.c:3617 describe.c:3685 +#: describe.c:3419 describe.c:3654 describe.c:3722 describe.c:3790 #, c-format msgid "The server (version %d.%d) does not support full text search.\n" msgstr "このバージョン (%d.%d) のサーバーは全文検索をサポートしていません。\n" -#: describe.c:3350 +#: describe.c:3453 msgid "List of text search parsers" msgstr "テキスト検索用パーサ一覧" -#: describe.c:3393 +#: describe.c:3496 #, c-format msgid "Did not find any text search parser named \"%s\".\n" msgstr "テキスト検索用パーサ \"%s\" が見つかりません。\n" -#: describe.c:3468 +#: describe.c:3571 msgid "Start parse" msgstr "パース起動" -#: describe.c:3469 +#: describe.c:3572 msgid "Method" msgstr "メソッド" -#: describe.c:3473 +#: describe.c:3576 msgid "Get next token" msgstr "次のトークンを取得" -#: describe.c:3475 +#: describe.c:3578 msgid "End parse" msgstr "パース終了" -#: describe.c:3477 +#: describe.c:3580 msgid "Get headline" msgstr "見出しの取得" -#: describe.c:3479 +#: describe.c:3582 msgid "Get token types" msgstr "トークンタイプの取得" -#: describe.c:3489 +#: describe.c:3592 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "テキスト検索用パーサ \"%s.%s\"" -#: describe.c:3491 +#: describe.c:3594 #, c-format msgid "Text search parser \"%s\"" msgstr "テキスト検索用パーサ \"%s\"" -#: describe.c:3509 +#: describe.c:3613 msgid "Token name" msgstr "トークン名" -#: describe.c:3520 +#: describe.c:3624 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "パーサ \"%s.%s\" のトークンタイプ" -#: describe.c:3522 +#: describe.c:3626 #, c-format msgid "Token types for parser \"%s\"" msgstr "パーサ \"%s\" のトークンタイプ" -#: describe.c:3571 +#: describe.c:3676 msgid "Template" msgstr "テンプレート" -#: describe.c:3572 +#: describe.c:3677 msgid "Init options" msgstr "初期化オプション:" -#: describe.c:3594 +#: describe.c:3699 msgid "List of text search dictionaries" msgstr "テキスト検索用辞書の一覧" -#: describe.c:3634 +#: describe.c:3739 msgid "Init" msgstr "初期化" -#: describe.c:3635 +#: describe.c:3740 msgid "Lexize" msgstr "Lex 処理" -#: describe.c:3662 +#: describe.c:3767 msgid "List of text search templates" msgstr "テキスト検索用テンプレート一覧" -#: describe.c:3719 +#: describe.c:3824 msgid "List of text search configurations" msgstr "テキスト検索用設定一覧" -#: describe.c:3763 +#: describe.c:3868 #, c-format msgid "Did not find any text search configuration named \"%s\".\n" msgstr "テキスト検索用設定 \"%s\" が見つかりません。\n" -#: describe.c:3829 +#: describe.c:3934 msgid "Token" msgstr "トークン" -#: describe.c:3830 +#: describe.c:3935 msgid "Dictionaries" msgstr "辞書" -#: describe.c:3841 +#: describe.c:3946 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "テキスト検索用設定 \"%s.%s\"" -#: describe.c:3844 +#: describe.c:3949 #, c-format msgid "Text search configuration \"%s\"" msgstr "テキスト検索用設定 \"%s\"" -#: describe.c:3848 +#: describe.c:3953 #, c-format msgid "" "\n" @@ -1520,7 +1577,7 @@ msgstr "" "\n" "パーサ: \"%s.%s\"" -#: describe.c:3851 +#: describe.c:3956 #, c-format msgid "" "\n" @@ -1529,104 +1586,96 @@ msgstr "" "\n" "パーサ:\"%s\"" -#: describe.c:3883 +#: describe.c:3988 #, c-format msgid "The server (version %d.%d) does not support foreign-data wrappers.\n" msgstr "このバージョン (%d.%d) のサーバーは外部データラッパーをサポートしていません。\n" -#: describe.c:3897 +#: describe.c:4002 msgid "Handler" msgstr "ハンドラー" -#: describe.c:3940 +#: describe.c:4045 msgid "List of foreign-data wrappers" msgstr "外部データラッパーの一覧" -#: describe.c:3963 +#: describe.c:4068 #, c-format msgid "The server (version %d.%d) does not support foreign servers.\n" msgstr "このサーバー(バージョン%d.%d)は外部サーバーをサポートしていません。\n" -#: describe.c:3975 +#: describe.c:4080 msgid "Foreign-data wrapper" msgstr "外部データラッパー" -#: describe.c:3993 describe.c:4188 +#: describe.c:4098 describe.c:4293 msgid "Version" msgstr "バージョン" -#: describe.c:4019 +#: describe.c:4124 msgid "List of foreign servers" msgstr "外部サーバー一覧" -#: describe.c:4042 +#: describe.c:4147 #, c-format msgid "The server (version %d.%d) does not support user mappings.\n" msgstr "このサーバー(バージョン%d.%d)はユーザマップをサポートしていません。\n" -#: describe.c:4051 describe.c:4112 +#: describe.c:4156 describe.c:4217 msgid "Server" msgstr "サーバー" -#: describe.c:4052 +#: describe.c:4157 msgid "User name" msgstr "ユーザ名" -#: describe.c:4077 +#: describe.c:4182 msgid "List of user mappings" msgstr "ユーザマッピングの一覧" -#: describe.c:4100 +#: describe.c:4205 #, c-format msgid "The server (version %d.%d) does not support foreign tables.\n" msgstr "このサーバー(バージョン%d.%d)は外部テーブルをサポートしていません。\n" -#: describe.c:4151 +#: describe.c:4256 msgid "List of foreign tables" msgstr "外部テーブル一覧" -#: describe.c:4174 describe.c:4228 +#: describe.c:4279 describe.c:4333 #, c-format msgid "The server (version %d.%d) does not support extensions.\n" msgstr "このサーバーのバージョン (%d.%d) は拡張をサポートしていません。\n" -#: describe.c:4205 +#: describe.c:4310 msgid "List of installed extensions" msgstr "インストール済みの拡張の一覧" -#: describe.c:4255 +#: describe.c:4360 #, c-format msgid "Did not find any extension named \"%s\".\n" msgstr "\"%s\" という名前の拡張が見つかりません。\n" -#: describe.c:4258 +#: describe.c:4363 #, c-format msgid "Did not find any extensions.\n" msgstr "拡張がまったく見つかりません。\n" -#: describe.c:4302 +#: describe.c:4407 msgid "Object Description" msgstr "オブジェクトの説明" -#: describe.c:4311 +#: describe.c:4416 #, c-format msgid "Objects in extension \"%s\"" msgstr "拡張\"%s\"内のオブジェクト" -#: help.c:48 -msgid "off" -msgstr "オフ" - -#: help.c:48 -msgid "on" -msgstr "オン" - -#: help.c:70 +#: help.c:62 #, c-format -msgid "could not get current user name: %s\n" -msgstr "現在のユーザ名を取得できませんした: %s\n" +msgid "%s\n" +msgstr "%s\n" -#: help.c:82 +#: help.c:67 #, c-format msgid "" "psql is the PostgreSQL interactive terminal.\n" @@ -1635,12 +1684,12 @@ msgstr "" "psql は PostgreSQL の会話型ターミナルです。\n" "\n" -#: help.c:83 +#: help.c:68 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: help.c:84 +#: help.c:69 #, c-format msgid "" " psql [OPTION]... [DBNAME [USERNAME]]\n" @@ -1649,32 +1698,32 @@ msgstr "" " psql [オプション]... [データベース名 [ユーザ名]]\n" "\n" -#: help.c:86 +#: help.c:71 #, c-format msgid "General options:\n" msgstr "一般的なオプション:\n" -#: help.c:91 +#: help.c:76 #, c-format msgid " -c, --command=COMMAND run only single command (SQL or internal) and exit\n" msgstr " -c, --command=コマンド (SQLまたは内部の)単一コマンドを一つだけ実行して終了\n" -#: help.c:92 +#: help.c:77 #, c-format msgid " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" msgstr " -d, --dbname=DB名 接続するデータベース名を指定(デフォルト: \"%s\")\n" -#: help.c:93 +#: help.c:78 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" msgstr " -f, --file=ファイル名 ファイルからコマンドを読み込んで実行後、終了\n" -#: help.c:94 +#: help.c:79 #, c-format msgid " -l, --list list available databases, then exit\n" msgstr " -l(エル), --list 使用可能なデータベース一覧を表示して終了\n" -#: help.c:95 +#: help.c:80 #, c-format msgid "" " -v, --set=, --variable=NAME=VALUE\n" @@ -1683,21 +1732,18 @@ msgstr "" " -v, --set=, --variable=名前=値\n" " psql 変数 '名前' に '値' をセット\n" -#: help.c:97 +#: help.c:82 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示し、終了します\n" -#: help.c:98 +#: help.c:83 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr " -X, --no-psqlrc 初期化ファイル (~/.psqlrc) を読みこまない\n" -#: help.c:99 +#: help.c:84 #, c-format -#| msgid "" -#| " -1 (\"one\"), --single-transaction\n" -#| " execute command file as a single transaction\n" msgid "" " -1 (\"one\"), --single-transaction\n" " execute as a single transaction (if non-interactive)\n" @@ -1705,12 +1751,12 @@ msgstr "" " -1(数字の1), --single-transaction\n" " 単一のトランザクションとして実行(対話式でない場合)\n" -#: help.c:101 +#: help.c:86 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示し、終了します\n" -#: help.c:103 +#: help.c:88 #, c-format msgid "" "\n" @@ -1719,52 +1765,52 @@ msgstr "" "\n" "入出力オプション:\n" -#: help.c:104 +#: help.c:89 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all スクリプトからのすべての入力を表示\n" -#: help.c:105 +#: help.c:90 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr " -e, --echo-queries サーバーへ送信したコマンドを表示\n" -#: help.c:106 +#: help.c:91 #, c-format msgid " -E, --echo-hidden display queries that internal commands generate\n" msgstr " -E, --echo-hidden 内部コマンドが生成した問い合わせを表示\n" -#: help.c:107 +#: help.c:92 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" msgstr " -L, --log-file=ファイル名 セッションログをファイルに書き込む\n" -#: help.c:108 +#: help.c:93 #, c-format msgid " -n, --no-readline disable enhanced command line editing (readline)\n" msgstr " -n, --no-readline 拡張コマンドライン編集機能(readline)を無効にする\n" -#: help.c:109 +#: help.c:94 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" msgstr " -o, --output=ファイル名 問い合わせ結果をファイル(または |パイプ)に送る\n" -#: help.c:110 +#: help.c:95 #, c-format msgid " -q, --quiet run quietly (no messages, only query output)\n" msgstr " -q, --quiet 静かに実行(メッセージなしで、問い合わせの出力のみ)\n" -#: help.c:111 +#: help.c:96 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" msgstr " -s, --single-step シングルステップモード(各問い合わせごとに確認)\n" -#: help.c:112 +#: help.c:97 #, c-format msgid " -S, --single-line single-line mode (end of line terminates SQL command)\n" msgstr " -S, --single-line 単一行モード(行末を SQL コマンドの終了とみなす)\n" -#: help.c:114 +#: help.c:99 #, c-format msgid "" "\n" @@ -1773,73 +1819,73 @@ msgstr "" "\n" "出力フォーマットオプション:\n" -#: help.c:115 +#: help.c:100 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr " -A, --no-align 桁揃えなしのテーブル出力モード\n" -#: help.c:116 +#: help.c:101 #, c-format msgid "" " -F, --field-separator=STRING\n" -" set field separator (default: \"%s\")\n" +" field separator for unaligned output (default: \"%s\")\n" msgstr "" " -F, --field-separator=文字列\n" -" フィールド区切り文字を設定(デフォルト: \"%s\")\n" +" 桁揃えなしの出力でのフィールド区切り文字(デフォルト: \"%s\")\n" -#: help.c:119 +#: help.c:104 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html HTML テーブル出力モード\n" -#: help.c:120 +#: help.c:105 #, c-format msgid " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset command)\n" msgstr " -P, --pset=変数[=値] 表示オプション '変数' を '値' にセット (\\pset コマンドを参照)\n" -#: help.c:121 +#: help.c:106 #, c-format msgid "" " -R, --record-separator=STRING\n" -" set record separator (default: newline)\n" +" record separator for unaligned output (default: newline)\n" msgstr "" " -R, --record-separator=文字列\n" -" レコード区切り文字を設定(デフォルト:改行)\n" +" 桁揃えなしの出力でのレコード区切り文字(デフォルト:改行)\n" -#: help.c:123 +#: help.c:108 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr " -t, --tuples-only 行のみを表示\n" -#: help.c:124 +#: help.c:109 #, c-format msgid " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)\n" msgstr " -T, --table-attr=TEXT HTMLテーブルのタグ属性をセット(width, border等)\n" -#: help.c:125 +#: help.c:110 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded 拡張テーブル出力を有効にする\n" -#: help.c:126 +#: help.c:111 #, c-format msgid "" " -z, --field-separator-zero\n" -" set field separator to zero byte\n" +" set field separator for unaligned output to zero byte\n" msgstr "" " -z, --field-separator-zero\n" -" 区切り文字をゼロバイトに設定\n" +" 桁揃えなしの出力でのフィールド区切り文字をゼロバイトに設定\n" -#: help.c:128 +#: help.c:113 #, c-format msgid "" " -0, --record-separator-zero\n" -" set record separator to zero byte\n" +" set record separator for unaligned output to zero byte\n" msgstr "" " -0, --record-separator-zero\n" -" レコード区切り文字をゼロバイトに設定\n" +" 桁揃えなしの出力でのレコード区切り文字をゼロバイトに設定\n" -#: help.c:131 +#: help.c:116 #, c-format msgid "" "\n" @@ -1848,38 +1894,38 @@ msgstr "" "\n" "接続オプション:\n" -#: help.c:134 +#: help.c:119 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory (default: \"%s\")\n" msgstr " -h, --host=ホスト名 データベースサーバーのホストまたはソケットのディレクトリ(デフォルト: \"%s\")\n" -#: help.c:135 +#: help.c:120 msgid "local socket" msgstr "ローカルソケット" -#: help.c:138 +#: help.c:123 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr " -p, --port=ポート番号 データベースサーバーのポート番号(デフォルト: \"%s\")\n" -#: help.c:144 +#: help.c:129 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr " -U, --username=ユーザー名 データベースのユーザ名(デフォルト: \"%s\")\n" -#: help.c:145 +#: help.c:130 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password パスワード入力を要求しない\n" -#: help.c:146 +#: help.c:131 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password パスワードプロンプトを強制表示する\n" " (本来は自動的に表示されるはずです)\n" -#: help.c:148 +#: help.c:133 #, c-format msgid "" "\n" @@ -1894,472 +1940,465 @@ msgstr "" "セクションを参照のこと。\n" "\n" -#: help.c:151 +#: help.c:136 #, c-format msgid "Report bugs to .\n" msgstr "不具合はまで報告してください。\n" -#: help.c:172 +#: help.c:157 #, c-format msgid "General\n" msgstr "一般\n" -#: help.c:173 +#: help.c:158 #, c-format msgid " \\copyright show PostgreSQL usage and distribution terms\n" msgstr " \\copyright PostgreSQL の使い方と配布条件を表示\n" -#: help.c:174 +#: help.c:159 #, c-format msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" msgstr " \\g [ファイル] または ';' 問い合わせを実行(し、結果をファイルまたは |パイプ へ書き出す)\n" -#: help.c:175 +#: help.c:160 #, c-format -#| msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" msgid " \\gset [PREFIX] execute query and store results in psql variables\n" msgstr "\\gset [PREFIX] 問い合わせを実行し結果をpsql変数に格納\n" -#: help.c:176 +#: help.c:161 #, c-format msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" msgstr " \\h [名前] SQL コマンドの文法ヘルプ、* で全コマンド\n" -#: help.c:177 +#: help.c:162 #, c-format msgid " \\q quit psql\n" msgstr " \\q psql を終了する\n" -#: help.c:178 +#: help.c:163 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEC] SEC秒毎に問い合わせを実行する\n" -#: help.c:181 +#: help.c:166 #, c-format msgid "Query Buffer\n" msgstr "問い合わせバッファ\n" -#: help.c:182 +#: help.c:167 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr " \\e [ファイル] [行番号] 現在の問い合わせバッファ(やファイル)を外部エディタで編集する\n" -#: help.c:183 +#: help.c:168 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr " \\ef [関数名 [行番号]] 関数定義を外部エディタで編集する\n" -#: help.c:184 +#: help.c:169 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p 問い合わせバッファの内容を表示する\n" -#: help.c:185 +#: help.c:170 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r 問い合わせバッファをリセット(クリア)する\n" -#: help.c:187 +#: help.c:172 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [ファイル] ヒストリを表示またはファイルに保存する\n" -#: help.c:189 +#: help.c:174 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w ファイル 問い合わせバッファの内容をファイルに書き出す\n" -#: help.c:192 +#: help.c:177 #, c-format msgid "Input/Output\n" msgstr "入出力\n" -#: help.c:193 +#: help.c:178 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr " \\copy ... クライアントホストに対し、データストリームを使ってSQLコピーを行う\n" -#: help.c:194 +#: help.c:179 #, c-format msgid " \\echo [STRING] write string to standard output\n" msgstr " \\echo [文字列] 文字列を標準出力に書き出す\n" -#: help.c:195 +#: help.c:180 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i ファイル ファイルからコマンドを読み込んで実行する\n" -#: help.c:196 +#: help.c:181 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr " \\ir ファイル \\iと同じ。ただし現在のスクリプトの場所からの相対パス\n" -#: help.c:197 +#: help.c:182 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [ファイル] すべての問い合わせの結果をファイルまたは |パイプ へ送る\n" -#: help.c:198 +#: help.c:183 #, c-format msgid " \\qecho [STRING] write string to query output stream (see \\o)\n" msgstr " \\qecho [文字列] 文字列を問い合わせ出力ストリームに出力(\\o を参照)\n" -#: help.c:201 +#: help.c:186 #, c-format msgid "Informational\n" msgstr "情報\n" -#: help.c:202 +#: help.c:187 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (修飾子: S = システムオブジェクトを表示 + = 付加情報)\n" -#: help.c:203 +#: help.c:188 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] テーブル、ビュー、シーケンスの一覧を表示する\n" -#: help.c:204 +#: help.c:189 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] 名前 テーブル、ビュー、シーケンス、インデックスの説明を表示する\n" -#: help.c:205 +#: help.c:190 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [パターン] 集約関数の一覧を表示する\n" -#: help.c:206 +#: help.c:191 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [パターン] テーブルスペースの一覧を表示する\n" -#: help.c:207 +#: help.c:192 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [パターン] 変換ルールの一覧を表示する\n" -#: help.c:208 +#: help.c:193 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [パターン] キャストの一覧を表示する\n" -#: help.c:209 +#: help.c:194 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr " \\dd[S] [パターン] 他では表示されないオブジェクトの説明を表示する\n" -#: help.c:210 +#: help.c:195 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [パターン] デフォルト権限の一覧を表示する\n" -#: help.c:211 +#: help.c:196 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [パターン] ドメインの一覧を表示する\n" -#: help.c:212 +#: help.c:197 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [パターン] 外部テーブルの一覧を表示する\n" -#: help.c:213 +#: help.c:198 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [パターン] 外部サーバーの一覧を表示する\n" -#: help.c:214 +#: help.c:199 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [パターン] ユーザマッピングの一覧を表示する\n" -#: help.c:215 +#: help.c:200 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [パターン] 外部データラッパーの一覧を表示する\n" -#: help.c:216 +#: help.c:201 #, c-format msgid " \\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions\n" msgstr " \\df[antw][S+] [パターン] 関数(集約/通常/トリガー/ウィンドウのみ)の一覧を表示する\n" -#: help.c:217 +#: help.c:202 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [パターン] テキスト検索設定の一覧を表示する\n" -#: help.c:218 +#: help.c:203 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [パターン] テキスト検索用辞書の一覧を表示する\n" -#: help.c:219 +#: help.c:204 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [パターン] テキスト検索用パーサーの一覧を表示する\n" -#: help.c:220 +#: help.c:205 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [パターン] テキスト検索用テンプレートの一覧を表示する\n" -#: help.c:221 +#: help.c:206 #, c-format msgid " \\dg[+] [PATTERN] list roles\n" msgstr " \\dg[+] [パターン] ロールの一覧を表示する\n" -#: help.c:222 +#: help.c:207 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [パターン] インデックスの一覧を表示する\n" -#: help.c:223 +#: help.c:208 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl ラージオブジェクトの一覧を表示する。\\lo_list と同じ。\n" -#: help.c:224 +#: help.c:209 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [パターン] 手続き言語の一覧を表示する\n" -#: help.c:225 +#: help.c:210 #, c-format -#| msgid " \\dv[S+] [PATTERN] list views\n" msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [パターン] マテリアライズドビューの一覧を表示する\n" -#: help.c:226 +#: help.c:211 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [パターン] スキーマの一覧を表示する\n" -#: help.c:227 +#: help.c:212 #, c-format msgid " \\do[S] [PATTERN] list operators\n" msgstr " \\do[S] [名前] 演算子の一覧を表示する\n" -#: help.c:228 +#: help.c:213 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [パターン] 照合順序の一覧を表示する\n" -#: help.c:229 +#: help.c:214 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr " \\dp [パターン] テーブル、ビュー、シーケンスのアクセス権一覧を表示する\n" -#: help.c:230 +#: help.c:215 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [パターン1 [パターン2]] データベース毎のロール(ユーザー)設定の一覧を表示する\n" -#: help.c:231 +#: help.c:216 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [パターン] シーケンスの一覧を表示する\n" -#: help.c:232 +#: help.c:217 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [パターン] テーブルの一覧を表示する\n" -#: help.c:233 +#: help.c:218 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [パターン] データ型の一覧を表示する\n" -#: help.c:234 +#: help.c:219 #, c-format msgid " \\du[+] [PATTERN] list roles\n" msgstr " \\du[+] [パターン] ロールの一覧を表示する\n" -#: help.c:235 +#: help.c:220 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [パターン] ビューの一覧を表示する\n" -#: help.c:236 +#: help.c:221 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [パターン] 外部テーブルの一覧を表示する\n" -#: help.c:237 +#: help.c:222 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [パターン] 拡張の一覧を表示する\n" -#: help.c:238 +#: help.c:223 #, c-format -#| msgid " \\ddp [PATTERN] list default privileges\n" msgid " \\dy [PATTERN] list event triggers\n" msgstr " \\dy [パターン] イベントトリガの一覧を表示する\n" -#: help.c:239 +#: help.c:224 #, c-format -#| msgid " \\dt[S+] [PATTERN] list tables\n" msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [パターン] データベースの一覧を表示する\n" -#: help.c:240 +#: help.c:225 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] 関数名 関数定義を表示する\n" -#: help.c:241 +#: help.c:226 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [パターン] \\dp と同じ\n" -#: help.c:244 +#: help.c:229 #, c-format msgid "Formatting\n" msgstr "書式設定\n" -#: help.c:245 +#: help.c:230 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr " \\a 出力モードの 'unaligned' / 'aligned' を切り替える\n" -#: help.c:246 +#: help.c:231 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr " \\C タイトル テーブルのタイトルを設定する。指定がなければ解除\n" -#: help.c:247 +#: help.c:232 #, c-format msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr " \\f [文字列] 桁揃えを行わない(unaligned)問い合わせ出力におけるフィールド区切り文字を表示または設定\n" -#: help.c:248 +#: help.c:233 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H HTML の出力モードを切り替える(現在: %s)\n" -#: help.c:250 +#: help.c:235 #, c-format msgid "" -" \\pset NAME [VALUE] set table output option\n" +" \\pset [NAME [VALUE]] set table output option\n" " (NAME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|\n" " numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})\n" msgstr "" -" \\pset 名前 [値] テーブル出力のオプションを設定する\n" +" \\pset [名前 [値]] テーブル出力のオプションを設定する\n" " (名前 := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|\n" " numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})\n" -#: help.c:253 +#: help.c:238 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] 行のみを表示するか? (現在: %s)\n" -#: help.c:255 +#: help.c:240 #, c-format msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" msgstr " \\T [文字列] HTML の
タグの属性をセット。引数がなければ解除\n" -#: help.c:256 +#: help.c:241 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] 拡張出力の切り替え(現在: %s)\n" -#: help.c:260 +#: help.c:245 #, c-format msgid "Connection\n" msgstr "接続\n" -#: help.c:262 +#: help.c:247 #, c-format msgid "" -" \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently \"%s\")\n" msgstr "" -" \\c[onnect] [DB名|- ユーザ名|- ホスト名|- ポート番号|-]\n" +" \\c[onnect] {[DB名|- ユーザ名|- ホスト名|- ポート番号|-] | conninfo}\n" " 新しいデータベースに接続する (現在: \"%s\")\n" -#: help.c:266 +#: help.c:251 #, c-format -#| msgid "" -#| " \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" -#| " connect to new database (currently \"%s\")\n" msgid "" -" \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently no connection)\n" msgstr "" -" \\c[onnect] [DB名|- ユーザ名|- ホスト名|- ポート番号|-]\n" +" \\c[onnect] {[DB名|- ユーザ名|- ホスト名|- ポート番号|-] | conninfo}\n" " 新しいデータベースに接続する (現在: 接続無し)\n" -#: help.c:268 +#: help.c:253 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr "" " \\encoding [エンコーディング]\n" " クライアントのエンコーディングを表示またはセット\n" -#: help.c:269 +#: help.c:254 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr " \\password [ユーザ名] ユーザのパスワードを安全に変更する\n" -#: help.c:270 +#: help.c:255 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo 現在の接続に関する情報を表示する\n" -#: help.c:273 +#: help.c:258 #, c-format msgid "Operating System\n" msgstr "オペレーティングシステム\n" -#: help.c:274 +#: help.c:259 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [DIR] カレントディレクトリを変更\n" -#: help.c:275 +#: help.c:260 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NAME [VALUE] 環境変数の設定、設定解除を行う\n" -#: help.c:276 +#: help.c:261 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [on|off] コマンドのタイミングを切り替える(現在: %s)\n" -#: help.c:278 +#: help.c:263 #, c-format msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr " \\! [コマンド] シェルでコマンドを実行、もしくは会話型シェルを起動\n" -#: help.c:281 +#: help.c:266 #, c-format msgid "Variables\n" msgstr "変数\n" -#: help.c:282 +#: help.c:267 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr " \\prompt [テキスト] 変数名 ユーザに内部変数をセットするよう促す\n" -#: help.c:283 +#: help.c:268 #, c-format msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" msgstr "" " \\set [変数名 [値]]\n" " 内部変数の値をセット。引数がない場合は一覧表示。\n" -#: help.c:284 +#: help.c:269 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset 変数名 内部変数を削除する\n" -#: help.c:287 +#: help.c:272 #, c-format msgid "Large Objects\n" msgstr "ラージオブジェクト\n" -#: help.c:288 +#: help.c:273 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -2372,11 +2411,11 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID ラージオブジェクトの操作\n" -#: help.c:335 +#: help.c:320 msgid "Available help:\n" msgstr "利用可能なヘルプ:\n" -#: help.c:419 +#: help.c:404 #, c-format msgid "" "Command: %s\n" @@ -2391,7 +2430,7 @@ msgstr "" "%s\n" "\n" -#: help.c:435 +#: help.c:420 #, c-format msgid "" "No help available for \"%s\".\n" @@ -2400,17 +2439,17 @@ msgstr "" "\"%s\" についてはヘルプ情報がありません。\n" "引数なしで \\h とタイプすると、ヘルプの一覧が表示されます。\n" -#: input.c:193 +#: input.c:194 #, c-format msgid "could not read from input file: %s\n" msgstr "入力ファイルから読み込めませんでした: %s\n" -#: input.c:407 +#: input.c:446 input.c:485 #, c-format msgid "could not save history to file \"%s\": %s\n" msgstr "ファイル \"%s\" にヒストリを保存できませんでした: %s\n" -#: input.c:412 +#: input.c:505 #, c-format msgid "history is not supported by this installation\n" msgstr "この環境ではヒストリ機能をサポートしていません。\n" @@ -2469,1869 +2508,1905 @@ msgid_plural "(%lu rows)" msgstr[0] "(%lu 行)" msgstr[1] "(%lu 行)" -#: print.c:1175 +#: print.c:1174 #, c-format msgid "(No rows)\n" msgstr "(行がありません)\n" -#: print.c:2239 +#: print.c:2238 #, c-format msgid "Interrupted\n" msgstr "中断されました\n" -#: print.c:2305 +#: print.c:2304 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "テーブルの内容に見出しを追加できませんでした:列数 %d が制限を越えています。\n" -#: print.c:2345 +#: print.c:2344 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "テーブルの内容にセルを追加できませんでした:全セル数 %d が制限を越えています。\n" -#: print.c:2571 +#: print.c:2570 #, c-format msgid "invalid output format (internal error): %d" msgstr "出力フォーマットが無効(内部エラー):%d" -#: psqlscan.l:726 +#: psqlscan.l:727 #, c-format msgid "skipping recursive expansion of variable \"%s\"\n" msgstr "変数\"%s\"の再帰展開をスキップしています\n" -#: psqlscan.l:1601 +#: psqlscan.l:1604 #, c-format msgid "unterminated quoted string\n" msgstr "文字列の引用符が閉じていません\n" -#: psqlscan.l:1701 +#: psqlscan.l:1704 #, c-format msgid "%s: out of memory\n" msgstr "%s: メモリ不足です\n" -#: psqlscan.l:1930 +#: psqlscan.l:1933 #, c-format msgid "can't escape without active connection\n" msgstr "有効な接続なしではエスケープできません\n" -#: sql_help.c:26 sql_help.c:29 sql_help.c:32 sql_help.c:44 sql_help.c:46 -#: sql_help.c:48 sql_help.c:59 sql_help.c:61 sql_help.c:63 sql_help.c:87 -#: sql_help.c:91 sql_help.c:93 sql_help.c:95 sql_help.c:97 sql_help.c:100 -#: sql_help.c:102 sql_help.c:104 sql_help.c:197 sql_help.c:199 sql_help.c:200 -#: sql_help.c:202 sql_help.c:204 sql_help.c:207 sql_help.c:209 sql_help.c:211 -#: sql_help.c:213 sql_help.c:225 sql_help.c:226 sql_help.c:227 sql_help.c:229 -#: sql_help.c:268 sql_help.c:270 sql_help.c:272 sql_help.c:274 sql_help.c:322 -#: sql_help.c:327 sql_help.c:329 sql_help.c:360 sql_help.c:362 sql_help.c:365 -#: sql_help.c:367 sql_help.c:420 sql_help.c:425 sql_help.c:430 sql_help.c:435 -#: sql_help.c:473 sql_help.c:475 sql_help.c:477 sql_help.c:480 sql_help.c:490 -#: sql_help.c:492 sql_help.c:530 sql_help.c:532 sql_help.c:535 sql_help.c:537 -#: sql_help.c:562 sql_help.c:566 sql_help.c:579 sql_help.c:582 sql_help.c:585 -#: sql_help.c:605 sql_help.c:617 sql_help.c:625 sql_help.c:628 sql_help.c:631 -#: sql_help.c:661 sql_help.c:667 sql_help.c:669 sql_help.c:673 sql_help.c:676 -#: sql_help.c:679 sql_help.c:688 sql_help.c:699 sql_help.c:701 sql_help.c:718 -#: sql_help.c:727 sql_help.c:729 sql_help.c:731 sql_help.c:743 sql_help.c:747 -#: sql_help.c:749 sql_help.c:811 sql_help.c:813 sql_help.c:816 sql_help.c:819 -#: sql_help.c:821 sql_help.c:880 sql_help.c:882 sql_help.c:884 sql_help.c:887 -#: sql_help.c:908 sql_help.c:911 sql_help.c:914 sql_help.c:917 sql_help.c:921 -#: sql_help.c:923 sql_help.c:925 sql_help.c:927 sql_help.c:941 sql_help.c:944 -#: sql_help.c:946 sql_help.c:948 sql_help.c:958 sql_help.c:960 sql_help.c:970 -#: sql_help.c:972 sql_help.c:981 sql_help.c:1002 sql_help.c:1004 -#: sql_help.c:1006 sql_help.c:1009 sql_help.c:1011 sql_help.c:1013 -#: sql_help.c:1051 sql_help.c:1057 sql_help.c:1059 sql_help.c:1062 -#: sql_help.c:1064 sql_help.c:1066 sql_help.c:1098 sql_help.c:1101 -#: sql_help.c:1103 sql_help.c:1105 sql_help.c:1107 sql_help.c:1109 -#: sql_help.c:1112 sql_help.c:1157 sql_help.c:1348 sql_help.c:1356 -#: sql_help.c:1400 sql_help.c:1404 sql_help.c:1414 sql_help.c:1432 -#: sql_help.c:1455 sql_help.c:1473 sql_help.c:1501 sql_help.c:1560 -#: sql_help.c:1602 sql_help.c:1624 sql_help.c:1644 sql_help.c:1645 -#: sql_help.c:1680 sql_help.c:1700 sql_help.c:1722 sql_help.c:1750 -#: sql_help.c:1771 sql_help.c:1806 sql_help.c:1987 sql_help.c:2000 -#: sql_help.c:2017 sql_help.c:2033 sql_help.c:2056 sql_help.c:2107 -#: sql_help.c:2111 sql_help.c:2113 sql_help.c:2119 sql_help.c:2137 -#: sql_help.c:2164 sql_help.c:2204 sql_help.c:2221 sql_help.c:2230 -#: sql_help.c:2274 sql_help.c:2292 sql_help.c:2300 sql_help.c:2308 -#: sql_help.c:2316 sql_help.c:2324 sql_help.c:2332 sql_help.c:2340 -#: sql_help.c:2348 sql_help.c:2357 sql_help.c:2368 sql_help.c:2376 -#: sql_help.c:2384 sql_help.c:2392 sql_help.c:2400 sql_help.c:2410 -#: sql_help.c:2419 sql_help.c:2428 sql_help.c:2436 sql_help.c:2444 -#: sql_help.c:2453 sql_help.c:2461 sql_help.c:2469 sql_help.c:2477 -#: sql_help.c:2485 sql_help.c:2493 sql_help.c:2501 sql_help.c:2509 -#: sql_help.c:2517 sql_help.c:2525 sql_help.c:2534 sql_help.c:2542 -#: sql_help.c:2559 sql_help.c:2574 sql_help.c:2780 sql_help.c:2831 -#: sql_help.c:2859 sql_help.c:2867 sql_help.c:3241 sql_help.c:3289 -#: sql_help.c:3401 +#: sql_help.c:32 sql_help.c:35 sql_help.c:38 sql_help.c:60 sql_help.c:62 +#: sql_help.c:64 sql_help.c:75 sql_help.c:77 sql_help.c:79 sql_help.c:103 +#: sql_help.c:107 sql_help.c:109 sql_help.c:111 sql_help.c:113 sql_help.c:116 +#: sql_help.c:118 sql_help.c:120 sql_help.c:213 sql_help.c:215 sql_help.c:216 +#: sql_help.c:218 sql_help.c:220 sql_help.c:223 sql_help.c:225 sql_help.c:227 +#: sql_help.c:229 sql_help.c:241 sql_help.c:242 sql_help.c:243 sql_help.c:245 +#: sql_help.c:290 sql_help.c:292 sql_help.c:294 sql_help.c:296 sql_help.c:354 +#: sql_help.c:359 sql_help.c:361 sql_help.c:396 sql_help.c:398 sql_help.c:401 +#: sql_help.c:403 sql_help.c:460 sql_help.c:465 sql_help.c:470 sql_help.c:475 +#: sql_help.c:515 sql_help.c:517 sql_help.c:519 sql_help.c:522 sql_help.c:524 +#: sql_help.c:535 sql_help.c:537 sql_help.c:577 sql_help.c:579 sql_help.c:582 +#: sql_help.c:584 sql_help.c:586 sql_help.c:612 sql_help.c:616 sql_help.c:629 +#: sql_help.c:632 sql_help.c:635 sql_help.c:655 sql_help.c:667 sql_help.c:675 +#: sql_help.c:678 sql_help.c:681 sql_help.c:711 sql_help.c:717 sql_help.c:719 +#: sql_help.c:723 sql_help.c:726 sql_help.c:729 sql_help.c:738 sql_help.c:749 +#: sql_help.c:751 sql_help.c:768 sql_help.c:777 sql_help.c:779 sql_help.c:781 +#: sql_help.c:793 sql_help.c:797 sql_help.c:799 sql_help.c:878 sql_help.c:880 +#: sql_help.c:883 sql_help.c:886 sql_help.c:888 sql_help.c:890 sql_help.c:951 +#: sql_help.c:953 sql_help.c:955 sql_help.c:958 sql_help.c:979 sql_help.c:982 +#: sql_help.c:985 sql_help.c:988 sql_help.c:992 sql_help.c:994 sql_help.c:996 +#: sql_help.c:998 sql_help.c:1012 sql_help.c:1015 sql_help.c:1017 +#: sql_help.c:1019 sql_help.c:1029 sql_help.c:1031 sql_help.c:1041 +#: sql_help.c:1043 sql_help.c:1052 sql_help.c:1073 sql_help.c:1075 +#: sql_help.c:1077 sql_help.c:1080 sql_help.c:1082 sql_help.c:1084 +#: sql_help.c:1122 sql_help.c:1128 sql_help.c:1130 sql_help.c:1133 +#: sql_help.c:1135 sql_help.c:1137 sql_help.c:1164 sql_help.c:1167 +#: sql_help.c:1169 sql_help.c:1171 sql_help.c:1173 sql_help.c:1175 +#: sql_help.c:1178 sql_help.c:1218 sql_help.c:1456 sql_help.c:1472 +#: sql_help.c:1485 sql_help.c:1536 sql_help.c:1540 sql_help.c:1550 +#: sql_help.c:1568 sql_help.c:1591 sql_help.c:1609 sql_help.c:1637 +#: sql_help.c:1696 sql_help.c:1738 sql_help.c:1760 sql_help.c:1780 +#: sql_help.c:1781 sql_help.c:1816 sql_help.c:1836 sql_help.c:1858 +#: sql_help.c:1886 sql_help.c:1911 sql_help.c:1947 sql_help.c:2133 +#: sql_help.c:2146 sql_help.c:2163 sql_help.c:2179 sql_help.c:2202 +#: sql_help.c:2253 sql_help.c:2257 sql_help.c:2259 sql_help.c:2265 +#: sql_help.c:2283 sql_help.c:2310 sql_help.c:2345 sql_help.c:2357 +#: sql_help.c:2366 sql_help.c:2416 sql_help.c:2444 sql_help.c:2452 +#: sql_help.c:2460 sql_help.c:2468 sql_help.c:2476 sql_help.c:2484 +#: sql_help.c:2492 sql_help.c:2500 sql_help.c:2509 sql_help.c:2520 +#: sql_help.c:2528 sql_help.c:2536 sql_help.c:2544 sql_help.c:2552 +#: sql_help.c:2562 sql_help.c:2571 sql_help.c:2580 sql_help.c:2588 +#: sql_help.c:2596 sql_help.c:2605 sql_help.c:2613 sql_help.c:2621 +#: sql_help.c:2629 sql_help.c:2637 sql_help.c:2645 sql_help.c:2653 +#: sql_help.c:2661 sql_help.c:2669 sql_help.c:2677 sql_help.c:2686 +#: sql_help.c:2694 sql_help.c:2711 sql_help.c:2726 sql_help.c:2932 +#: sql_help.c:2983 sql_help.c:3011 sql_help.c:3019 sql_help.c:3417 +#: sql_help.c:3465 sql_help.c:3585 msgid "name" msgstr "名前" -#: sql_help.c:27 sql_help.c:30 sql_help.c:33 sql_help.c:290 sql_help.c:423 -#: sql_help.c:428 sql_help.c:433 sql_help.c:438 sql_help.c:1230 -#: sql_help.c:1563 sql_help.c:2275 sql_help.c:2360 sql_help.c:3084 -msgid "argtype" -msgstr "引数の型" - -#: sql_help.c:28 sql_help.c:45 sql_help.c:60 sql_help.c:92 sql_help.c:212 -#: sql_help.c:230 sql_help.c:330 sql_help.c:366 sql_help.c:429 sql_help.c:462 -#: sql_help.c:474 sql_help.c:491 sql_help.c:536 sql_help.c:581 sql_help.c:627 -#: sql_help.c:668 sql_help.c:690 sql_help.c:700 sql_help.c:730 sql_help.c:750 -#: sql_help.c:820 sql_help.c:881 sql_help.c:924 sql_help.c:945 sql_help.c:959 -#: sql_help.c:971 sql_help.c:983 sql_help.c:1010 sql_help.c:1058 -#: sql_help.c:1106 +#: sql_help.c:33 sql_help.c:36 sql_help.c:39 sql_help.c:300 sql_help.c:1279 +#: sql_help.c:2417 sql_help.c:3234 +msgid "aggregate_signature" +msgstr "集約関数の呼出し情報" + +#: sql_help.c:34 sql_help.c:61 sql_help.c:76 sql_help.c:108 sql_help.c:228 +#: sql_help.c:246 sql_help.c:362 sql_help.c:402 sql_help.c:469 sql_help.c:502 +#: sql_help.c:516 sql_help.c:536 sql_help.c:583 sql_help.c:631 sql_help.c:677 +#: sql_help.c:718 sql_help.c:740 sql_help.c:750 sql_help.c:780 sql_help.c:800 +#: sql_help.c:887 sql_help.c:952 sql_help.c:995 sql_help.c:1016 +#: sql_help.c:1030 sql_help.c:1042 sql_help.c:1054 sql_help.c:1081 +#: sql_help.c:1129 sql_help.c:1172 msgid "new_name" msgstr "新しい名前" -#: sql_help.c:31 sql_help.c:47 sql_help.c:62 sql_help.c:94 sql_help.c:210 -#: sql_help.c:228 sql_help.c:328 sql_help.c:391 sql_help.c:434 sql_help.c:493 -#: sql_help.c:502 sql_help.c:552 sql_help.c:565 sql_help.c:584 sql_help.c:630 -#: sql_help.c:702 sql_help.c:728 sql_help.c:748 sql_help.c:865 sql_help.c:883 -#: sql_help.c:926 sql_help.c:947 sql_help.c:1005 sql_help.c:1104 +#: sql_help.c:37 sql_help.c:63 sql_help.c:78 sql_help.c:110 sql_help.c:226 +#: sql_help.c:244 sql_help.c:360 sql_help.c:431 sql_help.c:474 sql_help.c:538 +#: sql_help.c:547 sql_help.c:602 sql_help.c:615 sql_help.c:634 sql_help.c:680 +#: sql_help.c:752 sql_help.c:778 sql_help.c:798 sql_help.c:935 sql_help.c:954 +#: sql_help.c:997 sql_help.c:1018 sql_help.c:1076 sql_help.c:1170 msgid "new_owner" msgstr "新しい所有者" -#: sql_help.c:34 sql_help.c:49 sql_help.c:64 sql_help.c:214 sql_help.c:271 -#: sql_help.c:368 sql_help.c:439 sql_help.c:538 sql_help.c:569 sql_help.c:587 -#: sql_help.c:633 sql_help.c:732 sql_help.c:822 sql_help.c:928 sql_help.c:949 -#: sql_help.c:961 sql_help.c:973 sql_help.c:1012 sql_help.c:1108 +#: sql_help.c:40 sql_help.c:65 sql_help.c:80 sql_help.c:230 sql_help.c:293 +#: sql_help.c:404 sql_help.c:479 sql_help.c:585 sql_help.c:619 sql_help.c:637 +#: sql_help.c:683 sql_help.c:782 sql_help.c:889 sql_help.c:999 sql_help.c:1020 +#: sql_help.c:1032 sql_help.c:1044 sql_help.c:1083 sql_help.c:1174 msgid "new_schema" msgstr "新しいスキーマ" -#: sql_help.c:88 sql_help.c:325 sql_help.c:389 sql_help.c:392 sql_help.c:662 -#: sql_help.c:745 sql_help.c:942 sql_help.c:1052 sql_help.c:1078 -#: sql_help.c:1305 sql_help.c:1311 sql_help.c:1504 sql_help.c:1528 -#: sql_help.c:1533 sql_help.c:1603 sql_help.c:1751 sql_help.c:1827 -#: sql_help.c:2002 sql_help.c:2165 sql_help.c:2187 sql_help.c:2593 +#: sql_help.c:41 sql_help.c:1326 sql_help.c:2418 sql_help.c:3253 +msgid "where aggregate_signature is:" +msgstr "集約関数の呼出し情報は以下の通り:" + +#: sql_help.c:42 sql_help.c:45 sql_help.c:48 sql_help.c:310 sql_help.c:333 +#: sql_help.c:336 sql_help.c:339 sql_help.c:461 sql_help.c:466 sql_help.c:471 +#: sql_help.c:476 sql_help.c:1295 sql_help.c:1327 sql_help.c:1330 +#: sql_help.c:1333 sql_help.c:1457 sql_help.c:1473 sql_help.c:1476 +#: sql_help.c:1697 sql_help.c:2419 sql_help.c:2422 sql_help.c:2425 +#: sql_help.c:2510 sql_help.c:2870 sql_help.c:3149 sql_help.c:3240 +#: sql_help.c:3254 sql_help.c:3257 sql_help.c:3260 +msgid "argmode" +msgstr "引数のモード" + +#: sql_help.c:43 sql_help.c:46 sql_help.c:49 sql_help.c:311 sql_help.c:334 +#: sql_help.c:337 sql_help.c:340 sql_help.c:462 sql_help.c:467 sql_help.c:472 +#: sql_help.c:477 sql_help.c:1296 sql_help.c:1328 sql_help.c:1331 +#: sql_help.c:1334 sql_help.c:1458 sql_help.c:1474 sql_help.c:1477 +#: sql_help.c:1698 sql_help.c:2420 sql_help.c:2423 sql_help.c:2426 +#: sql_help.c:2511 sql_help.c:3241 sql_help.c:3255 sql_help.c:3258 +#: sql_help.c:3261 +msgid "argname" +msgstr "引数名" + +#: sql_help.c:44 sql_help.c:47 sql_help.c:50 sql_help.c:312 sql_help.c:335 +#: sql_help.c:338 sql_help.c:341 sql_help.c:463 sql_help.c:468 sql_help.c:473 +#: sql_help.c:478 sql_help.c:1297 sql_help.c:1329 sql_help.c:1332 +#: sql_help.c:1335 sql_help.c:1699 sql_help.c:2421 sql_help.c:2424 +#: sql_help.c:2427 sql_help.c:2512 sql_help.c:3242 sql_help.c:3256 +#: sql_help.c:3259 sql_help.c:3262 +msgid "argtype" +msgstr "引数の型" + +#: sql_help.c:104 sql_help.c:357 sql_help.c:425 sql_help.c:432 sql_help.c:712 +#: sql_help.c:795 sql_help.c:1013 sql_help.c:1123 sql_help.c:1149 +#: sql_help.c:1383 sql_help.c:1389 sql_help.c:1640 sql_help.c:1664 +#: sql_help.c:1669 sql_help.c:1739 sql_help.c:1887 sql_help.c:1968 +#: sql_help.c:2148 sql_help.c:2311 sql_help.c:2333 sql_help.c:2745 msgid "option" msgstr "オプション" -#: sql_help.c:89 sql_help.c:663 sql_help.c:1053 sql_help.c:1604 -#: sql_help.c:1752 sql_help.c:2166 +#: sql_help.c:105 sql_help.c:713 sql_help.c:1124 sql_help.c:1740 +#: sql_help.c:1888 sql_help.c:2312 msgid "where option can be:" msgstr "オプションは以下の通り:" -#: sql_help.c:90 sql_help.c:664 sql_help.c:1054 sql_help.c:1439 -#: sql_help.c:1753 sql_help.c:2167 +#: sql_help.c:106 sql_help.c:714 sql_help.c:1125 sql_help.c:1575 +#: sql_help.c:1889 sql_help.c:2313 msgid "connlimit" msgstr "最大接続数" -#: sql_help.c:96 sql_help.c:553 sql_help.c:866 +#: sql_help.c:112 sql_help.c:526 sql_help.c:588 sql_help.c:603 sql_help.c:892 +#: sql_help.c:936 msgid "new_tablespace" msgstr "テーブルスペース" -#: sql_help.c:98 sql_help.c:101 sql_help.c:103 sql_help.c:443 sql_help.c:445 -#: sql_help.c:446 sql_help.c:671 sql_help.c:675 sql_help.c:678 sql_help.c:1060 -#: sql_help.c:1063 sql_help.c:1065 sql_help.c:1571 sql_help.c:2884 -#: sql_help.c:3230 +#: sql_help.c:114 sql_help.c:117 sql_help.c:119 sql_help.c:483 sql_help.c:485 +#: sql_help.c:486 sql_help.c:721 sql_help.c:725 sql_help.c:728 sql_help.c:811 +#: sql_help.c:814 sql_help.c:1131 sql_help.c:1134 sql_help.c:1136 +#: sql_help.c:1707 sql_help.c:3036 sql_help.c:3406 msgid "configuration_parameter" msgstr "設定パラメータ" -#: sql_help.c:99 sql_help.c:326 sql_help.c:385 sql_help.c:390 sql_help.c:393 -#: sql_help.c:444 sql_help.c:479 sql_help.c:544 sql_help.c:550 sql_help.c:672 -#: sql_help.c:746 sql_help.c:841 sql_help.c:860 sql_help.c:886 sql_help.c:943 -#: sql_help.c:1061 sql_help.c:1079 sql_help.c:1505 sql_help.c:1529 -#: sql_help.c:1534 sql_help.c:1572 sql_help.c:1573 sql_help.c:1632 -#: sql_help.c:1664 sql_help.c:1828 sql_help.c:1902 sql_help.c:1910 -#: sql_help.c:1942 sql_help.c:1964 sql_help.c:2003 sql_help.c:2188 -#: sql_help.c:3231 sql_help.c:3232 +#: sql_help.c:115 sql_help.c:358 sql_help.c:421 sql_help.c:426 sql_help.c:433 +#: sql_help.c:484 sql_help.c:521 sql_help.c:594 sql_help.c:600 sql_help.c:722 +#: sql_help.c:796 sql_help.c:812 sql_help.c:813 sql_help.c:911 sql_help.c:930 +#: sql_help.c:957 sql_help.c:1014 sql_help.c:1132 sql_help.c:1150 +#: sql_help.c:1641 sql_help.c:1665 sql_help.c:1670 sql_help.c:1708 +#: sql_help.c:1709 sql_help.c:1768 sql_help.c:1800 sql_help.c:1969 +#: sql_help.c:2043 sql_help.c:2051 sql_help.c:2083 sql_help.c:2105 +#: sql_help.c:2122 sql_help.c:2149 sql_help.c:2334 sql_help.c:3407 +#: sql_help.c:3408 msgid "value" msgstr "値" -#: sql_help.c:161 +#: sql_help.c:177 msgid "target_role" msgstr "対象のロール" -#: sql_help.c:162 sql_help.c:1488 sql_help.c:1788 sql_help.c:1793 -#: sql_help.c:2700 sql_help.c:2707 sql_help.c:2721 sql_help.c:2727 -#: sql_help.c:2979 sql_help.c:2986 sql_help.c:3000 sql_help.c:3006 +#: sql_help.c:178 sql_help.c:1624 sql_help.c:1929 sql_help.c:1934 +#: sql_help.c:2852 sql_help.c:2859 sql_help.c:2873 sql_help.c:2879 +#: sql_help.c:3131 sql_help.c:3138 sql_help.c:3152 sql_help.c:3158 msgid "schema_name" msgstr "スキーマ名" -#: sql_help.c:163 +#: sql_help.c:179 msgid "abbreviated_grant_or_revoke" msgstr "権限付与/剥奪の省略形" -#: sql_help.c:164 +#: sql_help.c:180 msgid "where abbreviated_grant_or_revoke is one of:" msgstr "権限付与/剥奪の省略形は以下のいずれか:" -#: sql_help.c:165 sql_help.c:166 sql_help.c:167 sql_help.c:168 sql_help.c:169 -#: sql_help.c:170 sql_help.c:171 sql_help.c:172 sql_help.c:1607 -#: sql_help.c:1608 sql_help.c:1609 sql_help.c:1610 sql_help.c:1611 -#: sql_help.c:1756 sql_help.c:1757 sql_help.c:1758 sql_help.c:1759 -#: sql_help.c:1760 sql_help.c:2170 sql_help.c:2171 sql_help.c:2172 -#: sql_help.c:2173 sql_help.c:2174 sql_help.c:2701 sql_help.c:2705 -#: sql_help.c:2708 sql_help.c:2710 sql_help.c:2712 sql_help.c:2714 -#: sql_help.c:2716 sql_help.c:2722 sql_help.c:2724 sql_help.c:2726 -#: sql_help.c:2728 sql_help.c:2730 sql_help.c:2732 sql_help.c:2733 -#: sql_help.c:2734 sql_help.c:2980 sql_help.c:2984 sql_help.c:2987 -#: sql_help.c:2989 sql_help.c:2991 sql_help.c:2993 sql_help.c:2995 -#: sql_help.c:3001 sql_help.c:3003 sql_help.c:3005 sql_help.c:3007 -#: sql_help.c:3009 sql_help.c:3011 sql_help.c:3012 sql_help.c:3013 -#: sql_help.c:3251 +#: sql_help.c:181 sql_help.c:182 sql_help.c:183 sql_help.c:184 sql_help.c:185 +#: sql_help.c:186 sql_help.c:187 sql_help.c:188 sql_help.c:525 sql_help.c:587 +#: sql_help.c:891 sql_help.c:1743 sql_help.c:1744 sql_help.c:1745 +#: sql_help.c:1746 sql_help.c:1747 sql_help.c:1892 sql_help.c:1893 +#: sql_help.c:1894 sql_help.c:1895 sql_help.c:1896 sql_help.c:2316 +#: sql_help.c:2317 sql_help.c:2318 sql_help.c:2319 sql_help.c:2320 +#: sql_help.c:2853 sql_help.c:2857 sql_help.c:2860 sql_help.c:2862 +#: sql_help.c:2864 sql_help.c:2866 sql_help.c:2868 sql_help.c:2874 +#: sql_help.c:2876 sql_help.c:2878 sql_help.c:2880 sql_help.c:2882 +#: sql_help.c:2884 sql_help.c:2885 sql_help.c:2886 sql_help.c:3132 +#: sql_help.c:3136 sql_help.c:3139 sql_help.c:3141 sql_help.c:3143 +#: sql_help.c:3145 sql_help.c:3147 sql_help.c:3153 sql_help.c:3155 +#: sql_help.c:3157 sql_help.c:3159 sql_help.c:3161 sql_help.c:3163 +#: sql_help.c:3164 sql_help.c:3165 sql_help.c:3427 msgid "role_name" msgstr "ロール名" -#: sql_help.c:198 sql_help.c:378 sql_help.c:832 sql_help.c:834 sql_help.c:1100 -#: sql_help.c:1458 sql_help.c:1462 sql_help.c:1628 sql_help.c:1914 -#: sql_help.c:1924 sql_help.c:1946 sql_help.c:2748 sql_help.c:3132 -#: sql_help.c:3133 sql_help.c:3137 sql_help.c:3142 sql_help.c:3205 -#: sql_help.c:3206 sql_help.c:3211 sql_help.c:3216 sql_help.c:3342 -#: sql_help.c:3343 sql_help.c:3347 sql_help.c:3352 sql_help.c:3427 -#: sql_help.c:3429 sql_help.c:3460 sql_help.c:3503 sql_help.c:3504 -#: sql_help.c:3508 sql_help.c:3513 +#: sql_help.c:214 sql_help.c:414 sql_help.c:902 sql_help.c:904 sql_help.c:1166 +#: sql_help.c:1594 sql_help.c:1598 sql_help.c:1764 sql_help.c:2055 +#: sql_help.c:2065 sql_help.c:2087 sql_help.c:2900 sql_help.c:3303 +#: sql_help.c:3304 sql_help.c:3308 sql_help.c:3313 sql_help.c:3381 +#: sql_help.c:3382 sql_help.c:3387 sql_help.c:3392 sql_help.c:3521 +#: sql_help.c:3522 sql_help.c:3526 sql_help.c:3531 sql_help.c:3611 +#: sql_help.c:3613 sql_help.c:3644 sql_help.c:3690 sql_help.c:3691 +#: sql_help.c:3695 sql_help.c:3700 msgid "expression" msgstr "評価式" -#: sql_help.c:201 +#: sql_help.c:217 msgid "domain_constraint" msgstr "ドメイン制約" -#: sql_help.c:203 sql_help.c:205 sql_help.c:208 sql_help.c:817 sql_help.c:847 -#: sql_help.c:848 sql_help.c:849 sql_help.c:868 sql_help.c:1218 -#: sql_help.c:1461 sql_help.c:1536 sql_help.c:1913 sql_help.c:1923 +#: sql_help.c:219 sql_help.c:221 sql_help.c:224 sql_help.c:884 sql_help.c:917 +#: sql_help.c:918 sql_help.c:919 sql_help.c:939 sql_help.c:1285 +#: sql_help.c:1597 sql_help.c:1672 sql_help.c:2054 sql_help.c:2064 msgid "constraint_name" msgstr "制約名" -#: sql_help.c:206 sql_help.c:818 +#: sql_help.c:222 sql_help.c:885 msgid "new_constraint_name" msgstr "新しい制約名" -#: sql_help.c:269 sql_help.c:744 +#: sql_help.c:291 sql_help.c:794 msgid "new_version" msgstr "新しいバージョン" -#: sql_help.c:273 sql_help.c:275 +#: sql_help.c:295 sql_help.c:297 msgid "member_object" msgstr "メンバオブジェクト" -#: sql_help.c:276 +#: sql_help.c:298 msgid "where member_object is:" msgstr "メンバオブジェクトは以下の通り:" -#: sql_help.c:277 sql_help.c:1211 sql_help.c:3075 -msgid "agg_name" -msgstr "集約関数名" - -#: sql_help.c:278 sql_help.c:1212 sql_help.c:3076 -msgid "agg_type" -msgstr "集約関数の型" +#: sql_help.c:299 sql_help.c:1278 sql_help.c:3233 +msgid "aggregate_name" +msgstr "集約関数の名前" -#: sql_help.c:279 sql_help.c:1213 sql_help.c:1380 sql_help.c:1384 -#: sql_help.c:1386 sql_help.c:2283 +#: sql_help.c:301 sql_help.c:1280 sql_help.c:1516 sql_help.c:1520 +#: sql_help.c:1522 sql_help.c:2435 msgid "source_type" msgstr "ソースの型" -#: sql_help.c:280 sql_help.c:1214 sql_help.c:1381 sql_help.c:1385 -#: sql_help.c:1387 sql_help.c:2284 +#: sql_help.c:302 sql_help.c:1281 sql_help.c:1517 sql_help.c:1521 +#: sql_help.c:1523 sql_help.c:2436 msgid "target_type" msgstr "ターゲットの型" -#: sql_help.c:281 sql_help.c:282 sql_help.c:283 sql_help.c:284 sql_help.c:285 -#: sql_help.c:286 sql_help.c:291 sql_help.c:295 sql_help.c:297 sql_help.c:299 -#: sql_help.c:300 sql_help.c:301 sql_help.c:302 sql_help.c:303 sql_help.c:304 -#: sql_help.c:305 sql_help.c:306 sql_help.c:307 sql_help.c:308 sql_help.c:309 -#: sql_help.c:1215 sql_help.c:1220 sql_help.c:1221 sql_help.c:1222 -#: sql_help.c:1223 sql_help.c:1224 sql_help.c:1225 sql_help.c:1226 -#: sql_help.c:1231 sql_help.c:1233 sql_help.c:1237 sql_help.c:1239 -#: sql_help.c:1241 sql_help.c:1242 sql_help.c:1245 sql_help.c:1246 -#: sql_help.c:1247 sql_help.c:1248 sql_help.c:1249 sql_help.c:1250 -#: sql_help.c:1251 sql_help.c:1252 sql_help.c:1253 sql_help.c:1256 -#: sql_help.c:1257 sql_help.c:3072 sql_help.c:3077 sql_help.c:3078 -#: sql_help.c:3079 sql_help.c:3080 sql_help.c:3086 sql_help.c:3087 -#: sql_help.c:3088 sql_help.c:3089 sql_help.c:3090 sql_help.c:3091 -#: sql_help.c:3092 sql_help.c:3093 +#: sql_help.c:303 sql_help.c:304 sql_help.c:305 sql_help.c:306 sql_help.c:307 +#: sql_help.c:308 sql_help.c:313 sql_help.c:317 sql_help.c:319 sql_help.c:321 +#: sql_help.c:322 sql_help.c:323 sql_help.c:324 sql_help.c:325 sql_help.c:326 +#: sql_help.c:327 sql_help.c:328 sql_help.c:329 sql_help.c:330 sql_help.c:331 +#: sql_help.c:1282 sql_help.c:1287 sql_help.c:1288 sql_help.c:1289 +#: sql_help.c:1290 sql_help.c:1291 sql_help.c:1292 sql_help.c:1293 +#: sql_help.c:1298 sql_help.c:1300 sql_help.c:1304 sql_help.c:1306 +#: sql_help.c:1308 sql_help.c:1309 sql_help.c:1312 sql_help.c:1313 +#: sql_help.c:1314 sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 +#: sql_help.c:1318 sql_help.c:1319 sql_help.c:1320 sql_help.c:1323 +#: sql_help.c:1324 sql_help.c:3230 sql_help.c:3235 sql_help.c:3236 +#: sql_help.c:3237 sql_help.c:3238 sql_help.c:3244 sql_help.c:3245 +#: sql_help.c:3246 sql_help.c:3247 sql_help.c:3248 sql_help.c:3249 +#: sql_help.c:3250 sql_help.c:3251 msgid "object_name" msgstr "オブジェクト名" -#: sql_help.c:287 sql_help.c:615 sql_help.c:1227 sql_help.c:1382 -#: sql_help.c:1417 sql_help.c:1476 sql_help.c:1681 sql_help.c:1712 -#: sql_help.c:2061 sql_help.c:2717 sql_help.c:2996 sql_help.c:3081 -#: sql_help.c:3158 sql_help.c:3162 sql_help.c:3166 sql_help.c:3368 -#: sql_help.c:3372 sql_help.c:3376 sql_help.c:3529 sql_help.c:3533 -#: sql_help.c:3537 +#: sql_help.c:309 sql_help.c:665 sql_help.c:1294 sql_help.c:1518 +#: sql_help.c:1553 sql_help.c:1612 sql_help.c:1817 sql_help.c:1848 +#: sql_help.c:2207 sql_help.c:2869 sql_help.c:3148 sql_help.c:3239 +#: sql_help.c:3329 sql_help.c:3333 sql_help.c:3337 sql_help.c:3340 +#: sql_help.c:3547 sql_help.c:3551 sql_help.c:3555 sql_help.c:3558 +#: sql_help.c:3716 sql_help.c:3720 sql_help.c:3724 sql_help.c:3727 msgid "function_name" msgstr "関数名" -#: sql_help.c:288 sql_help.c:421 sql_help.c:426 sql_help.c:431 sql_help.c:436 -#: sql_help.c:1228 sql_help.c:1561 sql_help.c:2358 sql_help.c:2718 -#: sql_help.c:2997 sql_help.c:3082 -msgid "argmode" -msgstr "引数のモード" - -#: sql_help.c:289 sql_help.c:422 sql_help.c:427 sql_help.c:432 sql_help.c:437 -#: sql_help.c:1229 sql_help.c:1562 sql_help.c:2359 sql_help.c:3083 -msgid "argname" -msgstr "引数名" - -#: sql_help.c:292 sql_help.c:608 sql_help.c:1234 sql_help.c:1705 +#: sql_help.c:314 sql_help.c:658 sql_help.c:1301 sql_help.c:1841 msgid "operator_name" msgstr "演算子名" -#: sql_help.c:293 sql_help.c:563 sql_help.c:567 sql_help.c:1235 -#: sql_help.c:1682 sql_help.c:2401 +#: sql_help.c:315 sql_help.c:613 sql_help.c:617 sql_help.c:1302 +#: sql_help.c:1818 sql_help.c:2553 msgid "left_type" msgstr "左辺の型" -#: sql_help.c:294 sql_help.c:564 sql_help.c:568 sql_help.c:1236 -#: sql_help.c:1683 sql_help.c:2402 +#: sql_help.c:316 sql_help.c:614 sql_help.c:618 sql_help.c:1303 +#: sql_help.c:1819 sql_help.c:2554 msgid "right_type" msgstr "右辺の型" -#: sql_help.c:296 sql_help.c:298 sql_help.c:580 sql_help.c:583 sql_help.c:586 -#: sql_help.c:606 sql_help.c:618 sql_help.c:626 sql_help.c:629 sql_help.c:632 -#: sql_help.c:1238 sql_help.c:1240 sql_help.c:1702 sql_help.c:1723 -#: sql_help.c:1929 sql_help.c:2411 sql_help.c:2420 +#: sql_help.c:318 sql_help.c:320 sql_help.c:630 sql_help.c:633 sql_help.c:636 +#: sql_help.c:656 sql_help.c:668 sql_help.c:676 sql_help.c:679 sql_help.c:682 +#: sql_help.c:1305 sql_help.c:1307 sql_help.c:1838 sql_help.c:1859 +#: sql_help.c:2070 sql_help.c:2563 sql_help.c:2572 msgid "index_method" msgstr "インデックスメソッド" -#: sql_help.c:323 sql_help.c:1502 +#: sql_help.c:332 +msgid "and aggregate_signature is:" +msgstr "集約関数の呼出し情報は以下の通り" + +#: sql_help.c:355 sql_help.c:1638 msgid "handler_function" msgstr "ハンドラ関数" -#: sql_help.c:324 sql_help.c:1503 +#: sql_help.c:356 sql_help.c:1639 msgid "validator_function" msgstr "バリデータ関数" -#: sql_help.c:361 sql_help.c:424 sql_help.c:531 sql_help.c:812 sql_help.c:1003 -#: sql_help.c:1920 sql_help.c:1921 sql_help.c:1937 sql_help.c:1938 +#: sql_help.c:397 sql_help.c:464 sql_help.c:578 sql_help.c:879 sql_help.c:1074 +#: sql_help.c:2061 sql_help.c:2062 sql_help.c:2078 sql_help.c:2079 msgid "action" msgstr "アクション" -#: sql_help.c:363 sql_help.c:370 sql_help.c:374 sql_help.c:375 sql_help.c:377 -#: sql_help.c:379 sql_help.c:380 sql_help.c:381 sql_help.c:383 sql_help.c:386 -#: sql_help.c:388 sql_help.c:533 sql_help.c:540 sql_help.c:542 sql_help.c:545 -#: sql_help.c:547 sql_help.c:726 sql_help.c:814 sql_help.c:824 sql_help.c:828 -#: sql_help.c:829 sql_help.c:833 sql_help.c:835 sql_help.c:836 sql_help.c:837 -#: sql_help.c:839 sql_help.c:842 sql_help.c:844 sql_help.c:1099 -#: sql_help.c:1102 sql_help.c:1127 sql_help.c:1217 sql_help.c:1302 -#: sql_help.c:1307 sql_help.c:1321 sql_help.c:1322 sql_help.c:1526 -#: sql_help.c:1566 sql_help.c:1627 sql_help.c:1662 sql_help.c:1813 -#: sql_help.c:1893 sql_help.c:1906 sql_help.c:1925 sql_help.c:1927 -#: sql_help.c:1934 sql_help.c:1945 sql_help.c:1962 sql_help.c:2064 -#: sql_help.c:2205 sql_help.c:2702 sql_help.c:2703 sql_help.c:2747 -#: sql_help.c:2981 sql_help.c:2982 sql_help.c:3074 sql_help.c:3176 -#: sql_help.c:3386 sql_help.c:3426 sql_help.c:3428 sql_help.c:3445 -#: sql_help.c:3448 sql_help.c:3547 +#: sql_help.c:399 sql_help.c:406 sql_help.c:410 sql_help.c:411 sql_help.c:413 +#: sql_help.c:415 sql_help.c:416 sql_help.c:417 sql_help.c:419 sql_help.c:422 +#: sql_help.c:424 sql_help.c:580 sql_help.c:590 sql_help.c:592 sql_help.c:595 +#: sql_help.c:597 sql_help.c:776 sql_help.c:881 sql_help.c:894 sql_help.c:898 +#: sql_help.c:899 sql_help.c:903 sql_help.c:905 sql_help.c:906 sql_help.c:907 +#: sql_help.c:909 sql_help.c:912 sql_help.c:914 sql_help.c:1165 +#: sql_help.c:1168 sql_help.c:1188 sql_help.c:1284 sql_help.c:1380 +#: sql_help.c:1385 sql_help.c:1399 sql_help.c:1400 sql_help.c:1401 +#: sql_help.c:1662 sql_help.c:1702 sql_help.c:1763 sql_help.c:1798 +#: sql_help.c:1954 sql_help.c:2034 sql_help.c:2047 sql_help.c:2066 +#: sql_help.c:2068 sql_help.c:2075 sql_help.c:2086 sql_help.c:2103 +#: sql_help.c:2210 sql_help.c:2346 sql_help.c:2854 sql_help.c:2855 +#: sql_help.c:2899 sql_help.c:3133 sql_help.c:3134 sql_help.c:3232 +#: sql_help.c:3352 sql_help.c:3570 sql_help.c:3610 sql_help.c:3612 +#: sql_help.c:3629 sql_help.c:3632 sql_help.c:3739 msgid "column_name" msgstr "列名" -#: sql_help.c:364 sql_help.c:534 sql_help.c:815 +#: sql_help.c:400 sql_help.c:581 sql_help.c:882 msgid "new_column_name" msgstr "新しい列名" -#: sql_help.c:369 sql_help.c:440 sql_help.c:539 sql_help.c:823 sql_help.c:1016 +#: sql_help.c:405 sql_help.c:480 sql_help.c:589 sql_help.c:893 sql_help.c:1087 msgid "where action is one of:" msgstr "アクションは以下のいずれか:" -#: sql_help.c:371 sql_help.c:376 sql_help.c:825 sql_help.c:830 sql_help.c:1018 -#: sql_help.c:1022 sql_help.c:1456 sql_help.c:1527 sql_help.c:1701 -#: sql_help.c:1894 sql_help.c:2109 sql_help.c:2832 +#: sql_help.c:407 sql_help.c:412 sql_help.c:895 sql_help.c:900 sql_help.c:1089 +#: sql_help.c:1093 sql_help.c:1592 sql_help.c:1663 sql_help.c:1837 +#: sql_help.c:2035 sql_help.c:2255 sql_help.c:2984 msgid "data_type" msgstr "データ型" -#: sql_help.c:372 sql_help.c:826 sql_help.c:831 sql_help.c:1019 -#: sql_help.c:1023 sql_help.c:1457 sql_help.c:1530 sql_help.c:1629 -#: sql_help.c:1895 sql_help.c:2110 sql_help.c:2116 +#: sql_help.c:408 sql_help.c:896 sql_help.c:901 sql_help.c:1090 +#: sql_help.c:1094 sql_help.c:1593 sql_help.c:1666 sql_help.c:1765 +#: sql_help.c:2036 sql_help.c:2256 sql_help.c:2262 msgid "collation" msgstr "照合順序" -#: sql_help.c:373 sql_help.c:827 sql_help.c:1531 sql_help.c:1896 -#: sql_help.c:1907 +#: sql_help.c:409 sql_help.c:897 sql_help.c:1667 sql_help.c:2037 +#: sql_help.c:2048 msgid "column_constraint" msgstr "列制約" -#: sql_help.c:382 sql_help.c:541 sql_help.c:838 +#: sql_help.c:418 sql_help.c:591 sql_help.c:908 msgid "integer" msgstr "整数" -#: sql_help.c:384 sql_help.c:387 sql_help.c:543 sql_help.c:546 sql_help.c:840 -#: sql_help.c:843 +#: sql_help.c:420 sql_help.c:423 sql_help.c:593 sql_help.c:596 sql_help.c:910 +#: sql_help.c:913 msgid "attribute_option" msgstr "属性オプション" -#: sql_help.c:441 sql_help.c:1569 +#: sql_help.c:427 sql_help.c:428 sql_help.c:429 sql_help.c:430 sql_help.c:920 +#: sql_help.c:921 sql_help.c:922 sql_help.c:923 sql_help.c:1321 +msgid "trigger_name" +msgstr "トリガー名" + +#: sql_help.c:481 sql_help.c:1705 msgid "execution_cost" msgstr "実行コスト" -#: sql_help.c:442 sql_help.c:1570 +#: sql_help.c:482 sql_help.c:1706 msgid "result_rows" msgstr "結果の行数" -#: sql_help.c:457 sql_help.c:459 sql_help.c:461 +#: sql_help.c:497 sql_help.c:499 sql_help.c:501 msgid "group_name" msgstr "グループ名" -#: sql_help.c:458 sql_help.c:460 sql_help.c:1076 sql_help.c:1433 -#: sql_help.c:1789 sql_help.c:1791 sql_help.c:1794 sql_help.c:1795 -#: sql_help.c:1975 sql_help.c:2185 sql_help.c:2550 sql_help.c:3261 +#: sql_help.c:498 sql_help.c:500 sql_help.c:1147 sql_help.c:1569 +#: sql_help.c:1930 sql_help.c:1932 sql_help.c:1935 sql_help.c:1936 +#: sql_help.c:2119 sql_help.c:2331 sql_help.c:2702 sql_help.c:3437 msgid "user_name" msgstr "ユーザ名" -#: sql_help.c:476 sql_help.c:1438 sql_help.c:1633 sql_help.c:1665 -#: sql_help.c:1903 sql_help.c:1911 sql_help.c:1943 sql_help.c:1965 -#: sql_help.c:1974 sql_help.c:2729 sql_help.c:3008 +#: sql_help.c:518 sql_help.c:1574 sql_help.c:1769 sql_help.c:1801 +#: sql_help.c:2044 sql_help.c:2052 sql_help.c:2084 sql_help.c:2106 +#: sql_help.c:2118 sql_help.c:2881 sql_help.c:3160 msgid "tablespace_name" msgstr "テーブルスペース名" -#: sql_help.c:478 sql_help.c:481 sql_help.c:549 sql_help.c:551 sql_help.c:859 -#: sql_help.c:861 sql_help.c:1631 sql_help.c:1663 sql_help.c:1901 -#: sql_help.c:1909 sql_help.c:1941 sql_help.c:1963 +#: sql_help.c:520 sql_help.c:523 sql_help.c:599 sql_help.c:601 sql_help.c:929 +#: sql_help.c:931 sql_help.c:1767 sql_help.c:1799 sql_help.c:2042 +#: sql_help.c:2050 sql_help.c:2082 sql_help.c:2104 msgid "storage_parameter" msgstr "ストレージパラメーター" -#: sql_help.c:501 sql_help.c:1232 sql_help.c:3085 +#: sql_help.c:546 sql_help.c:1299 sql_help.c:3243 msgid "large_object_oid" msgstr "ラージオブジェクトのoid" -#: sql_help.c:548 sql_help.c:858 sql_help.c:869 sql_help.c:1167 +#: sql_help.c:598 sql_help.c:928 sql_help.c:937 sql_help.c:940 sql_help.c:1228 msgid "index_name" msgstr "インデックス名" -#: sql_help.c:607 sql_help.c:619 sql_help.c:1704 +#: sql_help.c:657 sql_help.c:669 sql_help.c:1840 msgid "strategy_number" msgstr "ストラテジー番号" -#: sql_help.c:609 sql_help.c:610 sql_help.c:613 sql_help.c:614 sql_help.c:620 -#: sql_help.c:621 sql_help.c:623 sql_help.c:624 sql_help.c:1706 -#: sql_help.c:1707 sql_help.c:1710 sql_help.c:1711 +#: sql_help.c:659 sql_help.c:660 sql_help.c:663 sql_help.c:664 sql_help.c:670 +#: sql_help.c:671 sql_help.c:673 sql_help.c:674 sql_help.c:1842 +#: sql_help.c:1843 sql_help.c:1846 sql_help.c:1847 msgid "op_type" msgstr "演算子の型" -#: sql_help.c:611 sql_help.c:1708 +#: sql_help.c:661 sql_help.c:1844 msgid "sort_family_name" msgstr "ソートファミリー名" -#: sql_help.c:612 sql_help.c:622 sql_help.c:1709 +#: sql_help.c:662 sql_help.c:672 sql_help.c:1845 msgid "support_number" msgstr "サポート番号" -#: sql_help.c:616 sql_help.c:1383 sql_help.c:1713 +#: sql_help.c:666 sql_help.c:1519 sql_help.c:1849 msgid "argument_type" msgstr "引数の型" -#: sql_help.c:665 sql_help.c:1055 sql_help.c:1605 sql_help.c:1754 -#: sql_help.c:2168 +#: sql_help.c:715 sql_help.c:1126 sql_help.c:1741 sql_help.c:1890 +#: sql_help.c:2314 msgid "password" msgstr "パスワード" -#: sql_help.c:666 sql_help.c:1056 sql_help.c:1606 sql_help.c:1755 -#: sql_help.c:2169 +#: sql_help.c:716 sql_help.c:1127 sql_help.c:1742 sql_help.c:1891 +#: sql_help.c:2315 msgid "timestamp" msgstr "タイムスタンプ" -#: sql_help.c:670 sql_help.c:674 sql_help.c:677 sql_help.c:680 sql_help.c:2709 -#: sql_help.c:2988 +#: sql_help.c:720 sql_help.c:724 sql_help.c:727 sql_help.c:730 sql_help.c:2861 +#: sql_help.c:3140 msgid "database_name" msgstr "データベース名" -#: sql_help.c:689 sql_help.c:725 sql_help.c:982 sql_help.c:1126 -#: sql_help.c:1166 sql_help.c:1219 sql_help.c:1244 sql_help.c:1255 -#: sql_help.c:1301 sql_help.c:1306 sql_help.c:1525 sql_help.c:1625 -#: sql_help.c:1661 sql_help.c:1773 sql_help.c:1812 sql_help.c:1892 -#: sql_help.c:1904 sql_help.c:1961 sql_help.c:2058 sql_help.c:2244 -#: sql_help.c:2445 sql_help.c:2526 sql_help.c:2699 sql_help.c:2704 -#: sql_help.c:2746 sql_help.c:2978 sql_help.c:2983 sql_help.c:3073 -#: sql_help.c:3147 sql_help.c:3149 sql_help.c:3182 sql_help.c:3221 -#: sql_help.c:3357 sql_help.c:3359 sql_help.c:3392 sql_help.c:3424 -#: sql_help.c:3444 sql_help.c:3446 sql_help.c:3447 sql_help.c:3518 -#: sql_help.c:3520 sql_help.c:3553 +#: sql_help.c:739 sql_help.c:775 sql_help.c:1053 sql_help.c:1187 +#: sql_help.c:1227 sql_help.c:1286 sql_help.c:1311 sql_help.c:1322 +#: sql_help.c:1379 sql_help.c:1384 sql_help.c:1661 sql_help.c:1761 +#: sql_help.c:1797 sql_help.c:1913 sql_help.c:1953 sql_help.c:2033 +#: sql_help.c:2045 sql_help.c:2102 sql_help.c:2204 sql_help.c:2380 +#: sql_help.c:2597 sql_help.c:2678 sql_help.c:2851 sql_help.c:2856 +#: sql_help.c:2898 sql_help.c:3130 sql_help.c:3135 sql_help.c:3231 +#: sql_help.c:3318 sql_help.c:3320 sql_help.c:3358 sql_help.c:3397 +#: sql_help.c:3536 sql_help.c:3538 sql_help.c:3576 sql_help.c:3608 +#: sql_help.c:3628 sql_help.c:3630 sql_help.c:3631 sql_help.c:3705 +#: sql_help.c:3707 sql_help.c:3745 msgid "table_name" msgstr "テーブル名" -#: sql_help.c:719 sql_help.c:1807 +#: sql_help.c:769 sql_help.c:1948 msgid "increment" msgstr "増分" -#: sql_help.c:720 sql_help.c:1808 +#: sql_help.c:770 sql_help.c:1949 msgid "minvalue" msgstr "最小値" -#: sql_help.c:721 sql_help.c:1809 +#: sql_help.c:771 sql_help.c:1950 msgid "maxvalue" msgstr "最大値" -#: sql_help.c:722 sql_help.c:1810 sql_help.c:3145 sql_help.c:3219 -#: sql_help.c:3355 sql_help.c:3464 sql_help.c:3516 +#: sql_help.c:772 sql_help.c:1951 sql_help.c:3316 sql_help.c:3395 +#: sql_help.c:3534 sql_help.c:3648 sql_help.c:3703 msgid "start" msgstr "開始値" -#: sql_help.c:723 +#: sql_help.c:773 msgid "restart" msgstr "再開始値" -#: sql_help.c:724 sql_help.c:1811 +#: sql_help.c:774 sql_help.c:1952 msgid "cache" msgstr "キャッシュ" -#: sql_help.c:845 sql_help.c:1897 sql_help.c:1908 +#: sql_help.c:915 sql_help.c:2038 sql_help.c:2049 msgid "table_constraint" msgstr "テーブル制約" -#: sql_help.c:846 +#: sql_help.c:916 msgid "table_constraint_using_index" msgstr "インデックスを使用するテーブル制約" -#: sql_help.c:850 sql_help.c:851 sql_help.c:852 sql_help.c:853 sql_help.c:1254 -msgid "trigger_name" -msgstr "トリガー名" - -#: sql_help.c:854 sql_help.c:855 sql_help.c:856 sql_help.c:857 +#: sql_help.c:924 sql_help.c:925 sql_help.c:926 sql_help.c:927 msgid "rewrite_rule_name" msgstr "書き換えルール名" -#: sql_help.c:862 sql_help.c:863 sql_help.c:1900 +#: sql_help.c:932 sql_help.c:933 sql_help.c:2041 msgid "parent_table" msgstr "親テーブル" -#: sql_help.c:864 sql_help.c:1905 sql_help.c:2731 sql_help.c:3010 +#: sql_help.c:934 sql_help.c:2046 sql_help.c:2883 sql_help.c:3162 msgid "type_name" msgstr "型名" -#: sql_help.c:867 +#: sql_help.c:938 msgid "and table_constraint_using_index is:" msgstr "またインデックスを使用するテーブルの制約条件は以下の通り:" -#: sql_help.c:885 sql_help.c:888 +#: sql_help.c:956 sql_help.c:959 sql_help.c:2121 msgid "tablespace_option" msgstr "テーブルスペース・オプション" -#: sql_help.c:909 sql_help.c:912 sql_help.c:918 sql_help.c:922 +#: sql_help.c:980 sql_help.c:983 sql_help.c:989 sql_help.c:993 msgid "token_type" msgstr "トークンの型" -#: sql_help.c:910 sql_help.c:913 +#: sql_help.c:981 sql_help.c:984 msgid "dictionary_name" msgstr "辞書名" -#: sql_help.c:915 sql_help.c:919 +#: sql_help.c:986 sql_help.c:990 msgid "old_dictionary" msgstr "元の辞書" -#: sql_help.c:916 sql_help.c:920 +#: sql_help.c:987 sql_help.c:991 msgid "new_dictionary" msgstr "新しい辞書" -#: sql_help.c:1007 sql_help.c:1017 sql_help.c:1020 sql_help.c:1021 -#: sql_help.c:2108 +#: sql_help.c:1078 sql_help.c:1088 sql_help.c:1091 sql_help.c:1092 +#: sql_help.c:2254 msgid "attribute_name" msgstr "属性名" -#: sql_help.c:1008 +#: sql_help.c:1079 msgid "new_attribute_name" msgstr "新しい属性名" -#: sql_help.c:1014 +#: sql_help.c:1085 msgid "new_enum_value" msgstr "新しい列挙値" -#: sql_help.c:1015 +#: sql_help.c:1086 msgid "existing_enum_value" msgstr "既存の列挙値" -#: sql_help.c:1077 sql_help.c:1532 sql_help.c:1823 sql_help.c:2186 -#: sql_help.c:2551 sql_help.c:2715 sql_help.c:2994 +#: sql_help.c:1148 sql_help.c:1668 sql_help.c:1964 sql_help.c:2332 +#: sql_help.c:2703 sql_help.c:2867 sql_help.c:3146 msgid "server_name" msgstr "サーバー名" -#: sql_help.c:1110 sql_help.c:1113 sql_help.c:2206 +#: sql_help.c:1176 sql_help.c:1179 sql_help.c:2347 msgid "view_option_name" msgstr "ビューのオプション名" -#: sql_help.c:1111 sql_help.c:2207 +#: sql_help.c:1177 sql_help.c:2348 msgid "view_option_value" msgstr "ビューのオプション値" -#: sql_help.c:1114 sql_help.c:2209 -#| msgid "where option can be one of:" -msgid "where view_option_name can be one of:" -msgstr "ここでview_option_nameは以下のいずれか:" - -#: sql_help.c:1115 sql_help.c:1314 sql_help.c:1315 sql_help.c:1318 -#: sql_help.c:2210 sql_help.c:2597 sql_help.c:2598 sql_help.c:2599 -#: sql_help.c:2600 sql_help.c:2601 -msgid "boolean" -msgstr "ブール値" - -#: sql_help.c:1116 sql_help.c:1258 sql_help.c:2211 -msgid "text" -msgstr "テキスト" - -#: sql_help.c:1117 sql_help.c:2212 -#| msgid "locale" -msgid "local" -msgstr "ローカル" - -#: sql_help.c:1118 sql_help.c:2213 -msgid "cascaded" -msgstr "カスケード" - -#: sql_help.c:1141 sql_help.c:3277 sql_help.c:3279 sql_help.c:3303 +#: sql_help.c:1202 sql_help.c:3453 sql_help.c:3455 sql_help.c:3479 msgid "transaction_mode" msgstr "トランザクションのモード" -#: sql_help.c:1142 sql_help.c:3280 sql_help.c:3304 +#: sql_help.c:1203 sql_help.c:3456 sql_help.c:3480 msgid "where transaction_mode is one of:" msgstr "トランザクションのモードは以下のいずれか:" -#: sql_help.c:1216 +#: sql_help.c:1283 msgid "relation_name" msgstr "拡張名" -#: sql_help.c:1243 +#: sql_help.c:1310 msgid "rule_name" msgstr "ロール名" -#: sql_help.c:1273 sql_help.c:2841 sql_help.c:3028 +#: sql_help.c:1325 +msgid "text" +msgstr "テキスト" + +#: sql_help.c:1350 sql_help.c:2993 sql_help.c:3180 msgid "transaction_id" msgstr "トランザクション ID" -#: sql_help.c:1303 sql_help.c:1309 sql_help.c:2767 +#: sql_help.c:1381 sql_help.c:1387 sql_help.c:2919 msgid "filename" msgstr "ファイル名" -#: sql_help.c:1304 sql_help.c:1310 sql_help.c:1775 sql_help.c:1776 -#: sql_help.c:1777 +#: sql_help.c:1382 sql_help.c:1388 sql_help.c:1915 sql_help.c:1916 +#: sql_help.c:1917 msgid "command" msgstr "コマンド" -#: sql_help.c:1308 sql_help.c:1666 sql_help.c:1966 sql_help.c:2208 -#: sql_help.c:2231 sql_help.c:2749 +#: sql_help.c:1386 sql_help.c:1802 sql_help.c:2107 sql_help.c:2349 +#: sql_help.c:2367 sql_help.c:2901 msgid "query" msgstr "問い合わせ" -#: sql_help.c:1312 sql_help.c:2596 +#: sql_help.c:1390 sql_help.c:2748 msgid "where option can be one of:" msgstr "オプションは以下のいずれか:" -#: sql_help.c:1313 +#: sql_help.c:1391 msgid "format_name" msgstr "フォーマット名" -#: sql_help.c:1316 +#: sql_help.c:1392 sql_help.c:1393 sql_help.c:1396 sql_help.c:2749 +#: sql_help.c:2750 sql_help.c:2751 sql_help.c:2752 sql_help.c:2753 +msgid "boolean" +msgstr "ブール値" + +#: sql_help.c:1394 msgid "delimiter_character" msgstr "区切り文字" -#: sql_help.c:1317 +#: sql_help.c:1395 msgid "null_string" msgstr "null文字列" -#: sql_help.c:1319 +#: sql_help.c:1397 msgid "quote_character" msgstr "引用符文字" -#: sql_help.c:1320 +#: sql_help.c:1398 msgid "escape_character" msgstr "エスケープ文字" -#: sql_help.c:1323 +#: sql_help.c:1402 msgid "encoding_name" msgstr "エンコーディング名" -#: sql_help.c:1349 -msgid "input_data_type" -msgstr "入力データの型" +#: sql_help.c:1459 sql_help.c:1475 sql_help.c:1478 +msgid "arg_data_type" +msgstr "入力データ型" -#: sql_help.c:1350 sql_help.c:1358 +#: sql_help.c:1460 sql_help.c:1479 sql_help.c:1487 msgid "sfunc" msgstr "状態遷移関数" -#: sql_help.c:1351 sql_help.c:1359 +#: sql_help.c:1461 sql_help.c:1480 sql_help.c:1488 msgid "state_data_type" msgstr "状態データの型" -#: sql_help.c:1352 sql_help.c:1360 +#: sql_help.c:1462 sql_help.c:1481 sql_help.c:1489 +msgid "state_data_size" +msgstr "状態データの大きさ" + +#: sql_help.c:1463 sql_help.c:1482 sql_help.c:1490 msgid "ffunc" msgstr "終了関数" -#: sql_help.c:1353 sql_help.c:1361 +#: sql_help.c:1464 sql_help.c:1483 sql_help.c:1491 msgid "initial_condition" msgstr "初期条件" -#: sql_help.c:1354 sql_help.c:1362 +#: sql_help.c:1465 sql_help.c:1492 +msgid "msfunc" +msgstr "前方状態遷移関数" + +#: sql_help.c:1466 sql_help.c:1493 +msgid "minvfunc" +msgstr "逆状態遷移関数" + +#: sql_help.c:1467 sql_help.c:1494 +msgid "mstate_data_type" +msgstr "移動集約モードでの状態データの型" + +#: sql_help.c:1468 sql_help.c:1495 +msgid "mstate_data_size" +msgstr "移動集約モードでの状態データの大きさ" + +#: sql_help.c:1469 sql_help.c:1496 +msgid "mffunc" +msgstr "移動集約モードでの終了関数" + +#: sql_help.c:1470 sql_help.c:1497 +msgid "minitial_condition" +msgstr "移動集約モードでの初期条件" + +#: sql_help.c:1471 sql_help.c:1498 msgid "sort_operator" msgstr "ソート演算子" -#: sql_help.c:1355 +#: sql_help.c:1484 msgid "or the old syntax" msgstr "または古い構文" -#: sql_help.c:1357 +#: sql_help.c:1486 msgid "base_type" msgstr "基本の型" -#: sql_help.c:1401 +#: sql_help.c:1537 msgid "locale" msgstr "ロケール" -#: sql_help.c:1402 sql_help.c:1436 +#: sql_help.c:1538 sql_help.c:1572 msgid "lc_collate" msgstr "照合順序" -#: sql_help.c:1403 sql_help.c:1437 +#: sql_help.c:1539 sql_help.c:1573 msgid "lc_ctype" msgstr "Ctype(変換演算子)" -#: sql_help.c:1405 +#: sql_help.c:1541 msgid "existing_collation" msgstr "既存の照合順序" -#: sql_help.c:1415 +#: sql_help.c:1551 msgid "source_encoding" msgstr "変換元のエンコーディング" -#: sql_help.c:1416 +#: sql_help.c:1552 msgid "dest_encoding" msgstr "変換先のエンコーディング" -#: sql_help.c:1434 sql_help.c:2001 +#: sql_help.c:1570 sql_help.c:2147 msgid "template" msgstr "テンプレート" -#: sql_help.c:1435 +#: sql_help.c:1571 msgid "encoding" msgstr "エンコーディング" -#: sql_help.c:1460 +#: sql_help.c:1596 msgid "where constraint is:" msgstr "制約条件:" -#: sql_help.c:1474 sql_help.c:1772 sql_help.c:2057 +#: sql_help.c:1610 sql_help.c:1912 sql_help.c:2203 msgid "event" msgstr "イベント" -#: sql_help.c:1475 +#: sql_help.c:1611 msgid "filter_variable" msgstr "フィルタ変数" -#: sql_help.c:1487 +#: sql_help.c:1623 msgid "extension_name" msgstr "拡張名" -#: sql_help.c:1489 +#: sql_help.c:1625 msgid "version" msgstr "バージョン" -#: sql_help.c:1490 +#: sql_help.c:1626 msgid "old_version" msgstr "古いバージョン" -#: sql_help.c:1535 sql_help.c:1912 +#: sql_help.c:1671 sql_help.c:2053 msgid "where column_constraint is:" msgstr "列制約:" -#: sql_help.c:1537 sql_help.c:1564 sql_help.c:1915 +#: sql_help.c:1673 sql_help.c:1700 sql_help.c:2056 msgid "default_expr" msgstr "デフォルトの評価式" -#: sql_help.c:1565 +#: sql_help.c:1701 msgid "rettype" msgstr "戻り値の型" -#: sql_help.c:1567 +#: sql_help.c:1703 msgid "column_type" msgstr "列の型" -#: sql_help.c:1568 sql_help.c:2265 sql_help.c:2723 sql_help.c:3002 +#: sql_help.c:1704 sql_help.c:2401 sql_help.c:2875 sql_help.c:3154 msgid "lang_name" msgstr "言語" -#: sql_help.c:1574 +#: sql_help.c:1710 msgid "definition" msgstr "定義" -#: sql_help.c:1575 +#: sql_help.c:1711 msgid "obj_file" msgstr "オブジェクトファイル名" -#: sql_help.c:1576 +#: sql_help.c:1712 msgid "link_symbol" msgstr "リンクシンボル" -#: sql_help.c:1577 +#: sql_help.c:1713 msgid "attribute" msgstr "属性" -#: sql_help.c:1612 sql_help.c:1761 sql_help.c:2175 +#: sql_help.c:1748 sql_help.c:1897 sql_help.c:2321 msgid "uid" msgstr "ユーザーID" -#: sql_help.c:1626 +#: sql_help.c:1762 msgid "method" msgstr "メソッド" -#: sql_help.c:1630 sql_help.c:1947 +#: sql_help.c:1766 sql_help.c:2088 msgid "opclass" msgstr "演算子クラス" -#: sql_help.c:1634 sql_help.c:1933 +#: sql_help.c:1770 sql_help.c:2074 msgid "predicate" msgstr "述語" -#: sql_help.c:1646 +#: sql_help.c:1782 msgid "call_handler" msgstr "呼び出しハンドラー" -#: sql_help.c:1647 +#: sql_help.c:1783 msgid "inline_handler" msgstr "インラインハンドラー" -#: sql_help.c:1648 +#: sql_help.c:1784 msgid "valfunction" msgstr "バリデータ関数" -#: sql_help.c:1684 +#: sql_help.c:1820 msgid "com_op" msgstr "交換用演算子" -#: sql_help.c:1685 +#: sql_help.c:1821 msgid "neg_op" msgstr "否定用演算子" -#: sql_help.c:1686 +#: sql_help.c:1822 msgid "res_proc" msgstr "制約手続き" -#: sql_help.c:1687 +#: sql_help.c:1823 msgid "join_proc" msgstr "JOIN手続き" -#: sql_help.c:1703 +#: sql_help.c:1839 msgid "family_name" msgstr "ファミリー名" -#: sql_help.c:1714 +#: sql_help.c:1850 msgid "storage_type" msgstr "ストレージの型" -#: sql_help.c:1774 sql_help.c:2060 sql_help.c:2247 sql_help.c:3136 -#: sql_help.c:3138 sql_help.c:3210 sql_help.c:3212 sql_help.c:3346 -#: sql_help.c:3348 sql_help.c:3431 sql_help.c:3507 sql_help.c:3509 +#: sql_help.c:1914 sql_help.c:2206 sql_help.c:2383 sql_help.c:3307 +#: sql_help.c:3309 sql_help.c:3386 sql_help.c:3388 sql_help.c:3525 +#: sql_help.c:3527 sql_help.c:3615 sql_help.c:3694 sql_help.c:3696 msgid "condition" msgstr "条件" -#: sql_help.c:1790 sql_help.c:1792 +#: sql_help.c:1918 sql_help.c:2209 +msgid "where event can be one of:" +msgstr "イベントは以下のいずれか:" + +#: sql_help.c:1931 sql_help.c:1933 msgid "schema_element" msgstr "スキーマ要素" -#: sql_help.c:1824 +#: sql_help.c:1965 msgid "server_type" msgstr "サーバーのタイプ" -#: sql_help.c:1825 +#: sql_help.c:1966 msgid "server_version" msgstr "サーバーのバージョン" -#: sql_help.c:1826 sql_help.c:2713 sql_help.c:2992 +#: sql_help.c:1967 sql_help.c:2865 sql_help.c:3144 msgid "fdw_name" msgstr "外部データラッパー" -#: sql_help.c:1898 +#: sql_help.c:2039 msgid "source_table" msgstr "ソースのテーブル" -#: sql_help.c:1899 +#: sql_help.c:2040 msgid "like_option" msgstr "LIKE オプション:" -#: sql_help.c:1916 sql_help.c:1917 sql_help.c:1926 sql_help.c:1928 -#: sql_help.c:1932 +#: sql_help.c:2057 sql_help.c:2058 sql_help.c:2067 sql_help.c:2069 +#: sql_help.c:2073 msgid "index_parameters" msgstr "インデックスのパラメーター" -#: sql_help.c:1918 sql_help.c:1935 +#: sql_help.c:2059 sql_help.c:2076 msgid "reftable" msgstr "参照テーブル" -#: sql_help.c:1919 sql_help.c:1936 +#: sql_help.c:2060 sql_help.c:2077 msgid "refcolumn" msgstr "参照列" -#: sql_help.c:1922 +#: sql_help.c:2063 msgid "and table_constraint is:" msgstr "テーブル制約:" -#: sql_help.c:1930 +#: sql_help.c:2071 msgid "exclude_element" msgstr "排他要素" -#: sql_help.c:1931 sql_help.c:3143 sql_help.c:3217 sql_help.c:3353 -#: sql_help.c:3462 sql_help.c:3514 +#: sql_help.c:2072 sql_help.c:3314 sql_help.c:3393 sql_help.c:3532 +#: sql_help.c:3646 sql_help.c:3701 msgid "operator" msgstr "演算子" -#: sql_help.c:1939 +#: sql_help.c:2080 msgid "and like_option is:" msgstr "LIKE オプション:" -#: sql_help.c:1940 +#: sql_help.c:2081 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "UNIQUE, PRIMARY KEY, EXCLUDE におけるインデックスパラメーターの制約条件:" -#: sql_help.c:1944 +#: sql_help.c:2085 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "EXCLUDE における排他要素の制約条件:" -#: sql_help.c:1976 +#: sql_help.c:2120 msgid "directory" msgstr "ディレクトリー" -#: sql_help.c:1988 +#: sql_help.c:2134 msgid "parser_name" msgstr "パーサー名" -#: sql_help.c:1989 +#: sql_help.c:2135 msgid "source_config" msgstr "ソース設定" -#: sql_help.c:2018 +#: sql_help.c:2164 msgid "start_function" msgstr "開始関数" -#: sql_help.c:2019 +#: sql_help.c:2165 msgid "gettoken_function" msgstr "トークン取得用関数" -#: sql_help.c:2020 +#: sql_help.c:2166 msgid "end_function" msgstr "終了関数" -#: sql_help.c:2021 +#: sql_help.c:2167 msgid "lextypes_function" msgstr "LEX 型の関数" -#: sql_help.c:2022 +#: sql_help.c:2168 msgid "headline_function" msgstr "見出し関数" -#: sql_help.c:2034 +#: sql_help.c:2180 msgid "init_function" msgstr "初期処理関数" -#: sql_help.c:2035 +#: sql_help.c:2181 msgid "lexize_function" msgstr "LEX 処理関数" -#: sql_help.c:2059 +#: sql_help.c:2205 msgid "referenced_table_name" msgstr "非参照テーブル名" -#: sql_help.c:2062 +#: sql_help.c:2208 msgid "arguments" msgstr "引数" -#: sql_help.c:2063 -msgid "where event can be one of:" -msgstr "イベントは以下のいずれか:" - -#: sql_help.c:2112 sql_help.c:3094 +#: sql_help.c:2258 sql_help.c:3252 msgid "label" msgstr "ラベル" -#: sql_help.c:2114 +#: sql_help.c:2260 msgid "subtype" msgstr "派生元型" -#: sql_help.c:2115 +#: sql_help.c:2261 msgid "subtype_operator_class" msgstr "派生元型の演算子クラス" -#: sql_help.c:2117 +#: sql_help.c:2263 msgid "canonical_function" msgstr "正規化関数" -#: sql_help.c:2118 +#: sql_help.c:2264 msgid "subtype_diff_function" msgstr "派生元型差異関数" -#: sql_help.c:2120 +#: sql_help.c:2266 msgid "input_function" msgstr "入力関数" -#: sql_help.c:2121 +#: sql_help.c:2267 msgid "output_function" msgstr "出力関数" -#: sql_help.c:2122 +#: sql_help.c:2268 msgid "receive_function" msgstr "受信関数" -#: sql_help.c:2123 +#: sql_help.c:2269 msgid "send_function" msgstr "送信関数" -#: sql_help.c:2124 +#: sql_help.c:2270 msgid "type_modifier_input_function" msgstr "型修飾子の入力関数" -#: sql_help.c:2125 +#: sql_help.c:2271 msgid "type_modifier_output_function" msgstr "型修飾子の出力関数" -#: sql_help.c:2126 +#: sql_help.c:2272 msgid "analyze_function" msgstr "分析関数" -#: sql_help.c:2127 +#: sql_help.c:2273 msgid "internallength" msgstr "内部長" -#: sql_help.c:2128 +#: sql_help.c:2274 msgid "alignment" msgstr "アラインメント" -#: sql_help.c:2129 +#: sql_help.c:2275 msgid "storage" msgstr "ストレージ" -#: sql_help.c:2130 +#: sql_help.c:2276 msgid "like_type" msgstr "LIKEの型" -#: sql_help.c:2131 +#: sql_help.c:2277 msgid "category" msgstr "カテゴリー" -#: sql_help.c:2132 +#: sql_help.c:2278 msgid "preferred" msgstr "推奨" -#: sql_help.c:2133 +#: sql_help.c:2279 msgid "default" msgstr "デフォルト" -#: sql_help.c:2134 +#: sql_help.c:2280 msgid "element" msgstr "要素" -#: sql_help.c:2135 +#: sql_help.c:2281 msgid "delimiter" msgstr "デリミタ" -#: sql_help.c:2136 +#: sql_help.c:2282 msgid "collatable" msgstr "照合順序" -#: sql_help.c:2243 sql_help.c:2745 sql_help.c:3131 sql_help.c:3204 -#: sql_help.c:3341 sql_help.c:3423 sql_help.c:3502 +#: sql_help.c:2379 sql_help.c:2897 sql_help.c:3302 sql_help.c:3380 +#: sql_help.c:3520 sql_help.c:3607 sql_help.c:3689 msgid "with_query" msgstr "WITH問い合わせ" -#: sql_help.c:2245 sql_help.c:3150 sql_help.c:3153 sql_help.c:3156 -#: sql_help.c:3160 sql_help.c:3164 sql_help.c:3360 sql_help.c:3363 -#: sql_help.c:3366 sql_help.c:3370 sql_help.c:3374 sql_help.c:3425 -#: sql_help.c:3521 sql_help.c:3524 sql_help.c:3527 sql_help.c:3531 -#: sql_help.c:3535 +#: sql_help.c:2381 sql_help.c:3321 sql_help.c:3324 sql_help.c:3327 +#: sql_help.c:3331 sql_help.c:3335 sql_help.c:3343 sql_help.c:3539 +#: sql_help.c:3542 sql_help.c:3545 sql_help.c:3549 sql_help.c:3553 +#: sql_help.c:3561 sql_help.c:3609 sql_help.c:3708 sql_help.c:3711 +#: sql_help.c:3714 sql_help.c:3718 sql_help.c:3722 sql_help.c:3730 msgid "alias" msgstr "別名" -#: sql_help.c:2246 +#: sql_help.c:2382 msgid "using_list" msgstr "USING リスト" -#: sql_help.c:2248 sql_help.c:2627 sql_help.c:2808 sql_help.c:3432 +#: sql_help.c:2384 sql_help.c:2779 sql_help.c:2960 sql_help.c:3616 msgid "cursor_name" msgstr "カーソル名" -#: sql_help.c:2249 sql_help.c:2750 sql_help.c:3433 +#: sql_help.c:2385 sql_help.c:2902 sql_help.c:3617 msgid "output_expression" msgstr "出力表現" -#: sql_help.c:2250 sql_help.c:2751 sql_help.c:3134 sql_help.c:3207 -#: sql_help.c:3344 sql_help.c:3434 sql_help.c:3505 +#: sql_help.c:2386 sql_help.c:2903 sql_help.c:3305 sql_help.c:3383 +#: sql_help.c:3523 sql_help.c:3618 sql_help.c:3692 msgid "output_name" msgstr "出力名" -#: sql_help.c:2266 +#: sql_help.c:2402 msgid "code" msgstr "コード" -#: sql_help.c:2575 +#: sql_help.c:2727 msgid "parameter" msgstr "パラメータ" -#: sql_help.c:2594 sql_help.c:2595 sql_help.c:2833 +#: sql_help.c:2746 sql_help.c:2747 sql_help.c:2985 msgid "statement" msgstr "ステートメント" -#: sql_help.c:2626 sql_help.c:2807 +#: sql_help.c:2778 sql_help.c:2959 msgid "direction" msgstr "方向" -#: sql_help.c:2628 sql_help.c:2809 +#: sql_help.c:2780 sql_help.c:2961 msgid "where direction can be empty or one of:" msgstr "方向は無指定もしくは以下のいずれか:" -#: sql_help.c:2629 sql_help.c:2630 sql_help.c:2631 sql_help.c:2632 -#: sql_help.c:2633 sql_help.c:2810 sql_help.c:2811 sql_help.c:2812 -#: sql_help.c:2813 sql_help.c:2814 sql_help.c:3144 sql_help.c:3146 -#: sql_help.c:3218 sql_help.c:3220 sql_help.c:3354 sql_help.c:3356 -#: sql_help.c:3463 sql_help.c:3465 sql_help.c:3515 sql_help.c:3517 +#: sql_help.c:2781 sql_help.c:2782 sql_help.c:2783 sql_help.c:2784 +#: sql_help.c:2785 sql_help.c:2962 sql_help.c:2963 sql_help.c:2964 +#: sql_help.c:2965 sql_help.c:2966 sql_help.c:3315 sql_help.c:3317 +#: sql_help.c:3394 sql_help.c:3396 sql_help.c:3533 sql_help.c:3535 +#: sql_help.c:3647 sql_help.c:3649 sql_help.c:3702 sql_help.c:3704 msgid "count" msgstr "カウント" -#: sql_help.c:2706 sql_help.c:2985 +#: sql_help.c:2858 sql_help.c:3137 msgid "sequence_name" msgstr "シーケンス名" -#: sql_help.c:2711 sql_help.c:2990 +#: sql_help.c:2863 sql_help.c:3142 msgid "domain_name" msgstr "ドメイン名" -#: sql_help.c:2719 sql_help.c:2998 +#: sql_help.c:2871 sql_help.c:3150 msgid "arg_name" msgstr "引数名" -#: sql_help.c:2720 sql_help.c:2999 +#: sql_help.c:2872 sql_help.c:3151 msgid "arg_type" msgstr "引数の型" -#: sql_help.c:2725 sql_help.c:3004 +#: sql_help.c:2877 sql_help.c:3156 msgid "loid" msgstr "ラージオブジェクトid" -#: sql_help.c:2759 sql_help.c:2822 sql_help.c:3409 +#: sql_help.c:2911 sql_help.c:2974 sql_help.c:3593 msgid "channel" msgstr "チャネル" -#: sql_help.c:2781 +#: sql_help.c:2933 msgid "lockmode" msgstr "ロックモード" -#: sql_help.c:2782 +#: sql_help.c:2934 msgid "where lockmode is one of:" msgstr "ロックモードは以下のいずれか:" -#: sql_help.c:2823 +#: sql_help.c:2975 msgid "payload" msgstr "ペイロード" -#: sql_help.c:2849 +#: sql_help.c:3001 msgid "old_role" msgstr "元のロール" -#: sql_help.c:2850 +#: sql_help.c:3002 msgid "new_role" msgstr "新しいロール" -#: sql_help.c:2875 sql_help.c:3036 sql_help.c:3044 +#: sql_help.c:3027 sql_help.c:3188 sql_help.c:3196 msgid "savepoint_name" msgstr "セーブポイント名" -#: sql_help.c:3071 +#: sql_help.c:3229 msgid "provider" msgstr "プロバイダ" -#: sql_help.c:3135 sql_help.c:3169 sql_help.c:3171 sql_help.c:3209 -#: sql_help.c:3345 sql_help.c:3379 sql_help.c:3381 sql_help.c:3506 -#: sql_help.c:3540 sql_help.c:3542 +#: sql_help.c:3306 sql_help.c:3345 sql_help.c:3347 sql_help.c:3385 +#: sql_help.c:3524 sql_help.c:3563 sql_help.c:3565 sql_help.c:3693 +#: sql_help.c:3732 sql_help.c:3734 msgid "from_item" msgstr "FROM 項目" -#: sql_help.c:3139 sql_help.c:3213 sql_help.c:3349 sql_help.c:3510 +#: sql_help.c:3310 sql_help.c:3389 sql_help.c:3528 sql_help.c:3697 msgid "window_name" msgstr "ウィンドウ名" -#: sql_help.c:3140 sql_help.c:3214 sql_help.c:3350 sql_help.c:3511 +#: sql_help.c:3311 sql_help.c:3390 sql_help.c:3529 sql_help.c:3698 msgid "window_definition" msgstr "ウィンドウ定義" -#: sql_help.c:3141 sql_help.c:3152 sql_help.c:3177 sql_help.c:3215 -#: sql_help.c:3351 sql_help.c:3362 sql_help.c:3387 sql_help.c:3512 -#: sql_help.c:3523 sql_help.c:3548 +#: sql_help.c:3312 sql_help.c:3323 sql_help.c:3353 sql_help.c:3391 +#: sql_help.c:3530 sql_help.c:3541 sql_help.c:3571 sql_help.c:3699 +#: sql_help.c:3710 sql_help.c:3740 msgid "select" -msgstr "SELECT 句" +msgstr "SELECT句" -#: sql_help.c:3148 sql_help.c:3358 sql_help.c:3519 +#: sql_help.c:3319 sql_help.c:3537 sql_help.c:3706 msgid "where from_item can be one of:" -msgstr "FROM 項目は以下のいずれか:" +msgstr "FROM項目は以下のいずれか:" -#: sql_help.c:3151 sql_help.c:3154 sql_help.c:3157 sql_help.c:3161 -#: sql_help.c:3361 sql_help.c:3364 sql_help.c:3367 sql_help.c:3371 -#: sql_help.c:3522 sql_help.c:3525 sql_help.c:3528 sql_help.c:3532 +#: sql_help.c:3322 sql_help.c:3325 sql_help.c:3328 sql_help.c:3332 +#: sql_help.c:3344 sql_help.c:3540 sql_help.c:3543 sql_help.c:3546 +#: sql_help.c:3550 sql_help.c:3562 sql_help.c:3709 sql_help.c:3712 +#: sql_help.c:3715 sql_help.c:3719 sql_help.c:3731 msgid "column_alias" msgstr "列の別名" -#: sql_help.c:3155 sql_help.c:3175 sql_help.c:3365 sql_help.c:3385 -#: sql_help.c:3526 sql_help.c:3546 +#: sql_help.c:3326 sql_help.c:3351 sql_help.c:3544 sql_help.c:3569 +#: sql_help.c:3713 sql_help.c:3738 msgid "with_query_name" msgstr "WITH問い合わせ名" -#: sql_help.c:3159 sql_help.c:3163 sql_help.c:3167 sql_help.c:3369 -#: sql_help.c:3373 sql_help.c:3377 sql_help.c:3530 sql_help.c:3534 -#: sql_help.c:3538 +#: sql_help.c:3330 sql_help.c:3334 sql_help.c:3338 sql_help.c:3341 +#: sql_help.c:3548 sql_help.c:3552 sql_help.c:3556 sql_help.c:3559 +#: sql_help.c:3717 sql_help.c:3721 sql_help.c:3725 sql_help.c:3728 msgid "argument" msgstr "引数" -#: sql_help.c:3165 sql_help.c:3168 sql_help.c:3375 sql_help.c:3378 -#: sql_help.c:3536 sql_help.c:3539 +#: sql_help.c:3336 sql_help.c:3339 sql_help.c:3342 sql_help.c:3554 +#: sql_help.c:3557 sql_help.c:3560 sql_help.c:3723 sql_help.c:3726 +#: sql_help.c:3729 msgid "column_definition" msgstr "列定義" -#: sql_help.c:3170 sql_help.c:3380 sql_help.c:3541 +#: sql_help.c:3346 sql_help.c:3564 sql_help.c:3733 msgid "join_type" msgstr "結合種類" -#: sql_help.c:3172 sql_help.c:3382 sql_help.c:3543 +#: sql_help.c:3348 sql_help.c:3566 sql_help.c:3735 msgid "join_condition" msgstr "結合条件" -#: sql_help.c:3173 sql_help.c:3383 sql_help.c:3544 +#: sql_help.c:3349 sql_help.c:3567 sql_help.c:3736 msgid "join_column" msgstr "結合列" -#: sql_help.c:3174 sql_help.c:3384 sql_help.c:3545 +#: sql_help.c:3350 sql_help.c:3568 sql_help.c:3737 msgid "and with_query is:" msgstr "WITH問い合わせ:" -#: sql_help.c:3178 sql_help.c:3388 sql_help.c:3549 +#: sql_help.c:3354 sql_help.c:3572 sql_help.c:3741 msgid "values" -msgstr "values句" +msgstr "VALUES句" -#: sql_help.c:3179 sql_help.c:3389 sql_help.c:3550 +#: sql_help.c:3355 sql_help.c:3573 sql_help.c:3742 msgid "insert" msgstr "INSERT句" -#: sql_help.c:3180 sql_help.c:3390 sql_help.c:3551 +#: sql_help.c:3356 sql_help.c:3574 sql_help.c:3743 msgid "update" msgstr "UPDATE句" -#: sql_help.c:3181 sql_help.c:3391 sql_help.c:3552 +#: sql_help.c:3357 sql_help.c:3575 sql_help.c:3744 msgid "delete" msgstr "DELETE句" -#: sql_help.c:3208 +#: sql_help.c:3384 msgid "new_table" msgstr "新しいテーブル" -#: sql_help.c:3233 +#: sql_help.c:3409 msgid "timezone" msgstr "タイムゾーン" -#: sql_help.c:3278 +#: sql_help.c:3454 msgid "snapshot_id" msgstr "スナップショットID" -#: sql_help.c:3430 +#: sql_help.c:3614 msgid "from_list" msgstr "FROM リスト" -#: sql_help.c:3461 +#: sql_help.c:3645 msgid "sort_expression" msgstr "ソート表現" -#: sql_help.h:190 sql_help.h:885 +#: sql_help.h:191 sql_help.h:891 msgid "abort the current transaction" msgstr "現在のトランザクションを中断する" -#: sql_help.h:195 +#: sql_help.h:196 msgid "change the definition of an aggregate function" msgstr "集約関数の定義を変更する" -#: sql_help.h:200 +#: sql_help.h:201 msgid "change the definition of a collation" msgstr "照合順序の定義を変更する" -#: sql_help.h:205 +#: sql_help.h:206 msgid "change the definition of a conversion" msgstr "エンコーディング変換ルールの定義を変更する" -#: sql_help.h:210 +#: sql_help.h:211 msgid "change a database" msgstr "データベースを変更する" -#: sql_help.h:215 +#: sql_help.h:216 msgid "define default access privileges" msgstr "デフォルトのアクセス権限を定義する" -#: sql_help.h:220 +#: sql_help.h:221 msgid "change the definition of a domain" msgstr "ドメインの定義を変更する" -#: sql_help.h:225 -#| msgid "change the definition of a trigger" +#: sql_help.h:226 msgid "change the definition of an event trigger" msgstr "イベントトリガの定義を変更する" -#: sql_help.h:230 +#: sql_help.h:231 msgid "change the definition of an extension" msgstr "拡張の定義を変更する" -#: sql_help.h:235 +#: sql_help.h:236 msgid "change the definition of a foreign-data wrapper" msgstr "外部データラッパーの定義を変更する" -#: sql_help.h:240 +#: sql_help.h:241 msgid "change the definition of a foreign table" msgstr "外部テーブルの定義を変更する" -#: sql_help.h:245 +#: sql_help.h:246 msgid "change the definition of a function" msgstr "関数の定義を変更する" -#: sql_help.h:250 +#: sql_help.h:251 msgid "change role name or membership" msgstr "ロールの名前またはメンバーシップを変更する" -#: sql_help.h:255 +#: sql_help.h:256 msgid "change the definition of an index" msgstr "インデックスの定義を変更する" -#: sql_help.h:260 +#: sql_help.h:261 msgid "change the definition of a procedural language" msgstr "手続き言語の定義を変更する" -#: sql_help.h:265 +#: sql_help.h:266 msgid "change the definition of a large object" msgstr "ラージオブジェクトの定義を変更する" -#: sql_help.h:270 -#| msgid "change the definition of a view" +#: sql_help.h:271 msgid "change the definition of a materialized view" msgstr "マテリアライズドビューの定義を変更する" -#: sql_help.h:275 +#: sql_help.h:276 msgid "change the definition of an operator" msgstr "演算子の定義を変更する" -#: sql_help.h:280 +#: sql_help.h:281 msgid "change the definition of an operator class" msgstr "演算子クラスの定義を変更する" -#: sql_help.h:285 +#: sql_help.h:286 msgid "change the definition of an operator family" msgstr "演算子ファミリの定義を変更する" -#: sql_help.h:290 sql_help.h:355 +#: sql_help.h:291 sql_help.h:361 msgid "change a database role" msgstr "データベースのロールを変更する" -#: sql_help.h:295 -#| msgid "change the definition of a table" +#: sql_help.h:296 msgid "change the definition of a rule" msgstr "ルールの定義を変更する" -#: sql_help.h:300 +#: sql_help.h:301 msgid "change the definition of a schema" msgstr "スキーマの定義を変更する" -#: sql_help.h:305 +#: sql_help.h:306 msgid "change the definition of a sequence generator" msgstr "シーケンスジェネレーターの定義を変更する" -#: sql_help.h:310 +#: sql_help.h:311 msgid "change the definition of a foreign server" msgstr "外部サーバーの定義を変更する" -#: sql_help.h:315 +#: sql_help.h:316 +msgid "change a server configuration parameter" +msgstr "サーバ設定パラメータを変更する" + +#: sql_help.h:321 msgid "change the definition of a table" msgstr "テーブルの定義を変更する" -#: sql_help.h:320 +#: sql_help.h:326 msgid "change the definition of a tablespace" msgstr "テーブルスペースの定義を変更する" -#: sql_help.h:325 +#: sql_help.h:331 msgid "change the definition of a text search configuration" msgstr "テキスト検索設定の定義を変更する" -#: sql_help.h:330 +#: sql_help.h:336 msgid "change the definition of a text search dictionary" msgstr "テキスト検索辞書の定義を変更する" -#: sql_help.h:335 +#: sql_help.h:341 msgid "change the definition of a text search parser" msgstr "テキスト検索パーサの定義を変更する" -#: sql_help.h:340 +#: sql_help.h:346 msgid "change the definition of a text search template" msgstr "テキスト検索テンプレートの定義を変更する" -#: sql_help.h:345 +#: sql_help.h:351 msgid "change the definition of a trigger" msgstr "トリガの定義を変更する" -#: sql_help.h:350 +#: sql_help.h:356 msgid "change the definition of a type" msgstr "型の定義を変更する" -#: sql_help.h:360 +#: sql_help.h:366 msgid "change the definition of a user mapping" msgstr "ユーザマッピングの定義を変更する" -#: sql_help.h:365 +#: sql_help.h:371 msgid "change the definition of a view" msgstr "ビューの定義を変更する" -#: sql_help.h:370 +#: sql_help.h:376 msgid "collect statistics about a database" msgstr "データベースの統計情報を収集する" -#: sql_help.h:375 sql_help.h:950 +#: sql_help.h:381 sql_help.h:956 msgid "start a transaction block" msgstr "トランザクションブロックを開始する" -#: sql_help.h:380 +#: sql_help.h:386 msgid "force a transaction log checkpoint" msgstr "トランザクションログのチェックポイントを強制設定する" -#: sql_help.h:385 +#: sql_help.h:391 msgid "close a cursor" msgstr "カーソルを閉じる" -#: sql_help.h:390 +#: sql_help.h:396 msgid "cluster a table according to an index" msgstr "インデックスに従ってテーブルをクラスタ化する" -#: sql_help.h:395 +#: sql_help.h:401 msgid "define or change the comment of an object" msgstr "オブジェクトのコメントを定義または変更する" -#: sql_help.h:400 sql_help.h:790 +#: sql_help.h:406 sql_help.h:796 msgid "commit the current transaction" msgstr "現在のトランザクションをコミットする" -#: sql_help.h:405 +#: sql_help.h:411 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "2フェーズコミットのために事前に準備されたトランザクションをコミットする" -#: sql_help.h:410 +#: sql_help.h:416 msgid "copy data between a file and a table" msgstr "ファイルとテーブル間でデータをコピーする" -#: sql_help.h:415 +#: sql_help.h:421 msgid "define a new aggregate function" msgstr "新しい集約関数を定義する" -#: sql_help.h:420 +#: sql_help.h:426 msgid "define a new cast" msgstr "新しいキャストを定義する" -#: sql_help.h:425 +#: sql_help.h:431 msgid "define a new collation" msgstr "新しい照合順序を定義する" -#: sql_help.h:430 +#: sql_help.h:436 msgid "define a new encoding conversion" msgstr "新しいエンコーディングの変換ルールを定義する" -#: sql_help.h:435 +#: sql_help.h:441 msgid "create a new database" msgstr "新しいデータベースを作成する" -#: sql_help.h:440 +#: sql_help.h:446 msgid "define a new domain" msgstr "新しいドメインを定義する" -#: sql_help.h:445 -#| msgid "define a new trigger" +#: sql_help.h:451 msgid "define a new event trigger" msgstr "新しいイベントトリガを定義する" -#: sql_help.h:450 +#: sql_help.h:456 msgid "install an extension" msgstr "拡張をインストールする" -#: sql_help.h:455 +#: sql_help.h:461 msgid "define a new foreign-data wrapper" msgstr "新しい外部データラッパーを定義する" -#: sql_help.h:460 +#: sql_help.h:466 msgid "define a new foreign table" msgstr "新しい外部テーブルを定義する" -#: sql_help.h:465 +#: sql_help.h:471 msgid "define a new function" msgstr "新しい関数を定義する" -#: sql_help.h:470 sql_help.h:505 sql_help.h:575 +#: sql_help.h:476 sql_help.h:511 sql_help.h:581 msgid "define a new database role" msgstr "データベースの新しいロールを定義する" -#: sql_help.h:475 +#: sql_help.h:481 msgid "define a new index" msgstr "新しいインデックスを定義する" -#: sql_help.h:480 +#: sql_help.h:486 msgid "define a new procedural language" msgstr "新しい手続き言語を定義する" -#: sql_help.h:485 -#| msgid "define a new view" +#: sql_help.h:491 msgid "define a new materialized view" msgstr "新しいマテリアライズドビューを定義する" -#: sql_help.h:490 +#: sql_help.h:496 msgid "define a new operator" msgstr "新しい演算子を定義する" -#: sql_help.h:495 +#: sql_help.h:501 msgid "define a new operator class" msgstr "新しい演算子クラスを定義する" -#: sql_help.h:500 +#: sql_help.h:506 msgid "define a new operator family" msgstr "新しい演算子ファミリを定義する" -#: sql_help.h:510 +#: sql_help.h:516 msgid "define a new rewrite rule" msgstr "新しい書き換えルールを定義する" -#: sql_help.h:515 +#: sql_help.h:521 msgid "define a new schema" msgstr "新しいスキーマを定義する" -#: sql_help.h:520 +#: sql_help.h:526 msgid "define a new sequence generator" msgstr "新しいシーケンスジェネレーターを定義する" -#: sql_help.h:525 +#: sql_help.h:531 msgid "define a new foreign server" msgstr "新しい外部サーバーを定義する" -#: sql_help.h:530 +#: sql_help.h:536 msgid "define a new table" msgstr "新しいテーブルを定義する" -#: sql_help.h:535 sql_help.h:915 +#: sql_help.h:541 sql_help.h:921 msgid "define a new table from the results of a query" msgstr "問い合わせ結果から新しいテーブルを生成する" -#: sql_help.h:540 +#: sql_help.h:546 msgid "define a new tablespace" msgstr "新しいテーブルスペースを定義する" -#: sql_help.h:545 +#: sql_help.h:551 msgid "define a new text search configuration" msgstr "新しいテキスト検索設定を定義する" -#: sql_help.h:550 +#: sql_help.h:556 msgid "define a new text search dictionary" msgstr "新しいテキスト検索用辞書を定義する" -#: sql_help.h:555 +#: sql_help.h:561 msgid "define a new text search parser" msgstr "新しいテキスト検索用パーサを定義する" -#: sql_help.h:560 +#: sql_help.h:566 msgid "define a new text search template" msgstr "新しいテキスト検索テンプレートを定義する" -#: sql_help.h:565 +#: sql_help.h:571 msgid "define a new trigger" msgstr "新しいトリガを定義する" -#: sql_help.h:570 +#: sql_help.h:576 msgid "define a new data type" msgstr "新しいデータ型を定義する" -#: sql_help.h:580 +#: sql_help.h:586 msgid "define a new mapping of a user to a foreign server" msgstr "外部サーバーに対してユーザの新しいマッピングを定義する" -#: sql_help.h:585 +#: sql_help.h:591 msgid "define a new view" msgstr "新しいビューを定義する" -#: sql_help.h:590 +#: sql_help.h:596 msgid "deallocate a prepared statement" msgstr "プリペアドステートメントを開放する" -#: sql_help.h:595 +#: sql_help.h:601 msgid "define a cursor" msgstr "カーソルを定義する" -#: sql_help.h:600 +#: sql_help.h:606 msgid "delete rows of a table" msgstr "テーブルの行を削除する" -#: sql_help.h:605 +#: sql_help.h:611 msgid "discard session state" msgstr "セッションの状態を破棄する" -#: sql_help.h:610 +#: sql_help.h:616 msgid "execute an anonymous code block" msgstr "無名コードブロックを実行する" -#: sql_help.h:615 +#: sql_help.h:621 msgid "remove an aggregate function" msgstr "集約関数を削除する" -#: sql_help.h:620 +#: sql_help.h:626 msgid "remove a cast" msgstr "キャストを削除する" -#: sql_help.h:625 +#: sql_help.h:631 msgid "remove a collation" msgstr "照合順序を削除する" -#: sql_help.h:630 +#: sql_help.h:636 msgid "remove a conversion" msgstr "エンコーディング変換ルールを削除する" -#: sql_help.h:635 +#: sql_help.h:641 msgid "remove a database" msgstr "データベースを削除する" -#: sql_help.h:640 +#: sql_help.h:646 msgid "remove a domain" msgstr "ドメインを削除する" -#: sql_help.h:645 -#| msgid "remove a trigger" +#: sql_help.h:651 msgid "remove an event trigger" msgstr "イベントトリガを削除する" -#: sql_help.h:650 +#: sql_help.h:656 msgid "remove an extension" msgstr "拡張を削除する" -#: sql_help.h:655 +#: sql_help.h:661 msgid "remove a foreign-data wrapper" msgstr "外部データラッパーを削除する" -#: sql_help.h:660 +#: sql_help.h:666 msgid "remove a foreign table" msgstr "外部テーブルを削除する" -#: sql_help.h:665 +#: sql_help.h:671 msgid "remove a function" msgstr "関数を削除する" -#: sql_help.h:670 sql_help.h:710 sql_help.h:775 +#: sql_help.h:676 sql_help.h:716 sql_help.h:781 msgid "remove a database role" msgstr "データベースのロールを削除する" -#: sql_help.h:675 +#: sql_help.h:681 msgid "remove an index" msgstr "インデックスを削除する" -#: sql_help.h:680 +#: sql_help.h:686 msgid "remove a procedural language" msgstr "手続き言語を削除する" -#: sql_help.h:685 -#| msgid "remove a view" +#: sql_help.h:691 msgid "remove a materialized view" msgstr "マテリアライズドビューを削除する" -#: sql_help.h:690 +#: sql_help.h:696 msgid "remove an operator" msgstr "演算子を削除する" -#: sql_help.h:695 +#: sql_help.h:701 msgid "remove an operator class" msgstr "演算子クラスを削除する" -#: sql_help.h:700 +#: sql_help.h:706 msgid "remove an operator family" msgstr "演算子ファミリを削除する" -#: sql_help.h:705 +#: sql_help.h:711 msgid "remove database objects owned by a database role" msgstr "特定のデータベースロールが所有するデータベースオブジェクトを削除する" -#: sql_help.h:715 +#: sql_help.h:721 msgid "remove a rewrite rule" msgstr "書き換えルールを削除する" -#: sql_help.h:720 +#: sql_help.h:726 msgid "remove a schema" msgstr "スキーマを削除する" -#: sql_help.h:725 +#: sql_help.h:731 msgid "remove a sequence" msgstr "シーケンスを削除する" -#: sql_help.h:730 +#: sql_help.h:736 msgid "remove a foreign server descriptor" msgstr "外部サーバー識別子を削除する" -#: sql_help.h:735 +#: sql_help.h:741 msgid "remove a table" msgstr "テーブルを削除する" -#: sql_help.h:740 +#: sql_help.h:746 msgid "remove a tablespace" msgstr "テーブルスペースを削除する" -#: sql_help.h:745 +#: sql_help.h:751 msgid "remove a text search configuration" msgstr "テキスト検索設定を削除する" -#: sql_help.h:750 +#: sql_help.h:756 msgid "remove a text search dictionary" msgstr "テキスト検索用辞書を削除する" -#: sql_help.h:755 +#: sql_help.h:761 msgid "remove a text search parser" msgstr "テキスト検索用パーサを削除する" -#: sql_help.h:760 +#: sql_help.h:766 msgid "remove a text search template" msgstr "テキスト検索用テンプレートを削除する" -#: sql_help.h:765 +#: sql_help.h:771 msgid "remove a trigger" msgstr "トリガを削除する" -#: sql_help.h:770 +#: sql_help.h:776 msgid "remove a data type" msgstr "データ型を削除する" -#: sql_help.h:780 +#: sql_help.h:786 msgid "remove a user mapping for a foreign server" msgstr "外部サーバーのユーザマッピングを削除" -#: sql_help.h:785 +#: sql_help.h:791 msgid "remove a view" msgstr "ビューを削除する" -#: sql_help.h:795 +#: sql_help.h:801 msgid "execute a prepared statement" msgstr "プリペアドステートメントを実行する" -#: sql_help.h:800 +#: sql_help.h:806 msgid "show the execution plan of a statement" msgstr "ステートメントの実行プランを表示する" -#: sql_help.h:805 +#: sql_help.h:811 msgid "retrieve rows from a query using a cursor" msgstr "カーソルを使って問い合わせから行を取り出す" -#: sql_help.h:810 +#: sql_help.h:816 msgid "define access privileges" msgstr "アクセス権限を定義する" -#: sql_help.h:815 +#: sql_help.h:821 msgid "create new rows in a table" msgstr "テーブルに新しい行を作成する" -#: sql_help.h:820 +#: sql_help.h:826 msgid "listen for a notification" msgstr "通知メッセージを監視する" -#: sql_help.h:825 +#: sql_help.h:831 msgid "load a shared library file" msgstr "共有ライブラリファイルをロードする" -#: sql_help.h:830 +#: sql_help.h:836 msgid "lock a table" msgstr "テーブルをロックする" -#: sql_help.h:835 +#: sql_help.h:841 msgid "position a cursor" msgstr "カーソルを位置付ける" -#: sql_help.h:840 +#: sql_help.h:846 msgid "generate a notification" msgstr "通知メッセージを生成する" -#: sql_help.h:845 +#: sql_help.h:851 msgid "prepare a statement for execution" msgstr "実行に先立ってステートメントを準備する" -#: sql_help.h:850 +#: sql_help.h:856 msgid "prepare the current transaction for two-phase commit" msgstr "2フェーズコミット用に現在のトランザクションを準備する" -#: sql_help.h:855 +#: sql_help.h:861 msgid "change the ownership of database objects owned by a database role" msgstr "あるデータベースロールが所有するデータベースオブジェクトの所有者を変更する" -#: sql_help.h:860 +#: sql_help.h:866 msgid "replace the contents of a materialized view" msgstr "マテリアライズドビューの内容を置き換える" -#: sql_help.h:865 +#: sql_help.h:871 msgid "rebuild indexes" msgstr "インデックスを再構築する" -#: sql_help.h:870 +#: sql_help.h:876 msgid "destroy a previously defined savepoint" msgstr "前回定義したセーブポイントを削除する" -#: sql_help.h:875 +#: sql_help.h:881 msgid "restore the value of a run-time parameter to the default value" msgstr "実行時パラメータの値をデフォルト値に戻す" -#: sql_help.h:880 +#: sql_help.h:886 msgid "remove access privileges" msgstr "アクセス権限を剥奪する" -#: sql_help.h:890 +#: sql_help.h:896 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "2フェーズコミット用に事前準備されたトランザクションをキャンセルする" -#: sql_help.h:895 +#: sql_help.h:901 msgid "roll back to a savepoint" msgstr "セーブポイントまでロールバックする" -#: sql_help.h:900 +#: sql_help.h:906 msgid "define a new savepoint within the current transaction" msgstr "現在のトランザクションに対して新しいセーブポイントを定義する" -#: sql_help.h:905 +#: sql_help.h:911 msgid "define or change a security label applied to an object" msgstr "オブジェクトに適用されるセキュリティラベルを定義または変更する" -#: sql_help.h:910 sql_help.h:955 sql_help.h:985 +#: sql_help.h:916 sql_help.h:961 sql_help.h:991 msgid "retrieve rows from a table or view" msgstr "テーブルもしくはビューから行を取り出す" -#: sql_help.h:920 +#: sql_help.h:926 msgid "change a run-time parameter" msgstr "実行時パラメータを変更する" -#: sql_help.h:925 +#: sql_help.h:931 msgid "set constraint check timing for the current transaction" msgstr "現在のトランザクションに対して制約検査のタイミングを設定する" -#: sql_help.h:930 +#: sql_help.h:936 msgid "set the current user identifier of the current session" msgstr "現在のセッションにおける現在のユーザ識別を設定する" -#: sql_help.h:935 +#: sql_help.h:941 msgid "set the session user identifier and the current user identifier of the current session" msgstr "セッションのユーザ識別、および現在のセッションにおける現在のユーザ識別を設定する" -#: sql_help.h:940 +#: sql_help.h:946 msgid "set the characteristics of the current transaction" msgstr "現在のトランザクションの特性を設定します" -#: sql_help.h:945 +#: sql_help.h:951 msgid "show the value of a run-time parameter" msgstr "実行時パラメータの値を表示する" -#: sql_help.h:960 +#: sql_help.h:966 msgid "empty a table or set of tables" msgstr "テーブルもしくはテーブルのセットを 0 件に切り詰める" -#: sql_help.h:965 +#: sql_help.h:971 msgid "stop listening for a notification" msgstr "通知メッセージの監視を中止する" -#: sql_help.h:970 +#: sql_help.h:976 msgid "update rows of a table" msgstr "テーブルの行を更新する" -#: sql_help.h:975 +#: sql_help.h:981 msgid "garbage-collect and optionally analyze a database" msgstr "ガーベジコレクションを行い、オプションでデータベースの分析をします" -#: sql_help.h:980 +#: sql_help.h:986 msgid "compute a set of rows" msgstr "行セットを計算します" -#: startup.c:167 +#: startup.c:166 #, c-format -#| msgid "%s can only be used in transaction blocks" msgid "%s: -1 can only be used in non-interactive mode\n" msgstr "%s: -1は対話式モード以外でのみ使用できます\n" -#: startup.c:269 +#: startup.c:266 #, c-format msgid "%s: could not open log file \"%s\": %s\n" msgstr "%s: ログファイル \"%s\" をオープンできません: %s\n" -#: startup.c:331 +#: startup.c:328 #, c-format msgid "" "Type \"help\" for help.\n" @@ -4340,32 +4415,42 @@ msgstr "" "\"help\" でヘルプを表示します.\n" "\n" -#: startup.c:476 +#: startup.c:471 #, c-format msgid "%s: could not set printing parameter \"%s\"\n" msgstr "%s: 表示用パラメータ \"%s\" をセットできませんでした\n" -#: startup.c:516 +#: startup.c:511 #, c-format msgid "%s: could not delete variable \"%s\"\n" msgstr "%s: 変数 \"%s\" を削除できませんでした\n" -#: startup.c:526 +#: startup.c:521 #, c-format msgid "%s: could not set variable \"%s\"\n" msgstr "%s: 変数 \"%s\" をセットできませんでした\n" -#: startup.c:569 startup.c:575 +#: startup.c:564 startup.c:570 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細は '%s --help' をごらんください\n" -#: startup.c:592 +#: startup.c:587 #, c-format msgid "%s: warning: extra command-line argument \"%s\" ignored\n" msgstr "%s: 警告:余分なコマンドラインオプション \"%s\" は無視されます\n" -#: tab-complete.c:3980 +#: startup.c:609 +#, c-format +msgid "%s: could not find own program executable\n" +msgstr "%s: 実行ファイル自体がありませんでした\n" + +#: startup.c:729 startup.c:776 startup.c:797 startup.c:834 variables.c:121 +#, c-format +msgid "unrecognized value \"%s\" for \"%s\"; assuming \"%s\"\n" +msgstr "\"%2$s\" の不明な値 \"%1$s\"。\"%3$s\"と仮定します\n" + +#: tab-complete.c:4098 #, c-format msgid "" "tab completion query failed: %s\n" @@ -4375,68 +4460,3 @@ msgstr "" "問い合わせのタブ補完に失敗: %s\n" "問い合わせは\n" "%s\n" - -#: variables.c:115 -#, c-format -msgid "unrecognized Boolean value; assuming \"on\"\n" -msgstr "不明な論理値。\"on\"と仮定します\n" - -#~ msgid "%s: pg_strdup: cannot duplicate null pointer (internal error)\n" -#~ msgstr "%s: pg_strdup: null ポインタを複製できません(内部エラー)。\n" - -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "ディレクトリを \"%s\" に変更できませんでした。" - -#~ msgid " \\l[+] list all databases\n" -#~ msgstr " \\l[+] データベースの一覧を表示する\n" - -#~ msgid " at port \"%s\"" -#~ msgstr "ポート番号:\"%s\"" - -#~ msgid "contains support for command-line editing" -#~ msgstr "コマンドライン編集機能のサポートが組み込まれています。" - -#~ msgid "\\copy: unexpected response (%d)\n" -#~ msgstr "\\copy: 予期しない応答 (%d)\n" - -#~ msgid "define a new constraint trigger" -#~ msgstr "新しい制約トリガを定義する" - -#~ msgid "new_column" -#~ msgstr "新しい列" - -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help ヘルプを表示して終了\n" - -#~ msgid " on host \"%s\"" -#~ msgstr "ホスト:\"%s\"" - -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version バージョン情報を表示して終了\n" - -#~ msgid "tablespace" -#~ msgstr "テーブルスペース" - -#~ msgid "\\copy: %s" -#~ msgstr "\\copy: %s" - -#~ msgid "schema" -#~ msgstr "スキーマ" - -#~ msgid "column" -#~ msgstr "列" - -#~ msgid "out of memory" -#~ msgstr "メモリ不足です" - -#~ msgid "data type" -#~ msgstr "データ型" - -#~ msgid "\\%s: error\n" -#~ msgstr "\\%s: エラー\n" - -#~ msgid "aggregate" -#~ msgstr "集約関数" - -#~ msgid " as user \"%s\"" -#~ msgstr "ユーザ名:\"%s\"" diff --git a/src/bin/psql/po/pt_BR.po b/src/bin/psql/po/pt_BR.po index 113c5cb5305a8..338b20f08ab32 100644 --- a/src/bin/psql/po/pt_BR.po +++ b/src/bin/psql/po/pt_BR.po @@ -1,13 +1,13 @@ # Brazilian Portuguese message translation file for psql # Copyright (C) 2009 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Euler Taveira de Oliveira , 2003-2014. +# Euler Taveira de Oliveira , 2003-2015. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-09 12:23-0300\n" +"POT-Creation-Date: 2015-09-17 22:32-0300\n" "PO-Revision-Date: 2005-11-02 10:30-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -52,14 +52,14 @@ msgstr "não pôde ler link simbólico \"%s\"" msgid "pclose failed: %s" msgstr "pclose falhou: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 command.c:321 input.c:205 mainloop.c:72 -#: mainloop.c:234 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 command.c:318 input.c:205 mainloop.c:73 +#: mainloop.c:253 #, c-format msgid "out of memory\n" msgstr "sem memória\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "não pode duplicar ponteiro nulo (erro interno)\n" @@ -69,14 +69,14 @@ msgstr "não pode duplicar ponteiro nulo (erro interno)\n" msgid "could not look up effective user ID %ld: %s" msgstr "não pôde encontrar ID de usuário efetivo %ld: %s" -#: ../../common/username.c:47 command.c:276 +#: ../../common/username.c:47 command.c:273 msgid "user does not exist" msgstr "usuário não existe" -#: ../../common/username.c:61 +#: ../../common/username.c:62 #, c-format -msgid "user name lookup failure: %s" -msgstr "falhou ao pesquisar nome de usuário: %s" +msgid "user name lookup failure: error code %lu" +msgstr "falhou ao pesquisar nome de usuário: código de erro %lu" #: ../../common/wait_error.c:47 #, c-format @@ -113,200 +113,200 @@ msgstr "processo filho foi terminado pelo sinal %d" msgid "child process exited with unrecognized status %d" msgstr "processo filho terminou com status desconhecido %d" -#: command.c:117 +#: command.c:114 #, c-format msgid "Invalid command \\%s. Try \\? for help.\n" msgstr "Comando inválido \\%s. Tente \\? para ajuda.\n" -#: command.c:119 +#: command.c:116 #, c-format msgid "invalid command \\%s\n" msgstr "comando inválido \\%s\n" -#: command.c:130 +#: command.c:127 #, c-format msgid "\\%s: extra argument \"%s\" ignored\n" msgstr "\\%s: argumento extra \"%s\" ignorado\n" -#: command.c:274 +#: command.c:271 #, c-format msgid "could not get home directory for user ID %ld: %s\n" msgstr "não pôde obter diretório base para ID de usuário %ld: %s\n" -#: command.c:292 +#: command.c:289 #, c-format msgid "\\%s: could not change directory to \"%s\": %s\n" msgstr "\\%s: não pôde mudar diretório para \"%s\": %s\n" -#: command.c:307 common.c:446 common.c:886 +#: command.c:304 common.c:442 common.c:500 common.c:962 #, c-format msgid "You are currently not connected to a database.\n" msgstr "Você não está conectado ao banco de dados.\n" -#: command.c:334 +#: command.c:331 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Você está conectado ao banco de dados \"%s\" como usuário \"%s\" via soquete em \"%s\" na porta \"%s\".\n" -#: command.c:337 +#: command.c:334 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Você está conectado ao banco de dados \"%s\" como usuário \"%s\" na máquina \"%s\" na porta \"%s\".\n" -#: command.c:538 command.c:608 command.c:1403 +#: command.c:535 command.c:605 command.c:1405 #, c-format msgid "no query buffer\n" msgstr "nenhum buffer de consulta\n" -#: command.c:571 command.c:2998 +#: command.c:568 command.c:3161 #, c-format msgid "invalid line number: %s\n" msgstr "número de linha inválido: %s\n" -#: command.c:602 +#: command.c:599 #, c-format msgid "The server (version %d.%d) does not support editing function source.\n" msgstr "O servidor (versão %d.%d) não suporta edição do código da função.\n" -#: command.c:682 +#: command.c:679 msgid "No changes" msgstr "Nenhuma alteração" -#: command.c:736 +#: command.c:733 #, c-format msgid "%s: invalid encoding name or conversion procedure not found\n" msgstr "%s: nome da codificação é inválido ou procedimento de conversão não foi encontrado\n" -#: command.c:833 command.c:883 command.c:897 command.c:914 command.c:1021 -#: command.c:1180 command.c:1383 command.c:1414 +#: command.c:830 command.c:880 command.c:894 command.c:911 command.c:1018 +#: command.c:1182 command.c:1385 command.c:1416 #, c-format msgid "\\%s: missing required argument\n" msgstr "\\%s: faltando argumento requerido\n" -#: command.c:946 +#: command.c:943 msgid "Query buffer is empty." msgstr "Buffer de consulta está vazio." -#: command.c:956 +#: command.c:953 msgid "Enter new password: " msgstr "Digite nova senha: " -#: command.c:957 +#: command.c:954 msgid "Enter it again: " msgstr "Digite-a novamente: " -#: command.c:961 +#: command.c:958 #, c-format msgid "Passwords didn't match.\n" msgstr "Senhas não correspondem.\n" -#: command.c:979 +#: command.c:976 #, c-format msgid "Password encryption failed.\n" msgstr "Criptografia de senha falhou.\n" -#: command.c:1050 command.c:1161 command.c:1388 +#: command.c:1047 command.c:1163 command.c:1390 #, c-format msgid "\\%s: error while setting variable\n" msgstr "\\%s: erro ao definir variável\n" -#: command.c:1108 +#: command.c:1110 msgid "Query buffer reset (cleared)." msgstr "Buffer de consulta reiniciado (limpo)." -#: command.c:1120 +#: command.c:1122 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Histórico escrito para arquivo \"%s\".\n" -#: command.c:1185 +#: command.c:1187 #, c-format msgid "\\%s: environment variable name must not contain \"=\"\n" msgstr "\\%s: nome de variável de ambiente não deve conter \"=\"\n" -#: command.c:1227 +#: command.c:1229 #, c-format msgid "The server (version %d.%d) does not support showing function source.\n" msgstr "O servidor (versão %d.%d) não suporta exibição do código da função.\n" -#: command.c:1233 +#: command.c:1235 #, c-format msgid "function name is required\n" msgstr "nome de função é requerido\n" -#: command.c:1368 +#: command.c:1370 msgid "Timing is on." msgstr "Tempo de execução está habilitado." -#: command.c:1370 +#: command.c:1372 msgid "Timing is off." msgstr "Tempo de execução está desabilitado." -#: command.c:1431 command.c:1451 command.c:2039 command.c:2042 command.c:2045 -#: command.c:2051 command.c:2053 command.c:2061 command.c:2071 command.c:2080 -#: command.c:2094 command.c:2111 command.c:2170 common.c:74 copy.c:333 -#: copy.c:393 copy.c:408 psqlscan.l:1676 psqlscan.l:1687 psqlscan.l:1697 +#: command.c:1433 command.c:1453 command.c:2084 command.c:2087 command.c:2090 +#: command.c:2096 command.c:2098 command.c:2106 command.c:2116 command.c:2125 +#: command.c:2139 command.c:2156 command.c:2215 common.c:74 copy.c:333 +#: copy.c:393 copy.c:408 psqlscan.l:1700 psqlscan.l:1711 psqlscan.l:1721 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" -#: command.c:1530 +#: command.c:1544 #, c-format msgid "+ opt(%d) = |%s|\n" msgstr "+ opt(%d) = |%s|\n" -#: command.c:1556 startup.c:184 +#: command.c:1570 startup.c:195 msgid "Password: " msgstr "Senha: " -#: command.c:1561 startup.c:186 +#: command.c:1575 startup.c:197 #, c-format msgid "Password for user %s: " msgstr "Senha para usuário %s: " -#: command.c:1606 +#: command.c:1622 #, c-format msgid "All connection parameters must be supplied because no database connection exists\n" msgstr "Todos os parâmetros de conexão devem ser fornecidos porque nenhuma conexão de banco de dados existe\n" -#: command.c:1692 command.c:3032 common.c:120 common.c:413 common.c:478 -#: common.c:929 common.c:954 common.c:1051 copy.c:492 copy.c:695 -#: large_obj.c:158 large_obj.c:193 large_obj.c:255 psqlscan.l:1948 +#: command.c:1740 command.c:3195 common.c:120 common.c:413 common.c:1005 +#: common.c:1030 common.c:1130 copy.c:492 copy.c:702 large_obj.c:156 +#: large_obj.c:191 large_obj.c:253 psqlscan.l:1972 #, c-format msgid "%s" msgstr "%s" -#: command.c:1696 +#: command.c:1744 #, c-format msgid "Previous connection kept\n" msgstr "Conexão anterior mantida\n" -#: command.c:1700 +#: command.c:1748 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:1733 +#: command.c:1782 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Você está conectado agora ao banco de dados \"%s\" como usuário \"%s\" via soquete em \"%s\" na porta \"%s\".\n" -#: command.c:1736 +#: command.c:1785 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Você está conectado agora ao banco de dados \"%s\" como usuário \"%s\" na máquina \"%s\" na porta \"%s\".\n" -#: command.c:1740 +#: command.c:1789 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Você está conectado agora ao banco de dados \"%s\" como usuário \"%s\".\n" -#: command.c:1774 +#: command.c:1823 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, servidor %s)\n" -#: command.c:1782 +#: command.c:1831 #, c-format msgid "" "WARNING: %s major version %d.%d, server major version %d.%d.\n" @@ -315,25 +315,24 @@ msgstr "" "AVISO: %s versão %d.%d, servidor versão %d.%d.\n" " Algumas funcionalidades do psql podem não funcionar.\n" -#: command.c:1812 +#: command.c:1865 #, c-format -msgid "SSL connection (protocol: %s, cipher: %s, bits: %d, compression: %s)\n" -msgstr "conexão SSL (protocolo: %s, cifra: %s, bits: %d, compressão: %s)\n" +msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" +msgstr "conexão SSL (protocolo: %s, cifra: %s, bits: %s, compressão: %s)\n" + +#: command.c:1866 command.c:1867 command.c:1868 +msgid "unknown" +msgstr "desconhecido" -#: command.c:1814 help.c:46 +#: command.c:1869 help.c:46 msgid "off" msgstr "desabilitado" -#: command.c:1814 help.c:46 +#: command.c:1869 help.c:46 msgid "on" msgstr "habilitado" -#: command.c:1823 -#, c-format -msgid "SSL connection (unknown cipher)\n" -msgstr "conexão SSL (cifra desconhecida)\n" - -#: command.c:1844 +#: command.c:1889 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -344,205 +343,238 @@ msgstr "" " caracteres de 8 bits podem não funcionar corretamente. Veja página de\n" " referência do psql \"Notes for Windows users\" para obter detalhes.\n" -#: command.c:1928 +#: command.c:1973 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number\n" msgstr "variável de ambiente PSQL_EDITOR_LINENUMBER_ARG deve ser definida para especificar um número de linha\n" -#: command.c:1957 +#: command.c:2002 #, c-format msgid "could not start editor \"%s\"\n" msgstr "não pôde iniciar o editor \"%s\"\n" -#: command.c:1959 +#: command.c:2004 #, c-format msgid "could not start /bin/sh\n" msgstr "não pôde iniciar /bin/sh\n" -#: command.c:1997 +#: command.c:2042 #, c-format msgid "could not locate temporary directory: %s\n" msgstr "não pôde localizar diretório temporário: %s\n" -#: command.c:2024 +#: command.c:2069 #, c-format msgid "could not open temporary file \"%s\": %s\n" msgstr "não pôde abrir arquivo temporário \"%s\": %s\n" -#: command.c:2292 +#: command.c:2377 #, c-format -msgid "\\pset: allowed formats are unaligned, aligned, wrapped, html, latex, troff-ms\n" -msgstr "\\pset: formatos permitidos são unaligned, aligned, wrapped, html, latex, troff-ms\n" +msgid "\\pset: allowed formats are unaligned, aligned, wrapped, html, asciidoc, latex, latex-longtable, troff-ms\n" +msgstr "\\pset: formatos permitidos são unaligned, aligned, wrapped, html, asciidoc, latex, latex-longtable, troff-ms\n" -#: command.c:2311 +#: command.c:2396 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" msgstr "\\pset: estilos de linha permitidos são ascii, old-ascii, unicode\n" -#: command.c:2453 command.c:2604 +#: command.c:2410 +#, fuzzy, c-format +msgid "\\pset: allowed unicode border linestyle are single, double\n" +msgstr "\\pset: estilos de linha de borda unicode permitidos são single, double\n" + +#: command.c:2423 +#, fuzzy, c-format +msgid "\\pset: allowed unicode column linestyle are single, double\n" +msgstr "\\pset: estilos de linha de coluna unicode permitidos são single, double\n" + +#: command.c:2436 +#, fuzzy, c-format +msgid "\\pset: allowed unicode header linestyle are single, double\n" +msgstr "\\pset: estilos de linha de cabeçalho unicode permitidos são single, double\n" + +#: command.c:2588 command.c:2765 #, c-format msgid "\\pset: unknown option: %s\n" msgstr "\\pset: opção desconhecida: %s\n" -#: command.c:2471 +#: command.c:2606 #, c-format msgid "Border style is %d.\n" msgstr "Estilo de borda é %d.\n" -#: command.c:2477 +#: command.c:2612 #, c-format msgid "Target width is unset.\n" msgstr "Largura não está definida.\n" -#: command.c:2479 +#: command.c:2614 #, c-format msgid "Target width is %d.\n" msgstr "Largura é %d.\n" -#: command.c:2486 +#: command.c:2621 #, c-format msgid "Expanded display is on.\n" msgstr "Exibição expandida está habilitada.\n" -#: command.c:2488 +#: command.c:2623 #, c-format msgid "Expanded display is used automatically.\n" msgstr "Exibição expandida é utilizada automaticamente.\n" -#: command.c:2490 +#: command.c:2625 #, c-format msgid "Expanded display is off.\n" msgstr "Exibição expandida está desabilitada.\n" -#: command.c:2497 command.c:2505 +#: command.c:2632 command.c:2640 #, c-format msgid "Field separator is zero byte.\n" msgstr "Separador de campos é byte zero.\n" -#: command.c:2499 +#: command.c:2634 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Separador de campos é \"%s\".\n" -#: command.c:2512 +#: command.c:2647 #, c-format msgid "Default footer is on.\n" msgstr "Rodapé padrão está habilitado.\n" -#: command.c:2514 +#: command.c:2649 #, c-format msgid "Default footer is off.\n" msgstr "Rodapé padrão está desabilitado.\n" -#: command.c:2520 +#: command.c:2655 #, c-format msgid "Output format is %s.\n" msgstr "Formato de saída é %s.\n" -#: command.c:2526 +#: command.c:2661 #, c-format msgid "Line style is %s.\n" msgstr "Estilo de linha é %s.\n" -#: command.c:2533 +#: command.c:2668 #, c-format msgid "Null display is \"%s\".\n" msgstr "Exibição nula é \"%s\".\n" -#: command.c:2541 +#: command.c:2676 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "Formato numérico baseado no idioma está habilitado.\n" -#: command.c:2543 +#: command.c:2678 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "Formato numérico baseado no idioma está desabilitado.\n" -#: command.c:2550 +#: command.c:2685 #, c-format msgid "Pager is used for long output.\n" msgstr "Paginação é usada para saída longa.\n" -#: command.c:2552 +#: command.c:2687 #, c-format msgid "Pager is always used.\n" msgstr "Paginação é sempre utilizada.\n" -#: command.c:2554 +#: command.c:2689 #, c-format msgid "Pager usage is off.\n" msgstr "Uso de paginação está desabilitado.\n" -#: command.c:2561 command.c:2571 +#: command.c:2695 +#, c-format +msgid "Pager won't be used for less than %d lines\n" +msgstr "Paginação não será utilizada para menos do que %d linhas\n" + +#: command.c:2703 command.c:2713 #, c-format msgid "Record separator is zero byte.\n" msgstr "Separador de registros é byte zero.\n" -#: command.c:2563 +#: command.c:2705 #, c-format msgid "Record separator is .\n" msgstr "Separador de registros é .\n" -#: command.c:2565 +#: command.c:2707 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Separador de registros é \"%s\".\n" -#: command.c:2578 +#: command.c:2720 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Atributos de tabela são \"%s\".\n" -#: command.c:2581 +#: command.c:2723 #, c-format msgid "Table attributes unset.\n" msgstr "Atributos de tabela não estão definidos.\n" -#: command.c:2588 +#: command.c:2730 #, c-format msgid "Title is \"%s\".\n" msgstr "Título é \"%s\".\n" -#: command.c:2590 +#: command.c:2732 #, c-format msgid "Title is unset.\n" msgstr "Título não está definido.\n" -#: command.c:2597 +#: command.c:2739 #, c-format msgid "Tuples only is on.\n" msgstr "Somente tuplas está habilitado.\n" -#: command.c:2599 +#: command.c:2741 #, c-format msgid "Tuples only is off.\n" msgstr "Somente tuplas está desabilitado.\n" -#: command.c:2750 +#: command.c:2747 command.c:2759 +#, fuzzy, c-format +msgid "Unicode border linestyle is \"%s\".\n" +msgstr "Estilo de linha de borda unicode é \"%s\".\n" + +#: command.c:2753 +#, fuzzy, c-format +msgid "Unicode column linestyle is \"%s\".\n" +msgstr "Estilo de linha de coluna unicode é \"%s\".\n" + +#: command.c:2919 #, c-format msgid "\\!: failed\n" msgstr "\\!: falhou\n" -#: command.c:2770 command.c:2828 +#: command.c:2939 common.c:548 #, c-format msgid "\\watch cannot be used with an empty query\n" msgstr "\\watch não pode ser utilizado com uma consulta vazia\n" -#: command.c:2791 +#: command.c:2960 #, c-format msgid "Watch every %lds\t%s" msgstr "Observar a cada %lds\t%s" -#: command.c:2835 -#, c-format -msgid "\\watch cannot be used with COPY\n" -msgstr "\\watch não pode ser utilizado com COPY\n" - -#: command.c:2841 +#: command.c:3011 command.c:3018 common.c:448 common.c:455 common.c:988 #, c-format -msgid "unexpected result status for \\watch\n" -msgstr "status de resultado inesperado para \\watch\n" +msgid "" +"********* QUERY **********\n" +"%s\n" +"**************************\n" +"\n" +msgstr "" +"******** CONSULTA ********\n" +"%s\n" +"**************************\n" +"\n" #: common.c:287 #, c-format @@ -564,50 +596,52 @@ msgstr "Falhou.\n" msgid "Succeeded.\n" msgstr "Sucedido.\n" -#: common.c:403 common.c:683 common.c:851 +#: common.c:403 common.c:759 common.c:927 #, c-format msgid "unexpected PQresultStatus: %d\n" msgstr "PQresultStatus inesperado: %d\n" -#: common.c:452 common.c:459 common.c:912 +#: common.c:555 #, c-format -msgid "" -"********* QUERY **********\n" -"%s\n" -"**************************\n" -"\n" -msgstr "" -"******** CONSULTA ********\n" -"%s\n" -"**************************\n" -"\n" +msgid "\\watch cannot be used with COPY\n" +msgstr "\\watch não pode ser utilizado com COPY\n" + +#: common.c:560 +#, c-format +msgid "unexpected result status for \\watch\n" +msgstr "status de resultado inesperado para \\watch\n" + +#: common.c:571 common.c:1146 +#, c-format +msgid "Time: %.3f ms\n" +msgstr "Tempo: %.3f ms\n" -#: common.c:513 +#: common.c:589 #, c-format msgid "Asynchronous notification \"%s\" with payload \"%s\" received from server process with PID %d.\n" msgstr "Notificação assíncrona \"%s\" com mensagem \"%s\" recebida do processo do servidor com PID %d.\n" -#: common.c:516 +#: common.c:592 #, c-format msgid "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "Notificação assíncrona \"%s\" recebida do processo do servidor com PID %d.\n" -#: common.c:578 +#: common.c:654 #, c-format msgid "no rows returned for \\gset\n" msgstr "nenhum registro foi retornado para \\gset\n" -#: common.c:583 +#: common.c:659 #, c-format msgid "more than one row returned for \\gset\n" msgstr "mais de um registro foi retornado para \\gset\n" -#: common.c:609 +#: common.c:685 #, c-format msgid "could not set variable \"%s\"\n" msgstr "não pôde definir variável \"%s\"\n" -#: common.c:894 +#: common.c:970 #, c-format msgid "" "***(Single step mode: verify command)*******************************************\n" @@ -618,20 +652,20 @@ msgstr "" "%s\n" "***(pressione Enter para prosseguir ou digite x e Enter para cancelar)********************\n" -#: common.c:945 +#: common.c:1021 #, c-format msgid "The server (version %d.%d) does not support savepoints for ON_ERROR_ROLLBACK.\n" msgstr "O servidor (versão %d.%d) não suporta pontos de salvamento para ON_ERROR_ROLLBACK.\n" -#: common.c:1039 +#: common.c:1075 #, c-format -msgid "unexpected transaction status (%d)\n" -msgstr "status de transação inesperado (%d)\n" +msgid "STATEMENT: %s\n" +msgstr "COMANDO: %s\n" -#: common.c:1067 +#: common.c:1118 #, c-format -msgid "Time: %.3f ms\n" -msgstr "Tempo: %.3f ms\n" +msgid "unexpected transaction status (%d)\n" +msgstr "status de transação inesperado (%d)\n" #: copy.c:98 #, c-format @@ -682,7 +716,7 @@ msgstr "transferência de dados utilizando COPY falhou: %s" msgid "canceled by user" msgstr "cancelado pelo usuário" -#: copy.c:544 +#: copy.c:545 msgid "" "Enter data to be copied followed by a newline.\n" "End with a backslash and a period on a line by itself." @@ -690,48 +724,48 @@ msgstr "" "Informe os dados a serem copiados seguido pelo caracter de nova linha.\n" "Finalize com uma barra invertida e um ponto na linha." -#: copy.c:667 +#: copy.c:674 msgid "aborted because of read failure" msgstr "interrompido devido a falha de leitura" -#: copy.c:691 +#: copy.c:698 msgid "trying to exit copy mode" msgstr "tentando sair do modo copy" -#: describe.c:71 describe.c:259 describe.c:491 describe.c:615 describe.c:758 -#: describe.c:844 describe.c:914 describe.c:2759 describe.c:2964 -#: describe.c:3054 describe.c:3299 describe.c:3436 describe.c:3665 -#: describe.c:3737 describe.c:3748 describe.c:3807 describe.c:4215 -#: describe.c:4294 +#: describe.c:71 describe.c:264 describe.c:496 describe.c:626 describe.c:769 +#: describe.c:886 describe.c:956 describe.c:2921 describe.c:3126 +#: describe.c:3216 describe.c:3461 describe.c:3598 describe.c:3827 +#: describe.c:3899 describe.c:3910 describe.c:3969 describe.c:4377 +#: describe.c:4456 msgid "Schema" msgstr "Esquema" -#: describe.c:72 describe.c:156 describe.c:164 describe.c:260 describe.c:492 -#: describe.c:616 describe.c:677 describe.c:759 describe.c:915 describe.c:2760 -#: describe.c:2886 describe.c:2965 describe.c:3055 describe.c:3134 -#: describe.c:3300 describe.c:3364 describe.c:3437 describe.c:3666 -#: describe.c:3738 describe.c:3749 describe.c:3808 describe.c:3997 -#: describe.c:4078 describe.c:4292 +#: describe.c:72 describe.c:156 describe.c:164 describe.c:265 describe.c:497 +#: describe.c:627 describe.c:688 describe.c:770 describe.c:957 describe.c:2922 +#: describe.c:3048 describe.c:3127 describe.c:3217 describe.c:3296 +#: describe.c:3462 describe.c:3526 describe.c:3599 describe.c:3828 +#: describe.c:3900 describe.c:3911 describe.c:3970 describe.c:4159 +#: describe.c:4240 describe.c:4454 msgid "Name" msgstr "Nome" -#: describe.c:73 describe.c:272 describe.c:318 describe.c:335 +#: describe.c:73 describe.c:277 describe.c:323 describe.c:340 msgid "Result data type" msgstr "Tipo de dado do resultado" -#: describe.c:81 describe.c:94 describe.c:98 describe.c:273 describe.c:319 -#: describe.c:336 +#: describe.c:81 describe.c:94 describe.c:98 describe.c:278 describe.c:324 +#: describe.c:341 msgid "Argument data types" msgstr "Tipos de dado do argumento" -#: describe.c:105 describe.c:182 describe.c:365 describe.c:534 describe.c:631 -#: describe.c:702 describe.c:917 describe.c:1486 describe.c:2564 -#: describe.c:2793 describe.c:2917 describe.c:2991 describe.c:3064 -#: describe.c:3147 describe.c:3215 describe.c:3307 describe.c:3373 -#: describe.c:3438 describe.c:3574 describe.c:3614 describe.c:3682 -#: describe.c:3741 describe.c:3750 describe.c:3809 describe.c:4023 -#: describe.c:4100 describe.c:4229 describe.c:4295 large_obj.c:291 -#: large_obj.c:301 +#: describe.c:105 describe.c:187 describe.c:370 describe.c:545 describe.c:642 +#: describe.c:713 describe.c:959 describe.c:1570 describe.c:2722 +#: describe.c:2955 describe.c:3079 describe.c:3153 describe.c:3226 +#: describe.c:3309 describe.c:3377 describe.c:3469 describe.c:3535 +#: describe.c:3600 describe.c:3736 describe.c:3776 describe.c:3844 +#: describe.c:3903 describe.c:3912 describe.c:3971 describe.c:4185 +#: describe.c:4262 describe.c:4391 describe.c:4457 large_obj.c:289 +#: large_obj.c:299 msgid "Description" msgstr "Descrição" @@ -744,9 +778,9 @@ msgstr "Lista das funções de agregação" msgid "The server (version %d.%d) does not support tablespaces.\n" msgstr "O servidor (versão %d.%d) não suporta tablespaces.\n" -#: describe.c:157 describe.c:165 describe.c:362 describe.c:678 describe.c:843 -#: describe.c:2769 describe.c:2890 describe.c:3136 describe.c:3365 -#: describe.c:3998 describe.c:4079 large_obj.c:290 +#: describe.c:157 describe.c:165 describe.c:367 describe.c:535 describe.c:689 +#: describe.c:885 describe.c:2931 describe.c:3052 describe.c:3298 +#: describe.c:3527 describe.c:4160 describe.c:4241 large_obj.c:288 msgid "Owner" msgstr "Dono" @@ -754,821 +788,848 @@ msgstr "Dono" msgid "Location" msgstr "Local" -#: describe.c:177 describe.c:2382 +#: describe.c:177 describe.c:2535 msgid "Options" msgstr "Opções" -#: describe.c:199 +#: describe.c:182 describe.c:508 describe.c:705 describe.c:2947 +#: describe.c:2951 +msgid "Size" +msgstr "Tamanho" + +#: describe.c:204 msgid "List of tablespaces" msgstr "Lista das tablespaces" -#: describe.c:236 +#: describe.c:241 #, c-format msgid "\\df only takes [antwS+] as options\n" msgstr "\\df só possui as opções [antwS+]\n" -#: describe.c:242 +#: describe.c:247 #, c-format msgid "\\df does not take a \"w\" option with server version %d.%d\n" msgstr "\\df não possui a opção \"w\" em um servidor na versão %d.%d.\n" #. translator: "agg" is short for "aggregate" -#: describe.c:275 describe.c:321 describe.c:338 +#: describe.c:280 describe.c:326 describe.c:343 msgid "agg" msgstr "agr" -#: describe.c:276 +#: describe.c:281 msgid "window" msgstr "deslizante" -#: describe.c:277 describe.c:322 describe.c:339 describe.c:1028 +#: describe.c:282 describe.c:327 describe.c:344 describe.c:1093 msgid "trigger" msgstr "gatilho" -#: describe.c:278 describe.c:323 describe.c:340 +#: describe.c:283 describe.c:328 describe.c:345 msgid "normal" msgstr "normal" -#: describe.c:279 describe.c:324 describe.c:341 describe.c:765 describe.c:853 -#: describe.c:1455 describe.c:2768 describe.c:2966 describe.c:4097 +#: describe.c:284 describe.c:329 describe.c:346 describe.c:776 describe.c:895 +#: describe.c:1539 describe.c:2930 describe.c:3128 describe.c:4259 msgid "Type" msgstr "Tipo" -#: describe.c:355 +#: describe.c:360 msgid "definer" msgstr "definidor" -#: describe.c:356 +#: describe.c:361 msgid "invoker" msgstr "invocador" -#: describe.c:357 +#: describe.c:362 msgid "Security" msgstr "Segurança" -#: describe.c:358 +#: describe.c:363 msgid "immutable" msgstr "imutável" -#: describe.c:359 +#: describe.c:364 msgid "stable" msgstr "estável" -#: describe.c:360 +#: describe.c:365 msgid "volatile" msgstr "volátil" -#: describe.c:361 +#: describe.c:366 msgid "Volatility" msgstr "Volatilidade" -#: describe.c:363 +#: describe.c:368 msgid "Language" msgstr "Linguagem" -#: describe.c:364 +#: describe.c:369 msgid "Source code" msgstr "Código fonte" -#: describe.c:462 +#: describe.c:467 msgid "List of functions" msgstr "Lista de funções" -#: describe.c:502 +#: describe.c:507 msgid "Internal name" msgstr "Nome interno" -#: describe.c:503 describe.c:694 describe.c:2785 describe.c:2789 -msgid "Size" -msgstr "Tamanho" - -#: describe.c:524 +#: describe.c:529 msgid "Elements" msgstr "Elementos" -#: describe.c:574 +#: describe.c:585 msgid "List of data types" msgstr "Lista de tipos de dado" -#: describe.c:617 +#: describe.c:628 msgid "Left arg type" msgstr "Tipo de argumento à esquerda" -#: describe.c:618 +#: describe.c:629 msgid "Right arg type" msgstr "Tipo de argumento à direita" -#: describe.c:619 +#: describe.c:630 msgid "Result type" msgstr "Tipo resultante" -#: describe.c:624 describe.c:3206 describe.c:3573 +#: describe.c:635 describe.c:3368 describe.c:3735 msgid "Function" msgstr "Função" -#: describe.c:649 +#: describe.c:660 msgid "List of operators" msgstr "Lista de operadores" -#: describe.c:679 +#: describe.c:690 msgid "Encoding" msgstr "Codificação" -#: describe.c:684 describe.c:3301 +#: describe.c:695 describe.c:3463 msgid "Collate" msgstr "Collate" -#: describe.c:685 describe.c:3302 +#: describe.c:696 describe.c:3464 msgid "Ctype" msgstr "Ctype" -#: describe.c:698 +#: describe.c:709 msgid "Tablespace" msgstr "Tablespace" -#: describe.c:720 +#: describe.c:731 msgid "List of databases" msgstr "Lista dos bancos de dados" -#: describe.c:760 describe.c:846 describe.c:2761 +#: describe.c:771 describe.c:888 describe.c:2923 msgid "table" msgstr "tabela" -#: describe.c:761 describe.c:2762 +#: describe.c:772 describe.c:2924 msgid "view" msgstr "visão" -#: describe.c:762 describe.c:2763 +#: describe.c:773 describe.c:2925 msgid "materialized view" msgstr "visão materializada" -#: describe.c:763 describe.c:848 describe.c:2765 +#: describe.c:774 describe.c:890 describe.c:2927 msgid "sequence" msgstr "sequência" -#: describe.c:764 describe.c:2767 +#: describe.c:775 describe.c:2929 msgid "foreign table" msgstr "tabela externa" -#: describe.c:776 -msgid "Column access privileges" -msgstr "Privilégios de acesso à coluna" +#: describe.c:787 +#, fuzzy +#| msgid "Column access privileges" +msgid "Column privileges" +msgstr "Privilégios de coluna" + +#: describe.c:818 +msgid "Policies" +msgstr "Políticas" -#: describe.c:802 describe.c:4439 describe.c:4443 +#: describe.c:844 describe.c:4601 describe.c:4605 msgid "Access privileges" msgstr "Privilégios de acesso" -#: describe.c:831 +#: describe.c:873 #, c-format msgid "The server (version %d.%d) does not support altering default privileges.\n" msgstr "O servidor (versão %d.%d) não suporta alteração de privilégios padrão.\n" -#: describe.c:850 +#: describe.c:892 msgid "function" msgstr "função" -#: describe.c:852 +#: describe.c:894 msgid "type" msgstr "tipo" -#: describe.c:876 +#: describe.c:918 msgid "Default access privileges" msgstr "Privilégios de acesso padrão" -#: describe.c:916 +#: describe.c:958 msgid "Object" msgstr "Objeto" -#: describe.c:930 sql_help.c:1595 -msgid "constraint" -msgstr "restrição" +#: describe.c:972 +msgid "table constraint" +msgstr "restrição de tabela" -#: describe.c:957 +#: describe.c:994 +msgid "domain constraint" +msgstr "restrição de domínio" + +#: describe.c:1022 msgid "operator class" msgstr "classe de operadores" -#: describe.c:986 +#: describe.c:1051 msgid "operator family" msgstr "família de operadores" -#: describe.c:1008 +#: describe.c:1073 msgid "rule" msgstr "regra" -#: describe.c:1050 +#: describe.c:1115 msgid "Object descriptions" msgstr "Descrições dos Objetos" -#: describe.c:1104 +#: describe.c:1169 #, c-format msgid "Did not find any relation named \"%s\".\n" msgstr "Não encontrou nenhuma relação chamada \"%s\".\n" -#: describe.c:1295 +#: describe.c:1378 #, c-format msgid "Did not find any relation with OID %s.\n" msgstr "Não encontrou nenhuma relação com OID %s.\n" -#: describe.c:1399 +#: describe.c:1483 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "Tabela unlogged \"%s.%s\"" -#: describe.c:1402 +#: describe.c:1486 #, c-format msgid "Table \"%s.%s\"" msgstr "Tabela \"%s.%s\"" -#: describe.c:1406 +#: describe.c:1490 #, c-format msgid "View \"%s.%s\"" msgstr "Visão \"%s.%s\"" -#: describe.c:1411 +#: describe.c:1495 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "Visão materializada unlogged \"%s.%s\"" -#: describe.c:1414 +#: describe.c:1498 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "Visão materializada \"%s.%s\"" -#: describe.c:1418 +#: describe.c:1502 #, c-format msgid "Sequence \"%s.%s\"" msgstr "Sequência \"%s.%s\"" -#: describe.c:1423 +#: describe.c:1507 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "Índice unlogged \"%s.%s\"" -#: describe.c:1426 +#: describe.c:1510 #, c-format msgid "Index \"%s.%s\"" msgstr "Índice \"%s.%s\"" -#: describe.c:1431 +#: describe.c:1515 #, c-format msgid "Special relation \"%s.%s\"" msgstr "Relação especial \"%s.%s\"" -#: describe.c:1435 +#: describe.c:1519 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "tabela TOAST \"%s.%s\"" -#: describe.c:1439 +#: describe.c:1523 #, c-format msgid "Composite type \"%s.%s\"" msgstr "Tipo composto \"%s.%s\"" -#: describe.c:1443 +#: describe.c:1527 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "Tabela externa \"%s.%s\"" -#: describe.c:1454 +#: describe.c:1538 msgid "Column" msgstr "Coluna" -#: describe.c:1463 +#: describe.c:1547 msgid "Modifiers" msgstr "Modificadores" -#: describe.c:1468 +#: describe.c:1552 msgid "Value" msgstr "Valor" -#: describe.c:1471 +#: describe.c:1555 msgid "Definition" msgstr "Definição" -#: describe.c:1474 describe.c:4018 describe.c:4099 describe.c:4167 -#: describe.c:4228 +#: describe.c:1558 describe.c:4180 describe.c:4261 describe.c:4329 +#: describe.c:4390 msgid "FDW Options" msgstr "Opções FDW" -#: describe.c:1478 +#: describe.c:1562 msgid "Storage" msgstr "Armazenamento" -#: describe.c:1481 +#: describe.c:1565 msgid "Stats target" msgstr "Estatísticas" -#: describe.c:1531 +#: describe.c:1615 #, c-format msgid "collate %s" msgstr "collate %s" -#: describe.c:1539 +#: describe.c:1623 msgid "not null" msgstr "não nulo" #. translator: default values of column definitions -#: describe.c:1549 +#: describe.c:1633 #, c-format msgid "default %s" msgstr "valor padrão de %s" -#: describe.c:1664 +#: describe.c:1748 msgid "primary key, " msgstr "chave primária, " -#: describe.c:1666 +#: describe.c:1750 msgid "unique, " msgstr "unicidade, " -#: describe.c:1672 +#: describe.c:1756 #, c-format msgid "for table \"%s.%s\"" msgstr "para tabela \"%s.%s\"" -#: describe.c:1676 +#: describe.c:1760 #, c-format msgid ", predicate (%s)" msgstr ", predicado (%s)" -#: describe.c:1679 +#: describe.c:1763 msgid ", clustered" msgstr ", agrupada" -#: describe.c:1682 +#: describe.c:1766 msgid ", invalid" msgstr ", inválido" -#: describe.c:1685 +#: describe.c:1769 msgid ", deferrable" msgstr ", postergável" -#: describe.c:1688 +#: describe.c:1772 msgid ", initially deferred" msgstr ", inicialmente postergada" -#: describe.c:1691 +#: describe.c:1775 msgid ", replica identity" msgstr ", identidade da réplica" -#: describe.c:1726 +#: describe.c:1810 #, c-format msgid "Owned by: %s" msgstr "Dono: %s" -#: describe.c:1786 +#: describe.c:1870 msgid "Indexes:" msgstr "Índices:" -#: describe.c:1870 +#: describe.c:1954 msgid "Check constraints:" msgstr "Restrições de verificação:" -#: describe.c:1901 +#: describe.c:1985 msgid "Foreign-key constraints:" msgstr "Restrições de chave estrangeira:" -#: describe.c:1932 +#: describe.c:2016 msgid "Referenced by:" msgstr "Referenciada por:" -#: describe.c:2014 describe.c:2064 +#: describe.c:2061 +msgid "Policies:" +msgstr "Políticas:" + +#: describe.c:2064 +msgid "Policies (Row Security Enabled): (None)" +msgstr "" + +#: describe.c:2067 +msgid "Policies (Row Security Disabled):" +msgstr "" + +#: describe.c:2167 describe.c:2217 msgid "Rules:" msgstr "Regras:" -#: describe.c:2017 +#: describe.c:2170 msgid "Disabled rules:" msgstr "Regras desabilitadas:" -#: describe.c:2020 +#: describe.c:2173 msgid "Rules firing always:" msgstr "Regras sempre disparadas:" -#: describe.c:2023 +#: describe.c:2176 msgid "Rules firing on replica only:" msgstr "Regras somente disparadas na réplica:" -#: describe.c:2047 +#: describe.c:2200 msgid "View definition:" msgstr "Definição da visão:" -#: describe.c:2182 +#: describe.c:2335 msgid "Triggers:" msgstr "Gatilhos:" -#: describe.c:2186 +#: describe.c:2339 msgid "Disabled user triggers:" msgstr "Gatilhos de usuário desabilitados:" -#: describe.c:2188 +#: describe.c:2341 msgid "Disabled triggers:" msgstr "Gatilhos desabilitados:" -#: describe.c:2191 +#: describe.c:2344 msgid "Disabled internal triggers:" msgstr "Gatilhos internos desabilitados:" -#: describe.c:2194 +#: describe.c:2347 msgid "Triggers firing always:" msgstr "Gatilhos sempre disparados:" -#: describe.c:2197 +#: describe.c:2350 msgid "Triggers firing on replica only:" msgstr "Gatilhos disparados somente na réplica:" -#: describe.c:2276 +#: describe.c:2429 msgid "Inherits" msgstr "Heranças" -#: describe.c:2315 +#: describe.c:2468 #, c-format msgid "Number of child tables: %d (Use \\d+ to list them.)" msgstr "Número de tabelas descendentes: %d (Utilize \\d+ para listá-las.)" -#: describe.c:2322 +#: describe.c:2475 msgid "Child tables" msgstr "Tabelas descendentes" -#: describe.c:2344 +#: describe.c:2497 #, c-format msgid "Typed table of type: %s" msgstr "Tabela protótipo de tipo: %s" -#: describe.c:2358 +#: describe.c:2511 msgid "Replica Identity" msgstr "Identidade da Réplica" -#: describe.c:2371 +#: describe.c:2524 msgid "Has OIDs: yes" msgstr "Têm OIDs: sim" -#: describe.c:2460 +#: describe.c:2613 #, c-format msgid "Tablespace: \"%s\"" msgstr "Tablespace: \"%s\"" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:2472 +#: describe.c:2625 #, c-format msgid ", tablespace \"%s\"" msgstr ", tablespace \"%s\"" -#: describe.c:2557 +#: describe.c:2715 msgid "List of roles" msgstr "Lista de roles" -#: describe.c:2559 +#: describe.c:2717 msgid "Role name" msgstr "Nome da role" -#: describe.c:2560 +#: describe.c:2718 msgid "Attributes" msgstr "Atributos" -#: describe.c:2561 +#: describe.c:2719 msgid "Member of" msgstr "Membro de" -#: describe.c:2572 +#: describe.c:2730 msgid "Superuser" msgstr "Super-usuário" -#: describe.c:2575 +#: describe.c:2733 msgid "No inheritance" msgstr "Nenhuma herança" -#: describe.c:2578 +#: describe.c:2736 msgid "Create role" msgstr "Cria role" -#: describe.c:2581 +#: describe.c:2739 msgid "Create DB" msgstr "Cria BD" -#: describe.c:2584 +#: describe.c:2742 msgid "Cannot login" msgstr "Não pode efetuar login" -#: describe.c:2588 +#: describe.c:2746 msgid "Replication" msgstr "Replicação" -#: describe.c:2597 +#: describe.c:2750 +msgid "Bypass RLS" +msgstr "" + +#: describe.c:2759 msgid "No connections" msgstr "Nenhuma conexão" -#: describe.c:2599 +#: describe.c:2761 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d conexão" msgstr[1] "%d conexões" -#: describe.c:2609 +#: describe.c:2771 msgid "Password valid until " msgstr "Senha valida até " -#: describe.c:2665 +#: describe.c:2827 msgid "Role" msgstr "Role" -#: describe.c:2666 +#: describe.c:2828 msgid "Database" msgstr "Banco de Dados" -#: describe.c:2667 +#: describe.c:2829 msgid "Settings" msgstr "Definições" -#: describe.c:2677 +#: describe.c:2839 #, c-format msgid "No per-database role settings support in this server version.\n" msgstr "Nenhum suporte a configurações de roles por banco de dados nesta versão do servidor.\n" -#: describe.c:2688 +#: describe.c:2850 #, c-format msgid "No matching settings found.\n" msgstr "Nenhuma configuração correspondente foi encontrada.\n" -#: describe.c:2690 +#: describe.c:2852 #, c-format msgid "No settings found.\n" msgstr "Nenhuma configuração foi encontrada.\n" -#: describe.c:2695 +#: describe.c:2857 msgid "List of settings" msgstr "Lista de configurações" -#: describe.c:2764 +#: describe.c:2926 msgid "index" msgstr "índice" -#: describe.c:2766 +#: describe.c:2928 msgid "special" msgstr "especial" -#: describe.c:2774 describe.c:4216 +#: describe.c:2936 describe.c:4378 msgid "Table" msgstr "Tabela" -#: describe.c:2850 +#: describe.c:3012 #, c-format msgid "No matching relations found.\n" msgstr "Nenhuma relação correspondente foi encontrada.\n" -#: describe.c:2852 +#: describe.c:3014 #, c-format msgid "No relations found.\n" msgstr "Nenhuma relação foi encontrada.\n" -#: describe.c:2857 +#: describe.c:3019 msgid "List of relations" msgstr "Lista de relações" -#: describe.c:2894 +#: describe.c:3056 msgid "Trusted" msgstr "Confiável" -#: describe.c:2902 +#: describe.c:3064 msgid "Internal Language" msgstr "Linguagem Interna" -#: describe.c:2903 +#: describe.c:3065 msgid "Call Handler" msgstr "Manipulador de Chamada" -#: describe.c:2904 describe.c:4005 +#: describe.c:3066 describe.c:4167 msgid "Validator" msgstr "Validador" -#: describe.c:2907 +#: describe.c:3069 msgid "Inline Handler" msgstr "Manipulador de Código Embutido" -#: describe.c:2935 +#: describe.c:3097 msgid "List of languages" msgstr "Lista de linguagens" -#: describe.c:2979 +#: describe.c:3141 msgid "Modifier" msgstr "Modificador" -#: describe.c:2980 +#: describe.c:3142 msgid "Check" msgstr "Verificação" -#: describe.c:3022 +#: describe.c:3184 msgid "List of domains" msgstr "Lista de domínios" -#: describe.c:3056 +#: describe.c:3218 msgid "Source" msgstr "Fonte" -#: describe.c:3057 +#: describe.c:3219 msgid "Destination" msgstr "Destino" -#: describe.c:3058 describe.c:3207 +#: describe.c:3220 describe.c:3369 msgid "no" msgstr "não" -#: describe.c:3058 describe.c:3209 +#: describe.c:3220 describe.c:3371 msgid "yes" msgstr "sim" -#: describe.c:3059 +#: describe.c:3221 msgid "Default?" msgstr "Padrão?" -#: describe.c:3096 +#: describe.c:3258 msgid "List of conversions" msgstr "Lista de conversões" -#: describe.c:3135 +#: describe.c:3297 msgid "Event" msgstr "Evento" -#: describe.c:3137 +#: describe.c:3299 msgid "enabled" msgstr "habilitado" -#: describe.c:3138 +#: describe.c:3300 msgid "replica" msgstr "réplica" -#: describe.c:3139 +#: describe.c:3301 msgid "always" msgstr "sempre" -#: describe.c:3140 +#: describe.c:3302 msgid "disabled" msgstr "desabilitado" -#: describe.c:3141 +#: describe.c:3303 msgid "Enabled" msgstr "Habilitado" -#: describe.c:3142 +#: describe.c:3304 msgid "Procedure" msgstr "Procedimento" -#: describe.c:3143 +#: describe.c:3305 msgid "Tags" msgstr "Marcadores" -#: describe.c:3162 +#: describe.c:3324 msgid "List of event triggers" msgstr "Lista de gatilhos de eventos" -#: describe.c:3204 +#: describe.c:3366 msgid "Source type" msgstr "Tipo fonte" -#: describe.c:3205 +#: describe.c:3367 msgid "Target type" msgstr "Tipo alvo" -#: describe.c:3208 +#: describe.c:3370 msgid "in assignment" msgstr "em atribuição" -#: describe.c:3210 +#: describe.c:3372 msgid "Implicit?" msgstr "Implícito?" -#: describe.c:3261 +#: describe.c:3423 msgid "List of casts" msgstr "Lista de conversões de tipos" -#: describe.c:3287 +#: describe.c:3449 #, c-format msgid "The server (version %d.%d) does not support collations.\n" msgstr "O servidor (versão %d.%d) não suporta ordenações.\n" -#: describe.c:3337 +#: describe.c:3499 msgid "List of collations" msgstr "Lista de ordenações" -#: describe.c:3396 +#: describe.c:3558 msgid "List of schemas" msgstr "Lista de esquemas" -#: describe.c:3419 describe.c:3654 describe.c:3722 describe.c:3790 +#: describe.c:3581 describe.c:3816 describe.c:3884 describe.c:3952 #, c-format msgid "The server (version %d.%d) does not support full text search.\n" msgstr "O servidor (versão %d.%d) não suporta busca textual.\n" -#: describe.c:3453 +#: describe.c:3615 msgid "List of text search parsers" msgstr "Lista de analisadores de busca textual" -#: describe.c:3496 +#: describe.c:3658 #, c-format msgid "Did not find any text search parser named \"%s\".\n" msgstr "Não encontrou nenhum analisador de busca textual chamado \"%s\".\n" -#: describe.c:3571 +#: describe.c:3733 msgid "Start parse" msgstr "Iniciar análise" -#: describe.c:3572 +#: describe.c:3734 msgid "Method" msgstr "Método" -#: describe.c:3576 +#: describe.c:3738 msgid "Get next token" msgstr "Obter próximo elemento" -#: describe.c:3578 +#: describe.c:3740 msgid "End parse" msgstr "Terminar análise" -#: describe.c:3580 +#: describe.c:3742 msgid "Get headline" msgstr "Obter destaque" -#: describe.c:3582 +#: describe.c:3744 msgid "Get token types" msgstr "Obter tipos de elemento" -#: describe.c:3592 +#: describe.c:3754 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Analisador de busca textual \"%s.%s\"" -#: describe.c:3594 +#: describe.c:3756 #, c-format msgid "Text search parser \"%s\"" msgstr "Analisador de busca textual \"%s\"" -#: describe.c:3613 +#: describe.c:3775 msgid "Token name" msgstr "Nome do elemento" -#: describe.c:3624 +#: describe.c:3786 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Tipos de elemento para analisador \"%s.%s\"" -#: describe.c:3626 +#: describe.c:3788 #, c-format msgid "Token types for parser \"%s\"" msgstr "Tipos de elemento para analisador \"%s\"" -#: describe.c:3676 +#: describe.c:3838 msgid "Template" msgstr "Modelo" -#: describe.c:3677 +#: describe.c:3839 msgid "Init options" msgstr "Opções de inicialização" -#: describe.c:3699 +#: describe.c:3861 msgid "List of text search dictionaries" msgstr "Lista de dicionários de busca textual" -#: describe.c:3739 +#: describe.c:3901 msgid "Init" msgstr "Inicializador" -#: describe.c:3740 +#: describe.c:3902 msgid "Lexize" msgstr "Lexize" -#: describe.c:3767 +#: describe.c:3929 msgid "List of text search templates" msgstr "Lista de modelos de busca textual" -#: describe.c:3824 +#: describe.c:3986 msgid "List of text search configurations" msgstr "Lista de configurações de busca textual" -#: describe.c:3868 +#: describe.c:4030 #, c-format msgid "Did not find any text search configuration named \"%s\".\n" msgstr "Não encontrou nenhuma configuração de busca textual chamada \"%s\".\n" -#: describe.c:3934 +#: describe.c:4096 msgid "Token" msgstr "Elemento" -#: describe.c:3935 +#: describe.c:4097 msgid "Dictionaries" msgstr "Dicionários" -#: describe.c:3946 +#: describe.c:4108 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Configuração de busca textual \"%s.%s\"" -#: describe.c:3949 +#: describe.c:4111 #, c-format msgid "Text search configuration \"%s\"" msgstr "Configuração de busca textual \"%s\"" -#: describe.c:3953 +#: describe.c:4115 #, c-format msgid "" "\n" @@ -1577,7 +1638,7 @@ msgstr "" "\n" "Analisador: \"%s.%s\"" -#: describe.c:3956 +#: describe.c:4118 #, c-format msgid "" "\n" @@ -1586,96 +1647,96 @@ msgstr "" "\n" "Analisador: \"%s\"" -#: describe.c:3988 +#: describe.c:4150 #, c-format msgid "The server (version %d.%d) does not support foreign-data wrappers.\n" msgstr "O servidor (versão %d.%d) não suporta adaptadores de dados externos.\n" -#: describe.c:4002 +#: describe.c:4164 msgid "Handler" msgstr "Manipulador" -#: describe.c:4045 +#: describe.c:4207 msgid "List of foreign-data wrappers" msgstr "Lista de adaptadores de dados externos" -#: describe.c:4068 +#: describe.c:4230 #, c-format msgid "The server (version %d.%d) does not support foreign servers.\n" msgstr "O servidor (versão %d.%d) não suporta servidores externos.\n" -#: describe.c:4080 +#: describe.c:4242 msgid "Foreign-data wrapper" msgstr "Adaptador de dados externos" -#: describe.c:4098 describe.c:4293 +#: describe.c:4260 describe.c:4455 msgid "Version" msgstr "Versão" -#: describe.c:4124 +#: describe.c:4286 msgid "List of foreign servers" msgstr "Lista de servidores externos" -#: describe.c:4147 +#: describe.c:4309 #, c-format msgid "The server (version %d.%d) does not support user mappings.\n" msgstr "O servidor (versão %d.%d) não suporta mapeamentos de usuários.\n" -#: describe.c:4156 describe.c:4217 +#: describe.c:4318 describe.c:4379 msgid "Server" msgstr "Servidor" -#: describe.c:4157 +#: describe.c:4319 msgid "User name" msgstr "Nome de usuário" -#: describe.c:4182 +#: describe.c:4344 msgid "List of user mappings" msgstr "Lista de mapeamentos de usuários" -#: describe.c:4205 +#: describe.c:4367 #, c-format msgid "The server (version %d.%d) does not support foreign tables.\n" msgstr "O servidor (versão %d.%d) não suporta tabelas externas.\n" -#: describe.c:4256 +#: describe.c:4418 msgid "List of foreign tables" msgstr "Lista de tabelas externas" -#: describe.c:4279 describe.c:4333 +#: describe.c:4441 describe.c:4495 #, c-format msgid "The server (version %d.%d) does not support extensions.\n" msgstr "O servidor (versão %d.%d) não suporta extensões.\n" -#: describe.c:4310 +#: describe.c:4472 msgid "List of installed extensions" msgstr "Lista de extensões instaladas" -#: describe.c:4360 +#: describe.c:4522 #, c-format msgid "Did not find any extension named \"%s\".\n" msgstr "Não encontrou nenhuma extensão chamada \"%s\".\n" -#: describe.c:4363 +#: describe.c:4525 #, c-format msgid "Did not find any extensions.\n" msgstr "Não encontrou nenhuma extensão.\n" -#: describe.c:4407 +#: describe.c:4569 msgid "Object Description" msgstr "Descrição do Objeto" -#: describe.c:4416 +#: describe.c:4578 #, c-format msgid "Objects in extension \"%s\"" msgstr "Objetos na extensão \"%s\"" -#: help.c:62 +#: help.c:63 #, c-format msgid "%s\n" msgstr "%s\n" -#: help.c:67 +#: help.c:70 #, c-format msgid "" "psql is the PostgreSQL interactive terminal.\n" @@ -1684,12 +1745,12 @@ msgstr "" "psql é o terminal iterativo do PostgreSQL.\n" "\n" -#: help.c:68 +#: help.c:71 help.c:314 help.c:347 help.c:374 #, c-format msgid "Usage:\n" msgstr "Uso:\n" -#: help.c:69 +#: help.c:72 #, c-format msgid "" " psql [OPTION]... [DBNAME [USERNAME]]\n" @@ -1698,51 +1759,55 @@ msgstr "" " psql [OPÇÃO]... [NOMEBD [USUÁRIO]]\n" "\n" -#: help.c:71 +#: help.c:74 #, c-format msgid "General options:\n" msgstr "Opções gerais:\n" -#: help.c:76 +#: help.c:79 #, c-format msgid " -c, --command=COMMAND run only single command (SQL or internal) and exit\n" msgstr " -c, --command=COMANDO executa somente um comando (SQL ou interno) e termina\n" -#: help.c:77 +#: help.c:80 #, c-format msgid " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" msgstr " -d, --dbname=NOMEBD nome do banco de dados ao qual quer se conectar (padrão: \"%s\")\n" -#: help.c:78 +#: help.c:81 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" msgstr " -f, --file=ARQUIVO executa comandos de um arquivo e termina\n" -#: help.c:79 +#: help.c:82 #, c-format msgid " -l, --list list available databases, then exit\n" msgstr " -l, --list lista os bancos de dados disponíveis e termina\n" -#: help.c:80 -#, c-format +#: help.c:83 +#, fuzzy, c-format +#| msgid "" +#| " -v, --set=, --variable=NAME=VALUE\n" +#| " set psql variable NAME to VALUE\n" msgid "" " -v, --set=, --variable=NAME=VALUE\n" " set psql variable NAME to VALUE\n" +" (e.g., -v ON_ERROR_STOP=1)\n" msgstr "" " -v, --set=, --variable=NOME=VALOR\n" " define variável do psql NOME como VALOR\n" -#: help.c:82 +#: help.c:86 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informação sobre a versão e termina\n" -#: help.c:83 +#: help.c:87 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr " -X, --no-psqlrc não lê o arquivo de inicialização (~/.psqlrc)\n" -#: help.c:84 +#: help.c:88 #, c-format msgid "" " -1 (\"one\"), --single-transaction\n" @@ -1751,12 +1816,24 @@ msgstr "" " -1 (\"um\"), --single-transaction\n" " executa como uma transação única (se não interativo)\n" -#: help.c:86 -#, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help mostra essa ajuda e termina\n" +#: help.c:90 +#, fuzzy, c-format +msgid " -?, --help[=options] show this help, then exit\n" +msgstr " -?, --help[=opções] mostra essa ajuda e termina\n" -#: help.c:88 +#: help.c:91 +#, fuzzy, c-format +#| msgid " -?, --help show this help, then exit\n" +msgid " --help=commands list backslash commands, then exit\n" +msgstr " -?, --help mostra essa ajuda e termina\n" + +#: help.c:92 +#, fuzzy, c-format +#| msgid " -?, --help show this help, then exit\n" +msgid " --help=variables list special variables, then exit\n" +msgstr " -?, --help mostra essa ajuda e termina\n" + +#: help.c:94 #, c-format msgid "" "\n" @@ -1765,52 +1842,58 @@ msgstr "" "\n" "Opções de entrada e saída:\n" -#: help.c:89 +#: help.c:95 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all mostra toda entrada do script\n" -#: help.c:90 +#: help.c:96 +#, fuzzy, c-format +#| msgid " -e, --echo-queries echo commands sent to server\n" +msgid " -b, --echo-errors echo failed commands\n" +msgstr " -b, --echo-errors mostra comandos que falharam\n" + +#: help.c:97 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr " -e, --echo-queries mostra comandos enviados ao servidor\n" -#: help.c:91 +#: help.c:98 #, c-format msgid " -E, --echo-hidden display queries that internal commands generate\n" msgstr " -E, --echo-hidden mostra consultas que os comandos internos geram\n" -#: help.c:92 +#: help.c:99 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" msgstr " -L, --log-file=ARQUIVO envia log da sessão para arquivo\n" -#: help.c:93 +#: help.c:100 #, c-format msgid " -n, --no-readline disable enhanced command line editing (readline)\n" msgstr " -n, --no-readline desabilita edição de linha de comando melhorada (readline)\n" -#: help.c:94 +#: help.c:101 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" msgstr " -o, --output=ARQUIVO envia resultados da consulta para um arquivo (ou |pipe)\n" -#: help.c:95 +#: help.c:102 #, c-format msgid " -q, --quiet run quietly (no messages, only query output)\n" msgstr " -q, --quiet executa silenciosamente (sem mensagens, somente saída da consulta)\n" -#: help.c:96 +#: help.c:103 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" msgstr " -s, --single-step modo passo-a-passo (confirma cada consulta)\n" -#: help.c:97 +#: help.c:104 #, c-format msgid " -S, --single-line single-line mode (end of line terminates SQL command)\n" msgstr " -S, --single-line modo linha única (fim da linha termina o comando SQL)\n" -#: help.c:99 +#: help.c:106 #, c-format msgid "" "\n" @@ -1819,12 +1902,12 @@ msgstr "" "\n" "Opções para formato de saída:\n" -#: help.c:100 +#: help.c:107 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr " -A, --no-align modo de saída em tabela desalinhada\n" -#: help.c:101 +#: help.c:108 #, c-format msgid "" " -F, --field-separator=STRING\n" @@ -1833,17 +1916,17 @@ msgstr "" " -F, --field-separator=SEPARADOR\n" " define separador de campos para modo de saída desalinhado (padrão: \"%s\")\n" -#: help.c:104 +#: help.c:111 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html modo de saída em tabela HTML\n" -#: help.c:105 +#: help.c:112 #, c-format msgid " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset command)\n" msgstr " -P, --pset=VAR[=ARG] define opção de exibição VAR para ARG (veja comando \\pset)\n" -#: help.c:106 +#: help.c:113 #, c-format msgid "" " -R, --record-separator=STRING\n" @@ -1852,22 +1935,22 @@ msgstr "" " -R, --record-separator=SEPARADOR\n" " define separador de registros para modo de saída desalinhado (padrão: nova linha)\n" -#: help.c:108 +#: help.c:115 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr " -t, --tuples-only exibe somente registros\n" -#: help.c:109 +#: help.c:116 #, c-format msgid " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)\n" msgstr " -T, --table-attr=TEXTO define atributos do marcador table do HTML (i.e. width, border)\n" -#: help.c:110 +#: help.c:117 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded habilita saída em tabela expandida\n" -#: help.c:111 +#: help.c:118 #, c-format msgid "" " -z, --field-separator-zero\n" @@ -1876,7 +1959,7 @@ msgstr "" " -z, --field-separator-zero\n" " define separador de campos para modo de saída desalinhado como byte zero\n" -#: help.c:113 +#: help.c:120 #, c-format msgid "" " -0, --record-separator-zero\n" @@ -1885,7 +1968,7 @@ msgstr "" " -0, --record-separator-zero\n" " define separador de registros para modo de saída desalinhado como byte zero\n" -#: help.c:116 +#: help.c:123 #, c-format msgid "" "\n" @@ -1894,36 +1977,36 @@ msgstr "" "\n" "Opções de conexão:\n" -#: help.c:119 +#: help.c:126 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory (default: \"%s\")\n" msgstr " -h, --host=MÁQUINA máquina do servidor de banco de dados ou diretório do soquete (padrão: \"%s\")\n" -#: help.c:120 +#: help.c:127 msgid "local socket" msgstr "soquete local" -#: help.c:123 +#: help.c:130 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr " -p, --port=PORTA porta do servidor de banco de dados (padrão: \"%s\")\n" -#: help.c:129 +#: help.c:136 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr " -U, --username=USUÁRIO nome de usuário do banco de dados (padrão: \"%s\")\n" -#: help.c:130 +#: help.c:137 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pergunta senha\n" -#: help.c:131 +#: help.c:138 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password pergunta senha (pode ocorrer automaticamente)\n" -#: help.c:133 +#: help.c:140 #, c-format msgid "" "\n" @@ -1938,461 +2021,490 @@ msgstr "" "documentação do PostgreSQL.\n" "\n" -#: help.c:136 +#: help.c:143 #, c-format msgid "Report bugs to .\n" msgstr "Relate erros a .\n" -#: help.c:157 +#: help.c:166 #, c-format msgid "General\n" msgstr "Geral\n" -#: help.c:158 +#: help.c:167 #, c-format msgid " \\copyright show PostgreSQL usage and distribution terms\n" msgstr " \\copyright mostra termos de uso e distribuição do PostgreSQL\n" -#: help.c:159 +#: help.c:168 #, c-format msgid " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" msgstr " \\g [ARQUIVO] ou ; executa consulta (e envia os resultados para arquivo ou |pipe)\n" -#: help.c:160 +#: help.c:169 #, c-format msgid " \\gset [PREFIX] execute query and store results in psql variables\n" msgstr " \\gset [PREFIXO] executa consulta e armazena os resultados em variáveis do psql\n" -#: help.c:161 -#, c-format -msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" -msgstr " \\h [NOME] mostra sintaxe dos comandos SQL, * para todos os comandos\n" - -#: help.c:162 +#: help.c:170 #, c-format msgid " \\q quit psql\n" msgstr " \\q sair do psql\n" -#: help.c:163 +#: help.c:171 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEG] executa consulta a cada SEG segundos\n" -#: help.c:166 +#: help.c:174 +#, c-format +msgid "Help\n" +msgstr "Ajuda\n" + +#: help.c:176 +#, c-format +msgid " \\? [commands] description of all psql backslash commands\n" +msgstr "" + +#: help.c:177 +#, c-format +msgid " \\? options description of all psql commandline options\n" +msgstr "" + +#: help.c:178 +#, fuzzy, c-format +#| msgid " --sysconfdir show location of system-wide configuration files\n" +msgid " \\? variables description of all psql configuration variables\n" +msgstr " \\? variáveis descrição de todas as variáveis de configuração do psql\n" + +#: help.c:179 +#, c-format +msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" +msgstr " \\h [NOME] mostra sintaxe dos comandos SQL, * para todos os comandos\n" + +#: help.c:182 #, c-format msgid "Query Buffer\n" msgstr "Buffer de consulta\n" -#: help.c:167 +#: help.c:183 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr " \\e [ARQUIVO] [LINHA] edita o buffer de consulta (ou arquivo) com um editor externo\n" -#: help.c:168 +#: help.c:184 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr " \\ef [NOMEFUNÇÃO [LINHA]] edita a definição de função com um editor externo\n" -#: help.c:169 +#: help.c:185 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p mostra o conteúdo do buffer de consulta\n" -#: help.c:170 +#: help.c:186 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r reinicia (apaga) o buffer de consulta\n" -#: help.c:172 +#: help.c:188 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [ARQUIVO] mostra histórico ou grava-o em um arquivo\n" -#: help.c:174 +#: help.c:190 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w [ARQUIVO] escreve o buffer de consulta para arquivo\n" -#: help.c:177 +#: help.c:193 #, c-format msgid "Input/Output\n" msgstr "Entrada/Saída\n" -#: help.c:178 +#: help.c:194 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr " \\copy ... realiza comando SQL COPY dos dados para máquina cliente\n" -#: help.c:179 +#: help.c:195 #, c-format msgid " \\echo [STRING] write string to standard output\n" msgstr " \\echo [TEXTO] escreve cadeia de caracteres na saída padrão\n" -#: help.c:180 +#: help.c:196 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i ARQUIVO executa comandos de um arquivo\n" -#: help.c:181 +#: help.c:197 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr " \\ir ARQUIVO como \\i, mas relativo ao local do script atual\n" -#: help.c:182 +#: help.c:198 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [ARQUIVO] envia todos os resultados da consulta para arquivo ou |pipe\n" -#: help.c:183 +#: help.c:199 #, c-format msgid " \\qecho [STRING] write string to query output stream (see \\o)\n" msgstr " \\qecho [TEXTO] escreve cadeia de caracteres para saída da consulta (veja \\o)\n" -#: help.c:186 +#: help.c:202 #, c-format msgid "Informational\n" msgstr "Informativo\n" -#: help.c:187 +#: help.c:203 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (opções: S = mostra objetos do sistema, + = detalhes)\n" -#: help.c:188 +#: help.c:204 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] lista tabelas, visões e sequências\n" -#: help.c:189 +#: help.c:205 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] NOME descreve tabela, visão, sequência ou índice\n" -#: help.c:190 +#: help.c:206 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [MODELO] lista funções de agregação\n" -#: help.c:191 +#: help.c:207 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [MODELO] lista tablespaces\n" -#: help.c:192 +#: help.c:208 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [MODELO] lista conversões\n" -#: help.c:193 +#: help.c:209 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [MODELO] lista conversões de tipos\n" -#: help.c:194 +#: help.c:210 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr " \\dd[S] [MODELO] mostra comentários de objetos que não aparecem em outro lugar\n" -#: help.c:195 +#: help.c:211 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [MODELO] lista privilégios padrão\n" -#: help.c:196 +#: help.c:212 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [MODELO] lista domínios\n" -#: help.c:197 +#: help.c:213 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [MODELO] lista tabelas externas\n" -#: help.c:198 +#: help.c:214 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [MODELO] lista servidores externos\n" -#: help.c:199 +#: help.c:215 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [MODELO] lista mapeamento de usuários\n" -#: help.c:200 +#: help.c:216 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [MODELO] lista adaptadores de dados externos\n" -#: help.c:201 +#: help.c:217 #, c-format msgid " \\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions\n" msgstr " \\df[antw][S+] [MODELO] lista funções [somente agr/normal/gatilho/deslizante]\n" -#: help.c:202 +#: help.c:218 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [MODELO] lista configurações de busca textual\n" -#: help.c:203 +#: help.c:219 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [MODELO] lista dicionários de busca textual\n" -#: help.c:204 +#: help.c:220 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [MODELO] lista analisadores de busca textual\n" -#: help.c:205 +#: help.c:221 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [MODELO] lista modelos de busca textual\n" -#: help.c:206 +#: help.c:222 #, c-format msgid " \\dg[+] [PATTERN] list roles\n" msgstr " \\dg[+] [MODELO] lista roles\n" -#: help.c:207 +#: help.c:223 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [MODELO] lista índices\n" -#: help.c:208 +#: help.c:224 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl lista objetos grandes, mesmo que \\lo_list\n" -#: help.c:209 +#: help.c:225 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [MODELO] lista linguagens procedurais\n" -#: help.c:210 +#: help.c:226 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [MODELO] lista visões materializadas\n" -#: help.c:211 +#: help.c:227 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [MODELO] lista esquemas\n" -#: help.c:212 +#: help.c:228 #, c-format msgid " \\do[S] [PATTERN] list operators\n" msgstr " \\do[S] [MODELO] lista operadores\n" -#: help.c:213 +#: help.c:229 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [MODELO] lista ordenações\n" -#: help.c:214 +#: help.c:230 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr " \\dp [MODELO] lista privilégios de acesso de tabelas, visões e sequências\n" -#: help.c:215 +#: help.c:231 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [MOD1 [MOD2]] lista configurações de roles por banco de dados\n" -#: help.c:216 +#: help.c:232 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [MODELO] lista sequências\n" -#: help.c:217 +#: help.c:233 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [MODELO] lista tabelas\n" -#: help.c:218 +#: help.c:234 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [MODELO] lista tipos de dados\n" -#: help.c:219 +#: help.c:235 #, c-format msgid " \\du[+] [PATTERN] list roles\n" msgstr " \\du[+] [MODELO] lista roles\n" -#: help.c:220 +#: help.c:236 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [MODELO] lista visões\n" -#: help.c:221 +#: help.c:237 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [MODELO] lista tabelas externas\n" -#: help.c:222 +#: help.c:238 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [MODELO] lista extensões\n" -#: help.c:223 +#: help.c:239 #, c-format msgid " \\dy [PATTERN] list event triggers\n" msgstr " \\dy [MODELO] lista gatilhos de eventos\n" -#: help.c:224 +#: help.c:240 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [MODELO] lista bancos de dados\n" -#: help.c:225 +#: help.c:241 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] NOMEFUNÇÃO edita a definição da função\n" -#: help.c:226 +#: help.c:242 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [MODELO] mesmo que \\dp\n" -#: help.c:229 +#: help.c:245 #, c-format msgid "Formatting\n" msgstr "Formatação\n" -#: help.c:230 +#: help.c:246 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr " \\a alterna entre modo de saída desalinhado e alinhado\n" -#: help.c:231 +#: help.c:247 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr " \\C [TEXTO] define o título da tabela, ou apaga caso nada seja especificado\n" -#: help.c:232 +#: help.c:248 #, c-format msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr " \\f [TEXTO] mostra ou define separador de campos para saída de consulta desalinhada\n" -#: help.c:233 +#: help.c:249 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H alterna para modo de saída em HTML (atual %s)\n" -#: help.c:235 +#: help.c:251 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" " (NAME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|\n" -" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})\n" +" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager|\n" +" unicode_border_linestyle|unicode_column_linestyle|unicode_header_linestyle})\n" msgstr "" " \\pset [NOME [VALOR]] define opção de saída da tabela\n" " (NOME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|\n" -" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})\n" +" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager|\n" +" unicode_border_linestyle|unicode_column_linestyle|unicode_header_linestyle})\n" -#: help.c:238 +#: help.c:255 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] mostra somente registros (atual %s)\n" -#: help.c:240 +#: help.c:257 #, c-format msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" msgstr " \\T [TEXTO] define atributos do marcador HTML
ou apaga caso nada seja especificado\n" -#: help.c:241 +#: help.c:258 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] alterna para saída expandida (atual %s)\n" -#: help.c:245 +#: help.c:262 #, c-format msgid "Connection\n" msgstr "Conexão\n" -#: help.c:247 -#, c-format +#: help.c:264 +#, fuzzy, c-format +#| msgid "" +#| " \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +#| " connect to new database (currently \"%s\")\n" msgid "" -" \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently \"%s\")\n" msgstr "" -" \\c[onnect] [NOMEBD|- USUÁRIO|- MÁQUINA|- PORTA|-]\n" +" \\c[onnect] {[NOMEBD|- USUÁRIO|- MÁQUINA|- PORTA|-] | conninfo}\n" " conecta a um outro banco de dados (atual \"%s\")\n" -#: help.c:251 -#, c-format +#: help.c:268 +#, fuzzy, c-format +#| msgid "" +#| " \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +#| " connect to new database (currently no connection)\n" msgid "" -" \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently no connection)\n" msgstr "" -" \\c[onnect] [NOMEBD|- USUÁRIO|- MÁQUINA|- PORTA|-]\n" +" \\c[onnect] {[NOMEBD|- USUÁRIO|- MÁQUINA|- PORTA|-] | conninfo}\n" " conecta a um banco de dados novo (atualmente nenhuma conexão)\n" -#: help.c:253 +#: help.c:270 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [CODIFICAÇÃO] mostra ou define codificação do cliente\n" -#: help.c:254 +#: help.c:271 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr " \\password [USUÁRIO] altera a senha de um usuário com segurança\n" -#: help.c:255 +#: help.c:272 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo mostra informação sobre conexão atual\n" -#: help.c:258 +#: help.c:275 #, c-format msgid "Operating System\n" msgstr "Sistema Operacional\n" -#: help.c:259 +#: help.c:276 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [DIRETÓRIO] muda o diretório de trabalho atual\n" -#: help.c:260 +#: help.c:277 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NOME [VALOR] define ou apaga variável de ambiente\n" -#: help.c:261 +#: help.c:278 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [on|off] alterna para duração da execução de comandos (atualmente %s)\n" -#: help.c:263 +#: help.c:280 #, c-format msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr " \\! [COMANDO] executa comando na shell ou inicia shell iterativa\n" -#: help.c:266 +#: help.c:283 #, c-format msgid "Variables\n" msgstr "Variáveis\n" -#: help.c:267 +#: help.c:284 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr " \\prompt [TEXTO] NOME pergunta o usuário ao definir uma variável interna\n" -#: help.c:268 +#: help.c:285 #, c-format msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" msgstr " \\set [NOME [VALOR]] define variável interna ou lista todos caso não tenha parâmetros\n" -#: help.c:269 +#: help.c:286 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset NOME apaga (exclui) variável interna\n" -#: help.c:272 +#: help.c:289 #, c-format msgid "Large Objects\n" msgstr "Objetos Grandes\n" -#: help.c:273 +#: help.c:290 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -2405,11 +2517,417 @@ msgstr "" " \\lo_list\n" " \\lo_unlink OIDLOB operações com objetos grandes\n" +#: help.c:311 +#, c-format +msgid "List of specially treated variables.\n" +msgstr "" + +#: help.c:313 +#, c-format +msgid "psql variables:\n" +msgstr "variáveis do psql:\n" + +#: help.c:315 +#, c-format +msgid "" +" psql --set=NAME=VALUE\n" +" or \\set NAME VALUE in interactive mode\n" +"\n" +msgstr "" +" psql --set=NOME=VALOR\n" +" ou \\set NOME VALOR no modo interativo\n" +"\n" + +#: help.c:317 +#, c-format +msgid " AUTOCOMMIT if set, successful SQL commands are automatically committed\n" +msgstr "" + +#: help.c:318 +#, c-format +msgid "" +" COMP_KEYWORD_CASE determine the case used to complete SQL keywords\n" +" [lower, upper, preserve-lower, preserve-upper]\n" +msgstr "" + #: help.c:320 +#, fuzzy, c-format +#| msgid " -d, --dbname=NAME connect to database name\n" +msgid " DBNAME the currently connected database name\n" +msgstr " -d, --dbname=NOME conecta ao banco de dados informado\n" + +#: help.c:321 +#, c-format +msgid "" +" ECHO control what input is written to standard output\n" +" [all, errors, none, queries]\n" +msgstr "" + +#: help.c:323 +#, c-format +msgid "" +" ECHO_HIDDEN display internal queries executed by backslash commands when it is set\n" +" or with [noexec] just show without execution\n" +msgstr "" + +#: help.c:325 +#, fuzzy, c-format +#| msgid "Sets the client's character set encoding." +msgid " ENCODING current client character set encoding\n" +msgstr "Define a codificação do conjunto de caracteres do cliente." + +#: help.c:326 +#, c-format +msgid "" +" FETCH_COUNT the number of result rows to fetch and display at a time\n" +" (default: 0=unlimited)\n" +msgstr "" + +#: help.c:328 +#, c-format +msgid " HISTCONTROL control history list [ignorespace, ignoredups, ignoreboth]\n" +msgstr "" + +#: help.c:329 +#, c-format +msgid " HISTFILE file name used to store the history list\n" +msgstr "" + +#: help.c:330 +#, c-format +msgid " HISTSIZE the number of commands to store in the command history\n" +msgstr "" + +#: help.c:331 +#, fuzzy, c-format +#| msgid " -C, --create create the target database\n" +msgid " HOST the currently connected database server\n" +msgstr " -C, --create cria o banco de dados informado\n" + +#: help.c:332 +#, c-format +msgid " IGNOREEOF if unset, sending an EOF to interactive session terminates application\n" +msgstr "" + +#: help.c:333 +#, fuzzy, c-format +#| msgid " -o OID set next OID\n" +msgid " LASTOID the value of last affected OID\n" +msgstr " -o OID define próximo OID\n" + +#: help.c:334 +#, c-format +msgid " ON_ERROR_ROLLBACK if set, an error doesn't stop a transaction (uses implicit SAVEPOINTs)\n" +msgstr "" + +#: help.c:335 +#, c-format +msgid " ON_ERROR_STOP stop batch execution after error\n" +msgstr "" + +#: help.c:336 +#, fuzzy, c-format +#| msgid " \\conninfo display information about current connection\n" +msgid " PORT server port of the current connection\n" +msgstr " \\conninfo mostra informação sobre conexão atual\n" + +#: help.c:337 +#, c-format +msgid " PROMPT1 specify the standard psql prompt\n" +msgstr "" + +#: help.c:338 +#, c-format +msgid " PROMPT2 specify the prompt used when a statement continues from a previous line\n" +msgstr "" + +#: help.c:339 +#, c-format +msgid " PROMPT3 specify the prompt used during COPY ... FROM STDIN\n" +msgstr "" + +#: help.c:340 +#, fuzzy, c-format +#| msgid " -q, --quiet run quietly (no messages, only query output)\n" +msgid " QUIET run quietly (same as -q option)\n" +msgstr " -q, --quiet executa silenciosamente (sem mensagens, somente saída da consulta)\n" + +#: help.c:341 +#, c-format +msgid " SINGLELINE end of line terminates SQL command mode (same as -S option)\n" +msgstr "" + +#: help.c:342 +#, c-format +msgid " SINGLESTEP single-step mode (same as -s option)\n" +msgstr "" + +#: help.c:343 +#, fuzzy, c-format +#| msgid " -C, --create create the target database\n" +msgid " USER the currently connected database user\n" +msgstr " -C, --create cria o banco de dados informado\n" + +#: help.c:344 +#, c-format +msgid " VERBOSITY control verbosity of error reports [default, verbose, terse]\n" +msgstr "" + +#: help.c:346 +#, c-format +msgid "" +"\n" +"Display influencing variables:\n" +msgstr "" + +#: help.c:348 +#, c-format +msgid "" +" psql --pset=NAME[=VALUE]\n" +" or \\pset NAME [VALUE] in interactive mode\n" +"\n" +msgstr "" + +#: help.c:350 +#, c-format +msgid " border border style (number)\n" +msgstr "" + +#: help.c:351 +#, c-format +msgid " columns set the target width for the wrapped format\n" +msgstr "" + +#: help.c:352 +#, fuzzy, c-format +#| msgid " -x, --expanded turn on expanded table output\n" +msgid " expanded (or x) toggle expanded output\n" +msgstr " -x, --expanded habilita saída em tabela expandida\n" + +#: help.c:353 +#, fuzzy, c-format +#| msgid "" +#| " -F, --field-separator=STRING\n" +#| " field separator for unaligned output (default: \"%s\")\n" +msgid " fieldsep field separator for unaligned output (default '|')\n" +msgstr "" +" -F, --field-separator=SEPARADOR\n" +" define separador de campos para modo de saída desalinhado (padrão: \"%s\")\n" + +#: help.c:354 +#, fuzzy, c-format +#| msgid "" +#| " -z, --field-separator-zero\n" +#| " set field separator for unaligned output to zero byte\n" +msgid " fieldsep_zero set field separator in unaligned mode to zero\n" +msgstr "" +" -z, --field-separator-zero\n" +" define separador de campos para modo de saída desalinhado como byte zero\n" + +#: help.c:355 +#, fuzzy, c-format +#| msgid "\\pset: allowed formats are unaligned, aligned, wrapped, html, latex, troff-ms\n" +msgid " format set output format [unaligned, aligned, wrapped, html, asciidoc, ...]\n" +msgstr "\\pset: formatos permitidos são unaligned, aligned, wrapped, html, latex, troff-ms\n" + +#: help.c:356 +#, c-format +msgid " footer enable or disable display of the table footer [on, off]\n" +msgstr "" + +#: help.c:357 +#, fuzzy, c-format +#| msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" +msgid " linestyle set the border line drawing style [ascii, old-ascii, unicode]\n" +msgstr "\\pset: estilos de linha permitidos são ascii, old-ascii, unicode\n" + +#: help.c:358 +#, c-format +msgid " null set the string to be printed in place of a null value\n" +msgstr "" + +#: help.c:359 +#, c-format +msgid "" +" numericlocale enable or disable display of a locale-specific character to separate\n" +" groups of digits [on, off]\n" +msgstr "" + +#: help.c:361 +#, c-format +msgid " pager control when an external pager is used [yes, no, always]\n" +msgstr "" + +#: help.c:362 +#, fuzzy, c-format +#| msgid "" +#| " -0, --record-separator-zero\n" +#| " set record separator for unaligned output to zero byte\n" +msgid " recordsep specify the record (line) separator to use in unaligned output format\n" +msgstr "" +" -0, --record-separator-zero\n" +" define separador de registros para modo de saída desalinhado como byte zero\n" + +#: help.c:363 +#, fuzzy, c-format +#| msgid "" +#| " -0, --record-separator-zero\n" +#| " set record separator for unaligned output to zero byte\n" +msgid " recordsep_zero set the record separator to use in unaligned output format to a zero byte.\n" +msgstr "" +" -0, --record-separator-zero\n" +" define separador de registros para modo de saída desalinhado como byte zero\n" + +#: help.c:364 +#, c-format +msgid "" +" tableattr (or T) specify attributes for table tag in html format or proportional\n" +" column width of left aligned data type in latex format\n" +msgstr "" + +#: help.c:366 +#, fuzzy, c-format +#| msgid " \\C [STRING] set table title, or unset if none\n" +msgid " title set the table title for any subsequently printed tables\n" +msgstr " \\C [TEXTO] define o título da tabela, ou apaga caso nada seja especificado\n" + +#: help.c:367 +#, c-format +msgid " tuples_only if set, only actual table data is shown\n" +msgstr "" + +#: help.c:368 +#, c-format +msgid " unicode_border_linestyle\n" +msgstr "" + +#: help.c:369 +#, c-format +msgid " unicode_column_linestyle\n" +msgstr "" + +#: help.c:370 +#, c-format +msgid "" +" unicode_header_linestyle\n" +" set the style of unicode line drawing [single, double]\n" +msgstr "" + +#: help.c:373 +#, c-format +msgid "" +"\n" +"Environment variables:\n" +msgstr "" + +#: help.c:377 +#, c-format +msgid "" +" NAME=VALUE [NAME=VALUE] psql ...\n" +" or \\setenv NAME [VALUE] in interactive mode\n" +"\n" +msgstr "" + +#: help.c:379 +#, c-format +msgid "" +" set NAME=VALUE\n" +" psql ...\n" +" or \\setenv NAME VALUE in interactive mode\n" +"\n" +msgstr "" + +#: help.c:382 +#, c-format +msgid " COLUMNS number of columns for wrapped format\n" +msgstr "" + +#: help.c:383 +#, fuzzy, c-format +#| msgid " -x NUM internal use\n" +msgid " PAGER name of external pager program\n" +msgstr " -x NUM uso interno\n" + +#: help.c:384 +#, c-format +msgid " PGAPPNAME same as the application_name connection parameter\n" +msgstr "" + +#: help.c:385 +#, c-format +msgid " PGDATABASE same as the dbname connection parameter\n" +msgstr "" + +#: help.c:386 +#, fuzzy, c-format +#| msgid " -l enable SSL connections\n" +msgid " PGHOST same as the host connection parameter\n" +msgstr " -l habilita conexões SSL\n" + +#: help.c:387 +#, fuzzy, c-format +#| msgid " -l enable SSL connections\n" +msgid " PGPORT same as the port connection parameter\n" +msgstr " -l habilita conexões SSL\n" + +#: help.c:388 +#, fuzzy, c-format +#| msgid " DBNAME database name (defaults to user name)\n" +msgid " PGUSER same as the user connection parameter\n" +msgstr " NOMEBD nome do banco de dados (padrão é o nome do usuário)\n" + +#: help.c:389 +#, c-format +msgid " PGPASSWORD connection password (not recommended)\n" +msgstr "" + +#: help.c:390 +#, fuzzy, c-format +#| msgid " -f, --file=FILENAME output file name\n" +msgid " PGPASSFILE password file name\n" +msgstr " -f, --file=ARQUIVO nome do arquivo de saída\n" + +#: help.c:391 +#, c-format +msgid "" +" PSQL_EDITOR, EDITOR, VISUAL\n" +" editor used by the \\e and \\ef commands\n" +msgstr "" + +#: help.c:393 +#, fuzzy, c-format +#| msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number\n" +msgid "" +" PSQL_EDITOR_LINENUMBER_ARG\n" +" how to specify a line number when invoking the editor\n" +msgstr "variável de ambiente PSQL_EDITOR_LINENUMBER_ARG deve ser definida para especificar um número de linha\n" + +#: help.c:395 +#, c-format +msgid " PSQL_HISTORY alternative location for the command history file\n" +msgstr "" + +#: help.c:396 +#, c-format +msgid " PSQLRC alternative location for the user's .psqlrc file\n" +msgstr "" + +#: help.c:397 +#, c-format +msgid " SHELL shell used by the \\! command\n" +msgstr "" + +#: help.c:398 +#, fuzzy, c-format +#| msgid " -L DIRECTORY where to find the input files\n" +msgid " TMPDIR directory for temporary files\n" +msgstr " -L DIRETÓRIO onde encontrar os arquivos de entrada\n" + +#: help.c:441 msgid "Available help:\n" msgstr "Ajuda disponível:\n" -#: help.c:404 +#: help.c:525 #, c-format msgid "" "Command: %s\n" @@ -2424,7 +2942,7 @@ msgstr "" "%s\n" "\n" -#: help.c:420 +#: help.c:541 #, c-format msgid "" "No help available for \"%s\".\n" @@ -2438,49 +2956,55 @@ msgstr "" msgid "could not read from input file: %s\n" msgstr "não pôde ler arquivo de entrada: %s\n" -#: input.c:451 input.c:490 +#: input.c:446 input.c:485 #, c-format msgid "could not save history to file \"%s\": %s\n" msgstr "não pôde gravar histórico no arquivo \"%s\": %s\n" -#: input.c:510 +#: input.c:505 #, c-format msgid "history is not supported by this installation\n" msgstr "histórico não é suportado por esta instalação\n" -#: large_obj.c:66 +#: large_obj.c:64 #, c-format msgid "%s: not connected to a database\n" msgstr "%s: não está conectado ao banco de dados\n" -#: large_obj.c:85 +#: large_obj.c:83 #, c-format msgid "%s: current transaction is aborted\n" msgstr "%s: transação atual foi interrompida\n" -#: large_obj.c:88 +#: large_obj.c:86 #, c-format msgid "%s: unknown transaction status\n" msgstr "%s: status da transação é desconhecido\n" -#: large_obj.c:289 large_obj.c:300 +#: large_obj.c:287 large_obj.c:298 msgid "ID" msgstr "ID" -#: large_obj.c:310 +#: large_obj.c:308 msgid "Large objects" msgstr "Objetos grandes" -#: mainloop.c:159 +#: mainloop.c:161 #, c-format msgid "Use \"\\q\" to leave %s.\n" msgstr "Use \"\\q\" para sair do %s.\n" -#: mainloop.c:189 +#: mainloop.c:183 +msgid "" +"The input is a PostgreSQL custom-format dump.\n" +"Use the pg_restore command-line client to restore this dump to a database.\n" +msgstr "" + +#: mainloop.c:203 msgid "You are using psql, the command-line interface to PostgreSQL." msgstr "Você está utilizando o psql, um cliente de linha de comando do PostgreSQL." -#: mainloop.c:190 +#: mainloop.c:204 #, c-format msgid "" "Type: \\copyright for distribution terms\n" @@ -2495,1912 +3019,2102 @@ msgstr "" " \\g ou terminar com ponto-e-vírgula para executar a consulta\n" " \\q para sair\n" -#: print.c:272 +#: print.c:338 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu registro)" msgstr[1] "(%lu registros)" -#: print.c:1174 -#, c-format -msgid "(No rows)\n" -msgstr "(Nenhum registro)\n" - -#: print.c:2238 +#: print.c:2795 #, c-format msgid "Interrupted\n" msgstr "Interrompido\n" -#: print.c:2304 +#: print.c:2861 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "Não pode adicionar cabeçalho a conteúdo de tabela: quantidade de colunas %d foi excedida.\n" -#: print.c:2344 +#: print.c:2901 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "Não pode adicionar célula a conteúdo de tabela: quantidade total de células %d foi excedida.\n" -#: print.c:2570 +#: print.c:3133 #, c-format msgid "invalid output format (internal error): %d" msgstr "formato de saída inválido (erro interno): %d" -#: psqlscan.l:727 +#: psqlscan.l:751 #, c-format msgid "skipping recursive expansion of variable \"%s\"\n" msgstr "ignorando expansão recursiva da variável \"%s\"\n" -#: psqlscan.l:1603 +#: psqlscan.l:1627 #, c-format msgid "unterminated quoted string\n" msgstr "cadeia de caracteres entre aspas não foi terminada\n" -#: psqlscan.l:1703 +#: psqlscan.l:1727 #, c-format msgid "%s: out of memory\n" msgstr "%s: sem memória\n" -#: psqlscan.l:1932 +#: psqlscan.l:1956 #, c-format msgid "can't escape without active connection\n" msgstr "não pode fazer escape sem uma conexão ativa\n" -#: sql_help.c:32 sql_help.c:35 sql_help.c:38 sql_help.c:60 sql_help.c:62 -#: sql_help.c:64 sql_help.c:75 sql_help.c:77 sql_help.c:79 sql_help.c:103 -#: sql_help.c:107 sql_help.c:109 sql_help.c:111 sql_help.c:113 sql_help.c:116 -#: sql_help.c:118 sql_help.c:120 sql_help.c:213 sql_help.c:215 sql_help.c:216 -#: sql_help.c:218 sql_help.c:220 sql_help.c:223 sql_help.c:225 sql_help.c:227 -#: sql_help.c:229 sql_help.c:241 sql_help.c:242 sql_help.c:243 sql_help.c:245 -#: sql_help.c:290 sql_help.c:292 sql_help.c:294 sql_help.c:296 sql_help.c:354 -#: sql_help.c:359 sql_help.c:361 sql_help.c:396 sql_help.c:398 sql_help.c:401 -#: sql_help.c:403 sql_help.c:460 sql_help.c:465 sql_help.c:470 sql_help.c:475 -#: sql_help.c:515 sql_help.c:517 sql_help.c:519 sql_help.c:522 sql_help.c:524 -#: sql_help.c:535 sql_help.c:537 sql_help.c:577 sql_help.c:579 sql_help.c:582 -#: sql_help.c:584 sql_help.c:586 sql_help.c:612 sql_help.c:616 sql_help.c:629 -#: sql_help.c:632 sql_help.c:635 sql_help.c:655 sql_help.c:667 sql_help.c:675 -#: sql_help.c:678 sql_help.c:681 sql_help.c:711 sql_help.c:717 sql_help.c:719 -#: sql_help.c:723 sql_help.c:726 sql_help.c:729 sql_help.c:738 sql_help.c:749 -#: sql_help.c:751 sql_help.c:768 sql_help.c:777 sql_help.c:779 sql_help.c:781 -#: sql_help.c:793 sql_help.c:797 sql_help.c:799 sql_help.c:878 sql_help.c:880 -#: sql_help.c:883 sql_help.c:886 sql_help.c:888 sql_help.c:890 sql_help.c:951 -#: sql_help.c:953 sql_help.c:955 sql_help.c:958 sql_help.c:979 sql_help.c:982 -#: sql_help.c:985 sql_help.c:988 sql_help.c:992 sql_help.c:994 sql_help.c:996 -#: sql_help.c:998 sql_help.c:1012 sql_help.c:1015 sql_help.c:1017 -#: sql_help.c:1019 sql_help.c:1029 sql_help.c:1031 sql_help.c:1041 -#: sql_help.c:1043 sql_help.c:1052 sql_help.c:1073 sql_help.c:1075 -#: sql_help.c:1077 sql_help.c:1080 sql_help.c:1082 sql_help.c:1084 -#: sql_help.c:1122 sql_help.c:1128 sql_help.c:1130 sql_help.c:1133 -#: sql_help.c:1135 sql_help.c:1137 sql_help.c:1164 sql_help.c:1167 -#: sql_help.c:1169 sql_help.c:1171 sql_help.c:1173 sql_help.c:1175 -#: sql_help.c:1178 sql_help.c:1218 sql_help.c:1456 sql_help.c:1472 -#: sql_help.c:1485 sql_help.c:1536 sql_help.c:1540 sql_help.c:1550 -#: sql_help.c:1568 sql_help.c:1591 sql_help.c:1609 sql_help.c:1637 -#: sql_help.c:1696 sql_help.c:1738 sql_help.c:1760 sql_help.c:1780 -#: sql_help.c:1781 sql_help.c:1816 sql_help.c:1836 sql_help.c:1858 -#: sql_help.c:1886 sql_help.c:1911 sql_help.c:1947 sql_help.c:2133 -#: sql_help.c:2146 sql_help.c:2163 sql_help.c:2179 sql_help.c:2202 -#: sql_help.c:2253 sql_help.c:2257 sql_help.c:2259 sql_help.c:2265 -#: sql_help.c:2283 sql_help.c:2310 sql_help.c:2345 sql_help.c:2357 -#: sql_help.c:2366 sql_help.c:2416 sql_help.c:2444 sql_help.c:2452 -#: sql_help.c:2460 sql_help.c:2468 sql_help.c:2476 sql_help.c:2484 -#: sql_help.c:2492 sql_help.c:2500 sql_help.c:2509 sql_help.c:2520 -#: sql_help.c:2528 sql_help.c:2536 sql_help.c:2544 sql_help.c:2552 -#: sql_help.c:2562 sql_help.c:2571 sql_help.c:2580 sql_help.c:2588 -#: sql_help.c:2596 sql_help.c:2605 sql_help.c:2613 sql_help.c:2621 -#: sql_help.c:2629 sql_help.c:2637 sql_help.c:2645 sql_help.c:2653 -#: sql_help.c:2661 sql_help.c:2669 sql_help.c:2677 sql_help.c:2686 -#: sql_help.c:2694 sql_help.c:2711 sql_help.c:2726 sql_help.c:2932 -#: sql_help.c:2983 sql_help.c:3011 sql_help.c:3019 sql_help.c:3417 -#: sql_help.c:3465 sql_help.c:3585 +#: sql_help.c:33 sql_help.c:36 sql_help.c:39 sql_help.c:61 sql_help.c:63 +#: sql_help.c:65 sql_help.c:76 sql_help.c:78 sql_help.c:80 sql_help.c:106 +#: sql_help.c:112 sql_help.c:114 sql_help.c:116 sql_help.c:118 sql_help.c:121 +#: sql_help.c:123 sql_help.c:125 sql_help.c:218 sql_help.c:220 sql_help.c:221 +#: sql_help.c:223 sql_help.c:225 sql_help.c:228 sql_help.c:230 sql_help.c:232 +#: sql_help.c:234 sql_help.c:246 sql_help.c:247 sql_help.c:248 sql_help.c:250 +#: sql_help.c:296 sql_help.c:298 sql_help.c:300 sql_help.c:302 sql_help.c:362 +#: sql_help.c:367 sql_help.c:369 sql_help.c:412 sql_help.c:414 sql_help.c:417 +#: sql_help.c:419 sql_help.c:483 sql_help.c:488 sql_help.c:493 sql_help.c:498 +#: sql_help.c:546 sql_help.c:548 sql_help.c:550 sql_help.c:553 sql_help.c:555 +#: sql_help.c:566 sql_help.c:568 sql_help.c:608 sql_help.c:610 sql_help.c:613 +#: sql_help.c:615 sql_help.c:617 sql_help.c:646 sql_help.c:650 sql_help.c:668 +#: sql_help.c:671 sql_help.c:674 sql_help.c:703 sql_help.c:715 sql_help.c:723 +#: sql_help.c:726 sql_help.c:729 sql_help.c:743 sql_help.c:789 sql_help.c:812 +#: sql_help.c:823 sql_help.c:825 sql_help.c:842 sql_help.c:851 sql_help.c:853 +#: sql_help.c:855 sql_help.c:867 sql_help.c:871 sql_help.c:873 sql_help.c:955 +#: sql_help.c:957 sql_help.c:960 sql_help.c:963 sql_help.c:965 sql_help.c:967 +#: sql_help.c:1028 sql_help.c:1030 sql_help.c:1032 sql_help.c:1035 +#: sql_help.c:1056 sql_help.c:1059 sql_help.c:1062 sql_help.c:1065 +#: sql_help.c:1069 sql_help.c:1071 sql_help.c:1073 sql_help.c:1075 +#: sql_help.c:1089 sql_help.c:1092 sql_help.c:1094 sql_help.c:1096 +#: sql_help.c:1106 sql_help.c:1108 sql_help.c:1118 sql_help.c:1120 +#: sql_help.c:1129 sql_help.c:1150 sql_help.c:1152 sql_help.c:1154 +#: sql_help.c:1157 sql_help.c:1159 sql_help.c:1161 sql_help.c:1211 +#: sql_help.c:1249 sql_help.c:1252 sql_help.c:1254 sql_help.c:1256 +#: sql_help.c:1258 sql_help.c:1260 sql_help.c:1263 sql_help.c:1303 +#: sql_help.c:1550 sql_help.c:1566 sql_help.c:1579 sql_help.c:1630 +#: sql_help.c:1634 sql_help.c:1644 sql_help.c:1664 sql_help.c:1689 +#: sql_help.c:1707 sql_help.c:1735 sql_help.c:1809 sql_help.c:1852 +#: sql_help.c:1874 sql_help.c:1894 sql_help.c:1895 sql_help.c:1930 +#: sql_help.c:1950 sql_help.c:1972 sql_help.c:1985 sql_help.c:2017 +#: sql_help.c:2042 sql_help.c:2086 sql_help.c:2272 sql_help.c:2285 +#: sql_help.c:2302 sql_help.c:2318 sql_help.c:2357 sql_help.c:2408 +#: sql_help.c:2412 sql_help.c:2414 sql_help.c:2420 sql_help.c:2438 +#: sql_help.c:2465 sql_help.c:2500 sql_help.c:2512 sql_help.c:2521 +#: sql_help.c:2571 sql_help.c:2599 sql_help.c:2607 sql_help.c:2615 +#: sql_help.c:2623 sql_help.c:2631 sql_help.c:2639 sql_help.c:2647 +#: sql_help.c:2655 sql_help.c:2664 sql_help.c:2675 sql_help.c:2683 +#: sql_help.c:2691 sql_help.c:2699 sql_help.c:2707 sql_help.c:2717 +#: sql_help.c:2726 sql_help.c:2735 sql_help.c:2743 sql_help.c:2752 +#: sql_help.c:2760 sql_help.c:2769 sql_help.c:2777 sql_help.c:2785 +#: sql_help.c:2793 sql_help.c:2801 sql_help.c:2809 sql_help.c:2817 +#: sql_help.c:2825 sql_help.c:2833 sql_help.c:2850 sql_help.c:2859 +#: sql_help.c:2867 sql_help.c:2884 sql_help.c:2899 sql_help.c:3164 +#: sql_help.c:3215 sql_help.c:3244 sql_help.c:3252 sql_help.c:3671 +#: sql_help.c:3719 sql_help.c:3860 msgid "name" msgstr "nome" -#: sql_help.c:33 sql_help.c:36 sql_help.c:39 sql_help.c:300 sql_help.c:1279 -#: sql_help.c:2417 sql_help.c:3234 +#: sql_help.c:34 sql_help.c:37 sql_help.c:40 sql_help.c:306 sql_help.c:1367 +#: sql_help.c:2572 sql_help.c:3467 msgid "aggregate_signature" msgstr "assinatura_agregação" -#: sql_help.c:34 sql_help.c:61 sql_help.c:76 sql_help.c:108 sql_help.c:228 -#: sql_help.c:246 sql_help.c:362 sql_help.c:402 sql_help.c:469 sql_help.c:502 -#: sql_help.c:516 sql_help.c:536 sql_help.c:583 sql_help.c:631 sql_help.c:677 -#: sql_help.c:718 sql_help.c:740 sql_help.c:750 sql_help.c:780 sql_help.c:800 -#: sql_help.c:887 sql_help.c:952 sql_help.c:995 sql_help.c:1016 -#: sql_help.c:1030 sql_help.c:1042 sql_help.c:1054 sql_help.c:1081 -#: sql_help.c:1129 sql_help.c:1172 +#: sql_help.c:35 sql_help.c:62 sql_help.c:77 sql_help.c:113 sql_help.c:233 +#: sql_help.c:251 sql_help.c:370 sql_help.c:418 sql_help.c:492 sql_help.c:533 +#: sql_help.c:547 sql_help.c:567 sql_help.c:614 sql_help.c:670 sql_help.c:725 +#: sql_help.c:745 sql_help.c:790 sql_help.c:814 sql_help.c:824 sql_help.c:854 +#: sql_help.c:874 sql_help.c:964 sql_help.c:1029 sql_help.c:1072 +#: sql_help.c:1093 sql_help.c:1107 sql_help.c:1119 sql_help.c:1131 +#: sql_help.c:1158 sql_help.c:1212 sql_help.c:1257 msgid "new_name" msgstr "novo_nome" -#: sql_help.c:37 sql_help.c:63 sql_help.c:78 sql_help.c:110 sql_help.c:226 -#: sql_help.c:244 sql_help.c:360 sql_help.c:431 sql_help.c:474 sql_help.c:538 -#: sql_help.c:547 sql_help.c:602 sql_help.c:615 sql_help.c:634 sql_help.c:680 -#: sql_help.c:752 sql_help.c:778 sql_help.c:798 sql_help.c:935 sql_help.c:954 -#: sql_help.c:997 sql_help.c:1018 sql_help.c:1076 sql_help.c:1170 +#: sql_help.c:38 sql_help.c:64 sql_help.c:79 sql_help.c:115 sql_help.c:231 +#: sql_help.c:249 sql_help.c:368 sql_help.c:454 sql_help.c:497 sql_help.c:569 +#: sql_help.c:578 sql_help.c:633 sql_help.c:649 sql_help.c:673 sql_help.c:728 +#: sql_help.c:826 sql_help.c:852 sql_help.c:872 sql_help.c:1013 +#: sql_help.c:1031 sql_help.c:1074 sql_help.c:1095 sql_help.c:1153 +#: sql_help.c:1255 sql_help.c:2258 msgid "new_owner" msgstr "novo_dono" -#: sql_help.c:40 sql_help.c:65 sql_help.c:80 sql_help.c:230 sql_help.c:293 -#: sql_help.c:404 sql_help.c:479 sql_help.c:585 sql_help.c:619 sql_help.c:637 -#: sql_help.c:683 sql_help.c:782 sql_help.c:889 sql_help.c:999 sql_help.c:1020 -#: sql_help.c:1032 sql_help.c:1044 sql_help.c:1083 sql_help.c:1174 +#: sql_help.c:41 sql_help.c:66 sql_help.c:81 sql_help.c:235 sql_help.c:299 +#: sql_help.c:420 sql_help.c:502 sql_help.c:616 sql_help.c:653 sql_help.c:676 +#: sql_help.c:731 sql_help.c:856 sql_help.c:966 sql_help.c:1076 +#: sql_help.c:1097 sql_help.c:1109 sql_help.c:1121 sql_help.c:1160 +#: sql_help.c:1259 msgid "new_schema" msgstr "novo_esquema" -#: sql_help.c:41 sql_help.c:1326 sql_help.c:2418 sql_help.c:3253 +#: sql_help.c:42 sql_help.c:1420 sql_help.c:2573 sql_help.c:3486 msgid "where aggregate_signature is:" msgstr "onde assinatura_agregação é:" -#: sql_help.c:42 sql_help.c:45 sql_help.c:48 sql_help.c:310 sql_help.c:333 -#: sql_help.c:336 sql_help.c:339 sql_help.c:461 sql_help.c:466 sql_help.c:471 -#: sql_help.c:476 sql_help.c:1295 sql_help.c:1327 sql_help.c:1330 -#: sql_help.c:1333 sql_help.c:1457 sql_help.c:1473 sql_help.c:1476 -#: sql_help.c:1697 sql_help.c:2419 sql_help.c:2422 sql_help.c:2425 -#: sql_help.c:2510 sql_help.c:2870 sql_help.c:3149 sql_help.c:3240 -#: sql_help.c:3254 sql_help.c:3257 sql_help.c:3260 +#: sql_help.c:43 sql_help.c:46 sql_help.c:49 sql_help.c:316 sql_help.c:341 +#: sql_help.c:344 sql_help.c:347 sql_help.c:484 sql_help.c:489 sql_help.c:494 +#: sql_help.c:499 sql_help.c:1385 sql_help.c:1421 sql_help.c:1424 +#: sql_help.c:1427 sql_help.c:1551 sql_help.c:1567 sql_help.c:1570 +#: sql_help.c:1810 sql_help.c:2574 sql_help.c:2577 sql_help.c:2580 +#: sql_help.c:2665 sql_help.c:3050 sql_help.c:3382 sql_help.c:3473 +#: sql_help.c:3487 sql_help.c:3490 sql_help.c:3493 msgid "argmode" msgstr "modo_argumento" -#: sql_help.c:43 sql_help.c:46 sql_help.c:49 sql_help.c:311 sql_help.c:334 -#: sql_help.c:337 sql_help.c:340 sql_help.c:462 sql_help.c:467 sql_help.c:472 -#: sql_help.c:477 sql_help.c:1296 sql_help.c:1328 sql_help.c:1331 -#: sql_help.c:1334 sql_help.c:1458 sql_help.c:1474 sql_help.c:1477 -#: sql_help.c:1698 sql_help.c:2420 sql_help.c:2423 sql_help.c:2426 -#: sql_help.c:2511 sql_help.c:3241 sql_help.c:3255 sql_help.c:3258 -#: sql_help.c:3261 +#: sql_help.c:44 sql_help.c:47 sql_help.c:50 sql_help.c:317 sql_help.c:342 +#: sql_help.c:345 sql_help.c:348 sql_help.c:485 sql_help.c:490 sql_help.c:495 +#: sql_help.c:500 sql_help.c:1386 sql_help.c:1422 sql_help.c:1425 +#: sql_help.c:1428 sql_help.c:1552 sql_help.c:1568 sql_help.c:1571 +#: sql_help.c:1811 sql_help.c:2575 sql_help.c:2578 sql_help.c:2581 +#: sql_help.c:2666 sql_help.c:3474 sql_help.c:3488 sql_help.c:3491 +#: sql_help.c:3494 msgid "argname" msgstr "nome_argumento" -#: sql_help.c:44 sql_help.c:47 sql_help.c:50 sql_help.c:312 sql_help.c:335 -#: sql_help.c:338 sql_help.c:341 sql_help.c:463 sql_help.c:468 sql_help.c:473 -#: sql_help.c:478 sql_help.c:1297 sql_help.c:1329 sql_help.c:1332 -#: sql_help.c:1335 sql_help.c:1699 sql_help.c:2421 sql_help.c:2424 -#: sql_help.c:2427 sql_help.c:2512 sql_help.c:3242 sql_help.c:3256 -#: sql_help.c:3259 sql_help.c:3262 +#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:318 sql_help.c:343 +#: sql_help.c:346 sql_help.c:349 sql_help.c:486 sql_help.c:491 sql_help.c:496 +#: sql_help.c:501 sql_help.c:1387 sql_help.c:1423 sql_help.c:1426 +#: sql_help.c:1429 sql_help.c:1812 sql_help.c:2576 sql_help.c:2579 +#: sql_help.c:2582 sql_help.c:2667 sql_help.c:3475 sql_help.c:3489 +#: sql_help.c:3492 sql_help.c:3495 msgid "argtype" msgstr "tipo_argumento" -#: sql_help.c:104 sql_help.c:357 sql_help.c:425 sql_help.c:432 sql_help.c:712 -#: sql_help.c:795 sql_help.c:1013 sql_help.c:1123 sql_help.c:1149 -#: sql_help.c:1383 sql_help.c:1389 sql_help.c:1640 sql_help.c:1664 -#: sql_help.c:1669 sql_help.c:1739 sql_help.c:1887 sql_help.c:1968 -#: sql_help.c:2148 sql_help.c:2311 sql_help.c:2333 sql_help.c:2745 +#: sql_help.c:107 sql_help.c:365 sql_help.c:443 sql_help.c:455 sql_help.c:784 +#: sql_help.c:869 sql_help.c:1090 sql_help.c:1206 sql_help.c:1234 +#: sql_help.c:1477 sql_help.c:1483 sql_help.c:1738 sql_help.c:1770 +#: sql_help.c:1777 sql_help.c:1853 sql_help.c:2018 sql_help.c:2107 +#: sql_help.c:2287 sql_help.c:2466 sql_help.c:2488 sql_help.c:2918 +#: sql_help.c:3084 msgid "option" msgstr "opção" -#: sql_help.c:105 sql_help.c:713 sql_help.c:1124 sql_help.c:1740 -#: sql_help.c:1888 sql_help.c:2312 +#: sql_help.c:108 sql_help.c:785 sql_help.c:1207 sql_help.c:1854 +#: sql_help.c:2019 sql_help.c:2467 msgid "where option can be:" msgstr "onde opção pode ser:" -#: sql_help.c:106 sql_help.c:714 sql_help.c:1125 sql_help.c:1575 -#: sql_help.c:1889 sql_help.c:2313 +#: sql_help.c:109 sql_help.c:1671 +#, fuzzy +msgid "allowconn" +msgstr "permite_conexão" + +#: sql_help.c:110 sql_help.c:786 sql_help.c:1208 sql_help.c:1672 +#: sql_help.c:2020 sql_help.c:2468 msgid "connlimit" msgstr "limite_conexão" -#: sql_help.c:112 sql_help.c:526 sql_help.c:588 sql_help.c:603 sql_help.c:892 -#: sql_help.c:936 +#: sql_help.c:111 sql_help.c:1673 +#, fuzzy +#| msgid "template" +msgid "istemplate" +msgstr "é_modelo" + +#: sql_help.c:117 sql_help.c:557 sql_help.c:619 sql_help.c:634 sql_help.c:969 +#: sql_help.c:1006 msgid "new_tablespace" msgstr "nova_tablespace" -#: sql_help.c:114 sql_help.c:117 sql_help.c:119 sql_help.c:483 sql_help.c:485 -#: sql_help.c:486 sql_help.c:721 sql_help.c:725 sql_help.c:728 sql_help.c:811 -#: sql_help.c:814 sql_help.c:1131 sql_help.c:1134 sql_help.c:1136 -#: sql_help.c:1707 sql_help.c:3036 sql_help.c:3406 +#: sql_help.c:119 sql_help.c:122 sql_help.c:124 sql_help.c:506 sql_help.c:508 +#: sql_help.c:509 sql_help.c:793 sql_help.c:797 sql_help.c:800 sql_help.c:885 +#: sql_help.c:888 sql_help.c:1214 sql_help.c:1217 sql_help.c:1219 +#: sql_help.c:1821 sql_help.c:3269 sql_help.c:3660 msgid "configuration_parameter" msgstr "parâmetro_de_configuração" -#: sql_help.c:115 sql_help.c:358 sql_help.c:421 sql_help.c:426 sql_help.c:433 -#: sql_help.c:484 sql_help.c:521 sql_help.c:594 sql_help.c:600 sql_help.c:722 -#: sql_help.c:796 sql_help.c:812 sql_help.c:813 sql_help.c:911 sql_help.c:930 -#: sql_help.c:957 sql_help.c:1014 sql_help.c:1132 sql_help.c:1150 -#: sql_help.c:1641 sql_help.c:1665 sql_help.c:1670 sql_help.c:1708 -#: sql_help.c:1709 sql_help.c:1768 sql_help.c:1800 sql_help.c:1969 -#: sql_help.c:2043 sql_help.c:2051 sql_help.c:2083 sql_help.c:2105 -#: sql_help.c:2122 sql_help.c:2149 sql_help.c:2334 sql_help.c:3407 -#: sql_help.c:3408 +#: sql_help.c:120 sql_help.c:366 sql_help.c:438 sql_help.c:444 sql_help.c:456 +#: sql_help.c:507 sql_help.c:552 sql_help.c:625 sql_help.c:631 sql_help.c:794 +#: sql_help.c:870 sql_help.c:886 sql_help.c:887 sql_help.c:988 sql_help.c:1008 +#: sql_help.c:1034 sql_help.c:1091 sql_help.c:1215 sql_help.c:1235 +#: sql_help.c:1739 sql_help.c:1771 sql_help.c:1778 sql_help.c:1822 +#: sql_help.c:1823 sql_help.c:1882 sql_help.c:1914 sql_help.c:2108 +#: sql_help.c:2182 sql_help.c:2190 sql_help.c:2222 sql_help.c:2244 +#: sql_help.c:2261 sql_help.c:2288 sql_help.c:2489 sql_help.c:3085 +#: sql_help.c:3661 sql_help.c:3662 msgid "value" msgstr "valor" -#: sql_help.c:177 +#: sql_help.c:182 msgid "target_role" msgstr "role_alvo" -#: sql_help.c:178 sql_help.c:1624 sql_help.c:1929 sql_help.c:1934 -#: sql_help.c:2852 sql_help.c:2859 sql_help.c:2873 sql_help.c:2879 -#: sql_help.c:3131 sql_help.c:3138 sql_help.c:3152 sql_help.c:3158 +#: sql_help.c:183 sql_help.c:1722 sql_help.c:2066 sql_help.c:2071 +#: sql_help.c:3032 sql_help.c:3039 sql_help.c:3053 sql_help.c:3059 +#: sql_help.c:3364 sql_help.c:3371 sql_help.c:3385 sql_help.c:3391 msgid "schema_name" msgstr "nome_esquema" -#: sql_help.c:179 +#: sql_help.c:184 msgid "abbreviated_grant_or_revoke" msgstr "comando_grant_ou_revoke" -#: sql_help.c:180 +#: sql_help.c:185 msgid "where abbreviated_grant_or_revoke is one of:" msgstr "onde comando_grant_ou_revoke é um dos:" -#: sql_help.c:181 sql_help.c:182 sql_help.c:183 sql_help.c:184 sql_help.c:185 -#: sql_help.c:186 sql_help.c:187 sql_help.c:188 sql_help.c:525 sql_help.c:587 -#: sql_help.c:891 sql_help.c:1743 sql_help.c:1744 sql_help.c:1745 -#: sql_help.c:1746 sql_help.c:1747 sql_help.c:1892 sql_help.c:1893 -#: sql_help.c:1894 sql_help.c:1895 sql_help.c:1896 sql_help.c:2316 -#: sql_help.c:2317 sql_help.c:2318 sql_help.c:2319 sql_help.c:2320 -#: sql_help.c:2853 sql_help.c:2857 sql_help.c:2860 sql_help.c:2862 -#: sql_help.c:2864 sql_help.c:2866 sql_help.c:2868 sql_help.c:2874 -#: sql_help.c:2876 sql_help.c:2878 sql_help.c:2880 sql_help.c:2882 -#: sql_help.c:2884 sql_help.c:2885 sql_help.c:2886 sql_help.c:3132 -#: sql_help.c:3136 sql_help.c:3139 sql_help.c:3141 sql_help.c:3143 -#: sql_help.c:3145 sql_help.c:3147 sql_help.c:3153 sql_help.c:3155 -#: sql_help.c:3157 sql_help.c:3159 sql_help.c:3161 sql_help.c:3163 -#: sql_help.c:3164 sql_help.c:3165 sql_help.c:3427 +#: sql_help.c:186 sql_help.c:187 sql_help.c:188 sql_help.c:189 sql_help.c:190 +#: sql_help.c:191 sql_help.c:192 sql_help.c:193 sql_help.c:531 sql_help.c:556 +#: sql_help.c:618 sql_help.c:746 sql_help.c:804 sql_help.c:968 sql_help.c:1222 +#: sql_help.c:1857 sql_help.c:1858 sql_help.c:1859 sql_help.c:1860 +#: sql_help.c:1861 sql_help.c:1987 sql_help.c:2023 sql_help.c:2024 +#: sql_help.c:2025 sql_help.c:2026 sql_help.c:2027 sql_help.c:2471 +#: sql_help.c:2472 sql_help.c:2473 sql_help.c:2474 sql_help.c:2475 +#: sql_help.c:3066 sql_help.c:3067 sql_help.c:3068 sql_help.c:3365 +#: sql_help.c:3369 sql_help.c:3372 sql_help.c:3374 sql_help.c:3376 +#: sql_help.c:3378 sql_help.c:3380 sql_help.c:3386 sql_help.c:3388 +#: sql_help.c:3390 sql_help.c:3392 sql_help.c:3394 sql_help.c:3396 +#: sql_help.c:3397 sql_help.c:3398 sql_help.c:3681 msgid "role_name" msgstr "nome_role" -#: sql_help.c:214 sql_help.c:414 sql_help.c:902 sql_help.c:904 sql_help.c:1166 -#: sql_help.c:1594 sql_help.c:1598 sql_help.c:1764 sql_help.c:2055 -#: sql_help.c:2065 sql_help.c:2087 sql_help.c:2900 sql_help.c:3303 -#: sql_help.c:3304 sql_help.c:3308 sql_help.c:3313 sql_help.c:3381 -#: sql_help.c:3382 sql_help.c:3387 sql_help.c:3392 sql_help.c:3521 -#: sql_help.c:3522 sql_help.c:3526 sql_help.c:3531 sql_help.c:3611 -#: sql_help.c:3613 sql_help.c:3644 sql_help.c:3690 sql_help.c:3691 -#: sql_help.c:3695 sql_help.c:3700 +#: sql_help.c:219 sql_help.c:431 sql_help.c:979 sql_help.c:981 sql_help.c:1251 +#: sql_help.c:1692 sql_help.c:1696 sql_help.c:1781 sql_help.c:1785 +#: sql_help.c:1878 sql_help.c:2194 sql_help.c:2204 sql_help.c:2226 +#: sql_help.c:3115 sql_help.c:3130 sql_help.c:3132 sql_help.c:3546 +#: sql_help.c:3547 sql_help.c:3556 sql_help.c:3597 sql_help.c:3598 +#: sql_help.c:3599 sql_help.c:3600 sql_help.c:3601 sql_help.c:3602 +#: sql_help.c:3635 sql_help.c:3636 sql_help.c:3641 sql_help.c:3646 +#: sql_help.c:3785 sql_help.c:3786 sql_help.c:3795 sql_help.c:3836 +#: sql_help.c:3837 sql_help.c:3838 sql_help.c:3839 sql_help.c:3840 +#: sql_help.c:3841 sql_help.c:3888 sql_help.c:3890 sql_help.c:3923 +#: sql_help.c:3979 sql_help.c:3980 sql_help.c:3989 sql_help.c:4030 +#: sql_help.c:4031 sql_help.c:4032 sql_help.c:4033 sql_help.c:4034 +#: sql_help.c:4035 msgid "expression" msgstr "expressão" -#: sql_help.c:217 +#: sql_help.c:222 msgid "domain_constraint" msgstr "restrição_domínio" -#: sql_help.c:219 sql_help.c:221 sql_help.c:224 sql_help.c:884 sql_help.c:917 -#: sql_help.c:918 sql_help.c:919 sql_help.c:939 sql_help.c:1285 -#: sql_help.c:1597 sql_help.c:1672 sql_help.c:2054 sql_help.c:2064 +#: sql_help.c:224 sql_help.c:226 sql_help.c:229 sql_help.c:446 sql_help.c:447 +#: sql_help.c:961 sql_help.c:994 sql_help.c:995 sql_help.c:996 sql_help.c:1016 +#: sql_help.c:1373 sql_help.c:1375 sql_help.c:1695 sql_help.c:1780 +#: sql_help.c:1784 sql_help.c:2193 sql_help.c:2203 sql_help.c:3127 msgid "constraint_name" msgstr "nome_restrição" -#: sql_help.c:222 sql_help.c:885 +#: sql_help.c:227 sql_help.c:962 msgid "new_constraint_name" msgstr "novo_nome_restrição" -#: sql_help.c:291 sql_help.c:794 +#: sql_help.c:297 sql_help.c:868 msgid "new_version" msgstr "nova_versão" -#: sql_help.c:295 sql_help.c:297 +#: sql_help.c:301 sql_help.c:303 msgid "member_object" msgstr "objeto_membro" -#: sql_help.c:298 +#: sql_help.c:304 msgid "where member_object is:" msgstr "onde objeto_membro é:" -#: sql_help.c:299 sql_help.c:1278 sql_help.c:3233 +#: sql_help.c:305 sql_help.c:1366 sql_help.c:3466 msgid "aggregate_name" msgstr "nome_agregação" -#: sql_help.c:301 sql_help.c:1280 sql_help.c:1516 sql_help.c:1520 -#: sql_help.c:1522 sql_help.c:2435 +#: sql_help.c:307 sql_help.c:1368 sql_help.c:1610 sql_help.c:1614 +#: sql_help.c:1616 sql_help.c:2590 msgid "source_type" msgstr "tipo_origem" -#: sql_help.c:302 sql_help.c:1281 sql_help.c:1517 sql_help.c:1521 -#: sql_help.c:1523 sql_help.c:2436 +#: sql_help.c:308 sql_help.c:1369 sql_help.c:1611 sql_help.c:1615 +#: sql_help.c:1617 sql_help.c:2591 msgid "target_type" msgstr "tipo_destino" -#: sql_help.c:303 sql_help.c:304 sql_help.c:305 sql_help.c:306 sql_help.c:307 -#: sql_help.c:308 sql_help.c:313 sql_help.c:317 sql_help.c:319 sql_help.c:321 -#: sql_help.c:322 sql_help.c:323 sql_help.c:324 sql_help.c:325 sql_help.c:326 -#: sql_help.c:327 sql_help.c:328 sql_help.c:329 sql_help.c:330 sql_help.c:331 -#: sql_help.c:1282 sql_help.c:1287 sql_help.c:1288 sql_help.c:1289 -#: sql_help.c:1290 sql_help.c:1291 sql_help.c:1292 sql_help.c:1293 -#: sql_help.c:1298 sql_help.c:1300 sql_help.c:1304 sql_help.c:1306 -#: sql_help.c:1308 sql_help.c:1309 sql_help.c:1312 sql_help.c:1313 -#: sql_help.c:1314 sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 -#: sql_help.c:1318 sql_help.c:1319 sql_help.c:1320 sql_help.c:1323 -#: sql_help.c:1324 sql_help.c:3230 sql_help.c:3235 sql_help.c:3236 -#: sql_help.c:3237 sql_help.c:3238 sql_help.c:3244 sql_help.c:3245 -#: sql_help.c:3246 sql_help.c:3247 sql_help.c:3248 sql_help.c:3249 -#: sql_help.c:3250 sql_help.c:3251 +#: sql_help.c:309 sql_help.c:310 sql_help.c:311 sql_help.c:312 sql_help.c:313 +#: sql_help.c:314 sql_help.c:319 sql_help.c:323 sql_help.c:325 sql_help.c:327 +#: sql_help.c:328 sql_help.c:329 sql_help.c:330 sql_help.c:331 sql_help.c:332 +#: sql_help.c:333 sql_help.c:334 sql_help.c:335 sql_help.c:338 sql_help.c:339 +#: sql_help.c:1370 sql_help.c:1377 sql_help.c:1378 sql_help.c:1379 +#: sql_help.c:1380 sql_help.c:1381 sql_help.c:1382 sql_help.c:1383 +#: sql_help.c:1388 sql_help.c:1390 sql_help.c:1394 sql_help.c:1396 +#: sql_help.c:1400 sql_help.c:1401 sql_help.c:1404 sql_help.c:1405 +#: sql_help.c:1406 sql_help.c:1407 sql_help.c:1408 sql_help.c:1409 +#: sql_help.c:1410 sql_help.c:1411 sql_help.c:1412 sql_help.c:1417 +#: sql_help.c:1418 sql_help.c:3463 sql_help.c:3468 sql_help.c:3469 +#: sql_help.c:3470 sql_help.c:3471 sql_help.c:3477 sql_help.c:3478 +#: sql_help.c:3479 sql_help.c:3480 sql_help.c:3481 sql_help.c:3482 +#: sql_help.c:3483 sql_help.c:3484 msgid "object_name" msgstr "nome_objeto" -#: sql_help.c:309 sql_help.c:665 sql_help.c:1294 sql_help.c:1518 -#: sql_help.c:1553 sql_help.c:1612 sql_help.c:1817 sql_help.c:1848 -#: sql_help.c:2207 sql_help.c:2869 sql_help.c:3148 sql_help.c:3239 -#: sql_help.c:3329 sql_help.c:3333 sql_help.c:3337 sql_help.c:3340 -#: sql_help.c:3547 sql_help.c:3551 sql_help.c:3555 sql_help.c:3558 -#: sql_help.c:3716 sql_help.c:3720 sql_help.c:3724 sql_help.c:3727 +#: sql_help.c:315 sql_help.c:713 sql_help.c:1384 sql_help.c:1612 +#: sql_help.c:1647 sql_help.c:1710 sql_help.c:1931 sql_help.c:1962 +#: sql_help.c:2362 sql_help.c:3049 sql_help.c:3381 sql_help.c:3472 +#: sql_help.c:3575 sql_help.c:3579 sql_help.c:3583 sql_help.c:3586 +#: sql_help.c:3814 sql_help.c:3818 sql_help.c:3822 sql_help.c:3825 +#: sql_help.c:4008 sql_help.c:4012 sql_help.c:4016 sql_help.c:4019 msgid "function_name" msgstr "nome_função" -#: sql_help.c:314 sql_help.c:658 sql_help.c:1301 sql_help.c:1841 +#: sql_help.c:320 sql_help.c:706 sql_help.c:1391 sql_help.c:1955 msgid "operator_name" msgstr "nome_operador" -#: sql_help.c:315 sql_help.c:613 sql_help.c:617 sql_help.c:1302 -#: sql_help.c:1818 sql_help.c:2553 +#: sql_help.c:321 sql_help.c:647 sql_help.c:651 sql_help.c:1392 +#: sql_help.c:1932 sql_help.c:2708 msgid "left_type" msgstr "tipo_esquerda" -#: sql_help.c:316 sql_help.c:614 sql_help.c:618 sql_help.c:1303 -#: sql_help.c:1819 sql_help.c:2554 +#: sql_help.c:322 sql_help.c:648 sql_help.c:652 sql_help.c:1393 +#: sql_help.c:1933 sql_help.c:2709 msgid "right_type" msgstr "tipo_direita" -#: sql_help.c:318 sql_help.c:320 sql_help.c:630 sql_help.c:633 sql_help.c:636 -#: sql_help.c:656 sql_help.c:668 sql_help.c:676 sql_help.c:679 sql_help.c:682 -#: sql_help.c:1305 sql_help.c:1307 sql_help.c:1838 sql_help.c:1859 -#: sql_help.c:2070 sql_help.c:2563 sql_help.c:2572 +#: sql_help.c:324 sql_help.c:326 sql_help.c:669 sql_help.c:672 sql_help.c:675 +#: sql_help.c:704 sql_help.c:716 sql_help.c:724 sql_help.c:727 sql_help.c:730 +#: sql_help.c:1395 sql_help.c:1397 sql_help.c:1952 sql_help.c:1973 +#: sql_help.c:2209 sql_help.c:2718 sql_help.c:2727 msgid "index_method" msgstr "método_índice" -#: sql_help.c:332 +#: sql_help.c:336 sql_help.c:1012 sql_help.c:1413 sql_help.c:1818 +#: sql_help.c:2185 sql_help.c:2331 sql_help.c:2841 sql_help.c:3063 +#: sql_help.c:3395 +msgid "type_name" +msgstr "nome_tipo" + +#: sql_help.c:337 sql_help.c:1414 sql_help.c:1817 sql_help.c:2332 +#: sql_help.c:2556 sql_help.c:2842 sql_help.c:3055 sql_help.c:3387 +msgid "lang_name" +msgstr "nome_linguagem" + +#: sql_help.c:340 msgid "and aggregate_signature is:" msgstr "e assinatura_agregação é:" -#: sql_help.c:355 sql_help.c:1638 +#: sql_help.c:363 sql_help.c:1736 msgid "handler_function" msgstr "função_manipulação" -#: sql_help.c:356 sql_help.c:1639 +#: sql_help.c:364 sql_help.c:1737 msgid "validator_function" msgstr "função_validação" -#: sql_help.c:397 sql_help.c:464 sql_help.c:578 sql_help.c:879 sql_help.c:1074 -#: sql_help.c:2061 sql_help.c:2062 sql_help.c:2078 sql_help.c:2079 +#: sql_help.c:413 sql_help.c:487 sql_help.c:609 sql_help.c:956 sql_help.c:1151 +#: sql_help.c:2200 sql_help.c:2201 sql_help.c:2217 sql_help.c:2218 msgid "action" msgstr "ação" -#: sql_help.c:399 sql_help.c:406 sql_help.c:410 sql_help.c:411 sql_help.c:413 -#: sql_help.c:415 sql_help.c:416 sql_help.c:417 sql_help.c:419 sql_help.c:422 -#: sql_help.c:424 sql_help.c:580 sql_help.c:590 sql_help.c:592 sql_help.c:595 -#: sql_help.c:597 sql_help.c:776 sql_help.c:881 sql_help.c:894 sql_help.c:898 -#: sql_help.c:899 sql_help.c:903 sql_help.c:905 sql_help.c:906 sql_help.c:907 -#: sql_help.c:909 sql_help.c:912 sql_help.c:914 sql_help.c:1165 -#: sql_help.c:1168 sql_help.c:1188 sql_help.c:1284 sql_help.c:1380 -#: sql_help.c:1385 sql_help.c:1399 sql_help.c:1400 sql_help.c:1401 -#: sql_help.c:1662 sql_help.c:1702 sql_help.c:1763 sql_help.c:1798 -#: sql_help.c:1954 sql_help.c:2034 sql_help.c:2047 sql_help.c:2066 -#: sql_help.c:2068 sql_help.c:2075 sql_help.c:2086 sql_help.c:2103 -#: sql_help.c:2210 sql_help.c:2346 sql_help.c:2854 sql_help.c:2855 -#: sql_help.c:2899 sql_help.c:3133 sql_help.c:3134 sql_help.c:3232 -#: sql_help.c:3352 sql_help.c:3570 sql_help.c:3610 sql_help.c:3612 -#: sql_help.c:3629 sql_help.c:3632 sql_help.c:3739 +#: sql_help.c:415 sql_help.c:422 sql_help.c:426 sql_help.c:427 sql_help.c:430 +#: sql_help.c:432 sql_help.c:433 sql_help.c:434 sql_help.c:436 sql_help.c:439 +#: sql_help.c:441 sql_help.c:442 sql_help.c:611 sql_help.c:621 sql_help.c:623 +#: sql_help.c:626 sql_help.c:628 sql_help.c:850 sql_help.c:958 sql_help.c:971 +#: sql_help.c:975 sql_help.c:976 sql_help.c:980 sql_help.c:982 sql_help.c:983 +#: sql_help.c:984 sql_help.c:986 sql_help.c:989 sql_help.c:991 sql_help.c:1250 +#: sql_help.c:1253 sql_help.c:1273 sql_help.c:1372 sql_help.c:1474 +#: sql_help.c:1479 sql_help.c:1493 sql_help.c:1494 sql_help.c:1495 +#: sql_help.c:1768 sql_help.c:1815 sql_help.c:1877 sql_help.c:1912 +#: sql_help.c:2093 sql_help.c:2173 sql_help.c:2186 sql_help.c:2205 +#: sql_help.c:2207 sql_help.c:2214 sql_help.c:2225 sql_help.c:2242 +#: sql_help.c:2365 sql_help.c:2501 sql_help.c:3034 sql_help.c:3035 +#: sql_help.c:3114 sql_help.c:3129 sql_help.c:3131 sql_help.c:3133 +#: sql_help.c:3366 sql_help.c:3367 sql_help.c:3465 sql_help.c:3606 +#: sql_help.c:3845 sql_help.c:3887 sql_help.c:3889 sql_help.c:3891 +#: sql_help.c:3908 sql_help.c:3911 sql_help.c:4039 msgid "column_name" msgstr "nome_coluna" -#: sql_help.c:400 sql_help.c:581 sql_help.c:882 +#: sql_help.c:416 sql_help.c:612 sql_help.c:959 msgid "new_column_name" msgstr "novo_nome_coluna" -#: sql_help.c:405 sql_help.c:480 sql_help.c:589 sql_help.c:893 sql_help.c:1087 +#: sql_help.c:421 sql_help.c:503 sql_help.c:620 sql_help.c:970 sql_help.c:1164 msgid "where action is one of:" msgstr "onde ação é uma das:" -#: sql_help.c:407 sql_help.c:412 sql_help.c:895 sql_help.c:900 sql_help.c:1089 -#: sql_help.c:1093 sql_help.c:1592 sql_help.c:1663 sql_help.c:1837 -#: sql_help.c:2035 sql_help.c:2255 sql_help.c:2984 +#: sql_help.c:423 sql_help.c:428 sql_help.c:972 sql_help.c:977 sql_help.c:1166 +#: sql_help.c:1170 sql_help.c:1690 sql_help.c:1769 sql_help.c:1951 +#: sql_help.c:2174 sql_help.c:2410 sql_help.c:3216 msgid "data_type" msgstr "tipo_de_dado" -#: sql_help.c:408 sql_help.c:896 sql_help.c:901 sql_help.c:1090 -#: sql_help.c:1094 sql_help.c:1593 sql_help.c:1666 sql_help.c:1765 -#: sql_help.c:2036 sql_help.c:2256 sql_help.c:2262 +#: sql_help.c:424 sql_help.c:429 sql_help.c:973 sql_help.c:978 sql_help.c:1167 +#: sql_help.c:1171 sql_help.c:1691 sql_help.c:1772 sql_help.c:1879 +#: sql_help.c:2175 sql_help.c:2411 sql_help.c:2417 sql_help.c:3124 msgid "collation" msgstr "ordenação" -#: sql_help.c:409 sql_help.c:897 sql_help.c:1667 sql_help.c:2037 -#: sql_help.c:2048 +#: sql_help.c:425 sql_help.c:974 sql_help.c:1773 sql_help.c:2176 +#: sql_help.c:2187 msgid "column_constraint" msgstr "restrição_coluna" -#: sql_help.c:418 sql_help.c:591 sql_help.c:908 +#: sql_help.c:435 sql_help.c:622 sql_help.c:985 msgid "integer" msgstr "inteiro" -#: sql_help.c:420 sql_help.c:423 sql_help.c:593 sql_help.c:596 sql_help.c:910 -#: sql_help.c:913 +#: sql_help.c:437 sql_help.c:440 sql_help.c:624 sql_help.c:627 sql_help.c:987 +#: sql_help.c:990 msgid "attribute_option" msgstr "opção_atributo" -#: sql_help.c:427 sql_help.c:428 sql_help.c:429 sql_help.c:430 sql_help.c:920 -#: sql_help.c:921 sql_help.c:922 sql_help.c:923 sql_help.c:1321 +#: sql_help.c:445 sql_help.c:992 sql_help.c:1774 sql_help.c:2177 +#: sql_help.c:2188 +msgid "table_constraint" +msgstr "restrição_tabela" + +#: sql_help.c:448 sql_help.c:449 sql_help.c:450 sql_help.c:451 sql_help.c:997 +#: sql_help.c:998 sql_help.c:999 sql_help.c:1000 sql_help.c:1415 msgid "trigger_name" msgstr "nome_gatilho" -#: sql_help.c:481 sql_help.c:1705 +#: sql_help.c:452 sql_help.c:453 sql_help.c:1010 sql_help.c:1011 +#: sql_help.c:1775 sql_help.c:2180 +msgid "parent_table" +msgstr "tabela_ancestral" + +#: sql_help.c:504 sql_help.c:1819 msgid "execution_cost" msgstr "custo_execução" -#: sql_help.c:482 sql_help.c:1706 +#: sql_help.c:505 sql_help.c:1820 msgid "result_rows" msgstr "registros_retornados" -#: sql_help.c:497 sql_help.c:499 sql_help.c:501 -msgid "group_name" -msgstr "nome_grupo" - -#: sql_help.c:498 sql_help.c:500 sql_help.c:1147 sql_help.c:1569 -#: sql_help.c:1930 sql_help.c:1932 sql_help.c:1935 sql_help.c:1936 -#: sql_help.c:2119 sql_help.c:2331 sql_help.c:2702 sql_help.c:3437 +#: sql_help.c:526 sql_help.c:528 sql_help.c:783 sql_help.c:791 sql_help.c:795 +#: sql_help.c:798 sql_help.c:801 sql_help.c:1205 sql_help.c:1213 +#: sql_help.c:1216 sql_help.c:1218 sql_help.c:1220 sql_help.c:2067 +#: sql_help.c:2069 sql_help.c:2072 sql_help.c:2073 sql_help.c:3033 +#: sql_help.c:3037 sql_help.c:3040 sql_help.c:3042 sql_help.c:3044 +#: sql_help.c:3046 sql_help.c:3048 sql_help.c:3054 sql_help.c:3056 +#: sql_help.c:3058 sql_help.c:3060 sql_help.c:3062 sql_help.c:3064 +#, fuzzy +#| msgid "Replication" +msgid "role_specification" +msgstr "especificação_role" + +#: sql_help.c:527 sql_help.c:529 sql_help.c:1232 sql_help.c:1665 +#: sql_help.c:2075 sql_help.c:2486 sql_help.c:2875 sql_help.c:3691 msgid "user_name" msgstr "nome_usuário" -#: sql_help.c:518 sql_help.c:1574 sql_help.c:1769 sql_help.c:1801 -#: sql_help.c:2044 sql_help.c:2052 sql_help.c:2084 sql_help.c:2106 -#: sql_help.c:2118 sql_help.c:2881 sql_help.c:3160 +#: sql_help.c:530 sql_help.c:803 sql_help.c:1221 sql_help.c:2074 +#: sql_help.c:3065 +#, fuzzy +#| msgid "where option can be:" +msgid "where role_specification can be:" +msgstr "onde especificação_role pode ser:" + +#: sql_help.c:532 +msgid "group_name" +msgstr "nome_grupo" + +#: sql_help.c:549 sql_help.c:1670 sql_help.c:1883 sql_help.c:1915 +#: sql_help.c:2183 sql_help.c:2191 sql_help.c:2223 sql_help.c:2245 +#: sql_help.c:2257 sql_help.c:3061 sql_help.c:3393 msgid "tablespace_name" msgstr "nome_tablespace" -#: sql_help.c:520 sql_help.c:523 sql_help.c:599 sql_help.c:601 sql_help.c:929 -#: sql_help.c:931 sql_help.c:1767 sql_help.c:1799 sql_help.c:2042 -#: sql_help.c:2050 sql_help.c:2082 sql_help.c:2104 +#: sql_help.c:551 sql_help.c:554 sql_help.c:630 sql_help.c:632 sql_help.c:1007 +#: sql_help.c:1009 sql_help.c:1881 sql_help.c:1913 sql_help.c:2181 +#: sql_help.c:2189 sql_help.c:2221 sql_help.c:2243 msgid "storage_parameter" msgstr "parâmetro_armazenamento" -#: sql_help.c:546 sql_help.c:1299 sql_help.c:3243 +#: sql_help.c:577 sql_help.c:1389 sql_help.c:3476 msgid "large_object_oid" msgstr "oid_objeto_grande" -#: sql_help.c:598 sql_help.c:928 sql_help.c:937 sql_help.c:940 sql_help.c:1228 +#: sql_help.c:629 sql_help.c:1005 sql_help.c:1014 sql_help.c:1017 +#: sql_help.c:1313 msgid "index_name" msgstr "nome_índice" -#: sql_help.c:657 sql_help.c:669 sql_help.c:1840 +#: sql_help.c:705 sql_help.c:717 sql_help.c:1954 msgid "strategy_number" msgstr "número_estratégia" -#: sql_help.c:659 sql_help.c:660 sql_help.c:663 sql_help.c:664 sql_help.c:670 -#: sql_help.c:671 sql_help.c:673 sql_help.c:674 sql_help.c:1842 -#: sql_help.c:1843 sql_help.c:1846 sql_help.c:1847 +#: sql_help.c:707 sql_help.c:708 sql_help.c:711 sql_help.c:712 sql_help.c:718 +#: sql_help.c:719 sql_help.c:721 sql_help.c:722 sql_help.c:1956 +#: sql_help.c:1957 sql_help.c:1960 sql_help.c:1961 msgid "op_type" msgstr "tipo_operador" -#: sql_help.c:661 sql_help.c:1844 +#: sql_help.c:709 sql_help.c:1958 msgid "sort_family_name" msgstr "nome_família_ordenação" -#: sql_help.c:662 sql_help.c:672 sql_help.c:1845 +#: sql_help.c:710 sql_help.c:720 sql_help.c:1959 msgid "support_number" msgstr "número_suporte" -#: sql_help.c:666 sql_help.c:1519 sql_help.c:1849 +#: sql_help.c:714 sql_help.c:1613 sql_help.c:1963 sql_help.c:2334 +#: sql_help.c:2336 msgid "argument_type" msgstr "tipo_argumento" -#: sql_help.c:715 sql_help.c:1126 sql_help.c:1741 sql_help.c:1890 -#: sql_help.c:2314 +#: sql_help.c:744 sql_help.c:813 sql_help.c:849 sql_help.c:1130 +#: sql_help.c:1272 sql_help.c:1312 sql_help.c:1374 sql_help.c:1399 +#: sql_help.c:1403 sql_help.c:1416 sql_help.c:1473 sql_help.c:1478 +#: sql_help.c:1767 sql_help.c:1875 sql_help.c:1911 sql_help.c:1986 +#: sql_help.c:2044 sql_help.c:2092 sql_help.c:2172 sql_help.c:2184 +#: sql_help.c:2241 sql_help.c:2359 sql_help.c:2535 sql_help.c:2744 +#: sql_help.c:2761 sql_help.c:2851 sql_help.c:3031 sql_help.c:3036 +#: sql_help.c:3081 sql_help.c:3112 sql_help.c:3363 sql_help.c:3368 +#: sql_help.c:3464 sql_help.c:3561 sql_help.c:3563 sql_help.c:3612 +#: sql_help.c:3651 sql_help.c:3800 sql_help.c:3802 sql_help.c:3851 +#: sql_help.c:3885 sql_help.c:3907 sql_help.c:3909 sql_help.c:3910 +#: sql_help.c:3994 sql_help.c:3996 sql_help.c:4045 +msgid "table_name" +msgstr "nome_tabela" + +#: sql_help.c:747 sql_help.c:1988 +#, fuzzy +#| msgid "missing expression" +msgid "using_expression" +msgstr "expressão_using" + +#: sql_help.c:748 sql_help.c:1989 +#, fuzzy +#| msgid "expression" +msgid "check_expression" +msgstr "expressão_check" + +#: sql_help.c:787 sql_help.c:1209 sql_help.c:1855 sql_help.c:2021 +#: sql_help.c:2469 msgid "password" msgstr "senha" -#: sql_help.c:716 sql_help.c:1127 sql_help.c:1742 sql_help.c:1891 -#: sql_help.c:2315 +#: sql_help.c:788 sql_help.c:1210 sql_help.c:1856 sql_help.c:2022 +#: sql_help.c:2470 msgid "timestamp" msgstr "tempo_absoluto" -#: sql_help.c:720 sql_help.c:724 sql_help.c:727 sql_help.c:730 sql_help.c:2861 -#: sql_help.c:3140 +#: sql_help.c:792 sql_help.c:796 sql_help.c:799 sql_help.c:802 sql_help.c:3041 +#: sql_help.c:3373 msgid "database_name" msgstr "nome_banco_de_dados" -#: sql_help.c:739 sql_help.c:775 sql_help.c:1053 sql_help.c:1187 -#: sql_help.c:1227 sql_help.c:1286 sql_help.c:1311 sql_help.c:1322 -#: sql_help.c:1379 sql_help.c:1384 sql_help.c:1661 sql_help.c:1761 -#: sql_help.c:1797 sql_help.c:1913 sql_help.c:1953 sql_help.c:2033 -#: sql_help.c:2045 sql_help.c:2102 sql_help.c:2204 sql_help.c:2380 -#: sql_help.c:2597 sql_help.c:2678 sql_help.c:2851 sql_help.c:2856 -#: sql_help.c:2898 sql_help.c:3130 sql_help.c:3135 sql_help.c:3231 -#: sql_help.c:3318 sql_help.c:3320 sql_help.c:3358 sql_help.c:3397 -#: sql_help.c:3536 sql_help.c:3538 sql_help.c:3576 sql_help.c:3608 -#: sql_help.c:3628 sql_help.c:3630 sql_help.c:3631 sql_help.c:3705 -#: sql_help.c:3707 sql_help.c:3745 -msgid "table_name" -msgstr "nome_tabela" - -#: sql_help.c:769 sql_help.c:1948 +#: sql_help.c:843 sql_help.c:2087 msgid "increment" msgstr "incremento" -#: sql_help.c:770 sql_help.c:1949 +#: sql_help.c:844 sql_help.c:2088 msgid "minvalue" msgstr "valor_mínimo" -#: sql_help.c:771 sql_help.c:1950 +#: sql_help.c:845 sql_help.c:2089 msgid "maxvalue" msgstr "valor_máximo" -#: sql_help.c:772 sql_help.c:1951 sql_help.c:3316 sql_help.c:3395 -#: sql_help.c:3534 sql_help.c:3648 sql_help.c:3703 +#: sql_help.c:846 sql_help.c:2090 sql_help.c:3559 sql_help.c:3649 +#: sql_help.c:3798 sql_help.c:3927 sql_help.c:3992 msgid "start" msgstr "início" -#: sql_help.c:773 +#: sql_help.c:847 msgid "restart" msgstr "reinício" -#: sql_help.c:774 sql_help.c:1952 +#: sql_help.c:848 sql_help.c:2091 msgid "cache" msgstr "cache" -#: sql_help.c:915 sql_help.c:2038 sql_help.c:2049 -msgid "table_constraint" -msgstr "restrição_tabela" - -#: sql_help.c:916 +#: sql_help.c:993 msgid "table_constraint_using_index" msgstr "restrição_tabela_utilizando_índice" -#: sql_help.c:924 sql_help.c:925 sql_help.c:926 sql_help.c:927 +#: sql_help.c:1001 sql_help.c:1002 sql_help.c:1003 sql_help.c:1004 msgid "rewrite_rule_name" msgstr "nome_regra_reescrita" -#: sql_help.c:932 sql_help.c:933 sql_help.c:2041 -msgid "parent_table" -msgstr "tabela_ancestral" - -#: sql_help.c:934 sql_help.c:2046 sql_help.c:2883 sql_help.c:3162 -msgid "type_name" -msgstr "nome_tipo" - -#: sql_help.c:938 +#: sql_help.c:1015 msgid "and table_constraint_using_index is:" msgstr "e restrição_tabela_utilizando_índice é:" -#: sql_help.c:956 sql_help.c:959 sql_help.c:2121 +#: sql_help.c:1033 sql_help.c:1036 sql_help.c:2260 msgid "tablespace_option" msgstr "opção_tablespace" -#: sql_help.c:980 sql_help.c:983 sql_help.c:989 sql_help.c:993 +#: sql_help.c:1057 sql_help.c:1060 sql_help.c:1066 sql_help.c:1070 msgid "token_type" msgstr "tipo_elemento" -#: sql_help.c:981 sql_help.c:984 +#: sql_help.c:1058 sql_help.c:1061 msgid "dictionary_name" msgstr "nome_dicionário" -#: sql_help.c:986 sql_help.c:990 +#: sql_help.c:1063 sql_help.c:1067 msgid "old_dictionary" msgstr "dicionário_antigo" -#: sql_help.c:987 sql_help.c:991 +#: sql_help.c:1064 sql_help.c:1068 msgid "new_dictionary" msgstr "novo_dicionário" -#: sql_help.c:1078 sql_help.c:1088 sql_help.c:1091 sql_help.c:1092 -#: sql_help.c:2254 +#: sql_help.c:1155 sql_help.c:1165 sql_help.c:1168 sql_help.c:1169 +#: sql_help.c:2409 msgid "attribute_name" msgstr "nome_atributo" -#: sql_help.c:1079 +#: sql_help.c:1156 msgid "new_attribute_name" msgstr "novo_nome_atributo" -#: sql_help.c:1085 +#: sql_help.c:1162 msgid "new_enum_value" msgstr "novo_valor_enum" -#: sql_help.c:1086 +#: sql_help.c:1163 msgid "existing_enum_value" msgstr "valor_enum_existente" -#: sql_help.c:1148 sql_help.c:1668 sql_help.c:1964 sql_help.c:2332 -#: sql_help.c:2703 sql_help.c:2867 sql_help.c:3146 +#: sql_help.c:1233 sql_help.c:1776 sql_help.c:2103 sql_help.c:2487 +#: sql_help.c:2876 sql_help.c:3047 sql_help.c:3082 sql_help.c:3379 msgid "server_name" msgstr "nome_servidor" -#: sql_help.c:1176 sql_help.c:1179 sql_help.c:2347 +#: sql_help.c:1261 sql_help.c:1264 sql_help.c:2502 msgid "view_option_name" msgstr "nome_opção_visão" -#: sql_help.c:1177 sql_help.c:2348 +#: sql_help.c:1262 sql_help.c:2503 msgid "view_option_value" msgstr "valor_opção_visão" -#: sql_help.c:1202 sql_help.c:3453 sql_help.c:3455 sql_help.c:3479 +#: sql_help.c:1287 sql_help.c:3707 sql_help.c:3709 sql_help.c:3733 msgid "transaction_mode" msgstr "modo_transação" -#: sql_help.c:1203 sql_help.c:3456 sql_help.c:3480 +#: sql_help.c:1288 sql_help.c:3710 sql_help.c:3734 msgid "where transaction_mode is one of:" msgstr "onde modo_transação é um dos:" -#: sql_help.c:1283 +#: sql_help.c:1371 msgid "relation_name" msgstr "nome_relação" -#: sql_help.c:1310 +#: sql_help.c:1376 sql_help.c:3043 sql_help.c:3375 +msgid "domain_name" +msgstr "nome_domínio" + +#: sql_help.c:1398 +#, fuzzy +#| msgid "role_name" +msgid "policy_name" +msgstr "nome_role" + +#: sql_help.c:1402 msgid "rule_name" msgstr "nome_regra" -#: sql_help.c:1325 +#: sql_help.c:1419 msgid "text" msgstr "texto" -#: sql_help.c:1350 sql_help.c:2993 sql_help.c:3180 +#: sql_help.c:1444 sql_help.c:3225 sql_help.c:3413 msgid "transaction_id" msgstr "id_transação" -#: sql_help.c:1381 sql_help.c:1387 sql_help.c:2919 +#: sql_help.c:1475 sql_help.c:1481 sql_help.c:3151 msgid "filename" msgstr "arquivo" -#: sql_help.c:1382 sql_help.c:1388 sql_help.c:1915 sql_help.c:1916 -#: sql_help.c:1917 +#: sql_help.c:1476 sql_help.c:1482 sql_help.c:2046 sql_help.c:2047 +#: sql_help.c:2048 msgid "command" msgstr "comando" -#: sql_help.c:1386 sql_help.c:1802 sql_help.c:2107 sql_help.c:2349 -#: sql_help.c:2367 sql_help.c:2901 +#: sql_help.c:1480 sql_help.c:1916 sql_help.c:2246 sql_help.c:2504 +#: sql_help.c:2522 sql_help.c:3116 msgid "query" msgstr "consulta" -#: sql_help.c:1390 sql_help.c:2748 +#: sql_help.c:1484 sql_help.c:2921 msgid "where option can be one of:" msgstr "onde opção pode ser um das:" -#: sql_help.c:1391 +#: sql_help.c:1485 msgid "format_name" msgstr "nome_formato" -#: sql_help.c:1392 sql_help.c:1393 sql_help.c:1396 sql_help.c:2749 -#: sql_help.c:2750 sql_help.c:2751 sql_help.c:2752 sql_help.c:2753 +#: sql_help.c:1486 sql_help.c:1487 sql_help.c:1490 sql_help.c:2922 +#: sql_help.c:2923 sql_help.c:2924 sql_help.c:2925 sql_help.c:2926 msgid "boolean" msgstr "booleano" -#: sql_help.c:1394 +#: sql_help.c:1488 msgid "delimiter_character" msgstr "caracter_delimitador" -#: sql_help.c:1395 +#: sql_help.c:1489 msgid "null_string" msgstr "cadeia_nula" -#: sql_help.c:1397 +#: sql_help.c:1491 msgid "quote_character" msgstr "caracter_separador" -#: sql_help.c:1398 +#: sql_help.c:1492 msgid "escape_character" msgstr "caracter_escape" -#: sql_help.c:1402 +#: sql_help.c:1496 msgid "encoding_name" msgstr "nome_codificação" -#: sql_help.c:1459 sql_help.c:1475 sql_help.c:1478 +#: sql_help.c:1553 sql_help.c:1569 sql_help.c:1572 msgid "arg_data_type" msgstr "tipo_de_dado_arg" -#: sql_help.c:1460 sql_help.c:1479 sql_help.c:1487 +#: sql_help.c:1554 sql_help.c:1573 sql_help.c:1581 msgid "sfunc" msgstr "função_trans_estado" -#: sql_help.c:1461 sql_help.c:1480 sql_help.c:1488 +#: sql_help.c:1555 sql_help.c:1574 sql_help.c:1582 msgid "state_data_type" msgstr "tipo_de_dado_estado" -#: sql_help.c:1462 sql_help.c:1481 sql_help.c:1489 +#: sql_help.c:1556 sql_help.c:1575 sql_help.c:1583 msgid "state_data_size" msgstr "tamanho_de_dado_estado" -#: sql_help.c:1463 sql_help.c:1482 sql_help.c:1490 +#: sql_help.c:1557 sql_help.c:1576 sql_help.c:1584 msgid "ffunc" msgstr "função_final" -#: sql_help.c:1464 sql_help.c:1483 sql_help.c:1491 +#: sql_help.c:1558 sql_help.c:1577 sql_help.c:1585 msgid "initial_condition" msgstr "condição_inicial" -#: sql_help.c:1465 sql_help.c:1492 +#: sql_help.c:1559 sql_help.c:1586 msgid "msfunc" msgstr "função_mestado" -#: sql_help.c:1466 sql_help.c:1493 +#: sql_help.c:1560 sql_help.c:1587 msgid "minvfunc" msgstr "função_minv" -#: sql_help.c:1467 sql_help.c:1494 +#: sql_help.c:1561 sql_help.c:1588 msgid "mstate_data_type" msgstr "tipo_de_dado_mestado" -#: sql_help.c:1468 sql_help.c:1495 +#: sql_help.c:1562 sql_help.c:1589 msgid "mstate_data_size" msgstr "tamanho_de_dado_mestado" -#: sql_help.c:1469 sql_help.c:1496 +#: sql_help.c:1563 sql_help.c:1590 msgid "mffunc" msgstr "função_mfinal" -#: sql_help.c:1470 sql_help.c:1497 +#: sql_help.c:1564 sql_help.c:1591 msgid "minitial_condition" msgstr "condição_minicial" -#: sql_help.c:1471 sql_help.c:1498 +#: sql_help.c:1565 sql_help.c:1592 msgid "sort_operator" msgstr "operador_ordenação" -#: sql_help.c:1484 +#: sql_help.c:1578 msgid "or the old syntax" msgstr "ou a sintaxe antiga" -#: sql_help.c:1486 +#: sql_help.c:1580 msgid "base_type" msgstr "tipo_base" -#: sql_help.c:1537 +#: sql_help.c:1631 msgid "locale" msgstr "configuração regional" -#: sql_help.c:1538 sql_help.c:1572 +#: sql_help.c:1632 sql_help.c:1668 msgid "lc_collate" msgstr "lc_collate" -#: sql_help.c:1539 sql_help.c:1573 +#: sql_help.c:1633 sql_help.c:1669 msgid "lc_ctype" msgstr "lc_ctype" -#: sql_help.c:1541 +#: sql_help.c:1635 msgid "existing_collation" msgstr "ordenação_existente" -#: sql_help.c:1551 +#: sql_help.c:1645 msgid "source_encoding" msgstr "codificação_origem" -#: sql_help.c:1552 +#: sql_help.c:1646 msgid "dest_encoding" msgstr "codificação_destino" -#: sql_help.c:1570 sql_help.c:2147 +#: sql_help.c:1666 sql_help.c:2286 msgid "template" msgstr "modelo" -#: sql_help.c:1571 +#: sql_help.c:1667 msgid "encoding" msgstr "codificação" -#: sql_help.c:1596 +#: sql_help.c:1693 +msgid "constraint" +msgstr "restrição" + +#: sql_help.c:1694 msgid "where constraint is:" msgstr "onde restrição é:" -#: sql_help.c:1610 sql_help.c:1912 sql_help.c:2203 +#: sql_help.c:1708 sql_help.c:2043 sql_help.c:2358 msgid "event" msgstr "evento" -#: sql_help.c:1611 +#: sql_help.c:1709 msgid "filter_variable" msgstr "variável_filtro" -#: sql_help.c:1623 +#: sql_help.c:1721 msgid "extension_name" msgstr "nome_extensão" -#: sql_help.c:1625 +#: sql_help.c:1723 msgid "version" msgstr "versão" -#: sql_help.c:1626 +#: sql_help.c:1724 msgid "old_version" msgstr "versão_antiga" -#: sql_help.c:1671 sql_help.c:2053 +#: sql_help.c:1779 sql_help.c:2192 msgid "where column_constraint is:" msgstr "onde restrição_coluna é:" -#: sql_help.c:1673 sql_help.c:1700 sql_help.c:2056 +#: sql_help.c:1782 sql_help.c:1813 sql_help.c:2195 msgid "default_expr" msgstr "expressão_padrão" -#: sql_help.c:1701 +#: sql_help.c:1783 sql_help.c:2202 +msgid "and table_constraint is:" +msgstr "e restrição_tabela é:" + +#: sql_help.c:1814 msgid "rettype" msgstr "tipo_retorno" -#: sql_help.c:1703 +#: sql_help.c:1816 msgid "column_type" msgstr "tipo_coluna" -#: sql_help.c:1704 sql_help.c:2401 sql_help.c:2875 sql_help.c:3154 -msgid "lang_name" -msgstr "nome_linguagem" - -#: sql_help.c:1710 +#: sql_help.c:1824 msgid "definition" msgstr "definição" -#: sql_help.c:1711 +#: sql_help.c:1825 msgid "obj_file" msgstr "arquivo_objeto" -#: sql_help.c:1712 +#: sql_help.c:1826 msgid "link_symbol" msgstr "símbolo_ligação" -#: sql_help.c:1713 +#: sql_help.c:1827 msgid "attribute" msgstr "atributo" -#: sql_help.c:1748 sql_help.c:1897 sql_help.c:2321 +#: sql_help.c:1862 sql_help.c:2028 sql_help.c:2476 msgid "uid" msgstr "uid" -#: sql_help.c:1762 +#: sql_help.c:1876 msgid "method" msgstr "método" -#: sql_help.c:1766 sql_help.c:2088 +#: sql_help.c:1880 sql_help.c:2227 sql_help.c:3125 msgid "opclass" msgstr "classe_operadores" -#: sql_help.c:1770 sql_help.c:2074 +#: sql_help.c:1884 sql_help.c:2213 msgid "predicate" msgstr "predicado" -#: sql_help.c:1782 +#: sql_help.c:1896 msgid "call_handler" msgstr "manipulador_chamada" -#: sql_help.c:1783 +#: sql_help.c:1897 msgid "inline_handler" msgstr "manipulador_em_linha" -#: sql_help.c:1784 +#: sql_help.c:1898 msgid "valfunction" msgstr "função_validação" -#: sql_help.c:1820 +#: sql_help.c:1934 msgid "com_op" msgstr "operador_comutação" -#: sql_help.c:1821 +#: sql_help.c:1935 msgid "neg_op" msgstr "operador_negação" -#: sql_help.c:1822 +#: sql_help.c:1936 msgid "res_proc" msgstr "proc_restrição" -#: sql_help.c:1823 +#: sql_help.c:1937 msgid "join_proc" msgstr "proc_junção" -#: sql_help.c:1839 +#: sql_help.c:1953 msgid "family_name" msgstr "nome_família" -#: sql_help.c:1850 +#: sql_help.c:1964 msgid "storage_type" msgstr "tipo_armazenamento" -#: sql_help.c:1914 sql_help.c:2206 sql_help.c:2383 sql_help.c:3307 -#: sql_help.c:3309 sql_help.c:3386 sql_help.c:3388 sql_help.c:3525 -#: sql_help.c:3527 sql_help.c:3615 sql_help.c:3694 sql_help.c:3696 +#: sql_help.c:2045 sql_help.c:2361 sql_help.c:2538 sql_help.c:3135 +#: sql_help.c:3550 sql_help.c:3552 sql_help.c:3640 sql_help.c:3642 +#: sql_help.c:3789 sql_help.c:3791 sql_help.c:3894 sql_help.c:3983 +#: sql_help.c:3985 msgid "condition" msgstr "condição" -#: sql_help.c:1918 sql_help.c:2209 +#: sql_help.c:2049 sql_help.c:2364 msgid "where event can be one of:" msgstr "onde evento pode ser um dos:" -#: sql_help.c:1931 sql_help.c:1933 +#: sql_help.c:2068 sql_help.c:2070 msgid "schema_element" msgstr "elemento_esquema" -#: sql_help.c:1965 +#: sql_help.c:2104 msgid "server_type" msgstr "tipo_servidor" -#: sql_help.c:1966 +#: sql_help.c:2105 msgid "server_version" msgstr "versão_servidor" -#: sql_help.c:1967 sql_help.c:2865 sql_help.c:3144 +#: sql_help.c:2106 sql_help.c:3045 sql_help.c:3377 msgid "fdw_name" msgstr "nome_fdw" -#: sql_help.c:2039 +#: sql_help.c:2178 msgid "source_table" msgstr "tabela_origem" -#: sql_help.c:2040 +#: sql_help.c:2179 msgid "like_option" msgstr "opção_like" -#: sql_help.c:2057 sql_help.c:2058 sql_help.c:2067 sql_help.c:2069 -#: sql_help.c:2073 +#: sql_help.c:2196 sql_help.c:2197 sql_help.c:2206 sql_help.c:2208 +#: sql_help.c:2212 msgid "index_parameters" msgstr "parâmetros_índice" -#: sql_help.c:2059 sql_help.c:2076 +#: sql_help.c:2198 sql_help.c:2215 msgid "reftable" msgstr "tabela_ref" -#: sql_help.c:2060 sql_help.c:2077 +#: sql_help.c:2199 sql_help.c:2216 msgid "refcolumn" msgstr "coluna_ref" -#: sql_help.c:2063 -msgid "and table_constraint is:" -msgstr "e restrição_tabela é:" - -#: sql_help.c:2071 +#: sql_help.c:2210 msgid "exclude_element" msgstr "elemento_exclusão" -#: sql_help.c:2072 sql_help.c:3314 sql_help.c:3393 sql_help.c:3532 -#: sql_help.c:3646 sql_help.c:3701 +#: sql_help.c:2211 sql_help.c:3557 sql_help.c:3647 sql_help.c:3796 +#: sql_help.c:3925 sql_help.c:3990 msgid "operator" msgstr "operador" -#: sql_help.c:2080 +#: sql_help.c:2219 msgid "and like_option is:" msgstr "e opção_like é:" -#: sql_help.c:2081 +#: sql_help.c:2220 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "parâmetros_índice em restrições UNIQUE, PRIMARY KEY e EXCLUDE são:" -#: sql_help.c:2085 +#: sql_help.c:2224 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "elemento_exclusão em uma restrição EXCLUDE é:" -#: sql_help.c:2120 +#: sql_help.c:2259 msgid "directory" msgstr "diretório" -#: sql_help.c:2134 +#: sql_help.c:2273 msgid "parser_name" msgstr "nome_analisador" -#: sql_help.c:2135 +#: sql_help.c:2274 msgid "source_config" msgstr "configuração_origem" -#: sql_help.c:2164 +#: sql_help.c:2303 msgid "start_function" msgstr "função_início" -#: sql_help.c:2165 +#: sql_help.c:2304 msgid "gettoken_function" msgstr "função_gettoken" -#: sql_help.c:2166 +#: sql_help.c:2305 msgid "end_function" msgstr "função_fim" -#: sql_help.c:2167 +#: sql_help.c:2306 msgid "lextypes_function" msgstr "função_lextypes" -#: sql_help.c:2168 +#: sql_help.c:2307 msgid "headline_function" msgstr "função_headline" -#: sql_help.c:2180 +#: sql_help.c:2319 msgid "init_function" msgstr "função_init" -#: sql_help.c:2181 +#: sql_help.c:2320 msgid "lexize_function" msgstr "função_lexize" -#: sql_help.c:2205 +#: sql_help.c:2333 +#, fuzzy +#| msgid "function_name" +msgid "from_sql_function_name" +msgstr "nome_função" + +#: sql_help.c:2335 +#, fuzzy +#| msgid "function_name" +msgid "to_sql_function_name" +msgstr "nome_função" + +#: sql_help.c:2360 msgid "referenced_table_name" msgstr "nome_tabela_referenciada" -#: sql_help.c:2208 +#: sql_help.c:2363 msgid "arguments" msgstr "argumentos" -#: sql_help.c:2258 sql_help.c:3252 +#: sql_help.c:2413 sql_help.c:3485 msgid "label" msgstr "rótulo" -#: sql_help.c:2260 +#: sql_help.c:2415 msgid "subtype" msgstr "subtipo" -#: sql_help.c:2261 +#: sql_help.c:2416 msgid "subtype_operator_class" msgstr "classe_operadores_subtipo" -#: sql_help.c:2263 +#: sql_help.c:2418 msgid "canonical_function" msgstr "função_canônica" -#: sql_help.c:2264 +#: sql_help.c:2419 msgid "subtype_diff_function" msgstr "função_diff_subtipo" -#: sql_help.c:2266 +#: sql_help.c:2421 msgid "input_function" msgstr "função_entrada" -#: sql_help.c:2267 +#: sql_help.c:2422 msgid "output_function" msgstr "função_saída" -#: sql_help.c:2268 +#: sql_help.c:2423 msgid "receive_function" msgstr "função_recepção" -#: sql_help.c:2269 +#: sql_help.c:2424 msgid "send_function" msgstr "função_envio" -#: sql_help.c:2270 +#: sql_help.c:2425 msgid "type_modifier_input_function" msgstr "função_entrada_modificador_tipo" -#: sql_help.c:2271 +#: sql_help.c:2426 msgid "type_modifier_output_function" msgstr "função_saída_modificador_tipo" -#: sql_help.c:2272 +#: sql_help.c:2427 msgid "analyze_function" msgstr "função_análise" -#: sql_help.c:2273 +#: sql_help.c:2428 msgid "internallength" msgstr "tamanho_interno" -#: sql_help.c:2274 +#: sql_help.c:2429 msgid "alignment" msgstr "alinhamento" -#: sql_help.c:2275 +#: sql_help.c:2430 msgid "storage" msgstr "armazenamento" -#: sql_help.c:2276 +#: sql_help.c:2431 msgid "like_type" msgstr "tipo_like" -#: sql_help.c:2277 +#: sql_help.c:2432 msgid "category" msgstr "categoria" -#: sql_help.c:2278 +#: sql_help.c:2433 msgid "preferred" msgstr "tipo_preferido" -#: sql_help.c:2279 +#: sql_help.c:2434 msgid "default" msgstr "valor_padrão" -#: sql_help.c:2280 +#: sql_help.c:2435 msgid "element" msgstr "elemento" -#: sql_help.c:2281 +#: sql_help.c:2436 msgid "delimiter" msgstr "delimitador" -#: sql_help.c:2282 +#: sql_help.c:2437 msgid "collatable" msgstr "collatable" -#: sql_help.c:2379 sql_help.c:2897 sql_help.c:3302 sql_help.c:3380 -#: sql_help.c:3520 sql_help.c:3607 sql_help.c:3689 +#: sql_help.c:2534 sql_help.c:3111 sql_help.c:3545 sql_help.c:3634 +#: sql_help.c:3784 sql_help.c:3884 sql_help.c:3978 msgid "with_query" msgstr "consulta_with" -#: sql_help.c:2381 sql_help.c:3321 sql_help.c:3324 sql_help.c:3327 -#: sql_help.c:3331 sql_help.c:3335 sql_help.c:3343 sql_help.c:3539 -#: sql_help.c:3542 sql_help.c:3545 sql_help.c:3549 sql_help.c:3553 -#: sql_help.c:3561 sql_help.c:3609 sql_help.c:3708 sql_help.c:3711 -#: sql_help.c:3714 sql_help.c:3718 sql_help.c:3722 sql_help.c:3730 +#: sql_help.c:2536 sql_help.c:3113 sql_help.c:3564 sql_help.c:3570 +#: sql_help.c:3573 sql_help.c:3577 sql_help.c:3581 sql_help.c:3589 +#: sql_help.c:3803 sql_help.c:3809 sql_help.c:3812 sql_help.c:3816 +#: sql_help.c:3820 sql_help.c:3828 sql_help.c:3886 sql_help.c:3997 +#: sql_help.c:4003 sql_help.c:4006 sql_help.c:4010 sql_help.c:4014 +#: sql_help.c:4022 msgid "alias" msgstr "aliás" -#: sql_help.c:2382 +#: sql_help.c:2537 msgid "using_list" msgstr "lista_using" -#: sql_help.c:2384 sql_help.c:2779 sql_help.c:2960 sql_help.c:3616 +#: sql_help.c:2539 sql_help.c:2952 sql_help.c:3192 sql_help.c:3895 msgid "cursor_name" msgstr "nome_cursor" -#: sql_help.c:2385 sql_help.c:2902 sql_help.c:3617 +#: sql_help.c:2540 sql_help.c:3119 sql_help.c:3896 msgid "output_expression" msgstr "expressão_saída" -#: sql_help.c:2386 sql_help.c:2903 sql_help.c:3305 sql_help.c:3383 -#: sql_help.c:3523 sql_help.c:3618 sql_help.c:3692 +#: sql_help.c:2541 sql_help.c:3120 sql_help.c:3548 sql_help.c:3637 +#: sql_help.c:3787 sql_help.c:3897 sql_help.c:3981 msgid "output_name" msgstr "nome_saída" -#: sql_help.c:2402 +#: sql_help.c:2557 msgid "code" msgstr "código" -#: sql_help.c:2727 +#: sql_help.c:2900 msgid "parameter" msgstr "parâmetro" -#: sql_help.c:2746 sql_help.c:2747 sql_help.c:2985 +#: sql_help.c:2919 sql_help.c:2920 sql_help.c:3217 msgid "statement" msgstr "comando" -#: sql_help.c:2778 sql_help.c:2959 +#: sql_help.c:2951 sql_help.c:3191 msgid "direction" msgstr "direção" -#: sql_help.c:2780 sql_help.c:2961 +#: sql_help.c:2953 sql_help.c:3193 msgid "where direction can be empty or one of:" msgstr "onde direção pode ser vazio ou um dos:" -#: sql_help.c:2781 sql_help.c:2782 sql_help.c:2783 sql_help.c:2784 -#: sql_help.c:2785 sql_help.c:2962 sql_help.c:2963 sql_help.c:2964 -#: sql_help.c:2965 sql_help.c:2966 sql_help.c:3315 sql_help.c:3317 -#: sql_help.c:3394 sql_help.c:3396 sql_help.c:3533 sql_help.c:3535 -#: sql_help.c:3647 sql_help.c:3649 sql_help.c:3702 sql_help.c:3704 +#: sql_help.c:2954 sql_help.c:2955 sql_help.c:2956 sql_help.c:2957 +#: sql_help.c:2958 sql_help.c:3194 sql_help.c:3195 sql_help.c:3196 +#: sql_help.c:3197 sql_help.c:3198 sql_help.c:3558 sql_help.c:3560 +#: sql_help.c:3648 sql_help.c:3650 sql_help.c:3797 sql_help.c:3799 +#: sql_help.c:3926 sql_help.c:3928 sql_help.c:3991 sql_help.c:3993 msgid "count" msgstr "contador" -#: sql_help.c:2858 sql_help.c:3137 +#: sql_help.c:3038 sql_help.c:3370 msgid "sequence_name" msgstr "nome_sequência" -#: sql_help.c:2863 sql_help.c:3142 -msgid "domain_name" -msgstr "nome_domínio" - -#: sql_help.c:2871 sql_help.c:3150 +#: sql_help.c:3051 sql_help.c:3383 msgid "arg_name" msgstr "nome_argumento" -#: sql_help.c:2872 sql_help.c:3151 +#: sql_help.c:3052 sql_help.c:3384 msgid "arg_type" msgstr "tipo_argumento" -#: sql_help.c:2877 sql_help.c:3156 +#: sql_help.c:3057 sql_help.c:3389 msgid "loid" msgstr "loid" -#: sql_help.c:2911 sql_help.c:2974 sql_help.c:3593 +#: sql_help.c:3080 +#, fuzzy +#| msgid "remove a schema" +msgid "remote_schema" +msgstr "esquema_remoto" + +#: sql_help.c:3083 +#, fuzzy +#| msgid "local socket" +msgid "local_schema" +msgstr "esquema_local" + +#: sql_help.c:3117 +msgid "conflict_target" +msgstr "" + +#: sql_help.c:3118 +#, fuzzy +#| msgid "canonical_function" +msgid "conflict_action" +msgstr "função_canônica" + +#: sql_help.c:3121 +#, fuzzy +#| msgid "where from_item can be one of:" +msgid "where conflict_target can be one of:" +msgstr "onde item_from pode ser um dos:" + +#: sql_help.c:3122 +#, fuzzy +#| msgid "column_name" +msgid "column_name_index" +msgstr "nome_coluna" + +#: sql_help.c:3123 +#, fuzzy +#| msgid "expression" +msgid "expression_index" +msgstr "expressão" + +#: sql_help.c:3126 +#, fuzzy +#| msgid "predicate" +msgid "index_predicate" +msgstr "predicado_índice" + +#: sql_help.c:3128 +#, fuzzy +#| msgid "where action is one of:" +msgid "and conflict_action is one of:" +msgstr "onde ação é uma das:" + +#: sql_help.c:3134 sql_help.c:3892 +msgid "sub-SELECT" +msgstr "sub-SELECT" + +#: sql_help.c:3143 sql_help.c:3206 sql_help.c:3868 msgid "channel" msgstr "canal" -#: sql_help.c:2933 +#: sql_help.c:3165 msgid "lockmode" msgstr "modo_bloqueio" -#: sql_help.c:2934 +#: sql_help.c:3166 msgid "where lockmode is one of:" msgstr "onde modo_bloqueio é um dos:" -#: sql_help.c:2975 +#: sql_help.c:3207 msgid "payload" msgstr "informação" -#: sql_help.c:3001 +#: sql_help.c:3234 msgid "old_role" msgstr "role_antiga" -#: sql_help.c:3002 +#: sql_help.c:3235 msgid "new_role" msgstr "nova_role" -#: sql_help.c:3027 sql_help.c:3188 sql_help.c:3196 +#: sql_help.c:3260 sql_help.c:3421 sql_help.c:3429 msgid "savepoint_name" msgstr "nome_ponto_de_salvamento" -#: sql_help.c:3229 +#: sql_help.c:3462 msgid "provider" msgstr "fornecedor" -#: sql_help.c:3306 sql_help.c:3345 sql_help.c:3347 sql_help.c:3385 -#: sql_help.c:3524 sql_help.c:3563 sql_help.c:3565 sql_help.c:3693 -#: sql_help.c:3732 sql_help.c:3734 +#: sql_help.c:3549 sql_help.c:3591 sql_help.c:3593 sql_help.c:3639 +#: sql_help.c:3788 sql_help.c:3830 sql_help.c:3832 sql_help.c:3982 +#: sql_help.c:4024 sql_help.c:4026 msgid "from_item" msgstr "item_from" -#: sql_help.c:3310 sql_help.c:3389 sql_help.c:3528 sql_help.c:3697 +#: sql_help.c:3551 sql_help.c:3603 sql_help.c:3790 sql_help.c:3842 +#: sql_help.c:3984 sql_help.c:4036 +#, fuzzy +#| msgid "wrong element type" +msgid "grouping_element" +msgstr "elemento_agrupamento" + +#: sql_help.c:3553 sql_help.c:3643 sql_help.c:3792 sql_help.c:3986 msgid "window_name" msgstr "nome_deslizante" -#: sql_help.c:3311 sql_help.c:3390 sql_help.c:3529 sql_help.c:3698 +#: sql_help.c:3554 sql_help.c:3644 sql_help.c:3793 sql_help.c:3987 msgid "window_definition" msgstr "definição_deslizante" -#: sql_help.c:3312 sql_help.c:3323 sql_help.c:3353 sql_help.c:3391 -#: sql_help.c:3530 sql_help.c:3541 sql_help.c:3571 sql_help.c:3699 -#: sql_help.c:3710 sql_help.c:3740 +#: sql_help.c:3555 sql_help.c:3569 sql_help.c:3607 sql_help.c:3645 +#: sql_help.c:3794 sql_help.c:3808 sql_help.c:3846 sql_help.c:3988 +#: sql_help.c:4002 sql_help.c:4040 msgid "select" msgstr "seleção" -#: sql_help.c:3319 sql_help.c:3537 sql_help.c:3706 +#: sql_help.c:3562 sql_help.c:3801 sql_help.c:3995 msgid "where from_item can be one of:" msgstr "onde item_from pode ser um dos:" -#: sql_help.c:3322 sql_help.c:3325 sql_help.c:3328 sql_help.c:3332 -#: sql_help.c:3344 sql_help.c:3540 sql_help.c:3543 sql_help.c:3546 -#: sql_help.c:3550 sql_help.c:3562 sql_help.c:3709 sql_help.c:3712 -#: sql_help.c:3715 sql_help.c:3719 sql_help.c:3731 +#: sql_help.c:3565 sql_help.c:3571 sql_help.c:3574 sql_help.c:3578 +#: sql_help.c:3590 sql_help.c:3804 sql_help.c:3810 sql_help.c:3813 +#: sql_help.c:3817 sql_help.c:3829 sql_help.c:3998 sql_help.c:4004 +#: sql_help.c:4007 sql_help.c:4011 sql_help.c:4023 msgid "column_alias" msgstr "aliás_coluna" -#: sql_help.c:3326 sql_help.c:3351 sql_help.c:3544 sql_help.c:3569 -#: sql_help.c:3713 sql_help.c:3738 -msgid "with_query_name" -msgstr "nome_consulta_with" +#: sql_help.c:3566 sql_help.c:3805 sql_help.c:3999 +#, fuzzy +#| msgid "index_method" +msgid "sampling_method" +msgstr "método_amostragem" -#: sql_help.c:3330 sql_help.c:3334 sql_help.c:3338 sql_help.c:3341 -#: sql_help.c:3548 sql_help.c:3552 sql_help.c:3556 sql_help.c:3559 -#: sql_help.c:3717 sql_help.c:3721 sql_help.c:3725 sql_help.c:3728 +#: sql_help.c:3567 sql_help.c:3576 sql_help.c:3580 sql_help.c:3584 +#: sql_help.c:3587 sql_help.c:3806 sql_help.c:3815 sql_help.c:3819 +#: sql_help.c:3823 sql_help.c:3826 sql_help.c:4000 sql_help.c:4009 +#: sql_help.c:4013 sql_help.c:4017 sql_help.c:4020 msgid "argument" msgstr "argumento" -#: sql_help.c:3336 sql_help.c:3339 sql_help.c:3342 sql_help.c:3554 -#: sql_help.c:3557 sql_help.c:3560 sql_help.c:3723 sql_help.c:3726 -#: sql_help.c:3729 +#: sql_help.c:3568 sql_help.c:3807 sql_help.c:4001 +msgid "seed" +msgstr "semente" + +#: sql_help.c:3572 sql_help.c:3605 sql_help.c:3811 sql_help.c:3844 +#: sql_help.c:4005 sql_help.c:4038 +msgid "with_query_name" +msgstr "nome_consulta_with" + +#: sql_help.c:3582 sql_help.c:3585 sql_help.c:3588 sql_help.c:3821 +#: sql_help.c:3824 sql_help.c:3827 sql_help.c:4015 sql_help.c:4018 +#: sql_help.c:4021 msgid "column_definition" msgstr "definição_coluna" -#: sql_help.c:3346 sql_help.c:3564 sql_help.c:3733 +#: sql_help.c:3592 sql_help.c:3831 sql_help.c:4025 msgid "join_type" msgstr "tipo_junção" -#: sql_help.c:3348 sql_help.c:3566 sql_help.c:3735 +#: sql_help.c:3594 sql_help.c:3833 sql_help.c:4027 msgid "join_condition" msgstr "condição_junção" -#: sql_help.c:3349 sql_help.c:3567 sql_help.c:3736 +#: sql_help.c:3595 sql_help.c:3834 sql_help.c:4028 msgid "join_column" msgstr "coluna_junção" -#: sql_help.c:3350 sql_help.c:3568 sql_help.c:3737 +#: sql_help.c:3596 sql_help.c:3835 sql_help.c:4029 +#, fuzzy +#| msgid "where event can be one of:" +msgid "and grouping_element can be one of:" +msgstr "onde elemento_agrupamento pode ser um dos:" + +#: sql_help.c:3604 sql_help.c:3843 sql_help.c:4037 msgid "and with_query is:" msgstr "e consulta_with é:" -#: sql_help.c:3354 sql_help.c:3572 sql_help.c:3741 +#: sql_help.c:3608 sql_help.c:3847 sql_help.c:4041 msgid "values" msgstr "valores" -#: sql_help.c:3355 sql_help.c:3573 sql_help.c:3742 +#: sql_help.c:3609 sql_help.c:3848 sql_help.c:4042 msgid "insert" msgstr "inserção" -#: sql_help.c:3356 sql_help.c:3574 sql_help.c:3743 +#: sql_help.c:3610 sql_help.c:3849 sql_help.c:4043 msgid "update" msgstr "atualização" -#: sql_help.c:3357 sql_help.c:3575 sql_help.c:3744 +#: sql_help.c:3611 sql_help.c:3850 sql_help.c:4044 msgid "delete" msgstr "exclusão" -#: sql_help.c:3384 +#: sql_help.c:3638 msgid "new_table" msgstr "nova_tabela" -#: sql_help.c:3409 +#: sql_help.c:3663 msgid "timezone" msgstr "zona_horária" -#: sql_help.c:3454 +#: sql_help.c:3708 msgid "snapshot_id" msgstr "id_snapshot" -#: sql_help.c:3614 +#: sql_help.c:3893 msgid "from_list" msgstr "lista_from" -#: sql_help.c:3645 +#: sql_help.c:3924 msgid "sort_expression" msgstr "expressão_ordenação" -#: sql_help.h:191 sql_help.h:891 +#: sql_help.h:197 sql_help.h:927 msgid "abort the current transaction" msgstr "transação atual foi interrompida" -#: sql_help.h:196 +#: sql_help.h:202 msgid "change the definition of an aggregate function" msgstr "muda a definição de uma função de agregação" -#: sql_help.h:201 +#: sql_help.h:207 msgid "change the definition of a collation" msgstr "muda a definição de uma ordenação" -#: sql_help.h:206 +#: sql_help.h:212 msgid "change the definition of a conversion" msgstr "muda a definição de uma conversão" -#: sql_help.h:211 +#: sql_help.h:217 msgid "change a database" msgstr "muda o banco de dados" -#: sql_help.h:216 +#: sql_help.h:222 msgid "define default access privileges" msgstr "define privilégios de acesso padrão" -#: sql_help.h:221 +#: sql_help.h:227 msgid "change the definition of a domain" msgstr "muda a definição de um domínio" -#: sql_help.h:226 +#: sql_help.h:232 msgid "change the definition of an event trigger" msgstr "muda a definição de um gatilho de eventos" -#: sql_help.h:231 +#: sql_help.h:237 msgid "change the definition of an extension" msgstr "muda a definição de uma extensão" -#: sql_help.h:236 +#: sql_help.h:242 msgid "change the definition of a foreign-data wrapper" msgstr "muda a definição de um adaptador de dados externos" -#: sql_help.h:241 +#: sql_help.h:247 msgid "change the definition of a foreign table" msgstr "muda a definição de uma tabela externa" -#: sql_help.h:246 +#: sql_help.h:252 msgid "change the definition of a function" msgstr "muda a definição de uma função" -#: sql_help.h:251 +#: sql_help.h:257 msgid "change role name or membership" msgstr "muda nome da role ou membro" -#: sql_help.h:256 +#: sql_help.h:262 msgid "change the definition of an index" msgstr "muda a definição de um índice" -#: sql_help.h:261 +#: sql_help.h:267 msgid "change the definition of a procedural language" msgstr "muda a definição de uma linguagem procedural" -#: sql_help.h:266 +#: sql_help.h:272 msgid "change the definition of a large object" msgstr "muda a definição de um objeto grande" -#: sql_help.h:271 +#: sql_help.h:277 msgid "change the definition of a materialized view" msgstr "muda a definição de uma visão materializada" -#: sql_help.h:276 +#: sql_help.h:282 msgid "change the definition of an operator" msgstr "muda a definição de um operador" -#: sql_help.h:281 +#: sql_help.h:287 msgid "change the definition of an operator class" msgstr "muda a definição de uma classe de operadores" -#: sql_help.h:286 +#: sql_help.h:292 msgid "change the definition of an operator family" msgstr "muda a definição de uma família de operadores" -#: sql_help.h:291 sql_help.h:361 +#: sql_help.h:297 +#, fuzzy +msgid "change the definition of a policy" +msgstr "muda a definição de uma política" + +#: sql_help.h:302 sql_help.h:372 msgid "change a database role" msgstr "muda uma role do banco de dados" -#: sql_help.h:296 +#: sql_help.h:307 msgid "change the definition of a rule" msgstr "muda a definição de uma regra" -#: sql_help.h:301 +#: sql_help.h:312 msgid "change the definition of a schema" msgstr "muda a definição de um esquema" -#: sql_help.h:306 +#: sql_help.h:317 msgid "change the definition of a sequence generator" msgstr "muda a definição de um gerador de sequência" -#: sql_help.h:311 +#: sql_help.h:322 msgid "change the definition of a foreign server" msgstr "muda a definição de um servidor externo" -#: sql_help.h:316 +#: sql_help.h:327 msgid "change a server configuration parameter" msgstr "muda um parâmetro de configuração do servidor" -#: sql_help.h:321 +#: sql_help.h:332 msgid "change the definition of a table" msgstr "muda a definição de uma tabela" -#: sql_help.h:326 +#: sql_help.h:337 msgid "change the definition of a tablespace" msgstr "muda a definição de uma tablespace" -#: sql_help.h:331 +#: sql_help.h:342 msgid "change the definition of a text search configuration" msgstr "muda a definição de uma configuração de busca textual" -#: sql_help.h:336 +#: sql_help.h:347 msgid "change the definition of a text search dictionary" msgstr "muda a definição de um dicionário de busca textual" -#: sql_help.h:341 +#: sql_help.h:352 msgid "change the definition of a text search parser" msgstr "muda a definição de um analisador de busca textual" -#: sql_help.h:346 +#: sql_help.h:357 msgid "change the definition of a text search template" msgstr "muda a definição de um modelo de busca textual" -#: sql_help.h:351 +#: sql_help.h:362 msgid "change the definition of a trigger" msgstr "muda a definição de um gatilho" -#: sql_help.h:356 +#: sql_help.h:367 msgid "change the definition of a type" msgstr "muda a definição de um tipo" -#: sql_help.h:366 +#: sql_help.h:377 msgid "change the definition of a user mapping" msgstr "muda a definição de um mapeamento de usuários" -#: sql_help.h:371 +#: sql_help.h:382 msgid "change the definition of a view" msgstr "muda a definição de uma visão" -#: sql_help.h:376 +#: sql_help.h:387 msgid "collect statistics about a database" msgstr "coleta estatísticas sobre o banco de dados" -#: sql_help.h:381 sql_help.h:956 +#: sql_help.h:392 sql_help.h:992 msgid "start a transaction block" msgstr "inicia um bloco de transação" -#: sql_help.h:386 +#: sql_help.h:397 msgid "force a transaction log checkpoint" msgstr "força ponto de controle no log de transação" -#: sql_help.h:391 +#: sql_help.h:402 msgid "close a cursor" msgstr "fecha um cursor" -#: sql_help.h:396 +#: sql_help.h:407 msgid "cluster a table according to an index" msgstr "agrupa uma tabela de acordo com um índice" -#: sql_help.h:401 +#: sql_help.h:412 msgid "define or change the comment of an object" msgstr "define ou muda um comentário de um objeto" -#: sql_help.h:406 sql_help.h:796 +#: sql_help.h:417 sql_help.h:827 msgid "commit the current transaction" msgstr "efetiva a transação atual" -#: sql_help.h:411 +#: sql_help.h:422 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "efetiva uma transação que foi anteriormente preparada para efetivação em duas fases" -#: sql_help.h:416 +#: sql_help.h:427 msgid "copy data between a file and a table" msgstr "copia dados de um arquivo para uma tabela" -#: sql_help.h:421 +#: sql_help.h:432 msgid "define a new aggregate function" msgstr "define um nova função de agregação" -#: sql_help.h:426 +#: sql_help.h:437 msgid "define a new cast" msgstr "define uma nova conversão de tipo" -#: sql_help.h:431 +#: sql_help.h:442 msgid "define a new collation" msgstr "define uma nova ordenação" -#: sql_help.h:436 +#: sql_help.h:447 msgid "define a new encoding conversion" msgstr "define uma nova conversão de codificação" -#: sql_help.h:441 +#: sql_help.h:452 msgid "create a new database" msgstr "cria um novo banco de dados" -#: sql_help.h:446 +#: sql_help.h:457 msgid "define a new domain" msgstr "define um novo domínio" -#: sql_help.h:451 +#: sql_help.h:462 msgid "define a new event trigger" msgstr "define um novo gatilho de eventos" -#: sql_help.h:456 +#: sql_help.h:467 msgid "install an extension" msgstr "instala uma extensão" -#: sql_help.h:461 +#: sql_help.h:472 msgid "define a new foreign-data wrapper" msgstr "define um novo adaptador de dados externos" -#: sql_help.h:466 +#: sql_help.h:477 msgid "define a new foreign table" msgstr "define uma nova tabela externa" -#: sql_help.h:471 +#: sql_help.h:482 msgid "define a new function" msgstr "define uma nova função" -#: sql_help.h:476 sql_help.h:511 sql_help.h:581 +#: sql_help.h:487 sql_help.h:527 sql_help.h:602 msgid "define a new database role" msgstr "define uma nova role do banco de dados" -#: sql_help.h:481 +#: sql_help.h:492 msgid "define a new index" msgstr "define um novo índice" -#: sql_help.h:486 +#: sql_help.h:497 msgid "define a new procedural language" msgstr "define uma nova linguagem procedural" -#: sql_help.h:491 +#: sql_help.h:502 msgid "define a new materialized view" msgstr "define uma nova visão materializada" -#: sql_help.h:496 +#: sql_help.h:507 msgid "define a new operator" msgstr "define um novo operador" -#: sql_help.h:501 +#: sql_help.h:512 msgid "define a new operator class" msgstr "define uma nova classe de operadores" -#: sql_help.h:506 +#: sql_help.h:517 msgid "define a new operator family" msgstr "define uma nova família de operadores" -#: sql_help.h:516 +#: sql_help.h:522 +#, fuzzy +#| msgid "define a new foreign table" +msgid "define a new policy for a table" +msgstr "define uma nova política para uma tabela" + +#: sql_help.h:532 msgid "define a new rewrite rule" msgstr "define uma nova regra de reescrita" -#: sql_help.h:521 +#: sql_help.h:537 msgid "define a new schema" msgstr "define um novo esquema" -#: sql_help.h:526 +#: sql_help.h:542 msgid "define a new sequence generator" msgstr "define um novo gerador de sequência" -#: sql_help.h:531 +#: sql_help.h:547 msgid "define a new foreign server" msgstr "define um novo servidor externo" -#: sql_help.h:536 +#: sql_help.h:552 msgid "define a new table" msgstr "define uma nova tabela" -#: sql_help.h:541 sql_help.h:921 +#: sql_help.h:557 sql_help.h:957 msgid "define a new table from the results of a query" msgstr "cria uma nova tabela a partir dos resultados de uma consulta" -#: sql_help.h:546 +#: sql_help.h:562 msgid "define a new tablespace" msgstr "define uma nova tablespace" -#: sql_help.h:551 +#: sql_help.h:567 msgid "define a new text search configuration" msgstr "define uma nova configuração de busca textual" -#: sql_help.h:556 +#: sql_help.h:572 msgid "define a new text search dictionary" msgstr "define um novo dicionário de busca textual" -#: sql_help.h:561 +#: sql_help.h:577 msgid "define a new text search parser" msgstr "define um novo analisador de busca textual" -#: sql_help.h:566 +#: sql_help.h:582 msgid "define a new text search template" msgstr "define um novo modelo de busca textual" -#: sql_help.h:571 +#: sql_help.h:587 +#, fuzzy +#| msgid "define a new operator" +msgid "define a new transform" +msgstr "define um novo transformador" + +#: sql_help.h:592 msgid "define a new trigger" msgstr "define um novo gatilho" -#: sql_help.h:576 +#: sql_help.h:597 msgid "define a new data type" msgstr "define um novo tipo de dado" -#: sql_help.h:586 +#: sql_help.h:607 msgid "define a new mapping of a user to a foreign server" msgstr "define um novo mapeamento de um usuário para um servidor externo" -#: sql_help.h:591 +#: sql_help.h:612 msgid "define a new view" msgstr "define uma nova visão" -#: sql_help.h:596 +#: sql_help.h:617 msgid "deallocate a prepared statement" msgstr "remove um comando preparado" -#: sql_help.h:601 +#: sql_help.h:622 msgid "define a cursor" msgstr "define um cursor" -#: sql_help.h:606 +#: sql_help.h:627 msgid "delete rows of a table" msgstr "apaga registros de uma tabela" -#: sql_help.h:611 +#: sql_help.h:632 msgid "discard session state" msgstr "descarta estado da sessão" -#: sql_help.h:616 +#: sql_help.h:637 msgid "execute an anonymous code block" msgstr "executa um bloco de código anônimo" -#: sql_help.h:621 +#: sql_help.h:642 msgid "remove an aggregate function" msgstr "remove uma função de agregação" -#: sql_help.h:626 +#: sql_help.h:647 msgid "remove a cast" msgstr "remove uma conversão de tipo" -#: sql_help.h:631 +#: sql_help.h:652 msgid "remove a collation" msgstr "remove uma ordenação" -#: sql_help.h:636 +#: sql_help.h:657 msgid "remove a conversion" msgstr "remove uma conversão" -#: sql_help.h:641 +#: sql_help.h:662 msgid "remove a database" msgstr "remove um banco de dados" -#: sql_help.h:646 +#: sql_help.h:667 msgid "remove a domain" msgstr "remove um domínio" -#: sql_help.h:651 +#: sql_help.h:672 msgid "remove an event trigger" msgstr "remove um gatilho de eventos" -#: sql_help.h:656 +#: sql_help.h:677 msgid "remove an extension" msgstr "remove uma extensão" -#: sql_help.h:661 +#: sql_help.h:682 msgid "remove a foreign-data wrapper" msgstr "remove um adaptador de dados externos" -#: sql_help.h:666 +#: sql_help.h:687 msgid "remove a foreign table" msgstr "remove uma tabela externa" -#: sql_help.h:671 +#: sql_help.h:692 msgid "remove a function" msgstr "remove uma função" -#: sql_help.h:676 sql_help.h:716 sql_help.h:781 +#: sql_help.h:697 sql_help.h:742 sql_help.h:812 msgid "remove a database role" msgstr "remove uma role do banco de dados" -#: sql_help.h:681 +#: sql_help.h:702 msgid "remove an index" msgstr "remove um índice" -#: sql_help.h:686 +#: sql_help.h:707 msgid "remove a procedural language" msgstr "remove uma linguagem procedural" -#: sql_help.h:691 +#: sql_help.h:712 msgid "remove a materialized view" msgstr "remove uma visão materializada" -#: sql_help.h:696 +#: sql_help.h:717 msgid "remove an operator" msgstr "remove um operador" -#: sql_help.h:701 +#: sql_help.h:722 msgid "remove an operator class" msgstr "remove uma classe de operadores" -#: sql_help.h:706 +#: sql_help.h:727 msgid "remove an operator family" msgstr "remove uma família de operadores" -#: sql_help.h:711 +#: sql_help.h:732 msgid "remove database objects owned by a database role" msgstr "remove objetos do banco de dados cujo dono é uma role do banco de dados" -#: sql_help.h:721 +#: sql_help.h:737 +#, fuzzy +#| msgid "remove a foreign table" +msgid "remove a policy from a table" +msgstr "remove uma política de uma tabela" + +#: sql_help.h:747 msgid "remove a rewrite rule" msgstr "remove uma regra de reescrita" -#: sql_help.h:726 +#: sql_help.h:752 msgid "remove a schema" msgstr "remove um esquema" -#: sql_help.h:731 +#: sql_help.h:757 msgid "remove a sequence" msgstr "remove uma sequência" -#: sql_help.h:736 +#: sql_help.h:762 msgid "remove a foreign server descriptor" msgstr "remove um descritor de servidor externo" -#: sql_help.h:741 +#: sql_help.h:767 msgid "remove a table" msgstr "remove uma tabela" -#: sql_help.h:746 +#: sql_help.h:772 msgid "remove a tablespace" msgstr "remove uma tablespace" -#: sql_help.h:751 +#: sql_help.h:777 msgid "remove a text search configuration" msgstr "remove uma configuração de busca textual" -#: sql_help.h:756 +#: sql_help.h:782 msgid "remove a text search dictionary" msgstr "remove um dicionário de busca textual" -#: sql_help.h:761 +#: sql_help.h:787 msgid "remove a text search parser" msgstr "remove um analisador de busca textual" -#: sql_help.h:766 +#: sql_help.h:792 msgid "remove a text search template" msgstr "remove um modelo de busca textual" -#: sql_help.h:771 +#: sql_help.h:797 +#, fuzzy +#| msgid "remove an operator" +msgid "remove a transform" +msgstr "remove um transformador" + +#: sql_help.h:802 msgid "remove a trigger" msgstr "remove um gatilho" -#: sql_help.h:776 +#: sql_help.h:807 msgid "remove a data type" msgstr "remove um tipo de dado" -#: sql_help.h:786 +#: sql_help.h:817 msgid "remove a user mapping for a foreign server" msgstr "remove um mapeamento de usuários para um servidor externo" -#: sql_help.h:791 +#: sql_help.h:822 msgid "remove a view" msgstr "remove uma visão" -#: sql_help.h:801 +#: sql_help.h:832 msgid "execute a prepared statement" msgstr "executa um comando preparado" -#: sql_help.h:806 +#: sql_help.h:837 msgid "show the execution plan of a statement" msgstr "mostra o plano de execução de um comando" -#: sql_help.h:811 +#: sql_help.h:842 msgid "retrieve rows from a query using a cursor" msgstr "recupera registros de uma consulta utilizando um cursor" -#: sql_help.h:816 +#: sql_help.h:847 msgid "define access privileges" msgstr "define privilégios de acesso" -#: sql_help.h:821 +#: sql_help.h:852 +#, fuzzy +#| msgid "change the definition of a foreign server" +msgid "import table definitions from a foreign server" +msgstr "importa definições de tabelas de um servidor externo" + +#: sql_help.h:857 msgid "create new rows in a table" msgstr "cria novos registros em uma tabela" -#: sql_help.h:826 +#: sql_help.h:862 msgid "listen for a notification" msgstr "espera por uma notificação" -#: sql_help.h:831 +#: sql_help.h:867 msgid "load a shared library file" msgstr "carrega um arquivo de biblioteca compartilhada" -#: sql_help.h:836 +#: sql_help.h:872 msgid "lock a table" msgstr "bloqueia uma tabela" -#: sql_help.h:841 +#: sql_help.h:877 msgid "position a cursor" msgstr "posiciona um cursor" -#: sql_help.h:846 +#: sql_help.h:882 msgid "generate a notification" msgstr "gera uma notificação" -#: sql_help.h:851 +#: sql_help.h:887 msgid "prepare a statement for execution" msgstr "prepara um comando para execução" -#: sql_help.h:856 +#: sql_help.h:892 msgid "prepare the current transaction for two-phase commit" msgstr "prepara a transação atual para efetivação em duas fases" -#: sql_help.h:861 +#: sql_help.h:897 msgid "change the ownership of database objects owned by a database role" msgstr "muda o dono dos objetos do banco de dados cujo dono é uma role do banco de dados" -#: sql_help.h:866 +#: sql_help.h:902 msgid "replace the contents of a materialized view" msgstr "substitui o conteúdo de uma visão materializada" -#: sql_help.h:871 +#: sql_help.h:907 msgid "rebuild indexes" msgstr "reconstrói índices" -#: sql_help.h:876 +#: sql_help.h:912 msgid "destroy a previously defined savepoint" msgstr "destrói um ponto de salvamento definido anteriormente" -#: sql_help.h:881 +#: sql_help.h:917 msgid "restore the value of a run-time parameter to the default value" msgstr "restaura o valor do parâmetro em tempo de execução para o valor padrão" -#: sql_help.h:886 +#: sql_help.h:922 msgid "remove access privileges" msgstr "remove privilégios de acesso" -#: sql_help.h:896 +#: sql_help.h:932 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "cancela uma transação que foi anteriormente preparada para efetivação em duas fases" -#: sql_help.h:901 +#: sql_help.h:937 msgid "roll back to a savepoint" msgstr "desfaz modificações de um ponto de salvamento" -#: sql_help.h:906 +#: sql_help.h:942 msgid "define a new savepoint within the current transaction" msgstr "define um novo ponto de salvamento na transação atual" -#: sql_help.h:911 +#: sql_help.h:947 msgid "define or change a security label applied to an object" msgstr "define ou muda um rótulo de segurança aplicado a um objeto" -#: sql_help.h:916 sql_help.h:961 sql_help.h:991 +#: sql_help.h:952 sql_help.h:997 sql_help.h:1027 msgid "retrieve rows from a table or view" msgstr "recupera registros de uma tabela ou visão" -#: sql_help.h:926 +#: sql_help.h:962 msgid "change a run-time parameter" msgstr "muda um parâmetro em tempo de execução" -#: sql_help.h:931 +#: sql_help.h:967 msgid "set constraint check timing for the current transaction" msgstr "define o momento de verificação da restrição na transação atual" -#: sql_help.h:936 +#: sql_help.h:972 msgid "set the current user identifier of the current session" msgstr "define o identificador do usuário atual nesta sessão" -#: sql_help.h:941 +#: sql_help.h:977 msgid "set the session user identifier and the current user identifier of the current session" msgstr "define o identificador da sessão do usuário e o identificador do usuário na sessão atual" -#: sql_help.h:946 +#: sql_help.h:982 msgid "set the characteristics of the current transaction" msgstr "define as características da transação atual" -#: sql_help.h:951 +#: sql_help.h:987 msgid "show the value of a run-time parameter" msgstr "mostra o valor de um parâmetro em tempo de execução" -#: sql_help.h:966 +#: sql_help.h:1002 msgid "empty a table or set of tables" msgstr "esvazia uma tabela ou um conjunto de tabelas" -#: sql_help.h:971 +#: sql_help.h:1007 msgid "stop listening for a notification" msgstr "para de esperar por notificação" -#: sql_help.h:976 +#: sql_help.h:1012 msgid "update rows of a table" msgstr "atualiza registros de uma tabela" -#: sql_help.h:981 +#: sql_help.h:1017 msgid "garbage-collect and optionally analyze a database" msgstr "coleta lixo e opcionalmente analisa um banco de dados" -#: sql_help.h:986 +#: sql_help.h:1022 msgid "compute a set of rows" msgstr "computa um conjunto de registros" -#: startup.c:166 +#: startup.c:177 #, c-format msgid "%s: -1 can only be used in non-interactive mode\n" msgstr "%s: -1 só pode ser utilizado em modo não interativo\n" -#: startup.c:266 +#: startup.c:277 #, c-format msgid "%s: could not open log file \"%s\": %s\n" msgstr "%s: não pôde abrir arquivo de log \"%s\": %s\n" -#: startup.c:328 +#: startup.c:339 #, c-format msgid "" "Type \"help\" for help.\n" @@ -4409,37 +5123,42 @@ msgstr "" "Digite \"help\" para ajuda.\n" "\n" -#: startup.c:471 +#: startup.c:486 #, c-format msgid "%s: could not set printing parameter \"%s\"\n" msgstr "%s: não pôde definir parâmetro de exibição \"%s\"\n" -#: startup.c:511 +#: startup.c:526 #, c-format msgid "%s: could not delete variable \"%s\"\n" msgstr "%s: não pôde apagar variável \"%s\"\n" -#: startup.c:521 +#: startup.c:536 #, c-format msgid "%s: could not set variable \"%s\"\n" msgstr "%s: não pôde definir variável \"%s\"\n" -#: startup.c:564 startup.c:570 +#: startup.c:596 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Tente \"%s --help\" para obter informações adicionais.\n" -#: startup.c:587 +#: startup.c:613 #, c-format msgid "%s: warning: extra command-line argument \"%s\" ignored\n" msgstr "%s: aviso: argumento extra de linha de comando \"%s\" ignorado\n" -#: startup.c:609 +#: startup.c:635 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: não pôde encontrar executável\n" -#: tab-complete.c:4111 +#: startup.c:757 startup.c:804 startup.c:825 startup.c:862 variables.c:121 +#, c-format +msgid "unrecognized value \"%s\" for \"%s\"; assuming \"%s\"\n" +msgstr "valor desconhecido \"%s\" para \"%s\"; definindo \"%s\"\n" + +#: tab-complete.c:4566 #, c-format msgid "" "tab completion query failed: %s\n" @@ -4449,8 +5168,3 @@ msgstr "" "consulta para completação por tab falhou: %s\n" "Consulta foi:\n" "%s\n" - -#: variables.c:115 -#, c-format -msgid "unrecognized Boolean value; assuming \"on\"\n" -msgstr "valor booleano desconhecido; definindo \"on\"\n" diff --git a/src/bin/psql/po/ru.po b/src/bin/psql/po/ru.po index d82ee739da32e..6bd67f4536ac0 100644 --- a/src/bin/psql/po/ru.po +++ b/src/bin/psql/po/ru.po @@ -24,8 +24,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9 current\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-01-13 05:11+0000\n" -"PO-Revision-Date: 2015-01-13 08:38+0300\n" +"POT-Creation-Date: 2015-07-22 00:13+0000\n" +"PO-Revision-Date: 2015-07-27 22:24+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -73,14 +73,14 @@ msgstr "не удалось прочитать символическую ссы msgid "pclose failed: %s" msgstr "ошибка pclose: %s" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 command.c:321 input.c:205 mainloop.c:72 -#: mainloop.c:234 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 command.c:331 input.c:205 mainloop.c:73 +#: mainloop.c:253 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" @@ -90,14 +90,14 @@ msgstr "попытка дублирования нулевого указате msgid "could not look up effective user ID %ld: %s" msgstr "выяснить эффективный идентификатор пользователя (%ld) не удалось: %s" -#: ../../common/username.c:47 command.c:276 +#: ../../common/username.c:47 command.c:286 msgid "user does not exist" msgstr "пользователь не существует" #: ../../common/username.c:62 #, c-format msgid "user name lookup failure: error code %lu" -msgstr "распознать имя пользователя не удалось: код ошибки %lu" +msgstr "распознать имя пользователя не удалось (код ошибки: %lu)" #: ../../common/wait_error.c:47 #, c-format @@ -134,37 +134,37 @@ msgstr "дочерний процесс завершён по сигналу %d" msgid "child process exited with unrecognized status %d" msgstr "дочерний процесс завершился с нераспознанным состоянием %d" -#: command.c:117 +#: command.c:127 #, c-format msgid "Invalid command \\%s. Try \\? for help.\n" msgstr "Неверная команда \\%s. Справка по командам: \\?\n" -#: command.c:119 +#: command.c:129 #, c-format msgid "invalid command \\%s\n" msgstr "неверная команда \\%s\n" -#: command.c:130 +#: command.c:140 #, c-format msgid "\\%s: extra argument \"%s\" ignored\n" msgstr "\\%s: лишний аргумент \"%s\" пропущен\n" -#: command.c:274 +#: command.c:284 #, c-format msgid "could not get home directory for user ID %ld: %s\n" msgstr "не удалось получить домашний каталог пользователя c ид. %ld: %s\n" -#: command.c:292 +#: command.c:302 #, c-format msgid "\\%s: could not change directory to \"%s\": %s\n" msgstr "\\%s: не удалось перейти в каталог \"%s\": %s\n" -#: command.c:307 common.c:446 common.c:886 +#: command.c:317 common.c:442 common.c:500 common.c:962 #, c-format msgid "You are currently not connected to a database.\n" msgstr "В данный момент вы не подключены к базе данных.\n" -#: command.c:334 +#: command.c:344 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at " @@ -173,7 +173,7 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" через сокет в \"%s" "\", порт \"%s\".\n" -#: command.c:337 +#: command.c:347 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port " @@ -182,122 +182,140 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" (сервер \"%s\", " "порт \"%s\").\n" -#: command.c:538 command.c:608 command.c:1403 +#: command.c:548 command.c:618 command.c:714 command.c:1517 #, c-format msgid "no query buffer\n" msgstr "нет буфера запросов\n" -#: command.c:571 command.c:3002 +#: command.c:581 command.c:3364 #, c-format msgid "invalid line number: %s\n" msgstr "неверный номер строки: %s\n" -#: command.c:602 +#: command.c:612 #, c-format msgid "The server (version %d.%d) does not support editing function source.\n" msgstr "" "Сервер (версия %d.%d) не поддерживает редактирование исходного кода " "функции.\n" -#: command.c:682 +#: command.c:692 command.c:760 msgid "No changes" msgstr "Изменений нет" -#: command.c:736 +#: command.c:708 +#, c-format +msgid "The server (version %d.%d) does not support editing view definitions.\n" +msgstr "" +"Сервер (версия %d.%d) не поддерживает редактирование определения " +"представления.\n" + +#: command.c:814 #, c-format msgid "%s: invalid encoding name or conversion procedure not found\n" msgstr "" "%s: неверное название кодировки символов или не найдена процедура " "перекодировки\n" -#: command.c:833 command.c:883 command.c:897 command.c:914 command.c:1021 -#: command.c:1180 command.c:1383 command.c:1414 +#: command.c:911 command.c:961 command.c:975 command.c:992 command.c:1099 +#: command.c:1263 command.c:1497 command.c:1528 #, c-format msgid "\\%s: missing required argument\n" msgstr "отсутствует необходимый аргумент \\%s\n" -#: command.c:946 +#: command.c:1024 msgid "Query buffer is empty." msgstr "Буфер запроса пуст." -#: command.c:956 +#: command.c:1034 msgid "Enter new password: " msgstr "Введите новый пароль: " -#: command.c:957 +#: command.c:1035 msgid "Enter it again: " msgstr "Повторите его: " -#: command.c:961 +#: command.c:1039 #, c-format msgid "Passwords didn't match.\n" msgstr "Пароли не совпадают.\n" -#: command.c:979 +#: command.c:1057 #, c-format msgid "Password encryption failed.\n" msgstr "Ошибка при шифровании пароля.\n" -#: command.c:1050 command.c:1161 command.c:1388 +#: command.c:1128 command.c:1244 command.c:1502 #, c-format msgid "\\%s: error while setting variable\n" msgstr "\\%s: не удалось установить переменную\n" -#: command.c:1108 +#: command.c:1191 msgid "Query buffer reset (cleared)." msgstr "Буфер запроса сброшен (очищен)." -#: command.c:1120 +#: command.c:1203 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "История записана в файл \"%s\".\n" -#: command.c:1185 +#: command.c:1268 #, c-format msgid "\\%s: environment variable name must not contain \"=\"\n" msgstr "\\%s: имя переменной окружения не может содержать знак \"=\"\n" -#: command.c:1227 +#: command.c:1310 #, c-format msgid "The server (version %d.%d) does not support showing function source.\n" msgstr "Сервер (версия %d.%d) не поддерживает вывод исходного кода функции.\n" -#: command.c:1233 +#: command.c:1316 #, c-format msgid "function name is required\n" msgstr "требуется имя функции\n" -#: command.c:1368 +#: command.c:1389 +#, c-format +msgid "The server (version %d.%d) does not support showing view definitions.\n" +msgstr "" +"Сервер (версия %d.%d) не поддерживает вывод определения представлений.\n" + +#: command.c:1395 +#, c-format +msgid "view name is required\n" +msgstr "требуется имя представления\n" + +#: command.c:1482 msgid "Timing is on." msgstr "Секундомер включен." -#: command.c:1370 +#: command.c:1484 msgid "Timing is off." msgstr "Секундомер выключен." -#: command.c:1431 command.c:1451 command.c:2039 command.c:2042 command.c:2045 -#: command.c:2051 command.c:2053 command.c:2061 command.c:2071 command.c:2080 -#: command.c:2094 command.c:2111 command.c:2170 common.c:74 copy.c:333 -#: copy.c:393 copy.c:408 psqlscan.l:1677 psqlscan.l:1688 psqlscan.l:1698 +#: command.c:1545 command.c:1565 command.c:2196 command.c:2199 command.c:2202 +#: command.c:2208 command.c:2210 command.c:2218 command.c:2228 command.c:2237 +#: command.c:2251 command.c:2268 command.c:2327 common.c:74 copy.c:333 +#: copy.c:393 copy.c:408 psqlscan.l:1700 psqlscan.l:1711 psqlscan.l:1721 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" -#: command.c:1530 +#: command.c:1656 #, c-format msgid "+ opt(%d) = |%s|\n" msgstr "+ opt(%d) = |%s|\n" -#: command.c:1556 startup.c:184 +#: command.c:1682 startup.c:195 msgid "Password: " msgstr "Пароль: " -#: command.c:1561 startup.c:186 +#: command.c:1687 startup.c:197 #, c-format msgid "Password for user %s: " msgstr "Пароль пользователя %s: " -#: command.c:1606 +#: command.c:1734 #, c-format msgid "" "All connection parameters must be supplied because no database connection " @@ -306,24 +324,24 @@ msgstr "" "Без подключения к базе данных необходимо указывать все параметры " "подключения\n" -#: command.c:1692 command.c:3036 common.c:120 common.c:413 common.c:478 -#: common.c:929 common.c:954 common.c:1051 copy.c:492 copy.c:695 -#: large_obj.c:158 large_obj.c:193 large_obj.c:255 psqlscan.l:1949 +#: command.c:1852 command.c:3466 common.c:120 common.c:413 common.c:1005 +#: common.c:1030 common.c:1130 copy.c:492 copy.c:702 large_obj.c:156 +#: large_obj.c:191 large_obj.c:253 psqlscan.l:1972 #, c-format msgid "%s" msgstr "%s" -#: command.c:1696 +#: command.c:1856 #, c-format msgid "Previous connection kept\n" msgstr "Сохранено предыдущее подключение\n" -#: command.c:1700 +#: command.c:1860 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:1733 +#: command.c:1894 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" " @@ -332,7 +350,7 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" через сокет в \"%s" "\", порт \"%s\".\n" -#: command.c:1736 +#: command.c:1897 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at " @@ -341,17 +359,17 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" (сервер \"%s\", " "порт \"%s\") .\n" -#: command.c:1740 +#: command.c:1901 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Вы подключены к базе данных \"%s\" как пользователь \"%s\".\n" -#: command.c:1774 +#: command.c:1935 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, сервер %s)\n" -#: command.c:1782 +#: command.c:1943 #, c-format msgid "" "WARNING: %s major version %d.%d, server major version %d.%d.\n" @@ -360,25 +378,24 @@ msgstr "" "ПРЕДУПРЕЖДЕНИЕ: %s имеет базовую версию %d.%d, а сервер - %d.%d.\n" " Часть функций psql может не работать.\n" -#: command.c:1812 +#: command.c:1977 #, c-format -msgid "SSL connection (protocol: %s, cipher: %s, bits: %d, compression: %s)\n" -msgstr "SSL-соединение (протокол: %s, шифр: %s, бит: %d, сжатие: %s)\n" +msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" +msgstr "SSL-соединение (протокол: %s, шифр: %s, бит: %s, сжатие: %s)\n" -#: command.c:1814 help.c:46 +#: command.c:1978 command.c:1979 command.c:1980 +msgid "unknown" +msgstr "неизвестно" + +#: command.c:1981 help.c:46 msgid "off" msgstr "выкл." -#: command.c:1814 help.c:46 +#: command.c:1981 help.c:46 msgid "on" msgstr "вкл." -#: command.c:1823 -#, c-format -msgid "SSL connection (unknown cipher)\n" -msgstr "SSL-соединение (шифр неизвестен)\n" - -#: command.c:1844 +#: command.c:2001 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -391,7 +408,7 @@ msgstr "" " Подробнее об этом смотрите документацию psql, раздел\n" " \"Notes for Windows users\".\n" -#: command.c:1928 +#: command.c:2085 #, c-format msgid "" "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a " @@ -400,204 +417,242 @@ msgstr "" "в переменной окружения PSQL_EDITOR_LINENUMBER_ARG должен быть указан номер " "строки\n" -#: command.c:1957 +#: command.c:2114 #, c-format msgid "could not start editor \"%s\"\n" msgstr "не удалось запустить редактор \"%s\"\n" -#: command.c:1959 +#: command.c:2116 #, c-format msgid "could not start /bin/sh\n" msgstr "не удалось запустить /bin/sh\n" -#: command.c:1997 +#: command.c:2154 #, c-format msgid "could not locate temporary directory: %s\n" msgstr "не удалось найти временный каталог: %s\n" -#: command.c:2024 +#: command.c:2181 #, c-format msgid "could not open temporary file \"%s\": %s\n" msgstr "не удалось открыть временный файл \"%s\": %s\n" -#: command.c:2292 +#: command.c:2489 #, c-format msgid "" -"\\pset: allowed formats are unaligned, aligned, wrapped, html, latex, troff-" -"ms\n" +"\\pset: allowed formats are unaligned, aligned, wrapped, html, asciidoc, " +"latex, troff-ms\n" msgstr "" -"допустимые форматы \\pset: unaligned, aligned, wrapped, html, latex, troff-" -"ms\n" +"допустимые форматы \\pset: unaligned, aligned, wrapped, html, asciidoc, " +"latex, troff-ms\n" -#: command.c:2311 +#: command.c:2508 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" msgstr "допустимые стили линий для \\pset: ascii, old-ascii, unicode\n" -#: command.c:2457 command.c:2608 +#: command.c:2522 +#, c-format +msgid "\\pset: allowed unicode border linestyle are single, double\n" +msgstr "допустимые стили unicode-линий границ для \\pset: single, double\n" + +#: command.c:2535 +#, c-format +msgid "\\pset: allowed unicode column linestyle are single, double\n" +msgstr "допустимые стили unicode-линий колонок для \\pset: single, double\n" + +#: command.c:2548 +#, c-format +msgid "\\pset: allowed unicode header linestyle are single, double\n" +msgstr "допустимые стили unicode-линий заголовков для \\pset: single, double\n" + +#: command.c:2700 command.c:2877 #, c-format msgid "\\pset: unknown option: %s\n" msgstr "неизвестный параметр \\pset: %s\n" -#: command.c:2475 +#: command.c:2718 #, c-format msgid "Border style is %d.\n" msgstr "Стиль границ: %d.\n" -#: command.c:2481 +#: command.c:2724 #, c-format msgid "Target width is unset.\n" msgstr "Ширина вывода сброшена.\n" -#: command.c:2483 +#: command.c:2726 #, c-format msgid "Target width is %d.\n" msgstr "Ширина вывода: %d.\n" -#: command.c:2490 +#: command.c:2733 #, c-format msgid "Expanded display is on.\n" msgstr "Расширенный вывод включён.\n" -#: command.c:2492 +#: command.c:2735 #, c-format msgid "Expanded display is used automatically.\n" msgstr "Расширенный вывод применяется автоматически.\n" -#: command.c:2494 +#: command.c:2737 #, c-format msgid "Expanded display is off.\n" msgstr "Расширенный вывод выключен.\n" -#: command.c:2501 command.c:2509 +#: command.c:2744 command.c:2752 #, c-format msgid "Field separator is zero byte.\n" msgstr "Разделитель полей - нулевой байт.\n" -#: command.c:2503 +#: command.c:2746 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Разделитель полей: \"%s\".\n" -#: command.c:2516 +#: command.c:2759 #, c-format msgid "Default footer is on.\n" msgstr "Строка итогов включена.\n" -#: command.c:2518 +#: command.c:2761 #, c-format msgid "Default footer is off.\n" msgstr "Строка итогов выключена.\n" -#: command.c:2524 +#: command.c:2767 #, c-format msgid "Output format is %s.\n" msgstr "Формат вывода: %s.\n" -#: command.c:2530 +#: command.c:2773 #, c-format msgid "Line style is %s.\n" msgstr "Установлен стиль линий: %s.\n" -#: command.c:2537 +#: command.c:2780 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null выводится как: \"%s\".\n" -#: command.c:2545 +#: command.c:2788 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "Локализованный вывод чисел включён.\n" -#: command.c:2547 +#: command.c:2790 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "Локализованный вывод чисел выключен.\n" -#: command.c:2554 +#: command.c:2797 #, c-format msgid "Pager is used for long output.\n" msgstr "Постраничник используется для вывода длинного текста.\n" -#: command.c:2556 +#: command.c:2799 #, c-format msgid "Pager is always used.\n" msgstr "Постраничник используется всегда.\n" -#: command.c:2558 +#: command.c:2801 #, c-format msgid "Pager usage is off.\n" msgstr "Постраничник выключен.\n" -#: command.c:2565 command.c:2575 +#: command.c:2807 +#, c-format +msgid "Pager won't be used for less than %d lines\n" +msgstr "Постраничник не будет использоваться, если строк меньше %d\n" + +#: command.c:2815 command.c:2825 #, c-format msgid "Record separator is zero byte.\n" msgstr "Разделитель записей - нулевой байт.\n" -#: command.c:2567 +#: command.c:2817 #, c-format msgid "Record separator is .\n" msgstr "Разделитель записей: <новая строка>.\n" -#: command.c:2569 +#: command.c:2819 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Разделитель записей: \"%s\".\n" -#: command.c:2582 +#: command.c:2832 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Атрибуты HTML-таблицы: \"%s\".\n" -#: command.c:2585 +#: command.c:2835 #, c-format msgid "Table attributes unset.\n" msgstr "Атрибуты HTML-таблицы не заданы.\n" -#: command.c:2592 +#: command.c:2842 #, c-format msgid "Title is \"%s\".\n" msgstr "Заголовок: \"%s\".\n" -#: command.c:2594 +#: command.c:2844 #, c-format msgid "Title is unset.\n" msgstr "Заголовок не задан.\n" -#: command.c:2601 +#: command.c:2851 #, c-format msgid "Tuples only is on.\n" msgstr "Режим вывода только кортежей включён.\n" -#: command.c:2603 +#: command.c:2853 #, c-format msgid "Tuples only is off.\n" msgstr "Режим вывода только кортежей выключен.\n" -#: command.c:2754 +#: command.c:2859 command.c:2871 +#, c-format +msgid "Unicode border linestyle is \"%s\".\n" +msgstr "Стиль unicode-линий границ: \"%s\".\n" + +#: command.c:2865 +#, c-format +msgid "Unicode column linestyle is \"%s\".\n" +msgstr "Стиль unicode-линий колонок: \"%s\".\n" + +#: command.c:3031 #, c-format msgid "\\!: failed\n" msgstr "\\!: ошибка\n" -#: command.c:2774 command.c:2832 +#: command.c:3051 common.c:548 #, c-format msgid "\\watch cannot be used with an empty query\n" msgstr "\\watch нельзя использовать с пустым запросом\n" -#: command.c:2795 +#: command.c:3072 #, c-format msgid "Watch every %lds\t%s" msgstr "Повтор запрос через %ld сек.\t%s" -#: command.c:2839 +#: command.c:3123 command.c:3130 common.c:448 common.c:455 common.c:988 #, c-format -msgid "\\watch cannot be used with COPY\n" -msgstr "\\watch нельзя использовать с COPY\n" +msgid "" +"********* QUERY **********\n" +"%s\n" +"**************************\n" +"\n" +msgstr "" +"********* ЗАПРОС *********\n" +"%s\n" +"**************************\n" +"\n" -#: command.c:2845 +#: command.c:3281 #, c-format -msgid "unexpected result status for \\watch\n" -msgstr "неожиданное состояние результата для \\watch\n" +msgid "%s.%s is not a view\n" +msgstr "%s.%s - не представление\n" #: common.c:287 #, c-format @@ -619,25 +674,27 @@ msgstr "неудачна.\n" msgid "Succeeded.\n" msgstr "удачна.\n" -#: common.c:403 common.c:683 common.c:851 +#: common.c:403 common.c:759 common.c:927 #, c-format msgid "unexpected PQresultStatus: %d\n" msgstr "неожиданное значение PQresultStatus: %d\n" -#: common.c:452 common.c:459 common.c:912 +#: common.c:555 #, c-format -msgid "" -"********* QUERY **********\n" -"%s\n" -"**************************\n" -"\n" -msgstr "" -"********* ЗАПРОС *********\n" -"%s\n" -"**************************\n" -"\n" +msgid "\\watch cannot be used with COPY\n" +msgstr "\\watch нельзя использовать с COPY\n" + +#: common.c:560 +#, c-format +msgid "unexpected result status for \\watch\n" +msgstr "неожиданное состояние результата для \\watch\n" + +#: common.c:571 common.c:1146 +#, c-format +msgid "Time: %.3f ms\n" +msgstr "Время: %.3f мс\n" -#: common.c:513 +#: common.c:589 #, c-format msgid "" "Asynchronous notification \"%s\" with payload \"%s\" received from server " @@ -646,29 +703,29 @@ msgstr "" "Получено асинхронное уведомление \"%s\" с сообщением-нагрузкой \"%s\" от " "серверного процесса с PID %d.\n" -#: common.c:516 +#: common.c:592 #, c-format msgid "" "Asynchronous notification \"%s\" received from server process with PID %d.\n" msgstr "" "Получено асинхронное уведомление \"%s\" от серверного процесса с PID %d.\n" -#: common.c:578 +#: common.c:654 #, c-format msgid "no rows returned for \\gset\n" msgstr "сервер не возвратил строк для \\gset\n" -#: common.c:583 +#: common.c:659 #, c-format msgid "more than one row returned for \\gset\n" msgstr "сервер возвратил больше одной строки для \\gset\n" -#: common.c:609 +#: common.c:685 #, c-format msgid "could not set variable \"%s\"\n" msgstr "не удалось установить переменную \"%s\"\n" -#: common.c:894 +#: common.c:970 #, c-format msgid "" "***(Single step mode: verify " @@ -682,7 +739,7 @@ msgstr "" "%s\n" "***(Enter - выполнение; x и Enter - отмена)**************\n" -#: common.c:945 +#: common.c:1021 #, c-format msgid "" "The server (version %d.%d) does not support savepoints for " @@ -691,15 +748,15 @@ msgstr "" "Сервер (версия %d.%d) не поддерживает точки сохранения для " "ON_ERROR_ROLLBACK.\n" -#: common.c:1039 +#: common.c:1075 #, c-format -msgid "unexpected transaction status (%d)\n" -msgstr "неожиданное состояние транзакции (%d)\n" +msgid "STATEMENT: %s\n" +msgstr "ОПЕРАТОР: %s\n" -#: common.c:1067 +#: common.c:1118 #, c-format -msgid "Time: %.3f ms\n" -msgstr "Время: %.3f мс\n" +msgid "unexpected transaction status (%d)\n" +msgstr "неожиданное состояние транзакции (%d)\n" #: copy.c:98 #, c-format @@ -750,7 +807,7 @@ msgstr "ошибка передачи данных COPY: %s" msgid "canceled by user" msgstr "отменено пользователем" -#: copy.c:544 +#: copy.c:545 msgid "" "Enter data to be copied followed by a newline.\n" "End with a backslash and a period on a line by itself." @@ -758,48 +815,48 @@ msgstr "" "Вводите данные для копирования, разделяя строки переводом строки.\n" "Закончите ввод строкой '\\.'." -#: copy.c:667 +#: copy.c:674 msgid "aborted because of read failure" msgstr "прерывание из-за ошибки чтения" -#: copy.c:691 +#: copy.c:698 msgid "trying to exit copy mode" msgstr "попытка выйти из режима копирования" -#: describe.c:71 describe.c:259 describe.c:491 describe.c:615 describe.c:758 -#: describe.c:844 describe.c:914 describe.c:2759 describe.c:2964 -#: describe.c:3054 describe.c:3299 describe.c:3436 describe.c:3665 -#: describe.c:3737 describe.c:3748 describe.c:3807 describe.c:4215 -#: describe.c:4294 +#: describe.c:71 describe.c:264 describe.c:496 describe.c:626 describe.c:769 +#: describe.c:886 describe.c:956 describe.c:2921 describe.c:3126 +#: describe.c:3216 describe.c:3461 describe.c:3598 describe.c:3827 +#: describe.c:3899 describe.c:3910 describe.c:3969 describe.c:4377 +#: describe.c:4456 msgid "Schema" msgstr "Схема" -#: describe.c:72 describe.c:156 describe.c:164 describe.c:260 describe.c:492 -#: describe.c:616 describe.c:677 describe.c:759 describe.c:915 describe.c:2760 -#: describe.c:2886 describe.c:2965 describe.c:3055 describe.c:3134 -#: describe.c:3300 describe.c:3364 describe.c:3437 describe.c:3666 -#: describe.c:3738 describe.c:3749 describe.c:3808 describe.c:3997 -#: describe.c:4078 describe.c:4292 +#: describe.c:72 describe.c:156 describe.c:164 describe.c:265 describe.c:497 +#: describe.c:627 describe.c:688 describe.c:770 describe.c:957 describe.c:2922 +#: describe.c:3048 describe.c:3127 describe.c:3217 describe.c:3296 +#: describe.c:3462 describe.c:3526 describe.c:3599 describe.c:3828 +#: describe.c:3900 describe.c:3911 describe.c:3970 describe.c:4159 +#: describe.c:4240 describe.c:4454 msgid "Name" msgstr "Имя" -#: describe.c:73 describe.c:272 describe.c:318 describe.c:335 +#: describe.c:73 describe.c:277 describe.c:323 describe.c:340 msgid "Result data type" msgstr "Тип данных результата" -#: describe.c:81 describe.c:94 describe.c:98 describe.c:273 describe.c:319 -#: describe.c:336 +#: describe.c:81 describe.c:94 describe.c:98 describe.c:278 describe.c:324 +#: describe.c:341 msgid "Argument data types" msgstr "Типы данных аргументов" -#: describe.c:105 describe.c:182 describe.c:365 describe.c:534 describe.c:631 -#: describe.c:702 describe.c:917 describe.c:1486 describe.c:2564 -#: describe.c:2793 describe.c:2917 describe.c:2991 describe.c:3064 -#: describe.c:3147 describe.c:3215 describe.c:3307 describe.c:3373 -#: describe.c:3438 describe.c:3574 describe.c:3614 describe.c:3682 -#: describe.c:3741 describe.c:3750 describe.c:3809 describe.c:4023 -#: describe.c:4100 describe.c:4229 describe.c:4295 large_obj.c:291 -#: large_obj.c:301 +#: describe.c:105 describe.c:187 describe.c:370 describe.c:545 describe.c:642 +#: describe.c:713 describe.c:959 describe.c:1570 describe.c:2722 +#: describe.c:2955 describe.c:3079 describe.c:3153 describe.c:3226 +#: describe.c:3309 describe.c:3377 describe.c:3469 describe.c:3535 +#: describe.c:3600 describe.c:3736 describe.c:3776 describe.c:3844 +#: describe.c:3903 describe.c:3912 describe.c:3971 describe.c:4185 +#: describe.c:4262 describe.c:4391 describe.c:4457 large_obj.c:289 +#: large_obj.c:299 msgid "Description" msgstr "Описание" @@ -812,9 +869,9 @@ msgstr "Список агрегатных функций" msgid "The server (version %d.%d) does not support tablespaces.\n" msgstr "Сервер (версия %d.%d) не поддерживает табличные пространства.\n" -#: describe.c:157 describe.c:165 describe.c:362 describe.c:678 describe.c:843 -#: describe.c:2769 describe.c:2890 describe.c:3136 describe.c:3365 -#: describe.c:3998 describe.c:4079 large_obj.c:290 +#: describe.c:157 describe.c:165 describe.c:367 describe.c:535 describe.c:689 +#: describe.c:885 describe.c:2931 describe.c:3052 describe.c:3298 +#: describe.c:3527 describe.c:4160 describe.c:4241 large_obj.c:288 msgid "Owner" msgstr "Владелец" @@ -822,513 +879,538 @@ msgstr "Владелец" msgid "Location" msgstr "Расположение" -#: describe.c:177 describe.c:2382 +#: describe.c:177 describe.c:2535 msgid "Options" msgstr "Параметры" -#: describe.c:199 +#: describe.c:182 describe.c:508 describe.c:705 describe.c:2947 +#: describe.c:2951 +msgid "Size" +msgstr "Размер" + +#: describe.c:204 msgid "List of tablespaces" msgstr "Список табличных пространств" -#: describe.c:236 +#: describe.c:241 #, c-format msgid "\\df only takes [antwS+] as options\n" msgstr "\\df принимает в качестве параметров только [antwS+]\n" -#: describe.c:242 +#: describe.c:247 #, c-format msgid "\\df does not take a \"w\" option with server version %d.%d\n" msgstr "\\df не поддерживает параметр \"w\" с сервером версии %d.%d\n" #. translator: "agg" is short for "aggregate" -#: describe.c:275 describe.c:321 describe.c:338 +#: describe.c:280 describe.c:326 describe.c:343 msgid "agg" msgstr "агр." -#: describe.c:276 +#: describe.c:281 msgid "window" msgstr "оконная" -#: describe.c:277 describe.c:322 describe.c:339 describe.c:1028 +#: describe.c:282 describe.c:327 describe.c:344 describe.c:1093 msgid "trigger" msgstr "триггерная" -#: describe.c:278 describe.c:323 describe.c:340 +#: describe.c:283 describe.c:328 describe.c:345 msgid "normal" msgstr "обычная" -#: describe.c:279 describe.c:324 describe.c:341 describe.c:765 describe.c:853 -#: describe.c:1455 describe.c:2768 describe.c:2966 describe.c:4097 +#: describe.c:284 describe.c:329 describe.c:346 describe.c:776 describe.c:895 +#: describe.c:1539 describe.c:2930 describe.c:3128 describe.c:4259 msgid "Type" msgstr "Тип" -#: describe.c:355 +#: describe.c:360 msgid "definer" msgstr "определившего" -#: describe.c:356 +#: describe.c:361 msgid "invoker" msgstr "вызывающего" -#: describe.c:357 +#: describe.c:362 msgid "Security" msgstr "Безопасность" -#: describe.c:358 +#: describe.c:363 msgid "immutable" msgstr "постоянная " -#: describe.c:359 +#: describe.c:364 msgid "stable" msgstr "стабильная" -#: describe.c:360 +#: describe.c:365 msgid "volatile" msgstr "изменчивая" -#: describe.c:361 +#: describe.c:366 msgid "Volatility" msgstr "Изменчивость" -#: describe.c:363 +#: describe.c:368 msgid "Language" msgstr "Язык" -#: describe.c:364 +#: describe.c:369 msgid "Source code" msgstr "Исходный код" -#: describe.c:462 +#: describe.c:467 msgid "List of functions" msgstr "Список функций" -#: describe.c:502 +#: describe.c:507 msgid "Internal name" msgstr "Внутреннее имя" -#: describe.c:503 describe.c:694 describe.c:2785 describe.c:2789 -msgid "Size" -msgstr "Размер" - -#: describe.c:524 +#: describe.c:529 msgid "Elements" msgstr "Элементы" -#: describe.c:574 +#: describe.c:585 msgid "List of data types" msgstr "Список типов данных" -#: describe.c:617 +#: describe.c:628 msgid "Left arg type" msgstr "Тип левого аргумента" -#: describe.c:618 +#: describe.c:629 msgid "Right arg type" msgstr "Тип правого аргумента" -#: describe.c:619 +#: describe.c:630 msgid "Result type" msgstr "Результирующий тип" -#: describe.c:624 describe.c:3206 describe.c:3573 +#: describe.c:635 describe.c:3368 describe.c:3735 msgid "Function" msgstr "Функция" -#: describe.c:649 +#: describe.c:660 msgid "List of operators" msgstr "Список операторов" -#: describe.c:679 +#: describe.c:690 msgid "Encoding" msgstr "Кодировка" -#: describe.c:684 describe.c:3301 +#: describe.c:695 describe.c:3463 msgid "Collate" msgstr "LC_COLLATE" -#: describe.c:685 describe.c:3302 +#: describe.c:696 describe.c:3464 msgid "Ctype" msgstr "LC_CTYPE" -#: describe.c:698 +#: describe.c:709 msgid "Tablespace" msgstr "Табл. пространство" -#: describe.c:720 +#: describe.c:731 msgid "List of databases" msgstr "Список баз данных" -#: describe.c:760 describe.c:846 describe.c:2761 +#: describe.c:771 describe.c:888 describe.c:2923 msgid "table" msgstr "таблица" -#: describe.c:761 describe.c:2762 +#: describe.c:772 describe.c:2924 msgid "view" msgstr "представление" -#: describe.c:762 describe.c:2763 +#: describe.c:773 describe.c:2925 msgid "materialized view" msgstr "материализованное представление" -#: describe.c:763 describe.c:848 describe.c:2765 +#: describe.c:774 describe.c:890 describe.c:2927 msgid "sequence" msgstr "последовательность" -#: describe.c:764 describe.c:2767 +#: describe.c:775 describe.c:2929 msgid "foreign table" msgstr "сторонняя таблица" -#: describe.c:776 -msgid "Column access privileges" -msgstr "Права доступа к колонкам" +#: describe.c:787 +msgid "Column privileges" +msgstr "Права для колонок" + +#: describe.c:818 +msgid "Policies" +msgstr "Политики" -#: describe.c:802 describe.c:4439 describe.c:4443 +#: describe.c:844 describe.c:4601 describe.c:4605 msgid "Access privileges" msgstr "Права доступа" -#: describe.c:831 +#: describe.c:873 #, c-format msgid "" "The server (version %d.%d) does not support altering default privileges.\n" msgstr "Сервер (версия %d.%d) не поддерживает изменение прав по умолчанию.\n" -#: describe.c:850 +#: describe.c:892 msgid "function" msgstr "функция" -#: describe.c:852 +#: describe.c:894 msgid "type" msgstr "тип" -#: describe.c:876 +#: describe.c:918 msgid "Default access privileges" msgstr "Права доступа по умолчанию" -#: describe.c:916 +#: describe.c:958 msgid "Object" msgstr "Объект" -#: describe.c:930 sql_help.c:1595 -msgid "constraint" -msgstr "ограничение" +#: describe.c:972 +msgid "table constraint" +msgstr "ограничение таблицы" -#: describe.c:957 +#: describe.c:994 +msgid "domain constraint" +msgstr "ограничение домена" + +#: describe.c:1022 msgid "operator class" msgstr "класс операторов" -#: describe.c:986 +#: describe.c:1051 msgid "operator family" msgstr "семейство операторов" -#: describe.c:1008 +#: describe.c:1073 msgid "rule" msgstr "правило" -#: describe.c:1050 +#: describe.c:1115 msgid "Object descriptions" msgstr "Описание объекта" -#: describe.c:1104 +#: describe.c:1169 #, c-format msgid "Did not find any relation named \"%s\".\n" msgstr "Отношение \"%s\" не найдено.\n" -#: describe.c:1295 +#: describe.c:1378 #, c-format msgid "Did not find any relation with OID %s.\n" msgstr "Отношение с OID %s не найдено.\n" -#: describe.c:1399 +#: describe.c:1483 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "Нежурналируемая таблица \"%s.%s\"" -#: describe.c:1402 +#: describe.c:1486 #, c-format msgid "Table \"%s.%s\"" msgstr "Таблица \"%s.%s\"" -#: describe.c:1406 +#: describe.c:1490 #, c-format msgid "View \"%s.%s\"" msgstr "Представление \"%s.%s\"" -#: describe.c:1411 +#: describe.c:1495 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "Нежурналируемое материализованное представление \"%s.%s\"" -#: describe.c:1414 +#: describe.c:1498 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "Материализованное представление \"%s.%s\"" -#: describe.c:1418 +#: describe.c:1502 #, c-format msgid "Sequence \"%s.%s\"" msgstr "Последовательность \"%s.%s\"" -#: describe.c:1423 +#: describe.c:1507 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "Нежурналируемый индекс \"%s.%s\"" -#: describe.c:1426 +#: describe.c:1510 #, c-format msgid "Index \"%s.%s\"" msgstr "Индекс \"%s.%s\"" -#: describe.c:1431 +#: describe.c:1515 #, c-format msgid "Special relation \"%s.%s\"" msgstr "Специальное отношение \"%s.%s\"" -#: describe.c:1435 +#: describe.c:1519 #, c-format msgid "TOAST table \"%s.%s\"" msgstr "TOAST-таблица \"%s.%s\"" -#: describe.c:1439 +#: describe.c:1523 #, c-format msgid "Composite type \"%s.%s\"" msgstr "Составной тип \"%s.%s\"" -#: describe.c:1443 +#: describe.c:1527 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "Сторонняя таблица \"%s.%s\"" -#: describe.c:1454 +#: describe.c:1538 msgid "Column" msgstr "Колонка" -#: describe.c:1463 +#: describe.c:1547 msgid "Modifiers" msgstr "Модификаторы" -#: describe.c:1468 +#: describe.c:1552 msgid "Value" msgstr "Значение" -#: describe.c:1471 +#: describe.c:1555 msgid "Definition" msgstr "Определение" -#: describe.c:1474 describe.c:4018 describe.c:4099 describe.c:4167 -#: describe.c:4228 +#: describe.c:1558 describe.c:4180 describe.c:4261 describe.c:4329 +#: describe.c:4390 msgid "FDW Options" msgstr "Параметры ОСД" -#: describe.c:1478 +#: describe.c:1562 msgid "Storage" msgstr "Хранилище" -#: describe.c:1481 +#: describe.c:1565 msgid "Stats target" msgstr "Цель для статистики" -#: describe.c:1531 +#: describe.c:1615 #, c-format msgid "collate %s" msgstr "правило сортировки %s" -#: describe.c:1539 +#: describe.c:1623 msgid "not null" msgstr "NOT NULL" #. translator: default values of column definitions -#: describe.c:1549 +#: describe.c:1633 #, c-format msgid "default %s" msgstr "DEFAULT %s" -#: describe.c:1664 +#: describe.c:1748 msgid "primary key, " msgstr "первичный ключ, " -#: describe.c:1666 +#: describe.c:1750 msgid "unique, " msgstr "уникальный, " -#: describe.c:1672 +#: describe.c:1756 #, c-format msgid "for table \"%s.%s\"" msgstr "для таблицы \"%s.%s\"" -#: describe.c:1676 +#: describe.c:1760 #, c-format msgid ", predicate (%s)" msgstr ", предикат (%s)" -#: describe.c:1679 +#: describe.c:1763 msgid ", clustered" msgstr ", кластеризованный" -#: describe.c:1682 +#: describe.c:1766 msgid ", invalid" msgstr ", нерабочий" -#: describe.c:1685 +#: describe.c:1769 msgid ", deferrable" msgstr ", откладываемый" -#: describe.c:1688 +#: describe.c:1772 msgid ", initially deferred" msgstr ", изначально отложенный" -#: describe.c:1691 +#: describe.c:1775 msgid ", replica identity" msgstr ", репликационный" -#: describe.c:1726 +#: describe.c:1810 #, c-format msgid "Owned by: %s" msgstr "Владелец: %s" -#: describe.c:1786 +#: describe.c:1870 msgid "Indexes:" msgstr "Индексы:" -#: describe.c:1870 +#: describe.c:1954 msgid "Check constraints:" msgstr "Ограничения-проверки:" # TO REWVIEW -#: describe.c:1901 +#: describe.c:1985 msgid "Foreign-key constraints:" msgstr "Ограничения внешнего ключа:" -#: describe.c:1932 +#: describe.c:2016 msgid "Referenced by:" msgstr "Ссылки извне:" -#: describe.c:2014 describe.c:2064 +#: describe.c:2061 +msgid "Policies:" +msgstr "Политики:" + +#: describe.c:2064 +msgid "Policies (Row Security Enabled): (None)" +msgstr "Политики (защита строк включена): (Нет)" + +#: describe.c:2067 +msgid "Policies (Row Security Disabled):" +msgstr "Политики (защита строк выключена):" + +#: describe.c:2167 describe.c:2217 msgid "Rules:" msgstr "Правила:" -#: describe.c:2017 +#: describe.c:2170 msgid "Disabled rules:" msgstr "Отключенные правила:" -#: describe.c:2020 +#: describe.c:2173 msgid "Rules firing always:" msgstr "Правила, срабатывающие всегда:" -#: describe.c:2023 +#: describe.c:2176 msgid "Rules firing on replica only:" msgstr "Правила, срабатывающие только в реплике:" -#: describe.c:2047 +#: describe.c:2200 msgid "View definition:" msgstr "Определение представления:" -#: describe.c:2182 +#: describe.c:2335 msgid "Triggers:" msgstr "Триггеры:" -#: describe.c:2186 +#: describe.c:2339 msgid "Disabled user triggers:" msgstr "Отключенные пользовательские триггеры:" -#: describe.c:2188 +#: describe.c:2341 msgid "Disabled triggers:" msgstr "Отключенные триггеры:" -#: describe.c:2191 +#: describe.c:2344 msgid "Disabled internal triggers:" msgstr "Отключенные внутренние триггеры:" -#: describe.c:2194 +#: describe.c:2347 msgid "Triggers firing always:" msgstr "Триггеры, срабатывающие всегда:" -#: describe.c:2197 +#: describe.c:2350 msgid "Triggers firing on replica only:" msgstr "Триггеры, срабатывающие только в реплике:" -#: describe.c:2276 +#: describe.c:2429 msgid "Inherits" msgstr "Наследует" -#: describe.c:2315 +#: describe.c:2468 #, c-format msgid "Number of child tables: %d (Use \\d+ to list them.)" msgstr "Дочерних таблиц: %d (чтобы просмотреть и их, воспользуйтесь \\d+)" -#: describe.c:2322 +#: describe.c:2475 msgid "Child tables" msgstr "Дочерние таблицы" -#: describe.c:2344 +#: describe.c:2497 #, c-format msgid "Typed table of type: %s" msgstr "Типизированная таблица типа: %s" -#: describe.c:2358 +#: describe.c:2511 msgid "Replica Identity" msgstr "Идентификация реплики" -#: describe.c:2371 +#: describe.c:2524 msgid "Has OIDs: yes" msgstr "Содержит OID: да" -#: describe.c:2460 +#: describe.c:2613 #, c-format msgid "Tablespace: \"%s\"" msgstr "Табличное пространство: \"%s\"" #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:2472 +#: describe.c:2625 #, c-format msgid ", tablespace \"%s\"" msgstr ", табл. пространство \"%s\"" -#: describe.c:2557 +#: describe.c:2715 msgid "List of roles" msgstr "Список ролей" -#: describe.c:2559 +#: describe.c:2717 msgid "Role name" msgstr "Имя роли" -#: describe.c:2560 +#: describe.c:2718 msgid "Attributes" msgstr "Атрибуты" -#: describe.c:2561 +#: describe.c:2719 msgid "Member of" msgstr "Член ролей" -#: describe.c:2572 +#: describe.c:2730 msgid "Superuser" msgstr "Суперпользователь" -#: describe.c:2575 +#: describe.c:2733 msgid "No inheritance" msgstr "Не наследуется" -#: describe.c:2578 +#: describe.c:2736 msgid "Create role" msgstr "Создаёт роли" -#: describe.c:2581 +#: describe.c:2739 msgid "Create DB" msgstr "Создаёт БД" -#: describe.c:2584 +#: describe.c:2742 msgid "Cannot login" msgstr "Вход запрещён" -#: describe.c:2588 +#: describe.c:2746 msgid "Replication" msgstr "Репликация" -#: describe.c:2597 +#: describe.c:2750 +msgid "Bypass RLS" +msgstr "Пропускать RLS" + +#: describe.c:2759 msgid "No connections" msgstr "Нет подключений" -#: describe.c:2599 +#: describe.c:2761 #, c-format msgid "%d connection" msgid_plural "%d connections" @@ -1336,311 +1418,311 @@ msgstr[0] "%d подключение" msgstr[1] "%d подключения" msgstr[2] "%d подключений" -#: describe.c:2609 +#: describe.c:2771 msgid "Password valid until " msgstr "Пароль действует до " -#: describe.c:2665 +#: describe.c:2827 msgid "Role" msgstr "Роль" -#: describe.c:2666 +#: describe.c:2828 msgid "Database" msgstr "БД" -#: describe.c:2667 +#: describe.c:2829 msgid "Settings" msgstr "Параметры" -#: describe.c:2677 +#: describe.c:2839 #, c-format msgid "No per-database role settings support in this server version.\n" msgstr "" "Это версия сервера не поддерживает параметры ролей на уровне базы данных.\n" -#: describe.c:2688 +#: describe.c:2850 #, c-format msgid "No matching settings found.\n" msgstr "Соответствующие параметры не найдены.\n" -#: describe.c:2690 +#: describe.c:2852 #, c-format msgid "No settings found.\n" msgstr "Параметры не найдены.\n" -#: describe.c:2695 +#: describe.c:2857 msgid "List of settings" msgstr "Список параметров" -#: describe.c:2764 +#: describe.c:2926 msgid "index" msgstr "индекс" -#: describe.c:2766 +#: describe.c:2928 msgid "special" msgstr "спец. отношение" -#: describe.c:2774 describe.c:4216 +#: describe.c:2936 describe.c:4378 msgid "Table" msgstr "Таблица" -#: describe.c:2850 +#: describe.c:3012 #, c-format msgid "No matching relations found.\n" msgstr "Соответствующие отношения не найдены.\n" -#: describe.c:2852 +#: describe.c:3014 #, c-format msgid "No relations found.\n" msgstr "Отношения не найдены.\n" -#: describe.c:2857 +#: describe.c:3019 msgid "List of relations" msgstr "Список отношений" -#: describe.c:2894 +#: describe.c:3056 msgid "Trusted" msgstr "Доверенный" -#: describe.c:2902 +#: describe.c:3064 msgid "Internal Language" msgstr "Внутренний язык" -#: describe.c:2903 +#: describe.c:3065 msgid "Call Handler" msgstr "Обработчик вызова" -#: describe.c:2904 describe.c:4005 +#: describe.c:3066 describe.c:4167 msgid "Validator" msgstr "Функция проверки" -#: describe.c:2907 +#: describe.c:3069 msgid "Inline Handler" msgstr "Обработчик внедрённого кода" -#: describe.c:2935 +#: describe.c:3097 msgid "List of languages" msgstr "Список языков" -#: describe.c:2979 +#: describe.c:3141 msgid "Modifier" msgstr "Модификатор" -#: describe.c:2980 +#: describe.c:3142 msgid "Check" msgstr "Проверка" -#: describe.c:3022 +#: describe.c:3184 msgid "List of domains" msgstr "Список доменов" -#: describe.c:3056 +#: describe.c:3218 msgid "Source" msgstr "Источник" -#: describe.c:3057 +#: describe.c:3219 msgid "Destination" msgstr "Назначение" -#: describe.c:3058 describe.c:3207 +#: describe.c:3220 describe.c:3369 msgid "no" msgstr "нет" -#: describe.c:3058 describe.c:3209 +#: describe.c:3220 describe.c:3371 msgid "yes" msgstr "да" -#: describe.c:3059 +#: describe.c:3221 msgid "Default?" msgstr "По умолчанию?" -#: describe.c:3096 +#: describe.c:3258 msgid "List of conversions" msgstr "Список преобразований" -#: describe.c:3135 +#: describe.c:3297 msgid "Event" msgstr "Событие" -#: describe.c:3137 +#: describe.c:3299 msgid "enabled" msgstr "включён" -#: describe.c:3138 +#: describe.c:3300 msgid "replica" msgstr "реплика" -#: describe.c:3139 +#: describe.c:3301 msgid "always" msgstr "всегда" -#: describe.c:3140 +#: describe.c:3302 msgid "disabled" msgstr "отключён" -#: describe.c:3141 +#: describe.c:3303 msgid "Enabled" msgstr "Включен" -#: describe.c:3142 +#: describe.c:3304 msgid "Procedure" msgstr "Процедура" -#: describe.c:3143 +#: describe.c:3305 msgid "Tags" msgstr "Тэги" -#: describe.c:3162 +#: describe.c:3324 msgid "List of event triggers" msgstr "Список событийных триггеров" -#: describe.c:3204 +#: describe.c:3366 msgid "Source type" msgstr "Исходный тип" -#: describe.c:3205 +#: describe.c:3367 msgid "Target type" msgstr "Целевой тип" -#: describe.c:3208 +#: describe.c:3370 msgid "in assignment" msgstr "в присваивании" -#: describe.c:3210 +#: describe.c:3372 msgid "Implicit?" msgstr "Неявное?" -#: describe.c:3261 +#: describe.c:3423 msgid "List of casts" -msgstr "Список преобразований типов" +msgstr "Список приведений типов" -#: describe.c:3287 +#: describe.c:3449 #, c-format msgid "The server (version %d.%d) does not support collations.\n" msgstr "Сервер (версия %d.%d) не поддерживает правила сравнения.\n" -#: describe.c:3337 +#: describe.c:3499 msgid "List of collations" msgstr "Список правил сортировки" -#: describe.c:3396 +#: describe.c:3558 msgid "List of schemas" msgstr "Список схем" -#: describe.c:3419 describe.c:3654 describe.c:3722 describe.c:3790 +#: describe.c:3581 describe.c:3816 describe.c:3884 describe.c:3952 #, c-format msgid "The server (version %d.%d) does not support full text search.\n" msgstr "Сервер (версия %d.%d) не поддерживает полнотекстовый поиск.\n" -#: describe.c:3453 +#: describe.c:3615 msgid "List of text search parsers" msgstr "Список анализаторов текстового поиска" -#: describe.c:3496 +#: describe.c:3658 #, c-format msgid "Did not find any text search parser named \"%s\".\n" msgstr "Анализатор текстового поиска \"%s\" не найден.\n" -#: describe.c:3571 +#: describe.c:3733 msgid "Start parse" msgstr "Начало разбора" -#: describe.c:3572 +#: describe.c:3734 msgid "Method" msgstr "Метод" -#: describe.c:3576 +#: describe.c:3738 msgid "Get next token" msgstr "Получение следующего фрагмента" -#: describe.c:3578 +#: describe.c:3740 msgid "End parse" msgstr "Окончание разбора" -#: describe.c:3580 +#: describe.c:3742 msgid "Get headline" msgstr "Получение выдержки" -#: describe.c:3582 +#: describe.c:3744 msgid "Get token types" msgstr "Получение типов фрагментов" -#: describe.c:3592 +#: describe.c:3754 #, c-format msgid "Text search parser \"%s.%s\"" msgstr "Анализатор текстового поиска \"%s.%s\"" -#: describe.c:3594 +#: describe.c:3756 #, c-format msgid "Text search parser \"%s\"" msgstr "Анализатор текстового поиска \"%s\"" -#: describe.c:3613 +#: describe.c:3775 msgid "Token name" msgstr "Имя фрагмента" -#: describe.c:3624 +#: describe.c:3786 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "Типы фрагментов для анализатора \"%s.%s\"" -#: describe.c:3626 +#: describe.c:3788 #, c-format msgid "Token types for parser \"%s\"" msgstr "Типы фрагментов для анализатора \"%s\"" -#: describe.c:3676 +#: describe.c:3838 msgid "Template" msgstr "Шаблон" -#: describe.c:3677 +#: describe.c:3839 msgid "Init options" msgstr "Параметры инициализации" -#: describe.c:3699 +#: describe.c:3861 msgid "List of text search dictionaries" msgstr "Список словарей текстового поиска" -#: describe.c:3739 +#: describe.c:3901 msgid "Init" msgstr "Инициализация" -#: describe.c:3740 +#: describe.c:3902 msgid "Lexize" msgstr "Выделение лексем" -#: describe.c:3767 +#: describe.c:3929 msgid "List of text search templates" msgstr "Список шаблонов текстового поиска" -#: describe.c:3824 +#: describe.c:3986 msgid "List of text search configurations" msgstr "Список конфигураций текстового поиска" -#: describe.c:3868 +#: describe.c:4030 #, c-format msgid "Did not find any text search configuration named \"%s\".\n" msgstr "Конфигурация текстового поиска \"%s\" не найдена.\n" -#: describe.c:3934 +#: describe.c:4096 msgid "Token" msgstr "Фрагмент" -#: describe.c:3935 +#: describe.c:4097 msgid "Dictionaries" msgstr "Словари" -#: describe.c:3946 +#: describe.c:4108 #, c-format msgid "Text search configuration \"%s.%s\"" msgstr "Конфигурация текстового поиска \"%s.%s\"" -#: describe.c:3949 +#: describe.c:4111 #, c-format msgid "Text search configuration \"%s\"" msgstr "Конфигурация текстового поиска \"%s\"" -#: describe.c:3953 +#: describe.c:4115 #, c-format msgid "" "\n" @@ -1649,7 +1731,7 @@ msgstr "" "\n" "Анализатор: \"%s.%s\"" -#: describe.c:3956 +#: describe.c:4118 #, c-format msgid "" "\n" @@ -1658,96 +1740,96 @@ msgstr "" "\n" "Анализатор: \"%s\"" -#: describe.c:3988 +#: describe.c:4150 #, c-format msgid "The server (version %d.%d) does not support foreign-data wrappers.\n" msgstr "Сервер (версия %d.%d) не поддерживает обёртки сторонних данных.\n" -#: describe.c:4002 +#: describe.c:4164 msgid "Handler" msgstr "Обработчик" -#: describe.c:4045 +#: describe.c:4207 msgid "List of foreign-data wrappers" msgstr "Список обёрток сторонних данных" -#: describe.c:4068 +#: describe.c:4230 #, c-format msgid "The server (version %d.%d) does not support foreign servers.\n" msgstr "Сервер (версия %d.%d) не поддерживает сторонние серверы.\n" -#: describe.c:4080 +#: describe.c:4242 msgid "Foreign-data wrapper" msgstr "Обёртка сторонних данных" -#: describe.c:4098 describe.c:4293 +#: describe.c:4260 describe.c:4455 msgid "Version" msgstr "Версия" -#: describe.c:4124 +#: describe.c:4286 msgid "List of foreign servers" msgstr "Список сторонних серверов" -#: describe.c:4147 +#: describe.c:4309 #, c-format msgid "The server (version %d.%d) does not support user mappings.\n" msgstr "Сервер (версия %d.%d) не поддерживает сопоставления пользователей.\n" -#: describe.c:4156 describe.c:4217 +#: describe.c:4318 describe.c:4379 msgid "Server" msgstr "Сервер" -#: describe.c:4157 +#: describe.c:4319 msgid "User name" msgstr "Имя пользователя" -#: describe.c:4182 +#: describe.c:4344 msgid "List of user mappings" msgstr "Список сопоставлений пользователей" -#: describe.c:4205 +#: describe.c:4367 #, c-format msgid "The server (version %d.%d) does not support foreign tables.\n" msgstr "Сервер (версия %d.%d) не поддерживает сторонние таблицы.\n" -#: describe.c:4256 +#: describe.c:4418 msgid "List of foreign tables" msgstr "Список сторонних таблиц" -#: describe.c:4279 describe.c:4333 +#: describe.c:4441 describe.c:4495 #, c-format msgid "The server (version %d.%d) does not support extensions.\n" msgstr "Сервер (версия %d.%d) не поддерживает расширения.\n" -#: describe.c:4310 +#: describe.c:4472 msgid "List of installed extensions" msgstr "Список установленных расширений" -#: describe.c:4360 +#: describe.c:4522 #, c-format msgid "Did not find any extension named \"%s\".\n" msgstr "Расширение \"%s\" не найдено.\n" -#: describe.c:4363 +#: describe.c:4525 #, c-format msgid "Did not find any extensions.\n" msgstr "Расширения не найдены.\n" -#: describe.c:4407 +#: describe.c:4569 msgid "Object Description" msgstr "Описание объекта" -#: describe.c:4416 +#: describe.c:4578 #, c-format msgid "Objects in extension \"%s\"" msgstr "Объекты в расширении \"%s\"" -#: help.c:62 +#: help.c:63 #, c-format msgid "%s\n" msgstr "%s\n" -#: help.c:67 +#: help.c:70 #, c-format msgid "" "psql is the PostgreSQL interactive terminal.\n" @@ -1756,12 +1838,12 @@ msgstr "" "psql - это интерактивный терминал PostgreSQL.\n" "\n" -#: help.c:68 +#: help.c:71 help.c:315 help.c:348 help.c:375 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: help.c:69 +#: help.c:72 #, c-format msgid "" " psql [OPTION]... [DBNAME [USERNAME]]\n" @@ -1770,12 +1852,12 @@ msgstr "" " psql [ПАРАМЕТР]... [БД [ПОЛЬЗОВАТЕЛЬ]]\n" "\n" -#: help.c:71 +#: help.c:74 #, c-format msgid "General options:\n" msgstr "Общие параметры:\n" -#: help.c:76 +#: help.c:79 #, c-format msgid "" " -c, --command=COMMAND run only single command (SQL or internal) and " @@ -1784,7 +1866,7 @@ msgstr "" " -c, --command=КОМАНДА выполнить одну команду (SQL или внутреннюю) и " "выйти\n" -#: help.c:77 +#: help.c:80 #, c-format msgid "" " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" @@ -1792,38 +1874,39 @@ msgstr "" " -d, --dbname=БД имя подключаемой базы данных (по умолчанию \"%s" "\")\n" -#: help.c:78 +#: help.c:81 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" msgstr " -f, --file=ИМЯ_ФАЙЛА выполнить команды из файла и выйти\n" -#: help.c:79 +#: help.c:82 #, c-format msgid " -l, --list list available databases, then exit\n" msgstr " -l, --list вывести список баз данных и выйти\n" -#: help.c:80 +#: help.c:83 #, c-format msgid "" " -v, --set=, --variable=NAME=VALUE\n" -" set psql variable NAME to VALUE\n" +" set psql variable NAME to VALUE e.g.: -v " +"ON_ERROR_STOP=1\n" msgstr "" " -v, --set=, --variable=ИМЯ=ЗНАЧЕНИЕ\n" -" присвоить переменной psql 'ИМЯ' заданное " -"ЗНАЧЕНИЕ\n" +" присвоить переменной psql ИМЯ заданное ЗНАЧЕНИЕ, " +"например: -v ON_ERROR_STOP=1\n" -#: help.c:82 +#: help.c:85 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: help.c:83 +#: help.c:86 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr "" " -X, --no-psqlrc игнорировать файл параметров запуска (~/.psqlrc)\n" -#: help.c:84 +#: help.c:87 #, c-format msgid "" " -1 (\"one\"), --single-transaction\n" @@ -1834,12 +1917,27 @@ msgstr "" " выполнить как одну транзакцию\n" " (в неинтерактивном режиме)\n" -#: help.c:86 +#: help.c:89 +#, c-format +msgid " -?, --help[=options] show this help, then exit\n" +msgstr " -?, --help[=options] показать эту справку и выйти\n" + +#: help.c:90 +#, c-format +msgid "" +" --help=variables show a list of all specially treated variables, " +"then exit\n" +msgstr "" +" --help=variables вывести список всех специальных переменных и " +"выйти\n" + +#: help.c:91 #, c-format -msgid " -?, --help show this help, then exit\n" -msgstr " -?, --help показать эту справку и выйти\n" +msgid "" +" --help=commands show a list of backslash commands, then exit\n" +msgstr " --help=commands показать список всех команд с \\ и выйти\n" -#: help.c:88 +#: help.c:93 #, c-format msgid "" "\n" @@ -1848,17 +1946,22 @@ msgstr "" "\n" "Параметры ввода/вывода:\n" -#: help.c:89 +#: help.c:94 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all отображать все команды из скрипта\n" -#: help.c:90 +#: help.c:95 +#, c-format +msgid " -b, --echo-errors echo failed commands\n" +msgstr " -b, --echo-errors отображать команды с ошибками\n" + +#: help.c:96 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr " -e, --echo-queries отображать команды, отправляемые серверу\n" -#: help.c:91 +#: help.c:97 #, c-format msgid "" " -E, --echo-hidden display queries that internal commands generate\n" @@ -1866,26 +1969,26 @@ msgstr "" " -E, --echo-hidden выводить запросы, порождённые внутренними " "командами\n" -#: help.c:92 +#: help.c:98 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" msgstr " -L, --log-file=ИМЯ_ФАЙЛА сохранять протокол работы в файл\n" -#: help.c:93 +#: help.c:99 #, c-format msgid "" " -n, --no-readline disable enhanced command line editing (readline)\n" msgstr "" " -n, --no-readline отключить редактор командной строки readline\n" -#: help.c:94 +#: help.c:100 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" msgstr "" " -o, --output=ИМЯ_ФАЙЛА направить результаты запроса в файл (или канал " "|)\n" -#: help.c:95 +#: help.c:101 #, c-format msgid "" " -q, --quiet run quietly (no messages, only query output)\n" @@ -1893,13 +1996,13 @@ msgstr "" " -q, --quiet показывать только результаты запросов, без " "сообщений\n" -#: help.c:96 +#: help.c:102 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" msgstr "" " -s, --single-step пошаговый режим (подтверждение каждого запроса)\n" -#: help.c:97 +#: help.c:103 #, c-format msgid "" " -S, --single-line single-line mode (end of line terminates SQL " @@ -1908,7 +2011,7 @@ msgstr "" " -S, --single-line однострочный режим (конец строки завершает " "команду)\n" -#: help.c:99 +#: help.c:105 #, c-format msgid "" "\n" @@ -1917,12 +2020,12 @@ msgstr "" "\n" "Параметры вывода:\n" -#: help.c:100 +#: help.c:106 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr " -A, --no-align режим вывода невыровненной таблицы\n" -#: help.c:101 +#: help.c:107 #, c-format msgid "" " -F, --field-separator=STRING\n" @@ -1933,12 +2036,12 @@ msgstr "" " разделителей полей при невыровненном выводе\n" " (по умолчанию: \"%s\")\n" -#: help.c:104 +#: help.c:110 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html вывод таблицы в формате HTML\n" -#: help.c:105 +#: help.c:111 #, c-format msgid "" " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset " @@ -1948,7 +2051,7 @@ msgstr "" "ЗНАЧЕНИЕМ)\n" " (см. описание \\pset)\n" -#: help.c:106 +#: help.c:112 #, c-format msgid "" " -R, --record-separator=STRING\n" @@ -1959,12 +2062,12 @@ msgstr "" " разделитель записей при невыровненном выводе\n" " (по умолчанию: новая строка)\n" -#: help.c:108 +#: help.c:114 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr " -t, --tuples-only выводить только кортежи\n" -#: help.c:109 +#: help.c:115 #, c-format msgid "" " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, " @@ -1972,12 +2075,12 @@ msgid "" msgstr "" " -T, --table-attr=ТЕКСТ установить атрибуты HTML-таблицы (width, border)\n" -#: help.c:110 +#: help.c:116 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded включить развёрнутый вывод таблицы\n" -#: help.c:111 +#: help.c:117 #, c-format msgid "" " -z, --field-separator-zero\n" @@ -1988,7 +2091,7 @@ msgstr "" " сделать разделителем полей при невыровненном\n" " выводе нулевой байт\n" -#: help.c:113 +#: help.c:119 #, c-format msgid "" " -0, --record-separator-zero\n" @@ -1999,7 +2102,7 @@ msgstr "" " сделать разделителем записей при невыровненном\n" " нулевой байт\n" -#: help.c:116 +#: help.c:122 #, c-format msgid "" "\n" @@ -2008,7 +2111,7 @@ msgstr "" "\n" "Параметры подключения:\n" -#: help.c:119 +#: help.c:125 #, c-format msgid "" " -h, --host=HOSTNAME database server host or socket directory " @@ -2017,27 +2120,27 @@ msgstr "" " -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n" " (по умолчанию: \"%s\")\n" -#: help.c:120 +#: help.c:126 msgid "local socket" msgstr "локальный сокет" -#: help.c:123 +#: help.c:129 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" msgstr "" " -p, --port=ПОРТ порт сервера баз данных (по умолчанию: \"%s\")\n" -#: help.c:129 +#: help.c:135 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" msgstr " -U, --username=ИМЯ имя пользователя (по умолчанию: \"%s\")\n" -#: help.c:130 +#: help.c:136 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: help.c:131 +#: help.c:137 #, c-format msgid "" " -W, --password force password prompt (should happen " @@ -2045,7 +2148,7 @@ msgid "" msgstr "" " -W, --password запрашивать пароль всегда (обычно не требуется)\n" -#: help.c:133 +#: help.c:139 #, c-format msgid "" "\n" @@ -2062,17 +2165,17 @@ msgstr "" "документации PostgreSQL.\n" "\n" -#: help.c:136 +#: help.c:142 #, c-format msgid "Report bugs to .\n" msgstr "Об ошибках сообщайте по адресу .\n" -#: help.c:157 +#: help.c:165 #, c-format msgid "General\n" msgstr "Общие\n" -#: help.c:158 +#: help.c:166 #, c-format msgid "" " \\copyright show PostgreSQL usage and distribution terms\n" @@ -2080,7 +2183,7 @@ msgstr "" " \\copyright условия использования и распространения " "PostgreSQL\n" -#: help.c:159 +#: help.c:167 #, c-format msgid "" " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" @@ -2088,7 +2191,7 @@ msgstr "" " \\g [ФАЙЛ] или ; выполнить запрос\n" " (и направить результаты в файл или канал |)\n" -#: help.c:160 +#: help.c:168 #, c-format msgid "" " \\gset [PREFIX] execute query and store results in psql variables\n" @@ -2097,32 +2200,55 @@ msgstr "" "переменных\n" " psql\n" -#: help.c:161 -#, c-format -msgid "" -" \\h [NAME] help on syntax of SQL commands, * for all " -"commands\n" -msgstr "" -" \\h [ИМЯ] справка по заданному SQL-оператору; * - по всем\n" - -#: help.c:162 +#: help.c:169 #, c-format msgid " \\q quit psql\n" msgstr " \\q выйти из psql\n" -#: help.c:163 +#: help.c:170 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr "" " \\watch [СЕК] повторять запрос в цикле через заданное число " "секунд\n" -#: help.c:166 +#: help.c:173 +#, c-format +msgid "Help\n" +msgstr "Справка\n" + +#: help.c:175 +#, c-format +msgid " \\? [commands] description of all psql backslash commands\n" +msgstr " \\? [commands] описание всех команд psql c \\\n" + +#: help.c:176 +#, c-format +msgid " \\? options description of all psql commandline options\n" +msgstr "" +" \\? options описание всех параметров командной строки psql\n" + +#: help.c:177 +#, c-format +msgid "" +" \\? variables description of all psql configuration variables\n" +msgstr "" +" \\? variables описание всех конфигурационных переменных psql\n" + +#: help.c:178 +#, c-format +msgid "" +" \\h [NAME] help on syntax of SQL commands, * for all " +"commands\n" +msgstr "" +" \\h [ИМЯ] справка по заданному SQL-оператору; * - по всем\n" + +#: help.c:181 #, c-format msgid "Query Buffer\n" msgstr "Буфер запроса\n" -#: help.c:167 +#: help.c:182 #, c-format msgid "" " \\e [FILE] [LINE] edit the query buffer (or file) with external " @@ -2131,56 +2257,63 @@ msgstr "" " \\e [ФАЙЛ] [СТРОКА] править буфер запроса (или файл) во внешнем " "редакторе\n" -#: help.c:168 +#: help.c:183 #, c-format msgid "" " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr "" " \\ef [ФУНКЦИЯ [СТРОКА]] править определение функции во внешнем редакторе\n" -#: help.c:169 +#: help.c:184 +#, c-format +msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" +msgstr "" +" \\ev [VIEWNAME [LINE]] править определение представления во внешнем " +"редакторе\n" + +#: help.c:185 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p вывести содержимое буфера запросов\n" -#: help.c:170 +#: help.c:186 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r очистить буфер запроса\n" -#: help.c:172 +#: help.c:188 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [ФАЙЛ] вывести историю или сохранить её в файл\n" -#: help.c:174 +#: help.c:190 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w ФАЙЛ записать буфер запроса в файл\n" -#: help.c:177 +#: help.c:193 #, c-format msgid "Input/Output\n" msgstr "Ввод/Вывод\n" -#: help.c:178 +#: help.c:194 #, c-format msgid "" " \\copy ... perform SQL COPY with data stream to the client " "host\n" msgstr " \\copy ... выполнить SQL COPY на стороне клиента\n" -#: help.c:179 +#: help.c:195 #, c-format msgid " \\echo [STRING] write string to standard output\n" msgstr " \\echo [СТРОКА] записать строку в стандартный вывод\n" -#: help.c:180 +#: help.c:196 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i ФАЙЛ выполнить команды из файла\n" -#: help.c:181 +#: help.c:197 #, c-format msgid "" " \\ir FILE as \\i, but relative to location of current " @@ -2189,14 +2322,14 @@ msgstr "" " \\ir ФАЙЛ подобно \\i, но путь задаётся относительно\n" " текущего скрипта\n" -#: help.c:182 +#: help.c:198 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr "" " \\o [ФАЙЛ] выводить все результаты запросов в файл или канал " "|\n" -#: help.c:183 +#: help.c:199 #, c-format msgid "" " \\qecho [STRING] write string to query output stream (see \\o)\n" @@ -2204,25 +2337,25 @@ msgstr "" " \\qecho [СТРОКА] записать строку в поток результатов запроса (см. " "\\o)\n" -#: help.c:186 +#: help.c:202 #, c-format msgid "Informational\n" msgstr "Информационные\n" -#: help.c:187 +#: help.c:203 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr "" " (опции: S = показывать системные объекты, + = дополнительные подробности)\n" -#: help.c:188 +#: help.c:204 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr "" " \\d[S+] список таблиц, представлений и " "последовательностей\n" -#: help.c:189 +#: help.c:205 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr "" @@ -2230,64 +2363,64 @@ msgstr "" "последовательности\n" " или индекса\n" -#: help.c:190 +#: help.c:206 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [МАСКА] список агрегатных функций\n" -#: help.c:191 +#: help.c:207 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [МАСКА] список табличных пространств\n" -#: help.c:192 +#: help.c:208 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [МАСКА] список преобразований\n" -#: help.c:193 +#: help.c:209 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [МАСКА] список приведений типов\n" -#: help.c:194 +#: help.c:210 #, c-format msgid "" " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr "" " \\dd[S] [МАСКА] описания объектов, не выводимые в других режимах\n" -#: help.c:195 +#: help.c:211 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [МАСКА] список прав по умолчанию\n" -#: help.c:196 +#: help.c:212 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [МАСКА] список доменов\n" -#: help.c:197 +#: help.c:213 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [МАСКА] список сторонних таблиц\n" -#: help.c:198 +#: help.c:214 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [МАСКА] список сторонних серверов\n" -#: help.c:199 +#: help.c:215 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [МАСКА] список сопоставлений пользователей\n" -#: help.c:200 +#: help.c:216 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [МАСКА] список обёрток сторонних данных\n" -#: help.c:201 +#: help.c:217 #, c-format msgid "" " \\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions\n" @@ -2295,68 +2428,68 @@ msgstr "" " \\df[antw][S+] [МАСКА] список [агрегатных/нормальных/триггерных/оконных]\n" " функций соответственно\n" -#: help.c:202 +#: help.c:218 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [МАСКА] список конфигураций текстового поиска\n" -#: help.c:203 +#: help.c:219 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [МАСКА] список словарей текстового поиска\n" -#: help.c:204 +#: help.c:220 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [МАСКА] список анализаторов текстового поиска\n" -#: help.c:205 +#: help.c:221 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [МАСКА] список шаблонов текстового поиска\n" -#: help.c:206 +#: help.c:222 #, c-format msgid " \\dg[+] [PATTERN] list roles\n" msgstr " \\dg[+] [МАСКА] список ролей\n" -#: help.c:207 +#: help.c:223 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [МАСКА] список индексов\n" -#: help.c:208 +#: help.c:224 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr "" " \\dl список больших объектов (то же, что и \\lo_list)\n" -#: help.c:209 +#: help.c:225 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [МАСКА] список языков процедур\n" -#: help.c:210 +#: help.c:226 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [МАСКА] список материализованных представлений\n" -#: help.c:211 +#: help.c:227 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [МАСКА] список схем\n" -#: help.c:212 +#: help.c:228 #, c-format msgid " \\do[S] [PATTERN] list operators\n" msgstr " \\do[S] [МАСКА] список операторов\n" -#: help.c:213 +#: help.c:229 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [МАСКА] список правил сортировки\n" -#: help.c:214 +#: help.c:230 #, c-format msgid "" " \\dp [PATTERN] list table, view, and sequence access privileges\n" @@ -2364,72 +2497,77 @@ msgstr "" " \\dp [МАСКА] список прав доступа к таблицам, представлениям и\n" " последовательностям\n" -#: help.c:215 +#: help.c:231 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [МAСК1 [МАСК2]] список параметров роли на уровне БД\n" -#: help.c:216 +#: help.c:232 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [МАСКА] список последовательностей\n" -#: help.c:217 +#: help.c:233 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [МАСКА] список таблиц\n" -#: help.c:218 +#: help.c:234 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [МАСКА] список типов данных\n" -#: help.c:219 +#: help.c:235 #, c-format msgid " \\du[+] [PATTERN] list roles\n" msgstr " \\du[+] [МАСКА] список ролей\n" -#: help.c:220 +#: help.c:236 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [МАСКА] список представлений\n" -#: help.c:221 +#: help.c:237 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [МАСКА] список сторонних таблиц\n" -#: help.c:222 +#: help.c:238 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [МАСКА] список расширений\n" -#: help.c:223 +#: help.c:239 #, c-format msgid " \\dy [PATTERN] list event triggers\n" msgstr " \\dy [МАСКА] список событийных триггеров\n" -#: help.c:224 +#: help.c:240 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [МАСКА] список баз данных\n" -#: help.c:225 +#: help.c:241 #, c-format -msgid " \\sf[+] FUNCNAME show a function's definition\n" -msgstr " \\sf[+] ИМЯ_ФУНКЦИИ показать определение функции\n" +msgid " \\sf[+] FUNCNAME show a function's definition\n" +msgstr " \\sf[+] ИМЯ_ФУНКЦИИ показать определение функции\n" -#: help.c:226 +#: help.c:242 +#, c-format +msgid " \\sv[+] VIEWNAME show a view's definition\n" +msgstr " \\sv[+] ИМЯ_ПРЕДСТ показать определение представления\n" + +#: help.c:243 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [МАСКА] то же, что и \\dp\n" -#: help.c:229 +#: help.c:246 #, c-format msgid "Formatting\n" msgstr "Форматирование\n" -#: help.c:230 +#: help.c:247 #, c-format msgid "" " \\a toggle between unaligned and aligned output mode\n" @@ -2437,14 +2575,14 @@ msgstr "" " \\a переключение режимов вывода:\n" " неформатированный/выровненный\n" -#: help.c:231 +#: help.c:248 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr "" " \\C [СТРОКА] задать заголовок таблицы или убрать, если не " "задан\n" -#: help.c:232 +#: help.c:249 #, c-format msgid "" " \\f [STRING] show or set field separator for unaligned query " @@ -2453,33 +2591,37 @@ msgstr "" " \\f [СТРОКА] показать или установить разделитель полей для\n" " неформатированного вывода\n" -#: help.c:233 +#: help.c:250 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr "" " \\H переключить режим вывода в HTML (текущий: %s)\n" -#: help.c:235 +#: help.c:252 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" " (NAME := {format|border|expanded|fieldsep|" "fieldsep_zero|footer|null|\n" " numericlocale|recordsep|recordsep_zero|tuples_only|" -"title|tableattr|pager})\n" +"title|tableattr|pager|\n" +" unicode_border_linestyle|unicode_column_linestyle|" +"unicode_header_linestyle})\n" msgstr "" " \\pset [ИМЯ [ЗНАЧЕНИЕ]] установить параметр вывода таблицы, где\n" -" ИМЯ := {format|border|expanded|fieldsep|" -"fieldsep_zero|footer|null|\n" -" numericlocale|recordsep|recordsep_zero|tuples_only|" -"title|tableattr|pager})\n" +" ИМЯ := {format|border|expanded|fieldsep|fieldsep_zero" +"|footer|null|\n" +" numericlocale|recordsep|recordsep_zero|tuples_only|ti" +"tle|tableattr|pager|\n" +" unicode_border_linestyle|unicode_column_linestyle|uni" +"code_header_linestyle})\n" -#: help.c:238 +#: help.c:256 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] режим вывода только строк (сейчас: %s)\n" -#: help.c:240 +#: help.c:258 #, c-format msgid "" " \\T [STRING] set HTML
tag attributes, or unset if none\n" @@ -2487,76 +2629,76 @@ msgstr "" " \\T [СТРОКА] задать атрибуты для
или убрать, если не " "заданы\n" -#: help.c:241 +#: help.c:259 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr "" " \\x [on|off|auto] переключить режим расширенного вывода (сейчас: " "%s)\n" -#: help.c:245 +#: help.c:263 #, c-format msgid "Connection\n" msgstr "Соединение\n" -#: help.c:247 +#: help.c:265 #, c-format msgid "" -" \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently \"%s\")\n" msgstr "" -" \\c[onnect] [БД|- ПОЛЬЗОВАТЕЛЬ|- СЕРВЕР|- ПОРТ|-]\n" +" \\c[onnect] {[БД|- ПОЛЬЗОВАТЕЛЬ|- СЕРВЕР|- ПОРТ|-] | conninfo}\n" " подключиться к другой базе данных\n" " (текущая: \"%s\")\n" -#: help.c:251 +#: help.c:269 #, c-format msgid "" -" \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently no connection)\n" msgstr "" -" \\c[onnect] [БД|- ПОЛЬЗОВАТЕЛЬ|- СЕРВЕР|- ПОРТ|-]\n" +" \\c[onnect] {[БД|- ПОЛЬЗОВАТЕЛЬ|- СЕРВЕР|- ПОРТ|-] | conninfo}\n" " подключиться к другой базе данных\n" " (сейчас подключения нет)\n" -#: help.c:253 +#: help.c:271 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [КОДИРОВКА] показать/установить клиентскую кодировку\n" -#: help.c:254 +#: help.c:272 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr " \\password [ИМЯ] безопасно сменить пароль пользователя\n" -#: help.c:255 +#: help.c:273 #, c-format msgid "" " \\conninfo display information about current connection\n" msgstr " \\conninfo информация о текущем соединении\n" -#: help.c:258 +#: help.c:276 #, c-format msgid "Operating System\n" msgstr "Операционная система\n" -#: help.c:259 +#: help.c:277 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [ПУТЬ] сменить текущий каталог\n" -#: help.c:260 +#: help.c:278 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr "" " \\setenv ИМЯ [ЗНАЧЕНИЕ] установить или сбросить переменную окружения\n" -#: help.c:261 +#: help.c:279 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [on|off] включить/выключить секундомер (сейчас: %s)\n" -#: help.c:263 +#: help.c:281 #, c-format msgid "" " \\! [COMMAND] execute command in shell or start interactive " @@ -2565,19 +2707,19 @@ msgstr "" " \\! [КОМАНДА] выполнить команду в командной оболочке\n" " или запустить интерактивную оболочку\n" -#: help.c:266 +#: help.c:284 #, c-format msgid "Variables\n" msgstr "Переменные\n" -#: help.c:267 +#: help.c:285 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr "" " \\prompt [ТЕКСТ] ИМЯ предложить пользователю задать внутреннюю " "переменную\n" -#: help.c:268 +#: help.c:286 #, c-format msgid "" " \\set [NAME [VALUE]] set internal variable, or list all if no " @@ -2586,17 +2728,17 @@ msgstr "" " \\set [ИМЯ [ЗНАЧЕНИЕ]] установить внутреннюю переменную или вывести все,\n" " если имя не задано\n" -#: help.c:269 +#: help.c:287 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset ИМЯ сбросить (удалить) внутреннюю переменную\n" -#: help.c:272 +#: help.c:290 #, c-format msgid "Large Objects\n" msgstr "Большие объекты\n" -#: help.c:273 +#: help.c:291 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -2609,11 +2751,505 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID операции с большими объектами\n" -#: help.c:320 +#: help.c:312 +#, c-format +msgid "List of specially treated variables.\n" +msgstr "Список специальных переменных.\n" + +#: help.c:314 +#, c-format +msgid "psql variables:\n" +msgstr "Переменные psql:\n" + +#: help.c:316 +#, c-format +msgid "" +" psql --set=NAME=VALUE\n" +" or \\set NAME VALUE in interactive mode\n" +"\n" +msgstr "" +" psql --set=ИМЯ=ЗНАЧЕНИЕ\n" +" или \\set ИМЯ ЗНАЧЕНИЕ в интерактивном режиме\n" +"\n" + +#: help.c:318 +#, c-format +msgid "" +" AUTOCOMMIT if set, successful SQL commands are automatically " +"committed\n" +msgstr "" +" AUTOCOMMIT если установлен, успешные SQL-команды фиксируются " +"автоматически\n" + +#: help.c:319 +#, c-format +msgid "" +" COMP_KEYWORD_CASE determine the case used to complete SQL keywords\n" +" [lower, upper, preserve-lower, preserve-upper]\n" +msgstr "" +" COMP_KEYWORD_CASE определяет регистр для автодополнения ключевых слов SQL\n" +" [lower (нижний), upper (верхний),\n" +" preserve-lower (сохранять нижний), preserve-upper " +"(сохранять верхний)]\n" + +#: help.c:321 +#, c-format +msgid " DBNAME the currently connected database name\n" +msgstr " DBNAME имя текущей подключенной базы данных\n" + +#: help.c:322 +#, c-format +msgid "" +" ECHO control what input is written to standard output\n" +" [all, errors, none, queries]\n" +msgstr "" +" ECHO определяет, что выдаётся на стандартный вывод\n" +" [all (всё), errors (ошибки), none (ничего), queries " +"(запросы)]\n" + +#: help.c:324 +#, c-format +msgid "" +" ECHO_HIDDEN display internal queries executed by backslash commands " +"when it is set\n" +" or with [noexec] just show without execution\n" +msgstr "" +" ECHO_HIDDEN выводит внутренние запросы, порождаемые командами с \\ " +" (с [noexec] они не выполняются)\n" + +#: help.c:326 +#, c-format +msgid " ENCODING current client character set encoding\n" +msgstr " ENCODING текущая кодировка клиентского набора символов\n" + +#: help.c:327 +#, c-format +msgid "" +" FETCH_COUNT the number of result rows to fetch and display at a " +"time\n" +" (default: 0=unlimited)\n" +msgstr "" +" FETCH_COUNT число результирующих строк, извлекаемых и отображаемых " +"за раз\n" +" (по умолчанию: 0=без ограничений)\n" + +#: help.c:329 +#, c-format +msgid "" +" HISTCONTROL control history list [ignorespace, ignoredups, " +"ignoreboth]\n" +msgstr "" +" HISTCONTROL управление историей [ignorespace (игнорировать " +"пробелы),\n" +" ignoredups (игнорировать дубли), ignoreboth (и то, и " +"другое)]\n" + +#: help.c:330 +#, c-format +msgid " HISTFILE file name used to store the history list\n" +msgstr " HISTFILE имя файла, в котором будет сохраняться история\n" + +#: help.c:331 +#, c-format +msgid "" +" HISTSIZE the number of commands to store in the command history\n" +msgstr "" +" HISTSIZE число команд, которые будут сохраняться в истории\n" + +#: help.c:332 +#, c-format +msgid " HOST the currently connected database server\n" +msgstr " HOST текущий сервер БД\n" + +#: help.c:333 +#, c-format +msgid "" +" IGNOREEOF if unset, sending an EOF to interactive session " +"terminates application\n" +msgstr "" +" IGNOREEOF если не установлено, отправка EOF в интерактивном сеансе " +"завершает приложение\n" + +#: help.c:334 +#, c-format +msgid " LASTOID the value of last affected OID\n" +msgstr " LASTOID значение последнего задействованного OID\n" + +#: help.c:335 +#, c-format +msgid "" +" ON_ERROR_ROLLBACK if set, an error doesn't stop a transaction (uses " +"implicit SAVEPOINTs)\n" +msgstr "" +" ON_ERROR_ROLLBACK если установлено, транзакция не прекращается при ошибке " +"(используются неявные точки сохранения)\n" + +#: help.c:336 +#, c-format +msgid " ON_ERROR_STOP stop batch execution after error\n" +msgstr "" +" ON_ERROR_STOP останавливать выполнение пакета команд после ошибки\n" + +#: help.c:337 +#, c-format +msgid " PORT server port of the current connection\n" +msgstr " PORT порт сервера для текущего соединения\n" + +#: help.c:338 +#, c-format +msgid " PROMPT1 specify the standard psql prompt\n" +msgstr " PROMPT1 устанавливает стандартное приглашение psql\n" + +#: help.c:339 +#, c-format +msgid "" +" PROMPT2 specify the prompt used when a statement continues from " +"a previous line\n" +msgstr "" +" PROMPT2 устанавливает приглашение, которое выводится при " +"переносе оператора на новую строку\n" + +#: help.c:340 +#, c-format +msgid "" +" PROMPT3 specify the prompt used during COPY ... FROM STDIN\n" +msgstr "" +" PROMPT3 устанавливает приглашения для выполнения COPY ... FROM " +"STDIN\n" + +#: help.c:341 +#, c-format +msgid " QUIET run quietly (same as -q option)\n" +msgstr "" +" QUIET выводить минимум сообщений (как и с параметром -q)\n" + +#: help.c:342 +#, c-format +msgid "" +" SINGLELINE end of line terminates SQL command mode (same as -S " +"option)\n" +msgstr "" +" SINGLELINE конец строки завершает режим ввода SQL-команды (как и с " +"параметром -S)\n" + +#: help.c:343 +#, c-format +msgid " SINGLESTEP single-step mode (same as -s option)\n" +msgstr " SINGLESTEP пошаговый режим (как и с параметром -s)\n" + +#: help.c:344 +#, c-format +msgid " USER the currently connected database user\n" +msgstr " USER текущий пользователь, подключенный к БД\n" + +#: help.c:345 +#, c-format +msgid "" +" VERBOSITY control verbosity of error reports [default, verbose, " +"terse]\n" +msgstr "" +" VERBOSITY управляет детализацией отчётов об ошибке [default (по " +"умолчанию), verbose (подробно), terse (кратко)]\n" + +#: help.c:347 +#, c-format +msgid "" +"\n" +"Display influencing variables:\n" +msgstr "" +"\n" +"Рабочие параметры:\n" + +#: help.c:349 +#, c-format +msgid "" +" psql --pset=NAME[=VALUE]\n" +" or \\pset NAME [VALUE] in interactive mode\n" +"\n" +msgstr "" +" psql --pset=ИМЯ[=ЗНАЧЕНИЕ]\n" +" или \\pset ИМЯ [ЗНАЧЕНИЕ] в интерактивном режиме\n" +"\n" + +#: help.c:351 +#, c-format +msgid " border border style (number)\n" +msgstr " border стиль границы (число)\n" + +#: help.c:352 +#, c-format +msgid " columns set the target width for the wrapped format\n" +msgstr " columns задаёт целевую ширину для формата с переносом\n" + +#: help.c:353 +#, c-format +msgid " expanded (or x) toggle expanded output\n" +msgstr " expanded (или x) переключает расширенный вывод\n" + +#: help.c:354 +#, c-format +msgid "" +" fieldsep field separator for unaligned output (default '|')\n" +msgstr "" +" fieldsep разделитель полей для неформатированного вывода (по " +"умолчанию '|')\n" + +#: help.c:355 +#, c-format +msgid " fieldsep_zero set field separator in unaligned mode to zero\n" +msgstr "" +" fieldsep_zero устанавливает ноль разделителем полей в " +"неформатированном режиме\n" + +#: help.c:356 +#, c-format +msgid "" +" format set output format [unaligned, aligned, wrapped, html, " +"asciidoc, ...]\n" +msgstr "" +" format устанавливает формат вывода [unaligned " +"(неформатированный), aligned (выровненный), wrapped (с переносом), html, " +"asciidoc, ...]\n" + +#: help.c:357 +#, c-format +msgid "" +" footer enable or disable display of the table footer [on, " +"off]\n" +msgstr "" +" footer включает или выключает вывод подписей таблицы [on " +"(вкл.), off (выкл.)]\n" + +#: help.c:358 +#, c-format +msgid "" +" linestyle set the border line drawing style [ascii, old-ascii, " +"unicode]\n" +msgstr "" +" linestyle задаёт стиль рисования линий границы [ascii, old-ascii, " +"unicode]\n" + +#: help.c:359 +#, c-format +msgid "" +" null set the string to be printed in place of a null value\n" +msgstr "" +" null устанавливает строку, выводимую вместо значения NULL\n" + +#: help.c:360 +#, c-format +msgid "" +" numericlocale enable or disable display of a locale-specific " +"character to separate\n" +" groups of digits [on, off]\n" +msgstr "" +" numericlocale включает или отключает вывод заданного локалью " +"разделителя\n" +" группы цифр [on (вкл.), off (выкл.)]\n" + +#: help.c:362 +#, c-format +msgid "" +" pager control when an external pager is used [yes, no, " +"always]\n" +msgstr "" +" pager определяет, используется ли внешний постраничник " +" [yes (да), no (нет), always (всегда)]\n" + +#: help.c:363 +#, c-format +msgid "" +" recordsep specify the record (line) separator to use in unaligned " +"output format\n" +msgstr "" +" recordsep задаёт разделитель записей (строк) при выводе в " +"неформатированном формате\n" + +#: help.c:364 +#, c-format +msgid "" +" recordsep_zero set the record separator to use in unaligned output " +"format to a zero byte.\n" +msgstr "" +" recordsep_zero устанавливает ноль разделителем записей при выводе в " +"неформатированном формате.\n" + +#: help.c:365 +#, c-format +msgid "" +" tableattr (or T) specify attributes for table tag in html format or " +"proportional\n" +" column width of left aligned data type in latex format\n" +msgstr "" +" tableattr (или T) задаёт атрибуты для тэга table в формате html или " +"пропорциональные\n" +" ширины колонок данных, выровненных влево, в формате " +"latex\n" + +#: help.c:367 +#, c-format +msgid "" +" title set the table title for any subsequently printed " +"tables\n" +msgstr "" +" title задаёт заголовок таблицы для последовательно печатаемых " +"таблиц\n" + +#: help.c:368 +#, c-format +msgid " tuples_only if set, only actual table data is shown\n" +msgstr "" +" tuples_only если установлено, выводятся только непосредственно " +"табличные данные\n" + +#: help.c:369 +#, c-format +msgid " unicode_border_linestyle\n" +msgstr " unicode_border_linestyle\n" + +#: help.c:370 +#, c-format +msgid " unicode_column_linestyle\n" +msgstr " unicode_column_linestyle\n" + +#: help.c:371 +#, c-format +msgid "" +" unicode_header_linestyle\n" +" set the style of unicode line drawing [single, double]\n" +msgstr "" +" unicode_header_linestyle\n" +" задаёт стиль рисуемых линий unicode [single (одинарные), " +"double (двойные)]\n" + +#: help.c:374 +#, c-format +msgid "" +"\n" +"Environment variables:\n" +msgstr "" +"\n" +"Переменные окружения:\n" + +#: help.c:378 +#, c-format +msgid "" +" NAME=VALUE [NAME=VALUE] psql ...\n" +" or \\setenv NAME [VALUE] in interactive mode\n" +"\n" +msgstr "" +" ИМЯ=ЗНАЧЕНИЕ [ИМЯ=ЗНАЧЕНИЕ] psql ...\n" +" или \\setenv ИМЯ [ЗНАЧЕНИЕ] в интерактивном режиме\n" +"\n" + +#: help.c:380 +#, c-format +msgid "" +" set NAME=VALUE\n" +" psql ...\n" +" or \\setenv NAME VALUE in interactive mode\n" +"\n" +msgstr "" +" set ИМЯ=ЗНАЧЕНИЕ\n" +" psql ...\n" +" или \\setenv ИМЯ ЗНАЧЕНИЕ в интерактивном режиме\n" +"\n" + +#: help.c:383 +#, c-format +msgid " COLUMNS number of columns for wrapped format\n" +msgstr " COLUMNS число колонок для форматирования с переносом\n" + +#: help.c:384 +#, c-format +msgid " PAGER name of external pager program\n" +msgstr " PAGER имя программы внешнего постраничника\n" + +#: help.c:385 +#, c-format +msgid "" +" PGAPPNAME same as the application_name connection parameter\n" +msgstr " PGAPPNAME синоним параметра подключения application_name\n" + +#: help.c:386 +#, c-format +msgid " PGDATABASE same as the dbname connection parameter\n" +msgstr " PGDATABASE синоним параметра подключения dbname\n" + +#: help.c:387 +#, c-format +msgid " PGHOST same as the host connection parameter\n" +msgstr " PGHOST синоним параметра подключения host\n" + +#: help.c:388 +#, c-format +msgid " PGPORT same as the port connection parameter\n" +msgstr " PGPORT синоним параметра подключения port\n" + +#: help.c:389 +#, c-format +msgid " PGUSER same as the user connection parameter\n" +msgstr " PGUSER синоним параметра подключения user\n" + +#: help.c:390 +#, c-format +msgid " PGPASSWORD connection password (not recommended)\n" +msgstr "" +" PGPASSWORD пароль для подключения (использовать не рекомендуется)\n" + +#: help.c:391 +#, c-format +msgid " PGPASSFILE password file name\n" +msgstr " PGPASSFILE имя файла с паролем\n" + +#: help.c:392 +#, 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:394 +#, 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:396 +#, c-format +msgid "" +" PSQL_HISTORY alternative location for the command history file\n" +msgstr "" +" PSQL_HISTORY альтернативное размещение файла с историей команд\n" + +#: help.c:397 +#, c-format +msgid " PSQLRC alternative location for the user's .psqlrc file\n" +msgstr "" +" PSQLRC альтернативное размещения пользовательского файла " +".psqlrc\n" + +#: help.c:398 +#, c-format +msgid " SHELL shell used by the \\! command\n" +msgstr " SHELL оболочка, вызываемая командой \\!\n" + +#: help.c:399 +#, c-format +msgid " TMPDIR directory for temporary files\n" +msgstr " TMPDIR каталог для временных файлов\n" + +#: help.c:442 msgid "Available help:\n" msgstr "Имеющаяся справка:\n" -#: help.c:404 +#: help.c:526 #, c-format msgid "" "Command: %s\n" @@ -2628,7 +3264,7 @@ msgstr "" "%s\n" "\n" -#: help.c:420 +#: help.c:542 #, c-format msgid "" "No help available for \"%s\".\n" @@ -2642,49 +3278,58 @@ msgstr "" msgid "could not read from input file: %s\n" msgstr "не удалось прочитать входной файл: %s\n" -#: input.c:451 input.c:490 +#: input.c:446 input.c:485 #, c-format msgid "could not save history to file \"%s\": %s\n" msgstr "не удалось сохранить историю в файле \"%s\": %s\n" -#: input.c:510 +#: input.c:505 #, c-format msgid "history is not supported by this installation\n" msgstr "в данной среде история не поддерживается\n" -#: large_obj.c:66 +#: large_obj.c:64 #, c-format msgid "%s: not connected to a database\n" msgstr "%s: нет соединения с базой данных\n" -#: large_obj.c:85 +#: large_obj.c:83 #, c-format msgid "%s: current transaction is aborted\n" msgstr "%s: текущая транзакция прервана\n" -#: large_obj.c:88 +#: large_obj.c:86 #, c-format msgid "%s: unknown transaction status\n" msgstr "%s: неизвестное состояние транзакции\n" -#: large_obj.c:289 large_obj.c:300 +#: large_obj.c:287 large_obj.c:298 msgid "ID" msgstr "ID" -#: large_obj.c:310 +#: large_obj.c:308 msgid "Large objects" msgstr "Большие объекты" -#: mainloop.c:159 +#: mainloop.c:161 #, c-format msgid "Use \"\\q\" to leave %s.\n" msgstr "Чтобы выйти из %s, введите \"\\q\".\n" -#: mainloop.c:189 +#: mainloop.c:183 +msgid "" +"The input is a PostgreSQL custom-format dump.\n" +"Use the pg_restore command-line client to restore this dump to a database.\n" +msgstr "" +"Результат выдаётся в специальном формате выгрузки PostgreSQL.\n" +"Чтобы восстановить базу данных из этого формата, воспользуйтесь программой " +"командной строки pg_restore.\n" + +#: mainloop.c:203 msgid "You are using psql, the command-line interface to PostgreSQL." msgstr "Вы используете psql - интерфейс командной строки к PostgreSQL." -#: mainloop.c:190 +#: mainloop.c:204 #, c-format msgid "" "Type: \\copyright for distribution terms\n" @@ -2699,7 +3344,7 @@ msgstr "" " \\g или ; в конце строки - выполнение запроса\n" " \\q - выход\n" -#: print.c:272 +#: print.c:338 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" @@ -2707,1865 +3352,2002 @@ msgstr[0] "(%lu строка)" msgstr[1] "(%lu строки)" msgstr[2] "(%lu строк)" -#: print.c:1174 -#, c-format -msgid "(No rows)\n" -msgstr "(Нет записей)\n" - -#: print.c:2238 +#: print.c:2795 #, c-format msgid "Interrupted\n" msgstr "Прервано\n" -#: print.c:2304 +#: print.c:2861 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "" "Ошибка добавления заголовка таблицы: превышен предел числа колонок (%d).\n" -#: print.c:2344 +#: print.c:2901 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "" "Ошибка добавления ячейки в таблицу: превышен предел числа ячеек (%d).\n" -#: print.c:2570 +#: print.c:3133 #, c-format msgid "invalid output format (internal error): %d" msgstr "неверный формат вывода (внутренняя ошибка): %d" -#: psqlscan.l:727 +#: psqlscan.l:751 #, c-format msgid "skipping recursive expansion of variable \"%s\"\n" msgstr "рекурсивное расширение переменной \"%s\" пропускается\n" -#: psqlscan.l:1604 +#: psqlscan.l:1627 #, c-format msgid "unterminated quoted string\n" msgstr "незавершённая строка в кавычках\n" -#: psqlscan.l:1704 +#: psqlscan.l:1727 #, c-format msgid "%s: out of memory\n" msgstr "%s: нехватка памяти\n" -#: psqlscan.l:1933 +#: psqlscan.l:1956 #, c-format msgid "can't escape without active connection\n" msgstr "экранирование строк не работает без подключения к БД\n" -#: sql_help.c:32 sql_help.c:35 sql_help.c:38 sql_help.c:60 sql_help.c:62 -#: sql_help.c:64 sql_help.c:75 sql_help.c:77 sql_help.c:79 sql_help.c:103 -#: sql_help.c:107 sql_help.c:109 sql_help.c:111 sql_help.c:113 sql_help.c:116 -#: sql_help.c:118 sql_help.c:120 sql_help.c:213 sql_help.c:215 sql_help.c:216 -#: sql_help.c:218 sql_help.c:220 sql_help.c:223 sql_help.c:225 sql_help.c:227 -#: sql_help.c:229 sql_help.c:241 sql_help.c:242 sql_help.c:243 sql_help.c:245 -#: sql_help.c:290 sql_help.c:292 sql_help.c:294 sql_help.c:296 sql_help.c:354 -#: sql_help.c:359 sql_help.c:361 sql_help.c:396 sql_help.c:398 sql_help.c:401 -#: sql_help.c:403 sql_help.c:460 sql_help.c:465 sql_help.c:470 sql_help.c:475 -#: sql_help.c:515 sql_help.c:517 sql_help.c:519 sql_help.c:522 sql_help.c:524 -#: sql_help.c:535 sql_help.c:537 sql_help.c:577 sql_help.c:579 sql_help.c:582 -#: sql_help.c:584 sql_help.c:586 sql_help.c:612 sql_help.c:616 sql_help.c:629 -#: sql_help.c:632 sql_help.c:635 sql_help.c:655 sql_help.c:667 sql_help.c:675 -#: sql_help.c:678 sql_help.c:681 sql_help.c:711 sql_help.c:717 sql_help.c:719 -#: sql_help.c:723 sql_help.c:726 sql_help.c:729 sql_help.c:738 sql_help.c:749 -#: sql_help.c:751 sql_help.c:768 sql_help.c:777 sql_help.c:779 sql_help.c:781 -#: sql_help.c:793 sql_help.c:797 sql_help.c:799 sql_help.c:878 sql_help.c:880 -#: sql_help.c:883 sql_help.c:886 sql_help.c:888 sql_help.c:890 sql_help.c:951 -#: sql_help.c:953 sql_help.c:955 sql_help.c:958 sql_help.c:979 sql_help.c:982 -#: sql_help.c:985 sql_help.c:988 sql_help.c:992 sql_help.c:994 sql_help.c:996 -#: sql_help.c:998 sql_help.c:1012 sql_help.c:1015 sql_help.c:1017 -#: sql_help.c:1019 sql_help.c:1029 sql_help.c:1031 sql_help.c:1041 -#: sql_help.c:1043 sql_help.c:1052 sql_help.c:1073 sql_help.c:1075 -#: sql_help.c:1077 sql_help.c:1080 sql_help.c:1082 sql_help.c:1084 -#: sql_help.c:1122 sql_help.c:1128 sql_help.c:1130 sql_help.c:1133 -#: sql_help.c:1135 sql_help.c:1137 sql_help.c:1164 sql_help.c:1167 -#: sql_help.c:1169 sql_help.c:1171 sql_help.c:1173 sql_help.c:1175 -#: sql_help.c:1178 sql_help.c:1218 sql_help.c:1456 sql_help.c:1472 -#: sql_help.c:1485 sql_help.c:1536 sql_help.c:1540 sql_help.c:1550 -#: sql_help.c:1568 sql_help.c:1591 sql_help.c:1609 sql_help.c:1637 -#: sql_help.c:1696 sql_help.c:1738 sql_help.c:1760 sql_help.c:1780 -#: sql_help.c:1781 sql_help.c:1816 sql_help.c:1836 sql_help.c:1858 -#: sql_help.c:1886 sql_help.c:1911 sql_help.c:1947 sql_help.c:2133 -#: sql_help.c:2146 sql_help.c:2163 sql_help.c:2179 sql_help.c:2202 -#: sql_help.c:2253 sql_help.c:2257 sql_help.c:2259 sql_help.c:2265 -#: sql_help.c:2283 sql_help.c:2310 sql_help.c:2345 sql_help.c:2357 -#: sql_help.c:2366 sql_help.c:2416 sql_help.c:2444 sql_help.c:2452 -#: sql_help.c:2460 sql_help.c:2468 sql_help.c:2476 sql_help.c:2484 -#: sql_help.c:2492 sql_help.c:2500 sql_help.c:2509 sql_help.c:2520 -#: sql_help.c:2528 sql_help.c:2536 sql_help.c:2544 sql_help.c:2552 -#: sql_help.c:2562 sql_help.c:2571 sql_help.c:2580 sql_help.c:2588 -#: sql_help.c:2596 sql_help.c:2605 sql_help.c:2613 sql_help.c:2621 -#: sql_help.c:2629 sql_help.c:2637 sql_help.c:2645 sql_help.c:2653 -#: sql_help.c:2661 sql_help.c:2669 sql_help.c:2677 sql_help.c:2686 -#: sql_help.c:2694 sql_help.c:2711 sql_help.c:2726 sql_help.c:2932 -#: sql_help.c:2983 sql_help.c:3011 sql_help.c:3019 sql_help.c:3417 -#: sql_help.c:3465 sql_help.c:3585 +#: sql_help.c:33 sql_help.c:36 sql_help.c:39 sql_help.c:61 sql_help.c:63 +#: sql_help.c:65 sql_help.c:76 sql_help.c:78 sql_help.c:80 sql_help.c:106 +#: sql_help.c:112 sql_help.c:114 sql_help.c:116 sql_help.c:118 sql_help.c:121 +#: sql_help.c:123 sql_help.c:125 sql_help.c:218 sql_help.c:220 sql_help.c:221 +#: sql_help.c:223 sql_help.c:225 sql_help.c:228 sql_help.c:230 sql_help.c:232 +#: sql_help.c:234 sql_help.c:246 sql_help.c:247 sql_help.c:248 sql_help.c:250 +#: sql_help.c:296 sql_help.c:298 sql_help.c:300 sql_help.c:302 sql_help.c:362 +#: sql_help.c:367 sql_help.c:369 sql_help.c:412 sql_help.c:414 sql_help.c:417 +#: sql_help.c:419 sql_help.c:483 sql_help.c:488 sql_help.c:493 sql_help.c:498 +#: sql_help.c:546 sql_help.c:548 sql_help.c:550 sql_help.c:553 sql_help.c:555 +#: sql_help.c:566 sql_help.c:568 sql_help.c:608 sql_help.c:610 sql_help.c:613 +#: sql_help.c:615 sql_help.c:617 sql_help.c:651 sql_help.c:655 sql_help.c:659 +#: sql_help.c:678 sql_help.c:681 sql_help.c:684 sql_help.c:713 sql_help.c:725 +#: sql_help.c:733 sql_help.c:736 sql_help.c:739 sql_help.c:753 sql_help.c:799 +#: sql_help.c:822 sql_help.c:833 sql_help.c:835 sql_help.c:852 sql_help.c:861 +#: sql_help.c:863 sql_help.c:865 sql_help.c:877 sql_help.c:881 sql_help.c:883 +#: sql_help.c:965 sql_help.c:967 sql_help.c:970 sql_help.c:973 sql_help.c:975 +#: sql_help.c:977 sql_help.c:1038 sql_help.c:1040 sql_help.c:1042 +#: sql_help.c:1045 sql_help.c:1066 sql_help.c:1069 sql_help.c:1072 +#: sql_help.c:1075 sql_help.c:1079 sql_help.c:1081 sql_help.c:1083 +#: sql_help.c:1085 sql_help.c:1099 sql_help.c:1102 sql_help.c:1104 +#: sql_help.c:1106 sql_help.c:1116 sql_help.c:1118 sql_help.c:1128 +#: sql_help.c:1130 sql_help.c:1139 sql_help.c:1160 sql_help.c:1162 +#: sql_help.c:1164 sql_help.c:1167 sql_help.c:1169 sql_help.c:1171 +#: sql_help.c:1221 sql_help.c:1259 sql_help.c:1262 sql_help.c:1264 +#: sql_help.c:1266 sql_help.c:1268 sql_help.c:1270 sql_help.c:1273 +#: sql_help.c:1313 sql_help.c:1557 sql_help.c:1573 sql_help.c:1586 +#: sql_help.c:1637 sql_help.c:1641 sql_help.c:1651 sql_help.c:1671 +#: sql_help.c:1696 sql_help.c:1714 sql_help.c:1742 sql_help.c:1816 +#: sql_help.c:1859 sql_help.c:1881 sql_help.c:1901 sql_help.c:1902 +#: sql_help.c:1937 sql_help.c:1957 sql_help.c:1979 sql_help.c:1992 +#: sql_help.c:2024 sql_help.c:2049 sql_help.c:2093 sql_help.c:2279 +#: sql_help.c:2292 sql_help.c:2309 sql_help.c:2325 sql_help.c:2364 +#: sql_help.c:2415 sql_help.c:2419 sql_help.c:2421 sql_help.c:2427 +#: sql_help.c:2445 sql_help.c:2472 sql_help.c:2507 sql_help.c:2519 +#: sql_help.c:2528 sql_help.c:2578 sql_help.c:2606 sql_help.c:2614 +#: sql_help.c:2622 sql_help.c:2630 sql_help.c:2638 sql_help.c:2646 +#: sql_help.c:2654 sql_help.c:2662 sql_help.c:2671 sql_help.c:2682 +#: sql_help.c:2690 sql_help.c:2698 sql_help.c:2706 sql_help.c:2714 +#: sql_help.c:2724 sql_help.c:2733 sql_help.c:2742 sql_help.c:2750 +#: sql_help.c:2759 sql_help.c:2767 sql_help.c:2776 sql_help.c:2784 +#: sql_help.c:2792 sql_help.c:2800 sql_help.c:2808 sql_help.c:2816 +#: sql_help.c:2824 sql_help.c:2832 sql_help.c:2840 sql_help.c:2857 +#: sql_help.c:2866 sql_help.c:2874 sql_help.c:2891 sql_help.c:2906 +#: sql_help.c:3171 sql_help.c:3222 sql_help.c:3251 sql_help.c:3259 +#: sql_help.c:3677 sql_help.c:3725 sql_help.c:3865 msgid "name" msgstr "имя" -#: sql_help.c:33 sql_help.c:36 sql_help.c:39 sql_help.c:300 sql_help.c:1279 -#: sql_help.c:2417 sql_help.c:3234 +#: sql_help.c:34 sql_help.c:37 sql_help.c:40 sql_help.c:306 sql_help.c:1376 +#: sql_help.c:2579 sql_help.c:3474 msgid "aggregate_signature" msgstr "сигнатура_агр_функции" -#: sql_help.c:34 sql_help.c:61 sql_help.c:76 sql_help.c:108 sql_help.c:228 -#: sql_help.c:246 sql_help.c:362 sql_help.c:402 sql_help.c:469 sql_help.c:502 -#: sql_help.c:516 sql_help.c:536 sql_help.c:583 sql_help.c:631 sql_help.c:677 -#: sql_help.c:718 sql_help.c:740 sql_help.c:750 sql_help.c:780 sql_help.c:800 -#: sql_help.c:887 sql_help.c:952 sql_help.c:995 sql_help.c:1016 -#: sql_help.c:1030 sql_help.c:1042 sql_help.c:1054 sql_help.c:1081 -#: sql_help.c:1129 sql_help.c:1172 +#: sql_help.c:35 sql_help.c:62 sql_help.c:77 sql_help.c:113 sql_help.c:233 +#: sql_help.c:251 sql_help.c:370 sql_help.c:418 sql_help.c:492 sql_help.c:533 +#: sql_help.c:547 sql_help.c:567 sql_help.c:614 sql_help.c:680 sql_help.c:735 +#: sql_help.c:755 sql_help.c:800 sql_help.c:824 sql_help.c:834 sql_help.c:864 +#: sql_help.c:884 sql_help.c:974 sql_help.c:1039 sql_help.c:1082 +#: sql_help.c:1103 sql_help.c:1117 sql_help.c:1129 sql_help.c:1141 +#: sql_help.c:1168 sql_help.c:1222 sql_help.c:1267 msgid "new_name" msgstr "новое_имя" -#: sql_help.c:37 sql_help.c:63 sql_help.c:78 sql_help.c:110 sql_help.c:226 -#: sql_help.c:244 sql_help.c:360 sql_help.c:431 sql_help.c:474 sql_help.c:538 -#: sql_help.c:547 sql_help.c:602 sql_help.c:615 sql_help.c:634 sql_help.c:680 -#: sql_help.c:752 sql_help.c:778 sql_help.c:798 sql_help.c:935 sql_help.c:954 -#: sql_help.c:997 sql_help.c:1018 sql_help.c:1076 sql_help.c:1170 +#: sql_help.c:38 sql_help.c:64 sql_help.c:79 sql_help.c:115 sql_help.c:231 +#: sql_help.c:249 sql_help.c:368 sql_help.c:454 sql_help.c:497 sql_help.c:569 +#: sql_help.c:578 sql_help.c:633 sql_help.c:654 sql_help.c:683 sql_help.c:738 +#: sql_help.c:836 sql_help.c:862 sql_help.c:882 sql_help.c:1023 +#: sql_help.c:1041 sql_help.c:1084 sql_help.c:1105 sql_help.c:1163 +#: sql_help.c:1265 sql_help.c:2265 msgid "new_owner" msgstr "новый_владелец" -#: sql_help.c:40 sql_help.c:65 sql_help.c:80 sql_help.c:230 sql_help.c:293 -#: sql_help.c:404 sql_help.c:479 sql_help.c:585 sql_help.c:619 sql_help.c:637 -#: sql_help.c:683 sql_help.c:782 sql_help.c:889 sql_help.c:999 sql_help.c:1020 -#: sql_help.c:1032 sql_help.c:1044 sql_help.c:1083 sql_help.c:1174 +#: sql_help.c:41 sql_help.c:66 sql_help.c:81 sql_help.c:235 sql_help.c:299 +#: sql_help.c:420 sql_help.c:502 sql_help.c:616 sql_help.c:658 sql_help.c:686 +#: sql_help.c:741 sql_help.c:866 sql_help.c:976 sql_help.c:1086 +#: sql_help.c:1107 sql_help.c:1119 sql_help.c:1131 sql_help.c:1170 +#: sql_help.c:1269 msgid "new_schema" msgstr "новая_схема" -#: sql_help.c:41 sql_help.c:1326 sql_help.c:2418 sql_help.c:3253 +#: sql_help.c:42 sql_help.c:1427 sql_help.c:2580 sql_help.c:3493 msgid "where aggregate_signature is:" msgstr "где сигнатура_агр_функции:" -#: sql_help.c:42 sql_help.c:45 sql_help.c:48 sql_help.c:310 sql_help.c:333 -#: sql_help.c:336 sql_help.c:339 sql_help.c:461 sql_help.c:466 sql_help.c:471 -#: sql_help.c:476 sql_help.c:1295 sql_help.c:1327 sql_help.c:1330 -#: sql_help.c:1333 sql_help.c:1457 sql_help.c:1473 sql_help.c:1476 -#: sql_help.c:1697 sql_help.c:2419 sql_help.c:2422 sql_help.c:2425 -#: sql_help.c:2510 sql_help.c:2870 sql_help.c:3149 sql_help.c:3240 -#: sql_help.c:3254 sql_help.c:3257 sql_help.c:3260 +#: sql_help.c:43 sql_help.c:46 sql_help.c:49 sql_help.c:316 sql_help.c:341 +#: sql_help.c:344 sql_help.c:347 sql_help.c:484 sql_help.c:489 sql_help.c:494 +#: sql_help.c:499 sql_help.c:1394 sql_help.c:1428 sql_help.c:1431 +#: sql_help.c:1434 sql_help.c:1558 sql_help.c:1574 sql_help.c:1577 +#: sql_help.c:1817 sql_help.c:2581 sql_help.c:2584 sql_help.c:2587 +#: sql_help.c:2672 sql_help.c:3057 sql_help.c:3389 sql_help.c:3480 +#: sql_help.c:3494 sql_help.c:3497 sql_help.c:3500 msgid "argmode" msgstr "режим_аргумента" -#: sql_help.c:43 sql_help.c:46 sql_help.c:49 sql_help.c:311 sql_help.c:334 -#: sql_help.c:337 sql_help.c:340 sql_help.c:462 sql_help.c:467 sql_help.c:472 -#: sql_help.c:477 sql_help.c:1296 sql_help.c:1328 sql_help.c:1331 -#: sql_help.c:1334 sql_help.c:1458 sql_help.c:1474 sql_help.c:1477 -#: sql_help.c:1698 sql_help.c:2420 sql_help.c:2423 sql_help.c:2426 -#: sql_help.c:2511 sql_help.c:3241 sql_help.c:3255 sql_help.c:3258 -#: sql_help.c:3261 +#: sql_help.c:44 sql_help.c:47 sql_help.c:50 sql_help.c:317 sql_help.c:342 +#: sql_help.c:345 sql_help.c:348 sql_help.c:485 sql_help.c:490 sql_help.c:495 +#: sql_help.c:500 sql_help.c:1395 sql_help.c:1429 sql_help.c:1432 +#: sql_help.c:1435 sql_help.c:1559 sql_help.c:1575 sql_help.c:1578 +#: sql_help.c:1818 sql_help.c:2582 sql_help.c:2585 sql_help.c:2588 +#: sql_help.c:2673 sql_help.c:3481 sql_help.c:3495 sql_help.c:3498 +#: sql_help.c:3501 msgid "argname" msgstr "имя_аргумента" -#: sql_help.c:44 sql_help.c:47 sql_help.c:50 sql_help.c:312 sql_help.c:335 -#: sql_help.c:338 sql_help.c:341 sql_help.c:463 sql_help.c:468 sql_help.c:473 -#: sql_help.c:478 sql_help.c:1297 sql_help.c:1329 sql_help.c:1332 -#: sql_help.c:1335 sql_help.c:1699 sql_help.c:2421 sql_help.c:2424 -#: sql_help.c:2427 sql_help.c:2512 sql_help.c:3242 sql_help.c:3256 -#: sql_help.c:3259 sql_help.c:3262 +#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:318 sql_help.c:343 +#: sql_help.c:346 sql_help.c:349 sql_help.c:486 sql_help.c:491 sql_help.c:496 +#: sql_help.c:501 sql_help.c:1396 sql_help.c:1430 sql_help.c:1433 +#: sql_help.c:1436 sql_help.c:1819 sql_help.c:2583 sql_help.c:2586 +#: sql_help.c:2589 sql_help.c:2674 sql_help.c:3482 sql_help.c:3496 +#: sql_help.c:3499 sql_help.c:3502 msgid "argtype" msgstr "тип_аргумента" -#: sql_help.c:104 sql_help.c:357 sql_help.c:425 sql_help.c:432 sql_help.c:712 -#: sql_help.c:795 sql_help.c:1013 sql_help.c:1123 sql_help.c:1149 -#: sql_help.c:1383 sql_help.c:1389 sql_help.c:1640 sql_help.c:1664 -#: sql_help.c:1669 sql_help.c:1739 sql_help.c:1887 sql_help.c:1968 -#: sql_help.c:2148 sql_help.c:2311 sql_help.c:2333 sql_help.c:2745 +#: sql_help.c:107 sql_help.c:365 sql_help.c:443 sql_help.c:455 sql_help.c:794 +#: sql_help.c:879 sql_help.c:1100 sql_help.c:1216 sql_help.c:1244 +#: sql_help.c:1484 sql_help.c:1490 sql_help.c:1745 sql_help.c:1777 +#: sql_help.c:1784 sql_help.c:1860 sql_help.c:2025 sql_help.c:2114 +#: sql_help.c:2294 sql_help.c:2473 sql_help.c:2495 sql_help.c:2925 +#: sql_help.c:3091 msgid "option" msgstr "параметр" -#: sql_help.c:105 sql_help.c:713 sql_help.c:1124 sql_help.c:1740 -#: sql_help.c:1888 sql_help.c:2312 +#: sql_help.c:108 sql_help.c:795 sql_help.c:1217 sql_help.c:1861 +#: sql_help.c:2026 sql_help.c:2474 msgid "where option can be:" msgstr "где допустимые параметры:" -#: sql_help.c:106 sql_help.c:714 sql_help.c:1125 sql_help.c:1575 -#: sql_help.c:1889 sql_help.c:2313 +#: sql_help.c:109 sql_help.c:1678 +msgid "istemplate" +msgstr "это_шаблон" + +#: sql_help.c:110 sql_help.c:1679 +msgid "allowconn" +msgstr "разр_подключения" + +#: sql_help.c:111 sql_help.c:796 sql_help.c:1218 sql_help.c:1680 +#: sql_help.c:2027 sql_help.c:2475 msgid "connlimit" msgstr "предел_подключений" -#: sql_help.c:112 sql_help.c:526 sql_help.c:588 sql_help.c:603 sql_help.c:892 -#: sql_help.c:936 +#: sql_help.c:117 sql_help.c:557 sql_help.c:619 sql_help.c:634 sql_help.c:979 +#: sql_help.c:1016 msgid "new_tablespace" msgstr "новое_табл_пространство" -#: sql_help.c:114 sql_help.c:117 sql_help.c:119 sql_help.c:483 sql_help.c:485 -#: sql_help.c:486 sql_help.c:721 sql_help.c:725 sql_help.c:728 sql_help.c:811 -#: sql_help.c:814 sql_help.c:1131 sql_help.c:1134 sql_help.c:1136 -#: sql_help.c:1707 sql_help.c:3036 sql_help.c:3406 +#: sql_help.c:119 sql_help.c:122 sql_help.c:124 sql_help.c:506 sql_help.c:508 +#: sql_help.c:509 sql_help.c:803 sql_help.c:807 sql_help.c:810 sql_help.c:895 +#: sql_help.c:898 sql_help.c:1224 sql_help.c:1227 sql_help.c:1229 +#: sql_help.c:1828 sql_help.c:3276 sql_help.c:3666 msgid "configuration_parameter" msgstr "параметр_конфигурации" -#: sql_help.c:115 sql_help.c:358 sql_help.c:421 sql_help.c:426 sql_help.c:433 -#: sql_help.c:484 sql_help.c:521 sql_help.c:594 sql_help.c:600 sql_help.c:722 -#: sql_help.c:796 sql_help.c:812 sql_help.c:813 sql_help.c:911 sql_help.c:930 -#: sql_help.c:957 sql_help.c:1014 sql_help.c:1132 sql_help.c:1150 -#: sql_help.c:1641 sql_help.c:1665 sql_help.c:1670 sql_help.c:1708 -#: sql_help.c:1709 sql_help.c:1768 sql_help.c:1800 sql_help.c:1969 -#: sql_help.c:2043 sql_help.c:2051 sql_help.c:2083 sql_help.c:2105 -#: sql_help.c:2122 sql_help.c:2149 sql_help.c:2334 sql_help.c:3407 -#: sql_help.c:3408 +#: sql_help.c:120 sql_help.c:366 sql_help.c:438 sql_help.c:444 sql_help.c:456 +#: sql_help.c:507 sql_help.c:552 sql_help.c:625 sql_help.c:631 sql_help.c:804 +#: sql_help.c:880 sql_help.c:896 sql_help.c:897 sql_help.c:998 sql_help.c:1018 +#: sql_help.c:1044 sql_help.c:1101 sql_help.c:1225 sql_help.c:1245 +#: sql_help.c:1746 sql_help.c:1778 sql_help.c:1785 sql_help.c:1829 +#: sql_help.c:1830 sql_help.c:1889 sql_help.c:1921 sql_help.c:2115 +#: sql_help.c:2189 sql_help.c:2197 sql_help.c:2229 sql_help.c:2251 +#: sql_help.c:2268 sql_help.c:2295 sql_help.c:2496 sql_help.c:3092 +#: sql_help.c:3667 sql_help.c:3668 msgid "value" msgstr "значение" -#: sql_help.c:177 +#: sql_help.c:182 msgid "target_role" msgstr "целевая_роль" -#: sql_help.c:178 sql_help.c:1624 sql_help.c:1929 sql_help.c:1934 -#: sql_help.c:2852 sql_help.c:2859 sql_help.c:2873 sql_help.c:2879 -#: sql_help.c:3131 sql_help.c:3138 sql_help.c:3152 sql_help.c:3158 +#: sql_help.c:183 sql_help.c:1729 sql_help.c:2073 sql_help.c:2078 +#: sql_help.c:3039 sql_help.c:3046 sql_help.c:3060 sql_help.c:3066 +#: sql_help.c:3371 sql_help.c:3378 sql_help.c:3392 sql_help.c:3398 msgid "schema_name" msgstr "имя_схемы" -#: sql_help.c:179 +#: sql_help.c:184 msgid "abbreviated_grant_or_revoke" msgstr "предложение_GRANT_или_REVOKE" -#: sql_help.c:180 +#: sql_help.c:185 msgid "where abbreviated_grant_or_revoke is one of:" msgstr "где допустимое предложение_GRANT_или_REVOKE:" -#: sql_help.c:181 sql_help.c:182 sql_help.c:183 sql_help.c:184 sql_help.c:185 -#: sql_help.c:186 sql_help.c:187 sql_help.c:188 sql_help.c:525 sql_help.c:587 -#: sql_help.c:891 sql_help.c:1743 sql_help.c:1744 sql_help.c:1745 -#: sql_help.c:1746 sql_help.c:1747 sql_help.c:1892 sql_help.c:1893 -#: sql_help.c:1894 sql_help.c:1895 sql_help.c:1896 sql_help.c:2316 -#: sql_help.c:2317 sql_help.c:2318 sql_help.c:2319 sql_help.c:2320 -#: sql_help.c:2853 sql_help.c:2857 sql_help.c:2860 sql_help.c:2862 -#: sql_help.c:2864 sql_help.c:2866 sql_help.c:2868 sql_help.c:2874 -#: sql_help.c:2876 sql_help.c:2878 sql_help.c:2880 sql_help.c:2882 -#: sql_help.c:2884 sql_help.c:2885 sql_help.c:2886 sql_help.c:3132 -#: sql_help.c:3136 sql_help.c:3139 sql_help.c:3141 sql_help.c:3143 -#: sql_help.c:3145 sql_help.c:3147 sql_help.c:3153 sql_help.c:3155 -#: sql_help.c:3157 sql_help.c:3159 sql_help.c:3161 sql_help.c:3163 -#: sql_help.c:3164 sql_help.c:3165 sql_help.c:3427 +#: sql_help.c:186 sql_help.c:187 sql_help.c:188 sql_help.c:189 sql_help.c:190 +#: sql_help.c:191 sql_help.c:192 sql_help.c:193 sql_help.c:531 sql_help.c:556 +#: sql_help.c:618 sql_help.c:756 sql_help.c:814 sql_help.c:978 sql_help.c:1232 +#: sql_help.c:1864 sql_help.c:1865 sql_help.c:1866 sql_help.c:1867 +#: sql_help.c:1868 sql_help.c:1994 sql_help.c:2030 sql_help.c:2031 +#: sql_help.c:2032 sql_help.c:2033 sql_help.c:2034 sql_help.c:2478 +#: sql_help.c:2479 sql_help.c:2480 sql_help.c:2481 sql_help.c:2482 +#: sql_help.c:3073 sql_help.c:3074 sql_help.c:3075 sql_help.c:3372 +#: sql_help.c:3376 sql_help.c:3379 sql_help.c:3381 sql_help.c:3383 +#: sql_help.c:3385 sql_help.c:3387 sql_help.c:3393 sql_help.c:3395 +#: sql_help.c:3397 sql_help.c:3399 sql_help.c:3401 sql_help.c:3403 +#: sql_help.c:3404 sql_help.c:3405 sql_help.c:3687 msgid "role_name" msgstr "имя_роли" -#: sql_help.c:214 sql_help.c:414 sql_help.c:902 sql_help.c:904 sql_help.c:1166 -#: sql_help.c:1594 sql_help.c:1598 sql_help.c:1764 sql_help.c:2055 -#: sql_help.c:2065 sql_help.c:2087 sql_help.c:2900 sql_help.c:3303 -#: sql_help.c:3304 sql_help.c:3308 sql_help.c:3313 sql_help.c:3381 -#: sql_help.c:3382 sql_help.c:3387 sql_help.c:3392 sql_help.c:3521 -#: sql_help.c:3522 sql_help.c:3526 sql_help.c:3531 sql_help.c:3611 -#: sql_help.c:3613 sql_help.c:3644 sql_help.c:3690 sql_help.c:3691 -#: sql_help.c:3695 sql_help.c:3700 +#: sql_help.c:219 sql_help.c:431 sql_help.c:989 sql_help.c:991 sql_help.c:1261 +#: sql_help.c:1699 sql_help.c:1703 sql_help.c:1788 sql_help.c:1792 +#: sql_help.c:1885 sql_help.c:2201 sql_help.c:2211 sql_help.c:2233 +#: sql_help.c:3122 sql_help.c:3137 sql_help.c:3139 sql_help.c:3552 +#: sql_help.c:3553 sql_help.c:3562 sql_help.c:3603 sql_help.c:3604 +#: sql_help.c:3605 sql_help.c:3606 sql_help.c:3607 sql_help.c:3608 +#: sql_help.c:3641 sql_help.c:3642 sql_help.c:3647 sql_help.c:3652 +#: sql_help.c:3790 sql_help.c:3791 sql_help.c:3800 sql_help.c:3841 +#: sql_help.c:3842 sql_help.c:3843 sql_help.c:3844 sql_help.c:3845 +#: sql_help.c:3846 sql_help.c:3893 sql_help.c:3895 sql_help.c:3928 +#: sql_help.c:3983 sql_help.c:3984 sql_help.c:3993 sql_help.c:4034 +#: sql_help.c:4035 sql_help.c:4036 sql_help.c:4037 sql_help.c:4038 +#: sql_help.c:4039 msgid "expression" msgstr "выражение" -#: sql_help.c:217 +#: sql_help.c:222 msgid "domain_constraint" msgstr "ограничение_домена" -#: sql_help.c:219 sql_help.c:221 sql_help.c:224 sql_help.c:884 sql_help.c:917 -#: sql_help.c:918 sql_help.c:919 sql_help.c:939 sql_help.c:1285 -#: sql_help.c:1597 sql_help.c:1672 sql_help.c:2054 sql_help.c:2064 +#: sql_help.c:224 sql_help.c:226 sql_help.c:229 sql_help.c:446 sql_help.c:447 +#: sql_help.c:971 sql_help.c:1004 sql_help.c:1005 sql_help.c:1006 +#: sql_help.c:1026 sql_help.c:1382 sql_help.c:1384 sql_help.c:1702 +#: sql_help.c:1787 sql_help.c:1791 sql_help.c:2200 sql_help.c:2210 +#: sql_help.c:3134 msgid "constraint_name" msgstr "имя_ограничения" -#: sql_help.c:222 sql_help.c:885 +#: sql_help.c:227 sql_help.c:972 msgid "new_constraint_name" msgstr "имя_нового_ограничения" -#: sql_help.c:291 sql_help.c:794 +#: sql_help.c:297 sql_help.c:878 msgid "new_version" msgstr "новая_версия" -#: sql_help.c:295 sql_help.c:297 +#: sql_help.c:301 sql_help.c:303 msgid "member_object" msgstr "элемент_объект" -#: sql_help.c:298 +#: sql_help.c:304 msgid "where member_object is:" msgstr "где элемент_объект:" -#: sql_help.c:299 sql_help.c:1278 sql_help.c:3233 +#: sql_help.c:305 sql_help.c:1375 sql_help.c:3473 msgid "aggregate_name" msgstr "имя_агр_функции" -#: sql_help.c:301 sql_help.c:1280 sql_help.c:1516 sql_help.c:1520 -#: sql_help.c:1522 sql_help.c:2435 +#: sql_help.c:307 sql_help.c:1377 sql_help.c:1617 sql_help.c:1621 +#: sql_help.c:1623 sql_help.c:2597 msgid "source_type" msgstr "исходный_тип" -#: sql_help.c:302 sql_help.c:1281 sql_help.c:1517 sql_help.c:1521 -#: sql_help.c:1523 sql_help.c:2436 +#: sql_help.c:308 sql_help.c:1378 sql_help.c:1618 sql_help.c:1622 +#: sql_help.c:1624 sql_help.c:2598 msgid "target_type" msgstr "целевой_тип" -#: sql_help.c:303 sql_help.c:304 sql_help.c:305 sql_help.c:306 sql_help.c:307 -#: sql_help.c:308 sql_help.c:313 sql_help.c:317 sql_help.c:319 sql_help.c:321 -#: sql_help.c:322 sql_help.c:323 sql_help.c:324 sql_help.c:325 sql_help.c:326 -#: sql_help.c:327 sql_help.c:328 sql_help.c:329 sql_help.c:330 sql_help.c:331 -#: sql_help.c:1282 sql_help.c:1287 sql_help.c:1288 sql_help.c:1289 -#: sql_help.c:1290 sql_help.c:1291 sql_help.c:1292 sql_help.c:1293 -#: sql_help.c:1298 sql_help.c:1300 sql_help.c:1304 sql_help.c:1306 -#: sql_help.c:1308 sql_help.c:1309 sql_help.c:1312 sql_help.c:1313 -#: sql_help.c:1314 sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 -#: sql_help.c:1318 sql_help.c:1319 sql_help.c:1320 sql_help.c:1323 -#: sql_help.c:1324 sql_help.c:3230 sql_help.c:3235 sql_help.c:3236 -#: sql_help.c:3237 sql_help.c:3238 sql_help.c:3244 sql_help.c:3245 -#: sql_help.c:3246 sql_help.c:3247 sql_help.c:3248 sql_help.c:3249 -#: sql_help.c:3250 sql_help.c:3251 +#: sql_help.c:309 sql_help.c:310 sql_help.c:311 sql_help.c:312 sql_help.c:313 +#: sql_help.c:314 sql_help.c:319 sql_help.c:323 sql_help.c:325 sql_help.c:327 +#: sql_help.c:328 sql_help.c:329 sql_help.c:330 sql_help.c:331 sql_help.c:332 +#: sql_help.c:333 sql_help.c:334 sql_help.c:335 sql_help.c:338 sql_help.c:339 +#: sql_help.c:1379 sql_help.c:1386 sql_help.c:1387 sql_help.c:1388 +#: sql_help.c:1389 sql_help.c:1390 sql_help.c:1391 sql_help.c:1392 +#: sql_help.c:1397 sql_help.c:1399 sql_help.c:1403 sql_help.c:1405 +#: sql_help.c:1407 sql_help.c:1408 sql_help.c:1411 sql_help.c:1412 +#: sql_help.c:1413 sql_help.c:1414 sql_help.c:1415 sql_help.c:1416 +#: sql_help.c:1417 sql_help.c:1418 sql_help.c:1419 sql_help.c:1424 +#: sql_help.c:1425 sql_help.c:3470 sql_help.c:3475 sql_help.c:3476 +#: sql_help.c:3477 sql_help.c:3478 sql_help.c:3484 sql_help.c:3485 +#: sql_help.c:3486 sql_help.c:3487 sql_help.c:3488 sql_help.c:3489 +#: sql_help.c:3490 sql_help.c:3491 msgid "object_name" msgstr "имя_объекта" -#: sql_help.c:309 sql_help.c:665 sql_help.c:1294 sql_help.c:1518 -#: sql_help.c:1553 sql_help.c:1612 sql_help.c:1817 sql_help.c:1848 -#: sql_help.c:2207 sql_help.c:2869 sql_help.c:3148 sql_help.c:3239 -#: sql_help.c:3329 sql_help.c:3333 sql_help.c:3337 sql_help.c:3340 -#: sql_help.c:3547 sql_help.c:3551 sql_help.c:3555 sql_help.c:3558 -#: sql_help.c:3716 sql_help.c:3720 sql_help.c:3724 sql_help.c:3727 +#: sql_help.c:315 sql_help.c:723 sql_help.c:1393 sql_help.c:1619 +#: sql_help.c:1654 sql_help.c:1717 sql_help.c:1938 sql_help.c:1969 +#: sql_help.c:2369 sql_help.c:3056 sql_help.c:3388 sql_help.c:3479 +#: sql_help.c:3581 sql_help.c:3585 sql_help.c:3589 sql_help.c:3592 +#: sql_help.c:3819 sql_help.c:3823 sql_help.c:3827 sql_help.c:3830 +#: sql_help.c:4012 sql_help.c:4016 sql_help.c:4020 sql_help.c:4023 msgid "function_name" msgstr "имя_функции" -#: sql_help.c:314 sql_help.c:658 sql_help.c:1301 sql_help.c:1841 +#: sql_help.c:320 sql_help.c:716 sql_help.c:1400 sql_help.c:1962 msgid "operator_name" msgstr "имя_оператора" -#: sql_help.c:315 sql_help.c:613 sql_help.c:617 sql_help.c:1302 -#: sql_help.c:1818 sql_help.c:2553 +#: sql_help.c:321 sql_help.c:652 sql_help.c:656 sql_help.c:660 sql_help.c:1401 +#: sql_help.c:1939 sql_help.c:2715 msgid "left_type" msgstr "тип_слева" -#: sql_help.c:316 sql_help.c:614 sql_help.c:618 sql_help.c:1303 -#: sql_help.c:1819 sql_help.c:2554 +#: sql_help.c:322 sql_help.c:653 sql_help.c:657 sql_help.c:661 sql_help.c:1402 +#: sql_help.c:1940 sql_help.c:2716 msgid "right_type" msgstr "тип_справа" -#: sql_help.c:318 sql_help.c:320 sql_help.c:630 sql_help.c:633 sql_help.c:636 -#: sql_help.c:656 sql_help.c:668 sql_help.c:676 sql_help.c:679 sql_help.c:682 -#: sql_help.c:1305 sql_help.c:1307 sql_help.c:1838 sql_help.c:1859 -#: sql_help.c:2070 sql_help.c:2563 sql_help.c:2572 +#: sql_help.c:324 sql_help.c:326 sql_help.c:679 sql_help.c:682 sql_help.c:685 +#: sql_help.c:714 sql_help.c:726 sql_help.c:734 sql_help.c:737 sql_help.c:740 +#: sql_help.c:1404 sql_help.c:1406 sql_help.c:1959 sql_help.c:1980 +#: sql_help.c:2216 sql_help.c:2725 sql_help.c:2734 msgid "index_method" msgstr "метод_индекса" -#: sql_help.c:332 +#: sql_help.c:336 sql_help.c:1022 sql_help.c:1420 sql_help.c:1825 +#: sql_help.c:2192 sql_help.c:2338 sql_help.c:2848 sql_help.c:3070 +#: sql_help.c:3402 +msgid "type_name" +msgstr "имя_типа" + +#: sql_help.c:337 sql_help.c:1421 sql_help.c:1824 sql_help.c:2339 +#: sql_help.c:2563 sql_help.c:2849 sql_help.c:3062 sql_help.c:3394 +msgid "lang_name" +msgstr "имя_языка" + +#: sql_help.c:340 msgid "and aggregate_signature is:" msgstr "и сигнатура_агр_функции:" -#: sql_help.c:355 sql_help.c:1638 +#: sql_help.c:363 sql_help.c:1743 msgid "handler_function" msgstr "функция_обработчик" -#: sql_help.c:356 sql_help.c:1639 +#: sql_help.c:364 sql_help.c:1744 msgid "validator_function" msgstr "функция_проверки" -#: sql_help.c:397 sql_help.c:464 sql_help.c:578 sql_help.c:879 sql_help.c:1074 -#: sql_help.c:2061 sql_help.c:2062 sql_help.c:2078 sql_help.c:2079 +#: sql_help.c:413 sql_help.c:487 sql_help.c:609 sql_help.c:966 sql_help.c:1161 +#: sql_help.c:2207 sql_help.c:2208 sql_help.c:2224 sql_help.c:2225 msgid "action" msgstr "действие" -#: sql_help.c:399 sql_help.c:406 sql_help.c:410 sql_help.c:411 sql_help.c:413 -#: sql_help.c:415 sql_help.c:416 sql_help.c:417 sql_help.c:419 sql_help.c:422 -#: sql_help.c:424 sql_help.c:580 sql_help.c:590 sql_help.c:592 sql_help.c:595 -#: sql_help.c:597 sql_help.c:776 sql_help.c:881 sql_help.c:894 sql_help.c:898 -#: sql_help.c:899 sql_help.c:903 sql_help.c:905 sql_help.c:906 sql_help.c:907 -#: sql_help.c:909 sql_help.c:912 sql_help.c:914 sql_help.c:1165 -#: sql_help.c:1168 sql_help.c:1188 sql_help.c:1284 sql_help.c:1380 -#: sql_help.c:1385 sql_help.c:1399 sql_help.c:1400 sql_help.c:1401 -#: sql_help.c:1662 sql_help.c:1702 sql_help.c:1763 sql_help.c:1798 -#: sql_help.c:1954 sql_help.c:2034 sql_help.c:2047 sql_help.c:2066 -#: sql_help.c:2068 sql_help.c:2075 sql_help.c:2086 sql_help.c:2103 -#: sql_help.c:2210 sql_help.c:2346 sql_help.c:2854 sql_help.c:2855 -#: sql_help.c:2899 sql_help.c:3133 sql_help.c:3134 sql_help.c:3232 -#: sql_help.c:3352 sql_help.c:3570 sql_help.c:3610 sql_help.c:3612 -#: sql_help.c:3629 sql_help.c:3632 sql_help.c:3739 +#: sql_help.c:415 sql_help.c:422 sql_help.c:426 sql_help.c:427 sql_help.c:430 +#: sql_help.c:432 sql_help.c:433 sql_help.c:434 sql_help.c:436 sql_help.c:439 +#: sql_help.c:441 sql_help.c:442 sql_help.c:611 sql_help.c:621 sql_help.c:623 +#: sql_help.c:626 sql_help.c:628 sql_help.c:860 sql_help.c:968 sql_help.c:981 +#: sql_help.c:985 sql_help.c:986 sql_help.c:990 sql_help.c:992 sql_help.c:993 +#: sql_help.c:994 sql_help.c:996 sql_help.c:999 sql_help.c:1001 +#: sql_help.c:1260 sql_help.c:1263 sql_help.c:1283 sql_help.c:1381 +#: sql_help.c:1481 sql_help.c:1486 sql_help.c:1500 sql_help.c:1501 +#: sql_help.c:1502 sql_help.c:1775 sql_help.c:1822 sql_help.c:1884 +#: sql_help.c:1919 sql_help.c:2100 sql_help.c:2180 sql_help.c:2193 +#: sql_help.c:2212 sql_help.c:2214 sql_help.c:2221 sql_help.c:2232 +#: sql_help.c:2249 sql_help.c:2372 sql_help.c:2508 sql_help.c:3041 +#: sql_help.c:3042 sql_help.c:3121 sql_help.c:3136 sql_help.c:3138 +#: sql_help.c:3140 sql_help.c:3373 sql_help.c:3374 sql_help.c:3472 +#: sql_help.c:3612 sql_help.c:3850 sql_help.c:3892 sql_help.c:3894 +#: sql_help.c:3896 sql_help.c:3913 sql_help.c:3916 sql_help.c:4043 msgid "column_name" msgstr "имя_колонки" -#: sql_help.c:400 sql_help.c:581 sql_help.c:882 +#: sql_help.c:416 sql_help.c:612 sql_help.c:969 msgid "new_column_name" msgstr "новое_имя_колонки" -#: sql_help.c:405 sql_help.c:480 sql_help.c:589 sql_help.c:893 sql_help.c:1087 +#: sql_help.c:421 sql_help.c:503 sql_help.c:620 sql_help.c:980 sql_help.c:1174 msgid "where action is one of:" msgstr "где допустимое действие:" -#: sql_help.c:407 sql_help.c:412 sql_help.c:895 sql_help.c:900 sql_help.c:1089 -#: sql_help.c:1093 sql_help.c:1592 sql_help.c:1663 sql_help.c:1837 -#: sql_help.c:2035 sql_help.c:2255 sql_help.c:2984 +#: sql_help.c:423 sql_help.c:428 sql_help.c:982 sql_help.c:987 sql_help.c:1176 +#: sql_help.c:1180 sql_help.c:1697 sql_help.c:1776 sql_help.c:1958 +#: sql_help.c:2181 sql_help.c:2417 sql_help.c:3223 msgid "data_type" msgstr "тип_данных" -#: sql_help.c:408 sql_help.c:896 sql_help.c:901 sql_help.c:1090 -#: sql_help.c:1094 sql_help.c:1593 sql_help.c:1666 sql_help.c:1765 -#: sql_help.c:2036 sql_help.c:2256 sql_help.c:2262 +#: sql_help.c:424 sql_help.c:429 sql_help.c:983 sql_help.c:988 sql_help.c:1177 +#: sql_help.c:1181 sql_help.c:1698 sql_help.c:1779 sql_help.c:1886 +#: sql_help.c:2182 sql_help.c:2418 sql_help.c:2424 sql_help.c:3131 msgid "collation" msgstr "правило_сортировки" -#: sql_help.c:409 sql_help.c:897 sql_help.c:1667 sql_help.c:2037 -#: sql_help.c:2048 +#: sql_help.c:425 sql_help.c:984 sql_help.c:1780 sql_help.c:2183 +#: sql_help.c:2194 msgid "column_constraint" msgstr "ограничение_колонки" -#: sql_help.c:418 sql_help.c:591 sql_help.c:908 +#: sql_help.c:435 sql_help.c:622 sql_help.c:995 msgid "integer" msgstr "целое" -#: sql_help.c:420 sql_help.c:423 sql_help.c:593 sql_help.c:596 sql_help.c:910 -#: sql_help.c:913 +#: sql_help.c:437 sql_help.c:440 sql_help.c:624 sql_help.c:627 sql_help.c:997 +#: sql_help.c:1000 msgid "attribute_option" msgstr "атрибут" -#: sql_help.c:427 sql_help.c:428 sql_help.c:429 sql_help.c:430 sql_help.c:920 -#: sql_help.c:921 sql_help.c:922 sql_help.c:923 sql_help.c:1321 +#: sql_help.c:445 sql_help.c:1002 sql_help.c:1781 sql_help.c:2184 +#: sql_help.c:2195 +msgid "table_constraint" +msgstr "ограничение_таблицы" + +#: sql_help.c:448 sql_help.c:449 sql_help.c:450 sql_help.c:451 sql_help.c:1007 +#: sql_help.c:1008 sql_help.c:1009 sql_help.c:1010 sql_help.c:1422 msgid "trigger_name" msgstr "имя_триггера" -#: sql_help.c:481 sql_help.c:1705 +#: sql_help.c:452 sql_help.c:453 sql_help.c:1020 sql_help.c:1021 +#: sql_help.c:1782 sql_help.c:2187 +msgid "parent_table" +msgstr "таблица_родитель" + +#: sql_help.c:504 sql_help.c:1826 msgid "execution_cost" msgstr "стоимость_выполнения" -#: sql_help.c:482 sql_help.c:1706 +#: sql_help.c:505 sql_help.c:1827 msgid "result_rows" msgstr "строк_в_результате" -#: sql_help.c:497 sql_help.c:499 sql_help.c:501 -msgid "group_name" -msgstr "имя_группы" - -#: sql_help.c:498 sql_help.c:500 sql_help.c:1147 sql_help.c:1569 -#: sql_help.c:1930 sql_help.c:1932 sql_help.c:1935 sql_help.c:1936 -#: sql_help.c:2119 sql_help.c:2331 sql_help.c:2702 sql_help.c:3437 +#: sql_help.c:526 sql_help.c:528 sql_help.c:793 sql_help.c:801 sql_help.c:805 +#: sql_help.c:808 sql_help.c:811 sql_help.c:1215 sql_help.c:1223 +#: sql_help.c:1226 sql_help.c:1228 sql_help.c:1230 sql_help.c:2074 +#: sql_help.c:2076 sql_help.c:2079 sql_help.c:2080 sql_help.c:3040 +#: sql_help.c:3044 sql_help.c:3047 sql_help.c:3049 sql_help.c:3051 +#: sql_help.c:3053 sql_help.c:3055 sql_help.c:3061 sql_help.c:3063 +#: sql_help.c:3065 sql_help.c:3067 sql_help.c:3069 sql_help.c:3071 +msgid "role_specification" +msgstr "указание_роли" + +#: sql_help.c:527 sql_help.c:529 sql_help.c:1242 sql_help.c:1672 +#: sql_help.c:2082 sql_help.c:2493 sql_help.c:2882 sql_help.c:3697 msgid "user_name" msgstr "имя_пользователя" -#: sql_help.c:518 sql_help.c:1574 sql_help.c:1769 sql_help.c:1801 -#: sql_help.c:2044 sql_help.c:2052 sql_help.c:2084 sql_help.c:2106 -#: sql_help.c:2118 sql_help.c:2881 sql_help.c:3160 +#: sql_help.c:530 sql_help.c:813 sql_help.c:1231 sql_help.c:2081 +#: sql_help.c:3072 +msgid "where role_specification can be:" +msgstr "где допустимое указание_роли:" + +#: sql_help.c:532 +msgid "group_name" +msgstr "имя_группы" + +#: sql_help.c:549 sql_help.c:1677 sql_help.c:1890 sql_help.c:1922 +#: sql_help.c:2190 sql_help.c:2198 sql_help.c:2230 sql_help.c:2252 +#: sql_help.c:2264 sql_help.c:3068 sql_help.c:3400 msgid "tablespace_name" msgstr "табл_пространство" -#: sql_help.c:520 sql_help.c:523 sql_help.c:599 sql_help.c:601 sql_help.c:929 -#: sql_help.c:931 sql_help.c:1767 sql_help.c:1799 sql_help.c:2042 -#: sql_help.c:2050 sql_help.c:2082 sql_help.c:2104 +#: sql_help.c:551 sql_help.c:554 sql_help.c:630 sql_help.c:632 sql_help.c:1017 +#: sql_help.c:1019 sql_help.c:1888 sql_help.c:1920 sql_help.c:2188 +#: sql_help.c:2196 sql_help.c:2228 sql_help.c:2250 msgid "storage_parameter" msgstr "параметр_хранения" -#: sql_help.c:546 sql_help.c:1299 sql_help.c:3243 +#: sql_help.c:577 sql_help.c:1398 sql_help.c:3483 msgid "large_object_oid" msgstr "oid_большого_объекта" -#: sql_help.c:598 sql_help.c:928 sql_help.c:937 sql_help.c:940 sql_help.c:1228 +#: sql_help.c:629 sql_help.c:1015 sql_help.c:1024 sql_help.c:1027 +#: sql_help.c:1323 msgid "index_name" msgstr "имя_индекса" -#: sql_help.c:657 sql_help.c:669 sql_help.c:1840 +#: sql_help.c:662 sql_help.c:1943 +msgid "res_proc" +msgstr "процедура_ограничения" + +#: sql_help.c:663 sql_help.c:1944 +msgid "join_proc" +msgstr "процедура_соединения" + +#: sql_help.c:715 sql_help.c:727 sql_help.c:1961 msgid "strategy_number" msgstr "номер_стратегии" -#: sql_help.c:659 sql_help.c:660 sql_help.c:663 sql_help.c:664 sql_help.c:670 -#: sql_help.c:671 sql_help.c:673 sql_help.c:674 sql_help.c:1842 -#: sql_help.c:1843 sql_help.c:1846 sql_help.c:1847 +#: sql_help.c:717 sql_help.c:718 sql_help.c:721 sql_help.c:722 sql_help.c:728 +#: sql_help.c:729 sql_help.c:731 sql_help.c:732 sql_help.c:1963 +#: sql_help.c:1964 sql_help.c:1967 sql_help.c:1968 msgid "op_type" msgstr "тип_операции" -#: sql_help.c:661 sql_help.c:1844 +#: sql_help.c:719 sql_help.c:1965 msgid "sort_family_name" msgstr "семейство_сортировки" -#: sql_help.c:662 sql_help.c:672 sql_help.c:1845 +#: sql_help.c:720 sql_help.c:730 sql_help.c:1966 msgid "support_number" msgstr "номер_опорной_процедуры" -#: sql_help.c:666 sql_help.c:1519 sql_help.c:1849 +#: sql_help.c:724 sql_help.c:1620 sql_help.c:1970 sql_help.c:2341 +#: sql_help.c:2343 msgid "argument_type" msgstr "тип_аргумента" -#: sql_help.c:715 sql_help.c:1126 sql_help.c:1741 sql_help.c:1890 -#: sql_help.c:2314 +#: sql_help.c:754 sql_help.c:823 sql_help.c:859 sql_help.c:1140 +#: sql_help.c:1282 sql_help.c:1322 sql_help.c:1383 sql_help.c:1410 +#: sql_help.c:1423 sql_help.c:1480 sql_help.c:1485 sql_help.c:1774 +#: sql_help.c:1882 sql_help.c:1918 sql_help.c:1993 sql_help.c:2051 +#: sql_help.c:2099 sql_help.c:2179 sql_help.c:2191 sql_help.c:2248 +#: sql_help.c:2366 sql_help.c:2542 sql_help.c:2751 sql_help.c:2768 +#: sql_help.c:2858 sql_help.c:3038 sql_help.c:3043 sql_help.c:3088 +#: sql_help.c:3119 sql_help.c:3370 sql_help.c:3375 sql_help.c:3471 +#: sql_help.c:3567 sql_help.c:3569 sql_help.c:3618 sql_help.c:3657 +#: sql_help.c:3805 sql_help.c:3807 sql_help.c:3856 sql_help.c:3890 +#: sql_help.c:3912 sql_help.c:3914 sql_help.c:3915 sql_help.c:3998 +#: sql_help.c:4000 sql_help.c:4049 +msgid "table_name" +msgstr "имя_таблицы" + +#: sql_help.c:757 sql_help.c:1995 +msgid "using_expression" +msgstr "выражение_использования" + +#: sql_help.c:758 sql_help.c:1996 +msgid "check_expression" +msgstr "выражение_проверки" + +#: sql_help.c:797 sql_help.c:1219 sql_help.c:1862 sql_help.c:2028 +#: sql_help.c:2476 msgid "password" msgstr "пароль" -#: sql_help.c:716 sql_help.c:1127 sql_help.c:1742 sql_help.c:1891 -#: sql_help.c:2315 +#: sql_help.c:798 sql_help.c:1220 sql_help.c:1863 sql_help.c:2029 +#: sql_help.c:2477 msgid "timestamp" msgstr "timestamp" -#: sql_help.c:720 sql_help.c:724 sql_help.c:727 sql_help.c:730 sql_help.c:2861 -#: sql_help.c:3140 +#: sql_help.c:802 sql_help.c:806 sql_help.c:809 sql_help.c:812 sql_help.c:3048 +#: sql_help.c:3380 msgid "database_name" msgstr "имя_БД" -#: sql_help.c:739 sql_help.c:775 sql_help.c:1053 sql_help.c:1187 -#: sql_help.c:1227 sql_help.c:1286 sql_help.c:1311 sql_help.c:1322 -#: sql_help.c:1379 sql_help.c:1384 sql_help.c:1661 sql_help.c:1761 -#: sql_help.c:1797 sql_help.c:1913 sql_help.c:1953 sql_help.c:2033 -#: sql_help.c:2045 sql_help.c:2102 sql_help.c:2204 sql_help.c:2380 -#: sql_help.c:2597 sql_help.c:2678 sql_help.c:2851 sql_help.c:2856 -#: sql_help.c:2898 sql_help.c:3130 sql_help.c:3135 sql_help.c:3231 -#: sql_help.c:3318 sql_help.c:3320 sql_help.c:3358 sql_help.c:3397 -#: sql_help.c:3536 sql_help.c:3538 sql_help.c:3576 sql_help.c:3608 -#: sql_help.c:3628 sql_help.c:3630 sql_help.c:3631 sql_help.c:3705 -#: sql_help.c:3707 sql_help.c:3745 -msgid "table_name" -msgstr "имя_таблицы" - -#: sql_help.c:769 sql_help.c:1948 +#: sql_help.c:853 sql_help.c:2094 msgid "increment" msgstr "шаг" -#: sql_help.c:770 sql_help.c:1949 +#: sql_help.c:854 sql_help.c:2095 msgid "minvalue" msgstr "мин_значение" -#: sql_help.c:771 sql_help.c:1950 +#: sql_help.c:855 sql_help.c:2096 msgid "maxvalue" msgstr "макс_значение" -#: sql_help.c:772 sql_help.c:1951 sql_help.c:3316 sql_help.c:3395 -#: sql_help.c:3534 sql_help.c:3648 sql_help.c:3703 +#: sql_help.c:856 sql_help.c:2097 sql_help.c:3565 sql_help.c:3655 +#: sql_help.c:3803 sql_help.c:3932 sql_help.c:3996 msgid "start" msgstr "начальное_значение" -#: sql_help.c:773 +#: sql_help.c:857 msgid "restart" msgstr "значение_перезапуска" -#: sql_help.c:774 sql_help.c:1952 +#: sql_help.c:858 sql_help.c:2098 msgid "cache" msgstr "кэш" -#: sql_help.c:915 sql_help.c:2038 sql_help.c:2049 -msgid "table_constraint" -msgstr "ограничение_таблицы" - -#: sql_help.c:916 +#: sql_help.c:1003 msgid "table_constraint_using_index" msgstr "ограничение_таблицы_с_индексом" -#: sql_help.c:924 sql_help.c:925 sql_help.c:926 sql_help.c:927 +#: sql_help.c:1011 sql_help.c:1012 sql_help.c:1013 sql_help.c:1014 msgid "rewrite_rule_name" msgstr "имя_правила_перезаписи" -#: sql_help.c:932 sql_help.c:933 sql_help.c:2041 -msgid "parent_table" -msgstr "таблица_родитель" - -#: sql_help.c:934 sql_help.c:2046 sql_help.c:2883 sql_help.c:3162 -msgid "type_name" -msgstr "имя_типа" - -#: sql_help.c:938 +#: sql_help.c:1025 msgid "and table_constraint_using_index is:" msgstr "и ограничение_таблицы_с_индексом:" -#: sql_help.c:956 sql_help.c:959 sql_help.c:2121 +#: sql_help.c:1043 sql_help.c:1046 sql_help.c:2267 msgid "tablespace_option" msgstr "параметр_табл_пространства" -#: sql_help.c:980 sql_help.c:983 sql_help.c:989 sql_help.c:993 +#: sql_help.c:1067 sql_help.c:1070 sql_help.c:1076 sql_help.c:1080 msgid "token_type" msgstr "тип_фрагмента" -#: sql_help.c:981 sql_help.c:984 +#: sql_help.c:1068 sql_help.c:1071 msgid "dictionary_name" msgstr "имя_словаря" -#: sql_help.c:986 sql_help.c:990 +#: sql_help.c:1073 sql_help.c:1077 msgid "old_dictionary" msgstr "старый_словарь" -#: sql_help.c:987 sql_help.c:991 +#: sql_help.c:1074 sql_help.c:1078 msgid "new_dictionary" msgstr "новый_словарь" -#: sql_help.c:1078 sql_help.c:1088 sql_help.c:1091 sql_help.c:1092 -#: sql_help.c:2254 +#: sql_help.c:1165 sql_help.c:1175 sql_help.c:1178 sql_help.c:1179 +#: sql_help.c:2416 msgid "attribute_name" msgstr "имя_атрибута" -#: sql_help.c:1079 +#: sql_help.c:1166 msgid "new_attribute_name" msgstr "новое_имя_атрибута" -#: sql_help.c:1085 +#: sql_help.c:1172 msgid "new_enum_value" msgstr "новое_значение_перечисления" -#: sql_help.c:1086 +#: sql_help.c:1173 msgid "existing_enum_value" msgstr "существующее_значение_перечисления" -#: sql_help.c:1148 sql_help.c:1668 sql_help.c:1964 sql_help.c:2332 -#: sql_help.c:2703 sql_help.c:2867 sql_help.c:3146 +#: sql_help.c:1243 sql_help.c:1783 sql_help.c:2110 sql_help.c:2494 +#: sql_help.c:2883 sql_help.c:3054 sql_help.c:3089 sql_help.c:3386 msgid "server_name" msgstr "имя_сервера" -#: sql_help.c:1176 sql_help.c:1179 sql_help.c:2347 +#: sql_help.c:1271 sql_help.c:1274 sql_help.c:2509 msgid "view_option_name" msgstr "имя_параметра_представления" -#: sql_help.c:1177 sql_help.c:2348 +#: sql_help.c:1272 sql_help.c:2510 msgid "view_option_value" msgstr "значение_параметра_представления" -#: sql_help.c:1202 sql_help.c:3453 sql_help.c:3455 sql_help.c:3479 +#: sql_help.c:1297 sql_help.c:3713 sql_help.c:3715 sql_help.c:3739 msgid "transaction_mode" msgstr "режим_транзакции" -#: sql_help.c:1203 sql_help.c:3456 sql_help.c:3480 +#: sql_help.c:1298 sql_help.c:3716 sql_help.c:3740 msgid "where transaction_mode is one of:" msgstr "где допустимый режим_транзакции:" -#: sql_help.c:1283 +#: sql_help.c:1380 msgid "relation_name" msgstr "имя_отношения" -#: sql_help.c:1310 +#: sql_help.c:1385 sql_help.c:3050 sql_help.c:3382 +msgid "domain_name" +msgstr "имя_домена" + +#: sql_help.c:1409 msgid "rule_name" msgstr "имя_правила" -#: sql_help.c:1325 +#: sql_help.c:1426 msgid "text" msgstr "текст" -#: sql_help.c:1350 sql_help.c:2993 sql_help.c:3180 +#: sql_help.c:1451 sql_help.c:3232 sql_help.c:3420 msgid "transaction_id" msgstr "код_транзакции" -#: sql_help.c:1381 sql_help.c:1387 sql_help.c:2919 +#: sql_help.c:1482 sql_help.c:1488 sql_help.c:3158 msgid "filename" msgstr "имя_файла" -#: sql_help.c:1382 sql_help.c:1388 sql_help.c:1915 sql_help.c:1916 -#: sql_help.c:1917 +#: sql_help.c:1483 sql_help.c:1489 sql_help.c:2053 sql_help.c:2054 +#: sql_help.c:2055 msgid "command" msgstr "команда" -#: sql_help.c:1386 sql_help.c:1802 sql_help.c:2107 sql_help.c:2349 -#: sql_help.c:2367 sql_help.c:2901 +#: sql_help.c:1487 sql_help.c:1923 sql_help.c:2253 sql_help.c:2511 +#: sql_help.c:2529 sql_help.c:3123 msgid "query" msgstr "запрос" -#: sql_help.c:1390 sql_help.c:2748 +#: sql_help.c:1491 sql_help.c:2928 msgid "where option can be one of:" msgstr "где допустимый параметр:" -#: sql_help.c:1391 +#: sql_help.c:1492 msgid "format_name" msgstr "имя_формата" -#: sql_help.c:1392 sql_help.c:1393 sql_help.c:1396 sql_help.c:2749 -#: sql_help.c:2750 sql_help.c:2751 sql_help.c:2752 sql_help.c:2753 +#: sql_help.c:1493 sql_help.c:1494 sql_help.c:1497 sql_help.c:2929 +#: sql_help.c:2930 sql_help.c:2931 sql_help.c:2932 sql_help.c:2933 msgid "boolean" msgstr "логическое_значение" -#: sql_help.c:1394 +#: sql_help.c:1495 msgid "delimiter_character" msgstr "символ_разделитель" -#: sql_help.c:1395 +#: sql_help.c:1496 msgid "null_string" msgstr "представление_NULL" -#: sql_help.c:1397 +#: sql_help.c:1498 msgid "quote_character" msgstr "символ_кавычек" -#: sql_help.c:1398 +#: sql_help.c:1499 msgid "escape_character" msgstr "спецсимвол" -#: sql_help.c:1402 +#: sql_help.c:1503 msgid "encoding_name" msgstr "имя_кодировки" -#: sql_help.c:1459 sql_help.c:1475 sql_help.c:1478 +#: sql_help.c:1560 sql_help.c:1576 sql_help.c:1579 msgid "arg_data_type" msgstr "тип_данных_аргумента" -#: sql_help.c:1460 sql_help.c:1479 sql_help.c:1487 +#: sql_help.c:1561 sql_help.c:1580 sql_help.c:1588 msgid "sfunc" msgstr "функция_состояния" -#: sql_help.c:1461 sql_help.c:1480 sql_help.c:1488 +#: sql_help.c:1562 sql_help.c:1581 sql_help.c:1589 msgid "state_data_type" msgstr "тип_данных_состояния" -#: sql_help.c:1462 sql_help.c:1481 sql_help.c:1489 +#: sql_help.c:1563 sql_help.c:1582 sql_help.c:1590 msgid "state_data_size" msgstr "размер_данных_состояния" -#: sql_help.c:1463 sql_help.c:1482 sql_help.c:1490 +#: sql_help.c:1564 sql_help.c:1583 sql_help.c:1591 msgid "ffunc" msgstr "функция_завершения" -#: sql_help.c:1464 sql_help.c:1483 sql_help.c:1491 +#: sql_help.c:1565 sql_help.c:1584 sql_help.c:1592 msgid "initial_condition" msgstr "начальное_условие" -#: sql_help.c:1465 sql_help.c:1492 +#: sql_help.c:1566 sql_help.c:1593 msgid "msfunc" msgstr "функция_состояния_дв" -#: sql_help.c:1466 sql_help.c:1493 +#: sql_help.c:1567 sql_help.c:1594 msgid "minvfunc" msgstr "обр_функция_дв" -#: sql_help.c:1467 sql_help.c:1494 +#: sql_help.c:1568 sql_help.c:1595 msgid "mstate_data_type" msgstr "тип_данных_состояния_дв" -#: sql_help.c:1468 sql_help.c:1495 +#: sql_help.c:1569 sql_help.c:1596 msgid "mstate_data_size" msgstr "размер_данных_состояния_дв" -#: sql_help.c:1469 sql_help.c:1496 +#: sql_help.c:1570 sql_help.c:1597 msgid "mffunc" msgstr "функция_завершения_дв" -#: sql_help.c:1470 sql_help.c:1497 +#: sql_help.c:1571 sql_help.c:1598 msgid "minitial_condition" msgstr "начальное_условие_дв" -#: sql_help.c:1471 sql_help.c:1498 +#: sql_help.c:1572 sql_help.c:1599 msgid "sort_operator" msgstr "оператор_сортировки" -#: sql_help.c:1484 +#: sql_help.c:1585 msgid "or the old syntax" msgstr "или старый синтаксис" -#: sql_help.c:1486 +#: sql_help.c:1587 msgid "base_type" msgstr "базовый_тип" -#: sql_help.c:1537 +#: sql_help.c:1638 msgid "locale" msgstr "код_локали" -#: sql_help.c:1538 sql_help.c:1572 +#: sql_help.c:1639 sql_help.c:1675 msgid "lc_collate" msgstr "код_правила_сортировки" -#: sql_help.c:1539 sql_help.c:1573 +#: sql_help.c:1640 sql_help.c:1676 msgid "lc_ctype" msgstr "код_классификации_символов" -#: sql_help.c:1541 +#: sql_help.c:1642 msgid "existing_collation" msgstr "существующее_правило_сортировки" -#: sql_help.c:1551 +#: sql_help.c:1652 msgid "source_encoding" msgstr "исходная_кодировка" -#: sql_help.c:1552 +#: sql_help.c:1653 msgid "dest_encoding" msgstr "целевая_кодировка" -#: sql_help.c:1570 sql_help.c:2147 +#: sql_help.c:1673 sql_help.c:2293 msgid "template" msgstr "шаблон" -#: sql_help.c:1571 +#: sql_help.c:1674 msgid "encoding" msgstr "кодировка" -#: sql_help.c:1596 +#: sql_help.c:1700 +msgid "constraint" +msgstr "ограничение" + +#: sql_help.c:1701 msgid "where constraint is:" msgstr "где ограничение:" -#: sql_help.c:1610 sql_help.c:1912 sql_help.c:2203 +#: sql_help.c:1715 sql_help.c:2050 sql_help.c:2365 msgid "event" msgstr "событие" -#: sql_help.c:1611 +#: sql_help.c:1716 msgid "filter_variable" msgstr "переменная_фильтра" -#: sql_help.c:1623 +#: sql_help.c:1728 msgid "extension_name" msgstr "имя_расширения" -#: sql_help.c:1625 +#: sql_help.c:1730 msgid "version" msgstr "версия" -#: sql_help.c:1626 +#: sql_help.c:1731 msgid "old_version" msgstr "старая_версия" -#: sql_help.c:1671 sql_help.c:2053 +#: sql_help.c:1786 sql_help.c:2199 msgid "where column_constraint is:" msgstr "где ограничение_колонки:" -#: sql_help.c:1673 sql_help.c:1700 sql_help.c:2056 +#: sql_help.c:1789 sql_help.c:1820 sql_help.c:2202 msgid "default_expr" msgstr "выражение_по_умолчанию" -#: sql_help.c:1701 +#: sql_help.c:1790 sql_help.c:2209 +msgid "and table_constraint is:" +msgstr "и ограничение_таблицы:" + +#: sql_help.c:1821 msgid "rettype" msgstr "тип_возврата" -#: sql_help.c:1703 +#: sql_help.c:1823 msgid "column_type" msgstr "тип_колонки" -#: sql_help.c:1704 sql_help.c:2401 sql_help.c:2875 sql_help.c:3154 -msgid "lang_name" -msgstr "имя_языка" - -#: sql_help.c:1710 +#: sql_help.c:1831 msgid "definition" msgstr "определение" -#: sql_help.c:1711 +#: sql_help.c:1832 msgid "obj_file" msgstr "объектный_файл" -#: sql_help.c:1712 +#: sql_help.c:1833 msgid "link_symbol" msgstr "символ_в_экспорте" -#: sql_help.c:1713 +#: sql_help.c:1834 msgid "attribute" msgstr "атрибут" -#: sql_help.c:1748 sql_help.c:1897 sql_help.c:2321 +#: sql_help.c:1869 sql_help.c:2035 sql_help.c:2483 msgid "uid" msgstr "uid" -#: sql_help.c:1762 +#: sql_help.c:1883 msgid "method" msgstr "метод" -#: sql_help.c:1766 sql_help.c:2088 +#: sql_help.c:1887 sql_help.c:2234 sql_help.c:3132 msgid "opclass" msgstr "класс_оператора" -#: sql_help.c:1770 sql_help.c:2074 +#: sql_help.c:1891 sql_help.c:2220 msgid "predicate" msgstr "предикат" -#: sql_help.c:1782 +#: sql_help.c:1903 msgid "call_handler" msgstr "обработчик_вызова" -#: sql_help.c:1783 +#: sql_help.c:1904 msgid "inline_handler" msgstr "обработчик_внедрённого_кода" -#: sql_help.c:1784 +#: sql_help.c:1905 msgid "valfunction" msgstr "функция_проверки" -#: sql_help.c:1820 +#: sql_help.c:1941 msgid "com_op" msgstr "коммут_оператор" -#: sql_help.c:1821 +#: sql_help.c:1942 msgid "neg_op" msgstr "обратный_оператор" -#: sql_help.c:1822 -msgid "res_proc" -msgstr "процедура_ограничения" - -#: sql_help.c:1823 -msgid "join_proc" -msgstr "процедура_соединения" - -#: sql_help.c:1839 +#: sql_help.c:1960 msgid "family_name" msgstr "имя_семейства" -#: sql_help.c:1850 +#: sql_help.c:1971 msgid "storage_type" msgstr "тип_хранения" -#: sql_help.c:1914 sql_help.c:2206 sql_help.c:2383 sql_help.c:3307 -#: sql_help.c:3309 sql_help.c:3386 sql_help.c:3388 sql_help.c:3525 -#: sql_help.c:3527 sql_help.c:3615 sql_help.c:3694 sql_help.c:3696 +#: sql_help.c:2052 sql_help.c:2368 sql_help.c:2545 sql_help.c:3142 +#: sql_help.c:3556 sql_help.c:3558 sql_help.c:3646 sql_help.c:3648 +#: sql_help.c:3794 sql_help.c:3796 sql_help.c:3899 sql_help.c:3987 +#: sql_help.c:3989 msgid "condition" msgstr "условие" -#: sql_help.c:1918 sql_help.c:2209 +#: sql_help.c:2056 sql_help.c:2371 msgid "where event can be one of:" msgstr "где допустимое событие:" -#: sql_help.c:1931 sql_help.c:1933 +#: sql_help.c:2075 sql_help.c:2077 msgid "schema_element" msgstr "элемент_схемы" -#: sql_help.c:1965 +#: sql_help.c:2111 msgid "server_type" msgstr "тип_сервера" -#: sql_help.c:1966 +#: sql_help.c:2112 msgid "server_version" msgstr "версия_сервера" -#: sql_help.c:1967 sql_help.c:2865 sql_help.c:3144 +#: sql_help.c:2113 sql_help.c:3052 sql_help.c:3384 msgid "fdw_name" msgstr "имя_обёртки_сторонних_данных" -#: sql_help.c:2039 +#: sql_help.c:2185 msgid "source_table" msgstr "исходная_таблица" -#: sql_help.c:2040 +#: sql_help.c:2186 msgid "like_option" msgstr "параметр_порождения" -#: sql_help.c:2057 sql_help.c:2058 sql_help.c:2067 sql_help.c:2069 -#: sql_help.c:2073 +#: sql_help.c:2203 sql_help.c:2204 sql_help.c:2213 sql_help.c:2215 +#: sql_help.c:2219 msgid "index_parameters" msgstr "параметры_индекса" -#: sql_help.c:2059 sql_help.c:2076 +#: sql_help.c:2205 sql_help.c:2222 msgid "reftable" msgstr "целевая_таблица" -#: sql_help.c:2060 sql_help.c:2077 +#: sql_help.c:2206 sql_help.c:2223 msgid "refcolumn" msgstr "целевая_колонка" -#: sql_help.c:2063 -msgid "and table_constraint is:" -msgstr "и ограничение_таблицы:" - -#: sql_help.c:2071 +#: sql_help.c:2217 msgid "exclude_element" msgstr "объект_исключения" -#: sql_help.c:2072 sql_help.c:3314 sql_help.c:3393 sql_help.c:3532 -#: sql_help.c:3646 sql_help.c:3701 +#: sql_help.c:2218 sql_help.c:3563 sql_help.c:3653 sql_help.c:3801 +#: sql_help.c:3930 sql_help.c:3994 msgid "operator" msgstr "оператор" -#: sql_help.c:2080 +#: sql_help.c:2226 msgid "and like_option is:" msgstr "и параметр_порождения:" -#: sql_help.c:2081 +#: sql_help.c:2227 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "параметры_индекса в ограничениях UNIQUE, PRIMARY KEY и EXCLUDE:" -#: sql_help.c:2085 +#: sql_help.c:2231 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "объект_исключения в ограничении EXCLUDE:" -#: sql_help.c:2120 +#: sql_help.c:2266 msgid "directory" msgstr "каталог" -#: sql_help.c:2134 +#: sql_help.c:2280 msgid "parser_name" msgstr "имя_анализатора" -#: sql_help.c:2135 +#: sql_help.c:2281 msgid "source_config" msgstr "исходная_конфигурация" -#: sql_help.c:2164 +#: sql_help.c:2310 msgid "start_function" msgstr "функция_начала" -#: sql_help.c:2165 +#: sql_help.c:2311 msgid "gettoken_function" msgstr "функция_выдачи_фрагмента" -#: sql_help.c:2166 +#: sql_help.c:2312 msgid "end_function" msgstr "функция_окончания" -#: sql_help.c:2167 +#: sql_help.c:2313 msgid "lextypes_function" msgstr "функция_лекс_типов" -#: sql_help.c:2168 +#: sql_help.c:2314 msgid "headline_function" msgstr "функция_создания_выдержек" -#: sql_help.c:2180 +#: sql_help.c:2326 msgid "init_function" msgstr "функция_инициализации" -#: sql_help.c:2181 +#: sql_help.c:2327 msgid "lexize_function" msgstr "функция_выделения_лексем" -#: sql_help.c:2205 +#: sql_help.c:2340 +msgid "from_sql_function_name" +msgstr "имя_функции_из_sql" + +#: sql_help.c:2342 +msgid "to_sql_function_name" +msgstr "имя_функции_в_sql" + +#: sql_help.c:2367 msgid "referenced_table_name" msgstr "ссылающаяся_таблица" -#: sql_help.c:2208 +#: sql_help.c:2370 msgid "arguments" msgstr "аргументы" -#: sql_help.c:2258 sql_help.c:3252 +#: sql_help.c:2420 sql_help.c:3492 msgid "label" msgstr "метка" -#: sql_help.c:2260 +#: sql_help.c:2422 msgid "subtype" msgstr "подтип" -#: sql_help.c:2261 +#: sql_help.c:2423 msgid "subtype_operator_class" msgstr "класс_оператора_подтипа" -#: sql_help.c:2263 +#: sql_help.c:2425 msgid "canonical_function" msgstr "каноническая_функция" -#: sql_help.c:2264 +#: sql_help.c:2426 msgid "subtype_diff_function" msgstr "функция_различий_подтипа" -#: sql_help.c:2266 +#: sql_help.c:2428 msgid "input_function" msgstr "функция_ввода" -#: sql_help.c:2267 +#: sql_help.c:2429 msgid "output_function" msgstr "функция_вывода" -#: sql_help.c:2268 +#: sql_help.c:2430 msgid "receive_function" msgstr "функция_получения" -#: sql_help.c:2269 +#: sql_help.c:2431 msgid "send_function" msgstr "функция_отправки" -#: sql_help.c:2270 +#: sql_help.c:2432 msgid "type_modifier_input_function" msgstr "функция_ввода_модификатора_типа" -#: sql_help.c:2271 +#: sql_help.c:2433 msgid "type_modifier_output_function" msgstr "функция_вывода_модификатора_типа" -#: sql_help.c:2272 +#: sql_help.c:2434 msgid "analyze_function" msgstr "функция_анализа" -#: sql_help.c:2273 +#: sql_help.c:2435 msgid "internallength" msgstr "внутр_длина" -#: sql_help.c:2274 +#: sql_help.c:2436 msgid "alignment" msgstr "выравнивание" -#: sql_help.c:2275 +#: sql_help.c:2437 msgid "storage" msgstr "хранение" -#: sql_help.c:2276 +#: sql_help.c:2438 msgid "like_type" msgstr "тип_образец" -#: sql_help.c:2277 +#: sql_help.c:2439 msgid "category" msgstr "категория" -#: sql_help.c:2278 +#: sql_help.c:2440 msgid "preferred" msgstr "предпочитаемый" -#: sql_help.c:2279 +#: sql_help.c:2441 msgid "default" msgstr "по_умолчанию" -#: sql_help.c:2280 +#: sql_help.c:2442 msgid "element" msgstr "элемент" -#: sql_help.c:2281 +#: sql_help.c:2443 msgid "delimiter" msgstr "разделитель" -#: sql_help.c:2282 +#: sql_help.c:2444 msgid "collatable" msgstr "сортируемый" -#: sql_help.c:2379 sql_help.c:2897 sql_help.c:3302 sql_help.c:3380 -#: sql_help.c:3520 sql_help.c:3607 sql_help.c:3689 +#: sql_help.c:2541 sql_help.c:3118 sql_help.c:3551 sql_help.c:3640 +#: sql_help.c:3789 sql_help.c:3889 sql_help.c:3982 msgid "with_query" msgstr "запрос_WITH" -#: sql_help.c:2381 sql_help.c:3321 sql_help.c:3324 sql_help.c:3327 -#: sql_help.c:3331 sql_help.c:3335 sql_help.c:3343 sql_help.c:3539 -#: sql_help.c:3542 sql_help.c:3545 sql_help.c:3549 sql_help.c:3553 -#: sql_help.c:3561 sql_help.c:3609 sql_help.c:3708 sql_help.c:3711 -#: sql_help.c:3714 sql_help.c:3718 sql_help.c:3722 sql_help.c:3730 +#: sql_help.c:2543 sql_help.c:3120 sql_help.c:3570 sql_help.c:3576 +#: sql_help.c:3579 sql_help.c:3583 sql_help.c:3587 sql_help.c:3595 +#: sql_help.c:3808 sql_help.c:3814 sql_help.c:3817 sql_help.c:3821 +#: sql_help.c:3825 sql_help.c:3833 sql_help.c:3891 sql_help.c:4001 +#: sql_help.c:4007 sql_help.c:4010 sql_help.c:4014 sql_help.c:4018 +#: sql_help.c:4026 msgid "alias" msgstr "псевдоним" -#: sql_help.c:2382 +#: sql_help.c:2544 msgid "using_list" msgstr "список_USING" -#: sql_help.c:2384 sql_help.c:2779 sql_help.c:2960 sql_help.c:3616 +#: sql_help.c:2546 sql_help.c:2959 sql_help.c:3199 sql_help.c:3900 msgid "cursor_name" msgstr "имя_курсора" -#: sql_help.c:2385 sql_help.c:2902 sql_help.c:3617 +#: sql_help.c:2547 sql_help.c:3126 sql_help.c:3901 msgid "output_expression" msgstr "выражение_результата" -#: sql_help.c:2386 sql_help.c:2903 sql_help.c:3305 sql_help.c:3383 -#: sql_help.c:3523 sql_help.c:3618 sql_help.c:3692 +#: sql_help.c:2548 sql_help.c:3127 sql_help.c:3554 sql_help.c:3643 +#: sql_help.c:3792 sql_help.c:3902 sql_help.c:3985 msgid "output_name" msgstr "имя_результата" -#: sql_help.c:2402 +#: sql_help.c:2564 msgid "code" msgstr "внедрённый_код" -#: sql_help.c:2727 +#: sql_help.c:2907 msgid "parameter" msgstr "параметр" -#: sql_help.c:2746 sql_help.c:2747 sql_help.c:2985 +#: sql_help.c:2926 sql_help.c:2927 sql_help.c:3224 msgid "statement" msgstr "оператор" -#: sql_help.c:2778 sql_help.c:2959 +#: sql_help.c:2958 sql_help.c:3198 msgid "direction" msgstr "направление" -#: sql_help.c:2780 sql_help.c:2961 +#: sql_help.c:2960 sql_help.c:3200 msgid "where direction can be empty or one of:" msgstr "где допустимое направление пустое или:" -#: sql_help.c:2781 sql_help.c:2782 sql_help.c:2783 sql_help.c:2784 -#: sql_help.c:2785 sql_help.c:2962 sql_help.c:2963 sql_help.c:2964 -#: sql_help.c:2965 sql_help.c:2966 sql_help.c:3315 sql_help.c:3317 -#: sql_help.c:3394 sql_help.c:3396 sql_help.c:3533 sql_help.c:3535 -#: sql_help.c:3647 sql_help.c:3649 sql_help.c:3702 sql_help.c:3704 +#: sql_help.c:2961 sql_help.c:2962 sql_help.c:2963 sql_help.c:2964 +#: sql_help.c:2965 sql_help.c:3201 sql_help.c:3202 sql_help.c:3203 +#: sql_help.c:3204 sql_help.c:3205 sql_help.c:3564 sql_help.c:3566 +#: sql_help.c:3654 sql_help.c:3656 sql_help.c:3802 sql_help.c:3804 +#: sql_help.c:3931 sql_help.c:3933 sql_help.c:3995 sql_help.c:3997 msgid "count" msgstr "число" -#: sql_help.c:2858 sql_help.c:3137 +#: sql_help.c:3045 sql_help.c:3377 msgid "sequence_name" msgstr "имя_последовательности" -#: sql_help.c:2863 sql_help.c:3142 -msgid "domain_name" -msgstr "имя_домена" - -#: sql_help.c:2871 sql_help.c:3150 +#: sql_help.c:3058 sql_help.c:3390 msgid "arg_name" msgstr "имя_аргумента" -#: sql_help.c:2872 sql_help.c:3151 +#: sql_help.c:3059 sql_help.c:3391 msgid "arg_type" msgstr "тип_аргумента" -#: sql_help.c:2877 sql_help.c:3156 +#: sql_help.c:3064 sql_help.c:3396 msgid "loid" msgstr "код_БО" -#: sql_help.c:2911 sql_help.c:2974 sql_help.c:3593 +#: sql_help.c:3087 +msgid "remote_schema" +msgstr "удалённая_схема" + +#: sql_help.c:3090 +msgid "local_schema" +msgstr "локальная_схема" + +#: sql_help.c:3124 +msgid "conflict_target" +msgstr "объект_конфликта" + +#: sql_help.c:3125 +msgid "conflict_action" +msgstr "действие_при_конфликте" + +#: sql_help.c:3128 +msgid "where conflict_target can be one of:" +msgstr "где допустимый объект_конфликта:" + +#: sql_help.c:3129 +msgid "column_name_index" +msgstr "индекс_по_имени_колонки" + +#: sql_help.c:3130 +msgid "expression_index" +msgstr "индекс_по_выражению" + +#: sql_help.c:3133 +msgid "index_predicate" +msgstr "предикат_индекса" + +#: sql_help.c:3135 +msgid "and conflict_action is one of:" +msgstr "а допустимое действие_при_конфликте:" + +#: sql_help.c:3141 sql_help.c:3897 +msgid "sub-SELECT" +msgstr "вложенный_SELECT" + +#: sql_help.c:3150 sql_help.c:3213 sql_help.c:3873 msgid "channel" msgstr "канал" -#: sql_help.c:2933 +#: sql_help.c:3172 msgid "lockmode" msgstr "режим_блокировки" -#: sql_help.c:2934 +#: sql_help.c:3173 msgid "where lockmode is one of:" msgstr "где допустимый режим_блокировки:" -#: sql_help.c:2975 +#: sql_help.c:3214 msgid "payload" msgstr "сообщение_нагрузка" -#: sql_help.c:3001 +#: sql_help.c:3241 msgid "old_role" msgstr "старая_роль" -#: sql_help.c:3002 +#: sql_help.c:3242 msgid "new_role" msgstr "новая_роль" -#: sql_help.c:3027 sql_help.c:3188 sql_help.c:3196 +#: sql_help.c:3267 sql_help.c:3428 sql_help.c:3436 msgid "savepoint_name" msgstr "имя_точки_сохранения" -#: sql_help.c:3229 +#: sql_help.c:3469 msgid "provider" msgstr "поставщик" -#: sql_help.c:3306 sql_help.c:3345 sql_help.c:3347 sql_help.c:3385 -#: sql_help.c:3524 sql_help.c:3563 sql_help.c:3565 sql_help.c:3693 -#: sql_help.c:3732 sql_help.c:3734 +#: sql_help.c:3555 sql_help.c:3597 sql_help.c:3599 sql_help.c:3645 +#: sql_help.c:3793 sql_help.c:3835 sql_help.c:3837 sql_help.c:3986 +#: sql_help.c:4028 sql_help.c:4030 msgid "from_item" msgstr "источник_данных" -#: sql_help.c:3310 sql_help.c:3389 sql_help.c:3528 sql_help.c:3697 +#: sql_help.c:3557 sql_help.c:3609 sql_help.c:3795 sql_help.c:3847 +#: sql_help.c:3988 sql_help.c:4040 +msgid "grouping_element" +msgstr "элемент_группирования" + +#: sql_help.c:3559 sql_help.c:3649 sql_help.c:3797 sql_help.c:3990 msgid "window_name" msgstr "имя_окна" -#: sql_help.c:3311 sql_help.c:3390 sql_help.c:3529 sql_help.c:3698 +#: sql_help.c:3560 sql_help.c:3650 sql_help.c:3798 sql_help.c:3991 msgid "window_definition" msgstr "определение_окна" -#: sql_help.c:3312 sql_help.c:3323 sql_help.c:3353 sql_help.c:3391 -#: sql_help.c:3530 sql_help.c:3541 sql_help.c:3571 sql_help.c:3699 -#: sql_help.c:3710 sql_help.c:3740 +#: sql_help.c:3561 sql_help.c:3575 sql_help.c:3613 sql_help.c:3651 +#: sql_help.c:3799 sql_help.c:3813 sql_help.c:3851 sql_help.c:3992 +#: sql_help.c:4006 sql_help.c:4044 msgid "select" msgstr "select" -#: sql_help.c:3319 sql_help.c:3537 sql_help.c:3706 +#: sql_help.c:3568 sql_help.c:3806 sql_help.c:3999 msgid "where from_item can be one of:" msgstr "где допустимый источник_данных:" -#: sql_help.c:3322 sql_help.c:3325 sql_help.c:3328 sql_help.c:3332 -#: sql_help.c:3344 sql_help.c:3540 sql_help.c:3543 sql_help.c:3546 -#: sql_help.c:3550 sql_help.c:3562 sql_help.c:3709 sql_help.c:3712 -#: sql_help.c:3715 sql_help.c:3719 sql_help.c:3731 +#: sql_help.c:3571 sql_help.c:3577 sql_help.c:3580 sql_help.c:3584 +#: sql_help.c:3596 sql_help.c:3809 sql_help.c:3815 sql_help.c:3818 +#: sql_help.c:3822 sql_help.c:3834 sql_help.c:4002 sql_help.c:4008 +#: sql_help.c:4011 sql_help.c:4015 sql_help.c:4027 msgid "column_alias" msgstr "псевдоним_колонки" -#: sql_help.c:3326 sql_help.c:3351 sql_help.c:3544 sql_help.c:3569 -#: sql_help.c:3713 sql_help.c:3738 -msgid "with_query_name" -msgstr "имя_запроса_WITH" +#: sql_help.c:3572 sql_help.c:3810 sql_help.c:4003 +msgid "sampling_method" +msgstr "метод_выборки" -#: sql_help.c:3330 sql_help.c:3334 sql_help.c:3338 sql_help.c:3341 -#: sql_help.c:3548 sql_help.c:3552 sql_help.c:3556 sql_help.c:3559 -#: sql_help.c:3717 sql_help.c:3721 sql_help.c:3725 sql_help.c:3728 +#: sql_help.c:3573 sql_help.c:3582 sql_help.c:3586 sql_help.c:3590 +#: sql_help.c:3593 sql_help.c:3811 sql_help.c:3820 sql_help.c:3824 +#: sql_help.c:3828 sql_help.c:3831 sql_help.c:4004 sql_help.c:4013 +#: sql_help.c:4017 sql_help.c:4021 sql_help.c:4024 msgid "argument" msgstr "аргумент" -#: sql_help.c:3336 sql_help.c:3339 sql_help.c:3342 sql_help.c:3554 -#: sql_help.c:3557 sql_help.c:3560 sql_help.c:3723 sql_help.c:3726 -#: sql_help.c:3729 +#: sql_help.c:3574 sql_help.c:3812 sql_help.c:4005 +msgid "seed" +msgstr "начальное_число" + +#: sql_help.c:3578 sql_help.c:3611 sql_help.c:3816 sql_help.c:3849 +#: sql_help.c:4009 sql_help.c:4042 +msgid "with_query_name" +msgstr "имя_запроса_WITH" + +#: sql_help.c:3588 sql_help.c:3591 sql_help.c:3594 sql_help.c:3826 +#: sql_help.c:3829 sql_help.c:3832 sql_help.c:4019 sql_help.c:4022 +#: sql_help.c:4025 msgid "column_definition" msgstr "определение_колонки" -#: sql_help.c:3346 sql_help.c:3564 sql_help.c:3733 +#: sql_help.c:3598 sql_help.c:3836 sql_help.c:4029 msgid "join_type" msgstr "тип_соединения" -#: sql_help.c:3348 sql_help.c:3566 sql_help.c:3735 +#: sql_help.c:3600 sql_help.c:3838 sql_help.c:4031 msgid "join_condition" msgstr "условие_соединения" -#: sql_help.c:3349 sql_help.c:3567 sql_help.c:3736 +#: sql_help.c:3601 sql_help.c:3839 sql_help.c:4032 msgid "join_column" msgstr "колонка_соединения" -#: sql_help.c:3350 sql_help.c:3568 sql_help.c:3737 +#: sql_help.c:3602 sql_help.c:3840 sql_help.c:4033 +msgid "and grouping_element can be one of:" +msgstr "где допустимый элемент_группирования:" + +#: sql_help.c:3610 sql_help.c:3848 sql_help.c:4041 msgid "and with_query is:" msgstr "и запрос_WITH:" -#: sql_help.c:3354 sql_help.c:3572 sql_help.c:3741 +#: sql_help.c:3614 sql_help.c:3852 sql_help.c:4045 msgid "values" msgstr "значения" -#: sql_help.c:3355 sql_help.c:3573 sql_help.c:3742 +#: sql_help.c:3615 sql_help.c:3853 sql_help.c:4046 msgid "insert" msgstr "insert" -#: sql_help.c:3356 sql_help.c:3574 sql_help.c:3743 +#: sql_help.c:3616 sql_help.c:3854 sql_help.c:4047 msgid "update" msgstr "update" -#: sql_help.c:3357 sql_help.c:3575 sql_help.c:3744 +#: sql_help.c:3617 sql_help.c:3855 sql_help.c:4048 msgid "delete" msgstr "delete" -#: sql_help.c:3384 +#: sql_help.c:3644 msgid "new_table" msgstr "новая_таблица" -#: sql_help.c:3409 +#: sql_help.c:3669 msgid "timezone" msgstr "часовой_пояс" -#: sql_help.c:3454 +#: sql_help.c:3714 msgid "snapshot_id" msgstr "код_снимка" -#: sql_help.c:3614 +#: sql_help.c:3898 msgid "from_list" msgstr "список_FROM" -#: sql_help.c:3645 +#: sql_help.c:3929 msgid "sort_expression" msgstr "выражение_сортировки" -#: sql_help.h:191 sql_help.h:891 +#: sql_help.h:197 sql_help.h:927 msgid "abort the current transaction" msgstr "прервать текущую транзакцию" -#: sql_help.h:196 +#: sql_help.h:202 msgid "change the definition of an aggregate function" msgstr "изменить определение агрегатной функции" -#: sql_help.h:201 +#: sql_help.h:207 msgid "change the definition of a collation" msgstr "изменить определение правила сортировки" -#: sql_help.h:206 +#: sql_help.h:212 msgid "change the definition of a conversion" msgstr "изменить определение преобразования" -#: sql_help.h:211 +#: sql_help.h:217 msgid "change a database" msgstr "изменить атрибуты базы данных" -#: sql_help.h:216 +#: sql_help.h:222 msgid "define default access privileges" msgstr "определить права доступа по умолчанию" -#: sql_help.h:221 +#: sql_help.h:227 msgid "change the definition of a domain" msgstr "изменить определение домена" -#: sql_help.h:226 +#: sql_help.h:232 msgid "change the definition of an event trigger" msgstr "изменить определение событийного триггера" -#: sql_help.h:231 +#: sql_help.h:237 msgid "change the definition of an extension" msgstr "изменить определение расширения" -#: sql_help.h:236 +#: sql_help.h:242 msgid "change the definition of a foreign-data wrapper" msgstr "изменить определение обёртки сторонних данных" -#: sql_help.h:241 +#: sql_help.h:247 msgid "change the definition of a foreign table" msgstr "изменить определение сторонней таблицы" -#: sql_help.h:246 +#: sql_help.h:252 msgid "change the definition of a function" msgstr "изменить определение функции" -#: sql_help.h:251 +#: sql_help.h:257 msgid "change role name or membership" msgstr "изменить имя роли или членство" -#: sql_help.h:256 +#: sql_help.h:262 msgid "change the definition of an index" msgstr "изменить определение индекса" -#: sql_help.h:261 +#: sql_help.h:267 msgid "change the definition of a procedural language" msgstr "изменить определение процедурного языка" -#: sql_help.h:266 +#: sql_help.h:272 msgid "change the definition of a large object" msgstr "изменить определение большого объекта" -#: sql_help.h:271 +#: sql_help.h:277 msgid "change the definition of a materialized view" msgstr "изменить определение материализованного представления" -#: sql_help.h:276 +#: sql_help.h:282 msgid "change the definition of an operator" msgstr "изменить определение оператора" -#: sql_help.h:281 +#: sql_help.h:287 msgid "change the definition of an operator class" msgstr "изменить определение класса операторов" -#: sql_help.h:286 +#: sql_help.h:292 msgid "change the definition of an operator family" msgstr "изменить определение семейства операторов" -#: sql_help.h:291 sql_help.h:361 +#: sql_help.h:297 +msgid "change the definition of a policy" +msgstr "изменить определение политики" + +#: sql_help.h:302 sql_help.h:372 msgid "change a database role" msgstr "изменить роль пользователя БД" -#: sql_help.h:296 +#: sql_help.h:307 msgid "change the definition of a rule" msgstr "изменить определение правила" -#: sql_help.h:301 +#: sql_help.h:312 msgid "change the definition of a schema" msgstr "изменить определение схемы" -#: sql_help.h:306 +#: sql_help.h:317 msgid "change the definition of a sequence generator" msgstr "изменить определение генератора последовательности" -#: sql_help.h:311 +#: sql_help.h:322 msgid "change the definition of a foreign server" msgstr "изменить определение стороннего сервера" -#: sql_help.h:316 +#: sql_help.h:327 msgid "change a server configuration parameter" msgstr "изменить параметр конфигурации сервера" -#: sql_help.h:321 +#: sql_help.h:332 msgid "change the definition of a table" msgstr "изменить определение таблицы" -#: sql_help.h:326 +#: sql_help.h:337 msgid "change the definition of a tablespace" msgstr "изменить определение табличного пространства" -#: sql_help.h:331 +#: sql_help.h:342 msgid "change the definition of a text search configuration" msgstr "изменить определение конфигурации текстового поиска" -#: sql_help.h:336 +#: sql_help.h:347 msgid "change the definition of a text search dictionary" msgstr "изменить определение словаря текстового поиска" -#: sql_help.h:341 +#: sql_help.h:352 msgid "change the definition of a text search parser" msgstr "изменить определение анализатора текстового поиска" -#: sql_help.h:346 +#: sql_help.h:357 msgid "change the definition of a text search template" msgstr "изменить определение шаблона текстового поиска" -#: sql_help.h:351 +#: sql_help.h:362 msgid "change the definition of a trigger" msgstr "изменить определение триггера" -#: sql_help.h:356 +#: sql_help.h:367 msgid "change the definition of a type" msgstr "изменить определение типа" -#: sql_help.h:366 +#: sql_help.h:377 msgid "change the definition of a user mapping" msgstr "изменить сопоставление пользователей" -#: sql_help.h:371 +#: sql_help.h:382 msgid "change the definition of a view" msgstr "изменить определение представления" -#: sql_help.h:376 +#: sql_help.h:387 msgid "collect statistics about a database" msgstr "собрать статистику о базе данных" -#: sql_help.h:381 sql_help.h:956 +#: sql_help.h:392 sql_help.h:992 msgid "start a transaction block" msgstr "начать транзакцию" -#: sql_help.h:386 +#: sql_help.h:397 msgid "force a transaction log checkpoint" msgstr "отметить контрольную точку в журнале транзакций" -#: sql_help.h:391 +#: sql_help.h:402 msgid "close a cursor" msgstr "закрыть курсор" -#: sql_help.h:396 +#: sql_help.h:407 msgid "cluster a table according to an index" msgstr "перегруппировать таблицу по индексу" -#: sql_help.h:401 +#: sql_help.h:412 msgid "define or change the comment of an object" msgstr "задать или изменить комментарий объекта" -#: sql_help.h:406 sql_help.h:796 +#: sql_help.h:417 sql_help.h:827 msgid "commit the current transaction" msgstr "зафиксировать текущую транзакцию" -#: sql_help.h:411 +#: sql_help.h:422 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "зафиксировать транзакцию, ранее подготовленную для двухфазной фиксации" -#: sql_help.h:416 +#: sql_help.h:427 msgid "copy data between a file and a table" msgstr "импорт/экспорт данных в файл" -#: sql_help.h:421 +#: sql_help.h:432 msgid "define a new aggregate function" msgstr "создать агрегатную функцию" -#: sql_help.h:426 +#: sql_help.h:437 msgid "define a new cast" msgstr "создать приведение типов" -#: sql_help.h:431 +#: sql_help.h:442 msgid "define a new collation" msgstr "создать правило сортировки" -#: sql_help.h:436 +#: sql_help.h:447 msgid "define a new encoding conversion" msgstr "создать преобразование кодировки" -#: sql_help.h:441 +#: sql_help.h:452 msgid "create a new database" msgstr "создать базу данных" -#: sql_help.h:446 +#: sql_help.h:457 msgid "define a new domain" msgstr "создать домен" -#: sql_help.h:451 +#: sql_help.h:462 msgid "define a new event trigger" msgstr "создать событийный триггер" -#: sql_help.h:456 +#: sql_help.h:467 msgid "install an extension" msgstr "установить расширение" -#: sql_help.h:461 +#: sql_help.h:472 msgid "define a new foreign-data wrapper" msgstr "создать обёртку сторонних данных" -#: sql_help.h:466 +#: sql_help.h:477 msgid "define a new foreign table" msgstr "создать стороннюю таблицу" -#: sql_help.h:471 +#: sql_help.h:482 msgid "define a new function" msgstr "создать функцию" -#: sql_help.h:476 sql_help.h:511 sql_help.h:581 +#: sql_help.h:487 sql_help.h:527 sql_help.h:602 msgid "define a new database role" msgstr "создать роль пользователя БД" -#: sql_help.h:481 +#: sql_help.h:492 msgid "define a new index" msgstr "создать индекс" -#: sql_help.h:486 +#: sql_help.h:497 msgid "define a new procedural language" msgstr "создать процедурный язык" -#: sql_help.h:491 +#: sql_help.h:502 msgid "define a new materialized view" msgstr "создать материализованное представление" -#: sql_help.h:496 +#: sql_help.h:507 msgid "define a new operator" msgstr "создать оператор" -#: sql_help.h:501 +#: sql_help.h:512 msgid "define a new operator class" msgstr "создать класс операторов" -#: sql_help.h:506 +#: sql_help.h:517 msgid "define a new operator family" msgstr "создать семейство операторов" -#: sql_help.h:516 +#: sql_help.h:522 +msgid "define a new policy for a table" +msgstr "создать политику для таблицы" + +#: sql_help.h:532 msgid "define a new rewrite rule" msgstr "создать правило перезаписи" -#: sql_help.h:521 +#: sql_help.h:537 msgid "define a new schema" msgstr "создать схему" -#: sql_help.h:526 +#: sql_help.h:542 msgid "define a new sequence generator" msgstr "создать генератор последовательностей" -#: sql_help.h:531 +#: sql_help.h:547 msgid "define a new foreign server" msgstr "создать сторонний сервер" -#: sql_help.h:536 +#: sql_help.h:552 msgid "define a new table" msgstr "создать таблицу" -#: sql_help.h:541 sql_help.h:921 +#: sql_help.h:557 sql_help.h:957 msgid "define a new table from the results of a query" msgstr "создать таблицу из результатов запроса" -#: sql_help.h:546 +#: sql_help.h:562 msgid "define a new tablespace" msgstr "создать табличное пространство" -#: sql_help.h:551 +#: sql_help.h:567 msgid "define a new text search configuration" msgstr "создать конфигурацию текстового поиска" -#: sql_help.h:556 +#: sql_help.h:572 msgid "define a new text search dictionary" msgstr "создать словарь текстового поиска" -#: sql_help.h:561 +#: sql_help.h:577 msgid "define a new text search parser" msgstr "создать анализатор текстового поиска" -#: sql_help.h:566 +#: sql_help.h:582 msgid "define a new text search template" msgstr "создать шаблон текстового поиска" -#: sql_help.h:571 +#: sql_help.h:587 +msgid "define a new transform" +msgstr "создать преобразование" + +#: sql_help.h:592 msgid "define a new trigger" msgstr "создать триггер" -#: sql_help.h:576 +#: sql_help.h:597 msgid "define a new data type" msgstr "создать тип данных" -#: sql_help.h:586 +#: sql_help.h:607 msgid "define a new mapping of a user to a foreign server" msgstr "создать сопоставление пользователя для стороннего сервера" -#: sql_help.h:591 +#: sql_help.h:612 msgid "define a new view" msgstr "создать представление" -#: sql_help.h:596 +#: sql_help.h:617 msgid "deallocate a prepared statement" msgstr "освободить подготовленный оператор" -#: sql_help.h:601 +#: sql_help.h:622 msgid "define a cursor" msgstr "создать курсор" -#: sql_help.h:606 +#: sql_help.h:627 msgid "delete rows of a table" msgstr "удалить записи таблицы" -#: sql_help.h:611 +#: sql_help.h:632 msgid "discard session state" msgstr "очистить состояние сеанса" -#: sql_help.h:616 +#: sql_help.h:637 msgid "execute an anonymous code block" msgstr "выполнить анонимный блок кода" -#: sql_help.h:621 +#: sql_help.h:642 msgid "remove an aggregate function" msgstr "удалить агрегатную функцию" -#: sql_help.h:626 +#: sql_help.h:647 msgid "remove a cast" msgstr "удалить приведение типа" -#: sql_help.h:631 +#: sql_help.h:652 msgid "remove a collation" msgstr "удалить правило сортировки" -#: sql_help.h:636 +#: sql_help.h:657 msgid "remove a conversion" msgstr "удалить преобразование" -#: sql_help.h:641 +#: sql_help.h:662 msgid "remove a database" msgstr "удалить базу данных" -#: sql_help.h:646 +#: sql_help.h:667 msgid "remove a domain" msgstr "удалить домен" -#: sql_help.h:651 +#: sql_help.h:672 msgid "remove an event trigger" msgstr "удалить событийный триггер" -#: sql_help.h:656 +#: sql_help.h:677 msgid "remove an extension" msgstr "удалить расширение" -#: sql_help.h:661 +#: sql_help.h:682 msgid "remove a foreign-data wrapper" msgstr "удалить обёртку сторонних данных" -#: sql_help.h:666 +#: sql_help.h:687 msgid "remove a foreign table" msgstr "удалить стороннюю таблицу" -#: sql_help.h:671 +#: sql_help.h:692 msgid "remove a function" msgstr "удалить функцию" -#: sql_help.h:676 sql_help.h:716 sql_help.h:781 +#: sql_help.h:697 sql_help.h:742 sql_help.h:812 msgid "remove a database role" msgstr "удалить роль пользователя БД" -#: sql_help.h:681 +#: sql_help.h:702 msgid "remove an index" msgstr "удалить индекс" -#: sql_help.h:686 +#: sql_help.h:707 msgid "remove a procedural language" msgstr "удалить процедурный язык" -#: sql_help.h:691 +#: sql_help.h:712 msgid "remove a materialized view" msgstr "удалить материализованное представление" -#: sql_help.h:696 +#: sql_help.h:717 msgid "remove an operator" msgstr "удалить оператор" -#: sql_help.h:701 +#: sql_help.h:722 msgid "remove an operator class" msgstr "удалить класс операторов" -#: sql_help.h:706 +#: sql_help.h:727 msgid "remove an operator family" msgstr "удалить семейство операторов" -#: sql_help.h:711 +#: sql_help.h:732 msgid "remove database objects owned by a database role" msgstr "удалить объекты базы данных, принадлежащие роли" -#: sql_help.h:721 +#: sql_help.h:737 +msgid "remove a policy from a table" +msgstr "удалить политику таблицы" + +#: sql_help.h:747 msgid "remove a rewrite rule" msgstr "удалить правило перезаписи" -#: sql_help.h:726 +#: sql_help.h:752 msgid "remove a schema" msgstr "удалить схему" -#: sql_help.h:731 +#: sql_help.h:757 msgid "remove a sequence" msgstr "удалить последовательность" -#: sql_help.h:736 +#: sql_help.h:762 msgid "remove a foreign server descriptor" msgstr "удалить описание стороннего сервера" -#: sql_help.h:741 +#: sql_help.h:767 msgid "remove a table" msgstr "удалить таблицу" -#: sql_help.h:746 +#: sql_help.h:772 msgid "remove a tablespace" msgstr "удалить табличное пространство" -#: sql_help.h:751 +#: sql_help.h:777 msgid "remove a text search configuration" msgstr "удалить конфигурацию текстового поиска" -#: sql_help.h:756 +#: sql_help.h:782 msgid "remove a text search dictionary" msgstr "удалить словарь текстового поиска" -#: sql_help.h:761 +#: sql_help.h:787 msgid "remove a text search parser" msgstr "удалить анализатор текстового поиска" -#: sql_help.h:766 +#: sql_help.h:792 msgid "remove a text search template" msgstr "удалить шаблон текстового поиска" -#: sql_help.h:771 +#: sql_help.h:797 +msgid "remove a transform" +msgstr "удалить преобразование" + +#: sql_help.h:802 msgid "remove a trigger" msgstr "удалить триггер" -#: sql_help.h:776 +#: sql_help.h:807 msgid "remove a data type" msgstr "удалить тип данных" -#: sql_help.h:786 +#: sql_help.h:817 msgid "remove a user mapping for a foreign server" msgstr "удалить сопоставление пользователя для стороннего сервера" -#: sql_help.h:791 +#: sql_help.h:822 msgid "remove a view" msgstr "удалить представление" -#: sql_help.h:801 +#: sql_help.h:832 msgid "execute a prepared statement" msgstr "выполнить подготовленный оператор" -#: sql_help.h:806 +#: sql_help.h:837 msgid "show the execution plan of a statement" msgstr "показать план выполнения оператора" -#: sql_help.h:811 +#: sql_help.h:842 msgid "retrieve rows from a query using a cursor" msgstr "получить результат запроса через курсор" -#: sql_help.h:816 +#: sql_help.h:847 msgid "define access privileges" msgstr "определить права доступа" -#: sql_help.h:821 +#: sql_help.h:852 +msgid "import table definitions from a foreign server" +msgstr "импортировать определения таблиц со стороннего сервера" + +#: sql_help.h:857 msgid "create new rows in a table" msgstr "добавить строки в таблицу" -#: sql_help.h:826 +#: sql_help.h:862 msgid "listen for a notification" msgstr "ожидать уведомления" -#: sql_help.h:831 +#: sql_help.h:867 msgid "load a shared library file" msgstr "загрузить файл разделяемой библиотеки" -#: sql_help.h:836 +#: sql_help.h:872 msgid "lock a table" msgstr "заблокировать таблицу" -#: sql_help.h:841 +#: sql_help.h:877 msgid "position a cursor" msgstr "установить курсор" -#: sql_help.h:846 +#: sql_help.h:882 msgid "generate a notification" msgstr "сгенерировать уведомление" -#: sql_help.h:851 +#: sql_help.h:887 msgid "prepare a statement for execution" msgstr "подготовить оператор для выполнения" -#: sql_help.h:856 +#: sql_help.h:892 msgid "prepare the current transaction for two-phase commit" msgstr "подготовить текущую транзакцию для двухфазной фиксации" -#: sql_help.h:861 +#: sql_help.h:897 msgid "change the ownership of database objects owned by a database role" msgstr "изменить владельца объектов БД, принадлежащих заданной роли" -#: sql_help.h:866 +#: sql_help.h:902 msgid "replace the contents of a materialized view" msgstr "заменить содержимое материализованного представления" -#: sql_help.h:871 +#: sql_help.h:907 msgid "rebuild indexes" msgstr "перестроить индексы" -#: sql_help.h:876 +#: sql_help.h:912 msgid "destroy a previously defined savepoint" msgstr "удалить ранее определённую точку сохранения" -#: sql_help.h:881 +#: sql_help.h:917 msgid "restore the value of a run-time parameter to the default value" msgstr "восстановить исходное значение параметра выполнения" -#: sql_help.h:886 +#: sql_help.h:922 msgid "remove access privileges" msgstr "удалить права доступа" -#: sql_help.h:896 +#: sql_help.h:932 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "отменить транзакцию, подготовленную ранее для двухфазной фиксации" -#: sql_help.h:901 +#: sql_help.h:937 msgid "roll back to a savepoint" msgstr "откатиться к точке сохранения" -#: sql_help.h:906 +#: sql_help.h:942 msgid "define a new savepoint within the current transaction" msgstr "определить новую точку сохранения в текущей транзакции" -#: sql_help.h:911 +#: sql_help.h:947 msgid "define or change a security label applied to an object" msgstr "задать или изменить метку безопасности, применённую к объекту" -#: sql_help.h:916 sql_help.h:961 sql_help.h:991 +#: sql_help.h:952 sql_help.h:997 sql_help.h:1027 msgid "retrieve rows from a table or view" msgstr "выбрать строки из таблицы или представления" -#: sql_help.h:926 +#: sql_help.h:962 msgid "change a run-time parameter" msgstr "изменить параметр выполнения" -#: sql_help.h:931 +#: sql_help.h:967 msgid "set constraint check timing for the current transaction" msgstr "установить время проверки ограничений для текущей транзакции" -#: sql_help.h:936 +#: sql_help.h:972 msgid "set the current user identifier of the current session" msgstr "задать идентификатор текущего пользователя в текущем сеансе" -#: sql_help.h:941 +#: sql_help.h:977 msgid "" "set the session user identifier and the current user identifier of the " "current session" @@ -4573,45 +5355,45 @@ msgstr "" "задать идентификатор пользователя сеанса и идентификатор текущего " "пользователя в текущем сеансе" -#: sql_help.h:946 +#: sql_help.h:982 msgid "set the characteristics of the current transaction" msgstr "задать свойства текущей транзакции" -#: sql_help.h:951 +#: sql_help.h:987 msgid "show the value of a run-time parameter" msgstr "показать значение параметра выполнения" -#: sql_help.h:966 +#: sql_help.h:1002 msgid "empty a table or set of tables" msgstr "опустошить таблицу или набор таблиц" -#: sql_help.h:971 +#: sql_help.h:1007 msgid "stop listening for a notification" msgstr "прекратить ожидание уведомлений" -#: sql_help.h:976 +#: sql_help.h:1012 msgid "update rows of a table" msgstr "изменить строки таблицы" -#: sql_help.h:981 +#: sql_help.h:1017 msgid "garbage-collect and optionally analyze a database" msgstr "произвести сборку мусора и проанализировать базу данных" -#: sql_help.h:986 +#: sql_help.h:1022 msgid "compute a set of rows" msgstr "получить набор строк" -#: startup.c:166 +#: startup.c:177 #, c-format msgid "%s: -1 can only be used in non-interactive mode\n" msgstr "%s: -1 можно использовать только в неинтерактивном режиме\n" -#: startup.c:266 +#: startup.c:277 #, c-format msgid "%s: could not open log file \"%s\": %s\n" msgstr "%s: не удалось открыть файл протокола \"%s\": %s\n" -#: startup.c:328 +#: startup.c:339 #, c-format msgid "" "Type \"help\" for help.\n" @@ -4620,42 +5402,42 @@ msgstr "" "Введите \"help\", чтобы получить справку.\n" "\n" -#: startup.c:471 +#: startup.c:486 #, c-format msgid "%s: could not set printing parameter \"%s\"\n" msgstr "%s: не удалось установить параметр печати \"%s\"\n" -#: startup.c:511 +#: startup.c:526 #, c-format msgid "%s: could not delete variable \"%s\"\n" msgstr "%s: удалить переменную \"%s\" нельзя\n" -#: startup.c:521 +#: startup.c:536 #, c-format msgid "%s: could not set variable \"%s\"\n" msgstr "%s: не удалось установить переменную \"%s\"\n" -#: startup.c:564 startup.c:570 +#: startup.c:596 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: startup.c:587 +#: startup.c:613 #, c-format msgid "%s: warning: extra command-line argument \"%s\" ignored\n" msgstr "%s: предупреждение: лишний аргумент \"%s\" проигнорирован\n" -#: startup.c:609 +#: startup.c:635 #, c-format msgid "%s: could not find own program executable\n" msgstr "%s: не удалось найти свой исполняемый файл\n" -#: startup.c:729 startup.c:776 startup.c:797 startup.c:834 variables.c:121 +#: startup.c:757 startup.c:804 startup.c:825 startup.c:862 variables.c:121 #, c-format msgid "unrecognized value \"%s\" for \"%s\"; assuming \"%s\"\n" msgstr "нераспознанное значение \"%s\" для \"%s\"; подразумевается \"%s\"\n" -#: tab-complete.c:4095 +#: tab-complete.c:4567 #, c-format msgid "" "tab completion query failed: %s\n" @@ -4666,6 +5448,12 @@ msgstr "" "Запрос:\n" "%s\n" +#~ msgid "SSL connection (unknown cipher)\n" +#~ msgstr "SSL-соединение (шифр неизвестен)\n" + +#~ msgid "(No rows)\n" +#~ msgstr "(Нет записей)\n" + #~ msgid "where view_option_name can be one of:" #~ msgstr "где допустимое имя_параметра_представления:" @@ -4721,9 +5509,6 @@ msgstr "" #~ msgid "tablespace" #~ msgstr "табл_пространство" -#~ msgid "schema" -#~ msgstr "схема" - #~ msgid "\\%s: error\n" #~ msgstr "ошибка \\%s\n" diff --git a/src/bin/psql/po/zh_CN.po b/src/bin/psql/po/zh_CN.po index 6612239a93c54..37f7d4a6d04db 100644 --- a/src/bin/psql/po/zh_CN.po +++ b/src/bin/psql/po/zh_CN.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: psql (PostgreSQL 9.0)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-11-22 21:11+0000\n" +"POT-Creation-Date: 2015-09-04 10:13+0000\n" "PO-Revision-Date: 2014-11-28 16:08+0800\n" -"Last-Translator: Xiong He \n" +"Last-Translator: Rugal Bernstein \n" "Language-Team: Chinese (Simplified)\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" @@ -47,7 +47,7 @@ msgstr "无法跳转到目录 \"%s\" 中: %s" #: ../../common/exec.c:272 #, c-format msgid "could not read symbolic link \"%s\"" -msgstr "无法读取符号连结 \"%s\"" +msgstr "无法读取符号链接 \"%s\"" #: ../../common/exec.c:523 #, c-format @@ -58,32 +58,31 @@ msgstr "pclose调用失败: %s" # common.c:85 # common.c:99 # mainloop.c:71 -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 input.c:205 mainloop.c:72 mainloop.c:234 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 command.c:331 input.c:205 mainloop.c:73 +#: mainloop.c:253 #, c-format msgid "out of memory\n" -msgstr "记忆体用尽\n" +msgstr "内存耗尽\n" # common.c:78 -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "无法复制空指针 (内部错误)\n" #: ../../common/username.c:45 #, c-format -#| msgid "could not load private key file \"%s\": %s" msgid "could not look up effective user ID %ld: %s" msgstr "无法找到有效的用户ID %ld: %s" -#: ../../common/username.c:47 command.c:276 -#| msgid "server \"%s\" does not exist" +#: ../../common/username.c:47 command.c:286 msgid "user does not exist" msgstr "用户不存在" -#: ../../common/username.c:61 -#, c-format -msgid "user name lookup failure: %s" +#: ../../common/username.c:62 +#, fuzzy, c-format +msgid "user name lookup failure: error code %lu" msgstr "用户名查找失败: %s" #: ../../common/wait_error.c:47 @@ -104,7 +103,7 @@ msgstr "子进程结束,结束代码 %d" #: ../../common/wait_error.c:63 #, c-format msgid "child process was terminated by exception 0x%X" -msgstr "子进程被例外(exception) 0x%X 终止" +msgstr "子进程被异常(exception) 0x%X 终止" #: ../../common/wait_error.c:73 #, c-format @@ -122,44 +121,43 @@ msgid "child process exited with unrecognized status %d" msgstr "子进程结束,不明状态代码 %d" # command.c:120 -#: command.c:117 +#: command.c:127 #, c-format msgid "Invalid command \\%s. Try \\? for help.\n" -msgstr "无效的命令 \\%s,用 \\? 显示说明。\n" +msgstr "无效的命令 \\%s,用 \\? 查看帮助。\n" # command.c:122 -#: command.c:119 +#: command.c:129 #, c-format msgid "invalid command \\%s\n" msgstr "无效的命令 \\%s\n" # command.c:131 -#: command.c:130 +#: command.c:140 #, c-format msgid "\\%s: extra argument \"%s\" ignored\n" msgstr "\\%s:忽略多余的参数 \"%s\" \n" # command.c:240 -#: command.c:274 +#: command.c:284 #, c-format -#| msgid "could not get home directory: %s\n" msgid "could not get home directory for user ID %ld: %s\n" -msgstr "无法得到用户ID %ld: %s对应的home 目录\n" +msgstr "无法获取用户ID %ld: %s对应的home 目录\n" # command.c:256 -#: command.c:292 +#: command.c:302 #, c-format msgid "\\%s: could not change directory to \"%s\": %s\n" msgstr "\\%s: 无法切换目录至 \"%s\": %s\n" # common.c:636 # common.c:871 -#: command.c:308 common.c:446 common.c:886 +#: command.c:317 common.c:442 common.c:500 common.c:962 #, c-format msgid "You are currently not connected to a database.\n" -msgstr "你目前没有与资料库连线。\n" +msgstr "你目前没有连接到数据库。\n" -#: command.c:315 +#: command.c:344 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at " @@ -168,7 +166,7 @@ msgstr "" "以用户 \"%2$s\" 的身份,通过套接字\"%3$s\"在端口\"%4$s\"连接到数据库 \"%1$s" "\"\n" -#: command.c:318 +#: command.c:347 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port " @@ -178,28 +176,34 @@ msgstr "" # command.c:370 # command.c:760 -#: command.c:517 command.c:587 command.c:1382 +#: command.c:548 command.c:618 command.c:714 command.c:1517 #, c-format msgid "no query buffer\n" msgstr "没有查询缓存区\n" -#: command.c:550 command.c:2978 +#: command.c:581 command.c:3364 #, c-format msgid "invalid line number: %s\n" -msgstr "无效行号: %s\n" +msgstr "行号无效: %s\n" # describe.c:117 -#: command.c:581 +#: command.c:612 #, c-format msgid "The server (version %d.%d) does not support editing function source.\n" msgstr "服务器(版本%d.%d)不支持编辑函数源码.\n" -#: command.c:661 +#: command.c:692 command.c:760 msgid "No changes" -msgstr "没有发生" +msgstr "没有发生更改" + +# describe.c:117 +#: command.c:708 +#, fuzzy, c-format +msgid "The server (version %d.%d) does not support editing view definitions.\n" +msgstr "服务器(版本%d.%d)不支持编辑函数源码.\n" # command.c:433 -#: command.c:715 +#: command.c:814 #, c-format msgid "%s: invalid encoding name or conversion procedure not found\n" msgstr "%s:无效的编码名称或找不到转换程序\n" @@ -211,14 +215,14 @@ msgstr "%s:无效的编码名称或找不到转换程序\n" # command.c:612 # command.c:740 # command.c:771 -#: command.c:812 command.c:862 command.c:876 command.c:893 command.c:1000 -#: command.c:1159 command.c:1362 command.c:1393 +#: command.c:911 command.c:961 command.c:975 command.c:992 command.c:1099 +#: command.c:1263 command.c:1497 command.c:1528 #, c-format msgid "\\%s: missing required argument\n" msgstr "\\%s:缺少所需参数\n" # command.c:598 -#: command.c:925 +#: command.c:1024 msgid "Query buffer is empty." msgstr "查询缓存区是空的。" @@ -226,66 +230,77 @@ msgstr "查询缓存区是空的。" # command.c:939 # startup.c:187 # startup.c:205 -#: command.c:935 +#: command.c:1034 msgid "Enter new password: " msgstr "输入新的密码:" -#: command.c:936 +#: command.c:1035 msgid "Enter it again: " -msgstr "再次键入:" +msgstr "再次输入:" -#: command.c:940 +#: command.c:1039 #, c-format msgid "Passwords didn't match.\n" -msgstr "Passwords didn't match.\n" +msgstr "两次密码不匹配。\n" -#: command.c:958 +#: command.c:1057 #, c-format msgid "Password encryption failed.\n" -msgstr "密码加密失败.\n" +msgstr "密码加密失败。\n" # startup.c:502 -#: command.c:1029 command.c:1140 command.c:1367 +#: command.c:1128 command.c:1244 command.c:1502 #, c-format msgid "\\%s: error while setting variable\n" msgstr "\\%s: 设定变量值时出错\n" # command.c:632 -#: command.c:1087 +#: command.c:1191 msgid "Query buffer reset (cleared)." -msgstr "查询缓存区重置(清空)。" +msgstr "查询缓存区重置(已清空)。" # command.c:646 -#: command.c:1099 +#: command.c:1203 #, c-format -#| msgid "Wrote history to file \"%s/%s\".\n" msgid "Wrote history to file \"%s\".\n" -msgstr "写入历史到文件 \"%s\".\n" +msgstr "写入历史记录到文件 \"%s\".\n" -#: command.c:1164 +#: command.c:1268 #, c-format msgid "\\%s: environment variable name must not contain \"=\"\n" msgstr "\\%s: 环境变量不能包含 \"=\"\n" # describe.c:117 -#: command.c:1206 +#: command.c:1310 #, c-format msgid "The server (version %d.%d) does not support showing function source.\n" msgstr "服务器(版本%d.%d)不支持显示函数源码.\n" # copy.c:122 -#: command.c:1212 +#: command.c:1316 #, c-format msgid "function name is required\n" msgstr "需要函数名\n" +# describe.c:117 +#: command.c:1389 +#, fuzzy, c-format +msgid "The server (version %d.%d) does not support showing view definitions.\n" +msgstr "服务器(版本%d.%d)不支持显示函数源码.\n" + +# copy.c:122 +#: command.c:1395 +#, fuzzy, c-format +msgid "view name is required\n" +msgstr "需要函数名\n" + # command.c:726 -#: command.c:1347 +#: command.c:1482 msgid "Timing is on." msgstr "启用计时功能." # command.c:728 -#: command.c:1349 +#: command.c:1484 msgid "Timing is off." msgstr "停止计时功能." @@ -302,15 +317,15 @@ msgstr "停止计时功能." # common.c:170 # copy.c:530 # copy.c:575 -#: command.c:1410 command.c:1430 command.c:2018 command.c:2021 command.c:2024 -#: command.c:2030 command.c:2032 command.c:2040 command.c:2050 command.c:2059 -#: command.c:2073 command.c:2090 command.c:2149 common.c:74 copy.c:333 -#: copy.c:393 copy.c:408 psqlscan.l:1677 psqlscan.l:1688 psqlscan.l:1698 +#: command.c:1545 command.c:1565 command.c:2196 command.c:2199 command.c:2202 +#: command.c:2208 command.c:2210 command.c:2218 command.c:2228 command.c:2237 +#: command.c:2251 command.c:2268 command.c:2327 common.c:74 copy.c:333 +#: copy.c:393 copy.c:408 psqlscan.l:1700 psqlscan.l:1711 psqlscan.l:1721 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" -#: command.c:1509 +#: command.c:1656 #, c-format msgid "+ opt(%d) = |%s|\n" msgstr "+ opt(%d) = |%s|\n" @@ -319,7 +334,7 @@ msgstr "+ opt(%d) = |%s|\n" # command.c:939 # startup.c:187 # startup.c:205 -#: command.c:1535 startup.c:184 +#: command.c:1682 startup.c:195 msgid "Password: " msgstr "口令:" @@ -327,12 +342,12 @@ msgstr "口令:" # command.c:939 # startup.c:187 # startup.c:205 -#: command.c:1540 startup.c:186 +#: command.c:1687 startup.c:197 #, c-format msgid "Password for user %s: " msgstr "用户 %s 的口令:" -#: command.c:1585 +#: command.c:1734 #, c-format msgid "" "All connection parameters must be supplied because no database connection " @@ -344,88 +359,87 @@ msgstr "没有可用的数据库连接,所以必须提供所有的连接参数 # common.c:605 # common.c:660 # common.c:903 -#: command.c:1671 command.c:3012 common.c:120 common.c:413 common.c:478 -#: common.c:929 common.c:954 common.c:1051 copy.c:492 copy.c:695 -#: large_obj.c:158 large_obj.c:193 large_obj.c:255 psqlscan.l:1949 +#: command.c:1852 command.c:3466 common.c:120 common.c:413 common.c:1005 +#: common.c:1030 common.c:1130 copy.c:492 copy.c:702 large_obj.c:156 +#: large_obj.c:191 large_obj.c:253 psqlscan.l:1972 #, c-format msgid "%s" msgstr "%s" # command.c:957 -#: command.c:1675 +#: command.c:1856 #, c-format msgid "Previous connection kept\n" -msgstr "保留上一次连线\n" +msgstr "保留上一次连接\n" # command.c:969 -#: command.c:1679 +#: command.c:1860 #, c-format msgid "\\connect: %s" -msgstr "\\连线:%s" +msgstr "\\连接:%s" # command.c:981 -#: command.c:1712 +#: command.c:1894 #, 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" +"您现在已经连接到数据库 \"%s\", 用户名 \"%s\" , 套接字 \"%s\", 端口号 \"%s" "\".\n" # command.c:981 -#: command.c:1715 +#: command.c:1897 #, 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" +"您现在已经连接到数据库 \"%s\", 用户 \"%s\",主机 \"%s\",端口号 \"%s\".\n" # command.c:981 -#: command.c:1719 +#: command.c:1901 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" -msgstr "您现在已经连线到数据库 \"%s\",用户 \"%s\".\n" +msgstr "您现在已经连接到数据库 \"%s\",用户 \"%s\".\n" -#: command.c:1753 +#: command.c:1935 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, 服务器 %s)\n" -#: command.c:1761 +#: command.c:1943 #, c-format msgid "" "WARNING: %s major version %d.%d, server major version %d.%d.\n" " Some psql features might not work.\n" msgstr "" "警告:%s 主版本%d.%d,服务器主版本为%d.%d.\n" -" 一些psql功能可能无法工作.\n" +" 一些psql功能可能无法正常使用。\n" # startup.c:652 -#: command.c:1791 -#, c-format -#| msgid "SSL connection (cipher: %s, bits: %d)\n" -msgid "SSL connection (protocol: %s, cipher: %s, bits: %d, compression: %s)\n" +#: command.c:1977 +#, fuzzy, c-format +msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "SSL连接 (协议: %s, 加密:%s,二进制位: %d, 压缩比: %s)\n" +#: command.c:1978 command.c:1979 command.c:1980 +#, fuzzy +#| msgid "[unknown]" +msgid "unknown" +msgstr "[未知]" + # help.c:48 -#: command.c:1793 help.c:46 +#: command.c:1981 help.c:46 msgid "off" msgstr "关闭" # help.c:48 -#: command.c:1793 help.c:46 +#: command.c:1981 help.c:46 msgid "on" msgstr "开启" -# startup.c:652 -#: command.c:1802 -#, c-format -msgid "SSL connection (unknown cipher)\n" -msgstr "SSL连接 (未知加密)\n" - -#: command.c:1823 +#: command.c:2001 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -433,10 +447,10 @@ msgid "" " page \"Notes for Windows users\" for details.\n" msgstr "" "警告:来自 Windows 代码页 (%u) 的控制台代码页 (%u) 的差异\n" -" 8-bit 字元可能无法正常工作。查阅 psql 参考\n" +" 8-bit 字符可能无法正常工作。请查阅 psql 参考\n" " 页 \"Windows 用户注意事项\" 的详细说明。\n" -#: command.c:1907 +#: command.c:2085 #, c-format msgid "" "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a " @@ -444,257 +458,285 @@ msgid "" msgstr "必须设置环境变量 PSQL_EDITOR_LINENUMBER_ARG,用于指定行号\n" # command.c:1103 -#: command.c:1936 +#: command.c:2114 #, c-format msgid "could not start editor \"%s\"\n" msgstr "无法启动编辑器 \"%s\"\n" # command.c:1105 -#: command.c:1938 +#: command.c:2116 #, c-format msgid "could not start /bin/sh\n" msgstr "无法启动 /bin/sh\n" # command.c:1148 -#: command.c:1976 +#: command.c:2154 #, c-format msgid "could not locate temporary directory: %s\n" -msgstr "找不到暂存目录:%s\n" +msgstr "找不到临时目录:%s\n" # command.c:1148 -#: command.c:2003 +#: command.c:2181 #, c-format msgid "could not open temporary file \"%s\": %s\n" -msgstr "无法开启暂存档 \"%s\": %s\n" +msgstr "无法打开临时文件 \"%s\": %s\n" # command.c:1340 -#: command.c:2271 -#, c-format +#: command.c:2489 +#, fuzzy, c-format msgid "" -"\\pset: allowed formats are unaligned, aligned, wrapped, html, latex, troff-" -"ms\n" +"\\pset: allowed formats are unaligned, aligned, wrapped, html, asciidoc, " +"latex, latex-longtable, troff-ms\n" msgstr "" "\\pset:可以使用的格式有unaligned, aligned, wrapped, html, latex, troff-ms\n" -#: command.c:2290 +#: command.c:2508 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode\n" msgstr "\\pset: 所允许使用的文本风格是ASCII, OLD-ASCII, UNICODE\n" +#: command.c:2522 +#, fuzzy, c-format +msgid "\\pset: allowed unicode border linestyle are single, double\n" +msgstr "\\pset: 所允许使用的文本风格是ASCII, OLD-ASCII, UNICODE\n" + +#: command.c:2535 +#, fuzzy, c-format +msgid "\\pset: allowed unicode column linestyle are single, double\n" +msgstr "\\pset: 所允许使用的文本风格是ASCII, OLD-ASCII, UNICODE\n" + +#: command.c:2548 +#, fuzzy, c-format +msgid "\\pset: allowed unicode header linestyle are single, double\n" +msgstr "\\pset: 所允许使用的文本风格是ASCII, OLD-ASCII, UNICODE\n" + # command.c:1493 -#: command.c:2432 command.c:2583 +#: command.c:2700 command.c:2877 #, c-format msgid "\\pset: unknown option: %s\n" msgstr "\\pset: 不明选项: %s\n" # command.c:1355 -#: command.c:2450 +#: command.c:2718 #, c-format msgid "Border style is %d.\n" -msgstr "边界风格是 %d。\n" +msgstr "边缘风格是 %d。\n" -#: command.c:2456 +#: command.c:2724 #, c-format -#| msgid "Target width is %d.\n" msgid "Target width is unset.\n" msgstr "目标宽度未设置.\n" -#: command.c:2458 +#: command.c:2726 #, c-format msgid "Target width is %d.\n" msgstr "目标宽度为 %d.\n" # command.c:1364 -#: command.c:2465 +#: command.c:2733 #, c-format msgid "Expanded display is on.\n" msgstr "扩展显示已打开。\n" # command.c:1364 -#: command.c:2467 +#: command.c:2735 #, c-format msgid "Expanded display is used automatically.\n" msgstr "扩展显示已自动打开。\n" # command.c:1365 -#: command.c:2469 +#: command.c:2737 #, c-format msgid "Expanded display is off.\n" msgstr "扩展显示已关闭。\n" # command.c:1389 -#: command.c:2476 command.c:2484 +#: command.c:2744 command.c:2752 #, c-format msgid "Field separator is zero byte.\n" msgstr "栏位分隔符号是0字节\n" # command.c:1389 -#: command.c:2478 +#: command.c:2746 #, c-format msgid "Field separator is \"%s\".\n" msgstr "栏位分隔符号是 \"%s\"。\n" # command.c:1485 -#: command.c:2491 +#: command.c:2759 #, c-format -#| msgid "Default footer is on." msgid "Default footer is on.\n" -msgstr "打开预设步进器(Footer).\n" +msgstr "打开默认步进器。\n" # command.c:1487 -#: command.c:2493 +#: command.c:2761 #, c-format -#| msgid "Default footer is off." msgid "Default footer is off.\n" -msgstr "关闭预设步进器(Footer)。\n" +msgstr "关闭默认步进器。\n" # command.c:1345 -#: command.c:2499 +#: command.c:2767 #, c-format msgid "Output format is %s.\n" msgstr "输出格式是 %s。\n" # command.c:1355 -#: command.c:2505 +#: command.c:2773 #, c-format msgid "Line style is %s.\n" msgstr "文本的风格是%s. \n" # command.c:1377 -#: command.c:2512 +#: command.c:2780 #, c-format msgid "Null display is \"%s\".\n" msgstr " \"%s\" 是空值显示。\n" -#: command.c:2520 +#: command.c:2788 #, c-format -#| msgid "Locale-adjusted numeric output is off." msgid "Locale-adjusted numeric output is on.\n" -msgstr "语言环境调整后的数值输出开启。\n" +msgstr "启动语言环境调整后的数值输出。\n" -#: command.c:2522 +#: command.c:2790 #, c-format -#| msgid "Locale-adjusted numeric output is off." msgid "Locale-adjusted numeric output is off.\n" -msgstr "语言环境调整后的数值输出关闭。\n" +msgstr "关闭语言环境调整后的数值输出。\n" # command.c:1470 -#: command.c:2529 +#: command.c:2797 #, c-format -#| msgid "Pager is used for long output." msgid "Pager is used for long output.\n" -msgstr "显示大量资料时使用分页器。\n" +msgstr "显示大量数据时使用分页器。\n" # command.c:1472 -#: command.c:2531 +#: command.c:2799 #, c-format -#| msgid "Pager is always used." msgid "Pager is always used.\n" msgstr "总是使用分页器。\n" # command.c:1474 -#: command.c:2533 +#: command.c:2801 #, c-format -#| msgid "Pager usage is off." msgid "Pager usage is off.\n" msgstr "不使用分页器。\n" +#: command.c:2807 +#, c-format +msgid "Pager won't be used for less than %d lines\n" +msgstr "" + # command.c:1405 -#: command.c:2540 command.c:2550 +#: command.c:2815 command.c:2825 #, c-format msgid "Record separator is zero byte.\n" msgstr "记录分隔符号是 0字节。\n" # command.c:1403 -#: command.c:2542 +#: command.c:2817 #, c-format -#| msgid "Record separator is ." msgid "Record separator is .\n" msgstr "记录分隔符号是 。\n" # command.c:1405 -#: command.c:2544 +#: command.c:2819 #, c-format msgid "Record separator is \"%s\".\n" msgstr "记录分隔符号是 \"%s\"。\n" # command.c:1452 -#: command.c:2557 +#: command.c:2832 #, c-format -#| msgid "Table attribute is \"%s\".\n" msgid "Table attributes are \"%s\".\n" msgstr "表属性是 \"%s\".\n" # command.c:1454 -#: command.c:2560 +#: command.c:2835 #, c-format msgid "Table attributes unset.\n" -msgstr "未设置资料表属性。\n" +msgstr "未设置数据表属性。\n" # command.c:1434 -#: command.c:2567 +#: command.c:2842 #, c-format msgid "Title is \"%s\".\n" msgstr "标题是 \"%s\"。\n" # command.c:1436 -#: command.c:2569 +#: command.c:2844 #, c-format msgid "Title is unset.\n" msgstr "无标题。\n" # command.c:1418 -#: command.c:2576 +#: command.c:2851 #, c-format -#| msgid "Tuples only is off." msgid "Tuples only is on.\n" -msgstr "开启只显示 Tuples。\n" +msgstr "开启只显示元组。\n" # command.c:1418 -#: command.c:2578 +#: command.c:2853 #, c-format -#| msgid "Tuples only is off." msgid "Tuples only is off.\n" -msgstr "关闭只显示 Tuples。\n" +msgstr "关闭只显示元组。\n" + +# command.c:1355 +#: command.c:2859 command.c:2871 +#, fuzzy, c-format +msgid "Unicode border linestyle is \"%s\".\n" +msgstr "边缘风格是 %d。\n" + +# command.c:1355 +#: command.c:2865 +#, fuzzy, c-format +msgid "Unicode column linestyle is \"%s\".\n" +msgstr "文本的风格是%s. \n" # command.c:1532 -#: command.c:2729 +#: command.c:3031 #, c-format msgid "\\!: failed\n" msgstr "\\!:失败\n" -#: command.c:2749 command.c:2808 +#: command.c:3051 common.c:548 #, c-format msgid "\\watch cannot be used with an empty query\n" msgstr "\\watch命令不能用于空查询\n" -#: command.c:2771 +#: command.c:3072 #, c-format msgid "Watch every %lds\t%s" msgstr "Watch命令每%lds\t%s调用一次" -#: command.c:2815 +#: command.c:3123 command.c:3130 common.c:448 common.c:455 common.c:988 #, c-format -msgid "\\watch cannot be used with COPY\n" -msgstr "\\watch不能用于COPY命令中\n" +msgid "" +"********* QUERY **********\n" +"%s\n" +"**************************\n" +"\n" +msgstr "" +"********* 查询 **********\n" +"%s\n" +"**************************\n" +"\n" -# fe-exec.c:1371 -#: command.c:2821 -#, c-format -msgid "unexpected result status for \\watch\n" -msgstr "\\Watch出现意外的结果状态\n" +#: command.c:3281 +#, fuzzy, c-format +#| msgid "\"%s\" is not a view" +msgid "%s.%s is not a view\n" +msgstr "\"%s\" 不是一个视图" # common.c:298 #: common.c:287 #, c-format msgid "connection to server was lost\n" -msgstr "与资料库的连线遗失\n" +msgstr "与数据库的连接已经断开\n" # common.c:302 #: common.c:291 #, c-format msgid "The connection to the server was lost. Attempting reset: " -msgstr "与伺服器的连线已遗失,尝试重置: " +msgstr "与服务器的连接已断开,正在试图重置: " # common.c:307 #: common.c:296 @@ -709,26 +751,30 @@ msgid "Succeeded.\n" msgstr "完成。\n" # fe-exec.c:1371 -#: common.c:403 common.c:683 common.c:851 +#: common.c:403 common.c:759 common.c:927 #, c-format msgid "unexpected PQresultStatus: %d\n" msgstr "意外的 PQresultStatus: %d\n" -#: common.c:452 common.c:459 common.c:912 +#: common.c:555 #, c-format -msgid "" -"********* QUERY **********\n" -"%s\n" -"**************************\n" -"\n" -msgstr "" -"********* 查询 **********\n" -"%s\n" -"**************************\n" -"\n" +msgid "\\watch cannot be used with COPY\n" +msgstr "\\watch不能用于COPY命令中\n" + +# fe-exec.c:1371 +#: common.c:560 +#, c-format +msgid "unexpected result status for \\watch\n" +msgstr "\\Watch出现意外的结果状态\n" + +# common.c:930 +#: common.c:571 common.c:1146 +#, c-format +msgid "Time: %.3f ms\n" +msgstr "时间:%.3f ms\n" # common.c:691 -#: common.c:513 +#: common.c:589 #, c-format msgid "" "Asynchronous notification \"%s\" with payload \"%s\" received from server " @@ -737,63 +783,62 @@ msgstr "" "从PID为%3$d的服务器进程接收到带有字节流量\"%2$s\"的异步通知消息\"%1$s\".\n" # common.c:691 -#: common.c:516 +#: common.c:592 #, c-format msgid "" "Asynchronous notification \"%s\" received from server process with PID %d.\n" -msgstr "收到来自伺服器 \"%s\" 进程 PID %d 非同步通知。\n" +msgstr "收到来自服务器 \"%s\" 进程 PID %d 非同步通知。\n" -#: common.c:578 +#: common.c:654 #, c-format msgid "no rows returned for \\gset\n" msgstr "\\gset没有记录行返回\n" -#: common.c:583 +#: common.c:659 #, c-format msgid "more than one row returned for \\gset\n" msgstr "\\gset返回超过1个记录行\n" # startup.c:502 -#: common.c:609 +#: common.c:685 #, c-format msgid "could not set variable \"%s\"\n" -msgstr "无法设定变量 \"%s\"\n" +msgstr "无法设置变量 \"%s\"\n" # common.c:879 -#: common.c:894 +#: common.c:970 #, c-format msgid "" -"***(Single step mode: verify command)" -"*******************************************\n" +"***(Single step mode: verify " +"command)*******************************************\n" "%s\n" -"***(press return to proceed or enter x and return to cancel)" -"********************\n" +"***(press return to proceed or enter x and return to " +"cancel)********************\n" msgstr "" -"***(单步(Single step)模式:验证命令)" -"*******************************************\n" +"***(单步模式:验证命令)*******************************************\n" "%s\n" "***(按 Enter 键继续或键入 x 来取消)********************\n" # describe.c:117 -#: common.c:945 +#: common.c:1021 #, c-format msgid "" "The server (version %d.%d) does not support savepoints for " "ON_ERROR_ROLLBACK.\n" msgstr "服务器(版本 %d.%d)不支持保存点(Savepoint)ON_ERROR_ROLLBACK。\n" +#: common.c:1075 +#, fuzzy, c-format +#| msgid "STATEMENT: " +msgid "STATEMENT: %s\n" +msgstr "语句: " + # large_obj.c:58 -#: common.c:1039 +#: common.c:1118 #, c-format msgid "unexpected transaction status (%d)\n" msgstr "意外的事务状态值 (%d)\n" -# common.c:930 -#: common.c:1067 -#, c-format -msgid "Time: %.3f ms\n" -msgstr "时间:%.3f ms\n" - # copy.c:122 #: copy.c:98 #, c-format @@ -819,9 +864,8 @@ msgstr "无法执行命令 \"%s\": %s\n" #: copy.c:346 #, c-format -#| msgid "could not stat file \"%s\": %m" msgid "could not stat file \"%s\": %s\n" -msgstr "无法取文件 \"%s\":%s 的状态\n" +msgstr "无法获取文件 \"%s\":%s 的状态\n" # copy.c:541 #: copy.c:350 @@ -838,31 +882,31 @@ msgstr "无法为外部命令: %s关闭管道\n" #: copy.c:455 copy.c:466 #, c-format msgid "could not write COPY data: %s\n" -msgstr "无法写入 COPY 资料:%s\n" +msgstr "无法写入 COPY 数据:%s\n" #: copy.c:473 #, c-format msgid "COPY data transfer failed: %s" -msgstr "COPY 资料转换失败:%s" +msgstr "COPY 数据转换失败:%s" #: copy.c:534 msgid "canceled by user" msgstr "依用户取消" # copy.c:668 -#: copy.c:544 +#: copy.c:545 msgid "" "Enter data to be copied followed by a newline.\n" "End with a backslash and a period on a line by itself." msgstr "" -"输入要复制的资料并且换行。\n" +"输入要复制的数据并且换行。\n" "在独立的一行上输入一个反斜线和一个句点结束。" -#: copy.c:667 +#: copy.c:674 msgid "aborted because of read failure" msgstr "因读取失败已被中止" -#: copy.c:691 +#: copy.c:698 msgid "trying to exit copy mode" msgstr "正在尝试退出" @@ -875,11 +919,11 @@ msgstr "正在尝试退出" # describe.c:1476 # describe.c:1585 # describe.c:1633 -#: describe.c:71 describe.c:259 describe.c:491 describe.c:615 describe.c:758 -#: describe.c:844 describe.c:914 describe.c:2759 describe.c:2964 -#: describe.c:3054 describe.c:3299 describe.c:3436 describe.c:3665 -#: describe.c:3737 describe.c:3748 describe.c:3807 describe.c:4215 -#: describe.c:4294 +#: describe.c:71 describe.c:264 describe.c:496 describe.c:626 describe.c:769 +#: describe.c:886 describe.c:956 describe.c:2921 describe.c:3126 +#: describe.c:3216 describe.c:3461 describe.c:3598 describe.c:3827 +#: describe.c:3899 describe.c:3910 describe.c:3969 describe.c:4377 +#: describe.c:4456 msgid "Schema" msgstr "架构模式" @@ -895,25 +939,25 @@ msgstr "架构模式" # describe.c:1586 # describe.c:1634 # describe.c:1727 -#: describe.c:72 describe.c:156 describe.c:164 describe.c:260 describe.c:492 -#: describe.c:616 describe.c:677 describe.c:759 describe.c:915 describe.c:2760 -#: describe.c:2886 describe.c:2965 describe.c:3055 describe.c:3134 -#: describe.c:3300 describe.c:3364 describe.c:3437 describe.c:3666 -#: describe.c:3738 describe.c:3749 describe.c:3808 describe.c:3997 -#: describe.c:4078 describe.c:4292 +#: describe.c:72 describe.c:156 describe.c:164 describe.c:265 describe.c:497 +#: describe.c:627 describe.c:688 describe.c:770 describe.c:957 describe.c:2922 +#: describe.c:3048 describe.c:3127 describe.c:3217 describe.c:3296 +#: describe.c:3462 describe.c:3526 describe.c:3599 describe.c:3828 +#: describe.c:3900 describe.c:3911 describe.c:3970 describe.c:4159 +#: describe.c:4240 describe.c:4454 msgid "Name" msgstr "名称" # describe.c:177 -#: describe.c:73 describe.c:272 describe.c:318 describe.c:335 +#: describe.c:73 describe.c:277 describe.c:323 describe.c:340 msgid "Result data type" -msgstr "结果资料型别" +msgstr "结果数据类型" # describe.c:178 -#: describe.c:81 describe.c:94 describe.c:98 describe.c:273 describe.c:319 -#: describe.c:336 +#: describe.c:81 describe.c:94 describe.c:98 describe.c:278 describe.c:324 +#: describe.c:341 msgid "Argument data types" -msgstr "参数资料型别" +msgstr "参数数据类型" # describe.c:83 # describe.c:187 @@ -925,14 +969,14 @@ msgstr "参数资料型别" # describe.c:1488 # describe.c:1733 # large_obj.c:256 -#: describe.c:105 describe.c:182 describe.c:365 describe.c:534 describe.c:631 -#: describe.c:702 describe.c:917 describe.c:1486 describe.c:2564 -#: describe.c:2793 describe.c:2917 describe.c:2991 describe.c:3064 -#: describe.c:3147 describe.c:3215 describe.c:3307 describe.c:3373 -#: describe.c:3438 describe.c:3574 describe.c:3614 describe.c:3682 -#: describe.c:3741 describe.c:3750 describe.c:3809 describe.c:4023 -#: describe.c:4100 describe.c:4229 describe.c:4295 large_obj.c:291 -#: large_obj.c:301 +#: describe.c:105 describe.c:187 describe.c:370 describe.c:545 describe.c:642 +#: describe.c:713 describe.c:959 describe.c:1570 describe.c:2722 +#: describe.c:2955 describe.c:3079 describe.c:3153 describe.c:3226 +#: describe.c:3309 describe.c:3377 describe.c:3469 describe.c:3535 +#: describe.c:3600 describe.c:3736 describe.c:3776 describe.c:3844 +#: describe.c:3903 describe.c:3912 describe.c:3971 describe.c:4185 +#: describe.c:4262 describe.c:4391 describe.c:4457 large_obj.c:289 +#: large_obj.c:299 msgid "Description" msgstr "描述" @@ -952,9 +996,9 @@ msgstr "服务器(版本%d.%d) 不支持使用表空间.\n" # describe.c:362 # describe.c:1478 # describe.c:1727 -#: describe.c:157 describe.c:165 describe.c:362 describe.c:678 describe.c:843 -#: describe.c:2769 describe.c:2890 describe.c:3136 describe.c:3365 -#: describe.c:3998 describe.c:4079 large_obj.c:290 +#: describe.c:157 describe.c:165 describe.c:367 describe.c:535 describe.c:689 +#: describe.c:885 describe.c:2931 describe.c:3052 describe.c:3298 +#: describe.c:3527 describe.c:4160 describe.c:4241 large_obj.c:288 msgid "Owner" msgstr "拥有者" @@ -963,41 +1007,47 @@ msgstr "拥有者" msgid "Location" msgstr "所在地" -#: describe.c:177 describe.c:2382 +#: describe.c:177 describe.c:2535 msgid "Options" msgstr "选项" +# describe.c:257 +#: describe.c:182 describe.c:508 describe.c:705 describe.c:2947 +#: describe.c:2951 +msgid "Size" +msgstr "大小" + # describe.c:150 -#: describe.c:199 +#: describe.c:204 msgid "List of tablespaces" msgstr "表空间列表" -#: describe.c:236 +#: describe.c:241 #, c-format msgid "\\df only takes [antwS+] as options\n" msgstr "\\df 只能将 [antwS+]作为选项\n" -#: describe.c:242 +#: describe.c:247 #, c-format msgid "\\df does not take a \"w\" option with server version %d.%d\n" msgstr "\\df 不能有带着服务器版本%d.%d 的选项\"w\" \n" #. translator: "agg" is short for "aggregate" -#: describe.c:275 describe.c:321 describe.c:338 +#: describe.c:280 describe.c:326 describe.c:343 msgid "agg" msgstr "agg" -#: describe.c:276 +#: describe.c:281 msgid "window" msgstr "窗口" # describe.c:575 -#: describe.c:277 describe.c:322 describe.c:339 describe.c:1028 +#: describe.c:282 describe.c:327 describe.c:344 describe.c:1093 msgid "trigger" msgstr "触发器" # help.c:211 -#: describe.c:278 describe.c:323 describe.c:340 +#: describe.c:283 describe.c:328 describe.c:345 msgid "normal" msgstr "常规" @@ -1005,112 +1055,107 @@ msgstr "常规" # describe.c:745 # describe.c:1478 # describe.c:1587 -#: describe.c:279 describe.c:324 describe.c:341 describe.c:765 describe.c:853 -#: describe.c:1455 describe.c:2768 describe.c:2966 describe.c:4097 +#: describe.c:284 describe.c:329 describe.c:346 describe.c:776 describe.c:895 +#: describe.c:1539 describe.c:2930 describe.c:3128 describe.c:4259 msgid "Type" -msgstr "型别" +msgstr "类型" # sql_help.h:221 -#: describe.c:355 +#: describe.c:360 msgid "definer" msgstr "定义者" -#: describe.c:356 +#: describe.c:361 msgid "invoker" msgstr "调用者" -#: describe.c:357 +#: describe.c:362 msgid "Security" msgstr "安全" # describe.c:415 # describe.c:543 # describe.c:1477 -#: describe.c:358 +#: describe.c:363 msgid "immutable" -msgstr "不可改变" +msgstr "不可更改" # describe.c:415 # describe.c:543 # describe.c:1477 -#: describe.c:359 +#: describe.c:364 msgid "stable" msgstr "稳定" -#: describe.c:360 +#: describe.c:365 msgid "volatile" msgstr "不稳定性" -#: describe.c:361 +#: describe.c:366 msgid "Volatility" msgstr "挥发性" # describe.c:186 -#: describe.c:363 +#: describe.c:368 msgid "Language" msgstr "程序语言" # describe.c:187 -#: describe.c:364 +#: describe.c:369 msgid "Source code" msgstr "原始程式" # describe.c:221 -#: describe.c:462 +#: describe.c:467 msgid "List of functions" msgstr "函数列表" # describe.c:257 -#: describe.c:502 +#: describe.c:507 msgid "Internal name" msgstr "内部名称" -# describe.c:257 -#: describe.c:503 describe.c:694 describe.c:2785 describe.c:2789 -msgid "Size" -msgstr "大小" - -#: describe.c:524 +#: describe.c:529 msgid "Elements" msgstr "成员" # describe.c:289 -#: describe.c:574 +#: describe.c:585 msgid "List of data types" -msgstr "资料型别列表" +msgstr "数据类型列表" # describe.c:321 -#: describe.c:617 +#: describe.c:628 msgid "Left arg type" -msgstr "左参数型别" +msgstr "左参数类型" # describe.c:321 -#: describe.c:618 +#: describe.c:629 msgid "Right arg type" -msgstr "右参数型别" +msgstr "右参数类型" # describe.c:322 -#: describe.c:619 +#: describe.c:630 msgid "Result type" -msgstr "结果型别" +msgstr "结果类型" # describe.c:1691 -#: describe.c:624 describe.c:3206 describe.c:3573 +#: describe.c:635 describe.c:3368 describe.c:3735 msgid "Function" msgstr "函数" # describe.c:336 -#: describe.c:649 +#: describe.c:660 msgid "List of operators" msgstr "运算子列表" # describe.c:365 -#: describe.c:679 +#: describe.c:690 msgid "Encoding" msgstr "字元编码" # describe.c:128 -#: describe.c:684 describe.c:3301 +#: describe.c:695 describe.c:3463 msgid "Collate" msgstr "校对规则" @@ -1118,73 +1163,78 @@ msgstr "校对规则" # describe.c:745 # describe.c:1478 # describe.c:1587 -#: describe.c:685 describe.c:3302 +#: describe.c:696 describe.c:3464 msgid "Ctype" msgstr "Ctype" # describe.c:1342 -#: describe.c:698 +#: describe.c:709 msgid "Tablespace" msgstr "表空间" # describe.c:381 -#: describe.c:720 +#: describe.c:731 msgid "List of databases" -msgstr "资料库列表" +msgstr "数据库列表" # describe.c:415 # describe.c:543 # describe.c:1477 -#: describe.c:760 describe.c:846 describe.c:2761 +#: describe.c:771 describe.c:888 describe.c:2923 msgid "table" -msgstr "资料表" +msgstr "数据表" # describe.c:415 # describe.c:543 # describe.c:1477 -#: describe.c:761 describe.c:2762 +#: describe.c:772 describe.c:2924 msgid "view" -msgstr "视观表" +msgstr "视图" -#: describe.c:762 describe.c:2763 +#: describe.c:773 describe.c:2925 msgid "materialized view" msgstr "物化视图" # describe.c:415 # describe.c:543 # describe.c:1477 -#: describe.c:763 describe.c:848 describe.c:2765 +#: describe.c:774 describe.c:890 describe.c:2927 msgid "sequence" msgstr "序列数" # describe.c:415 # describe.c:543 # describe.c:1477 -#: describe.c:764 describe.c:2767 +#: describe.c:775 describe.c:2929 msgid "foreign table" msgstr "所引用的外表" # sql_help.h:325 -#: describe.c:776 -msgid "Column access privileges" +#: describe.c:787 +#, fuzzy +msgid "Column privileges" msgstr "列访问权限" +#: describe.c:818 +msgid "Policies" +msgstr "" + # describe.c:133 # describe.c:415 # describe.c:1733 -#: describe.c:802 describe.c:4439 describe.c:4443 +#: describe.c:844 describe.c:4601 describe.c:4605 msgid "Access privileges" msgstr "存取权限" # describe.c:117 -#: describe.c:831 +#: describe.c:873 #, c-format msgid "" "The server (version %d.%d) does not support altering default privileges.\n" -msgstr "服务器(版本%d.%d)不支持修改缺省权限.\n" +msgstr "服务器(版本%d.%d)不支持修改默认权限.\n" # describe.c:498 -#: describe.c:850 +#: describe.c:892 msgid "function" msgstr "函数" @@ -1192,328 +1242,342 @@ msgstr "函数" # describe.c:745 # describe.c:1478 # describe.c:1587 -#: describe.c:852 +#: describe.c:894 msgid "type" msgstr "类型Ctype" # sql_help.h:325 -#: describe.c:876 +#: describe.c:918 msgid "Default access privileges" -msgstr "缺省的访问权限" +msgstr "默认的访问权限" # describe.c:469 -#: describe.c:916 +#: describe.c:958 msgid "Object" -msgstr "物件" +msgstr "对象" -#: describe.c:930 sql_help.c:1595 -msgid "constraint" -msgstr "约束" +#: describe.c:972 +#, fuzzy +msgid "table constraint" +msgstr "表约束" + +#: describe.c:994 +#, fuzzy +msgid "domain constraint" +msgstr "域_约束" -#: describe.c:957 +#: describe.c:1022 msgid "operator class" msgstr "操作符类" # sql_help.h:269 -#: describe.c:986 +#: describe.c:1051 msgid "operator family" msgstr "操作符家族" # describe.c:559 -#: describe.c:1008 +#: describe.c:1073 msgid "rule" msgstr "规则" # describe.c:593 -#: describe.c:1050 +#: describe.c:1115 msgid "Object descriptions" -msgstr "物件描述" +msgstr "对象描述" # describe.c:641 -#: describe.c:1104 +#: describe.c:1169 #, c-format msgid "Did not find any relation named \"%s\".\n" msgstr "没有找到任何名称为 \"%s\" 的关联。\n" # describe.c:728 -#: describe.c:1295 +#: describe.c:1378 #, c-format msgid "Did not find any relation with OID %s.\n" msgstr "没有找到任何OID为 %s 的关联。\n" # describe.c:933 -#: describe.c:1399 +#: describe.c:1483 #, c-format msgid "Unlogged table \"%s.%s\"" msgstr "不记录日志的表 \"%s.%s\"" # describe.c:859 -#: describe.c:1402 +#: describe.c:1486 #, c-format msgid "Table \"%s.%s\"" -msgstr "资料表 \"%s.%s\"" +msgstr "数据表 \"%s.%s\"" # describe.c:863 -#: describe.c:1406 +#: describe.c:1490 #, c-format msgid "View \"%s.%s\"" -msgstr "视观表 \"%s.%s\"" +msgstr "视图 \"%s.%s\"" # describe.c:933 -#: describe.c:1411 +#: describe.c:1495 #, c-format msgid "Unlogged materialized view \"%s.%s\"" msgstr "不记录日志的物化视图 \"%s.%s\"" -#: describe.c:1414 +#: describe.c:1498 #, c-format msgid "Materialized view \"%s.%s\"" msgstr "物化视图 \"%s.%s\"" # describe.c:867 -#: describe.c:1418 +#: describe.c:1502 #, c-format msgid "Sequence \"%s.%s\"" msgstr "序列数 \"%s.%s\"" # describe.c:871 -#: describe.c:1423 +#: describe.c:1507 #, c-format msgid "Unlogged index \"%s.%s\"" msgstr "不记录日志的索引 \"%s.%s\"" # describe.c:871 -#: describe.c:1426 +#: describe.c:1510 #, c-format msgid "Index \"%s.%s\"" msgstr "索引 \"%s.%s\"" # describe.c:875 -#: describe.c:1431 +#: describe.c:1515 #, c-format msgid "Special relation \"%s.%s\"" msgstr "特殊关联 \"%s.%s\"" # describe.c:879 -#: describe.c:1435 +#: describe.c:1519 #, c-format msgid "TOAST table \"%s.%s\"" -msgstr "TOAST 资料表 \"%s.%s\"" +msgstr "TOAST 数据表 \"%s.%s\"" # describe.c:883 -#: describe.c:1439 +#: describe.c:1523 #, c-format msgid "Composite type \"%s.%s\"" -msgstr "合成型别 \"%s.%s\"" +msgstr "合成类型 \"%s.%s\"" # describe.c:933 -#: describe.c:1443 +#: describe.c:1527 #, c-format msgid "Foreign table \"%s.%s\"" msgstr "引用的外部表 \"%s.%s\"" # describe.c:744 -#: describe.c:1454 +#: describe.c:1538 msgid "Column" msgstr "栏位" # describe.c:752 -#: describe.c:1463 +#: describe.c:1547 msgid "Modifiers" msgstr "修饰词" # describe.c:415 # describe.c:543 # describe.c:1477 -#: describe.c:1468 +#: describe.c:1552 msgid "Value" msgstr "值" # describe.c:1636 -#: describe.c:1471 +#: describe.c:1555 msgid "Definition" msgstr "定义" -#: describe.c:1474 describe.c:4018 describe.c:4099 describe.c:4167 -#: describe.c:4228 +#: describe.c:1558 describe.c:4180 describe.c:4261 describe.c:4329 +#: describe.c:4390 msgid "FDW Options" msgstr "FDW选项" # describe.c:1635 -#: describe.c:1478 +#: describe.c:1562 msgid "Storage" msgstr "存储" -#: describe.c:1481 +#: describe.c:1565 msgid "Stats target" msgstr "统计目标" -#: describe.c:1531 +#: describe.c:1615 #, c-format msgid "collate %s" msgstr "校对%s" -#: describe.c:1539 +#: describe.c:1623 msgid "not null" msgstr "非空" # describe.c:1639 #. translator: default values of column definitions -#: describe.c:1549 +#: describe.c:1633 #, c-format msgid "default %s" -msgstr "缺省 %s" +msgstr "默认 %s" # describe.c:925 -#: describe.c:1664 +#: describe.c:1748 msgid "primary key, " msgstr "主键(PK)," # describe.c:927 -#: describe.c:1666 +#: describe.c:1750 msgid "unique, " msgstr "唯一的," # describe.c:933 -#: describe.c:1672 +#: describe.c:1756 #, c-format msgid "for table \"%s.%s\"" -msgstr "给资料表 \"%s.%s\"" +msgstr "给数据表 \"%s.%s\"" # describe.c:937 -#: describe.c:1676 +#: describe.c:1760 #, c-format msgid ", predicate (%s)" msgstr ", 叙述 (%s)" # describe.c:940 -#: describe.c:1679 +#: describe.c:1763 msgid ", clustered" msgstr ", 已丛集" -#: describe.c:1682 +#: describe.c:1766 msgid ", invalid" msgstr ", 无效的" -#: describe.c:1685 +#: describe.c:1769 msgid ", deferrable" msgstr ",可延迟" -#: describe.c:1688 +#: describe.c:1772 msgid ", initially deferred" msgstr ",开始被延迟" -#: describe.c:1691 +#: describe.c:1775 msgid ", replica identity" msgstr ",复制标识" -#: describe.c:1726 +#: describe.c:1810 #, c-format msgid "Owned by: %s" msgstr "属于: %s" # describe.c:1138 -#: describe.c:1786 +#: describe.c:1870 msgid "Indexes:" msgstr "索引:" # describe.c:1174 -#: describe.c:1870 +#: describe.c:1954 msgid "Check constraints:" msgstr "检查约束限制" # describe.c:1189 -#: describe.c:1901 +#: describe.c:1985 msgid "Foreign-key constraints:" msgstr "外部键(FK)限制:" -#: describe.c:1932 +#: describe.c:2016 msgid "Referenced by:" msgstr "由引用:" +#: describe.c:2061 +msgid "Policies:" +msgstr "" + +#: describe.c:2064 +msgid "Policies (Row Security Enabled): (None)" +msgstr "" + +#: describe.c:2067 +msgid "Policies (Row Security Disabled):" +msgstr "" + # describe.c:983 # describe.c:1204 -#: describe.c:2014 describe.c:2064 +#: describe.c:2167 describe.c:2217 msgid "Rules:" msgstr "规则:" -#: describe.c:2017 +#: describe.c:2170 msgid "Disabled rules:" msgstr "已停用规则:" -#: describe.c:2020 +#: describe.c:2173 msgid "Rules firing always:" msgstr "永远触发规则" -#: describe.c:2023 +#: describe.c:2176 msgid "Rules firing on replica only:" msgstr "只有在复制时触发规则:" # describe.c:977 -#: describe.c:2047 +#: describe.c:2200 msgid "View definition:" msgstr "视图定义:" # describe.c:1223 -#: describe.c:2182 +#: describe.c:2335 msgid "Triggers:" msgstr "触发器:" -#: describe.c:2186 -#| msgid "Disabled triggers:" +#: describe.c:2339 msgid "Disabled user triggers:" msgstr "禁用用户触发器:" -#: describe.c:2188 +#: describe.c:2341 msgid "Disabled triggers:" msgstr "停用触发器:" -#: describe.c:2191 -#| msgid "Disabled triggers:" +#: describe.c:2344 msgid "Disabled internal triggers:" msgstr "禁用内部触发器:" -#: describe.c:2194 +#: describe.c:2347 msgid "Triggers firing always:" msgstr "永远激活触发器" -#: describe.c:2197 +#: describe.c:2350 msgid "Triggers firing on replica only:" msgstr "只有在复制时激活触发器" # describe.c:1245 -#: describe.c:2276 +#: describe.c:2429 msgid "Inherits" msgstr "继承" -#: describe.c:2315 +#: describe.c:2468 #, c-format msgid "Number of child tables: %d (Use \\d+ to list them.)" msgstr "子表的数量:%d(可以使用 \\d+ 来列出它们)" -#: describe.c:2322 +#: describe.c:2475 msgid "Child tables" msgstr "子表" -#: describe.c:2344 +#: describe.c:2497 #, c-format msgid "Typed table of type: %s" msgstr "类型的已确定类型表(typed table):%s" # describe.c:1636 -#: describe.c:2358 -#| msgid "Replication" +#: describe.c:2511 msgid "Replica Identity" msgstr "复制标识" # describe.c:1259 -#: describe.c:2371 -#| msgid "Has OIDs" +#: describe.c:2524 msgid "Has OIDs: yes" msgstr "有 OIDs:yes" # describe.c:1342 -#: describe.c:2460 +#: describe.c:2613 #, c-format msgid "Tablespace: \"%s\"" msgstr "表空间:\"%s\"" @@ -1521,432 +1585,430 @@ msgstr "表空间:\"%s\"" # describe.c:1342 #. translator: before this string there's an index description like #. '"foo_pkey" PRIMARY KEY, btree (a)' -#: describe.c:2472 +#: describe.c:2625 #, c-format msgid ", tablespace \"%s\"" msgstr ", 表空间 \"%s\"" # describe.c:1431 -#: describe.c:2557 +#: describe.c:2715 msgid "List of roles" msgstr "角色列表" # describe.c:1375 -#: describe.c:2559 +#: describe.c:2717 msgid "Role name" msgstr "角色名称" -#: describe.c:2560 +#: describe.c:2718 msgid "Attributes" msgstr "属性" -#: describe.c:2561 +#: describe.c:2719 msgid "Member of" msgstr "成员属于" # describe.c:1377 -#: describe.c:2572 +#: describe.c:2730 msgid "Superuser" msgstr "超级用户" -#: describe.c:2575 +#: describe.c:2733 msgid "No inheritance" msgstr "没有继承" -#: describe.c:2578 +#: describe.c:2736 msgid "Create role" msgstr "建立角色" -#: describe.c:2581 +#: describe.c:2739 msgid "Create DB" msgstr "建立 DB" -#: describe.c:2584 +#: describe.c:2742 msgid "Cannot login" msgstr "无法登录" # describe.c:1636 -#: describe.c:2588 +#: describe.c:2746 msgid "Replication" msgstr "复制" +#: describe.c:2750 +msgid "Bypass RLS" +msgstr "" + # help.c:123 -#: describe.c:2597 +#: describe.c:2759 msgid "No connections" msgstr "没有连接" # help.c:123 -#: describe.c:2599 +#: describe.c:2761 #, c-format msgid "%d connection" msgid_plural "%d connections" msgstr[0] "%d个连接" -#: describe.c:2609 +#: describe.c:2771 msgid "Password valid until " msgstr "密码有效直至" # describe.c:1375 -#: describe.c:2665 -#| msgid "Role name" +#: describe.c:2827 msgid "Role" msgstr "角色" -#: describe.c:2666 +#: describe.c:2828 msgid "Database" msgstr "数据库" -#: describe.c:2667 +#: describe.c:2829 msgid "Settings" msgstr "设置" -#: describe.c:2677 +#: describe.c:2839 #, c-format msgid "No per-database role settings support in this server version.\n" msgstr "在这个版本的服务器中不支持对每个数据库的角色进行设定.\n" # describe.c:1542 -#: describe.c:2688 +#: describe.c:2850 #, c-format msgid "No matching settings found.\n" msgstr "没有找到所匹配的设置.\n" # describe.c:1544 -#: describe.c:2690 +#: describe.c:2852 #, c-format msgid "No settings found.\n" msgstr "没有找到设置.\n" # describe.c:1549 -#: describe.c:2695 +#: describe.c:2857 msgid "List of settings" msgstr "设置的列表" # describe.c:543 # describe.c:1477 -#: describe.c:2764 +#: describe.c:2926 msgid "index" msgstr "索引" # describe.c:1478 -#: describe.c:2766 +#: describe.c:2928 msgid "special" msgstr "特殊" # describe.c:1483 -#: describe.c:2774 describe.c:4216 +#: describe.c:2936 describe.c:4378 msgid "Table" -msgstr "资料表" +msgstr "数据表" # describe.c:1542 -#: describe.c:2850 +#: describe.c:3012 #, c-format msgid "No matching relations found.\n" msgstr "没有找到符合的关联。\n" # describe.c:1544 -#: describe.c:2852 +#: describe.c:3014 #, c-format msgid "No relations found.\n" msgstr "找不到关联。\n" # describe.c:1549 -#: describe.c:2857 +#: describe.c:3019 msgid "List of relations" msgstr "关联列表" -#: describe.c:2894 +#: describe.c:3056 msgid "Trusted" msgstr "信任" # describe.c:257 -#: describe.c:2902 +#: describe.c:3064 msgid "Internal Language" msgstr "内部语言" -#: describe.c:2903 +#: describe.c:3065 msgid "Call Handler" msgstr "调用函数" -#: describe.c:2904 describe.c:4005 +#: describe.c:3066 describe.c:4167 msgid "Validator" msgstr "验证" -#: describe.c:2907 +#: describe.c:3069 msgid "Inline Handler" msgstr "内联函数" # describe.c:1431 -#: describe.c:2935 +#: describe.c:3097 msgid "List of languages" msgstr "语言列表" # describe.c:1588 -#: describe.c:2979 +#: describe.c:3141 msgid "Modifier" msgstr "修饰词" -#: describe.c:2980 +#: describe.c:3142 msgid "Check" msgstr "检查" # describe.c:1602 -#: describe.c:3022 +#: describe.c:3184 msgid "List of domains" msgstr "共同值域列表" # describe.c:1635 -#: describe.c:3056 +#: describe.c:3218 msgid "Source" msgstr "来源" # describe.c:1636 -#: describe.c:3057 +#: describe.c:3219 msgid "Destination" msgstr "目的地" # describe.c:1262 # describe.c:1638 # describe.c:1692 -#: describe.c:3058 describe.c:3207 +#: describe.c:3220 describe.c:3369 msgid "no" msgstr "否" # describe.c:1262 # describe.c:1637 # describe.c:1694 -#: describe.c:3058 describe.c:3209 +#: describe.c:3220 describe.c:3371 msgid "yes" msgstr "是" # describe.c:1639 -#: describe.c:3059 +#: describe.c:3221 msgid "Default?" msgstr "预设?" # describe.c:1653 -#: describe.c:3096 +#: describe.c:3258 msgid "List of conversions" msgstr "字元编码转换列表" -#: describe.c:3135 -#| msgid "event" +#: describe.c:3297 msgid "Event" msgstr "Event" # describe.c:415 # describe.c:543 # describe.c:1477 -#: describe.c:3137 -#| msgid "Enabled" +#: describe.c:3299 msgid "enabled" msgstr "启用" # describe.c:1636 -#: describe.c:3138 -#| msgid "Replication" +#: describe.c:3300 msgid "replica" msgstr "replica" -#: describe.c:3139 +#: describe.c:3301 msgid "always" msgstr "经常" # describe.c:415 # describe.c:543 # describe.c:1477 -#: describe.c:3140 -#| msgid "stable" +#: describe.c:3302 msgid "disabled" msgstr "禁用" # describe.c:415 # describe.c:543 # describe.c:1477 -#: describe.c:3141 +#: describe.c:3303 msgid "Enabled" msgstr "使能" -#: describe.c:3142 -#| msgid "Procedural Languages" +#: describe.c:3304 msgid "Procedure" msgstr "过程" -#: describe.c:3143 +#: describe.c:3305 msgid "Tags" msgstr "标签" # describe.c:1549 -#: describe.c:3162 +#: describe.c:3324 msgid "List of event triggers" msgstr "事件触发器列表" # describe.c:1688 -#: describe.c:3204 +#: describe.c:3366 msgid "Source type" -msgstr "来源型别" +msgstr "来源类型" # describe.c:1689 -#: describe.c:3205 +#: describe.c:3367 msgid "Target type" -msgstr "目标型别" +msgstr "目标类型" # describe.c:1693 -#: describe.c:3208 +#: describe.c:3370 msgid "in assignment" msgstr "在指派中" # describe.c:1695 -#: describe.c:3210 +#: describe.c:3372 msgid "Implicit?" msgstr "隐含的?" # describe.c:1703 -#: describe.c:3261 +#: describe.c:3423 msgid "List of casts" -msgstr "型别转换列表" +msgstr "类型转换列表" # describe.c:117 -#: describe.c:3287 +#: describe.c:3449 #, c-format msgid "The server (version %d.%d) does not support collations.\n" msgstr "服务器(版本%d.%d)不支持排序校对。\n" # describe.c:1549 -#: describe.c:3337 +#: describe.c:3499 msgid "List of collations" msgstr "校对列表" # describe.c:1753 -#: describe.c:3396 +#: describe.c:3558 msgid "List of schemas" msgstr "架构模式列表" # describe.c:117 -#: describe.c:3419 describe.c:3654 describe.c:3722 describe.c:3790 +#: describe.c:3581 describe.c:3816 describe.c:3884 describe.c:3952 #, c-format msgid "The server (version %d.%d) does not support full text search.\n" msgstr "服务器(版本%d.%d)不支持使用全文搜索.\n" # describe.c:150 -#: describe.c:3453 +#: describe.c:3615 msgid "List of text search parsers" msgstr "文本剖析器列表" # describe.c:641 -#: describe.c:3496 +#: describe.c:3658 #, c-format msgid "Did not find any text search parser named \"%s\".\n" msgstr "没有找到任何命名为 \"%s\" 的文本剖析器。\n" -#: describe.c:3571 +#: describe.c:3733 msgid "Start parse" msgstr "开始剖析" -#: describe.c:3572 +#: describe.c:3734 msgid "Method" msgstr "方法" -#: describe.c:3576 +#: describe.c:3738 msgid "Get next token" msgstr "取得下一个标志符" -#: describe.c:3578 +#: describe.c:3740 msgid "End parse" msgstr "结束剖析" -#: describe.c:3580 +#: describe.c:3742 msgid "Get headline" msgstr "取得首行" -#: describe.c:3582 +#: describe.c:3744 msgid "Get token types" -msgstr "取得标志符型别" +msgstr "取得标志符类型" -#: describe.c:3592 +#: describe.c:3754 #, c-format msgid "Text search parser \"%s.%s\"" -msgstr "文本搜寻剖析器 \"%s.%s\"" +msgstr "文本搜索剖析器 \"%s.%s\"" -#: describe.c:3594 +#: describe.c:3756 #, c-format msgid "Text search parser \"%s\"" -msgstr "文本搜寻剖析器 \"%s\"" +msgstr "文本搜索剖析器 \"%s\"" # describe.c:1375 -#: describe.c:3613 +#: describe.c:3775 msgid "Token name" msgstr "标志名称" -#: describe.c:3624 +#: describe.c:3786 #, c-format msgid "Token types for parser \"%s.%s\"" msgstr "标志符别型给剖析器 \"%s.%s\"" -#: describe.c:3626 +#: describe.c:3788 #, c-format msgid "Token types for parser \"%s\"" -msgstr "标志符型别给剖析器 \"%s\"" +msgstr "标志符类型给剖析器 \"%s\"" -#: describe.c:3676 +#: describe.c:3838 msgid "Template" msgstr "模版" # help.c:88 -#: describe.c:3677 +#: describe.c:3839 msgid "Init options" msgstr "初始选项" # describe.c:1549 -#: describe.c:3699 +#: describe.c:3861 msgid "List of text search dictionaries" -msgstr "文本搜寻字典列表" +msgstr "文本搜索字典列表" -#: describe.c:3739 +#: describe.c:3901 msgid "Init" msgstr "初始化" # describe.c:257 -#: describe.c:3740 +#: describe.c:3902 msgid "Lexize" msgstr "词汇" # describe.c:1753 -#: describe.c:3767 +#: describe.c:3929 msgid "List of text search templates" -msgstr "文本搜寻样式列表" +msgstr "文本搜索样式列表" # describe.c:97 -#: describe.c:3824 +#: describe.c:3986 msgid "List of text search configurations" -msgstr "文本搜寻组态列表" +msgstr "文本搜索组态列表" # describe.c:641 -#: describe.c:3868 +#: describe.c:4030 #, c-format msgid "Did not find any text search configuration named \"%s\".\n" -msgstr "没有找到任何命名为 \"%s\" 的文本搜寻组态。\n" +msgstr "没有找到任何命名为 \"%s\" 的文本搜索组态。\n" -#: describe.c:3934 +#: describe.c:4096 msgid "Token" msgstr "标志符" -#: describe.c:3935 +#: describe.c:4097 msgid "Dictionaries" msgstr "字典" -#: describe.c:3946 +#: describe.c:4108 #, c-format msgid "Text search configuration \"%s.%s\"" -msgstr "文本搜寻组态 \"%s.%s\"" +msgstr "文本搜索组态 \"%s.%s\"" -#: describe.c:3949 +#: describe.c:4111 #, c-format msgid "Text search configuration \"%s\"" -msgstr "文本搜寻组态 \"%s\"" +msgstr "文本搜索组态 \"%s\"" # describe.c:859 -#: describe.c:3953 +#: describe.c:4115 #, c-format msgid "" "\n" @@ -1956,7 +2018,7 @@ msgstr "" "剖析器:\"%s.%s\"" # describe.c:1342 -#: describe.c:3956 +#: describe.c:4118 #, c-format msgid "" "\n" @@ -1966,99 +2028,99 @@ msgstr "" "剖析器:\"%s\"" # describe.c:117 -#: describe.c:3988 +#: describe.c:4150 #, c-format msgid "The server (version %d.%d) does not support foreign-data wrappers.\n" msgstr "服务器(版本%d.%d)不支持使用外部数据封装器。\n" -#: describe.c:4002 +#: describe.c:4164 msgid "Handler" msgstr "处理函数" # describe.c:289 -#: describe.c:4045 +#: describe.c:4207 msgid "List of foreign-data wrappers" msgstr "外部数据封装器列表" # describe.c:117 -#: describe.c:4068 +#: describe.c:4230 #, c-format msgid "The server (version %d.%d) does not support foreign servers.\n" msgstr "服务器(版本%d.%d)不支持使用外部服务器.\n" -#: describe.c:4080 +#: describe.c:4242 msgid "Foreign-data wrapper" msgstr "外部数据封装器" -#: describe.c:4098 describe.c:4293 +#: describe.c:4260 describe.c:4455 msgid "Version" msgstr "版本" # describe.c:1653 -#: describe.c:4124 +#: describe.c:4286 msgid "List of foreign servers" msgstr "外部服务器列表" # describe.c:117 -#: describe.c:4147 +#: describe.c:4309 #, c-format msgid "The server (version %d.%d) does not support user mappings.\n" msgstr "服务器(版本%d.%d)不支持使用用户映射。\n" # describe.c:1377 -#: describe.c:4156 describe.c:4217 +#: describe.c:4318 describe.c:4379 msgid "Server" msgstr "服务器" -#: describe.c:4157 +#: describe.c:4319 msgid "User name" msgstr "用户名: " # describe.c:1602 -#: describe.c:4182 +#: describe.c:4344 msgid "List of user mappings" msgstr "列出用户映射" # describe.c:117 -#: describe.c:4205 +#: describe.c:4367 #, c-format msgid "The server (version %d.%d) does not support foreign tables.\n" msgstr "服务器(版本%d.%d)不支持使用引用表.\n" # describe.c:1653 -#: describe.c:4256 +#: describe.c:4418 msgid "List of foreign tables" msgstr "引用表列表" # describe.c:117 -#: describe.c:4279 describe.c:4333 +#: describe.c:4441 describe.c:4495 #, c-format msgid "The server (version %d.%d) does not support extensions.\n" msgstr "服务器(版本%d.%d) 不支持使用扩展.\n" # describe.c:1653 -#: describe.c:4310 +#: describe.c:4472 msgid "List of installed extensions" msgstr "已安装扩展列表" # describe.c:641 -#: describe.c:4360 +#: describe.c:4522 #, c-format msgid "Did not find any extension named \"%s\".\n" msgstr "没有找到任何名称为 \"%s\" 的扩展。\n" # describe.c:641 -#: describe.c:4363 +#: describe.c:4525 #, c-format msgid "Did not find any extensions.\n" msgstr "没有找到任何扩展.\n" # describe.c:593 -#: describe.c:4407 +#: describe.c:4569 msgid "Object Description" msgstr "对象描述" -#: describe.c:4416 +#: describe.c:4578 #, c-format msgid "Objects in extension \"%s\"" msgstr "对象用于扩展 \"%s\"" @@ -2068,40 +2130,39 @@ msgstr "对象用于扩展 \"%s\"" # common.c:605 # common.c:660 # common.c:903 -#: help.c:62 +#: help.c:63 #, c-format -#| msgid "%s" msgid "%s\n" msgstr "%s\n" # help.c:83 -#: help.c:67 +#: help.c:70 #, c-format msgid "" "psql is the PostgreSQL interactive terminal.\n" "\n" msgstr "psql是PostgreSQL 的交互式客户端工具。\n" -#: help.c:68 +#: help.c:71 help.c:315 help.c:348 help.c:375 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" # help.c:86 -#: help.c:69 +#: help.c:72 #, c-format msgid "" " psql [OPTION]... [DBNAME [USERNAME]]\n" "\n" msgstr " psql [选项]... [数据库名称 [用户名称]]\n" -#: help.c:71 +#: help.c:74 #, c-format msgid "General options:\n" msgstr "通用选项:\n" # help.c:94 -#: help.c:76 +#: help.c:79 #, c-format msgid "" " -c, --command=COMMAND run only single command (SQL or internal) and " @@ -2109,46 +2170,47 @@ msgid "" msgstr " -c,--command=命令 执行单一命令(SQL或内部指令)然后结束\n" # help.c:93 -#: help.c:77 +#: help.c:80 #, c-format msgid "" " -d, --dbname=DBNAME database name to connect to (default: \"%s\")\n" -msgstr " -d, --dbname=数据库名称 指定要连接的数据库 (缺省:\"%s\")\n" +msgstr " -d, --dbname=数据库名称 指定要连接的数据库 (默认:\"%s\")\n" # help.c:95 -#: help.c:78 +#: help.c:81 #, c-format msgid " -f, --file=FILENAME execute commands from file, then exit\n" msgstr " -f, --file=文件名 从文件中执行命令然后退出\n" # help.c:96 -#: help.c:79 +#: help.c:82 #, c-format msgid " -l, --list list available databases, then exit\n" msgstr " -l, --list 列出所有可用的数据库,然后退出\n" # help.c:97 -#: help.c:80 -#, c-format +#: help.c:83 +#, fuzzy, c-format msgid "" " -v, --set=, --variable=NAME=VALUE\n" -" set psql variable NAME to VALUE\n" +" set psql variable NAME to VALUE e.g.: -v " +"ON_ERROR_STOP=1\n" msgstr "" " -v, --set=, --variable=名称=值\n" " 为psql变量(名称)设定值\n" -#: help.c:82 +#: help.c:85 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version 输出版本信息, 然后退出\n" # help.c:98 -#: help.c:83 +#: help.c:86 #, c-format msgid " -X, --no-psqlrc do not read startup file (~/.psqlrc)\n" msgstr " -X, --no-psqlrc 不读取启动文档(~/.psqlrc)\n" -#: help.c:84 +#: help.c:87 #, c-format msgid "" " -1 (\"one\"), --single-transaction\n" @@ -2158,13 +2220,27 @@ msgstr "" " -1 (\"one\"), --single-transaction\n" " 作为一个单一事务来执行命令文件(如果是非交互型的)\n" -#: help.c:86 -#, c-format -msgid " -?, --help show this help, then exit\n" +#: help.c:89 +#, fuzzy, c-format +msgid " -?, --help[=options] show this help, then exit\n" msgstr " -?, --help 显示此帮助, 然后退出\n" +#: help.c:90 +#, c-format +msgid "" +" --help=variables show a list of all specially treated variables, " +"then exit\n" +msgstr "" + +#: help.c:91 +#, fuzzy, c-format +#| msgid " -?, --help show this help, then exit\n" +msgid "" +" --help=commands show a list of backslash commands, then exit\n" +msgstr " -?, --help 显示帮助信息,然后退出\n" + # help.c:102 -#: help.c:88 +#: help.c:93 #, c-format msgid "" "\n" @@ -2174,58 +2250,64 @@ msgstr "" "输入和输出选项:\n" # help.c:103 -#: help.c:89 +#: help.c:94 #, c-format msgid " -a, --echo-all echo all input from script\n" msgstr " -a, --echo-all 显示所有来自于脚本的输入\n" # help.c:104 -#: help.c:90 +#: help.c:95 +#, fuzzy, c-format +msgid " -b, --echo-errors echo failed commands\n" +msgstr " -e, --echo-queries 显示发送给服务器的命令\n" + +# help.c:104 +#: help.c:96 #, c-format msgid " -e, --echo-queries echo commands sent to server\n" msgstr " -e, --echo-queries 显示发送给服务器的命令\n" # help.c:105 -#: help.c:91 +#: help.c:97 #, c-format msgid "" " -E, --echo-hidden display queries that internal commands generate\n" msgstr " -E, --echo-hidden 显示内部命令产生的查询\n" # help.c:107 -#: help.c:92 +#: help.c:98 #, c-format msgid " -L, --log-file=FILENAME send session log to file\n" msgstr " -L, --log-file=文件名 将会话日志写入文件\n" # help.c:108 -#: help.c:93 +#: help.c:99 #, c-format msgid "" " -n, --no-readline disable enhanced command line editing (readline)\n" msgstr " -n, --no-readline 禁用增强命令行编辑功能(readline)\n" # help.c:107 -#: help.c:94 +#: help.c:100 #, c-format msgid " -o, --output=FILENAME send query results to file (or |pipe)\n" msgstr " -o, --output=FILENAME 将查询结果写入文件(或 |管道)\n" # help.c:106 -#: help.c:95 +#: help.c:101 #, c-format msgid "" " -q, --quiet run quietly (no messages, only query output)\n" msgstr " -q, --quiet 以沉默模式运行(不显示消息,只有查询结果)\n" # help.c:109 -#: help.c:96 +#: help.c:102 #, c-format msgid " -s, --single-step single-step mode (confirm each query)\n" msgstr " -s, --single-step 单步模式 (确认每个查询)\n" # help.c:110 -#: help.c:97 +#: help.c:103 #, c-format msgid "" " -S, --single-line single-line mode (end of line terminates SQL " @@ -2233,7 +2315,7 @@ msgid "" msgstr " -S, --single-line 单行模式 (一行就是一条 SQL 命令)\n" # help.c:112 -#: help.c:99 +#: help.c:105 #, c-format msgid "" "\n" @@ -2243,33 +2325,30 @@ msgstr "" "输出格式选项 :\n" # help.c:113 -#: help.c:100 +#: help.c:106 #, c-format msgid " -A, --no-align unaligned table output mode\n" msgstr " -A, --no-align 使用非对齐表格输出模式\n" # help.c:119 -#: help.c:101 +#: help.c:107 #, c-format -#| msgid "" -#| " -F, --field-separator=STRING\n" -#| " set field separator (default: \"%s\")\n" msgid "" " -F, --field-separator=STRING\n" " field separator for unaligned output (default: " "\"%s\")\n" msgstr "" " -F, --field-separator=STRING\n" -" 为字段设置分隔符,用于不整齐的输出(缺省:\"%s\")\n" +" 为字段设置分隔符,用于不整齐的输出(默认:\"%s\")\n" # help.c:114 -#: help.c:104 +#: help.c:110 #, c-format msgid " -H, --html HTML table output mode\n" msgstr " -H, --html HTML 表格输出模式\n" # help.c:118 -#: help.c:105 +#: help.c:111 #, c-format msgid "" " -P, --pset=VAR[=ARG] set printing option VAR to ARG (see \\pset " @@ -2278,27 +2357,24 @@ msgstr "" " -P, --pset=变量[=参数] 设置将变量打印到参数的选项(查阅 \\pset 命令)\n" # help.c:121 -#: help.c:106 +#: help.c:112 #, c-format -#| msgid "" -#| " -R, --record-separator=STRING\n" -#| " set record separator (default: newline)\n" msgid "" " -R, --record-separator=STRING\n" " record separator for unaligned output (default: " "newline)\n" msgstr "" " -R, --record-separator=STRING\n" -" 为不整齐的输出设置字录的分隔符(缺省:换行符号)\n" +" 为不整齐的输出设置字录的分隔符(默认:换行符号)\n" # help.c:115 -#: help.c:108 +#: help.c:114 #, c-format msgid " -t, --tuples-only print rows only\n" msgstr " -t, --tuples-only 只打印记录i\n" # help.c:116 -#: help.c:109 +#: help.c:115 #, c-format msgid "" " -T, --table-attr=TEXT set HTML table tag attributes (e.g., width, " @@ -2306,17 +2382,14 @@ msgid "" msgstr " -T, --table-attr=文本 设定 HTML 表格标记属性(例如,宽度,边界)\n" # help.c:117 -#: help.c:110 +#: help.c:116 #, c-format msgid " -x, --expanded turn on expanded table output\n" msgstr " -x, --expanded 打开扩展表格输出\n" # help.c:119 -#: help.c:111 +#: help.c:117 #, c-format -#| msgid "" -#| " -z, --field-separator-zero\n" -#| " set field separator to zero byte\n" msgid "" " -z, --field-separator-zero\n" " set field separator for unaligned output to zero " @@ -2326,11 +2399,8 @@ msgstr "" " 为不整齐的输出设置字段分隔符为字节0\n" # help.c:121 -#: help.c:113 +#: help.c:119 #, c-format -#| msgid "" -#| " -0, --record-separator-zero\n" -#| " set record separator to zero byte\n" msgid "" " -0, --record-separator-zero\n" " set record separator for unaligned output to zero " @@ -2339,7 +2409,7 @@ msgstr "" " -0, --record-separator-zero\n" " 为不整齐的输出设置记录分隔符为字节0\n" -#: help.c:116 +#: help.c:122 #, c-format msgid "" "\n" @@ -2349,37 +2419,37 @@ msgstr "" "联接选项:\n" # help.c:126 -#: help.c:119 +#: help.c:125 #, c-format msgid "" " -h, --host=HOSTNAME database server host or socket directory " "(default: \"%s\")\n" msgstr "" -" -h, --host=主机名 数据库服务器主机或socket目录(缺省:\"%s\")\n" +" -h, --host=主机名 数据库服务器主机或socket目录(默认:\"%s\")\n" # help.c:127 -#: help.c:120 +#: help.c:126 msgid "local socket" msgstr "本地接口" # help.c:130 -#: help.c:123 +#: help.c:129 #, c-format msgid " -p, --port=PORT database server port (default: \"%s\")\n" -msgstr " -p, --port=端口 数据库服务器的端口(缺省:\"%s\")\n" +msgstr " -p, --port=端口 数据库服务器的端口(默认:\"%s\")\n" # help.c:136 -#: help.c:129 +#: help.c:135 #, c-format msgid " -U, --username=USERNAME database user name (default: \"%s\")\n" -msgstr " -U, --username=用户名 指定数据库用户名(缺省:\"%s\")\n" +msgstr " -U, --username=用户名 指定数据库用户名(默认:\"%s\")\n" -#: help.c:130 +#: help.c:136 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password 永远不提示输入口令\n" -#: help.c:131 +#: help.c:137 #, c-format msgid "" " -W, --password force password prompt (should happen " @@ -2387,7 +2457,7 @@ msgid "" msgstr " -W, --password 强制口令提示 (自动)\n" # help.c:140 -#: help.c:133 +#: help.c:139 #, c-format msgid "" "\n" @@ -2402,65 +2472,88 @@ msgstr "" "或者参考PostgreSQL文档中的psql章节.\n" "\n" -#: help.c:136 +#: help.c:142 #, c-format msgid "Report bugs to .\n" msgstr "臭虫报告至 .\n" # help.c:174 -#: help.c:157 +#: help.c:165 #, c-format msgid "General\n" msgstr "一般性\n" # help.c:179 -#: help.c:158 +#: help.c:166 #, c-format msgid "" " \\copyright show PostgreSQL usage and distribution terms\n" msgstr " \\copyright 显示PostgreSQL的使用和发行许可条款\n" # help.c:194 -#: help.c:159 +#: help.c:167 #, c-format msgid "" " \\g [FILE] or ; execute query (and send results to file or |pipe)\n" msgstr " \\g [文件] or; 执行查询 (并把结果写入文件或 |管道)\n" # help.c:194 -#: help.c:160 +#: help.c:168 #, c-format msgid "" " \\gset [PREFIX] execute query and store results in psql variables\n" msgstr " \\gset [PREFIX] 执行查询并把结果存到psql变量中\n" -# help.c:182 -#: help.c:161 -#, c-format -msgid "" -" \\h [NAME] help on syntax of SQL commands, * for all " -"commands\n" -msgstr " \\h [名称] SQL命令语法上的说明,用*显示全部命令的语法说明\n" - # help.c:183 -#: help.c:162 +#: help.c:169 #, c-format msgid " \\q quit psql\n" msgstr " \\q 退出 psql\n" -#: help.c:163 +#: help.c:170 #, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEC] 每隔SEC秒执行一次查询\n" +#: help.c:173 +#, c-format +msgid "Help\n" +msgstr "" + +#: help.c:175 +#, c-format +msgid " \\? [commands] description of all psql backslash commands\n" +msgstr "" + +#: help.c:176 +#, c-format +msgid " \\? options description of all psql commandline options\n" +msgstr "" + +#: help.c:177 +#, fuzzy, c-format +#| msgid "" +#| " --sysconfdir show location of system-wide configuration files\n" +msgid "" +" \\? variables description of all psql configuration variables\n" +msgstr " --sysconfdir 显示系统范围的配置文件的所在位置\n" + +# help.c:182 +#: help.c:178 +#, c-format +msgid "" +" \\h [NAME] help on syntax of SQL commands, * for all " +"commands\n" +msgstr " \\h [名称] SQL命令语法上的说明,用*显示全部命令的语法说明\n" + # help.c:192 -#: help.c:166 +#: help.c:181 #, c-format msgid "Query Buffer\n" msgstr "查询缓存区\n" # help.c:193 -#: help.c:167 +#: help.c:182 #, c-format msgid "" " \\e [FILE] [LINE] edit the query buffer (or file) with external " @@ -2468,44 +2561,50 @@ msgid "" msgstr " \\e [FILE] [LINE] 使用外部编辑器编辑查询缓存区(或文件)\n" # help.c:193 -#: help.c:168 +#: help.c:183 #, c-format msgid "" " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr " \\ef [FUNCNAME [LINE]] 使用外部编辑器编辑函数定义\n" +# help.c:193 +#: help.c:184 +#, fuzzy, c-format +msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" +msgstr " \\ef [FUNCNAME [LINE]] 使用外部编辑器编辑函数定义\n" + # help.c:195 -#: help.c:169 +#: help.c:185 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p 显示查询缓存区的内容\n" # help.c:196 -#: help.c:170 +#: help.c:186 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r 重置(清除)查询缓存区\n" # help.c:198 -#: help.c:172 +#: help.c:188 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [文件] 显示历史记录或将历史记录保存在文件中\n" # help.c:200 -#: help.c:174 +#: help.c:190 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w 文件 将查询缓存区的内容写入文件\n" # help.c:203 -#: help.c:177 +#: help.c:193 #, c-format msgid "Input/Output\n" msgstr "输入/输出\n" # help.c:251 -#: help.c:178 +#: help.c:194 #, c-format msgid "" " \\copy ... perform SQL COPY with data stream to the client " @@ -2513,19 +2612,19 @@ msgid "" msgstr " \\copy ... 执行 SQL COPY,将数据流发送到客户端主机\n" # help.c:204 -#: help.c:179 +#: help.c:195 #, c-format msgid " \\echo [STRING] write string to standard output\n" msgstr " \\echo [字符串] 将字符串写到标准输出\n" # help.c:205 -#: help.c:180 +#: help.c:196 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i 文件 从文件中执行命令\n" # help.c:206 -#: help.c:181 +#: help.c:197 #, c-format msgid "" " \\ir FILE as \\i, but relative to location of current " @@ -2533,286 +2632,292 @@ msgid "" msgstr " \\ir FILE 与 \\i类似, 但是相对于当前脚本的位置\n" # help.c:206 -#: help.c:182 +#: help.c:198 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [文件] 将全部查询结果写入文件或 |管道\n" # help.c:207 -#: help.c:183 +#: help.c:199 #, c-format msgid "" " \\qecho [STRING] write string to query output stream (see \\o)\n" msgstr " \\qecho [字符串] 将字符串写到查询输出串流(参考 \\o)\n" # help.c:211 -#: help.c:186 +#: help.c:202 #, c-format msgid "Informational\n" msgstr "资讯性\n" -#: help.c:187 +#: help.c:203 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (选项: S = 显示系统对象, + = 其余的详细信息)\n" # help.c:226 -#: help.c:188 +#: help.c:204 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] 列出表,视图和序列\n" # help.c:212 -#: help.c:189 +#: help.c:205 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] 名称 描述表,视图,序列,或索引\n" # help.c:215 -#: help.c:190 +#: help.c:206 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [模式] 列出聚合函数\n" # help.c:228 -#: help.c:191 +#: help.c:207 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [模式] 列出表空间\n" # help.c:217 -#: help.c:192 +#: help.c:208 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [PATTERN] 列表转换\n" # help.c:218 -#: help.c:193 +#: help.c:209 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [PATTERN] 列出类型强制转换\n" # help.c:219 -#: help.c:194 +#: help.c:210 #, c-format msgid "" " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr " \\dd[S] [PATTERN] 显示没有在别处显示的对象描述\n" # help.c:218 -#: help.c:195 +#: help.c:211 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" -msgstr " \\ddp [模式] 列出缺省权限\n" +msgstr " \\ddp [模式] 列出默认权限\n" # help.c:220 -#: help.c:196 +#: help.c:212 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [PATTERN] 列出共同值域\n" # help.c:228 -#: help.c:197 +#: help.c:213 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [PATTERN] 列出引用表\n" # help.c:228 -#: help.c:198 +#: help.c:214 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [模式] 列出外部服务器\n" # help.c:228 -#: help.c:199 +#: help.c:215 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [模式] 列出用户映射\n" # help.c:222 -#: help.c:200 +#: help.c:216 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [模式] 列出外部数据封装器\n" # help.c:215 -#: help.c:201 +#: help.c:217 #, c-format msgid "" " \\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions\n" msgstr " \\df[antw][S+] [模式] 列出[只包括 聚合/常规/触发器/窗口]函数 \n" # help.c:221 -#: help.c:202 +#: help.c:218 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [模式] 列出文本搜索配置\n" # help.c:228 -#: help.c:203 +#: help.c:219 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" -msgstr " \\dFd[+] [模式] 列出文本搜寻字典\n" +msgstr " \\dFd[+] [模式] 列出文本搜索字典\n" # help.c:228 -#: help.c:204 +#: help.c:220 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [模式] 列出文本搜索解析器\n" # help.c:228 -#: help.c:205 +#: help.c:221 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [模式] 列出文本搜索模版\n" # help.c:222 -#: help.c:206 +#: help.c:222 #, c-format msgid " \\dg[+] [PATTERN] list roles\n" msgstr " \\dg[+] [PATTERN] 列出角色\n" # help.c:220 -#: help.c:207 +#: help.c:223 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [模式] 列出索引\n" # help.c:225 -#: help.c:208 +#: help.c:224 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl 列出大对象, 功能与\\lo_list相同\n" # help.c:228 -#: help.c:209 +#: help.c:225 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [PATTERN] 列出所有过程语言\n" # help.c:228 -#: help.c:210 +#: help.c:226 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [PATTERN] 列出所有物化视图\n" # help.c:228 -#: help.c:211 +#: help.c:227 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [PATTERN] 列出所有模式\n" # help.c:224 -#: help.c:212 +#: help.c:228 #, c-format msgid " \\do[S] [PATTERN] list operators\n" msgstr " \\do[S] [模式] 列出运算符\n" # help.c:220 -#: help.c:213 +#: help.c:229 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [PATTERN] 列出所有校对规则\n" # help.c:226 -#: help.c:214 +#: help.c:230 #, c-format msgid "" " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr " \\dp [模式] 列出表,视图和序列的访问权限\n" -#: help.c:215 +#: help.c:231 #, c-format msgid " \\drds [PATRN1 [PATRN2]] list per-database role settings\n" msgstr " \\drds [模式1 [模式2]] 列出每个数据库的角色设置\n" # help.c:228 -#: help.c:216 +#: help.c:232 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [模式] 列出序列\n" # help.c:228 -#: help.c:217 +#: help.c:233 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [模式] 列出表\n" # help.c:220 -#: help.c:218 +#: help.c:234 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [模式] 列出数据类型\n" # help.c:228 -#: help.c:219 +#: help.c:235 #, c-format msgid " \\du[+] [PATTERN] list roles\n" msgstr " \\du[+] [PATTERN] 列出角色\n" # help.c:228 -#: help.c:220 +#: help.c:236 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [模式] 列出视图\n" # help.c:228 -#: help.c:221 +#: help.c:237 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [PATTERN] 列出引用表\n" # help.c:217 -#: help.c:222 +#: help.c:238 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [PATTERN] 列出扩展\n" # help.c:218 -#: help.c:223 +#: help.c:239 #, c-format msgid " \\dy [PATTERN] list event triggers\n" msgstr " \\dy [PATTERN] 列出所有事件触发器\n" # help.c:228 -#: help.c:224 +#: help.c:240 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [PATTERN] 列出所有数据库\n" # help.c:193 -#: help.c:225 -#, c-format -msgid " \\sf[+] FUNCNAME show a function's definition\n" +#: help.c:241 +#, fuzzy, c-format +msgid " \\sf[+] FUNCNAME show a function's definition\n" +msgstr " \\sf[+] FUNCNAME 显示函数定义\n" + +# help.c:193 +#: help.c:242 +#, fuzzy, c-format +msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sf[+] FUNCNAME 显示函数定义\n" # help.c:218 -#: help.c:226 +#: help.c:243 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [模式] 和\\dp的功能相同\n" # help.c:233 -#: help.c:229 +#: help.c:246 #, c-format msgid "Formatting\n" msgstr "格式化\n" # help.c:234 -#: help.c:230 +#: help.c:247 #, c-format msgid "" " \\a toggle between unaligned and aligned output mode\n" msgstr " \\a 在非对齐模式和对齐模式之间切换\n" # help.c:235 -#: help.c:231 +#: help.c:248 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr " \\C [字符串] 设置表的标题,或如果没有的标题就取消\n" # help.c:236 -#: help.c:232 +#: help.c:249 #, c-format msgid "" " \\f [STRING] show or set field separator for unaligned query " @@ -2820,26 +2925,22 @@ msgid "" msgstr " \\f [字符串] 显示或设定非对齐模式查询输出的字段分隔符\n" # help.c:237 -#: help.c:233 +#: help.c:250 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H 切换HTML输出模式 (目前是 %s)\n" # help.c:239 -#: help.c:235 -#, c-format -#| msgid "" -#| " \\pset NAME [VALUE] set table output option\n" -#| " (NAME := {format|border|expanded|fieldsep|" -#| "fieldsep_zero|footer|null|\n" -#| " numericlocale|recordsep|recordsep_zero|" -#| "tuples_only|title|tableattr|pager})\n" +#: help.c:252 +#, fuzzy, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" " (NAME := {format|border|expanded|fieldsep|" "fieldsep_zero|footer|null|\n" " numericlocale|recordsep|recordsep_zero|tuples_only|" -"title|tableattr|pager})\n" +"title|tableattr|pager|\n" +" unicode_border_linestyle|unicode_column_linestyle|" +"unicode_header_linestyle})\n" msgstr "" " \\pset NAME [VALUE] 设定表输出选项\n" " (NAME := {format|border|expanded|fieldsep|" @@ -2848,13 +2949,13 @@ msgstr "" "title|tableattr|pager})\n" # help.c:243 -#: help.c:238 +#: help.c:256 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [开|关] 只显示记录 (目前是 %s)\n" # help.c:245 -#: help.c:240 +#: help.c:258 #, c-format msgid "" " \\T [STRING] set HTML
tag attributes, or unset if none\n" @@ -2862,98 +2963,98 @@ msgstr "" " \\T [字符串] 设置HTML <表格>标签属性, 或者如果没有的话取消设置\n" # help.c:246 -#: help.c:241 +#: help.c:259 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] 切换扩展输出模式(目前是 %s)\n" # help.c:123 -#: help.c:245 +#: help.c:263 #, c-format msgid "Connection\n" msgstr "连接\n" # help.c:175 -#: help.c:247 -#, c-format +#: help.c:265 +#, fuzzy, c-format msgid "" -" \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently \"%s\")\n" msgstr "" " \\c[onnect] [数据库名称|- 用户名称|- 主机|- 端口|-]\n" " 连接到新的数据库(目前是 \"%s\")\n" # help.c:175 -#: help.c:251 -#, c-format +#: help.c:269 +#, fuzzy, c-format msgid "" -" \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" +" \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently no connection)\n" msgstr "" " \\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]\n" " 连接到新的数据库(当前没有连接)\n" # help.c:180 -#: help.c:253 +#: help.c:271 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [编码名称] 显示或设定客户端编码\n" -#: help.c:254 +#: help.c:272 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" -msgstr " \\password [USERNAME] 安全地为用户改变口令\n" +msgstr " \\password [USERNAME] 安全地为用户更改口令\n" -#: help.c:255 +#: help.c:273 #, c-format msgid "" " \\conninfo display information about current connection\n" msgstr " \\conninfo 显示当前连接的相关信息\n" -#: help.c:258 +#: help.c:276 #, c-format msgid "Operating System\n" msgstr "操作系统\n" # help.c:178 -#: help.c:259 +#: help.c:277 #, c-format msgid " \\cd [DIR] change the current working directory\n" -msgstr " \\cd [目录] 改变目前的工作目录\n" +msgstr " \\cd [目录] 更改目前的工作目录\n" # help.c:188 -#: help.c:260 +#: help.c:278 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NAME [VALUE] 设置或清空环境变量\n" # help.c:186 -#: help.c:261 +#: help.c:279 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [开|关] 切换命令计时开关 (目前是 %s)\n" # help.c:189 -#: help.c:263 +#: help.c:281 #, c-format msgid "" " \\! [COMMAND] execute command in shell or start interactive " "shell\n" msgstr " \\! [命令] 在 shell中执行命令或启动一个交互式shell\n" -#: help.c:266 +#: help.c:284 #, c-format msgid "Variables\n" msgstr "变量\n" # help.c:188 -#: help.c:267 +#: help.c:285 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr " \\prompt [文本] 名称 提示用户设定内部变量\n" # help.c:184 -#: help.c:268 +#: help.c:286 #, c-format msgid "" " \\set [NAME [VALUE]] set internal variable, or list all if no " @@ -2961,19 +3062,19 @@ msgid "" msgstr " \\set [名称 [值数]] 设定内部变量,若无参数则列出全部变量\n" # help.c:188 -#: help.c:269 +#: help.c:287 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset 名称 清空(删除)内部变量\n" # large_obj.c:264 -#: help.c:272 +#: help.c:290 #, c-format msgid "Large Objects\n" msgstr "大对象\n" # help.c:252 -#: help.c:273 +#: help.c:291 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -2986,13 +3087,446 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID 大对象运算\n" +#: help.c:312 +#, c-format +msgid "List of specially treated variables.\n" +msgstr "" + +#: help.c:314 +#, fuzzy, c-format +msgid "psql variables:\n" +msgstr "变量\n" + +#: help.c:316 +#, c-format +msgid "" +" psql --set=NAME=VALUE\n" +" or \\set NAME VALUE in interactive mode\n" +"\n" +msgstr "" + +#: help.c:318 +#, c-format +msgid "" +" AUTOCOMMIT if set, successful SQL commands are automatically " +"committed\n" +msgstr "" + +#: help.c:319 +#, c-format +msgid "" +" COMP_KEYWORD_CASE determine the case used to complete SQL keywords\n" +" [lower, upper, preserve-lower, preserve-upper]\n" +msgstr "" + +# common.c:636 +# common.c:871 +#: help.c:321 +#, fuzzy, c-format +msgid " DBNAME the currently connected database name\n" +msgstr "你目前没有连接到数据库。\n" + +#: help.c:322 +#, c-format +msgid "" +" ECHO control what input is written to standard output\n" +" [all, errors, none, queries]\n" +msgstr "" + +#: help.c:324 +#, c-format +msgid "" +" ECHO_HIDDEN display internal queries executed by backslash commands " +"when it is set\n" +" or with [noexec] just show without execution\n" +msgstr "" + +# help.c:180 +#: help.c:326 +#, fuzzy, c-format +msgid " ENCODING current client character set encoding\n" +msgstr " \\encoding [编码名称] 显示或设定客户端编码\n" + +#: help.c:327 +#, c-format +msgid "" +" FETCH_COUNT the number of result rows to fetch and display at a " +"time\n" +" (default: 0=unlimited)\n" +msgstr "" + +#: help.c:329 +#, c-format +msgid "" +" HISTCONTROL control history list [ignorespace, ignoredups, " +"ignoreboth]\n" +msgstr "" + +#: help.c:330 +#, c-format +msgid " HISTFILE file name used to store the history list\n" +msgstr "" + +#: help.c:331 +#, c-format +msgid "" +" HISTSIZE the number of commands to store in the command history\n" +msgstr "" + +# help.c:178 +#: help.c:332 +#, fuzzy, c-format +msgid " HOST the currently connected database server\n" +msgstr " \\cd [目录] 更改目前的工作目录\n" + +#: help.c:333 +#, c-format +msgid "" +" IGNOREEOF if unset, sending an EOF to interactive session " +"terminates application\n" +msgstr "" + +#: help.c:334 +#, fuzzy, c-format +#| msgid " -o OID set next OID\n" +msgid " LASTOID the value of last affected OID\n" +msgstr " -o OID 设置下一个 OID\n" + +#: help.c:335 +#, c-format +msgid "" +" ON_ERROR_ROLLBACK if set, an error doesn't stop a transaction (uses " +"implicit SAVEPOINTs)\n" +msgstr "" + +#: help.c:336 +#, c-format +msgid " ON_ERROR_STOP stop batch execution after error\n" +msgstr "" + +#: help.c:337 +#, fuzzy, c-format +msgid " PORT server port of the current connection\n" +msgstr " \\conninfo 显示当前连接的相关信息\n" + +#: help.c:338 +#, c-format +msgid " PROMPT1 specify the standard psql prompt\n" +msgstr "" + +#: help.c:339 +#, c-format +msgid "" +" PROMPT2 specify the prompt used when a statement continues from " +"a previous line\n" +msgstr "" + +#: help.c:340 +#, c-format +msgid "" +" PROMPT3 specify the prompt used during COPY ... FROM STDIN\n" +msgstr "" + +# help.c:106 +#: help.c:341 +#, fuzzy, c-format +msgid " QUIET run quietly (same as -q option)\n" +msgstr " -q, --quiet 以沉默模式运行(不显示消息,只有查询结果)\n" + +#: help.c:342 +#, c-format +msgid "" +" SINGLELINE end of line terminates SQL command mode (same as -S " +"option)\n" +msgstr "" + +#: help.c:343 +#, c-format +msgid " SINGLESTEP single-step mode (same as -s option)\n" +msgstr "" + +# help.c:178 +#: help.c:344 +#, fuzzy, c-format +msgid " USER the currently connected database user\n" +msgstr " \\cd [目录] 更改目前的工作目录\n" + +#: help.c:345 +#, c-format +msgid "" +" VERBOSITY control verbosity of error reports [default, verbose, " +"terse]\n" +msgstr "" + +#: help.c:347 +#, c-format +msgid "" +"\n" +"Display influencing variables:\n" +msgstr "" + +#: help.c:349 +#, c-format +msgid "" +" psql --pset=NAME[=VALUE]\n" +" or \\pset NAME [VALUE] in interactive mode\n" +"\n" +msgstr "" + +#: help.c:351 +#, c-format +msgid " border border style (number)\n" +msgstr "" + +#: help.c:352 +#, c-format +msgid " columns set the target width for the wrapped format\n" +msgstr "" + +# help.c:117 +#: help.c:353 +#, fuzzy, c-format +msgid " expanded (or x) toggle expanded output\n" +msgstr " -x, --expanded 打开扩展表格输出\n" + +# help.c:119 +#: help.c:354 +#, fuzzy, c-format +msgid "" +" fieldsep field separator for unaligned output (default '|')\n" +msgstr "" +" -F, --field-separator=STRING\n" +" 为字段设置分隔符,用于不整齐的输出(默认:\"%s\")\n" + +# help.c:119 +#: help.c:355 +#, fuzzy, c-format +msgid " fieldsep_zero set field separator in unaligned mode to zero\n" +msgstr "" +" -z, --field-separator-zero\n" +" 为不整齐的输出设置字段分隔符为字节0\n" + +# command.c:1340 +#: help.c:356 +#, fuzzy, c-format +msgid "" +" format set output format [unaligned, aligned, wrapped, html, " +"asciidoc, ...]\n" +msgstr "" +"\\pset:可以使用的格式有unaligned, aligned, wrapped, html, latex, troff-ms\n" + +#: help.c:357 +#, c-format +msgid "" +" footer enable or disable display of the table footer [on, " +"off]\n" +msgstr "" + +#: help.c:358 +#, fuzzy, c-format +msgid "" +" linestyle set the border line drawing style [ascii, old-ascii, " +"unicode]\n" +msgstr "\\pset: 所允许使用的文本风格是ASCII, OLD-ASCII, UNICODE\n" + +#: help.c:359 +#, c-format +msgid "" +" null set the string to be printed in place of a null value\n" +msgstr "" + +#: help.c:360 +#, c-format +msgid "" +" numericlocale enable or disable display of a locale-specific " +"character to separate\n" +" groups of digits [on, off]\n" +msgstr "" + +#: help.c:362 +#, c-format +msgid "" +" pager control when an external pager is used [yes, no, " +"always]\n" +msgstr "" + +# help.c:121 +#: help.c:363 +#, fuzzy, c-format +msgid "" +" recordsep specify the record (line) separator to use in unaligned " +"output format\n" +msgstr "" +" -0, --record-separator-zero\n" +" 为不整齐的输出设置记录分隔符为字节0\n" + +# help.c:121 +#: help.c:364 +#, fuzzy, c-format +msgid "" +" recordsep_zero set the record separator to use in unaligned output " +"format to a zero byte.\n" +msgstr "" +" -0, --record-separator-zero\n" +" 为不整齐的输出设置记录分隔符为字节0\n" + +#: help.c:365 +#, c-format +msgid "" +" tableattr (or T) specify attributes for table tag in html format or " +"proportional\n" +" column width of left aligned data type in latex format\n" +msgstr "" + +# help.c:235 +#: help.c:367 +#, fuzzy, c-format +msgid "" +" title set the table title for any subsequently printed " +"tables\n" +msgstr " \\C [字符串] 设置表的标题,或如果没有的标题就取消\n" + +#: help.c:368 +#, c-format +msgid " tuples_only if set, only actual table data is shown\n" +msgstr "" + +#: help.c:369 +#, c-format +msgid " unicode_border_linestyle\n" +msgstr "" + +#: help.c:370 +#, c-format +msgid " unicode_column_linestyle\n" +msgstr "" + +#: help.c:371 +#, c-format +msgid "" +" unicode_header_linestyle\n" +" set the style of unicode line drawing [single, double]\n" +msgstr "" + +#: help.c:374 +#, c-format +msgid "" +"\n" +"Environment variables:\n" +msgstr "" + +#: help.c:378 +#, c-format +msgid "" +" NAME=VALUE [NAME=VALUE] psql ...\n" +" or \\setenv NAME [VALUE] in interactive mode\n" +"\n" +msgstr "" + +#: help.c:380 +#, c-format +msgid "" +" set NAME=VALUE\n" +" psql ...\n" +" or \\setenv NAME VALUE in interactive mode\n" +"\n" +msgstr "" + +#: help.c:383 +#, c-format +msgid " COLUMNS number of columns for wrapped format\n" +msgstr "" + +#: help.c:384 +#, fuzzy, c-format +#| msgid " -x NUM internal use\n" +msgid " PAGER name of external pager program\n" +msgstr " -x NUM 内部使用\n" + +#: help.c:385 +#, c-format +msgid "" +" PGAPPNAME same as the application_name connection parameter\n" +msgstr "" + +#: help.c:386 +#, c-format +msgid " PGDATABASE same as the dbname connection parameter\n" +msgstr "" + +#: help.c:387 +#, fuzzy, c-format +#| msgid " -l enable SSL connections\n" +msgid " PGHOST same as the host connection parameter\n" +msgstr " -l 开启 SSL 连接\n" + +#: help.c:388 +#, fuzzy, c-format +#| msgid " -l enable SSL connections\n" +msgid " PGPORT same as the port connection parameter\n" +msgstr " -l 开启 SSL 连接\n" + +# help.c:136 +#: help.c:389 +#, fuzzy, c-format +#| msgid " DBNAME database name (defaults to user name)\n" +msgid " PGUSER same as the user connection parameter\n" +msgstr " DBNAME 数据库名称(对用户名缺省)\n" + +#: help.c:390 +#, c-format +msgid " PGPASSWORD connection password (not recommended)\n" +msgstr "" + +#: help.c:391 +#, fuzzy, c-format +#| msgid " -f, --file=FILENAME output file name\n" +msgid " PGPASSFILE password file name\n" +msgstr " -f, --file=FILENAME 输出文件名\n" + +#: help.c:392 +#, c-format +msgid "" +" PSQL_EDITOR, EDITOR, VISUAL\n" +" editor used by the \\e, \\ef, and \\ev commands\n" +msgstr "" + +#: help.c:394 +#, fuzzy, 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" + +#: help.c:396 +#, c-format +msgid "" +" PSQL_HISTORY alternative location for the command history file\n" +msgstr "" + +#: help.c:397 +#, c-format +msgid " PSQLRC alternative location for the user's .psqlrc file\n" +msgstr "" + +#: help.c:398 +#, c-format +msgid " SHELL shell used by the \\! command\n" +msgstr "" + +# help.c:200 +#: help.c:399 +#, fuzzy, c-format +msgid " TMPDIR directory for temporary files\n" +msgstr " \\w 文件 将查询缓存区的内容写入文件\n" + # help.c:285 -#: help.c:320 +#: help.c:442 msgid "Available help:\n" msgstr "可用的说明:\n" # help.c:344 -#: help.c:404 +#: help.c:526 #, c-format msgid "" "Command: %s\n" @@ -3008,7 +3542,7 @@ msgstr "" "\n" # help.c:357 -#: help.c:420 +#: help.c:542 #, c-format msgid "" "No help available for \"%s\".\n" @@ -3024,56 +3558,62 @@ msgid "could not read from input file: %s\n" msgstr "无法从输入档案读取:%s\n" # input.c:210 -#: input.c:451 input.c:490 +#: input.c:446 input.c:485 #, c-format msgid "could not save history to file \"%s\": %s\n" msgstr "无法将历史记录储存到 \"%s\":%s\n" # input.c:213 -#: input.c:510 +#: input.c:505 #, c-format msgid "history is not supported by this installation\n" msgstr "这个安装不支援命令记录\n" # large_obj.c:36 -#: large_obj.c:66 +#: large_obj.c:64 #, c-format msgid "%s: not connected to a database\n" -msgstr "%s:尚未与资料库连线\n" +msgstr "%s:尚未与数据库连接\n" # large_obj.c:55 -#: large_obj.c:85 +#: large_obj.c:83 #, c-format msgid "%s: current transaction is aborted\n" -msgstr "%s:目前的交易被中止\n" +msgstr "%s:目前的事务被中止\n" # large_obj.c:58 -#: large_obj.c:88 +#: large_obj.c:86 #, c-format msgid "%s: unknown transaction status\n" -msgstr "%s:不明交易状态\n" +msgstr "%s:不明事务状态\n" -#: large_obj.c:289 large_obj.c:300 +#: large_obj.c:287 large_obj.c:298 msgid "ID" msgstr "ID" # large_obj.c:264 -#: large_obj.c:310 +#: large_obj.c:308 msgid "Large objects" -msgstr "大型物件" +msgstr "大型对象" # mainloop.c:172 -#: mainloop.c:159 +#: mainloop.c:161 #, c-format msgid "Use \"\\q\" to leave %s.\n" msgstr "使用 \"\\q\" 离开 %s。\n" -#: mainloop.c:189 +#: mainloop.c:183 +msgid "" +"The input is a PostgreSQL custom-format dump.\n" +"Use the pg_restore command-line client to restore this dump to a database.\n" +msgstr "" + +#: mainloop.c:203 msgid "You are using psql, the command-line interface to PostgreSQL." msgstr "您正在使用psql, 这是一种用于访问PostgreSQL的命令行界面" # startup.c:292 -#: mainloop.c:190 +#: mainloop.c:204 #, c-format msgid "" "Type: \\copyright for distribution terms\n" @@ -3089,54 +3629,48 @@ msgstr "" " \\q 退出\n" # print.c:1202 -#: print.c:272 +#: print.c:338 #, c-format msgid "(%lu row)" msgid_plural "(%lu rows)" msgstr[0] "(%lu 行记录)" -# print.c:428 -#: print.c:1174 -#, c-format -msgid "(No rows)\n" -msgstr "(无资料列)\n" - -#: print.c:2238 +#: print.c:2795 #, c-format msgid "Interrupted\n" msgstr "已中断\n" -#: print.c:2304 +#: print.c:2861 #, c-format msgid "Cannot add header to table content: column count of %d exceeded.\n" msgstr "无法对表的内容增加标题:已经超过%d列的数量.\n" -#: print.c:2344 +#: print.c:2901 #, c-format msgid "Cannot add cell to table content: total cell count of %d exceeded.\n" msgstr "无法对表的内容添加单元: 总共有%d个单元超过.\n" -#: print.c:2570 +#: print.c:3133 #, c-format msgid "invalid output format (internal error): %d" msgstr "无效的输出格式 (内部错误): %d" -#: psqlscan.l:727 +#: psqlscan.l:751 #, c-format msgid "skipping recursive expansion of variable \"%s\"\n" msgstr "跳过变量 \"%s\"的递归扩展\n" -#: psqlscan.l:1604 +#: psqlscan.l:1627 #, c-format msgid "unterminated quoted string\n" msgstr "未结束的引用字符串\n" -#: psqlscan.l:1704 +#: psqlscan.l:1727 #, c-format msgid "%s: out of memory\n" msgstr "%s: 内存溢出\n" -#: psqlscan.l:1933 +#: psqlscan.l:1956 #, c-format msgid "can't escape without active connection\n" msgstr "没有数据库连接时无法escape\n" @@ -3153,438 +3687,499 @@ msgstr "没有数据库连接时无法escape\n" # describe.c:1586 # describe.c:1634 # describe.c:1727 -#: sql_help.c:32 sql_help.c:35 sql_help.c:38 sql_help.c:60 sql_help.c:62 -#: sql_help.c:64 sql_help.c:75 sql_help.c:77 sql_help.c:79 sql_help.c:103 -#: sql_help.c:107 sql_help.c:109 sql_help.c:111 sql_help.c:113 sql_help.c:116 -#: sql_help.c:118 sql_help.c:120 sql_help.c:213 sql_help.c:215 sql_help.c:216 -#: sql_help.c:218 sql_help.c:220 sql_help.c:223 sql_help.c:225 sql_help.c:227 -#: sql_help.c:229 sql_help.c:241 sql_help.c:242 sql_help.c:243 sql_help.c:245 -#: sql_help.c:290 sql_help.c:292 sql_help.c:294 sql_help.c:296 sql_help.c:354 -#: sql_help.c:359 sql_help.c:361 sql_help.c:396 sql_help.c:398 sql_help.c:401 -#: sql_help.c:403 sql_help.c:460 sql_help.c:465 sql_help.c:470 sql_help.c:475 -#: sql_help.c:515 sql_help.c:517 sql_help.c:519 sql_help.c:522 sql_help.c:524 -#: sql_help.c:535 sql_help.c:537 sql_help.c:577 sql_help.c:579 sql_help.c:582 -#: sql_help.c:584 sql_help.c:586 sql_help.c:612 sql_help.c:616 sql_help.c:629 -#: sql_help.c:632 sql_help.c:635 sql_help.c:655 sql_help.c:667 sql_help.c:675 -#: sql_help.c:678 sql_help.c:681 sql_help.c:711 sql_help.c:717 sql_help.c:719 -#: sql_help.c:723 sql_help.c:726 sql_help.c:729 sql_help.c:738 sql_help.c:749 -#: sql_help.c:751 sql_help.c:768 sql_help.c:777 sql_help.c:779 sql_help.c:781 -#: sql_help.c:793 sql_help.c:797 sql_help.c:799 sql_help.c:878 sql_help.c:880 -#: sql_help.c:883 sql_help.c:886 sql_help.c:888 sql_help.c:890 sql_help.c:951 -#: sql_help.c:953 sql_help.c:955 sql_help.c:958 sql_help.c:979 sql_help.c:982 -#: sql_help.c:985 sql_help.c:988 sql_help.c:992 sql_help.c:994 sql_help.c:996 -#: sql_help.c:998 sql_help.c:1012 sql_help.c:1015 sql_help.c:1017 -#: sql_help.c:1019 sql_help.c:1029 sql_help.c:1031 sql_help.c:1041 -#: sql_help.c:1043 sql_help.c:1052 sql_help.c:1073 sql_help.c:1075 -#: sql_help.c:1077 sql_help.c:1080 sql_help.c:1082 sql_help.c:1084 -#: sql_help.c:1122 sql_help.c:1128 sql_help.c:1130 sql_help.c:1133 -#: sql_help.c:1135 sql_help.c:1137 sql_help.c:1164 sql_help.c:1167 -#: sql_help.c:1169 sql_help.c:1171 sql_help.c:1173 sql_help.c:1175 -#: sql_help.c:1178 sql_help.c:1218 sql_help.c:1456 sql_help.c:1472 -#: sql_help.c:1485 sql_help.c:1536 sql_help.c:1540 sql_help.c:1550 -#: sql_help.c:1568 sql_help.c:1591 sql_help.c:1609 sql_help.c:1637 -#: sql_help.c:1696 sql_help.c:1738 sql_help.c:1760 sql_help.c:1780 -#: sql_help.c:1781 sql_help.c:1816 sql_help.c:1836 sql_help.c:1858 -#: sql_help.c:1886 sql_help.c:1911 sql_help.c:1947 sql_help.c:2133 -#: sql_help.c:2146 sql_help.c:2163 sql_help.c:2179 sql_help.c:2202 -#: sql_help.c:2253 sql_help.c:2257 sql_help.c:2259 sql_help.c:2265 -#: sql_help.c:2283 sql_help.c:2310 sql_help.c:2345 sql_help.c:2357 -#: sql_help.c:2366 sql_help.c:2416 sql_help.c:2444 sql_help.c:2452 -#: sql_help.c:2460 sql_help.c:2468 sql_help.c:2476 sql_help.c:2484 -#: sql_help.c:2492 sql_help.c:2500 sql_help.c:2509 sql_help.c:2520 -#: sql_help.c:2528 sql_help.c:2536 sql_help.c:2544 sql_help.c:2552 -#: sql_help.c:2562 sql_help.c:2571 sql_help.c:2580 sql_help.c:2588 -#: sql_help.c:2596 sql_help.c:2605 sql_help.c:2613 sql_help.c:2621 -#: sql_help.c:2629 sql_help.c:2637 sql_help.c:2645 sql_help.c:2653 -#: sql_help.c:2661 sql_help.c:2669 sql_help.c:2677 sql_help.c:2686 -#: sql_help.c:2694 sql_help.c:2711 sql_help.c:2726 sql_help.c:2932 -#: sql_help.c:2983 sql_help.c:3011 sql_help.c:3019 sql_help.c:3417 -#: sql_help.c:3465 sql_help.c:3585 +#: sql_help.c:33 sql_help.c:36 sql_help.c:39 sql_help.c:61 sql_help.c:63 +#: sql_help.c:65 sql_help.c:76 sql_help.c:78 sql_help.c:80 sql_help.c:106 +#: sql_help.c:112 sql_help.c:114 sql_help.c:116 sql_help.c:118 sql_help.c:121 +#: sql_help.c:123 sql_help.c:125 sql_help.c:218 sql_help.c:220 sql_help.c:221 +#: sql_help.c:223 sql_help.c:225 sql_help.c:228 sql_help.c:230 sql_help.c:232 +#: sql_help.c:234 sql_help.c:246 sql_help.c:247 sql_help.c:248 sql_help.c:250 +#: sql_help.c:296 sql_help.c:298 sql_help.c:300 sql_help.c:302 sql_help.c:362 +#: sql_help.c:367 sql_help.c:369 sql_help.c:412 sql_help.c:414 sql_help.c:417 +#: sql_help.c:419 sql_help.c:483 sql_help.c:488 sql_help.c:493 sql_help.c:498 +#: sql_help.c:546 sql_help.c:548 sql_help.c:550 sql_help.c:553 sql_help.c:555 +#: sql_help.c:566 sql_help.c:568 sql_help.c:608 sql_help.c:610 sql_help.c:613 +#: sql_help.c:615 sql_help.c:617 sql_help.c:651 sql_help.c:655 sql_help.c:659 +#: sql_help.c:678 sql_help.c:681 sql_help.c:684 sql_help.c:713 sql_help.c:725 +#: sql_help.c:733 sql_help.c:736 sql_help.c:739 sql_help.c:753 sql_help.c:799 +#: sql_help.c:822 sql_help.c:833 sql_help.c:835 sql_help.c:852 sql_help.c:861 +#: sql_help.c:863 sql_help.c:865 sql_help.c:877 sql_help.c:881 sql_help.c:883 +#: sql_help.c:965 sql_help.c:967 sql_help.c:970 sql_help.c:973 sql_help.c:975 +#: sql_help.c:977 sql_help.c:1038 sql_help.c:1040 sql_help.c:1042 +#: sql_help.c:1045 sql_help.c:1066 sql_help.c:1069 sql_help.c:1072 +#: sql_help.c:1075 sql_help.c:1079 sql_help.c:1081 sql_help.c:1083 +#: sql_help.c:1085 sql_help.c:1099 sql_help.c:1102 sql_help.c:1104 +#: sql_help.c:1106 sql_help.c:1116 sql_help.c:1118 sql_help.c:1128 +#: sql_help.c:1130 sql_help.c:1139 sql_help.c:1160 sql_help.c:1162 +#: sql_help.c:1164 sql_help.c:1167 sql_help.c:1169 sql_help.c:1171 +#: sql_help.c:1221 sql_help.c:1259 sql_help.c:1262 sql_help.c:1264 +#: sql_help.c:1266 sql_help.c:1268 sql_help.c:1270 sql_help.c:1273 +#: sql_help.c:1313 sql_help.c:1557 sql_help.c:1573 sql_help.c:1586 +#: sql_help.c:1637 sql_help.c:1641 sql_help.c:1651 sql_help.c:1671 +#: sql_help.c:1696 sql_help.c:1714 sql_help.c:1742 sql_help.c:1816 +#: sql_help.c:1859 sql_help.c:1881 sql_help.c:1901 sql_help.c:1902 +#: sql_help.c:1937 sql_help.c:1957 sql_help.c:1979 sql_help.c:1992 +#: sql_help.c:2024 sql_help.c:2049 sql_help.c:2093 sql_help.c:2279 +#: sql_help.c:2292 sql_help.c:2309 sql_help.c:2325 sql_help.c:2364 +#: sql_help.c:2415 sql_help.c:2419 sql_help.c:2421 sql_help.c:2427 +#: sql_help.c:2445 sql_help.c:2472 sql_help.c:2507 sql_help.c:2519 +#: sql_help.c:2528 sql_help.c:2578 sql_help.c:2606 sql_help.c:2614 +#: sql_help.c:2622 sql_help.c:2630 sql_help.c:2638 sql_help.c:2646 +#: sql_help.c:2654 sql_help.c:2662 sql_help.c:2671 sql_help.c:2682 +#: sql_help.c:2690 sql_help.c:2698 sql_help.c:2706 sql_help.c:2714 +#: sql_help.c:2724 sql_help.c:2733 sql_help.c:2742 sql_help.c:2750 +#: sql_help.c:2759 sql_help.c:2767 sql_help.c:2776 sql_help.c:2784 +#: sql_help.c:2792 sql_help.c:2800 sql_help.c:2808 sql_help.c:2816 +#: sql_help.c:2824 sql_help.c:2832 sql_help.c:2840 sql_help.c:2857 +#: sql_help.c:2866 sql_help.c:2874 sql_help.c:2891 sql_help.c:2906 +#: sql_help.c:3171 sql_help.c:3222 sql_help.c:3251 sql_help.c:3259 +#: sql_help.c:3678 sql_help.c:3726 sql_help.c:3867 msgid "name" msgstr "名称" -#: sql_help.c:33 sql_help.c:36 sql_help.c:39 sql_help.c:300 sql_help.c:1279 -#: sql_help.c:2417 sql_help.c:3234 -#| msgid "aggregates cannot return sets" +#: sql_help.c:34 sql_help.c:37 sql_help.c:40 sql_help.c:306 sql_help.c:1376 +#: sql_help.c:2579 sql_help.c:3474 msgid "aggregate_signature" msgstr "aggregate_signature" -#: sql_help.c:34 sql_help.c:61 sql_help.c:76 sql_help.c:108 sql_help.c:228 -#: sql_help.c:246 sql_help.c:362 sql_help.c:402 sql_help.c:469 sql_help.c:502 -#: sql_help.c:516 sql_help.c:536 sql_help.c:583 sql_help.c:631 sql_help.c:677 -#: sql_help.c:718 sql_help.c:740 sql_help.c:750 sql_help.c:780 sql_help.c:800 -#: sql_help.c:887 sql_help.c:952 sql_help.c:995 sql_help.c:1016 -#: sql_help.c:1030 sql_help.c:1042 sql_help.c:1054 sql_help.c:1081 -#: sql_help.c:1129 sql_help.c:1172 +#: sql_help.c:35 sql_help.c:62 sql_help.c:77 sql_help.c:113 sql_help.c:233 +#: sql_help.c:251 sql_help.c:370 sql_help.c:418 sql_help.c:492 sql_help.c:533 +#: sql_help.c:547 sql_help.c:567 sql_help.c:614 sql_help.c:680 sql_help.c:735 +#: sql_help.c:755 sql_help.c:800 sql_help.c:824 sql_help.c:834 sql_help.c:864 +#: sql_help.c:884 sql_help.c:974 sql_help.c:1039 sql_help.c:1082 +#: sql_help.c:1103 sql_help.c:1117 sql_help.c:1129 sql_help.c:1141 +#: sql_help.c:1168 sql_help.c:1222 sql_help.c:1267 msgid "new_name" msgstr "新的名称" -#: sql_help.c:37 sql_help.c:63 sql_help.c:78 sql_help.c:110 sql_help.c:226 -#: sql_help.c:244 sql_help.c:360 sql_help.c:431 sql_help.c:474 sql_help.c:538 -#: sql_help.c:547 sql_help.c:602 sql_help.c:615 sql_help.c:634 sql_help.c:680 -#: sql_help.c:752 sql_help.c:778 sql_help.c:798 sql_help.c:935 sql_help.c:954 -#: sql_help.c:997 sql_help.c:1018 sql_help.c:1076 sql_help.c:1170 +#: sql_help.c:38 sql_help.c:64 sql_help.c:79 sql_help.c:115 sql_help.c:231 +#: sql_help.c:249 sql_help.c:368 sql_help.c:454 sql_help.c:497 sql_help.c:569 +#: sql_help.c:578 sql_help.c:633 sql_help.c:654 sql_help.c:683 sql_help.c:738 +#: sql_help.c:836 sql_help.c:862 sql_help.c:882 sql_help.c:1023 +#: sql_help.c:1041 sql_help.c:1084 sql_help.c:1105 sql_help.c:1163 +#: sql_help.c:1265 sql_help.c:2265 msgid "new_owner" msgstr "新的属主" -#: sql_help.c:40 sql_help.c:65 sql_help.c:80 sql_help.c:230 sql_help.c:293 -#: sql_help.c:404 sql_help.c:479 sql_help.c:585 sql_help.c:619 sql_help.c:637 -#: sql_help.c:683 sql_help.c:782 sql_help.c:889 sql_help.c:999 sql_help.c:1020 -#: sql_help.c:1032 sql_help.c:1044 sql_help.c:1083 sql_help.c:1174 +#: sql_help.c:41 sql_help.c:66 sql_help.c:81 sql_help.c:235 sql_help.c:299 +#: sql_help.c:420 sql_help.c:502 sql_help.c:616 sql_help.c:658 sql_help.c:686 +#: sql_help.c:741 sql_help.c:866 sql_help.c:976 sql_help.c:1086 +#: sql_help.c:1107 sql_help.c:1119 sql_help.c:1131 sql_help.c:1170 +#: sql_help.c:1269 msgid "new_schema" msgstr "新的模式" # describe.c:1174 -#: sql_help.c:41 sql_help.c:1326 sql_help.c:2418 sql_help.c:3253 -#| msgid "where constraint is:" +#: sql_help.c:42 sql_help.c:1427 sql_help.c:2580 sql_help.c:3493 msgid "where aggregate_signature is:" msgstr "其中 aggregate_signature 是:" -#: sql_help.c:42 sql_help.c:45 sql_help.c:48 sql_help.c:310 sql_help.c:333 -#: sql_help.c:336 sql_help.c:339 sql_help.c:461 sql_help.c:466 sql_help.c:471 -#: sql_help.c:476 sql_help.c:1295 sql_help.c:1327 sql_help.c:1330 -#: sql_help.c:1333 sql_help.c:1457 sql_help.c:1473 sql_help.c:1476 -#: sql_help.c:1697 sql_help.c:2419 sql_help.c:2422 sql_help.c:2425 -#: sql_help.c:2510 sql_help.c:2870 sql_help.c:3149 sql_help.c:3240 -#: sql_help.c:3254 sql_help.c:3257 sql_help.c:3260 +#: sql_help.c:43 sql_help.c:46 sql_help.c:49 sql_help.c:316 sql_help.c:341 +#: sql_help.c:344 sql_help.c:347 sql_help.c:484 sql_help.c:489 sql_help.c:494 +#: sql_help.c:499 sql_help.c:1394 sql_help.c:1428 sql_help.c:1431 +#: sql_help.c:1434 sql_help.c:1558 sql_help.c:1574 sql_help.c:1577 +#: sql_help.c:1817 sql_help.c:2581 sql_help.c:2584 sql_help.c:2587 +#: sql_help.c:2672 sql_help.c:3057 sql_help.c:3389 sql_help.c:3480 +#: sql_help.c:3494 sql_help.c:3497 sql_help.c:3500 msgid "argmode" msgstr "参数模式" # describe.c:480 -#: sql_help.c:43 sql_help.c:46 sql_help.c:49 sql_help.c:311 sql_help.c:334 -#: sql_help.c:337 sql_help.c:340 sql_help.c:462 sql_help.c:467 sql_help.c:472 -#: sql_help.c:477 sql_help.c:1296 sql_help.c:1328 sql_help.c:1331 -#: sql_help.c:1334 sql_help.c:1458 sql_help.c:1474 sql_help.c:1477 -#: sql_help.c:1698 sql_help.c:2420 sql_help.c:2423 sql_help.c:2426 -#: sql_help.c:2511 sql_help.c:3241 sql_help.c:3255 sql_help.c:3258 -#: sql_help.c:3261 +#: sql_help.c:44 sql_help.c:47 sql_help.c:50 sql_help.c:317 sql_help.c:342 +#: sql_help.c:345 sql_help.c:348 sql_help.c:485 sql_help.c:490 sql_help.c:495 +#: sql_help.c:500 sql_help.c:1395 sql_help.c:1429 sql_help.c:1432 +#: sql_help.c:1435 sql_help.c:1559 sql_help.c:1575 sql_help.c:1578 +#: sql_help.c:1818 sql_help.c:2582 sql_help.c:2585 sql_help.c:2588 +#: sql_help.c:2673 sql_help.c:3481 sql_help.c:3495 sql_help.c:3498 +#: sql_help.c:3501 msgid "argname" msgstr "参数名称" # describe.c:1689 -#: sql_help.c:44 sql_help.c:47 sql_help.c:50 sql_help.c:312 sql_help.c:335 -#: sql_help.c:338 sql_help.c:341 sql_help.c:463 sql_help.c:468 sql_help.c:473 -#: sql_help.c:478 sql_help.c:1297 sql_help.c:1329 sql_help.c:1332 -#: sql_help.c:1335 sql_help.c:1699 sql_help.c:2421 sql_help.c:2424 -#: sql_help.c:2427 sql_help.c:2512 sql_help.c:3242 sql_help.c:3256 -#: sql_help.c:3259 sql_help.c:3262 +#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:318 sql_help.c:343 +#: sql_help.c:346 sql_help.c:349 sql_help.c:486 sql_help.c:491 sql_help.c:496 +#: sql_help.c:501 sql_help.c:1396 sql_help.c:1430 sql_help.c:1433 +#: sql_help.c:1436 sql_help.c:1819 sql_help.c:2583 sql_help.c:2586 +#: sql_help.c:2589 sql_help.c:2674 sql_help.c:3482 sql_help.c:3496 +#: sql_help.c:3499 sql_help.c:3502 msgid "argtype" msgstr "参数类型" -#: sql_help.c:104 sql_help.c:357 sql_help.c:425 sql_help.c:432 sql_help.c:712 -#: sql_help.c:795 sql_help.c:1013 sql_help.c:1123 sql_help.c:1149 -#: sql_help.c:1383 sql_help.c:1389 sql_help.c:1640 sql_help.c:1664 -#: sql_help.c:1669 sql_help.c:1739 sql_help.c:1887 sql_help.c:1968 -#: sql_help.c:2148 sql_help.c:2311 sql_help.c:2333 sql_help.c:2745 +#: sql_help.c:107 sql_help.c:365 sql_help.c:443 sql_help.c:455 sql_help.c:794 +#: sql_help.c:879 sql_help.c:1100 sql_help.c:1216 sql_help.c:1244 +#: sql_help.c:1484 sql_help.c:1490 sql_help.c:1745 sql_help.c:1777 +#: sql_help.c:1784 sql_help.c:1860 sql_help.c:2025 sql_help.c:2114 +#: sql_help.c:2294 sql_help.c:2473 sql_help.c:2495 sql_help.c:2925 +#: sql_help.c:3091 msgid "option" msgstr "选项" -#: sql_help.c:105 sql_help.c:713 sql_help.c:1124 sql_help.c:1740 -#: sql_help.c:1888 sql_help.c:2312 +#: sql_help.c:108 sql_help.c:795 sql_help.c:1217 sql_help.c:1861 +#: sql_help.c:2026 sql_help.c:2474 msgid "where option can be:" msgstr "选项可以是" -#: sql_help.c:106 sql_help.c:714 sql_help.c:1125 sql_help.c:1575 -#: sql_help.c:1889 sql_help.c:2313 +#: sql_help.c:109 sql_help.c:1678 +#, fuzzy +msgid "istemplate" +msgstr "模版" + +#: sql_help.c:110 sql_help.c:1679 +msgid "allowconn" +msgstr "" + +#: sql_help.c:111 sql_help.c:796 sql_help.c:1218 sql_help.c:1680 +#: sql_help.c:2027 sql_help.c:2475 msgid "connlimit" msgstr "连接限制" # describe.c:1342 -#: sql_help.c:112 sql_help.c:526 sql_help.c:588 sql_help.c:603 sql_help.c:892 -#: sql_help.c:936 +#: sql_help.c:117 sql_help.c:557 sql_help.c:619 sql_help.c:634 sql_help.c:979 +#: sql_help.c:1016 msgid "new_tablespace" msgstr "新的表空间" # sql_help.h:366 -#: sql_help.c:114 sql_help.c:117 sql_help.c:119 sql_help.c:483 sql_help.c:485 -#: sql_help.c:486 sql_help.c:721 sql_help.c:725 sql_help.c:728 sql_help.c:811 -#: sql_help.c:814 sql_help.c:1131 sql_help.c:1134 sql_help.c:1136 -#: sql_help.c:1707 sql_help.c:3036 sql_help.c:3406 +#: sql_help.c:119 sql_help.c:122 sql_help.c:124 sql_help.c:506 sql_help.c:508 +#: sql_help.c:509 sql_help.c:803 sql_help.c:807 sql_help.c:810 sql_help.c:895 +#: sql_help.c:898 sql_help.c:1224 sql_help.c:1227 sql_help.c:1229 +#: sql_help.c:1828 sql_help.c:3276 sql_help.c:3667 msgid "configuration_parameter" msgstr "配置参数" # describe.c:415 # describe.c:543 # describe.c:1477 -#: sql_help.c:115 sql_help.c:358 sql_help.c:421 sql_help.c:426 sql_help.c:433 -#: sql_help.c:484 sql_help.c:521 sql_help.c:594 sql_help.c:600 sql_help.c:722 -#: sql_help.c:796 sql_help.c:812 sql_help.c:813 sql_help.c:911 sql_help.c:930 -#: sql_help.c:957 sql_help.c:1014 sql_help.c:1132 sql_help.c:1150 -#: sql_help.c:1641 sql_help.c:1665 sql_help.c:1670 sql_help.c:1708 -#: sql_help.c:1709 sql_help.c:1768 sql_help.c:1800 sql_help.c:1969 -#: sql_help.c:2043 sql_help.c:2051 sql_help.c:2083 sql_help.c:2105 -#: sql_help.c:2122 sql_help.c:2149 sql_help.c:2334 sql_help.c:3407 -#: sql_help.c:3408 +#: sql_help.c:120 sql_help.c:366 sql_help.c:438 sql_help.c:444 sql_help.c:456 +#: sql_help.c:507 sql_help.c:552 sql_help.c:625 sql_help.c:631 sql_help.c:804 +#: sql_help.c:880 sql_help.c:896 sql_help.c:897 sql_help.c:998 sql_help.c:1018 +#: sql_help.c:1044 sql_help.c:1101 sql_help.c:1225 sql_help.c:1245 +#: sql_help.c:1746 sql_help.c:1778 sql_help.c:1785 sql_help.c:1829 +#: sql_help.c:1830 sql_help.c:1889 sql_help.c:1921 sql_help.c:2115 +#: sql_help.c:2189 sql_help.c:2197 sql_help.c:2229 sql_help.c:2251 +#: sql_help.c:2268 sql_help.c:2295 sql_help.c:2496 sql_help.c:3092 +#: sql_help.c:3668 sql_help.c:3669 msgid "value" msgstr "值" -#: sql_help.c:177 +#: sql_help.c:182 msgid "target_role" msgstr "目标角色" -#: sql_help.c:178 sql_help.c:1624 sql_help.c:1929 sql_help.c:1934 -#: sql_help.c:2852 sql_help.c:2859 sql_help.c:2873 sql_help.c:2879 -#: sql_help.c:3131 sql_help.c:3138 sql_help.c:3152 sql_help.c:3158 +#: sql_help.c:183 sql_help.c:1729 sql_help.c:2073 sql_help.c:2078 +#: sql_help.c:3039 sql_help.c:3046 sql_help.c:3060 sql_help.c:3066 +#: sql_help.c:3371 sql_help.c:3378 sql_help.c:3392 sql_help.c:3398 msgid "schema_name" msgstr "模式名称" -#: sql_help.c:179 +#: sql_help.c:184 msgid "abbreviated_grant_or_revoke" msgstr "简写形式的可授予或回收的权限" -#: sql_help.c:180 +#: sql_help.c:185 msgid "where abbreviated_grant_or_revoke is one of:" msgstr "简写形式的可授予或回收权限是下列内容之一" # describe.c:1375 -#: sql_help.c:181 sql_help.c:182 sql_help.c:183 sql_help.c:184 sql_help.c:185 -#: sql_help.c:186 sql_help.c:187 sql_help.c:188 sql_help.c:525 sql_help.c:587 -#: sql_help.c:891 sql_help.c:1743 sql_help.c:1744 sql_help.c:1745 -#: sql_help.c:1746 sql_help.c:1747 sql_help.c:1892 sql_help.c:1893 -#: sql_help.c:1894 sql_help.c:1895 sql_help.c:1896 sql_help.c:2316 -#: sql_help.c:2317 sql_help.c:2318 sql_help.c:2319 sql_help.c:2320 -#: sql_help.c:2853 sql_help.c:2857 sql_help.c:2860 sql_help.c:2862 -#: sql_help.c:2864 sql_help.c:2866 sql_help.c:2868 sql_help.c:2874 -#: sql_help.c:2876 sql_help.c:2878 sql_help.c:2880 sql_help.c:2882 -#: sql_help.c:2884 sql_help.c:2885 sql_help.c:2886 sql_help.c:3132 -#: sql_help.c:3136 sql_help.c:3139 sql_help.c:3141 sql_help.c:3143 -#: sql_help.c:3145 sql_help.c:3147 sql_help.c:3153 sql_help.c:3155 -#: sql_help.c:3157 sql_help.c:3159 sql_help.c:3161 sql_help.c:3163 -#: sql_help.c:3164 sql_help.c:3165 sql_help.c:3427 +#: sql_help.c:186 sql_help.c:187 sql_help.c:188 sql_help.c:189 sql_help.c:190 +#: sql_help.c:191 sql_help.c:192 sql_help.c:193 sql_help.c:531 sql_help.c:556 +#: sql_help.c:618 sql_help.c:756 sql_help.c:814 sql_help.c:978 sql_help.c:1232 +#: sql_help.c:1864 sql_help.c:1865 sql_help.c:1866 sql_help.c:1867 +#: sql_help.c:1868 sql_help.c:1994 sql_help.c:2030 sql_help.c:2031 +#: sql_help.c:2032 sql_help.c:2033 sql_help.c:2034 sql_help.c:2478 +#: sql_help.c:2479 sql_help.c:2480 sql_help.c:2481 sql_help.c:2482 +#: sql_help.c:3073 sql_help.c:3074 sql_help.c:3075 sql_help.c:3372 +#: sql_help.c:3376 sql_help.c:3379 sql_help.c:3381 sql_help.c:3383 +#: sql_help.c:3385 sql_help.c:3387 sql_help.c:3393 sql_help.c:3395 +#: sql_help.c:3397 sql_help.c:3399 sql_help.c:3401 sql_help.c:3403 +#: sql_help.c:3404 sql_help.c:3405 sql_help.c:3688 msgid "role_name" msgstr "角色名称" -#: sql_help.c:214 sql_help.c:414 sql_help.c:902 sql_help.c:904 sql_help.c:1166 -#: sql_help.c:1594 sql_help.c:1598 sql_help.c:1764 sql_help.c:2055 -#: sql_help.c:2065 sql_help.c:2087 sql_help.c:2900 sql_help.c:3303 -#: sql_help.c:3304 sql_help.c:3308 sql_help.c:3313 sql_help.c:3381 -#: sql_help.c:3382 sql_help.c:3387 sql_help.c:3392 sql_help.c:3521 -#: sql_help.c:3522 sql_help.c:3526 sql_help.c:3531 sql_help.c:3611 -#: sql_help.c:3613 sql_help.c:3644 sql_help.c:3690 sql_help.c:3691 -#: sql_help.c:3695 sql_help.c:3700 +#: sql_help.c:219 sql_help.c:431 sql_help.c:989 sql_help.c:991 sql_help.c:1261 +#: sql_help.c:1699 sql_help.c:1703 sql_help.c:1788 sql_help.c:1792 +#: sql_help.c:1885 sql_help.c:2201 sql_help.c:2211 sql_help.c:2233 +#: sql_help.c:3122 sql_help.c:3137 sql_help.c:3139 sql_help.c:3553 +#: sql_help.c:3554 sql_help.c:3563 sql_help.c:3604 sql_help.c:3605 +#: sql_help.c:3606 sql_help.c:3607 sql_help.c:3608 sql_help.c:3609 +#: sql_help.c:3642 sql_help.c:3643 sql_help.c:3648 sql_help.c:3653 +#: sql_help.c:3792 sql_help.c:3793 sql_help.c:3802 sql_help.c:3843 +#: sql_help.c:3844 sql_help.c:3845 sql_help.c:3846 sql_help.c:3847 +#: sql_help.c:3848 sql_help.c:3895 sql_help.c:3897 sql_help.c:3930 +#: sql_help.c:3986 sql_help.c:3987 sql_help.c:3996 sql_help.c:4037 +#: sql_help.c:4038 sql_help.c:4039 sql_help.c:4040 sql_help.c:4041 +#: sql_help.c:4042 msgid "expression" msgstr "表达式" -#: sql_help.c:217 +#: sql_help.c:222 msgid "domain_constraint" msgstr "域_约束" -#: sql_help.c:219 sql_help.c:221 sql_help.c:224 sql_help.c:884 sql_help.c:917 -#: sql_help.c:918 sql_help.c:919 sql_help.c:939 sql_help.c:1285 -#: sql_help.c:1597 sql_help.c:1672 sql_help.c:2054 sql_help.c:2064 +#: sql_help.c:224 sql_help.c:226 sql_help.c:229 sql_help.c:446 sql_help.c:447 +#: sql_help.c:971 sql_help.c:1004 sql_help.c:1005 sql_help.c:1006 +#: sql_help.c:1026 sql_help.c:1382 sql_help.c:1384 sql_help.c:1702 +#: sql_help.c:1787 sql_help.c:1791 sql_help.c:2200 sql_help.c:2210 +#: sql_help.c:3134 msgid "constraint_name" msgstr "约束名称" -#: sql_help.c:222 sql_help.c:885 +#: sql_help.c:227 sql_help.c:972 msgid "new_constraint_name" msgstr "new_constraint_name(新约束名)" -#: sql_help.c:291 sql_help.c:794 +#: sql_help.c:297 sql_help.c:878 msgid "new_version" msgstr "新版本" -#: sql_help.c:295 sql_help.c:297 +#: sql_help.c:301 sql_help.c:303 msgid "member_object" msgstr "member_object" -#: sql_help.c:298 +#: sql_help.c:304 msgid "where member_object is:" msgstr "member_object的位置:" -#: sql_help.c:299 sql_help.c:1278 sql_help.c:3233 -#| msgid "agg_name" +#: sql_help.c:305 sql_help.c:1375 sql_help.c:3473 msgid "aggregate_name" msgstr "aggregate_name" # describe.c:1688 -#: sql_help.c:301 sql_help.c:1280 sql_help.c:1516 sql_help.c:1520 -#: sql_help.c:1522 sql_help.c:2435 +#: sql_help.c:307 sql_help.c:1377 sql_help.c:1617 sql_help.c:1621 +#: sql_help.c:1623 sql_help.c:2597 msgid "source_type" msgstr "类型指派中的源数据类型" # describe.c:1689 -#: sql_help.c:302 sql_help.c:1281 sql_help.c:1517 sql_help.c:1521 -#: sql_help.c:1523 sql_help.c:2436 +#: sql_help.c:308 sql_help.c:1378 sql_help.c:1618 sql_help.c:1622 +#: sql_help.c:1624 sql_help.c:2598 msgid "target_type" msgstr "类型指派中的目标数据类型" # describe.c:1375 -#: sql_help.c:303 sql_help.c:304 sql_help.c:305 sql_help.c:306 sql_help.c:307 -#: sql_help.c:308 sql_help.c:313 sql_help.c:317 sql_help.c:319 sql_help.c:321 -#: sql_help.c:322 sql_help.c:323 sql_help.c:324 sql_help.c:325 sql_help.c:326 -#: sql_help.c:327 sql_help.c:328 sql_help.c:329 sql_help.c:330 sql_help.c:331 -#: sql_help.c:1282 sql_help.c:1287 sql_help.c:1288 sql_help.c:1289 -#: sql_help.c:1290 sql_help.c:1291 sql_help.c:1292 sql_help.c:1293 -#: sql_help.c:1298 sql_help.c:1300 sql_help.c:1304 sql_help.c:1306 -#: sql_help.c:1308 sql_help.c:1309 sql_help.c:1312 sql_help.c:1313 -#: sql_help.c:1314 sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 -#: sql_help.c:1318 sql_help.c:1319 sql_help.c:1320 sql_help.c:1323 -#: sql_help.c:1324 sql_help.c:3230 sql_help.c:3235 sql_help.c:3236 -#: sql_help.c:3237 sql_help.c:3238 sql_help.c:3244 sql_help.c:3245 -#: sql_help.c:3246 sql_help.c:3247 sql_help.c:3248 sql_help.c:3249 -#: sql_help.c:3250 sql_help.c:3251 +#: sql_help.c:309 sql_help.c:310 sql_help.c:311 sql_help.c:312 sql_help.c:313 +#: sql_help.c:314 sql_help.c:319 sql_help.c:323 sql_help.c:325 sql_help.c:327 +#: sql_help.c:328 sql_help.c:329 sql_help.c:330 sql_help.c:331 sql_help.c:332 +#: sql_help.c:333 sql_help.c:334 sql_help.c:335 sql_help.c:338 sql_help.c:339 +#: sql_help.c:1379 sql_help.c:1386 sql_help.c:1387 sql_help.c:1388 +#: sql_help.c:1389 sql_help.c:1390 sql_help.c:1391 sql_help.c:1392 +#: sql_help.c:1397 sql_help.c:1399 sql_help.c:1403 sql_help.c:1405 +#: sql_help.c:1407 sql_help.c:1408 sql_help.c:1411 sql_help.c:1412 +#: sql_help.c:1413 sql_help.c:1414 sql_help.c:1415 sql_help.c:1416 +#: sql_help.c:1417 sql_help.c:1418 sql_help.c:1419 sql_help.c:1424 +#: sql_help.c:1425 sql_help.c:3470 sql_help.c:3475 sql_help.c:3476 +#: sql_help.c:3477 sql_help.c:3478 sql_help.c:3484 sql_help.c:3485 +#: sql_help.c:3486 sql_help.c:3487 sql_help.c:3488 sql_help.c:3489 +#: sql_help.c:3490 sql_help.c:3491 msgid "object_name" msgstr "对象_名称" # describe.c:498 -#: sql_help.c:309 sql_help.c:665 sql_help.c:1294 sql_help.c:1518 -#: sql_help.c:1553 sql_help.c:1612 sql_help.c:1817 sql_help.c:1848 -#: sql_help.c:2207 sql_help.c:2869 sql_help.c:3148 sql_help.c:3239 -#: sql_help.c:3329 sql_help.c:3333 sql_help.c:3337 sql_help.c:3340 -#: sql_help.c:3547 sql_help.c:3551 sql_help.c:3555 sql_help.c:3558 -#: sql_help.c:3716 sql_help.c:3720 sql_help.c:3724 sql_help.c:3727 +#: sql_help.c:315 sql_help.c:723 sql_help.c:1393 sql_help.c:1619 +#: sql_help.c:1654 sql_help.c:1717 sql_help.c:1938 sql_help.c:1969 +#: sql_help.c:2369 sql_help.c:3056 sql_help.c:3388 sql_help.c:3479 +#: sql_help.c:3582 sql_help.c:3586 sql_help.c:3590 sql_help.c:3593 +#: sql_help.c:3821 sql_help.c:3825 sql_help.c:3829 sql_help.c:3832 +#: sql_help.c:4015 sql_help.c:4019 sql_help.c:4023 sql_help.c:4026 msgid "function_name" msgstr "函数名称" # describe.c:512 -#: sql_help.c:314 sql_help.c:658 sql_help.c:1301 sql_help.c:1841 +#: sql_help.c:320 sql_help.c:716 sql_help.c:1400 sql_help.c:1962 msgid "operator_name" msgstr "操作符名称" # describe.c:321 -#: sql_help.c:315 sql_help.c:613 sql_help.c:617 sql_help.c:1302 -#: sql_help.c:1818 sql_help.c:2553 +#: sql_help.c:321 sql_help.c:652 sql_help.c:656 sql_help.c:660 sql_help.c:1401 +#: sql_help.c:1939 sql_help.c:2715 msgid "left_type" msgstr "操作符左边操作数的类型" # describe.c:321 -#: sql_help.c:316 sql_help.c:614 sql_help.c:618 sql_help.c:1303 -#: sql_help.c:1819 sql_help.c:2554 +#: sql_help.c:322 sql_help.c:653 sql_help.c:657 sql_help.c:661 sql_help.c:1402 +#: sql_help.c:1940 sql_help.c:2716 msgid "right_type" msgstr "操作符右边操作数的类型" -#: sql_help.c:318 sql_help.c:320 sql_help.c:630 sql_help.c:633 sql_help.c:636 -#: sql_help.c:656 sql_help.c:668 sql_help.c:676 sql_help.c:679 sql_help.c:682 -#: sql_help.c:1305 sql_help.c:1307 sql_help.c:1838 sql_help.c:1859 -#: sql_help.c:2070 sql_help.c:2563 sql_help.c:2572 +#: sql_help.c:324 sql_help.c:326 sql_help.c:679 sql_help.c:682 sql_help.c:685 +#: sql_help.c:714 sql_help.c:726 sql_help.c:734 sql_help.c:737 sql_help.c:740 +#: sql_help.c:1404 sql_help.c:1406 sql_help.c:1959 sql_help.c:1980 +#: sql_help.c:2216 sql_help.c:2725 sql_help.c:2734 msgid "index_method" msgstr "访问索引的方法" -#: sql_help.c:332 +#: sql_help.c:336 sql_help.c:1022 sql_help.c:1420 sql_help.c:1825 +#: sql_help.c:2192 sql_help.c:2338 sql_help.c:2848 sql_help.c:3070 +#: sql_help.c:3402 +msgid "type_name" +msgstr "类型名称" + +#: sql_help.c:337 sql_help.c:1421 sql_help.c:1824 sql_help.c:2339 +#: sql_help.c:2563 sql_help.c:2849 sql_help.c:3062 sql_help.c:3394 +msgid "lang_name" +msgstr "语言名称" + +#: sql_help.c:340 msgid "and aggregate_signature is:" msgstr "aggregate_signature指的是:" # describe.c:498 -#: sql_help.c:355 sql_help.c:1638 +#: sql_help.c:363 sql_help.c:1743 msgid "handler_function" msgstr "handler_function(处理_函数)" # describe.c:498 -#: sql_help.c:356 sql_help.c:1639 +#: sql_help.c:364 sql_help.c:1744 msgid "validator_function" msgstr "validator_function(验证_函数)" # describe.c:128 -#: sql_help.c:397 sql_help.c:464 sql_help.c:578 sql_help.c:879 sql_help.c:1074 -#: sql_help.c:2061 sql_help.c:2062 sql_help.c:2078 sql_help.c:2079 +#: sql_help.c:413 sql_help.c:487 sql_help.c:609 sql_help.c:966 sql_help.c:1161 +#: sql_help.c:2207 sql_help.c:2208 sql_help.c:2224 sql_help.c:2225 msgid "action" msgstr "操作" # describe.c:1375 -#: sql_help.c:399 sql_help.c:406 sql_help.c:410 sql_help.c:411 sql_help.c:413 -#: sql_help.c:415 sql_help.c:416 sql_help.c:417 sql_help.c:419 sql_help.c:422 -#: sql_help.c:424 sql_help.c:580 sql_help.c:590 sql_help.c:592 sql_help.c:595 -#: sql_help.c:597 sql_help.c:776 sql_help.c:881 sql_help.c:894 sql_help.c:898 -#: sql_help.c:899 sql_help.c:903 sql_help.c:905 sql_help.c:906 sql_help.c:907 -#: sql_help.c:909 sql_help.c:912 sql_help.c:914 sql_help.c:1165 -#: sql_help.c:1168 sql_help.c:1188 sql_help.c:1284 sql_help.c:1380 -#: sql_help.c:1385 sql_help.c:1399 sql_help.c:1400 sql_help.c:1401 -#: sql_help.c:1662 sql_help.c:1702 sql_help.c:1763 sql_help.c:1798 -#: sql_help.c:1954 sql_help.c:2034 sql_help.c:2047 sql_help.c:2066 -#: sql_help.c:2068 sql_help.c:2075 sql_help.c:2086 sql_help.c:2103 -#: sql_help.c:2210 sql_help.c:2346 sql_help.c:2854 sql_help.c:2855 -#: sql_help.c:2899 sql_help.c:3133 sql_help.c:3134 sql_help.c:3232 -#: sql_help.c:3352 sql_help.c:3570 sql_help.c:3610 sql_help.c:3612 -#: sql_help.c:3629 sql_help.c:3632 sql_help.c:3739 +#: sql_help.c:415 sql_help.c:422 sql_help.c:426 sql_help.c:427 sql_help.c:430 +#: sql_help.c:432 sql_help.c:433 sql_help.c:434 sql_help.c:436 sql_help.c:439 +#: sql_help.c:441 sql_help.c:442 sql_help.c:611 sql_help.c:621 sql_help.c:623 +#: sql_help.c:626 sql_help.c:628 sql_help.c:860 sql_help.c:968 sql_help.c:981 +#: sql_help.c:985 sql_help.c:986 sql_help.c:990 sql_help.c:992 sql_help.c:993 +#: sql_help.c:994 sql_help.c:996 sql_help.c:999 sql_help.c:1001 +#: sql_help.c:1260 sql_help.c:1263 sql_help.c:1283 sql_help.c:1381 +#: sql_help.c:1481 sql_help.c:1486 sql_help.c:1500 sql_help.c:1501 +#: sql_help.c:1502 sql_help.c:1775 sql_help.c:1822 sql_help.c:1884 +#: sql_help.c:1919 sql_help.c:2100 sql_help.c:2180 sql_help.c:2193 +#: sql_help.c:2212 sql_help.c:2214 sql_help.c:2221 sql_help.c:2232 +#: sql_help.c:2249 sql_help.c:2372 sql_help.c:2508 sql_help.c:3041 +#: sql_help.c:3042 sql_help.c:3121 sql_help.c:3136 sql_help.c:3138 +#: sql_help.c:3140 sql_help.c:3373 sql_help.c:3374 sql_help.c:3472 +#: sql_help.c:3613 sql_help.c:3852 sql_help.c:3894 sql_help.c:3896 +#: sql_help.c:3898 sql_help.c:3915 sql_help.c:3918 sql_help.c:4046 msgid "column_name" msgstr "列名称" # describe.c:1375 -#: sql_help.c:400 sql_help.c:581 sql_help.c:882 +#: sql_help.c:416 sql_help.c:612 sql_help.c:969 msgid "new_column_name" msgstr "new_column_name(新列名)" -#: sql_help.c:405 sql_help.c:480 sql_help.c:589 sql_help.c:893 sql_help.c:1087 +#: sql_help.c:421 sql_help.c:503 sql_help.c:620 sql_help.c:980 sql_help.c:1174 msgid "where action is one of:" msgstr "操作可以是下列选项之一" # describe.c:526 -#: sql_help.c:407 sql_help.c:412 sql_help.c:895 sql_help.c:900 sql_help.c:1089 -#: sql_help.c:1093 sql_help.c:1592 sql_help.c:1663 sql_help.c:1837 -#: sql_help.c:2035 sql_help.c:2255 sql_help.c:2984 +#: sql_help.c:423 sql_help.c:428 sql_help.c:982 sql_help.c:987 sql_help.c:1176 +#: sql_help.c:1180 sql_help.c:1697 sql_help.c:1776 sql_help.c:1958 +#: sql_help.c:2181 sql_help.c:2417 sql_help.c:3223 msgid "data_type" msgstr "数据_类型" # describe.c:128 -#: sql_help.c:408 sql_help.c:896 sql_help.c:901 sql_help.c:1090 -#: sql_help.c:1094 sql_help.c:1593 sql_help.c:1666 sql_help.c:1765 -#: sql_help.c:2036 sql_help.c:2256 sql_help.c:2262 +#: sql_help.c:424 sql_help.c:429 sql_help.c:983 sql_help.c:988 sql_help.c:1177 +#: sql_help.c:1181 sql_help.c:1698 sql_help.c:1779 sql_help.c:1886 +#: sql_help.c:2182 sql_help.c:2418 sql_help.c:2424 sql_help.c:3131 msgid "collation" msgstr "校对规则" -#: sql_help.c:409 sql_help.c:897 sql_help.c:1667 sql_help.c:2037 -#: sql_help.c:2048 +#: sql_help.c:425 sql_help.c:984 sql_help.c:1780 sql_help.c:2183 +#: sql_help.c:2194 msgid "column_constraint" msgstr "列约束" -#: sql_help.c:418 sql_help.c:591 sql_help.c:908 +#: sql_help.c:435 sql_help.c:622 sql_help.c:995 msgid "integer" msgstr "整数" -#: sql_help.c:420 sql_help.c:423 sql_help.c:593 sql_help.c:596 sql_help.c:910 -#: sql_help.c:913 +#: sql_help.c:437 sql_help.c:440 sql_help.c:624 sql_help.c:627 sql_help.c:997 +#: sql_help.c:1000 msgid "attribute_option" msgstr "属性选项" +#: sql_help.c:445 sql_help.c:1002 sql_help.c:1781 sql_help.c:2184 +#: sql_help.c:2195 +msgid "table_constraint" +msgstr "表约束" + # describe.c:575 -#: sql_help.c:427 sql_help.c:428 sql_help.c:429 sql_help.c:430 sql_help.c:920 -#: sql_help.c:921 sql_help.c:922 sql_help.c:923 sql_help.c:1321 +#: sql_help.c:448 sql_help.c:449 sql_help.c:450 sql_help.c:451 sql_help.c:1007 +#: sql_help.c:1008 sql_help.c:1009 sql_help.c:1010 sql_help.c:1422 msgid "trigger_name" msgstr "触发器_名称" -#: sql_help.c:481 sql_help.c:1705 +#: sql_help.c:452 sql_help.c:453 sql_help.c:1020 sql_help.c:1021 +#: sql_help.c:1782 sql_help.c:2187 +msgid "parent_table" +msgstr "父表" + +#: sql_help.c:504 sql_help.c:1826 msgid "execution_cost" msgstr "执行函数的开销" -#: sql_help.c:482 sql_help.c:1706 +#: sql_help.c:505 sql_help.c:1827 msgid "result_rows" msgstr "返回记录的数量" -#: sql_help.c:497 sql_help.c:499 sql_help.c:501 -msgid "group_name" -msgstr "组名称" +# describe.c:1636 +#: sql_help.c:526 sql_help.c:528 sql_help.c:793 sql_help.c:801 sql_help.c:805 +#: sql_help.c:808 sql_help.c:811 sql_help.c:1215 sql_help.c:1223 +#: sql_help.c:1226 sql_help.c:1228 sql_help.c:1230 sql_help.c:2074 +#: sql_help.c:2076 sql_help.c:2079 sql_help.c:2080 sql_help.c:3040 +#: sql_help.c:3044 sql_help.c:3047 sql_help.c:3049 sql_help.c:3051 +#: sql_help.c:3053 sql_help.c:3055 sql_help.c:3061 sql_help.c:3063 +#: sql_help.c:3065 sql_help.c:3067 sql_help.c:3069 sql_help.c:3071 +#, fuzzy +msgid "role_specification" +msgstr "复制" -#: sql_help.c:498 sql_help.c:500 sql_help.c:1147 sql_help.c:1569 -#: sql_help.c:1930 sql_help.c:1932 sql_help.c:1935 sql_help.c:1936 -#: sql_help.c:2119 sql_help.c:2331 sql_help.c:2702 sql_help.c:3437 +#: sql_help.c:527 sql_help.c:529 sql_help.c:1242 sql_help.c:1672 +#: sql_help.c:2082 sql_help.c:2493 sql_help.c:2882 sql_help.c:3698 msgid "user_name" msgstr "用户名" +#: sql_help.c:530 sql_help.c:813 sql_help.c:1231 sql_help.c:2081 +#: sql_help.c:3072 +#, fuzzy +msgid "where role_specification can be:" +msgstr "选项可以是" + +#: sql_help.c:532 +msgid "group_name" +msgstr "组名称" + # describe.c:1342 -#: sql_help.c:518 sql_help.c:1574 sql_help.c:1769 sql_help.c:1801 -#: sql_help.c:2044 sql_help.c:2052 sql_help.c:2084 sql_help.c:2106 -#: sql_help.c:2118 sql_help.c:2881 sql_help.c:3160 +#: sql_help.c:549 sql_help.c:1677 sql_help.c:1890 sql_help.c:1922 +#: sql_help.c:2190 sql_help.c:2198 sql_help.c:2230 sql_help.c:2252 +#: sql_help.c:2264 sql_help.c:3068 sql_help.c:3400 msgid "tablespace_name" msgstr "表空间的名称" -#: sql_help.c:520 sql_help.c:523 sql_help.c:599 sql_help.c:601 sql_help.c:929 -#: sql_help.c:931 sql_help.c:1767 sql_help.c:1799 sql_help.c:2042 -#: sql_help.c:2050 sql_help.c:2082 sql_help.c:2104 +#: sql_help.c:551 sql_help.c:554 sql_help.c:630 sql_help.c:632 sql_help.c:1017 +#: sql_help.c:1019 sql_help.c:1888 sql_help.c:1920 sql_help.c:2188 +#: sql_help.c:2196 sql_help.c:2228 sql_help.c:2250 msgid "storage_parameter" msgstr "存储参数" # large_obj.c:264 -#: sql_help.c:546 sql_help.c:1299 sql_help.c:3243 +#: sql_help.c:577 sql_help.c:1398 sql_help.c:3483 msgid "large_object_oid" msgstr "大对象的OID" # describe.c:543 # describe.c:1477 -#: sql_help.c:598 sql_help.c:928 sql_help.c:937 sql_help.c:940 sql_help.c:1228 +#: sql_help.c:629 sql_help.c:1015 sql_help.c:1024 sql_help.c:1027 +#: sql_help.c:1323 msgid "index_name" msgstr "索引名称" -#: sql_help.c:657 sql_help.c:669 sql_help.c:1840 +#: sql_help.c:662 sql_help.c:1943 +msgid "res_proc" +msgstr "限制选择性估算函数" + +#: sql_help.c:663 sql_help.c:1944 +msgid "join_proc" +msgstr "连接选择性估算函数" + +#: sql_help.c:715 sql_help.c:727 sql_help.c:1961 msgid "strategy_number" msgstr "访问索引所用方法的编号" @@ -3592,336 +4187,333 @@ msgstr "访问索引所用方法的编号" # describe.c:745 # describe.c:1478 # describe.c:1587 -#: sql_help.c:659 sql_help.c:660 sql_help.c:663 sql_help.c:664 sql_help.c:670 -#: sql_help.c:671 sql_help.c:673 sql_help.c:674 sql_help.c:1842 -#: sql_help.c:1843 sql_help.c:1846 sql_help.c:1847 +#: sql_help.c:717 sql_help.c:718 sql_help.c:721 sql_help.c:722 sql_help.c:728 +#: sql_help.c:729 sql_help.c:731 sql_help.c:732 sql_help.c:1963 +#: sql_help.c:1964 sql_help.c:1967 sql_help.c:1968 msgid "op_type" msgstr "操作数类型" -#: sql_help.c:661 sql_help.c:1844 +#: sql_help.c:719 sql_help.c:1965 msgid "sort_family_name" msgstr "sort_family_name(排序家族名)" -#: sql_help.c:662 sql_help.c:672 sql_help.c:1845 +#: sql_help.c:720 sql_help.c:730 sql_help.c:1966 msgid "support_number" msgstr "访问索引所使用函数的编号" # describe.c:1689 -#: sql_help.c:666 sql_help.c:1519 sql_help.c:1849 +#: sql_help.c:724 sql_help.c:1620 sql_help.c:1970 sql_help.c:2341 +#: sql_help.c:2343 msgid "argument_type" msgstr "参数类型" +# describe.c:415 +# describe.c:543 +# describe.c:1477 +#: sql_help.c:754 sql_help.c:823 sql_help.c:859 sql_help.c:1140 +#: sql_help.c:1282 sql_help.c:1322 sql_help.c:1383 sql_help.c:1410 +#: sql_help.c:1423 sql_help.c:1480 sql_help.c:1485 sql_help.c:1774 +#: sql_help.c:1882 sql_help.c:1918 sql_help.c:1993 sql_help.c:2051 +#: sql_help.c:2099 sql_help.c:2179 sql_help.c:2191 sql_help.c:2248 +#: sql_help.c:2366 sql_help.c:2542 sql_help.c:2751 sql_help.c:2768 +#: sql_help.c:2858 sql_help.c:3038 sql_help.c:3043 sql_help.c:3088 +#: sql_help.c:3119 sql_help.c:3370 sql_help.c:3375 sql_help.c:3471 +#: sql_help.c:3568 sql_help.c:3570 sql_help.c:3619 sql_help.c:3658 +#: sql_help.c:3807 sql_help.c:3809 sql_help.c:3858 sql_help.c:3892 +#: sql_help.c:3914 sql_help.c:3916 sql_help.c:3917 sql_help.c:4001 +#: sql_help.c:4003 sql_help.c:4052 +msgid "table_name" +msgstr "表名" + +#: sql_help.c:757 sql_help.c:1995 +#, fuzzy +msgid "using_expression" +msgstr "排序表达式" + +#: sql_help.c:758 sql_help.c:1996 +#, fuzzy +msgid "check_expression" +msgstr "表达式" + # command.c:915 # command.c:939 # startup.c:187 # startup.c:205 -#: sql_help.c:715 sql_help.c:1126 sql_help.c:1741 sql_help.c:1890 -#: sql_help.c:2314 +#: sql_help.c:797 sql_help.c:1219 sql_help.c:1862 sql_help.c:2028 +#: sql_help.c:2476 msgid "password" msgstr "口令" -#: sql_help.c:716 sql_help.c:1127 sql_help.c:1742 sql_help.c:1891 -#: sql_help.c:2315 +#: sql_help.c:798 sql_help.c:1220 sql_help.c:1863 sql_help.c:2029 +#: sql_help.c:2477 msgid "timestamp" msgstr "时间戳" -#: sql_help.c:720 sql_help.c:724 sql_help.c:727 sql_help.c:730 sql_help.c:2861 -#: sql_help.c:3140 +#: sql_help.c:802 sql_help.c:806 sql_help.c:809 sql_help.c:812 sql_help.c:3048 +#: sql_help.c:3380 msgid "database_name" msgstr "数据库名称" -# describe.c:415 -# describe.c:543 -# describe.c:1477 -#: sql_help.c:739 sql_help.c:775 sql_help.c:1053 sql_help.c:1187 -#: sql_help.c:1227 sql_help.c:1286 sql_help.c:1311 sql_help.c:1322 -#: sql_help.c:1379 sql_help.c:1384 sql_help.c:1661 sql_help.c:1761 -#: sql_help.c:1797 sql_help.c:1913 sql_help.c:1953 sql_help.c:2033 -#: sql_help.c:2045 sql_help.c:2102 sql_help.c:2204 sql_help.c:2380 -#: sql_help.c:2597 sql_help.c:2678 sql_help.c:2851 sql_help.c:2856 -#: sql_help.c:2898 sql_help.c:3130 sql_help.c:3135 sql_help.c:3231 -#: sql_help.c:3318 sql_help.c:3320 sql_help.c:3358 sql_help.c:3397 -#: sql_help.c:3536 sql_help.c:3538 sql_help.c:3576 sql_help.c:3608 -#: sql_help.c:3628 sql_help.c:3630 sql_help.c:3631 sql_help.c:3705 -#: sql_help.c:3707 sql_help.c:3745 -msgid "table_name" -msgstr "表名" - -#: sql_help.c:769 sql_help.c:1948 +#: sql_help.c:853 sql_help.c:2094 msgid "increment" msgstr "增量" # describe.c:415 # describe.c:543 # describe.c:1477 -#: sql_help.c:770 sql_help.c:1949 +#: sql_help.c:854 sql_help.c:2095 msgid "minvalue" msgstr "最小值" # describe.c:415 # describe.c:543 # describe.c:1477 -#: sql_help.c:771 sql_help.c:1950 +#: sql_help.c:855 sql_help.c:2096 msgid "maxvalue" msgstr "最大值" -#: sql_help.c:772 sql_help.c:1951 sql_help.c:3316 sql_help.c:3395 -#: sql_help.c:3534 sql_help.c:3648 sql_help.c:3703 +#: sql_help.c:856 sql_help.c:2097 sql_help.c:3566 sql_help.c:3656 +#: sql_help.c:3805 sql_help.c:3934 sql_help.c:3999 msgid "start" msgstr "起始值" -#: sql_help.c:773 +#: sql_help.c:857 msgid "restart" msgstr "重新启动后的序列值" -#: sql_help.c:774 sql_help.c:1952 +#: sql_help.c:858 sql_help.c:2098 msgid "cache" msgstr "缓存" -#: sql_help.c:915 sql_help.c:2038 sql_help.c:2049 -msgid "table_constraint" -msgstr "表约束" - -#: sql_help.c:916 +#: sql_help.c:1003 msgid "table_constraint_using_index" msgstr "table_constraint_using_index(表约束使用索引)" -#: sql_help.c:924 sql_help.c:925 sql_help.c:926 sql_help.c:927 +#: sql_help.c:1011 sql_help.c:1012 sql_help.c:1013 sql_help.c:1014 msgid "rewrite_rule_name" msgstr "重写规则名称" -#: sql_help.c:932 sql_help.c:933 sql_help.c:2041 -msgid "parent_table" -msgstr "父表" - -#: sql_help.c:934 sql_help.c:2046 sql_help.c:2883 sql_help.c:3162 -msgid "type_name" -msgstr "类型名称" - -#: sql_help.c:938 +#: sql_help.c:1025 msgid "and table_constraint_using_index is:" msgstr "table_constraint_using_index 是:" # describe.c:1342 -#: sql_help.c:956 sql_help.c:959 sql_help.c:2121 +#: sql_help.c:1043 sql_help.c:1046 sql_help.c:2267 msgid "tablespace_option" msgstr "表空间_选项" -#: sql_help.c:980 sql_help.c:983 sql_help.c:989 sql_help.c:993 +#: sql_help.c:1067 sql_help.c:1070 sql_help.c:1076 sql_help.c:1080 msgid "token_type" msgstr "符号类型" -#: sql_help.c:981 sql_help.c:984 +#: sql_help.c:1068 sql_help.c:1071 msgid "dictionary_name" msgstr "字典名称" -#: sql_help.c:986 sql_help.c:990 +#: sql_help.c:1073 sql_help.c:1077 msgid "old_dictionary" msgstr "旧的字典" -#: sql_help.c:987 sql_help.c:991 +#: sql_help.c:1074 sql_help.c:1078 msgid "new_dictionary" msgstr "新的字典" -#: sql_help.c:1078 sql_help.c:1088 sql_help.c:1091 sql_help.c:1092 -#: sql_help.c:2254 +#: sql_help.c:1165 sql_help.c:1175 sql_help.c:1178 sql_help.c:1179 +#: sql_help.c:2416 msgid "attribute_name" msgstr "属性_名称" -#: sql_help.c:1079 +#: sql_help.c:1166 msgid "new_attribute_name" msgstr "new_attribute_name(新属性名)" -#: sql_help.c:1085 +#: sql_help.c:1172 msgid "new_enum_value" msgstr "new_enum_value(新枚举名)" -#: sql_help.c:1086 +#: sql_help.c:1173 msgid "existing_enum_value" msgstr "existing_enum_value" -#: sql_help.c:1148 sql_help.c:1668 sql_help.c:1964 sql_help.c:2332 -#: sql_help.c:2703 sql_help.c:2867 sql_help.c:3146 +#: sql_help.c:1243 sql_help.c:1783 sql_help.c:2110 sql_help.c:2494 +#: sql_help.c:2883 sql_help.c:3054 sql_help.c:3089 sql_help.c:3386 msgid "server_name" msgstr "服务器名称" # help.c:88 -#: sql_help.c:1176 sql_help.c:1179 sql_help.c:2347 +#: sql_help.c:1271 sql_help.c:1274 sql_help.c:2509 msgid "view_option_name" msgstr "view_option_name(视图选项名)" # help.c:88 -#: sql_help.c:1177 sql_help.c:2348 +#: sql_help.c:1272 sql_help.c:2510 msgid "view_option_value" msgstr "view_option_value(视图选项值)" -#: sql_help.c:1202 sql_help.c:3453 sql_help.c:3455 sql_help.c:3479 +#: sql_help.c:1297 sql_help.c:3714 sql_help.c:3716 sql_help.c:3740 msgid "transaction_mode" msgstr "事务模式" -#: sql_help.c:1203 sql_help.c:3456 sql_help.c:3480 +#: sql_help.c:1298 sql_help.c:3717 sql_help.c:3741 msgid "where transaction_mode is one of:" msgstr "事务模式可以是下列选项之一:" -#: sql_help.c:1283 +#: sql_help.c:1380 msgid "relation_name" msgstr "relation_name(关系名)" # describe.c:1375 -#: sql_help.c:1310 +#: sql_help.c:1385 sql_help.c:3050 sql_help.c:3382 +msgid "domain_name" +msgstr "域_名称" + +# describe.c:1375 +#: sql_help.c:1409 msgid "rule_name" msgstr "规则_名称" -#: sql_help.c:1325 +#: sql_help.c:1426 msgid "text" msgstr "文本" -#: sql_help.c:1350 sql_help.c:2993 sql_help.c:3180 +#: sql_help.c:1451 sql_help.c:3232 sql_help.c:3420 msgid "transaction_id" msgstr "事务_ID" # describe.c:1375 -#: sql_help.c:1381 sql_help.c:1387 sql_help.c:2919 +#: sql_help.c:1482 sql_help.c:1488 sql_help.c:3158 msgid "filename" msgstr "文件名" -#: sql_help.c:1382 sql_help.c:1388 sql_help.c:1915 sql_help.c:1916 -#: sql_help.c:1917 +#: sql_help.c:1483 sql_help.c:1489 sql_help.c:2053 sql_help.c:2054 +#: sql_help.c:2055 msgid "command" msgstr "命令" -#: sql_help.c:1386 sql_help.c:1802 sql_help.c:2107 sql_help.c:2349 -#: sql_help.c:2367 sql_help.c:2901 +#: sql_help.c:1487 sql_help.c:1923 sql_help.c:2253 sql_help.c:2511 +#: sql_help.c:2529 sql_help.c:3123 msgid "query" msgstr "查询" -#: sql_help.c:1390 sql_help.c:2748 +#: sql_help.c:1491 sql_help.c:2928 msgid "where option can be one of:" msgstr "选项可以是下列内容之一:" # help.c:211 -#: sql_help.c:1391 +#: sql_help.c:1492 msgid "format_name" msgstr "格式_名称" -#: sql_help.c:1392 sql_help.c:1393 sql_help.c:1396 sql_help.c:2749 -#: sql_help.c:2750 sql_help.c:2751 sql_help.c:2752 sql_help.c:2753 +#: sql_help.c:1493 sql_help.c:1494 sql_help.c:1497 sql_help.c:2929 +#: sql_help.c:2930 sql_help.c:2931 sql_help.c:2932 sql_help.c:2933 msgid "boolean" msgstr "布尔" -#: sql_help.c:1394 +#: sql_help.c:1495 msgid "delimiter_character" msgstr "分隔字符" -#: sql_help.c:1395 +#: sql_help.c:1496 msgid "null_string" msgstr "空字符串" -#: sql_help.c:1397 +#: sql_help.c:1498 msgid "quote_character" msgstr "引用字符" -#: sql_help.c:1398 +#: sql_help.c:1499 msgid "escape_character" msgstr "转义字符" # describe.c:365 -#: sql_help.c:1402 +#: sql_help.c:1503 msgid "encoding_name" msgstr "encoding_name(编码名)" # describe.c:526 -#: sql_help.c:1459 sql_help.c:1475 sql_help.c:1478 -#| msgid "data_type" +#: sql_help.c:1560 sql_help.c:1576 sql_help.c:1579 msgid "arg_data_type" msgstr "arg_data_type" # describe.c:415 # describe.c:543 # describe.c:1477 -#: sql_help.c:1460 sql_help.c:1479 sql_help.c:1487 +#: sql_help.c:1561 sql_help.c:1580 sql_help.c:1588 msgid "sfunc" msgstr "状态转换函数名称" # describe.c:526 -#: sql_help.c:1461 sql_help.c:1480 sql_help.c:1488 +#: sql_help.c:1562 sql_help.c:1581 sql_help.c:1589 msgid "state_data_type" msgstr "状态值的数据类型" # describe.c:526 -#: sql_help.c:1462 sql_help.c:1481 sql_help.c:1489 -#| msgid "state_data_type" +#: sql_help.c:1563 sql_help.c:1582 sql_help.c:1590 msgid "state_data_size" msgstr "state_data_size" # describe.c:498 -#: sql_help.c:1463 sql_help.c:1482 sql_help.c:1490 +#: sql_help.c:1564 sql_help.c:1583 sql_help.c:1591 msgid "ffunc" msgstr "计算最终结果集的函数名称" -#: sql_help.c:1464 sql_help.c:1483 sql_help.c:1491 +#: sql_help.c:1565 sql_help.c:1584 sql_help.c:1592 msgid "initial_condition" msgstr "初始条件" # describe.c:415 # describe.c:543 # describe.c:1477 -#: sql_help.c:1465 sql_help.c:1492 -#| msgid "sfunc" +#: sql_help.c:1566 sql_help.c:1593 msgid "msfunc" msgstr "msfunc" # describe.c:415 # describe.c:543 # describe.c:1477 -#: sql_help.c:1466 sql_help.c:1493 -#| msgid "minvalue" +#: sql_help.c:1567 sql_help.c:1594 msgid "minvfunc" msgstr "minvfunc" # describe.c:526 -#: sql_help.c:1467 sql_help.c:1494 -#| msgid "state_data_type" +#: sql_help.c:1568 sql_help.c:1595 msgid "mstate_data_type" msgstr "mstate_data_type" # describe.c:526 -#: sql_help.c:1468 sql_help.c:1495 -#| msgid "state_data_type" +#: sql_help.c:1569 sql_help.c:1596 msgid "mstate_data_size" msgstr "mstate_data_size" # describe.c:498 -#: sql_help.c:1469 sql_help.c:1496 -#| msgid "ffunc" +#: sql_help.c:1570 sql_help.c:1597 msgid "mffunc" msgstr "mffunc" -#: sql_help.c:1470 sql_help.c:1497 -#| msgid "initial_condition" +#: sql_help.c:1571 sql_help.c:1598 msgid "minitial_condition" msgstr "minitial_condition" # describe.c:512 -#: sql_help.c:1471 sql_help.c:1498 +#: sql_help.c:1572 sql_help.c:1599 msgid "sort_operator" msgstr "排序_操作符" -#: sql_help.c:1484 +#: sql_help.c:1585 msgid "or the old syntax" msgstr "或者是旧的语法" # describe.c:1689 -#: sql_help.c:1486 +#: sql_help.c:1587 msgid "base_type" msgstr "基础_类型" # help.c:127 -#: sql_help.c:1537 +#: sql_help.c:1638 msgid "locale" msgstr "本地化语言" -#: sql_help.c:1538 sql_help.c:1572 +#: sql_help.c:1639 sql_help.c:1675 msgid "lc_collate" msgstr "排序规则" @@ -3929,294 +4521,299 @@ msgstr "排序规则" # describe.c:745 # describe.c:1478 # describe.c:1587 -#: sql_help.c:1539 sql_help.c:1573 +#: sql_help.c:1640 sql_help.c:1676 msgid "lc_ctype" msgstr "字符分类" # describe.c:1636 -#: sql_help.c:1541 +#: sql_help.c:1642 msgid "existing_collation" msgstr "existing_collation(当前的本地化语言)" # describe.c:187 -#: sql_help.c:1551 +#: sql_help.c:1652 msgid "source_encoding" msgstr "源_编码" # describe.c:365 -#: sql_help.c:1552 +#: sql_help.c:1653 msgid "dest_encoding" msgstr "目的_编码" -#: sql_help.c:1570 sql_help.c:2147 +#: sql_help.c:1673 sql_help.c:2293 msgid "template" msgstr "模版" # describe.c:365 -#: sql_help.c:1571 +#: sql_help.c:1674 msgid "encoding" msgstr "字符集编码" +#: sql_help.c:1700 +msgid "constraint" +msgstr "约束" + # describe.c:1174 -#: sql_help.c:1596 +#: sql_help.c:1701 msgid "where constraint is:" msgstr "约束是:" -#: sql_help.c:1610 sql_help.c:1912 sql_help.c:2203 +#: sql_help.c:1715 sql_help.c:2050 sql_help.c:2365 msgid "event" msgstr "事件" -#: sql_help.c:1611 +#: sql_help.c:1716 msgid "filter_variable" msgstr "过滤器变量" # describe.c:498 -#: sql_help.c:1623 +#: sql_help.c:1728 msgid "extension_name" msgstr "extension_name(扩展名)" -#: sql_help.c:1625 +#: sql_help.c:1730 msgid "version" msgstr "version(版本)" -#: sql_help.c:1626 +#: sql_help.c:1731 msgid "old_version" msgstr "老版本" # describe.c:1174 -#: sql_help.c:1671 sql_help.c:2053 +#: sql_help.c:1786 sql_help.c:2199 msgid "where column_constraint is:" msgstr "列的约束是:" # describe.c:1639 -#: sql_help.c:1673 sql_help.c:1700 sql_help.c:2056 +#: sql_help.c:1789 sql_help.c:1820 sql_help.c:2202 msgid "default_expr" -msgstr "缺省_表达式" +msgstr "默认_表达式" + +#: sql_help.c:1790 sql_help.c:2209 +msgid "and table_constraint is:" +msgstr "表约束是:" # describe.c:1689 -#: sql_help.c:1701 +#: sql_help.c:1821 msgid "rettype" msgstr "返回类型" -#: sql_help.c:1703 +#: sql_help.c:1823 msgid "column_type" msgstr "列的类型" -#: sql_help.c:1704 sql_help.c:2401 sql_help.c:2875 sql_help.c:3154 -msgid "lang_name" -msgstr "语言名称" - # describe.c:977 -#: sql_help.c:1710 +#: sql_help.c:1831 msgid "definition" msgstr "定义" -#: sql_help.c:1711 +#: sql_help.c:1832 msgid "obj_file" msgstr "目标文件" -#: sql_help.c:1712 +#: sql_help.c:1833 msgid "link_symbol" msgstr "链接_符号" -#: sql_help.c:1713 +#: sql_help.c:1834 msgid "attribute" msgstr "属性" -#: sql_help.c:1748 sql_help.c:1897 sql_help.c:2321 +#: sql_help.c:1869 sql_help.c:2035 sql_help.c:2483 msgid "uid" msgstr "uid" -#: sql_help.c:1762 +#: sql_help.c:1883 msgid "method" msgstr "方法" -#: sql_help.c:1766 sql_help.c:2088 +#: sql_help.c:1887 sql_help.c:2234 sql_help.c:3132 msgid "opclass" msgstr "操作符类型的名称" # describe.c:937 -#: sql_help.c:1770 sql_help.c:2074 +#: sql_help.c:1891 sql_help.c:2220 msgid "predicate" msgstr "述词" -#: sql_help.c:1782 +#: sql_help.c:1903 msgid "call_handler" msgstr "调用函数" -#: sql_help.c:1783 +#: sql_help.c:1904 msgid "inline_handler" msgstr "匿名代码块" # describe.c:498 -#: sql_help.c:1784 +#: sql_help.c:1905 msgid "valfunction" msgstr "验证函数" -#: sql_help.c:1820 +#: sql_help.c:1941 msgid "com_op" msgstr "交换操作符" -#: sql_help.c:1821 +#: sql_help.c:1942 msgid "neg_op" msgstr "取负操作符" -#: sql_help.c:1822 -msgid "res_proc" -msgstr "限制选择性估算函数" - -#: sql_help.c:1823 -msgid "join_proc" -msgstr "连接选择性估算函数" - -#: sql_help.c:1839 +#: sql_help.c:1960 msgid "family_name" msgstr "操作符群的名称" # describe.c:1635 -#: sql_help.c:1850 +#: sql_help.c:1971 msgid "storage_type" msgstr "存储类型" # help.c:123 -#: sql_help.c:1914 sql_help.c:2206 sql_help.c:2383 sql_help.c:3307 -#: sql_help.c:3309 sql_help.c:3386 sql_help.c:3388 sql_help.c:3525 -#: sql_help.c:3527 sql_help.c:3615 sql_help.c:3694 sql_help.c:3696 +#: sql_help.c:2052 sql_help.c:2368 sql_help.c:2545 sql_help.c:3142 +#: sql_help.c:3557 sql_help.c:3559 sql_help.c:3647 sql_help.c:3649 +#: sql_help.c:3796 sql_help.c:3798 sql_help.c:3901 sql_help.c:3990 +#: sql_help.c:3992 msgid "condition" msgstr "条件" -#: sql_help.c:1918 sql_help.c:2209 +#: sql_help.c:2056 sql_help.c:2371 msgid "where event can be one of:" msgstr "事件可以下述之一:" -#: sql_help.c:1931 sql_help.c:1933 +#: sql_help.c:2075 sql_help.c:2077 msgid "schema_element" msgstr "模式中对象" -#: sql_help.c:1965 +#: sql_help.c:2111 msgid "server_type" msgstr "服务器类型" -#: sql_help.c:1966 +#: sql_help.c:2112 msgid "server_version" msgstr "服务器版本" -#: sql_help.c:1967 sql_help.c:2865 sql_help.c:3144 +#: sql_help.c:2113 sql_help.c:3052 sql_help.c:3384 msgid "fdw_name" msgstr "外部数据封装器的名称" # describe.c:1688 -#: sql_help.c:2039 +#: sql_help.c:2185 msgid "source_table" msgstr "源表" # help.c:88 -#: sql_help.c:2040 +#: sql_help.c:2186 msgid "like_option" msgstr "like选项" -#: sql_help.c:2057 sql_help.c:2058 sql_help.c:2067 sql_help.c:2069 -#: sql_help.c:2073 +#: sql_help.c:2203 sql_help.c:2204 sql_help.c:2213 sql_help.c:2215 +#: sql_help.c:2219 msgid "index_parameters" msgstr "索引参数" # describe.c:415 # describe.c:543 # describe.c:1477 -#: sql_help.c:2059 sql_help.c:2076 +#: sql_help.c:2205 sql_help.c:2222 msgid "reftable" msgstr "所引用的表" # describe.c:744 -#: sql_help.c:2060 sql_help.c:2077 +#: sql_help.c:2206 sql_help.c:2223 msgid "refcolumn" msgstr "所引用的列" -#: sql_help.c:2063 -msgid "and table_constraint is:" -msgstr "表约束是:" - -#: sql_help.c:2071 +#: sql_help.c:2217 msgid "exclude_element" msgstr "排除项" # describe.c:512 -#: sql_help.c:2072 sql_help.c:3314 sql_help.c:3393 sql_help.c:3532 -#: sql_help.c:3646 sql_help.c:3701 +#: sql_help.c:2218 sql_help.c:3564 sql_help.c:3654 sql_help.c:3803 +#: sql_help.c:3932 sql_help.c:3997 msgid "operator" msgstr "运算子" -#: sql_help.c:2080 +#: sql_help.c:2226 msgid "and like_option is:" msgstr "like_选项是" -#: sql_help.c:2081 +#: sql_help.c:2227 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "在UNIQUE, PRIMARY KEY和EXCLUDE中的索引参数是:" -#: sql_help.c:2085 +#: sql_help.c:2231 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "在EXCLUDE约束中的排除项是:" -#: sql_help.c:2120 +#: sql_help.c:2266 msgid "directory" msgstr "目录" -#: sql_help.c:2134 +#: sql_help.c:2280 msgid "parser_name" msgstr "解析器名称 " -#: sql_help.c:2135 +#: sql_help.c:2281 msgid "source_config" msgstr "已存在的文本搜索配置名称" # describe.c:498 -#: sql_help.c:2164 +#: sql_help.c:2310 msgid "start_function" msgstr "启动_函数" # sql_help.h:249 -#: sql_help.c:2165 +#: sql_help.c:2311 msgid "gettoken_function" msgstr "获取下一个符号函数的名称" # describe.c:498 -#: sql_help.c:2166 +#: sql_help.c:2312 msgid "end_function" msgstr "结束_函数" # describe.c:498 -#: sql_help.c:2167 +#: sql_help.c:2313 msgid "lextypes_function" msgstr "语义类型_函数" # describe.c:498 -#: sql_help.c:2168 +#: sql_help.c:2314 msgid "headline_function" msgstr "标题_函数" # describe.c:498 -#: sql_help.c:2180 +#: sql_help.c:2326 msgid "init_function" msgstr "初始化_函数" # describe.c:498 -#: sql_help.c:2181 +#: sql_help.c:2327 msgid "lexize_function" msgstr "LEXIZE函数" -#: sql_help.c:2205 +# describe.c:498 +#: sql_help.c:2340 +#, fuzzy +msgid "from_sql_function_name" +msgstr "函数名称" + +# describe.c:498 +#: sql_help.c:2342 +#, fuzzy +msgid "to_sql_function_name" +msgstr "函数名称" + +#: sql_help.c:2367 msgid "referenced_table_name" msgstr "被引用表的名称" -#: sql_help.c:2208 +#: sql_help.c:2370 msgid "arguments" msgstr "参数" # describe.c:415 # describe.c:543 # describe.c:1477 -#: sql_help.c:2258 sql_help.c:3252 +#: sql_help.c:2420 sql_help.c:3492 msgid "label" msgstr "标签" @@ -4224,1084 +4821,1189 @@ msgstr "标签" # describe.c:745 # describe.c:1478 # describe.c:1587 -#: sql_help.c:2260 +#: sql_help.c:2422 msgid "subtype" msgstr "子类型" # describe.c:512 -#: sql_help.c:2261 +#: sql_help.c:2423 msgid "subtype_operator_class" msgstr "subtype_operator_class(子类型_操作符_类)" # describe.c:498 -#: sql_help.c:2263 +#: sql_help.c:2425 msgid "canonical_function" msgstr "标准_函数" # describe.c:498 -#: sql_help.c:2264 +#: sql_help.c:2426 msgid "subtype_diff_function" msgstr "subtype_diff_function(子类型_区分_函数)" # describe.c:498 -#: sql_help.c:2266 +#: sql_help.c:2428 msgid "input_function" msgstr "输入_函数" # describe.c:498 -#: sql_help.c:2267 +#: sql_help.c:2429 msgid "output_function" msgstr "输出_函数" # sql_help.h:249 -#: sql_help.c:2268 +#: sql_help.c:2430 msgid "receive_function" msgstr "接收_函数" # describe.c:498 -#: sql_help.c:2269 +#: sql_help.c:2431 msgid "send_function" msgstr "发送_函数" -#: sql_help.c:2270 +#: sql_help.c:2432 msgid "type_modifier_input_function" msgstr "类型修改器数组输入函数名称" -#: sql_help.c:2271 +#: sql_help.c:2433 msgid "type_modifier_output_function" msgstr "类型修改器输出函数名称" # describe.c:498 -#: sql_help.c:2272 +#: sql_help.c:2434 msgid "analyze_function" msgstr "分析_函数" -#: sql_help.c:2273 +#: sql_help.c:2435 msgid "internallength" msgstr "内部长度" # describe.c:1693 -#: sql_help.c:2274 +#: sql_help.c:2436 msgid "alignment" msgstr "顺序排列(alignment)" # describe.c:1635 -#: sql_help.c:2275 +#: sql_help.c:2437 msgid "storage" msgstr "存储" -#: sql_help.c:2276 +#: sql_help.c:2438 msgid "like_type" msgstr "LIKE类型(like_type)" -#: sql_help.c:2277 +#: sql_help.c:2439 msgid "category" msgstr "类型" -#: sql_help.c:2278 +#: sql_help.c:2440 msgid "preferred" msgstr "优先" # describe.c:1639 -#: sql_help.c:2279 +#: sql_help.c:2441 msgid "default" -msgstr "缺省" +msgstr "默认" -#: sql_help.c:2280 +#: sql_help.c:2442 msgid "element" msgstr "成员项" -#: sql_help.c:2281 +#: sql_help.c:2443 msgid "delimiter" msgstr "分隔符" -#: sql_help.c:2282 +#: sql_help.c:2444 msgid "collatable" msgstr "要校对的" -#: sql_help.c:2379 sql_help.c:2897 sql_help.c:3302 sql_help.c:3380 -#: sql_help.c:3520 sql_help.c:3607 sql_help.c:3689 +#: sql_help.c:2541 sql_help.c:3118 sql_help.c:3552 sql_help.c:3641 +#: sql_help.c:3791 sql_help.c:3891 sql_help.c:3985 msgid "with_query" msgstr "with查询语句(with_query)" -#: sql_help.c:2381 sql_help.c:3321 sql_help.c:3324 sql_help.c:3327 -#: sql_help.c:3331 sql_help.c:3335 sql_help.c:3343 sql_help.c:3539 -#: sql_help.c:3542 sql_help.c:3545 sql_help.c:3549 sql_help.c:3553 -#: sql_help.c:3561 sql_help.c:3609 sql_help.c:3708 sql_help.c:3711 -#: sql_help.c:3714 sql_help.c:3718 sql_help.c:3722 sql_help.c:3730 +#: sql_help.c:2543 sql_help.c:3120 sql_help.c:3571 sql_help.c:3577 +#: sql_help.c:3580 sql_help.c:3584 sql_help.c:3588 sql_help.c:3596 +#: sql_help.c:3810 sql_help.c:3816 sql_help.c:3819 sql_help.c:3823 +#: sql_help.c:3827 sql_help.c:3835 sql_help.c:3893 sql_help.c:4004 +#: sql_help.c:4010 sql_help.c:4013 sql_help.c:4017 sql_help.c:4021 +#: sql_help.c:4029 msgid "alias" -msgstr "化名" +msgstr "别名" -#: sql_help.c:2382 +#: sql_help.c:2544 msgid "using_list" msgstr "USING列表(using_list)" -#: sql_help.c:2384 sql_help.c:2779 sql_help.c:2960 sql_help.c:3616 +#: sql_help.c:2546 sql_help.c:2959 sql_help.c:3199 sql_help.c:3902 msgid "cursor_name" msgstr "游标名称" -#: sql_help.c:2385 sql_help.c:2902 sql_help.c:3617 +#: sql_help.c:2547 sql_help.c:3126 sql_help.c:3903 msgid "output_expression" msgstr "输出表达式" -#: sql_help.c:2386 sql_help.c:2903 sql_help.c:3305 sql_help.c:3383 -#: sql_help.c:3523 sql_help.c:3618 sql_help.c:3692 +#: sql_help.c:2548 sql_help.c:3127 sql_help.c:3555 sql_help.c:3644 +#: sql_help.c:3794 sql_help.c:3904 sql_help.c:3988 msgid "output_name" msgstr "输出名称" -#: sql_help.c:2402 +#: sql_help.c:2564 msgid "code" msgstr "编码" -#: sql_help.c:2727 +#: sql_help.c:2907 msgid "parameter" msgstr "参数" -#: sql_help.c:2746 sql_help.c:2747 sql_help.c:2985 +#: sql_help.c:2926 sql_help.c:2927 sql_help.c:3224 msgid "statement" msgstr "语句" # help.c:123 -#: sql_help.c:2778 sql_help.c:2959 +#: sql_help.c:2958 sql_help.c:3198 msgid "direction" msgstr "方向" -#: sql_help.c:2780 sql_help.c:2961 +#: sql_help.c:2960 sql_help.c:3200 msgid "where direction can be empty or one of:" msgstr "方向可以为空或者是下列选项之一:" -#: sql_help.c:2781 sql_help.c:2782 sql_help.c:2783 sql_help.c:2784 -#: sql_help.c:2785 sql_help.c:2962 sql_help.c:2963 sql_help.c:2964 -#: sql_help.c:2965 sql_help.c:2966 sql_help.c:3315 sql_help.c:3317 -#: sql_help.c:3394 sql_help.c:3396 sql_help.c:3533 sql_help.c:3535 -#: sql_help.c:3647 sql_help.c:3649 sql_help.c:3702 sql_help.c:3704 +#: sql_help.c:2961 sql_help.c:2962 sql_help.c:2963 sql_help.c:2964 +#: sql_help.c:2965 sql_help.c:3201 sql_help.c:3202 sql_help.c:3203 +#: sql_help.c:3204 sql_help.c:3205 sql_help.c:3565 sql_help.c:3567 +#: sql_help.c:3655 sql_help.c:3657 sql_help.c:3804 sql_help.c:3806 +#: sql_help.c:3933 sql_help.c:3935 sql_help.c:3998 sql_help.c:4000 msgid "count" msgstr "查询所用返回记录的最大数量" # describe.c:415 # describe.c:543 # describe.c:1477 -#: sql_help.c:2858 sql_help.c:3137 +#: sql_help.c:3045 sql_help.c:3377 msgid "sequence_name" msgstr "序列名称" -# describe.c:1375 -#: sql_help.c:2863 sql_help.c:3142 -msgid "domain_name" -msgstr "域_名称" - -#: sql_help.c:2871 sql_help.c:3150 +#: sql_help.c:3058 sql_help.c:3390 msgid "arg_name" msgstr "参数名称" # describe.c:1689 -#: sql_help.c:2872 sql_help.c:3151 +#: sql_help.c:3059 sql_help.c:3391 msgid "arg_type" msgstr "参数类型" -#: sql_help.c:2877 sql_help.c:3156 +#: sql_help.c:3064 sql_help.c:3396 msgid "loid" msgstr "loid" -#: sql_help.c:2911 sql_help.c:2974 sql_help.c:3593 +# sql_help.h:277 +#: sql_help.c:3087 +#, fuzzy +msgid "remote_schema" +msgstr "移除一个模式" + +# help.c:127 +#: sql_help.c:3090 +#, fuzzy +msgid "local_schema" +msgstr "本地接口" + +#: sql_help.c:3124 +msgid "conflict_target" +msgstr "" + +# describe.c:498 +#: sql_help.c:3125 +#, fuzzy +msgid "conflict_action" +msgstr "标准_函数" + +#: sql_help.c:3128 +#, fuzzy +msgid "where conflict_target can be one of:" +msgstr "from 列表中的项可以是下列内容之一" + +# describe.c:1375 +#: sql_help.c:3129 +#, fuzzy +msgid "column_name_index" +msgstr "列名称" + +#: sql_help.c:3130 +#, fuzzy +msgid "expression_index" +msgstr "表达式" + +# describe.c:937 +#: sql_help.c:3133 +#, fuzzy +msgid "index_predicate" +msgstr "述词" + +#: sql_help.c:3135 +#, fuzzy +msgid "and conflict_action is one of:" +msgstr "操作可以是下列选项之一" + +#: sql_help.c:3141 sql_help.c:3899 +msgid "sub-SELECT" +msgstr "" + +#: sql_help.c:3150 sql_help.c:3213 sql_help.c:3875 msgid "channel" msgstr "通道" -#: sql_help.c:2933 +#: sql_help.c:3172 msgid "lockmode" msgstr "锁模式" -#: sql_help.c:2934 +#: sql_help.c:3173 msgid "where lockmode is one of:" msgstr "锁模式可以是下列选项之一:" -#: sql_help.c:2975 +#: sql_help.c:3214 msgid "payload" msgstr "消息中负载流量(payload)" -#: sql_help.c:3001 +#: sql_help.c:3241 msgid "old_role" msgstr "旧的角色" -#: sql_help.c:3002 +#: sql_help.c:3242 msgid "new_role" msgstr "新的角色" # sql_help.h:382 -#: sql_help.c:3027 sql_help.c:3188 sql_help.c:3196 +#: sql_help.c:3267 sql_help.c:3428 sql_help.c:3436 msgid "savepoint_name" msgstr "保存点名称" -#: sql_help.c:3229 +#: sql_help.c:3469 msgid "provider" msgstr "provider(提供者)" -#: sql_help.c:3306 sql_help.c:3345 sql_help.c:3347 sql_help.c:3385 -#: sql_help.c:3524 sql_help.c:3563 sql_help.c:3565 sql_help.c:3693 -#: sql_help.c:3732 sql_help.c:3734 +#: sql_help.c:3556 sql_help.c:3598 sql_help.c:3600 sql_help.c:3646 +#: sql_help.c:3795 sql_help.c:3837 sql_help.c:3839 sql_help.c:3989 +#: sql_help.c:4031 sql_help.c:4033 msgid "from_item" msgstr "from列表中项" -#: sql_help.c:3310 sql_help.c:3389 sql_help.c:3528 sql_help.c:3697 +#: sql_help.c:3558 sql_help.c:3610 sql_help.c:3797 sql_help.c:3849 +#: sql_help.c:3991 sql_help.c:4043 +#, fuzzy +msgid "grouping_element" +msgstr "组名称" + +#: sql_help.c:3560 sql_help.c:3650 sql_help.c:3799 sql_help.c:3993 msgid "window_name" msgstr "窗口名称" # describe.c:977 -#: sql_help.c:3311 sql_help.c:3390 sql_help.c:3529 sql_help.c:3698 +#: sql_help.c:3561 sql_help.c:3651 sql_help.c:3800 sql_help.c:3994 msgid "window_definition" msgstr "窗口定义" -#: sql_help.c:3312 sql_help.c:3323 sql_help.c:3353 sql_help.c:3391 -#: sql_help.c:3530 sql_help.c:3541 sql_help.c:3571 sql_help.c:3699 -#: sql_help.c:3710 sql_help.c:3740 +#: sql_help.c:3562 sql_help.c:3576 sql_help.c:3614 sql_help.c:3652 +#: sql_help.c:3801 sql_help.c:3815 sql_help.c:3853 sql_help.c:3995 +#: sql_help.c:4009 sql_help.c:4047 msgid "select" msgstr "查询" -#: sql_help.c:3319 sql_help.c:3537 sql_help.c:3706 +#: sql_help.c:3569 sql_help.c:3808 sql_help.c:4002 msgid "where from_item can be one of:" msgstr "from 列表中的项可以是下列内容之一" -#: sql_help.c:3322 sql_help.c:3325 sql_help.c:3328 sql_help.c:3332 -#: sql_help.c:3344 sql_help.c:3540 sql_help.c:3543 sql_help.c:3546 -#: sql_help.c:3550 sql_help.c:3562 sql_help.c:3709 sql_help.c:3712 -#: sql_help.c:3715 sql_help.c:3719 sql_help.c:3731 +#: sql_help.c:3572 sql_help.c:3578 sql_help.c:3581 sql_help.c:3585 +#: sql_help.c:3597 sql_help.c:3811 sql_help.c:3817 sql_help.c:3820 +#: sql_help.c:3824 sql_help.c:3836 sql_help.c:4005 sql_help.c:4011 +#: sql_help.c:4014 sql_help.c:4018 sql_help.c:4030 msgid "column_alias" -msgstr "列的化名" +msgstr "列的别名" -#: sql_help.c:3326 sql_help.c:3351 sql_help.c:3544 sql_help.c:3569 -#: sql_help.c:3713 sql_help.c:3738 -msgid "with_query_name" -msgstr "WITH查询语句名称(with_query_name)" +#: sql_help.c:3573 sql_help.c:3812 sql_help.c:4006 +#, fuzzy +msgid "sampling_method" +msgstr "访问索引的方法" -#: sql_help.c:3330 sql_help.c:3334 sql_help.c:3338 sql_help.c:3341 -#: sql_help.c:3548 sql_help.c:3552 sql_help.c:3556 sql_help.c:3559 -#: sql_help.c:3717 sql_help.c:3721 sql_help.c:3725 sql_help.c:3728 +#: sql_help.c:3574 sql_help.c:3583 sql_help.c:3587 sql_help.c:3591 +#: sql_help.c:3594 sql_help.c:3813 sql_help.c:3822 sql_help.c:3826 +#: sql_help.c:3830 sql_help.c:3833 sql_help.c:4007 sql_help.c:4016 +#: sql_help.c:4020 sql_help.c:4024 sql_help.c:4027 msgid "argument" msgstr "参数" +#: sql_help.c:3575 sql_help.c:3814 sql_help.c:4008 +msgid "seed" +msgstr "" + +#: sql_help.c:3579 sql_help.c:3612 sql_help.c:3818 sql_help.c:3851 +#: sql_help.c:4012 sql_help.c:4045 +msgid "with_query_name" +msgstr "WITH查询语句名称(with_query_name)" + # describe.c:977 -#: sql_help.c:3336 sql_help.c:3339 sql_help.c:3342 sql_help.c:3554 -#: sql_help.c:3557 sql_help.c:3560 sql_help.c:3723 sql_help.c:3726 -#: sql_help.c:3729 +#: sql_help.c:3589 sql_help.c:3592 sql_help.c:3595 sql_help.c:3828 +#: sql_help.c:3831 sql_help.c:3834 sql_help.c:4022 sql_help.c:4025 +#: sql_help.c:4028 msgid "column_definition" msgstr "列定义" -#: sql_help.c:3346 sql_help.c:3564 sql_help.c:3733 +#: sql_help.c:3599 sql_help.c:3838 sql_help.c:4032 msgid "join_type" msgstr "连接操作的类型" -#: sql_help.c:3348 sql_help.c:3566 sql_help.c:3735 +#: sql_help.c:3601 sql_help.c:3840 sql_help.c:4034 msgid "join_condition" msgstr "用连接操作的条件" -#: sql_help.c:3349 sql_help.c:3567 sql_help.c:3736 +#: sql_help.c:3602 sql_help.c:3841 sql_help.c:4035 msgid "join_column" msgstr "用于连接操作的列" -#: sql_help.c:3350 sql_help.c:3568 sql_help.c:3737 +#: sql_help.c:3603 sql_help.c:3842 sql_help.c:4036 +#, fuzzy +msgid "and grouping_element can be one of:" +msgstr "事件可以下述之一:" + +#: sql_help.c:3611 sql_help.c:3850 sql_help.c:4044 msgid "and with_query is:" msgstr "with查询语句是:" # describe.c:415 # describe.c:543 # describe.c:1477 -#: sql_help.c:3354 sql_help.c:3572 sql_help.c:3741 +#: sql_help.c:3615 sql_help.c:3854 sql_help.c:4048 msgid "values" msgstr "值" -#: sql_help.c:3355 sql_help.c:3573 sql_help.c:3742 +#: sql_help.c:3616 sql_help.c:3855 sql_help.c:4049 msgid "insert" msgstr "insert" -#: sql_help.c:3356 sql_help.c:3574 sql_help.c:3743 +#: sql_help.c:3617 sql_help.c:3856 sql_help.c:4050 msgid "update" msgstr "update" -#: sql_help.c:3357 sql_help.c:3575 sql_help.c:3744 +#: sql_help.c:3618 sql_help.c:3857 sql_help.c:4051 msgid "delete" msgstr "delete" # describe.c:415 # describe.c:543 # describe.c:1477 -#: sql_help.c:3384 +#: sql_help.c:3645 msgid "new_table" msgstr "新的表" -#: sql_help.c:3409 +#: sql_help.c:3670 msgid "timezone" -msgstr "时间区域" +msgstr "时区" -#: sql_help.c:3454 +#: sql_help.c:3715 msgid "snapshot_id" -msgstr "snapshot_id" +msgstr "快照id" -#: sql_help.c:3614 +#: sql_help.c:3900 msgid "from_list" msgstr "from列表(from_list)" -#: sql_help.c:3645 +#: sql_help.c:3931 msgid "sort_expression" msgstr "排序表达式" # sql_help.h:25 # sql_help.h:373 -#: sql_help.h:191 sql_help.h:891 +#: sql_help.h:197 sql_help.h:927 msgid "abort the current transaction" -msgstr "中止目前的交易" +msgstr "中止目前的事务" # sql_help.h:29 -#: sql_help.h:196 +#: sql_help.h:202 msgid "change the definition of an aggregate function" msgstr "更改聚集函数的定义" # sql_help.h:45 -#: sql_help.h:201 +#: sql_help.h:207 msgid "change the definition of a collation" msgstr "更改校对规则的定义" # sql_help.h:33 -#: sql_help.h:206 +#: sql_help.h:212 msgid "change the definition of a conversion" -msgstr "更改一个字元编码转换的定义" +msgstr "更改一个字符编码转换的定义" # sql_help.h:37 -#: sql_help.h:211 +#: sql_help.h:217 msgid "change a database" -msgstr "更改一个资料库" +msgstr "更改一个数据库" # sql_help.h:325 -#: sql_help.h:216 +#: sql_help.h:222 msgid "define default access privileges" -msgstr "定义缺省的访问权限" +msgstr "定义默认的访问权限" # sql_help.h:41 -#: sql_help.h:221 +#: sql_help.h:227 msgid "change the definition of a domain" msgstr "更改共同值域的定义" # sql_help.h:85 -#: sql_help.h:226 +#: sql_help.h:232 msgid "change the definition of an event trigger" msgstr "更改事件触发器的定义" # sql_help.h:33 -#: sql_help.h:231 +#: sql_help.h:237 msgid "change the definition of an extension" msgstr "更改扩展的定义" # sql_help.h:85 -#: sql_help.h:236 +#: sql_help.h:242 msgid "change the definition of a foreign-data wrapper" msgstr "更改外部数据封装器的定义" # sql_help.h:85 -#: sql_help.h:241 +#: sql_help.h:247 msgid "change the definition of a foreign table" msgstr "更改外部表的定义" # sql_help.h:45 -#: sql_help.h:246 +#: sql_help.h:252 msgid "change the definition of a function" msgstr "更改函数的定义" -#: sql_help.h:251 +#: sql_help.h:257 msgid "change role name or membership" -msgstr "更改角色名称或会员" +msgstr "更改角色名称或成员状态" # sql_help.h:53 -#: sql_help.h:256 +#: sql_help.h:262 msgid "change the definition of an index" msgstr "更改索引的定义" # sql_help.h:57 -#: sql_help.h:261 +#: sql_help.h:267 msgid "change the definition of a procedural language" msgstr "更改程序语言的定义" # sql_help.h:77 -#: sql_help.h:266 +#: sql_help.h:272 msgid "change the definition of a large object" -msgstr "改变大对象的定义" +msgstr "更改大对象的定义" # sql_help.h:53 -#: sql_help.h:271 +#: sql_help.h:277 msgid "change the definition of a materialized view" msgstr "更改物化视图的定义" # sql_help.h:65 -#: sql_help.h:276 +#: sql_help.h:282 msgid "change the definition of an operator" msgstr "更改运算子的定义" # sql_help.h:61 -#: sql_help.h:281 +#: sql_help.h:287 msgid "change the definition of an operator class" msgstr "更改运算子类别的定义" # sql_help.h:65 -#: sql_help.h:286 +#: sql_help.h:292 msgid "change the definition of an operator family" msgstr "更改一个运算子家族的识别" +# sql_help.h:41 +#: sql_help.h:297 +#, fuzzy +msgid "change the definition of a policy" +msgstr "更改共同值域的定义" + # sql_help.h:37 -#: sql_help.h:291 sql_help.h:361 +#: sql_help.h:302 sql_help.h:372 msgid "change a database role" -msgstr "变更资料库角色" +msgstr "更改数据库角色" # sql_help.h:77 -#: sql_help.h:296 +#: sql_help.h:307 msgid "change the definition of a rule" msgstr "更改规则的定义" # sql_help.h:69 -#: sql_help.h:301 +#: sql_help.h:312 msgid "change the definition of a schema" msgstr "更改架构模式的定义" # sql_help.h:73 -#: sql_help.h:306 +#: sql_help.h:317 msgid "change the definition of a sequence generator" msgstr "更改序列数产生器的定义" # sql_help.h:85 -#: sql_help.h:311 +#: sql_help.h:322 msgid "change the definition of a foreign server" msgstr "更改外部服务器的定义" # sql_help.h:366 -#: sql_help.h:316 -#| msgid "configuration_parameter" +#: sql_help.h:327 msgid "change a server configuration parameter" -msgstr "改变服务器的配置参数" +msgstr "更改服务器的配置参数" # sql_help.h:77 -#: sql_help.h:321 +#: sql_help.h:332 msgid "change the definition of a table" -msgstr "更改资料表的定义" +msgstr "更改数据表的定义" # sql_help.h:81 -#: sql_help.h:326 +#: sql_help.h:337 msgid "change the definition of a tablespace" msgstr "更改表空间的定义" # sql_help.h:33 -#: sql_help.h:331 +#: sql_help.h:342 msgid "change the definition of a text search configuration" -msgstr "更改一个文本搜寻组态的定义" +msgstr "更改一个文本搜索组态的定义" # sql_help.h:45 -#: sql_help.h:336 +#: sql_help.h:347 msgid "change the definition of a text search dictionary" -msgstr "更改一个文本搜寻字典的定义" +msgstr "更改一个文本搜索字典的定义" # sql_help.h:81 -#: sql_help.h:341 +#: sql_help.h:352 msgid "change the definition of a text search parser" -msgstr "更改一个文本搜寻剖析器的定义" +msgstr "更改一个文本搜索剖析器的定义" # sql_help.h:69 -#: sql_help.h:346 +#: sql_help.h:357 msgid "change the definition of a text search template" -msgstr "更改一个文本搜寻模版的定义" +msgstr "更改一个文本搜索模版的定义" # sql_help.h:85 -#: sql_help.h:351 +#: sql_help.h:362 msgid "change the definition of a trigger" msgstr "更改触发器的定义" # sql_help.h:89 -#: sql_help.h:356 +#: sql_help.h:367 msgid "change the definition of a type" -msgstr "更改资料型别的定义" +msgstr "更改数据类型的定义" # sql_help.h:41 -#: sql_help.h:366 +#: sql_help.h:377 msgid "change the definition of a user mapping" msgstr "更改用户映射的定义" # sql_help.h:53 -#: sql_help.h:371 +#: sql_help.h:382 msgid "change the definition of a view" -msgstr "更改视观表的定义" +msgstr "更改视图的定义" # sql_help.h:97 -#: sql_help.h:376 +#: sql_help.h:387 msgid "collect statistics about a database" -msgstr "关于资料库的收集统计" +msgstr "收集数据库的统计信息" # sql_help.h:101 # sql_help.h:413 -#: sql_help.h:381 sql_help.h:956 +#: sql_help.h:392 sql_help.h:992 msgid "start a transaction block" -msgstr "开始一个事物交易区块" +msgstr "开始一个事务区块" # sql_help.h:105 -#: sql_help.h:386 +#: sql_help.h:397 msgid "force a transaction log checkpoint" -msgstr "强制事物交易日志检查点" +msgstr "强制一个事务触发检查点" # sql_help.h:109 -#: sql_help.h:391 +#: sql_help.h:402 msgid "close a cursor" -msgstr "关闭 cursor" +msgstr "关闭游标" # sql_help.h:113 -#: sql_help.h:396 +#: sql_help.h:407 msgid "cluster a table according to an index" -msgstr "丛集一个资料表根据一个索引" +msgstr "按照索引进行表的聚集" # sql_help.h:117 -#: sql_help.h:401 +#: sql_help.h:412 msgid "define or change the comment of an object" -msgstr "定义或更改一个物件的注解" +msgstr "定义或更改一个对象的注解" # sql_help.h:121 # sql_help.h:309 -#: sql_help.h:406 sql_help.h:796 +#: sql_help.h:417 sql_help.h:827 msgid "commit the current transaction" -msgstr "确认目前的事物交易" +msgstr "确认目前的事务" -#: sql_help.h:411 +#: sql_help.h:422 msgid "commit a transaction that was earlier prepared for two-phase commit" -msgstr "提交一项事务交易这是两阶段提交的先前准备" +msgstr "提交一项事务这是两阶段提交的先前准备" # sql_help.h:125 -#: sql_help.h:416 +#: sql_help.h:427 msgid "copy data between a file and a table" -msgstr "在档案和资料表间复制资料" +msgstr "在档案和数据表间复制数据" # sql_help.h:129 -#: sql_help.h:421 +#: sql_help.h:432 msgid "define a new aggregate function" msgstr "定义一个新的聚集函数" # sql_help.h:133 -#: sql_help.h:426 +#: sql_help.h:437 msgid "define a new cast" -msgstr "建立新的型别转换" +msgstr "建立新的类型转换" # sql_help.h:153 -#: sql_help.h:431 +#: sql_help.h:442 msgid "define a new collation" msgstr "建立新的校对规则" # sql_help.h:141 -#: sql_help.h:436 +#: sql_help.h:447 msgid "define a new encoding conversion" msgstr "定义一个新的字元编码转换" # sql_help.h:145 -#: sql_help.h:441 +#: sql_help.h:452 msgid "create a new database" -msgstr "建立新的资料库" +msgstr "建立新的数据库" # sql_help.h:149 -#: sql_help.h:446 +#: sql_help.h:457 msgid "define a new domain" msgstr "建立新的共同值域" # sql_help.h:201 -#: sql_help.h:451 +#: sql_help.h:462 msgid "define a new event trigger" msgstr "定义新的事件触发器" -#: sql_help.h:456 +#: sql_help.h:467 msgid "install an extension" msgstr "安装一个扩展" # sql_help.h:205 -#: sql_help.h:461 +#: sql_help.h:472 msgid "define a new foreign-data wrapper" msgstr "定义一个新的外部数据封装器" # sql_help.h:201 -#: sql_help.h:466 +#: sql_help.h:477 msgid "define a new foreign table" msgstr "建立新的外部表" # sql_help.h:153 -#: sql_help.h:471 +#: sql_help.h:482 msgid "define a new function" msgstr "建立新的函数" # sql_help.h:189 -#: sql_help.h:476 sql_help.h:511 sql_help.h:581 +#: sql_help.h:487 sql_help.h:527 sql_help.h:602 msgid "define a new database role" -msgstr "定义一个新资料库角色" +msgstr "定义一个新数据库角色" # sql_help.h:161 -#: sql_help.h:481 +#: sql_help.h:492 msgid "define a new index" msgstr "建立新的索引" # sql_help.h:165 -#: sql_help.h:486 +#: sql_help.h:497 msgid "define a new procedural language" msgstr "建立新的程序语言" # sql_help.h:213 -#: sql_help.h:491 +#: sql_help.h:502 msgid "define a new materialized view" msgstr "建立新的物化视图" # sql_help.h:173 -#: sql_help.h:496 +#: sql_help.h:507 msgid "define a new operator" msgstr "建立新的运算子" # sql_help.h:169 -#: sql_help.h:501 +#: sql_help.h:512 msgid "define a new operator class" msgstr "建立新的运算子类别" # sql_help.h:173 -#: sql_help.h:506 +#: sql_help.h:517 msgid "define a new operator family" msgstr "定义一个新的运算子家族" +# sql_help.h:201 +#: sql_help.h:522 +#, fuzzy +msgid "define a new policy for a table" +msgstr "建立新的外部表" + # sql_help.h:177 -#: sql_help.h:516 +#: sql_help.h:532 msgid "define a new rewrite rule" msgstr "建立新的重写规则" # sql_help.h:181 -#: sql_help.h:521 +#: sql_help.h:537 msgid "define a new schema" msgstr "建立新的架构模式" # sql_help.h:185 -#: sql_help.h:526 +#: sql_help.h:542 msgid "define a new sequence generator" msgstr "建立新的序列数产生器" # sql_help.h:201 -#: sql_help.h:531 +#: sql_help.h:547 msgid "define a new foreign server" msgstr "建立新的触发器" # sql_help.h:189 -#: sql_help.h:536 +#: sql_help.h:552 msgid "define a new table" -msgstr "建立新的资料表" +msgstr "建立新的数据表" # sql_help.h:193 # sql_help.h:389 -#: sql_help.h:541 sql_help.h:921 +#: sql_help.h:557 sql_help.h:957 msgid "define a new table from the results of a query" -msgstr "以查询结果建立新的资料表" +msgstr "以查询结果建立新的数据表" # sql_help.h:197 -#: sql_help.h:546 +#: sql_help.h:562 msgid "define a new tablespace" msgstr "建立新的表空间" # sql_help.h:129 -#: sql_help.h:551 +#: sql_help.h:567 msgid "define a new text search configuration" -msgstr "定义一个新文本搜寻组态" +msgstr "定义一个新文本搜索组态" # sql_help.h:129 -#: sql_help.h:556 +#: sql_help.h:572 msgid "define a new text search dictionary" -msgstr "定义一个新文本搜寻字典" +msgstr "定义一个新文本搜索字典" # sql_help.h:197 -#: sql_help.h:561 +#: sql_help.h:577 msgid "define a new text search parser" -msgstr "定义一个新文本搜寻剖析器" +msgstr "定义一个新文本搜索剖析器" # sql_help.h:181 -#: sql_help.h:566 +#: sql_help.h:582 msgid "define a new text search template" -msgstr "定义一个新文本搜寻模版" +msgstr "定义一个新文本搜索模版" + +# sql_help.h:173 +#: sql_help.h:587 +#, fuzzy +msgid "define a new transform" +msgstr "建立新的运算子" # sql_help.h:201 -#: sql_help.h:571 +#: sql_help.h:592 msgid "define a new trigger" msgstr "建立新的触发器" # sql_help.h:205 -#: sql_help.h:576 +#: sql_help.h:597 msgid "define a new data type" -msgstr "建立新的资料型别" +msgstr "建立新的数据类型" -#: sql_help.h:586 +#: sql_help.h:607 msgid "define a new mapping of a user to a foreign server" msgstr "将用户的新映射定义到一个外部服务器" # sql_help.h:213 -#: sql_help.h:591 +#: sql_help.h:612 msgid "define a new view" -msgstr "建立新的视观表" +msgstr "建立新的视图" # sql_help.h:217 -#: sql_help.h:596 +#: sql_help.h:617 msgid "deallocate a prepared statement" msgstr "释放一个已预备好的叙述区块" # sql_help.h:221 -#: sql_help.h:601 +#: sql_help.h:622 msgid "define a cursor" msgstr "建立一个 cursor" # sql_help.h:225 -#: sql_help.h:606 +#: sql_help.h:627 msgid "delete rows of a table" -msgstr "删除资料表中的资料列" +msgstr "删除数据表中的数据列" -#: sql_help.h:611 +#: sql_help.h:632 msgid "discard session state" msgstr "抛弃 session 状态" -#: sql_help.h:616 +#: sql_help.h:637 msgid "execute an anonymous code block" msgstr "执行一个匿名代码块" # sql_help.h:229 -#: sql_help.h:621 +#: sql_help.h:642 msgid "remove an aggregate function" msgstr "移除一个聚集函数" # sql_help.h:233 -#: sql_help.h:626 +#: sql_help.h:647 msgid "remove a cast" -msgstr "移除一个型别转换" +msgstr "移除一个类型转换" # sql_help.h:249 -#: sql_help.h:631 +#: sql_help.h:652 msgid "remove a collation" msgstr "移除一个校对规则" # sql_help.h:237 -#: sql_help.h:636 +#: sql_help.h:657 msgid "remove a conversion" msgstr "移除一个字元编码转换" # sql_help.h:241 -#: sql_help.h:641 +#: sql_help.h:662 msgid "remove a database" -msgstr "移除资料库" +msgstr "移除数据库" # sql_help.h:245 -#: sql_help.h:646 +#: sql_help.h:667 msgid "remove a domain" msgstr "移除一个共同值域" # sql_help.h:293 -#: sql_help.h:651 +#: sql_help.h:672 msgid "remove an event trigger" msgstr "移除事件触发器" # sql_help.h:237 -#: sql_help.h:656 +#: sql_help.h:677 msgid "remove an extension" msgstr "移除一个扩展" # sql_help.h:297 -#: sql_help.h:661 +#: sql_help.h:682 msgid "remove a foreign-data wrapper" msgstr "删除一个外部数据封装器" # sql_help.h:285 -#: sql_help.h:666 +#: sql_help.h:687 msgid "remove a foreign table" msgstr "移除外部引用表" # sql_help.h:249 -#: sql_help.h:671 +#: sql_help.h:692 msgid "remove a function" msgstr "移除函数" # sql_help.h:241 -#: sql_help.h:676 sql_help.h:716 sql_help.h:781 +#: sql_help.h:697 sql_help.h:742 sql_help.h:812 msgid "remove a database role" -msgstr "移除一个资料库成员" +msgstr "移除一个数据库成员" # sql_help.h:257 -#: sql_help.h:681 +#: sql_help.h:702 msgid "remove an index" msgstr "移除一个索引" # sql_help.h:261 -#: sql_help.h:686 +#: sql_help.h:707 msgid "remove a procedural language" msgstr "移除一个程序语言" # sql_help.h:305 -#: sql_help.h:691 +#: sql_help.h:712 msgid "remove a materialized view" msgstr "移除一个物化视图" # sql_help.h:269 -#: sql_help.h:696 +#: sql_help.h:717 msgid "remove an operator" msgstr "移除运算子" # sql_help.h:265 -#: sql_help.h:701 +#: sql_help.h:722 msgid "remove an operator class" msgstr "移除一个运算子类别" # sql_help.h:269 -#: sql_help.h:706 +#: sql_help.h:727 msgid "remove an operator family" msgstr "移除一个运算子家族" -#: sql_help.h:711 +#: sql_help.h:732 msgid "remove database objects owned by a database role" -msgstr "依照一个资料库角色拥有的资料库物件来移除" +msgstr "依照一个数据库角色拥有的数据库对象来移除" + +# sql_help.h:285 +#: sql_help.h:737 +#, fuzzy +msgid "remove a policy from a table" +msgstr "移除外部引用表" # sql_help.h:273 -#: sql_help.h:721 +#: sql_help.h:747 msgid "remove a rewrite rule" msgstr "移除一个重写规则" # sql_help.h:277 -#: sql_help.h:726 +#: sql_help.h:752 msgid "remove a schema" -msgstr "移除一个架构模式" +msgstr "移除一个模式" # sql_help.h:281 -#: sql_help.h:731 +#: sql_help.h:757 msgid "remove a sequence" -msgstr "移除序列数" +msgstr "移除序列" # sql_help.h:237 -#: sql_help.h:736 +#: sql_help.h:762 msgid "remove a foreign server descriptor" msgstr "删除一个外部服务器描述符" # sql_help.h:285 -#: sql_help.h:741 +#: sql_help.h:767 msgid "remove a table" -msgstr "移除资料表" +msgstr "移除数据表" # sql_help.h:289 -#: sql_help.h:746 +#: sql_help.h:772 msgid "remove a tablespace" msgstr "移除一个表空间" # sql_help.h:301 -#: sql_help.h:751 +#: sql_help.h:777 msgid "remove a text search configuration" -msgstr "移除一个文本搜寻组态" +msgstr "移除一个文本搜索配置" # sql_help.h:301 -#: sql_help.h:756 +#: sql_help.h:782 msgid "remove a text search dictionary" -msgstr "移除一个文本搜寻字典" +msgstr "移除一个文本搜索字典" # sql_help.h:289 -#: sql_help.h:761 +#: sql_help.h:787 msgid "remove a text search parser" -msgstr "移除一个文本搜寻剖析器" +msgstr "移除一个文本搜索剖析器" # sql_help.h:277 -#: sql_help.h:766 +#: sql_help.h:792 msgid "remove a text search template" -msgstr "移除一个文本搜寻模版" +msgstr "移除一个文本搜索模版" + +# sql_help.h:269 +#: sql_help.h:797 +#, fuzzy +msgid "remove a transform" +msgstr "移除运算子" # sql_help.h:293 -#: sql_help.h:771 +#: sql_help.h:802 msgid "remove a trigger" msgstr "移除触发器" # sql_help.h:297 -#: sql_help.h:776 +#: sql_help.h:807 msgid "remove a data type" -msgstr "移除资料型别" +msgstr "移除数据类型" -#: sql_help.h:786 +#: sql_help.h:817 msgid "remove a user mapping for a foreign server" msgstr "为外部服务器删除用户映射" # sql_help.h:305 -#: sql_help.h:791 +#: sql_help.h:822 msgid "remove a view" -msgstr "移除一个视观表" +msgstr "移除一个视图" # sql_help.h:313 -#: sql_help.h:801 +#: sql_help.h:832 msgid "execute a prepared statement" -msgstr "执行一个已准备好的叙述区块" +msgstr "执行一个已准备好的语句块" # sql_help.h:317 -#: sql_help.h:806 +#: sql_help.h:837 msgid "show the execution plan of a statement" -msgstr "显示一个叙述区块的执行计划" +msgstr "显示一个语句块的执行计划" # sql_help.h:321 -#: sql_help.h:811 +#: sql_help.h:842 msgid "retrieve rows from a query using a cursor" -msgstr "从使用 cursor 的查询读取资料" +msgstr "从使用游标的查询读取数据" # sql_help.h:325 -#: sql_help.h:816 +#: sql_help.h:847 msgid "define access privileges" -msgstr "建立存取权限" +msgstr "定义存取权限" + +# sql_help.h:85 +#: sql_help.h:852 +#, fuzzy +msgid "import table definitions from a foreign server" +msgstr "更改外部服务器的定义" # sql_help.h:329 -#: sql_help.h:821 +#: sql_help.h:857 msgid "create new rows in a table" -msgstr "在资料表中建立资料" +msgstr "在表中创建新数据行" # sql_help.h:333 -#: sql_help.h:826 +#: sql_help.h:862 msgid "listen for a notification" msgstr "等待通知" # sql_help.h:337 -#: sql_help.h:831 +#: sql_help.h:867 msgid "load a shared library file" msgstr "加载一个共享库文件" # sql_help.h:341 -#: sql_help.h:836 +#: sql_help.h:872 msgid "lock a table" -msgstr "锁住资料表" +msgstr "锁定数据表" # sql_help.h:345 -#: sql_help.h:841 +#: sql_help.h:877 msgid "position a cursor" msgstr "移动游标位置" # sql_help.h:349 -#: sql_help.h:846 +#: sql_help.h:882 msgid "generate a notification" -msgstr "产生通告" +msgstr "产生通知" # sql_help.h:353 -#: sql_help.h:851 +#: sql_help.h:887 msgid "prepare a statement for execution" -msgstr "预先编译叙述以执行" +msgstr "预先编译语句以执行" # sql_help.h:25 # sql_help.h:373 -#: sql_help.h:856 +#: sql_help.h:892 msgid "prepare the current transaction for two-phase commit" -msgstr "预备当前事务交易的二段式提交" +msgstr "准备将当前事务进行二段式提交" -#: sql_help.h:861 +#: sql_help.h:897 msgid "change the ownership of database objects owned by a database role" -msgstr "依照一个资料库角色拥有的的资料库物件来更变所有权" +msgstr "依照一个数据库角色拥有的的数据库对象来更变所有权" -#: sql_help.h:866 +#: sql_help.h:902 msgid "replace the contents of a materialized view" msgstr "替换物化视图的内容" # sql_help.h:357 -#: sql_help.h:871 +#: sql_help.h:907 msgid "rebuild indexes" msgstr "重新建构索引" # sql_help.h:361 -#: sql_help.h:876 +#: sql_help.h:912 msgid "destroy a previously defined savepoint" msgstr "删除先前建立的储存点(Savepoint)" # sql_help.h:365 -#: sql_help.h:881 +#: sql_help.h:917 msgid "restore the value of a run-time parameter to the default value" msgstr "将执行时期参数还原成预设值" # sql_help.h:369 -#: sql_help.h:886 +#: sql_help.h:922 msgid "remove access privileges" msgstr "移除存取权限" -#: sql_help.h:896 +#: sql_help.h:932 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "取消一个可以为两阶段提交容易配置的事务" # sql_help.h:377 -#: sql_help.h:901 +#: sql_help.h:937 msgid "roll back to a savepoint" msgstr "还原至一个储存点(Savepoint)" # sql_help.h:381 -#: sql_help.h:906 +#: sql_help.h:942 msgid "define a new savepoint within the current transaction" -msgstr "在目前的事物交易中建立新的储存点(Savepoint)" +msgstr "在当前事务中建立新的储存点(Savepoint)" # sql_help.h:117 -#: sql_help.h:911 +#: sql_help.h:947 msgid "define or change a security label applied to an object" msgstr "定义或更改一个对象的安全标签" # sql_help.h:385 -#: sql_help.h:916 sql_help.h:961 sql_help.h:991 +#: sql_help.h:952 sql_help.h:997 sql_help.h:1027 msgid "retrieve rows from a table or view" -msgstr "从资料表或视观表读取资料" +msgstr "从数据表或视图中读取数据" # sql_help.h:393 -#: sql_help.h:926 +#: sql_help.h:962 msgid "change a run-time parameter" -msgstr "更改一个执行时期参数" +msgstr "更改一个运行期参数" # sql_help.h:397 -#: sql_help.h:931 +#: sql_help.h:967 msgid "set constraint check timing for the current transaction" msgstr "为当前事务设定约束限制检查的时间模式" # sql_help.h:405 -#: sql_help.h:936 +#: sql_help.h:972 msgid "set the current user identifier of the current session" -msgstr "设置当前 session 的当前用户的身份标识" +msgstr "为当前会话的当前用户的设置身份标识" # sql_help.h:401 -#: sql_help.h:941 +#: sql_help.h:977 msgid "" "set the session user identifier and the current user identifier of the " "current session" -msgstr "设置会话用户标识符和当前会话的当前用户标识符" +msgstr "为当前会话设置会话用户标识符和当前用户标识符" # sql_help.h:405 -#: sql_help.h:946 +#: sql_help.h:982 msgid "set the characteristics of the current transaction" -msgstr "设定目前事物交易属性" +msgstr "设定当前事务属性" # sql_help.h:409 -#: sql_help.h:951 +#: sql_help.h:987 msgid "show the value of a run-time parameter" -msgstr "显示执行时期的参数值" +msgstr "显示运行期的参数值" # sql_help.h:425 -#: sql_help.h:966 +#: sql_help.h:1002 msgid "empty a table or set of tables" -msgstr "空的资料表或资料表设置" +msgstr "空的数据表或数据表集合" # sql_help.h:421 -#: sql_help.h:971 +#: sql_help.h:1007 msgid "stop listening for a notification" -msgstr "停止倾听通告" +msgstr "停止监听通知" # sql_help.h:425 -#: sql_help.h:976 +#: sql_help.h:1012 msgid "update rows of a table" -msgstr "更新资料表中的资料列" +msgstr "更新数据表中的数据列" # sql_help.h:429 -#: sql_help.h:981 +#: sql_help.h:1017 msgid "garbage-collect and optionally analyze a database" -msgstr "垃圾收集(GC)并选择性的分析资料库" +msgstr "垃圾收集(GC)并选择地分析数据库" -#: sql_help.h:986 +#: sql_help.h:1022 msgid "compute a set of rows" -msgstr "计算一个资料列的集合" +msgstr "计算一个数据列的集合" -#: startup.c:166 +#: startup.c:177 #, c-format msgid "%s: -1 can only be used in non-interactive mode\n" msgstr "%s: -1 只能用于非交互模式下\n" # command.c:1148 -#: startup.c:266 +#: startup.c:277 #, c-format msgid "%s: could not open log file \"%s\": %s\n" -msgstr "%s:无法开启日志档 \"%s\":%s\n" +msgstr "%s:无法开启日志文件 \"%s\":%s\n" -#: startup.c:328 +#: startup.c:339 #, c-format msgid "" "Type \"help\" for help.\n" @@ -5311,56 +6013,67 @@ msgstr "" "\n" # startup.c:446 -#: startup.c:471 +#: startup.c:486 #, c-format msgid "%s: could not set printing parameter \"%s\"\n" -msgstr "%s:无法设定列印参数 \"%s\"\n" +msgstr "%s:无法设定列打印参数 \"%s\"\n" # startup.c:492 -#: startup.c:511 +#: startup.c:526 #, c-format msgid "%s: could not delete variable \"%s\"\n" -msgstr "%s:无法删除变数 \"%s\"\n" +msgstr "%s:无法删除变量 \"%s\"\n" # startup.c:502 -#: startup.c:521 +#: startup.c:536 #, c-format msgid "%s: could not set variable \"%s\"\n" -msgstr "%s:无法设定变数 \"%s\"\n" +msgstr "%s:无法设定变量 \"%s\"\n" # startup.c:533 # startup.c:539 -#: startup.c:564 startup.c:570 +#: startup.c:596 #, c-format msgid "Try \"%s --help\" for more information.\n" -msgstr "尝试 \"%s --help\" 以得到更多资讯。\n" +msgstr "尝试 \"%s --help\" 以得到更多信息。\n" # startup.c:557 -#: startup.c:587 +#: startup.c:613 #, c-format msgid "%s: warning: extra command-line argument \"%s\" ignored\n" -msgstr "%s:警告:忽略多余的命令列参数 \"%s\"\n" +msgstr "%s:警告:忽略多余的命令行参数 \"%s\"\n" -#: startup.c:609 +#: startup.c:635 #, c-format msgid "%s: could not find own program executable\n" -msgstr "%s: 无法找到执行文件\n" +msgstr "%s: 找不到可执行文件\n" + +#: startup.c:757 startup.c:804 startup.c:825 startup.c:862 variables.c:121 +#, fuzzy, c-format +msgid "unrecognized value \"%s\" for \"%s\"; assuming \"%s\"\n" +msgstr "不能识别的布尔型值; 假定值为 \"on\"\n" -#: tab-complete.c:4110 +#: tab-complete.c:4599 #, c-format msgid "" "tab completion query failed: %s\n" "Query was:\n" "%s\n" msgstr "" -"tab完成查询失败: %s\n" +"自动补全查询失败: %s\n" "查询是:\n" "%s\n" -#: variables.c:115 -#, c-format -msgid "unrecognized Boolean value; assuming \"on\"\n" -msgstr "不能识别的布尔型值; 假定值为 \"on\"\n" - #~ msgid " \\l[+] list all databases\n" #~ msgstr " \\l[+] 列出所有的数据库\n" + +# print.c:428 +#~ msgid "(No rows)\n" +#~ msgstr "(无数据列)\n" + +#~ msgid " -?, --help show this help, then exit\n" +#~ msgstr " -?, --help 显示此帮助, 然后退出\n" + +# startup.c:652 +#~ msgid "SSL connection (unknown cipher)\n" +#~ msgstr "SSL连接 (未知加密)\n" diff --git a/src/bin/psql/print.c b/src/bin/psql/print.c index cab9e6eb44bfc..ad4350e1fe0a7 100644 --- a/src/bin/psql/print.c +++ b/src/bin/psql/print.c @@ -39,8 +39,9 @@ */ volatile bool cancel_pressed = false; +/* info for locale-aware numeric formatting; set up by setDecimalLocale() */ static char *decimal_point; -static char *grouping; +static int groupdigits; static char *thousands_sep; static char default_footer[100]; @@ -196,98 +197,103 @@ static void IsPagerNeeded(const printTableContent *cont, const int extra_lines, static void print_aligned_vertical(const printTableContent *cont, FILE *fout); +/* Count number of digits in integral part of number */ static int integer_digits(const char *my_str) { - int frac_len; - - if (my_str[0] == '-') + /* ignoring any sign ... */ + if (my_str[0] == '-' || my_str[0] == '+') my_str++; - - frac_len = strchr(my_str, '.') ? strlen(strchr(my_str, '.')) : 0; - - return strlen(my_str) - frac_len; + /* ... count initial integral digits */ + return strspn(my_str, "0123456789"); } -/* Return additional length required for locale-aware numeric output */ +/* Compute additional length required for locale-aware numeric output */ static int additional_numeric_locale_len(const char *my_str) { int int_len = integer_digits(my_str), len = 0; - int groupdigits = atoi(grouping); - if (int_len > 0) - /* Don't count a leading separator */ - len = (int_len / groupdigits - (int_len % groupdigits == 0)) * - strlen(thousands_sep); + /* Account for added thousands_sep instances */ + if (int_len > groupdigits) + len += ((int_len - 1) / groupdigits) * strlen(thousands_sep); + /* Account for possible additional length of decimal_point */ if (strchr(my_str, '.') != NULL) - len += strlen(decimal_point) - strlen("."); + len += strlen(decimal_point) - 1; return len; } -static int -strlen_with_numeric_locale(const char *my_str) -{ - return strlen(my_str) + additional_numeric_locale_len(my_str); -} - /* + * Format a numeric value per current LC_NUMERIC locale setting + * * Returns the appropriately formatted string in a new allocated block, - * caller must free + * caller must free. + * + * setDecimalLocale() must have been called earlier. */ static char * format_numeric_locale(const char *my_str) { - int i, - j, - int_len = integer_digits(my_str), - leading_digits; - int groupdigits = atoi(grouping); - int new_str_start = 0; - char *new_str = pg_malloc(strlen_with_numeric_locale(my_str) + 1); + char *new_str; + int new_len, + int_len, + leading_digits, + i, + new_str_pos; + + /* + * If the string doesn't look like a number, return it unchanged. This + * check is essential to avoid mangling already-localized "money" values. + */ + if (strspn(my_str, "0123456789+-.eE") != strlen(my_str)) + return pg_strdup(my_str); + + new_len = strlen(my_str) + additional_numeric_locale_len(my_str); + new_str = pg_malloc(new_len + 1); + new_str_pos = 0; + int_len = integer_digits(my_str); - leading_digits = (int_len % groupdigits != 0) ? - int_len % groupdigits : groupdigits; + /* number of digits in first thousands group */ + leading_digits = int_len % groupdigits; + if (leading_digits == 0) + leading_digits = groupdigits; - if (my_str[0] == '-') /* skip over sign, affects grouping - * calculations */ + /* process sign */ + if (my_str[0] == '-' || my_str[0] == '+') { - new_str[0] = my_str[0]; + new_str[new_str_pos++] = my_str[0]; my_str++; - new_str_start = 1; } - for (i = 0, j = new_str_start;; i++, j++) + /* process integer part of number */ + for (i = 0; i < int_len; i++) { - /* Hit decimal point? */ - if (my_str[i] == '.') + /* Time to insert separator? */ + if (i > 0 && --leading_digits == 0) { - strcpy(&new_str[j], decimal_point); - j += strlen(decimal_point); - /* add fractional part */ - strcpy(&new_str[j], &my_str[i] + 1); - break; + strcpy(&new_str[new_str_pos], thousands_sep); + new_str_pos += strlen(thousands_sep); + leading_digits = groupdigits; } + new_str[new_str_pos++] = my_str[i]; + } - /* End of string? */ - if (my_str[i] == '\0') - { - new_str[j] = '\0'; - break; - } + /* handle decimal point if any */ + if (my_str[i] == '.') + { + strcpy(&new_str[new_str_pos], decimal_point); + new_str_pos += strlen(decimal_point); + i++; + } - /* Add separator? */ - if (i != 0 && (i - leading_digits) % groupdigits == 0) - { - strcpy(&new_str[j], thousands_sep); - j += strlen(thousands_sep); - } + /* copy the rest (fractional digits and/or exponent, and \0 terminator) */ + strcpy(&new_str[new_str_pos], &my_str[i]); - new_str[j] = my_str[i]; - } + /* assert we didn't underestimate new_len (an overestimate is OK) */ + Assert(strlen(new_str) <= new_len); return new_str; } @@ -2741,10 +2747,10 @@ PageOutput(int lines, const printTableOpt *topt) { const char *pagerprog; FILE *pagerpipe; - unsigned short int pager = topt->pager; - int min_lines = topt->pager_min_lines; #ifdef TIOCGWINSZ + unsigned short int pager = topt->pager; + int min_lines = topt->pager_min_lines; int result; struct winsize screen_size; @@ -3237,15 +3243,24 @@ setDecimalLocale(void) extlconv = localeconv(); + /* Don't accept an empty decimal_point string */ if (*extlconv->decimal_point) decimal_point = pg_strdup(extlconv->decimal_point); else decimal_point = "."; /* SQL output standard */ - if (*extlconv->grouping && atoi(extlconv->grouping) > 0) - grouping = pg_strdup(extlconv->grouping); - else - grouping = "3"; /* most common */ + /* + * Although the Open Group standard allows locales to supply more than one + * group width, we consider only the first one, and we ignore any attempt + * to suppress grouping by specifying CHAR_MAX. As in the backend's + * cash.c, we must apply a range check to avoid being fooled by variant + * CHAR_MAX values. + */ + groupdigits = *extlconv->grouping; + if (groupdigits <= 0 || groupdigits > 6) + groupdigits = 3; /* most common */ + + /* Don't accept an empty thousands_sep string, either */ /* similar code exists in formatting.c */ if (*extlconv->thousands_sep) thousands_sep = pg_strdup(extlconv->thousands_sep); diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 5b32fdeb6ee15..77af953003b1a 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -738,9 +738,24 @@ static const SchemaQuery Query_for_list_of_matviews = { " WHERE substring(pg_catalog.quote_ident(evtname),1,%d)='%s'" #define Query_for_list_of_tablesample_methods \ -" SELECT pg_catalog.quote_ident(tsmname) "\ -" FROM pg_catalog.pg_tablesample_method "\ -" WHERE substring(pg_catalog.quote_ident(tsmname),1,%d)='%s'" +" SELECT pg_catalog.quote_ident(proname) "\ +" FROM pg_catalog.pg_proc "\ +" WHERE prorettype = 'pg_catalog.tsm_handler'::pg_catalog.regtype AND "\ +" proargtypes[0] = 'pg_catalog.internal'::pg_catalog.regtype AND "\ +" substring(pg_catalog.quote_ident(proname),1,%d)='%s'" + +#define Query_for_list_of_policies \ +" SELECT pg_catalog.quote_ident(polname) "\ +" FROM pg_catalog.pg_policy "\ +" WHERE substring(pg_catalog.quote_ident(polname),1,%d)='%s'" + +#define Query_for_list_of_tables_for_policy \ +"SELECT pg_catalog.quote_ident(relname) "\ +" FROM pg_catalog.pg_class"\ +" WHERE (%d = pg_catalog.length('%s'))"\ +" AND oid IN "\ +" (SELECT polrelid FROM pg_catalog.pg_policy "\ +" WHERE pg_catalog.quote_ident(polname)='%s')" /* * This is a list of all "things" in Pgsql, which can show up after CREATE or @@ -897,14 +912,16 @@ psql_completion(const char *text, int start, int end) static const char *const backslash_commands[] = { "\\a", "\\connect", "\\conninfo", "\\C", "\\cd", "\\copy", "\\copyright", - "\\d", "\\da", "\\db", "\\dc", "\\dC", "\\dd", "\\dD", "\\des", "\\det", "\\deu", "\\dew", "\\df", + "\\d", "\\da", "\\db", "\\dc", "\\dC", "\\dd", "\\ddp", "\\dD", + "\\des", "\\det", "\\deu", "\\dew", "\\dE", "\\df", "\\dF", "\\dFd", "\\dFp", "\\dFt", "\\dg", "\\di", "\\dl", "\\dL", - "\\dn", "\\do", "\\dp", "\\drds", "\\ds", "\\dS", "\\dt", "\\dT", "\\dv", "\\du", "\\dx", + "\\dm", "\\dn", "\\do", "\\dO", "\\dp", "\\drds", "\\ds", "\\dS", + "\\dt", "\\dT", "\\dv", "\\du", "\\dx", "\\dy", "\\e", "\\echo", "\\ef", "\\encoding", "\\f", "\\g", "\\gset", "\\h", "\\help", "\\H", "\\i", "\\ir", "\\l", "\\lo_import", "\\lo_export", "\\lo_list", "\\lo_unlink", "\\o", "\\p", "\\password", "\\prompt", "\\pset", "\\q", "\\qecho", "\\r", - "\\set", "\\sf", "\\t", "\\T", + "\\s", "\\set", "\\setenv", "\\sf", "\\t", "\\T", "\\timing", "\\unset", "\\x", "\\w", "\\watch", "\\z", "\\!", NULL }; @@ -2576,6 +2593,7 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views, NULL); /* complete CREATE TRIGGER ... EXECUTE with PROCEDURE */ else if (pg_strcasecmp(prev_wd, "EXECUTE") == 0 && + !(pg_strcasecmp(prev2_wd, "GRANT") == 0 && prev3_wd[0] == '\0') && prev2_wd[0] != '\0') COMPLETE_WITH_CONST("PROCEDURE"); @@ -2889,15 +2907,26 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers); } + /* DROP POLICY */ + else if (pg_strcasecmp(prev2_wd, "DROP") == 0 && + pg_strcasecmp(prev_wd, "POLICY") == 0) + { + COMPLETE_WITH_QUERY(Query_for_list_of_policies); + } /* DROP POLICY ON */ else if (pg_strcasecmp(prev3_wd, "DROP") == 0 && pg_strcasecmp(prev2_wd, "POLICY") == 0) + { COMPLETE_WITH_CONST("ON"); + } /* DROP POLICY ON
*/ else if (pg_strcasecmp(prev4_wd, "DROP") == 0 && pg_strcasecmp(prev3_wd, "POLICY") == 0 && pg_strcasecmp(prev_wd, "ON") == 0) - COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL); + { + completion_info_charp = prev2_wd; + COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_policy); + } /* DROP RULE */ else if (pg_strcasecmp(prev3_wd, "DROP") == 0 && @@ -3791,6 +3820,10 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH_QUERY(Query_for_list_of_extensions); else if (strncmp(prev_wd, "\\dm", strlen("\\dm")) == 0) COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews, NULL); + else if (strncmp(prev_wd, "\\dE", strlen("\\dE")) == 0) + COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables, NULL); + else if (strncmp(prev_wd, "\\dy", strlen("\\dy")) == 0) + COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers); /* must be at end of \d list */ else if (strncmp(prev_wd, "\\d", strlen("\\d")) == 0) diff --git a/src/bin/scripts/clusterdb.c b/src/bin/scripts/clusterdb.c index 85087af795671..8c0e7cfab28dd 100644 --- a/src/bin/scripts/clusterdb.c +++ b/src/bin/scripts/clusterdb.c @@ -201,7 +201,7 @@ cluster_one_database(const char *dbname, bool verbose, const char *table, appendPQExpBufferStr(&sql, " VERBOSE"); if (table) appendPQExpBuffer(&sql, " %s", table); - appendPQExpBufferStr(&sql, ";"); + appendPQExpBufferChar(&sql, ';'); conn = connectDatabase(dbname, host, port, username, prompt_password, progname, false); diff --git a/src/bin/scripts/createdb.c b/src/bin/scripts/createdb.c index a958bb86f014c..4d3fb22622aa6 100644 --- a/src/bin/scripts/createdb.c +++ b/src/bin/scripts/createdb.c @@ -195,7 +195,7 @@ main(int argc, char *argv[]) if (lc_ctype) appendPQExpBuffer(&sql, " LC_CTYPE '%s'", lc_ctype); - appendPQExpBufferStr(&sql, ";"); + appendPQExpBufferChar(&sql, ';'); /* No point in trying to use postgres db when creating postgres db. */ if (maintenance_db == NULL && strcmp(dbname, "postgres") == 0) @@ -222,7 +222,7 @@ main(int argc, char *argv[]) { printfPQExpBuffer(&sql, "COMMENT ON DATABASE %s IS ", fmtId(dbname)); appendStringLiteralConn(&sql, comment, conn); - appendPQExpBufferStr(&sql, ";"); + appendPQExpBufferChar(&sql, ';'); if (echo) printf("%s\n", sql.data); diff --git a/src/bin/scripts/createuser.c b/src/bin/scripts/createuser.c index fba21a1c65997..c8bcf0d0b2e65 100644 --- a/src/bin/scripts/createuser.c +++ b/src/bin/scripts/createuser.c @@ -321,7 +321,7 @@ main(int argc, char *argv[]) appendPQExpBuffer(&sql, "%s", fmtId(cell->val)); } } - appendPQExpBufferStr(&sql, ";"); + appendPQExpBufferChar(&sql, ';'); if (echo) printf("%s\n", sql.data); diff --git a/src/bin/scripts/po/de.po b/src/bin/scripts/po/de.po index 126a88dc5fd7e..e91642b3ba21f 100644 --- a/src/bin/scripts/po/de.po +++ b/src/bin/scripts/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-05-19 16:14+0000\n" -"PO-Revision-Date: 2015-05-19 20:52-0400\n" +"POT-Creation-Date: 2015-09-27 16:13+0000\n" +"PO-Revision-Date: 2015-09-27 13:20-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -93,20 +93,20 @@ msgstr "" "\n" #: clusterdb.c:262 createdb.c:252 createlang.c:236 createuser.c:348 -#: dropdb.c:155 droplang.c:237 dropuser.c:156 pg_isready.c:222 reindexdb.c:388 -#: vacuumdb.c:930 +#: dropdb.c:155 droplang.c:237 dropuser.c:156 pg_isready.c:222 reindexdb.c:392 +#: vacuumdb.c:931 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: clusterdb.c:263 reindexdb.c:389 vacuumdb.c:931 +#: clusterdb.c:263 reindexdb.c:393 vacuumdb.c:932 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [DBNAME]\n" #: clusterdb.c:264 createdb.c:254 createlang.c:238 createuser.c:350 -#: dropdb.c:157 droplang.c:239 dropuser.c:158 pg_isready.c:225 reindexdb.c:390 -#: vacuumdb.c:932 +#: dropdb.c:157 droplang.c:239 dropuser.c:158 pg_isready.c:225 reindexdb.c:394 +#: vacuumdb.c:933 #, c-format msgid "" "\n" @@ -126,14 +126,14 @@ msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=DBNAME zu clusternde Datenbank\n" #: clusterdb.c:267 createlang.c:240 createuser.c:354 dropdb.c:158 -#: droplang.c:241 dropuser.c:159 reindexdb.c:393 +#: droplang.c:241 dropuser.c:159 reindexdb.c:397 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr "" " -e, --echo zeige die Befehle, die an den Server\n" " gesendet werden\n" -#: clusterdb.c:268 reindexdb.c:395 +#: clusterdb.c:268 reindexdb.c:399 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet unterdrücke alle Mitteilungen\n" @@ -143,26 +143,26 @@ msgstr " -q, --quiet unterdrücke alle Mitteilungen\n" msgid " -t, --table=TABLE cluster specific table(s) only\n" msgstr " -t, --table=TABELLE clustere nur bestimmte Tabelle(n)\n" -#: clusterdb.c:270 reindexdb.c:399 +#: clusterdb.c:270 reindexdb.c:403 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose erzeuge viele Meldungen\n" #: clusterdb.c:271 createlang.c:242 createuser.c:368 dropdb.c:160 -#: droplang.c:243 dropuser.c:162 reindexdb.c:400 +#: droplang.c:243 dropuser.c:162 reindexdb.c:404 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" #: clusterdb.c:272 createlang.c:243 createuser.c:373 dropdb.c:162 -#: droplang.c:244 dropuser.c:164 reindexdb.c:401 +#: droplang.c:244 dropuser.c:164 reindexdb.c:405 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" #: clusterdb.c:273 createdb.c:265 createlang.c:244 createuser.c:374 -#: dropdb.c:163 droplang.c:245 dropuser.c:165 pg_isready.c:231 reindexdb.c:402 -#: vacuumdb.c:948 +#: dropdb.c:163 droplang.c:245 dropuser.c:165 pg_isready.c:231 reindexdb.c:406 +#: vacuumdb.c:949 #, c-format msgid "" "\n" @@ -172,36 +172,36 @@ msgstr "" "Verbindungsoptionen:\n" #: clusterdb.c:274 createlang.c:245 createuser.c:375 dropdb.c:164 -#: droplang.c:246 dropuser.c:166 reindexdb.c:403 vacuumdb.c:949 +#: droplang.c:246 dropuser.c:166 reindexdb.c:407 vacuumdb.c:950 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n" #: clusterdb.c:275 createlang.c:246 createuser.c:376 dropdb.c:165 -#: droplang.c:247 dropuser.c:167 reindexdb.c:404 vacuumdb.c:950 +#: droplang.c:247 dropuser.c:167 reindexdb.c:408 vacuumdb.c:951 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORT Port des Datenbankservers\n" #: clusterdb.c:276 createlang.c:247 dropdb.c:166 droplang.c:248 -#: reindexdb.c:405 vacuumdb.c:951 +#: reindexdb.c:409 vacuumdb.c:952 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=NAME Datenbankbenutzername\n" #: clusterdb.c:277 createlang.c:248 createuser.c:378 dropdb.c:167 -#: droplang.c:249 dropuser.c:169 reindexdb.c:406 vacuumdb.c:952 +#: droplang.c:249 dropuser.c:169 reindexdb.c:410 vacuumdb.c:953 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password niemals nach Passwort fragen\n" #: clusterdb.c:278 createlang.c:249 createuser.c:379 dropdb.c:168 -#: droplang.c:250 dropuser.c:170 reindexdb.c:407 vacuumdb.c:953 +#: droplang.c:250 dropuser.c:170 reindexdb.c:411 vacuumdb.c:954 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password Passwortfrage erzwingen\n" -#: clusterdb.c:279 dropdb.c:169 reindexdb.c:408 vacuumdb.c:954 +#: clusterdb.c:279 dropdb.c:169 reindexdb.c:412 vacuumdb.c:955 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=DBNAME alternative Wartungsdatenbank\n" @@ -217,8 +217,8 @@ msgstr "" "SQL-Befehls CLUSTER.\n" #: clusterdb.c:281 createdb.c:273 createlang.c:250 createuser.c:380 -#: dropdb.c:170 droplang.c:251 dropuser.c:171 pg_isready.c:236 reindexdb.c:410 -#: vacuumdb.c:956 +#: dropdb.c:170 droplang.c:251 dropuser.c:171 pg_isready.c:236 reindexdb.c:414 +#: vacuumdb.c:957 #, c-format msgid "" "\n" @@ -853,10 +853,9 @@ msgid "%s: cannot reindex all databases and system catalogs at the same time\n" msgstr "%s: kann nicht alle Datenbanken und Systemkataloge gleichzeitig reindizieren\n" #: reindexdb.c:169 -#, fuzzy, c-format -#| msgid "%s: cannot reindex specific table(s) in all databases\n" +#, c-format msgid "%s: cannot reindex specific schema(s) in all databases\n" -msgstr "%s: kann nicht bestimmte Tabelle(n) in allen Datenbanken reindizieren\n" +msgstr "%s: kann nicht bestimmte Schemas in allen Datenbanken reindizieren\n" #: reindexdb.c:174 #, c-format @@ -869,10 +868,9 @@ msgid "%s: cannot reindex specific index(es) in all databases\n" msgstr "%s: kann nicht bestimmte Indexe in allen Datenbanken reindizieren\n" #: reindexdb.c:190 -#, fuzzy, c-format -#| msgid "%s: cannot reindex specific table(s) and system catalogs at the same time\n" +#, c-format msgid "%s: cannot reindex specific schema(s) and system catalogs at the same time\n" -msgstr "%s: kann nicht bestimmte Tabelle(n) und Systemkataloge gleichzeitig reindizieren\n" +msgstr "%s: kann nicht bestimmte Schemas und Systemkataloge gleichzeitig reindizieren\n" #: reindexdb.c:195 #, c-format @@ -884,37 +882,37 @@ msgstr "%s: kann nicht bestimmte Tabelle(n) und Systemkataloge gleichzeitig rein msgid "%s: cannot reindex specific index(es) and system catalogs at the same time\n" msgstr "%s: kann nicht bestimmte Index und Systemkataloge gleichzeitig reindizieren\n" -#: reindexdb.c:302 +#: reindexdb.c:306 #, c-format msgid "%s: reindexing of table \"%s\" in database \"%s\" failed: %s" msgstr "%s: Reindizieren der Tabelle „%s“ in Datenbank „%s“ fehlgeschlagen: %s" -#: reindexdb.c:305 +#: reindexdb.c:309 #, c-format msgid "%s: reindexing of index \"%s\" in database \"%s\" failed: %s" msgstr "%s: Reindizieren des Index „%s“ in Datenbank „%s“ fehlgeschlagen: %s" -#: reindexdb.c:308 +#: reindexdb.c:312 #, c-format msgid "%s: reindexing of schema \"%s\" in database \"%s\" failed: %s" msgstr "%s: Reindizieren des Schemas „%s“ in Datenbank „%s“ fehlgeschlagen: %s" -#: reindexdb.c:311 +#: reindexdb.c:315 #, c-format msgid "%s: reindexing of database \"%s\" failed: %s" msgstr "%s: Reindizieren der Datenbank „%s“ fehlgeschlagen: %s" -#: reindexdb.c:342 +#: reindexdb.c:346 #, c-format msgid "%s: reindexing database \"%s\"\n" msgstr "%s: reindiziere Datenbank „%s“\n" -#: reindexdb.c:375 +#: reindexdb.c:379 #, c-format msgid "%s: reindexing of system catalogs failed: %s" msgstr "%s: Reindizieren der Systemkataloge fehlgeschlagen: %s" -#: reindexdb.c:387 +#: reindexdb.c:391 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -923,38 +921,37 @@ msgstr "" "%s reindiziert eine PostgreSQL-Datenbank.\n" "\n" -#: reindexdb.c:391 +#: reindexdb.c:395 #, c-format msgid " -a, --all reindex all databases\n" -msgstr " -a, --all reindiziere alle Datenbanken\n" +msgstr " -a, --all alle Datenbanken reindizieren\n" -#: reindexdb.c:392 +#: reindexdb.c:396 #, c-format msgid " -d, --dbname=DBNAME database to reindex\n" msgstr " -d, --dbname=DBNAME zu reindizierende Datenbank\n" -#: reindexdb.c:394 +#: reindexdb.c:398 #, c-format msgid " -i, --index=INDEX recreate specific index(es) only\n" -msgstr " -i, --index=INDEX erneuere nur bestimmte(n) Index(e)\n" +msgstr " -i, --index=INDEX nur bestimmte(n) Index(e) erneuern\n" -#: reindexdb.c:396 +#: reindexdb.c:400 #, c-format msgid " -s, --system reindex system catalogs\n" -msgstr " -s, --system reindiziere Systemkataloge\n" +msgstr " -s, --system Systemkataloge reindizieren\n" -#: reindexdb.c:397 -#, fuzzy, c-format -#| msgid " -n, --schema=SCHEMA dump the named schema(s) only\n" -msgid " -S, --schema=SCHEMA recreate specific schema(s) only\n" -msgstr " -n, --schema=SCHEMA nur das/die angegebene(n) Schema(s) ausgeben\n" +#: reindexdb.c:401 +#, c-format +msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" +msgstr " -S, --schema=SCHEMA nur bestimmte(s) Schema(s) reindizieren\n" -#: reindexdb.c:398 +#: reindexdb.c:402 #, c-format msgid " -t, --table=TABLE reindex specific table(s) only\n" -msgstr " -t, --table=TABELLE reindiziere nur bestimmte Tabelle(n)\n" +msgstr " -t, --table=TABELLE nur bestimmte Tabelle(n) reindizieren\n" -#: reindexdb.c:409 +#: reindexdb.c:413 #, c-format msgid "" "\n" @@ -965,10 +962,9 @@ msgstr "" "SQL-Befehls REINDEX.\n" #: vacuumdb.c:190 -#, fuzzy, c-format -#| msgid "%s: maximum number of parallel jobs is %d\n" +#, c-format msgid "%s: number of parallel \"jobs\" must be at least 1\n" -msgstr "%s: maximale Anzahl paralleler Jobs ist %d\n" +msgstr "%s: Anzahl paralleler Jobs muss mindestens 1 sein\n" #: vacuumdb.c:196 #, c-format @@ -976,10 +972,9 @@ msgid "%s: too many parallel jobs requested (maximum: %d)\n" msgstr "%s: zu viele parallele Jobs angefordert (Maximum: %d)\n" #: vacuumdb.c:235 vacuumdb.c:241 -#, fuzzy, c-format -#| msgid "%s: cannot use the \"full\" option when performing only analyze\n" +#, c-format msgid "%s: cannot use the \"%s\" option when performing only analyze\n" -msgstr "%s: kann Option „full“ nicht verwenden, wenn nur Analyze durchgeführt wird\n" +msgstr "%s: kann Option „%s“ nicht verwenden, wenn nur Analyze durchgeführt wird\n" #: vacuumdb.c:258 #, c-format @@ -1004,27 +999,26 @@ msgid "Generating default (full) optimizer statistics" msgstr "Erzeuge volle Optimierer-Statistiken" #: vacuumdb.c:361 -#, fuzzy, c-format -#| msgid "%s: clustering database \"%s\"\n" +#, c-format msgid "%s: processing database \"%s\": %s\n" -msgstr "%s: clustere Datenbank „%s“\n" +msgstr "%s: bearbeite Datenbank „%s“: %s\n" #: vacuumdb.c:364 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s: führe Vacuum in Datenbank „%s“ aus\n" -#: vacuumdb.c:693 +#: vacuumdb.c:694 #, c-format msgid "%s: vacuuming of table \"%s\" in database \"%s\" failed: %s" msgstr "%s: Vacuum der Tabelle „%s“ in Datenbank „%s“ fehlgeschlagen: %s" -#: vacuumdb.c:696 vacuumdb.c:813 +#: vacuumdb.c:697 vacuumdb.c:814 #, c-format msgid "%s: vacuuming of database \"%s\" failed: %s" msgstr "%s: Vacuum der Datenbank „%s“ fehlgeschlagen: %s" -#: vacuumdb.c:929 +#: vacuumdb.c:930 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -1033,90 +1027,90 @@ msgstr "" "%s säubert und analysiert eine PostgreSQL-Datenbank.\n" "\n" -#: vacuumdb.c:933 +#: vacuumdb.c:934 #, c-format msgid " -a, --all vacuum all databases\n" msgstr " -a, --all führe Vacuum in allen Datenbanken aus\n" -#: vacuumdb.c:934 +#: vacuumdb.c:935 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=DBNAME führe Vacuum in dieser Datenbank aus\n" -#: vacuumdb.c:935 +#: vacuumdb.c:936 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr "" " -e, --echo zeige die Befehle, die an den Server\n" " gesendet werden\n" -#: vacuumdb.c:936 +#: vacuumdb.c:937 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full führe volles Vacuum durch\n" -#: vacuumdb.c:937 +#: vacuumdb.c:938 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr " -F, --freeze Zeilentransaktionsinformationen einfrieren\n" -#: vacuumdb.c:938 +#: vacuumdb.c:939 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" +msgstr "" +" -j, --jobs=NUM so viele parallele Verbindungen zum Vacuum\n" +" verwenden\n" + +#: vacuumdb.c:940 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet unterdrücke alle Mitteilungen\n" -#: vacuumdb.c:939 +#: vacuumdb.c:941 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr "" " -t, --table='TABELLE[(SPALTEN)]'\n" " führe Vacuum für bestimmte Tabelle(n) aus\n" -#: vacuumdb.c:940 +#: vacuumdb.c:942 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose erzeuge viele Meldungen\n" -#: vacuumdb.c:941 +#: vacuumdb.c:943 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: vacuumdb.c:942 +#: vacuumdb.c:944 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze aktualisiere Statistiken für den Optimierer\n" -#: vacuumdb.c:943 -#, fuzzy, c-format -#| msgid " -Z, --analyze-only only update optimizer statistics\n" -msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n" -msgstr " -Z, --analyze-only aktualisiere nur Statistiken für den Optimierer\n" - -#: vacuumdb.c:944 -#, fuzzy, c-format -#| msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" -msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" -msgstr " -j, --jobs=NUM so viele parallele Jobs zur Sicherung verwenden\n" - #: vacuumdb.c:945 -#, fuzzy, c-format -#| msgid "" -#| " --analyze-in-stages only update optimizer statistics, in multiple\n" -#| " stages for faster results\n" +#, c-format +msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n" +msgstr "" +" -Z, --analyze-only aktualisiere nur Statistiken für den Optimierer;\n" +" kein Vacuum\n" + +#: vacuumdb.c:946 +#, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in multiple\n" -" stages for faster results; no vacuum\n" +" stages for faster results; no vacuum\n" msgstr "" " --analyze-in-stages aktualisiere nur Statistiken für den Optimierer,\n" -" in mehreren Phasen für schnellere Ergebnisse\n" +" in mehreren Phasen für schnellere Ergebnisse;\n" +" kein Vacuum\n" -#: vacuumdb.c:947 +#: vacuumdb.c:948 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: vacuumdb.c:955 +#: vacuumdb.c:956 #, c-format msgid "" "\n" diff --git a/src/bin/scripts/po/es.po b/src/bin/scripts/po/es.po index adacb1a8c6d24..769f3d3bd1554 100644 --- a/src/bin/scripts/po/es.po +++ b/src/bin/scripts/po/es.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: pgscripts (PostgreSQL 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:42+0000\n" -"PO-Revision-Date: 2014-12-15 16:31-0300\n" +"POT-Creation-Date: 2015-10-04 00:43+0000\n" +"PO-Revision-Date: 2015-09-30 13:18-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: Castellano \n" "Language: es\n" @@ -22,13 +22,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.7.1\n" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "memoria agotada\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" @@ -42,24 +42,24 @@ msgstr "no se pudo buscar el ID de usuario efectivo %ld: %s" msgid "user does not exist" msgstr "el usuario no existe" -#: ../../common/username.c:61 +#: ../../common/username.c:62 #, c-format -msgid "user name lookup failure: %s" -msgstr "falló la búsqueda de nombre de usuario: %s" +msgid "user name lookup failure: error code %lu" +msgstr "fallo en la búsqueda de nombre de usuario: código de error %lu" #: clusterdb.c:110 clusterdb.c:129 createdb.c:119 createdb.c:138 #: createlang.c:89 createlang.c:119 createlang.c:174 createuser.c:168 #: createuser.c:183 dropdb.c:94 dropdb.c:103 dropdb.c:111 droplang.c:88 #: droplang.c:118 droplang.c:174 dropuser.c:89 dropuser.c:104 dropuser.c:115 -#: pg_isready.c:93 pg_isready.c:107 reindexdb.c:120 reindexdb.c:139 -#: vacuumdb.c:139 vacuumdb.c:159 +#: pg_isready.c:93 pg_isready.c:107 reindexdb.c:130 reindexdb.c:149 +#: vacuumdb.c:208 vacuumdb.c:227 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Use «%s --help» para mayor información.\n" #: clusterdb.c:127 createdb.c:136 createlang.c:117 createuser.c:181 -#: dropdb.c:109 droplang.c:116 dropuser.c:102 pg_isready.c:105 reindexdb.c:137 -#: vacuumdb.c:157 +#: dropdb.c:109 droplang.c:116 dropuser.c:102 pg_isready.c:105 reindexdb.c:147 +#: vacuumdb.c:225 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: demasiados argumentos (el primero es «%s»)\n" @@ -107,20 +107,20 @@ msgstr "" "\n" #: clusterdb.c:262 createdb.c:252 createlang.c:236 createuser.c:348 -#: dropdb.c:155 droplang.c:237 dropuser.c:156 pg_isready.c:222 reindexdb.c:342 -#: vacuumdb.c:425 +#: dropdb.c:155 droplang.c:237 dropuser.c:156 pg_isready.c:222 reindexdb.c:392 +#: vacuumdb.c:931 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: clusterdb.c:263 reindexdb.c:343 vacuumdb.c:426 +#: clusterdb.c:263 reindexdb.c:393 vacuumdb.c:932 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPCIÓN]... [BASE-DE-DATOS]\n" #: clusterdb.c:264 createdb.c:254 createlang.c:238 createuser.c:350 -#: dropdb.c:157 droplang.c:239 dropuser.c:158 pg_isready.c:225 reindexdb.c:344 -#: vacuumdb.c:427 +#: dropdb.c:157 droplang.c:239 dropuser.c:158 pg_isready.c:225 reindexdb.c:394 +#: vacuumdb.c:933 #, c-format msgid "" "\n" @@ -140,12 +140,12 @@ msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=BASE base de datos a reordenar\n" #: clusterdb.c:267 createlang.c:240 createuser.c:354 dropdb.c:158 -#: droplang.c:241 dropuser.c:159 reindexdb.c:347 +#: droplang.c:241 dropuser.c:159 reindexdb.c:397 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo mostrar las órdenes a medida que se ejecutan\n" -#: clusterdb.c:268 reindexdb.c:349 +#: clusterdb.c:268 reindexdb.c:399 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet no escribir ningún mensaje\n" @@ -155,26 +155,26 @@ msgstr " -q, --quiet no escribir ningún mensaje\n" msgid " -t, --table=TABLE cluster specific table(s) only\n" msgstr " -t, --table=TABLA reordenar sólo esta(s) tabla(s)\n" -#: clusterdb.c:270 +#: clusterdb.c:270 reindexdb.c:403 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose desplegar varios mensajes informativos\n" #: clusterdb.c:271 createlang.c:242 createuser.c:368 dropdb.c:160 -#: droplang.c:243 dropuser.c:162 reindexdb.c:352 +#: droplang.c:243 dropuser.c:162 reindexdb.c:404 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión y salir\n" #: clusterdb.c:272 createlang.c:243 createuser.c:373 dropdb.c:162 -#: droplang.c:244 dropuser.c:164 reindexdb.c:353 +#: droplang.c:244 dropuser.c:164 reindexdb.c:405 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" #: clusterdb.c:273 createdb.c:265 createlang.c:244 createuser.c:374 -#: dropdb.c:163 droplang.c:245 dropuser.c:165 pg_isready.c:231 reindexdb.c:354 -#: vacuumdb.c:442 +#: dropdb.c:163 droplang.c:245 dropuser.c:165 pg_isready.c:231 reindexdb.c:406 +#: vacuumdb.c:949 #, c-format msgid "" "\n" @@ -184,36 +184,36 @@ msgstr "" "Opciones de conexión:\n" #: clusterdb.c:274 createlang.c:245 createuser.c:375 dropdb.c:164 -#: droplang.c:246 dropuser.c:166 reindexdb.c:355 vacuumdb.c:443 +#: droplang.c:246 dropuser.c:166 reindexdb.c:407 vacuumdb.c:950 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=ANFITRIÓN nombre del servidor o directorio del socket\n" #: clusterdb.c:275 createlang.c:246 createuser.c:376 dropdb.c:165 -#: droplang.c:247 dropuser.c:167 reindexdb.c:356 vacuumdb.c:444 +#: droplang.c:247 dropuser.c:167 reindexdb.c:408 vacuumdb.c:951 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PUERTO puerto del servidor\n" #: clusterdb.c:276 createlang.c:247 dropdb.c:166 droplang.c:248 -#: reindexdb.c:357 vacuumdb.c:445 +#: reindexdb.c:409 vacuumdb.c:952 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USUARIO nombre de usuario para la conexión\n" #: clusterdb.c:277 createlang.c:248 createuser.c:378 dropdb.c:167 -#: droplang.c:249 dropuser.c:169 reindexdb.c:358 vacuumdb.c:446 +#: droplang.c:249 dropuser.c:169 reindexdb.c:410 vacuumdb.c:953 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir contraseña\n" #: clusterdb.c:278 createlang.c:249 createuser.c:379 dropdb.c:168 -#: droplang.c:250 dropuser.c:170 reindexdb.c:359 vacuumdb.c:447 +#: droplang.c:250 dropuser.c:170 reindexdb.c:411 vacuumdb.c:954 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password forzar la petición de contraseña\n" -#: clusterdb.c:279 dropdb.c:169 reindexdb.c:360 vacuumdb.c:448 +#: clusterdb.c:279 dropdb.c:169 reindexdb.c:412 vacuumdb.c:955 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=BASE base de datos de mantención alternativa\n" @@ -228,8 +228,8 @@ msgstr "" "Lea la descripción de la orden CLUSTER de SQL para obtener mayores detalles.\n" #: clusterdb.c:281 createdb.c:273 createlang.c:250 createuser.c:380 -#: dropdb.c:170 droplang.c:251 dropuser.c:171 pg_isready.c:236 reindexdb.c:362 -#: vacuumdb.c:450 +#: dropdb.c:170 droplang.c:251 dropuser.c:171 pg_isready.c:236 reindexdb.c:414 +#: vacuumdb.c:957 #, c-format msgid "" "\n" @@ -238,58 +238,58 @@ msgstr "" "\n" "Reporte errores a .\n" -#: common.c:69 common.c:115 +#: common.c:68 common.c:114 msgid "Password: " msgstr "Contraseña: " -#: common.c:104 +#: common.c:103 #, c-format msgid "%s: could not connect to database %s\n" msgstr "%s: no se pudo conectar a la base de datos %s\n" -#: common.c:131 +#: common.c:130 #, c-format msgid "%s: could not connect to database %s: %s" msgstr "%s: no se pudo conectar a la base de datos %s: %s" -#: common.c:180 common.c:208 +#: common.c:179 common.c:207 #, c-format msgid "%s: query failed: %s" msgstr "%s: la consulta falló: %s" -#: common.c:182 common.c:210 +#: common.c:181 common.c:209 #, c-format msgid "%s: query was: %s\n" msgstr "%s: la consulta era: %s\n" #. translator: abbreviation for "yes" -#: common.c:251 +#: common.c:250 msgid "y" msgstr "s" #. translator: abbreviation for "no" -#: common.c:253 +#: common.c:252 msgid "n" msgstr "n" #. translator: This is a question followed by the translated options for #. "yes" and "no". -#: common.c:263 +#: common.c:262 #, c-format msgid "%s (%s/%s) " msgstr "%s (%s/%s) " -#: common.c:284 +#: common.c:283 #, c-format msgid "Please answer \"%s\" or \"%s\".\n" msgstr "Por favor conteste «%s» o «%s».\n" -#: common.c:362 common.c:395 +#: common.c:362 common.c:399 #, c-format msgid "Cancel request sent\n" msgstr "Petición de cancelación enviada\n" -#: common.c:364 common.c:397 +#: common.c:365 common.c:403 #, c-format msgid "Could not send cancel request: %s" msgstr "No se pudo enviar el paquete de cancelación: %s" @@ -861,70 +861,87 @@ msgstr "" msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USUARIO nombre de usuario para la conexión\n" -#: reindexdb.c:149 +#: reindexdb.c:159 #, c-format msgid "%s: cannot reindex all databases and a specific one at the same time\n" msgstr "" "%s: no se pueden reindexar todas las bases de datos y una de ellas\n" "en particular simultáneamente\n" -#: reindexdb.c:154 +#: reindexdb.c:164 #, c-format msgid "%s: cannot reindex all databases and system catalogs at the same time\n" msgstr "" "%s: no se pueden reindexar todas las bases de datos y los catálogos\n" "del sistema simultáneamente\n" -#: reindexdb.c:159 +#: reindexdb.c:169 +#, c-format +msgid "%s: cannot reindex specific schema(s) in all databases\n" +msgstr "%s: no es posible reindexar esquemas específicos en todas las bases de datos\n" + +#: reindexdb.c:174 #, c-format msgid "%s: cannot reindex specific table(s) in all databases\n" msgstr "%s: no es posible reindexar tablas específicas en todas las bases de datos\n" -#: reindexdb.c:164 +#: reindexdb.c:179 #, c-format msgid "%s: cannot reindex specific index(es) in all databases\n" msgstr "%s: no es posible reindexar índices específicos en todas las bases de datos\n" -#: reindexdb.c:175 +#: reindexdb.c:190 +#, c-format +msgid "%s: cannot reindex specific schema(s) and system catalogs at the same time\n" +msgstr "" +"%s: no es posible reindexar esquemas específicos y los catálogos\n" +"del sistema simultáneamente\n" + +#: reindexdb.c:195 #, c-format msgid "%s: cannot reindex specific table(s) and system catalogs at the same time\n" msgstr "" "%s: no es posible reindexar tablas específicas y los catálogos\n" "del sistema simultáneamente\n" -#: reindexdb.c:180 +#: reindexdb.c:200 #, c-format msgid "%s: cannot reindex specific index(es) and system catalogs at the same time\n" msgstr "" "%s: no es posible reindexar índices específicos y los catálogos\n" "del sistema simultáneamente\n" -#: reindexdb.c:264 +#: reindexdb.c:306 #, c-format msgid "%s: reindexing of table \"%s\" in database \"%s\" failed: %s" msgstr "%s: falló la reindexación de la tabla «%s» en la base de datos «%s»: %s" -#: reindexdb.c:267 +#: reindexdb.c:309 #, c-format msgid "%s: reindexing of index \"%s\" in database \"%s\" failed: %s" msgstr "%s: falló la reindexación del índice «%s» en la base de datos «%s»: %s" -#: reindexdb.c:270 +#: reindexdb.c:312 +#, c-format +msgid "%s: reindexing of schema \"%s\" in database \"%s\" failed: %s" +msgstr "%s: falló la reindexación del esquema «%s» en la base de datos «%s»: %s" + +#: reindexdb.c:315 #, c-format msgid "%s: reindexing of database \"%s\" failed: %s" msgstr "%s: falló la reindexación de la base de datos «%s»: %s" -#: reindexdb.c:301 +#: reindexdb.c:346 #, c-format msgid "%s: reindexing database \"%s\"\n" msgstr "%s: reindexando la base de datos «%s»\n" -#: reindexdb.c:329 +#: reindexdb.c:379 #, c-format msgid "%s: reindexing of system catalogs failed: %s" msgstr "%s: falló la reindexación de los catálogos del sistema: %s" -#: reindexdb.c:341 +#: reindexdb.c:391 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -933,32 +950,37 @@ msgstr "" "%s reindexa una base de datos PostgreSQL.\n" "\n" -#: reindexdb.c:345 +#: reindexdb.c:395 #, c-format msgid " -a, --all reindex all databases\n" msgstr " -a, --all reindexar todas las bases de datos\n" -#: reindexdb.c:346 +#: reindexdb.c:396 #, c-format msgid " -d, --dbname=DBNAME database to reindex\n" msgstr " -d, --dbname=DBNAME base de datos a reindexar\n" -#: reindexdb.c:348 +#: reindexdb.c:398 #, c-format msgid " -i, --index=INDEX recreate specific index(es) only\n" -msgstr " -i, --index=INDEX recrear sólo este(os) índice(s)\n" +msgstr " -i, --index=INDEX recrear sólo este o estos índice(s)\n" -#: reindexdb.c:350 +#: reindexdb.c:400 #, c-format msgid " -s, --system reindex system catalogs\n" msgstr " -s, --system reindexa los catálogos del sistema\n" -#: reindexdb.c:351 +#: reindexdb.c:401 +#, c-format +msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" +msgstr " -S, --schema=ESQUEMA reindexar sólo este o estos esquemas\n" + +#: reindexdb.c:402 #, c-format msgid " -t, --table=TABLE reindex specific table(s) only\n" msgstr " -t, --table=TABLE reindexar sólo esta(s) tabla(s)\n" -#: reindexdb.c:361 +#: reindexdb.c:413 #, c-format msgid "" "\n" @@ -967,66 +989,74 @@ msgstr "" "\n" "Lea la descripción de la orden REINDEX de SQL para obtener mayores detalles.\n" -#: vacuumdb.c:167 +#: vacuumdb.c:190 #, c-format -msgid "%s: cannot use the \"full\" option when performing only analyze\n" -msgstr "" -"%s: no se puede usar la opción «full» cuando se está sólo\n" -"actualizando estadísticas\n" +msgid "%s: number of parallel \"jobs\" must be at least 1\n" +msgstr "%s: número de trabajos en paralelo debe ser al menos 1\n" + +#: vacuumdb.c:196 +#, c-format +msgid "%s: too many parallel jobs requested (maximum: %d)\n" +msgstr "%s: demasiados trabajos paralelos solicitados (máximo: %d)\n" -#: vacuumdb.c:173 +#: vacuumdb.c:235 vacuumdb.c:241 #, c-format -msgid "%s: cannot use the \"freeze\" option when performing only analyze\n" +msgid "%s: cannot use the \"%s\" option when performing only analyze\n" msgstr "" -"%s: no se puede usar la opción «freeze» cuando se está sólo\n" +"%s: no se puede usar la opción «%s» cuando se está sólo\n" "actualizando estadísticas\n" -#: vacuumdb.c:186 +#: vacuumdb.c:258 #, c-format msgid "%s: cannot vacuum all databases and a specific one at the same time\n" msgstr "" "%s: no se pueden limpiar todas las bases de datos y una de ellas\n" "en particular simultáneamente\n" -#: vacuumdb.c:192 +#: vacuumdb.c:264 #, c-format msgid "%s: cannot vacuum specific table(s) in all databases\n" msgstr "" "%s: no es posible limpiar tablas específicas en todas\n" "las bases de datos\n" -#: vacuumdb.c:244 -#, c-format -msgid "%s: vacuuming of table \"%s\" in database \"%s\" failed: %s" -msgstr "" -"%s: falló la limpieza de la tabla «%s» en la base de datos «%s»:\n" -"%s" - -#: vacuumdb.c:247 -#, c-format -msgid "%s: vacuuming of database \"%s\" failed: %s" -msgstr "" -"%s: falló la limpieza de la base de datos «%s»:\n" -"%s" - -#: vacuumdb.c:333 +#: vacuumdb.c:350 msgid "Generating minimal optimizer statistics (1 target)" msgstr "Generando estadísticas mínimas para el optimizador (tamaño = 1)" -#: vacuumdb.c:334 +#: vacuumdb.c:351 msgid "Generating medium optimizer statistics (10 targets)" msgstr "Generando estadísticas medias para el optimizador (tamaño = 10)" -#: vacuumdb.c:335 +#: vacuumdb.c:352 msgid "Generating default (full) optimizer statistics" msgstr "Generando estadísticas predeterminadas (completas) para el optimizador" -#: vacuumdb.c:406 +#: vacuumdb.c:361 +#, c-format +msgid "%s: processing database \"%s\": %s\n" +msgstr "%s: procesando la base de datos «%s»: %s\n" + +#: vacuumdb.c:364 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s: limpiando la base de datos «%s»\n" -#: vacuumdb.c:424 +#: vacuumdb.c:694 +#, c-format +msgid "%s: vacuuming of table \"%s\" in database \"%s\" failed: %s" +msgstr "" +"%s: falló la limpieza de la tabla «%s» en la base de datos «%s»:\n" +"%s" + +#: vacuumdb.c:697 vacuumdb.c:814 +#, c-format +msgid "%s: vacuuming of database \"%s\" failed: %s" +msgstr "" +"%s: falló la limpieza de la base de datos «%s»:\n" +"%s" + +#: vacuumdb.c:930 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -1035,78 +1065,86 @@ msgstr "" "%s limpia (VACUUM) y analiza una base de datos PostgreSQL.\n" "\n" -#: vacuumdb.c:428 +#: vacuumdb.c:934 #, c-format msgid " -a, --all vacuum all databases\n" msgstr " -a, --all limpia todas las bases de datos\n" -#: vacuumdb.c:429 +#: vacuumdb.c:935 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=BASE base de datos a limpiar\n" -#: vacuumdb.c:430 +#: vacuumdb.c:936 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo mostrar las órdenes enviadas al servidor\n" -#: vacuumdb.c:431 +#: vacuumdb.c:937 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full usar «vacuum full»\n" -#: vacuumdb.c:432 +#: vacuumdb.c:938 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr " -F, --freeze usar «vacuum freeze»\n" -#: vacuumdb.c:433 +#: vacuumdb.c:939 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" +msgstr " -j, --jobs=NUM usar esta cantidad de conexiones concurrentes\n" + +#: vacuumdb.c:940 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet no desplegar mensajes\n" -#: vacuumdb.c:434 +#: vacuumdb.c:941 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr "" " -t, --table='TABLA[(COLUMNAS)]'\n" " limpiar sólo esta(s) tabla(s)\n" -#: vacuumdb.c:435 +#: vacuumdb.c:942 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose desplegar varios mensajes informativos\n" -#: vacuumdb.c:436 +#: vacuumdb.c:943 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión y salir\n" -#: vacuumdb.c:437 +#: vacuumdb.c:944 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze actualizar las estadísticas del optimizador\n" -#: vacuumdb.c:438 +#: vacuumdb.c:945 #, c-format -msgid " -Z, --analyze-only only update optimizer statistics\n" -msgstr " -Z, --analyze-only actualizar sólo las estadísticas del optimizador\n" +msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n" +msgstr "" +" -Z, --analyze-only sólo actualizar las estadísticas del optimizador;\n" +" no hacer vacuum\n" -#: vacuumdb.c:439 +#: vacuumdb.c:946 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in multiple\n" -" stages for faster results\n" +" stages for faster results; no vacuum\n" msgstr "" -" --analyze-in-stages actualizar sólo las estadísticas del optimizador,\n" -" en múltiples etapas para resultados más rápidos\n" +" --analyze-in-stages sólo actualizar las estadísticas del optimizador,\n" +" en múltiples etapas para resultados más rápidos;\n" +" no hacer vacuum\n" -#: vacuumdb.c:441 +#: vacuumdb.c:948 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: vacuumdb.c:449 +#: vacuumdb.c:956 #, c-format msgid "" "\n" diff --git a/src/bin/scripts/po/it.po b/src/bin/scripts/po/it.po index 204bf956c829c..b2b51a22c6759 100644 --- a/src/bin/scripts/po/it.po +++ b/src/bin/scripts/po/it.po @@ -25,10 +25,10 @@ # Attuale traduttore: Emanuele Zamprogno , 2009. msgid "" msgstr "" -"Project-Id-Version: pgscripts (PostgreSQL) 9.4\n" +"Project-Id-Version: pgscripts (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-06 18:12+0000\n" -"PO-Revision-Date: 2014-12-06 18:31+0100\n" +"POT-Creation-Date: 2015-07-06 14:43+0000\n" +"PO-Revision-Date: 2015-07-07 03:07+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -38,13 +38,13 @@ msgstr "" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 1.5.4\n" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "memoria esaurita\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "impossibile duplicare il puntatore nullo (errore interno)\n" @@ -58,24 +58,24 @@ msgstr "ID utente effettivo %ld non trovato: %s" msgid "user does not exist" msgstr "l'utente non esiste" -#: ../../common/username.c:61 +#: ../../common/username.c:62 #, c-format -msgid "user name lookup failure: %s" -msgstr "errore nella ricerca del nome: %s" +msgid "user name lookup failure: error code %lu" +msgstr "ricerca del nome utente fallita: codice di errore %lu" #: clusterdb.c:110 clusterdb.c:129 createdb.c:119 createdb.c:138 #: createlang.c:89 createlang.c:119 createlang.c:174 createuser.c:168 #: createuser.c:183 dropdb.c:94 dropdb.c:103 dropdb.c:111 droplang.c:88 #: droplang.c:118 droplang.c:174 dropuser.c:89 dropuser.c:104 dropuser.c:115 -#: pg_isready.c:93 pg_isready.c:107 reindexdb.c:120 reindexdb.c:139 -#: vacuumdb.c:139 vacuumdb.c:159 +#: pg_isready.c:93 pg_isready.c:107 reindexdb.c:130 reindexdb.c:149 +#: vacuumdb.c:208 vacuumdb.c:227 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Prova \"%s --help\" per maggiori informazioni.\n" #: clusterdb.c:127 createdb.c:136 createlang.c:117 createuser.c:181 -#: dropdb.c:109 droplang.c:116 dropuser.c:102 pg_isready.c:105 reindexdb.c:137 -#: vacuumdb.c:157 +#: dropdb.c:109 droplang.c:116 dropuser.c:102 pg_isready.c:105 reindexdb.c:147 +#: vacuumdb.c:225 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: troppi argomenti nella riga di comando (il primo è \"%s\")\n" @@ -115,20 +115,20 @@ msgstr "" "\n" #: clusterdb.c:262 createdb.c:252 createlang.c:236 createuser.c:348 -#: dropdb.c:155 droplang.c:237 dropuser.c:156 pg_isready.c:222 reindexdb.c:342 -#: vacuumdb.c:425 +#: dropdb.c:155 droplang.c:237 dropuser.c:156 pg_isready.c:222 reindexdb.c:392 +#: vacuumdb.c:930 #, c-format msgid "Usage:\n" msgstr "Utilizzo:\n" -#: clusterdb.c:263 reindexdb.c:343 vacuumdb.c:426 +#: clusterdb.c:263 reindexdb.c:393 vacuumdb.c:931 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPZIONE]... [NOMEDB]\n" #: clusterdb.c:264 createdb.c:254 createlang.c:238 createuser.c:350 -#: dropdb.c:157 droplang.c:239 dropuser.c:158 pg_isready.c:225 reindexdb.c:344 -#: vacuumdb.c:427 +#: dropdb.c:157 droplang.c:239 dropuser.c:158 pg_isready.c:225 reindexdb.c:394 +#: vacuumdb.c:932 #, c-format msgid "" "\n" @@ -148,12 +148,12 @@ msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=NOMEDB database da raggruppare\n" #: clusterdb.c:267 createlang.c:240 createuser.c:354 dropdb.c:158 -#: droplang.c:241 dropuser.c:159 reindexdb.c:347 +#: droplang.c:241 dropuser.c:159 reindexdb.c:397 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo mostra i comandi inviati al server\n" -#: clusterdb.c:268 reindexdb.c:349 +#: clusterdb.c:268 reindexdb.c:399 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet non stampare alcun messaggio\n" @@ -163,26 +163,26 @@ msgstr " -q, --quiet non stampare alcun messaggio\n" msgid " -t, --table=TABLE cluster specific table(s) only\n" msgstr " -t, --table=TABELLA raggruppa solo le tabelle specificate\n" -#: clusterdb.c:270 +#: clusterdb.c:270 reindexdb.c:403 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose mostra un output completo\n" #: clusterdb.c:271 createlang.c:242 createuser.c:368 dropdb.c:160 -#: droplang.c:243 dropuser.c:162 reindexdb.c:352 +#: droplang.c:243 dropuser.c:162 reindexdb.c:404 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informazioni sulla versione ed esci\n" #: clusterdb.c:272 createlang.c:243 createuser.c:373 dropdb.c:162 -#: droplang.c:244 dropuser.c:164 reindexdb.c:353 +#: droplang.c:244 dropuser.c:164 reindexdb.c:405 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra questo aiuto ed esci\n" #: clusterdb.c:273 createdb.c:265 createlang.c:244 createuser.c:374 -#: dropdb.c:163 droplang.c:245 dropuser.c:165 pg_isready.c:231 reindexdb.c:354 -#: vacuumdb.c:442 +#: dropdb.c:163 droplang.c:245 dropuser.c:165 pg_isready.c:231 reindexdb.c:406 +#: vacuumdb.c:948 #, c-format msgid "" "\n" @@ -192,36 +192,36 @@ msgstr "" "Opzioni di connessione:\n" #: clusterdb.c:274 createlang.c:245 createuser.c:375 dropdb.c:164 -#: droplang.c:246 dropuser.c:166 reindexdb.c:355 vacuumdb.c:443 +#: droplang.c:246 dropuser.c:166 reindexdb.c:407 vacuumdb.c:949 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME host del server database o directory socket\n" #: clusterdb.c:275 createlang.c:246 createuser.c:376 dropdb.c:165 -#: droplang.c:247 dropuser.c:167 reindexdb.c:356 vacuumdb.c:444 +#: droplang.c:247 dropuser.c:167 reindexdb.c:408 vacuumdb.c:950 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORTA porta del server database\n" #: clusterdb.c:276 createlang.c:247 dropdb.c:166 droplang.c:248 -#: reindexdb.c:357 vacuumdb.c:445 +#: reindexdb.c:409 vacuumdb.c:951 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=UTENTE nome utente da utilizzare per la connessione\n" #: clusterdb.c:277 createlang.c:248 createuser.c:378 dropdb.c:167 -#: droplang.c:249 dropuser.c:169 reindexdb.c:358 vacuumdb.c:446 +#: droplang.c:249 dropuser.c:169 reindexdb.c:410 vacuumdb.c:952 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password non richiedere mai una password\n" #: clusterdb.c:278 createlang.c:249 createuser.c:379 dropdb.c:168 -#: droplang.c:250 dropuser.c:170 reindexdb.c:359 vacuumdb.c:447 +#: droplang.c:250 dropuser.c:170 reindexdb.c:411 vacuumdb.c:953 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password forza la richiesta di una password\n" -#: clusterdb.c:279 dropdb.c:169 reindexdb.c:360 vacuumdb.c:448 +#: clusterdb.c:279 dropdb.c:169 reindexdb.c:412 vacuumdb.c:954 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=NOMEDB database di manutenzione alternativo\n" @@ -236,8 +236,8 @@ msgstr "" "Consulta la descrizione del comando SQL CLUSTER per maggiori informazioni.\n" #: clusterdb.c:281 createdb.c:273 createlang.c:250 createuser.c:380 -#: dropdb.c:170 droplang.c:251 dropuser.c:171 pg_isready.c:236 reindexdb.c:362 -#: vacuumdb.c:450 +#: dropdb.c:170 droplang.c:251 dropuser.c:171 pg_isready.c:236 reindexdb.c:414 +#: vacuumdb.c:956 #, c-format msgid "" "\n" @@ -246,58 +246,58 @@ msgstr "" "\n" "Puoi segnalare eventuali bug a .\n" -#: common.c:69 common.c:115 +#: common.c:68 common.c:114 msgid "Password: " msgstr "Password: " -#: common.c:104 +#: common.c:103 #, c-format msgid "%s: could not connect to database %s\n" msgstr "%s: connessione al database %s fallita\n" -#: common.c:131 +#: common.c:130 #, c-format msgid "%s: could not connect to database %s: %s" msgstr "%s: connessione al database %s fallita: %s" -#: common.c:180 common.c:208 +#: common.c:179 common.c:207 #, c-format msgid "%s: query failed: %s" msgstr "%s: query fallita: %s" -#: common.c:182 common.c:210 +#: common.c:181 common.c:209 #, c-format msgid "%s: query was: %s\n" msgstr "%s: la query era: %s\n" #. translator: abbreviation for "yes" -#: common.c:251 +#: common.c:250 msgid "y" msgstr "s" #. translator: abbreviation for "no" -#: common.c:253 +#: common.c:252 msgid "n" msgstr "n" #. translator: This is a question followed by the translated options for #. "yes" and "no". -#: common.c:263 +#: common.c:262 #, c-format msgid "%s (%s/%s) " msgstr "%s (%s/%s) " -#: common.c:284 +#: common.c:283 #, c-format msgid "Please answer \"%s\" or \"%s\".\n" msgstr "Prego rispondere \"%s\" o \"%s\".\n" -#: common.c:362 common.c:395 +#: common.c:362 common.c:399 #, c-format msgid "Cancel request sent\n" msgstr "Richiesta di annullamento inviata\n" -#: common.c:364 common.c:397 +#: common.c:365 common.c:403 #, c-format msgid "Could not send cancel request: %s" msgstr "Invio della richiesta di annullamento fallita: %s" @@ -853,62 +853,77 @@ msgstr " -t, --timeout=SEC secondi di attesa tentando una connessione, 0 msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=UTENTE nome utente con cui connettersi\n" -#: reindexdb.c:149 +#: reindexdb.c:159 #, c-format msgid "%s: cannot reindex all databases and a specific one at the same time\n" msgstr "%s: non è possibile re-indicizzare tutti i database ed uno specifico nello stesso momento\n" -#: reindexdb.c:154 +#: reindexdb.c:164 #, c-format msgid "%s: cannot reindex all databases and system catalogs at the same time\n" msgstr "%s: non è possibile re-indicizzare tutti i database e i cataloghi di sistema nello stesso momento\n" -#: reindexdb.c:159 +#: reindexdb.c:169 +#, c-format +msgid "%s: cannot reindex specific schema(s) in all databases\n" +msgstr "%s: impossibile reindicizzare schemi specifici in tutti i database\n" + +#: reindexdb.c:174 #, c-format msgid "%s: cannot reindex specific table(s) in all databases\n" msgstr "%s: non è possibile re-indicizzare tabelle specificate in tutti i database\n" -#: reindexdb.c:164 +#: reindexdb.c:179 #, c-format msgid "%s: cannot reindex specific index(es) in all databases\n" msgstr "%s: non è possibile re-indicizzare indici specificati in tutti i database\n" -#: reindexdb.c:175 +#: reindexdb.c:190 +#, c-format +msgid "%s: cannot reindex specific schema(s) and system catalogs at the same time\n" +msgstr "%s: impossibile reindicizzare schemi specifici e cataloghi di sistema allo stesso tempo\n" + +#: reindexdb.c:195 #, c-format msgid "%s: cannot reindex specific table(s) and system catalogs at the same time\n" msgstr "%s: non è possibile re-indicizzare tabelle specificate e cataloghi di sistema allo stesso momento\n" -#: reindexdb.c:180 +#: reindexdb.c:200 #, c-format msgid "%s: cannot reindex specific index(es) and system catalogs at the same time\n" msgstr "%s: non è possibile re-indicizzare indici specificati e cataloghi di sistema allo stesso momento\n" -#: reindexdb.c:264 +#: reindexdb.c:306 #, c-format msgid "%s: reindexing of table \"%s\" in database \"%s\" failed: %s" msgstr "%s: la re-indicizzazione della tabella \"%s\" nel database \"%s\" è fallita: %s" -#: reindexdb.c:267 +#: reindexdb.c:309 #, c-format msgid "%s: reindexing of index \"%s\" in database \"%s\" failed: %s" msgstr "%s: la re-indicizzazione dell'indice \"%s\" nel database \"%s\" è fallita: %s" -#: reindexdb.c:270 +#: reindexdb.c:312 +#, c-format +msgid "%s: reindexing of schema \"%s\" in database \"%s\" failed: %s" +msgstr "%s: reindicizzamento dello schema \"%s\" nel database \"%s\" fallito: %s" + +#: reindexdb.c:315 #, c-format msgid "%s: reindexing of database \"%s\" failed: %s" msgstr "%s: la re-indicizzazione del database \"%s\" è fallita: %s" -#: reindexdb.c:301 +#: reindexdb.c:346 #, c-format msgid "%s: reindexing database \"%s\"\n" msgstr "%s: re-indicizzazione del database \"%s\"\n" -#: reindexdb.c:329 +#: reindexdb.c:379 #, c-format msgid "%s: reindexing of system catalogs failed: %s" msgstr "%s: la re-indicizzazione dei cataloghi di sistema è fallita: %s" -#: reindexdb.c:341 +#: reindexdb.c:391 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -917,32 +932,37 @@ msgstr "" "%s re-indicizza un database PostgreSQL.\n" "\n" -#: reindexdb.c:345 +#: reindexdb.c:395 #, c-format msgid " -a, --all reindex all databases\n" msgstr " -a, --all re-indicizza tutti i database\n" -#: reindexdb.c:346 +#: reindexdb.c:396 #, c-format msgid " -d, --dbname=DBNAME database to reindex\n" msgstr " -d, --dbname=NOMEDB database da re-indicizzare\n" -#: reindexdb.c:348 +#: reindexdb.c:398 #, c-format msgid " -i, --index=INDEX recreate specific index(es) only\n" msgstr " -i, --index=INDICE ricrea solo gli indici specificati\n" -#: reindexdb.c:350 +#: reindexdb.c:400 #, c-format msgid " -s, --system reindex system catalogs\n" msgstr " -s, --system re-indicizza i cataloghi di sistema\n" -#: reindexdb.c:351 +#: reindexdb.c:401 +#, c-format +msgid " -S, --schema=SCHEMA recreate specific schema(s) only\n" +msgstr " -S, --schema=SCHEMA ricrea solo gli schemi specificati\n" + +#: reindexdb.c:402 #, c-format msgid " -t, --table=TABLE reindex specific table(s) only\n" msgstr " -t, --table=TABELLA re-indicizza solo le tabelle specificate\n" -#: reindexdb.c:361 +#: reindexdb.c:413 #, c-format msgid "" "\n" @@ -951,54 +971,64 @@ msgstr "" "\n" "Consulta la descrizione del comando SQL REINDEX per maggiori informazioni.\n" -#: vacuumdb.c:167 +#: vacuumdb.c:190 #, c-format -msgid "%s: cannot use the \"full\" option when performing only analyze\n" -msgstr "%s: non è possibile usare l'opzione \"full\" quando si effettua solo analyze\n" +msgid "%s: number of parallel \"jobs\" must be at least 1\n" +msgstr "%s: il mumero dei \"lavori\" in parallelo dev'essere almeno 1\n" -#: vacuumdb.c:173 +#: vacuumdb.c:196 #, c-format -msgid "%s: cannot use the \"freeze\" option when performing only analyze\n" -msgstr "%s: non è possibile usare l'opzione \"freeze\" quando si effettua solo analyze\n" +msgid "%s: too many parallel jobs requested (maximum: %d)\n" +msgstr "%s: troppi lavori in parallelo richiesti (massimo: %d)\n" -#: vacuumdb.c:186 +#: vacuumdb.c:235 vacuumdb.c:241 +#, c-format +msgid "%s: cannot use the \"%s\" option when performing only analyze\n" +msgstr "%s: non è possibile usare l'opzione \"%s\" quando si effettua solo analyze\n" + +#: vacuumdb.c:258 #, c-format msgid "%s: cannot vacuum all databases and a specific one at the same time\n" msgstr "%s: non è possibile effettuare la pulizia di tutti i database e di uno in particolare nello stesso momento\n" -#: vacuumdb.c:192 +#: vacuumdb.c:264 #, c-format msgid "%s: cannot vacuum specific table(s) in all databases\n" msgstr "%s: non è possibile effettuare la pulizia di tabelle specificate in tutti i database\n" -#: vacuumdb.c:244 -#, c-format -msgid "%s: vacuuming of table \"%s\" in database \"%s\" failed: %s" -msgstr "%s: la pulizia della tabella \"%s\" nel database \"%s\" è fallita: %s" - -#: vacuumdb.c:247 -#, c-format -msgid "%s: vacuuming of database \"%s\" failed: %s" -msgstr "%s: la pulizia del database \"%s\" è fallita: %s" - -#: vacuumdb.c:333 +#: vacuumdb.c:350 msgid "Generating minimal optimizer statistics (1 target)" msgstr "Generazione di statistiche ottimizzatore minime (1 obiettivo)" -#: vacuumdb.c:334 +#: vacuumdb.c:351 msgid "Generating medium optimizer statistics (10 targets)" msgstr "Generazione di statistiche ottimizzatore medie (10 obiettivi)" -#: vacuumdb.c:335 +#: vacuumdb.c:352 msgid "Generating default (full) optimizer statistics" msgstr "Generazione di statistiche ottimizzatore di default (completo)" -#: vacuumdb.c:406 +#: vacuumdb.c:361 +#, c-format +msgid "%s: processing database \"%s\": %s\n" +msgstr "%s: elaborazione del database \"%s\": %s\n" + +#: vacuumdb.c:364 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s: pulizia del database \"%s\"\n" -#: vacuumdb.c:424 +#: vacuumdb.c:693 +#, c-format +msgid "%s: vacuuming of table \"%s\" in database \"%s\" failed: %s" +msgstr "%s: la pulizia della tabella \"%s\" nel database \"%s\" è fallita: %s" + +#: vacuumdb.c:696 vacuumdb.c:813 +#, c-format +msgid "%s: vacuuming of database \"%s\" failed: %s" +msgstr "%s: la pulizia del database \"%s\" è fallita: %s" + +#: vacuumdb.c:929 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -1007,80 +1037,87 @@ msgstr "" "%s pulisce ed analizza un database PostgreSQL.\n" "\n" -#: vacuumdb.c:428 +#: vacuumdb.c:933 #, c-format msgid " -a, --all vacuum all databases\n" msgstr " -a, --all pulisci tutti i database\n" -#: vacuumdb.c:429 +#: vacuumdb.c:934 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=NOMEDB database da pulire\n" -#: vacuumdb.c:430 +#: vacuumdb.c:935 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo mostra i comandi inviati al server\n" -#: vacuumdb.c:431 +#: vacuumdb.c:936 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full esegui una pulizia completa\n" -#: vacuumdb.c:432 +#: vacuumdb.c:937 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr "" " -F, --freeze congela le informazioni per la transazione\n" " sulla riga\n" -#: vacuumdb.c:433 +#: vacuumdb.c:938 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet non stampare alcun messaggio\n" -#: vacuumdb.c:434 +#: vacuumdb.c:939 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr " -t, --table='TABELLA[(COLONNE)]' ripulisci solo le tabelle specificate\n" -#: vacuumdb.c:435 +#: vacuumdb.c:940 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose mostra molti messaggi\n" -#: vacuumdb.c:436 +#: vacuumdb.c:941 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informazioni sulla versione ed esci\n" -#: vacuumdb.c:437 +#: vacuumdb.c:942 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze aggiorna le statistiche per l'ottimizzatore\n" -#: vacuumdb.c:438 +#: vacuumdb.c:943 +#, c-format +msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n" +msgstr "" +" -Z, --analyze-only aggiorna solo le statistiche per l'ottimizzatore;\n" +" nessun vacuum\n" + +#: vacuumdb.c:944 #, c-format -msgid " -Z, --analyze-only only update optimizer statistics\n" +msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" msgstr "" -" -Z, --analyze-only aggiorna soltanto le statistiche per\n" -" l'ottimizzatore\n" +" -j, --jobs=NUM usa questo numero di connessioni concorrenti\n" +" per effetturare il vacuum\n" -#: vacuumdb.c:439 +#: vacuumdb.c:945 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in multiple\n" -" stages for faster results\n" +" stages for faster results; no vacuum\n" msgstr "" " --analyze-in-stages aggiorna solo le statistiche dell'ottimizzatore,\n" -" in passi multipli per risultati più rapidi\n" +" in fasi multiple per maggiore velocità, nessun vacuum\n" -#: vacuumdb.c:441 +#: vacuumdb.c:947 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra questo aiuto ed esci\n" -#: vacuumdb.c:449 +#: vacuumdb.c:955 #, c-format msgid "" "\n" diff --git a/src/bin/scripts/po/pt_BR.po b/src/bin/scripts/po/pt_BR.po index 165cad3998678..125178d5679d9 100644 --- a/src/bin/scripts/po/pt_BR.po +++ b/src/bin/scripts/po/pt_BR.po @@ -1,13 +1,13 @@ # Brazilian Portuguese message translation file for pgscripts # Copyright (C) 2009 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Euler Taveira de Oliveira , 2003-2014. +# Euler Taveira de Oliveira , 2003-2015. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-09 12:23-0300\n" +"POT-Creation-Date: 2015-10-04 16:29-0300\n" "PO-Revision-Date: 2005-10-06 00:21-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -16,13 +16,13 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "sem memória\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "não pode duplicar ponteiro nulo (erro interno)\n" @@ -36,24 +36,24 @@ msgstr "não pôde encontrar ID de usuário efetivo %ld: %s" msgid "user does not exist" msgstr "usuário não existe" -#: ../../common/username.c:61 +#: ../../common/username.c:62 #, c-format -msgid "user name lookup failure: %s" -msgstr "falhou ao pesquisar nome de usuário: %s" +msgid "user name lookup failure: error code %lu" +msgstr "falhou ao pesquisar nome de usuário: código de erro %lu" #: clusterdb.c:110 clusterdb.c:129 createdb.c:119 createdb.c:138 #: createlang.c:89 createlang.c:119 createlang.c:174 createuser.c:168 #: createuser.c:183 dropdb.c:94 dropdb.c:103 dropdb.c:111 droplang.c:88 #: droplang.c:118 droplang.c:174 dropuser.c:89 dropuser.c:104 dropuser.c:115 -#: pg_isready.c:93 pg_isready.c:107 reindexdb.c:120 reindexdb.c:139 -#: vacuumdb.c:139 vacuumdb.c:159 +#: pg_isready.c:93 pg_isready.c:107 reindexdb.c:130 reindexdb.c:149 +#: vacuumdb.c:208 vacuumdb.c:227 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Tente \"%s --help\" para obter informações adicionais.\n" #: clusterdb.c:127 createdb.c:136 createlang.c:117 createuser.c:181 -#: dropdb.c:109 droplang.c:116 dropuser.c:102 pg_isready.c:105 reindexdb.c:137 -#: vacuumdb.c:157 +#: dropdb.c:109 droplang.c:116 dropuser.c:102 pg_isready.c:105 reindexdb.c:147 +#: vacuumdb.c:225 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: muitos argumentos para linha de comando (primeiro é \"%s\")\n" @@ -93,20 +93,20 @@ msgstr "" "\n" #: clusterdb.c:262 createdb.c:252 createlang.c:236 createuser.c:348 -#: dropdb.c:155 droplang.c:237 dropuser.c:156 pg_isready.c:222 reindexdb.c:342 -#: vacuumdb.c:425 +#: dropdb.c:155 droplang.c:237 dropuser.c:156 pg_isready.c:222 reindexdb.c:392 +#: vacuumdb.c:931 #, c-format msgid "Usage:\n" msgstr "Uso:\n" -#: clusterdb.c:263 reindexdb.c:343 vacuumdb.c:426 +#: clusterdb.c:263 reindexdb.c:393 vacuumdb.c:932 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPÇÃO]... [NOMEBD]\n" #: clusterdb.c:264 createdb.c:254 createlang.c:238 createuser.c:350 -#: dropdb.c:157 droplang.c:239 dropuser.c:158 pg_isready.c:225 reindexdb.c:344 -#: vacuumdb.c:427 +#: dropdb.c:157 droplang.c:239 dropuser.c:158 pg_isready.c:225 reindexdb.c:394 +#: vacuumdb.c:933 #, c-format msgid "" "\n" @@ -126,12 +126,12 @@ msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=NOMEBD banco de dados a ser agrupado\n" #: clusterdb.c:267 createlang.c:240 createuser.c:354 dropdb.c:158 -#: droplang.c:241 dropuser.c:159 reindexdb.c:347 +#: droplang.c:241 dropuser.c:159 reindexdb.c:397 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo mostra os comandos enviados ao servidor\n" -#: clusterdb.c:268 reindexdb.c:349 +#: clusterdb.c:268 reindexdb.c:399 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet não exibe nenhuma mensagem\n" @@ -141,26 +141,26 @@ msgstr " -q, --quiet não exibe nenhuma mensagem\n" msgid " -t, --table=TABLE cluster specific table(s) only\n" msgstr " -t, --table=TABELA agrupa somente a(s) tabela(s) especificada(s)\n" -#: clusterdb.c:270 +#: clusterdb.c:270 reindexdb.c:403 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose mostra muitas mensagens\n" #: clusterdb.c:271 createlang.c:242 createuser.c:368 dropdb.c:160 -#: droplang.c:243 dropuser.c:162 reindexdb.c:352 +#: droplang.c:243 dropuser.c:162 reindexdb.c:404 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informação sobre a versão e termina\n" #: clusterdb.c:272 createlang.c:243 createuser.c:373 dropdb.c:162 -#: droplang.c:244 dropuser.c:164 reindexdb.c:353 +#: droplang.c:244 dropuser.c:164 reindexdb.c:405 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra essa ajuda e termina\n" #: clusterdb.c:273 createdb.c:265 createlang.c:244 createuser.c:374 -#: dropdb.c:163 droplang.c:245 dropuser.c:165 pg_isready.c:231 reindexdb.c:354 -#: vacuumdb.c:442 +#: dropdb.c:163 droplang.c:245 dropuser.c:165 pg_isready.c:231 reindexdb.c:406 +#: vacuumdb.c:949 #, c-format msgid "" "\n" @@ -170,36 +170,36 @@ msgstr "" "Opções de conexão:\n" #: clusterdb.c:274 createlang.c:245 createuser.c:375 dropdb.c:164 -#: droplang.c:246 dropuser.c:166 reindexdb.c:355 vacuumdb.c:443 +#: droplang.c:246 dropuser.c:166 reindexdb.c:407 vacuumdb.c:950 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=MÁQUINA máquina do servidor de banco de dados ou diretório do soquete\n" #: clusterdb.c:275 createlang.c:246 createuser.c:376 dropdb.c:165 -#: droplang.c:247 dropuser.c:167 reindexdb.c:356 vacuumdb.c:444 +#: droplang.c:247 dropuser.c:167 reindexdb.c:408 vacuumdb.c:951 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=PORTA porta do servidor de banco de dados\n" #: clusterdb.c:276 createlang.c:247 dropdb.c:166 droplang.c:248 -#: reindexdb.c:357 vacuumdb.c:445 +#: reindexdb.c:409 vacuumdb.c:952 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USUÁRIO nome do usuário para se conectar\n" #: clusterdb.c:277 createlang.c:248 createuser.c:378 dropdb.c:167 -#: droplang.c:249 dropuser.c:169 reindexdb.c:358 vacuumdb.c:446 +#: droplang.c:249 dropuser.c:169 reindexdb.c:410 vacuumdb.c:953 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pergunta senha\n" #: clusterdb.c:278 createlang.c:249 createuser.c:379 dropdb.c:168 -#: droplang.c:250 dropuser.c:170 reindexdb.c:359 vacuumdb.c:447 +#: droplang.c:250 dropuser.c:170 reindexdb.c:411 vacuumdb.c:954 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password pergunta senha\n" -#: clusterdb.c:279 dropdb.c:169 reindexdb.c:360 vacuumdb.c:448 +#: clusterdb.c:279 dropdb.c:169 reindexdb.c:412 vacuumdb.c:955 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=NOMEBD especifica um banco de dados para manutenção\n" @@ -214,8 +214,8 @@ msgstr "" "Leia a descrição do comando SQL CLUSTER para obter detalhes.\n" #: clusterdb.c:281 createdb.c:273 createlang.c:250 createuser.c:380 -#: dropdb.c:170 droplang.c:251 dropuser.c:171 pg_isready.c:236 reindexdb.c:362 -#: vacuumdb.c:450 +#: dropdb.c:170 droplang.c:251 dropuser.c:171 pg_isready.c:236 reindexdb.c:414 +#: vacuumdb.c:957 #, c-format msgid "" "\n" @@ -224,58 +224,58 @@ msgstr "" "\n" "Relate erros a .\n" -#: common.c:69 common.c:115 +#: common.c:68 common.c:114 msgid "Password: " msgstr "Senha: " -#: common.c:104 +#: common.c:103 #, c-format msgid "%s: could not connect to database %s\n" msgstr "%s: não pôde conectar ao banco de dados %s\n" -#: common.c:131 +#: common.c:130 #, c-format msgid "%s: could not connect to database %s: %s" msgstr "%s: não pôde conectar ao banco de dados %s: %s" -#: common.c:180 common.c:208 +#: common.c:179 common.c:207 #, c-format msgid "%s: query failed: %s" msgstr "%s: consulta falhou: %s" -#: common.c:182 common.c:210 +#: common.c:181 common.c:209 #, c-format msgid "%s: query was: %s\n" msgstr "%s: consulta foi: %s\n" #. translator: abbreviation for "yes" -#: common.c:251 +#: common.c:250 msgid "y" msgstr "s" #. translator: abbreviation for "no" -#: common.c:253 +#: common.c:252 msgid "n" msgstr "n" #. translator: This is a question followed by the translated options for #. "yes" and "no". -#: common.c:263 +#: common.c:262 #, c-format msgid "%s (%s/%s) " msgstr "%s (%s/%s) " -#: common.c:284 +#: common.c:283 #, c-format msgid "Please answer \"%s\" or \"%s\".\n" msgstr "Por favor responda \"%s\" ou \"%s\".\n" -#: common.c:362 common.c:395 +#: common.c:362 common.c:399 #, c-format msgid "Cancel request sent\n" msgstr "Requisição de cancelamento enviada\n" -#: common.c:364 common.c:397 +#: common.c:365 common.c:403 #, c-format msgid "Could not send cancel request: %s" msgstr "Não pôde enviar requisição de cancelamento: %s" @@ -826,62 +826,77 @@ msgstr " -t, --timeout=SEGS segundos a esperar ao tentar conexão, 0 desa msgid " -U, --username=USERNAME user name to connect as\n" msgstr " -U, --username=USUÁRIO nome do usuário para se conectar\n" -#: reindexdb.c:149 +#: reindexdb.c:159 #, c-format msgid "%s: cannot reindex all databases and a specific one at the same time\n" msgstr "%s: não pode reindexar todos os bancos de dados e um específico ao mesmo tempo\n" -#: reindexdb.c:154 +#: reindexdb.c:164 #, c-format msgid "%s: cannot reindex all databases and system catalogs at the same time\n" msgstr "%s: não pode reindexar todos os bancos de dados e os catálogos do sistema ao mesmo tempo\n" -#: reindexdb.c:159 +#: reindexdb.c:169 +#, c-format +msgid "%s: cannot reindex specific schema(s) in all databases\n" +msgstr "%s: não pode reindexar esquema(s) específico(s) em todos os bancos de dados\n" + +#: reindexdb.c:174 #, c-format msgid "%s: cannot reindex specific table(s) in all databases\n" msgstr "%s: não pode reindexar tabela(s) específica(s) em todos os bancos de dados\n" -#: reindexdb.c:164 +#: reindexdb.c:179 #, c-format msgid "%s: cannot reindex specific index(es) in all databases\n" msgstr "%s: não pode reindexar índice(s) específico(s) em todos os bancos de dados\n" -#: reindexdb.c:175 +#: reindexdb.c:190 +#, c-format +msgid "%s: cannot reindex specific schema(s) and system catalogs at the same time\n" +msgstr "%s: não pode reindexar esquema(s) específico(s) e os catálogos do sistema ao mesmo tempo\n" + +#: reindexdb.c:195 #, c-format msgid "%s: cannot reindex specific table(s) and system catalogs at the same time\n" msgstr "%s: não pode reindexar tabela(s) específica(s) e os catálogos do sistema ao mesmo tempo\n" -#: reindexdb.c:180 +#: reindexdb.c:200 #, c-format msgid "%s: cannot reindex specific index(es) and system catalogs at the same time\n" msgstr "%s: não pode reindexar índice(s) específico(s) e os catálogos do sistema ao mesmo tempo\n" -#: reindexdb.c:264 +#: reindexdb.c:306 #, c-format msgid "%s: reindexing of table \"%s\" in database \"%s\" failed: %s" msgstr "%s: reindexação da tabela \"%s\" no banco de dados \"%s\" falhou: %s" -#: reindexdb.c:267 +#: reindexdb.c:309 #, c-format msgid "%s: reindexing of index \"%s\" in database \"%s\" failed: %s" msgstr "%s: reindexação do índice \"%s\" no banco de dados \"%s\" falhou: %s" -#: reindexdb.c:270 +#: reindexdb.c:312 +#, c-format +msgid "%s: reindexing of schema \"%s\" in database \"%s\" failed: %s" +msgstr "%s: reindexação do esquema \"%s\" no banco de dados \"%s\" falhou: %s" + +#: reindexdb.c:315 #, c-format msgid "%s: reindexing of database \"%s\" failed: %s" msgstr "%s: reindexação do banco de dados \"%s\" falhou: %s" -#: reindexdb.c:301 +#: reindexdb.c:346 #, c-format msgid "%s: reindexing database \"%s\"\n" msgstr "%s: reindexando banco de dados \"%s\"\n" -#: reindexdb.c:329 +#: reindexdb.c:379 #, c-format msgid "%s: reindexing of system catalogs failed: %s" msgstr "%s: reindexação dos catálogos do sistema falhou: %s" -#: reindexdb.c:341 +#: reindexdb.c:391 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -890,32 +905,37 @@ msgstr "" "%s reindexa um banco de dados PostgreSQL.\n" "\n" -#: reindexdb.c:345 +#: reindexdb.c:395 #, c-format msgid " -a, --all reindex all databases\n" msgstr " -a, --all reindexa todos os bancos de dados\n" -#: reindexdb.c:346 +#: reindexdb.c:396 #, c-format msgid " -d, --dbname=DBNAME database to reindex\n" msgstr " -d, --dbname=NOMEBD banco de dados a ser reindexado\n" -#: reindexdb.c:348 +#: reindexdb.c:398 #, c-format msgid " -i, --index=INDEX recreate specific index(es) only\n" msgstr " -i, --index=ÍNDICE reindexa somente índice(s) especificado(s)\n" -#: reindexdb.c:350 +#: reindexdb.c:400 #, c-format msgid " -s, --system reindex system catalogs\n" msgstr " -s, --system reindexa os catálogos do sistema\n" -#: reindexdb.c:351 +#: reindexdb.c:401 +#, c-format +msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" +msgstr " -S, --schema=ESQUEMA reindexa somente esquema(s) especificado(s)\n" + +#: reindexdb.c:402 #, c-format msgid " -t, --table=TABLE reindex specific table(s) only\n" msgstr " -t, --table=TABELA reindexa somente tabela(s) especificada(s)\n" -#: reindexdb.c:361 +#: reindexdb.c:413 #, c-format msgid "" "\n" @@ -924,54 +944,64 @@ msgstr "" "\n" "Leia a descrição do comando SQL REINDEX para obter detalhes.\n" -#: vacuumdb.c:167 +#: vacuumdb.c:190 #, c-format -msgid "%s: cannot use the \"full\" option when performing only analyze\n" -msgstr "%s: não pode utilizar a opção \"full\" ao executar somente análise\n" +msgid "%s: number of parallel \"jobs\" must be at least 1\n" +msgstr "%s: número de tarefas paralelas deve ser pelo menos 1\n" -#: vacuumdb.c:173 +#: vacuumdb.c:196 #, c-format -msgid "%s: cannot use the \"freeze\" option when performing only analyze\n" -msgstr "%s: não pode utilizar a opção \"freeze\" ao executar somente análise\n" +msgid "%s: too many parallel jobs requested (maximum: %d)\n" +msgstr "%s: muitas tarefas paralelas solicitadas (máximo: %d)\n" -#: vacuumdb.c:186 +#: vacuumdb.c:235 vacuumdb.c:241 +#, c-format +msgid "%s: cannot use the \"%s\" option when performing only analyze\n" +msgstr "%s: não pode utilizar a opção \"%s\" ao executar somente análise\n" + +#: vacuumdb.c:258 #, c-format msgid "%s: cannot vacuum all databases and a specific one at the same time\n" msgstr "%s: não pode limpar todos os bancos de dados e um específico ao mesmo tempo\n" -#: vacuumdb.c:192 +#: vacuumdb.c:264 #, c-format msgid "%s: cannot vacuum specific table(s) in all databases\n" msgstr "%s: não pode limpar tabela(s) específica(s) em todos os bancos de dados\n" -#: vacuumdb.c:244 -#, c-format -msgid "%s: vacuuming of table \"%s\" in database \"%s\" failed: %s" -msgstr "%s: limpeza na tabela \"%s\" no banco de dados \"%s\" falhou: %s" - -#: vacuumdb.c:247 -#, c-format -msgid "%s: vacuuming of database \"%s\" failed: %s" -msgstr "%s: limpeza no banco de dados \"%s\" falhou: %s" - -#: vacuumdb.c:333 +#: vacuumdb.c:350 msgid "Generating minimal optimizer statistics (1 target)" msgstr "Gerando estatísticas mínimas para otimizador (1 alvo)" -#: vacuumdb.c:334 +#: vacuumdb.c:351 msgid "Generating medium optimizer statistics (10 targets)" msgstr "Gerando estatísticas parciais para otimizador (10 alvos)" -#: vacuumdb.c:335 +#: vacuumdb.c:352 msgid "Generating default (full) optimizer statistics" msgstr "Gerando estatísticas padrão (completa) para otimizador" -#: vacuumdb.c:406 +#: vacuumdb.c:361 +#, c-format +msgid "%s: processing database \"%s\": %s\n" +msgstr "%s: processando banco de dados \"%s\": %s\n" + +#: vacuumdb.c:364 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s: limpando banco de dados \"%s\"\n" -#: vacuumdb.c:424 +#: vacuumdb.c:694 +#, c-format +msgid "%s: vacuuming of table \"%s\" in database \"%s\" failed: %s" +msgstr "%s: limpeza na tabela \"%s\" no banco de dados \"%s\" falhou: %s" + +#: vacuumdb.c:697 vacuumdb.c:814 +#, c-format +msgid "%s: vacuuming of database \"%s\" failed: %s" +msgstr "%s: limpeza no banco de dados \"%s\" falhou: %s" + +#: vacuumdb.c:930 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -980,76 +1010,81 @@ msgstr "" "%s limpa e analisa um banco de dados PostgreSQL.\n" "\n" -#: vacuumdb.c:428 +#: vacuumdb.c:934 #, c-format msgid " -a, --all vacuum all databases\n" msgstr " -a, --all limpa todos bancos de dados\n" -#: vacuumdb.c:429 +#: vacuumdb.c:935 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=NOMEBD banco de dados a ser limpo\n" -#: vacuumdb.c:430 +#: vacuumdb.c:936 #, c-format msgid " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo mostra os comandos enviados ao servidor\n" -#: vacuumdb.c:431 +#: vacuumdb.c:937 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full faz uma limpeza completa\n" -#: vacuumdb.c:432 +#: vacuumdb.c:938 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr " -F, --freeze congela informação sobre transação de registros\n" -#: vacuumdb.c:433 +#: vacuumdb.c:939 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n" +msgstr " -j, --jobs=NUM use esse número de conexões concorrentes para limpar\n" + +#: vacuumdb.c:940 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet não exibe nenhuma mensagem\n" -#: vacuumdb.c:434 +#: vacuumdb.c:941 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr " -t, --table='TABELA[(COLUNAS)]' limpa somente tabela(s) específica(s)\n" -#: vacuumdb.c:435 +#: vacuumdb.c:942 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose mostra muitas mensagens\n" -#: vacuumdb.c:436 +#: vacuumdb.c:943 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostra informação sobre a versão e termina\n" -#: vacuumdb.c:437 +#: vacuumdb.c:944 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze atualiza estatísticas do otimizador\n" -#: vacuumdb.c:438 +#: vacuumdb.c:945 #, c-format -msgid " -Z, --analyze-only only update optimizer statistics\n" -msgstr " -Z, --analyze-only atualiza somente estatísticas do otimizador\n" +msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n" +msgstr " -Z, --analyze-only atualiza somente estatísticas do otimizador; sem limpeza\n" -#: vacuumdb.c:439 +#: vacuumdb.c:946 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in multiple\n" -" stages for faster results\n" +" stages for faster results; no vacuum\n" msgstr "" " --analyze-in-stages atualiza somente estatísticas do otimizador, em\n" -" múltiplos estágios para resultados mais rápidos\n" +" múltiplos estágios para resultados mais rápidos; sem limpeza\n" -#: vacuumdb.c:441 +#: vacuumdb.c:948 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostra essa ajuda e termina\n" -#: vacuumdb.c:449 +#: vacuumdb.c:956 #, c-format msgid "" "\n" diff --git a/src/bin/scripts/po/ru.po b/src/bin/scripts/po/ru.po index bda94b0d8376c..c593a54465621 100644 --- a/src/bin/scripts/po/ru.po +++ b/src/bin/scripts/po/ru.po @@ -23,8 +23,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9 current\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-01-13 05:12+0000\n" -"PO-Revision-Date: 2015-01-13 08:37+0300\n" +"POT-Creation-Date: 2015-07-22 00:13+0000\n" +"PO-Revision-Date: 2015-07-22 17:02+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -37,13 +37,13 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Lokalize 1.5\n" -#: ../../common/fe_memutils.c:33 ../../common/fe_memutils.c:60 -#: ../../common/fe_memutils.c:83 +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" -#: ../../common/fe_memutils.c:77 +#: ../../common/fe_memutils.c:92 #, c-format msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" @@ -60,21 +60,21 @@ msgstr "пользователь не существует" #: ../../common/username.c:62 #, c-format msgid "user name lookup failure: error code %lu" -msgstr "распознать имя пользователя не удалось: код ошибки %lu" +msgstr "распознать имя пользователя не удалось (код ошибки: %lu)" #: clusterdb.c:110 clusterdb.c:129 createdb.c:119 createdb.c:138 #: createlang.c:89 createlang.c:119 createlang.c:174 createuser.c:168 #: createuser.c:183 dropdb.c:94 dropdb.c:103 dropdb.c:111 droplang.c:88 #: droplang.c:118 droplang.c:174 dropuser.c:89 dropuser.c:104 dropuser.c:115 -#: pg_isready.c:93 pg_isready.c:107 reindexdb.c:120 reindexdb.c:139 -#: vacuumdb.c:139 vacuumdb.c:159 +#: pg_isready.c:93 pg_isready.c:107 reindexdb.c:130 reindexdb.c:149 +#: vacuumdb.c:208 vacuumdb.c:227 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" #: clusterdb.c:127 createdb.c:136 createlang.c:117 createuser.c:181 -#: dropdb.c:109 droplang.c:116 dropuser.c:102 pg_isready.c:105 reindexdb.c:137 -#: vacuumdb.c:157 +#: dropdb.c:109 droplang.c:116 dropuser.c:102 pg_isready.c:105 reindexdb.c:147 +#: vacuumdb.c:225 #, c-format msgid "%s: too many command-line arguments (first is \"%s\")\n" msgstr "%s: слишком много аргументов командной строки (первый: \"%s\")\n" @@ -114,20 +114,20 @@ msgstr "" "\n" #: clusterdb.c:262 createdb.c:252 createlang.c:236 createuser.c:348 -#: dropdb.c:155 droplang.c:237 dropuser.c:156 pg_isready.c:222 reindexdb.c:342 -#: vacuumdb.c:425 +#: dropdb.c:155 droplang.c:237 dropuser.c:156 pg_isready.c:222 reindexdb.c:392 +#: vacuumdb.c:931 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: clusterdb.c:263 reindexdb.c:343 vacuumdb.c:426 +#: clusterdb.c:263 reindexdb.c:393 vacuumdb.c:932 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД]\n" #: clusterdb.c:264 createdb.c:254 createlang.c:238 createuser.c:350 -#: dropdb.c:157 droplang.c:239 dropuser.c:158 pg_isready.c:225 reindexdb.c:344 -#: vacuumdb.c:427 +#: dropdb.c:157 droplang.c:239 dropuser.c:158 pg_isready.c:225 reindexdb.c:394 +#: vacuumdb.c:933 #, c-format msgid "" "\n" @@ -147,13 +147,13 @@ msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=ИМЯ_БД имя базы данных для кластеризации\n" #: clusterdb.c:267 createlang.c:240 createuser.c:354 dropdb.c:158 -#: droplang.c:241 dropuser.c:159 reindexdb.c:347 +#: droplang.c:241 dropuser.c:159 reindexdb.c:397 #, c-format msgid "" " -e, --echo show the commands being sent to the server\n" msgstr " -e, --echo отображать команды, отправляемые серверу\n" -#: clusterdb.c:268 reindexdb.c:349 +#: clusterdb.c:268 reindexdb.c:399 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet не выводить никакие сообщения\n" @@ -164,26 +164,26 @@ msgid " -t, --table=TABLE cluster specific table(s) only\n" msgstr "" " -t, --table=ТАБЛИЦА кластеризовать только указанную таблицу(ы)\n" -#: clusterdb.c:270 +#: clusterdb.c:270 reindexdb.c:403 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose выводить исчерпывающие сообщения\n" #: clusterdb.c:271 createlang.c:242 createuser.c:368 dropdb.c:160 -#: droplang.c:243 dropuser.c:162 reindexdb.c:352 +#: droplang.c:243 dropuser.c:162 reindexdb.c:404 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" #: clusterdb.c:272 createlang.c:243 createuser.c:373 dropdb.c:162 -#: droplang.c:244 dropuser.c:164 reindexdb.c:353 +#: droplang.c:244 dropuser.c:164 reindexdb.c:405 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" #: clusterdb.c:273 createdb.c:265 createlang.c:244 createuser.c:374 -#: dropdb.c:163 droplang.c:245 dropuser.c:165 pg_isready.c:231 reindexdb.c:354 -#: vacuumdb.c:442 +#: dropdb.c:163 droplang.c:245 dropuser.c:165 pg_isready.c:231 reindexdb.c:406 +#: vacuumdb.c:949 #, c-format msgid "" "\n" @@ -193,38 +193,38 @@ msgstr "" "Параметры подключения:\n" #: clusterdb.c:274 createlang.c:245 createuser.c:375 dropdb.c:164 -#: droplang.c:246 dropuser.c:166 reindexdb.c:355 vacuumdb.c:443 +#: droplang.c:246 dropuser.c:166 reindexdb.c:407 vacuumdb.c:950 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n" #: clusterdb.c:275 createlang.c:246 createuser.c:376 dropdb.c:165 -#: droplang.c:247 dropuser.c:167 reindexdb.c:356 vacuumdb.c:444 +#: droplang.c:247 dropuser.c:167 reindexdb.c:408 vacuumdb.c:951 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=ПОРТ порт сервера баз данных\n" #: clusterdb.c:276 createlang.c:247 dropdb.c:166 droplang.c:248 -#: reindexdb.c:357 vacuumdb.c:445 +#: reindexdb.c:409 vacuumdb.c:952 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr "" " -U, --username=ИМЯ имя пользователя для подключения к серверу\n" #: clusterdb.c:277 createlang.c:248 createuser.c:378 dropdb.c:167 -#: droplang.c:249 dropuser.c:169 reindexdb.c:358 vacuumdb.c:446 +#: droplang.c:249 dropuser.c:169 reindexdb.c:410 vacuumdb.c:953 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" #: clusterdb.c:278 createlang.c:249 createuser.c:379 dropdb.c:168 -#: droplang.c:250 dropuser.c:170 reindexdb.c:359 vacuumdb.c:447 +#: droplang.c:250 dropuser.c:170 reindexdb.c:411 vacuumdb.c:954 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password запросить пароль\n" -#: clusterdb.c:279 dropdb.c:169 reindexdb.c:360 vacuumdb.c:448 +#: clusterdb.c:279 dropdb.c:169 reindexdb.c:412 vacuumdb.c:955 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=ИМЯ_БД выбор другой обслуживаемой базы данных\n" @@ -239,8 +239,8 @@ msgstr "" "Подробнее о кластеризации вы можете узнать в описании SQL-команды CLUSTER.\n" #: clusterdb.c:281 createdb.c:273 createlang.c:250 createuser.c:380 -#: dropdb.c:170 droplang.c:251 dropuser.c:171 pg_isready.c:236 reindexdb.c:362 -#: vacuumdb.c:450 +#: dropdb.c:170 droplang.c:251 dropuser.c:171 pg_isready.c:236 reindexdb.c:414 +#: vacuumdb.c:957 #, c-format msgid "" "\n" @@ -249,58 +249,58 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу .\n" -#: common.c:69 common.c:115 +#: common.c:68 common.c:114 msgid "Password: " msgstr "Пароль: " -#: common.c:104 +#: common.c:103 #, c-format msgid "%s: could not connect to database %s\n" msgstr "%s: не удалось подключиться к базе %s\n" -#: common.c:131 +#: common.c:130 #, c-format msgid "%s: could not connect to database %s: %s" msgstr "%s: не удалось подключиться к базе %s: %s" -#: common.c:180 common.c:208 +#: common.c:179 common.c:207 #, c-format msgid "%s: query failed: %s" msgstr "%s: ошибка при выполнении запроса: %s" -#: common.c:182 common.c:210 +#: common.c:181 common.c:209 #, c-format msgid "%s: query was: %s\n" msgstr "%s: запрос: %s\n" #. translator: abbreviation for "yes" -#: common.c:251 +#: common.c:250 msgid "y" msgstr "y" #. translator: abbreviation for "no" -#: common.c:253 +#: common.c:252 msgid "n" msgstr "n" #. translator: This is a question followed by the translated options for #. "yes" and "no". -#: common.c:263 +#: common.c:262 #, c-format msgid "%s (%s/%s) " msgstr "%s (%s - да/%s - нет) " -#: common.c:284 +#: common.c:283 #, c-format msgid "Please answer \"%s\" or \"%s\".\n" msgstr "Пожалуйста, введите \"%s\" или \"%s\".\n" -#: common.c:362 common.c:395 +#: common.c:362 common.c:399 #, c-format msgid "Cancel request sent\n" msgstr "Сигнал отмены отправлен\n" -#: common.c:364 common.c:397 +#: common.c:365 common.c:403 #, c-format msgid "Could not send cancel request: %s" msgstr "Отправить сигнал отмены не удалось: %s" @@ -890,30 +890,43 @@ msgid " -U, --username=USERNAME user name to connect as\n" msgstr "" " -U, --username=ИМЯ имя пользователя для подключения к серверу\n" -#: reindexdb.c:149 +#: reindexdb.c:159 #, c-format msgid "%s: cannot reindex all databases and a specific one at the same time\n" msgstr "" "%s: нельзя переиндексировать все базы данных и одну конкретную одновременно\n" -#: reindexdb.c:154 +#: reindexdb.c:164 #, c-format msgid "%s: cannot reindex all databases and system catalogs at the same time\n" msgstr "" "%s: нельзя переиндексировать все базы данных и системные каталоги " "одновременно\n" -#: reindexdb.c:159 +#: reindexdb.c:169 +#, c-format +msgid "%s: cannot reindex specific schema(s) in all databases\n" +msgstr "%s: нельзя переиндексировать указанную схему(ы) во всех базах\n" + +#: reindexdb.c:174 #, c-format msgid "%s: cannot reindex specific table(s) in all databases\n" msgstr "%s: нельзя переиндексировать указанную таблицу(ы) во всех базах\n" -#: reindexdb.c:164 +#: reindexdb.c:179 #, c-format msgid "%s: cannot reindex specific index(es) in all databases\n" msgstr "%s: нельзя переиндексировать указанный индекс(ы) во всех базах\n" -#: reindexdb.c:175 +#: reindexdb.c:190 +#, c-format +msgid "" +"%s: cannot reindex specific schema(s) and system catalogs at the same time\n" +msgstr "" +"%s: нельзя переиндексировать указанную схему(ы) и системные каталоги " +"одновременно\n" + +#: reindexdb.c:195 #, c-format msgid "" "%s: cannot reindex specific table(s) and system catalogs at the same time\n" @@ -921,7 +934,7 @@ msgstr "" "%s: нельзя переиндексировать указанную таблицу(ы) и системные каталоги " "одновременно\n" -#: reindexdb.c:180 +#: reindexdb.c:200 #, c-format msgid "" "%s: cannot reindex specific index(es) and system catalogs at the same time\n" @@ -929,32 +942,37 @@ msgstr "" "%s: нельзя переиндексировать указанный индекс(ы) и системные каталоги " "одновременно\n" -#: reindexdb.c:264 +#: reindexdb.c:306 #, c-format msgid "%s: reindexing of table \"%s\" in database \"%s\" failed: %s" msgstr "%s: переиндексировать таблицу \"%s\" в базе \"%s\" не удалось: %s" -#: reindexdb.c:267 +#: reindexdb.c:309 #, c-format msgid "%s: reindexing of index \"%s\" in database \"%s\" failed: %s" msgstr "%s: переиндексировать индекс \"%s\" в базе \"%s\" не удалось: %s" -#: reindexdb.c:270 +#: reindexdb.c:312 +#, c-format +msgid "%s: reindexing of schema \"%s\" in database \"%s\" failed: %s" +msgstr "%s: переиндексировать схему \"%s\" в базе \"%s\" не удалось: %s" + +#: reindexdb.c:315 #, c-format msgid "%s: reindexing of database \"%s\" failed: %s" msgstr "%s: переиндексировать базу данных \"%s\" не удалось: %s" -#: reindexdb.c:301 +#: reindexdb.c:346 #, c-format msgid "%s: reindexing database \"%s\"\n" msgstr "%s: переиндексация базы данных \"%s\"\n" -#: reindexdb.c:329 +#: reindexdb.c:379 #, c-format msgid "%s: reindexing of system catalogs failed: %s" msgstr "%s: переиндексировать системные каталоги не удалось: %s" -#: reindexdb.c:341 +#: reindexdb.c:391 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -963,33 +981,38 @@ msgstr "" "%s переиндексирует базу данных PostgreSQL.\n" "\n" -#: reindexdb.c:345 +#: reindexdb.c:395 #, c-format msgid " -a, --all reindex all databases\n" msgstr " -a, --all переиндексировать все базы данных\n" -#: reindexdb.c:346 +#: reindexdb.c:396 #, c-format msgid " -d, --dbname=DBNAME database to reindex\n" msgstr " -d, --dbname=БД имя базы для переиндексации\n" -#: reindexdb.c:348 +#: reindexdb.c:398 #, c-format msgid " -i, --index=INDEX recreate specific index(es) only\n" msgstr " -i, --index=ИНДЕКС пересоздать только указанный индекс(ы)\n" -#: reindexdb.c:350 +#: reindexdb.c:400 #, c-format msgid " -s, --system reindex system catalogs\n" msgstr " -s, --system переиндексировать системные каталоги\n" -#: reindexdb.c:351 +#: reindexdb.c:401 +#, c-format +msgid " -S, --schema=SCHEMA recreate specific schema(s) only\n" +msgstr " -S, --schema=СХЕМА пересоздать только указанную схему(ы)\n" + +#: reindexdb.c:402 #, c-format msgid " -t, --table=TABLE reindex specific table(s) only\n" msgstr "" " -t, --table=ТАБЛИЦА переиндексировать только указанную таблицу(ы)\n" -#: reindexdb.c:361 +#: reindexdb.c:413 #, c-format msgid "" "\n" @@ -998,56 +1021,65 @@ msgstr "" "\n" "Подробнее о переиндексации вы можете узнать в описании SQL-команды REINDEX.\n" -#: vacuumdb.c:167 +#: vacuumdb.c:190 #, c-format -msgid "%s: cannot use the \"full\" option when performing only analyze\n" -msgstr "" -"%s: при выполнении только анализа нельзя использовать параметр \"full\"\n" +msgid "%s: number of parallel \"jobs\" must be at least 1\n" +msgstr "%s: число параллельных \"заданий\" должно быть не меньше 1\n" -#: vacuumdb.c:173 +#: vacuumdb.c:196 #, c-format -msgid "%s: cannot use the \"freeze\" option when performing only analyze\n" +msgid "%s: too many parallel jobs requested (maximum: %d)\n" +msgstr "%s: запрошено слишком много параллельных заданий (при максимуме: %d)\n" + +#: vacuumdb.c:235 vacuumdb.c:241 +#, c-format +msgid "%s: cannot use the \"%s\" option when performing only analyze\n" msgstr "" -"%s: при выполнении только анализа нельзя использовать только \"freeze\"\n" +"%s: при выполнении только анализа нельзя использовать параметр \"%s\"\n" -#: vacuumdb.c:186 +#: vacuumdb.c:258 #, c-format msgid "%s: cannot vacuum all databases and a specific one at the same time\n" msgstr "%s: нельзя очистить все базы данных и одну конкретную одновременно\n" -#: vacuumdb.c:192 +#: vacuumdb.c:264 #, c-format msgid "%s: cannot vacuum specific table(s) in all databases\n" msgstr "%s: нельзя очистить одну указанную таблицу(ы) во всех базах\n" -#: vacuumdb.c:244 -#, c-format -msgid "%s: vacuuming of table \"%s\" in database \"%s\" failed: %s" -msgstr "%s: очистить таблицу \"%s\" в базе \"%s\" не удалось: %s" - -#: vacuumdb.c:247 -#, c-format -msgid "%s: vacuuming of database \"%s\" failed: %s" -msgstr "%s: очистить базу данных \"%s\" не удалось: %s" - -#: vacuumdb.c:333 +#: vacuumdb.c:350 msgid "Generating minimal optimizer statistics (1 target)" msgstr "Вычисление минимальной статистики для оптимизатора (1 запись)" -#: vacuumdb.c:334 +#: vacuumdb.c:351 msgid "Generating medium optimizer statistics (10 targets)" msgstr "Вычисление средней статистики для оптимизатора (10 записей)" -#: vacuumdb.c:335 +#: vacuumdb.c:352 msgid "Generating default (full) optimizer statistics" msgstr "Вычисление стандартной (полной) статистики для оптимизатора" -#: vacuumdb.c:406 +#: vacuumdb.c:361 +#, c-format +msgid "%s: processing database \"%s\": %s\n" +msgstr "%s: обработка базы данных \"%s\": %s\n" + +#: vacuumdb.c:364 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s: очистка базы данных \"%s\"\n" -#: vacuumdb.c:424 +#: vacuumdb.c:694 +#, c-format +msgid "%s: vacuuming of table \"%s\" in database \"%s\" failed: %s" +msgstr "%s: очистить таблицу \"%s\" в базе \"%s\" не удалось: %s" + +#: vacuumdb.c:697 vacuumdb.c:814 +#, c-format +msgid "%s: vacuuming of database \"%s\" failed: %s" +msgstr "%s: очистить базу данных \"%s\" не удалось: %s" + +#: vacuumdb.c:930 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -1056,17 +1088,17 @@ msgstr "" "%s очищает и анализирует базу данных PostgreSQL.\n" "\n" -#: vacuumdb.c:428 +#: vacuumdb.c:934 #, c-format msgid " -a, --all vacuum all databases\n" msgstr " -a, --all очистить все базы данных\n" -#: vacuumdb.c:429 +#: vacuumdb.c:935 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=ИМЯ_БД очистить указанную базу данных\n" -#: vacuumdb.c:430 +#: vacuumdb.c:936 #, c-format msgid "" " -e, --echo show the commands being sent to the " @@ -1074,69 +1106,81 @@ msgid "" msgstr "" " -e, --echo отображать команды, отправляемые серверу\n" -#: vacuumdb.c:431 +#: vacuumdb.c:937 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full произвести полную очистку\n" -#: vacuumdb.c:432 +#: vacuumdb.c:938 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr "" " -F, --freeze заморозить информацию о транзакциях в " "строках\n" -#: vacuumdb.c:433 +#: vacuumdb.c:939 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet не выводить сообщения\n" -#: vacuumdb.c:434 +#: vacuumdb.c:940 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr "" " -t, --table='ТАБЛ[(КОЛОНКИ)]' очистить только указанную таблицу(ы)\n" -#: vacuumdb.c:435 +#: vacuumdb.c:941 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose выводить исчерпывающие сообщения\n" -#: vacuumdb.c:436 +#: vacuumdb.c:942 #, c-format msgid "" " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: vacuumdb.c:437 +#: vacuumdb.c:943 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze обновить статистику оптимизатора\n" -#: vacuumdb.c:438 +#: vacuumdb.c:944 #, c-format -msgid " -Z, --analyze-only only update optimizer statistics\n" +msgid "" +" -Z, --analyze-only only update optimizer statistics; no " +"vacuum\n" msgstr "" -" -Z, --analyze-only только обновить статистику оптимизатора\n" +" -Z, --analyze-only только обновить статистику оптимизатора, не " +"очищать БД\n" -#: vacuumdb.c:439 +#: vacuumdb.c:945 +#, c-format +msgid "" +" -j, --jobs=NUM use this many concurrent connections to " +"vacuum\n" +msgstr "" +" -j, --jobs=ЧИСЛО запускать для очистки заданное число " +"заданий\n" + +#: vacuumdb.c:946 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in " "multiple\n" -" stages for faster results\n" +" stages for faster results; no vacuum\n" msgstr "" " --analyze-in-stages только пересчитать статистику для " "оптимизатора\n" " (в несколько проходов для большей " -"скорости)\n" +"скорости), без очистки\n" -#: vacuumdb.c:441 +#: vacuumdb.c:948 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: vacuumdb.c:449 +#: vacuumdb.c:956 #, c-format msgid "" "\n" @@ -1145,6 +1189,10 @@ msgstr "" "\n" "Подробнее об очистке вы можете узнать в описании SQL-команды VACUUM.\n" +#~ msgid "%s: cannot use the \"freeze\" option when performing only analyze\n" +#~ msgstr "" +#~ "%s: при выполнении только анализа нельзя использовать только \"freeze\"\n" + #~ msgid "%s: could not obtain information about current user: %s\n" #~ msgstr "%s: не удалось получить информацию о текущем пользователе: %s\n" diff --git a/src/bin/scripts/reindexdb.c b/src/bin/scripts/reindexdb.c index 941729da2e787..decb7538db5bf 100644 --- a/src/bin/scripts/reindexdb.c +++ b/src/bin/scripts/reindexdb.c @@ -295,7 +295,7 @@ reindex_one_database(const char *name, const char *dbname, const char *type, appendPQExpBuffer(&sql, " SCHEMA %s", name); else if (strcmp(type, "DATABASE") == 0) appendPQExpBuffer(&sql, " DATABASE %s", fmtId(name)); - appendPQExpBufferStr(&sql, ";"); + appendPQExpBufferChar(&sql, ';'); conn = connectDatabase(dbname, host, port, username, prompt_password, progname, false); @@ -398,7 +398,7 @@ help(const char *progname) printf(_(" -i, --index=INDEX recreate specific index(es) only\n")); printf(_(" -q, --quiet don't write any messages\n")); printf(_(" -s, --system reindex system catalogs\n")); - printf(_(" -S, --schema=SCHEMA recreate specific schema(s) only\n")); + printf(_(" -S, --schema=SCHEMA reindex specific schema(s) only\n")); printf(_(" -t, --table=TABLE reindex specific table(s) only\n")); printf(_(" -v, --verbose write a lot of output\n")); printf(_(" -V, --version output version information, then exit\n")); diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c index f600b0514a8d8..4ce27b78c54b1 100644 --- a/src/bin/scripts/vacuumdb.c +++ b/src/bin/scripts/vacuumdb.c @@ -339,7 +339,7 @@ vacuum_one_database(const char *dbname, vacuumingOptions *vacopts, ParallelSlot *slots = NULL; SimpleStringList dbtables = {NULL, NULL}; int i; - bool result = 0; + bool failed = false; bool parallel = concurrentCons > 1; const char *stage_commands[] = { "SET default_statistics_target=1; SET vacuum_cost_delay=0;", @@ -392,10 +392,10 @@ vacuum_one_database(const char *dbname, vacuumingOptions *vacopts, ntups = PQntuples(res); for (i = 0; i < ntups; i++) { - appendPQExpBuffer(&buf, "%s", - fmtQualifiedId(PQserverVersion(conn), - PQgetvalue(res, i, 1), - PQgetvalue(res, i, 0))); + appendPQExpBufferStr(&buf, + fmtQualifiedId(PQserverVersion(conn), + PQgetvalue(res, i, 1), + PQgetvalue(res, i, 0))); simple_string_list_append(&dbtables, buf.data); resetPQExpBuffer(&buf); @@ -412,6 +412,7 @@ vacuum_one_database(const char *dbname, vacuumingOptions *vacopts, concurrentCons = ntups; if (concurrentCons <= 1) parallel = false; + PQclear(res); } /* @@ -456,7 +457,7 @@ vacuum_one_database(const char *dbname, vacuumingOptions *vacopts, if (CancelRequested) { - result = -1; + failed = true; goto finish; } @@ -475,7 +476,7 @@ vacuum_one_database(const char *dbname, vacuumingOptions *vacopts, free_slot = GetIdleSlot(slots, concurrentCons, dbname, progname); if (!free_slot) { - result = -1; + failed = true; goto finish; } @@ -517,7 +518,7 @@ vacuum_one_database(const char *dbname, vacuumingOptions *vacopts, termPQExpBuffer(&sql); - if (result == -1) + if (failed) exit(1); } @@ -643,7 +644,7 @@ prepare_vacuum_command(PQExpBuffer sql, PGconn *conn, vacuumingOptions *vacopts, sep = comma; } if (sep != paren) - appendPQExpBufferStr(sql, ")"); + appendPQExpBufferChar(sql, ')'); } else { @@ -935,15 +936,15 @@ help(const char *progname) printf(_(" -e, --echo show the commands being sent to the server\n")); printf(_(" -f, --full do full vacuuming\n")); printf(_(" -F, --freeze freeze row transaction information\n")); + printf(_(" -j, --jobs=NUM use this many concurrent connections to vacuum\n")); printf(_(" -q, --quiet don't write any messages\n")); printf(_(" -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n")); printf(_(" -v, --verbose write a lot of output\n")); printf(_(" -V, --version output version information, then exit\n")); printf(_(" -z, --analyze update optimizer statistics\n")); - printf(_(" -Z, --analyze-only only update optimizer statistics; no vacuum\n")); - printf(_(" -j, --jobs=NUM use this many concurrent connections to vacuum\n")); + printf(_(" -Z, --analyze-only only update optimizer statistics; no vacuum\n")); printf(_(" --analyze-in-stages only update optimizer statistics, in multiple\n" - " stages for faster results; no vacuum\n")); + " stages for faster results; no vacuum\n")); printf(_(" -?, --help show this help, then exit\n")); printf(_("\nConnection options:\n")); printf(_(" -h, --host=HOSTNAME database server host or socket directory\n")); diff --git a/src/include/access/brin.h b/src/include/access/brin.h index a04a1320b10f4..e72fb2dcfca2a 100644 --- a/src/include/access/brin.h +++ b/src/include/access/brin.h @@ -22,7 +22,6 @@ extern Datum brinbuild(PG_FUNCTION_ARGS); extern Datum brinbuildempty(PG_FUNCTION_ARGS); extern Datum brininsert(PG_FUNCTION_ARGS); extern Datum brinbeginscan(PG_FUNCTION_ARGS); -extern Datum bringettuple(PG_FUNCTION_ARGS); extern Datum bringetbitmap(PG_FUNCTION_ARGS); extern Datum brinrescan(PG_FUNCTION_ARGS); extern Datum brinendscan(PG_FUNCTION_ARGS); @@ -30,7 +29,6 @@ extern Datum brinmarkpos(PG_FUNCTION_ARGS); extern Datum brinrestrpos(PG_FUNCTION_ARGS); extern Datum brinbulkdelete(PG_FUNCTION_ARGS); extern Datum brinvacuumcleanup(PG_FUNCTION_ARGS); -extern Datum brincanreturn(PG_FUNCTION_ARGS); extern Datum brincostestimate(PG_FUNCTION_ARGS); extern Datum brinoptions(PG_FUNCTION_ARGS); diff --git a/src/include/access/brin_page.h b/src/include/access/brin_page.h index ecbd13a9a39c8..c827ca367d08a 100644 --- a/src/include/access/brin_page.h +++ b/src/include/access/brin_page.h @@ -52,6 +52,7 @@ typedef struct BrinSpecialSpace #define BRIN_PAGETYPE_REVMAP 0xF092 #define BRIN_PAGETYPE_REGULAR 0xF093 +#define BRIN_IS_META_PAGE(page) (BrinPageType(page) == BRIN_PAGETYPE_META) #define BRIN_IS_REVMAP_PAGE(page) (BrinPageType(page) == BRIN_PAGETYPE_REVMAP) #define BRIN_IS_REGULAR_PAGE(page) (BrinPageType(page) == BRIN_PAGETYPE_REGULAR) diff --git a/src/include/access/brin_pageops.h b/src/include/access/brin_pageops.h index 6ebe8ef764df8..1007e0760717c 100644 --- a/src/include/access/brin_pageops.h +++ b/src/include/access/brin_pageops.h @@ -33,4 +33,6 @@ extern bool brin_start_evacuating_page(Relation idxRel, Buffer buf); extern void brin_evacuate_page(Relation idxRel, BlockNumber pagesPerRange, BrinRevmap *revmap, Buffer buf); +extern bool brin_page_cleanup(Relation idxrel, Buffer buf); + #endif /* BRIN_PAGEOPS_H */ diff --git a/src/include/access/commit_ts.h b/src/include/access/commit_ts.h index bd05ab4d5cec3..3844bb30ff252 100644 --- a/src/include/access/commit_ts.h +++ b/src/include/access/commit_ts.h @@ -24,7 +24,7 @@ extern bool check_track_commit_timestamp(bool *newval, void **extra, extern void TransactionTreeSetCommitTsData(TransactionId xid, int nsubxids, TransactionId *subxids, TimestampTz timestamp, - RepOriginId nodeid, bool do_xlog); + RepOriginId nodeid, bool write_xlog); extern bool TransactionIdGetCommitTsData(TransactionId xid, TimestampTz *ts, RepOriginId *nodeid); extern TransactionId GetLatestCommitTsData(TimestampTz *ts, @@ -34,14 +34,13 @@ extern Size CommitTsShmemBuffers(void); extern Size CommitTsShmemSize(void); extern void CommitTsShmemInit(void); extern void BootStrapCommitTs(void); -extern void StartupCommitTs(void); -extern void ActivateCommitTs(void); -extern void DeactivateCommitTs(bool do_wal); +extern void StartupCommitTs(bool force_enable); +extern void CommitTsParameterChange(bool xlrecvalue, bool pgcontrolvalue); extern void CompleteCommitTsInitialization(void); extern void ShutdownCommitTs(void); extern void CheckPointCommitTs(void); extern void ExtendCommitTs(TransactionId newestXact); -extern void TruncateCommitTs(TransactionId oldestXact, bool do_wal); +extern void TruncateCommitTs(TransactionId oldestXact); extern void SetCommitTsLimit(TransactionId oldestXact, TransactionId newestXact); extern void AdvanceOldestCommitTs(TransactionId oldestXact); @@ -67,4 +66,4 @@ extern void commit_ts_redo(XLogReaderState *record); extern void commit_ts_desc(StringInfo buf, XLogReaderState *record); extern const char *commit_ts_identify(uint8 info); -#endif /* COMMITTS_H */ +#endif /* COMMIT_TS_H */ diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h index 31139cbd0ccc7..75e6b72f9e020 100644 --- a/src/include/access/heapam.h +++ b/src/include/access/heapam.h @@ -116,11 +116,13 @@ extern HeapScanDesc heap_beginscan_bm(Relation relation, Snapshot snapshot, int nkeys, ScanKey key); extern HeapScanDesc heap_beginscan_sampling(Relation relation, Snapshot snapshot, int nkeys, ScanKey key, - bool allow_strat, bool allow_pagemode); + bool allow_strat, bool allow_sync, bool allow_pagemode); extern void heap_setscanlimits(HeapScanDesc scan, BlockNumber startBlk, BlockNumber endBlk); extern void heapgetpage(HeapScanDesc scan, BlockNumber page); extern void heap_rescan(HeapScanDesc scan, ScanKey key); +extern void heap_rescan_set_params(HeapScanDesc scan, ScanKey key, + bool allow_strat, bool allow_sync, bool allow_pagemode); extern void heap_endscan(HeapScanDesc scan); extern HeapTuple heap_getnext(HeapScanDesc scan, ScanDirection direction); diff --git a/src/include/access/multixact.h b/src/include/access/multixact.h index f1448fe063512..60457810dd632 100644 --- a/src/include/access/multixact.h +++ b/src/include/access/multixact.h @@ -71,6 +71,7 @@ typedef struct MultiXactMember #define XLOG_MULTIXACT_ZERO_OFF_PAGE 0x00 #define XLOG_MULTIXACT_ZERO_MEM_PAGE 0x10 #define XLOG_MULTIXACT_CREATE_ID 0x20 +#define XLOG_MULTIXACT_TRUNCATE_ID 0x30 typedef struct xl_multixact_create { @@ -82,6 +83,21 @@ typedef struct xl_multixact_create #define SizeOfMultiXactCreate (offsetof(xl_multixact_create, members)) +typedef struct xl_multixact_truncate +{ + Oid oldestMultiDB; + + /* to-be-truncated range of multixact offsets */ + MultiXactId startTruncOff; /* just for completeness' sake */ + MultiXactId endTruncOff; + + /* to-be-truncated range of multixact members */ + MultiXactOffset startTruncMemb; + MultiXactOffset endTruncMemb; +} xl_multixact_truncate; + +#define SizeOfMultiXactTruncate (sizeof(xl_multixact_truncate)) + extern MultiXactId MultiXactIdCreate(TransactionId xid1, MultiXactStatus status1, TransactionId xid2, @@ -119,13 +135,12 @@ extern void MultiXactGetCheckptMulti(bool is_shutdown, Oid *oldestMultiDB); extern void CheckPointMultiXact(void); extern MultiXactId GetOldestMultiXactId(void); -extern void TruncateMultiXact(void); +extern void TruncateMultiXact(MultiXactId oldestMulti, Oid oldestMultiDB); extern void MultiXactSetNextMXact(MultiXactId nextMulti, MultiXactOffset nextMultiOffset); extern void MultiXactAdvanceNextMXact(MultiXactId minMulti, MultiXactOffset minMultiOffset); extern void MultiXactAdvanceOldest(MultiXactId oldestMulti, Oid oldestMultiDB); -extern void MultiXactSetSafeTruncate(MultiXactId safeTruncateMulti); extern int MultiXactMemberFreezeThreshold(void); extern void multixact_twophase_recover(TransactionId xid, uint16 info, diff --git a/src/include/access/parallel.h b/src/include/access/parallel.h index b029c1e88317f..44f0616cb8654 100644 --- a/src/include/access/parallel.h +++ b/src/include/access/parallel.h @@ -48,6 +48,7 @@ typedef struct ParallelContext extern bool ParallelMessagePending; extern int ParallelWorkerNumber; +extern bool InitializingParallelWorker; #define IsParallelWorker() (ParallelWorkerNumber >= 0) diff --git a/src/include/access/relscan.h b/src/include/access/relscan.h index f2482e99d6c56..6e6231971fdca 100644 --- a/src/include/access/relscan.h +++ b/src/include/access/relscan.h @@ -38,8 +38,8 @@ typedef struct HeapScanDescData /* state set up at initscan time */ BlockNumber rs_nblocks; /* total number of blocks in rel */ BlockNumber rs_startblock; /* block # to start at */ - BlockNumber rs_initblock; /* block # to consider initial of rel */ - BlockNumber rs_numblocks; /* number of blocks to scan */ + BlockNumber rs_numblocks; /* max number of blocks to scan */ + /* rs_numblocks is usually InvalidBlockNumber, meaning "scan whole rel" */ BufferAccessStrategy rs_strategy; /* access strategy for reads */ bool rs_syncscan; /* report location to syncscan logic? */ diff --git a/src/include/access/slru.h b/src/include/access/slru.h index 9c7f01933f7eb..f60e75b569a2c 100644 --- a/src/include/access/slru.h +++ b/src/include/access/slru.h @@ -143,14 +143,14 @@ extern int SimpleLruReadPage(SlruCtl ctl, int pageno, bool write_ok, extern int SimpleLruReadPage_ReadOnly(SlruCtl ctl, int pageno, TransactionId xid); extern void SimpleLruWritePage(SlruCtl ctl, int slotno); -extern void SimpleLruFlush(SlruCtl ctl, bool checkpoint); +extern void SimpleLruFlush(SlruCtl ctl, bool allow_redirtied); extern void SimpleLruTruncate(SlruCtl ctl, int cutoffPage); extern bool SimpleLruDoesPhysicalPageExist(SlruCtl ctl, int pageno); typedef bool (*SlruScanCallback) (SlruCtl ctl, char *filename, int segpage, void *data); extern bool SlruScanDirectory(SlruCtl ctl, SlruScanCallback callback, void *data); -extern void SlruDeleteSegment(SlruCtl ctl, char *filename); +extern void SlruDeleteSegment(SlruCtl ctl, int segno); /* SlruScanDirectory public callbacks */ extern bool SlruScanDirCbReportPresence(SlruCtl ctl, char *filename, diff --git a/src/include/access/spgist_private.h b/src/include/access/spgist_private.h index 413f71e7298d3..fae10501a24f5 100644 --- a/src/include/access/spgist_private.h +++ b/src/include/access/spgist_private.h @@ -48,14 +48,14 @@ typedef SpGistPageOpaqueData *SpGistPageOpaque; /* Flag bits in page special space */ #define SPGIST_META (1<<0) -#define SPGIST_DELETED (1<<1) +#define SPGIST_DELETED (1<<1) /* never set, but keep for backwards + * compatibility */ #define SPGIST_LEAF (1<<2) #define SPGIST_NULLS (1<<3) #define SpGistPageGetOpaque(page) ((SpGistPageOpaque) PageGetSpecialPointer(page)) #define SpGistPageIsMeta(page) (SpGistPageGetOpaque(page)->flags & SPGIST_META) #define SpGistPageIsDeleted(page) (SpGistPageGetOpaque(page)->flags & SPGIST_DELETED) -#define SpGistPageSetDeleted(page) (SpGistPageGetOpaque(page)->flags |= SPGIST_DELETED) #define SpGistPageIsLeaf(page) (SpGistPageGetOpaque(page)->flags & SPGIST_LEAF) #define SpGistPageStoresNulls(page) (SpGistPageGetOpaque(page)->flags & SPGIST_NULLS) @@ -465,7 +465,7 @@ typedef struct spgxlogAddNode * -1: parent not updated *---- */ - char parentBlk; + int8 parentBlk; OffsetNumber offnumParent; /* offset within the parent page */ uint16 nodeI; diff --git a/src/include/access/tablesample.h b/src/include/access/tablesample.h deleted file mode 100644 index a02e93d32223d..0000000000000 --- a/src/include/access/tablesample.h +++ /dev/null @@ -1,61 +0,0 @@ -/*------------------------------------------------------------------------- - * - * tablesample.h - * Public header file for TABLESAMPLE clause interface - * - * - * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * src/include/access/tablesample.h - * - *------------------------------------------------------------------------- - */ -#ifndef TABLESAMPLE_H -#define TABLESAMPLE_H - -#include "access/relscan.h" -#include "executor/executor.h" - -typedef struct TableSampleDesc -{ - HeapScanDesc heapScan; - TupleDesc tupDesc; /* Mostly useful for tsmexaminetuple */ - - void *tsmdata; /* private method data */ - - /* These point to he function of the TABLESAMPLE Method. */ - FmgrInfo tsminit; - FmgrInfo tsmnextblock; - FmgrInfo tsmnexttuple; - FmgrInfo tsmexaminetuple; - FmgrInfo tsmreset; - FmgrInfo tsmend; -} TableSampleDesc; - - -extern TableSampleDesc *tablesample_init(SampleScanState *scanstate, - TableSampleClause *tablesample); -extern HeapTuple tablesample_getnext(TableSampleDesc *desc); -extern void tablesample_reset(TableSampleDesc *desc); -extern void tablesample_end(TableSampleDesc *desc); -extern HeapTuple tablesample_source_getnext(TableSampleDesc *desc); -extern HeapTuple tablesample_source_gettup(TableSampleDesc *desc, ItemPointer tid, - bool *visible); - -extern Datum tsm_system_init(PG_FUNCTION_ARGS); -extern Datum tsm_system_nextblock(PG_FUNCTION_ARGS); -extern Datum tsm_system_nexttuple(PG_FUNCTION_ARGS); -extern Datum tsm_system_end(PG_FUNCTION_ARGS); -extern Datum tsm_system_reset(PG_FUNCTION_ARGS); -extern Datum tsm_system_cost(PG_FUNCTION_ARGS); - -extern Datum tsm_bernoulli_init(PG_FUNCTION_ARGS); -extern Datum tsm_bernoulli_nextblock(PG_FUNCTION_ARGS); -extern Datum tsm_bernoulli_nexttuple(PG_FUNCTION_ARGS); -extern Datum tsm_bernoulli_end(PG_FUNCTION_ARGS); -extern Datum tsm_bernoulli_reset(PG_FUNCTION_ARGS); -extern Datum tsm_bernoulli_cost(PG_FUNCTION_ARGS); - - -#endif diff --git a/src/include/access/tsmapi.h b/src/include/access/tsmapi.h new file mode 100644 index 0000000000000..4b59ffabd6e11 --- /dev/null +++ b/src/include/access/tsmapi.h @@ -0,0 +1,81 @@ +/*------------------------------------------------------------------------- + * + * tsmapi.h + * API for tablesample methods + * + * Copyright (c) 2015, PostgreSQL Global Development Group + * + * src/include/access/tsmapi.h + * + *------------------------------------------------------------------------- + */ +#ifndef TSMAPI_H +#define TSMAPI_H + +#include "nodes/execnodes.h" +#include "nodes/relation.h" + + +/* + * Callback function signatures --- see tablesample-method.sgml for more info. + */ + +typedef void (*SampleScanGetSampleSize_function) (PlannerInfo *root, + RelOptInfo *baserel, + List *paramexprs, + BlockNumber *pages, + double *tuples); + +typedef void (*InitSampleScan_function) (SampleScanState *node, + int eflags); + +typedef void (*BeginSampleScan_function) (SampleScanState *node, + Datum *params, + int nparams, + uint32 seed); + +typedef BlockNumber (*NextSampleBlock_function) (SampleScanState *node); + +typedef OffsetNumber (*NextSampleTuple_function) (SampleScanState *node, + BlockNumber blockno, + OffsetNumber maxoffset); + +typedef void (*EndSampleScan_function) (SampleScanState *node); + +/* + * TsmRoutine is the struct returned by a tablesample method's handler + * function. It provides pointers to the callback functions needed by the + * planner and executor, as well as additional information about the method. + * + * More function pointers are likely to be added in the future. + * Therefore it's recommended that the handler initialize the struct with + * makeNode(TsmRoutine) so that all fields are set to NULL. This will + * ensure that no fields are accidentally left undefined. + */ +typedef struct TsmRoutine +{ + NodeTag type; + + /* List of datatype OIDs for the arguments of the TABLESAMPLE clause */ + List *parameterTypes; + + /* Can method produce repeatable samples across, or even within, queries? */ + bool repeatable_across_queries; + bool repeatable_across_scans; + + /* Functions for planning a SampleScan on a physical table */ + SampleScanGetSampleSize_function SampleScanGetSampleSize; + + /* Functions for executing a SampleScan on a physical table */ + InitSampleScan_function InitSampleScan; /* can be NULL */ + BeginSampleScan_function BeginSampleScan; + NextSampleBlock_function NextSampleBlock; /* can be NULL */ + NextSampleTuple_function NextSampleTuple; + EndSampleScan_function EndSampleScan; /* can be NULL */ +} TsmRoutine; + + +/* Functions in access/tablesample/tablesample.c */ +extern TsmRoutine *GetTsmRoutine(Oid tsmhandler); + +#endif /* TSMAPI_H */ diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 6dacee2fbbdea..790ca66f8a61d 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -261,6 +261,7 @@ extern XLogRecPtr GetRedoRecPtr(void); extern XLogRecPtr GetInsertRecPtr(void); extern XLogRecPtr GetFlushRecPtr(void); extern void GetNextXidAndEpoch(TransactionId *xid, uint32 *epoch); +extern void RemovePromoteSignalFiles(void); extern bool CheckPromoteSignal(void); extern void WakeupRecovery(void); diff --git a/src/include/access/xlog_internal.h b/src/include/access/xlog_internal.h index fbf9324ba4306..5096c170dd2e6 100644 --- a/src/include/access/xlog_internal.h +++ b/src/include/access/xlog_internal.h @@ -31,7 +31,7 @@ /* * Each page of XLOG file has a header like this: */ -#define XLOG_PAGE_MAGIC 0xD085 /* can be used as WAL version indicator */ +#define XLOG_PAGE_MAGIC 0xD087 /* can be used as WAL version indicator */ typedef struct XLogPageHeaderData { @@ -137,13 +137,20 @@ typedef XLogLongPageHeaderData *XLogLongPageHeader; */ #define MAXFNAMELEN 64 +/* Length of XLog file name */ +#define XLOG_FNAME_LEN 24 + #define XLogFileName(fname, tli, logSegNo) \ snprintf(fname, MAXFNAMELEN, "%08X%08X%08X", tli, \ (uint32) ((logSegNo) / XLogSegmentsPerXLogId), \ (uint32) ((logSegNo) % XLogSegmentsPerXLogId)) +#define XLogFileNameById(fname, tli, log, seg) \ + snprintf(fname, MAXFNAMELEN, "%08X%08X%08X", tli, log, seg) + #define IsXLogFileName(fname) \ - (strlen(fname) == 24 && strspn(fname, "0123456789ABCDEF") == 24) + (strlen(fname) == XLOG_FNAME_LEN && \ + strspn(fname, "0123456789ABCDEF") == XLOG_FNAME_LEN) /* * XLOG segment with .partial suffix. Used by pg_receivexlog and at end of @@ -151,9 +158,9 @@ typedef XLogLongPageHeaderData *XLogLongPageHeader; * be complete yet. */ #define IsPartialXLogFileName(fname) \ - (strlen(fname) == 24 + strlen(".partial") && \ - strspn(fname, "0123456789ABCDEF") == 24 && \ - strcmp((fname) + 24, ".partial") == 0) + (strlen(fname) == XLOG_FNAME_LEN + strlen(".partial") && \ + strspn(fname, "0123456789ABCDEF") == XLOG_FNAME_LEN && \ + strcmp((fname) + XLOG_FNAME_LEN, ".partial") == 0) #define XLogFromFileName(fname, tli, logSegNo) \ do { \ @@ -188,8 +195,8 @@ typedef XLogLongPageHeaderData *XLogLongPageHeader; (uint32) ((logSegNo) % XLogSegmentsPerXLogId), offset) #define IsBackupHistoryFileName(fname) \ - (strlen(fname) > 24 && \ - strspn(fname, "0123456789ABCDEF") == 24 && \ + (strlen(fname) > XLOG_FNAME_LEN && \ + strspn(fname, "0123456789ABCDEF") == XLOG_FNAME_LEN && \ strcmp((fname) + strlen(fname) - strlen(".backup"), ".backup") == 0) #define BackupHistoryFilePath(path, tli, logSegNo, offset) \ diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 965a53cbfda46..e3b567a0e3ab8 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 201506282 +#define CATALOG_VERSION_NO 201510051 #endif diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h index 5da18c25444f8..fbcf9044325d4 100644 --- a/src/include/catalog/dependency.h +++ b/src/include/catalog/dependency.h @@ -96,6 +96,10 @@ typedef enum DependencyType * created for the owner of an object; hence two objects may be linked by * one or the other, but not both, of these dependency types.) * + * (d) a SHARED_DEPENDENCY_POLICY entry means that the referenced object is + * a role mentioned in a policy object. The referenced object must be a + * pg_authid entry. + * * SHARED_DEPENDENCY_INVALID is a value used as a parameter in internal * routines, and is not valid in the catalog itself. */ @@ -104,6 +108,7 @@ typedef enum SharedDependencyType SHARED_DEPENDENCY_PIN = 'p', SHARED_DEPENDENCY_OWNER = 'o', SHARED_DEPENDENCY_ACL = 'a', + SHARED_DEPENDENCY_POLICY = 'r', SHARED_DEPENDENCY_INVALID = 0 } SharedDependencyType; @@ -112,7 +117,7 @@ typedef struct ObjectAddresses ObjectAddresses; /* * This enum covers all system catalogs whose OIDs can appear in - * pg_depend.classId or pg_shdepend.classId. + * pg_depend.classId or pg_shdepend.classId. Keep object_classes[] in sync. */ typedef enum ObjectClass { @@ -148,10 +153,11 @@ typedef enum ObjectClass OCLASS_EXTENSION, /* pg_extension */ OCLASS_EVENT_TRIGGER, /* pg_event_trigger */ OCLASS_POLICY, /* pg_policy */ - OCLASS_TRANSFORM, /* pg_transform */ - MAX_OCLASS /* MUST BE LAST */ + OCLASS_TRANSFORM /* pg_transform */ } ObjectClass; +#define LAST_OCLASS OCLASS_TRANSFORM + /* in dependency.c */ diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index 8b3b28d954c6d..a29174b69057b 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -105,6 +105,7 @@ extern double IndexBuildHeapRangeScan(Relation heapRelation, Relation indexRelation, IndexInfo *indexInfo, bool allow_sync, + bool anyvisible, BlockNumber start_blockno, BlockNumber end_blockno, IndexBuildCallback callback, diff --git a/src/include/catalog/indexing.h b/src/include/catalog/indexing.h index 748aadde94598..c38958d6c5e26 100644 --- a/src/include/catalog/indexing.h +++ b/src/include/catalog/indexing.h @@ -316,11 +316,6 @@ DECLARE_UNIQUE_INDEX(pg_replication_origin_roiident_index, 6001, on pg_replicati DECLARE_UNIQUE_INDEX(pg_replication_origin_roname_index, 6002, on pg_replication_origin using btree(roname text_pattern_ops)); #define ReplicationOriginNameIndex 6002 -DECLARE_UNIQUE_INDEX(pg_tablesample_method_name_index, 3331, on pg_tablesample_method using btree(tsmname name_ops)); -#define TableSampleMethodNameIndexId 3331 -DECLARE_UNIQUE_INDEX(pg_tablesample_method_oid_index, 3332, on pg_tablesample_method using btree(oid oid_ops)); -#define TableSampleMethodOidIndexId 3332 - /* last step of initialization script: build the indexes declared above */ BUILD_INDICES diff --git a/src/include/catalog/pg_authid.h b/src/include/catalog/pg_authid.h index d5f19d6aabbd1..2c8565ea2542c 100644 --- a/src/include/catalog/pg_authid.h +++ b/src/include/catalog/pg_authid.h @@ -51,7 +51,7 @@ CATALOG(pg_authid,1260) BKI_SHARED_RELATION BKI_ROWTYPE_OID(2842) BKI_SCHEMA_MAC bool rolcreatedb; /* allowed to create databases? */ bool rolcanlogin; /* allowed to log in as session user? */ bool rolreplication; /* role used for streaming replication */ - bool rolbypassrls; /* allowed to bypass row level security? */ + bool rolbypassrls; /* bypasses row level security? */ int32 rolconnlimit; /* max connections allowed (-1=no limit) */ /* remaining fields may be null; use heap_getattr to read them! */ diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h index e526cd9b619c0..3352f49bb5e3e 100644 --- a/src/include/catalog/pg_class.h +++ b/src/include/catalog/pg_class.h @@ -66,6 +66,7 @@ CATALOG(pg_class,1259) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83) BKI_SCHEMA_MACRO bool relhastriggers; /* has (or has had) any TRIGGERs */ bool relhassubclass; /* has (or has had) derived classes */ bool relrowsecurity; /* row security is enabled or not */ + bool relforcerowsecurity; /* row security forced for owners or not */ bool relispopulated; /* matview currently holds query results */ char relreplident; /* see REPLICA_IDENTITY_xxx constants */ TransactionId relfrozenxid; /* all Xids < this are frozen in this rel */ @@ -95,37 +96,38 @@ typedef FormData_pg_class *Form_pg_class; * ---------------- */ -#define Natts_pg_class 30 -#define Anum_pg_class_relname 1 -#define Anum_pg_class_relnamespace 2 -#define Anum_pg_class_reltype 3 -#define Anum_pg_class_reloftype 4 -#define Anum_pg_class_relowner 5 -#define Anum_pg_class_relam 6 -#define Anum_pg_class_relfilenode 7 -#define Anum_pg_class_reltablespace 8 -#define Anum_pg_class_relpages 9 -#define Anum_pg_class_reltuples 10 -#define Anum_pg_class_relallvisible 11 -#define Anum_pg_class_reltoastrelid 12 -#define Anum_pg_class_relhasindex 13 -#define Anum_pg_class_relisshared 14 -#define Anum_pg_class_relpersistence 15 -#define Anum_pg_class_relkind 16 -#define Anum_pg_class_relnatts 17 -#define Anum_pg_class_relchecks 18 -#define Anum_pg_class_relhasoids 19 -#define Anum_pg_class_relhaspkey 20 -#define Anum_pg_class_relhasrules 21 -#define Anum_pg_class_relhastriggers 22 -#define Anum_pg_class_relhassubclass 23 -#define Anum_pg_class_relrowsecurity 24 -#define Anum_pg_class_relispopulated 25 -#define Anum_pg_class_relreplident 26 -#define Anum_pg_class_relfrozenxid 27 -#define Anum_pg_class_relminmxid 28 -#define Anum_pg_class_relacl 29 -#define Anum_pg_class_reloptions 30 +#define Natts_pg_class 31 +#define Anum_pg_class_relname 1 +#define Anum_pg_class_relnamespace 2 +#define Anum_pg_class_reltype 3 +#define Anum_pg_class_reloftype 4 +#define Anum_pg_class_relowner 5 +#define Anum_pg_class_relam 6 +#define Anum_pg_class_relfilenode 7 +#define Anum_pg_class_reltablespace 8 +#define Anum_pg_class_relpages 9 +#define Anum_pg_class_reltuples 10 +#define Anum_pg_class_relallvisible 11 +#define Anum_pg_class_reltoastrelid 12 +#define Anum_pg_class_relhasindex 13 +#define Anum_pg_class_relisshared 14 +#define Anum_pg_class_relpersistence 15 +#define Anum_pg_class_relkind 16 +#define Anum_pg_class_relnatts 17 +#define Anum_pg_class_relchecks 18 +#define Anum_pg_class_relhasoids 19 +#define Anum_pg_class_relhaspkey 20 +#define Anum_pg_class_relhasrules 21 +#define Anum_pg_class_relhastriggers 22 +#define Anum_pg_class_relhassubclass 23 +#define Anum_pg_class_relrowsecurity 24 +#define Anum_pg_class_relforcerowsecurity 25 +#define Anum_pg_class_relispopulated 26 +#define Anum_pg_class_relreplident 27 +#define Anum_pg_class_relfrozenxid 28 +#define Anum_pg_class_relminmxid 29 +#define Anum_pg_class_relacl 30 +#define Anum_pg_class_reloptions 31 /* ---------------- * initial contents of pg_class @@ -140,13 +142,13 @@ typedef FormData_pg_class *Form_pg_class; * Note: "3" in the relfrozenxid column stands for FirstNormalTransactionId; * similarly, "1" in relminmxid stands for FirstMultiXactId */ -DATA(insert OID = 1247 ( pg_type PGNSP 71 0 PGUID 0 0 0 0 0 0 0 f f p r 30 0 t f f f f f t n 3 1 _null_ _null_ )); +DATA(insert OID = 1247 ( pg_type PGNSP 71 0 PGUID 0 0 0 0 0 0 0 f f p r 30 0 t f f f f f f t n 3 1 _null_ _null_ )); DESCR(""); -DATA(insert OID = 1249 ( pg_attribute PGNSP 75 0 PGUID 0 0 0 0 0 0 0 f f p r 21 0 f f f f f f t n 3 1 _null_ _null_ )); +DATA(insert OID = 1249 ( pg_attribute PGNSP 75 0 PGUID 0 0 0 0 0 0 0 f f p r 21 0 f f f f f f f t n 3 1 _null_ _null_ )); DESCR(""); -DATA(insert OID = 1255 ( pg_proc PGNSP 81 0 PGUID 0 0 0 0 0 0 0 f f p r 28 0 t f f f f f t n 3 1 _null_ _null_ )); +DATA(insert OID = 1255 ( pg_proc PGNSP 81 0 PGUID 0 0 0 0 0 0 0 f f p r 28 0 t f f f f f f t n 3 1 _null_ _null_ )); DESCR(""); -DATA(insert OID = 1259 ( pg_class PGNSP 83 0 PGUID 0 0 0 0 0 0 0 f f p r 30 0 t f f f f f t n 3 1 _null_ _null_ )); +DATA(insert OID = 1259 ( pg_class PGNSP 83 0 PGUID 0 0 0 0 0 0 0 f f p r 31 0 t f f f f f f t n 3 1 _null_ _null_ )); DESCR(""); diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h index 26c9d4e4f7bd0..eec9c60c505a3 100644 --- a/src/include/catalog/pg_operator.h +++ b/src/include/catalog/pg_operator.h @@ -1806,11 +1806,11 @@ DESCR("greater than or equal"); DATA(insert OID = 3246 ( "@>" PGNSP PGUID b f f 3802 3802 16 3250 0 jsonb_contains contsel contjoinsel )); DESCR("contains"); DATA(insert OID = 3247 ( "?" PGNSP PGUID b f f 3802 25 16 0 0 jsonb_exists contsel contjoinsel )); -DESCR("exists"); +DESCR("key exists"); DATA(insert OID = 3248 ( "?|" PGNSP PGUID b f f 3802 1009 16 0 0 jsonb_exists_any contsel contjoinsel )); -DESCR("exists any"); +DESCR("any key exists"); DATA(insert OID = 3249 ( "?&" PGNSP PGUID b f f 3802 1009 16 0 0 jsonb_exists_all contsel contjoinsel )); -DESCR("exists all"); +DESCR("all keys exist"); DATA(insert OID = 3250 ( "<@" PGNSP PGUID b f f 3802 3802 16 3246 0 jsonb_contained contsel contjoinsel )); DESCR("is contained by"); DATA(insert OID = 3284 ( "||" PGNSP PGUID b f f 3802 3802 3802 0 0 jsonb_concat - - )); diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 3a40fa69c0aa7..c72fb933066d0 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -3080,10 +3080,10 @@ DESCR("view two-phase transactions"); DATA(insert OID = 3819 ( pg_get_multixact_members PGNSP PGUID 12 1 1000 0 0 f f f f t t v 1 0 2249 "28" "{28,28,25}" "{i,o,o}" "{multixid,xid,mode}" _null_ _null_ pg_get_multixact_members _null_ _null_ _null_ )); DESCR("view members of a multixactid"); -DATA(insert OID = 3581 ( pg_xact_commit_timestamp PGNSP PGUID 12 1 0 0 0 f f f f t f s 1 0 1184 "28" _null_ _null_ _null_ _null_ _null_ pg_xact_commit_timestamp _null_ _null_ _null_ )); +DATA(insert OID = 3581 ( pg_xact_commit_timestamp PGNSP PGUID 12 1 0 0 0 f f f f t f v 1 0 1184 "28" _null_ _null_ _null_ _null_ _null_ pg_xact_commit_timestamp _null_ _null_ _null_ )); DESCR("get commit timestamp of a transaction"); -DATA(insert OID = 3583 ( pg_last_committed_xact PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 2249 "" "{28,1184}" "{o,o}" "{xid,timestamp}" _null_ _null_ pg_last_committed_xact _null_ _null_ _null_ )); +DATA(insert OID = 3583 ( pg_last_committed_xact PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 2249 "" "{28,1184}" "{o,o}" "{xid,timestamp}" _null_ _null_ pg_last_committed_xact _null_ _null_ _null_ )); DESCR("get transaction Id and commit timestamp of latest transaction commit"); DATA(insert OID = 3537 ( pg_describe_object PGNSP PGUID 12 1 0 0 0 f f f f t f s 3 0 25 "26 26 23" _null_ _null_ _null_ _null_ _null_ pg_describe_object _null_ _null_ _null_ )); @@ -3183,7 +3183,7 @@ DESCR("rotate log file"); DATA(insert OID = 2623 ( pg_stat_file PGNSP PGUID 12 1 0 0 0 f f f f t f v 1 0 2249 "25" "{25,20,1184,1184,1184,1184,16}" "{i,o,o,o,o,o,o}" "{filename,size,access,modification,change,creation,isdir}" _null_ _null_ pg_stat_file_1arg _null_ _null_ _null_ )); DESCR("get information about file"); -DATA(insert OID = 3307 ( pg_stat_file PGNSP PGUID 12 1 0 0 0 f f f f t f v 2 0 2249 "25 16" "{25,16,20,1184,1184,1184,1184,16}" "{i,i,o,o,o,o,o,o}" "{filename,if_not_exists,size,access,modification,change,creation,isdir}" _null_ _null_ pg_stat_file _null_ _null_ _null_ )); +DATA(insert OID = 3307 ( pg_stat_file PGNSP PGUID 12 1 0 0 0 f f f f t f v 2 0 2249 "25 16" "{25,16,20,1184,1184,1184,1184,16}" "{i,i,o,o,o,o,o,o}" "{filename,missing_ok,size,access,modification,change,creation,isdir}" _null_ _null_ pg_stat_file _null_ _null_ _null_ )); DESCR("get information about file"); DATA(insert OID = 2624 ( pg_read_file PGNSP PGUID 12 1 0 0 0 f f f f t f v 3 0 25 "25 20 20" _null_ _null_ _null_ _null_ _null_ pg_read_file_off_len _null_ _null_ _null_ )); DESCR("read text from a file"); @@ -3732,6 +3732,16 @@ DATA(insert OID = 3116 ( fdw_handler_in PGNSP PGUID 12 1 0 0 0 f f f f f f i 1 DESCR("I/O"); DATA(insert OID = 3117 ( fdw_handler_out PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 0 2275 "3115" _null_ _null_ _null_ _null_ _null_ fdw_handler_out _null_ _null_ _null_ )); DESCR("I/O"); +DATA(insert OID = 3311 ( tsm_handler_in PGNSP PGUID 12 1 0 0 0 f f f f f f i 1 0 3310 "2275" _null_ _null_ _null_ _null_ _null_ tsm_handler_in _null_ _null_ _null_ )); +DESCR("I/O"); +DATA(insert OID = 3312 ( tsm_handler_out PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 0 2275 "3310" _null_ _null_ _null_ _null_ _null_ tsm_handler_out _null_ _null_ _null_ )); +DESCR("I/O"); + +/* tablesample method handlers */ +DATA(insert OID = 3313 ( bernoulli PGNSP PGUID 12 1 0 0 0 f f f f t f v 1 0 3310 "2281" _null_ _null_ _null_ _null_ _null_ tsm_bernoulli_handler _null_ _null_ _null_ )); +DESCR("BERNOULLI tablesample method handler"); +DATA(insert OID = 3314 ( system PGNSP PGUID 12 1 0 0 0 f f f f t f v 1 0 3310 "2281" _null_ _null_ _null_ _null_ _null_ tsm_system_handler _null_ _null_ _null_ )); +DESCR("SYSTEM tablesample method handler"); /* cryptographic */ DATA(insert OID = 2311 ( md5 PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ md5_text _null_ _null_ _null_ )); @@ -5315,33 +5325,6 @@ DESCR("get an individual replication origin's replication progress"); DATA(insert OID = 6014 ( pg_show_replication_origin_status PGNSP PGUID 12 1 100 0 0 f f f f f t v 0 0 2249 "" "{26,25,3220,3220}" "{o,o,o,o}" "{local_id, external_id, remote_lsn, local_lsn}" _null_ _null_ pg_show_replication_origin_status _null_ _null_ _null_ )); DESCR("get progress for all replication origins"); -/* tablesample */ -DATA(insert OID = 3335 ( tsm_system_init PGNSP PGUID 12 1 0 0 0 f f f f t f v 3 0 2278 "2281 23 700" _null_ _null_ _null_ _null_ _null_ tsm_system_init _null_ _null_ _null_ )); -DESCR("tsm_system_init(internal)"); -DATA(insert OID = 3336 ( tsm_system_nextblock PGNSP PGUID 12 1 0 0 0 f f f f t f v 2 0 23 "2281 16" _null_ _null_ _null_ _null_ _null_ tsm_system_nextblock _null_ _null_ _null_ )); -DESCR("tsm_system_nextblock(internal)"); -DATA(insert OID = 3337 ( tsm_system_nexttuple PGNSP PGUID 12 1 0 0 0 f f f f t f v 4 0 21 "2281 23 21 16" _null_ _null_ _null_ _null_ _null_ tsm_system_nexttuple _null_ _null_ _null_ )); -DESCR("tsm_system_nexttuple(internal)"); -DATA(insert OID = 3338 ( tsm_system_end PGNSP PGUID 12 1 0 0 0 f f f f t f v 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ tsm_system_end _null_ _null_ _null_ )); -DESCR("tsm_system_end(internal)"); -DATA(insert OID = 3339 ( tsm_system_reset PGNSP PGUID 12 1 0 0 0 f f f f t f v 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ tsm_system_reset _null_ _null_ _null_ )); -DESCR("tsm_system_reset(internal)"); -DATA(insert OID = 3340 ( tsm_system_cost PGNSP PGUID 12 1 0 0 0 f f f f t f v 7 0 2278 "2281 2281 2281 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ tsm_system_cost _null_ _null_ _null_ )); -DESCR("tsm_system_cost(internal)"); - -DATA(insert OID = 3341 ( tsm_bernoulli_init PGNSP PGUID 12 1 0 0 0 f f f f t f v 3 0 2278 "2281 23 700" _null_ _null_ _null_ _null_ _null_ tsm_bernoulli_init _null_ _null_ _null_ )); -DESCR("tsm_bernoulli_init(internal)"); -DATA(insert OID = 3342 ( tsm_bernoulli_nextblock PGNSP PGUID 12 1 0 0 0 f f f f t f v 2 0 23 "2281 16" _null_ _null_ _null_ _null_ _null_ tsm_bernoulli_nextblock _null_ _null_ _null_ )); -DESCR("tsm_bernoulli_nextblock(internal)"); -DATA(insert OID = 3343 ( tsm_bernoulli_nexttuple PGNSP PGUID 12 1 0 0 0 f f f f t f v 4 0 21 "2281 23 21 16" _null_ _null_ _null_ _null_ _null_ tsm_bernoulli_nexttuple _null_ _null_ _null_ )); -DESCR("tsm_bernoulli_nexttuple(internal)"); -DATA(insert OID = 3344 ( tsm_bernoulli_end PGNSP PGUID 12 1 0 0 0 f f f f t f v 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ tsm_bernoulli_end _null_ _null_ _null_ )); -DESCR("tsm_bernoulli_end(internal)"); -DATA(insert OID = 3345 ( tsm_bernoulli_reset PGNSP PGUID 12 1 0 0 0 f f f f t f v 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ tsm_bernoulli_reset _null_ _null_ _null_ )); -DESCR("tsm_bernoulli_reset(internal)"); -DATA(insert OID = 3346 ( tsm_bernoulli_cost PGNSP PGUID 12 1 0 0 0 f f f f t f v 7 0 2278 "2281 2281 2281 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ tsm_bernoulli_cost _null_ _null_ _null_ )); -DESCR("tsm_bernoulli_cost(internal)"); - /* * Symbolic values for provolatile column: these indicate whether the result * of a function is dependent *only* on the values of its explicit arguments, @@ -5354,6 +5337,12 @@ DESCR("tsm_bernoulli_cost(internal)"); #define PROVOLATILE_STABLE 's' /* does not change within a scan */ #define PROVOLATILE_VOLATILE 'v' /* can change even within a scan */ +/* rls */ +DATA(insert OID = 3298 ( row_security_active PGNSP PGUID 12 1 0 0 0 f f f f t f s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ row_security_active _null_ _null_ _null_ )); +DESCR("row security for current context active on table by table oid"); +DATA(insert OID = 3299 ( row_security_active PGNSP PGUID 12 1 0 0 0 f f f f t f s 1 0 16 "25" _null_ _null_ _null_ _null_ _null_ row_security_active_name _null_ _null_ _null_ )); +DESCR("row security for current context active on table by table name"); + /* * Symbolic values for proargmodes column. Note that these must agree with * the FunctionParameterMode enum in parsenodes.h; we declare them here to diff --git a/src/include/catalog/pg_tablesample_method.h b/src/include/catalog/pg_tablesample_method.h deleted file mode 100644 index b422414d08016..0000000000000 --- a/src/include/catalog/pg_tablesample_method.h +++ /dev/null @@ -1,81 +0,0 @@ -/*------------------------------------------------------------------------- - * - * pg_tablesample_method.h - * definition of the table scan methods. - * - * - * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * src/include/catalog/pg_tablesample_method.h - * - * - *------------------------------------------------------------------------- - */ -#ifndef PG_TABLESAMPLE_METHOD_H -#define PG_TABLESAMPLE_METHOD_H - -#include "catalog/genbki.h" -#include "catalog/objectaddress.h" - -/* ---------------- - * pg_tablesample_method definition. cpp turns this into - * typedef struct FormData_pg_tablesample_method - * ---------------- - */ -#define TableSampleMethodRelationId 3330 - -CATALOG(pg_tablesample_method,3330) -{ - NameData tsmname; /* tablesample method name */ - bool tsmseqscan; /* does this method scan whole table - * sequentially? */ - bool tsmpagemode; /* does this method scan page at a time? */ - regproc tsminit; /* init scan function */ - regproc tsmnextblock; /* function returning next block to sample or - * InvalidBlockOffset if finished */ - regproc tsmnexttuple; /* function returning next tuple offset from - * current block or InvalidOffsetNumber if end - * of the block was reacher */ - regproc tsmexaminetuple;/* optional function which can examine tuple - * contents and decide if tuple should be - * returned or not */ - regproc tsmend; /* end scan function */ - regproc tsmreset; /* reset state - used by rescan */ - regproc tsmcost; /* costing function */ -} FormData_pg_tablesample_method; - -/* ---------------- - * Form_pg_tablesample_method corresponds to a pointer to a tuple with - * the format of pg_tablesample_method relation. - * ---------------- - */ -typedef FormData_pg_tablesample_method *Form_pg_tablesample_method; - -/* ---------------- - * compiler constants for pg_tablesample_method - * ---------------- - */ -#define Natts_pg_tablesample_method 10 -#define Anum_pg_tablesample_method_tsmname 1 -#define Anum_pg_tablesample_method_tsmseqscan 2 -#define Anum_pg_tablesample_method_tsmpagemode 3 -#define Anum_pg_tablesample_method_tsminit 4 -#define Anum_pg_tablesample_method_tsmnextblock 5 -#define Anum_pg_tablesample_method_tsmnexttuple 6 -#define Anum_pg_tablesample_method_tsmexaminetuple 7 -#define Anum_pg_tablesample_method_tsmend 8 -#define Anum_pg_tablesample_method_tsmreset 9 -#define Anum_pg_tablesample_method_tsmcost 10 - -/* ---------------- - * initial contents of pg_tablesample_method - * ---------------- - */ - -DATA(insert OID = 3333 ( system false true tsm_system_init tsm_system_nextblock tsm_system_nexttuple - tsm_system_end tsm_system_reset tsm_system_cost )); -DESCR("SYSTEM table sampling method"); -DATA(insert OID = 3334 ( bernoulli true false tsm_bernoulli_init tsm_bernoulli_nextblock tsm_bernoulli_nexttuple - tsm_bernoulli_end tsm_bernoulli_reset tsm_bernoulli_cost )); -DESCR("BERNOULLI table sampling method"); - -#endif /* PG_TABLESAMPLE_METHOD_H */ diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h index da123f6c4957e..7dc95c8d2c651 100644 --- a/src/include/catalog/pg_type.h +++ b/src/include/catalog/pg_type.h @@ -694,6 +694,8 @@ DATA(insert OID = 3500 ( anyenum PGNSP PGUID 4 t p P f t \054 0 0 0 anyenum_in #define ANYENUMOID 3500 DATA(insert OID = 3115 ( fdw_handler PGNSP PGUID 4 t p P f t \054 0 0 0 fdw_handler_in fdw_handler_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); #define FDW_HANDLEROID 3115 +DATA(insert OID = 3310 ( tsm_handler PGNSP PGUID 4 t p P f t \054 0 0 0 tsm_handler_in tsm_handler_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); +#define TSM_HANDLEROID 3310 DATA(insert OID = 3831 ( anyrange PGNSP PGUID -1 f p P f t \054 0 0 0 anyrange_in anyrange_out - - - - - d x f 0 -1 0 0 _null_ _null_ _null_ )); #define ANYRANGEOID 3831 diff --git a/src/include/commands/policy.h b/src/include/commands/policy.h index ac322e0db9263..be000432312ff 100644 --- a/src/include/commands/policy.h +++ b/src/include/commands/policy.h @@ -31,5 +31,6 @@ extern Oid get_relation_policy_oid(Oid relid, const char *policy_name, extern ObjectAddress rename_policy(RenameStmt *stmt); +extern bool relation_has_policies(Relation rel); #endif /* POLICY_H */ diff --git a/src/include/executor/hashjoin.h b/src/include/executor/hashjoin.h index 9d0b85c77db41..7a51ea6fffb60 100644 --- a/src/include/executor/hashjoin.h +++ b/src/include/executor/hashjoin.h @@ -131,7 +131,7 @@ typedef struct HashJoinTableData int nbuckets_original; /* # buckets when starting the first * hash */ int nbuckets_optimal; /* optimal # buckets (per batch) */ - int log2_nbuckets_optimal; /* same as log2_nbuckets optimal */ + int log2_nbuckets_optimal; /* log2(nbuckets_optimal) */ /* buckets[i] is head of list of tuples in i'th in-memory bucket */ struct HashJoinTupleData **buckets; diff --git a/src/include/executor/nodeSamplescan.h b/src/include/executor/nodeSamplescan.h index 4b769daec8b91..a0cc6ce467a9f 100644 --- a/src/include/executor/nodeSamplescan.h +++ b/src/include/executor/nodeSamplescan.h @@ -4,7 +4,7 @@ * * * - * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/executor/nodeSamplescan.h diff --git a/src/include/lib/bipartite_match.h b/src/include/lib/bipartite_match.h index 373bbede1e1b1..c106a7e41d18c 100644 --- a/src/include/lib/bipartite_match.h +++ b/src/include/lib/bipartite_match.h @@ -11,7 +11,7 @@ /* * Given a bipartite graph consisting of nodes U numbered 1..nU, nodes V * numbered 1..nV, and an adjacency map of undirected edges in the form - * adjacency[u] = [n, v1, v2, v3, ... vn], we wish to find a "maximum + * adjacency[u] = [k, v1, v2, v3, ... vk], we wish to find a "maximum * cardinality matching", which is defined as follows: a matching is a subset * of the original edges such that no node has more than one edge, and a * matching has maximum cardinality if there exists no other matching with a @@ -24,21 +24,23 @@ * the problem of planning a collection of grouping sets with the provably * minimal number of sort operations. */ -typedef struct bipartite_match_state +typedef struct BipartiteMatchState { + /* inputs: */ int u_size; /* size of U */ int v_size; /* size of V */ + short **adjacency; /* adjacency[u] = [k, v1,v2,v3,...,vk] */ + /* outputs: */ int matching; /* number of edges in matching */ - short **adjacency; /* adjacency[u] = [n, v1,v2,v3,...,vn] */ short *pair_uv; /* pair_uv[u] -> v */ short *pair_vu; /* pair_vu[v] -> u */ - - float *distance; /* distance[u], float so we can have +inf */ + /* private state for matching algorithm: */ + short *distance; /* distance[u] */ short *queue; /* queue storage for breadth search */ } BipartiteMatchState; -BipartiteMatchState *BipartiteMatch(int u_size, int v_size, short **adjacency); +extern BipartiteMatchState *BipartiteMatch(int u_size, int v_size, short **adjacency); -void BipartiteMatchFree(BipartiteMatchState *state); +extern void BipartiteMatchFree(BipartiteMatchState *state); #endif /* BIPARTITE_MATCH_H */ diff --git a/src/include/libpq/libpq-be.h b/src/include/libpq/libpq-be.h index 6171ef3a1ffca..caaa8b5f890f9 100644 --- a/src/include/libpq/libpq-be.h +++ b/src/include/libpq/libpq-be.h @@ -92,11 +92,6 @@ typedef struct } pg_gssinfo; #endif -/* - * SSL renegotiations - */ -extern int ssl_renegotiation_limit; - /* * This is used by the postmaster in its communication with frontends. It * contains all state information needed during this communication before the diff --git a/src/include/libpq/libpq.h b/src/include/libpq/libpq.h index c408e5b5517a0..efb2dacbba30c 100644 --- a/src/include/libpq/libpq.h +++ b/src/include/libpq/libpq.h @@ -59,6 +59,7 @@ extern int StreamServerPort(int family, char *hostName, extern int StreamConnection(pgsocket server_fd, Port *port); extern void StreamClose(pgsocket sock); extern void TouchSocketFiles(void); +extern void RemoveSocketFiles(void); extern void pq_init(void); extern int pq_getbytes(char *s, size_t len); extern int pq_getstring(StringInfo s); diff --git a/src/include/libpq/pqmq.h b/src/include/libpq/pqmq.h index 901756596a471..97f17da89db64 100644 --- a/src/include/libpq/pqmq.h +++ b/src/include/libpq/pqmq.h @@ -16,7 +16,7 @@ #include "lib/stringinfo.h" #include "storage/shm_mq.h" -extern void pq_redirect_to_shm_mq(shm_mq *, shm_mq_handle *); +extern void pq_redirect_to_shm_mq(dsm_segment *seg, shm_mq_handle *mqh); extern void pq_set_parallel_master(pid_t pid, BackendId backend_id); extern void pq_parse_errornotice(StringInfo str, ErrorData *edata); diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index b5391673609b7..e0d464e02f1c1 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -268,6 +268,7 @@ typedef char *pg_stack_base_t; extern pg_stack_base_t set_stack_base(void); extern void restore_stack_base(pg_stack_base_t base); extern void check_stack_depth(void); +extern bool stack_is_too_deep(void); /* in tcop/utility.c */ extern void PreventCommandIfReadOnly(const char *cmdname); @@ -286,7 +287,7 @@ extern int trace_recovery(int trace_level); /* flags to be OR'd to form sec_context */ #define SECURITY_LOCAL_USERID_CHANGE 0x0001 #define SECURITY_RESTRICTED_OPERATION 0x0002 -#define SECURITY_ROW_LEVEL_DISABLED 0x0004 +#define SECURITY_NOFORCE_RLS 0x0004 extern char *DatabasePath; @@ -305,6 +306,7 @@ extern void GetUserIdAndSecContext(Oid *userid, int *sec_context); extern void SetUserIdAndSecContext(Oid userid, int sec_context); extern bool InLocalUserIdChange(void); extern bool InSecurityRestrictedOperation(void); +extern bool InNoForceRLSOperation(void); extern void GetUserIdAndContext(Oid *userid, bool *sec_def_context); extern void SetUserIdAndContext(Oid userid, bool sec_def_context); extern void InitializeSessionUserId(const char *rolename, Oid useroid); @@ -451,6 +453,7 @@ extern void CreateSocketLockFile(const char *socketfile, bool amPostmaster, const char *socketDir); extern void TouchSocketLockFiles(void); extern void AddToDataDirLockFile(int target_line, const char *str); +extern bool RecheckDataDirLockFile(void); extern void ValidatePgVersion(const char *path); extern void process_shared_preload_libraries(void); extern void process_session_preload_libraries(void); diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 541ee18735685..0da5fb478adce 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -1257,13 +1257,22 @@ typedef struct ScanState */ typedef ScanState SeqScanState; -/* - * SampleScan +/* ---------------- + * SampleScanState information + * ---------------- */ typedef struct SampleScanState { ScanState ss; - struct TableSampleDesc *tsdesc; + List *args; /* expr states for TABLESAMPLE params */ + ExprState *repeatable; /* expr state for REPEATABLE expr */ + /* use struct pointer to avoid including tsmapi.h here */ + struct TsmRoutine *tsmroutine; /* descriptor for tablesample method */ + void *tsm_state; /* tablesample method can keep state here */ + bool use_bulkread; /* use bulkread buffer access strategy? */ + bool use_pagemode; /* use page-at-a-time visibility checking? */ + bool begun; /* false means need to call BeginSampleScan */ + uint32 seed; /* random seed */ } SampleScanState; /* @@ -1571,6 +1580,7 @@ typedef struct WorkTableScanState typedef struct ForeignScanState { ScanState ss; /* its first field is NodeTag */ + List *fdw_recheck_quals; /* original quals not in ss.ps.qual */ /* use struct pointer to avoid including fdwapi.h here */ struct FdwRoutine *fdwroutine; void *fdw_state; /* foreign-data wrapper can keep state here */ diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h index 290cdb3058517..574b72df18346 100644 --- a/src/include/nodes/nodes.h +++ b/src/include/nodes/nodes.h @@ -51,6 +51,7 @@ typedef enum NodeTag T_BitmapOr, T_Scan, T_SeqScan, + T_SampleScan, T_IndexScan, T_IndexOnlyScan, T_BitmapIndexScan, @@ -61,7 +62,6 @@ typedef enum NodeTag T_ValuesScan, T_CteScan, T_WorkTableScan, - T_SampleScan, T_ForeignScan, T_CustomScan, T_Join, @@ -399,6 +399,7 @@ typedef enum NodeTag T_WindowDef, T_RangeSubselect, T_RangeFunction, + T_RangeTableSample, T_TypeName, T_ColumnDef, T_IndexElem, @@ -406,11 +407,11 @@ typedef enum NodeTag T_DefElem, T_RangeTblEntry, T_RangeTblFunction, + T_TableSampleClause, T_WithCheckOption, T_SortGroupClause, T_GroupingSet, T_WindowClause, - T_PrivGrantee, T_FuncWithArgs, T_AccessPriv, T_CreateOpClassItem, @@ -424,8 +425,6 @@ typedef enum NodeTag T_OnConflictClause, T_CommonTableExpr, T_RoleSpec, - T_RangeTableSample, - T_TableSampleClause, /* * TAGS FOR REPLICATION GRAMMAR PARSE NODES (replnodes.h) @@ -451,7 +450,8 @@ typedef enum NodeTag T_WindowObjectData, /* private in nodeWindowAgg.c */ T_TIDBitmap, /* in nodes/tidbitmap.h */ T_InlineCodeBlock, /* in nodes/parsenodes.h */ - T_FdwRoutine /* in foreign/fdwapi.h */ + T_FdwRoutine, /* in foreign/fdwapi.h */ + T_TsmRoutine /* in access/tsmapi.h */ } NodeTag; /* diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 868905b0c16f6..4a198420abc5e 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -130,8 +130,6 @@ typedef struct Query List *targetList; /* target list (of TargetEntry) */ - List *withCheckOptions; /* a list of WithCheckOption's */ - OnConflictExpr *onConflict; /* ON CONFLICT DO [NOTHING | UPDATE] */ List *returningList; /* return-values list (of TargetEntry) */ @@ -158,6 +156,10 @@ typedef struct Query List *constraintDeps; /* a list of pg_constraint OIDs that the query * depends on to be semantically valid */ + + List *withCheckOptions; /* a list of WithCheckOption's, which are + * only added during rewrite and therefore + * are not written out as part of Query. */ } Query; @@ -337,26 +339,6 @@ typedef struct FuncCall int location; /* token location, or -1 if unknown */ } FuncCall; -/* - * TableSampleClause - a sampling method information - */ -typedef struct TableSampleClause -{ - NodeTag type; - Oid tsmid; - bool tsmseqscan; - bool tsmpagemode; - Oid tsminit; - Oid tsmnextblock; - Oid tsmnexttuple; - Oid tsmexaminetuple; - Oid tsmend; - Oid tsmreset; - Oid tsmcost; - Node *repeatable; - List *args; -} TableSampleClause; - /* * A_Star - '*' representing all columns of a table or compound field * @@ -558,19 +540,23 @@ typedef struct RangeFunction } RangeFunction; /* - * RangeTableSample - represents
TABLESAMPLE () REPEATABLE () + * RangeTableSample - TABLESAMPLE appearing in a raw FROM clause * - * SQL Standard specifies only one parameter which is percentage. But we allow - * custom tablesample methods which may need different input arguments so we - * accept list of arguments. + * This node, appearing only in raw parse trees, represents + * TABLESAMPLE () REPEATABLE () + * Currently, the can only be a RangeVar, but we might in future + * allow RangeSubselect and other options. Note that the RangeTableSample + * is wrapped around the node representing the , rather than being + * a subfield of it. */ typedef struct RangeTableSample { NodeTag type; - RangeVar *relation; - char *method; /* sampling method */ - Node *repeatable; - List *args; /* arguments for sampling method */ + Node *relation; /* relation to be sampled */ + List *method; /* sampling method name (possibly qualified) */ + List *args; /* argument(s) for sampling method */ + Node *repeatable; /* REPEATABLE expression, or NULL if none */ + int location; /* method name location, or -1 if unknown */ } RangeTableSample; /* @@ -810,7 +796,7 @@ typedef struct RangeTblEntry */ Oid relid; /* OID of the relation */ char relkind; /* relation kind (see pg_class.relkind) */ - TableSampleClause *tablesample; /* sampling method and parameters */ + struct TableSampleClause *tablesample; /* sampling info, or NULL */ /* * Fields valid for a subquery RTE (else NULL): @@ -912,6 +898,19 @@ typedef struct RangeTblFunction Bitmapset *funcparams; /* PARAM_EXEC Param IDs affecting this func */ } RangeTblFunction; +/* + * TableSampleClause - TABLESAMPLE appearing in a transformed FROM clause + * + * Unlike RangeTableSample, this is a subnode of the relevant RangeTblEntry. + */ +typedef struct TableSampleClause +{ + NodeTag type; + Oid tsmhandler; /* OID of the tablesample handler function */ + List *args; /* tablesample argument expression(s) */ + Expr *repeatable; /* REPEATABLE expression, or NULL if none */ +} TableSampleClause; + /* * WithCheckOption - * representation of WITH CHECK OPTION checks to be applied to new tuples @@ -931,6 +930,7 @@ typedef struct WithCheckOption NodeTag type; WCOKind kind; /* kind of WCO */ char *relname; /* name of relation that specified the WCO */ + char *polname; /* name of RLS policy being checked */ Node *qual; /* constraint qual to check */ bool cascaded; /* true for a cascaded WCO on a view */ } WithCheckOption; @@ -1482,6 +1482,7 @@ typedef enum AlterTableType AT_AddIndexConstraint, /* add constraint using existing index */ AT_DropConstraint, /* drop constraint */ AT_DropConstraintRecurse, /* internal to commands/tablecmds.c */ + AT_ReAddComment, /* internal to commands/tablecmds.c */ AT_AlterColumnType, /* alter column type */ AT_AlterColumnGenericOptions, /* alter column OPTIONS (...) */ AT_ChangeOwner, /* change owner */ @@ -1515,6 +1516,8 @@ typedef enum AlterTableType AT_ReplicaIdentity, /* REPLICA IDENTITY */ AT_EnableRowSecurity, /* ENABLE ROW SECURITY */ AT_DisableRowSecurity, /* DISABLE ROW SECURITY */ + AT_ForceRowSecurity, /* FORCE ROW SECURITY */ + AT_NoForceRowSecurity, /* NO FORCE ROW SECURITY */ AT_GenericOptions /* OPTIONS (...) */ } AlterTableType; @@ -2041,7 +2044,7 @@ typedef struct CreatePolicyStmt NodeTag type; char *policy_name; /* Policy's name */ RangeVar *table; /* the table name the policy applies to */ - char *cmd; /* the command name the policy applies to */ + char *cmd_name; /* the command name the policy applies to */ List *roles; /* the roles associated with the policy */ Node *qual; /* the policy's condition */ Node *with_check; /* the policy's WITH CHECK condition. */ @@ -2519,7 +2522,7 @@ typedef struct RenameStmt typedef struct AlterObjectSchemaStmt { NodeTag type; - ObjectType objectType; /* OBJECT_TABLE, OBJECT_TYPE, etc */ + ObjectType objectType; /* OBJECT_TABLE, OBJECT_TYPE, etc */ RangeVar *relation; /* in case it's a table */ List *object; /* in case it's some other object */ List *objarg; /* argument types, if applicable */ @@ -2534,7 +2537,7 @@ typedef struct AlterObjectSchemaStmt typedef struct AlterOwnerStmt { NodeTag type; - ObjectType objectType; /* OBJECT_TABLE, OBJECT_TYPE, etc */ + ObjectType objectType; /* OBJECT_TABLE, OBJECT_TYPE, etc */ RangeVar *relation; /* in case it's a table */ List *object; /* in case it's some other object */ List *objarg; /* argument types, if applicable */ diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index 5f538f3e8ccb5..7a6a3fea47929 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -287,7 +287,12 @@ typedef Scan SeqScan; * table sample scan node * ---------------- */ -typedef Scan SampleScan; +typedef struct SampleScan +{ + Scan scan; + /* use struct pointer to avoid including parsenodes.h here */ + struct TableSampleClause *tablesample; +} SampleScan; /* ---------------- * index scan node @@ -504,6 +509,11 @@ typedef struct WorkTableScan * fdw_scan_tlist is never actually executed; it just holds expression trees * describing what is in the scan tuple's columns. * + * fdw_recheck_quals should contain any quals which the core system passed to + * the FDW but which were not added to scan.plan.qual; that is, it should + * contain the quals being checked remotely. This is needed for correct + * behavior during EvalPlanQual rechecks. + * * When the plan node represents a foreign join, scan.scanrelid is zero and * fs_relids must be consulted to identify the join relation. (fs_relids * is valid for simple scans as well, but will always match scan.scanrelid.) @@ -516,6 +526,7 @@ typedef struct ForeignScan List *fdw_exprs; /* expressions that FDW may evaluate */ List *fdw_private; /* private data for FDW */ List *fdw_scan_tlist; /* optional tlist describing scan tuple */ + List *fdw_recheck_quals; /* original quals not in scan.plan.qual */ Bitmapset *fs_relids; /* RTIs generated by this scan */ bool fsSystemCol; /* true if any "system column" is needed */ } ForeignScan; diff --git a/src/include/optimizer/cost.h b/src/include/optimizer/cost.h index 24003ae3591b9..dd43e45d0c0a5 100644 --- a/src/include/optimizer/cost.h +++ b/src/include/optimizer/cost.h @@ -68,7 +68,8 @@ extern double index_pages_fetched(double tuples_fetched, BlockNumber pages, double index_pages, PlannerInfo *root); extern void cost_seqscan(Path *path, PlannerInfo *root, RelOptInfo *baserel, ParamPathInfo *param_info); -extern void cost_samplescan(Path *path, PlannerInfo *root, RelOptInfo *baserel); +extern void cost_samplescan(Path *path, PlannerInfo *root, RelOptInfo *baserel, + ParamPathInfo *param_info); extern void cost_index(IndexPath *path, PlannerInfo *root, double loop_count); extern void cost_bitmap_heap_scan(Path *path, PlannerInfo *root, RelOptInfo *baserel, diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h index 3e2378aeb7df7..87123a57295d2 100644 --- a/src/include/optimizer/paths.h +++ b/src/include/optimizer/paths.h @@ -146,7 +146,8 @@ extern bool have_relevant_eclass_joinclause(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2); extern bool has_relevant_eclass_joinclause(PlannerInfo *root, RelOptInfo *rel1); -extern bool eclass_useful_for_merging(EquivalenceClass *eclass, +extern bool eclass_useful_for_merging(PlannerInfo *root, + EquivalenceClass *eclass, RelOptInfo *rel); extern bool is_redundant_derived_clause(RestrictInfo *rinfo, List *clauselist); diff --git a/src/include/optimizer/planmain.h b/src/include/optimizer/planmain.h index 52b077a1b4715..1fb850489fba0 100644 --- a/src/include/optimizer/planmain.h +++ b/src/include/optimizer/planmain.h @@ -45,7 +45,7 @@ extern SubqueryScan *make_subqueryscan(List *qptlist, List *qpqual, Index scanrelid, Plan *subplan); extern ForeignScan *make_foreignscan(List *qptlist, List *qpqual, Index scanrelid, List *fdw_exprs, List *fdw_private, - List *fdw_scan_tlist); + List *fdw_scan_tlist, List *fdw_recheck_quals); extern Append *make_append(List *appendplans, List *tlist); extern RecursiveUnion *make_recursive_union(List *tlist, Plan *lefttree, Plan *righttree, int wtParam, diff --git a/src/include/parser/parse_func.h b/src/include/parser/parse_func.h index 3194da463948a..32646918e20c4 100644 --- a/src/include/parser/parse_func.h +++ b/src/include/parser/parse_func.h @@ -33,11 +33,6 @@ typedef enum extern Node *ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, FuncCall *fn, int location); -extern TableSampleClause *ParseTableSample(ParseState *pstate, - char *samplemethod, - Node *repeatable, List *args, - int location); - extern FuncDetailCode func_get_detail(List *funcname, List *fargs, List *fargnames, int nargs, Oid *argtypes, diff --git a/src/include/parser/parse_node.h b/src/include/parser/parse_node.h index 3103b71594471..52499453690d9 100644 --- a/src/include/parser/parse_node.h +++ b/src/include/parser/parse_node.h @@ -63,7 +63,8 @@ typedef enum ParseExprKind EXPR_KIND_INDEX_PREDICATE, /* index predicate */ EXPR_KIND_ALTER_COL_TRANSFORM, /* transform expr in ALTER COLUMN TYPE */ EXPR_KIND_EXECUTE_PARAMETER, /* parameter value in EXECUTE */ - EXPR_KIND_TRIGGER_WHEN /* WHEN condition in CREATE TRIGGER */ + EXPR_KIND_TRIGGER_WHEN, /* WHEN condition in CREATE TRIGGER */ + EXPR_KIND_POLICY /* USING or WITH CHECK expr in policy */ } ParseExprKind; @@ -152,7 +153,6 @@ struct ParseState bool p_hasSubLinks; bool p_hasModifyingCTE; bool p_is_insert; - bool p_is_update; bool p_locked_from_parent; Relation p_target_relation; RangeTblEntry *p_target_rangetblentry; diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32 index 09c194f34b5df..9664e1f1ed35b 100644 --- a/src/include/pg_config.h.win32 +++ b/src/include/pg_config.h.win32 @@ -563,10 +563,10 @@ #define PACKAGE_NAME "PostgreSQL" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "PostgreSQL 9.5alpha1" +#define PACKAGE_STRING "PostgreSQL 9.5beta1" /* Define to the version of this package. */ -#define PACKAGE_VERSION "9.5alpha1" +#define PACKAGE_VERSION "9.5beta1" /* Define to the name of a signed 128-bit integer type. */ #undef PG_INT128_TYPE @@ -575,7 +575,7 @@ #define PG_INT64_TYPE long long int /* PostgreSQL version as a string */ -#define PG_VERSION "9.5alpha1" +#define PG_VERSION "9.5beta1" /* PostgreSQL version as a number */ #define PG_VERSION_NUM 90500 diff --git a/src/include/port.h b/src/include/port.h index 71113c03944bd..3787cbfb7614c 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -357,10 +357,6 @@ extern off_t ftello(FILE *stream); #endif #endif -#define RAND48_SEED_0 (0x330e) -#define RAND48_SEED_1 (0xabcd) -#define RAND48_SEED_2 (0x1234) - extern double pg_erand48(unsigned short xseed[3]); extern long pg_lrand48(void); extern void pg_srand48(long seed); diff --git a/src/include/port/atomics.h b/src/include/port/atomics.h index 1a4c748cb9717..d94fea60f1503 100644 --- a/src/include/port/atomics.h +++ b/src/include/port/atomics.h @@ -18,7 +18,7 @@ * new platform. If no such generic implementation is available spinlocks (or * even OS provided semaphores) will be used to implement the API. * - * Implement the _u64 variantes if and only if your platform can use them + * Implement the _u64 variants if and only if your platform can use them * efficiently (and obviously correctly). * * Use higher level functionality (lwlocks, spinlocks, heavyweight locks) @@ -46,7 +46,7 @@ * * These files can provide the full set of atomics or can do pretty much * nothing if all the compilers commonly used on these platforms provide - * useable generics. + * usable generics. * * Don't add an inline assembly of the actual atomic operations if all the * common implementations of your platform provide intrinsics. Intrinsics are @@ -81,8 +81,15 @@ * * pg_atomic_compare_exchange_u32(), pg_atomic_fetch_add_u32() * using compiler intrinsics are a good idea. */ +/* + * Given a gcc-compatible xlc compiler, prefer the xlc implementation. The + * ppc64le "IBM XL C/C++ for Linux, V13.1.2" implements both interfaces, but + * __sync_lock_test_and_set() of one-byte types elicits SIGSEGV. + */ +#if defined(__IBMC__) || defined(__IBMCPP__) +#include "port/atomics/generic-xlc.h" /* gcc or compatible, including clang and icc */ -#if defined(__GNUC__) || defined(__INTEL_COMPILER) +#elif defined(__GNUC__) || defined(__INTEL_COMPILER) #include "port/atomics/generic-gcc.h" #elif defined(WIN32_ONLY_COMPILER) #include "port/atomics/generic-msvc.h" @@ -90,8 +97,6 @@ #include "port/atomics/generic-acc.h" #elif defined(__SUNPRO_C) && !defined(__GNUC__) #include "port/atomics/generic-sunpro.h" -#elif (defined(__IBMC__) || defined(__IBMCPP__)) && !defined(__GNUC__) -#include "port/atomics/generic-xlc.h" #else /* * Unsupported compiler, we'll likely use slower fallbacks... At least @@ -275,10 +280,12 @@ pg_atomic_init_u32(volatile pg_atomic_uint32 *ptr, uint32 val) } /* - * pg_atomic_write_u32 - unlocked write to atomic variable. + * pg_atomic_read_u32 - unlocked read from atomic variable. * - * The write is guaranteed to succeed as a whole, i.e. it's not possible to - * observe a partial write for any reader. + * The read is guaranteed to return a value as it has been written by this or + * another process at some point in the past. There's however no cache + * coherency interaction guaranteeing the value hasn't since been written to + * again. * * No barrier semantics. */ @@ -290,12 +297,10 @@ pg_atomic_read_u32(volatile pg_atomic_uint32 *ptr) } /* - * pg_atomic_read_u32 - unlocked read from atomic variable. + * pg_atomic_write_u32 - unlocked write to atomic variable. * - * The read is guaranteed to return a value as it has been written by this or - * another process at some point in the past. There's however no cache - * coherency interaction guaranteeing the value hasn't since been written to - * again. + * The write is guaranteed to succeed as a whole, i.e. it's not possible to + * observe a partial write for any reader. * * No barrier semantics. */ diff --git a/src/include/port/atomics/generic-xlc.h b/src/include/port/atomics/generic-xlc.h index 1c743f2bc8060..0ad9168ed2849 100644 --- a/src/include/port/atomics/generic-xlc.h +++ b/src/include/port/atomics/generic-xlc.h @@ -18,8 +18,6 @@ #if defined(HAVE_ATOMICS) -#include - #define PG_HAVE_ATOMIC_U32_SUPPORT typedef struct pg_atomic_uint32 { @@ -48,9 +46,6 @@ static inline bool pg_atomic_compare_exchange_u32_impl(volatile pg_atomic_uint32 *ptr, uint32 *expected, uint32 newval) { - bool ret; - uint64 current; - /* * xlc's documentation tells us: * "If __compare_and_swap is used as a locking primitive, insert a call to @@ -62,18 +57,15 @@ pg_atomic_compare_exchange_u32_impl(volatile pg_atomic_uint32 *ptr, * XXX: __compare_and_swap is defined to take signed parameters, but that * shouldn't matter since we don't perform any arithmetic operations. */ - current = (uint32)__compare_and_swap((volatile int*)ptr->value, - (int)*expected, (int)newval); - ret = current == *expected; - *expected = current; - return ret; + return __compare_and_swap((volatile int*)&ptr->value, + (int *)expected, (int)newval); } #define PG_HAVE_ATOMIC_FETCH_ADD_U32 static inline uint32 pg_atomic_fetch_add_u32_impl(volatile pg_atomic_uint32 *ptr, int32 add_) { - return __fetch_and_add(&ptr->value, add_); + return __fetch_and_add((volatile int *)&ptr->value, add_); } #ifdef PG_HAVE_ATOMIC_U64_SUPPORT @@ -83,23 +75,17 @@ static inline bool pg_atomic_compare_exchange_u64_impl(volatile pg_atomic_uint64 *ptr, uint64 *expected, uint64 newval) { - bool ret; - uint64 current; - __isync(); - current = (uint64)__compare_and_swaplp((volatile long*)ptr->value, - (long)*expected, (long)newval); - ret = current == *expected; - *expected = current; - return ret; + return __compare_and_swaplp((volatile long*)&ptr->value, + (long *)expected, (long)newval);; } #define PG_HAVE_ATOMIC_FETCH_ADD_U64 static inline uint64 pg_atomic_fetch_add_u64_impl(volatile pg_atomic_uint64 *ptr, int64 add_) { - return __fetch_and_addlp(&ptr->value, add_); + return __fetch_and_addlp((volatile long *)&ptr->value, add_); } #endif /* PG_HAVE_ATOMIC_U64_SUPPORT */ diff --git a/src/include/regex/regerrs.h b/src/include/regex/regerrs.h index 809b511266047..41e25f7ff00e5 100644 --- a/src/include/regex/regerrs.h +++ b/src/include/regex/regerrs.h @@ -75,7 +75,7 @@ }, { - REG_ETOOBIG, "REG_ETOOBIG", "nfa has too many states" + REG_ETOOBIG, "REG_ETOOBIG", "regular expression is too complex" }, { diff --git a/src/include/regex/regex.h b/src/include/regex/regex.h index 3020b0ff0f76d..5e1b692d26c13 100644 --- a/src/include/regex/regex.h +++ b/src/include/regex/regex.h @@ -152,7 +152,7 @@ typedef struct #define REG_INVARG 16 /* invalid argument to regex function */ #define REG_MIXED 17 /* character widths of regex and string differ */ #define REG_BADOPT 18 /* invalid embedded option */ -#define REG_ETOOBIG 19 /* nfa has too many states */ +#define REG_ETOOBIG 19 /* regular expression is too complex */ #define REG_ECOLORS 20 /* too many colors */ #define REG_CANCEL 21 /* operation cancelled */ /* two specials for debugging and testing */ diff --git a/src/include/regex/regguts.h b/src/include/regex/regguts.h index 2f3be1aa0ae22..734a72cdb9b5e 100644 --- a/src/include/regex/regguts.h +++ b/src/include/regex/regguts.h @@ -292,8 +292,10 @@ struct arc struct state *from; /* where it's from (and contained within) */ struct state *to; /* where it's to */ struct arc *outchain; /* link in *from's outs chain or free chain */ -#define freechain outchain + struct arc *outchainRev; /* back-link in *from's outs chain */ +#define freechain outchain /* we do not maintain "freechainRev" */ struct arc *inchain; /* link in *to's ins chain */ + struct arc *inchainRev; /* back-link in *to's ins chain */ struct arc *colorchain; /* link in color's arc chain */ struct arc *colorchainRev; /* back-link in color's arc chain */ }; @@ -335,9 +337,6 @@ struct nfa struct colormap *cm; /* the color map */ color bos[2]; /* colors, if any, assigned to BOS and BOL */ color eos[2]; /* colors, if any, assigned to EOS and EOL */ - size_t size; /* Current NFA size; differs from nstates as - * it also counts the number of states in - * children of this NFA. */ struct vars *v; /* simplifies compile error reporting */ struct nfa *parent; /* parent NFA, if any */ }; @@ -385,10 +384,16 @@ struct cnfa #define NULLCNFA(cnfa) ((cnfa).nstates == 0) /* - * Used to limit the maximum NFA size to something sane. [Tcl Bug 1810264] + * This symbol limits the transient heap space used by the regex compiler, + * and thereby also the maximum complexity of NFAs that we'll deal with. + * Currently we only count NFA states and arcs against this; the other + * transient data is generally not large enough to notice compared to those. + * Note that we do not charge anything for the final output data structures + * (the compacted NFA and the colormap). */ -#ifndef REG_MAX_STATES -#define REG_MAX_STATES 100000 +#ifndef REG_MAX_COMPILE_SPACE +#define REG_MAX_COMPILE_SPACE \ + (100000 * sizeof(struct state) + 100000 * sizeof(struct arcbatch)) #endif /* @@ -452,11 +457,15 @@ struct fns { void FUNCPTR(free, (regex_t *)); int FUNCPTR(cancel_requested, (void)); + int FUNCPTR(stack_too_deep, (void)); }; #define CANCEL_REQUESTED(re) \ ((*((struct fns *) (re)->re_fns)->cancel_requested) ()) +#define STACK_TOO_DEEP(re) \ + ((*((struct fns *) (re)->re_fns)->stack_too_deep) ()) + /* * the insides of a regex_t, hidden behind a void * @@ -470,7 +479,7 @@ struct guts size_t nsub; /* copy of re_nsub */ struct subre *tree; struct cnfa search; /* for fast preliminary search */ - int ntree; /* number of subre's, less one */ + int ntree; /* number of subre's, plus one */ struct colormap cmap; int FUNCPTR(compare, (const chr *, const chr *, size_t)); struct subre *lacons; /* lookahead-constraint vector */ diff --git a/src/include/replication/origin.h b/src/include/replication/origin.h index 5d294de60e43e..daa3b93a3ede8 100644 --- a/src/include/replication/origin.h +++ b/src/include/replication/origin.h @@ -10,9 +10,11 @@ #ifndef PG_ORIGIN_H #define PG_ORIGIN_H +#include "fmgr.h" +#include "access/xlog.h" #include "access/xlogdefs.h" +#include "access/xlogreader.h" #include "catalog/pg_replication_origin.h" -#include "replication/logical.h" typedef struct xl_replorigin_set { @@ -32,9 +34,9 @@ typedef struct xl_replorigin_drop #define InvalidRepOriginId 0 #define DoNotReplicateId PG_UINT16_MAX -extern PGDLLIMPORT RepOriginId replorigin_sesssion_origin; -extern PGDLLIMPORT XLogRecPtr replorigin_sesssion_origin_lsn; -extern PGDLLIMPORT TimestampTz replorigin_sesssion_origin_timestamp; +extern PGDLLIMPORT RepOriginId replorigin_session_origin; +extern PGDLLIMPORT XLogRecPtr replorigin_session_origin_lsn; +extern PGDLLIMPORT TimestampTz replorigin_session_origin_timestamp; /* API for querying & manipulating replication origins */ extern RepOriginId replorigin_by_name(char *name, bool missing_ok); diff --git a/src/include/rewrite/rowsecurity.h b/src/include/rewrite/rowsecurity.h index 523c56e59821b..4af244d311401 100644 --- a/src/include/rewrite/rowsecurity.h +++ b/src/include/rewrite/rowsecurity.h @@ -19,7 +19,6 @@ typedef struct RowSecurityPolicy { - Oid policy_id; /* OID of the policy */ char *policy_name; /* Name of the policy */ char polcmd; /* Type of command policy is for */ ArrayType *roles; /* Array of roles policy is for */ @@ -41,7 +40,7 @@ extern PGDLLIMPORT row_security_policy_hook_type row_security_policy_hook_permis extern PGDLLIMPORT row_security_policy_hook_type row_security_policy_hook_restrictive; -extern void get_row_security_policies(Query *root, CmdType commandType, +extern void get_row_security_policies(Query *root, RangeTblEntry *rte, int rt_index, List **securityQuals, List **withCheckOptions, bool *hasRowSecurity, bool *hasSubLinks); diff --git a/src/include/storage/lwlock.h b/src/include/storage/lwlock.h index cff3b9992218e..e360fc0393c4d 100644 --- a/src/include/storage/lwlock.h +++ b/src/include/storage/lwlock.h @@ -50,13 +50,13 @@ typedef struct LWLock slock_t mutex; /* Protects LWLock and queue of PGPROCs */ uint16 tranche; /* tranche ID */ - pg_atomic_uint32 state; /* state of exlusive/nonexclusive lockers */ + pg_atomic_uint32 state; /* state of exclusive/nonexclusive lockers */ #ifdef LOCK_DEBUG pg_atomic_uint32 nwaiters; /* number of waiters */ #endif dlist_head waiters; /* list of waiting PGPROCs */ #ifdef LOCK_DEBUG - struct PGPROC *owner; /* last exlusive owner of the lock */ + struct PGPROC *owner; /* last exclusive owner of the lock */ #endif } LWLock; @@ -135,8 +135,8 @@ extern PGDLLIMPORT LWLockPadded *MainLWLockArray; #define CommitTsControlLock (&MainLWLockArray[38].lock) #define CommitTsLock (&MainLWLockArray[39].lock) #define ReplicationOriginLock (&MainLWLockArray[40].lock) - -#define NUM_INDIVIDUAL_LWLOCKS 41 +#define MultiXactTruncationLock (&MainLWLockArray[41].lock) +#define NUM_INDIVIDUAL_LWLOCKS 42 /* * It's a bit odd to declare NUM_BUFFER_PARTITIONS and NUM_LOCK_PARTITIONS @@ -182,10 +182,10 @@ extern bool LWLockAcquire(LWLock *lock, LWLockMode mode); extern bool LWLockConditionalAcquire(LWLock *lock, LWLockMode mode); 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 bool LWLockHeldByMe(LWLock *lock); -extern bool LWLockAcquireWithVar(LWLock *lock, uint64 *valptr, uint64 val); extern bool LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval); extern void LWLockUpdateVar(LWLock *lock, uint64 *valptr, uint64 value); diff --git a/src/include/storage/pg_shmem.h b/src/include/storage/pg_shmem.h index 0b169aff69d88..9dbcbce0692f8 100644 --- a/src/include/storage/pg_shmem.h +++ b/src/include/storage/pg_shmem.h @@ -61,6 +61,7 @@ extern void *UsedShmemSegAddr; #ifdef EXEC_BACKEND extern void PGSharedMemoryReAttach(void); +extern void PGSharedMemoryNoReAttach(void); #endif extern PGShmemHeader *PGSharedMemoryCreate(Size size, bool makePrivate, diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h index 30f28b088ab2d..b0d74f115a1bb 100644 --- a/src/include/storage/s_lock.h +++ b/src/include/storage/s_lock.h @@ -380,12 +380,12 @@ tas(volatile slock_t *lock) : "=r"(_res), "+m"(*lock) : "r"(lock) : "memory"); -#if defined(__sparcv7) +#if defined(__sparcv7) || defined(__sparc_v7__) /* * No stbar or membar available, luckily no actually produced hardware * requires a barrier. */ -#elif defined(__sparcv8) +#elif defined(__sparcv8) || defined(__sparc_v8__) /* stbar is available (and required for both PSO, RMO), membar isn't */ __asm__ __volatile__ ("stbar \n":::"memory"); #else @@ -398,13 +398,13 @@ tas(volatile slock_t *lock) return (int) _res; } -#if defined(__sparcv7) +#if defined(__sparcv7) || defined(__sparc_v7__) /* * No stbar or membar available, luckily no actually produced hardware * requires a barrier. We fall through to the default gcc definition of * S_UNLOCK in this case. */ -#elif defined(__sparcv8) +#elif defined(__sparcv8) || defined(__sparc_v8__) /* stbar is available (and required for both PSO, RMO), membar isn't */ #define S_UNLOCK(lock) \ do \ @@ -443,6 +443,12 @@ typedef unsigned int slock_t; * NOTE: per the Enhanced PowerPC Architecture manual, v1.0 dated 7-May-2002, * an isync is a sufficient synchronization barrier after a lwarx/stwcx loop. * On newer machines, we can use lwsync instead for better performance. + * + * Ordinarily, we'd code the branches here using GNU-style local symbols, that + * is "1f" referencing "1:" and so on. But some people run gcc on AIX with + * IBM's assembler as backend, and IBM's assembler doesn't do local symbols. + * So hand-code the branch offsets; fortunately, all PPC instructions are + * exactly 4 bytes each, so it's not too hard to count. */ static __inline__ int tas(volatile slock_t *lock) @@ -457,20 +463,18 @@ tas(volatile slock_t *lock) " lwarx %0,0,%3 \n" #endif " cmpwi %0,0 \n" -" bne 1f \n" +" bne $+16 \n" /* branch to li %1,1 */ " addi %0,%0,1 \n" " stwcx. %0,0,%3 \n" -" beq 2f \n" -"1: li %1,1 \n" -" b 3f \n" -"2: \n" +" beq $+12 \n" /* branch to lwsync/isync */ +" li %1,1 \n" +" b $+12 \n" /* branch to end of asm sequence */ #ifdef USE_PPC_LWSYNC " lwsync \n" #else " isync \n" #endif " li %1,0 \n" -"3: \n" : "=&r"(_t), "=r"(_res), "+m"(*lock) : "r"(lock) diff --git a/src/include/storage/shm_mq.h b/src/include/storage/shm_mq.h index 1a2ba040cb43a..7621a358ab469 100644 --- a/src/include/storage/shm_mq.h +++ b/src/include/storage/shm_mq.h @@ -65,6 +65,9 @@ extern void shm_mq_set_handle(shm_mq_handle *, BackgroundWorkerHandle *); /* Break connection. */ extern void shm_mq_detach(shm_mq *); +/* Get the shm_mq from handle. */ +extern shm_mq *shm_mq_get_queue(shm_mq_handle *mqh); + /* Send or receive messages. */ extern shm_mq_result shm_mq_send(shm_mq_handle *mqh, Size nbytes, const void *data, bool nowait); diff --git a/src/include/storage/spin.h b/src/include/storage/spin.h index dc6856e4aca45..4674f48164e47 100644 --- a/src/include/storage/spin.h +++ b/src/include/storage/spin.h @@ -25,15 +25,10 @@ * Callers must beware that the macro argument may be evaluated multiple * times! * - * CAUTION: Care must be taken to ensure that loads and stores of - * shared memory values are not rearranged around spinlock acquire - * and release. This is done using the "volatile" qualifier: the C - * standard states that loads and stores of volatile objects cannot - * be rearranged *with respect to other volatile objects*. The - * spinlock is always written through a volatile pointer by the - * spinlock macros, but this is not sufficient by itself: code that - * protects shared data with a spinlock MUST reference that shared - * data through a volatile pointer. + * Load and store operations in calling code are guaranteed not to be + * reordered with respect to these operations, because they include a + * compiler barrier. (Before PostgreSQL 9.5, callers needed to use a + * volatile qualifier to access data protected by spinlocks.) * * Keep in mind the coding rule that spinlocks must not be held for more * than a few instructions. In particular, we assume it is not possible diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index 98556725c8e02..95f2a848d39d3 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -566,6 +566,8 @@ extern Datum language_handler_in(PG_FUNCTION_ARGS); extern Datum language_handler_out(PG_FUNCTION_ARGS); extern Datum fdw_handler_in(PG_FUNCTION_ARGS); extern Datum fdw_handler_out(PG_FUNCTION_ARGS); +extern Datum tsm_handler_in(PG_FUNCTION_ARGS); +extern Datum tsm_handler_out(PG_FUNCTION_ARGS); extern Datum internal_in(PG_FUNCTION_ARGS); extern Datum internal_out(PG_FUNCTION_ARGS); extern Datum opaque_in(PG_FUNCTION_ARGS); @@ -1118,6 +1120,10 @@ extern Datum set_config_by_name(PG_FUNCTION_ARGS); extern Datum show_all_settings(PG_FUNCTION_ARGS); extern Datum show_all_file_settings(PG_FUNCTION_ARGS); +/* rls.c */ +extern Datum row_security_active(PG_FUNCTION_ARGS); +extern Datum row_security_active_name(PG_FUNCTION_ARGS); + /* lockfuncs.c */ extern Datum pg_lock_status(PG_FUNCTION_ARGS); extern Datum pg_advisory_lock_int8(PG_FUNCTION_ARGS); @@ -1212,6 +1218,12 @@ extern Datum ginqueryarrayextract(PG_FUNCTION_ARGS); extern Datum ginarrayconsistent(PG_FUNCTION_ARGS); extern Datum ginarraytriconsistent(PG_FUNCTION_ARGS); +/* access/tablesample/bernoulli.c */ +extern Datum tsm_bernoulli_handler(PG_FUNCTION_ARGS); + +/* access/tablesample/system.c */ +extern Datum tsm_system_handler(PG_FUNCTION_ARGS); + /* access/transam/twophase.c */ extern Datum pg_prepared_xact(PG_FUNCTION_ARGS); diff --git a/src/include/utils/date.h b/src/include/utils/date.h index c076fb846a81c..dae10910a9550 100644 --- a/src/include/utils/date.h +++ b/src/include/utils/date.h @@ -90,6 +90,7 @@ typedef struct /* date.c */ extern double date2timestamp_no_overflow(DateADT dateVal); +extern void EncodeSpecialDate(DateADT dt, char *str); extern Datum date_in(PG_FUNCTION_ARGS); extern Datum date_out(PG_FUNCTION_ARGS); diff --git a/src/include/utils/datetime.h b/src/include/utils/datetime.h index 5b86ca10ef672..e9a1ecebeb79d 100644 --- a/src/include/utils/datetime.h +++ b/src/include/utils/datetime.h @@ -326,6 +326,7 @@ extern void EncodeDateOnly(struct pg_tm * tm, int style, char *str); extern void EncodeTimeOnly(struct pg_tm * tm, fsec_t fsec, bool print_tz, int tz, int style, char *str); extern void EncodeDateTime(struct pg_tm * tm, fsec_t fsec, bool print_tz, int tz, const char *tzn, int style, char *str); extern void EncodeInterval(struct pg_tm * tm, fsec_t fsec, int style, char *str); +extern void EncodeSpecialTimestamp(Timestamp dt, char *str); extern int ValidateDate(int fmask, bool isjulian, bool is2digits, bool bc, struct pg_tm * tm); diff --git a/src/include/utils/guc_tables.h b/src/include/utils/guc_tables.h index 7a58ddb10b6b9..8da2e78a4739f 100644 --- a/src/include/utils/guc_tables.h +++ b/src/include/utils/guc_tables.h @@ -81,6 +81,7 @@ enum config_group LOGGING_WHERE, LOGGING_WHEN, LOGGING_WHAT, + PROCESS_TITLE, STATS, STATS_MONITORING, STATS_COLLECTOR, diff --git a/src/include/utils/jsonapi.h b/src/include/utils/jsonapi.h index 296d20af838a6..55cfb791fa777 100644 --- a/src/include/utils/jsonapi.h +++ b/src/include/utils/jsonapi.h @@ -103,6 +103,13 @@ typedef struct JsonSemAction */ extern void pg_parse_json(JsonLexContext *lex, JsonSemAction *sem); +/* + * json_count_array_elements performs a fast secondary parse to determine the + * number of elements in passed array lex context. It should be called from an + * array_start action. + */ +extern int json_count_array_elements(JsonLexContext *lex); + /* * constructors for JsonLexContext, with or without strval element. * If supplied, the strval element will contain a de-escaped version of diff --git a/src/include/utils/lsyscache.h b/src/include/utils/lsyscache.h index a40c9b12732da..971153843296d 100644 --- a/src/include/utils/lsyscache.h +++ b/src/include/utils/lsyscache.h @@ -156,7 +156,6 @@ extern void free_attstatsslot(Oid atttype, extern char *get_namespace_name(Oid nspid); extern char *get_namespace_name_or_temp(Oid nspid); extern Oid get_range_subtype(Oid rangeOid); -extern char *get_tablesample_method_name(Oid tsmid); #define type_is_array(typid) (get_element_type(typid) != InvalidOid) /* type_is_array_domain accepts both plain arrays and domains over arrays */ diff --git a/src/include/utils/memutils.h b/src/include/utils/memutils.h index 9e84d01103f3a..f0fe0f449cac4 100644 --- a/src/include/utils/memutils.h +++ b/src/include/utils/memutils.h @@ -150,4 +150,12 @@ extern MemoryContext AllocSetContextCreate(MemoryContext parent, #define ALLOCSET_SMALL_INITSIZE (1 * 1024) #define ALLOCSET_SMALL_MAXSIZE (8 * 1024) +/* + * Threshold above which a request in an AllocSet context is certain to be + * allocated separately (and thereby have constant allocation overhead). + * Few callers should be interested in this, but tuplesort/tuplestore need + * to know it. + */ +#define ALLOCSET_SEPARATE_THRESHOLD 8192 + #endif /* MEMUTILS_H */ diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h index 3b5613852bf8c..8e91033a41dd6 100644 --- a/src/include/utils/pg_locale.h +++ b/src/include/utils/pg_locale.h @@ -44,6 +44,7 @@ extern void assign_locale_time(const char *newval, void *extra); extern bool check_locale(int category, const char *locale, char **canonname); extern char *pg_perm_setlocale(int category, const char *locale); +extern void check_strxfrm_bug(void); extern bool lc_collate_is_c(Oid collation); extern bool lc_ctype_is_c(Oid collation); diff --git a/src/include/utils/plancache.h b/src/include/utils/plancache.h index 90a018082f096..4b9a0c68cee4b 100644 --- a/src/include/utils/plancache.h +++ b/src/include/utils/plancache.h @@ -110,8 +110,7 @@ typedef struct CachedPlanSource double total_custom_cost; /* total cost of custom plans so far */ int num_custom_plans; /* number of plans included in total */ bool hasRowSecurity; /* planned with row security? */ - int row_security_env; /* row security setting when planned */ - bool rowSecurityDisabled; /* is row security disabled? */ + bool row_security_env; /* row security setting when planned */ } CachedPlanSource; /* diff --git a/src/include/utils/portal.h b/src/include/utils/portal.h index 1267b9e061c6f..c36910734939a 100644 --- a/src/include/utils/portal.h +++ b/src/include/utils/portal.h @@ -119,12 +119,16 @@ typedef struct PortalData MemoryContext heap; /* subsidiary memory for portal */ ResourceOwner resowner; /* resources owned by portal */ void (*cleanup) (Portal portal); /* cleanup hook */ - SubTransactionId createSubid; /* the ID of the creating subxact */ /* - * if createSubid is InvalidSubTransactionId, the portal is held over from - * a previous transaction + * State data for remembering which subtransaction(s) the portal was + * created or used in. If the portal is held over from a previous + * transaction, both subxids are InvalidSubTransactionId. Otherwise, + * createSubid is the creating subxact and activeSubid is the last subxact + * in which we ran the portal. */ + SubTransactionId createSubid; /* the creating subxact */ + SubTransactionId activeSubid; /* the last subxact with activity */ /* The query or queries the portal will execute */ const char *sourceText; /* text of query (as of 8.4, never NULL) */ @@ -201,12 +205,14 @@ extern void AtSubCommit_Portals(SubTransactionId mySubid, ResourceOwner parentXactOwner); extern void AtSubAbort_Portals(SubTransactionId mySubid, SubTransactionId parentSubid, + ResourceOwner myXactOwner, ResourceOwner parentXactOwner); extern void AtSubCleanup_Portals(SubTransactionId mySubid); extern Portal CreatePortal(const char *name, bool allowDup, bool dupSilent); extern Portal CreateNewPortal(void); extern void PinPortal(Portal portal); extern void UnpinPortal(Portal portal); +extern void MarkPortalActive(Portal portal); extern void MarkPortalDone(Portal portal); extern void MarkPortalFailed(Portal portal); extern void PortalDrop(Portal portal, bool isTopCommit); diff --git a/src/include/utils/rls.h b/src/include/utils/rls.h index 3770ddc2163ea..3e75f06d6cfc7 100644 --- a/src/include/utils/rls.h +++ b/src/include/utils/rls.h @@ -14,15 +14,7 @@ #define RLS_H /* GUC variable */ -extern int row_security; - -/* Possible values for row_security GUC */ -typedef enum RowSecurityConfigType -{ - ROW_SECURITY_OFF, /* RLS never applied- error thrown if no priv */ - ROW_SECURITY_ON, /* normal case, RLS applied for regular users */ - ROW_SECURITY_FORCE /* RLS applied for superusers and table owners */ -} RowSecurityConfigType; +extern bool row_security; /* * Used by callers of check_enable_rls. @@ -30,7 +22,7 @@ typedef enum RowSecurityConfigType * RLS could be completely disabled on the tables involved in the query, * which is the simple case, or it may depend on the current environment * (the role which is running the query or the value of the row_security - * GUC- on, off, or force), or it might be simply enabled as usual. + * GUC), or it might be simply enabled as usual. * * If RLS isn't on the table involved then RLS_NONE is returned to indicate * that we don't need to worry about invalidating the query plan for RLS diff --git a/src/include/utils/selfuncs.h b/src/include/utils/selfuncs.h index b3d8017b8bda7..a7433d9c0f31c 100644 --- a/src/include/utils/selfuncs.h +++ b/src/include/utils/selfuncs.h @@ -164,6 +164,7 @@ extern Datum icregexnejoinsel(PG_FUNCTION_ARGS); extern Datum nlikejoinsel(PG_FUNCTION_ARGS); extern Datum icnlikejoinsel(PG_FUNCTION_ARGS); +extern Selectivity boolvarsel(PlannerInfo *root, Node *arg, int varRelid); extern Selectivity booltestsel(PlannerInfo *root, BoolTestType booltesttype, Node *arg, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo); diff --git a/src/include/utils/syscache.h b/src/include/utils/syscache.h index f06f03a996f26..18404e266eb63 100644 --- a/src/include/utils/syscache.h +++ b/src/include/utils/syscache.h @@ -81,8 +81,6 @@ enum SysCacheIdentifier REPLORIGNAME, RULERELNAME, STATRELATTINH, - TABLESAMPLEMETHODNAME, - TABLESAMPLEMETHODOID, TABLESPACEOID, TRFOID, TRFTYPELANG, diff --git a/src/interfaces/ecpg/ecpglib/data.c b/src/interfaces/ecpg/ecpglib/data.c index 8d36484f73aa2..82ab4aaf86885 100644 --- a/src/interfaces/ecpg/ecpglib/data.c +++ b/src/interfaces/ecpg/ecpglib/data.c @@ -423,27 +423,13 @@ ecpg_get_data(const PGresult *results, int act_tuple, int act_field, int lineno, case ECPGt_bool: if (pval[0] == 'f' && pval[1] == '\0') { - if (offset == sizeof(char)) - *((char *) (var + offset * act_tuple)) = false; - else if (offset == sizeof(int)) - *((int *) (var + offset * act_tuple)) = false; - else - ecpg_raise(lineno, ECPG_CONVERT_BOOL, - ECPG_SQLSTATE_DATATYPE_MISMATCH, - NULL); + *((bool *) (var + offset * act_tuple)) = false; pval++; break; } else if (pval[0] == 't' && pval[1] == '\0') { - if (offset == sizeof(char)) - *((char *) (var + offset * act_tuple)) = true; - else if (offset == sizeof(int)) - *((int *) (var + offset * act_tuple)) = true; - else - ecpg_raise(lineno, ECPG_CONVERT_BOOL, - ECPG_SQLSTATE_DATATYPE_MISMATCH, - NULL); + *((bool *) (var + offset * act_tuple)) = true; pval++; break; } diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c index 9a56a5cd4acae..6181108710868 100644 --- a/src/interfaces/ecpg/ecpglib/execute.c +++ b/src/interfaces/ecpg/ecpglib/execute.c @@ -146,7 +146,7 @@ next_insert(char *text, int pos, bool questionmarks) } static bool -ecpg_type_infocache_push(struct ECPGtype_information_cache ** cache, int oid, bool isarray, int lineno) +ecpg_type_infocache_push(struct ECPGtype_information_cache ** cache, int oid, enum ARRAY_TYPE isarray, int lineno) { struct ECPGtype_information_cache *new_entry = (struct ECPGtype_information_cache *) ecpg_alloc(sizeof(struct ECPGtype_information_cache), lineno); @@ -752,18 +752,8 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari { strcpy(mallocedval, "{"); - if (var->offset == sizeof(char)) - for (element = 0; element < asize; element++) - sprintf(mallocedval + strlen(mallocedval), "%c,", (((char *) var->value)[element]) ? 't' : 'f'); - - /* - * this is necessary since sizeof(C++'s bool)==sizeof(int) - */ - else if (var->offset == sizeof(int)) - for (element = 0; element < asize; element++) - sprintf(mallocedval + strlen(mallocedval), "%c,", (((int *) var->value)[element]) ? 't' : 'f'); - else - ecpg_raise(lineno, ECPG_CONVERT_BOOL, ECPG_SQLSTATE_DATATYPE_MISMATCH, NULL); + for (element = 0; element < asize; element++) + sprintf(mallocedval + strlen(mallocedval), "%c,", (((bool *) var->value)[element]) ? 't' : 'f'); strcpy(mallocedval + strlen(mallocedval) - 1, "}"); } diff --git a/src/interfaces/ecpg/ecpglib/extern.h b/src/interfaces/ecpg/ecpglib/extern.h index 1fa21fd84ace4..263e0014fde93 100644 --- a/src/interfaces/ecpg/ecpglib/extern.h +++ b/src/interfaces/ecpg/ecpglib/extern.h @@ -44,7 +44,7 @@ struct ECPGtype_information_cache { struct ECPGtype_information_cache *next; int oid; - bool isarray; + enum ARRAY_TYPE isarray; }; /* structure to store one statement */ diff --git a/src/interfaces/ecpg/ecpglib/po/es.po b/src/interfaces/ecpg/ecpglib/po/es.po index 1fce460c7304c..ca8617de59678 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 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:37+0000\n" +"POT-Creation-Date: 2015-10-04 00:37+0000\n" "PO-Revision-Date: 2014-12-16 12:12-0300\n" "Last-Translator: Emanuel Calvo Franco \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -18,183 +18,183 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: connect.c:231 +#: connect.c:237 msgid "empty message text" msgstr "mensaje de texto vacío" -#: connect.c:384 connect.c:413 connect.c:621 +#: connect.c:401 connect.c:430 connect.c:638 msgid "" msgstr "" -#: descriptor.c:807 misc.c:113 +#: descriptor.c:833 misc.c:120 msgid "NULL" msgstr "NULL" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:26 +#: error.c:33 #, c-format msgid "no data found on line %d" msgstr "no se encontraron datos en la línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:33 +#: error.c:40 #, c-format msgid "out of memory on line %d" msgstr "memoria agotada en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:40 +#: error.c:47 #, c-format msgid "unsupported type \"%s\" on line %d" msgstr "tipo no soportado «%s» en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:47 +#: error.c:54 #, c-format msgid "too many arguments on line %d" msgstr "demasiados argumentos en la línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:54 +#: error.c:61 #, c-format msgid "too few arguments on line %d" msgstr "muy pocos argumentos en la línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:61 +#: error.c:68 #, c-format msgid "invalid input syntax for type int: \"%s\", on line %d" msgstr "sintaxis de entrada no válida para el tipo entero: «%s», en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:68 +#: error.c:75 #, c-format msgid "invalid input syntax for type unsigned int: \"%s\", on line %d" msgstr "sintaxis de entrada no válida para el tipo entero sin signo: «%s», en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:75 +#: error.c:82 #, c-format msgid "invalid input syntax for floating-point type: \"%s\", on line %d" msgstr "sintaxis de entrada no válida para el tipo de coma flotante: «%s», en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:83 +#: error.c:90 #, c-format msgid "invalid syntax for type boolean: \"%s\", on line %d" msgstr "sintaxis no válida para el tipo booleano: «%s», en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:88 +#: error.c:95 #, c-format msgid "could not convert boolean value: size mismatch, on line %d" msgstr "no se puede convertir el valor booleano: tamaño incorrecto, en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:95 +#: error.c:102 #, c-format msgid "empty query on line %d" msgstr "consulta vacía en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:102 +#: error.c:109 #, c-format msgid "null value without indicator on line %d" msgstr "valor nulo sin indicador en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:109 +#: error.c:116 #, c-format msgid "variable does not have an array type on line %d" msgstr "la variable no tiene tipo array en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:116 +#: error.c:123 #, c-format msgid "data read from server is not an array on line %d" msgstr "el dato leído del servidor no es un array en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:123 +#: error.c:130 #, c-format msgid "inserting an array of variables is not supported on line %d" msgstr "la inserción de un array de variables no está soportado en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:130 +#: error.c:137 #, c-format msgid "connection \"%s\" does not exist on line %d" msgstr "conexión «%s» no existe en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:137 +#: error.c:144 #, c-format msgid "not connected to connection \"%s\" on line %d" msgstr "no conectada a la conexión «%s» en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:144 +#: error.c:151 #, c-format msgid "invalid statement name \"%s\" on line %d" msgstr "nombre sentencia no válida «%s» en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:151 +#: error.c:158 #, c-format msgid "descriptor \"%s\" not found on line %d" msgstr "descriptor «%s» no encontrado en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:158 +#: error.c:165 #, c-format msgid "descriptor index out of range on line %d" msgstr "índice de descriptor fuera de rango en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:165 +#: error.c:172 #, c-format msgid "unrecognized descriptor item \"%s\" on line %d" msgstr "elemento de descriptor no reconocido «%s» en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:172 +#: error.c:179 #, c-format msgid "variable does not have a numeric type on line %d" msgstr "la variable no tiene un tipo numérico en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:179 +#: error.c:186 #, c-format msgid "variable does not have a character type on line %d" msgstr "la variable no tiene un tipo textual en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:186 +#: error.c:193 #, c-format msgid "error in transaction processing on line %d" msgstr "error en el procesamiento de transacción en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:193 +#: error.c:200 #, c-format msgid "could not connect to database \"%s\" on line %d" msgstr "no se pudo conectar a la base de datos «%s» en línea %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:200 +#: error.c:207 #, c-format msgid "SQL error %d on line %d" msgstr "error SQL %d en línea %d" -#: error.c:240 +#: error.c:254 msgid "the connection to the server was lost" msgstr "se ha perdido la conexión al servidor" -#: error.c:327 +#: error.c:347 #, c-format msgid "SQL error: %s\n" msgstr "error SQL: %s\n" -#: execute.c:2003 +#: execute.c:1962 msgid "" msgstr "" diff --git a/src/interfaces/ecpg/ecpglib/po/pt_BR.po b/src/interfaces/ecpg/ecpglib/po/pt_BR.po index fef4a3bdf4e0c..cc54e749c6a98 100644 --- a/src/interfaces/ecpg/ecpglib/po/pt_BR.po +++ b/src/interfaces/ecpg/ecpglib/po/pt_BR.po @@ -6,9 +6,9 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-05-17 15:50-0300\n" +"POT-Creation-Date: 2015-09-17 22:32-0300\n" "PO-Revision-Date: 2009-02-09 13:00-0200\n" "Last-Translator: Fernando Ike de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -17,183 +17,183 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: connect.c:231 +#: connect.c:237 msgid "empty message text" msgstr "mensagem vazia" -#: connect.c:384 connect.c:413 connect.c:621 +#: connect.c:401 connect.c:430 connect.c:638 msgid "" msgstr "" -#: descriptor.c:807 misc.c:113 +#: descriptor.c:833 misc.c:120 msgid "NULL" msgstr "NULL" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:26 +#: error.c:33 #, c-format msgid "no data found on line %d" msgstr "nenhum dado encontrado na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:33 +#: error.c:40 #, c-format msgid "out of memory on line %d" msgstr "sem memória na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:40 +#: error.c:47 #, c-format msgid "unsupported type \"%s\" on line %d" msgstr "tipo \"%s\" não é suportado na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:47 +#: error.c:54 #, c-format msgid "too many arguments on line %d" msgstr "muitos argumentos na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:54 +#: error.c:61 #, c-format msgid "too few arguments on line %d" msgstr "poucos argumentos na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:61 +#: error.c:68 #, c-format msgid "invalid input syntax for type int: \"%s\", on line %d" msgstr "sintaxe de entrada é inválida para tipo inteiro: \"%s\", na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:68 +#: error.c:75 #, c-format msgid "invalid input syntax for type unsigned int: \"%s\", on line %d" msgstr "sintaxe de entrada é inválida para tipo inteiro não-sinalizado: \"%s\", na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:75 +#: error.c:82 #, c-format msgid "invalid input syntax for floating-point type: \"%s\", on line %d" msgstr "sintaxe de entrada é inválida para tipo ponto flutuante: \"%s\", na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:83 +#: error.c:90 #, c-format msgid "invalid syntax for type boolean: \"%s\", on line %d" msgstr "sintaxe de entrada é inválida par tipo booleano: \"%s\", na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:88 +#: error.c:95 #, c-format msgid "could not convert boolean value: size mismatch, on line %d" msgstr "não pôde converter valor booleano: tamanho não corresponde, na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:95 +#: error.c:102 #, c-format msgid "empty query on line %d" msgstr "consulta vazia na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:102 +#: error.c:109 #, c-format msgid "null value without indicator on line %d" msgstr "valor nulo sem indicador na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:109 +#: error.c:116 #, c-format msgid "variable does not have an array type on line %d" msgstr "variável não tem um tipo matriz na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:116 +#: error.c:123 #, c-format msgid "data read from server is not an array on line %d" msgstr "dado lido do servidor não é uma matriz na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:123 +#: error.c:130 #, c-format msgid "inserting an array of variables is not supported on line %d" msgstr "inserir uma matriz de variáveis não é suportado na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:130 +#: error.c:137 #, c-format msgid "connection \"%s\" does not exist on line %d" msgstr "conexão \"%s\" não existe na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:137 +#: error.c:144 #, c-format msgid "not connected to connection \"%s\" on line %d" msgstr "não está conectado a conexão \"%s\" na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:144 +#: error.c:151 #, c-format msgid "invalid statement name \"%s\" on line %d" msgstr "nome de comando \"%s\" é inválido na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:151 +#: error.c:158 #, c-format msgid "descriptor \"%s\" not found on line %d" msgstr "descritor \"%s\" não foi encontrado na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:158 +#: error.c:165 #, c-format msgid "descriptor index out of range on line %d" msgstr "índice do descritor está fora do intervalo na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:165 +#: error.c:172 #, c-format msgid "unrecognized descriptor item \"%s\" on line %d" msgstr "item do descritor \"%s\" é desconhecido na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:172 +#: error.c:179 #, c-format msgid "variable does not have a numeric type on line %d" msgstr "variável não tem um tipo numérico na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:179 +#: error.c:186 #, c-format msgid "variable does not have a character type on line %d" msgstr "variável não tem um tipo caracter na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:186 +#: error.c:193 #, c-format msgid "error in transaction processing on line %d" msgstr "erro ao processar transação na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:193 +#: error.c:200 #, c-format msgid "could not connect to database \"%s\" on line %d" msgstr "não pôde connectar ao banco de dados \"%s\" na linha %d" #. translator: this string will be truncated at 149 characters expanded. -#: error.c:200 +#: error.c:207 #, c-format msgid "SQL error %d on line %d" msgstr "Erro SQL %d na linha %d" -#: error.c:240 +#: error.c:254 msgid "the connection to the server was lost" msgstr "a conexão com servidor foi perdida" -#: error.c:327 +#: error.c:347 #, c-format msgid "SQL error: %s\n" msgstr "Erro SQL: %s\n" -#: execute.c:2003 +#: execute.c:1972 msgid "" msgstr "" diff --git a/src/interfaces/ecpg/pgtypeslib/dt_common.c b/src/interfaces/ecpg/pgtypeslib/dt_common.c index 7fe29820cf037..01cdfa9b3e01b 100644 --- a/src/interfaces/ecpg/pgtypeslib/dt_common.c +++ b/src/interfaces/ecpg/pgtypeslib/dt_common.c @@ -123,8 +123,8 @@ static datetkn datetktbl[] = { {"dec", MONTH, 12}, {"december", MONTH, 12}, {"dnt", TZ, 3600}, /* Dansk Normal Tid */ - {"dow", RESERV, DTK_DOW}, /* day of week */ - {"doy", RESERV, DTK_DOY}, /* day of year */ + {"dow", UNITS, DTK_DOW}, /* day of week */ + {"doy", UNITS, DTK_DOY}, /* day of year */ {"dst", DTZMOD, SECS_PER_HOUR}, #if 0 {"dusst", DTZ, 21600}, /* Dushanbe Summer Time */ @@ -206,7 +206,7 @@ static datetkn datetktbl[] = { {"irkst", DTZ, 32400}, /* Irkutsk Summer Time */ {"irkt", TZ, 28800}, /* Irkutsk Time */ {"irt", TZ, 12600}, /* Iran Time */ - {"isodow", RESERV, DTK_ISODOW}, /* ISO day of week, Sunday == 7 */ + {"isodow", UNITS, DTK_ISODOW}, /* ISO day of week, Sunday == 7 */ #if 0 isst #endif diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer index 8cc3844b73470..16359a309b7b9 100644 --- a/src/interfaces/ecpg/preproc/ecpg.trailer +++ b/src/interfaces/ecpg/preproc/ecpg.trailer @@ -1311,7 +1311,7 @@ ECPGTypedef: TYPE_P if (auto_create_c == false) $$ = cat_str(7, mm_strdup("/* exec sql type"), mm_strdup($3), mm_strdup("is"), mm_strdup($5.type_str), mm_strdup($6.str), $7, mm_strdup("*/")); else - $$ = cat_str(6, mm_strdup("typedef "), mm_strdup($5.type_str), *$7?mm_strdup("*"):mm_strdup(""), mm_strdup($6.str), mm_strdup($3), mm_strdup(";")); + $$ = cat_str(6, mm_strdup("typedef "), mm_strdup($5.type_str), *$7?mm_strdup("*"):mm_strdup(""), mm_strdup($3), mm_strdup($6.str), mm_strdup(";")); } ; diff --git a/src/interfaces/ecpg/preproc/po/es.po b/src/interfaces/ecpg/preproc/po/es.po index 0203790314175..6316e4c14cd5a 100644 --- a/src/interfaces/ecpg/preproc/po/es.po +++ b/src/interfaces/ecpg/preproc/po/es.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: ecpg (PostgreSQL 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:38+0000\n" +"POT-Creation-Date: 2015-10-04 00:38+0000\n" "PO-Revision-Date: 2014-12-15 15:22-0300\n" "Last-Translator: Álvaro Herrera \n" @@ -31,27 +31,27 @@ msgstr "la variable «%s» debe tener tipo numérico" msgid "descriptor \"%s\" does not exist" msgstr "no existe el descriptor «%s»" -#: descriptor.c:161 descriptor.c:210 +#: descriptor.c:161 descriptor.c:212 #, c-format msgid "descriptor header item \"%d\" does not exist" msgstr "no existe el descriptor del elemento de cabecera «%d»" -#: descriptor.c:182 +#: descriptor.c:183 #, c-format msgid "nullable is always 1" msgstr "nullable es siempre 1" -#: descriptor.c:185 +#: descriptor.c:186 #, c-format msgid "key_member is always 0" msgstr "key_member es siempre 0" -#: descriptor.c:277 +#: descriptor.c:279 #, c-format msgid "descriptor item \"%s\" is not implemented" msgstr "elemento del descriptor «%s» no está implementado" -#: descriptor.c:287 +#: descriptor.c:289 #, c-format msgid "descriptor item \"%s\" cannot be set" msgstr "no se puede establecer el elemento del descriptor «%s»" @@ -224,107 +224,107 @@ msgstr "%s: no se especificaron archivos de entrada\n" msgid "cursor \"%s\" has been declared but not opened" msgstr "el cursor «%s» fue declarado pero no abierto" -#: ecpg.c:483 preproc.y:125 +#: ecpg.c:483 preproc.y:127 #, c-format msgid "could not remove output file \"%s\"\n" msgstr "no se pudo eliminar el archivo de salida «%s»\n" -#: pgc.l:421 +#: pgc.l:428 #, c-format msgid "unterminated /* comment" msgstr "comentario /* no cerrado" -#: pgc.l:434 +#: pgc.l:441 #, c-format msgid "invalid bit string literal" msgstr "cadena de bits no válida" -#: pgc.l:443 +#: pgc.l:450 #, c-format msgid "unterminated bit string literal" msgstr "una cadena de bits está inconclusa" -#: pgc.l:459 +#: pgc.l:466 #, c-format msgid "unterminated hexadecimal string literal" msgstr "una cadena hexadecimal está inconclusa" -#: pgc.l:537 +#: pgc.l:544 #, c-format msgid "unterminated quoted string" msgstr "una cadena en comillas está inconclusa" -#: pgc.l:592 pgc.l:605 +#: pgc.l:601 pgc.l:614 #, c-format msgid "zero-length delimited identifier" msgstr "identificador delimitado de longitud cero" -#: pgc.l:613 +#: pgc.l:622 #, c-format msgid "unterminated quoted identifier" msgstr "un identificador en comillas está inconcluso" -#: pgc.l:867 +#: pgc.l:877 #, c-format msgid "nested /* ... */ comments" msgstr "comentarios /* ... */ anidados" -#: pgc.l:960 +#: pgc.l:970 #, c-format msgid "missing identifier in EXEC SQL UNDEF command" msgstr "falta un identificador en la orden EXEC SQL UNDEF" -#: pgc.l:1006 pgc.l:1020 +#: pgc.l:1016 pgc.l:1030 #, c-format msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" msgstr "falta el «EXEC SQL IFDEF» / «EXEC SQL IFNDEF»" -#: pgc.l:1009 pgc.l:1022 pgc.l:1198 +#: pgc.l:1019 pgc.l:1032 pgc.l:1208 #, c-format msgid "missing \"EXEC SQL ENDIF;\"" msgstr "falta el «EXEC SQL ENDIF;»" -#: pgc.l:1038 pgc.l:1057 +#: pgc.l:1048 pgc.l:1067 #, c-format msgid "more than one EXEC SQL ELSE" msgstr "hay más de un EXEC SQL ELSE" -#: pgc.l:1079 pgc.l:1093 +#: pgc.l:1089 pgc.l:1103 #, c-format msgid "unmatched EXEC SQL ENDIF" msgstr "EXEC SQL ENDIF sin coincidencia" -#: pgc.l:1113 +#: pgc.l:1123 #, c-format msgid "too many nested EXEC SQL IFDEF conditions" msgstr "demasiadas condiciones EXEC SQL IFDEF anidadas" -#: pgc.l:1146 +#: pgc.l:1156 #, c-format msgid "missing identifier in EXEC SQL IFDEF command" msgstr "identificador faltante en la orden EXEC SQL IFDEF" -#: pgc.l:1155 +#: pgc.l:1165 #, c-format msgid "missing identifier in EXEC SQL DEFINE command" msgstr "identificador faltante en la orden EXEC SQL DEFINE" -#: pgc.l:1188 +#: pgc.l:1198 #, c-format msgid "syntax error in EXEC SQL INCLUDE command" msgstr "error de sintaxis en orden EXEC SQL INCLUDE" -#: pgc.l:1237 +#: pgc.l:1247 #, c-format msgid "internal error: unreachable state; please report this to " msgstr "Error Interno: estado no esperado; por favor reporte a " -#: pgc.l:1362 +#: pgc.l:1371 #, c-format msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" msgstr "Error: ruta de inclusión «%s/%s» es demasiada larga en la línea %d, omitiendo\n" -#: pgc.l:1385 +#: pgc.l:1394 #, c-format msgid "could not open include file \"%s\" on line %d" msgstr "no se pudo abrir el archivo a incluir «%s» en la línea %d" @@ -333,210 +333,210 @@ msgstr "no se pudo abrir el archivo a incluir «%s» en la línea %d" msgid "syntax error" msgstr "error de sintaxis" -#: preproc.y:79 +#: preproc.y:81 #, c-format msgid "WARNING: " msgstr "ATENCIÓN: " -#: preproc.y:82 +#: preproc.y:84 #, c-format msgid "ERROR: " msgstr "ERROR: " -#: preproc.y:506 +#: preproc.y:508 #, c-format msgid "cursor \"%s\" does not exist" msgstr "no existe el cursor «%s»" -#: preproc.y:535 +#: preproc.y:537 #, c-format msgid "initializer not allowed in type definition" msgstr "inicializador no permitido en definición de tipo" -#: preproc.y:537 +#: preproc.y:539 #, c-format msgid "type name \"string\" is reserved in Informix mode" msgstr "el nombre de tipo «string» está reservado en modo Informix" -#: preproc.y:544 preproc.y:13867 +#: preproc.y:546 preproc.y:14495 #, c-format msgid "type \"%s\" is already defined" msgstr "el tipo «%s» ya está definido" -#: preproc.y:568 preproc.y:14525 preproc.y:14846 variable.c:618 +#: preproc.y:570 preproc.y:15153 preproc.y:15473 variable.c:620 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "los arrays multidimensionales para tipos de datos simples no están soportados" -#: preproc.y:1579 +#: preproc.y:1624 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "la opción AT no está permitida en la sentencia CLOSE DATABASE" -#: preproc.y:1782 +#: preproc.y:1837 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "la opción AT no está permitida en la sentencia CONNECT" -#: preproc.y:1816 +#: preproc.y:1871 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "la opción AT no está permitida en la sentencia DISCONNECT" -#: preproc.y:1871 +#: preproc.y:1926 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "la opción AT no está permitida en la sentencia SET CONNECTION" -#: preproc.y:1893 +#: preproc.y:1948 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "la opción AT no está permitida en la sentencia TYPE" -#: preproc.y:1902 +#: preproc.y:1957 #, c-format msgid "AT option not allowed in VAR statement" msgstr "la opción AT no está permitida en la sentencia VAR" -#: preproc.y:1909 +#: preproc.y:1964 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "la opción AT no está permitida en la sentencia WHENEVER" -#: preproc.y:2157 preproc.y:2162 preproc.y:2278 preproc.y:3656 preproc.y:4908 -#: preproc.y:4917 preproc.y:5201 preproc.y:6604 preproc.y:7693 preproc.y:7698 -#: preproc.y:10156 preproc.y:10753 +#: preproc.y:2216 preproc.y:2221 preproc.y:2337 preproc.y:3731 preproc.y:5129 +#: preproc.y:5138 preproc.y:5422 preproc.y:6854 preproc.y:8036 preproc.y:8041 +#: preproc.y:10668 preproc.y:11285 #, c-format msgid "unsupported feature will be passed to server" msgstr "característica no soportada será pasada al servidor" -#: preproc.y:2536 +#: preproc.y:2595 #, c-format msgid "SHOW ALL is not implemented" msgstr "SHOW ALL no está implementado" -#: preproc.y:3044 +#: preproc.y:3119 #, c-format msgid "COPY FROM STDIN is not implemented" msgstr "COPY FROM STDIN no está implementado" -#: preproc.y:8534 preproc.y:13456 +#: preproc.y:8927 preproc.y:14084 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "el uso de la variable «%s» en diferentes sentencias declare no está soportado" -#: preproc.y:8536 preproc.y:13458 +#: preproc.y:8929 preproc.y:14086 #, c-format msgid "cursor \"%s\" is already defined" msgstr "el cursor «%s» ya está definido" -#: preproc.y:8954 +#: preproc.y:9359 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "la sintaxis LIMIT #,# que ya no está soportada ha sido pasada al servidor" -#: preproc.y:9190 preproc.y:9197 +#: preproc.y:9667 preproc.y:9674 #, c-format msgid "subquery in FROM must have an alias" msgstr "las subconsultas en FROM deben tener un alias" -#: preproc.y:13186 +#: preproc.y:13814 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "CREATE TABLE AS no puede especificar INTO" -#: preproc.y:13222 +#: preproc.y:13850 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "se esperaba «@», se encontró «%s»" -#: preproc.y:13234 +#: preproc.y:13862 #, c-format msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" msgstr "sólo los protocolos «tcp» y «unix» y tipo de bases de datos «postgresql» están soportados" -#: preproc.y:13237 +#: preproc.y:13865 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "se esperaba «://», se encontró «%s»" -#: preproc.y:13242 +#: preproc.y:13870 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "los sockets de dominio unix sólo trabajan en «localhost» pero no en «%s»" -#: preproc.y:13268 +#: preproc.y:13896 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "se esperaba «postgresql», se encontró «%s»" -#: preproc.y:13271 +#: preproc.y:13899 #, c-format msgid "invalid connection type: %s" msgstr "tipo de conexión no válido: %s" -#: preproc.y:13280 +#: preproc.y:13908 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "se esperaba «@» o «://», se encontró «%s»" -#: preproc.y:13355 preproc.y:13373 +#: preproc.y:13983 preproc.y:14001 #, c-format msgid "invalid data type" msgstr "tipo de dato no válido" -#: preproc.y:13384 preproc.y:13401 +#: preproc.y:14012 preproc.y:14029 #, c-format msgid "incomplete statement" msgstr "sentencia incompleta" -#: preproc.y:13387 preproc.y:13404 +#: preproc.y:14015 preproc.y:14032 #, c-format msgid "unrecognized token \"%s\"" msgstr "elemento «%s» no reconocido" -#: preproc.y:13678 +#: preproc.y:14306 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "sólo los tipos de dato numeric y decimal tienen argumento de precisión/escala" -#: preproc.y:13690 +#: preproc.y:14318 #, c-format msgid "interval specification not allowed here" msgstr "la especificación de intervalo no está permitida aquí" -#: preproc.y:13842 preproc.y:13894 +#: preproc.y:14470 preproc.y:14522 #, c-format msgid "too many levels in nested structure/union definition" msgstr "demasiados niveles en la definición anidada de estructura/unión" -#: preproc.y:14033 +#: preproc.y:14661 #, c-format msgid "pointers to varchar are not implemented" msgstr "los punteros a varchar no están implementados" -#: preproc.y:14220 preproc.y:14245 +#: preproc.y:14848 preproc.y:14873 #, c-format msgid "using unsupported DESCRIBE statement" msgstr "utilizando sentencia DESCRIBE no soportada" -#: preproc.y:14492 +#: preproc.y:15120 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "inicializador no permitido en la orden EXEC SQL VAR" -#: preproc.y:14804 +#: preproc.y:15431 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "no se permiten los arrays de indicadores en la entrada" -#: preproc.y:15025 +#: preproc.y:15652 #, c-format msgid "operator not allowed in variable definition" msgstr "operador no permitido en definición de variable" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:15063 +#: preproc.y:15690 #, c-format msgid "%s at or near \"%s\"" msgstr "%s en o cerca de «%s»" @@ -626,34 +626,34 @@ msgstr "la variable «%s» no es un array" msgid "variable \"%s\" is not declared" msgstr "la variable «%s» no está declarada" -#: variable.c:492 +#: variable.c:494 #, c-format msgid "indicator variable must have an integer type" msgstr "la variable de un indicador debe ser de algún tipo numérico entero" -#: variable.c:504 +#: variable.c:506 #, c-format msgid "unrecognized data type name \"%s\"" msgstr "nombre de tipo de datos «%s» no reconocido" -#: variable.c:515 variable.c:523 variable.c:540 variable.c:543 +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 #, c-format msgid "multidimensional arrays are not supported" msgstr "los arrays multidimensionales no están soportados" -#: variable.c:532 +#: variable.c:534 #, 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] "no se soportan los punteros multinivel (más de 2); se encontró 1 nivel" msgstr[1] "no se soportan los punteros multinivel (más de 2); se encontraron %d niveles" -#: variable.c:537 +#: variable.c:539 #, c-format msgid "pointer to pointer is not supported for this data type" msgstr "los punteros a puntero no están soportados para este tipo de dato" -#: variable.c:557 +#: variable.c:559 #, c-format msgid "multidimensional arrays for structures are not supported" msgstr "los arrays multidimensionales para estructuras no están soportados" diff --git a/src/interfaces/ecpg/preproc/po/pt_BR.po b/src/interfaces/ecpg/preproc/po/pt_BR.po index 804e201311941..acdba610e976c 100644 --- a/src/interfaces/ecpg/preproc/po/pt_BR.po +++ b/src/interfaces/ecpg/preproc/po/pt_BR.po @@ -6,9 +6,9 @@ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-05-17 15:50-0300\n" +"POT-Creation-Date: 2015-09-17 22:32-0300\n" "PO-Revision-Date: 2009-02-09 12:59-0200\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -28,27 +28,27 @@ msgstr "variável \"%s\" deve ter um tipo númerico" msgid "descriptor \"%s\" does not exist" msgstr "descritor \"%s\" não existe" -#: descriptor.c:161 descriptor.c:210 +#: descriptor.c:161 descriptor.c:212 #, c-format msgid "descriptor header item \"%d\" does not exist" msgstr "item do cabeçalho do descritor \"%d\" não existe" -#: descriptor.c:182 +#: descriptor.c:183 #, c-format msgid "nullable is always 1" msgstr "nullable é sempre 1" -#: descriptor.c:185 +#: descriptor.c:186 #, c-format msgid "key_member is always 0" msgstr "key_member é sempre 0" -#: descriptor.c:277 +#: descriptor.c:279 #, c-format msgid "descriptor item \"%s\" is not implemented" msgstr "item do descritor \"%s\" não está implementado" -#: descriptor.c:287 +#: descriptor.c:289 #, c-format msgid "descriptor item \"%s\" cannot be set" msgstr "item do descritor \"%s\" não pode ser definido" @@ -220,107 +220,107 @@ msgstr "%s: nenhum arquivo de entrada foi especificado\n" msgid "cursor \"%s\" has been declared but not opened" msgstr "cursor \"%s\" foi declarado mas não foi aberto" -#: ecpg.c:483 preproc.y:125 +#: ecpg.c:483 preproc.y:127 #, c-format msgid "could not remove output file \"%s\"\n" msgstr "não pôde remover arquivo de saída \"%s\"\n" -#: pgc.l:421 +#: pgc.l:428 #, c-format msgid "unterminated /* comment" msgstr "comentário /* não foi terminado" -#: pgc.l:434 +#: pgc.l:441 #, c-format msgid "invalid bit string literal" msgstr "cadeia de bits inválida" -#: pgc.l:443 +#: pgc.l:450 #, c-format msgid "unterminated bit string literal" msgstr "cadeia de bits não foi terminada" -#: pgc.l:459 +#: pgc.l:466 #, c-format msgid "unterminated hexadecimal string literal" msgstr "cadeia de caracteres hexadecimal não foi terminada" -#: pgc.l:537 +#: pgc.l:544 #, c-format msgid "unterminated quoted string" msgstr "cadeia de caracteres entre aspas não foi terminada" -#: pgc.l:592 pgc.l:605 +#: pgc.l:601 pgc.l:614 #, c-format msgid "zero-length delimited identifier" msgstr "identificador delimitado tem tamanho zero" -#: pgc.l:613 +#: pgc.l:622 #, c-format msgid "unterminated quoted identifier" msgstr "identificador entre aspas não foi terminado" -#: pgc.l:867 +#: pgc.l:877 #, c-format msgid "nested /* ... */ comments" msgstr "comentários /* ... */ aninhados" -#: pgc.l:960 +#: pgc.l:970 #, c-format msgid "missing identifier in EXEC SQL UNDEF command" msgstr "faltando identificador no comando EXEC SQL UNDEF" -#: pgc.l:1006 pgc.l:1020 +#: pgc.l:1016 pgc.l:1030 #, c-format msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" msgstr "faltando correspondente \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" -#: pgc.l:1009 pgc.l:1022 pgc.l:1198 +#: pgc.l:1019 pgc.l:1032 pgc.l:1208 #, c-format msgid "missing \"EXEC SQL ENDIF;\"" msgstr "faltando \"EXEC SQL ENDIF;\"" -#: pgc.l:1038 pgc.l:1057 +#: pgc.l:1048 pgc.l:1067 #, c-format msgid "more than one EXEC SQL ELSE" msgstr "mais de um EXEC SQL ELSE" -#: pgc.l:1079 pgc.l:1093 +#: pgc.l:1089 pgc.l:1103 #, c-format msgid "unmatched EXEC SQL ENDIF" msgstr "EXEC SQL ENDIF não tem correspondente" -#: pgc.l:1113 +#: pgc.l:1123 #, c-format msgid "too many nested EXEC SQL IFDEF conditions" msgstr "muitas condições EXEC SQL IFDEF aninhadas" -#: pgc.l:1146 +#: pgc.l:1156 #, c-format msgid "missing identifier in EXEC SQL IFDEF command" msgstr "faltando identificador no comando EXEC SQL IFDEF" -#: pgc.l:1155 +#: pgc.l:1165 #, c-format msgid "missing identifier in EXEC SQL DEFINE command" msgstr "faltando identificador no comando EXEC SQL IFDEF" -#: pgc.l:1188 +#: pgc.l:1198 #, c-format msgid "syntax error in EXEC SQL INCLUDE command" msgstr "erro de sintaxe no comando EXEC SQL INCLUDE" -#: pgc.l:1237 +#: pgc.l:1247 #, c-format msgid "internal error: unreachable state; please report this to " msgstr "erro interno: estado inacessível; por favor relato isso a " -#: pgc.l:1362 +#: pgc.l:1371 #, c-format msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" msgstr "Erro: caminho de inclusão \"%s/%s\" é muito longo na linha %d, ignorando\n" -#: pgc.l:1385 +#: pgc.l:1394 #, c-format msgid "could not open include file \"%s\" on line %d" msgstr "não pôde abrir arquivo de inclusão \"%s\" na linha %d" @@ -329,210 +329,210 @@ msgstr "não pôde abrir arquivo de inclusão \"%s\" na linha %d" msgid "syntax error" msgstr "erro de sintaxe" -#: preproc.y:79 +#: preproc.y:81 #, c-format msgid "WARNING: " msgstr "AVISO: " -#: preproc.y:82 +#: preproc.y:84 #, c-format msgid "ERROR: " msgstr "ERRO: " -#: preproc.y:506 +#: preproc.y:508 #, c-format msgid "cursor \"%s\" does not exist" msgstr "cursor \"%s\" não existe" -#: preproc.y:535 +#: preproc.y:537 #, c-format msgid "initializer not allowed in type definition" msgstr "inicializador não é permitido na definição do tipo" -#: preproc.y:537 +#: preproc.y:539 #, c-format msgid "type name \"string\" is reserved in Informix mode" msgstr "nome de tipo \"string\" é reservado no modo Informix" -#: preproc.y:544 preproc.y:13853 +#: preproc.y:546 preproc.y:14495 #, c-format msgid "type \"%s\" is already defined" msgstr "tipo \"%s\" já está definido" -#: preproc.y:568 preproc.y:14511 preproc.y:14832 variable.c:618 +#: preproc.y:570 preproc.y:15153 preproc.y:15473 variable.c:620 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "matrizes multidimensionais para tipo de dados simples não são suportadas" -#: preproc.y:1577 +#: preproc.y:1624 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "opção AT não é permitida no comando CLOSE DATABASE" -#: preproc.y:1780 +#: preproc.y:1837 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "opção AT não é permitida no comando CONNECT" -#: preproc.y:1814 +#: preproc.y:1871 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "opção AT não é permitida no comando DISCONNECT" -#: preproc.y:1869 +#: preproc.y:1926 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "opção AT não é permitida no comando SET CONNECTION" -#: preproc.y:1891 +#: preproc.y:1948 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "opção AT não é permitida no comando TYPE" -#: preproc.y:1900 +#: preproc.y:1957 #, c-format msgid "AT option not allowed in VAR statement" msgstr "opção AT não é permitida no comando VAR" -#: preproc.y:1907 +#: preproc.y:1964 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "opção AT não é permitida no comando WHENEVER" -#: preproc.y:2155 preproc.y:2160 preproc.y:2276 preproc.y:3614 preproc.y:4866 -#: preproc.y:4875 preproc.y:5159 preproc.y:6562 preproc.y:7683 preproc.y:7688 -#: preproc.y:10142 preproc.y:10739 +#: preproc.y:2216 preproc.y:2221 preproc.y:2337 preproc.y:3731 preproc.y:5129 +#: preproc.y:5138 preproc.y:5422 preproc.y:6854 preproc.y:8036 preproc.y:8041 +#: preproc.y:10668 preproc.y:11285 #, c-format msgid "unsupported feature will be passed to server" msgstr "funcionalidade não suportada será enviada ao servidor" -#: preproc.y:2518 +#: preproc.y:2595 #, c-format msgid "SHOW ALL is not implemented" msgstr "SHOW ALL não está implementado" -#: preproc.y:3002 +#: preproc.y:3119 #, c-format msgid "COPY FROM STDIN is not implemented" msgstr "COPY FROM STDIN não está implementado" -#: preproc.y:8520 preproc.y:13442 +#: preproc.y:8927 preproc.y:14084 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "utilizar variável \"%s\" em comandos de declaração diferentes não é suportado" -#: preproc.y:8522 preproc.y:13444 +#: preproc.y:8929 preproc.y:14086 #, c-format msgid "cursor \"%s\" is already defined" msgstr "cursor \"%s\" já está definido" -#: preproc.y:8940 +#: preproc.y:9359 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "sintaxe LIMIT #,# que não é suportada foi enviada ao servidor" -#: preproc.y:9176 preproc.y:9183 +#: preproc.y:9667 preproc.y:9674 #, c-format msgid "subquery in FROM must have an alias" msgstr "subconsulta no FROM deve ter um aliás" -#: preproc.y:13172 +#: preproc.y:13814 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "CREATE TABLE AS não pode especificar INTO" -#: preproc.y:13208 +#: preproc.y:13850 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "esperado \"@\", encontrado \"%s\"" -#: preproc.y:13220 +#: preproc.y:13862 #, c-format msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" msgstr "somente os protocolos \"tcp\" e \"unix\" e tipo banco de dados \"postgressql\" sãosuportados" -#: preproc.y:13223 +#: preproc.y:13865 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "esperado \"://\", encontrado \"%s\"" -#: preproc.y:13228 +#: preproc.y:13870 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "Soquetes de domínio Unix trabalham somente com \"localhost\" e não com \"%s\"" -#: preproc.y:13254 +#: preproc.y:13896 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "esperado \"postgresql\", encontrado \"%s\"" -#: preproc.y:13257 +#: preproc.y:13899 #, c-format msgid "invalid connection type: %s" msgstr "tipo de conexão inválido: %s" -#: preproc.y:13266 +#: preproc.y:13908 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "esperado \"@\" ou \"://\", encontrado \"%s\"" -#: preproc.y:13341 preproc.y:13359 +#: preproc.y:13983 preproc.y:14001 #, c-format msgid "invalid data type" msgstr "tipo de dado inválido" -#: preproc.y:13370 preproc.y:13387 +#: preproc.y:14012 preproc.y:14029 #, c-format msgid "incomplete statement" msgstr "comando incompleto" -#: preproc.y:13373 preproc.y:13390 +#: preproc.y:14015 preproc.y:14032 #, c-format msgid "unrecognized token \"%s\"" msgstr "informação desconhecida \"%s\"" -#: preproc.y:13664 +#: preproc.y:14306 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "somente os tipos de dados numeric e decimal possuem argumento de precisão/escala" -#: preproc.y:13676 +#: preproc.y:14318 #, c-format msgid "interval specification not allowed here" msgstr "especificação de intervalo não é permitida aqui" -#: preproc.y:13828 preproc.y:13880 +#: preproc.y:14470 preproc.y:14522 #, c-format msgid "too many levels in nested structure/union definition" msgstr "muitos níveis em definição aninhada de estrutura/união" -#: preproc.y:14019 +#: preproc.y:14661 #, c-format msgid "pointers to varchar are not implemented" msgstr "ponteiros para varchar não estão implentados" -#: preproc.y:14206 preproc.y:14231 +#: preproc.y:14848 preproc.y:14873 #, c-format msgid "using unsupported DESCRIBE statement" msgstr "utilizando comando DESCRIBE que não é suportado" -#: preproc.y:14478 +#: preproc.y:15120 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "inicilização não é permitido no comando EXEC SQL VAR" -#: preproc.y:14790 +#: preproc.y:15431 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "matrizes do indicadores não são permitidas na entrada" -#: preproc.y:15011 +#: preproc.y:15652 #, c-format msgid "operator not allowed in variable definition" msgstr "operador não é permitido na definição da variável" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:15049 +#: preproc.y:15690 #, c-format msgid "%s at or near \"%s\"" msgstr "%s em ou próximo a \"%s\"" @@ -622,34 +622,34 @@ msgstr "variável \"%s\" não é uma matriz" msgid "variable \"%s\" is not declared" msgstr "variável \"%s\" não foi declarada" -#: variable.c:492 +#: variable.c:494 #, c-format msgid "indicator variable must have an integer type" msgstr "variável de indicador deve ter um tipo inteiro" -#: variable.c:504 +#: variable.c:506 #, c-format msgid "unrecognized data type name \"%s\"" msgstr "nome do tipo dados \"%s\" é desconhecido" -#: variable.c:515 variable.c:523 variable.c:540 variable.c:543 +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 #, c-format msgid "multidimensional arrays are not supported" msgstr "matrizes multidimensionais não são suportadas" -#: variable.c:532 +#: variable.c:534 #, 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] "ponteiros com múltiplos níveis (mais do que 2 níveis) não são suportados; %d nível encontrado" msgstr[1] "ponteiros com múltiplos níveis (mais do que 2 níveis) não são suportados; %d níveis encontrados" -#: variable.c:537 +#: variable.c:539 #, c-format msgid "pointer to pointer is not supported for this data type" msgstr "ponteiro para ponteiro não é suportado para esse tipo de dado" -#: variable.c:557 +#: variable.c:559 #, c-format msgid "multidimensional arrays for structures are not supported" msgstr "matrizes multidimensionais para estruturas não são suportadas" diff --git a/src/interfaces/libpq/fe-protocol2.c b/src/interfaces/libpq/fe-protocol2.c index eeba7f3504708..9ff73dbd58b22 100644 --- a/src/interfaces/libpq/fe-protocol2.c +++ b/src/interfaces/libpq/fe-protocol2.c @@ -498,10 +498,17 @@ pqParseInput2(PGconn *conn) conn->result = PQmakeEmptyPGresult(conn, PGRES_COMMAND_OK); if (!conn->result) - return; + { + printfPQExpBuffer(&conn->errorMessage, + libpq_gettext("out of memory")); + pqSaveErrorResult(conn); + } + } + if (conn->result) + { + strlcpy(conn->result->cmdStatus, conn->workBuffer.data, + CMDSTATUS_LEN); } - strlcpy(conn->result->cmdStatus, conn->workBuffer.data, - CMDSTATUS_LEN); checkXactStatus(conn, conn->workBuffer.data); conn->asyncStatus = PGASYNC_READY; break; @@ -522,8 +529,16 @@ pqParseInput2(PGconn *conn) "unexpected character %c following empty query response (\"I\" message)", id); if (conn->result == NULL) + { conn->result = PQmakeEmptyPGresult(conn, PGRES_EMPTY_QUERY); + if (!conn->result) + { + printfPQExpBuffer(&conn->errorMessage, + libpq_gettext("out of memory")); + pqSaveErrorResult(conn); + } + } conn->asyncStatus = PGASYNC_READY; break; case 'K': /* secret key data from the backend */ @@ -965,14 +980,17 @@ pqGetErrorNotice2(PGconn *conn, bool isError) * Make a PGresult to hold the message. We temporarily lie about the * result status, so that PQmakeEmptyPGresult doesn't uselessly copy * conn->errorMessage. + * + * NB: This allocation can fail, if you run out of memory. The rest of the + * function handles that gracefully, and we still try to set the error + * message as the connection's error message. */ res = PQmakeEmptyPGresult(conn, PGRES_EMPTY_QUERY); - if (!res) - goto failure; - res->resultStatus = isError ? PGRES_FATAL_ERROR : PGRES_NONFATAL_ERROR; - res->errMsg = pqResultStrdup(res, workBuf.data); - if (!res->errMsg) - goto failure; + if (res) + { + res->resultStatus = isError ? PGRES_FATAL_ERROR : PGRES_NONFATAL_ERROR; + res->errMsg = pqResultStrdup(res, workBuf.data); + } /* * Break the message into fields. We can't do very much here, but we can @@ -1024,15 +1042,22 @@ pqGetErrorNotice2(PGconn *conn, bool isError) pqClearAsyncResult(conn); conn->result = res; resetPQExpBuffer(&conn->errorMessage); - appendPQExpBufferStr(&conn->errorMessage, res->errMsg); + if (res && !PQExpBufferDataBroken(workBuf) && res->errMsg) + appendPQExpBufferStr(&conn->errorMessage, res->errMsg); + else + printfPQExpBuffer(&conn->errorMessage, + libpq_gettext("out of memory")); if (conn->xactStatus == PQTRANS_INTRANS) conn->xactStatus = PQTRANS_INERROR; } else { - if (res->noticeHooks.noticeRec != NULL) - (*res->noticeHooks.noticeRec) (res->noticeHooks.noticeRecArg, res); - PQclear(res); + if (res) + { + if (res->noticeHooks.noticeRec != NULL) + (*res->noticeHooks.noticeRec) (res->noticeHooks.noticeRecArg, res); + PQclear(res); + } } termPQExpBuffer(&workBuf); diff --git a/src/interfaces/libpq/fe-protocol3.c b/src/interfaces/libpq/fe-protocol3.c index a847f084fa0e8..dbc0d89a4ed04 100644 --- a/src/interfaces/libpq/fe-protocol3.c +++ b/src/interfaces/libpq/fe-protocol3.c @@ -204,10 +204,15 @@ pqParseInput3(PGconn *conn) conn->result = PQmakeEmptyPGresult(conn, PGRES_COMMAND_OK); if (!conn->result) - return; + { + printfPQExpBuffer(&conn->errorMessage, + libpq_gettext("out of memory")); + pqSaveErrorResult(conn); + } } - strlcpy(conn->result->cmdStatus, conn->workBuffer.data, - CMDSTATUS_LEN); + if (conn->result) + strlcpy(conn->result->cmdStatus, conn->workBuffer.data, + CMDSTATUS_LEN); conn->asyncStatus = PGASYNC_READY; break; case 'E': /* error return */ @@ -226,7 +231,11 @@ pqParseInput3(PGconn *conn) conn->result = PQmakeEmptyPGresult(conn, PGRES_EMPTY_QUERY); if (!conn->result) - return; + { + printfPQExpBuffer(&conn->errorMessage, + libpq_gettext("out of memory")); + pqSaveErrorResult(conn); + } } conn->asyncStatus = PGASYNC_READY; break; @@ -239,7 +248,11 @@ pqParseInput3(PGconn *conn) conn->result = PQmakeEmptyPGresult(conn, PGRES_COMMAND_OK); if (!conn->result) - return; + { + printfPQExpBuffer(&conn->errorMessage, + libpq_gettext("out of memory")); + pqSaveErrorResult(conn); + } } conn->asyncStatus = PGASYNC_READY; } @@ -306,7 +319,11 @@ pqParseInput3(PGconn *conn) conn->result = PQmakeEmptyPGresult(conn, PGRES_COMMAND_OK); if (!conn->result) - return; + { + printfPQExpBuffer(&conn->errorMessage, + libpq_gettext("out of memory")); + pqSaveErrorResult(conn); + } } conn->asyncStatus = PGASYNC_READY; } @@ -822,11 +839,14 @@ pqGetErrorNotice3(PGconn *conn, bool isError) * Make a PGresult to hold the accumulated fields. We temporarily lie * about the result status, so that PQmakeEmptyPGresult doesn't uselessly * copy conn->errorMessage. + * + * NB: This allocation can fail, if you run out of memory. The rest of the + * function handles that gracefully, and we still try to set the error + * message as the connection's error message. */ res = PQmakeEmptyPGresult(conn, PGRES_EMPTY_QUERY); - if (!res) - goto fail; - res->resultStatus = isError ? PGRES_FATAL_ERROR : PGRES_NONFATAL_ERROR; + if (res) + res->resultStatus = isError ? PGRES_FATAL_ERROR : PGRES_NONFATAL_ERROR; /* * Read the fields and save into res. @@ -966,20 +986,27 @@ pqGetErrorNotice3(PGconn *conn, bool isError) */ if (isError) { - res->errMsg = pqResultStrdup(res, workBuf.data); - if (!res->errMsg) - goto fail; + if (res) + res->errMsg = pqResultStrdup(res, workBuf.data); pqClearAsyncResult(conn); conn->result = res; - appendPQExpBufferStr(&conn->errorMessage, workBuf.data); + if (PQExpBufferDataBroken(workBuf)) + printfPQExpBuffer(&conn->errorMessage, + libpq_gettext("out of memory")); + else + appendPQExpBufferStr(&conn->errorMessage, workBuf.data); } else { - /* We can cheat a little here and not copy the message. */ - res->errMsg = workBuf.data; - if (res->noticeHooks.noticeRec != NULL) - (*res->noticeHooks.noticeRec) (res->noticeHooks.noticeRecArg, res); - PQclear(res); + /* if we couldn't allocate the result set, just discard the NOTICE */ + if (res) + { + /* We can cheat a little here and not copy the message. */ + res->errMsg = workBuf.data; + if (res->noticeHooks.noticeRec != NULL) + (*res->noticeHooks.noticeRec) (res->noticeHooks.noticeRecArg, res); + PQclear(res); + } } termPQExpBuffer(&workBuf); diff --git a/src/interfaces/libpq/fe-secure-openssl.c b/src/interfaces/libpq/fe-secure-openssl.c index d4069b9e0bd9c..4b2a324634bbe 100644 --- a/src/interfaces/libpq/fe-secure-openssl.c +++ b/src/interfaces/libpq/fe-secure-openssl.c @@ -1598,14 +1598,13 @@ static int my_sock_read(BIO *h, char *buf, int size) { int res; - int save_errno; res = pqsecure_raw_read((PGconn *) h->ptr, buf, size); - save_errno = errno; BIO_clear_retry_flags(h); if (res < 0) { - switch (save_errno) + /* If we were interrupted, tell caller to retry */ + switch (SOCK_ERRNO) { #ifdef EAGAIN case EAGAIN: @@ -1622,7 +1621,6 @@ my_sock_read(BIO *h, char *buf, int size) } } - errno = save_errno; return res; } @@ -1630,16 +1628,26 @@ static int my_sock_write(BIO *h, const char *buf, int size) { int res; - int save_errno; res = pqsecure_raw_write((PGconn *) h->ptr, buf, size); - save_errno = errno; BIO_clear_retry_flags(h); if (res <= 0) { - if (save_errno == EINTR) + /* If we were interrupted, tell caller to retry */ + switch (SOCK_ERRNO) { - BIO_set_retry_write(h); +#ifdef EAGAIN + case EAGAIN: +#endif +#if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN)) + case EWOULDBLOCK: +#endif + case EINTR: + BIO_set_retry_write(h); + break; + + default: + break; } } diff --git a/src/interfaces/libpq/po/de.po b/src/interfaces/libpq/po/de.po index f5198ff012c56..a69e666af68ac 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 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-05-19 00:38+0000\n" +"POT-Creation-Date: 2015-07-24 20:08+0000\n" "PO-Revision-Date: 2015-05-18 20:57-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -32,10 +32,10 @@ msgstr "doppelte GSSAPI-Authentifizierungsanfrage\n" #: fe-auth.c:778 fe-connect.c:701 fe-connect.c:898 fe-connect.c:1074 #: fe-connect.c:2085 fe-connect.c:3477 fe-connect.c:3729 fe-connect.c:3848 #: fe-connect.c:4088 fe-connect.c:4168 fe-connect.c:4267 fe-connect.c:4519 -#: fe-connect.c:4547 fe-connect.c:4619 fe-connect.c:4637 fe-connect.c:4733 -#: fe-connect.c:5067 fe-connect.c:5217 fe-exec.c:3339 fe-exec.c:3504 -#: fe-lobj.c:896 fe-protocol2.c:1181 fe-protocol3.c:1544 -#: fe-secure-openssl.c:528 fe-secure-openssl.c:1064 +#: fe-connect.c:4548 fe-connect.c:4620 fe-connect.c:4638 fe-connect.c:4734 +#: fe-connect.c:5068 fe-connect.c:5218 fe-exec.c:3339 fe-exec.c:3504 +#: fe-lobj.c:896 fe-protocol2.c:1206 fe-protocol3.c:1571 +#: fe-secure-openssl.c:527 fe-secure-openssl.c:1069 msgid "out of memory\n" msgstr "Speicher aufgebraucht\n" @@ -339,7 +339,7 @@ msgstr "Attribut hat keine Werte bei LDAP-Suche\n" msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "fehlendes „=“ nach „%s“ in der Zeichenkette der Verbindungsdaten\n" -#: fe-connect.c:3860 fe-connect.c:4487 fe-connect.c:5200 +#: fe-connect.c:3860 fe-connect.c:4487 fe-connect.c:5201 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "ungültige Verbindungsoption „%s“\n" @@ -377,66 +377,66 @@ msgstr "Syntaxfehler in Servicedatei „%s“, Zeile %d\n" 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:4744 +#: fe-connect.c:4745 #, 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:4814 +#: fe-connect.c:4815 #, 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:4821 +#: fe-connect.c:4822 #, 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:4836 +#: fe-connect.c:4837 #, 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:4950 +#: fe-connect.c:4951 #, 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:4970 +#: fe-connect.c:4971 #, 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:5021 +#: fe-connect.c:5022 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "ungültiger URI-Query-Parameter: „%s“\n" -#: fe-connect.c:5095 +#: fe-connect.c:5096 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "ungültiges Prozent-kodiertes Token: „%s“\n" -#: fe-connect.c:5105 +#: fe-connect.c:5106 #, 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:5436 +#: fe-connect.c:5437 msgid "connection pointer is NULL\n" msgstr "Verbindung ist ein NULL-Zeiger\n" -#: fe-connect.c:5722 +#: fe-connect.c:5723 #, 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:5731 +#: fe-connect.c:5732 #, 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:5837 +#: fe-connect.c:5838 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "Passwort wurde aus Datei „%s“ gelesen\n" @@ -499,8 +499,8 @@ msgstr "COPY-OUT-Zustand muss erst beendet werden\n" msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec ist während COPY BOTH nicht erlaubt\n" -#: fe-exec.c:2208 fe-exec.c:2275 fe-exec.c:2365 fe-protocol2.c:1327 -#: fe-protocol3.c:1683 +#: fe-exec.c:2208 fe-exec.c:2275 fe-exec.c:2365 fe-protocol2.c:1352 +#: fe-protocol3.c:1710 msgid "no COPY in progress\n" msgstr "keine COPY in Ausführung\n" @@ -633,7 +633,7 @@ msgstr "Integer der Größe %lu wird von pqPutInt nicht unterstützt" msgid "connection not open\n" msgstr "Verbindung nicht offen\n" -#: fe-misc.c:812 fe-secure-openssl.c:249 fe-secure-openssl.c:356 +#: fe-misc.c:812 fe-secure-openssl.c:249 fe-secure-openssl.c:355 #: fe-secure.c:253 fe-secure.c:362 msgid "" "server closed the connection unexpectedly\n" @@ -672,154 +672,160 @@ msgstr "ungültiger Zustand %c, möglicherweise ein Speicherproblem\n" msgid "message type 0x%02x arrived from server while idle" msgstr "Nachricht vom Typ 0x%02x kam vom Server im Ruhezustand" -#: fe-protocol2.c:522 +#: fe-protocol2.c:503 fe-protocol2.c:538 fe-protocol2.c:1049 +#: fe-protocol3.c:209 fe-protocol3.c:236 fe-protocol3.c:253 fe-protocol3.c:324 +#: fe-protocol3.c:995 +msgid "out of memory" +msgstr "Speicher aufgebraucht" + +#: fe-protocol2.c:529 #, c-format msgid "unexpected character %c following empty query response (\"I\" message)" msgstr "unerwartetes Zeichen %c kam nach Antwort auf leere Anfrage („I“-Nachricht)" -#: fe-protocol2.c:580 +#: fe-protocol2.c:595 #, c-format msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" msgstr "Server sendete Daten („D“-Nachricht) ohne vorherige Zeilenbeschreibung („T“-Nachricht)" -#: fe-protocol2.c:598 +#: fe-protocol2.c:613 #, c-format msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" msgstr "Server sendete binäre Daten („B“-Nachricht) ohne vorherige Zeilenbeschreibung („T“-Nachricht)" -#: fe-protocol2.c:618 fe-protocol3.c:385 +#: fe-protocol2.c:633 fe-protocol3.c:402 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "unerwartete Antwort vom Server; erstes empfangenes Zeichen war „%c“\n" -#: fe-protocol2.c:747 fe-protocol2.c:922 fe-protocol3.c:600 fe-protocol3.c:782 +#: fe-protocol2.c:762 fe-protocol2.c:937 fe-protocol3.c:617 fe-protocol3.c:799 msgid "out of memory for query result" msgstr "Speicher für Anfrageergebnis aufgebraucht" -#: fe-protocol2.c:1370 fe-protocol3.c:1752 +#: fe-protocol2.c:1395 fe-protocol3.c:1779 #, c-format msgid "%s" msgstr "%s" -#: fe-protocol2.c:1382 +#: fe-protocol2.c:1407 #, c-format msgid "lost synchronization with server, resetting connection" msgstr "Synchronisation mit Server verloren, Verbindung wird zurückgesetzt" -#: fe-protocol2.c:1516 fe-protocol2.c:1548 fe-protocol3.c:1955 +#: fe-protocol2.c:1541 fe-protocol2.c:1573 fe-protocol3.c:1982 #, c-format msgid "protocol error: id=0x%x\n" msgstr "Protokollfehler: id=0x%x\n" -#: fe-protocol3.c:341 +#: fe-protocol3.c:358 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:406 +#: fe-protocol3.c:423 #, 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:427 +#: fe-protocol3.c:444 #, 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:478 fe-protocol3.c:518 +#: fe-protocol3.c:495 fe-protocol3.c:535 msgid "insufficient data in \"T\" message" msgstr "nicht genug Daten in „T“-Nachricht" -#: fe-protocol3.c:551 +#: fe-protocol3.c:568 msgid "extraneous data in \"T\" message" msgstr "zu viele Daten in „T“-Nachricht" -#: fe-protocol3.c:690 fe-protocol3.c:722 fe-protocol3.c:740 +#: fe-protocol3.c:707 fe-protocol3.c:739 fe-protocol3.c:757 msgid "insufficient data in \"D\" message" msgstr "nicht genug Daten in „D“-Nachricht" -#: fe-protocol3.c:696 +#: fe-protocol3.c:713 msgid "unexpected field count in \"D\" message" msgstr "unerwartete Feldzahl in „D“-Nachricht" -#: fe-protocol3.c:749 +#: fe-protocol3.c:766 msgid "extraneous data in \"D\" message" msgstr "zu viele Daten in „D“-Nachricht" #. translator: %s represents a digit string -#: fe-protocol3.c:878 fe-protocol3.c:897 +#: fe-protocol3.c:898 fe-protocol3.c:917 #, c-format msgid " at character %s" msgstr " bei Zeichen %s" -#: fe-protocol3.c:910 +#: fe-protocol3.c:930 #, c-format msgid "DETAIL: %s\n" msgstr "DETAIL: %s\n" -#: fe-protocol3.c:913 +#: fe-protocol3.c:933 #, c-format msgid "HINT: %s\n" msgstr "TIP: %s\n" -#: fe-protocol3.c:916 +#: fe-protocol3.c:936 #, c-format msgid "QUERY: %s\n" msgstr "ANFRAGE: %s\n" -#: fe-protocol3.c:919 +#: fe-protocol3.c:939 #, c-format msgid "CONTEXT: %s\n" msgstr "KONTEXT: %s\n" -#: fe-protocol3.c:926 +#: fe-protocol3.c:946 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "SCHEMANAME: %s\n" -#: fe-protocol3.c:930 +#: fe-protocol3.c:950 #, c-format msgid "TABLE NAME: %s\n" msgstr "TABELLENNAME: %s\n" -#: fe-protocol3.c:934 +#: fe-protocol3.c:954 #, c-format msgid "COLUMN NAME: %s\n" msgstr "SPALTENNAME: %s\n" -#: fe-protocol3.c:938 +#: fe-protocol3.c:958 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "DATENTYPNAME: %s\n" -#: fe-protocol3.c:942 +#: fe-protocol3.c:962 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "CONSTRAINT-NAME: %s\n" -#: fe-protocol3.c:954 +#: fe-protocol3.c:974 msgid "LOCATION: " msgstr "ORT: " -#: fe-protocol3.c:956 +#: fe-protocol3.c:976 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:958 +#: fe-protocol3.c:978 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1182 +#: fe-protocol3.c:1209 #, c-format msgid "LINE %d: " msgstr "ZEILE %d: " -#: fe-protocol3.c:1577 +#: fe-protocol3.c:1604 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: Text COPY OUT nicht ausgeführt\n" -#: fe-secure-openssl.c:146 fe-secure-openssl.c:1001 fe-secure-openssl.c:1221 +#: fe-secure-openssl.c:146 fe-secure-openssl.c:1006 fe-secure-openssl.c:1226 #, c-format msgid "could not acquire mutex: %s\n" msgstr "konnte Mutex nicht sperren: %s\n" @@ -829,34 +835,34 @@ msgstr "konnte Mutex nicht sperren: %s\n" msgid "could not establish SSL connection: %s\n" msgstr "konnte SSL-Verbindung nicht aufbauen: %s\n" -#: fe-secure-openssl.c:254 fe-secure-openssl.c:361 fe-secure-openssl.c:1344 +#: fe-secure-openssl.c:254 fe-secure-openssl.c:360 fe-secure-openssl.c:1349 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "SSL-SYSCALL-Fehler: %s\n" -#: fe-secure-openssl.c:261 fe-secure-openssl.c:368 fe-secure-openssl.c:1348 +#: fe-secure-openssl.c:261 fe-secure-openssl.c:367 fe-secure-openssl.c:1353 msgid "SSL SYSCALL error: EOF detected\n" msgstr "SSL-SYSCALL-Fehler: Dateiende entdeckt\n" -#: fe-secure-openssl.c:272 fe-secure-openssl.c:379 fe-secure-openssl.c:1357 +#: fe-secure-openssl.c:272 fe-secure-openssl.c:378 fe-secure-openssl.c:1362 #, c-format msgid "SSL error: %s\n" msgstr "SSL-Fehler: %s\n" -#: fe-secure-openssl.c:287 fe-secure-openssl.c:394 +#: fe-secure-openssl.c:287 fe-secure-openssl.c:393 msgid "SSL connection has been closed unexpectedly\n" msgstr "SSL-Verbindung wurde unerwartet geschlossen\n" -#: fe-secure-openssl.c:293 fe-secure-openssl.c:400 fe-secure-openssl.c:1366 +#: fe-secure-openssl.c:293 fe-secure-openssl.c:399 fe-secure-openssl.c:1371 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "unbekannter SSL-Fehlercode: %d\n" -#: fe-secure-openssl.c:512 +#: fe-secure-openssl.c:511 msgid "SSL certificate's name entry is missing\n" msgstr "Namenseintrag fehlt im SSL-Zertifikat\n" -#: fe-secure-openssl.c:542 +#: fe-secure-openssl.c:541 msgid "SSL certificate's name contains embedded null\n" msgstr "Name im SSL-Zertifikat enthält Null-Byte\n" @@ -864,81 +870,81 @@ msgstr "Name im SSL-Zertifikat enthält Null-Byte\n" msgid "host name must be specified for a verified SSL connection\n" msgstr "Hostname muss angegeben werden für eine verifizierte SSL-Verbindung\n" -#: fe-secure-openssl.c:691 +#: fe-secure-openssl.c:692 #, c-format msgid "server certificate for \"%s\" does not match host name \"%s\"\n" msgstr "Server-Zertifikat für „%s“ stimmt nicht mit dem Hostnamen „%s“ überein\n" -#: fe-secure-openssl.c:697 +#: fe-secure-openssl.c:698 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-openssl.c:842 +#: fe-secure-openssl.c:845 #, c-format msgid "could not create SSL context: %s\n" msgstr "konnte SSL-Kontext nicht erzeugen: %s\n" -#: fe-secure-openssl.c:971 +#: fe-secure-openssl.c:976 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "konnte Zertifikatdatei „%s“ nicht öffnen: %s\n" -#: fe-secure-openssl.c:1010 fe-secure-openssl.c:1025 +#: fe-secure-openssl.c:1015 fe-secure-openssl.c:1030 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "konnte Zertifikatdatei „%s“ nicht lesen: %s\n" -#: fe-secure-openssl.c:1080 +#: fe-secure-openssl.c:1085 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "konnte SSL-Engine „%s“ nicht laden: %s\n" -#: fe-secure-openssl.c:1092 +#: fe-secure-openssl.c:1097 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "konnte SSL-Engine „%s“ nicht initialisieren: %s\n" -#: fe-secure-openssl.c:1108 +#: fe-secure-openssl.c:1113 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "konnte privaten SSL-Schlüssel „%s“ nicht von Engine „%s“ lesen: %s\n" -#: fe-secure-openssl.c:1122 +#: fe-secure-openssl.c:1127 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "konnte privaten SSL-Schlüssel „%s“ nicht von Engine „%s“ laden: %s\n" -#: fe-secure-openssl.c:1159 +#: fe-secure-openssl.c:1164 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "Zertifikat vorhanden, aber keine private Schlüsseldatei „%s“\n" -#: fe-secure-openssl.c:1167 +#: fe-secure-openssl.c:1172 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "WARNUNG: private Schlüsseldatei „%s“ erlaubt Lesezugriff für Gruppe oder Andere; Rechte sollten u=rw (0600) oder weniger sein\n" -#: fe-secure-openssl.c:1178 +#: fe-secure-openssl.c:1183 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "konnte private Schlüsseldatei „%s“ nicht laden: %s\n" -#: fe-secure-openssl.c:1192 +#: fe-secure-openssl.c:1197 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "Zertifikat passt nicht zur privaten Schlüsseldatei „%s“: %s\n" -#: fe-secure-openssl.c:1230 +#: fe-secure-openssl.c:1235 #, c-format msgid "could not read root certificate file \"%s\": %s\n" msgstr "konnte Root-Zertifikat-Datei „%s“ nicht lesen: %s\n" -#: fe-secure-openssl.c:1260 +#: fe-secure-openssl.c:1265 #, c-format msgid "SSL library does not support CRL certificates (file \"%s\")\n" msgstr "SSL-Bibliothek unterstützt keine CRL-Zertifikate (Datei „%s“)\n" -#: fe-secure-openssl.c:1293 +#: fe-secure-openssl.c:1298 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" @@ -946,7 +952,7 @@ msgstr "" "konnte Home-Verzeichnis nicht ermitteln, um Root-Zertifikat-Datei zu finden\n" "Legen Sie entweder die Datei an oder ändern Sie sslmode, um die Überprüfung der Serverzertifikate abzuschalten.\n" -#: fe-secure-openssl.c:1297 +#: fe-secure-openssl.c:1302 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -955,17 +961,17 @@ msgstr "" "Root-Zertifikat-Datei „%s“ existiert nicht\n" "Legen Sie entweder die Datei an oder ändern Sie sslmode, um die Überprüfung der Serverzertifikate abzuschalten.\n" -#: fe-secure-openssl.c:1385 +#: fe-secure-openssl.c:1390 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "Zertifikat konnte nicht ermittelt werden: %s\n" -#: fe-secure-openssl.c:1477 +#: fe-secure-openssl.c:1482 #, c-format msgid "no SSL error reported" msgstr "kein SSL-Fehler berichtet" -#: fe-secure-openssl.c:1486 +#: fe-secure-openssl.c:1491 #, c-format msgid "SSL error code %lu" msgstr "SSL-Fehlercode %lu" diff --git a/src/interfaces/libpq/po/es.po b/src/interfaces/libpq/po/es.po index d69dcf44ab3dd..877e5f1247268 100644 --- a/src/interfaces/libpq/po/es.po +++ b/src/interfaces/libpq/po/es.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: libpq (PostgreSQL 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:38+0000\n" -"PO-Revision-Date: 2014-12-16 12:12-0300\n" +"POT-Creation-Date: 2015-10-04 00:38+0000\n" +"PO-Revision-Date: 2015-09-29 23:33-0300\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -33,13 +33,13 @@ msgid "duplicate GSS authentication request\n" msgstr "petición de autentificación GSS duplicada\n" #: fe-auth.c:197 fe-auth.c:307 fe-auth.c:381 fe-auth.c:416 fe-auth.c:512 -#: fe-connect.c:701 fe-connect.c:882 fe-connect.c:1058 fe-connect.c:2063 -#: fe-connect.c:3454 fe-connect.c:3706 fe-connect.c:3825 fe-connect.c:4055 -#: fe-connect.c:4135 fe-connect.c:4230 fe-connect.c:4482 fe-connect.c:4510 -#: fe-connect.c:4582 fe-connect.c:4600 fe-connect.c:4616 fe-connect.c:4699 -#: fe-connect.c:5051 fe-connect.c:5201 fe-exec.c:3340 fe-exec.c:3505 -#: fe-lobj.c:896 fe-protocol2.c:1181 fe-protocol3.c:1544 fe-secure.c:792 -#: fe-secure.c:1201 +#: fe-auth.c:778 fe-connect.c:701 fe-connect.c:898 fe-connect.c:1074 +#: fe-connect.c:2085 fe-connect.c:3477 fe-connect.c:3729 fe-connect.c:3848 +#: fe-connect.c:4088 fe-connect.c:4168 fe-connect.c:4267 fe-connect.c:4519 +#: fe-connect.c:4548 fe-connect.c:4620 fe-connect.c:4638 fe-connect.c:4734 +#: fe-connect.c:5068 fe-connect.c:5218 fe-exec.c:3339 fe-exec.c:3504 +#: fe-lobj.c:896 fe-protocol2.c:1206 fe-protocol3.c:1571 +#: fe-secure-openssl.c:527 fe-secure-openssl.c:1069 msgid "out of memory\n" msgstr "memoria agotada\n" @@ -84,22 +84,37 @@ msgstr "el método de autentificación Crypt no está soportado\n" msgid "authentication method %u not supported\n" msgstr "el método de autentificación %u no está soportado\n" -#: fe-connect.c:824 +#: fe-auth.c:753 +#, c-format +msgid "user name lookup failure: error code %lu\n" +msgstr "fallo en la búsqueda del nombre de usuario: código de error %lu\n" + +#: fe-auth.c:763 fe-connect.c:2012 +#, 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:768 fe-connect.c:2017 +#, c-format +msgid "local user with ID %d does not exist\n" +msgstr "no existe un usuario local con ID %d\n" + +#: fe-connect.c:840 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "valor sslmode no válido: «%s»\n" -#: fe-connect.c:845 +#: fe-connect.c:861 #, 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:1082 +#: fe-connect.c:1098 #, 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:1112 +#: fe-connect.c:1128 #, c-format msgid "" "could not connect to server: %s\n" @@ -110,7 +125,7 @@ msgstr "" "\t¿Está el servidor en ejecución localmente y aceptando\n" "\tconexiones en el socket de dominio Unix «%s»?\n" -#: fe-connect.c:1167 +#: fe-connect.c:1183 #, c-format msgid "" "could not connect to server: %s\n" @@ -121,7 +136,7 @@ msgstr "" "\t¿Está el servidor en ejecución en el servidor «%s» (%s) y aceptando\n" "\tconexiones TCP/IP en el puerto %s?\n" -#: fe-connect.c:1176 +#: fe-connect.c:1192 #, c-format msgid "" "could not connect to server: %s\n" @@ -132,300 +147,300 @@ msgstr "" "\t¿Está el servidor en ejecución en el servidor «%s» y aceptando\n" "\tconexiones TCP/IP en el puerto %s?\n" -#: fe-connect.c:1227 +#: fe-connect.c:1243 #, c-format msgid "setsockopt(TCP_KEEPIDLE) failed: %s\n" msgstr "setsockopt(TCP_KEEPIDLE) falló: %s\n" -#: fe-connect.c:1240 +#: fe-connect.c:1256 #, c-format msgid "setsockopt(TCP_KEEPALIVE) failed: %s\n" msgstr "setsockopt(TCP_KEEPALIVE) falló: %s\n" -#: fe-connect.c:1272 +#: fe-connect.c:1288 #, c-format msgid "setsockopt(TCP_KEEPINTVL) failed: %s\n" msgstr "setsockopt(TCP_KEEPINTVL) falló: %s\n" -#: fe-connect.c:1304 +#: fe-connect.c:1320 #, c-format msgid "setsockopt(TCP_KEEPCNT) failed: %s\n" msgstr "setsockopt(TCP_KEEPCNT) falló: %s\n" -#: fe-connect.c:1352 +#: fe-connect.c:1368 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" -#: fe-connect.c:1404 +#: fe-connect.c:1420 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "número de puerto no válido: «%s»\n" -#: fe-connect.c:1437 +#: fe-connect.c:1453 #, 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:1456 +#: fe-connect.c:1472 #, 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:1460 +#: fe-connect.c:1476 #, 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:1665 +#: fe-connect.c:1681 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:1705 +#: fe-connect.c:1721 #, c-format msgid "could not create socket: %s\n" msgstr "no se pudo crear el socket: %s\n" -#: fe-connect.c:1727 +#: fe-connect.c:1743 #, 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:1738 +#: fe-connect.c:1754 #, 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:1757 +#: fe-connect.c:1773 msgid "keepalives parameter must be an integer\n" msgstr "el parámetro de keepalives debe ser un entero\n" -#: fe-connect.c:1770 +#: fe-connect.c:1786 #, c-format msgid "setsockopt(SO_KEEPALIVE) failed: %s\n" msgstr "setsockopt(SO_KEEPALIVE) falló: %s\n" -#: fe-connect.c:1907 +#: fe-connect.c:1923 #, 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:1941 +#: fe-connect.c:1957 #, 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:1982 +#: fe-connect.c:1999 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:1985 +#: fe-connect.c:2002 #, c-format msgid "could not get peer credentials: %s\n" msgstr "no se pudo obtener credenciales de la contraparte: %s\n" -#: fe-connect.c:1995 -#, c-format -msgid "local user with ID %d does not exist\n" -msgstr "no existe un usuario local con ID %d\n" - -#: fe-connect.c:2003 +#: fe-connect.c:2025 #, 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:2037 +#: fe-connect.c:2059 #, 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:2076 +#: fe-connect.c:2098 #, c-format msgid "could not send startup packet: %s\n" msgstr "no se pudo enviar el paquete de inicio: %s\n" -#: fe-connect.c:2146 +#: fe-connect.c:2168 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:2172 +#: fe-connect.c:2194 #, 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:2247 fe-connect.c:2280 +#: fe-connect.c:2269 fe-connect.c:2302 #, 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:2447 +#: fe-connect.c:2469 #, c-format msgid "out of memory allocating GSSAPI buffer (%d)" msgstr "memoria agotada creando el búfer GSSAPI (%d)" -#: fe-connect.c:2532 +#: fe-connect.c:2554 msgid "unexpected message from server during startup\n" msgstr "se ha recibido un mensaje inesperado del servidor durante el inicio\n" -#: fe-connect.c:2626 +#: fe-connect.c:2648 #, 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:3060 fe-connect.c:3120 +#: fe-connect.c:3083 fe-connect.c:3143 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc «%s» falló durante el evento PGEVT_CONNRESET\n" -#: fe-connect.c:3467 +#: fe-connect.c:3490 #, 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:3482 +#: fe-connect.c:3505 #, 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:3493 fe-connect.c:3546 +#: fe-connect.c:3516 fe-connect.c:3569 #, 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:3503 fe-connect.c:3560 +#: fe-connect.c:3526 fe-connect.c:3583 #, 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:3514 +#: fe-connect.c:3537 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "URL LDAP no válida «%s»: no tiene filtro\n" -#: fe-connect.c:3535 +#: fe-connect.c:3558 #, 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:3569 +#: fe-connect.c:3592 msgid "could not create LDAP structure\n" msgstr "no se pudo crear estructura LDAP\n" -#: fe-connect.c:3645 +#: fe-connect.c:3668 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "búsqueda en servidor LDAP falló: %s\n" -#: fe-connect.c:3656 +#: fe-connect.c:3679 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:3657 fe-connect.c:3669 +#: fe-connect.c:3680 fe-connect.c:3692 msgid "no entry found on LDAP lookup\n" msgstr "no se encontró ninguna entrada en búsqueda LDAP\n" -#: fe-connect.c:3680 fe-connect.c:3693 +#: fe-connect.c:3703 fe-connect.c:3716 msgid "attribute has no values on LDAP lookup\n" msgstr "la búsqueda LDAP entregó atributo sin valores\n" -#: fe-connect.c:3745 fe-connect.c:3764 fe-connect.c:4269 +#: fe-connect.c:3768 fe-connect.c:3787 fe-connect.c:4306 #, 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:3837 fe-connect.c:4450 fe-connect.c:5184 +#: fe-connect.c:3860 fe-connect.c:4487 fe-connect.c:5201 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "opción de conexión no válida «%s»\n" -#: fe-connect.c:3853 fe-connect.c:4318 +#: fe-connect.c:3876 fe-connect.c:4355 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:3893 +#: fe-connect.c:3916 msgid "could not get home directory to locate service definition file" msgstr "no se pudo obtener el directorio home para localizar el archivo de definición de servicio" -#: fe-connect.c:3926 +#: fe-connect.c:3949 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "la definición de servicio «%s» no fue encontrada\n" -#: fe-connect.c:3949 +#: fe-connect.c:3972 #, c-format msgid "service file \"%s\" not found\n" msgstr "el archivo de servicio «%s» no fue encontrado\n" -#: fe-connect.c:3962 +#: fe-connect.c:3985 #, 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:4033 fe-connect.c:4067 +#: fe-connect.c:4056 fe-connect.c:4100 #, 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:4710 +#: fe-connect.c:4067 +#, 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:4745 #, 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:4780 +#: fe-connect.c:4815 #, 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:4787 +#: fe-connect.c:4822 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" -msgstr "la dirección de anfitrión IPv6 no puede ser vacía en la URI: «%s»\n" +msgstr "la dirección IPv6 no puede ser vacía en la URI: «%s»\n" -#: fe-connect.c:4802 +#: fe-connect.c:4837 #, 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:4916 +#: fe-connect.c:4951 #, 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:4936 +#: fe-connect.c:4971 #, 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:5007 +#: fe-connect.c:5022 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "parámetro de URI no válido: «%s»\n" -#: fe-connect.c:5079 +#: fe-connect.c:5096 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "elemento escapado con %% no válido: «%s»\n" -#: fe-connect.c:5089 +#: fe-connect.c:5106 #, 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:5420 +#: fe-connect.c:5437 msgid "connection pointer is NULL\n" msgstr "el puntero de conexión es NULL\n" -#: fe-connect.c:5706 +#: fe-connect.c:5723 #, 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:5715 +#: fe-connect.c:5732 #, 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:5821 +#: fe-connect.c:5838 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "contraseña obtenida desde el archivo «%s»\n" @@ -434,94 +449,94 @@ msgstr "contraseña obtenida desde el archivo «%s»\n" msgid "NOTICE" msgstr "AVISO" -#: fe-exec.c:1121 fe-exec.c:1179 fe-exec.c:1225 +#: fe-exec.c:1122 fe-exec.c:1180 fe-exec.c:1226 msgid "command string is a null pointer\n" msgstr "la cadena de orden es un puntero nulo\n" -#: fe-exec.c:1185 fe-exec.c:1231 fe-exec.c:1326 +#: fe-exec.c:1186 fe-exec.c:1232 fe-exec.c:1327 msgid "number of parameters must be between 0 and 65535\n" msgstr "el número de parámetros debe estar entre 0 y 65535\n" -#: fe-exec.c:1219 fe-exec.c:1320 +#: fe-exec.c:1220 fe-exec.c:1321 msgid "statement name is a null pointer\n" msgstr "el nombre de sentencia es un puntero nulo\n" -#: fe-exec.c:1239 fe-exec.c:1403 fe-exec.c:2118 fe-exec.c:2317 +#: fe-exec.c:1240 fe-exec.c:1404 fe-exec.c:2119 fe-exec.c:2318 msgid "function requires at least protocol version 3.0\n" msgstr "la función requiere protocolo 3.0 o superior\n" -#: fe-exec.c:1357 +#: fe-exec.c:1358 msgid "no connection to the server\n" msgstr "no hay conexión con el servidor\n" -#: fe-exec.c:1364 +#: fe-exec.c:1365 msgid "another command is already in progress\n" msgstr "hay otra orden en ejecución\n" -#: fe-exec.c:1479 +#: fe-exec.c:1480 msgid "length must be given for binary parameter\n" msgstr "el largo debe ser especificado para un parámetro binario\n" -#: fe-exec.c:1748 +#: fe-exec.c:1749 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "asyncStatus no esperado: %d\n" -#: fe-exec.c:1768 +#: fe-exec.c:1769 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc «%s» falló durante el evento PGEVT_RESULTCREATE\n" -#: fe-exec.c:1928 +#: fe-exec.c:1929 msgid "COPY terminated by new PQexec" msgstr "COPY terminado por un nuevo PQexec" -#: fe-exec.c:1936 +#: fe-exec.c:1937 msgid "COPY IN state must be terminated first\n" msgstr "el estado COPY IN debe ser terminado primero\n" -#: fe-exec.c:1956 +#: fe-exec.c:1957 msgid "COPY OUT state must be terminated first\n" msgstr "el estado COPY OUT debe ser terminado primero\n" -#: fe-exec.c:1964 +#: fe-exec.c:1965 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec no está permitido durante COPY BOTH\n" -#: fe-exec.c:2207 fe-exec.c:2274 fe-exec.c:2364 fe-protocol2.c:1327 -#: fe-protocol3.c:1683 +#: fe-exec.c:2208 fe-exec.c:2275 fe-exec.c:2365 fe-protocol2.c:1352 +#: fe-protocol3.c:1710 msgid "no COPY in progress\n" msgstr "no hay COPY alguno en ejecución\n" -#: fe-exec.c:2556 +#: fe-exec.c:2555 msgid "connection in wrong state\n" msgstr "la conexión está en un estado incorrecto\n" -#: fe-exec.c:2587 +#: fe-exec.c:2586 msgid "invalid ExecStatusType code" msgstr "el código de ExecStatusType no es válido" -#: fe-exec.c:2651 fe-exec.c:2674 +#: fe-exec.c:2650 fe-exec.c:2673 #, 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:2667 +#: fe-exec.c:2666 #, 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:2689 +#: fe-exec.c:2688 #, 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:2999 +#: fe-exec.c:2998 #, c-format msgid "could not interpret result from server: %s" msgstr "no se pudo interpretar el resultado del servidor: %s" -#: fe-exec.c:3238 fe-exec.c:3322 +#: fe-exec.c:3237 fe-exec.c:3321 msgid "incomplete multibyte character\n" msgstr "carácter multibyte incompleto\n" @@ -618,12 +633,12 @@ 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:642 fe-misc.c:841 +#: fe-misc.c:642 fe-misc.c:842 msgid "connection not open\n" msgstr "la conexión no está abierta\n" -#: fe-misc.c:811 fe-secure.c:388 fe-secure.c:468 fe-secure.c:549 -#: fe-secure.c:658 +#: fe-misc.c:812 fe-secure-openssl.c:249 fe-secure-openssl.c:355 +#: fe-secure.c:253 fe-secure.c:362 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -633,15 +648,15 @@ msgstr "" "\tProbablemente se debe a que el servidor terminó de manera anormal\n" "\tantes o durante el procesamiento de la petición.\n" -#: fe-misc.c:1007 +#: fe-misc.c:1015 msgid "timeout expired\n" msgstr "tiempo de espera agotado\n" -#: fe-misc.c:1052 +#: fe-misc.c:1060 msgid "socket not open\n" msgstr "el socket no está abierto\n" -#: fe-misc.c:1075 +#: fe-misc.c:1083 #, c-format msgid "select() failed: %s\n" msgstr "select() fallida: %s\n" @@ -661,279 +676,279 @@ msgstr "el estado %c no es válido, probablemente por corrupción de memoria\n" msgid "message type 0x%02x arrived from server while idle" msgstr "un mensaje de tipo 0x%02x llegó del servidor estando inactivo" -#: fe-protocol2.c:522 +#: fe-protocol2.c:503 fe-protocol2.c:538 fe-protocol2.c:1049 +#: fe-protocol3.c:209 fe-protocol3.c:236 fe-protocol3.c:253 fe-protocol3.c:324 +#: fe-protocol3.c:995 +msgid "out of memory" +msgstr "memoria agotada" + +#: fe-protocol2.c:529 #, c-format msgid "unexpected character %c following empty query response (\"I\" message)" msgstr "carácter %c no esperado, siguiendo una respuesta de consulta vacía (mensaje «I»)" -#: fe-protocol2.c:580 +#: fe-protocol2.c:595 #, c-format msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" msgstr "el servidor envió datos (mensaje «D») sin precederlos con una descripción de fila (mensaje «T»)" -#: fe-protocol2.c:598 +#: fe-protocol2.c:613 #, c-format msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" msgstr "el servidor envió datos binarios (mensaje «B») sin precederlos con una description de fila (mensaje «T»)" -#: fe-protocol2.c:618 fe-protocol3.c:385 +#: fe-protocol2.c:633 fe-protocol3.c:402 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "se ha recibido una respuesta inesperada del servidor; el primer carácter recibido fue «%c»\n" -#: fe-protocol2.c:747 fe-protocol2.c:922 fe-protocol3.c:600 fe-protocol3.c:782 +#: fe-protocol2.c:762 fe-protocol2.c:937 fe-protocol3.c:617 fe-protocol3.c:799 msgid "out of memory for query result" msgstr "no hay suficiente memoria para el resultado de la consulta" -#: fe-protocol2.c:1370 fe-protocol3.c:1752 +#: fe-protocol2.c:1395 fe-protocol3.c:1779 #, c-format msgid "%s" msgstr "%s" -#: fe-protocol2.c:1382 +#: fe-protocol2.c:1407 #, c-format msgid "lost synchronization with server, resetting connection" msgstr "se perdió la sincronía con el servidor, reseteando la conexión" -#: fe-protocol2.c:1516 fe-protocol2.c:1548 fe-protocol3.c:1955 +#: fe-protocol2.c:1541 fe-protocol2.c:1573 fe-protocol3.c:1982 #, c-format msgid "protocol error: id=0x%x\n" msgstr "error de protocolo: id=0x%x\n" -#: fe-protocol3.c:341 +#: fe-protocol3.c:358 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:406 +#: fe-protocol3.c:423 #, 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:427 +#: fe-protocol3.c:444 #, 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:478 fe-protocol3.c:518 +#: fe-protocol3.c:495 fe-protocol3.c:535 msgid "insufficient data in \"T\" message" msgstr "datos insuficientes en el mensaje «T»" -#: fe-protocol3.c:551 +#: fe-protocol3.c:568 msgid "extraneous data in \"T\" message" msgstr "datos ininteligibles en mensaje «T»" -#: fe-protocol3.c:690 fe-protocol3.c:722 fe-protocol3.c:740 +#: fe-protocol3.c:707 fe-protocol3.c:739 fe-protocol3.c:757 msgid "insufficient data in \"D\" message" msgstr "datos insuficientes en el mensaje «D»" -#: fe-protocol3.c:696 +#: fe-protocol3.c:713 msgid "unexpected field count in \"D\" message" msgstr "cantidad de campos inesperada en mensaje «D»" -#: fe-protocol3.c:749 +#: fe-protocol3.c:766 msgid "extraneous data in \"D\" message" msgstr "datos ininteligibles en mensaje «D»" #. translator: %s represents a digit string -#: fe-protocol3.c:878 fe-protocol3.c:897 +#: fe-protocol3.c:898 fe-protocol3.c:917 #, c-format msgid " at character %s" msgstr " en el carácter %s" -#: fe-protocol3.c:910 +#: fe-protocol3.c:930 #, c-format msgid "DETAIL: %s\n" msgstr "DETALLE: %s\n" -#: fe-protocol3.c:913 +#: fe-protocol3.c:933 #, c-format msgid "HINT: %s\n" msgstr "SUGERENCIA: %s\n" -#: fe-protocol3.c:916 +#: fe-protocol3.c:936 #, c-format msgid "QUERY: %s\n" msgstr "CONSULTA: %s\n" -#: fe-protocol3.c:919 +#: fe-protocol3.c:939 #, c-format msgid "CONTEXT: %s\n" msgstr "CONTEXTO: %s\n" -#: fe-protocol3.c:926 +#: fe-protocol3.c:946 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "NOMBRE DE ESQUEMA: %s\n" -#: fe-protocol3.c:930 +#: fe-protocol3.c:950 #, c-format msgid "TABLE NAME: %s\n" msgstr "NOMBRE DE TABLA: %s\n" -#: fe-protocol3.c:934 +#: fe-protocol3.c:954 #, c-format msgid "COLUMN NAME: %s\n" msgstr "NOMBRE DE COLUMNA: %s\n" -#: fe-protocol3.c:938 +#: fe-protocol3.c:958 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "NOMBRE TIPO DE DATO: %s\n" -#: fe-protocol3.c:942 +#: fe-protocol3.c:962 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "NOMBRE DE RESTRICCIÓN: %s\n" -#: fe-protocol3.c:954 +#: fe-protocol3.c:974 msgid "LOCATION: " msgstr "UBICACIÓN: " -#: fe-protocol3.c:956 +#: fe-protocol3.c:976 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:958 +#: fe-protocol3.c:978 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1182 +#: fe-protocol3.c:1209 #, c-format msgid "LINE %d: " msgstr "LÍNEA %d: " -#: fe-protocol3.c:1577 +#: fe-protocol3.c:1604 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: no se está haciendo COPY OUT de texto\n" -#: fe-secure.c:270 fe-secure.c:1138 fe-secure.c:1358 +#: fe-secure-openssl.c:146 fe-secure-openssl.c:1006 fe-secure-openssl.c:1226 #, c-format msgid "could not acquire mutex: %s\n" msgstr "no se pudo adquirir el mutex: %s\n" -#: fe-secure.c:282 +#: fe-secure-openssl.c:158 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "no se pudo establecer conexión SSL: %s\n" -#: fe-secure.c:393 fe-secure.c:554 fe-secure.c:1487 +#: fe-secure-openssl.c:254 fe-secure-openssl.c:360 fe-secure-openssl.c:1349 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "ERROR en llamada SSL: %s\n" -#: fe-secure.c:400 fe-secure.c:561 fe-secure.c:1491 +#: fe-secure-openssl.c:261 fe-secure-openssl.c:367 fe-secure-openssl.c:1353 msgid "SSL SYSCALL error: EOF detected\n" msgstr "ERROR en llamada SSL: detectado fin de archivo\n" -#: fe-secure.c:411 fe-secure.c:572 fe-secure.c:1500 +#: fe-secure-openssl.c:272 fe-secure-openssl.c:378 fe-secure-openssl.c:1362 #, c-format msgid "SSL error: %s\n" msgstr "error de SSL: %s\n" -#: fe-secure.c:426 fe-secure.c:587 +#: fe-secure-openssl.c:287 fe-secure-openssl.c:393 msgid "SSL connection has been closed unexpectedly\n" msgstr "la conexión SSL se ha cerrado inesperadamente\n" -#: fe-secure.c:432 fe-secure.c:593 fe-secure.c:1509 +#: fe-secure-openssl.c:293 fe-secure-openssl.c:399 fe-secure-openssl.c:1371 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "código de error SSL no reconocido: %d\n" -#: fe-secure.c:476 -#, c-format -msgid "could not receive data from server: %s\n" -msgstr "no se pudo recibir datos del servidor: %s\n" - -#: fe-secure.c:665 -#, c-format -msgid "could not send data to server: %s\n" -msgstr "no se pudo enviar datos al servidor: %s\n" - -#: fe-secure.c:785 fe-secure.c:802 -msgid "could not get server common name from server certificate\n" -msgstr "no se pudo obtener el common name desde el certificado del servidor\n" +#: fe-secure-openssl.c:511 +msgid "SSL certificate's name entry is missing\n" +msgstr "falta el elemento de nombre en el certificado SSL\n" -#: fe-secure.c:815 -msgid "SSL certificate's common name contains embedded null\n" -msgstr "el common name del certificado SSL contiene un carácter null\n" +#: fe-secure-openssl.c:541 +msgid "SSL certificate's name contains embedded null\n" +msgstr "el elemento de nombre en el certificado SSL contiene un carácter null\n" -#: fe-secure.c:827 +#: fe-secure-openssl.c:592 msgid "host name must be specified for a verified SSL connection\n" msgstr "el nombre de servidor debe ser especificado para una conexión SSL verificada\n" -#: fe-secure.c:841 +#: fe-secure-openssl.c:692 #, c-format -msgid "server common name \"%s\" does not match host name \"%s\"\n" -msgstr "el common name «%s» del servidor no coincide con el nombre de anfitrión «%s»\n" +msgid "server certificate for \"%s\" does not match host name \"%s\"\n" +msgstr "el certificado de servidor para «%s» no coincide con el nombre de servidor «%s»\n" + +#: fe-secure-openssl.c:698 +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.c:982 +#: fe-secure-openssl.c:845 #, c-format msgid "could not create SSL context: %s\n" msgstr "no se pudo crear un contexto SSL: %s\n" -#: fe-secure.c:1108 +#: fe-secure-openssl.c:976 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "no se pudo abrir el archivo de certificado «%s»: %s\n" -#: fe-secure.c:1147 fe-secure.c:1162 +#: fe-secure-openssl.c:1015 fe-secure-openssl.c:1030 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "no se pudo leer el archivo de certificado «%s»: %s\n" -#: fe-secure.c:1217 +#: fe-secure-openssl.c:1085 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "no se pudo cargar el motor SSL «%s»: %s\n" -#: fe-secure.c:1229 +#: fe-secure-openssl.c:1097 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "no se pudo inicializar el motor SSL «%s»: %s\n" -#: fe-secure.c:1245 +#: fe-secure-openssl.c:1113 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "no se pudo leer el archivo de la llave privada SSL «%s» desde el motor «%s»: %s\n" -#: fe-secure.c:1259 +#: fe-secure-openssl.c:1127 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "no se pudo leer la llave privada SSL «%s» desde el motor «%s»: %s\n" -#: fe-secure.c:1296 +#: fe-secure-openssl.c:1164 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "el certificado está presente, pero no la llave privada «%s»\n" -#: fe-secure.c:1304 +#: fe-secure-openssl.c:1172 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "el archivo de la llave privada «%s» tiene permiso de lectura para el grupo u otros; los permisos deberían ser u=rw (0600) o menos\n" -#: fe-secure.c:1315 +#: fe-secure-openssl.c:1183 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "no se pudo cargar el archivo de la llave privada «%s»: %s\n" -#: fe-secure.c:1329 +#: fe-secure-openssl.c:1197 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "el certificado no coincide con la llave privada «%s»: %s\n" -#: fe-secure.c:1367 +#: fe-secure-openssl.c:1235 #, c-format msgid "could not read root certificate file \"%s\": %s\n" msgstr "no se pudo leer la lista de certificado raíz «%s»: %s\n" -#: fe-secure.c:1397 +#: fe-secure-openssl.c:1265 #, c-format msgid "SSL library does not support CRL certificates (file \"%s\")\n" msgstr "la biblioteca SSL no soporta certificados CRL (archivo «%s»)\n" -#: fe-secure.c:1430 +#: fe-secure-openssl.c:1298 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" @@ -941,7 +956,7 @@ msgstr "" "no se pudo obtener el directorio «home» para ubicar el archivo del certificado raíz\n" "Debe ya sea entregar este archivo, o bien cambiar sslmode para deshabilitar la verificación de certificados del servidor.\n" -#: fe-secure.c:1434 +#: fe-secure-openssl.c:1302 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -950,22 +965,32 @@ msgstr "" "el archivo de certificado raíz «%s» no existe\n" "Debe ya sea entregar este archivo, o bien cambiar sslmode para deshabilitar la verificación de certificados del servidor.\n" -#: fe-secure.c:1528 +#: fe-secure-openssl.c:1390 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "el certificado no pudo ser obtenido: %s\n" -#: fe-secure.c:1624 +#: fe-secure-openssl.c:1482 #, c-format msgid "no SSL error reported" msgstr "código de error SSL no reportado" -#: fe-secure.c:1633 +#: fe-secure-openssl.c:1491 #, c-format msgid "SSL error code %lu" msgstr "código de error SSL %lu" -#: win32.c:322 +#: fe-secure.c:261 +#, c-format +msgid "could not receive data from server: %s\n" +msgstr "no se pudo recibir datos del servidor: %s\n" + +#: fe-secure.c:369 +#, c-format +msgid "could not send data to server: %s\n" +msgstr "no se pudo enviar datos al servidor: %s\n" + +#: win32.c:317 #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "código de error de socket no reconocido: 0x%08X/%d" diff --git a/src/interfaces/libpq/po/it.po b/src/interfaces/libpq/po/it.po index 3dd56720fd12a..6bd65aa1775d2 100644 --- a/src/interfaces/libpq/po/it.po +++ b/src/interfaces/libpq/po/it.po @@ -38,10 +38,10 @@ # msgid "" msgstr "" -"Project-Id-Version: libpq (PostgreSQL) 9.4\n" +"Project-Id-Version: libpq (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-07-30 04:08+0000\n" -"PO-Revision-Date: 2013-10-04 01:18+0100\n" +"POT-Creation-Date: 2015-07-19 17:38+0000\n" +"PO-Revision-Date: 2015-07-20 00:30+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -66,11 +66,13 @@ msgid "duplicate GSS authentication request\n" msgstr "richiesta di autenticazione GSS duplicata\n" #: fe-auth.c:197 fe-auth.c:307 fe-auth.c:381 fe-auth.c:416 fe-auth.c:512 -#: fe-connect.c:2005 fe-connect.c:3395 fe-connect.c:3647 fe-connect.c:4060 -#: fe-connect.c:4155 fe-connect.c:4420 fe-connect.c:4492 fe-connect.c:4510 -#: fe-connect.c:4526 fe-connect.c:4608 fe-connect.c:4958 fe-connect.c:5108 -#: fe-exec.c:3340 fe-exec.c:3505 fe-lobj.c:896 fe-protocol2.c:1181 -#: fe-protocol3.c:1544 fe-secure.c:792 fe-secure.c:1201 +#: fe-auth.c:778 fe-connect.c:701 fe-connect.c:898 fe-connect.c:1074 +#: fe-connect.c:2085 fe-connect.c:3477 fe-connect.c:3729 fe-connect.c:3848 +#: fe-connect.c:4088 fe-connect.c:4168 fe-connect.c:4267 fe-connect.c:4519 +#: fe-connect.c:4548 fe-connect.c:4620 fe-connect.c:4638 fe-connect.c:4734 +#: fe-connect.c:5068 fe-connect.c:5218 fe-exec.c:3339 fe-exec.c:3504 +#: fe-lobj.c:896 fe-protocol2.c:1206 fe-protocol3.c:1571 +#: fe-secure-openssl.c:527 fe-secure-openssl.c:1069 msgid "out of memory\n" msgstr "memoria esaurita\n" @@ -116,22 +118,37 @@ msgstr "l'autenticazione Crypt non è supportata\n" msgid "authentication method %u not supported\n" msgstr "l'autenticazione %u non è supportata\n" -#: fe-connect.c:798 +#: fe-auth.c:753 +#, c-format +msgid "user name lookup failure: error code %lu\n" +msgstr "ricerca del nome utente fallita: codice di errore %lu\n" + +#: fe-auth.c:763 fe-connect.c:2012 +#, c-format +msgid "could not look up local user ID %d: %s\n" +msgstr "ricerca dell'ID utente locale %d non riuscita: %s\n" + +#: fe-auth.c:768 fe-connect.c:2017 +#, c-format +msgid "local user with ID %d does not exist\n" +msgstr "l'utente locale con ID %d non esiste\n" + +#: fe-connect.c:840 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "valore sslmode errato: \"%s\"\n" -#: fe-connect.c:819 +#: fe-connect.c:861 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "valore sslmode \"%s\" non valido quando il supporto SSL non è compilato\n" -#: fe-connect.c:1024 +#: fe-connect.c:1098 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "impostazione del socket in modalità TCP no delay fallita: %s\n" -#: fe-connect.c:1054 +#: fe-connect.c:1128 #, c-format msgid "" "could not connect to server: %s\n" @@ -142,7 +159,7 @@ msgstr "" "\tVerifica che il server locale sia in funzione e che\n" "\taccetti connessioni sul socket di dominio Unix \"%s\"\n" -#: fe-connect.c:1109 +#: fe-connect.c:1183 #, c-format msgid "" "could not connect to server: %s\n" @@ -153,7 +170,7 @@ msgstr "" "\tVerifica che il server all'indirizzo \"%s\" (%s) sia in funzione\n" "\te che accetti connessioni TCP/IP sulla porta %s\n" -#: fe-connect.c:1118 +#: fe-connect.c:1192 #, c-format msgid "" "could not connect to server: %s\n" @@ -164,302 +181,302 @@ msgstr "" "\tVerifica che il server all'indirizzo \"%s\" sia in funzione\n" "\te che accetti connessioni TCP/IP sulla porta %s\n" -#: fe-connect.c:1169 +#: fe-connect.c:1243 #, c-format msgid "setsockopt(TCP_KEEPIDLE) failed: %s\n" msgstr "chiamata setsockopt(TCP_KEEPIDLE) fallita: %s\n" -#: fe-connect.c:1182 +#: fe-connect.c:1256 #, c-format msgid "setsockopt(TCP_KEEPALIVE) failed: %s\n" msgstr "chiamata setsockopt(TCP_KEEPALIVE) fallita: %s\n" -#: fe-connect.c:1214 +#: fe-connect.c:1288 #, c-format msgid "setsockopt(TCP_KEEPINTVL) failed: %s\n" msgstr "chiamata setsockopt(TCP_KEEPINTVL) fallita: %s\n" -#: fe-connect.c:1246 +#: fe-connect.c:1320 #, c-format msgid "setsockopt(TCP_KEEPCNT) failed: %s\n" msgstr "chiamata setsockopt(TCP_KEEPCNT) fallita: %s\n" -#: fe-connect.c:1294 +#: fe-connect.c:1368 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "chiamata WSAIoctl(SIO_KEEPALIVE_VALS) fallito: %ui\n" -#: fe-connect.c:1346 +#: fe-connect.c:1420 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "numero di porta non valido: \"%s\"\n" -#: fe-connect.c:1379 +#: fe-connect.c:1453 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Il percorso del socket di dominio unix \"%s\" è troppo lungo (massimo %d byte)\n" -#: fe-connect.c:1398 +#: fe-connect.c:1472 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "conversione del nome host \"%s\" in indirizzo fallita: %s\n" -#: fe-connect.c:1402 +#: fe-connect.c:1476 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "conversione del percorso del socket di dominio Unix \"%s\" in indirizzo fallita: %s\n" -#: fe-connect.c:1607 +#: fe-connect.c:1681 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "stato della connessione non valido, probabilmente indica una corruzione della memoria\n" -#: fe-connect.c:1647 +#: fe-connect.c:1721 #, c-format msgid "could not create socket: %s\n" msgstr "creazione del socket fallita: %s\n" -#: fe-connect.c:1669 +#: fe-connect.c:1743 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "impostazione del socket in modalità non bloccante fallita: %s\n" -#: fe-connect.c:1680 +#: fe-connect.c:1754 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "impostazione del socket in modalità close-on-exec fallita: %s\n" -#: fe-connect.c:1699 +#: fe-connect.c:1773 msgid "keepalives parameter must be an integer\n" msgstr "il parametro keepalives dev'essere un intero\n" -#: fe-connect.c:1712 +#: fe-connect.c:1786 #, c-format msgid "setsockopt(SO_KEEPALIVE) failed: %s\n" msgstr "chiamata setsockopt(SO_KEEPALIVE) fallita: %s\n" -#: fe-connect.c:1849 +#: fe-connect.c:1923 #, c-format msgid "could not get socket error status: %s\n" msgstr "lettura dello stato di errore del socket fallita: %s\n" -#: fe-connect.c:1883 +#: fe-connect.c:1957 #, c-format msgid "could not get client address from socket: %s\n" msgstr "non è stato possibile ottenere l'indirizzo del client dal socket: %s\n" -#: fe-connect.c:1924 +#: fe-connect.c:1999 msgid "requirepeer parameter is not supported on this platform\n" msgstr "il parametro requirepeer non è supportato su questa piattaforma\n" -#: fe-connect.c:1927 +#: fe-connect.c:2002 #, c-format msgid "could not get peer credentials: %s\n" msgstr "non è stato possibile ottenere le credenziali del peer: %s\n" -#: fe-connect.c:1937 -#, c-format -msgid "local user with ID %d does not exist\n" -msgstr "l'utente locale con ID %d non esiste\n" - -#: fe-connect.c:1945 +#: fe-connect.c:2025 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer specifica \"%s\", ma il vero nome utente del peer è \"%s\"\n" -#: fe-connect.c:1979 +#: fe-connect.c:2059 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "invio del pacchetto di negoziazione SSL fallito: %s\n" -#: fe-connect.c:2018 +#: fe-connect.c:2098 #, c-format msgid "could not send startup packet: %s\n" msgstr "invio del pacchetto di avvio fallito: %s\n" -#: fe-connect.c:2088 +#: fe-connect.c:2168 msgid "server does not support SSL, but SSL was required\n" msgstr "il server non supporta SSL, ma SSL è stato richiesto\n" -#: fe-connect.c:2114 +#: fe-connect.c:2194 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "ricevuta risposta errata alla negoziazione SSL: %c\n" -#: fe-connect.c:2189 fe-connect.c:2222 +#: fe-connect.c:2269 fe-connect.c:2302 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "prevista richiesta di autenticazione dal server, ma è stato ricevuto %c\n" -#: fe-connect.c:2389 +#: fe-connect.c:2469 #, c-format msgid "out of memory allocating GSSAPI buffer (%d)" msgstr "errore di memoria nell'allocazione del buffer GSSAPI (%d)" -#: fe-connect.c:2474 +#: fe-connect.c:2554 msgid "unexpected message from server during startup\n" msgstr "messaggio imprevisto dal server durante l'avvio\n" -#: fe-connect.c:2568 +#: fe-connect.c:2648 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "stato connessione errato %d, probabilmente indica una corruzione di memoria\n" -#: fe-connect.c:3001 fe-connect.c:3061 +#: fe-connect.c:3083 fe-connect.c:3143 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc \"%s\" fallito durante l'evento PGEVT_CONNRESET\n" -#: fe-connect.c:3408 +#: fe-connect.c:3490 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "URL LDAP \"%s\" non corretta: lo schema deve essere ldap://\n" -#: fe-connect.c:3423 +#: fe-connect.c:3505 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "URL LDAP \"%s\" non corretta: distinguished name non trovato\n" -#: fe-connect.c:3434 fe-connect.c:3487 +#: fe-connect.c:3516 fe-connect.c:3569 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "URL LDAP \"%s\" non corretta: deve avere esattamente un attributo\n" -#: fe-connect.c:3444 fe-connect.c:3501 +#: fe-connect.c:3526 fe-connect.c:3583 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "URL LDAP \"%s\" non corretta: deve essere specificato la portata della ricerca (base/one/sub)\n" -#: fe-connect.c:3455 +#: fe-connect.c:3537 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "URL LDAP \"%s\" non corretta: filtro non specificato\n" -#: fe-connect.c:3476 +#: fe-connect.c:3558 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "URL LDAP \"%s\" non corretta: numero di porta non valido\n" -#: fe-connect.c:3510 +#: fe-connect.c:3592 msgid "could not create LDAP structure\n" msgstr "creazione della struttura dati LDAP fallita\n" -#: fe-connect.c:3586 +#: fe-connect.c:3668 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "ricerca del server LDAP fallita: %s\n" -#: fe-connect.c:3597 +#: fe-connect.c:3679 msgid "more than one entry found on LDAP lookup\n" msgstr "trovata più di una voce nella ricerca LDAP\n" -#: fe-connect.c:3598 fe-connect.c:3610 +#: fe-connect.c:3680 fe-connect.c:3692 msgid "no entry found on LDAP lookup\n" msgstr "nessun elemento trovato per la ricerca LDAP\n" -#: fe-connect.c:3621 fe-connect.c:3634 +#: fe-connect.c:3703 fe-connect.c:3716 msgid "attribute has no values on LDAP lookup\n" msgstr "l'attributo non ha valori nella ricerca LDAP\n" -#: fe-connect.c:3686 fe-connect.c:3705 fe-connect.c:4194 +#: fe-connect.c:3768 fe-connect.c:3787 fe-connect.c:4306 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "manca \"=\" dopo \"%s\" nella stringa di connessione\n" -#: fe-connect.c:3769 fe-connect.c:4374 fe-connect.c:5090 +#: fe-connect.c:3860 fe-connect.c:4487 fe-connect.c:5201 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "opzione di connessione errata \"%s\"\n" -#: fe-connect.c:3785 fe-connect.c:4243 +#: fe-connect.c:3876 fe-connect.c:4355 msgid "unterminated quoted string in connection info string\n" msgstr "stringa tra virgolette non terminata nella stringa di connessione\n" -#: fe-connect.c:3825 +#: fe-connect.c:3916 msgid "could not get home directory to locate service definition file" msgstr "directory home non trovata per la localizzazione del file di definizione di servizio" -#: fe-connect.c:3858 +#: fe-connect.c:3949 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "il file di definizione di servizio \"%s\" non è stato trovato\n" -#: fe-connect.c:3881 +#: fe-connect.c:3972 #, c-format msgid "service file \"%s\" not found\n" msgstr "il file di servizio \"%s\" non è stato trovato\n" -#: fe-connect.c:3894 +#: fe-connect.c:3985 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "la riga %d nel file di servizio \"%s\" è troppo lunga\n" -#: fe-connect.c:3965 fe-connect.c:3992 +#: fe-connect.c:4056 fe-connect.c:4100 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "errore di sintassi del file di servizio \"%s\", alla riga %d\n" -#: fe-connect.c:4618 +#: fe-connect.c:4067 +#, c-format +msgid "nested service specifications not supported in service file \"%s\", line %d\n" +msgstr "specifiche di servizio annidate non supportate nel file di servizio \"%s\", linea %d\n" + +#: fe-connect.c:4745 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "URI invalida propagata alla routine di parsing interna: \"%s\"\n" -#: fe-connect.c:4688 +#: fe-connect.c:4815 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "fine stringa raggiunta cercando un \"]\" corrispondente nell'indirizzo host IPv6 nella URI: \"%s\"\n" -#: fe-connect.c:4695 +#: fe-connect.c:4822 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "l'indirizzo host IPv6 non dev'essere assente nella URI: \"%s\"\n" -#: fe-connect.c:4710 +#: fe-connect.c:4837 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "carattere inatteso \"%c\" in posizione %d nella uri URI (atteso \":\" oppure \"/\"): \"%s\"\n" -#: fe-connect.c:4824 +#: fe-connect.c:4951 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "separatore chiave/valore \"=\" in eccesso nei parametri della URI: \"%s\"\n" -#: fe-connect.c:4844 +#: fe-connect.c:4971 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "separatore chiave/valore \"=\" mancante nei parametri della URI: \"%s\"\n" -#: fe-connect.c:4915 +#: fe-connect.c:5022 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "parametro URI non valido: \"%s\"\n" -#: fe-connect.c:4985 +#: fe-connect.c:5096 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "simbolo percent-encoded non valido \"%s\"\n" -#: fe-connect.c:4995 +#: fe-connect.c:5106 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "valore non ammesso %%00 nel valore percent-encoded: \"%s\"\n" -#: fe-connect.c:5335 +#: fe-connect.c:5437 msgid "connection pointer is NULL\n" msgstr "il puntatore della connessione è NULL\n" -#: fe-connect.c:5621 +#: fe-connect.c:5723 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "ATTENZIONE: il file delle password \"%s\" non è un file regolare\n" -#: fe-connect.c:5630 +#: fe-connect.c:5732 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "" "ATTENZIONE: Il file delle password %s ha privilegi di accesso in lettura e scrittura per tutti;\n" "i permessi dovrebbero essere u=rw (0600) o inferiori\n" -#: fe-connect.c:5730 +#: fe-connect.c:5838 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "password ottenuta dal file \"%s\"\n" @@ -468,95 +485,95 @@ msgstr "password ottenuta dal file \"%s\"\n" msgid "NOTICE" msgstr "NOTIFICA" -#: fe-exec.c:1121 fe-exec.c:1179 fe-exec.c:1225 +#: fe-exec.c:1122 fe-exec.c:1180 fe-exec.c:1226 msgid "command string is a null pointer\n" msgstr "il testo del comando è un puntatore nullo\n" -#: fe-exec.c:1185 fe-exec.c:1231 fe-exec.c:1326 +#: fe-exec.c:1186 fe-exec.c:1232 fe-exec.c:1327 msgid "number of parameters must be between 0 and 65535\n" msgstr "il numero di parametri deve essere tra 0 e 65535\n" -#: fe-exec.c:1219 fe-exec.c:1320 +#: fe-exec.c:1220 fe-exec.c:1321 msgid "statement name is a null pointer\n" msgstr "il nome dell'istruzione è un puntatore nullo\n" -#: fe-exec.c:1239 fe-exec.c:1403 fe-exec.c:2118 fe-exec.c:2317 +#: fe-exec.c:1240 fe-exec.c:1404 fe-exec.c:2119 fe-exec.c:2318 msgid "function requires at least protocol version 3.0\n" msgstr "la funzione richiede almeno il protocollo versione 3.0\n" -#: fe-exec.c:1357 +#: fe-exec.c:1358 msgid "no connection to the server\n" msgstr "nessuna connessione al server\n" -#: fe-exec.c:1364 +#: fe-exec.c:1365 msgid "another command is already in progress\n" msgstr "un altro comando è in esecuzione\n" -#: fe-exec.c:1479 +#: fe-exec.c:1480 msgid "length must be given for binary parameter\n" msgstr "la lunghezza deve essere fornita per i parametri binari\n" -#: fe-exec.c:1748 +#: fe-exec.c:1749 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "asyncStatus imprevisto: %d\n" -#: fe-exec.c:1768 +#: fe-exec.c:1769 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc \"%s\" fallito durante l'evento PGEVT_RESULTCREATE\n" -#: fe-exec.c:1928 +#: fe-exec.c:1929 msgid "COPY terminated by new PQexec" msgstr "COPY terminato da una nuova PQexec" -#: fe-exec.c:1936 +#: fe-exec.c:1937 msgid "COPY IN state must be terminated first\n" msgstr "lo stato COPY IN deve prima essere terminato\n" -#: fe-exec.c:1956 +#: fe-exec.c:1957 msgid "COPY OUT state must be terminated first\n" msgstr "lo stato COPY OUT deve prima essere terminato\n" # NON SONO ASSOLUTAMENTE CONVINTO! -#: fe-exec.c:1964 +#: fe-exec.c:1965 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec not consentito durante COPY BOTH\n" -#: fe-exec.c:2207 fe-exec.c:2274 fe-exec.c:2364 fe-protocol2.c:1327 -#: fe-protocol3.c:1683 +#: fe-exec.c:2208 fe-exec.c:2275 fe-exec.c:2365 fe-protocol2.c:1352 +#: fe-protocol3.c:1710 msgid "no COPY in progress\n" msgstr "nessun comando COPY in corso\n" -#: fe-exec.c:2556 +#: fe-exec.c:2555 msgid "connection in wrong state\n" msgstr "la connessione è in uno stato errato\n" -#: fe-exec.c:2587 +#: fe-exec.c:2586 msgid "invalid ExecStatusType code" msgstr "codice ExecStatusType errato" -#: fe-exec.c:2651 fe-exec.c:2674 +#: fe-exec.c:2650 fe-exec.c:2673 #, c-format msgid "column number %d is out of range 0..%d" msgstr "la colonna numero %d non è compreso tra 0 e %d" -#: fe-exec.c:2667 +#: fe-exec.c:2666 #, c-format msgid "row number %d is out of range 0..%d" msgstr "la riga numero %d non è compreso tra 0 e %d" -#: fe-exec.c:2689 +#: fe-exec.c:2688 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "il parametro numero %d non è compreso tra 0 e %d" -#: fe-exec.c:2999 +#: fe-exec.c:2998 #, c-format msgid "could not interpret result from server: %s" msgstr "errore nell'interpretazione del risultato dal server: %s" -#: fe-exec.c:3238 fe-exec.c:3322 +#: fe-exec.c:3237 fe-exec.c:3321 msgid "incomplete multibyte character\n" msgstr "carattere multibyte incompleto\n" @@ -653,12 +670,12 @@ msgstr "intero di dimensione %lu non supportato da pqGetInt" msgid "integer of size %lu not supported by pqPutInt" msgstr "intero di dimensione %lu non supportato da pqPutInt" -#: fe-misc.c:642 fe-misc.c:838 +#: fe-misc.c:642 fe-misc.c:842 msgid "connection not open\n" msgstr "connessione non aperta\n" -#: fe-misc.c:768 fe-secure.c:388 fe-secure.c:468 fe-secure.c:549 -#: fe-secure.c:658 +#: fe-misc.c:812 fe-secure-openssl.c:249 fe-secure-openssl.c:355 +#: fe-secure.c:253 fe-secure.c:362 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -668,15 +685,15 @@ msgstr "" "\tQuesto probabilmente indica che il server ha terminato in modo anormale\n" "\tprima o durante l'elaborazione della richiesta.\n" -#: fe-misc.c:1004 +#: fe-misc.c:1015 msgid "timeout expired\n" msgstr "timeout scaduto\n" -#: fe-misc.c:1049 +#: fe-misc.c:1060 msgid "socket not open\n" msgstr "socket non aperto\n" -#: fe-misc.c:1072 +#: fe-misc.c:1083 #, c-format msgid "select() failed: %s\n" msgstr "select() fallita: %s\n" @@ -696,279 +713,279 @@ msgstr "stato %c non valido, probabilmente indica una corruzione di memoria\n" msgid "message type 0x%02x arrived from server while idle" msgstr "messaggio tipo 0x%02x arrivato dal server mentre era inattivo" -#: fe-protocol2.c:522 +#: fe-protocol2.c:503 fe-protocol2.c:538 fe-protocol2.c:1049 +#: fe-protocol3.c:209 fe-protocol3.c:236 fe-protocol3.c:253 fe-protocol3.c:324 +#: fe-protocol3.c:995 +msgid "out of memory" +msgstr "memoria esaurita" + +#: fe-protocol2.c:529 #, c-format msgid "unexpected character %c following empty query response (\"I\" message)" msgstr "carattere %c non previsto a seguito di una risposta vuota ad una query (messaggio \"I\")" -#: fe-protocol2.c:580 +#: fe-protocol2.c:595 #, c-format msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" msgstr "il server ha spedito dati (messaggio di tipo \"D\") senza prima il descrittore di riga (messaggio di tipo \"T\")" -#: fe-protocol2.c:598 +#: fe-protocol2.c:613 #, c-format msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" msgstr "il server ha spedito dati binari (messaggio di tipo \"B\") senza prima il descrittore di riga (messaggio di tipo \"T\")" -#: fe-protocol2.c:618 fe-protocol3.c:385 +#: fe-protocol2.c:633 fe-protocol3.c:402 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "risposta inattesa dal server; il primo carattere ricevuto era \"%c\"\n" -#: fe-protocol2.c:747 fe-protocol2.c:922 fe-protocol3.c:600 fe-protocol3.c:782 +#: fe-protocol2.c:762 fe-protocol2.c:937 fe-protocol3.c:617 fe-protocol3.c:799 msgid "out of memory for query result" msgstr "memoria esaurita per il risultato della query" -#: fe-protocol2.c:1370 fe-protocol3.c:1752 +#: fe-protocol2.c:1395 fe-protocol3.c:1779 #, c-format msgid "%s" msgstr "%s" -#: fe-protocol2.c:1382 +#: fe-protocol2.c:1407 #, c-format msgid "lost synchronization with server, resetting connection" msgstr "persa la sincronizzazione con il server, sto resettando la connessione" -#: fe-protocol2.c:1516 fe-protocol2.c:1548 fe-protocol3.c:1955 +#: fe-protocol2.c:1541 fe-protocol2.c:1573 fe-protocol3.c:1982 #, c-format msgid "protocol error: id=0x%x\n" msgstr "errore di protocollo: id=0x%x\n" -#: fe-protocol3.c:341 +#: fe-protocol3.c:358 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "il server ha spedito dati (messaggio di tipo \"D\") senza prima il descrittore di riga (messaggio di tipo \"T\")\n" -#: fe-protocol3.c:406 +#: fe-protocol3.c:423 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "i contenuti del messaggio non sono in accordo con la lunghezza del tipo di messaggio \"%c\"\n" -#: fe-protocol3.c:427 +#: fe-protocol3.c:444 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "persa la sincronizzazione con il server: ricevuto il tipo di messaggio \"%c\" di lunghezza %d\n" -#: fe-protocol3.c:478 fe-protocol3.c:518 +#: fe-protocol3.c:495 fe-protocol3.c:535 msgid "insufficient data in \"T\" message" msgstr "dati insufficienti nel messaggio di tipo \"T\"" -#: fe-protocol3.c:551 +#: fe-protocol3.c:568 msgid "extraneous data in \"T\" message" msgstr "dati estranei nel messaggio di tipo \"T\"" -#: fe-protocol3.c:690 fe-protocol3.c:722 fe-protocol3.c:740 +#: fe-protocol3.c:707 fe-protocol3.c:739 fe-protocol3.c:757 msgid "insufficient data in \"D\" message" msgstr "dati insufficienti nel messaggio di tipo \"D\"" -#: fe-protocol3.c:696 +#: fe-protocol3.c:713 msgid "unexpected field count in \"D\" message" msgstr "numero dei campi non previsto nel messaggio di tipo \"D\"" -#: fe-protocol3.c:749 +#: fe-protocol3.c:766 msgid "extraneous data in \"D\" message" msgstr "dati estranei nel messaggio di tipo \"D\"" #. translator: %s represents a digit string -#: fe-protocol3.c:878 fe-protocol3.c:897 +#: fe-protocol3.c:898 fe-protocol3.c:917 #, c-format msgid " at character %s" msgstr " al carattere %s" -#: fe-protocol3.c:910 +#: fe-protocol3.c:930 #, c-format msgid "DETAIL: %s\n" msgstr "DETTAGLI: %s\n" -#: fe-protocol3.c:913 +#: fe-protocol3.c:933 #, c-format msgid "HINT: %s\n" msgstr "NOTA: %s\n" -#: fe-protocol3.c:916 +#: fe-protocol3.c:936 #, c-format msgid "QUERY: %s\n" msgstr "QUERY: %s\n" -#: fe-protocol3.c:919 +#: fe-protocol3.c:939 #, c-format msgid "CONTEXT: %s\n" msgstr "CONTESTO: %s\n" -#: fe-protocol3.c:926 +#: fe-protocol3.c:946 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "NOME SCHEMA: %s\n" -#: fe-protocol3.c:930 +#: fe-protocol3.c:950 #, c-format msgid "TABLE NAME: %s\n" msgstr "NOME TABELLA: %s\n" -#: fe-protocol3.c:934 +#: fe-protocol3.c:954 #, c-format msgid "COLUMN NAME: %s\n" msgstr "NOME COLONNA: %s\n" -#: fe-protocol3.c:938 +#: fe-protocol3.c:958 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "NOME TIPO DATI: %s\n" -#: fe-protocol3.c:942 +#: fe-protocol3.c:962 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "NOME VINCOLO: %s\n" -#: fe-protocol3.c:954 +#: fe-protocol3.c:974 msgid "LOCATION: " msgstr "POSIZIONE: " -#: fe-protocol3.c:956 +#: fe-protocol3.c:976 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:958 +#: fe-protocol3.c:978 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1182 +#: fe-protocol3.c:1209 #, c-format msgid "LINE %d: " msgstr "RIGA %d: " -#: fe-protocol3.c:1577 +#: fe-protocol3.c:1604 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: COPY OUT testuale ignorato\n" -#: fe-secure.c:270 fe-secure.c:1138 fe-secure.c:1358 +#: fe-secure-openssl.c:146 fe-secure-openssl.c:1006 fe-secure-openssl.c:1226 #, c-format msgid "could not acquire mutex: %s\n" msgstr "acquisizione del mutex fallita: %s\n" -#: fe-secure.c:282 +#: fe-secure-openssl.c:158 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "non è stato possibile stabilire una connessione SSL: %s\n" -#: fe-secure.c:393 fe-secure.c:554 fe-secure.c:1487 +#: fe-secure-openssl.c:254 fe-secure-openssl.c:360 fe-secure-openssl.c:1349 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "errore SSL SYSCALL: %s\n" -#: fe-secure.c:400 fe-secure.c:561 fe-secure.c:1491 +#: fe-secure-openssl.c:261 fe-secure-openssl.c:367 fe-secure-openssl.c:1353 msgid "SSL SYSCALL error: EOF detected\n" msgstr "errore SSL SYSCALL: rilevato EOF\n" -#: fe-secure.c:411 fe-secure.c:572 fe-secure.c:1500 +#: fe-secure-openssl.c:272 fe-secure-openssl.c:378 fe-secure-openssl.c:1362 #, c-format msgid "SSL error: %s\n" msgstr "errore SSL: %s\n" -#: fe-secure.c:426 fe-secure.c:587 +#: fe-secure-openssl.c:287 fe-secure-openssl.c:393 msgid "SSL connection has been closed unexpectedly\n" msgstr "la connessione SSL è stata chiusa inaspettatamente\n" -#: fe-secure.c:432 fe-secure.c:593 fe-secure.c:1509 +#: fe-secure-openssl.c:293 fe-secure-openssl.c:399 fe-secure-openssl.c:1371 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "codice di errore SSL sconosciuto: %d\n" -#: fe-secure.c:476 -#, c-format -msgid "could not receive data from server: %s\n" -msgstr "ricezione dati dal server fallita: %s\n" - -#: fe-secure.c:665 -#, c-format -msgid "could not send data to server: %s\n" -msgstr "invio dati al server fallito: %s\n" - -#: fe-secure.c:785 fe-secure.c:802 -msgid "could not get server common name from server certificate\n" -msgstr "non è stato possibile ottenere in nome comune del server per il certificato del server\n" +#: fe-secure-openssl.c:511 +msgid "SSL certificate's name entry is missing\n" +msgstr "manca il nome del certificato SSL\n" -#: fe-secure.c:815 -msgid "SSL certificate's common name contains embedded null\n" -msgstr "Il nome comune del certificato SSL contiene un null\n" +#: fe-secure-openssl.c:541 +msgid "SSL certificate's name contains embedded null\n" +msgstr "Il nome del certificato SSL contiene null\n" -#: fe-secure.c:827 +#: fe-secure-openssl.c:592 msgid "host name must be specified for a verified SSL connection\n" msgstr "il nome dell'host dev'essere specificato per una connessione SSL verificata\n" -#: fe-secure.c:841 +#: fe-secure-openssl.c:692 #, c-format -msgid "server common name \"%s\" does not match host name \"%s\"\n" -msgstr "il nome comune del server \"%s\" non corrisponde al nome dell'host \"%s\"\n" +msgid "server certificate for \"%s\" does not match host name \"%s\"\n" +msgstr "il certificato per il server \"%s\" non combacia col nome host \"%s\"\n" -#: fe-secure.c:982 +#: fe-secure-openssl.c:698 +msgid "could not get server's host name from server certificate\n" +msgstr "impossibile ottenere il nome dell'host del server dal certificato del server\n" + +#: fe-secure-openssl.c:845 #, c-format msgid "could not create SSL context: %s\n" msgstr "creazione del contesto SSL fallita: %s\n" -#: fe-secure.c:1108 +#: fe-secure-openssl.c:976 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "apertura del file di certificato \"%s\" fallita: %s\n" -#: fe-secure.c:1147 fe-secure.c:1162 +#: fe-secure-openssl.c:1015 fe-secure-openssl.c:1030 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "lettura del file di certificato \"%s\" fallita: %s\n" -#: fe-secure.c:1217 +#: fe-secure-openssl.c:1085 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "caricamento del motore SSL \"%s\" fallito: %s\n" -#: fe-secure.c:1229 +#: fe-secure-openssl.c:1097 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "inizializzazione del motore SSL \"%s\" fallita: %s\n" -#: fe-secure.c:1245 +#: fe-secure-openssl.c:1113 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "lettura del file della chiave privata SSL \"%s\" dal motore \"%s\" fallita: %s\n" -#: fe-secure.c:1259 +#: fe-secure-openssl.c:1127 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "caricamento della chiave privata SSL \"%s\" dal motore \"%s\" fallito: %s\n" -#: fe-secure.c:1296 +#: fe-secure-openssl.c:1164 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "certificato trovato, ma non la chiave privata \"%s\"\n" -#: fe-secure.c:1304 +#: fe-secure-openssl.c:1172 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "Il file della chiave privata \"%s\" ha privilegi di accesso in lettura e scrittura per tutti; i permessi dovrebbero essere u=rw (0600) o inferiori\n" -#: fe-secure.c:1315 +#: fe-secure-openssl.c:1183 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "caricamento del file della chiave privata \"%s\" fallito: %s\n" -#: fe-secure.c:1329 +#: fe-secure-openssl.c:1197 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "il certificato non corrisponde con il file della chiave privata \"%s\": %s\n" -#: fe-secure.c:1367 +#: fe-secure-openssl.c:1235 #, c-format msgid "could not read root certificate file \"%s\": %s\n" msgstr "lettura del file di certificato radice \"%s\" fallita: %s\n" -#: fe-secure.c:1397 +#: fe-secure-openssl.c:1265 #, c-format msgid "SSL library does not support CRL certificates (file \"%s\")\n" msgstr "la libreria SSL non supporta i certificati di tipo CRL (file \"%s\")\n" -#: fe-secure.c:1430 +#: fe-secure-openssl.c:1298 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" @@ -976,7 +993,7 @@ msgstr "" "directory utente non trovata per la locazione del file di certificato radice\n" "Per favore fornisci il file oppure cambia sslmode per disabilitare la verifica del certificato del server.\n" -#: fe-secure.c:1434 +#: fe-secure-openssl.c:1302 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -985,22 +1002,32 @@ msgstr "" "il file \"%s\" del certificato radice non esiste\n" "Per favore fornisci il file oppure cambia sslmode per disabilitare la verifica del certificato del server.\n" -#: fe-secure.c:1528 +#: fe-secure-openssl.c:1390 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "non è stato possibile possibile ottenere il certificato: %s\n" -#: fe-secure.c:1624 +#: fe-secure-openssl.c:1482 #, c-format msgid "no SSL error reported" msgstr "nessun errore SSL riportato" -#: fe-secure.c:1633 +#: fe-secure-openssl.c:1491 #, c-format msgid "SSL error code %lu" msgstr "codice di errore SSL: %lu" -#: win32.c:322 +#: fe-secure.c:261 +#, c-format +msgid "could not receive data from server: %s\n" +msgstr "ricezione dati dal server fallita: %s\n" + +#: fe-secure.c:369 +#, c-format +msgid "could not send data to server: %s\n" +msgstr "invio dati al server fallito: %s\n" + +#: win32.c:317 #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "errore socket sconosciuto: 0x%08X/%d" diff --git a/src/interfaces/libpq/po/pl.po b/src/interfaces/libpq/po/pl.po index eb3d91d41421e..b508e46b07174 100644 --- a/src/interfaces/libpq/po/pl.po +++ b/src/interfaces/libpq/po/pl.po @@ -2,14 +2,15 @@ # Copyright (c) 2005 toczek, xxxtoczekxxx@wp.pl # Distributed under the same licensing terms as PostgreSQL itself. # Begina Felicysym , 2011, 2012, 2013. +# grzegorz , 2015. msgid "" msgstr "" "Project-Id-Version: libpq (PostgreSQL 9.1)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2013-08-29 23:12+0000\n" -"PO-Revision-Date: 2013-08-30 09:26+0200\n" -"Last-Translator: Begina Felicysym \n" -"Language-Team: Begina Felicysym\n" +"POT-Creation-Date: 2015-08-15 18:38+0000\n" +"PO-Revision-Date: 2015-09-20 00:04-0400\n" +"Last-Translator: grzegorz \n" +"Language-Team: begina.felicysym@wp.eu\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,100 +19,103 @@ msgstr "" "|| n%100>=20) ? 1 : 2);\n" "X-Generator: Virtaal 0.7.1\n" -#: fe-auth.c:210 fe-auth.c:429 fe-auth.c:656 -msgid "host name must be specified\n" -msgstr "nazwa hosta musi być określona\n" - -#: fe-auth.c:240 -#, c-format -msgid "could not set socket to blocking mode: %s\n" -msgstr "nie można ustawić gniazda w tryb blokowania: %s\n" - -#: fe-auth.c:258 fe-auth.c:262 -#, c-format -msgid "Kerberos 5 authentication rejected: %*s\n" -msgstr "Kerberos 5 autoryzacja odrzucona: %*s\n" - -#: fe-auth.c:288 -#, c-format -#| msgid "could not restore non-blocking mode on socket: %s\n" -msgid "could not restore nonblocking mode on socket: %s\n" -msgstr "nie można odtworzyć trybu nieblokowanego gniazda: %s\n" - -#: fe-auth.c:400 +#: fe-auth.c:148 msgid "GSSAPI continuation error" msgstr "błąd kontynuowania GSSAPI" -#: fe-auth.c:436 +#: fe-auth.c:177 fe-auth.c:410 +msgid "host name must be specified\n" +msgstr "nazwa hosta musi być określona\n" + +#: fe-auth.c:184 msgid "duplicate GSS authentication request\n" msgstr "podwójne żądanie autoryzacji GSS\n" -#: fe-auth.c:456 +#: fe-auth.c:197 fe-auth.c:307 fe-auth.c:381 fe-auth.c:416 fe-auth.c:512 +#: fe-auth.c:778 fe-connect.c:701 fe-connect.c:898 fe-connect.c:1074 +#: fe-connect.c:2085 fe-connect.c:3477 fe-connect.c:3729 fe-connect.c:3848 +#: fe-connect.c:4088 fe-connect.c:4168 fe-connect.c:4267 fe-connect.c:4519 +#: fe-connect.c:4548 fe-connect.c:4620 fe-connect.c:4638 fe-connect.c:4734 +#: fe-connect.c:5068 fe-connect.c:5218 fe-exec.c:3339 fe-exec.c:3504 +#: fe-lobj.c:896 fe-protocol2.c:1206 fe-protocol3.c:1571 +#: fe-secure-openssl.c:527 fe-secure-openssl.c:1069 +msgid "out of memory\n" +msgstr "brak pamięci\n" + +#: fe-auth.c:210 msgid "GSSAPI name import error" msgstr "błąd importu nazwy GSSAPI" -#: fe-auth.c:542 +#: fe-auth.c:296 msgid "SSPI continuation error" msgstr "błąd kontynuowania SSPI" -#: fe-auth.c:553 fe-auth.c:627 fe-auth.c:662 fe-auth.c:758 fe-connect.c:2005 -#: fe-connect.c:3393 fe-connect.c:3611 fe-connect.c:4023 fe-connect.c:4118 -#: fe-connect.c:4383 fe-connect.c:4452 fe-connect.c:4469 fe-connect.c:4560 -#: fe-connect.c:4910 fe-connect.c:5060 fe-exec.c:3296 fe-exec.c:3461 -#: fe-lobj.c:896 fe-protocol2.c:1181 fe-protocol3.c:1544 fe-secure.c:790 -#: fe-secure.c:1190 -msgid "out of memory\n" -msgstr "brak pamięci\n" - -#: fe-auth.c:642 +#: fe-auth.c:396 msgid "could not acquire SSPI credentials" msgstr "nie można nabyć poświadczeń SSPI" -#: fe-auth.c:733 +#: fe-auth.c:487 msgid "SCM_CRED authentication method not supported\n" msgstr "Metoda autoryzacji SCM_CRED nie jest dostępna\n" -#: fe-auth.c:809 +#: fe-auth.c:563 msgid "Kerberos 4 authentication not supported\n" msgstr "metoda autoryzacji Kerberos 4 nie jest dostępna\n" -#: fe-auth.c:825 +#: fe-auth.c:568 msgid "Kerberos 5 authentication not supported\n" msgstr "metoda autoryzacji Kerberos 5 nie jest dostępna\n" -#: fe-auth.c:897 +#: fe-auth.c:639 msgid "GSSAPI authentication not supported\n" msgstr "Metoda autoryzacji GSSAPI nie jest dostępna\n" -#: fe-auth.c:929 +#: fe-auth.c:671 msgid "SSPI authentication not supported\n" msgstr "Metoda autoryzacji SSPI nie jest dostępna\n" -#: fe-auth.c:937 +#: fe-auth.c:679 msgid "Crypt authentication not supported\n" msgstr "metoda autoryzacji Crypt nie jest dostępna\n" -#: fe-auth.c:964 +#: fe-auth.c:706 #, c-format msgid "authentication method %u not supported\n" msgstr "metoda autoryzacji %u nie jest dostępna\n" -#: fe-connect.c:798 +#: fe-auth.c:753 +#, c-format +#| msgid "user name lookup failure: %s" +msgid "user name lookup failure: error code %lu\n" +msgstr "niepowodzenie wyszukiwania nazwy użytkownika: kod błędu %lu\n" + +#: fe-auth.c:763 fe-connect.c:2012 +#, c-format +#| msgid "could not look up effective user ID %ld: %s" +msgid "could not look up local user ID %d: %s\n" +msgstr "nie udało się odnaleźć lokalnego ID użytkownika %d: %s\n" + +#: fe-auth.c:768 fe-connect.c:2017 +#, c-format +msgid "local user with ID %d does not exist\n" +msgstr "lokalny użytkownik o ID %d nie istnieje\n" + +#: fe-connect.c:840 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "błędna wartość sslmode: \"%s\"\n" -#: fe-connect.c:819 +#: fe-connect.c:861 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "błędna wartość sslmode \"%s\" gdyż obsługa SSL nie została skompilowana\n" -#: fe-connect.c:1023 +#: fe-connect.c:1098 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "nie można ustawić gniazda TCP w tryb bez opóźnień: %s\n" -#: fe-connect.c:1053 +#: fe-connect.c:1128 #, c-format msgid "" "could not connect to server: %s\n" @@ -122,7 +126,7 @@ msgstr "" "\tCzy serwer działa lokalnie i akceptuje\n" "\tpołączenia przy pomocy gniazd dziedziny Uniksa \"%s\"?\n" -#: fe-connect.c:1108 +#: fe-connect.c:1183 #, c-format msgid "" "could not connect to server: %s\n" @@ -133,7 +137,7 @@ msgstr "" "\tCzy serwer działa na serwerze \"%s\" (%s) i akceptuje\n" "\tpołączenia TCP/IP na porcie %s?\n" -#: fe-connect.c:1117 +#: fe-connect.c:1192 #, c-format msgid "" "could not connect to server: %s\n" @@ -144,399 +148,400 @@ msgstr "" "\tCzy serwer działa na stacji sieciowej \"%s\" i akceptuje\n" "\tpołączenia TCP/IP na porcie %s?\n" -#: fe-connect.c:1168 +#: fe-connect.c:1243 #, c-format msgid "setsockopt(TCP_KEEPIDLE) failed: %s\n" msgstr "nie powiodło się setsockopt(TCP_KEEPIDLE): %s\n" -#: fe-connect.c:1181 +#: fe-connect.c:1256 #, c-format msgid "setsockopt(TCP_KEEPALIVE) failed: %s\n" msgstr "nie powiodło się setsockopt(TCP_KEEPALIVE): %s\n" -#: fe-connect.c:1213 +#: fe-connect.c:1288 #, c-format msgid "setsockopt(TCP_KEEPINTVL) failed: %s\n" msgstr "nie powiodło się setsockopt(TCP_KEEPINTVL): %s\n" -#: fe-connect.c:1245 +#: fe-connect.c:1320 #, c-format msgid "setsockopt(TCP_KEEPCNT) failed: %s\n" msgstr "nie powiodło się setsockopt(TCP_KEEPCNT): %s\n" -#: fe-connect.c:1293 +#: fe-connect.c:1368 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "nie powiodło się WSAIoctl(SIO_KEEPALIVE_VALS): %ui\n" -#: fe-connect.c:1345 +#: fe-connect.c:1420 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "nieprawidłowy numer portu: \"%s\"\n" -#: fe-connect.c:1378 +#: fe-connect.c:1453 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Za długa ścieżka gniazda domeny Unix \"%s\" (maks %d bajtów)\n" -#: fe-connect.c:1397 +#: fe-connect.c:1472 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "nie można przetłumaczyć nazwy hosta \"%s\" na adres: %s\n" -#: fe-connect.c:1401 +#: fe-connect.c:1476 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "nie można przetłumaczyć ścieżki gniazda domeny Uniks \"%s\" na adres: %s\n" -#: fe-connect.c:1606 +#: fe-connect.c:1681 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "błędny stan połączenia, prawdopodobnie oznajmiający uszkodzenie pamięci\n" -#: fe-connect.c:1647 +#: fe-connect.c:1721 #, c-format msgid "could not create socket: %s\n" msgstr "nie można utworzyć gniazda: %s\n" -#: fe-connect.c:1669 +#: fe-connect.c:1743 #, c-format -#| msgid "could not set socket to non-blocking mode: %s\n" msgid "could not set socket to nonblocking mode: %s\n" msgstr "nie można ustawić gniazda w tryb nieblokujący: %s\n" -#: fe-connect.c:1680 +#: fe-connect.c:1754 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "nie można ustawić gniazda obsługi zamknięcia przy uruchomieniu: %s\n" -#: fe-connect.c:1699 +#: fe-connect.c:1773 msgid "keepalives parameter must be an integer\n" msgstr "parametr keepalives musi być liczbą całkowitą\n" -#: fe-connect.c:1712 +#: fe-connect.c:1786 #, c-format msgid "setsockopt(SO_KEEPALIVE) failed: %s\n" msgstr "nie powiodło się setsockopt(SO_KEEPALIVE): %s\n" -#: fe-connect.c:1849 +#: fe-connect.c:1923 #, c-format msgid "could not get socket error status: %s\n" msgstr "nie można otrzymać błędu gniazda: %s\n" -#: fe-connect.c:1883 +#: fe-connect.c:1957 #, c-format msgid "could not get client address from socket: %s\n" msgstr "nie można otrzymać adresu klienta z gniazda: %s\n" -#: fe-connect.c:1924 +#: fe-connect.c:1999 msgid "requirepeer parameter is not supported on this platform\n" msgstr "parametr requirepeer nie jest obsługiwany na tej platformie\n" -#: fe-connect.c:1927 +#: fe-connect.c:2002 #, c-format msgid "could not get peer credentials: %s\n" msgstr "nie można pobrać poświadczeń wzajemnych: %s\n" -#: fe-connect.c:1937 -#, c-format -msgid "local user with ID %d does not exist\n" -msgstr "lokalny użytkownik o ID %d nie istnieje\n" - -#: fe-connect.c:1945 +#: fe-connect.c:2025 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer wskazuje \"%s\", ale nazwa bieżącego użytkownika równorzędnego to \"%s\"\n" -#: fe-connect.c:1979 +#: fe-connect.c:2059 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "nie można wysłać pakietu negocjacji SSL: %s\n" -#: fe-connect.c:2018 +#: fe-connect.c:2098 #, c-format msgid "could not send startup packet: %s\n" msgstr "nie można wysłać pakietu rozpoczynającego: %s\n" -#: fe-connect.c:2088 +#: fe-connect.c:2168 msgid "server does not support SSL, but SSL was required\n" msgstr "serwer nie obsługuje SSL, ale SSL było wymagane\n" -#: fe-connect.c:2114 +#: fe-connect.c:2194 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "otrzymano niepoprawną odpowiedź negocjacji SSL: %c\n" -#: fe-connect.c:2189 fe-connect.c:2222 +#: fe-connect.c:2269 fe-connect.c:2302 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "oczekiwano prośby autoryzacji z serwera ale otrzymano %c\n" -#: fe-connect.c:2389 +#: fe-connect.c:2469 #, c-format msgid "out of memory allocating GSSAPI buffer (%d)" msgstr "brak pamięci podczas alokacji bufora GSSAPI (%d)" -#: fe-connect.c:2474 +#: fe-connect.c:2554 msgid "unexpected message from server during startup\n" msgstr "niespodziewana wiadomość z serwera podczas startu\n" -#: fe-connect.c:2568 +#: fe-connect.c:2648 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "nieprawidłowy stan połączenia %d, prawdopodobnie wskazujący na uszkodzenie pamięci\n" -#: fe-connect.c:3001 fe-connect.c:3061 +#: fe-connect.c:3083 fe-connect.c:3143 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc \"%s\" zawiodła podczas zdarzenia PGEVT_CONNRESET\n" -#: fe-connect.c:3406 +#: fe-connect.c:3490 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "Niepoprawny adres URL LDAP \"%s\": schemat musi być ldap://\n" -#: fe-connect.c:3421 +#: fe-connect.c:3505 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "niepoprawny adres URL LDAP \"%s\": brakująca nazwa wyróżniająca\n" -#: fe-connect.c:3432 fe-connect.c:3485 +#: fe-connect.c:3516 fe-connect.c:3569 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "niepoprawny adres URL LDAP \"%s\": musi mieć dokładnie jeden atrybut\n" -#: fe-connect.c:3442 fe-connect.c:3499 +#: fe-connect.c:3526 fe-connect.c:3583 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "niepoprawny adres URL LDAP \"%s\": musi mieć zakres wyszukiwania (base/one/sub)\n" -#: fe-connect.c:3453 +#: fe-connect.c:3537 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "niepoprawny adres URL LDAP \"%s\": brak filtra\n" -#: fe-connect.c:3474 +#: fe-connect.c:3558 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "niepoprawny adres URL LDAP \"%s\": niepoprawny numer portu\n" -#: fe-connect.c:3508 +#: fe-connect.c:3592 msgid "could not create LDAP structure\n" msgstr "nie można utworzyć struktury LDAP\n" -#: fe-connect.c:3550 +#: fe-connect.c:3668 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "przeszukiwanie LDAP nie powiodło się: %s\n" -#: fe-connect.c:3561 +#: fe-connect.c:3679 msgid "more than one entry found on LDAP lookup\n" msgstr "ponad jeden wpis znaleziono podczas przeszukiwania LDAP\n" -#: fe-connect.c:3562 fe-connect.c:3574 +#: fe-connect.c:3680 fe-connect.c:3692 msgid "no entry found on LDAP lookup\n" msgstr "nie znaleziono wpisu podczas przeszukiwania LDAP\n" -#: fe-connect.c:3585 fe-connect.c:3598 +#: fe-connect.c:3703 fe-connect.c:3716 msgid "attribute has no values on LDAP lookup\n" msgstr "atrybut nie ma wartości w przeszukiwaniu LDAP\n" -#: fe-connect.c:3650 fe-connect.c:3669 fe-connect.c:4157 +#: fe-connect.c:3768 fe-connect.c:3787 fe-connect.c:4306 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "brakujące \"=\" po \"%s\" w łańcuchu informacyjnym połączenia\n" -#: fe-connect.c:3733 fe-connect.c:4337 fe-connect.c:5042 +#: fe-connect.c:3860 fe-connect.c:4487 fe-connect.c:5201 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "błędna opcja połączenia \"%s\"\n" -#: fe-connect.c:3749 fe-connect.c:4206 +#: fe-connect.c:3876 fe-connect.c:4355 msgid "unterminated quoted string in connection info string\n" msgstr "niezamknięty cudzysłów w łańcuchu informacyjnym połączenia\n" -#: fe-connect.c:3788 +#: fe-connect.c:3916 msgid "could not get home directory to locate service definition file" msgstr "nie można pobrać katalogu domowego aby zlokalizować plik definicji usługi" -#: fe-connect.c:3821 +#: fe-connect.c:3949 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "nie znaleziono definicji usługi \"%s\"\n" -#: fe-connect.c:3844 +#: fe-connect.c:3972 #, c-format msgid "service file \"%s\" not found\n" msgstr "nie znaleziono pliku usługi \"%s\"\n" -#: fe-connect.c:3857 +#: fe-connect.c:3985 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "zbyt długa linia %d w pliku usługi \"%s\"\n" -#: fe-connect.c:3928 fe-connect.c:3955 +#: fe-connect.c:4056 fe-connect.c:4100 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "błąd składni w pliku usługi \"%s\", linia %d\n" -#: fe-connect.c:4570 +#: fe-connect.c:4067 +#, c-format +#| msgid "syntax error in service file \"%s\", line %d\n" +msgid "nested service specifications not supported in service file \"%s\", line %d\n" +msgstr "zagnieżdżone specyfikacje usług nie są obsługiwane w pliku usługi \"%s\", " +"linia %d\n" + +#: fe-connect.c:4745 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "niepoprawny URI przekazany do wewnętrznej procedury parsującej: \"%s\"\n" -#: fe-connect.c:4640 +#: fe-connect.c:4815 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "osiągnięto koniec ciągu znaków podczas wyszukiwania kończącego \"]\" w adresie IPv6 hosta w URI: \"%s\"\n" -#: fe-connect.c:4647 +#: fe-connect.c:4822 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "adres IPv6 hosta nie może być pusty w URI: \"%s\"\n" -#: fe-connect.c:4662 +#: fe-connect.c:4837 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "nieoczekiwany znak \"%c\" w URI na pozycji %d (oczekiwano \":\" lub \"/\"): \"%s\"\n" -#: fe-connect.c:4776 +#: fe-connect.c:4951 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "nadmiarowy znak \"=\" rozdzielający klucz/wartość w parametrze zapytania URI: \"%s\"\n" -#: fe-connect.c:4796 +#: fe-connect.c:4971 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "brak znaku \"=\" rozdzielającego klucz/wartość w parametrze zapytania URI: \"%s\"\n" -#: fe-connect.c:4867 +#: fe-connect.c:5022 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "nieprawidłowy parametr zapytania URI: \"%s\"\n" -#: fe-connect.c:4937 +#: fe-connect.c:5096 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "niepoprawny kodowany procentem znak: \"%s\"\n" -#: fe-connect.c:4947 +#: fe-connect.c:5106 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "zabroniona wartość %%00 w znaku kodowanym procentem: \"%s\"\n" -#: fe-connect.c:5270 +#: fe-connect.c:5437 msgid "connection pointer is NULL\n" msgstr "wskaźnik połączenia ma wartość NULL\n" -#: fe-connect.c:5547 +#: fe-connect.c:5723 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "OSTRZEŻENIE: plik hasła \"%s\" nie jest zwykłym plikiem\n" -#: fe-connect.c:5556 +#: fe-connect.c:5732 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "" "UWAGA: plik hasła \"%s\" posiada globalne lub grupowe uprawnienia odczytu;\n" -"uprawniania powinny być ustawione na u=rw (0600) lub niżej\n" +"uprawniania powinny być ustawione na u=rw (0600) lub słabsze\n" -#: fe-connect.c:5656 +#: fe-connect.c:5838 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "hasło odczytane z pliku \"%s\"\n" -#: fe-exec.c:824 +#: fe-exec.c:825 msgid "NOTICE" msgstr "UWAGA" -#: fe-exec.c:1120 fe-exec.c:1178 fe-exec.c:1224 +#: fe-exec.c:1122 fe-exec.c:1180 fe-exec.c:1226 msgid "command string is a null pointer\n" msgstr "łańcuch polecenia jest wskaźnikiem null\n" -#: fe-exec.c:1184 fe-exec.c:1230 fe-exec.c:1325 +#: fe-exec.c:1186 fe-exec.c:1232 fe-exec.c:1327 msgid "number of parameters must be between 0 and 65535\n" msgstr "liczba parametrów musi być pomiędzy 0 i 65535\n" -#: fe-exec.c:1218 fe-exec.c:1319 +#: fe-exec.c:1220 fe-exec.c:1321 msgid "statement name is a null pointer\n" msgstr "nazwa instrukcji jest wskaźnikiem null\n" -#: fe-exec.c:1238 fe-exec.c:1402 fe-exec.c:2096 fe-exec.c:2295 +#: fe-exec.c:1240 fe-exec.c:1404 fe-exec.c:2119 fe-exec.c:2318 msgid "function requires at least protocol version 3.0\n" msgstr "funkcja wymaga przynajmniej protokołu w wersji 3.0\n" -#: fe-exec.c:1356 +#: fe-exec.c:1358 msgid "no connection to the server\n" msgstr "brak połączenia z serwerem\n" -#: fe-exec.c:1363 +#: fe-exec.c:1365 msgid "another command is already in progress\n" msgstr "inne polecenie jest aktualnie wykonywane\n" -#: fe-exec.c:1478 +#: fe-exec.c:1480 msgid "length must be given for binary parameter\n" msgstr "musi być podana długość parametru binarnego\n" -#: fe-exec.c:1756 +#: fe-exec.c:1749 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "nieoczekiwany asyncStatus: %d\n" -#: fe-exec.c:1776 +#: fe-exec.c:1769 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc \"%s\" zawiodła podczas zdarzenia PGEVT_RESULTCREATE\n" -#: fe-exec.c:1906 +#: fe-exec.c:1929 msgid "COPY terminated by new PQexec" -msgstr "KOPIOWANIE zakończone przez nowe PQexec" +msgstr "COPY zakończone przez nowe PQexec" -#: fe-exec.c:1914 +#: fe-exec.c:1937 msgid "COPY IN state must be terminated first\n" msgstr "stan COPY IN musi zostać wcześniej zakończony\n" -#: fe-exec.c:1934 +#: fe-exec.c:1957 msgid "COPY OUT state must be terminated first\n" msgstr "stan COPY OUT musi zostać wcześniej zakończony\n" -#: fe-exec.c:1942 +#: fe-exec.c:1965 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec niedozwolone podczas COPY BOTH\n" -#: fe-exec.c:2185 fe-exec.c:2252 fe-exec.c:2342 fe-protocol2.c:1327 -#: fe-protocol3.c:1683 +#: fe-exec.c:2208 fe-exec.c:2275 fe-exec.c:2365 fe-protocol2.c:1352 +#: fe-protocol3.c:1710 msgid "no COPY in progress\n" -msgstr "brak KOPIOWANIA w toku\n" +msgstr "brak COPY w toku\n" -#: fe-exec.c:2534 +#: fe-exec.c:2555 msgid "connection in wrong state\n" msgstr "połączenie posiada błędny stan\n" -#: fe-exec.c:2565 +#: fe-exec.c:2586 msgid "invalid ExecStatusType code" msgstr "błędny kod ExecStatusType" -#: fe-exec.c:2629 fe-exec.c:2652 +#: fe-exec.c:2650 fe-exec.c:2673 #, c-format msgid "column number %d is out of range 0..%d" msgstr "numer kolumny %d wykracza poza zakres 0..%d" -#: fe-exec.c:2645 +#: fe-exec.c:2666 #, c-format msgid "row number %d is out of range 0..%d" msgstr "numer wiersza %d wykracza poza zakres 0..%d" -#: fe-exec.c:2667 +#: fe-exec.c:2688 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "numer parametru %d wykracza poza zakres 0..%d" -#: fe-exec.c:2955 +#: fe-exec.c:2998 #, c-format msgid "could not interpret result from server: %s" msgstr "nie można zinterpretować wyników z serwera: %s" -#: fe-exec.c:3194 fe-exec.c:3278 +#: fe-exec.c:3237 fe-exec.c:3321 msgid "incomplete multibyte character\n" msgstr "niepełny znak wielobajtowy\n" @@ -633,12 +638,12 @@ msgstr "typ integer o rozmiarze %lu nie jest obsługiwany przez pqGetInt" msgid "integer of size %lu not supported by pqPutInt" msgstr "typ integer o rozmiarze %lu nie jest obsługiwany przez pqPutInt" -#: fe-misc.c:610 fe-misc.c:806 +#: fe-misc.c:642 fe-misc.c:842 msgid "connection not open\n" msgstr "połączenie nie jest otwarte\n" -#: fe-misc.c:736 fe-secure.c:386 fe-secure.c:466 fe-secure.c:547 -#: fe-secure.c:656 +#: fe-misc.c:812 fe-secure-openssl.c:249 fe-secure-openssl.c:355 +#: fe-secure.c:253 fe-secure.c:362 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -648,15 +653,15 @@ msgstr "" "\tOznacza to prawdopodobnie iż serwer zakończył działanie niepoprawnie\n" "\tprzed lub podczas przetwarzania zapytania.\n" -#: fe-misc.c:970 +#: fe-misc.c:1015 msgid "timeout expired\n" msgstr "upłynął limit czasu rządania\n" -#: fe-misc.c:1015 +#: fe-misc.c:1060 msgid "socket not open\n" msgstr "gniazdo nie jest otwarte\n" -#: fe-misc.c:1038 +#: fe-misc.c:1083 #, c-format msgid "select() failed: %s\n" msgstr "select() nie udało się: %s\n" @@ -676,282 +681,285 @@ msgstr "niepoprawny stan %c, prawdopodobnie oznajmiający uszkodzenie pamięci\n msgid "message type 0x%02x arrived from server while idle" msgstr "otrzymano wiadomość typu 0x%02x z serwera podczas procesu bezczynności" -#: fe-protocol2.c:522 +#: fe-protocol2.c:503 fe-protocol2.c:538 fe-protocol2.c:1049 +#: fe-protocol3.c:209 fe-protocol3.c:236 fe-protocol3.c:253 fe-protocol3.c:324 +#: fe-protocol3.c:995 +msgid "out of memory" +msgstr "brak pamięci" + +#: fe-protocol2.c:529 #, c-format msgid "unexpected character %c following empty query response (\"I\" message)" msgstr "nieznany znak %c następujący po odpowiedzi pustego zapytania (wiadomość \"I\")" -#: fe-protocol2.c:580 +#: fe-protocol2.c:595 #, c-format msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" msgstr "serwer wysłał dane (wiadomość \"D\") bez wcześniejszego opisu wiersza (wiadomość \"T\")" -#: fe-protocol2.c:598 +#: fe-protocol2.c:613 #, c-format msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" msgstr "serwer wysłał dane binarne (wiadomość \"B\") bez wcześniejszego opisu wiersza (wiadomość \"T\")" -#: fe-protocol2.c:618 fe-protocol3.c:385 +#: fe-protocol2.c:633 fe-protocol3.c:402 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "nieznana odpowiedź z serwera: pierwszym znakiem otrzymanym był \"%c\"\n" -#: fe-protocol2.c:747 fe-protocol2.c:922 fe-protocol3.c:600 fe-protocol3.c:782 +#: fe-protocol2.c:762 fe-protocol2.c:937 fe-protocol3.c:617 fe-protocol3.c:799 msgid "out of memory for query result" msgstr "brak pamięci dla wyników zapytania" -#: fe-protocol2.c:1370 fe-protocol3.c:1752 +#: fe-protocol2.c:1395 fe-protocol3.c:1779 #, c-format msgid "%s" msgstr "%s" -#: fe-protocol2.c:1382 +#: fe-protocol2.c:1407 #, c-format msgid "lost synchronization with server, resetting connection" msgstr "utracono synchronizację z serwerem, resetuję połączenie" -#: fe-protocol2.c:1516 fe-protocol2.c:1548 fe-protocol3.c:1955 +#: fe-protocol2.c:1541 fe-protocol2.c:1573 fe-protocol3.c:1982 #, c-format msgid "protocol error: id=0x%x\n" msgstr "błąd protokołu: id=0x%x\n" -#: fe-protocol3.c:341 +#: fe-protocol3.c:358 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "serwer wysłał dane (wiadomość \"D\") bez wcześniejszego opisu wiersza (wiadomość \"T\")\n" -#: fe-protocol3.c:406 +#: fe-protocol3.c:423 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "zawartość wiadomości nie zgadza się z długością wiadomości typu \"%c\"\n" -#: fe-protocol3.c:427 +#: fe-protocol3.c:444 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "utracono synchronizację z serwerem: otrzymano wiadomość typu\"%c\", długość %d\n" -#: fe-protocol3.c:478 fe-protocol3.c:518 +#: fe-protocol3.c:495 fe-protocol3.c:535 msgid "insufficient data in \"T\" message" msgstr "niewystarczająca ilość danych w wiadomości \"T\"" -#: fe-protocol3.c:551 +#: fe-protocol3.c:568 msgid "extraneous data in \"T\" message" msgstr "nadmiarowe dane w wiadomości \"T\"" -#: fe-protocol3.c:690 fe-protocol3.c:722 fe-protocol3.c:740 +#: fe-protocol3.c:707 fe-protocol3.c:739 fe-protocol3.c:757 msgid "insufficient data in \"D\" message" msgstr "niewystarczająca ilość danych w wiadomości \"D\"" -#: fe-protocol3.c:696 +#: fe-protocol3.c:713 msgid "unexpected field count in \"D\" message" msgstr "nieoczekiwana liczba pól we wiadomości \"D\"" -#: fe-protocol3.c:749 +#: fe-protocol3.c:766 msgid "extraneous data in \"D\" message" msgstr "nadmiarowe dane w wiadomości \"D\"" #. translator: %s represents a digit string -#: fe-protocol3.c:878 fe-protocol3.c:897 +#: fe-protocol3.c:898 fe-protocol3.c:917 #, c-format msgid " at character %s" msgstr " znak %s" -#: fe-protocol3.c:910 +#: fe-protocol3.c:930 #, c-format msgid "DETAIL: %s\n" msgstr "SZCZEGÓŁY: %s\n" -#: fe-protocol3.c:913 +#: fe-protocol3.c:933 #, c-format msgid "HINT: %s\n" msgstr "PODPOWIEDŹ: %s\n" -#: fe-protocol3.c:916 +#: fe-protocol3.c:936 #, c-format msgid "QUERY: %s\n" msgstr "ZAPYTANIE: %s\n" -#: fe-protocol3.c:919 +#: fe-protocol3.c:939 #, c-format msgid "CONTEXT: %s\n" msgstr "KONTEKST: %s\n" -#: fe-protocol3.c:926 +#: fe-protocol3.c:946 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "NAZWA SCHEMATU: %s\n" -#: fe-protocol3.c:930 +#: fe-protocol3.c:950 #, c-format msgid "TABLE NAME: %s\n" msgstr "NAZWA TABELI: %s\n" -#: fe-protocol3.c:934 +#: fe-protocol3.c:954 #, c-format msgid "COLUMN NAME: %s\n" msgstr "NAZWA KOLUMNY: %s\n" -#: fe-protocol3.c:938 +#: fe-protocol3.c:958 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "NAZWA TYPU DANYCH: %s\n" -#: fe-protocol3.c:942 +#: fe-protocol3.c:962 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "NAZWA OGRANICZENIA: %s\n" -#: fe-protocol3.c:954 +#: fe-protocol3.c:974 msgid "LOCATION: " msgstr "POŁOŻENIE: " -#: fe-protocol3.c:956 +#: fe-protocol3.c:976 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:958 +#: fe-protocol3.c:978 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1182 +#: fe-protocol3.c:1209 #, c-format msgid "LINE %d: " msgstr "LINIA %d: " -#: fe-protocol3.c:1577 +#: fe-protocol3.c:1604 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: nie działam aktualnie w stanie COPY OUT\n" -#: fe-secure.c:270 fe-secure.c:1127 fe-secure.c:1347 +#: fe-secure-openssl.c:146 fe-secure-openssl.c:1006 fe-secure-openssl.c:1226 #, c-format -#| msgid "could not create SSL context: %s\n" msgid "could not acquire mutex: %s\n" msgstr "nie można uzyskać muteksu: %s\n" -#: fe-secure.c:282 +#: fe-secure-openssl.c:158 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "nie można ustanowić połączenia SSL: %s\n" -#: fe-secure.c:391 fe-secure.c:552 fe-secure.c:1476 +#: fe-secure-openssl.c:254 fe-secure-openssl.c:360 fe-secure-openssl.c:1349 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "błąd SSL SYSCALL: %s\n" -#: fe-secure.c:398 fe-secure.c:559 fe-secure.c:1480 +#: fe-secure-openssl.c:261 fe-secure-openssl.c:367 fe-secure-openssl.c:1353 msgid "SSL SYSCALL error: EOF detected\n" msgstr "błąd SSL SYSCALL: wykryto EOF\n" -#: fe-secure.c:409 fe-secure.c:570 fe-secure.c:1489 +#: fe-secure-openssl.c:272 fe-secure-openssl.c:378 fe-secure-openssl.c:1362 #, c-format msgid "SSL error: %s\n" msgstr "błąd SSL: %s\n" -#: fe-secure.c:424 fe-secure.c:585 +#: fe-secure-openssl.c:287 fe-secure-openssl.c:393 msgid "SSL connection has been closed unexpectedly\n" msgstr "Połączenie SSL zostało nieoczekiwanie zamknięte\n" -#: fe-secure.c:430 fe-secure.c:591 fe-secure.c:1498 +#: fe-secure-openssl.c:293 fe-secure-openssl.c:399 fe-secure-openssl.c:1371 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "nieznany błąd SSL o kodzie: %d\n" -#: fe-secure.c:474 -#, c-format -msgid "could not receive data from server: %s\n" -msgstr "nie można otrzymać danych z serwera: %s\n" - -#: fe-secure.c:663 -#, c-format -msgid "could not send data to server: %s\n" -msgstr "nie można wysłać danych do serwera: %s\n" - -#: fe-secure.c:783 fe-secure.c:800 -msgid "could not get server common name from server certificate\n" -msgstr "nie można otrzymać nazwy zwyczajowej serwera z jego certyfikatu\n" +#: fe-secure-openssl.c:511 +#| msgid "SSL certificate's common name contains embedded null\n" +msgid "SSL certificate's name entry is missing\n" +msgstr "brak wejścia nazwy certyfikatu SSL\n" -#: fe-secure.c:813 -msgid "SSL certificate's common name contains embedded null\n" -msgstr "nazwa zwyczajowa certyfikatu SSL zawiera osadzony null\n" +#: fe-secure-openssl.c:541 +#| msgid "SSL certificate's common name contains embedded null\n" +msgid "SSL certificate's name contains embedded null\n" +msgstr "nazwa certyfikatu SSL zawiera osadzony null\n" -#: fe-secure.c:825 +#: fe-secure-openssl.c:592 msgid "host name must be specified for a verified SSL connection\n" msgstr "nazwa hosta musi zostać podana dla zweryfikowanego połączenia SSL\n" -#: fe-secure.c:839 +#: fe-secure-openssl.c:692 #, c-format -msgid "server common name \"%s\" does not match host name \"%s\"\n" -msgstr "nazwa zwyczajowa serwera \"%s\" nie odpowiada nazwie hosta \"%s\"\n" +#| msgid "server common name \"%s\" does not match host name \"%s\"\n" +msgid "server certificate for \"%s\" does not match host name \"%s\"\n" +msgstr "certyfikat dla serwera \"%s\" nie odpowiada nazwie hosta \"%s\"\n" -#: fe-secure.c:974 +#: fe-secure-openssl.c:698 +#| msgid "could not get server common name from server certificate\n" +msgid "could not get server's host name from server certificate\n" +msgstr "nie można odczytać nazwy serwera z jego certyfikatu\n" + +#: fe-secure-openssl.c:845 #, c-format msgid "could not create SSL context: %s\n" msgstr "nie można utworzyć kontekstu SSL: %s\n" -#: fe-secure.c:1097 +#: fe-secure-openssl.c:976 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "nie można otworzyć pliku certyfikatu \"%s\": %s\n" -#: fe-secure.c:1136 fe-secure.c:1151 +#: fe-secure-openssl.c:1015 fe-secure-openssl.c:1030 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "nie można odczytać pliku certyfikatu \"%s\": %s\n" -#: fe-secure.c:1206 +#: fe-secure-openssl.c:1085 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "nie można wczytać silnika SSL \"%s\": %s\n" -#: fe-secure.c:1218 +#: fe-secure-openssl.c:1097 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "nie można zainicjować silnika SSL \"%s\": %s\n" -#: fe-secure.c:1234 +#: fe-secure-openssl.c:1113 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "nie można odczytać prywatnego klucza SSL \"%s\" z silnika \"%s\": %s\n" -#: fe-secure.c:1248 +#: fe-secure-openssl.c:1127 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "nie można pobrać prywatnego klucza SSL \"%s\" z silnika \"%s\": %s\n" -#: fe-secure.c:1285 +#: fe-secure-openssl.c:1164 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "znaleziono certyfikat ale nie znaleziono pliku z prywatnym kluczem \"%s\"\n" -#: fe-secure.c:1293 +#: fe-secure-openssl.c:1172 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "" "plik hasła \"%s\" posiada globalne lub grupowe uprawnienia odczytu;\n" "uprawniania powinny być ustawione na u=rw (0600) lub niżej\n" -#: fe-secure.c:1304 +#: fe-secure-openssl.c:1183 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "nie można pobrać pliku z kluczem prywatnym \"%s\": %s\n" -#: fe-secure.c:1318 +#: fe-secure-openssl.c:1197 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "certyfikat nie pokrywa się z prywatnym kluczem w pliku \"%s\": %s\n" -#: fe-secure.c:1356 +#: fe-secure-openssl.c:1235 #, c-format msgid "could not read root certificate file \"%s\": %s\n" msgstr "nie można odczytać pliku z certyfikatem użytkownika root \"%s\": %s\n" -#: fe-secure.c:1386 +#: fe-secure-openssl.c:1265 #, c-format msgid "SSL library does not support CRL certificates (file \"%s\")\n" msgstr "biblioteka SSL nie wspiera certyfikatów CRL (plik \"%s\")\n" -#: fe-secure.c:1419 +#: fe-secure-openssl.c:1298 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" @@ -959,7 +967,7 @@ msgstr "" "nie można pobrać folderu domowego aby zlokalizować plik certyfikatu głównego\n" "Albo dostarcz plik albo zmień tryb ssl by zablokować weryfikację certyfikatu serwera.\n" -#: fe-secure.c:1423 +#: fe-secure-openssl.c:1302 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -968,22 +976,38 @@ msgstr "" "plik certyfikatu głównego \"%s\" nie istnieje\n" "Albo dostarcz plik albo zmień tryb ssl by zablokować weryfikację certyfikatu serwera.\n" -#: fe-secure.c:1517 +#: fe-secure-openssl.c:1390 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "certyfikat nie może zostać otrzymany: %s\n" -#: fe-secure.c:1594 +#: fe-secure-openssl.c:1482 #, c-format msgid "no SSL error reported" msgstr "nie zgłoszono błędu SSL" -#: fe-secure.c:1603 +#: fe-secure-openssl.c:1491 #, c-format msgid "SSL error code %lu" msgstr "kod błędu SSL %lu" -#: win32.c:322 +#: fe-secure.c:261 +#, c-format +msgid "could not receive data from server: %s\n" +msgstr "nie można otrzymać danych z serwera: %s\n" + +#: fe-secure.c:369 +#, c-format +msgid "could not send data to server: %s\n" +msgstr "nie można wysłać danych do serwera: %s\n" + +#: win32.c:317 #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "nierozpoznany błąd gniazda: 0x%08X/%d" + +#~ msgid "Kerberos 5 authentication rejected: %*s\n" +#~ msgstr "Kerberos 5 autoryzacja odrzucona: %*s\n" + +#~ msgid "could not set socket to blocking mode: %s\n" +#~ msgstr "nie można ustawić gniazda w tryb blokowania: %s\n" diff --git a/src/interfaces/libpq/po/pt_BR.po b/src/interfaces/libpq/po/pt_BR.po index 76d581ed8fa1d..6f5e8c7fea7a3 100644 --- a/src/interfaces/libpq/po/pt_BR.po +++ b/src/interfaces/libpq/po/pt_BR.po @@ -3,13 +3,13 @@ # This file is distributed under the same license as the PostgreSQL package. # Cesar Suga , 2002. # Roberto Mello , 2002. -# Euler Taveira de Oliveira , 2003-2014. +# Euler Taveira de Oliveira , 2003-2015. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-05-17 15:55-0300\n" +"POT-Creation-Date: 2015-09-17 22:32-0300\n" "PO-Revision-Date: 2005-10-04 22:45-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -31,11 +31,13 @@ msgid "duplicate GSS authentication request\n" msgstr "pedido de autenticação GSS duplicado\n" #: fe-auth.c:197 fe-auth.c:307 fe-auth.c:381 fe-auth.c:416 fe-auth.c:512 -#: fe-connect.c:2005 fe-connect.c:3395 fe-connect.c:3647 fe-connect.c:4060 -#: fe-connect.c:4155 fe-connect.c:4420 fe-connect.c:4492 fe-connect.c:4510 -#: fe-connect.c:4526 fe-connect.c:4608 fe-connect.c:4958 fe-connect.c:5108 -#: fe-exec.c:3340 fe-exec.c:3505 fe-lobj.c:896 fe-protocol2.c:1181 -#: fe-protocol3.c:1544 fe-secure.c:792 fe-secure.c:1201 +#: fe-auth.c:778 fe-connect.c:701 fe-connect.c:898 fe-connect.c:1074 +#: fe-connect.c:2085 fe-connect.c:3477 fe-connect.c:3729 fe-connect.c:3848 +#: fe-connect.c:4088 fe-connect.c:4168 fe-connect.c:4267 fe-connect.c:4519 +#: fe-connect.c:4548 fe-connect.c:4620 fe-connect.c:4638 fe-connect.c:4734 +#: fe-connect.c:5068 fe-connect.c:5218 fe-exec.c:3339 fe-exec.c:3504 +#: fe-lobj.c:896 fe-protocol2.c:1206 fe-protocol3.c:1571 +#: fe-secure-openssl.c:527 fe-secure-openssl.c:1069 msgid "out of memory\n" msgstr "sem memória\n" @@ -80,22 +82,37 @@ msgstr "Autenticação crypt não é suportada\n" msgid "authentication method %u not supported\n" msgstr "método de autenticação %u não é suportado\n" -#: fe-connect.c:798 +#: fe-auth.c:753 +#, c-format +msgid "user name lookup failure: error code %lu\n" +msgstr "falhou ao pesquisar nome de usuário: código de erro %lu\n" + +#: fe-auth.c:763 fe-connect.c:2012 +#, c-format +msgid "could not look up local user ID %d: %s\n" +msgstr "não pôde encontrar ID de usuário local %d: %s\n" + +#: fe-auth.c:768 fe-connect.c:2017 +#, c-format +msgid "local user with ID %d does not exist\n" +msgstr "usuário local com ID %d não existe\n" + +#: fe-connect.c:840 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "valor do modo ssl desconhecido: \"%s\"\n" -#: fe-connect.c:819 +#: fe-connect.c:861 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "valor \"%s\" do modo ssl é inválido quando suporte a SSL não foi compilado\n" -#: fe-connect.c:1024 +#: fe-connect.c:1098 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "não pôde configurar o soquete para modo TCP sem atraso: %s\n" -#: fe-connect.c:1054 +#: fe-connect.c:1128 #, c-format msgid "" "could not connect to server: %s\n" @@ -106,7 +123,7 @@ msgstr "" "\tO servidor está executando localmente e aceitando\n" "\tconexões no soquete de domínio Unix \"%s\"?\n" -#: fe-connect.c:1109 +#: fe-connect.c:1183 #, c-format msgid "" "could not connect to server: %s\n" @@ -117,7 +134,7 @@ msgstr "" "\tO servidor está executando na máquina \"%s\" (%s) e aceitando\n" "\tconexões TCP/IP na porta %s?\n" -#: fe-connect.c:1118 +#: fe-connect.c:1192 #, c-format msgid "" "could not connect to server: %s\n" @@ -128,300 +145,300 @@ msgstr "" "\tO servidor está executando na máquina \"%s\" e aceitando\n" "\tconexões TCP/IP na porta %s?\n" -#: fe-connect.c:1169 +#: fe-connect.c:1243 #, c-format msgid "setsockopt(TCP_KEEPIDLE) failed: %s\n" msgstr "setsockopt(TCP_KEEPIDLE) falhou: %s\n" -#: fe-connect.c:1182 +#: fe-connect.c:1256 #, c-format msgid "setsockopt(TCP_KEEPALIVE) failed: %s\n" msgstr "setsockopt(TCP_KEEPALIVE) falhou: %s\n" -#: fe-connect.c:1214 +#: fe-connect.c:1288 #, c-format msgid "setsockopt(TCP_KEEPINTVL) failed: %s\n" msgstr "setsockopt(TCP_KEEPINTVL) falhou: %s\n" -#: fe-connect.c:1246 +#: fe-connect.c:1320 #, c-format msgid "setsockopt(TCP_KEEPCNT) failed: %s\n" msgstr "setsockopt(TCP_KEEPCNT) falhou: %s\n" -#: fe-connect.c:1294 +#: fe-connect.c:1368 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) falhou: %ui\n" -#: fe-connect.c:1346 +#: fe-connect.c:1420 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "número de porta inválido: \"%s\"\n" -#: fe-connect.c:1379 +#: fe-connect.c:1453 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "caminho do soquete de domínio Unix \"%s\" é muito longo (máximo de %d bytes)\n" -#: fe-connect.c:1398 +#: fe-connect.c:1472 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "não pôde traduzir nome da máquina \"%s\" para endereço: %s\n" -#: fe-connect.c:1402 +#: fe-connect.c:1476 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "não pôde traduzir caminho do soquete de domínio Unix \"%s\" para endereço: %s\n" -#: fe-connect.c:1607 +#: fe-connect.c:1681 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "estado de conexão é inválido, provavelmente indicativo de corrupção de memória\n" -#: fe-connect.c:1647 +#: fe-connect.c:1721 #, c-format msgid "could not create socket: %s\n" msgstr "não pôde criar soquete: %s\n" -#: fe-connect.c:1669 +#: fe-connect.c:1743 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "não pôde configurar o soquete para modo não bloqueado: %s\n" -#: fe-connect.c:1680 +#: fe-connect.c:1754 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "não pôde configurar o soquete para modo fechar-após-execução: %s\n" -#: fe-connect.c:1699 +#: fe-connect.c:1773 msgid "keepalives parameter must be an integer\n" msgstr "parâmetro keepalives deve ser um inteiro\n" -#: fe-connect.c:1712 +#: fe-connect.c:1786 #, c-format msgid "setsockopt(SO_KEEPALIVE) failed: %s\n" msgstr "setsockopt(SO_KEEPALIVE) falhou: %s\n" -#: fe-connect.c:1849 +#: fe-connect.c:1923 #, c-format msgid "could not get socket error status: %s\n" msgstr "não pôde obter status de erro do soquete: %s\n" -#: fe-connect.c:1883 +#: fe-connect.c:1957 #, c-format msgid "could not get client address from socket: %s\n" msgstr "não pôde obter do soquete o endereço do cliente: %s\n" -#: fe-connect.c:1924 +#: fe-connect.c:1999 msgid "requirepeer parameter is not supported on this platform\n" msgstr "parâmetro requirepeer não é suportado nessa plataforma\n" -#: fe-connect.c:1927 +#: fe-connect.c:2002 #, c-format msgid "could not get peer credentials: %s\n" msgstr "não pôde receber credenciais: %s\n" -#: fe-connect.c:1937 -#, c-format -msgid "local user with ID %d does not exist\n" -msgstr "usuário local com ID %d não existe\n" - -#: fe-connect.c:1945 +#: fe-connect.c:2025 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer especificou \"%s\", mas nome de usuário atual é \"%s\"\n" -#: fe-connect.c:1979 +#: fe-connect.c:2059 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "não pôde mandar pacote de negociação SSL: %s\n" -#: fe-connect.c:2018 +#: fe-connect.c:2098 #, c-format msgid "could not send startup packet: %s\n" msgstr "não pôde enviar pacote de inicialização: %s\n" -#: fe-connect.c:2088 +#: fe-connect.c:2168 msgid "server does not support SSL, but SSL was required\n" msgstr "servidor não suporta SSL, mas SSL foi requerido\n" -#: fe-connect.c:2114 +#: fe-connect.c:2194 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "a negociação SSL recebeu uma resposta inválida: %c\n" -#: fe-connect.c:2189 fe-connect.c:2222 +#: fe-connect.c:2269 fe-connect.c:2302 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "pedido de autenticação esperado do servidor, mas foi recebido %c\n" -#: fe-connect.c:2389 +#: fe-connect.c:2469 #, c-format msgid "out of memory allocating GSSAPI buffer (%d)" msgstr "sem memória para alocar buffer para GSSAPI (%d)" -#: fe-connect.c:2474 +#: fe-connect.c:2554 msgid "unexpected message from server during startup\n" msgstr "mensagem inesperada do servidor durante inicialização\n" -#: fe-connect.c:2568 +#: fe-connect.c:2648 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "estado de conexão %d é inválido, provavelmente indicativo de corrupção de memória\n" -#: fe-connect.c:3001 fe-connect.c:3061 +#: fe-connect.c:3083 fe-connect.c:3143 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc \"%s\" falhou durante evento PGEVT_CONNRESET\n" -#: fe-connect.c:3408 +#: fe-connect.c:3490 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "URL LDAP \"%s\" é inválida: esquema deve ser ldap://\n" -#: fe-connect.c:3423 +#: fe-connect.c:3505 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "URL LDAP \"%s\" é inválida: faltando nome distinto\n" -#: fe-connect.c:3434 fe-connect.c:3487 +#: fe-connect.c:3516 fe-connect.c:3569 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "URL LDAP \"%s\" é inválida: deve ter exatamente um atributo\n" -#: fe-connect.c:3444 fe-connect.c:3501 +#: fe-connect.c:3526 fe-connect.c:3583 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "URL LDAP \"%s\" é inválida: deve ter escopo de busca (base/one/sub)\n" -#: fe-connect.c:3455 +#: fe-connect.c:3537 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "URL LDAP \"%s\" é inválida: nenhum filtro\n" -#: fe-connect.c:3476 +#: fe-connect.c:3558 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "URL LDAP \"%s\" é inválida: número de porta é inválido\n" -#: fe-connect.c:3510 +#: fe-connect.c:3592 msgid "could not create LDAP structure\n" msgstr "não pôde criar estrutura LDAP\n" -#: fe-connect.c:3586 +#: fe-connect.c:3668 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "busca em servidor LDAP falhou: %s\n" -#: fe-connect.c:3597 +#: fe-connect.c:3679 msgid "more than one entry found on LDAP lookup\n" msgstr "mais de um registro encontrado na busca no LDAP\n" -#: fe-connect.c:3598 fe-connect.c:3610 +#: fe-connect.c:3680 fe-connect.c:3692 msgid "no entry found on LDAP lookup\n" msgstr "nenhum registro encontrado na busca no LDAP\n" -#: fe-connect.c:3621 fe-connect.c:3634 +#: fe-connect.c:3703 fe-connect.c:3716 msgid "attribute has no values on LDAP lookup\n" msgstr "atributo não tem valores na busca no LDAP\n" -#: fe-connect.c:3686 fe-connect.c:3705 fe-connect.c:4194 +#: fe-connect.c:3768 fe-connect.c:3787 fe-connect.c:4306 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "faltando \"=\" depois de \"%s\" na cadeia de caracteres de conexão\n" -#: fe-connect.c:3769 fe-connect.c:4374 fe-connect.c:5090 +#: fe-connect.c:3860 fe-connect.c:4487 fe-connect.c:5201 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "opção de conexão \"%s\" é inválida\n" -#: fe-connect.c:3785 fe-connect.c:4243 +#: fe-connect.c:3876 fe-connect.c:4355 msgid "unterminated quoted string in connection info string\n" msgstr "cadeia de caracteres entre aspas não foi terminada na cadeia de caracteres de conexão\n" -#: fe-connect.c:3825 +#: fe-connect.c:3916 msgid "could not get home directory to locate service definition file" msgstr "não pôde obter diretório base do usuário para localizar arquivo de definição de serviço" -#: fe-connect.c:3858 +#: fe-connect.c:3949 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "definição de serviço \"%s\" não foi encontrado\n" -#: fe-connect.c:3881 +#: fe-connect.c:3972 #, c-format msgid "service file \"%s\" not found\n" msgstr "arquivo de serviço \"%s\" não foi encontrado\n" -#: fe-connect.c:3894 +#: fe-connect.c:3985 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "linha %d é muito longa no arquivo de serviço \"%s\"\n" -#: fe-connect.c:3965 fe-connect.c:3992 +#: fe-connect.c:4056 fe-connect.c:4100 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "erro de sintaxe no arquivo de serviço \"%s\", linha %d\n" -#: fe-connect.c:4618 +#: fe-connect.c:4067 +#, c-format +msgid "nested service specifications not supported in service file \"%s\", line %d\n" +msgstr "especificações de serviço aninhadas não são suportadas no arquivo de serviço \"%s\", linha %d\n" + +#: fe-connect.c:4745 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "URI inválida propagada para rotina interna do analisador: \"%s\"\n" -#: fe-connect.c:4688 +#: fe-connect.c:4815 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "fim da cadeia de caracteres atingido quando procurava por \"]\" no endereço IPv6 na URI: \"%s\"\n" -#: fe-connect.c:4695 +#: fe-connect.c:4822 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "endereço IPv6 não pode ser vazio na URI: \"%s\"\n" -#: fe-connect.c:4710 +#: fe-connect.c:4837 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "caracter \"%c\" inesperado na posição %d na URI (esperado \":\" ou \"/\"): \"%s\"\n" -#: fe-connect.c:4824 +#: fe-connect.c:4951 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "separador de chave/valor \"=\" extra no parâmetro da URI: \"%s\"\n" -#: fe-connect.c:4844 +#: fe-connect.c:4971 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "faltando separador de chave/valor \"=\" no parâmetro da URI: \"%s\"\n" -#: fe-connect.c:4915 +#: fe-connect.c:5022 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "parâmetro da URI é inválido: \"%s\"\n" -#: fe-connect.c:4985 +#: fe-connect.c:5096 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "elemento escapado com porcentagem é inválido: \"%s\"\n" -#: fe-connect.c:4995 +#: fe-connect.c:5106 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "valor %%00 proibido em valor escapado com porcentagem: \"%s\"\n" -#: fe-connect.c:5335 +#: fe-connect.c:5437 msgid "connection pointer is NULL\n" msgstr "ponteiro da conexão é NULO\n" -#: fe-connect.c:5621 +#: fe-connect.c:5723 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "AVISO: arquivo de senhas \"%s\" não é um arquivo no formato texto\n" -#: fe-connect.c:5630 +#: fe-connect.c:5732 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "AVISO: arquivo de senhas \"%s\" tem acesso de leitura para outros ou grupo; permissões devem ser u=rw (0600) ou menos que isso\n" -#: fe-connect.c:5730 +#: fe-connect.c:5838 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "senha obtida do arquivo \"%s\"\n" @@ -430,94 +447,94 @@ msgstr "senha obtida do arquivo \"%s\"\n" msgid "NOTICE" msgstr "NOTA" -#: fe-exec.c:1121 fe-exec.c:1179 fe-exec.c:1225 +#: fe-exec.c:1122 fe-exec.c:1180 fe-exec.c:1226 msgid "command string is a null pointer\n" msgstr "cadeia de caracteres do comando é um ponteiro nulo\n" -#: fe-exec.c:1185 fe-exec.c:1231 fe-exec.c:1326 +#: fe-exec.c:1186 fe-exec.c:1232 fe-exec.c:1327 msgid "number of parameters must be between 0 and 65535\n" msgstr "número de parâmetros deve ser entre 0 e 65535\n" -#: fe-exec.c:1219 fe-exec.c:1320 +#: fe-exec.c:1220 fe-exec.c:1321 msgid "statement name is a null pointer\n" msgstr "nome do comando é um ponteiro nulo\n" -#: fe-exec.c:1239 fe-exec.c:1403 fe-exec.c:2118 fe-exec.c:2317 +#: fe-exec.c:1240 fe-exec.c:1404 fe-exec.c:2119 fe-exec.c:2318 msgid "function requires at least protocol version 3.0\n" msgstr "função requer pelo menos a versão 3.0 do protocolo\n" -#: fe-exec.c:1357 +#: fe-exec.c:1358 msgid "no connection to the server\n" msgstr "sem conexão ao servidor\n" -#: fe-exec.c:1364 +#: fe-exec.c:1365 msgid "another command is already in progress\n" msgstr "outro comando já está em execução\n" -#: fe-exec.c:1479 +#: fe-exec.c:1480 msgid "length must be given for binary parameter\n" msgstr "tamanho deve ser informado para um parâmetro binário\n" -#: fe-exec.c:1748 +#: fe-exec.c:1749 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "asyncStatus inesperado: %d\n" -#: fe-exec.c:1768 +#: fe-exec.c:1769 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc \"%s\" falhou durante evento PGEVT_RESULTCREATE\n" -#: fe-exec.c:1928 +#: fe-exec.c:1929 msgid "COPY terminated by new PQexec" msgstr "COPY terminado por novo PQexec" -#: fe-exec.c:1936 +#: fe-exec.c:1937 msgid "COPY IN state must be terminated first\n" msgstr "estado de COPY IN deve ser terminado primeiro\n" -#: fe-exec.c:1956 +#: fe-exec.c:1957 msgid "COPY OUT state must be terminated first\n" msgstr "estado de COPY OUT deve ser terminado primeiro\n" -#: fe-exec.c:1964 +#: fe-exec.c:1965 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec não é permitido durante COPY BOTH\n" -#: fe-exec.c:2207 fe-exec.c:2274 fe-exec.c:2364 fe-protocol2.c:1327 -#: fe-protocol3.c:1683 +#: fe-exec.c:2208 fe-exec.c:2275 fe-exec.c:2365 fe-protocol2.c:1352 +#: fe-protocol3.c:1710 msgid "no COPY in progress\n" msgstr "nenhum COPY está em execução\n" -#: fe-exec.c:2556 +#: fe-exec.c:2555 msgid "connection in wrong state\n" msgstr "conexão em estado errado\n" -#: fe-exec.c:2587 +#: fe-exec.c:2586 msgid "invalid ExecStatusType code" msgstr "código de ExecStatusType é inválido" -#: fe-exec.c:2651 fe-exec.c:2674 +#: fe-exec.c:2650 fe-exec.c:2673 #, c-format msgid "column number %d is out of range 0..%d" msgstr "coluna número %d está fora do intervalo 0..%d" -#: fe-exec.c:2667 +#: fe-exec.c:2666 #, c-format msgid "row number %d is out of range 0..%d" msgstr "linha número %d está fora do intervalo 0..%d" -#: fe-exec.c:2689 +#: fe-exec.c:2688 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "parâmetro número %d está fora do intervalo 0..%d" -#: fe-exec.c:2999 +#: fe-exec.c:2998 #, c-format msgid "could not interpret result from server: %s" msgstr "não pôde interpretar resultado do servidor: %s" -#: fe-exec.c:3238 fe-exec.c:3322 +#: fe-exec.c:3237 fe-exec.c:3321 msgid "incomplete multibyte character\n" msgstr "caracter multibyte incompleto\n" @@ -614,12 +631,12 @@ msgstr "inteiro de tamanho %lu não é suportado por pqGetInt" msgid "integer of size %lu not supported by pqPutInt" msgstr "inteiro de tamanho %lu não é suportado por pqPutInt" -#: fe-misc.c:642 fe-misc.c:838 +#: fe-misc.c:642 fe-misc.c:842 msgid "connection not open\n" msgstr "conexão não está aberta\n" -#: fe-misc.c:768 fe-secure.c:388 fe-secure.c:468 fe-secure.c:549 -#: fe-secure.c:658 +#: fe-misc.c:812 fe-secure-openssl.c:249 fe-secure-openssl.c:355 +#: fe-secure.c:253 fe-secure.c:362 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -629,15 +646,15 @@ msgstr "" "\tIsto provavelmente significa que o servidor terminou de forma anormal\n" "\tantes ou durante o processamento do pedido.\n" -#: fe-misc.c:1004 +#: fe-misc.c:1015 msgid "timeout expired\n" msgstr "tempo de espera expirado\n" -#: fe-misc.c:1049 +#: fe-misc.c:1060 msgid "socket not open\n" msgstr "soquete não está aberto\n" -#: fe-misc.c:1072 +#: fe-misc.c:1083 #, c-format msgid "select() failed: %s\n" msgstr "select() falhou: %s\n" @@ -657,279 +674,279 @@ msgstr "estado %c é inválido, provavelmente indicativo de corrupção de memó msgid "message type 0x%02x arrived from server while idle" msgstr "tipo de mensagem 0x%02x chegou do servidor enquanto estava ocioso" -#: fe-protocol2.c:522 +#: fe-protocol2.c:503 fe-protocol2.c:538 fe-protocol2.c:1049 +#: fe-protocol3.c:209 fe-protocol3.c:236 fe-protocol3.c:253 fe-protocol3.c:324 +#: fe-protocol3.c:995 +msgid "out of memory" +msgstr "sem memória" + +#: fe-protocol2.c:529 #, c-format msgid "unexpected character %c following empty query response (\"I\" message)" msgstr "caracter inesperado %c seguido de uma resposta de consulta vazia (mensagem \"I\")" -#: fe-protocol2.c:580 +#: fe-protocol2.c:595 #, c-format msgid "server sent data (\"D\" message) without prior row description (\"T\" message)" msgstr "servidor enviou dados (mensagem \"D\") sem antes enviar descrição de registro (mensagem \"T\")" -#: fe-protocol2.c:598 +#: fe-protocol2.c:613 #, c-format msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" msgstr "servidor enviou dados binários (mensagem \"B\") sem antes enviar descrição de registro (mensagem \"T\")" -#: fe-protocol2.c:618 fe-protocol3.c:385 +#: fe-protocol2.c:633 fe-protocol3.c:402 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "resposta inesperada do servidor; primeiro caracter recebido foi \"%c\"\n" -#: fe-protocol2.c:747 fe-protocol2.c:922 fe-protocol3.c:600 fe-protocol3.c:782 +#: fe-protocol2.c:762 fe-protocol2.c:937 fe-protocol3.c:617 fe-protocol3.c:799 msgid "out of memory for query result" msgstr "sem memória para resultado da consulta" -#: fe-protocol2.c:1370 fe-protocol3.c:1752 +#: fe-protocol2.c:1395 fe-protocol3.c:1779 #, c-format msgid "%s" msgstr "%s" -#: fe-protocol2.c:1382 +#: fe-protocol2.c:1407 #, c-format msgid "lost synchronization with server, resetting connection" msgstr "perda de sincronismo com o servidor, reiniciando conexão" -#: fe-protocol2.c:1516 fe-protocol2.c:1548 fe-protocol3.c:1955 +#: fe-protocol2.c:1541 fe-protocol2.c:1573 fe-protocol3.c:1982 #, c-format msgid "protocol error: id=0x%x\n" msgstr "erro de protocolo: id=0x%x\n" -#: fe-protocol3.c:341 +#: fe-protocol3.c:358 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "servidor enviou dados (mensagem \"D\") sem antes enviar descrição de registro (mensagem \"T\")\n" -#: fe-protocol3.c:406 +#: fe-protocol3.c:423 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "conteúdo da mensagem não está de acordo com o tamanho no tipo de mensagem \"%c\"\n" -#: fe-protocol3.c:427 +#: fe-protocol3.c:444 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "perda de sincronismo com o servidor: recebeu tipo de mensagem \"%c\", tamanho %d\n" -#: fe-protocol3.c:478 fe-protocol3.c:518 +#: fe-protocol3.c:495 fe-protocol3.c:535 msgid "insufficient data in \"T\" message" msgstr "dados insuficientes na mensagem \"T\"" -#: fe-protocol3.c:551 +#: fe-protocol3.c:568 msgid "extraneous data in \"T\" message" msgstr "dados estranhos na mensagem \"T\"" -#: fe-protocol3.c:690 fe-protocol3.c:722 fe-protocol3.c:740 +#: fe-protocol3.c:707 fe-protocol3.c:739 fe-protocol3.c:757 msgid "insufficient data in \"D\" message" msgstr "dados insuficientes na mensagem \"D\"" -#: fe-protocol3.c:696 +#: fe-protocol3.c:713 msgid "unexpected field count in \"D\" message" msgstr "contagem de campos inesperada em mensagem \"D\"" -#: fe-protocol3.c:749 +#: fe-protocol3.c:766 msgid "extraneous data in \"D\" message" msgstr "dados estranhos na mensagem \"D\"" #. translator: %s represents a digit string -#: fe-protocol3.c:878 fe-protocol3.c:897 +#: fe-protocol3.c:898 fe-protocol3.c:917 #, c-format msgid " at character %s" msgstr " no caracter %s" -#: fe-protocol3.c:910 +#: fe-protocol3.c:930 #, c-format msgid "DETAIL: %s\n" msgstr "DETALHE: %s\n" -#: fe-protocol3.c:913 +#: fe-protocol3.c:933 #, c-format msgid "HINT: %s\n" msgstr "DICA: %s\n" -#: fe-protocol3.c:916 +#: fe-protocol3.c:936 #, c-format msgid "QUERY: %s\n" msgstr "CONSULTA: %s\n" -#: fe-protocol3.c:919 +#: fe-protocol3.c:939 #, c-format msgid "CONTEXT: %s\n" msgstr "CONTEXTO: %s\n" -#: fe-protocol3.c:926 +#: fe-protocol3.c:946 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "NOME DO ESQUEMA: %s\n" -#: fe-protocol3.c:930 +#: fe-protocol3.c:950 #, c-format msgid "TABLE NAME: %s\n" msgstr "NOME DA TABELA: %s\n" -#: fe-protocol3.c:934 +#: fe-protocol3.c:954 #, c-format msgid "COLUMN NAME: %s\n" msgstr "NOME DA COLUNA: %s\n" -#: fe-protocol3.c:938 +#: fe-protocol3.c:958 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "NOME DO TIPO DE DADO: %s\n" -#: fe-protocol3.c:942 +#: fe-protocol3.c:962 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "NOME DA RESTRIÇÃO: %s\n" -#: fe-protocol3.c:954 +#: fe-protocol3.c:974 msgid "LOCATION: " msgstr "LOCAL: " -#: fe-protocol3.c:956 +#: fe-protocol3.c:976 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:958 +#: fe-protocol3.c:978 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1182 +#: fe-protocol3.c:1209 #, c-format msgid "LINE %d: " msgstr "LINHA %d: " -#: fe-protocol3.c:1577 +#: fe-protocol3.c:1604 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: não está fazendo COPY OUT de texto\n" -#: fe-secure.c:270 fe-secure.c:1138 fe-secure.c:1358 +#: fe-secure-openssl.c:146 fe-secure-openssl.c:1006 fe-secure-openssl.c:1226 #, c-format msgid "could not acquire mutex: %s\n" msgstr "não pôde obter mutex: %s\n" -#: fe-secure.c:282 +#: fe-secure-openssl.c:158 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "não pôde estabelecer conexão SSL: %s\n" -#: fe-secure.c:393 fe-secure.c:554 fe-secure.c:1487 +#: fe-secure-openssl.c:254 fe-secure-openssl.c:360 fe-secure-openssl.c:1349 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "Erro de SYSCALL SSL: %s\n" -#: fe-secure.c:400 fe-secure.c:561 fe-secure.c:1491 +#: fe-secure-openssl.c:261 fe-secure-openssl.c:367 fe-secure-openssl.c:1353 msgid "SSL SYSCALL error: EOF detected\n" msgstr "Erro de SYSCALL SSL: EOF detectado\n" -#: fe-secure.c:411 fe-secure.c:572 fe-secure.c:1500 +#: fe-secure-openssl.c:272 fe-secure-openssl.c:378 fe-secure-openssl.c:1362 #, c-format msgid "SSL error: %s\n" msgstr "Erro de SSL: %s\n" -#: fe-secure.c:426 fe-secure.c:587 +#: fe-secure-openssl.c:287 fe-secure-openssl.c:393 msgid "SSL connection has been closed unexpectedly\n" msgstr "conexão SSL foi fechada inesperadamente\n" -#: fe-secure.c:432 fe-secure.c:593 fe-secure.c:1509 +#: fe-secure-openssl.c:293 fe-secure-openssl.c:399 fe-secure-openssl.c:1371 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "código de erro SSL desconhecido: %d\n" -#: fe-secure.c:476 -#, c-format -msgid "could not receive data from server: %s\n" -msgstr "não pôde receber dados do servidor: %s\n" - -#: fe-secure.c:665 -#, c-format -msgid "could not send data to server: %s\n" -msgstr "não pôde enviar dados ao servidor: %s\n" - -#: fe-secure.c:785 fe-secure.c:802 -msgid "could not get server common name from server certificate\n" -msgstr "não pôde obter nome do servidor a partir do certificado do servidor\n" +#: fe-secure-openssl.c:511 +msgid "SSL certificate's name entry is missing\n" +msgstr "entrada do nome do certificado SSL está ausente\n" -#: fe-secure.c:815 -msgid "SSL certificate's common name contains embedded null\n" -msgstr "nome comum do certificado SSL contém nulo embutido\n" +#: fe-secure-openssl.c:541 +msgid "SSL certificate's name contains embedded null\n" +msgstr "nome do certificado SSL contém nulo embutido\n" -#: fe-secure.c:827 +#: fe-secure-openssl.c:592 msgid "host name must be specified for a verified SSL connection\n" msgstr "nome da máquina deve ser especificado para uma conexão SSL verificada\n" -#: fe-secure.c:841 +#: fe-secure-openssl.c:692 #, c-format -msgid "server common name \"%s\" does not match host name \"%s\"\n" -msgstr "nome do servidor \"%s\" não corresponde ao nome da máquina \"%s\"\n" +msgid "server certificate for \"%s\" does not match host name \"%s\"\n" +msgstr "certificado do servidor para \"%s\" não corresponde ao nome da máquina \"%s\"\n" -#: fe-secure.c:982 +#: fe-secure-openssl.c:698 +msgid "could not get server's host name from server certificate\n" +msgstr "não pôde obter nome de máquina do servidor a partir do certificado do servidor\n" + +#: fe-secure-openssl.c:845 #, c-format msgid "could not create SSL context: %s\n" msgstr "não pôde criar contexto SSL: %s\n" -#: fe-secure.c:1108 +#: fe-secure-openssl.c:976 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "não pôde abrir certificado \"%s\": %s\n" -#: fe-secure.c:1147 fe-secure.c:1162 +#: fe-secure-openssl.c:1015 fe-secure-openssl.c:1030 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "não pôde ler certificado \"%s\": %s\n" -#: fe-secure.c:1217 +#: fe-secure-openssl.c:1085 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "não pôde carregar mecanismo SSL \"%s\": %s\n" -#: fe-secure.c:1229 +#: fe-secure-openssl.c:1097 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "não pôde inicializar mecanismo SSL \"%s\": %s\n" -#: fe-secure.c:1245 +#: fe-secure-openssl.c:1113 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "não pôde ler chave privada SSL \"%s\" do mecanismo \"%s\": %s\n" -#: fe-secure.c:1259 +#: fe-secure-openssl.c:1127 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "não pôde carregar chave privada SSL \"%s\" do mecanismo \"%s\": %s\n" -#: fe-secure.c:1296 +#: fe-secure-openssl.c:1164 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "certificado presente, mas não a chave privada \"%s\"\n" -#: fe-secure.c:1304 +#: fe-secure-openssl.c:1172 #, c-format msgid "private key file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "chave privada \"%s\" tem acesso de leitura para outros ou grupo; permissões devem ser u=rw (0600) ou menos que isso\n" -#: fe-secure.c:1315 +#: fe-secure-openssl.c:1183 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "não pôde carregar arquivo contendo chave privada \"%s\": %s\n" -#: fe-secure.c:1329 +#: fe-secure-openssl.c:1197 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "certificado não corresponde a chave privada \"%s\": %s\n" -#: fe-secure.c:1367 +#: fe-secure-openssl.c:1235 #, c-format msgid "could not read root certificate file \"%s\": %s\n" msgstr "não pôde ler certificado raiz \"%s\": %s\n" -#: fe-secure.c:1397 +#: fe-secure-openssl.c:1265 #, c-format msgid "SSL library does not support CRL certificates (file \"%s\")\n" msgstr "biblioteca SSL não suporta certificados CRL (arquivo \"%s\")\n" -#: fe-secure.c:1430 +#: fe-secure-openssl.c:1298 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" @@ -937,7 +954,7 @@ msgstr "" "não pôde obter diretório base do usuário para localizar arquivo do certificado\n" "Forneça um arquivo ou mude o sslmode para desabilitar a verificação de certificado do servidor.\n" -#: fe-secure.c:1434 +#: fe-secure-openssl.c:1302 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -946,22 +963,32 @@ msgstr "" "certificado raiz \"%s\" não existe\n" "Forneça um arquivo ou mude o sslmode para desabilitar a verificação de certificado do servidor.\n" -#: fe-secure.c:1528 +#: fe-secure-openssl.c:1390 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "certificado não pôde ser obtido: %s\n" -#: fe-secure.c:1624 +#: fe-secure-openssl.c:1482 #, c-format msgid "no SSL error reported" msgstr "nenhum erro SSL relatado" -#: fe-secure.c:1633 +#: fe-secure-openssl.c:1491 #, c-format msgid "SSL error code %lu" msgstr "código de erro SSL %lu" -#: win32.c:322 +#: fe-secure.c:261 +#, c-format +msgid "could not receive data from server: %s\n" +msgstr "não pôde receber dados do servidor: %s\n" + +#: fe-secure.c:369 +#, c-format +msgid "could not send data to server: %s\n" +msgstr "não pôde enviar dados ao servidor: %s\n" + +#: win32.c:317 #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "erro desconhecido de soquete: 0x%08X/%d" diff --git a/src/interfaces/libpq/po/ru.po b/src/interfaces/libpq/po/ru.po index fc70de6f3a6cb..606726584d415 100644 --- a/src/interfaces/libpq/po/ru.po +++ b/src/interfaces/libpq/po/ru.po @@ -25,8 +25,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9 current\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2015-01-13 05:08+0000\n" -"PO-Revision-Date: 2015-01-13 08:37+0300\n" +"POT-Creation-Date: 2015-07-22 00:08+0000\n" +"PO-Revision-Date: 2015-07-22 16:24+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -52,12 +52,12 @@ msgstr "повторный запрос аутентификации GSS\n" #: fe-auth.c:197 fe-auth.c:307 fe-auth.c:381 fe-auth.c:416 fe-auth.c:512 #: fe-auth.c:778 fe-connect.c:701 fe-connect.c:898 fe-connect.c:1074 -#: fe-connect.c:2085 fe-connect.c:3476 fe-connect.c:3728 fe-connect.c:3847 -#: fe-connect.c:4077 fe-connect.c:4157 fe-connect.c:4252 fe-connect.c:4504 -#: fe-connect.c:4532 fe-connect.c:4604 fe-connect.c:4622 fe-connect.c:4718 -#: fe-connect.c:5070 fe-connect.c:5220 fe-exec.c:3340 fe-exec.c:3505 -#: fe-lobj.c:896 fe-protocol2.c:1181 fe-protocol3.c:1544 fe-secure.c:792 -#: fe-secure.c:1201 +#: fe-connect.c:2085 fe-connect.c:3477 fe-connect.c:3729 fe-connect.c:3848 +#: fe-connect.c:4088 fe-connect.c:4168 fe-connect.c:4267 fe-connect.c:4519 +#: fe-connect.c:4548 fe-connect.c:4620 fe-connect.c:4638 fe-connect.c:4734 +#: fe-connect.c:5068 fe-connect.c:5218 fe-exec.c:3339 fe-exec.c:3504 +#: fe-lobj.c:896 fe-protocol2.c:1206 fe-protocol3.c:1571 +#: fe-secure-openssl.c:527 fe-secure-openssl.c:1069 msgid "out of memory\n" msgstr "нехватка памяти\n" @@ -105,7 +105,7 @@ msgstr "метод аутентификации %u не поддерживает #: fe-auth.c:753 #, c-format msgid "user name lookup failure: error code %lu\n" -msgstr "распознать имя пользователя не удалось: код ошибки %lu\n" +msgstr "распознать имя пользователя не удалось (код ошибки: %lu)\n" #: fe-auth.c:763 fe-connect.c:2012 #, c-format @@ -305,120 +305,128 @@ msgstr "неожиданное сообщение от сервера в нач msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "неверное состояние соединения %d - возможно разрушение памяти\n" -#: fe-connect.c:3082 fe-connect.c:3142 +#: fe-connect.c:3083 fe-connect.c:3143 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "ошибка в PGEventProc \"%s\" при обработке события PGEVT_CONNRESET\n" -#: fe-connect.c:3489 +#: fe-connect.c:3490 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "некорректный адрес LDAP \"%s\": схема должна быть ldap://\n" -#: fe-connect.c:3504 +#: fe-connect.c:3505 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "некорректный адрес LDAP \"%s\": отсутствует уникальное имя\n" -#: fe-connect.c:3515 fe-connect.c:3568 +#: fe-connect.c:3516 fe-connect.c:3569 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "некорректный адрес LDAP \"%s\": должен быть только один атрибут\n" -#: fe-connect.c:3525 fe-connect.c:3582 +#: fe-connect.c:3526 fe-connect.c:3583 #, 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:3536 +#: fe-connect.c:3537 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "некорректный адрес LDAP \"%s\": нет фильтра\n" -#: fe-connect.c:3557 +#: fe-connect.c:3558 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "некорректный адрес LDAP \"%s\": неверный номер порта\n" -#: fe-connect.c:3591 +#: fe-connect.c:3592 msgid "could not create LDAP structure\n" msgstr "не удалось создать структуру LDAP\n" -#: fe-connect.c:3667 +#: fe-connect.c:3668 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "ошибка поиска на сервере LDAP: %s\n" -#: fe-connect.c:3678 +#: fe-connect.c:3679 msgid "more than one entry found on LDAP lookup\n" msgstr "при поиске LDAP найдено более одного вхождения\n" -#: fe-connect.c:3679 fe-connect.c:3691 +#: fe-connect.c:3680 fe-connect.c:3692 msgid "no entry found on LDAP lookup\n" msgstr "при поиске LDAP ничего не найдено\n" -#: fe-connect.c:3702 fe-connect.c:3715 +#: fe-connect.c:3703 fe-connect.c:3716 msgid "attribute has no values on LDAP lookup\n" msgstr "атрибут не содержит значений при поиске LDAP\n" -#: fe-connect.c:3767 fe-connect.c:3786 fe-connect.c:4291 +#: fe-connect.c:3768 fe-connect.c:3787 fe-connect.c:4306 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "в строке соединения нет \"=\" после \"%s\"\n" -#: fe-connect.c:3859 fe-connect.c:4472 fe-connect.c:5203 +#: fe-connect.c:3860 fe-connect.c:4487 fe-connect.c:5201 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "неверный параметр соединения \"%s\"\n" -#: fe-connect.c:3875 fe-connect.c:4340 +#: fe-connect.c:3876 fe-connect.c:4355 msgid "unterminated quoted string in connection info string\n" msgstr "в строке соединения не хватает закрывающей кавычки\n" -#: fe-connect.c:3915 +#: fe-connect.c:3916 msgid "could not get home directory to locate service definition file" msgstr "" "не удалось получить домашний каталог для загрузки файла определений служб" -#: fe-connect.c:3948 +#: fe-connect.c:3949 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "определение службы \"%s\" не найдено\n" -#: fe-connect.c:3971 +#: fe-connect.c:3972 #, c-format msgid "service file \"%s\" not found\n" msgstr "файл определений служб \"%s\" не найден\n" -#: fe-connect.c:3984 +#: fe-connect.c:3985 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "слишком длинная строка (%d) в файле определений служб \"%s\"\n" -#: fe-connect.c:4055 fe-connect.c:4089 +#: fe-connect.c:4056 fe-connect.c:4100 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "синтаксическая ошибка в файле определения служб \"%s\" (строка %d)\n" -#: fe-connect.c:4729 +#: fe-connect.c:4067 +#, c-format +msgid "" +"nested service specifications not supported in service file \"%s\", line %d\n" +msgstr "" +"рекурсивные определения служб не поддерживаются (файл определения служб \"%" +"s\", строка %d)\n" + +#: fe-connect.c:4745 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "во внутреннюю процедуру разбора строки передан ошибочный URI: \"%s\"\n" -#: fe-connect.c:4799 +#: fe-connect.c:4815 #, 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:4806 +#: fe-connect.c:4822 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6, содержащийся в URI, не может быть пустым: \"%s\"\n" -#: fe-connect.c:4821 +#: fe-connect.c:4837 #, c-format msgid "" "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): " @@ -427,50 +435,51 @@ msgstr "" "неожиданный символ \"%c\" в позиции %d в URI (ожидалось \":\" или \"/\"): " "\"%s\"\n" -#: fe-connect.c:4935 +#: fe-connect.c:4951 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "лишний разделитель ключа/значения \"=\" в параметрах URI: \"%s\"\n" -#: fe-connect.c:4955 +#: fe-connect.c:4971 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "в параметрах URI не хватает разделителя ключа/значения \"=\": \"%s\"\n" -#: fe-connect.c:5026 +#: fe-connect.c:5022 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "неверный параметр в URI: \"%s\"\n" -#: fe-connect.c:5098 +#: fe-connect.c:5096 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "неверный символ, закодированный с %%: \"%s\"\n" -#: fe-connect.c:5108 +#: fe-connect.c:5106 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "недопустимое значение %%00 для символа, закодированного с %%: \"%s\"\n" -#: fe-connect.c:5439 +#: fe-connect.c:5437 msgid "connection pointer is NULL\n" msgstr "нулевой указатель соединения\n" -#: fe-connect.c:5725 +#: fe-connect.c:5723 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" -msgstr "ВНИМАНИЕ: файл паролей \"%s\" - не обычный файл\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: файл паролей \"%s\" - не обычный файл\n" -#: fe-connect.c:5734 +#: fe-connect.c:5732 #, c-format msgid "" "WARNING: password file \"%s\" has group or world access; permissions should " "be u=rw (0600) or less\n" msgstr "" -"ВНИМАНИЕ: к файлу паролей \"%s\" имеют доступ все или группа; права должны " +"ПРЕДУПРЕЖДЕНИЕ: к файлу паролей \"%s\" имеют доступ все или группа; права " +"должны " "быть u=rw (0600) или более ограниченные\n" -#: fe-connect.c:5840 +#: fe-connect.c:5838 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "пароль получен из файла \"%s\"\n" @@ -479,94 +488,94 @@ msgstr "пароль получен из файла \"%s\"\n" msgid "NOTICE" msgstr "ЗАМЕЧАНИЕ" -#: fe-exec.c:1121 fe-exec.c:1179 fe-exec.c:1225 +#: fe-exec.c:1122 fe-exec.c:1180 fe-exec.c:1226 msgid "command string is a null pointer\n" msgstr "указатель на командную строку нулевой\n" -#: fe-exec.c:1185 fe-exec.c:1231 fe-exec.c:1326 +#: fe-exec.c:1186 fe-exec.c:1232 fe-exec.c:1327 msgid "number of parameters must be between 0 and 65535\n" msgstr "число параметров должно быть от 0 до 65535\n" -#: fe-exec.c:1219 fe-exec.c:1320 +#: fe-exec.c:1220 fe-exec.c:1321 msgid "statement name is a null pointer\n" msgstr "указатель на имя оператора нулевой\n" -#: fe-exec.c:1239 fe-exec.c:1403 fe-exec.c:2118 fe-exec.c:2317 +#: fe-exec.c:1240 fe-exec.c:1404 fe-exec.c:2119 fe-exec.c:2318 msgid "function requires at least protocol version 3.0\n" msgstr "функция требует протокол минимум версии 3.0\n" -#: fe-exec.c:1357 +#: fe-exec.c:1358 msgid "no connection to the server\n" msgstr "нет соединения с сервером\n" -#: fe-exec.c:1364 +#: fe-exec.c:1365 msgid "another command is already in progress\n" msgstr "уже выполняется другая команда\n" -#: fe-exec.c:1479 +#: fe-exec.c:1480 msgid "length must be given for binary parameter\n" msgstr "для двоичного параметра должна быть указана длина\n" -#: fe-exec.c:1748 +#: fe-exec.c:1749 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "неожиданный asyncStatus: %d\n" -#: fe-exec.c:1768 +#: fe-exec.c:1769 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "ошибка в PGEventProc \"%s\" при обработке события PGEVT_RESULTCREATE\n" -#: fe-exec.c:1928 +#: fe-exec.c:1929 msgid "COPY terminated by new PQexec" msgstr "операция COPY прервана вызовом PQexec" -#: fe-exec.c:1936 +#: fe-exec.c:1937 msgid "COPY IN state must be terminated first\n" msgstr "сначала должно завершиться состояние COPY IN\n" -#: fe-exec.c:1956 +#: fe-exec.c:1957 msgid "COPY OUT state must be terminated first\n" msgstr "сначала должно завершиться состояние COPY OUT\n" -#: fe-exec.c:1964 +#: fe-exec.c:1965 msgid "PQexec not allowed during COPY BOTH\n" msgstr "вызов PQexec не допускается в процессе COPY BOTH\n" -#: fe-exec.c:2207 fe-exec.c:2274 fe-exec.c:2364 fe-protocol2.c:1327 -#: fe-protocol3.c:1683 +#: fe-exec.c:2208 fe-exec.c:2275 fe-exec.c:2365 fe-protocol2.c:1352 +#: fe-protocol3.c:1710 msgid "no COPY in progress\n" msgstr "операция COPY не выполняется\n" -#: fe-exec.c:2556 +#: fe-exec.c:2555 msgid "connection in wrong state\n" msgstr "соединение в неправильном состоянии\n" -#: fe-exec.c:2587 +#: fe-exec.c:2586 msgid "invalid ExecStatusType code" msgstr "неверный код ExecStatusType" -#: fe-exec.c:2651 fe-exec.c:2674 +#: fe-exec.c:2650 fe-exec.c:2673 #, c-format msgid "column number %d is out of range 0..%d" msgstr "номер колонки %d вне диапазона 0..%d" -#: fe-exec.c:2667 +#: fe-exec.c:2666 #, c-format msgid "row number %d is out of range 0..%d" msgstr "номер записи %d вне диапазона 0..%d" -#: fe-exec.c:2689 +#: fe-exec.c:2688 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "номер параметра %d вне диапазона 0..%d" -#: fe-exec.c:2999 +#: fe-exec.c:2998 #, c-format msgid "could not interpret result from server: %s" msgstr "не удалось интерпретировать ответ сервера: %s" -#: fe-exec.c:3238 fe-exec.c:3322 +#: fe-exec.c:3237 fe-exec.c:3321 msgid "incomplete multibyte character\n" msgstr "неполный многобайтный символ\n" @@ -663,12 +672,12 @@ msgstr "функция pqGetInt не поддерживает integer разме msgid "integer of size %lu not supported by pqPutInt" msgstr "функция pqPutInt не поддерживает integer размером %lu байт" -#: fe-misc.c:642 fe-misc.c:841 +#: fe-misc.c:642 fe-misc.c:842 msgid "connection not open\n" msgstr "соединение не открыто\n" -#: fe-misc.c:811 fe-secure.c:388 fe-secure.c:468 fe-secure.c:549 -#: fe-secure.c:658 +#: fe-misc.c:812 fe-secure-openssl.c:249 fe-secure-openssl.c:355 +#: fe-secure.c:253 fe-secure.c:362 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -678,15 +687,15 @@ msgstr "" "\tСкорее всего сервер прекратил работу из-за сбоя\n" "\tдо или в процессе выполнения запроса.\n" -#: fe-misc.c:1007 +#: fe-misc.c:1015 msgid "timeout expired\n" msgstr "таймаут\n" -#: fe-misc.c:1052 +#: fe-misc.c:1060 msgid "socket not open\n" msgstr "сокет не открыт\n" -#: fe-misc.c:1075 +#: fe-misc.c:1083 #, c-format msgid "select() failed: %s\n" msgstr "ошибка в select(): %s\n" @@ -706,12 +715,18 @@ msgstr "неверное состояние %c - возможно разруше msgid "message type 0x%02x arrived from server while idle" msgstr "от сервера во время простоя получено сообщение типа 0x%02x" -#: fe-protocol2.c:522 +#: fe-protocol2.c:503 fe-protocol2.c:538 fe-protocol2.c:1049 +#: fe-protocol3.c:209 fe-protocol3.c:236 fe-protocol3.c:253 fe-protocol3.c:324 +#: fe-protocol3.c:995 +msgid "out of memory" +msgstr "нехватка памяти" + +#: fe-protocol2.c:529 #, c-format msgid "unexpected character %c following empty query response (\"I\" message)" msgstr "неожиданный символ %c вслед за пустым ответом (сообщение \"I\")" -#: fe-protocol2.c:580 +#: fe-protocol2.c:595 #, c-format msgid "" "server sent data (\"D\" message) without prior row description (\"T\" " @@ -720,7 +735,7 @@ msgstr "" "сервер отправил данные (сообщение \"D\") без предварительного описания " "строки (сообщение \"T\")" -#: fe-protocol2.c:598 +#: fe-protocol2.c:613 #, c-format msgid "" "server sent binary data (\"B\" message) without prior row description (\"T\" " @@ -729,31 +744,31 @@ msgstr "" "сервер отправил двоичные данные (сообщение \"B\") без предварительного " "описания строки (сообщение \"T\")" -#: fe-protocol2.c:618 fe-protocol3.c:385 +#: fe-protocol2.c:633 fe-protocol3.c:402 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "неожиданный ответ сервера; первый полученный символ: \"%c\"\n" -#: fe-protocol2.c:747 fe-protocol2.c:922 fe-protocol3.c:600 fe-protocol3.c:782 +#: fe-protocol2.c:762 fe-protocol2.c:937 fe-protocol3.c:617 fe-protocol3.c:799 msgid "out of memory for query result" msgstr "недостаточно памяти для результата запроса" -#: fe-protocol2.c:1370 fe-protocol3.c:1752 +#: fe-protocol2.c:1395 fe-protocol3.c:1779 #, c-format msgid "%s" msgstr "%s" -#: fe-protocol2.c:1382 +#: fe-protocol2.c:1407 #, c-format msgid "lost synchronization with server, resetting connection" msgstr "потеряна синхронизация с сервером; попытка восстановить соединение" -#: fe-protocol2.c:1516 fe-protocol2.c:1548 fe-protocol3.c:1955 +#: fe-protocol2.c:1541 fe-protocol2.c:1573 fe-protocol3.c:1982 #, c-format msgid "protocol error: id=0x%x\n" msgstr "ошибка протокола: id=0x%x\n" -#: fe-protocol3.c:341 +#: fe-protocol3.c:358 msgid "" "server sent data (\"D\" message) without prior row description (\"T\" " "message)\n" @@ -761,212 +776,207 @@ msgstr "" "сервер отправил данные (сообщение \"D\") без предварительного описания " "строки (сообщение \"T\")\n" -#: fe-protocol3.c:406 +#: fe-protocol3.c:423 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "содержимое не соответствует длине в сообщении типа \"%c\"\n" -#: fe-protocol3.c:427 +#: fe-protocol3.c:444 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "" "потеряна синхронизация с сервером: получено сообщение типа \"%c\", длина %d\n" -#: fe-protocol3.c:478 fe-protocol3.c:518 +#: fe-protocol3.c:495 fe-protocol3.c:535 msgid "insufficient data in \"T\" message" msgstr "недостаточно данных в сообщении \"T\"" -#: fe-protocol3.c:551 +#: fe-protocol3.c:568 msgid "extraneous data in \"T\" message" msgstr "лишние данные в сообщении \"T\"" -#: fe-protocol3.c:690 fe-protocol3.c:722 fe-protocol3.c:740 +#: fe-protocol3.c:707 fe-protocol3.c:739 fe-protocol3.c:757 msgid "insufficient data in \"D\" message" msgstr "недостаточно данных в сообщении \"D\"" -#: fe-protocol3.c:696 +#: fe-protocol3.c:713 msgid "unexpected field count in \"D\" message" msgstr "неверное число полей в сообщении \"D\"" -#: fe-protocol3.c:749 +#: fe-protocol3.c:766 msgid "extraneous data in \"D\" message" msgstr "лишние данные в сообщении \"D\"" #. translator: %s represents a digit string -#: fe-protocol3.c:878 fe-protocol3.c:897 +#: fe-protocol3.c:898 fe-protocol3.c:917 #, c-format msgid " at character %s" msgstr " символ %s" -#: fe-protocol3.c:910 +#: fe-protocol3.c:930 #, c-format msgid "DETAIL: %s\n" msgstr "ПОДРОБНОСТИ: %s\n" -#: fe-protocol3.c:913 +#: fe-protocol3.c:933 #, c-format msgid "HINT: %s\n" msgstr "ПОДСКАЗКА: %s\n" -#: fe-protocol3.c:916 +#: fe-protocol3.c:936 #, c-format msgid "QUERY: %s\n" msgstr "ЗАПРОС: %s\n" -#: fe-protocol3.c:919 +#: fe-protocol3.c:939 #, c-format msgid "CONTEXT: %s\n" msgstr "КОНТЕКСТ: %s\n" -#: fe-protocol3.c:926 +#: fe-protocol3.c:946 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "СХЕМА: %s\n" -#: fe-protocol3.c:930 +#: fe-protocol3.c:950 #, c-format msgid "TABLE NAME: %s\n" msgstr "ТАБЛИЦА: %s\n" -#: fe-protocol3.c:934 +#: fe-protocol3.c:954 #, c-format msgid "COLUMN NAME: %s\n" msgstr "КОЛОНКА: %s\n" -#: fe-protocol3.c:938 +#: fe-protocol3.c:958 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "ТИП ДАННЫХ: %s\n" -#: fe-protocol3.c:942 +#: fe-protocol3.c:962 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "ОГРАНИЧЕНИЕ: %s\n" -#: fe-protocol3.c:954 +#: fe-protocol3.c:974 msgid "LOCATION: " msgstr "ПОЛОЖЕНИЕ: " -#: fe-protocol3.c:956 +#: fe-protocol3.c:976 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:958 +#: fe-protocol3.c:978 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1182 +#: fe-protocol3.c:1209 #, c-format msgid "LINE %d: " msgstr "СТРОКА %d: " -#: fe-protocol3.c:1577 +#: fe-protocol3.c:1604 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline можно вызывать только во время COPY OUT с текстом\n" -#: fe-secure.c:270 fe-secure.c:1138 fe-secure.c:1358 +#: fe-secure-openssl.c:146 fe-secure-openssl.c:1006 fe-secure-openssl.c:1226 #, c-format msgid "could not acquire mutex: %s\n" msgstr "не удалось заблокировать семафор: %s\n" -#: fe-secure.c:282 +#: fe-secure-openssl.c:158 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "не удалось установить SSL-соединение: %s\n" -#: fe-secure.c:393 fe-secure.c:554 fe-secure.c:1487 +#: fe-secure-openssl.c:254 fe-secure-openssl.c:360 fe-secure-openssl.c:1349 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "ошибка SSL SYSCALL: %s\n" -#: fe-secure.c:400 fe-secure.c:561 fe-secure.c:1491 +#: fe-secure-openssl.c:261 fe-secure-openssl.c:367 fe-secure-openssl.c:1353 msgid "SSL SYSCALL error: EOF detected\n" msgstr "ошибка SSL SYSCALL: конец файла (EOF)\n" -#: fe-secure.c:411 fe-secure.c:572 fe-secure.c:1500 +#: fe-secure-openssl.c:272 fe-secure-openssl.c:378 fe-secure-openssl.c:1362 #, c-format msgid "SSL error: %s\n" msgstr "ошибка SSL: %s\n" -#: fe-secure.c:426 fe-secure.c:587 +#: fe-secure-openssl.c:287 fe-secure-openssl.c:393 msgid "SSL connection has been closed unexpectedly\n" msgstr "SSL-соединение было неожиданно закрыто\n" -#: fe-secure.c:432 fe-secure.c:593 fe-secure.c:1509 +#: fe-secure-openssl.c:293 fe-secure-openssl.c:399 fe-secure-openssl.c:1371 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "нераспознанный код ошибки SSL: %d\n" -#: fe-secure.c:476 -#, c-format -msgid "could not receive data from server: %s\n" -msgstr "не удалось получить данные с сервера: %s\n" +#: fe-secure-openssl.c:511 +msgid "SSL certificate's name entry is missing\n" +msgstr "запись имени в SSL-сертификате отсутствует\n" -#: fe-secure.c:665 -#, c-format -msgid "could not send data to server: %s\n" -msgstr "не удалось передать данные серверу: %s\n" - -#: fe-secure.c:785 fe-secure.c:802 -msgid "could not get server common name from server certificate\n" -msgstr "не удалось получить имя сервера из сертификата\n" - -#: fe-secure.c:815 -msgid "SSL certificate's common name contains embedded null\n" -msgstr "Имя SSL-сертификата включает нулевой байт\n" +#: fe-secure-openssl.c:541 +msgid "SSL certificate's name contains embedded null\n" +msgstr "имя в SSL-сертификате включает нулевой байт\n" -#: fe-secure.c:827 +#: fe-secure-openssl.c:592 msgid "host name must be specified for a verified SSL connection\n" msgstr "для проверенного SSL-соединения требуется указать имя узла\n" -#: fe-secure.c:841 +#: fe-secure-openssl.c:692 #, c-format -msgid "server common name \"%s\" does not match host name \"%s\"\n" -msgstr "имя в сертификате \"%s\" не совпадает с именем сервера \"%s\"\n" +msgid "server certificate for \"%s\" does not match host name \"%s\"\n" +msgstr "" +"серверный сертификат для \"%s\" не соответствует имени сервера \"%s\"\n" + +#: fe-secure-openssl.c:698 +msgid "could not get server's host name from server certificate\n" +msgstr "не удалось получить имя сервера из сертификата\n" -#: fe-secure.c:982 +#: fe-secure-openssl.c:845 #, c-format msgid "could not create SSL context: %s\n" msgstr "не удалось создать контекст SSL: %s\n" -#: fe-secure.c:1108 +#: fe-secure-openssl.c:976 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "не удалось открыть файл сертификата \"%s\": %s\n" -#: fe-secure.c:1147 fe-secure.c:1162 +#: fe-secure-openssl.c:1015 fe-secure-openssl.c:1030 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "не удалось прочитать файл сертификата \"%s\": %s\n" -#: fe-secure.c:1217 +#: fe-secure-openssl.c:1085 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "не удалось загрузить модуль SSL ENGINE \"%s\": %s\n" -#: fe-secure.c:1229 +#: fe-secure-openssl.c:1097 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "не удалось инициализировать модуль SSL ENGINE \"%s\": %s\n" -#: fe-secure.c:1245 +#: fe-secure-openssl.c:1113 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "не удалось прочитать закрытый ключ SSL \"%s\" из модуля \"%s\": %s\n" -#: fe-secure.c:1259 +#: fe-secure-openssl.c:1127 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "не удалось загрузить закрытый ключ SSL \"%s\" из модуля \"%s\": %s\n" -#: fe-secure.c:1296 +#: fe-secure-openssl.c:1164 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "сертификат присутствует, но файла закрытого ключа \"%s\" нет\n" -#: fe-secure.c:1304 +#: fe-secure-openssl.c:1172 #, c-format msgid "" "private key file \"%s\" has group or world access; permissions should be " @@ -975,27 +985,27 @@ msgstr "" "к файлу закрытого ключа \"%s\" имеют доступ все или группа; права должны " "быть u=rw (0600) или более ограниченные\n" -#: fe-secure.c:1315 +#: fe-secure-openssl.c:1183 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "не удалось загрузить файл закрытого ключа \"%s\": %s\n" -#: fe-secure.c:1329 +#: fe-secure-openssl.c:1197 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "сертификат не соответствует файлу закрытого ключа \"%s\": %s\n" -#: fe-secure.c:1367 +#: fe-secure-openssl.c:1235 #, c-format msgid "could not read root certificate file \"%s\": %s\n" msgstr "не удалось прочитать файл корневых сертификатов \"%s\": %s\n" -#: fe-secure.c:1397 +#: fe-secure-openssl.c:1265 #, c-format msgid "SSL library does not support CRL certificates (file \"%s\")\n" msgstr "Библиотека SSL не поддерживает проверку CRL (файл \"%s\")\n" -#: fe-secure.c:1430 +#: fe-secure-openssl.c:1298 msgid "" "could not get home directory to locate root certificate file\n" "Either provide the file or change sslmode to disable server certificate " @@ -1005,7 +1015,7 @@ msgstr "" "Укажите полный путь к файлу или отключите проверку сертификата сервера, " "изменив sslmode.\n" -#: fe-secure.c:1434 +#: fe-secure-openssl.c:1302 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -1016,22 +1026,32 @@ msgstr "" "Укажите полный путь к файлу или отключите проверку сертификата сервера, " "изменив sslmode.\n" -#: fe-secure.c:1528 +#: fe-secure-openssl.c:1390 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "не удалось получить сертификат: %s\n" -#: fe-secure.c:1624 +#: fe-secure-openssl.c:1482 #, c-format msgid "no SSL error reported" msgstr "нет сообщения об ошибке SSL" -#: fe-secure.c:1633 +#: fe-secure-openssl.c:1491 #, c-format msgid "SSL error code %lu" msgstr "код ошибки SSL: %lu" -#: win32.c:322 +#: fe-secure.c:261 +#, c-format +msgid "could not receive data from server: %s\n" +msgstr "не удалось получить данные с сервера: %s\n" + +#: fe-secure.c:369 +#, c-format +msgid "could not send data to server: %s\n" +msgstr "не удалось передать данные серверу: %s\n" + +#: win32.c:317 #, c-format msgid "unrecognized socket error: 0x%08X/%d" msgstr "нераспознанная ошибка сокета: 0x%08X/%d" diff --git a/src/makefiles/Makefile.win32 b/src/makefiles/Makefile.win32 index b93f78067f2f2..354014a0c875a 100644 --- a/src/makefiles/Makefile.win32 +++ b/src/makefiles/Makefile.win32 @@ -68,12 +68,18 @@ ifneq (,$(PGAPPICON)) PGICOSTR = $(subst /,\/,IDI_ICON ICON \"$(top_builddir)/src/port/$(PGAPPICON).ico\") endif +# We do not install src/port/win32ver.rc, its content being specific to +# PostgreSQL Global Development Group software. Any module can ship a +# win32ver.rc or furnish a rule for generating one. Set $(PGFILEDESC) to +# signal win32ver.rc availability to the dll build rule below. +ifndef PGXS win32ver.rc: $(top_srcdir)/src/port/win32ver.rc sed -e 's;FILEDESC;$(PGFILEDESC);' -e 's;VFT_APP;$(PGFTYPE);' -e 's;_ICO_;$(PGICOSTR);' -e 's;\(VERSION.*\),0 *$$;\1,'`date '+%y%j' | sed 's/^0*//'`';' $< >$@ +endif win32ver.o: win32ver.rc $(WINDRES) -i $< -o $@ --include-dir=$(top_builddir)/src/include --include-dir=$(srcdir) # Rule for building a shared library from a single .o file -%.dll: %.o $(WIN32RES) +%.dll: %.o $(if $(PGFILEDESC),$(WIN32RES)) $(CC) $(CFLAGS) -shared -static-libgcc -o $@ $^ -Wl,--export-all-symbols $(LDFLAGS) $(LDFLAGS_SL) $(BE_DLLLIBS) diff --git a/src/makefiles/pgxs.mk b/src/makefiles/pgxs.mk index b5113726841ae..2b4d684e8e77e 100644 --- a/src/makefiles/pgxs.mk +++ b/src/makefiles/pgxs.mk @@ -62,21 +62,6 @@ ifdef PGXS top_builddir := $(dir $(PGXS))../.. include $(top_builddir)/src/Makefile.global -top_srcdir = $(top_builddir) -# If VPATH is set or Makefile is not in current directory we are building -# the extension with VPATH so we set the variable here. -ifdef VPATH -srcdir = $(VPATH) -else -ifeq ($(CURDIR),$(dir $(firstword $(MAKEFILE_LIST)))) -srcdir = . -VPATH = -else -srcdir = $(dir $(firstword $(MAKEFILE_LIST))) -VPATH = $(srcdir) -endif -endif - # These might be set in Makefile.global, but if they were not found # during the build of PostgreSQL, supply default values so that users # of pgxs can use the variables. @@ -217,7 +202,7 @@ endif # MODULE_big clean: ifdef MODULES - rm -f $(addsuffix $(DLSUFFIX), $(MODULES)) $(addsuffix .o, $(MODULES)) $(WIN32RES) + rm -f $(addsuffix $(DLSUFFIX), $(MODULES)) $(addsuffix .o, $(MODULES)) $(if $(PGFILEDESC),$(WIN32RES)) endif ifdef DATA_built rm -f $(DATA_built) diff --git a/src/pl/plperl/SPI.xs b/src/pl/plperl/SPI.xs index 6b8dcf62990ef..0447c50df1993 100644 --- a/src/pl/plperl/SPI.xs +++ b/src/pl/plperl/SPI.xs @@ -41,7 +41,7 @@ do_plperl_return_next(SV *sv) FlushErrorState(); /* Punt the error to Perl */ - croak("%s", edata->message); + croak_cstr(edata->message); } PG_END_TRY(); } diff --git a/src/pl/plperl/Util.xs b/src/pl/plperl/Util.xs index b2e0dfcf75d30..8c3c47fec9f66 100644 --- a/src/pl/plperl/Util.xs +++ b/src/pl/plperl/Util.xs @@ -58,7 +58,7 @@ do_util_elog(int level, SV *msg) pfree(cmsg); /* Punt the error to Perl */ - croak("%s", edata->message); + croak_cstr(edata->message); } PG_END_TRY(); } diff --git a/src/pl/plperl/expected/plperl_elog.out b/src/pl/plperl/expected/plperl_elog.out index c447fa22cbc2c..d2ac1eb71d440 100644 --- a/src/pl/plperl/expected/plperl_elog.out +++ b/src/pl/plperl/expected/plperl_elog.out @@ -104,3 +104,16 @@ PL/Perl function "indirect_die_caller" 2 (1 row) +-- Test non-ASCII error messages +-- +-- Note: this test case is known to fail if the database encoding is +-- EUC_CN, EUC_JP, EUC_KR, or EUC_TW, for lack of any equivalent to +-- U+00A0 (no-break space) in those encodings. However, testing with +-- plain ASCII data would be rather useless, so we must live with that. +SET client_encoding TO UTF8; +create or replace function error_with_nbsp() returns void language plperl as $$ + elog(ERROR, "this message contains a no-break space"); +$$; +select error_with_nbsp(); +ERROR: this message contains a no-break space at line 2. +CONTEXT: PL/Perl function "error_with_nbsp" diff --git a/src/pl/plperl/expected/plperl_elog_1.out b/src/pl/plperl/expected/plperl_elog_1.out index 0932fde2668a1..136e821099164 100644 --- a/src/pl/plperl/expected/plperl_elog_1.out +++ b/src/pl/plperl/expected/plperl_elog_1.out @@ -104,3 +104,16 @@ PL/Perl function "indirect_die_caller" 2 (1 row) +-- Test non-ASCII error messages +-- +-- Note: this test case is known to fail if the database encoding is +-- EUC_CN, EUC_JP, EUC_KR, or EUC_TW, for lack of any equivalent to +-- U+00A0 (no-break space) in those encodings. However, testing with +-- plain ASCII data would be rather useless, so we must live with that. +SET client_encoding TO UTF8; +create or replace function error_with_nbsp() returns void language plperl as $$ + elog(ERROR, "this message contains a no-break space"); +$$; +select error_with_nbsp(); +ERROR: this message contains a no-break space at line 2. +CONTEXT: PL/Perl function "error_with_nbsp" diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c index 78baaac05db27..eb25ffae93931 100644 --- a/src/pl/plperl/plperl.c +++ b/src/pl/plperl/plperl.c @@ -640,8 +640,9 @@ select_perl_context(bool trusted) else plperl_untrusted_init(); #else - elog(ERROR, - "cannot allocate multiple Perl interpreters on this platform"); + errmsg(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot allocate multiple Perl interpreters on this platform"))); #endif } @@ -660,7 +661,8 @@ select_perl_context(bool trusted) eval_pv("PostgreSQL::InServer::SPI::bootstrap()", FALSE); if (SvTRUE(ERRSV)) ereport(ERROR, - (errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), errcontext("while executing PostgreSQL::InServer::SPI::bootstrap"))); /* Fully initialized, so mark the hashtable entry valid */ @@ -834,12 +836,14 @@ plperl_init_interp(void) if (perl_parse(plperl, plperl_init_shared_libs, nargs, embedding, NULL) != 0) ereport(ERROR, - (errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), errcontext("while parsing Perl initialization"))); if (perl_run(plperl) != 0) ereport(ERROR, - (errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), errcontext("while running Perl initialization"))); #ifdef PLPERL_RESTORE_LOCALE @@ -952,7 +956,8 @@ plperl_trusted_init(void) eval_pv(PLC_TRUSTED, FALSE); if (SvTRUE(ERRSV)) ereport(ERROR, - (errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), errcontext("while executing PLC_TRUSTED"))); /* @@ -963,7 +968,8 @@ plperl_trusted_init(void) eval_pv("my $a=chr(0x100); return $a =~ /\\xa9/i", FALSE); if (SvTRUE(ERRSV)) ereport(ERROR, - (errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), errcontext("while executing utf8fix"))); /* @@ -1002,11 +1008,12 @@ plperl_trusted_init(void) if (plperl_on_plperl_init && *plperl_on_plperl_init) { eval_pv(plperl_on_plperl_init, FALSE); + /* XXX need to find a way to determine a better errcode here */ if (SvTRUE(ERRSV)) ereport(ERROR, - (errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), errcontext("while executing plperl.on_plperl_init"))); - } } @@ -1025,7 +1032,8 @@ plperl_untrusted_init(void) eval_pv(plperl_on_plperlu_init, FALSE); if (SvTRUE(ERRSV)) ereport(ERROR, - (errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))), errcontext("while executing plperl.on_plperlu_init"))); } } @@ -1382,7 +1390,9 @@ plperl_sv_to_literal(SV *sv, char *fqtypename) isnull; if (!OidIsValid(typid)) - elog(ERROR, "lookup failed for type %s", fqtypename); + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("lookup failed for type %s", fqtypename))); datum = plperl_sv_to_datum(sv, typid, -1, @@ -2059,7 +2069,8 @@ plperl_create_sub(plperl_proc_desc *prodesc, char *s, Oid fn_oid) if (!subref) ereport(ERROR, - (errmsg("didn't get a CODE reference from compiling function \"%s\"", + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("didn't get a CODE reference from compiling function \"%s\"", prodesc->proname))); prodesc->reference = subref; @@ -2147,7 +2158,9 @@ plperl_call_perl_func(plperl_proc_desc *desc, FunctionCallInfo fcinfo) PUTBACK; FREETMPS; LEAVE; - elog(ERROR, "didn't get a return item from function"); + ereport(ERROR, + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("didn't get a return item from function"))); } if (SvTRUE(ERRSV)) @@ -2156,9 +2169,10 @@ plperl_call_perl_func(plperl_proc_desc *desc, FunctionCallInfo fcinfo) PUTBACK; FREETMPS; LEAVE; - /* XXX need to find a way to assign an errcode here */ + /* XXX need to find a way to determine a better errcode here */ ereport(ERROR, - (errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))))); + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))))); } retval = newSVsv(POPs); @@ -2187,7 +2201,9 @@ plperl_call_perl_trigger_func(plperl_proc_desc *desc, FunctionCallInfo fcinfo, TDsv = get_sv("main::_TD", 0); if (!TDsv) - elog(ERROR, "couldn't fetch $_TD"); + ereport(ERROR, + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("couldn't fetch $_TD"))); save_item(TDsv); /* local $_TD */ sv_setsv(TDsv, td); @@ -2209,7 +2225,9 @@ plperl_call_perl_trigger_func(plperl_proc_desc *desc, FunctionCallInfo fcinfo, PUTBACK; FREETMPS; LEAVE; - elog(ERROR, "didn't get a return item from trigger function"); + ereport(ERROR, + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("didn't get a return item from trigger function"))); } if (SvTRUE(ERRSV)) @@ -2218,9 +2236,10 @@ plperl_call_perl_trigger_func(plperl_proc_desc *desc, FunctionCallInfo fcinfo, PUTBACK; FREETMPS; LEAVE; - /* XXX need to find a way to assign an errcode here */ + /* XXX need to find a way to determine a better errcode here */ ereport(ERROR, - (errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))))); + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))))); } retval = newSVsv(POPs); @@ -2248,7 +2267,9 @@ plperl_call_perl_event_trigger_func(plperl_proc_desc *desc, TDsv = get_sv("main::_TD", 0); if (!TDsv) - elog(ERROR, "couldn't fetch $_TD"); + ereport(ERROR, + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("couldn't fetch $_TD"))); save_item(TDsv); /* local $_TD */ sv_setsv(TDsv, td); @@ -2266,7 +2287,9 @@ plperl_call_perl_event_trigger_func(plperl_proc_desc *desc, PUTBACK; FREETMPS; LEAVE; - elog(ERROR, "didn't get a return item from trigger function"); + ereport(ERROR, + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("didn't get a return item from trigger function"))); } if (SvTRUE(ERRSV)) @@ -2275,9 +2298,10 @@ plperl_call_perl_event_trigger_func(plperl_proc_desc *desc, PUTBACK; FREETMPS; LEAVE; - /* XXX need to find a way to assign an errcode here */ + /* XXX need to find a way to determine a better errcode here */ ereport(ERROR, - (errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))))); + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("%s", strip_trailing_ws(sv2cstr(ERRSV))))); } retval = newSVsv(POPs); @@ -3042,7 +3066,7 @@ plperl_spi_exec(char *query, int limit) SPI_restore_connection(); /* Punt the error to Perl */ - croak("%s", edata->message); + croak_cstr(edata->message); /* Can't get here, but keep compiler quiet */ return NULL; @@ -3275,7 +3299,7 @@ plperl_spi_query(char *query) SPI_restore_connection(); /* Punt the error to Perl */ - croak("%s", edata->message); + croak_cstr(edata->message); /* Can't get here, but keep compiler quiet */ return NULL; @@ -3361,7 +3385,7 @@ plperl_spi_fetchrow(char *cursor) SPI_restore_connection(); /* Punt the error to Perl */ - croak("%s", edata->message); + croak_cstr(edata->message); /* Can't get here, but keep compiler quiet */ return NULL; @@ -3536,7 +3560,7 @@ plperl_spi_prepare(char *query, int argc, SV **argv) SPI_restore_connection(); /* Punt the error to Perl */ - croak("%s", edata->message); + croak_cstr(edata->message); /* Can't get here, but keep compiler quiet */ return NULL; @@ -3677,7 +3701,7 @@ plperl_spi_exec_prepared(char *query, HV *attr, int argc, SV **argv) SPI_restore_connection(); /* Punt the error to Perl */ - croak("%s", edata->message); + croak_cstr(edata->message); /* Can't get here, but keep compiler quiet */ return NULL; @@ -3806,7 +3830,7 @@ plperl_spi_query_prepared(char *query, int argc, SV **argv) SPI_restore_connection(); /* Punt the error to Perl */ - croak("%s", edata->message); + croak_cstr(edata->message); /* Can't get here, but keep compiler quiet */ return NULL; diff --git a/src/pl/plperl/plperl_helpers.h b/src/pl/plperl/plperl_helpers.h index fab0a7ba08165..f8aa06835ce5c 100644 --- a/src/pl/plperl/plperl_helpers.h +++ b/src/pl/plperl/plperl_helpers.h @@ -123,4 +123,42 @@ cstr2sv(const char *str) return sv; } +/* + * croak() with specified message, which is given in the database encoding. + * + * Ideally we'd just write croak("%s", str), but plain croak() does not play + * nice with non-ASCII data. In modern Perl versions we can call cstr2sv() + * and pass the result to croak_sv(); in versions that don't have croak_sv(), + * we have to work harder. + */ +static inline void +croak_cstr(const char *str) +{ +#ifdef croak_sv + /* Use sv_2mortal() to be sure the transient SV gets freed */ + croak_sv(sv_2mortal(cstr2sv(str))); +#else + + /* + * The older way to do this is to assign a UTF8-marked value to ERRSV and + * then call croak(NULL). But if we leave it to croak() to append the + * error location, it does so too late (only after popping the stack) in + * some Perl versions. Hence, use mess() to create an SV with the error + * location info already appended. + */ + SV *errsv = get_sv("@", GV_ADD); + char *utf8_str = utf_e2u(str); + SV *ssv; + + ssv = mess("%s", utf8_str); + SvUTF8_on(ssv); + + pfree(utf8_str); + + sv_setsv(errsv, ssv); + + croak(NULL); +#endif /* croak_sv */ +} + #endif /* PL_PERL_HELPERS_H */ diff --git a/src/pl/plperl/po/de.po b/src/pl/plperl/po/de.po index bcd6ed53d7b66..af0d2f68e3868 100644 --- a/src/pl/plperl/po/de.po +++ b/src/pl/plperl/po/de.po @@ -1,16 +1,16 @@ # German message translation file for plperl # Copyright (C) 2010 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Peter Eisentraut , 2009 - 2013. +# Peter Eisentraut , 2009 - 2015. # # Use these quotes: „%s“ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.3\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2011-11-09 20:39+0000\n" -"PO-Revision-Date: 2013-03-04 21:41-0500\n" +"POT-Creation-Date: 2015-09-23 01:37+0000\n" +"PO-Revision-Date: 2015-09-24 01:16-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -18,183 +18,200 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: plperl.c:364 -msgid "" -"If true, trusted and untrusted Perl code will be compiled in strict mode." -msgstr "" -"Wenn wahr, dann wird vertrauenswürdiger und nicht vertrauenswürdiger Perl-" -"Code im „strict“-Modus kompiliert." +#: plperl.c:404 +msgid "If true, trusted and untrusted Perl code will be compiled in strict mode." +msgstr "Wenn wahr, dann wird vertrauenswürdiger und nicht vertrauenswürdiger Perl-Code im „strict“-Modus kompiliert." -#: plperl.c:378 -msgid "" -"Perl initialization code to execute when a Perl interpreter is initialized." -msgstr "" -"Perl-Initialisierungscode, der ausgeführt wird, wenn der Perl-Interpreter " -"initialisiert wird." +#: plperl.c:418 +msgid "Perl initialization code to execute when a Perl interpreter is initialized." +msgstr "Perl-Initialisierungscode, der ausgeführt wird, wenn der Perl-Interpreter initialisiert wird." -#: plperl.c:400 +#: plperl.c:440 msgid "Perl initialization code to execute once when plperl is first used." -msgstr "" -"Perl-Initialisierungscode, der ausgeführt wird, wenn plperl zum ersten Mal " -"benutzt wird." +msgstr "Perl-Initialisierungscode, der ausgeführt wird, wenn plperl zum ersten Mal benutzt wird." -#: plperl.c:408 +#: plperl.c:448 msgid "Perl initialization code to execute once when plperlu is first used." -msgstr "" -"Perl-Initialisierungscode, der ausgeführt wird, wenn plperlu zum ersten Mal " -"benutzt wird." +msgstr "Perl-Initialisierungscode, der ausgeführt wird, wenn plperlu zum ersten Mal benutzt wird." -#: plperl.c:625 plperl.c:787 plperl.c:792 plperl.c:896 plperl.c:907 -#: plperl.c:948 plperl.c:969 plperl.c:1942 plperl.c:2037 plperl.c:2099 +#: plperl.c:645 +#, c-format +msgid "cannot allocate multiple Perl interpreters on this platform" +msgstr "auf dieser Plattform können nicht mehrere Perl-Interpreter angelegt werden" + +#: plperl.c:665 plperl.c:840 plperl.c:846 plperl.c:960 plperl.c:972 +#: plperl.c:1015 plperl.c:1036 plperl.c:2068 plperl.c:2175 plperl.c:2242 +#: plperl.c:2304 #, c-format msgid "%s" msgstr "%s" -#: plperl.c:626 +#: plperl.c:666 +#, c-format msgid "while executing PostgreSQL::InServer::SPI::bootstrap" msgstr "beim Ausführen von PostgreSQL::InServer::SPI::bootstrap" -#: plperl.c:788 +#: plperl.c:841 +#, c-format msgid "while parsing Perl initialization" msgstr "beim Parsen der Perl-Initialisierung" -#: plperl.c:793 +#: plperl.c:847 +#, c-format msgid "while running Perl initialization" msgstr "beim Ausführen der Perl-Initialisierung" -#: plperl.c:897 +#: plperl.c:961 +#, c-format msgid "while executing PLC_TRUSTED" msgstr "beim Ausführen von PLC_TRUSTED" -#: plperl.c:908 +#: plperl.c:973 +#, c-format msgid "while executing utf8fix" msgstr "beim Ausführen von utf8fix" -#: plperl.c:949 +#: plperl.c:1016 +#, c-format msgid "while executing plperl.on_plperl_init" msgstr "beim Ausführen von plperl.on_plperl_init" -#: plperl.c:970 +#: plperl.c:1037 +#, c-format msgid "while executing plperl.on_plperlu_init" msgstr "beim Ausführen von plperl.on_plperlu_init" -#: plperl.c:1014 plperl.c:1614 +#: plperl.c:1081 plperl.c:1710 #, c-format msgid "Perl hash contains nonexistent column \"%s\"" msgstr "Perl-Hash enthält nicht existierende Spalte „%s“" -#: plperl.c:1099 +#: plperl.c:1166 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "Anzahl der Arraydimensionen (%d) überschreitet erlaubtes Maximum (%d)" -#: plperl.c:1111 plperl.c:1128 -msgid "" -"multidimensional arrays must have array expressions with matching dimensions" -msgstr "" -"mehrdimensionale Arrays müssen Arraysausdrücke mit gleicher Anzahl " -"Dimensionen haben" +#: plperl.c:1178 plperl.c:1195 +#, c-format +msgid "multidimensional arrays must have array expressions with matching dimensions" +msgstr "mehrdimensionale Arrays müssen Arraysausdrücke mit gleicher Anzahl Dimensionen haben" -#: plperl.c:1165 +#: plperl.c:1230 #, c-format msgid "cannot convert Perl array to non-array type %s" msgstr "kann Perl-Array nicht in Nicht-Array-Typ %s umwandeln" -#: plperl.c:1261 +#: plperl.c:1332 #, c-format msgid "cannot convert Perl hash to non-composite type %s" msgstr "kann Perl-Hash nicht in nicht zusammengesetzten Typ %s umwandeln" -#: plperl.c:1272 -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" +#: plperl.c:1343 +#, c-format +msgid "function returning record called in context that cannot accept type record" +msgstr "Funktion, die einen Record zurückgibt, in einem Zusammenhang aufgerufen, der Typ record nicht verarbeiten kann" -#: plperl.c:1287 +#: plperl.c:1358 +#, c-format msgid "PL/Perl function must return reference to hash or array" -msgstr "" -"PL/Perl-Funktion muss eine Referenz auf ein Hash oder ein Array zurückgeben" +msgstr "PL/Perl-Funktion muss eine Referenz auf ein Hash oder ein Array zurückgeben" + +#: plperl.c:1395 +#, c-format +msgid "lookup failed for type %s" +msgstr "Nachschlagen nach Typ %s fehlgeschlagen" -#: plperl.c:1591 +#: plperl.c:1687 +#, c-format msgid "$_TD->{new} does not exist" msgstr "$_TD->{new} existiert nicht" -#: plperl.c:1595 +#: plperl.c:1691 +#, c-format msgid "$_TD->{new} is not a hash reference" msgstr "$_TD->{new} ist keine Hash-Referenz" -#: plperl.c:1819 plperl.c:2517 +#: plperl.c:1944 plperl.c:2776 #, c-format msgid "PL/Perl functions cannot return type %s" msgstr "PL/Perl-Funktionen können keinen Rückgabetyp %s haben" -#: plperl.c:1832 plperl.c:2564 +#: plperl.c:1957 plperl.c:2821 #, c-format msgid "PL/Perl functions cannot accept type %s" msgstr "PL/Perl-Funktionen können Typ %s nicht annehmen" -#: plperl.c:1946 +#: plperl.c:2073 #, c-format msgid "didn't get a CODE reference from compiling function \"%s\"" msgstr "keine CODE-Referenz erhalten beim Kompilieren von Funktion „%s“" -#: plperl.c:2150 +#: plperl.c:2163 +#, c-format +msgid "didn't get a return item from function" +msgstr "keinen Rückgabewert aus Funktion erhalten" + +#: plperl.c:2206 plperl.c:2272 +#, c-format +msgid "couldn't fetch $_TD" +msgstr "konnte $_TD nicht auslesen" + +#: plperl.c:2230 plperl.c:2292 +#, c-format +msgid "didn't get a return item from trigger function" +msgstr "keinen Rückgabewert aus Triggerfunktion erhalten" + +#: plperl.c:2349 +#, 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" +msgstr "Funktion mit Mengenergebnis in einem Zusammenhang aufgerufen, der keine Mengenergebnisse verarbeiten kann" -#: plperl.c:2194 -msgid "" -"set-returning PL/Perl function must return reference to array or use " -"return_next" -msgstr "" -"PL/Perl-Funktionen mit Mengenergebnis müssen eine Referenz auf ein Array " -"zurückgeben oder return_next verwenden" +#: plperl.c:2393 +#, c-format +msgid "set-returning PL/Perl function must return reference to array or use return_next" +msgstr "PL/Perl-Funktionen mit Mengenergebnis müssen eine Referenz auf ein Array zurückgeben oder return_next verwenden" -#: plperl.c:2314 +#: plperl.c:2507 +#, c-format msgid "ignoring modified row in DELETE trigger" msgstr "geänderte Zeile im DELETE-Trigger wird ignoriert" -#: plperl.c:2322 -msgid "" -"result of PL/Perl trigger function must be undef, \"SKIP\", or \"MODIFY\"" -msgstr "" -"Ergebnis einer PL/Perl-Triggerfunktion muss undef, „SKIP“ oder „MODIFY“ sein" +#: plperl.c:2515 +#, c-format +msgid "result of PL/Perl trigger function must be undef, \"SKIP\", or \"MODIFY\"" +msgstr "Ergebnis einer PL/Perl-Triggerfunktion muss undef, „SKIP“ oder „MODIFY“ sein" -#: plperl.c:2448 plperl.c:2454 +#: plperl.c:2694 plperl.c:2704 +#, c-format msgid "out of memory" msgstr "Speicher aufgebraucht" -#: plperl.c:2508 +#: plperl.c:2768 +#, c-format msgid "trigger functions can only be called as triggers" msgstr "Triggerfunktionen können nur als Trigger aufgerufen werden" -#: plperl.c:2884 +#: plperl.c:3144 +#, c-format msgid "cannot use return_next in a non-SETOF function" -msgstr "" -"return_next kann nur in einer Funktion mit SETOF-Rückgabetyp verwendet werden" +msgstr "return_next kann nur in einer Funktion mit SETOF-Rückgabetyp verwendet werden" -#: plperl.c:2940 -msgid "" -"SETOF-composite-returning PL/Perl function must call return_next with " -"reference to hash" -msgstr "" -"PL/Perl-Funktion, die SETOF eines zusammengesetzten Typs zurückgibt, muss " -"return_next mit einer Referenz auf ein Hash aufrufen" +#: plperl.c:3200 +#, c-format +msgid "SETOF-composite-returning PL/Perl function must call return_next with reference to hash" +msgstr "PL/Perl-Funktion, die SETOF eines zusammengesetzten Typs zurückgibt, muss return_next mit einer Referenz auf ein Hash aufrufen" -#: plperl.c:3655 +#: plperl.c:3934 #, c-format msgid "PL/Perl function \"%s\"" msgstr "PL/Perl-Funktion „%s“" -#: plperl.c:3667 +#: plperl.c:3946 #, c-format msgid "compilation of PL/Perl function \"%s\"" msgstr "Kompilierung der PL/Perl-Funktion „%s“" -#: plperl.c:3676 +#: plperl.c:3955 +#, c-format msgid "PL/Perl anonymous code block" msgstr "anonymer PL/Perl-Codeblock" diff --git a/src/pl/plperl/po/es.po b/src/pl/plperl/po/es.po index 29c26b2ce7e54..aec24b7fa0a86 100644 --- a/src/pl/plperl/po/es.po +++ b/src/pl/plperl/po/es.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: plperl (PostgreSQL 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:37+0000\n" -"PO-Revision-Date: 2014-12-16 12:13-0300\n" +"POT-Creation-Date: 2015-10-04 00:37+0000\n" +"PO-Revision-Date: 2015-09-30 12:21-0300\n" "Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -19,175 +19,200 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: plperl.c:401 +#: plperl.c:404 msgid "If true, trusted and untrusted Perl code will be compiled in strict mode." msgstr "Si es verdadero, se compilará código Perl confiable y no confiable en modo «strict»." -#: plperl.c:415 +#: plperl.c:418 msgid "Perl initialization code to execute when a Perl interpreter is initialized." msgstr "Código Perl de inicialización a ejecutar cuando un intérprete Perl es inicializado." -#: plperl.c:437 +#: plperl.c:440 msgid "Perl initialization code to execute once when plperl is first used." msgstr "Código Perl de inicialización a ejecutar cuando plperl se usa por primera vez." -#: plperl.c:445 +#: plperl.c:448 msgid "Perl initialization code to execute once when plperlu is first used." msgstr "Código Perl de inicialización a ejecutar cuando plperlu se usa por primera vez." -#: plperl.c:662 plperl.c:836 plperl.c:841 plperl.c:954 plperl.c:965 -#: plperl.c:1006 plperl.c:1027 plperl.c:2045 plperl.c:2140 plperl.c:2202 -#: plperl.c:2259 +#: plperl.c:645 +#, c-format +msgid "cannot allocate multiple Perl interpreters on this platform" +msgstr "no se pueden instanciar múltiples intérpretes Perl en esta plataforma" + +#: plperl.c:665 plperl.c:840 plperl.c:846 plperl.c:960 plperl.c:972 +#: plperl.c:1015 plperl.c:1036 plperl.c:2068 plperl.c:2175 plperl.c:2242 +#: plperl.c:2304 #, c-format msgid "%s" msgstr "%s" -#: plperl.c:663 +#: plperl.c:666 #, c-format msgid "while executing PostgreSQL::InServer::SPI::bootstrap" msgstr "mientras se ejecutaba PostgreSQL::InServer::SPI::bootstrap" -#: plperl.c:837 +#: plperl.c:841 #, c-format msgid "while parsing Perl initialization" msgstr "mientras se interpretaba la inicialización de Perl" -#: plperl.c:842 +#: plperl.c:847 #, c-format msgid "while running Perl initialization" msgstr "mientras se ejecutaba la inicialización de Perl" -#: plperl.c:955 +#: plperl.c:961 #, c-format msgid "while executing PLC_TRUSTED" msgstr "mientras se ejecutaba PLC_TRUSTED" -#: plperl.c:966 +#: plperl.c:973 #, c-format msgid "while executing utf8fix" msgstr "mientras se ejecutaba utf8fix" -#: plperl.c:1007 +#: plperl.c:1016 #, c-format msgid "while executing plperl.on_plperl_init" msgstr "mientras se ejecutaba plperl.on_plperl_init" -#: plperl.c:1028 +#: plperl.c:1037 #, c-format msgid "while executing plperl.on_plperlu_init" msgstr "mientras se ejecutaba plperl.on_plperlu_init" -#: plperl.c:1072 plperl.c:1689 +#: plperl.c:1081 plperl.c:1710 #, c-format msgid "Perl hash contains nonexistent column \"%s\"" msgstr "el hash de Perl contiene el columna inexistente «%s»" -#: plperl.c:1157 +#: plperl.c:1166 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "el número de dimensiones del array (%d) excede el máximo permitido (%d)" -#: plperl.c:1169 plperl.c:1186 +#: plperl.c:1178 plperl.c:1195 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "los arrays multidimensionales deben tener expresiones de arrays con dimensiones coincidentes" -#: plperl.c:1223 +#: plperl.c:1230 #, c-format msgid "cannot convert Perl array to non-array type %s" msgstr "no se puede convertir un array de Perl al tipo no-array %s" -#: plperl.c:1319 +#: plperl.c:1332 #, c-format msgid "cannot convert Perl hash to non-composite type %s" msgstr "no se puede convertir un hash de Perl al tipo no compuesto %s" -#: plperl.c:1330 +#: plperl.c:1343 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "se llamó una función que retorna un registro en un contexto que no puede aceptarlo" -#: plperl.c:1345 +#: plperl.c:1358 #, c-format msgid "PL/Perl function must return reference to hash or array" msgstr "una función Perl debe retornar una referencia a un hash o array" -#: plperl.c:1666 +#: plperl.c:1395 +#, c-format +msgid "lookup failed for type %s" +msgstr "búsqueda del tipo %s falló" + +#: plperl.c:1687 #, c-format msgid "$_TD->{new} does not exist" msgstr "$_TD->{new} no existe" -#: plperl.c:1670 +#: plperl.c:1691 #, c-format msgid "$_TD->{new} is not a hash reference" msgstr "$_TD->{new} no es una referencia a un hash" -#: plperl.c:1921 plperl.c:2718 +#: plperl.c:1944 plperl.c:2776 #, c-format msgid "PL/Perl functions cannot return type %s" msgstr "las funciones en PL/Perl no pueden retornar el tipo %s" -#: plperl.c:1934 plperl.c:2763 +#: plperl.c:1957 plperl.c:2821 #, c-format msgid "PL/Perl functions cannot accept type %s" msgstr "funciones de PL/Perl no pueden aceptar el tipo %s" -#: plperl.c:2049 +#: plperl.c:2073 #, c-format msgid "didn't get a CODE reference from compiling function \"%s\"" msgstr "no se obtuvo una referencia CODE en la compilación de la función «%s»" -#: plperl.c:2304 +#: plperl.c:2163 +#, c-format +msgid "didn't get a return item from function" +msgstr "no se obtuvo un elemento de retorno desde la función" + +#: plperl.c:2206 plperl.c:2272 +#, c-format +msgid "couldn't fetch $_TD" +msgstr "no se pudo obtener $_TD" + +#: plperl.c:2230 plperl.c:2292 +#, c-format +msgid "didn't get a return item from trigger function" +msgstr "no se obtuvo un elemento de retorno desde la función de disparador" + +#: plperl.c:2349 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "se llamó a una función que retorna un conjunto en un contexto que no puede aceptarlo" -#: plperl.c:2348 +#: plperl.c:2393 #, c-format msgid "set-returning PL/Perl function must return reference to array or use return_next" msgstr "una función PL/Perl que retorna un conjunto debe retornar una referencia a un array o usar return_next" -#: plperl.c:2462 +#: plperl.c:2507 #, c-format msgid "ignoring modified row in DELETE trigger" msgstr "ignorando la tupla modificada en el disparador DELETE" -#: plperl.c:2470 +#: plperl.c:2515 #, c-format msgid "result of PL/Perl trigger function must be undef, \"SKIP\", or \"MODIFY\"" msgstr "el resultado de la función disparadora en PL/Perl debe ser undef, «SKIP» o «MODIFY»" -#: plperl.c:2647 plperl.c:2657 +#: plperl.c:2694 plperl.c:2704 #, c-format msgid "out of memory" msgstr "memoria agotada" -#: plperl.c:2710 +#: plperl.c:2768 #, c-format msgid "trigger functions can only be called as triggers" msgstr "las funciones disparadoras sólo pueden ser llamadas como disparadores" -#: plperl.c:3083 +#: plperl.c:3144 #, c-format msgid "cannot use return_next in a non-SETOF function" msgstr "no se puede utilizar return_next en una función sin SETOF" -#: plperl.c:3139 +#: plperl.c:3200 #, c-format msgid "SETOF-composite-returning PL/Perl function must call return_next with reference to hash" msgstr "una función Perl que retorna SETOF de un tipo compuesto debe invocar return_next con una referencia a un hash" -#: plperl.c:3873 +#: plperl.c:3934 #, c-format msgid "PL/Perl function \"%s\"" msgstr "función PL/Perl «%s»" -#: plperl.c:3885 +#: plperl.c:3946 #, c-format msgid "compilation of PL/Perl function \"%s\"" msgstr "compilación de la función PL/Perl «%s»" -#: plperl.c:3894 +#: plperl.c:3955 #, c-format msgid "PL/Perl anonymous code block" msgstr "bloque de código anónimo de PL/Perl" diff --git a/src/pl/plperl/po/it.po b/src/pl/plperl/po/it.po index e42840400e7ba..05e8176bb2cac 100644 --- a/src/pl/plperl/po/it.po +++ b/src/pl/plperl/po/it.po @@ -17,10 +17,10 @@ # msgid "" msgstr "" -"Project-Id-Version: plperl (PostgreSQL) 9.3\n" +"Project-Id-Version: plperl (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2013-03-15 22:09+0000\n" -"PO-Revision-Date: 2012-12-03 17:46+0100\n" +"POT-Creation-Date: 2015-08-15 18:37+0000\n" +"PO-Revision-Date: 2015-08-16 10:02+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -30,174 +30,200 @@ msgstr "" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 1.5.4\n" -#: plperl.c:388 +#: plperl.c:404 msgid "If true, trusted and untrusted Perl code will be compiled in strict mode." msgstr "Se vero, il codice Perl affidabile e non affidabile sarà compilato in modalità strict." -#: plperl.c:402 +#: plperl.c:418 msgid "Perl initialization code to execute when a Perl interpreter is initialized." msgstr "codice Perl di inizializzazione da eseguire quando l'interprete Perl è inizializzato." -#: plperl.c:424 +#: plperl.c:440 msgid "Perl initialization code to execute once when plperl is first used." msgstr "codice Perl di inizializzazione da eseguire una sola volta quando plperl è usato per la prima volta." -#: plperl.c:432 +#: plperl.c:448 msgid "Perl initialization code to execute once when plperlu is first used." msgstr "codice Perl di inizializzazione da eseguire una sola volta quando plperlu è usato per la prima volta." -#: plperl.c:649 plperl.c:823 plperl.c:828 plperl.c:940 plperl.c:951 -#: plperl.c:992 plperl.c:1013 plperl.c:2002 plperl.c:2097 plperl.c:2159 +#: plperl.c:645 +#, c-format +msgid "cannot allocate multiple Perl interpreters on this platform" +msgstr "non è possibile allocare piû interpreti Perl su questa piattaforma" + +#: plperl.c:665 plperl.c:840 plperl.c:846 plperl.c:960 plperl.c:972 +#: plperl.c:1015 plperl.c:1036 plperl.c:2068 plperl.c:2175 plperl.c:2242 +#: plperl.c:2304 #, c-format msgid "%s" msgstr "%s" -#: plperl.c:650 +#: plperl.c:666 #, c-format msgid "while executing PostgreSQL::InServer::SPI::bootstrap" msgstr "nell'esecuzione di PostgreSQL::InServer::SPI::bootstrap" -#: plperl.c:824 +#: plperl.c:841 #, c-format msgid "while parsing Perl initialization" msgstr "durante il parsing dell'inizializzazione Perl" -#: plperl.c:829 +#: plperl.c:847 #, c-format msgid "while running Perl initialization" msgstr "durante l'esecuzione dell'inizializzazione Perl" -#: plperl.c:941 +#: plperl.c:961 #, c-format msgid "while executing PLC_TRUSTED" msgstr "nell'esecuzione di PLC_TRUSTED" -#: plperl.c:952 +#: plperl.c:973 #, c-format msgid "while executing utf8fix" msgstr "durante l'esecuzione di utf8fix" -#: plperl.c:993 +#: plperl.c:1016 #, c-format msgid "while executing plperl.on_plperl_init" msgstr "nell'esecuzione di plperl.on_plperl_init" -#: plperl.c:1014 +#: plperl.c:1037 #, c-format msgid "while executing plperl.on_plperlu_init" msgstr "nell'esecuzione di plperl.on_plperlu_init" -#: plperl.c:1058 plperl.c:1658 +#: plperl.c:1081 plperl.c:1710 #, c-format msgid "Perl hash contains nonexistent column \"%s\"" msgstr "La struttura hash in Perl contiene la colonna inesistente \"%s\"" -#: plperl.c:1143 +#: plperl.c:1166 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "il numero di dimensioni dell'array (%d) eccede il massimo consentito (%d)" -#: plperl.c:1155 plperl.c:1172 +#: plperl.c:1178 plperl.c:1195 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "gli array multidimensionali devono avere espressioni array di dimensioni corrispondenti" -#: plperl.c:1209 +#: plperl.c:1230 #, c-format msgid "cannot convert Perl array to non-array type %s" msgstr "non è possibile convertire un array Perl nel tipo non-array %s" -#: plperl.c:1305 +#: plperl.c:1332 #, c-format msgid "cannot convert Perl hash to non-composite type %s" msgstr "non è possibile convertire un hash Perl nel tipo non composito %s" -#: plperl.c:1316 +#: plperl.c:1343 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "la funzione che restituisce un record è chiamata in un contesto che non può accettare il tipo record" -#: plperl.c:1331 +#: plperl.c:1358 #, c-format msgid "PL/Perl function must return reference to hash or array" msgstr "la funzione PL/Perl deve restituire un riferimento a hash o array" -#: plperl.c:1635 +#: plperl.c:1395 +#, c-format +msgid "lookup failed for type %s" +msgstr "ricerca del tipo %s fallita" + +#: plperl.c:1687 #, c-format msgid "$_TD->{new} does not exist" msgstr "$_TD->{new} non esiste" -#: plperl.c:1639 +#: plperl.c:1691 #, c-format msgid "$_TD->{new} is not a hash reference" msgstr "$_TD->{new} non è un riferimento ad un hash" -#: plperl.c:1879 plperl.c:2578 +#: plperl.c:1944 plperl.c:2776 #, c-format msgid "PL/Perl functions cannot return type %s" msgstr "la funzione PL/Perl non può restituire il tipo %s" -#: plperl.c:1892 plperl.c:2623 +#: plperl.c:1957 plperl.c:2821 #, c-format msgid "PL/Perl functions cannot accept type %s" msgstr "la funzione PL/Perl non può accettare il tipo %s" -#: plperl.c:2006 +#: plperl.c:2073 #, c-format msgid "didn't get a CODE reference from compiling function \"%s\"" msgstr "non ho ricevuto un riferimento CODE dal compilare la funzione \"%s\"" -#: plperl.c:2204 +#: plperl.c:2163 +#, c-format +msgid "didn't get a return item from function" +msgstr "la funzione non ha restituito un elemento" + +#: plperl.c:2206 plperl.c:2272 +#, c-format +msgid "couldn't fetch $_TD" +msgstr "lettura di $_TD fallita" + +#: plperl.c:2230 plperl.c:2292 +#, c-format +msgid "didn't get a return item from trigger function" +msgstr "la funzione trigger non ha restituito un elemento" + +#: plperl.c:2349 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "la funzione che restituisce insiemi è chiamata in un contesto che non può accettare un insieme" -#: plperl.c:2248 +#: plperl.c:2393 #, c-format msgid "set-returning PL/Perl function must return reference to array or use return_next" msgstr "la funzione PL/Perl che restituisce un insieme deve restituire un riferimento ad un array o usare return_next" -#: plperl.c:2362 +#: plperl.c:2507 #, c-format msgid "ignoring modified row in DELETE trigger" msgstr "modifiche alla riga ignorate nel trigger DELETE" -#: plperl.c:2370 +#: plperl.c:2515 #, c-format msgid "result of PL/Perl trigger function must be undef, \"SKIP\", or \"MODIFY\"" msgstr "il risultato della funzione trigger PL/Perl deve essere undef, \"SKIP\" oppure \"MODIFY\"" -#: plperl.c:2508 plperl.c:2518 +#: plperl.c:2694 plperl.c:2704 #, c-format msgid "out of memory" msgstr "memoria esaurita" -#: plperl.c:2570 +#: plperl.c:2768 #, c-format msgid "trigger functions can only be called as triggers" msgstr "le funzioni trigger possono essere chiamate esclusivamente da trigger" -#: plperl.c:2943 +#: plperl.c:3144 #, c-format msgid "cannot use return_next in a non-SETOF function" msgstr "non si può usare return_next in una funzione non-SETOF" -#: plperl.c:2999 +#: plperl.c:3200 #, c-format msgid "SETOF-composite-returning PL/Perl function must call return_next with reference to hash" msgstr "una funzione PL/Perl che restituisce SETOF di un tipo composito deve chiamare return_next con riferimento ad un hash" -#: plperl.c:3737 +#: plperl.c:3934 #, c-format msgid "PL/Perl function \"%s\"" msgstr "funzione PL/Perl \"%s\"" -#: plperl.c:3749 +#: plperl.c:3946 #, c-format msgid "compilation of PL/Perl function \"%s\"" msgstr "compilazione della funzione Perl \"%s\"" -#: plperl.c:3758 +#: plperl.c:3955 #, c-format msgid "PL/Perl anonymous code block" msgstr "blocco di codice anonimo PL/Perl" diff --git a/src/pl/plperl/po/pl.po b/src/pl/plperl/po/pl.po index 466f3ff99a847..e2c184d92d36d 100644 --- a/src/pl/plperl/po/pl.po +++ b/src/pl/plperl/po/pl.po @@ -2,189 +2,223 @@ # Copyright (C) 2011 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. # Begina Felicysym , 2011, 2012. +# grzegorz , 2015. msgid "" msgstr "" "Project-Id-Version: plperl (PostgreSQL 9.1)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2013-01-29 13:39+0000\n" -"PO-Revision-Date: 2013-01-29 12:51-0300\n" -"Last-Translator: Begina Felicysym \n" -"Language-Team: Begina Felicysym\n" +"POT-Creation-Date: 2015-08-15 18:37+0000\n" +"PO-Revision-Date: 2015-08-16 16:42+0200\n" +"Last-Translator: grzegorz \n" +"Language-Team: begina.felicysym@wp.eu\n" "Language: 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" +"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" -#: plperl.c:386 +#: plperl.c:404 msgid "If true, trusted and untrusted Perl code will be compiled in strict mode." -msgstr "Jeśli prawda, zaufanych i niezaufanych kod Perl zostanie skompilowany w trybie ścisłym." +msgstr "" +"Jeśli prawda, zaufanych i niezaufanych kod Perl zostanie skompilowany w " +"trybie ścisłym." -#: plperl.c:400 +#: plperl.c:418 msgid "Perl initialization code to execute when a Perl interpreter is initialized." msgstr "Kod inicjujący Perl do wykonania gdy inicjowany jest interpreter Perl." -#: plperl.c:422 +#: plperl.c:440 msgid "Perl initialization code to execute once when plperl is first used." msgstr "Kod inicjujący Perl do jednokrotnego wykonania gdy plperl jest użyty po raz pierwszy." -#: plperl.c:430 +#: plperl.c:448 msgid "Perl initialization code to execute once when plperlu is first used." msgstr "Kod inicjujący Perl do jednokrotnego wykonania gdy plperlu jest użyty po raz pierwszy." -#: plperl.c:647 plperl.c:821 plperl.c:826 plperl.c:930 plperl.c:941 -#: plperl.c:982 plperl.c:1003 plperl.c:1992 plperl.c:2087 plperl.c:2149 +#: plperl.c:645 +#, c-format +#| msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgid "cannot allocate multiple Perl interpreters on this platform" +msgstr "nie można przydzielić wielu interpreterów Perl na tej platformie" + +#: plperl.c:665 plperl.c:840 plperl.c:846 plperl.c:960 plperl.c:972 +#: plperl.c:1015 plperl.c:1036 plperl.c:2068 plperl.c:2175 plperl.c:2242 +#: plperl.c:2304 #, c-format msgid "%s" msgstr "%s" -#: plperl.c:648 +#: plperl.c:666 #, c-format msgid "while executing PostgreSQL::InServer::SPI::bootstrap" msgstr "podczas wykonania PostgreSQL::InServer::SPI::bootstrap" -#: plperl.c:822 +#: plperl.c:841 #, c-format msgid "while parsing Perl initialization" msgstr "podczas przetwarzania inicjacji Perl" -#: plperl.c:827 +#: plperl.c:847 #, c-format msgid "while running Perl initialization" msgstr "podczas wykonywania inicjacji Perl" -#: plperl.c:931 +#: plperl.c:961 #, c-format msgid "while executing PLC_TRUSTED" msgstr "podczas wykonywania PLC_TRUSTED" -#: plperl.c:942 +#: plperl.c:973 #, c-format msgid "while executing utf8fix" msgstr "podczas wykonywania utf8fix" -#: plperl.c:983 +#: plperl.c:1016 #, c-format msgid "while executing plperl.on_plperl_init" msgstr "podczas wykonania plperl.on_plperl_init" -#: plperl.c:1004 +#: plperl.c:1037 #, c-format msgid "while executing plperl.on_plperlu_init" msgstr "podczas wykonania plperl.on_plperlu_init" -#: plperl.c:1048 plperl.c:1648 +#: plperl.c:1081 plperl.c:1710 #, c-format msgid "Perl hash contains nonexistent column \"%s\"" msgstr "hasz Perl zawiera nieistniejącą kolumnę \"%s\"" -#: plperl.c:1133 +#: plperl.c:1166 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "liczba wymiarów tablicy (%d) przekracza maksimum (%d)" -#: plperl.c:1145 plperl.c:1162 +#: plperl.c:1178 plperl.c:1195 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "wielowymiarowe tablice muszą mieć wyrażenia tablicowe z pasującymi wymiarami" -#: plperl.c:1199 +#: plperl.c:1230 #, c-format msgid "cannot convert Perl array to non-array type %s" msgstr "nie można zmienić typu tablicowego Perl na typ nietablicowy %s" -#: plperl.c:1295 +#: plperl.c:1332 #, c-format msgid "cannot convert Perl hash to non-composite type %s" msgstr "nie można przekształcić Perlowego hasza na typ niezłożony %s" -#: plperl.c:1306 +#: plperl.c:1343 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "funkcja zwracająca rekord w wywołaniu, które nie akceptuje typów złożonych" -#: plperl.c:1321 +#: plperl.c:1358 #, c-format msgid "PL/Perl function must return reference to hash or array" msgstr "funkcja PL/Perl musi zwracać referencję do hasza lub tablicy" -#: plperl.c:1625 +#: plperl.c:1395 +#, c-format +#| msgid "no output function available for type %s" +msgid "lookup failed for type %s" +msgstr "nie dało się wyszukać typu %s" + +#: plperl.c:1687 #, c-format msgid "$_TD->{new} does not exist" msgstr "$_TD->{new} nie istnieje" -#: plperl.c:1629 +#: plperl.c:1691 #, c-format msgid "$_TD->{new} is not a hash reference" msgstr "$_TD->{new} nie jest referencją haszu" -#: plperl.c:1869 plperl.c:2568 +#: plperl.c:1944 plperl.c:2776 #, c-format msgid "PL/Perl functions cannot return type %s" msgstr "funkcje PL/Perl nie mogą zwracać wartości typu %s" -#: plperl.c:1882 plperl.c:2613 +#: plperl.c:1957 plperl.c:2821 #, c-format msgid "PL/Perl functions cannot accept type %s" msgstr "funkcje PL/Perl nie obsługują typu %s" -#: plperl.c:1996 +#: plperl.c:2073 #, c-format msgid "didn't get a CODE reference from compiling function \"%s\"" msgstr "nie udało się pobrać wskazania CODE z kompilowanej funkcji \"%s\"" -#: plperl.c:2194 +#: plperl.c:2163 +#, c-format +#| msgid "didn't get a CODE reference from compiling function \"%s\"" +msgid "didn't get a return item from function" +msgstr "nie odebrano zwracanego elementu z funkcji" + +#: plperl.c:2206 plperl.c:2272 +#, c-format +msgid "couldn't fetch $_TD" +msgstr "nie dało się pobrać $_TD" + +#: plperl.c:2230 plperl.c:2292 +#, c-format +#| msgid "didn't get a CODE reference from compiling function \"%s\"" +msgid "didn't get a return item from trigger function" +msgstr "nie odebrano zwracanego elementu z funkcji wyzwalacza" + +#: plperl.c:2349 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "funkcja zwracająca zbiór rekordów wywołana w kontekście, w którym nie jest to dopuszczalne" -#: plperl.c:2238 +#: plperl.c:2393 #, c-format msgid "set-returning PL/Perl function must return reference to array or use return_next" msgstr "funkcja PL/Perl zwracająca zbiór rekordów musi zwracać tablicę lub użyć return_next" -#: plperl.c:2352 +#: plperl.c:2507 #, c-format msgid "ignoring modified row in DELETE trigger" msgstr "ignorowanie modyfikacji wiersza w wyzwalaczy DELETE" -#: plperl.c:2360 +#: plperl.c:2515 #, c-format msgid "result of PL/Perl trigger function must be undef, \"SKIP\", or \"MODIFY\"" msgstr "funkcja wyzwalacza PL/Perl musi zwracać undef, \"SKIP\", lub \"MODIFY\"" -#: plperl.c:2498 plperl.c:2508 +#: plperl.c:2694 plperl.c:2704 #, c-format msgid "out of memory" msgstr "brak pamięci" -#: plperl.c:2560 +#: plperl.c:2768 #, c-format msgid "trigger functions can only be called as triggers" msgstr "procedury wyzwalaczy mogą być wywoływane jedynie przez wyzwalacze" -#: plperl.c:2933 +#: plperl.c:3144 #, c-format msgid "cannot use return_next in a non-SETOF function" msgstr "nie można używać return_next w funkcji nie SETOF" -#: plperl.c:2989 +#: plperl.c:3200 #, c-format msgid "SETOF-composite-returning PL/Perl function must call return_next with reference to hash" msgstr "funkcja PL/Perl zwracająca grupę wartości złożonych musi wywołać return_next z referencją haszu" -#: plperl.c:3700 +#: plperl.c:3934 #, c-format msgid "PL/Perl function \"%s\"" msgstr "funkcja PL/Perl \"%s\"" -#: plperl.c:3712 +#: plperl.c:3946 #, c-format msgid "compilation of PL/Perl function \"%s\"" msgstr "kompilacja funkcji PL/Perl \"%s\"" -#: plperl.c:3721 +#: plperl.c:3955 #, c-format msgid "PL/Perl anonymous code block" msgstr "anonimowy blok kodu PL/Perl" diff --git a/src/pl/plperl/po/pt_BR.po b/src/pl/plperl/po/pt_BR.po index b21445a4c77a4..a4e63fa03a607 100644 --- a/src/pl/plperl/po/pt_BR.po +++ b/src/pl/plperl/po/pt_BR.po @@ -1,13 +1,13 @@ # Brazilian Portuguese message translation file for plperl # Copyright (C) 2009 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Euler Taveira de Oliveira , 2009-2014. +# Euler Taveira de Oliveira , 2009-2015. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-05-17 16:25-0300\n" +"POT-Creation-Date: 2015-09-17 22:32-0300\n" "PO-Revision-Date: 2009-05-10 01:12-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -16,175 +16,200 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: plperl.c:401 +#: plperl.c:404 msgid "If true, trusted and untrusted Perl code will be compiled in strict mode." msgstr "Se verdadeiro, código Perl confiável e não-confiável será compilado em modo estrito." -#: plperl.c:415 +#: plperl.c:418 msgid "Perl initialization code to execute when a Perl interpreter is initialized." msgstr "Código de inicialização Perl executado quando um interpretador Perl for inicializado." -#: plperl.c:437 +#: plperl.c:440 msgid "Perl initialization code to execute once when plperl is first used." msgstr "Código de inicialização Perl executado quando plperl for utilizado pela primeira vez." -#: plperl.c:445 +#: plperl.c:448 msgid "Perl initialization code to execute once when plperlu is first used." msgstr "Código de inicialização Perl executado quando plperlu for utilizado pela primeira vez." -#: plperl.c:662 plperl.c:836 plperl.c:841 plperl.c:954 plperl.c:965 -#: plperl.c:1006 plperl.c:1027 plperl.c:2045 plperl.c:2140 plperl.c:2202 -#: plperl.c:2259 +#: plperl.c:645 +#, c-format +msgid "cannot allocate multiple Perl interpreters on this platform" +msgstr "não pode alocar múltiplos interpretadores Perl nessa plataforma" + +#: plperl.c:665 plperl.c:840 plperl.c:846 plperl.c:960 plperl.c:972 +#: plperl.c:1015 plperl.c:1036 plperl.c:2068 plperl.c:2175 plperl.c:2242 +#: plperl.c:2304 #, c-format msgid "%s" msgstr "%s" -#: plperl.c:663 +#: plperl.c:666 #, c-format msgid "while executing PostgreSQL::InServer::SPI::bootstrap" msgstr "ao executar PostgreSQL::InServer::SPI::bootstrap" -#: plperl.c:837 +#: plperl.c:841 #, c-format msgid "while parsing Perl initialization" msgstr "ao analisar código de inicialização Perl" -#: plperl.c:842 +#: plperl.c:847 #, c-format msgid "while running Perl initialization" msgstr "ao executar código de inicialização Perl" -#: plperl.c:955 +#: plperl.c:961 #, c-format msgid "while executing PLC_TRUSTED" msgstr "ao executar PLC_TRUSTED" -#: plperl.c:966 +#: plperl.c:973 #, c-format msgid "while executing utf8fix" msgstr "ao executar utf8fix" -#: plperl.c:1007 +#: plperl.c:1016 #, c-format msgid "while executing plperl.on_plperl_init" msgstr "ao executar plperl.on_plperl_init" -#: plperl.c:1028 +#: plperl.c:1037 #, c-format msgid "while executing plperl.on_plperlu_init" msgstr "ao executar plperl.on_plperlu_init" -#: plperl.c:1072 plperl.c:1689 +#: plperl.c:1081 plperl.c:1710 #, c-format msgid "Perl hash contains nonexistent column \"%s\"" msgstr "hash Perl contém coluna inexistente \"%s\"" -#: plperl.c:1157 +#: plperl.c:1166 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "número de dimensões da matriz (%d) excede o máximo permitido (%d)" -#: plperl.c:1169 plperl.c:1186 +#: plperl.c:1178 plperl.c:1195 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "matrizes multidimensionais devem ter expressões de matriz com dimensões correspondentes" -#: plperl.c:1223 +#: plperl.c:1230 #, c-format msgid "cannot convert Perl array to non-array type %s" msgstr "não pode converter array Perl para tipo que não é array %s" -#: plperl.c:1319 +#: plperl.c:1332 #, c-format msgid "cannot convert Perl hash to non-composite type %s" msgstr "não pode converter hash Perl para tipo não-composto %s" -#: plperl.c:1330 +#: plperl.c:1343 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "função que retorna record foi chamada em um contexto que não pode aceitar tipo record" -#: plperl.c:1345 +#: plperl.c:1358 #, c-format msgid "PL/Perl function must return reference to hash or array" msgstr "função PL/Perl deve retornar referência a um hash ou uma matriz" -#: plperl.c:1666 +#: plperl.c:1395 +#, c-format +msgid "lookup failed for type %s" +msgstr "falhou ao pesquisar por tipo %s" + +#: plperl.c:1687 #, c-format msgid "$_TD->{new} does not exist" msgstr "$_TD->{new} não existe" -#: plperl.c:1670 +#: plperl.c:1691 #, c-format msgid "$_TD->{new} is not a hash reference" msgstr "$_TD->{new} não é uma referência hash" -#: plperl.c:1921 plperl.c:2718 +#: plperl.c:1944 plperl.c:2776 #, c-format msgid "PL/Perl functions cannot return type %s" msgstr "funções PL/Perl não podem retornar tipo %s" -#: plperl.c:1934 plperl.c:2763 +#: plperl.c:1957 plperl.c:2821 #, c-format msgid "PL/Perl functions cannot accept type %s" msgstr "funções PL/Perl não podem aceitar tipo %s" -#: plperl.c:2049 +#: plperl.c:2073 #, c-format msgid "didn't get a CODE reference from compiling function \"%s\"" msgstr "não obteve uma referência CODE da compilação da função \"%s\"" -#: plperl.c:2304 +#: plperl.c:2163 +#, c-format +msgid "didn't get a return item from function" +msgstr "não obteve um item de retorno da função" + +#: plperl.c:2206 plperl.c:2272 +#, c-format +msgid "couldn't fetch $_TD" +msgstr "não pôde obter $_TD" + +#: plperl.c:2230 plperl.c:2292 +#, c-format +msgid "didn't get a return item from trigger function" +msgstr "não obteve um item de retorno da função de gatilho" + +#: plperl.c:2349 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "função que tem argumento do tipo conjunto foi chamada em um contexto que não pode aceitar um conjunto" -#: plperl.c:2348 +#: plperl.c:2393 #, c-format msgid "set-returning PL/Perl function must return reference to array or use return_next" msgstr "funçao PL/Perl que retorna conjunto deve retornar referência para matriz ou usar return_next" -#: plperl.c:2462 +#: plperl.c:2507 #, c-format msgid "ignoring modified row in DELETE trigger" msgstr "ignorando registro modificado em gatilho DELETE" -#: plperl.c:2470 +#: plperl.c:2515 #, c-format msgid "result of PL/Perl trigger function must be undef, \"SKIP\", or \"MODIFY\"" msgstr "resultado da função de gatilho PL/Perl deve ser undef, \"SKIP\" ou \"MODIFY\"" -#: plperl.c:2647 plperl.c:2657 +#: plperl.c:2694 plperl.c:2704 #, c-format msgid "out of memory" msgstr "sem memória" -#: plperl.c:2710 +#: plperl.c:2768 #, c-format msgid "trigger functions can only be called as triggers" msgstr "funções de gatilho só podem ser chamadas como gatilhos" -#: plperl.c:3083 +#: plperl.c:3144 #, c-format msgid "cannot use return_next in a non-SETOF function" msgstr "não pode utilizar return_next em uma função que não retorna conjunto" -#: plperl.c:3139 +#: plperl.c:3200 #, c-format msgid "SETOF-composite-returning PL/Perl function must call return_next with reference to hash" msgstr "função PL/Perl que retorna um conjunto de tipo composto deve chamar return_next com referência a um hash" -#: plperl.c:3873 +#: plperl.c:3934 #, c-format msgid "PL/Perl function \"%s\"" msgstr "função PL/Perl \"%s\"" -#: plperl.c:3885 +#: plperl.c:3946 #, c-format msgid "compilation of PL/Perl function \"%s\"" msgstr "compilação da função PL/Perl \"%s\"" -#: plperl.c:3894 +#: plperl.c:3955 #, c-format msgid "PL/Perl anonymous code block" msgstr "bloco de código PL/Perl anônimo" diff --git a/src/pl/plperl/sql/plperl_elog.sql b/src/pl/plperl/sql/plperl_elog.sql index 032fd8b8ba74a..9ea1350069b86 100644 --- a/src/pl/plperl/sql/plperl_elog.sql +++ b/src/pl/plperl/sql/plperl_elog.sql @@ -76,3 +76,18 @@ return $a + $b; $$; select indirect_die_caller(); + +-- Test non-ASCII error messages +-- +-- Note: this test case is known to fail if the database encoding is +-- EUC_CN, EUC_JP, EUC_KR, or EUC_TW, for lack of any equivalent to +-- U+00A0 (no-break space) in those encodings. However, testing with +-- plain ASCII data would be rather useless, so we must live with that. + +SET client_encoding TO UTF8; + +create or replace function error_with_nbsp() returns void language plperl as $$ + elog(ERROR, "this message contains a no-break space"); +$$; + +select error_with_nbsp(); diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 79dd6a22fcee4..fe84040097ae7 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -53,21 +53,6 @@ typedef struct bool *freevals; /* which arguments are pfree-able */ } PreparedParamsData; -typedef struct -{ - /* NB: we assume this struct contains no padding bytes */ - Oid srctype; /* source type for cast */ - Oid dsttype; /* destination type for cast */ - int32 srctypmod; /* source typmod for cast */ - int32 dsttypmod; /* destination typmod for cast */ -} plpgsql_CastHashKey; - -typedef struct -{ - plpgsql_CastHashKey key; /* hash key --- MUST BE FIRST */ - ExprState *cast_exprstate; /* cast expression, or NULL if no-op cast */ -} plpgsql_CastHashEntry; - /* * All plpgsql function executions within a single transaction share the same * executor EState for evaluating "simple" expressions. Each function call @@ -104,6 +89,42 @@ typedef struct SimpleEcontextStackEntry static EState *shared_simple_eval_estate = NULL; static SimpleEcontextStackEntry *simple_econtext_stack = NULL; +/* + * We use a session-wide hash table for caching cast information. + * + * Once built, the compiled expression trees (cast_expr fields) survive for + * the life of the session. At some point it might be worth invalidating + * those after pg_cast changes, but for the moment we don't bother. + * + * The evaluation state trees (cast_exprstate) are managed in the same way as + * simple expressions (i.e., we assume cast expressions are always simple). + * + * As with simple expressions, DO blocks don't use the shared hash table but + * must have their own. This isn't ideal, but we don't want to deal with + * multiple simple_eval_estates within a DO block. + */ +typedef struct /* lookup key for cast info */ +{ + /* NB: we assume this struct contains no padding bytes */ + Oid srctype; /* source type for cast */ + Oid dsttype; /* destination type for cast */ + int32 srctypmod; /* source typmod for cast */ + int32 dsttypmod; /* destination typmod for cast */ +} plpgsql_CastHashKey; + +typedef struct /* cast_hash table entry */ +{ + plpgsql_CastHashKey key; /* hash key --- MUST BE FIRST */ + Expr *cast_expr; /* cast expression, or NULL if no-op cast */ + /* The ExprState tree is valid only when cast_lxid matches current LXID */ + ExprState *cast_exprstate; /* expression's eval tree */ + bool cast_in_use; /* true while we're executing eval tree */ + LocalTransactionId cast_lxid; +} plpgsql_CastHashEntry; + +static MemoryContext shared_cast_context = NULL; +static HTAB *shared_cast_hash = NULL; + /************************************************************ * Local function forward declarations ************************************************************/ @@ -236,8 +257,9 @@ static Datum exec_cast_value(PLpgSQL_execstate *estate, Datum value, bool *isnull, Oid valtype, int32 valtypmod, Oid reqtype, int32 reqtypmod); -static ExprState *get_cast_expression(PLpgSQL_execstate *estate, - Oid srctype, int32 srctypmod, Oid dsttype, int32 dsttypmod); +static plpgsql_CastHashEntry *get_cast_hashentry(PLpgSQL_execstate *estate, + Oid srctype, int32 srctypmod, + Oid dsttype, int32 dsttypmod); static void exec_init_tuple_store(PLpgSQL_execstate *estate); static void exec_set_found(PLpgSQL_execstate *estate, bool state); static void plpgsql_create_econtext(PLpgSQL_execstate *estate); @@ -265,7 +287,9 @@ static char *format_preparedparamsdata(PLpgSQL_execstate *estate, * difference that this code is aware of is that for a DO block, we want * to use a private simple_eval_estate, which is created and passed in by * the caller. For regular functions, pass NULL, which implies using - * shared_simple_eval_estate. + * shared_simple_eval_estate. (When using a private simple_eval_estate, + * we must also use a private cast hashtable, but that's taken care of + * within plpgsql_estate_setup.) * ---------- */ Datum @@ -3268,6 +3292,8 @@ plpgsql_estate_setup(PLpgSQL_execstate *estate, ReturnSetInfo *rsi, EState *simple_eval_estate) { + HASHCTL ctl; + /* this link will be restored at exit from plpgsql_call_handler */ func->cur_estate = estate; @@ -3315,11 +3341,44 @@ plpgsql_estate_setup(PLpgSQL_execstate *estate, estate->paramLI->parserSetupArg = NULL; /* filled during use */ estate->paramLI->numParams = estate->ndatums; - /* set up for use of appropriate simple-expression EState */ + /* set up for use of appropriate simple-expression EState and cast hash */ if (simple_eval_estate) + { estate->simple_eval_estate = simple_eval_estate; + /* Private cast hash just lives in function's main context */ + memset(&ctl, 0, sizeof(ctl)); + ctl.keysize = sizeof(plpgsql_CastHashKey); + ctl.entrysize = sizeof(plpgsql_CastHashEntry); + ctl.hcxt = CurrentMemoryContext; + estate->cast_hash = hash_create("PLpgSQL private cast cache", + 16, /* start small and extend */ + &ctl, + HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); + estate->cast_hash_context = CurrentMemoryContext; + } else + { estate->simple_eval_estate = shared_simple_eval_estate; + /* Create the session-wide cast-info hash table if we didn't already */ + if (shared_cast_hash == NULL) + { + shared_cast_context = AllocSetContextCreate(TopMemoryContext, + "PLpgSQL cast info", + ALLOCSET_DEFAULT_MINSIZE, + ALLOCSET_DEFAULT_INITSIZE, + ALLOCSET_DEFAULT_MAXSIZE); + memset(&ctl, 0, sizeof(ctl)); + ctl.keysize = sizeof(plpgsql_CastHashKey); + ctl.entrysize = sizeof(plpgsql_CastHashEntry); + ctl.hcxt = shared_cast_context; + shared_cast_hash = hash_create("PLpgSQL cast cache", + 16, /* start small and extend */ + &ctl, + HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); + } + estate->cast_hash = shared_cast_hash; + estate->cast_hash_context = shared_cast_context; + } estate->eval_tuptable = NULL; estate->eval_processed = 0; @@ -5946,12 +6005,12 @@ exec_cast_value(PLpgSQL_execstate *estate, if (valtype != reqtype || (valtypmod != reqtypmod && reqtypmod != -1)) { - ExprState *cast_expr; + plpgsql_CastHashEntry *cast_entry; - cast_expr = get_cast_expression(estate, + cast_entry = get_cast_hashentry(estate, valtype, valtypmod, reqtype, reqtypmod); - if (cast_expr) + if (cast_entry) { ExprContext *econtext = estate->eval_econtext; MemoryContext oldcontext; @@ -5961,7 +6020,12 @@ exec_cast_value(PLpgSQL_execstate *estate, econtext->caseValue_datum = value; econtext->caseValue_isNull = *isnull; - value = ExecEvalExpr(cast_expr, econtext, isnull, NULL); + cast_entry->cast_in_use = true; + + value = ExecEvalExpr(cast_entry->cast_exprstate, econtext, + isnull, NULL); + + cast_entry->cast_in_use = false; MemoryContextSwitchTo(oldcontext); } @@ -5971,152 +6035,161 @@ exec_cast_value(PLpgSQL_execstate *estate, } /* ---------- - * get_cast_expression Look up how to perform a type cast - * - * Returns an expression evaluation tree based on a CaseTestExpr input, - * or NULL if the cast is a mere no-op relabeling. + * get_cast_hashentry Look up how to perform a type cast * - * We cache the results of the lookup in a per-function hash table. - * It's tempting to consider using a session-wide hash table instead, - * but that introduces some corner-case questions that probably aren't - * worth dealing with; in particular that re-entrant use of an evaluation - * tree might occur. That would also set in stone the assumption that - * collation isn't important to a cast function. + * Returns a plpgsql_CastHashEntry if an expression has to be evaluated, + * or NULL if the cast is a mere no-op relabeling. If there's work to be + * done, the cast_exprstate field contains an expression evaluation tree + * based on a CaseTestExpr input, and the cast_in_use field should be set + * TRUE while executing it. * ---------- */ -static ExprState * -get_cast_expression(PLpgSQL_execstate *estate, - Oid srctype, int32 srctypmod, Oid dsttype, int32 dsttypmod) +static plpgsql_CastHashEntry * +get_cast_hashentry(PLpgSQL_execstate *estate, + Oid srctype, int32 srctypmod, + Oid dsttype, int32 dsttypmod) { - HTAB *cast_hash = estate->func->cast_hash; plpgsql_CastHashKey cast_key; plpgsql_CastHashEntry *cast_entry; bool found; - CaseTestExpr *placeholder; - Node *cast_expr; - ExprState *cast_exprstate; + LocalTransactionId curlxid; MemoryContext oldcontext; - /* Create the cast-info hash table if we didn't already */ - if (cast_hash == NULL) - { - HASHCTL ctl; - - memset(&ctl, 0, sizeof(ctl)); - ctl.keysize = sizeof(plpgsql_CastHashKey); - ctl.entrysize = sizeof(plpgsql_CastHashEntry); - ctl.hcxt = estate->func->fn_cxt; - cast_hash = hash_create("PLpgSQL cast cache", - 16, /* start small and extend */ - &ctl, - HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); - estate->func->cast_hash = cast_hash; - } - /* Look for existing entry */ cast_key.srctype = srctype; cast_key.dsttype = dsttype; cast_key.srctypmod = srctypmod; cast_key.dsttypmod = dsttypmod; - cast_entry = (plpgsql_CastHashEntry *) hash_search(cast_hash, + cast_entry = (plpgsql_CastHashEntry *) hash_search(estate->cast_hash, (void *) &cast_key, HASH_FIND, NULL); - if (cast_entry) - return cast_entry->cast_exprstate; - /* Construct expression tree for coercion in function's context */ - oldcontext = MemoryContextSwitchTo(estate->func->fn_cxt); + if (cast_entry == NULL) + { + /* We've not looked up this coercion before */ + Node *cast_expr; + CaseTestExpr *placeholder; - /* - * We use a CaseTestExpr as the base of the coercion tree, since it's very - * cheap to insert the source value for that. - */ - placeholder = makeNode(CaseTestExpr); - placeholder->typeId = srctype; - placeholder->typeMod = srctypmod; - placeholder->collation = get_typcollation(srctype); - if (OidIsValid(estate->func->fn_input_collation) && - OidIsValid(placeholder->collation)) - placeholder->collation = estate->func->fn_input_collation; + /* + * Since we could easily fail (no such coercion), construct a + * temporary coercion expression tree in a short-lived context, then + * if successful copy it to cast_hash_context. + */ + oldcontext = MemoryContextSwitchTo(estate->eval_econtext->ecxt_per_tuple_memory); - /* - * Apply coercion. We use ASSIGNMENT coercion because that's the closest - * match to plpgsql's historical behavior; in particular, EXPLICIT - * coercion would allow silent truncation to a destination - * varchar/bpchar's length, which we do not want. - * - * If source type is UNKNOWN, coerce_to_target_type will fail (it only - * expects to see that for Const input nodes), so don't call it; we'll - * apply CoerceViaIO instead. Likewise, it doesn't currently work for - * coercing RECORD to some other type, so skip for that too. - */ - if (srctype == UNKNOWNOID || srctype == RECORDOID) - cast_expr = NULL; - else - cast_expr = coerce_to_target_type(NULL, - (Node *) placeholder, srctype, - dsttype, dsttypmod, - COERCION_ASSIGNMENT, - COERCE_IMPLICIT_CAST, - -1); + /* + * We use a CaseTestExpr as the base of the coercion tree, since it's + * very cheap to insert the source value for that. + */ + placeholder = makeNode(CaseTestExpr); + placeholder->typeId = srctype; + placeholder->typeMod = srctypmod; + placeholder->collation = get_typcollation(srctype); - /* - * If there's no cast path according to the parser, fall back to using an - * I/O coercion; this is semantically dubious but matches plpgsql's - * historical behavior. We would need something of the sort for UNKNOWN - * literals in any case. - */ - if (cast_expr == NULL) - { - CoerceViaIO *iocoerce = makeNode(CoerceViaIO); - - iocoerce->arg = (Expr *) placeholder; - iocoerce->resulttype = dsttype; - iocoerce->resultcollid = InvalidOid; - iocoerce->coerceformat = COERCE_IMPLICIT_CAST; - iocoerce->location = -1; - cast_expr = (Node *) iocoerce; - if (dsttypmod != -1) + /* + * Apply coercion. We use ASSIGNMENT coercion because that's the + * closest match to plpgsql's historical behavior; in particular, + * EXPLICIT coercion would allow silent truncation to a destination + * varchar/bpchar's length, which we do not want. + * + * If source type is UNKNOWN, coerce_to_target_type will fail (it only + * expects to see that for Const input nodes), so don't call it; we'll + * apply CoerceViaIO instead. Likewise, it doesn't currently work for + * coercing RECORD to some other type, so skip for that too. + */ + if (srctype == UNKNOWNOID || srctype == RECORDOID) + cast_expr = NULL; + else cast_expr = coerce_to_target_type(NULL, - cast_expr, dsttype, + (Node *) placeholder, srctype, dsttype, dsttypmod, COERCION_ASSIGNMENT, COERCE_IMPLICIT_CAST, -1); - } - /* Note: we don't bother labeling the expression tree with collation */ + /* + * If there's no cast path according to the parser, fall back to using + * an I/O coercion; this is semantically dubious but matches plpgsql's + * historical behavior. We would need something of the sort for + * UNKNOWN literals in any case. + */ + if (cast_expr == NULL) + { + CoerceViaIO *iocoerce = makeNode(CoerceViaIO); + + iocoerce->arg = (Expr *) placeholder; + iocoerce->resulttype = dsttype; + iocoerce->resultcollid = InvalidOid; + iocoerce->coerceformat = COERCE_IMPLICIT_CAST; + iocoerce->location = -1; + cast_expr = (Node *) iocoerce; + if (dsttypmod != -1) + cast_expr = coerce_to_target_type(NULL, + cast_expr, dsttype, + dsttype, dsttypmod, + COERCION_ASSIGNMENT, + COERCE_IMPLICIT_CAST, + -1); + } + + /* Note: we don't bother labeling the expression tree with collation */ - /* Detect whether we have a no-op (RelabelType) coercion */ - if (IsA(cast_expr, RelabelType) && - ((RelabelType *) cast_expr)->arg == (Expr *) placeholder) - cast_expr = NULL; + /* Detect whether we have a no-op (RelabelType) coercion */ + if (IsA(cast_expr, RelabelType) && + ((RelabelType *) cast_expr)->arg == (Expr *) placeholder) + cast_expr = NULL; - if (cast_expr) - { - /* ExecInitExpr assumes we've planned the expression */ - cast_expr = (Node *) expression_planner((Expr *) cast_expr); - /* Create an expression eval state tree for it */ - cast_exprstate = ExecInitExpr((Expr *) cast_expr, NULL); + if (cast_expr) + { + /* ExecInitExpr assumes we've planned the expression */ + cast_expr = (Node *) expression_planner((Expr *) cast_expr); + + /* Now copy the tree into cast_hash_context */ + MemoryContextSwitchTo(estate->cast_hash_context); + + cast_expr = copyObject(cast_expr); + } + + MemoryContextSwitchTo(oldcontext); + + /* Now we can fill in a hashtable entry. */ + cast_entry = (plpgsql_CastHashEntry *) hash_search(estate->cast_hash, + (void *) &cast_key, + HASH_ENTER, &found); + Assert(!found); /* wasn't there a moment ago */ + cast_entry->cast_expr = (Expr *) cast_expr; + cast_entry->cast_exprstate = NULL; + cast_entry->cast_in_use = false; + cast_entry->cast_lxid = InvalidLocalTransactionId; } - else - cast_exprstate = NULL; - MemoryContextSwitchTo(oldcontext); + /* Done if we have determined that this is a no-op cast. */ + if (cast_entry->cast_expr == NULL) + return NULL; /* - * Now fill in a hashtable entry. If we fail anywhere up to/including - * this step, we've only leaked some memory in the function context, which - * isn't great but isn't disastrous either. - */ - cast_entry = (plpgsql_CastHashEntry *) hash_search(cast_hash, - (void *) &cast_key, - HASH_ENTER, &found); - Assert(!found); /* wasn't there a moment ago */ - - cast_entry->cast_exprstate = cast_exprstate; + * Prepare the expression for execution, if it's not been done already in + * the current transaction; also, if it's marked busy in the current + * transaction, abandon that expression tree and build a new one, so as to + * avoid potential problems with recursive cast expressions and failed + * executions. (We will leak some memory intra-transaction if that + * happens a lot, but we don't expect it to.) It's okay to update the + * hash table with the new tree because all plpgsql functions within a + * given transaction share the same simple_eval_estate. (Well, regular + * functions do; DO blocks have private simple_eval_estates, and private + * cast hash tables to go with them.) + */ + curlxid = MyProc->lxid; + if (cast_entry->cast_lxid != curlxid || cast_entry->cast_in_use) + { + oldcontext = MemoryContextSwitchTo(estate->simple_eval_estate->es_query_cxt); + cast_entry->cast_exprstate = ExecInitExpr(cast_entry->cast_expr, NULL); + cast_entry->cast_in_use = false; + cast_entry->cast_lxid = curlxid; + MemoryContextSwitchTo(oldcontext); + } - return cast_exprstate; + return cast_entry; } /* ---------- diff --git a/src/pl/plpgsql/src/pl_funcs.c b/src/pl/plpgsql/src/pl_funcs.c index 7b26970f46848..900ba3c13b68a 100644 --- a/src/pl/plpgsql/src/pl_funcs.c +++ b/src/pl/plpgsql/src/pl_funcs.c @@ -235,7 +235,7 @@ plpgsql_stmt_typename(PLpgSQL_stmt *stmt) case PLPGSQL_STMT_FOREACH_A: return _("FOREACH over array"); case PLPGSQL_STMT_EXIT: - return "EXIT"; + return ((PLpgSQL_stmt_exit *) stmt)->is_exit ? "EXIT" : "CONTINUE"; case PLPGSQL_STMT_RETURN: return "RETURN"; case PLPGSQL_STMT_RETURN_NEXT: @@ -249,15 +249,16 @@ plpgsql_stmt_typename(PLpgSQL_stmt *stmt) case PLPGSQL_STMT_EXECSQL: return _("SQL statement"); case PLPGSQL_STMT_DYNEXECUTE: - return _("EXECUTE statement"); + return "EXECUTE"; case PLPGSQL_STMT_DYNFORS: return _("FOR over EXECUTE statement"); case PLPGSQL_STMT_GETDIAG: - return "GET DIAGNOSTICS"; + return ((PLpgSQL_stmt_getdiag *) stmt)->is_stacked ? + "GET STACKED DIAGNOSTICS" : "GET DIAGNOSTICS"; case PLPGSQL_STMT_OPEN: return "OPEN"; case PLPGSQL_STMT_FETCH: - return "FETCH"; + return ((PLpgSQL_stmt_fetch *) stmt)->is_move ? "MOVE" : "FETCH"; case PLPGSQL_STMT_CLOSE: return "CLOSE"; case PLPGSQL_STMT_PERFORM: diff --git a/src/pl/plpgsql/src/plpgsql.h b/src/pl/plpgsql/src/plpgsql.h index 93c2504641fbd..bc70e1b1f5406 100644 --- a/src/pl/plpgsql/src/plpgsql.h +++ b/src/pl/plpgsql/src/plpgsql.h @@ -22,7 +22,6 @@ #include "commands/event_trigger.h" #include "commands/trigger.h" #include "executor/spi.h" -#include "utils/hsearch.h" /********************************************************************** * Definitions @@ -756,9 +755,6 @@ typedef struct PLpgSQL_function PLpgSQL_datum **datums; PLpgSQL_stmt_block *action; - /* table for performing casts needed in this function */ - HTAB *cast_hash; - /* these fields change when the function is used */ struct PLpgSQL_execstate *cur_estate; unsigned long use_count; @@ -800,6 +796,10 @@ typedef struct PLpgSQL_execstate /* EState to use for "simple" expression evaluation */ EState *simple_eval_estate; + /* Lookup table to use for executing type casts */ + HTAB *cast_hash; + MemoryContext cast_hash_context; + /* temporary state for results from evaluation of query or expr */ SPITupleTable *eval_tuptable; uint32 eval_processed; diff --git a/src/pl/plpgsql/src/po/de.po b/src/pl/plpgsql/src/po/de.po index c09bd5f886ab6..9140f6c35fb48 100644 --- a/src/pl/plpgsql/src/po/de.po +++ b/src/pl/plpgsql/src/po/de.po @@ -1,16 +1,16 @@ # German message translation file for plpgsql -# Copyright (C) 2009 - 2014 PostgreSQL Global Development Group +# Copyright (C) 2009 - 2015 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Peter Eisentraut , 2009 - 2014. +# Peter Eisentraut , 2009 - 2015. # # Use these quotes: „%s“ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-08-23 03:37+0000\n" -"PO-Revision-Date: 2014-08-23 00:30-0400\n" +"POT-Creation-Date: 2015-09-22 15:07+0000\n" +"PO-Revision-Date: 2015-09-22 20:46-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -19,7 +19,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: pl_comp.c:436 pl_handler.c:438 +#: pl_comp.c:436 pl_handler.c:448 #, c-format msgid "PL/pgSQL functions cannot accept type %s" msgstr "PL/pgSQL-Funktionen können Typ %s nicht annehmen" @@ -34,446 +34,447 @@ msgstr "konnte den tatsächlichen Rückgabetyp der polymorphischen Funktion „% msgid "trigger functions can only be called as triggers" msgstr "Triggerfunktionen können nur als Trigger aufgerufen werden" -#: pl_comp.c:551 pl_handler.c:423 +#: pl_comp.c:551 pl_handler.c:433 #, c-format msgid "PL/pgSQL functions cannot return type %s" msgstr "PL/pgSQL-Funktionen können keinen Rückgabetyp %s haben" -#: pl_comp.c:594 +#: pl_comp.c:592 #, c-format msgid "trigger functions cannot have declared arguments" msgstr "Triggerfunktionen können keine deklarierten Argumente haben" -#: pl_comp.c:595 +#: pl_comp.c:593 #, c-format msgid "The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV instead." msgstr "Auf die Argumente des Triggers kann stattdessen über TG_NARGS und TG_ARGV zugegriffen werden." -#: pl_comp.c:697 +#: pl_comp.c:695 #, c-format msgid "event trigger functions cannot have declared arguments" msgstr "Ereignistriggerfunktionen können keine deklarierten Argumente haben" -#: pl_comp.c:962 +#: pl_comp.c:957 #, c-format msgid "compilation of PL/pgSQL function \"%s\" near line %d" msgstr "Kompilierung der PL/pgSQL-Funktion „%s“ nahe Zeile %d" -#: pl_comp.c:985 +#: pl_comp.c:980 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "Parametername „%s“ mehrmals angegeben" -#: pl_comp.c:1095 +#: pl_comp.c:1090 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "Spaltenverweis „%s“ ist nicht eindeutig" -#: pl_comp.c:1097 +#: pl_comp.c:1092 #, c-format msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Er könnte sich entweder auf eine PL/pgSQL-Variable oder eine Tabellenspalte beziehen." -#: pl_comp.c:1277 pl_comp.c:1305 pl_exec.c:4179 pl_exec.c:4524 pl_exec.c:4609 -#: pl_exec.c:4700 +#: pl_comp.c:1272 pl_comp.c:1300 pl_exec.c:4447 pl_exec.c:4795 pl_exec.c:4880 +#: pl_exec.c:4971 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "Record „%s“ hat kein Feld „%s“" -#: pl_comp.c:1836 +#: pl_comp.c:1831 #, c-format msgid "relation \"%s\" does not exist" msgstr "Relation „%s“ existiert nicht" -#: pl_comp.c:1945 +#: pl_comp.c:1940 #, c-format msgid "variable \"%s\" has pseudo-type %s" msgstr "Variable „%s“ hat Pseudotyp %s" -#: pl_comp.c:2011 +#: pl_comp.c:2006 #, c-format msgid "relation \"%s\" is not a table" msgstr "Relation „%s“ ist keine Tabelle" -#: pl_comp.c:2171 +#: pl_comp.c:2166 #, c-format msgid "type \"%s\" is only a shell" msgstr "Typ „%s“ ist nur eine Hülle" -#: pl_comp.c:2245 pl_comp.c:2298 +#: pl_comp.c:2255 pl_comp.c:2308 #, c-format msgid "unrecognized exception condition \"%s\"" msgstr "unbekannte Ausnahmebedingung „%s“" -#: pl_comp.c:2456 +#: pl_comp.c:2466 #, c-format msgid "could not determine actual argument type for polymorphic function \"%s\"" msgstr "konnte den tatsächlichen Argumenttyp der polymorphischen Funktion „%s“ nicht ermitteln" -#: pl_exec.c:277 pl_exec.c:537 pl_exec.c:816 +#: pl_exec.c:321 pl_exec.c:614 pl_exec.c:893 msgid "during initialization of execution state" msgstr "bei der Initialisierung des Ausführungszustandes" -#: pl_exec.c:284 +#: pl_exec.c:328 msgid "while storing call arguments into local variables" msgstr "beim Abspeichern der Aufrufargumente in lokale Variablen" -#: pl_exec.c:326 pl_exec.c:694 +#: pl_exec.c:408 pl_exec.c:771 msgid "during function entry" msgstr "beim Eintritts in die Funktion" -#: pl_exec.c:357 pl_exec.c:725 pl_exec.c:857 +#: pl_exec.c:439 pl_exec.c:802 pl_exec.c:934 #, c-format msgid "CONTINUE cannot be used outside a loop" msgstr "CONTINUE kann nicht außerhalb einer Schleife verwendet werden" -#: pl_exec.c:361 +#: pl_exec.c:443 #, c-format msgid "control reached end of function without RETURN" msgstr "Kontrollfluss erreichte das Ende der Funktion ohne RETURN" -#: pl_exec.c:368 +#: pl_exec.c:450 msgid "while casting return value to function's return type" msgstr "bei der Umwandlung des Rückgabewerts in den Rückgabetyp der Funktion" -#: pl_exec.c:381 pl_exec.c:2843 +#: pl_exec.c:463 pl_exec.c:2987 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "Funktion mit Mengenergebnis in einem Zusammenhang aufgerufen, der keine Mengenergebnisse verarbeiten kann" -#: pl_exec.c:419 pl_exec.c:2686 +#: pl_exec.c:501 pl_exec.c:2829 msgid "returned record type does not match expected record type" msgstr "zurückgegebener Record-Typ stimmt nicht mit erwartetem Record-Typ überein" -#: pl_exec.c:479 pl_exec.c:733 pl_exec.c:865 +#: pl_exec.c:556 pl_exec.c:810 pl_exec.c:942 msgid "during function exit" msgstr "beim Verlassen der Funktion" -#: pl_exec.c:729 pl_exec.c:861 +#: pl_exec.c:806 pl_exec.c:938 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "Kontrollfluss erreichte das Ende der Triggerprozedur ohne RETURN" -#: pl_exec.c:738 +#: pl_exec.c:815 #, c-format msgid "trigger procedure cannot return a set" msgstr "Triggerprozedur kann keine Ergebnismenge zurückgeben" -#: pl_exec.c:760 +#: pl_exec.c:837 msgid "returned row structure does not match the structure of the triggering table" msgstr "zurückgegebene Zeilenstruktur stimmt nicht mit der Struktur der Tabelle, die den Trigger ausgelöst hat, überein" -#: pl_exec.c:916 +#. translator: last %s is a phrase such as "during statement block +#. local variable initialization" +#. +#: pl_exec.c:993 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "PL/pgSQL-Funktion %s Zeile %d %s" -#: pl_exec.c:927 +#. translator: last %s is a phrase such as "while storing call +#. arguments into local variables" +#. +#: pl_exec.c:1004 #, c-format msgid "PL/pgSQL function %s %s" msgstr "PL/pgSQL-Funktion %s %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:935 +#: pl_exec.c:1012 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "PL/pgSQL-Funktion %s Zeile %d bei %s" -#: pl_exec.c:941 +#: pl_exec.c:1018 #, c-format msgid "PL/pgSQL function %s" msgstr "PL/pgSQL-Funktion %s" -#: pl_exec.c:1050 +#: pl_exec.c:1129 msgid "during statement block local variable initialization" msgstr "bei der Initialisierung der lokalen Variablen des Anweisungsblocks" -#: pl_exec.c:1092 +#: pl_exec.c:1169 #, c-format msgid "variable \"%s\" declared NOT NULL cannot default to NULL" msgstr "Variable „%s“ ist als NOT NULL deklariert und kann daher nicht den Ausgangswert NULL haben" -#: pl_exec.c:1142 +#: pl_exec.c:1219 msgid "during statement block entry" msgstr "beim Eintreten in den Anweisungsblock" -#: pl_exec.c:1163 +#: pl_exec.c:1240 msgid "during statement block exit" msgstr "beim Verlassen des Anweisungsblocks" -#: pl_exec.c:1206 +#: pl_exec.c:1283 msgid "during exception cleanup" msgstr "beim Aufräumen der Ausnahme" -#: pl_exec.c:1559 +#: pl_exec.c:1634 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "GET STACKED DIAGNOSTICS kann nicht außerhalb einer Ausnahmebehandlung verwendet werden" -#: pl_exec.c:1760 +#: pl_exec.c:1838 #, c-format msgid "case not found" msgstr "Fall nicht gefunden" -#: pl_exec.c:1761 +#: pl_exec.c:1839 #, c-format msgid "CASE statement is missing ELSE part." msgstr "Der CASE-Anweisung fehlt ein ELSE-Teil." -#: pl_exec.c:1913 +#: pl_exec.c:1993 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "Untergrenze einer FOR-Schleife darf nicht NULL sein" -#: pl_exec.c:1928 +#: pl_exec.c:2009 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "Obergrenze einer FOR-Schleife darf nicht NULL sein" -#: pl_exec.c:1945 +#: pl_exec.c:2027 #, c-format msgid "BY value of FOR loop cannot be null" msgstr "BY-Wert einer FOR-Schleife darf nicht NULL sein" -#: pl_exec.c:1951 +#: pl_exec.c:2033 #, c-format msgid "BY value of FOR loop must be greater than zero" msgstr "BY-Wert einer FOR-Schleife muss größer als null sein" -#: pl_exec.c:2121 pl_exec.c:3730 +#: pl_exec.c:2203 pl_exec.c:3963 #, c-format msgid "cursor \"%s\" already in use" msgstr "Cursor „%s“ ist bereits in Verwendung" -#: pl_exec.c:2144 pl_exec.c:3792 +#: pl_exec.c:2226 pl_exec.c:4025 #, c-format msgid "arguments given for cursor without arguments" msgstr "einem Cursor ohne Argumente wurden Argumente übergeben" -#: pl_exec.c:2163 pl_exec.c:3811 +#: pl_exec.c:2245 pl_exec.c:4044 #, c-format msgid "arguments required for cursor" msgstr "Cursor benötigt Argumente" -#: pl_exec.c:2250 +#: pl_exec.c:2330 #, c-format msgid "FOREACH expression must not be null" msgstr "FOREACH-Ausdruck darf nicht NULL sein" -#: pl_exec.c:2256 +#: pl_exec.c:2336 #, c-format msgid "FOREACH expression must yield an array, not type %s" msgstr "FOREACH-Ausdruck muss ein Array ergeben, nicht Typ %s" -#: pl_exec.c:2273 +#: pl_exec.c:2353 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "Slice-Dimension (%d) ist außerhalb des gültigen Bereichs 0..%d" -#: pl_exec.c:2300 +#: pl_exec.c:2380 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "FOREACH ... SLICE Schleifenvariable muss einen Arraytyp haben" -#: pl_exec.c:2304 +#: pl_exec.c:2384 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "FOREACH-Schleifenvariable darf keinen Array-Typ haben" -#: pl_exec.c:2525 pl_exec.c:2678 +#: pl_exec.c:2572 pl_exec.c:2654 pl_exec.c:2821 #, c-format msgid "cannot return non-composite value from function returning composite type" msgstr "kann keinen nicht zusammengesetzten Wert aus einer Funktion zurückgeben, die einen zusammengesetzten Typ zurückgibt" -#: pl_exec.c:2569 pl_gram.y:3075 +#: pl_exec.c:2698 pl_gram.y:3112 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "RETURN NEXT kann nur in einer Funktion mit SETOF-Rückgabetyp verwendet werden" -#: pl_exec.c:2597 pl_exec.c:2720 +#: pl_exec.c:2732 pl_exec.c:2863 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "falscher Ergebnistyp angegeben in RETURN NEXT" -#: pl_exec.c:2620 pl_exec.c:4166 pl_exec.c:4491 pl_exec.c:4517 pl_exec.c:4583 -#: pl_exec.c:4602 pl_exec.c:4670 pl_exec.c:4693 +#: pl_exec.c:2761 pl_exec.c:4434 pl_exec.c:4762 pl_exec.c:4788 pl_exec.c:4854 +#: pl_exec.c:4873 pl_exec.c:4941 pl_exec.c:4964 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "Record „%s“ hat noch keinen Wert" -#: pl_exec.c:2622 pl_exec.c:4168 pl_exec.c:4493 pl_exec.c:4519 pl_exec.c:4585 -#: pl_exec.c:4604 pl_exec.c:4672 pl_exec.c:4695 +#: pl_exec.c:2763 pl_exec.c:4436 pl_exec.c:4764 pl_exec.c:4790 pl_exec.c:4856 +#: pl_exec.c:4875 pl_exec.c:4943 pl_exec.c:4966 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "Die Tupelstruktur eines Records ohne Wert ist unbestimmt." -#: pl_exec.c:2626 pl_exec.c:2646 +#: pl_exec.c:2767 pl_exec.c:2787 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "falscher Record-Typ angegeben in RETURN NEXT" -#: pl_exec.c:2738 +#: pl_exec.c:2882 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "RETURN NEXT muss einen Parameter haben" -#: pl_exec.c:2771 pl_gram.y:3133 +#: pl_exec.c:2915 pl_gram.y:3174 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "RETURN QUERY kann nur in einer Funktion mit SETOF-Rückgabetyp verwendet werden" -#: pl_exec.c:2791 +#: pl_exec.c:2935 msgid "structure of query does not match function result type" msgstr "Struktur der Anfrage stimmt nicht mit Rückgabetyp der Funktion überein" -#: pl_exec.c:2871 pl_exec.c:3003 +#: pl_exec.c:3015 pl_exec.c:3145 #, c-format msgid "RAISE option already specified: %s" msgstr "RAISE-Option bereits angegeben: %s" -#: pl_exec.c:2904 +#: pl_exec.c:3048 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "RAISE ohne Parameter kann nicht außerhalb einer Ausnahmebehandlung verwendet werden" -#: pl_exec.c:2945 -#, c-format -msgid "too few parameters specified for RAISE" -msgstr "zu wenige Parameter für RAISE angegeben" - -#: pl_exec.c:2973 -#, c-format -msgid "too many parameters specified for RAISE" -msgstr "zu viele Parameter für RAISE angegeben" - -#: pl_exec.c:2993 +#: pl_exec.c:3135 #, c-format msgid "RAISE statement option cannot be null" msgstr "Option einer RAISE-Anweisung darf nicht NULL sein" -#: pl_exec.c:3064 +#: pl_exec.c:3206 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3241 pl_exec.c:3378 pl_exec.c:3569 +#: pl_exec.c:3279 +#, c-format +msgid "assertion failed" +msgstr "Assertion fehlgeschlagen" + +#: pl_exec.c:3469 pl_exec.c:3613 pl_exec.c:3802 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "COPY vom/zum Client funktioniert in PL/pgSQL nicht" -#: pl_exec.c:3245 pl_exec.c:3382 pl_exec.c:3573 +#: pl_exec.c:3473 pl_exec.c:3617 pl_exec.c:3806 #, c-format msgid "cannot begin/end transactions in PL/pgSQL" msgstr "Transaktionen können in PL/pgSQL nicht begonnen/beendet werden" -#: pl_exec.c:3246 pl_exec.c:3383 pl_exec.c:3574 +#: pl_exec.c:3474 pl_exec.c:3618 pl_exec.c:3807 #, c-format msgid "Use a BEGIN block with an EXCEPTION clause instead." msgstr "Verwenden Sie stattdessen einen BEGIN-Block mit einer EXCEPTION-Klausel." -#: pl_exec.c:3406 pl_exec.c:3598 +#: pl_exec.c:3641 pl_exec.c:3831 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO mit einem Befehl verwendet, der keine Daten zurückgeben kann" -#: pl_exec.c:3434 pl_exec.c:3626 +#: pl_exec.c:3669 pl_exec.c:3859 #, c-format msgid "query returned no rows" msgstr "Anfrage gab keine Zeilen zurück" -#: pl_exec.c:3453 pl_exec.c:3645 +#: pl_exec.c:3688 pl_exec.c:3878 #, c-format msgid "query returned more than one row" msgstr "Anfrage gab mehr als eine Zeile zurück" -#: pl_exec.c:3470 +#: pl_exec.c:3705 #, c-format msgid "query has no destination for result data" msgstr "Anfrage hat keinen Bestimmungsort für die Ergebnisdaten" -#: pl_exec.c:3471 +#: pl_exec.c:3706 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "Wenn Sie die Ergebnisse eines SELECT verwerfen wollen, verwenden Sie stattdessen PERFORM." -#: pl_exec.c:3505 pl_exec.c:6480 +#: pl_exec.c:3738 pl_exec.c:7026 #, c-format msgid "query string argument of EXECUTE is null" msgstr "Anfrageargument von EXECUTE ist NULL" -#: pl_exec.c:3561 +#: pl_exec.c:3794 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "EXECUTE von SELECT ... INTO ist nicht implementiert" -#: pl_exec.c:3562 +#: pl_exec.c:3795 #, c-format msgid "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead." msgstr "Sie könnten stattdessen EXECUTE ... INTO oder EXECUTE CREATE TABLE ... AS verwenden." -#: pl_exec.c:3874 pl_exec.c:3966 +#: pl_exec.c:4105 pl_exec.c:4197 #, c-format msgid "cursor variable \"%s\" is null" msgstr "Cursor-Variable „%s“ ist NULL" -#: pl_exec.c:3881 pl_exec.c:3973 +#: pl_exec.c:4112 pl_exec.c:4204 #, c-format msgid "cursor \"%s\" does not exist" msgstr "Cursor „%s“ existiert nicht" -#: pl_exec.c:3895 +#: pl_exec.c:4126 #, c-format msgid "relative or absolute cursor position is null" msgstr "relative oder absolute Cursorposition ist NULL" -#: pl_exec.c:4062 +#: pl_exec.c:4306 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "NULL-Wert kann der Variable „%s“ nicht zugewiesen werden, weil sie als NOT NULL deklariert ist" -#: pl_exec.c:4109 +#: pl_exec.c:4378 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "nicht zusammengesetzter Wert kann nicht einer Zeilenvariable zugewiesen werden" -#: pl_exec.c:4133 +#: pl_exec.c:4402 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "nicht zusammengesetzter Wert kann nicht einer Record-Variable zugewiesen werden" -#: pl_exec.c:4278 +#: pl_exec.c:4545 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "Anzahl der Arraydimensionen (%d) überschreitet erlaubtes Maximum (%d)" -#: pl_exec.c:4310 +#: pl_exec.c:4577 #, c-format msgid "subscripted object is not an array" msgstr "Objekt mit Arrayindex ist kein Array" -#: pl_exec.c:4347 +#: pl_exec.c:4614 #, c-format msgid "array subscript in assignment must not be null" msgstr "Arrayindex in Zuweisung darf nicht NULL sein" -#: pl_exec.c:4806 +#: pl_exec.c:5080 #, c-format msgid "query \"%s\" did not return data" msgstr "Anfrage „%s“ hat keine Daten zurückgegeben" -#: pl_exec.c:4814 +#: pl_exec.c:5088 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" msgstr[0] "Anfrage „%s“ hat %d Spalte zurückgegeben" msgstr[1] "Anfrage „%s“ hat %d Spalten zurückgegeben" -#: pl_exec.c:4840 +#: pl_exec.c:5115 #, c-format msgid "query \"%s\" returned more than one row" msgstr "Anfrage „%s“ hat mehr als eine Zeile zurückgegeben" -#: pl_exec.c:4897 +#: pl_exec.c:5170 #, c-format msgid "query \"%s\" is not a SELECT" msgstr "Anfrage „%s“ ist kein SELECT" @@ -502,299 +503,309 @@ msgstr "FOR über Cursor" msgid "FOREACH over array" msgstr "FOREACH über Array" -#: pl_funcs.c:248 +#: pl_funcs.c:250 msgid "SQL statement" msgstr "SQL-Anweisung" -#: pl_funcs.c:250 -msgid "EXECUTE statement" -msgstr "EXECUTE-Anweisung" - -#: pl_funcs.c:252 +#: pl_funcs.c:254 msgid "FOR over EXECUTE statement" msgstr "FOR-über-EXECUTE-Anweisung" -#: pl_gram.y:469 +#: pl_gram.y:472 #, c-format msgid "block label must be placed before DECLARE, not after" msgstr "Blocklabel muss vor DECLARE stehen, nicht danach" -#: pl_gram.y:489 +#: pl_gram.y:492 #, c-format msgid "collations are not supported by type %s" msgstr "Sortierfolgen werden von Typ %s nicht unterstützt" -#: pl_gram.y:504 +#: pl_gram.y:507 #, c-format msgid "row or record variable cannot be CONSTANT" msgstr "Zeilen- oder Record-Variable kann nicht CONSTANT sein" -#: pl_gram.y:514 +#: pl_gram.y:517 #, c-format msgid "row or record variable cannot be NOT NULL" msgstr "Zeilen- oder Record-Variable kann nicht NOT NULL sein" -#: pl_gram.y:525 +#: pl_gram.y:528 #, c-format msgid "default value for row or record variable is not supported" msgstr "Vorgabewerte werden für Zeilen- oder Record-Variablen nicht unterstützt" -#: pl_gram.y:670 pl_gram.y:685 pl_gram.y:711 +#: pl_gram.y:673 pl_gram.y:688 pl_gram.y:714 #, c-format msgid "variable \"%s\" does not exist" msgstr "Variable „%s“ existiert nicht" -#: pl_gram.y:729 pl_gram.y:757 +#: pl_gram.y:732 pl_gram.y:760 msgid "duplicate declaration" msgstr "doppelte Deklaration" -#: pl_gram.y:740 pl_gram.y:768 +#: pl_gram.y:743 pl_gram.y:771 #, c-format msgid "variable \"%s\" shadows a previously defined variable" msgstr "Variable „%s“ verdeckt eine zuvor definierte Variable" -#: pl_gram.y:955 +#: pl_gram.y:950 #, c-format msgid "diagnostics item %s is not allowed in GET STACKED DIAGNOSTICS" msgstr "Diagnostikelement %s ist in GET STACKED DIAGNOSTICS nicht erlaubt" -#: pl_gram.y:973 +#: pl_gram.y:968 #, c-format msgid "diagnostics item %s is not allowed in GET CURRENT DIAGNOSTICS" msgstr "Diagnostikelement %s ist in GET CURRENT DIAGNOSTICS nicht erlaubt" -#: pl_gram.y:1071 +#: pl_gram.y:1066 msgid "unrecognized GET DIAGNOSTICS item" msgstr "unbekanntes Element in GET DIAGNOSTICS" -#: pl_gram.y:1082 pl_gram.y:3320 +#: pl_gram.y:1077 pl_gram.y:3361 #, c-format msgid "\"%s\" is not a scalar variable" msgstr "„%s“ ist keine skalare Variable" -#: pl_gram.y:1334 pl_gram.y:1528 +#: pl_gram.y:1329 pl_gram.y:1523 #, c-format msgid "loop variable of loop over rows must be a record or row variable or list of scalar variables" msgstr "Schleifenvariable einer Schleife über Zeilen muss eine Record-Variable oder Zeilenvariable oder eine Liste von skalaren Variablen sein" -#: pl_gram.y:1368 +#: pl_gram.y:1363 #, c-format msgid "cursor FOR loop must have only one target variable" msgstr "Cursor-FOR-Schleife darf nur eine Zielvariable haben" -#: pl_gram.y:1375 +#: pl_gram.y:1370 #, c-format msgid "cursor FOR loop must use a bound cursor variable" msgstr "Cursor-FOR-Schleife muss eine gebundene Cursor-Variable verwenden" -#: pl_gram.y:1459 +#: pl_gram.y:1454 #, c-format msgid "integer FOR loop must have only one target variable" msgstr "ganzzahlige FOR-Schleife darf nur eine Zielvariable haben" -#: pl_gram.y:1495 +#: pl_gram.y:1490 #, c-format msgid "cannot specify REVERSE in query FOR loop" msgstr "REVERSE kann nicht in einer Anfrage-FOR-Schleife verwendet werden" -#: pl_gram.y:1642 +#: pl_gram.y:1637 #, c-format msgid "loop variable of FOREACH must be a known variable or list of variables" msgstr "Schleifenvariable von FOREACH muss eine bekannte Variable oder Liste von Variablen sein" -#: pl_gram.y:1694 pl_gram.y:1731 pl_gram.y:1779 pl_gram.y:2776 pl_gram.y:2857 -#: pl_gram.y:2968 pl_gram.y:3721 +#: pl_gram.y:1689 pl_gram.y:1726 pl_gram.y:1774 pl_gram.y:2814 pl_gram.y:2896 +#: pl_gram.y:3007 pl_gram.y:3763 msgid "unexpected end of function definition" msgstr "unerwartetes Ende der Funktionsdefinition" -#: pl_gram.y:1799 pl_gram.y:1823 pl_gram.y:1839 pl_gram.y:1845 pl_gram.y:1934 -#: pl_gram.y:1942 pl_gram.y:1956 pl_gram.y:2051 pl_gram.y:2232 pl_gram.y:2315 -#: pl_gram.y:2449 pl_gram.y:3563 pl_gram.y:3624 pl_gram.y:3702 +#: pl_gram.y:1794 pl_gram.y:1818 pl_gram.y:1834 pl_gram.y:1840 pl_gram.y:1954 +#: pl_gram.y:1962 pl_gram.y:1976 pl_gram.y:2071 pl_gram.y:2252 pl_gram.y:2335 +#: pl_gram.y:2486 pl_gram.y:3604 pl_gram.y:3665 pl_gram.y:3744 msgid "syntax error" msgstr "Syntaxfehler" -#: pl_gram.y:1827 pl_gram.y:1829 pl_gram.y:2236 pl_gram.y:2238 +#: pl_gram.y:1822 pl_gram.y:1824 pl_gram.y:2256 pl_gram.y:2258 msgid "invalid SQLSTATE code" msgstr "ungültiger SQLSTATE-Code" -#: pl_gram.y:1998 +#: pl_gram.y:2018 msgid "syntax error, expected \"FOR\"" msgstr "Syntaxfehler, „FOR“ erwartet" -#: pl_gram.y:2060 +#: pl_gram.y:2080 #, c-format msgid "FETCH statement cannot return multiple rows" msgstr "FETCH-Anweisung kann nicht mehrere Zeilen zurückgeben" -#: pl_gram.y:2116 +#: pl_gram.y:2136 #, c-format msgid "cursor variable must be a simple variable" msgstr "Cursor-Variable muss eine einfache Variable sein" -#: pl_gram.y:2122 +#: pl_gram.y:2142 #, c-format msgid "variable \"%s\" must be of type cursor or refcursor" msgstr "Variable „%s“ muss Typ cursor oder refcursor haben" -#: pl_gram.y:2290 +#: pl_gram.y:2310 msgid "label does not exist" msgstr "Label existiert nicht" -#: pl_gram.y:2420 pl_gram.y:2431 +#: pl_gram.y:2457 pl_gram.y:2468 #, c-format msgid "\"%s\" is not a known variable" msgstr "„%s“ ist keine bekannte Variable" -#: pl_gram.y:2535 pl_gram.y:2545 pl_gram.y:2700 +#: pl_gram.y:2572 pl_gram.y:2582 pl_gram.y:2738 msgid "mismatched parentheses" msgstr "Klammern passen nicht" -#: pl_gram.y:2549 +#: pl_gram.y:2586 #, c-format msgid "missing \"%s\" at end of SQL expression" msgstr "„%s“ fehlt am Ende des SQL-Ausdrucks" -#: pl_gram.y:2555 +#: pl_gram.y:2592 #, c-format msgid "missing \"%s\" at end of SQL statement" msgstr "„%s“ fehlt am Ende der SQL-Anweisung" -#: pl_gram.y:2572 +#: pl_gram.y:2609 msgid "missing expression" msgstr "Ausdruck fehlt" -#: pl_gram.y:2574 +#: pl_gram.y:2611 msgid "missing SQL statement" msgstr "SQL-Anweisung fehlt" -#: pl_gram.y:2702 +#: pl_gram.y:2740 msgid "incomplete data type declaration" msgstr "unvollständige Datentypdeklaration" -#: pl_gram.y:2725 +#: pl_gram.y:2763 msgid "missing data type declaration" msgstr "fehlende Datentypdeklaration" -#: pl_gram.y:2781 +#: pl_gram.y:2819 msgid "INTO specified more than once" msgstr "INTO mehr als einmal angegeben" -#: pl_gram.y:2949 +#: pl_gram.y:2988 msgid "expected FROM or IN" msgstr "FROM oder IN erwartet" -#: pl_gram.y:3009 +#: pl_gram.y:3048 #, c-format msgid "RETURN cannot have a parameter in function returning set" msgstr "RETURN kann keinen Parameter haben in einer Funktion mit Mengenergebnis" -#: pl_gram.y:3010 +#: pl_gram.y:3049 #, c-format msgid "Use RETURN NEXT or RETURN QUERY." msgstr "Verwenden Sie RETURN NEXT oder RETURN QUERY." -#: pl_gram.y:3018 +#: pl_gram.y:3057 #, c-format msgid "RETURN cannot have a parameter in function with OUT parameters" msgstr "RETURN kann keinen Parameter haben in einer Funktion mit OUT-Parametern" -#: pl_gram.y:3027 +#: pl_gram.y:3066 #, c-format msgid "RETURN cannot have a parameter in function returning void" msgstr "RETURN kann keinen Parameter haben in einer Funktion, die „void“ zurückgibt" -#: pl_gram.y:3089 +#: pl_gram.y:3126 #, c-format msgid "RETURN NEXT cannot have a parameter in function with OUT parameters" msgstr "RETURN NEXT kann keinen Parameter haben in einer Funktion mit OUT-Parametern" -#: pl_gram.y:3189 +#: pl_gram.y:3230 #, c-format msgid "\"%s\" is declared CONSTANT" msgstr "„%s“ wurde als CONSTANT deklariert" -#: pl_gram.y:3251 pl_gram.y:3263 +#: pl_gram.y:3292 pl_gram.y:3304 #, c-format msgid "record or row variable cannot be part of multiple-item INTO list" msgstr "Record- oder Zeilenvariable kann nicht Teil einer INTO-Liste mit mehreren Elementen sein" -#: pl_gram.y:3308 +#: pl_gram.y:3349 #, c-format msgid "too many INTO variables specified" msgstr "zu viele INTO-Variablen angegeben" -#: pl_gram.y:3516 +#: pl_gram.y:3557 #, c-format msgid "end label \"%s\" specified for unlabelled block" msgstr "Endlabel „%s“ für ungelabelten Block angegeben" -#: pl_gram.y:3523 +#: pl_gram.y:3564 #, c-format msgid "end label \"%s\" differs from block's label \"%s\"" msgstr "Endlabel „%s“ unterscheidet sich vom Label des Blocks „%s“" -#: pl_gram.y:3558 +#: pl_gram.y:3599 #, c-format msgid "cursor \"%s\" has no arguments" msgstr "Cursor „%s“ hat keine Argumente" -#: pl_gram.y:3572 +#: pl_gram.y:3613 #, c-format msgid "cursor \"%s\" has arguments" msgstr "Cursor „%s“ hat Argumente" -#: pl_gram.y:3614 +#: pl_gram.y:3655 #, c-format msgid "cursor \"%s\" has no argument named \"%s\"" msgstr "Cursor „%s“ hat kein Argument namens „%s“" -#: pl_gram.y:3634 +#: pl_gram.y:3675 #, c-format msgid "value for parameter \"%s\" of cursor \"%s\" specified more than once" msgstr "Wert für Parameter „%s“ von Cursor „%s“ mehrmals angegeben" -#: pl_gram.y:3659 +#: pl_gram.y:3700 #, c-format msgid "not enough arguments for cursor \"%s\"" msgstr "nicht genügend Argumente für Cursor „%s“" -#: pl_gram.y:3666 +#: pl_gram.y:3707 #, c-format msgid "too many arguments for cursor \"%s\"" msgstr "zu viele Argumente für Cursor „%s“" -#: pl_gram.y:3753 +#: pl_gram.y:3795 msgid "unrecognized RAISE statement option" msgstr "unbekannte Option für RAISE-Anweisung" -#: pl_gram.y:3757 +#: pl_gram.y:3799 msgid "syntax error, expected \"=\"" msgstr "Syntaxfehler, „=“ erwartet" -#: pl_handler.c:147 +#: pl_gram.y:3840 +#, c-format +msgid "too many parameters specified for RAISE" +msgstr "zu viele Parameter für RAISE angegeben" + +#: pl_gram.y:3844 +#, c-format +msgid "too few parameters specified for RAISE" +msgstr "zu wenige Parameter für RAISE angegeben" + +#: pl_handler.c:149 msgid "Sets handling of conflicts between PL/pgSQL variable names and table column names." msgstr "Bestimmt die Verarbeitung von Konflikten zwischen PL/pgSQL-Variablennamen und Tabellenspaltennamen." -#: pl_handler.c:156 +#: pl_handler.c:158 msgid "Print information about parameters in the DETAIL part of the error messages generated on INTO ... STRICT failures." msgstr "Informationen über Parameter im DETAIL-Teil von Fehlermeldungen ausgeben, die durch Fehler in INTO ... STRICT erzeugt wurden." -#: pl_handler.c:164 +#: pl_handler.c:166 +msgid "Perform checks given in ASSERT statements." +msgstr "Prüfungen in ASSERT-Anweisungen ausführen." + +#: pl_handler.c:174 msgid "List of programming constructs that should produce a warning." msgstr "Zählt Programmierkonstrukte auf, die eine Warnung erzeugen sollen." -#: pl_handler.c:174 +#: pl_handler.c:184 msgid "List of programming constructs that should produce an error." msgstr "Zählt Programmierkonstrukte auf, die einen Fehler zeugen sollen." #. translator: %s is typically the translation of "syntax error" -#: pl_scanner.c:554 +#: pl_scanner.c:621 #, c-format msgid "%s at end of input" msgstr "%s am Ende der Eingabe" #. translator: first %s is typically the translation of "syntax error" -#: pl_scanner.c:570 +#: pl_scanner.c:637 #, c-format msgid "%s at or near \"%s\"" msgstr "%s bei „%s“" diff --git a/src/pl/plpgsql/src/po/es.po b/src/pl/plpgsql/src/po/es.po index 44cdc9415c71c..29c2fdc34a6f6 100644 --- a/src/pl/plpgsql/src/po/es.po +++ b/src/pl/plpgsql/src/po/es.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: plpgsql (PostgreSQL 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:37+0000\n" -"PO-Revision-Date: 2014-12-15 16:23-0300\n" +"POT-Creation-Date: 2015-10-04 00:37+0000\n" +"PO-Revision-Date: 2015-09-30 12:19-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -22,7 +22,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: pl_comp.c:436 pl_handler.c:438 +#: pl_comp.c:436 pl_handler.c:448 #, c-format msgid "PL/pgSQL functions cannot accept type %s" msgstr "las funciones PL/pgSQL no pueden aceptar el tipo %s" @@ -37,446 +37,447 @@ msgstr "no se pudo determinar el verdadero tipo de resultado para la función po msgid "trigger functions can only be called as triggers" msgstr "las funciones de disparador sólo pueden ser invocadas como disparadores" -#: pl_comp.c:551 pl_handler.c:423 +#: pl_comp.c:551 pl_handler.c:433 #, c-format msgid "PL/pgSQL functions cannot return type %s" msgstr "las funciones PL/pgSQL no pueden retornar el tipo %s" -#: pl_comp.c:594 +#: pl_comp.c:592 #, c-format msgid "trigger functions cannot have declared arguments" msgstr "las funciones de disparador no pueden tener argumentos declarados" -#: pl_comp.c:595 +#: pl_comp.c:593 #, c-format msgid "The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV instead." msgstr "Los argumentos del disparador pueden accederse usando TG_NARGS y TG_ARGV." -#: pl_comp.c:697 +#: pl_comp.c:695 #, c-format msgid "event trigger functions cannot have declared arguments" msgstr "las funciones de disparador por eventos no pueden tener argumentos declarados" -#: pl_comp.c:962 +#: pl_comp.c:957 #, c-format msgid "compilation of PL/pgSQL function \"%s\" near line %d" msgstr "compilación de la función PL/pgSQL «%s» cerca de la línea %d" -#: pl_comp.c:985 +#: pl_comp.c:980 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "el nombre de parámetro «%s» fue usado más de una vez" -#: pl_comp.c:1095 +#: pl_comp.c:1090 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "la referencia a la columna «%s» es ambigua" -#: pl_comp.c:1097 +#: pl_comp.c:1092 #, c-format msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Podría referirse tanto a una variable PL/pgSQL como a una columna de una tabla." -#: pl_comp.c:1277 pl_comp.c:1305 pl_exec.c:4179 pl_exec.c:4524 pl_exec.c:4609 -#: pl_exec.c:4700 +#: pl_comp.c:1272 pl_comp.c:1300 pl_exec.c:4447 pl_exec.c:4795 pl_exec.c:4880 +#: pl_exec.c:4971 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "el registro «%s» no tiene un campo «%s»" -#: pl_comp.c:1836 +#: pl_comp.c:1831 #, c-format msgid "relation \"%s\" does not exist" msgstr "no existe la relación «%s»" -#: pl_comp.c:1945 +#: pl_comp.c:1940 #, c-format msgid "variable \"%s\" has pseudo-type %s" msgstr "la variable «%s» tiene pseudotipo %s" -#: pl_comp.c:2011 +#: pl_comp.c:2006 #, c-format msgid "relation \"%s\" is not a table" msgstr "la relación «%s» no es una tabla" -#: pl_comp.c:2171 +#: pl_comp.c:2166 #, c-format msgid "type \"%s\" is only a shell" msgstr "el tipo «%s» está inconcluso" -#: pl_comp.c:2245 pl_comp.c:2298 +#: pl_comp.c:2255 pl_comp.c:2308 #, c-format msgid "unrecognized exception condition \"%s\"" msgstr "no se reconoce la condición de excepción «%s»" -#: pl_comp.c:2456 +#: pl_comp.c:2466 #, c-format msgid "could not determine actual argument type for polymorphic function \"%s\"" msgstr "no se pudo determinar el verdadero tipo de argumento para la función polimórfica «%s»" -#: pl_exec.c:277 pl_exec.c:537 pl_exec.c:816 +#: pl_exec.c:321 pl_exec.c:614 pl_exec.c:893 msgid "during initialization of execution state" msgstr "durante la inicialización del estado de ejecución" -#: pl_exec.c:284 +#: pl_exec.c:328 msgid "while storing call arguments into local variables" msgstr "mientras se almacenaban los argumentos de invocación en variables locales" -#: pl_exec.c:326 pl_exec.c:694 +#: pl_exec.c:408 pl_exec.c:771 msgid "during function entry" msgstr "durante el ingreso a la función" -#: pl_exec.c:357 pl_exec.c:725 pl_exec.c:857 +#: pl_exec.c:439 pl_exec.c:802 pl_exec.c:934 #, c-format msgid "CONTINUE cannot be used outside a loop" msgstr "CONTINUE no puede usarse fuera de un bucle" -#: pl_exec.c:361 +#: pl_exec.c:443 #, c-format msgid "control reached end of function without RETURN" msgstr "la ejecución alcanzó el fin de la función sin encontrar RETURN" -#: pl_exec.c:368 +#: pl_exec.c:450 msgid "while casting return value to function's return type" msgstr "mientras se hacía la conversión del valor de retorno al tipo de retorno de la función" -#: pl_exec.c:381 pl_exec.c:2843 +#: pl_exec.c:463 pl_exec.c:2987 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "se llamó una función que retorna un conjunto en un contexto que no puede aceptarlo" -#: pl_exec.c:419 pl_exec.c:2686 +#: pl_exec.c:501 pl_exec.c:2829 msgid "returned record type does not match expected record type" msgstr "el tipo de registro retornado no coincide con el tipo de registro esperado" -#: pl_exec.c:479 pl_exec.c:733 pl_exec.c:865 +#: pl_exec.c:556 pl_exec.c:810 pl_exec.c:942 msgid "during function exit" msgstr "durante la salida de la función" -#: pl_exec.c:729 pl_exec.c:861 +#: pl_exec.c:806 pl_exec.c:938 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "la ejecución alcanzó el fin del procedimiento disparador sin encontrar RETURN" -#: pl_exec.c:738 +#: pl_exec.c:815 #, c-format msgid "trigger procedure cannot return a set" msgstr "los procedimientos disparadores no pueden retornar conjuntos" -#: pl_exec.c:760 +#: pl_exec.c:837 msgid "returned row structure does not match the structure of the triggering table" msgstr "la estructura de fila retornada no coincide con la estructura de la tabla que generó el evento de disparador" -#: pl_exec.c:916 +#. translator: last %s is a phrase such as "during statement block +#. local variable initialization" +#. +#: pl_exec.c:993 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "función PL/pgSQL %s en la línea %d %s" -#: pl_exec.c:927 +#. translator: last %s is a phrase such as "while storing call +#. arguments into local variables" +#. +#: pl_exec.c:1004 #, c-format msgid "PL/pgSQL function %s %s" msgstr "función PL/pgSQL %s %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:935 +#: pl_exec.c:1012 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "función PL/pgSQL %s en la línea %d en %s" -#: pl_exec.c:941 +#: pl_exec.c:1018 #, c-format msgid "PL/pgSQL function %s" msgstr "función PL/pgSQL %s" -#: pl_exec.c:1050 +#: pl_exec.c:1129 msgid "during statement block local variable initialization" msgstr "durante inicialización de variables locales en el bloque de sentencias" -#: pl_exec.c:1092 +#: pl_exec.c:1169 #, c-format msgid "variable \"%s\" declared NOT NULL cannot default to NULL" msgstr "la variable «%s» declarada NOT NULL no puede tener un valor por omisión NULL" -#: pl_exec.c:1142 +#: pl_exec.c:1219 msgid "during statement block entry" msgstr "durante la entrada al bloque de sentencias" -#: pl_exec.c:1163 +#: pl_exec.c:1240 msgid "during statement block exit" msgstr "durante la salida del bloque de sentencias" -#: pl_exec.c:1206 +#: pl_exec.c:1283 msgid "during exception cleanup" msgstr "durante la finalización por excepción" -#: pl_exec.c:1559 +#: pl_exec.c:1634 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "GET STACKED DIAGNOSTICS no puede ser usado fuera de un manejador de excepción" -#: pl_exec.c:1760 +#: pl_exec.c:1838 #, c-format msgid "case not found" msgstr "caso no encontrado" -#: pl_exec.c:1761 +#: pl_exec.c:1839 #, c-format msgid "CASE statement is missing ELSE part." msgstr "A la sentencia CASE le falta la parte ELSE." -#: pl_exec.c:1913 +#: pl_exec.c:1993 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "el límite inferior de un ciclo FOR no puede ser null" -#: pl_exec.c:1928 +#: pl_exec.c:2009 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "el límite superior de un ciclo FOR no puede ser null" -#: pl_exec.c:1945 +#: pl_exec.c:2027 #, c-format msgid "BY value of FOR loop cannot be null" msgstr "el valor BY de un ciclo FOR no puede ser null" -#: pl_exec.c:1951 +#: pl_exec.c:2033 #, c-format msgid "BY value of FOR loop must be greater than zero" msgstr "el valor BY de un ciclo FOR debe ser mayor que cero" -#: pl_exec.c:2121 pl_exec.c:3730 +#: pl_exec.c:2203 pl_exec.c:3963 #, c-format msgid "cursor \"%s\" already in use" msgstr "el cursor «%s» ya está en uso" -#: pl_exec.c:2144 pl_exec.c:3792 +#: pl_exec.c:2226 pl_exec.c:4025 #, c-format msgid "arguments given for cursor without arguments" msgstr "se dieron argumentos a un cursor sin argumentos" -#: pl_exec.c:2163 pl_exec.c:3811 +#: pl_exec.c:2245 pl_exec.c:4044 #, c-format msgid "arguments required for cursor" msgstr "se requieren argumentos para el cursor" -#: pl_exec.c:2250 +#: pl_exec.c:2330 #, c-format msgid "FOREACH expression must not be null" msgstr "la expresión FOREACH no debe ser nula" -#: pl_exec.c:2256 +#: pl_exec.c:2336 #, c-format msgid "FOREACH expression must yield an array, not type %s" msgstr "una expresión FOREACH debe retornar un array, no tipo %s" -#: pl_exec.c:2273 +#: pl_exec.c:2353 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "la dimensión del slice (%d) está fuera de rango 0..%d" -#: pl_exec.c:2300 +#: pl_exec.c:2380 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "las variables de bucles FOREACH ... SLICE deben ser de un tipo array" -#: pl_exec.c:2304 +#: pl_exec.c:2384 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "la variable de bucle FOREACH no debe ser de tipo array" -#: pl_exec.c:2525 pl_exec.c:2678 +#: pl_exec.c:2572 pl_exec.c:2654 pl_exec.c:2821 #, c-format msgid "cannot return non-composite value from function returning composite type" msgstr "no se puede retornar un valor no-compuesto desde una función que retorne tipos compuestos" -#: pl_exec.c:2569 pl_gram.y:3075 +#: pl_exec.c:2698 pl_gram.y:3112 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "no se puede usar RETURN NEXT en una función que no es SETOF" -#: pl_exec.c:2597 pl_exec.c:2720 +#: pl_exec.c:2732 pl_exec.c:2863 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "se pasó un tipo incorrecto de resultado a RETURN NEXT" -#: pl_exec.c:2620 pl_exec.c:4166 pl_exec.c:4491 pl_exec.c:4517 pl_exec.c:4583 -#: pl_exec.c:4602 pl_exec.c:4670 pl_exec.c:4693 +#: pl_exec.c:2761 pl_exec.c:4434 pl_exec.c:4762 pl_exec.c:4788 pl_exec.c:4854 +#: pl_exec.c:4873 pl_exec.c:4941 pl_exec.c:4964 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "el registro «%s» no ha sido asignado aún" -#: pl_exec.c:2622 pl_exec.c:4168 pl_exec.c:4493 pl_exec.c:4519 pl_exec.c:4585 -#: pl_exec.c:4604 pl_exec.c:4672 pl_exec.c:4695 +#: pl_exec.c:2763 pl_exec.c:4436 pl_exec.c:4764 pl_exec.c:4790 pl_exec.c:4856 +#: pl_exec.c:4875 pl_exec.c:4943 pl_exec.c:4966 #, 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." -#: pl_exec.c:2626 pl_exec.c:2646 +#: pl_exec.c:2767 pl_exec.c:2787 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "se pasó un tipo de registro incorrecto a RETURN NEXT" -#: pl_exec.c:2738 +#: pl_exec.c:2882 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "RETURN NEXT debe tener un parámetro" -#: pl_exec.c:2771 pl_gram.y:3133 +#: pl_exec.c:2915 pl_gram.y:3174 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "no se puede usar RETURN QUERY en una función que no ha sido declarada SETOF" -#: pl_exec.c:2791 +#: pl_exec.c:2935 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:2871 pl_exec.c:3003 +#: pl_exec.c:3015 pl_exec.c:3145 #, c-format msgid "RAISE option already specified: %s" msgstr "la opción de RAISE ya se especificó: %s" -#: pl_exec.c:2904 +#: pl_exec.c:3048 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "RAISE sin parámetros no puede ser usado fuera de un manejador de excepción" -#: pl_exec.c:2945 -#, c-format -msgid "too few parameters specified for RAISE" -msgstr "se especificaron muy pocos parámetros a RAISE" - -#: pl_exec.c:2973 -#, c-format -msgid "too many parameters specified for RAISE" -msgstr "se especificaron demasiados parámetros a RAISE" - -#: pl_exec.c:2993 +#: pl_exec.c:3135 #, c-format msgid "RAISE statement option cannot be null" msgstr "la opción de sentencia en RAISE no puede ser null" -#: pl_exec.c:3064 +#: pl_exec.c:3206 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3241 pl_exec.c:3378 pl_exec.c:3569 +#: pl_exec.c:3279 +#, c-format +msgid "assertion failed" +msgstr "aseveración falló" + +#: pl_exec.c:3469 pl_exec.c:3613 pl_exec.c:3802 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "no se puede ejecutar COPY desde/a un cliente en PL/pgSQL" -#: pl_exec.c:3245 pl_exec.c:3382 pl_exec.c:3573 +#: pl_exec.c:3473 pl_exec.c:3617 pl_exec.c:3806 #, c-format msgid "cannot begin/end transactions in PL/pgSQL" msgstr "no se pueden iniciar o terminar transacciones en PL/pgSQL" -#: pl_exec.c:3246 pl_exec.c:3383 pl_exec.c:3574 +#: pl_exec.c:3474 pl_exec.c:3618 pl_exec.c:3807 #, c-format msgid "Use a BEGIN block with an EXCEPTION clause instead." msgstr "Utilice un bloque BEGIN con una cláusula EXCEPTION." -#: pl_exec.c:3406 pl_exec.c:3598 +#: pl_exec.c:3641 pl_exec.c:3831 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO es utilizado con una orden que no puede retornar datos" -#: pl_exec.c:3434 pl_exec.c:3626 +#: pl_exec.c:3669 pl_exec.c:3859 #, c-format msgid "query returned no rows" msgstr "la consulta no regresó filas" -#: pl_exec.c:3453 pl_exec.c:3645 +#: pl_exec.c:3688 pl_exec.c:3878 #, c-format msgid "query returned more than one row" msgstr "la consulta regresó más de una fila" -#: pl_exec.c:3470 +#: pl_exec.c:3705 #, c-format msgid "query has no destination for result data" msgstr "la consulta no tiene un destino para los datos de resultado" -#: pl_exec.c:3471 +#: pl_exec.c:3706 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "Si quiere descartar los resultados de un SELECT, utilice PERFORM." -#: pl_exec.c:3505 pl_exec.c:6480 +#: pl_exec.c:3738 pl_exec.c:7026 #, c-format msgid "query string argument of EXECUTE is null" msgstr "el argumento de consulta a ejecutar en EXECUTE es null" -#: pl_exec.c:3561 +#: pl_exec.c:3794 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "no está implementado EXECUTE de un SELECT ... INTO" -#: pl_exec.c:3562 +#: pl_exec.c:3795 #, c-format msgid "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead." msgstr "Puede desear usar EXECUTE ... INTO o EXECUTE CREATE TABLE ... AS en su lugar." -#: pl_exec.c:3874 pl_exec.c:3966 +#: pl_exec.c:4105 pl_exec.c:4197 #, c-format msgid "cursor variable \"%s\" is null" msgstr "variable cursor «%s» es null" -#: pl_exec.c:3881 pl_exec.c:3973 +#: pl_exec.c:4112 pl_exec.c:4204 #, c-format msgid "cursor \"%s\" does not exist" msgstr "no existe el cursor «%s»" -#: pl_exec.c:3895 +#: pl_exec.c:4126 #, c-format msgid "relative or absolute cursor position is null" msgstr "la posición relativa o absoluta del cursor es null" -#: pl_exec.c:4062 +#: pl_exec.c:4306 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "no puede asignarse un valor null a la variable «%s» que fue declarada NOT NULL" -#: pl_exec.c:4109 +#: pl_exec.c:4378 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "no se puede asignar un valor no compuesto a una variable de tipo row" -#: pl_exec.c:4133 +#: pl_exec.c:4402 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "no se puede asignar un valor no compuesto a una variable de tipo record" -#: pl_exec.c:4278 +#: pl_exec.c:4545 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "el número de dimensiones del array (%d) excede el máximo permitido (%d)" -#: pl_exec.c:4310 +#: pl_exec.c:4577 #, c-format msgid "subscripted object is not an array" msgstr "el objeto al que se le puso un subíndice no es un array" -#: pl_exec.c:4347 +#: pl_exec.c:4614 #, c-format msgid "array subscript in assignment must not be null" msgstr "subíndice de array en asignación no puede ser null" -#: pl_exec.c:4806 +#: pl_exec.c:5080 #, c-format msgid "query \"%s\" did not return data" msgstr "la consulta «%s» no retornó datos" -#: pl_exec.c:4814 +#: pl_exec.c:5088 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" msgstr[0] "la consulta «%s» retornó %d columna" msgstr[1] "la consulta «%s» retornó %d columnas" -#: pl_exec.c:4840 +#: pl_exec.c:5115 #, c-format msgid "query \"%s\" returned more than one row" msgstr "la consulta «%s» retornó más de una fila" -#: pl_exec.c:4897 +#: pl_exec.c:5170 #, c-format msgid "query \"%s\" is not a SELECT" msgstr "la consulta «%s» no es una orden SELECT" @@ -505,299 +506,309 @@ msgstr "bucle FOR en torno a un cursor" msgid "FOREACH over array" msgstr "FOREACH en torno a un array" -#: pl_funcs.c:248 +#: pl_funcs.c:250 msgid "SQL statement" msgstr "sentencia SQL" -#: pl_funcs.c:250 -msgid "EXECUTE statement" -msgstr "sentencia EXECUTE" - -#: pl_funcs.c:252 +#: pl_funcs.c:254 msgid "FOR over EXECUTE statement" msgstr "bucle FOR en torno a una sentencia EXECUTE" -#: pl_gram.y:469 +#: pl_gram.y:472 #, c-format msgid "block label must be placed before DECLARE, not after" msgstr "etiqueta de bloque debe estar antes de DECLARE, no después" -#: pl_gram.y:489 +#: pl_gram.y:492 #, c-format msgid "collations are not supported by type %s" msgstr "los ordenamientos (collation) no están soportados por el tipo %s" -#: pl_gram.y:504 +#: pl_gram.y:507 #, c-format msgid "row or record variable cannot be CONSTANT" msgstr "variable de tipo row o record no puede ser CONSTANT" -#: pl_gram.y:514 +#: pl_gram.y:517 #, c-format msgid "row or record variable cannot be NOT NULL" msgstr "variable de tipo row o record no puede ser NOT NULL" -#: pl_gram.y:525 +#: pl_gram.y:528 #, c-format msgid "default value for row or record variable is not supported" msgstr "el valor por omisión de una variable de tipo row o record no está soportado" -#: pl_gram.y:670 pl_gram.y:685 pl_gram.y:711 +#: pl_gram.y:673 pl_gram.y:688 pl_gram.y:714 #, c-format msgid "variable \"%s\" does not exist" msgstr "no existe la variable «%s»" -#: pl_gram.y:729 pl_gram.y:757 +#: pl_gram.y:732 pl_gram.y:760 msgid "duplicate declaration" msgstr "declaración duplicada" -#: pl_gram.y:740 pl_gram.y:768 +#: pl_gram.y:743 pl_gram.y:771 #, c-format msgid "variable \"%s\" shadows a previously defined variable" msgstr "la variable «%s» oculta una variable definida anteriormente" -#: pl_gram.y:955 +#: pl_gram.y:950 #, c-format msgid "diagnostics item %s is not allowed in GET STACKED DIAGNOSTICS" msgstr "elemento de diagnóstico %s no se permite en GET STACKED DIAGNOSTICS" -#: pl_gram.y:973 +#: pl_gram.y:968 #, c-format msgid "diagnostics item %s is not allowed in GET CURRENT DIAGNOSTICS" msgstr "elemento de diagnóstico %s no se permite en GET STACKED DIAGNOSTICS" -#: pl_gram.y:1071 +#: pl_gram.y:1066 msgid "unrecognized GET DIAGNOSTICS item" msgstr "elemento de GET DIAGNOSTICS no reconocido" -#: pl_gram.y:1082 pl_gram.y:3320 +#: pl_gram.y:1077 pl_gram.y:3361 #, c-format msgid "\"%s\" is not a scalar variable" msgstr "«%s» no es una variable escalar" -#: pl_gram.y:1334 pl_gram.y:1528 +#: pl_gram.y:1329 pl_gram.y:1523 #, c-format msgid "loop variable of loop over rows must be a record or row variable or list of scalar variables" msgstr "la variable de bucle de un bucle sobre filas debe ser una variable de tipo record o row o una lista de variables escalares" -#: pl_gram.y:1368 +#: pl_gram.y:1363 #, c-format msgid "cursor FOR loop must have only one target variable" msgstr "un bucle FOR de un cursor debe tener sólo una variable de destino" -#: pl_gram.y:1375 +#: pl_gram.y:1370 #, c-format msgid "cursor FOR loop must use a bound cursor variable" msgstr "un bucle FOR en torno a un cursor debe usar un cursor enlazado (bound)" -#: pl_gram.y:1459 +#: pl_gram.y:1454 #, c-format msgid "integer FOR loop must have only one target variable" msgstr "un bucle FOR de un número entero debe tener sólo una variable de destino" -#: pl_gram.y:1495 +#: pl_gram.y:1490 #, c-format msgid "cannot specify REVERSE in query FOR loop" msgstr "no se puede especificar REVERSE en un bucle FOR de una consulta" -#: pl_gram.y:1642 +#: pl_gram.y:1637 #, c-format msgid "loop variable of FOREACH must be a known variable or list of variables" msgstr "la variable de bucle de FOREACH debe ser una variable conocida o una lista de variables conocidas" -#: pl_gram.y:1694 pl_gram.y:1731 pl_gram.y:1779 pl_gram.y:2776 pl_gram.y:2857 -#: pl_gram.y:2968 pl_gram.y:3721 +#: pl_gram.y:1689 pl_gram.y:1726 pl_gram.y:1774 pl_gram.y:2814 pl_gram.y:2896 +#: pl_gram.y:3007 pl_gram.y:3763 msgid "unexpected end of function definition" msgstr "fin inesperado de la definición de la función" -#: pl_gram.y:1799 pl_gram.y:1823 pl_gram.y:1839 pl_gram.y:1845 pl_gram.y:1934 -#: pl_gram.y:1942 pl_gram.y:1956 pl_gram.y:2051 pl_gram.y:2232 pl_gram.y:2315 -#: pl_gram.y:2449 pl_gram.y:3563 pl_gram.y:3624 pl_gram.y:3702 +#: pl_gram.y:1794 pl_gram.y:1818 pl_gram.y:1834 pl_gram.y:1840 pl_gram.y:1954 +#: pl_gram.y:1962 pl_gram.y:1976 pl_gram.y:2071 pl_gram.y:2252 pl_gram.y:2335 +#: pl_gram.y:2486 pl_gram.y:3604 pl_gram.y:3665 pl_gram.y:3744 msgid "syntax error" msgstr "error de sintaxis" -#: pl_gram.y:1827 pl_gram.y:1829 pl_gram.y:2236 pl_gram.y:2238 +#: pl_gram.y:1822 pl_gram.y:1824 pl_gram.y:2256 pl_gram.y:2258 msgid "invalid SQLSTATE code" msgstr "código SQLSTATE no válido" -#: pl_gram.y:1998 +#: pl_gram.y:2018 msgid "syntax error, expected \"FOR\"" msgstr "error de sintaxis, se esperaba «FOR»" -#: pl_gram.y:2060 +#: pl_gram.y:2080 #, c-format msgid "FETCH statement cannot return multiple rows" msgstr "la sentencia FETCH no puede retornar múltiples filas" -#: pl_gram.y:2116 +#: pl_gram.y:2136 #, c-format msgid "cursor variable must be a simple variable" msgstr "variable de cursor debe ser una variable simple" -#: pl_gram.y:2122 +#: pl_gram.y:2142 #, c-format msgid "variable \"%s\" must be of type cursor or refcursor" msgstr "la variable «%s» debe ser de tipo cursor o refcursor" -#: pl_gram.y:2290 +#: pl_gram.y:2310 msgid "label does not exist" msgstr "la etiqueta no existe" -#: pl_gram.y:2420 pl_gram.y:2431 +#: pl_gram.y:2457 pl_gram.y:2468 #, c-format msgid "\"%s\" is not a known variable" msgstr "«%s» no es una variable conocida" -#: pl_gram.y:2535 pl_gram.y:2545 pl_gram.y:2700 +#: pl_gram.y:2572 pl_gram.y:2582 pl_gram.y:2738 msgid "mismatched parentheses" msgstr "no coinciden los paréntesis" -#: pl_gram.y:2549 +#: pl_gram.y:2586 #, c-format msgid "missing \"%s\" at end of SQL expression" msgstr "falta «%s» al final de la expresión SQL" -#: pl_gram.y:2555 +#: pl_gram.y:2592 #, c-format msgid "missing \"%s\" at end of SQL statement" msgstr "falta «%s» al final de la sentencia SQL" -#: pl_gram.y:2572 +#: pl_gram.y:2609 msgid "missing expression" msgstr "expresión faltante" -#: pl_gram.y:2574 +#: pl_gram.y:2611 msgid "missing SQL statement" msgstr "sentencia SQL faltante" -#: pl_gram.y:2702 +#: pl_gram.y:2740 msgid "incomplete data type declaration" msgstr "declaración de tipo de dato incompleta" -#: pl_gram.y:2725 +#: pl_gram.y:2763 msgid "missing data type declaration" msgstr "declaración de tipo de dato faltante" -#: pl_gram.y:2781 +#: pl_gram.y:2819 msgid "INTO specified more than once" msgstr "INTO fue especificado más de una vez" -#: pl_gram.y:2949 +#: pl_gram.y:2988 msgid "expected FROM or IN" msgstr "se espera FROM o IN" -#: pl_gram.y:3009 +#: pl_gram.y:3048 #, c-format msgid "RETURN cannot have a parameter in function returning set" msgstr "RETURN no puede tener un parámetro en una función que retorna un conjunto" -#: pl_gram.y:3010 +#: pl_gram.y:3049 #, c-format msgid "Use RETURN NEXT or RETURN QUERY." msgstr "Use RETURN NEXT o RETURN QUERY." -#: pl_gram.y:3018 +#: pl_gram.y:3057 #, c-format msgid "RETURN cannot have a parameter in function with OUT parameters" msgstr "RETURN no puede tener parámetros en una función con parámetros OUT" -#: pl_gram.y:3027 +#: pl_gram.y:3066 #, c-format msgid "RETURN cannot have a parameter in function returning void" msgstr "RETURN no puede tener parámetro en una función que retorna void" -#: pl_gram.y:3089 +#: pl_gram.y:3126 #, c-format msgid "RETURN NEXT cannot have a parameter in function with OUT parameters" msgstr "RETURN NEXT no puede tener parámetros en una función con parámetros OUT" -#: pl_gram.y:3189 +#: pl_gram.y:3230 #, c-format msgid "\"%s\" is declared CONSTANT" msgstr "«%s» esta declarada como CONSTANT" -#: pl_gram.y:3251 pl_gram.y:3263 +#: pl_gram.y:3292 pl_gram.y:3304 #, c-format msgid "record or row variable cannot be part of multiple-item INTO list" msgstr "una variable de tipo record o row no puede ser parte de una lista INTO de múltiples elementos" -#: pl_gram.y:3308 +#: pl_gram.y:3349 #, c-format msgid "too many INTO variables specified" msgstr "se especificaron demasiadas variables INTO" -#: pl_gram.y:3516 +#: pl_gram.y:3557 #, c-format msgid "end label \"%s\" specified for unlabelled block" msgstr "etiqueta de término «%s» especificada para un bloque sin etiqueta" -#: pl_gram.y:3523 +#: pl_gram.y:3564 #, c-format msgid "end label \"%s\" differs from block's label \"%s\"" msgstr "etiqueta de término «%s» difiere de la etiqueta de bloque «%s»" -#: pl_gram.y:3558 +#: pl_gram.y:3599 #, c-format msgid "cursor \"%s\" has no arguments" msgstr "el cursor «%s» no tiene argumentos" -#: pl_gram.y:3572 +#: pl_gram.y:3613 #, c-format msgid "cursor \"%s\" has arguments" msgstr "el cursor «%s» tiene argumentos" -#: pl_gram.y:3614 +#: pl_gram.y:3655 #, c-format msgid "cursor \"%s\" has no argument named \"%s\"" msgstr "el cursor «%s» no tiene un argumento llamado «%s»" -#: pl_gram.y:3634 +#: pl_gram.y:3675 #, c-format msgid "value for parameter \"%s\" of cursor \"%s\" specified more than once" msgstr "el valor para el parámetro «%s» del cursor «%s» fue especificado más de una vez" -#: pl_gram.y:3659 +#: pl_gram.y:3700 #, c-format msgid "not enough arguments for cursor \"%s\"" msgstr "no hay suficientes argumentos para el cursor «%s»" -#: pl_gram.y:3666 +#: pl_gram.y:3707 #, c-format msgid "too many arguments for cursor \"%s\"" msgstr "demasiados argumentos para el cursor «%s»" -#: pl_gram.y:3753 +#: pl_gram.y:3795 msgid "unrecognized RAISE statement option" msgstr "no se reconoce la opción de sentencia RAISE" -#: pl_gram.y:3757 +#: pl_gram.y:3799 msgid "syntax error, expected \"=\"" msgstr "error de sintaxis, se esperaba «=»" -#: pl_handler.c:147 +#: pl_gram.y:3840 +#, c-format +msgid "too many parameters specified for RAISE" +msgstr "se especificaron demasiados parámetros a RAISE" + +#: pl_gram.y:3844 +#, c-format +msgid "too few parameters specified for RAISE" +msgstr "se especificaron muy pocos parámetros a RAISE" + +#: pl_handler.c:149 msgid "Sets handling of conflicts between PL/pgSQL variable names and table column names." msgstr "Determina el manejo de conflictos entre nombres de variables PL/pgSQL y nombres de columnas de tablas." -#: pl_handler.c:156 +#: pl_handler.c:158 msgid "Print information about parameters in the DETAIL part of the error messages generated on INTO ... STRICT failures." msgstr "Imprimir información de parámetros en la parte DETALLE de los mensajes de error generados por fallos en INTO ... STRICT." -#: pl_handler.c:164 +#: pl_handler.c:166 +msgid "Perform checks given in ASSERT statements." +msgstr "Ejecuta las verificaciones en sentencias ASSERT." + +#: pl_handler.c:174 msgid "List of programming constructs that should produce a warning." msgstr "Listado de estructuras de programación que deben dar una advertencia." -#: pl_handler.c:174 +#: pl_handler.c:184 msgid "List of programming constructs that should produce an error." msgstr "Listado de estructuras de programación que deben dar un error." #. translator: %s is typically the translation of "syntax error" -#: pl_scanner.c:554 +#: pl_scanner.c:621 #, c-format msgid "%s at end of input" msgstr "%s al final de la entrada" #. translator: first %s is typically the translation of "syntax error" -#: pl_scanner.c:570 +#: pl_scanner.c:637 #, c-format msgid "%s at or near \"%s\"" msgstr "%s en o cerca de «%s»" diff --git a/src/pl/plpgsql/src/po/it.po b/src/pl/plpgsql/src/po/it.po index f1170532dbf5f..122d709e272fa 100644 --- a/src/pl/plpgsql/src/po/it.po +++ b/src/pl/plpgsql/src/po/it.po @@ -17,10 +17,10 @@ # msgid "" msgstr "" -"Project-Id-Version: plpgsql (PostgreSQL) 9.4\n" +"Project-Id-Version: plpgsql (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-08-11 14:37+0000\n" -"PO-Revision-Date: 2014-08-12 00:12+0100\n" +"POT-Creation-Date: 2015-07-06 14:37+0000\n" +"PO-Revision-Date: 2015-07-07 03:18+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -31,461 +31,462 @@ msgstr "" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 1.5.4\n" -#: pl_comp.c:436 pl_handler.c:438 +#: pl_comp.c:432 pl_handler.c:448 #, c-format msgid "PL/pgSQL functions cannot accept type %s" msgstr "Le funzioni PL/pgSQL non accettano il tipo %s" -#: pl_comp.c:517 +#: pl_comp.c:513 #, c-format msgid "could not determine actual return type for polymorphic function \"%s\"" msgstr "determinazione del tipo di ritorno reale per la funzione polimorfa \"%s\" fallita" -#: pl_comp.c:547 +#: pl_comp.c:543 #, c-format msgid "trigger functions can only be called as triggers" msgstr "le funzioni trigger possono essere chiamate esclusivamente da trigger" -#: pl_comp.c:551 pl_handler.c:423 +#: pl_comp.c:547 pl_handler.c:433 #, c-format msgid "PL/pgSQL functions cannot return type %s" msgstr "Le funzioni PL/pgSQL non possono restituire un tipo %s" -#: pl_comp.c:594 +#: pl_comp.c:588 #, c-format msgid "trigger functions cannot have declared arguments" msgstr "Le funzioni trigger non possono avere argomenti dichiarati" -#: pl_comp.c:595 +#: pl_comp.c:589 #, c-format msgid "The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV instead." msgstr "Gli argomenti del trigger possono essere acceduti tramite TG_NARGS e TG_ARGV invece." -#: pl_comp.c:697 +#: pl_comp.c:691 #, c-format msgid "event trigger functions cannot have declared arguments" msgstr "le funzioni trigger di evento non possono avere argomenti dichiarati" -#: pl_comp.c:962 +#: pl_comp.c:944 #, c-format msgid "compilation of PL/pgSQL function \"%s\" near line %d" msgstr "compilazione della funzione PL/pgSQL \"%s\" in prossimità della riga %d" -#: pl_comp.c:985 +#: pl_comp.c:967 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "il nome di parametro \"%s\" è usato più di una volta" -#: pl_comp.c:1095 +#: pl_comp.c:1077 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "il riferimento alla colonna \"%s\" è ambiguo" -#: pl_comp.c:1097 +#: pl_comp.c:1079 #, c-format msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Può riferirsi o ad una variabile PL/pgSQL o ad una colonna di tabella." -#: pl_comp.c:1277 pl_comp.c:1305 pl_exec.c:4179 pl_exec.c:4524 pl_exec.c:4609 -#: pl_exec.c:4700 +#: pl_comp.c:1259 pl_comp.c:1287 pl_exec.c:4373 pl_exec.c:4722 pl_exec.c:4807 +#: pl_exec.c:4898 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "il record \"%s\" non ha un campo \"%s\"" -#: pl_comp.c:1836 +#: pl_comp.c:1818 #, c-format msgid "relation \"%s\" does not exist" msgstr "la relazione \"%s\" non esiste" -#: pl_comp.c:1945 +#: pl_comp.c:1927 #, c-format msgid "variable \"%s\" has pseudo-type %s" msgstr "la variabile \"%s\" ha lo pseudo-tipo %s" -#: pl_comp.c:2011 +#: pl_comp.c:1994 #, c-format msgid "relation \"%s\" is not a table" msgstr "la relazione \"%s\" non è una tabella" -#: pl_comp.c:2171 +#: pl_comp.c:2154 #, c-format msgid "type \"%s\" is only a shell" msgstr "il tipo \"%s\" non è completamente definito" -#: pl_comp.c:2245 pl_comp.c:2298 +#: pl_comp.c:2243 pl_comp.c:2296 #, c-format msgid "unrecognized exception condition \"%s\"" msgstr "condizione di eccezione \"%s\" sconosciuta" -#: pl_comp.c:2456 +#: pl_comp.c:2503 #, c-format msgid "could not determine actual argument type for polymorphic function \"%s\"" msgstr "il tipo reale dell'argomento non è determinabile per la funzione polimorfa \"%s\"" -#: pl_exec.c:277 pl_exec.c:537 pl_exec.c:816 +#: pl_exec.c:301 pl_exec.c:599 pl_exec.c:869 msgid "during initialization of execution state" msgstr "durante l'inizializzazione dello stato di esecuzione" -#: pl_exec.c:284 +#: pl_exec.c:308 msgid "while storing call arguments into local variables" msgstr "durante la memorizzazione degli argomenti di chiamata in variabili locali" -#: pl_exec.c:326 pl_exec.c:694 +#: pl_exec.c:393 pl_exec.c:747 msgid "during function entry" msgstr "durante l'ingresso nella funzione" -#: pl_exec.c:357 pl_exec.c:725 pl_exec.c:857 +#: pl_exec.c:424 pl_exec.c:778 pl_exec.c:906 #, c-format msgid "CONTINUE cannot be used outside a loop" msgstr "CONTINUE non può essere usato all'esterno di un ciclo" -#: pl_exec.c:361 +#: pl_exec.c:428 #, c-format msgid "control reached end of function without RETURN" msgstr "il controllo ha raggiunto la fine di una funzione senza incontrare alcun RETURN" -#: pl_exec.c:368 +#: pl_exec.c:435 msgid "while casting return value to function's return type" msgstr "durante la conversione del valore da restituire nel tipo restituito della funzione" -#: pl_exec.c:381 pl_exec.c:2843 +#: pl_exec.c:448 pl_exec.c:2948 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "la funzione che restituisce insiemi è chiamata in un contesto che non può accettare un insieme" -#: pl_exec.c:419 pl_exec.c:2686 +#: pl_exec.c:486 pl_exec.c:2790 msgid "returned record type does not match expected record type" msgstr "il tipo del record restituito non coincide con quello atteso" -#: pl_exec.c:479 pl_exec.c:733 pl_exec.c:865 +#: pl_exec.c:541 pl_exec.c:786 pl_exec.c:914 msgid "during function exit" msgstr "durante l'uscita della funzione" -#: pl_exec.c:729 pl_exec.c:861 +#: pl_exec.c:782 pl_exec.c:910 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "il controllo ha raggiunto la fine di una procedura trigger senza incontrare alcun RETURN" -#: pl_exec.c:738 +#: pl_exec.c:791 #, c-format msgid "trigger procedure cannot return a set" msgstr "la procedura trigger non può restituire un insieme" -#: pl_exec.c:760 +#: pl_exec.c:813 msgid "returned row structure does not match the structure of the triggering table" msgstr "la struttura della riga restituita non coincide con la struttura della tabella che ha generato il trigger" -#: pl_exec.c:916 +#. translator: last %s is a phrase such as "during statement block +#. local variable initialization" +#. +#: pl_exec.c:965 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "funzione PL/pgSQL %s riga %d %s" -#: pl_exec.c:927 +#. translator: last %s is a phrase such as "while storing call +#. arguments into local variables" +#. +#: pl_exec.c:976 #, c-format msgid "PL/pgSQL function %s %s" msgstr "funzione PL/pgSQL %s %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:935 +#: pl_exec.c:984 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "funzione PL/pgSQL %s riga %d a %s" -#: pl_exec.c:941 +#: pl_exec.c:990 #, c-format msgid "PL/pgSQL function %s" msgstr "funzione PL/pgSQL %s" -#: pl_exec.c:1050 +#: pl_exec.c:1100 msgid "during statement block local variable initialization" msgstr "durante l'inizializzazione di variabili locali del blocco di istruzioni" -#: pl_exec.c:1092 +#: pl_exec.c:1139 #, c-format msgid "variable \"%s\" declared NOT NULL cannot default to NULL" msgstr "la variabile \"%s\" dichiarata NOT NULL non può avere valore predefinito NULL" -#: pl_exec.c:1142 +#: pl_exec.c:1189 msgid "during statement block entry" msgstr "durante l'entrata nel blocco di istruzioni" -#: pl_exec.c:1163 +#: pl_exec.c:1210 msgid "during statement block exit" msgstr "durante l'uscita dal blocco di istruzioni" -#: pl_exec.c:1206 +#: pl_exec.c:1253 msgid "during exception cleanup" msgstr "durante la pulizia delle eccezioni" -#: pl_exec.c:1559 +#: pl_exec.c:1604 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "GET STACKED DIAGNOSTICS non può essere usato fuori da un gestore di eccezioni" -#: pl_exec.c:1760 +#: pl_exec.c:1800 #, c-format msgid "case not found" msgstr "caso non trovato" -#: pl_exec.c:1761 +#: pl_exec.c:1801 #, c-format msgid "CASE statement is missing ELSE part." msgstr "all'istruzione CASE manca la parte ELSE." -#: pl_exec.c:1913 +#: pl_exec.c:1955 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "il limite inferiore di un ciclo FOR non può essere nullo" -#: pl_exec.c:1928 +#: pl_exec.c:1971 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "il limite superiore di un ciclo FOR non può essere null" -#: pl_exec.c:1945 +#: pl_exec.c:1989 #, c-format msgid "BY value of FOR loop cannot be null" msgstr "il valore BY di un ciclo FOR non può essere null" -#: pl_exec.c:1951 +#: pl_exec.c:1995 #, c-format msgid "BY value of FOR loop must be greater than zero" msgstr "il valore BY di un ciclo FOR deve essere maggiore di zero" -#: pl_exec.c:2121 pl_exec.c:3730 +#: pl_exec.c:2164 pl_exec.c:3890 #, c-format msgid "cursor \"%s\" already in use" msgstr "il cursore \"%s\" è già in uso" -#: pl_exec.c:2144 pl_exec.c:3792 +#: pl_exec.c:2187 pl_exec.c:3952 #, c-format msgid "arguments given for cursor without arguments" msgstr "sono stati passati argomenti al cursore che non ne accetta" -#: pl_exec.c:2163 pl_exec.c:3811 +#: pl_exec.c:2206 pl_exec.c:3971 #, c-format msgid "arguments required for cursor" msgstr "sono richiesti argomenti per il cursore" -#: pl_exec.c:2250 +#: pl_exec.c:2291 #, c-format msgid "FOREACH expression must not be null" msgstr "l'espressione FOREACH non può essere vuota" -#: pl_exec.c:2256 +#: pl_exec.c:2297 #, c-format msgid "FOREACH expression must yield an array, not type %s" msgstr "l'espressione FOREACH deve generare un array, non il tipo %s" -#: pl_exec.c:2273 +#: pl_exec.c:2314 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "la dimensione della sezione (%d) è fuori dell'intervallo valido 0..%d" -#: pl_exec.c:2300 +#: pl_exec.c:2341 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "la variabile del ciclo FOREACH ... SLICE dev'essere di tipo array" -#: pl_exec.c:2304 +#: pl_exec.c:2345 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "la variabile di ciclo FOREACH non può essere un tipo array" -#: pl_exec.c:2525 pl_exec.c:2678 +#: pl_exec.c:2533 pl_exec.c:2615 pl_exec.c:2782 #, c-format msgid "cannot return non-composite value from function returning composite type" msgstr "non è possibile restituire valori non compositi da una funzione che restituisce un tipo composito" -#: pl_exec.c:2569 pl_gram.y:3075 +#: pl_exec.c:2659 pl_gram.y:3112 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "non si può usare RETURN NEXT in una funzione non-SETOF" -#: pl_exec.c:2597 pl_exec.c:2720 +#: pl_exec.c:2693 pl_exec.c:2824 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "è stato fornito un risultato di tipo non corretto a RETURN NEXT" -#: pl_exec.c:2620 pl_exec.c:4166 pl_exec.c:4491 pl_exec.c:4517 pl_exec.c:4583 -#: pl_exec.c:4602 pl_exec.c:4670 pl_exec.c:4693 +#: pl_exec.c:2722 pl_exec.c:4360 pl_exec.c:4689 pl_exec.c:4715 pl_exec.c:4781 +#: pl_exec.c:4800 pl_exec.c:4868 pl_exec.c:4891 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "il record \"%s\" non è stato ancora assegnato" -#: pl_exec.c:2622 pl_exec.c:4168 pl_exec.c:4493 pl_exec.c:4519 pl_exec.c:4585 -#: pl_exec.c:4604 pl_exec.c:4672 pl_exec.c:4695 +#: pl_exec.c:2724 pl_exec.c:4362 pl_exec.c:4691 pl_exec.c:4717 pl_exec.c:4783 +#: pl_exec.c:4802 pl_exec.c:4870 pl_exec.c:4893 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "La struttura della tupla di un record non ancora assegnato è indeterminata." -#: pl_exec.c:2626 pl_exec.c:2646 +#: pl_exec.c:2728 pl_exec.c:2748 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "è stato fornito un record di tipo non corretto a RETURN NEXT" -#: pl_exec.c:2738 +#: pl_exec.c:2843 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "RETURN NEXT deve avere un parametro" -#: pl_exec.c:2771 pl_gram.y:3133 +#: pl_exec.c:2876 pl_gram.y:3174 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "non si può usare RETURN QUERY in una funzione non-SETOF" -#: pl_exec.c:2791 +#: pl_exec.c:2896 msgid "structure of query does not match function result type" msgstr "la struttura della query non coincide con il tipo del risultato della funzione" -#: pl_exec.c:2871 pl_exec.c:3003 +#: pl_exec.c:2976 pl_exec.c:3106 #, c-format msgid "RAISE option already specified: %s" msgstr "opzione RAISE già specificata: %s" -#: pl_exec.c:2904 +#: pl_exec.c:3009 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "RAISE senza parametri non può essere usato all'esterno di un gestore di eccezioni" -#: pl_exec.c:2945 -#, c-format -msgid "too few parameters specified for RAISE" -msgstr "numero di parametri non sufficiente specificati per RAISE" - -#: pl_exec.c:2973 -#, c-format -msgid "too many parameters specified for RAISE" -msgstr "troppi parametri specificati per RAISE" - -#: pl_exec.c:2993 +#: pl_exec.c:3096 #, c-format msgid "RAISE statement option cannot be null" msgstr "l'opzione dell'istruzione RAISE non può essere nulla" -#: pl_exec.c:3064 +#: pl_exec.c:3167 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3241 pl_exec.c:3378 pl_exec.c:3569 +#: pl_exec.c:3240 +#, c-format +msgid "assertion failed" +msgstr "asserzione fallita" + +#: pl_exec.c:3396 pl_exec.c:3540 pl_exec.c:3729 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "non è possibile usare COPY verso/da un client in PL/pgSQL" -#: pl_exec.c:3245 pl_exec.c:3382 pl_exec.c:3573 +#: pl_exec.c:3400 pl_exec.c:3544 pl_exec.c:3733 #, c-format msgid "cannot begin/end transactions in PL/pgSQL" msgstr "non si possono avviare/terminare transazioni in PL/pgSQL" -#: pl_exec.c:3246 pl_exec.c:3383 pl_exec.c:3574 +#: pl_exec.c:3401 pl_exec.c:3545 pl_exec.c:3734 #, c-format msgid "Use a BEGIN block with an EXCEPTION clause instead." msgstr "Utilizza invece un blocco BEGIN con una clausola EXCEPTION." -#: pl_exec.c:3406 pl_exec.c:3598 +#: pl_exec.c:3568 pl_exec.c:3758 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO usato con un comando che non restituisce alcun dato" -#: pl_exec.c:3434 pl_exec.c:3626 +#: pl_exec.c:3596 pl_exec.c:3786 #, c-format msgid "query returned no rows" msgstr "la query non ha restituito alcuna riga" -#: pl_exec.c:3453 pl_exec.c:3645 +#: pl_exec.c:3615 pl_exec.c:3805 #, c-format msgid "query returned more than one row" msgstr "la query ha restituito più di una riga" -#: pl_exec.c:3470 +#: pl_exec.c:3632 #, c-format msgid "query has no destination for result data" msgstr "la query non ha una destinazione per i dati restituiti" -#: pl_exec.c:3471 +#: pl_exec.c:3633 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "Se vuoi scartare i risultati di una SELECT, utilizza PERFORM." -#: pl_exec.c:3505 pl_exec.c:6480 +#: pl_exec.c:3665 pl_exec.c:7063 #, c-format msgid "query string argument of EXECUTE is null" msgstr "l'argomento della query di EXECUTE è nullo" -#: pl_exec.c:3561 +#: pl_exec.c:3721 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "EXECUTE di SELECT ... INTO non è implementato" -#: pl_exec.c:3562 +#: pl_exec.c:3722 #, c-format msgid "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead." msgstr "Potresti usare invece EXECUTE ... INTO oppure EXECUTE CREATE TABLE ... AS." -#: pl_exec.c:3874 pl_exec.c:3966 +#: pl_exec.c:4034 pl_exec.c:4126 #, c-format msgid "cursor variable \"%s\" is null" msgstr "la variabile del cursore \"%s\" è nulla" -#: pl_exec.c:3881 pl_exec.c:3973 +#: pl_exec.c:4041 pl_exec.c:4133 #, c-format msgid "cursor \"%s\" does not exist" msgstr "il cursore \"%s\" non esiste" -#: pl_exec.c:3895 +#: pl_exec.c:4055 #, c-format msgid "relative or absolute cursor position is null" msgstr "la posizione relativa o assoluta del cursore è nulla" -#: pl_exec.c:4062 +#: pl_exec.c:4235 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "il valore null non può essere assegnato alla variabile \"%s\" dichiarata NOT NULL" -#: pl_exec.c:4109 +#: pl_exec.c:4304 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "non è possibile assegnare un valore non composito ad una variabile di tipo row" -#: pl_exec.c:4133 +#: pl_exec.c:4328 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "non è possibile assegnare un valore non composito ad una variabile di tipo record" -#: pl_exec.c:4278 +#: pl_exec.c:4471 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "il numero di dimensioni dell'array (%d) eccede il massimo consentito (%d)" -#: pl_exec.c:4310 +#: pl_exec.c:4503 #, c-format msgid "subscripted object is not an array" msgstr "l'oggetto del quale è stato richiesto un elemento non è un array" -#: pl_exec.c:4347 +#: pl_exec.c:4540 #, c-format msgid "array subscript in assignment must not be null" msgstr "l'indice di un array nell'assegnamento non può essere nullo" -#: pl_exec.c:4806 +#: pl_exec.c:5007 #, c-format msgid "query \"%s\" did not return data" msgstr "la query \"%s\" non ha restituito dati" -#: pl_exec.c:4814 +#: pl_exec.c:5015 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" msgstr[0] "la query \"%s\" ha restituito %d colonna" msgstr[1] "la query \"%s\" ha restituito %d colonne" -#: pl_exec.c:4840 +#: pl_exec.c:5042 #, c-format msgid "query \"%s\" returned more than one row" msgstr "la query \"%s\" ha restituito più di una riga" -#: pl_exec.c:4897 +#: pl_exec.c:5104 #, c-format msgid "query \"%s\" is not a SELECT" msgstr "la query \"%s\" non è una SELECT" @@ -514,300 +515,314 @@ msgstr "ciclo FOR su cursore" msgid "FOREACH over array" msgstr "FOREACH su array" -#: pl_funcs.c:248 +#: pl_funcs.c:250 msgid "SQL statement" msgstr "istruzione SQL" -#: pl_funcs.c:250 +#: pl_funcs.c:252 msgid "EXECUTE statement" msgstr "istruzione EXECUTE" -#: pl_funcs.c:252 +#: pl_funcs.c:254 msgid "FOR over EXECUTE statement" msgstr "ciclo FOR su una istruzione EXECUTE" -#: pl_gram.y:469 +#: pl_gram.y:472 #, c-format msgid "block label must be placed before DECLARE, not after" msgstr "l'etichetta del blocco dev'essere messa prima di DECLARE, non dopo" -#: pl_gram.y:489 +#: pl_gram.y:492 #, c-format msgid "collations are not supported by type %s" msgstr "gli ordinamenti non sono supportati dal tipo %s" -#: pl_gram.y:504 +#: pl_gram.y:507 #, c-format msgid "row or record variable cannot be CONSTANT" msgstr "variabile di tipo ROW o RECORD non può essere CONSTANT" -#: pl_gram.y:514 +#: pl_gram.y:517 #, c-format msgid "row or record variable cannot be NOT NULL" msgstr "la variabile di tipo ROW o RECORD non può essere NOT NULL" -#: pl_gram.y:525 +#: pl_gram.y:528 #, c-format msgid "default value for row or record variable is not supported" msgstr "il valore di default per variabili di tipo ROW o RECORD non è supportato" -#: pl_gram.y:670 pl_gram.y:685 pl_gram.y:711 +#: pl_gram.y:673 pl_gram.y:688 pl_gram.y:714 #, c-format msgid "variable \"%s\" does not exist" msgstr "la variabile \"%s\" non esiste" -#: pl_gram.y:729 pl_gram.y:757 +#: pl_gram.y:732 pl_gram.y:760 msgid "duplicate declaration" msgstr "dichiarazione duplicata" -#: pl_gram.y:740 pl_gram.y:768 +#: pl_gram.y:743 pl_gram.y:771 #, c-format msgid "variable \"%s\" shadows a previously defined variable" msgstr "la variabile \"%s\" nasconde una variabile definita precedentemente" -#: pl_gram.y:955 +#: pl_gram.y:950 #, c-format msgid "diagnostics item %s is not allowed in GET STACKED DIAGNOSTICS" msgstr "l'elemento diagnostico %s non è consentito in GET STACKED DIAGNOSTICS" -#: pl_gram.y:973 +#: pl_gram.y:968 #, c-format msgid "diagnostics item %s is not allowed in GET CURRENT DIAGNOSTICS" msgstr "l'elemento diagnostico %s non è consentito in GET CURRENT DIAGNOSTICS" -#: pl_gram.y:1071 +#: pl_gram.y:1066 msgid "unrecognized GET DIAGNOSTICS item" msgstr "elemento GET DIAGNOSTICS sconosciuto" -#: pl_gram.y:1082 pl_gram.y:3320 +#: pl_gram.y:1077 pl_gram.y:3361 #, c-format msgid "\"%s\" is not a scalar variable" msgstr "\"%s\" non è una variabile scalare" -#: pl_gram.y:1334 pl_gram.y:1528 +#: pl_gram.y:1329 pl_gram.y:1523 #, c-format msgid "loop variable of loop over rows must be a record or row variable or list of scalar variables" msgstr "variabile del ciclo sulle righe deve essere una variabile di tipo row o record o una lista di variabili scalari" -#: pl_gram.y:1368 +#: pl_gram.y:1363 #, c-format msgid "cursor FOR loop must have only one target variable" msgstr "il cursore FOR nel ciclo deve avere solo una variabile di destinazione" -#: pl_gram.y:1375 +#: pl_gram.y:1370 #, c-format msgid "cursor FOR loop must use a bound cursor variable" msgstr "il cursore FOR nel ciclo deve usare una variabile cursore vincolata" -#: pl_gram.y:1459 +#: pl_gram.y:1454 #, c-format msgid "integer FOR loop must have only one target variable" msgstr "il valore integer del ciclo FOR deve avere solo una variabile di destinazione" -#: pl_gram.y:1495 +#: pl_gram.y:1490 #, c-format msgid "cannot specify REVERSE in query FOR loop" msgstr "non puoi specificare REVERSE nel ciclo FOR della query" -#: pl_gram.y:1642 +#: pl_gram.y:1637 #, c-format msgid "loop variable of FOREACH must be a known variable or list of variables" msgstr "la variabile del ciclo FOREACH dev'essere una variabile o lista di variabili conosciuta" -#: pl_gram.y:1694 pl_gram.y:1731 pl_gram.y:1779 pl_gram.y:2776 pl_gram.y:2857 -#: pl_gram.y:2968 pl_gram.y:3721 +#: pl_gram.y:1689 pl_gram.y:1726 pl_gram.y:1774 pl_gram.y:2814 pl_gram.y:2896 +#: pl_gram.y:3007 pl_gram.y:3763 msgid "unexpected end of function definition" msgstr "fine della definizione della funzione inaspettata" -#: pl_gram.y:1799 pl_gram.y:1823 pl_gram.y:1839 pl_gram.y:1845 pl_gram.y:1934 -#: pl_gram.y:1942 pl_gram.y:1956 pl_gram.y:2051 pl_gram.y:2232 pl_gram.y:2315 -#: pl_gram.y:2449 pl_gram.y:3563 pl_gram.y:3624 pl_gram.y:3702 +#: pl_gram.y:1794 pl_gram.y:1818 pl_gram.y:1834 pl_gram.y:1840 pl_gram.y:1954 +#: pl_gram.y:1962 pl_gram.y:1976 pl_gram.y:2071 pl_gram.y:2252 pl_gram.y:2335 +#: pl_gram.y:2486 pl_gram.y:3604 pl_gram.y:3665 pl_gram.y:3744 msgid "syntax error" msgstr "errore di sintassi" -#: pl_gram.y:1827 pl_gram.y:1829 pl_gram.y:2236 pl_gram.y:2238 +#: pl_gram.y:1822 pl_gram.y:1824 pl_gram.y:2256 pl_gram.y:2258 msgid "invalid SQLSTATE code" msgstr "codice SQLSTATE non valido" -#: pl_gram.y:1998 +#: pl_gram.y:2018 msgid "syntax error, expected \"FOR\"" msgstr "errore di sintassi, atteso \"FOR\"" -#: pl_gram.y:2060 +#: pl_gram.y:2080 #, c-format msgid "FETCH statement cannot return multiple rows" msgstr "l'istruzione FETCH non può restituire più di una riga" -#: pl_gram.y:2116 +#: pl_gram.y:2136 #, c-format msgid "cursor variable must be a simple variable" msgstr "la variabile cursore deve essere una variabile semplice" -#: pl_gram.y:2122 +#: pl_gram.y:2142 #, c-format msgid "variable \"%s\" must be of type cursor or refcursor" msgstr "la variabile \"%s\" deve essere di tipo cursor o refcursor" -#: pl_gram.y:2290 +#: pl_gram.y:2310 msgid "label does not exist" msgstr "etichetta non esistente" -#: pl_gram.y:2420 pl_gram.y:2431 +#: pl_gram.y:2457 pl_gram.y:2468 #, c-format msgid "\"%s\" is not a known variable" msgstr "\"%s\" non è una variabile conosciuta" -#: pl_gram.y:2535 pl_gram.y:2545 pl_gram.y:2700 +#: pl_gram.y:2572 pl_gram.y:2582 pl_gram.y:2738 msgid "mismatched parentheses" msgstr "le parentesi non corrispondono" -#: pl_gram.y:2549 +#: pl_gram.y:2586 #, c-format msgid "missing \"%s\" at end of SQL expression" msgstr "manca \"%s\" alla fine della espressione SQL" -#: pl_gram.y:2555 +#: pl_gram.y:2592 #, c-format msgid "missing \"%s\" at end of SQL statement" msgstr "manca \"%s\" alla fine dell'istruzione SQL" -#: pl_gram.y:2572 +#: pl_gram.y:2609 msgid "missing expression" msgstr "espressione mancante" -#: pl_gram.y:2574 +#: pl_gram.y:2611 msgid "missing SQL statement" msgstr "istruzione SQL mancante" -#: pl_gram.y:2702 +#: pl_gram.y:2740 msgid "incomplete data type declaration" msgstr "dichiarazione del tipo di dati incompleta" -#: pl_gram.y:2725 +#: pl_gram.y:2763 msgid "missing data type declaration" msgstr "manca la dichiarazione del tipo di dati" -#: pl_gram.y:2781 +#: pl_gram.y:2819 msgid "INTO specified more than once" msgstr "INTO specificato più di una volta" -#: pl_gram.y:2949 +#: pl_gram.y:2988 msgid "expected FROM or IN" msgstr "atteso FROM o IN" -#: pl_gram.y:3009 +#: pl_gram.y:3048 #, c-format msgid "RETURN cannot have a parameter in function returning set" msgstr "RETURN non può avere un parametro in una funzione che restituisce insiemi" -#: pl_gram.y:3010 +#: pl_gram.y:3049 #, c-format msgid "Use RETURN NEXT or RETURN QUERY." msgstr "Usa RETURN NEXT o RETURN QUERY." -#: pl_gram.y:3018 +#: pl_gram.y:3057 #, c-format msgid "RETURN cannot have a parameter in function with OUT parameters" msgstr "RETURN non può avere un parametro in una funzione con parametri OUT" # Il fatto che una funzione che restituisce void sia chiamato "procedura" è un visual-basic-ismo che si può dimenticare -#: pl_gram.y:3027 +#: pl_gram.y:3066 #, c-format msgid "RETURN cannot have a parameter in function returning void" msgstr "RETURN non può avere un parametro in una funzione che restituisce void" -#: pl_gram.y:3089 +#: pl_gram.y:3126 #, c-format msgid "RETURN NEXT cannot have a parameter in function with OUT parameters" msgstr "RETURN NEXT non può avere un parametro in una funzione con parametri OUT" -#: pl_gram.y:3189 +#: pl_gram.y:3230 #, c-format msgid "\"%s\" is declared CONSTANT" msgstr "\"%s\" è dichiarata CONSTANT" -#: pl_gram.y:3251 pl_gram.y:3263 +#: pl_gram.y:3292 pl_gram.y:3304 #, c-format msgid "record or row variable cannot be part of multiple-item INTO list" msgstr "un record o variabile riga on può fare parte di una lista INTO con più di un elemento" -#: pl_gram.y:3308 +#: pl_gram.y:3349 #, c-format msgid "too many INTO variables specified" msgstr "troppe variabili INTO specificate" -#: pl_gram.y:3516 +#: pl_gram.y:3557 #, c-format msgid "end label \"%s\" specified for unlabelled block" msgstr "etichetta finale \"%s\" specificata per un blocco senza etichetta" -#: pl_gram.y:3523 +#: pl_gram.y:3564 #, c-format msgid "end label \"%s\" differs from block's label \"%s\"" msgstr "l'etichetta finale \"%s\" differisce da quella del blocco \"%s\"" -#: pl_gram.y:3558 +#: pl_gram.y:3599 #, c-format msgid "cursor \"%s\" has no arguments" msgstr "il cursore \"%s\" non ha argomenti" -#: pl_gram.y:3572 +#: pl_gram.y:3613 #, c-format msgid "cursor \"%s\" has arguments" msgstr "il cursore \"%s\" ha argomenti" -#: pl_gram.y:3614 +#: pl_gram.y:3655 #, c-format msgid "cursor \"%s\" has no argument named \"%s\"" msgstr "il cursore \"%s\" non ha un argomento di nome \"%s\"" -#: pl_gram.y:3634 +#: pl_gram.y:3675 #, c-format msgid "value for parameter \"%s\" of cursor \"%s\" specified more than once" msgstr "il valore per il parametro \"%s\" del cursore \"%s\" è stato specificato più di una volta" -#: pl_gram.y:3659 +#: pl_gram.y:3700 #, c-format msgid "not enough arguments for cursor \"%s\"" msgstr "numero di argomenti non sufficiente per il cursore \"%s\"" -#: pl_gram.y:3666 +#: pl_gram.y:3707 #, c-format msgid "too many arguments for cursor \"%s\"" msgstr "troppi argomenti per il cursore \"%s\"" -#: pl_gram.y:3753 +#: pl_gram.y:3795 msgid "unrecognized RAISE statement option" msgstr "opzione dell'istruzione RAISE sconosciuta" -#: pl_gram.y:3757 +#: pl_gram.y:3799 msgid "syntax error, expected \"=\"" msgstr "errore di sintassi, atteso \"=\"" -#: pl_handler.c:147 +#: pl_gram.y:3840 +#, c-format +msgid "too many parameters specified for RAISE" +msgstr "troppi parametri specificati per RAISE" + +#: pl_gram.y:3844 +#, c-format +msgid "too few parameters specified for RAISE" +msgstr "numero di parametri non sufficiente specificati per RAISE" + +#: pl_handler.c:149 msgid "Sets handling of conflicts between PL/pgSQL variable names and table column names." msgstr "Imposta la gestione dei conflitti tra nomi di variabili PL/pgSQL e nomi di colonne di tabella." -#: pl_handler.c:156 +#: pl_handler.c:158 msgid "Print information about parameters in the DETAIL part of the error messages generated on INTO ... STRICT failures." msgstr "Stampa informazioni sui parametri nella parte DETAIL del messaggio di errore generato su errori in INTO ... STRICT." -#: pl_handler.c:164 +#: pl_handler.c:166 +msgid "Perform checks given in ASSERT statements." +msgstr "Effettua i controlli dati nelle istruzioni ASSERT." + +#: pl_handler.c:174 msgid "List of programming constructs that should produce a warning." msgstr "Elenco dei costrutti di programmazione che dovrebbero generare un avvertimento." -#: pl_handler.c:174 +#: pl_handler.c:184 msgid "List of programming constructs that should produce an error." msgstr "Elenco dei costrutti di programmazione che dovrebbero generare un errore." #. translator: %s is typically the translation of "syntax error" -#: pl_scanner.c:554 +#: pl_scanner.c:621 #, c-format msgid "%s at end of input" msgstr "%s alla fine dell'input" #. translator: first %s is typically the translation of "syntax error" -#: pl_scanner.c:570 +#: pl_scanner.c:637 #, c-format msgid "%s at or near \"%s\"" msgstr "%s a o presso \"%s\"" diff --git a/src/pl/plpgsql/src/po/pl.po b/src/pl/plpgsql/src/po/pl.po index 74f2fe96797e2..86c28186dc867 100644 --- a/src/pl/plpgsql/src/po/pl.po +++ b/src/pl/plpgsql/src/po/pl.po @@ -2,13 +2,13 @@ # Copyright (C) 2011 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. # Begina Felicysym , 2011, 2012, 2013. -# grzegorz , 2014. +# grzegorz , 2014, 2015. msgid "" msgstr "" "Project-Id-Version: plpgsql (PostgreSQL 9.1)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-11-10 20:37+0000\n" -"PO-Revision-Date: 2014-11-10 23:00+0200\n" +"POT-Creation-Date: 2015-08-15 18:37+0000\n" +"PO-Revision-Date: 2015-08-16 16:58+0200\n" "Last-Translator: grzegorz \n" "Language-Team: begina.felicysym@wp.eu\n" "Language: pl\n" @@ -19,449 +19,455 @@ msgstr "" "|| n%100>=20) ? 1 : 2);\n" "X-Generator: Virtaal 0.7.1\n" -#: pl_comp.c:436 pl_handler.c:438 +#: pl_comp.c:432 pl_handler.c:448 #, c-format msgid "PL/pgSQL functions cannot accept type %s" msgstr "funkcje PL/pgSQL nie obsługują typu %s" -#: pl_comp.c:517 +#: pl_comp.c:513 #, c-format msgid "could not determine actual return type for polymorphic function \"%s\"" msgstr "nie można określić, jaki typ zwraca funkcja polimorficzna \"%s\"" -#: pl_comp.c:547 +#: pl_comp.c:543 #, c-format msgid "trigger functions can only be called as triggers" msgstr "procedury wyzwalaczy mogą być wywoływane jedynie przez wyzwalacze" -#: pl_comp.c:551 pl_handler.c:423 +#: pl_comp.c:547 pl_handler.c:433 #, c-format msgid "PL/pgSQL functions cannot return type %s" msgstr "funkcje PL/pgSQL nie mogą zwracać wartości typu %s" -#: pl_comp.c:594 +#: pl_comp.c:588 #, c-format msgid "trigger functions cannot have declared arguments" msgstr "funkcje wyzwalaczy nie mogą przyjmować żadnych argumentów" -#: pl_comp.c:595 +#: pl_comp.c:589 #, c-format msgid "The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV instead." msgstr "Argumenty dla procedury wyzwalacza są umieszczane w zmiennych TG_NARGS oraz TG_ARGV." -#: pl_comp.c:697 +#: pl_comp.c:691 #, c-format msgid "event trigger functions cannot have declared arguments" msgstr "funkcje wyzwalaczy zdarzeń nie mogą przyjmować żadnych argumentów" -#: pl_comp.c:962 +#: pl_comp.c:944 #, c-format msgid "compilation of PL/pgSQL function \"%s\" near line %d" msgstr "kompilacja funkcji PL/pgSQL \"%s\", w okolicach linii %d" -#: pl_comp.c:985 +#: pl_comp.c:967 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "nazwa argumentu \"%s\" użyta więcej niż raz" -#: pl_comp.c:1095 +#: pl_comp.c:1077 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "nazwa kolumny \"%s\" jest niejednoznaczna" -#: pl_comp.c:1097 +#: pl_comp.c:1079 #, c-format msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Nazwa może odnosić się do zmiennej PL/pgSQL albo kolumny tabeli." -#: pl_comp.c:1277 pl_comp.c:1305 pl_exec.c:4179 pl_exec.c:4524 pl_exec.c:4609 -#: pl_exec.c:4700 +#: pl_comp.c:1259 pl_comp.c:1287 pl_exec.c:4432 pl_exec.c:4781 pl_exec.c:4866 +#: pl_exec.c:4957 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "rekord \"%s\" nie posiada pola \"%s\"" -#: pl_comp.c:1836 +#: pl_comp.c:1818 #, c-format msgid "relation \"%s\" does not exist" msgstr "relacja \"%s\" nie istnieje" -#: pl_comp.c:1945 +#: pl_comp.c:1927 #, c-format msgid "variable \"%s\" has pseudo-type %s" msgstr "zmienna \"%s\" jest psuedo-typu %s" -#: pl_comp.c:2011 +#: pl_comp.c:1994 #, c-format msgid "relation \"%s\" is not a table" msgstr "relacja \"%s\" nie jest tabelą" -#: pl_comp.c:2171 +#: pl_comp.c:2154 #, c-format msgid "type \"%s\" is only a shell" msgstr "typ \"%s\" jest jedynie powłoką" -#: pl_comp.c:2245 pl_comp.c:2298 +#: pl_comp.c:2243 pl_comp.c:2296 #, c-format msgid "unrecognized exception condition \"%s\"" msgstr "nieznany warunek wyjątku \"%s\"" -#: pl_comp.c:2456 +#: pl_comp.c:2503 #, c-format msgid "could not determine actual argument type for polymorphic function \"%s\"" msgstr "nie można określić typu argumentu dla funkcji polimorficznej \"%s\"" -#: pl_exec.c:277 pl_exec.c:537 pl_exec.c:816 +#: pl_exec.c:325 pl_exec.c:623 pl_exec.c:893 msgid "during initialization of execution state" msgstr "podczas inicjacji stanu wykonywania" -#: pl_exec.c:284 +#: pl_exec.c:332 msgid "while storing call arguments into local variables" msgstr "podczas przepisywania argumentów wywołania do lokalnych zmiennych" -#: pl_exec.c:326 pl_exec.c:694 +#: pl_exec.c:417 pl_exec.c:771 msgid "during function entry" msgstr "podczas wchodzenia do funkcji" -#: pl_exec.c:357 pl_exec.c:725 pl_exec.c:857 +#: pl_exec.c:448 pl_exec.c:802 pl_exec.c:930 #, c-format msgid "CONTINUE cannot be used outside a loop" msgstr "instrukcja CONTINUE nie może być użyta poza pętlą" -#: pl_exec.c:361 +#: pl_exec.c:452 #, c-format msgid "control reached end of function without RETURN" msgstr "osiągnięto koniec funkcji, brakuje instrukcji RETURN" -#: pl_exec.c:368 +#: pl_exec.c:459 msgid "while casting return value to function's return type" msgstr "podczas rzutowania zwracanej wartości na typ wyniku funkcji" -#: pl_exec.c:381 pl_exec.c:2843 +#: pl_exec.c:472 pl_exec.c:2972 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "funkcja zwracająca zbiór rekordów wywołana w kontekście, w którym nie jest to dopuszczalne" -#: pl_exec.c:419 pl_exec.c:2686 +#: pl_exec.c:510 pl_exec.c:2814 msgid "returned record type does not match expected record type" msgstr "został zwrócony rekord o niewłaściwym typie" -#: pl_exec.c:479 pl_exec.c:733 pl_exec.c:865 +#: pl_exec.c:565 pl_exec.c:810 pl_exec.c:938 msgid "during function exit" msgstr "podczas wyjścia z funkcji" -#: pl_exec.c:729 pl_exec.c:861 +#: pl_exec.c:806 pl_exec.c:934 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "osiągnięto koniec funkcji wyzwalacza, brakuje instrukcji RETURN" -#: pl_exec.c:738 +#: pl_exec.c:815 #, c-format msgid "trigger procedure cannot return a set" msgstr "procedura wyzwalacza nie może zwracać zbioru rekordów" -#: pl_exec.c:760 +#: pl_exec.c:837 msgid "returned row structure does not match the structure of the triggering table" msgstr "struktura zwróconego rekordu nie odpowiada strukturze tabeli dla której wywołano wyzwalacz" -#: pl_exec.c:916 +#. translator: last %s is a phrase such as "during statement block +#. local variable initialization" +#. +#: pl_exec.c:989 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "funkcja PL/pgSQL %s, wiersz %d %s" -#: pl_exec.c:927 +#. translator: last %s is a phrase such as "while storing call +#. arguments into local variables" +#. +#: pl_exec.c:1000 #, c-format msgid "PL/pgSQL function %s %s" msgstr "funkcja PL/pgSQL %s %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:935 +#: pl_exec.c:1008 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "funkcja PL/pgSQL %s, wiersz %d w %s" -#: pl_exec.c:941 +#: pl_exec.c:1014 #, c-format msgid "PL/pgSQL function %s" msgstr "funkcja PL/pgSQL %s" -#: pl_exec.c:1050 +#: pl_exec.c:1124 msgid "during statement block local variable initialization" msgstr "podczas inicjacji zmiennych lokalnych bloku instrukcji" -#: pl_exec.c:1092 +#: pl_exec.c:1163 #, c-format msgid "variable \"%s\" declared NOT NULL cannot default to NULL" msgstr "zmienna \"%s\" zadeklarowana jako NOT NULL nie może mieć wartości domyślnej NULL" -#: pl_exec.c:1142 +#: pl_exec.c:1213 msgid "during statement block entry" msgstr "podczas wchodzenia do bloku instrukcji" -#: pl_exec.c:1163 +#: pl_exec.c:1234 msgid "during statement block exit" msgstr "podczas opuszczania bloku instrukcji" -#: pl_exec.c:1206 +#: pl_exec.c:1277 msgid "during exception cleanup" msgstr "podczas kończenia obsługi wyjątków" -#: pl_exec.c:1559 +#: pl_exec.c:1628 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "GET STACKED DIAGNOSTICS nie może być wykorzystane poza uchwytem wyjątku" -#: pl_exec.c:1760 +#: pl_exec.c:1824 #, c-format msgid "case not found" msgstr "etykieta instrukcji wyboru nie znaleziona" -#: pl_exec.c:1761 +#: pl_exec.c:1825 #, c-format msgid "CASE statement is missing ELSE part." msgstr "w wyrażeniu CASE brakuje części ELSE." -#: pl_exec.c:1913 +#: pl_exec.c:1979 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "początkowa wartość dla pętli FOR nie może być NULL" -#: pl_exec.c:1928 +#: pl_exec.c:1995 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "końcowa wartość dla pętli FOR nie może być NULL" -#: pl_exec.c:1945 +#: pl_exec.c:2013 #, c-format msgid "BY value of FOR loop cannot be null" msgstr "wartość wyrażenia BY w pętli FOR nie może być NULL" -#: pl_exec.c:1951 +#: pl_exec.c:2019 #, c-format msgid "BY value of FOR loop must be greater than zero" msgstr "wartość wyrażenia BY w pętli FOR musi być większa od zera" -#: pl_exec.c:2121 pl_exec.c:3730 +#: pl_exec.c:2188 pl_exec.c:3949 #, c-format msgid "cursor \"%s\" already in use" msgstr "kursor \"%s\" jest już używany" -#: pl_exec.c:2144 pl_exec.c:3792 +#: pl_exec.c:2211 pl_exec.c:4011 #, c-format msgid "arguments given for cursor without arguments" msgstr "podano argumenty dla kursora nie przyjmującego żadnych argumentów" -#: pl_exec.c:2163 pl_exec.c:3811 +#: pl_exec.c:2230 pl_exec.c:4030 #, c-format msgid "arguments required for cursor" msgstr "parametry wymagane dla kursora" -#: pl_exec.c:2250 +#: pl_exec.c:2315 #, c-format msgid "FOREACH expression must not be null" msgstr "wyrażenie w instrukcji FOREACH nie może być NULL" -#: pl_exec.c:2256 +#: pl_exec.c:2321 #, c-format msgid "FOREACH expression must yield an array, not type %s" msgstr "typem wyrażenie w instrukcji FOREACH musi być tablica, nie %s" -#: pl_exec.c:2273 +#: pl_exec.c:2338 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "wymiar wycinka tablicy (%d) przekracza dopuszczalny zakres 0..%d" -#: pl_exec.c:2300 +#: pl_exec.c:2365 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "zmienna użyta w pętli FOREACH ... SLICE musi być typu tablicowego" -#: pl_exec.c:2304 +#: pl_exec.c:2369 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "zmienna użyta w pętli FOREACH nie może być typu tablicowego" -#: pl_exec.c:2525 pl_exec.c:2678 +#: pl_exec.c:2557 pl_exec.c:2639 pl_exec.c:2806 #, c-format msgid "cannot return non-composite value from function returning composite type" msgstr "nie można zwracać wartości prostej z funkcji zwracającej typ złożony" -#: pl_exec.c:2569 pl_gram.y:3075 +#: pl_exec.c:2683 pl_gram.y:3112 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "instrukcja RETURN NEXT nie może zostać użyta w funkcjach nie zwracających zbioru rekordów" -#: pl_exec.c:2597 pl_exec.c:2720 +#: pl_exec.c:2717 pl_exec.c:2848 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "niewłaściwy typ wyniku w instrukcji RETURN NEXT" -#: pl_exec.c:2620 pl_exec.c:4166 pl_exec.c:4491 pl_exec.c:4517 pl_exec.c:4583 -#: pl_exec.c:4602 pl_exec.c:4670 pl_exec.c:4693 +#: pl_exec.c:2746 pl_exec.c:4419 pl_exec.c:4748 pl_exec.c:4774 pl_exec.c:4840 +#: pl_exec.c:4859 pl_exec.c:4927 pl_exec.c:4950 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "struktura rekordu \"%s\" nie jest jeszcze znana" -#: pl_exec.c:2622 pl_exec.c:4168 pl_exec.c:4493 pl_exec.c:4519 pl_exec.c:4585 -#: pl_exec.c:4604 pl_exec.c:4672 pl_exec.c:4695 +#: pl_exec.c:2748 pl_exec.c:4421 pl_exec.c:4750 pl_exec.c:4776 pl_exec.c:4842 +#: pl_exec.c:4861 pl_exec.c:4929 pl_exec.c:4952 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "Struktura jest nieokreślona dla niezainicjowanego rekordu abstrakcyjnego." -#: pl_exec.c:2626 pl_exec.c:2646 +#: pl_exec.c:2752 pl_exec.c:2772 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "błędny typ rekordu w instrukcji RETURN NEXT" -#: pl_exec.c:2738 +#: pl_exec.c:2867 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "po RETURN NEXT musi pojawić się parametr" -#: pl_exec.c:2771 pl_gram.y:3133 +#: pl_exec.c:2900 pl_gram.y:3174 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "nie można używać instrukcji RETURN QUERY w funkcjach nie zwracających zbioru rekordów" -#: pl_exec.c:2791 +#: pl_exec.c:2920 msgid "structure of query does not match function result type" msgstr "typ rekordu zwracany przez zapytanie nie odpowiada typowi zwracanemu przez funkcję" -#: pl_exec.c:2871 pl_exec.c:3003 +#: pl_exec.c:3000 pl_exec.c:3130 #, c-format msgid "RAISE option already specified: %s" msgstr "argument dla instrukcji RAISE został już podany: %s" -#: pl_exec.c:2904 +#: pl_exec.c:3033 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "RAISE bez argumentów jest dopuszczalne tylko w bloku obsługi wyjątków" -#: pl_exec.c:2945 -#, c-format -msgid "too few parameters specified for RAISE" -msgstr "za mało argumentów dla instrukcji RAISE" - -#: pl_exec.c:2973 -#, c-format -msgid "too many parameters specified for RAISE" -msgstr "za dużo argumentów dla instrukcji RAISE" - -#: pl_exec.c:2993 +#: pl_exec.c:3120 #, c-format msgid "RAISE statement option cannot be null" msgstr "argument dla wyrażenia RAISE nie może być NULL" -#: pl_exec.c:3064 +#: pl_exec.c:3191 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3241 pl_exec.c:3378 pl_exec.c:3569 +#: pl_exec.c:3264 +#, c-format +#| msgid "Password encryption failed.\n" +msgid "assertion failed" +msgstr "niepowodzenie asercji" + +#: pl_exec.c:3455 pl_exec.c:3599 pl_exec.c:3788 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "instrukcja COPY nie jest obsługiwana w PL/pgSQL" -#: pl_exec.c:3245 pl_exec.c:3382 pl_exec.c:3573 +#: pl_exec.c:3459 pl_exec.c:3603 pl_exec.c:3792 #, c-format msgid "cannot begin/end transactions in PL/pgSQL" msgstr "nie można rozpocząć ani zakończyć transakcji w PL/pgSQL" -#: pl_exec.c:3246 pl_exec.c:3383 pl_exec.c:3574 +#: pl_exec.c:3460 pl_exec.c:3604 pl_exec.c:3793 #, c-format msgid "Use a BEGIN block with an EXCEPTION clause instead." msgstr "Zamiast tego użyj bloku BEGIN wraz z klauzulą EXCEPTION." -#: pl_exec.c:3406 pl_exec.c:3598 +#: pl_exec.c:3627 pl_exec.c:3817 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO zostało użyte z zapytaniem, które nie zwraca danych" -#: pl_exec.c:3434 pl_exec.c:3626 +#: pl_exec.c:3655 pl_exec.c:3845 #, c-format msgid "query returned no rows" msgstr "zapytanie nie zwróciło żadnych wierszy" -#: pl_exec.c:3453 pl_exec.c:3645 +#: pl_exec.c:3674 pl_exec.c:3864 #, c-format msgid "query returned more than one row" msgstr "zapytanie zwróciło więcej niż jeden wiersz" -#: pl_exec.c:3470 +#: pl_exec.c:3691 #, c-format msgid "query has no destination for result data" msgstr "nie wskazano gdzie mają zostać zapisane wyniki zapytania" -#: pl_exec.c:3471 +#: pl_exec.c:3692 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." -msgstr "Jeśli wyniki zapytania nie są istotne, używaj instrukcji PERFOM zamiast SELECT." +msgstr "" +"Jeśli wyniki zapytania nie są istotne, używaj instrukcji PERFOM zamiast " +"SELECT." -#: pl_exec.c:3505 pl_exec.c:6480 +#: pl_exec.c:3724 pl_exec.c:7136 #, c-format msgid "query string argument of EXECUTE is null" msgstr "treść zapytania dla instrukcji EXECUTE ma wartość NULL" -#: pl_exec.c:3561 +#: pl_exec.c:3780 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "użycie SELECT ... INTO w instrukcji EXECUTE nie jest obsługiwane" -#: pl_exec.c:3562 +#: pl_exec.c:3781 #, c-format msgid "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead." msgstr "Zamiast tego możesz użyć EXECUTE ... INTO lub EXECUTE CREATE TABLE ... AS." -#: pl_exec.c:3874 pl_exec.c:3966 +#: pl_exec.c:4093 pl_exec.c:4185 #, c-format msgid "cursor variable \"%s\" is null" -msgstr "zmienna kursorowa \"%s\" ma wartość NULL" +msgstr "zmienna kursorowa \"%s\" ma wartość pustą" -#: pl_exec.c:3881 pl_exec.c:3973 +#: pl_exec.c:4100 pl_exec.c:4192 #, c-format msgid "cursor \"%s\" does not exist" msgstr "kursor \"%s\" nie istnieje" -#: pl_exec.c:3895 +#: pl_exec.c:4114 #, c-format msgid "relative or absolute cursor position is null" -msgstr "względna lub bezwzględna pozycja kursora o wartości NULL" +msgstr "względna lub bezwzględna pozycja kursora o wartości null" -#: pl_exec.c:4062 +#: pl_exec.c:4294 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "zmienna \"%s\" została zadeklarowana jako NOT NULL, nie można przypisać wartości NULL" -#: pl_exec.c:4109 +#: pl_exec.c:4363 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "nie można przypisać wartości skalarnej do zmiennej rekordowej" -#: pl_exec.c:4133 +#: pl_exec.c:4387 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "nie można przypisać wartości skalarnej do zmiennej rekordowej" -#: pl_exec.c:4278 +#: pl_exec.c:4530 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "liczba wymiarów tablicy (%d) przekracza maksimum (%d)" -#: pl_exec.c:4310 +#: pl_exec.c:4562 #, c-format msgid "subscripted object is not an array" msgstr "indeksowanie jest możliwe jedynie dla obiektu typu tablicowego" -#: pl_exec.c:4347 +#: pl_exec.c:4599 #, c-format msgid "array subscript in assignment must not be null" -msgstr "w instrukcji przypisania do elementu tablicy indeksem elementu nie może być NULL" +msgstr "" +"w instrukcji przypisania do elementu tablicy indeksem elementu nie może być " +"pusty" -#: pl_exec.c:4806 +#: pl_exec.c:5066 #, c-format msgid "query \"%s\" did not return data" msgstr "zapytanie \"%s\" nie zwróciło żadnych danych" -#: pl_exec.c:4814 +#: pl_exec.c:5074 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" @@ -469,15 +475,15 @@ msgstr[0] "zapytanie \"%s\" zwróciło %d kolumnę" msgstr[1] "zapytanie \"%s\" zwróciło %d kolumny" msgstr[2] "zapytanie \"%s\" zwróciło %d kolumn" -#: pl_exec.c:4840 +#: pl_exec.c:5101 #, c-format msgid "query \"%s\" returned more than one row" msgstr "zapytanie \"%s\" zwróciło więcej niż jeden wiersz" -#: pl_exec.c:4897 +#: pl_exec.c:5163 #, c-format msgid "query \"%s\" is not a SELECT" -msgstr "zapytanie \"%s\" nie jest kwerendą (SELECT)" +msgstr "zapytanie \"%s\" nie jest kwerendą SELECT" #: pl_funcs.c:218 msgid "statement block" @@ -503,308 +509,329 @@ msgstr "pętla FOR względem kursora" msgid "FOREACH over array" msgstr "pętla FOREACH po elementach tablicy" -#: pl_funcs.c:248 +#: pl_funcs.c:250 msgid "SQL statement" msgstr "wyrażenie SQL" -#: pl_funcs.c:250 +#: pl_funcs.c:252 msgid "EXECUTE statement" msgstr "instrukcja EXECUTE" -#: pl_funcs.c:252 +#: pl_funcs.c:254 msgid "FOR over EXECUTE statement" msgstr "pętla FOR po wynikach instrukcji EXECUTE" -#: pl_gram.y:469 +#: pl_gram.y:472 #, c-format msgid "block label must be placed before DECLARE, not after" msgstr "etykieta bloku musi pojawić się przed częścią DECLARE, nie po niej" -#: pl_gram.y:489 +#: pl_gram.y:492 #, c-format msgid "collations are not supported by type %s" msgstr "porównania nie jest dostępne dla typu %s" -#: pl_gram.y:504 +#: pl_gram.y:507 #, c-format msgid "row or record variable cannot be CONSTANT" msgstr "rekord nie może być zadeklarowany jako CONSTANT" -#: pl_gram.y:514 +#: pl_gram.y:517 #, c-format msgid "row or record variable cannot be NOT NULL" msgstr "rekord nie może być zadeklarowany jako NOT NULL" -#: pl_gram.y:525 +#: pl_gram.y:528 #, c-format msgid "default value for row or record variable is not supported" -msgstr "domyślna wartość dla rekordów (abstrakcyjnych oraz konkretnego typu) nie jest obsługiwana" +msgstr "" +"domyślna wartość dla rekordów (abstrakcyjnych oraz konkretnego typu) nie " +"jest obsługiwana" -#: pl_gram.y:670 pl_gram.y:685 pl_gram.y:711 +#: pl_gram.y:673 pl_gram.y:688 pl_gram.y:714 #, c-format msgid "variable \"%s\" does not exist" msgstr "zmienna \"%s\" nie istnieje" -#: pl_gram.y:729 pl_gram.y:757 +#: pl_gram.y:732 pl_gram.y:760 msgid "duplicate declaration" msgstr "powtórzona deklaracja" -#: pl_gram.y:740 pl_gram.y:768 +#: pl_gram.y:743 pl_gram.y:771 #, c-format -#| msgid "variable \"%s\" is hidden by a local variable" msgid "variable \"%s\" shadows a previously defined variable" msgstr "zmienna \"%s\" przykrywa poprzednio zdefiniowaną zmienną" -#: pl_gram.y:955 +#: pl_gram.y:950 #, c-format msgid "diagnostics item %s is not allowed in GET STACKED DIAGNOSTICS" msgstr "element diagnostyczny %s nie jest dozwolony w GET STACKED DIAGNOSTICS" -#: pl_gram.y:973 +#: pl_gram.y:968 #, c-format msgid "diagnostics item %s is not allowed in GET CURRENT DIAGNOSTICS" msgstr "element diagnostyczny %s nie jest dozwolony w GET CURRENT DIAGNOSTICS" -#: pl_gram.y:1071 +#: pl_gram.y:1066 msgid "unrecognized GET DIAGNOSTICS item" msgstr "nieobsługiwany parametr dla instrukcji GET DIAGNOSTICS" -#: pl_gram.y:1082 pl_gram.y:3320 +#: pl_gram.y:1077 pl_gram.y:3361 #, c-format msgid "\"%s\" is not a scalar variable" msgstr "\"%s\" nie jest zmienną skalarną" -#: pl_gram.y:1334 pl_gram.y:1528 +#: pl_gram.y:1329 pl_gram.y:1523 #, c-format msgid "loop variable of loop over rows must be a record or row variable or list of scalar variables" -msgstr "zmienna w pętli dla zapytań musi być rekordem (abstrakcyjnym lub konkretnego typu) albo listą zmiennych skalarnych" +msgstr "" +"zmienna w pętli dla zapytań musi być rekordem (abstrakcyjnym lub konkretnego " +"typu) albo listą zmiennych skalarnych" -#: pl_gram.y:1368 +#: pl_gram.y:1363 #, c-format msgid "cursor FOR loop must have only one target variable" msgstr "w pętli FOR używającej kursorów dopuszczalna jest tylko jedna zmienna iteracyjna" -#: pl_gram.y:1375 +#: pl_gram.y:1370 #, c-format msgid "cursor FOR loop must use a bound cursor variable" msgstr "w pętli FOR można używać jedynie ograniczonych kursorów" -#: pl_gram.y:1459 +#: pl_gram.y:1454 #, c-format msgid "integer FOR loop must have only one target variable" msgstr "w pętli FOR dla liczb całkowitych można używać jednej zmiennej" -#: pl_gram.y:1495 +#: pl_gram.y:1490 #, c-format msgid "cannot specify REVERSE in query FOR loop" msgstr "nie można używać REVERSE w pętli FOR dla zapytań" -#: pl_gram.y:1642 +#: pl_gram.y:1637 #, c-format msgid "loop variable of FOREACH must be a known variable or list of variables" msgstr "zmienne używane w pętli FOREACH muszą zostać wcześniej zadeklarowana" -#: pl_gram.y:1694 pl_gram.y:1731 pl_gram.y:1779 pl_gram.y:2776 pl_gram.y:2857 -#: pl_gram.y:2968 pl_gram.y:3721 +#: pl_gram.y:1689 pl_gram.y:1726 pl_gram.y:1774 pl_gram.y:2814 pl_gram.y:2896 +#: pl_gram.y:3007 pl_gram.y:3763 msgid "unexpected end of function definition" msgstr "nieoczekiwany koniec definicji funkcji" -#: pl_gram.y:1799 pl_gram.y:1823 pl_gram.y:1839 pl_gram.y:1845 pl_gram.y:1934 -#: pl_gram.y:1942 pl_gram.y:1956 pl_gram.y:2051 pl_gram.y:2232 pl_gram.y:2315 -#: pl_gram.y:2449 pl_gram.y:3563 pl_gram.y:3624 pl_gram.y:3702 +#: pl_gram.y:1794 pl_gram.y:1818 pl_gram.y:1834 pl_gram.y:1840 pl_gram.y:1954 +#: pl_gram.y:1962 pl_gram.y:1976 pl_gram.y:2071 pl_gram.y:2252 pl_gram.y:2335 +#: pl_gram.y:2486 pl_gram.y:3604 pl_gram.y:3665 pl_gram.y:3744 msgid "syntax error" msgstr "błąd składni" -#: pl_gram.y:1827 pl_gram.y:1829 pl_gram.y:2236 pl_gram.y:2238 +#: pl_gram.y:1822 pl_gram.y:1824 pl_gram.y:2256 pl_gram.y:2258 msgid "invalid SQLSTATE code" msgstr "błędny kod SQLSTATE" -#: pl_gram.y:1998 +#: pl_gram.y:2018 msgid "syntax error, expected \"FOR\"" msgstr "błąd składniowy, spodziewano się \"FOR\"" -#: pl_gram.y:2060 +#: pl_gram.y:2080 #, c-format msgid "FETCH statement cannot return multiple rows" msgstr "instrukcja FETCH nie może zwracać wielu wierszy" -#: pl_gram.y:2116 +#: pl_gram.y:2136 #, c-format msgid "cursor variable must be a simple variable" msgstr "zmienna kursorowa musi być zmienną skalarną" -#: pl_gram.y:2122 +#: pl_gram.y:2142 #, c-format msgid "variable \"%s\" must be of type cursor or refcursor" msgstr "zmienna \"%s\" musi być typu cursor lub refcursor" -#: pl_gram.y:2290 +#: pl_gram.y:2310 msgid "label does not exist" msgstr "etykieta nie istnieje" -#: pl_gram.y:2420 pl_gram.y:2431 +#: pl_gram.y:2457 pl_gram.y:2468 #, c-format msgid "\"%s\" is not a known variable" msgstr "\"%s\" nie jest zmienną" -#: pl_gram.y:2535 pl_gram.y:2545 pl_gram.y:2700 +#: pl_gram.y:2572 pl_gram.y:2582 pl_gram.y:2738 msgid "mismatched parentheses" msgstr "niepasujące nawiasy" -#: pl_gram.y:2549 +#: pl_gram.y:2586 #, c-format msgid "missing \"%s\" at end of SQL expression" msgstr "brakuje \"%s\" na końcu wyrażenia SQL" -#: pl_gram.y:2555 +#: pl_gram.y:2592 #, c-format msgid "missing \"%s\" at end of SQL statement" msgstr "brakuje \"%s\" na końcu instrukcji SQL" -#: pl_gram.y:2572 +#: pl_gram.y:2609 msgid "missing expression" msgstr "brakuje wyrażenia" -#: pl_gram.y:2574 +#: pl_gram.y:2611 msgid "missing SQL statement" msgstr "brakuje instrukcji SQL" -#: pl_gram.y:2702 +#: pl_gram.y:2740 msgid "incomplete data type declaration" msgstr "deklaracja typu abstrakcyjnego" -#: pl_gram.y:2725 +#: pl_gram.y:2763 msgid "missing data type declaration" msgstr "brakująca deklaracja typu" -#: pl_gram.y:2781 +#: pl_gram.y:2819 msgid "INTO specified more than once" msgstr "INTO użyte więcej niż raz" -#: pl_gram.y:2949 +#: pl_gram.y:2988 msgid "expected FROM or IN" msgstr "spodziewano się FROM lub IN" -#: pl_gram.y:3009 +#: pl_gram.y:3048 #, c-format msgid "RETURN cannot have a parameter in function returning set" -msgstr "instrukcja RETURN nie może mieć parametru w funkcjach zwracających zbiory rekordów (SETOF ...)" +msgstr "" +"instrukcja RETURN nie może mieć parametru w funkcjach zwracających zbiory " +"rekordów (SETOF ...)" -#: pl_gram.y:3010 +#: pl_gram.y:3049 #, c-format msgid "Use RETURN NEXT or RETURN QUERY." msgstr "Użyj RETURN NEXT lub RETURN QUERY." -#: pl_gram.y:3018 +#: pl_gram.y:3057 #, c-format msgid "RETURN cannot have a parameter in function with OUT parameters" -msgstr "instrukcja RETURN nie może mieć parametrów w funkcji posiadającej argumenty wyjściowe (OUT, INOUT)" +msgstr "" +"instrukcja RETURN nie może mieć parametrów w funkcji posiadającej argumenty " +"wyjściowe (OUT, INOUT)" -#: pl_gram.y:3027 +#: pl_gram.y:3066 #, c-format msgid "RETURN cannot have a parameter in function returning void" msgstr "instrukcja RETURN nie może mieć parametru w funkcji, która nic nie zwraca" -#: pl_gram.y:3089 +#: pl_gram.y:3126 #, c-format msgid "RETURN NEXT cannot have a parameter in function with OUT parameters" -msgstr "instrukcja RETURN NEXT nie może mieć parametrów w funkcji posiadające argumenty wyjściowe (OUT, INOUT)" +msgstr "" +"instrukcja RETURN NEXT nie może mieć parametrów w funkcji posiadające " +"argumenty wyjściowe (OUT, INOUT)" -#: pl_gram.y:3189 +#: pl_gram.y:3230 #, c-format msgid "\"%s\" is declared CONSTANT" msgstr "\"%s\" zadeklarowano jako CONSTANT" -#: pl_gram.y:3251 pl_gram.y:3263 +#: pl_gram.y:3292 pl_gram.y:3304 #, c-format msgid "record or row variable cannot be part of multiple-item INTO list" msgstr "zmienna rekordowa nie może być celem w wyrażeniu INTO określonym dla więcej niż jednego argumentu" -#: pl_gram.y:3308 +#: pl_gram.y:3349 #, c-format msgid "too many INTO variables specified" msgstr "po INTO podano za dużo zmiennych" -#: pl_gram.y:3516 +#: pl_gram.y:3557 #, c-format msgid "end label \"%s\" specified for unlabelled block" msgstr "etykieta \"%s\" podana na końcu bloku, który nie posiada etykiety" -#: pl_gram.y:3523 +#: pl_gram.y:3564 #, c-format msgid "end label \"%s\" differs from block's label \"%s\"" msgstr "etykieta końcowa \"%s\" jest inna niż etykieta bloku \"%s\"" -#: pl_gram.y:3558 +#: pl_gram.y:3599 #, c-format msgid "cursor \"%s\" has no arguments" msgstr "kursor \"%s\" nie przyjmuje parametrów" -#: pl_gram.y:3572 +#: pl_gram.y:3613 #, c-format msgid "cursor \"%s\" has arguments" msgstr "kursor \"%s\" przyjmuje parametry" -#: pl_gram.y:3614 +#: pl_gram.y:3655 #, c-format msgid "cursor \"%s\" has no argument named \"%s\"" msgstr "kursor \"%s\" nie przyjmuje parametru o nazwie \"%s\"" -#: pl_gram.y:3634 +#: pl_gram.y:3675 #, c-format msgid "value for parameter \"%s\" of cursor \"%s\" specified more than once" msgstr "wartość parametru \"%s\" kursora \"%s\" wskazano więcej niż raz" -#: pl_gram.y:3659 +#: pl_gram.y:3700 #, c-format msgid "not enough arguments for cursor \"%s\"" msgstr "za mało argumentów dla kursora \"%s\"" -#: pl_gram.y:3666 +#: pl_gram.y:3707 #, c-format msgid "too many arguments for cursor \"%s\"" msgstr "zbyt wiele argumentów dla kursora \"%s\"" -#: pl_gram.y:3753 +#: pl_gram.y:3795 msgid "unrecognized RAISE statement option" msgstr "nieznany parametr dla instrukcji RAISE" -#: pl_gram.y:3757 +#: pl_gram.y:3799 msgid "syntax error, expected \"=\"" msgstr "błąd składniowy, spodziewano się \"=\"" -#: pl_handler.c:147 +#: pl_gram.y:3840 +#, c-format +msgid "too many parameters specified for RAISE" +msgstr "za dużo argumentów dla instrukcji RAISE" + +#: pl_gram.y:3844 +#, c-format +msgid "too few parameters specified for RAISE" +msgstr "za mało argumentów dla instrukcji RAISE" + +#: pl_handler.c:149 msgid "Sets handling of conflicts between PL/pgSQL variable names and table column names." msgstr "Ustawia sposób rozwiązywania niejednoznaczności nazw zmiennych PL/pgSQL i kolumn tabel." -#: pl_handler.c:156 +#: pl_handler.c:158 msgid "Print information about parameters in the DETAIL part of the error messages generated on INTO ... STRICT failures." -msgstr "" -"Wydrukuj informacje o parametrach w części DETAIL komunikatów o błędach " -"generowanych podczas niepowodzeń INTO ... STRICT." +msgstr "Wydrukuj informacje o parametrach w części DETAIL komunikatów o błędach generowanych podczas niepowodzeń INTO ... STRICT." + +#: pl_handler.c:166 +msgid "Perform checks given in ASSERT statements." +msgstr "Wykonanie sprawdzeń podanych w instrukcjach ASSERT." -#: pl_handler.c:164 +#: pl_handler.c:174 msgid "List of programming constructs that should produce a warning." msgstr "Lista konstrukcji programowych, które powinny spowodować ostrzeżenie." -#: pl_handler.c:174 +#: pl_handler.c:184 msgid "List of programming constructs that should produce an error." msgstr "Lista konstrukcji programowych, które powinny spowodować błąd." #. translator: %s is typically the translation of "syntax error" -#: pl_scanner.c:554 +#: pl_scanner.c:621 #, c-format msgid "%s at end of input" msgstr "%s na końcu danych wejściowych" #. translator: first %s is typically the translation of "syntax error" -#: pl_scanner.c:570 +#: pl_scanner.c:637 #, c-format msgid "%s at or near \"%s\"" msgstr "%s w lub pobliżu \"%s\"" -#~ msgid "RETURN must specify a record or row variable in function returning row" -#~ msgstr "w funkcji zwracającej zbiory rekordów parametrem instrukcji RETURN musi być rekord (abstrakcyjny lub konkretnego typu)" - #~ msgid "RETURN NEXT must specify a record or row variable in function returning row" #~ msgstr "w funkcji zwracającej rekord parametrem instrukcji RETURN NEXT musi również być rekord" + +#~ msgid "RETURN must specify a record or row variable in function returning row" +#~ msgstr "w funkcji zwracającej zbiory rekordów parametrem instrukcji RETURN musi być rekord (abstrakcyjny lub konkretnego typu)" diff --git a/src/pl/plpgsql/src/po/pt_BR.po b/src/pl/plpgsql/src/po/pt_BR.po index 5e269fcfdc1d8..b198c1b99ea2d 100644 --- a/src/pl/plpgsql/src/po/pt_BR.po +++ b/src/pl/plpgsql/src/po/pt_BR.po @@ -1,13 +1,13 @@ # Brazilian Portuguese message translation file for plpgsql # Copyright (C) 2010 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Euler Taveira de Oliveira , 2010-2014. +# Euler Taveira de Oliveira , 2010-2015. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-09-14 23:11-0300\n" +"POT-Creation-Date: 2015-09-17 22:32-0300\n" "PO-Revision-Date: 2010-07-08 17:13-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n>1);\n" -#: pl_comp.c:436 pl_handler.c:438 +#: pl_comp.c:436 pl_handler.c:448 #, c-format msgid "PL/pgSQL functions cannot accept type %s" msgstr "funções PL/pgSQL não podem aceitar tipo %s" @@ -32,139 +32,139 @@ msgstr "não pôde determinar tipo de retorno atual para função polimófica \" msgid "trigger functions can only be called as triggers" msgstr "funções de gatilho só podem ser chamadas como gatilhos" -#: pl_comp.c:551 pl_handler.c:423 +#: pl_comp.c:551 pl_handler.c:433 #, c-format msgid "PL/pgSQL functions cannot return type %s" msgstr "funções PL/pgSQL não podem retornar tipo %s" -#: pl_comp.c:594 +#: pl_comp.c:592 #, c-format msgid "trigger functions cannot have declared arguments" msgstr "funções de gatilho não podem ter argumentos declarados" -#: pl_comp.c:595 +#: pl_comp.c:593 #, c-format msgid "The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV instead." msgstr "Os argumentos de um gatilho podem ser acessados através de TG_NARGS e TG_ARGV." -#: pl_comp.c:697 +#: pl_comp.c:695 #, c-format msgid "event trigger functions cannot have declared arguments" msgstr "funções de gatilho de eventos não podem ter argumentos declarados" -#: pl_comp.c:962 +#: pl_comp.c:957 #, c-format msgid "compilation of PL/pgSQL function \"%s\" near line %d" msgstr "compilação da função PL/pgSQL \"%s\" próximo a linha %d" -#: pl_comp.c:985 +#: pl_comp.c:980 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "nome de parâmetro \"%s\" foi especificado mais de uma vez" -#: pl_comp.c:1095 +#: pl_comp.c:1090 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "referência à coluna \"%s\" é ambígua" -#: pl_comp.c:1097 +#: pl_comp.c:1092 #, c-format msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Ela poderia referenciar uma variável PL/pgSQL ou uma coluna de tabela." -#: pl_comp.c:1277 pl_comp.c:1305 pl_exec.c:4179 pl_exec.c:4524 pl_exec.c:4609 -#: pl_exec.c:4700 +#: pl_comp.c:1272 pl_comp.c:1300 pl_exec.c:4447 pl_exec.c:4795 pl_exec.c:4880 +#: pl_exec.c:4971 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "registro \"%s\" não tem campo \"%s\"" -#: pl_comp.c:1836 +#: pl_comp.c:1831 #, c-format msgid "relation \"%s\" does not exist" msgstr "relação \"%s\" não existe" -#: pl_comp.c:1945 +#: pl_comp.c:1940 #, c-format msgid "variable \"%s\" has pseudo-type %s" msgstr "variável \"%s\" tem pseudo-tipo %s" -#: pl_comp.c:2011 +#: pl_comp.c:2006 #, c-format msgid "relation \"%s\" is not a table" msgstr "relação \"%s\" não é uma tabela" -#: pl_comp.c:2171 +#: pl_comp.c:2166 #, c-format msgid "type \"%s\" is only a shell" msgstr "tipo \"%s\" é indefinido" -#: pl_comp.c:2245 pl_comp.c:2298 +#: pl_comp.c:2255 pl_comp.c:2308 #, c-format msgid "unrecognized exception condition \"%s\"" msgstr "condição de exceção \"%s\" é desconhecida" -#: pl_comp.c:2456 +#: pl_comp.c:2466 #, c-format msgid "could not determine actual argument type for polymorphic function \"%s\"" msgstr "não pôde determinar tipo do argumento atual para função polimórfica \"%s\"" -#: pl_exec.c:277 pl_exec.c:537 pl_exec.c:816 +#: pl_exec.c:321 pl_exec.c:614 pl_exec.c:893 msgid "during initialization of execution state" msgstr "durante inicialização de estado de execução" -#: pl_exec.c:284 +#: pl_exec.c:328 msgid "while storing call arguments into local variables" msgstr "ao armazenar argumentos em variáveis locais" -#: pl_exec.c:326 pl_exec.c:694 +#: pl_exec.c:408 pl_exec.c:771 msgid "during function entry" msgstr "durante entrada da função" -#: pl_exec.c:357 pl_exec.c:725 pl_exec.c:857 +#: pl_exec.c:439 pl_exec.c:802 pl_exec.c:934 #, c-format msgid "CONTINUE cannot be used outside a loop" msgstr "CONTINUE não pode ser utilizado fora de um laço" -#: pl_exec.c:361 +#: pl_exec.c:443 #, c-format msgid "control reached end of function without RETURN" msgstr "controle atingiu o fim da função sem RETURN" -#: pl_exec.c:368 +#: pl_exec.c:450 msgid "while casting return value to function's return type" msgstr "ao converter valor de retorno para tipo de retorno da função" -#: pl_exec.c:381 pl_exec.c:2843 +#: pl_exec.c:463 pl_exec.c:2987 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "função que tem argumento do tipo conjunto foi chamada em um contexto que não pode aceitar um conjunto" -#: pl_exec.c:419 pl_exec.c:2686 +#: pl_exec.c:501 pl_exec.c:2829 msgid "returned record type does not match expected record type" msgstr "tipo record retornado não corresponde ao tipo record esperado" -#: pl_exec.c:479 pl_exec.c:733 pl_exec.c:865 +#: pl_exec.c:556 pl_exec.c:810 pl_exec.c:942 msgid "during function exit" msgstr "durante saída da função" -#: pl_exec.c:729 pl_exec.c:861 +#: pl_exec.c:806 pl_exec.c:938 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "controle atingiu o fim da função de gatilho sem RETURN" -#: pl_exec.c:738 +#: pl_exec.c:815 #, c-format msgid "trigger procedure cannot return a set" msgstr "função de gatilho não pode retornar um conjunto" -#: pl_exec.c:760 +#: pl_exec.c:837 msgid "returned row structure does not match the structure of the triggering table" msgstr "estrutura de registro retornada não corresponde a estrutura da tabela que disparou o evento" #. translator: last %s is a phrase such as "during statement block #. local variable initialization" #. -#: pl_exec.c:916 +#: pl_exec.c:993 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "função PL/pgSQL %s linha %d %s" @@ -172,312 +172,307 @@ msgstr "função PL/pgSQL %s linha %d %s" #. translator: last %s is a phrase such as "while storing call #. arguments into local variables" #. -#: pl_exec.c:927 +#: pl_exec.c:1004 #, c-format msgid "PL/pgSQL function %s %s" msgstr "função PL/pgSQL %s %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:935 +#: pl_exec.c:1012 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "função PL/pgSQL %s linha %d em %s" -#: pl_exec.c:941 +#: pl_exec.c:1018 #, c-format msgid "PL/pgSQL function %s" msgstr "função PL/pgSQL %s" -#: pl_exec.c:1050 +#: pl_exec.c:1129 msgid "during statement block local variable initialization" msgstr "durante inicialização de variável local em bloco de comandos" -#: pl_exec.c:1092 +#: pl_exec.c:1169 #, c-format msgid "variable \"%s\" declared NOT NULL cannot default to NULL" msgstr "variável \"%s\" declarada NOT NULL não pode ter valor padrão NULL" -#: pl_exec.c:1142 +#: pl_exec.c:1219 msgid "during statement block entry" msgstr "durante entrada em bloco de comandos" -#: pl_exec.c:1163 +#: pl_exec.c:1240 msgid "during statement block exit" msgstr "durante saída em bloco de comandos" -#: pl_exec.c:1206 +#: pl_exec.c:1283 msgid "during exception cleanup" msgstr "durante término de exceção" -#: pl_exec.c:1559 +#: pl_exec.c:1634 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "GET STACKED DIAGNOSTICS não pode ser utilizado fora de um manipulador de exceção" -#: pl_exec.c:1760 +#: pl_exec.c:1838 #, c-format msgid "case not found" msgstr "case não foi encontrado" -#: pl_exec.c:1761 +#: pl_exec.c:1839 #, c-format msgid "CASE statement is missing ELSE part." msgstr "comando CASE está faltando a parte ELSE." -#: pl_exec.c:1913 +#: pl_exec.c:1993 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "limite inferior do laço FOR não pode ser nulo" -#: pl_exec.c:1928 +#: pl_exec.c:2009 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "limite superior do laço FOR não pode ser nulo" -#: pl_exec.c:1945 +#: pl_exec.c:2027 #, c-format msgid "BY value of FOR loop cannot be null" msgstr "valor BY do laço FOR não pode ser nulo" -#: pl_exec.c:1951 +#: pl_exec.c:2033 #, c-format msgid "BY value of FOR loop must be greater than zero" msgstr "valor BY do laço FOR deve ser maior do que zero" -#: pl_exec.c:2121 pl_exec.c:3730 +#: pl_exec.c:2203 pl_exec.c:3963 #, c-format msgid "cursor \"%s\" already in use" msgstr "cursor \"%s\" já está em uso" -#: pl_exec.c:2144 pl_exec.c:3792 +#: pl_exec.c:2226 pl_exec.c:4025 #, c-format msgid "arguments given for cursor without arguments" msgstr "argumentos fornecidos a cursor sem argumentos" -#: pl_exec.c:2163 pl_exec.c:3811 +#: pl_exec.c:2245 pl_exec.c:4044 #, c-format msgid "arguments required for cursor" msgstr "argumentos requeridos pelo cursor" -#: pl_exec.c:2250 +#: pl_exec.c:2330 #, c-format msgid "FOREACH expression must not be null" msgstr "expressão FOREACH não deve ser nula" -#: pl_exec.c:2256 +#: pl_exec.c:2336 #, c-format msgid "FOREACH expression must yield an array, not type %s" msgstr "expressão FOREACH deve produzir uma matriz, e não tipo %s" -#: pl_exec.c:2273 +#: pl_exec.c:2353 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "fatia da dimensão (%d) está fora do intervalo válido, 0..%d" -#: pl_exec.c:2300 +#: pl_exec.c:2380 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "variável do laço FOREACH ... SLICE deve ser de um tipo matriz" -#: pl_exec.c:2304 +#: pl_exec.c:2384 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "variável do laço FOREACH não deve ser de um tipo matriz" -#: pl_exec.c:2525 pl_exec.c:2678 +#: pl_exec.c:2572 pl_exec.c:2654 pl_exec.c:2821 #, c-format msgid "cannot return non-composite value from function returning composite type" msgstr "não pode retornar valor não-composto de função que retorna tipo composto" -#: pl_exec.c:2569 pl_gram.y:3075 +#: pl_exec.c:2698 pl_gram.y:3112 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "não pode utilizar RETURN NEXT em uma função que não foi declarada SETOF" -#: pl_exec.c:2597 pl_exec.c:2720 +#: pl_exec.c:2732 pl_exec.c:2863 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "tipo resultante incorreto foi fornecido em RETURN NEXT" -#: pl_exec.c:2620 pl_exec.c:4166 pl_exec.c:4491 pl_exec.c:4517 pl_exec.c:4583 -#: pl_exec.c:4602 pl_exec.c:4670 pl_exec.c:4693 +#: pl_exec.c:2761 pl_exec.c:4434 pl_exec.c:4762 pl_exec.c:4788 pl_exec.c:4854 +#: pl_exec.c:4873 pl_exec.c:4941 pl_exec.c:4964 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "registro \"%s\" não foi atribuído ainda" -#: pl_exec.c:2622 pl_exec.c:4168 pl_exec.c:4493 pl_exec.c:4519 pl_exec.c:4585 -#: pl_exec.c:4604 pl_exec.c:4672 pl_exec.c:4695 +#: pl_exec.c:2763 pl_exec.c:4436 pl_exec.c:4764 pl_exec.c:4790 pl_exec.c:4856 +#: pl_exec.c:4875 pl_exec.c:4943 pl_exec.c:4966 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "A estrutura da tupla de um registro não atribuído é indeterminada." -#: pl_exec.c:2626 pl_exec.c:2646 +#: pl_exec.c:2767 pl_exec.c:2787 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "tipo registro incorreto foi fornecido em RETURN NEXT" -#: pl_exec.c:2738 +#: pl_exec.c:2882 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "RETURN NEXT deve ter um parâmetro" -#: pl_exec.c:2771 pl_gram.y:3133 +#: pl_exec.c:2915 pl_gram.y:3174 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "não pode utilizar RETURN QUERY em uma função que não foi declarada SETOF" -#: pl_exec.c:2791 +#: pl_exec.c:2935 msgid "structure of query does not match function result type" msgstr "estrutura da consulta não corresponde ao tipo resultante da função" -#: pl_exec.c:2871 pl_exec.c:3003 +#: pl_exec.c:3015 pl_exec.c:3145 #, c-format msgid "RAISE option already specified: %s" msgstr "opção RAISE já foi especificada: %s" -#: pl_exec.c:2904 +#: pl_exec.c:3048 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "RAISE sem parâmetros não pode ser utilizado fora de um manipulador de exceção" -#: pl_exec.c:2945 -#, c-format -msgid "too few parameters specified for RAISE" -msgstr "poucos parâmetros especificados para RAISE" - -#: pl_exec.c:2973 -#, c-format -msgid "too many parameters specified for RAISE" -msgstr "muitos parâmetros especificados para RAISE" - -#: pl_exec.c:2993 +#: pl_exec.c:3135 #, c-format msgid "RAISE statement option cannot be null" msgstr "opção do comando RAISE não pode ser nulo" -#: pl_exec.c:3064 +#: pl_exec.c:3206 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3241 pl_exec.c:3378 pl_exec.c:3569 +#: pl_exec.c:3279 +#, c-format +msgid "assertion failed" +msgstr "asserção falhou" + +#: pl_exec.c:3469 pl_exec.c:3613 pl_exec.c:3802 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "não pode executar COPY para/do cliente em PL/pgSQL" -#: pl_exec.c:3245 pl_exec.c:3382 pl_exec.c:3573 +#: pl_exec.c:3473 pl_exec.c:3617 pl_exec.c:3806 #, c-format msgid "cannot begin/end transactions in PL/pgSQL" msgstr "não pode iniciar/terminar transações em PL/pgSQL" -#: pl_exec.c:3246 pl_exec.c:3383 pl_exec.c:3574 +#: pl_exec.c:3474 pl_exec.c:3618 pl_exec.c:3807 #, c-format msgid "Use a BEGIN block with an EXCEPTION clause instead." msgstr "Ao invés disso utilize um bloco BEGIN com uma cláusula EXCEPTION." -#: pl_exec.c:3406 pl_exec.c:3598 +#: pl_exec.c:3641 pl_exec.c:3831 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO utilizado com um comando que não pode retornar dados" -#: pl_exec.c:3434 pl_exec.c:3626 +#: pl_exec.c:3669 pl_exec.c:3859 #, c-format msgid "query returned no rows" msgstr "consulta não retornou registros" -#: pl_exec.c:3453 pl_exec.c:3645 +#: pl_exec.c:3688 pl_exec.c:3878 #, c-format msgid "query returned more than one row" msgstr "consulta retornou mais de um registro" -#: pl_exec.c:3470 +#: pl_exec.c:3705 #, c-format msgid "query has no destination for result data" msgstr "consulta não tem destino para os dados resultantes" -#: pl_exec.c:3471 +#: pl_exec.c:3706 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "Se você quer descartar os resultados de um SELECT, utilize PERFORM." -#: pl_exec.c:3505 pl_exec.c:6480 +#: pl_exec.c:3738 pl_exec.c:7026 #, c-format msgid "query string argument of EXECUTE is null" msgstr "argumento da cadeia de caracteres do EXECUTE é nulo" -#: pl_exec.c:3561 +#: pl_exec.c:3794 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "EXECUTE de SELECT ... INTO não está implementado" -#: pl_exec.c:3562 +#: pl_exec.c:3795 #, c-format msgid "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead." msgstr "Ao invés disso, você pode querer utilizar EXECUTE ... INTO ou EXECUTE CREATE TABLE ... AS." -#: pl_exec.c:3874 pl_exec.c:3966 +#: pl_exec.c:4105 pl_exec.c:4197 #, c-format msgid "cursor variable \"%s\" is null" msgstr "variável do cursor \"%s\" é nula" -#: pl_exec.c:3881 pl_exec.c:3973 +#: pl_exec.c:4112 pl_exec.c:4204 #, c-format msgid "cursor \"%s\" does not exist" msgstr "cursor \"%s\" não existe" -#: pl_exec.c:3895 +#: pl_exec.c:4126 #, c-format msgid "relative or absolute cursor position is null" msgstr "posição relativa ou absoluta do cursor é nula" -#: pl_exec.c:4062 +#: pl_exec.c:4306 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "valor nulo não pode ser atribuído a variável \"%s\" declarada NOT NULL" -#: pl_exec.c:4109 +#: pl_exec.c:4378 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "não pode atribuir valor que não é composto a variável do tipo row" -#: pl_exec.c:4133 +#: pl_exec.c:4402 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "não pode atribuir valor que não é composto a variável do tipo record" -#: pl_exec.c:4278 +#: pl_exec.c:4545 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "número de dimensões da matriz (%d) excede o máximo permitido (%d)" -#: pl_exec.c:4310 +#: pl_exec.c:4577 #, c-format msgid "subscripted object is not an array" msgstr "objeto com índice não é uma matriz" -#: pl_exec.c:4347 +#: pl_exec.c:4614 #, c-format msgid "array subscript in assignment must not be null" msgstr "índice da matriz em atribuição não deve ser nulo" -#: pl_exec.c:4806 +#: pl_exec.c:5080 #, c-format msgid "query \"%s\" did not return data" msgstr "consulta \"%s\" não retornou dados" -#: pl_exec.c:4814 +#: pl_exec.c:5088 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" msgstr[0] "consulta \"%s\" retornou %d coluna" msgstr[1] "consulta \"%s\" retornou %d colunas" -#: pl_exec.c:4840 +#: pl_exec.c:5115 #, c-format msgid "query \"%s\" returned more than one row" msgstr "consulta \"%s\" retornou mais do que um registro" -#: pl_exec.c:4897 +#: pl_exec.c:5170 #, c-format msgid "query \"%s\" is not a SELECT" msgstr "consulta \"%s\" não é um SELECT" @@ -506,299 +501,309 @@ msgstr "FOR sobre cursor" msgid "FOREACH over array" msgstr "FOREACH sobre matriz" -#: pl_funcs.c:248 +#: pl_funcs.c:250 msgid "SQL statement" msgstr "comando SQL" -#: pl_funcs.c:250 -msgid "EXECUTE statement" -msgstr "comando EXECUTE" - -#: pl_funcs.c:252 +#: pl_funcs.c:254 msgid "FOR over EXECUTE statement" msgstr "FOR sobre comando EXECUTE" -#: pl_gram.y:469 +#: pl_gram.y:472 #, c-format msgid "block label must be placed before DECLARE, not after" msgstr "rótulo de bloco deve estar localizado antes do DECLARE e não depois" -#: pl_gram.y:489 +#: pl_gram.y:492 #, c-format msgid "collations are not supported by type %s" msgstr "ordenações não são suportadas pelo tipo %s" -#: pl_gram.y:504 +#: pl_gram.y:507 #, c-format msgid "row or record variable cannot be CONSTANT" msgstr "variável do tipo row ou record não pode ser CONSTANT" -#: pl_gram.y:514 +#: pl_gram.y:517 #, c-format msgid "row or record variable cannot be NOT NULL" msgstr "variável do tipo row ou record não pode ser NOT NULL" -#: pl_gram.y:525 +#: pl_gram.y:528 #, c-format msgid "default value for row or record variable is not supported" msgstr "valor padrão para variável do tipo row ou record não é suportado" -#: pl_gram.y:670 pl_gram.y:685 pl_gram.y:711 +#: pl_gram.y:673 pl_gram.y:688 pl_gram.y:714 #, c-format msgid "variable \"%s\" does not exist" msgstr "variável \"%s\" não existe" -#: pl_gram.y:729 pl_gram.y:757 +#: pl_gram.y:732 pl_gram.y:760 msgid "duplicate declaration" msgstr "declaração duplicada" -#: pl_gram.y:740 pl_gram.y:768 +#: pl_gram.y:743 pl_gram.y:771 #, c-format msgid "variable \"%s\" shadows a previously defined variable" msgstr "variável \"%s\" esconde uma variável previamente definida" -#: pl_gram.y:955 +#: pl_gram.y:950 #, c-format msgid "diagnostics item %s is not allowed in GET STACKED DIAGNOSTICS" msgstr "item de diagnóstico %s não é permitido em GET STACKED DIAGNOSTICS" -#: pl_gram.y:973 +#: pl_gram.y:968 #, c-format msgid "diagnostics item %s is not allowed in GET CURRENT DIAGNOSTICS" msgstr "item de diagnóstico %s não é permitido em GET CURRENT DIAGNOSTICS" -#: pl_gram.y:1071 +#: pl_gram.y:1066 msgid "unrecognized GET DIAGNOSTICS item" msgstr "item de GET DIAGNOSTICS desconhecido" -#: pl_gram.y:1082 pl_gram.y:3320 +#: pl_gram.y:1077 pl_gram.y:3361 #, c-format msgid "\"%s\" is not a scalar variable" msgstr "\"%s\" não é uma variável escalar" -#: pl_gram.y:1334 pl_gram.y:1528 +#: pl_gram.y:1329 pl_gram.y:1523 #, c-format msgid "loop variable of loop over rows must be a record or row variable or list of scalar variables" msgstr "variável de laço sobre registros deve ser uma variável do tipo record ou row ou lista de variáveis escalares" -#: pl_gram.y:1368 +#: pl_gram.y:1363 #, c-format msgid "cursor FOR loop must have only one target variable" msgstr "cursor do laço FOR deve ter somente uma variável alvo" -#: pl_gram.y:1375 +#: pl_gram.y:1370 #, c-format msgid "cursor FOR loop must use a bound cursor variable" msgstr "cursor do laço FOR deve utilizar uma variável cursor limitado" -#: pl_gram.y:1459 +#: pl_gram.y:1454 #, c-format msgid "integer FOR loop must have only one target variable" msgstr "inteiro do laço FOR deve ter somente uma variável alvo" -#: pl_gram.y:1495 +#: pl_gram.y:1490 #, c-format msgid "cannot specify REVERSE in query FOR loop" msgstr "não pode especificar REVERSE na consulta do laço FOR" -#: pl_gram.y:1642 +#: pl_gram.y:1637 #, c-format msgid "loop variable of FOREACH must be a known variable or list of variables" msgstr "variável do laço FOEACH deve ser uma variável ou lista de variáveis conhecida" -#: pl_gram.y:1694 pl_gram.y:1731 pl_gram.y:1779 pl_gram.y:2776 pl_gram.y:2857 -#: pl_gram.y:2968 pl_gram.y:3721 +#: pl_gram.y:1689 pl_gram.y:1726 pl_gram.y:1774 pl_gram.y:2814 pl_gram.y:2896 +#: pl_gram.y:3007 pl_gram.y:3763 msgid "unexpected end of function definition" msgstr "fim de definição da função inesperado" -#: pl_gram.y:1799 pl_gram.y:1823 pl_gram.y:1839 pl_gram.y:1845 pl_gram.y:1934 -#: pl_gram.y:1942 pl_gram.y:1956 pl_gram.y:2051 pl_gram.y:2232 pl_gram.y:2315 -#: pl_gram.y:2449 pl_gram.y:3563 pl_gram.y:3624 pl_gram.y:3702 +#: pl_gram.y:1794 pl_gram.y:1818 pl_gram.y:1834 pl_gram.y:1840 pl_gram.y:1954 +#: pl_gram.y:1962 pl_gram.y:1976 pl_gram.y:2071 pl_gram.y:2252 pl_gram.y:2335 +#: pl_gram.y:2486 pl_gram.y:3604 pl_gram.y:3665 pl_gram.y:3744 msgid "syntax error" msgstr "erro de sintaxe" -#: pl_gram.y:1827 pl_gram.y:1829 pl_gram.y:2236 pl_gram.y:2238 +#: pl_gram.y:1822 pl_gram.y:1824 pl_gram.y:2256 pl_gram.y:2258 msgid "invalid SQLSTATE code" msgstr "código SQLSTATE inválido" -#: pl_gram.y:1998 +#: pl_gram.y:2018 msgid "syntax error, expected \"FOR\"" msgstr "erro de sintaxe, \"FOR\" esperado" -#: pl_gram.y:2060 +#: pl_gram.y:2080 #, c-format msgid "FETCH statement cannot return multiple rows" msgstr "comando FETCH não pode retornar múltiplos registros" -#: pl_gram.y:2116 +#: pl_gram.y:2136 #, c-format msgid "cursor variable must be a simple variable" msgstr "variável do cursor deve ser uma variável simples" -#: pl_gram.y:2122 +#: pl_gram.y:2142 #, c-format msgid "variable \"%s\" must be of type cursor or refcursor" msgstr "variável \"%s\" deve ser do tipo cursor ou refcursor" -#: pl_gram.y:2290 +#: pl_gram.y:2310 msgid "label does not exist" msgstr "rótulo não existe" -#: pl_gram.y:2420 pl_gram.y:2431 +#: pl_gram.y:2457 pl_gram.y:2468 #, c-format msgid "\"%s\" is not a known variable" msgstr "\"%s\" não é uma variável conhecida" -#: pl_gram.y:2535 pl_gram.y:2545 pl_gram.y:2700 +#: pl_gram.y:2572 pl_gram.y:2582 pl_gram.y:2738 msgid "mismatched parentheses" msgstr "parênteses não correspondem" -#: pl_gram.y:2549 +#: pl_gram.y:2586 #, c-format msgid "missing \"%s\" at end of SQL expression" msgstr "faltando \"%s\" ao fim da expressão SQL" -#: pl_gram.y:2555 +#: pl_gram.y:2592 #, c-format msgid "missing \"%s\" at end of SQL statement" msgstr "faltando \"%s\" ao fim do comando SQL" -#: pl_gram.y:2572 +#: pl_gram.y:2609 msgid "missing expression" msgstr "faltando expressão" -#: pl_gram.y:2574 +#: pl_gram.y:2611 msgid "missing SQL statement" msgstr "faltando comando SQL" -#: pl_gram.y:2702 +#: pl_gram.y:2740 msgid "incomplete data type declaration" msgstr "declaração de tipo de dado incompleta" -#: pl_gram.y:2725 +#: pl_gram.y:2763 msgid "missing data type declaration" msgstr "faltando declaração de tipo de dado" -#: pl_gram.y:2781 +#: pl_gram.y:2819 msgid "INTO specified more than once" msgstr "INTO especificado mais de uma vez" -#: pl_gram.y:2949 +#: pl_gram.y:2988 msgid "expected FROM or IN" msgstr "FROM ou IN esperado" -#: pl_gram.y:3009 +#: pl_gram.y:3048 #, c-format msgid "RETURN cannot have a parameter in function returning set" msgstr "RETURN não pode ter um parâmetro na função que retorna conjunto" -#: pl_gram.y:3010 +#: pl_gram.y:3049 #, c-format msgid "Use RETURN NEXT or RETURN QUERY." msgstr "Utilize RETURN NEXT ou RETURN QUERY." -#: pl_gram.y:3018 +#: pl_gram.y:3057 #, c-format msgid "RETURN cannot have a parameter in function with OUT parameters" msgstr "RETURN não pode ter um parâmetro na função com parâmetros OUT" -#: pl_gram.y:3027 +#: pl_gram.y:3066 #, c-format msgid "RETURN cannot have a parameter in function returning void" msgstr "RETURN não pode ter um parâmetro na função que retorna void" -#: pl_gram.y:3089 +#: pl_gram.y:3126 #, c-format msgid "RETURN NEXT cannot have a parameter in function with OUT parameters" msgstr "RETURN NEXT não pode ter um parâmetro na função com parâmetros OUT" -#: pl_gram.y:3189 +#: pl_gram.y:3230 #, c-format msgid "\"%s\" is declared CONSTANT" msgstr "\"%s\" está declarado CONSTANT" -#: pl_gram.y:3251 pl_gram.y:3263 +#: pl_gram.y:3292 pl_gram.y:3304 #, c-format msgid "record or row variable cannot be part of multiple-item INTO list" msgstr "variável do tipo record ou row não pode ser parte de uma lista INTO de múltiplos itens" -#: pl_gram.y:3308 +#: pl_gram.y:3349 #, c-format msgid "too many INTO variables specified" msgstr "muitas variáveis INTO especificadas" -#: pl_gram.y:3516 +#: pl_gram.y:3557 #, c-format msgid "end label \"%s\" specified for unlabelled block" msgstr "rótulo de fim \"%s\" especificado para bloco sem rótulo" -#: pl_gram.y:3523 +#: pl_gram.y:3564 #, c-format msgid "end label \"%s\" differs from block's label \"%s\"" msgstr "rótulo de fim \"%s\" difere de rótulo do bloco \"%s\"" -#: pl_gram.y:3558 +#: pl_gram.y:3599 #, c-format msgid "cursor \"%s\" has no arguments" msgstr "cursor \"%s\" não tem argumentos" -#: pl_gram.y:3572 +#: pl_gram.y:3613 #, c-format msgid "cursor \"%s\" has arguments" msgstr "cursor \"%s\" tem argumentos" -#: pl_gram.y:3614 +#: pl_gram.y:3655 #, c-format msgid "cursor \"%s\" has no argument named \"%s\"" msgstr "cursor \"%s\" não tem argumento chamado \"%s\"" -#: pl_gram.y:3634 +#: pl_gram.y:3675 #, c-format msgid "value for parameter \"%s\" of cursor \"%s\" specified more than once" msgstr "valor para parâmetro \"%s\" do cursor \"%s\" foi especificado mais de uma vez" -#: pl_gram.y:3659 +#: pl_gram.y:3700 #, c-format msgid "not enough arguments for cursor \"%s\"" msgstr "argumentos insuficientes para cursor \"%s\"" -#: pl_gram.y:3666 +#: pl_gram.y:3707 #, c-format msgid "too many arguments for cursor \"%s\"" msgstr "muitos argumentos para cursor \"%s\"" -#: pl_gram.y:3753 +#: pl_gram.y:3795 msgid "unrecognized RAISE statement option" msgstr "opção do comando RAISE desconhecida" -#: pl_gram.y:3757 +#: pl_gram.y:3799 msgid "syntax error, expected \"=\"" msgstr "erro de sintaxe, \"=\" esperado" -#: pl_handler.c:147 +#: pl_gram.y:3840 +#, c-format +msgid "too many parameters specified for RAISE" +msgstr "muitos parâmetros especificados para RAISE" + +#: pl_gram.y:3844 +#, c-format +msgid "too few parameters specified for RAISE" +msgstr "poucos parâmetros especificados para RAISE" + +#: pl_handler.c:149 msgid "Sets handling of conflicts between PL/pgSQL variable names and table column names." msgstr "Define resolução de conflitos entre nomes de variáveis PL/pgSQL e nomes de colunas de tabelas." -#: pl_handler.c:156 +#: pl_handler.c:158 msgid "Print information about parameters in the DETAIL part of the error messages generated on INTO ... STRICT failures." msgstr "Mostra informação sobre parâmetros na parte DETALHE das mensagens de erro geradas nas falhas INTO ... STRICT." -#: pl_handler.c:164 +#: pl_handler.c:166 +msgid "Perform checks given in ASSERT statements." +msgstr "Realiza verificações informadas em comandos ASSERT." + +#: pl_handler.c:174 msgid "List of programming constructs that should produce a warning." msgstr "Lista de construções de programação que devem produzir um aviso." -#: pl_handler.c:174 +#: pl_handler.c:184 msgid "List of programming constructs that should produce an error." msgstr "Lista de construções de programação que devem produzir um erro." #. translator: %s is typically the translation of "syntax error" -#: pl_scanner.c:554 +#: pl_scanner.c:621 #, c-format msgid "%s at end of input" msgstr "%s no fim da entrada" #. translator: first %s is typically the translation of "syntax error" -#: pl_scanner.c:570 +#: pl_scanner.c:637 #, c-format msgid "%s at or near \"%s\"" msgstr "%s em ou próximo a \"%s\"" diff --git a/src/pl/plpgsql/src/po/ru.po b/src/pl/plpgsql/src/po/ru.po index 9e1939b02596b..776d507763999 100644 --- a/src/pl/plpgsql/src/po/ru.po +++ b/src/pl/plpgsql/src/po/ru.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 9 current\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-08-19 10:07+0000\n" -"PO-Revision-Date: 2014-08-20 22:28+0400\n" +"POT-Creation-Date: 2015-07-22 00:07+0000\n" +"PO-Revision-Date: 2015-07-22 17:10+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -26,34 +26,34 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Lokalize 1.5\n" -#: pl_comp.c:436 pl_handler.c:438 +#: pl_comp.c:432 pl_handler.c:448 #, c-format msgid "PL/pgSQL functions cannot accept type %s" msgstr "функции PL/pgSQL не могут принимать тип %s" -#: pl_comp.c:517 +#: pl_comp.c:513 #, c-format msgid "could not determine actual return type for polymorphic function \"%s\"" msgstr "" "не удалось определить фактический тип результата для полиморфной функции \"%s" "\"" -#: pl_comp.c:547 +#: pl_comp.c:543 #, c-format msgid "trigger functions can only be called as triggers" msgstr "триггерные функции могут вызываться только в триггерах" -#: pl_comp.c:551 pl_handler.c:423 +#: pl_comp.c:547 pl_handler.c:433 #, c-format msgid "PL/pgSQL functions cannot return type %s" msgstr "функции PL/pgSQL не могут возвращать тип %s" -#: pl_comp.c:594 +#: pl_comp.c:588 #, c-format msgid "trigger functions cannot have declared arguments" msgstr "у триггерных функций не может быть объявленных аргументов" -#: pl_comp.c:595 +#: pl_comp.c:589 #, c-format msgid "" "The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV " @@ -62,63 +62,63 @@ msgstr "" "При необходимости к аргументам триггера можно обращаться через переменные " "TG_NARGS and TG_ARGV." -#: pl_comp.c:697 +#: pl_comp.c:691 #, c-format msgid "event trigger functions cannot have declared arguments" msgstr "у функций событийных триггеров не может быть объявленных аргументов" -#: pl_comp.c:962 +#: pl_comp.c:944 #, c-format msgid "compilation of PL/pgSQL function \"%s\" near line %d" msgstr "компиляция функции PL/pgSQL \"%s\" в районе строки %d" -#: pl_comp.c:985 +#: pl_comp.c:967 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "имя параметра \"%s\" указано неоднократно" -#: pl_comp.c:1095 +#: pl_comp.c:1077 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "неоднозначная ссылка на колонку \"%s\"" -#: pl_comp.c:1097 +#: pl_comp.c:1079 #, c-format msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Подразумевается ссылка на переменную PL/pgSQL или колонку таблицы." -#: pl_comp.c:1277 pl_comp.c:1305 pl_exec.c:4179 pl_exec.c:4524 pl_exec.c:4609 -#: pl_exec.c:4700 +#: pl_comp.c:1259 pl_comp.c:1287 pl_exec.c:4391 pl_exec.c:4740 pl_exec.c:4825 +#: pl_exec.c:4916 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "в записи \"%s\" нет поля \"%s\"" -#: pl_comp.c:1836 +#: pl_comp.c:1818 #, c-format msgid "relation \"%s\" does not exist" msgstr "отношение \"%s\" не существует" -#: pl_comp.c:1945 +#: pl_comp.c:1927 #, c-format msgid "variable \"%s\" has pseudo-type %s" msgstr "переменная \"%s\" имеет псевдотип %s" -#: pl_comp.c:2011 +#: pl_comp.c:1994 #, c-format msgid "relation \"%s\" is not a table" msgstr "отношение \"%s\" не является таблицей" -#: pl_comp.c:2171 +#: pl_comp.c:2154 #, c-format msgid "type \"%s\" is only a shell" msgstr "тип \"%s\" - лишь пустышка" -#: pl_comp.c:2245 pl_comp.c:2298 +#: pl_comp.c:2243 pl_comp.c:2296 #, c-format msgid "unrecognized exception condition \"%s\"" msgstr "нераспознанное условие исключения \"%s\"" -#: pl_comp.c:2456 +#: pl_comp.c:2503 #, c-format msgid "" "could not determine actual argument type for polymorphic function \"%s\"" @@ -126,316 +126,317 @@ msgstr "" "не удалось определить фактический тип аргумента для полиморфной функции \"%s" "\"" -#: pl_exec.c:277 pl_exec.c:537 pl_exec.c:816 +#: pl_exec.c:319 pl_exec.c:617 pl_exec.c:887 msgid "during initialization of execution state" msgstr "в процессе инициализации состояния выполнения" -#: pl_exec.c:284 +#: pl_exec.c:326 msgid "while storing call arguments into local variables" msgstr "при сохранении аргументов вызова в локальных переменных" -#: pl_exec.c:326 pl_exec.c:694 +#: pl_exec.c:411 pl_exec.c:765 msgid "during function entry" msgstr "при входе в функцию" -#: pl_exec.c:357 pl_exec.c:725 pl_exec.c:857 +#: pl_exec.c:442 pl_exec.c:796 pl_exec.c:924 #, c-format msgid "CONTINUE cannot be used outside a loop" msgstr "CONTINUE нельзя использовать вне цикла" -#: pl_exec.c:361 +#: pl_exec.c:446 #, c-format msgid "control reached end of function without RETURN" msgstr "конец функции достигнут без RETURN" -#: pl_exec.c:368 +#: pl_exec.c:453 msgid "while casting return value to function's return type" msgstr "при приведении возвращаемого значения к типу результата функции" -#: pl_exec.c:381 pl_exec.c:2843 +#: pl_exec.c:466 pl_exec.c:2966 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" "функция, возвращающая множество, вызвана в контексте, где ему нет места" -#: pl_exec.c:419 pl_exec.c:2686 +#: pl_exec.c:504 pl_exec.c:2808 msgid "returned record type does not match expected record type" msgstr "возвращаемый тип записи не соответствует ожидаемому" -#: pl_exec.c:479 pl_exec.c:733 pl_exec.c:865 +#: pl_exec.c:559 pl_exec.c:804 pl_exec.c:932 msgid "during function exit" msgstr "при выходе из функции" -#: pl_exec.c:729 pl_exec.c:861 +#: pl_exec.c:800 pl_exec.c:928 #, c-format msgid "control reached end of trigger procedure without RETURN" msgstr "конец триггерной процедуры достигнут без RETURN" -#: pl_exec.c:738 +#: pl_exec.c:809 #, c-format msgid "trigger procedure cannot return a set" msgstr "триггерная процедура не может возвращать множество" -#: pl_exec.c:760 +#: pl_exec.c:831 msgid "" "returned row structure does not match the structure of the triggering table" msgstr "" "структура возвращённой строки не соответствует структуре таблицы, вызвавшей " "триггер" -#: pl_exec.c:916 +#. translator: last %s is a phrase such as "during statement block +#. local variable initialization" +#. +#: pl_exec.c:983 #, c-format msgid "PL/pgSQL function %s line %d %s" msgstr "функция PL/pgSQL %s, строка %d, %s" -#: pl_exec.c:927 +#. translator: last %s is a phrase such as "while storing call +#. arguments into local variables" +#. +#: pl_exec.c:994 #, c-format msgid "PL/pgSQL function %s %s" msgstr "функция PL/pgSQL %s, %s" #. translator: last %s is a plpgsql statement type name -#: pl_exec.c:935 +#: pl_exec.c:1002 #, c-format msgid "PL/pgSQL function %s line %d at %s" msgstr "функция PL/pgSQL %s, строка %d, оператор %s" -#: pl_exec.c:941 +#: pl_exec.c:1008 #, c-format msgid "PL/pgSQL function %s" msgstr "функция PL/pgSQL %s" -#: pl_exec.c:1050 +#: pl_exec.c:1118 msgid "during statement block local variable initialization" msgstr "при инициализации локальной переменной в блоке операторов" -#: pl_exec.c:1092 +#: pl_exec.c:1157 #, c-format msgid "variable \"%s\" declared NOT NULL cannot default to NULL" msgstr "" "переменная \"%s\", объявленная NOT NULL, не может иметь значение по " "умолчанию NULL" -#: pl_exec.c:1142 +#: pl_exec.c:1207 msgid "during statement block entry" msgstr "при входе в блок операторов" -#: pl_exec.c:1163 +#: pl_exec.c:1228 msgid "during statement block exit" msgstr "при выходе из блока операторов" -#: pl_exec.c:1206 +#: pl_exec.c:1271 msgid "during exception cleanup" msgstr "при очистке после исключения" -#: pl_exec.c:1559 +#: pl_exec.c:1622 #, c-format msgid "GET STACKED DIAGNOSTICS cannot be used outside an exception handler" msgstr "" "GET STACKED DIAGNOSTICS нельзя использовать вне блока обработчика исключения" -#: pl_exec.c:1760 +#: pl_exec.c:1818 #, c-format msgid "case not found" msgstr "неправильный CASE" -#: pl_exec.c:1761 +#: pl_exec.c:1819 #, c-format msgid "CASE statement is missing ELSE part." msgstr "В операторе CASE не хватает части ELSE." -#: pl_exec.c:1913 +#: pl_exec.c:1973 #, c-format msgid "lower bound of FOR loop cannot be null" msgstr "нижняя граница цикла FOR не может быть равна NULL" -#: pl_exec.c:1928 +#: pl_exec.c:1989 #, c-format msgid "upper bound of FOR loop cannot be null" msgstr "верхняя граница цикла FOR не может быть равна NULL" -#: pl_exec.c:1945 +#: pl_exec.c:2007 #, c-format msgid "BY value of FOR loop cannot be null" msgstr "значение BY в цикле FOR не может быть равно NULL" -#: pl_exec.c:1951 +#: pl_exec.c:2013 #, c-format msgid "BY value of FOR loop must be greater than zero" msgstr "значение BY в цикле FOR должно быть больше нуля" -#: pl_exec.c:2121 pl_exec.c:3730 +#: pl_exec.c:2182 pl_exec.c:3908 #, c-format msgid "cursor \"%s\" already in use" msgstr "курсор \"%s\" уже используется" -#: pl_exec.c:2144 pl_exec.c:3792 +#: pl_exec.c:2205 pl_exec.c:3970 #, c-format msgid "arguments given for cursor without arguments" msgstr "курсору без аргументов были переданы аргументы" -#: pl_exec.c:2163 pl_exec.c:3811 +#: pl_exec.c:2224 pl_exec.c:3989 #, c-format msgid "arguments required for cursor" msgstr "курсору требуются аргументы" -#: pl_exec.c:2250 +#: pl_exec.c:2309 #, c-format msgid "FOREACH expression must not be null" msgstr "выражение FOREACH не может быть равно NULL" -#: pl_exec.c:2256 +#: pl_exec.c:2315 #, c-format msgid "FOREACH expression must yield an array, not type %s" msgstr "выражение в FOREACH должно быть массивом, но не типом %s" -#: pl_exec.c:2273 +#: pl_exec.c:2332 #, c-format msgid "slice dimension (%d) is out of the valid range 0..%d" msgstr "размерность среза (%d) вне допустимого диапазона 0..%d" -#: pl_exec.c:2300 +#: pl_exec.c:2359 #, c-format msgid "FOREACH ... SLICE loop variable must be of an array type" msgstr "переменная цикла FOREACH ... SLICE должна быть массивом" -#: pl_exec.c:2304 +#: pl_exec.c:2363 #, c-format msgid "FOREACH loop variable must not be of an array type" msgstr "переменная цикла FOREACH не должна быть массивом" -#: pl_exec.c:2525 pl_exec.c:2678 +#: pl_exec.c:2551 pl_exec.c:2633 pl_exec.c:2800 #, c-format msgid "" "cannot return non-composite value from function returning composite type" msgstr "" "функция, возвращающая составной тип, не может вернуть несоставное значение" -#: pl_exec.c:2569 pl_gram.y:3075 +#: pl_exec.c:2677 pl_gram.y:3112 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "" "RETURN NEXT можно использовать только в функциях, возвращающих множества" -#: pl_exec.c:2597 pl_exec.c:2720 +#: pl_exec.c:2711 pl_exec.c:2842 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "в RETURN NEXT передан неправильный тип результата" -#: pl_exec.c:2620 pl_exec.c:4166 pl_exec.c:4491 pl_exec.c:4517 pl_exec.c:4583 -#: pl_exec.c:4602 pl_exec.c:4670 pl_exec.c:4693 +#: pl_exec.c:2740 pl_exec.c:4378 pl_exec.c:4707 pl_exec.c:4733 pl_exec.c:4799 +#: pl_exec.c:4818 pl_exec.c:4886 pl_exec.c:4909 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "записи \"%s\" не присвоено значение" -#: pl_exec.c:2622 pl_exec.c:4168 pl_exec.c:4493 pl_exec.c:4519 pl_exec.c:4585 -#: pl_exec.c:4604 pl_exec.c:4672 pl_exec.c:4695 +#: pl_exec.c:2742 pl_exec.c:4380 pl_exec.c:4709 pl_exec.c:4735 pl_exec.c:4801 +#: pl_exec.c:4820 pl_exec.c:4888 pl_exec.c:4911 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "" "Для записи, которой не присвоено значение, структура кортежа не определена." -#: pl_exec.c:2626 pl_exec.c:2646 +#: pl_exec.c:2746 pl_exec.c:2766 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "в RETURN NEXT передан неправильный тип записи" -#: pl_exec.c:2738 +#: pl_exec.c:2861 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "у оператора RETURN NEXT должен быть параметр" -#: pl_exec.c:2771 pl_gram.y:3133 +#: pl_exec.c:2894 pl_gram.y:3174 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "" "RETURN QUERY можно использовать только в функциях, возвращающих множества" -#: pl_exec.c:2791 +#: pl_exec.c:2914 msgid "structure of query does not match function result type" msgstr "структура запроса не соответствует типу результата функции" -#: pl_exec.c:2871 pl_exec.c:3003 +#: pl_exec.c:2994 pl_exec.c:3124 #, c-format msgid "RAISE option already specified: %s" msgstr "этот параметр RAISE уже указан: %s" -#: pl_exec.c:2904 +#: pl_exec.c:3027 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "" "RAISE без параметров нельзя использовать вне блока обработчика исключения" -#: pl_exec.c:2945 -#, c-format -msgid "too few parameters specified for RAISE" -msgstr "недостаточно параметров для RAISE" - -#: pl_exec.c:2973 -#, c-format -msgid "too many parameters specified for RAISE" -msgstr "слишком много параметров для RAISE" - -#: pl_exec.c:2993 +#: pl_exec.c:3114 #, c-format msgid "RAISE statement option cannot be null" msgstr "параметром оператора RAISE не может быть NULL" -#: pl_exec.c:3064 +#: pl_exec.c:3185 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3241 pl_exec.c:3378 pl_exec.c:3569 +#: pl_exec.c:3258 +#, c-format +msgid "assertion failed" +msgstr "нарушение истинности" + +#: pl_exec.c:3414 pl_exec.c:3558 pl_exec.c:3747 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "в PL/pgSQL нельзя выполнить COPY с участием клиента" -#: pl_exec.c:3245 pl_exec.c:3382 pl_exec.c:3573 +#: pl_exec.c:3418 pl_exec.c:3562 pl_exec.c:3751 #, c-format msgid "cannot begin/end transactions in PL/pgSQL" msgstr "в PL/pgSQL нельзя начинать/заканчивать транзакции" -#: pl_exec.c:3246 pl_exec.c:3383 pl_exec.c:3574 +#: pl_exec.c:3419 pl_exec.c:3563 pl_exec.c:3752 #, c-format msgid "Use a BEGIN block with an EXCEPTION clause instead." msgstr "Используйте блок BEGIN с предложением EXCEPTION." -#: pl_exec.c:3406 pl_exec.c:3598 +#: pl_exec.c:3586 pl_exec.c:3776 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO с командой не может возвращать данные" -#: pl_exec.c:3434 pl_exec.c:3626 +#: pl_exec.c:3614 pl_exec.c:3804 #, c-format msgid "query returned no rows" msgstr "запрос не вернул строк" -#: pl_exec.c:3453 pl_exec.c:3645 +#: pl_exec.c:3633 pl_exec.c:3823 #, c-format msgid "query returned more than one row" msgstr "запрос вернул несколько строк" -#: pl_exec.c:3470 +#: pl_exec.c:3650 #, c-format msgid "query has no destination for result data" msgstr "в запросе нет назначения для данных результата" -#: pl_exec.c:3471 +#: pl_exec.c:3651 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "Если вам нужно отбросить результаты SELECT, используйте PERFORM." -#: pl_exec.c:3505 pl_exec.c:6480 +#: pl_exec.c:3683 pl_exec.c:7113 #, c-format msgid "query string argument of EXECUTE is null" msgstr "в качестве текста запроса в EXECUTE передан NULL" -#: pl_exec.c:3561 +#: pl_exec.c:3739 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "возможность выполнения SELECT ... INTO в EXECUTE не реализована" -#: pl_exec.c:3562 +#: pl_exec.c:3740 #, c-format msgid "" "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS " @@ -444,57 +445,57 @@ msgstr "" "Альтернативой может стать EXECUTE ... INTO или EXECUTE CREATE TABLE ... " "AS ..." -#: pl_exec.c:3874 pl_exec.c:3966 +#: pl_exec.c:4052 pl_exec.c:4144 #, c-format msgid "cursor variable \"%s\" is null" msgstr "переменная курсора \"%s\" равна NULL" -#: pl_exec.c:3881 pl_exec.c:3973 +#: pl_exec.c:4059 pl_exec.c:4151 #, c-format msgid "cursor \"%s\" does not exist" msgstr "курсор \"%s\" не существует" -#: pl_exec.c:3895 +#: pl_exec.c:4073 #, c-format msgid "relative or absolute cursor position is null" msgstr "относительная или абсолютная позиция курсора равна NULL" -#: pl_exec.c:4062 +#: pl_exec.c:4253 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "значение NULL нельзя присвоить переменной \"%s\", объявленной NOT NULL" -#: pl_exec.c:4109 +#: pl_exec.c:4322 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "переменной типа кортеж можно присвоить только составное значение" -#: pl_exec.c:4133 +#: pl_exec.c:4346 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "переменной типа запись можно присвоить только составное значение" -#: pl_exec.c:4278 +#: pl_exec.c:4489 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "число размерностей массива (%d) превышает предел (%d)" -#: pl_exec.c:4310 +#: pl_exec.c:4521 #, c-format msgid "subscripted object is not an array" msgstr "для объекта указан индекс, но этот объект - не массив" -#: pl_exec.c:4347 +#: pl_exec.c:4558 #, c-format msgid "array subscript in assignment must not be null" msgstr "индекс элемента массива в присваивании не может быть NULL" -#: pl_exec.c:4806 +#: pl_exec.c:5025 #, c-format msgid "query \"%s\" did not return data" msgstr "запрос \"%s\" не вернул данные" -#: pl_exec.c:4814 +#: pl_exec.c:5033 #, c-format msgid "query \"%s\" returned %d column" msgid_plural "query \"%s\" returned %d columns" @@ -502,12 +503,12 @@ msgstr[0] "запрос \"%s\" вернул %d строку" msgstr[1] "запрос \"%s\" вернул %d строки" msgstr[2] "запрос \"%s\" вернул %d строк" -#: pl_exec.c:4840 +#: pl_exec.c:5060 #, c-format msgid "query \"%s\" returned more than one row" msgstr "запрос \"%s\" вернул несколько строк" -#: pl_exec.c:4897 +#: pl_exec.c:5122 #, c-format msgid "query \"%s\" is not a SELECT" msgstr "запрос \"%s\" - не SELECT" @@ -536,77 +537,77 @@ msgstr "FOR по курсору" msgid "FOREACH over array" msgstr "FOREACH для массива" -#: pl_funcs.c:248 +#: pl_funcs.c:250 msgid "SQL statement" msgstr "SQL-оператор" -#: pl_funcs.c:250 +#: pl_funcs.c:252 msgid "EXECUTE statement" msgstr "оператор EXECUTE" -#: pl_funcs.c:252 +#: pl_funcs.c:254 msgid "FOR over EXECUTE statement" msgstr "FOR по результатам EXECUTE" -#: pl_gram.y:469 +#: pl_gram.y:472 #, c-format msgid "block label must be placed before DECLARE, not after" msgstr "метка блока должна помещаться до DECLARE, а не после" -#: pl_gram.y:489 +#: pl_gram.y:492 #, c-format msgid "collations are not supported by type %s" msgstr "тип %s не поддерживает сортировку (COLLATION)" -#: pl_gram.y:504 +#: pl_gram.y:507 #, c-format msgid "row or record variable cannot be CONSTANT" msgstr "переменная типа кортеж или запись не может быть константой" -#: pl_gram.y:514 +#: pl_gram.y:517 #, c-format msgid "row or record variable cannot be NOT NULL" msgstr "переменная типа кортеж или запись не может быть NULL" -#: pl_gram.y:525 +#: pl_gram.y:528 #, c-format msgid "default value for row or record variable is not supported" msgstr "переменная типа кортеж или запись не может иметь значения по умолчанию" -#: pl_gram.y:670 pl_gram.y:685 pl_gram.y:711 +#: pl_gram.y:673 pl_gram.y:688 pl_gram.y:714 #, c-format msgid "variable \"%s\" does not exist" msgstr "переменная \"%s\" не существует" -#: pl_gram.y:729 pl_gram.y:757 +#: pl_gram.y:732 pl_gram.y:760 msgid "duplicate declaration" msgstr "повторяющееся объявление" -#: pl_gram.y:740 pl_gram.y:768 +#: pl_gram.y:743 pl_gram.y:771 #, c-format msgid "variable \"%s\" shadows a previously defined variable" msgstr "переменная \"%s\" скрывает ранее определённую переменную" -#: pl_gram.y:955 +#: pl_gram.y:950 #, c-format msgid "diagnostics item %s is not allowed in GET STACKED DIAGNOSTICS" msgstr "команда GET STACKED DIAGNOSTICS не принимает элемент %s" -#: pl_gram.y:973 +#: pl_gram.y:968 #, c-format msgid "diagnostics item %s is not allowed in GET CURRENT DIAGNOSTICS" msgstr "команда GET CURRENT DIAGNOSTICS не принимает элемент %s" -#: pl_gram.y:1071 +#: pl_gram.y:1066 msgid "unrecognized GET DIAGNOSTICS item" msgstr "нераспознанный элемент GET DIAGNOSTICS" -#: pl_gram.y:1082 pl_gram.y:3320 +#: pl_gram.y:1077 pl_gram.y:3361 #, c-format msgid "\"%s\" is not a scalar variable" msgstr "\"%s\" - не скалярная переменная" -#: pl_gram.y:1334 pl_gram.y:1528 +#: pl_gram.y:1329 pl_gram.y:1523 #, c-format msgid "" "loop variable of loop over rows must be a record or row variable or list of " @@ -615,206 +616,216 @@ msgstr "" "переменная цикла по кортежам должна быть переменной типа запись или кортеж " "или списком скалярных переменных" -#: pl_gram.y:1368 +#: pl_gram.y:1363 #, c-format msgid "cursor FOR loop must have only one target variable" msgstr "в цикле FOR с курсором должна быть только одна переменная" -#: pl_gram.y:1375 +#: pl_gram.y:1370 #, c-format msgid "cursor FOR loop must use a bound cursor variable" msgstr "" "в цикле FOR с курсором должен использоваться курсор, привязанный к запросу" -#: pl_gram.y:1459 +#: pl_gram.y:1454 #, c-format msgid "integer FOR loop must have only one target variable" msgstr "в целочисленном цикле FOR должна быть только одна переменная" -#: pl_gram.y:1495 +#: pl_gram.y:1490 #, c-format msgid "cannot specify REVERSE in query FOR loop" msgstr "в цикле FOR с запросом нельзя указать REVERSE" -#: pl_gram.y:1642 +#: pl_gram.y:1637 #, c-format msgid "loop variable of FOREACH must be a known variable or list of variables" msgstr "" "переменной цикла FOREACH должна быть известная переменная или список " "переменных" -#: pl_gram.y:1694 pl_gram.y:1731 pl_gram.y:1779 pl_gram.y:2776 pl_gram.y:2857 -#: pl_gram.y:2968 pl_gram.y:3721 +#: pl_gram.y:1689 pl_gram.y:1726 pl_gram.y:1774 pl_gram.y:2814 pl_gram.y:2896 +#: pl_gram.y:3007 pl_gram.y:3763 msgid "unexpected end of function definition" msgstr "неожиданный конец определения функции" -#: pl_gram.y:1799 pl_gram.y:1823 pl_gram.y:1839 pl_gram.y:1845 pl_gram.y:1934 -#: pl_gram.y:1942 pl_gram.y:1956 pl_gram.y:2051 pl_gram.y:2232 pl_gram.y:2315 -#: pl_gram.y:2449 pl_gram.y:3563 pl_gram.y:3624 pl_gram.y:3702 +#: pl_gram.y:1794 pl_gram.y:1818 pl_gram.y:1834 pl_gram.y:1840 pl_gram.y:1954 +#: pl_gram.y:1962 pl_gram.y:1976 pl_gram.y:2071 pl_gram.y:2252 pl_gram.y:2335 +#: pl_gram.y:2486 pl_gram.y:3604 pl_gram.y:3665 pl_gram.y:3744 msgid "syntax error" msgstr "ошибка синтаксиса" -#: pl_gram.y:1827 pl_gram.y:1829 pl_gram.y:2236 pl_gram.y:2238 +#: pl_gram.y:1822 pl_gram.y:1824 pl_gram.y:2256 pl_gram.y:2258 msgid "invalid SQLSTATE code" msgstr "неверный код SQLSTATE" -#: pl_gram.y:1998 +#: pl_gram.y:2018 msgid "syntax error, expected \"FOR\"" msgstr "ошибка синтаксиса, ожидался \"FOR\"" -#: pl_gram.y:2060 +#: pl_gram.y:2080 #, c-format msgid "FETCH statement cannot return multiple rows" msgstr "оператор FETCH не может вернуть несколько строк" -#: pl_gram.y:2116 +#: pl_gram.y:2136 #, c-format msgid "cursor variable must be a simple variable" msgstr "переменная-курсор должна быть простой переменной" -#: pl_gram.y:2122 +#: pl_gram.y:2142 #, c-format msgid "variable \"%s\" must be of type cursor or refcursor" msgstr "переменная \"%s\" должна быть типа cursor или refcursor" -#: pl_gram.y:2290 +#: pl_gram.y:2310 msgid "label does not exist" msgstr "метка не существует" -#: pl_gram.y:2420 pl_gram.y:2431 +#: pl_gram.y:2457 pl_gram.y:2468 #, c-format msgid "\"%s\" is not a known variable" msgstr "\"%s\" - не известная переменная" -#: pl_gram.y:2535 pl_gram.y:2545 pl_gram.y:2700 +#: pl_gram.y:2572 pl_gram.y:2582 pl_gram.y:2738 msgid "mismatched parentheses" msgstr "непарные скобки" -#: pl_gram.y:2549 +#: pl_gram.y:2586 #, c-format msgid "missing \"%s\" at end of SQL expression" msgstr "отсутствует \"%s\" в конце выражения SQL" -#: pl_gram.y:2555 +#: pl_gram.y:2592 #, c-format msgid "missing \"%s\" at end of SQL statement" msgstr "отсутствует \"%s\" в конце оператора SQL" -#: pl_gram.y:2572 +#: pl_gram.y:2609 msgid "missing expression" msgstr "отсутствует выражение" -#: pl_gram.y:2574 +#: pl_gram.y:2611 msgid "missing SQL statement" msgstr "отсутствует оператор SQL" -#: pl_gram.y:2702 +#: pl_gram.y:2740 msgid "incomplete data type declaration" msgstr "неполное определение типа данных" -#: pl_gram.y:2725 +#: pl_gram.y:2763 msgid "missing data type declaration" msgstr "отсутствует определение типа данных" -#: pl_gram.y:2781 +#: pl_gram.y:2819 msgid "INTO specified more than once" msgstr "INTO указано неоднократно" -#: pl_gram.y:2949 +#: pl_gram.y:2988 msgid "expected FROM or IN" msgstr "ожидалось FROM или IN" -#: pl_gram.y:3009 +#: pl_gram.y:3048 #, c-format msgid "RETURN cannot have a parameter in function returning set" msgstr "в функции, возвращающей множество, RETURN должен быть без параметров" -#: pl_gram.y:3010 +#: pl_gram.y:3049 #, c-format msgid "Use RETURN NEXT or RETURN QUERY." msgstr "Используйте RETURN NEXT или RETURN QUERY." -#: pl_gram.y:3018 +#: pl_gram.y:3057 #, c-format msgid "RETURN cannot have a parameter in function with OUT parameters" msgstr "RETURN должен быть без параметров в функции с параметрами OUT" -#: pl_gram.y:3027 +#: pl_gram.y:3066 #, c-format msgid "RETURN cannot have a parameter in function returning void" msgstr "в функции, не возвращающей ничего, RETURN не должен иметь параметров" -#: pl_gram.y:3089 +#: pl_gram.y:3126 #, c-format msgid "RETURN NEXT cannot have a parameter in function with OUT parameters" msgstr "RETURN NEXT должен быть без параметров в функции с параметрами OUT" -#: pl_gram.y:3189 +#: pl_gram.y:3230 #, c-format msgid "\"%s\" is declared CONSTANT" msgstr "\"%s\" объявлена как CONSTANT" -#: pl_gram.y:3251 pl_gram.y:3263 +#: pl_gram.y:3292 pl_gram.y:3304 #, c-format msgid "record or row variable cannot be part of multiple-item INTO list" msgstr "" "переменная типа запись или кортеж не может быть частью списка INTO с " "несколькими элементами" -#: pl_gram.y:3308 +#: pl_gram.y:3349 #, c-format msgid "too many INTO variables specified" msgstr "указано слишком много переменных INTO" -#: pl_gram.y:3516 +#: pl_gram.y:3557 #, c-format msgid "end label \"%s\" specified for unlabelled block" msgstr "конечная метка \"%s\" указана для не помеченного блока" -#: pl_gram.y:3523 +#: pl_gram.y:3564 #, c-format msgid "end label \"%s\" differs from block's label \"%s\"" msgstr "конечная метка \"%s\" отличается от метки блока \"%s\"" -#: pl_gram.y:3558 +#: pl_gram.y:3599 #, c-format msgid "cursor \"%s\" has no arguments" msgstr "курсор \"%s\" не имеет аргументов" -#: pl_gram.y:3572 +#: pl_gram.y:3613 #, c-format msgid "cursor \"%s\" has arguments" msgstr "курсор \"%s\" имеет аргументы" -#: pl_gram.y:3614 +#: pl_gram.y:3655 #, c-format msgid "cursor \"%s\" has no argument named \"%s\"" msgstr "курсор \"%s\" не имеет аргумента \"%s\"" -#: pl_gram.y:3634 +#: pl_gram.y:3675 #, c-format msgid "value for parameter \"%s\" of cursor \"%s\" specified more than once" msgstr "значение параметра \"%s\" курсора \"%s\" указано неоднократно" -#: pl_gram.y:3659 +#: pl_gram.y:3700 #, c-format msgid "not enough arguments for cursor \"%s\"" msgstr "недостаточно аргументов для курсора \"%s\"" -#: pl_gram.y:3666 +#: pl_gram.y:3707 #, c-format msgid "too many arguments for cursor \"%s\"" msgstr "слишком много аргументов для курсора \"%s\"" -#: pl_gram.y:3753 +#: pl_gram.y:3795 msgid "unrecognized RAISE statement option" msgstr "нераспознанный параметр оператора RAISE" -#: pl_gram.y:3757 +#: pl_gram.y:3799 msgid "syntax error, expected \"=\"" msgstr "ошибка синтаксиса, ожидалось \"=\"" -#: pl_handler.c:147 +#: pl_gram.y:3840 +#, c-format +msgid "too many parameters specified for RAISE" +msgstr "слишком много параметров для RAISE" + +#: pl_gram.y:3844 +#, c-format +msgid "too few parameters specified for RAISE" +msgstr "недостаточно параметров для RAISE" + +#: pl_handler.c:149 msgid "" "Sets handling of conflicts between PL/pgSQL variable names and table column " "names." @@ -822,7 +833,7 @@ msgstr "" "Выбирает режим разрешения конфликтов между именами переменных PL/pgSQL и " "именами колонок таблиц." -#: pl_handler.c:156 +#: pl_handler.c:158 msgid "" "Print information about parameters in the DETAIL part of the error messages " "generated on INTO ... STRICT failures." @@ -830,23 +841,27 @@ msgstr "" "Добавляет информацию о параметрах в раздел DETAIL сообщений, выводимых при " "ошибках в INTO ... STRICT." -#: pl_handler.c:164 +#: pl_handler.c:166 +msgid "Perform checks given in ASSERT statements." +msgstr "Выполняет проверки, заданные в операторах ASSERT." + +#: pl_handler.c:174 msgid "List of programming constructs that should produce a warning." msgstr "" "Список программных конструкций, которые должны выдавать предупреждения." -#: pl_handler.c:174 +#: pl_handler.c:184 msgid "List of programming constructs that should produce an error." msgstr "Список программных конструкций, которые должны выдавать ошибку." #. translator: %s is typically the translation of "syntax error" -#: pl_scanner.c:554 +#: pl_scanner.c:621 #, c-format msgid "%s at end of input" msgstr "%s в конце" #. translator: first %s is typically the translation of "syntax error" -#: pl_scanner.c:570 +#: pl_scanner.c:637 #, c-format msgid "%s at or near \"%s\"" msgstr "%s (примерное положение: \"%s\")" diff --git a/src/pl/plpython/expected/plpython_composite.out b/src/pl/plpython/expected/plpython_composite.out index ad454f37394bf..0ef0c21235cd8 100644 --- a/src/pl/plpython/expected/plpython_composite.out +++ b/src/pl/plpython/expected/plpython_composite.out @@ -65,6 +65,8 @@ elif typ == 'obj': type_record.first = first type_record.second = second return type_record +elif typ == 'str': + return "('%s',%r)" % (first, second) $$ LANGUAGE plpythonu; SELECT * FROM multiout_record_as('dict', 'foo', 1, 'f'); first | second @@ -78,6 +80,138 @@ SELECT multiout_record_as('dict', 'foo', 1, 'f'); (foo,1) (1 row) +SELECT * FROM multiout_record_as('dict', null, null, false); + first | second +-------+-------- + | +(1 row) + +SELECT * FROM multiout_record_as('dict', 'one', null, false); + first | second +-------+-------- + one | +(1 row) + +SELECT * FROM multiout_record_as('dict', null, 2, false); + first | second +-------+-------- + | 2 +(1 row) + +SELECT * FROM multiout_record_as('dict', 'three', 3, false); + first | second +-------+-------- + three | 3 +(1 row) + +SELECT * FROM multiout_record_as('dict', null, null, true); + first | second +-------+-------- + | +(1 row) + +SELECT * FROM multiout_record_as('tuple', null, null, false); + first | second +-------+-------- + | +(1 row) + +SELECT * FROM multiout_record_as('tuple', 'one', null, false); + first | second +-------+-------- + one | +(1 row) + +SELECT * FROM multiout_record_as('tuple', null, 2, false); + first | second +-------+-------- + | 2 +(1 row) + +SELECT * FROM multiout_record_as('tuple', 'three', 3, false); + first | second +-------+-------- + three | 3 +(1 row) + +SELECT * FROM multiout_record_as('tuple', null, null, true); + first | second +-------+-------- + | +(1 row) + +SELECT * FROM multiout_record_as('list', null, null, false); + first | second +-------+-------- + | +(1 row) + +SELECT * FROM multiout_record_as('list', 'one', null, false); + first | second +-------+-------- + one | +(1 row) + +SELECT * FROM multiout_record_as('list', null, 2, false); + first | second +-------+-------- + | 2 +(1 row) + +SELECT * FROM multiout_record_as('list', 'three', 3, false); + first | second +-------+-------- + three | 3 +(1 row) + +SELECT * FROM multiout_record_as('list', null, null, true); + first | second +-------+-------- + | +(1 row) + +SELECT * FROM multiout_record_as('obj', null, null, false); + first | second +-------+-------- + | +(1 row) + +SELECT * FROM multiout_record_as('obj', 'one', null, false); + first | second +-------+-------- + one | +(1 row) + +SELECT * FROM multiout_record_as('obj', null, 2, false); + first | second +-------+-------- + | 2 +(1 row) + +SELECT * FROM multiout_record_as('obj', 'three', 3, false); + first | second +-------+-------- + three | 3 +(1 row) + +SELECT * FROM multiout_record_as('obj', null, null, true); + first | second +-------+-------- + | +(1 row) + +SELECT * FROM multiout_record_as('str', 'one', 1, false); + first | second +-------+-------- + 'one' | 1 +(1 row) + +SELECT * FROM multiout_record_as('str', 'one', 2, false); + first | second +-------+-------- + 'one' | 2 +(1 row) + SELECT *, s IS NULL AS snull FROM multiout_record_as('tuple', 'xxx', NULL, 'f') AS f(f, s); f | s | snull -----+---+------- @@ -179,10 +313,14 @@ elif typ == 'dict': d = {'first': n * 2, 'second': n * 3, 'extra': 'not important'} elif typ == 'tuple': d = (n * 2, n * 3) +elif typ == 'list': + d = [ n * 2, n * 3 ] elif typ == 'obj': class d: pass d.first = n * 2 d.second = n * 3 +elif typ == 'str': + d = "(%r,%r)" % (n * 2, n * 3) for i in range(n): yield (i, d) $$ LANGUAGE plpythonu; @@ -200,6 +338,18 @@ SELECT * FROM multiout_table_type_setof('dict', 'f', 3); 2 | (6,9) (3 rows) +SELECT * FROM multiout_table_type_setof('dict', 'f', 7); + n | column2 +---+--------- + 0 | (14,21) + 1 | (14,21) + 2 | (14,21) + 3 | (14,21) + 4 | (14,21) + 5 | (14,21) + 6 | (14,21) +(7 rows) + SELECT * FROM multiout_table_type_setof('tuple', 'f', 2); n | column2 ---+--------- @@ -207,6 +357,29 @@ SELECT * FROM multiout_table_type_setof('tuple', 'f', 2); 1 | (4,6) (2 rows) +SELECT * FROM multiout_table_type_setof('tuple', 'f', 3); + n | column2 +---+--------- + 0 | (6,9) + 1 | (6,9) + 2 | (6,9) +(3 rows) + +SELECT * FROM multiout_table_type_setof('list', 'f', 2); + n | column2 +---+--------- + 0 | (4,6) + 1 | (4,6) +(2 rows) + +SELECT * FROM multiout_table_type_setof('list', 'f', 3); + n | column2 +---+--------- + 0 | (6,9) + 1 | (6,9) + 2 | (6,9) +(3 rows) + SELECT * FROM multiout_table_type_setof('obj', 'f', 4); n | column2 ---+--------- @@ -216,6 +389,39 @@ SELECT * FROM multiout_table_type_setof('obj', 'f', 4); 3 | (8,12) (4 rows) +SELECT * FROM multiout_table_type_setof('obj', 'f', 5); + n | column2 +---+--------- + 0 | (10,15) + 1 | (10,15) + 2 | (10,15) + 3 | (10,15) + 4 | (10,15) +(5 rows) + +SELECT * FROM multiout_table_type_setof('str', 'f', 6); + n | column2 +---+--------- + 0 | (12,18) + 1 | (12,18) + 2 | (12,18) + 3 | (12,18) + 4 | (12,18) + 5 | (12,18) +(6 rows) + +SELECT * FROM multiout_table_type_setof('str', 'f', 7); + n | column2 +---+--------- + 0 | (14,21) + 1 | (14,21) + 2 | (14,21) + 3 | (14,21) + 4 | (14,21) + 5 | (14,21) + 6 | (14,21) +(7 rows) + SELECT * FROM multiout_table_type_setof('dict', 't', 3); n | column2 ---+--------- diff --git a/src/pl/plpython/plpy_elog.c b/src/pl/plpython/plpy_elog.c index 461d68c5461f6..15406d60b9012 100644 --- a/src/pl/plpython/plpy_elog.c +++ b/src/pl/plpython/plpy_elog.c @@ -97,7 +97,7 @@ PLy_elog(int elevel, const char *fmt,...) PG_TRY(); { ereport(elevel, - (errcode(sqlerrcode ? sqlerrcode : ERRCODE_INTERNAL_ERROR), + (errcode(sqlerrcode ? sqlerrcode : ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), errmsg_internal("%s", primary ? primary : "no exception data"), (detail) ? errdetail_internal("%s", detail) : 0, (tb_depth > 0 && tbmsg) ? errcontext("%s", tbmsg) : 0, diff --git a/src/pl/plpython/plpy_exec.c b/src/pl/plpython/plpy_exec.c index 8c525c932a7e5..3ccebe403e428 100644 --- a/src/pl/plpython/plpy_exec.c +++ b/src/pl/plpython/plpy_exec.c @@ -662,11 +662,13 @@ PLy_modify_tuple(PLyProcedure *proc, PyObject *pltd, TriggerData *tdata, { if ((plntup = PyDict_GetItemString(pltd, "new")) == NULL) ereport(ERROR, - (errmsg("TD[\"new\"] deleted, cannot modify row"))); + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("TD[\"new\"] deleted, cannot modify row"))); Py_INCREF(plntup); if (!PyDict_Check(plntup)) ereport(ERROR, - (errmsg("TD[\"new\"] is not a dictionary"))); + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("TD[\"new\"] is not a dictionary"))); plkeys = PyDict_Keys(plntup); natts = PyList_Size(plkeys); @@ -690,13 +692,15 @@ PLy_modify_tuple(PLyProcedure *proc, PyObject *pltd, TriggerData *tdata, else { ereport(ERROR, - (errmsg("TD[\"new\"] dictionary key at ordinal position %d is not a string", i))); + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("TD[\"new\"] dictionary key at ordinal position %d is not a string", i))); plattstr = NULL; /* keep compiler quiet */ } attn = SPI_fnumber(tupdesc, plattstr); if (attn == SPI_ERROR_NOATTRIBUTE) ereport(ERROR, - (errmsg("key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row", + (errcode(ERRCODE_UNDEFINED_COLUMN), + errmsg("key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row", plattstr))); atti = attn - 1; diff --git a/src/pl/plpython/plpy_typeio.c b/src/pl/plpython/plpy_typeio.c index 7a45b22871459..05add6e2ce88f 100644 --- a/src/pl/plpython/plpy_typeio.c +++ b/src/pl/plpython/plpy_typeio.c @@ -912,20 +912,30 @@ PLySequence_ToArray(PLyObToDatum *arg, int32 typmod, PyObject *plrv) static Datum PLyString_ToComposite(PLyTypeInfo *info, TupleDesc desc, PyObject *string) { + Datum result; HeapTuple typeTup; + PLyTypeInfo locinfo; PLyExecutionContext *exec_ctx = PLy_current_execution_context(); + /* Create a dummy PLyTypeInfo */ + MemSet(&locinfo, 0, sizeof(PLyTypeInfo)); + PLy_typeinfo_init(&locinfo); + typeTup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(desc->tdtypeid)); if (!HeapTupleIsValid(typeTup)) elog(ERROR, "cache lookup failed for type %u", desc->tdtypeid); - PLy_output_datum_func2(&info->out.d, typeTup, + PLy_output_datum_func2(&locinfo.out.d, typeTup, exec_ctx->curr_proc->langid, exec_ctx->curr_proc->trftypes); ReleaseSysCache(typeTup); - return PLyObject_ToDatum(&info->out.d, info->out.d.typmod, string); + result = PLyObject_ToDatum(&locinfo.out.d, desc->tdtypmod, string); + + PLy_typeinfo_dealloc(&locinfo); + + return result; } diff --git a/src/pl/plpython/po/es.po b/src/pl/plpython/po/es.po index 8dcb893876430..50449ca7acd85 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 9.4)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:37+0000\n" +"POT-Creation-Date: 2015-10-04 00:37+0000\n" "PO-Revision-Date: 2014-12-15 16:56-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -31,12 +31,12 @@ msgstr "plpy.cursor espera una consulta o un plan" msgid "plpy.cursor takes a sequence as its second argument" msgstr "plpy.cursor lleva una secuencia como segundo argumento" -#: plpy_cursorobject.c:187 plpy_spi.c:223 +#: plpy_cursorobject.c:187 plpy_spi.c:217 #, c-format msgid "could not execute plan" msgstr "no se pudo ejecutar el plan" -#: plpy_cursorobject.c:190 plpy_spi.c:226 +#: plpy_cursorobject.c:190 plpy_spi.c:220 #, c-format msgid "Expected sequence of %d argument, got %d: %s" msgid_plural "Expected sequence of %d arguments, got %d: %s" @@ -63,7 +63,7 @@ msgstr "haciendo «fetch» en un cursor cerrado" msgid "closing a cursor in an aborted subtransaction" msgstr "cerrando un cursor en una subtransacción abortada" -#: plpy_elog.c:103 plpy_elog.c:104 plpy_plpymodule.c:420 +#: plpy_elog.c:103 plpy_elog.c:104 plpy_plpymodule.c:419 #, c-format msgid "%s" msgstr "%s" @@ -75,7 +75,7 @@ msgstr "modo de retorno de conjunto de función no soportado" #: plpy_exec.c:92 #, c-format -msgid "PL/Python set-returning functions only support returning only value per call." +msgid "PL/Python set-returning functions only support returning one value per call." msgstr "Las funciones PL/Python que retornan conjuntos sólo permiten retornar un valor por invocación." #: plpy_exec.c:104 @@ -98,78 +98,78 @@ msgstr "error extrayendo el próximo elemento del iterador" msgid "PL/Python function with return type \"void\" did not return None" msgstr "función PL/Python con tipo de retorno «void» no retorna None" -#: plpy_exec.c:289 plpy_exec.c:315 +#: plpy_exec.c:291 plpy_exec.c:317 #, c-format msgid "unexpected return value from trigger procedure" msgstr "valor de retorno no esperado desde el procedimiento disparador" -#: plpy_exec.c:290 +#: plpy_exec.c:292 #, c-format msgid "Expected None or a string." msgstr "Se esperaba None o una cadena." -#: plpy_exec.c:305 +#: plpy_exec.c:307 #, c-format msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored" msgstr "función de disparador de PL/Python retorno «MODIFY» en un disparador de tipo DELETE -- ignorado" -#: plpy_exec.c:316 +#: plpy_exec.c:318 #, c-format msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"." msgstr "Se esperaba None, «OK», «SKIP» o «MODIFY»." -#: plpy_exec.c:397 +#: plpy_exec.c:399 #, c-format msgid "PyList_SetItem() failed, while setting up arguments" msgstr "PyList_SetItem() falló, mientras se inicializaban los argumentos" -#: plpy_exec.c:401 +#: plpy_exec.c:403 #, c-format msgid "PyDict_SetItemString() failed, while setting up arguments" msgstr "PyDict_SetItemString() falló, mientras se inicializaban los argumentos" -#: plpy_exec.c:413 +#: plpy_exec.c:415 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "se llamó una función que retorna un registro en un contexto que no puede aceptarlo" -#: plpy_exec.c:451 +#: plpy_exec.c:453 #, c-format msgid "while creating return value" msgstr "mientras se creaba el valor de retorno" -#: plpy_exec.c:475 +#: plpy_exec.c:477 #, c-format msgid "could not create new dictionary while building trigger arguments" msgstr "no se pudo crear un nuevo diccionario mientras se construían los argumentos de disparador" -#: plpy_exec.c:663 +#: plpy_exec.c:666 #, c-format msgid "TD[\"new\"] deleted, cannot modify row" msgstr "TD[\"new\"] borrado, no se puede modicar el registro" -#: plpy_exec.c:667 +#: plpy_exec.c:671 #, c-format msgid "TD[\"new\"] is not a dictionary" msgstr "TD[\"new\"] no es un diccionario" -#: plpy_exec.c:691 +#: plpy_exec.c:696 #, c-format msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string" msgstr "el nombre del atributo de TD[\"new\"] en la posición %d no es una cadena" -#: plpy_exec.c:697 +#: plpy_exec.c:703 #, c-format msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row" msgstr "la llave «%s» en TD[\"new\"] no existe como columna en la fila disparadora" -#: plpy_exec.c:777 +#: plpy_exec.c:783 #, c-format msgid "while modifying trigger row" msgstr "mientras se modificaba la fila de disparador" # FIXME not very happy with this -#: plpy_exec.c:838 +#: plpy_exec.c:844 #, c-format msgid "forcibly aborting a subtransaction that has not been exited" msgstr "abortando una subtransacción que no se ha cerrado" @@ -209,12 +209,12 @@ msgstr "no se pudo crear las globales" msgid "could not initialize globals" msgstr "no se pudo inicializar las globales" -#: plpy_main.c:347 +#: plpy_main.c:348 #, c-format msgid "PL/Python function \"%s\"" msgstr "función PL/Python «%s»" -#: plpy_main.c:354 +#: plpy_main.c:355 #, c-format msgid "PL/Python anonymous code block" msgstr "bloque de código anónimo de PL/Python" @@ -239,41 +239,41 @@ msgstr "no se pudo importar el módulo spiexceptions" msgid "could not create the base SPI exceptions" msgstr "no se pudo crear las excepciones SPI basales" -#: plpy_plpymodule.c:253 plpy_plpymodule.c:257 +#: plpy_plpymodule.c:252 plpy_plpymodule.c:256 #, c-format msgid "could not generate SPI exceptions" msgstr "no se pudo generar excepciones SPI" -#: plpy_plpymodule.c:388 +#: plpy_plpymodule.c:387 #, c-format msgid "could not unpack arguments in plpy.elog" msgstr "no se pudo desempaquetar los argumentos de plpy.elog" -#: plpy_plpymodule.c:396 +#: plpy_plpymodule.c:395 msgid "could not parse error message in plpy.elog" msgstr "no se pudo analizar el mensaje de error de plpy.elog" -#: plpy_procedure.c:200 +#: plpy_procedure.c:213 #, c-format msgid "trigger functions can only be called as triggers" msgstr "las funciones disparadoras sólo pueden ser llamadas como disparadores" -#: plpy_procedure.c:205 plpy_typeio.c:409 +#: plpy_procedure.c:218 #, c-format msgid "PL/Python functions cannot return type %s" msgstr "las funciones PL/Python no pueden retornar el tipo %s" -#: plpy_procedure.c:287 +#: plpy_procedure.c:300 #, c-format msgid "PL/Python functions cannot accept type %s" msgstr "la funciones PL/Python no pueden aceptar el tipo %s" -#: plpy_procedure.c:383 +#: plpy_procedure.c:398 #, c-format msgid "could not compile PL/Python function \"%s\"" msgstr "no se pudo compilar la función PL/Python «%s»" -#: plpy_procedure.c:386 +#: plpy_procedure.c:401 #, c-format msgid "could not compile anonymous PL/Python code block" msgstr "no se pudo compilar el bloque anónimo PL/Python" @@ -293,27 +293,22 @@ msgstr "el segundo argumento de plpy.prepare debe ser una secuencia" msgid "plpy.prepare: type name at ordinal position %d is not a string" msgstr "plpy.prepare: el nombre de tipo en la posición %d no es una cadena" -#: plpy_spi.c:138 -#, c-format -msgid "plpy.prepare does not support composite types" -msgstr "plpy.prepare no soporta tipos compuestos" - -#: plpy_spi.c:188 +#: plpy_spi.c:182 #, c-format msgid "plpy.execute expected a query or a plan" msgstr "plpy.execute espera una consulta o un plan" -#: plpy_spi.c:207 +#: plpy_spi.c:201 #, c-format msgid "plpy.execute takes a sequence as its second argument" msgstr "plpy.execute lleva una secuencia como segundo argumento" -#: plpy_spi.c:331 +#: plpy_spi.c:325 #, c-format msgid "SPI_execute_plan failed: %s" msgstr "falló SPI_execute_plan: %s" -#: plpy_spi.c:373 +#: plpy_spi.c:367 #, c-format msgid "SPI_execute failed: %s" msgstr "falló SPI_execute: %s" @@ -338,87 +333,82 @@ msgstr "no se ha entrado en esta subtransacción" msgid "there is no subtransaction to exit from" msgstr "no hay una subtransacción de la cual salir" -#: plpy_typeio.c:294 +#: plpy_typeio.c:302 #, c-format msgid "could not create new dictionary" msgstr "no se pudo crear un nuevo diccionario" -#: plpy_typeio.c:411 -#, c-format -msgid "PL/Python does not support conversion to arrays of row types." -msgstr "PL/Python no soporta la conversión de arrays a tipos de registro." - -#: plpy_typeio.c:540 +#: plpy_typeio.c:564 #, c-format msgid "could not import a module for Decimal constructor" msgstr "no se pudo importar un módulo para el constructor Decimal" -#: plpy_typeio.c:544 +#: plpy_typeio.c:568 #, c-format msgid "no Decimal attribute in module" msgstr "no se encontró atributo Decimal en el módulo" -#: plpy_typeio.c:550 +#: plpy_typeio.c:574 #, c-format msgid "conversion from numeric to Decimal failed" msgstr "falló la conversión de numeric a Decimal" -#: plpy_typeio.c:619 +#: plpy_typeio.c:649 #, c-format msgid "cannot convert multidimensional array to Python list" msgstr "no se puede convertir array multidimensional a una lista Python" -#: plpy_typeio.c:620 +#: plpy_typeio.c:650 #, c-format msgid "PL/Python only supports one-dimensional arrays." msgstr "PL/Python sólo soporta arrays unidimensionales." -#: plpy_typeio.c:626 +#: plpy_typeio.c:656 #, c-format msgid "could not create new Python list" msgstr "no se pudo crear una nueva lista Python" -#: plpy_typeio.c:685 +#: plpy_typeio.c:715 #, c-format msgid "could not create bytes representation of Python object" msgstr "no se pudo crear la representación de cadena de bytes de Python" -#: plpy_typeio.c:777 +#: plpy_typeio.c:820 #, c-format msgid "could not create string representation of Python object" msgstr "no se pudo crear la representación de cadena de texto del objeto de Python" -#: plpy_typeio.c:788 +#: plpy_typeio.c:831 #, c-format msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes" msgstr "no se pudo convertir el objeto Python a un cstring: la representación de cadena Python parece tener bytes nulos (\\0)" -#: plpy_typeio.c:823 +#: plpy_typeio.c:877 #, c-format msgid "return value of function with array return type is not a Python sequence" msgstr "el valor de retorno de la función con tipo de retorno array no es una secuencia Python" -#: plpy_typeio.c:930 +#: plpy_typeio.c:992 #, c-format msgid "key \"%s\" not found in mapping" msgstr "la llave «%s» no fue encontrada en el mapa" -#: plpy_typeio.c:931 +#: plpy_typeio.c:993 #, c-format msgid "To return null in a column, add the value None to the mapping with the key named after the column." msgstr "Para retornar null en una columna, agregue el valor None al mapa, con llave llamada igual que la columna." -#: plpy_typeio.c:979 +#: plpy_typeio.c:1044 #, c-format msgid "length of returned sequence did not match number of columns in row" msgstr "el tamaño de la secuencia retornada no concuerda con el número de columnas de la fila" -#: plpy_typeio.c:1087 +#: plpy_typeio.c:1155 #, c-format msgid "attribute \"%s\" does not exist in Python object" msgstr "el atributo «%s» no existe en el objeto Python" -#: plpy_typeio.c:1088 +#: plpy_typeio.c:1156 #, c-format msgid "To return null in a column, let the returned object have an attribute named after column with value None." msgstr "Para retornar null en una columna, haga que el objeto retornado tenga un atributo llamado igual que la columna, con valor None." @@ -432,3 +422,9 @@ msgstr "no se pudo convertir el objeto Unicode de Python a bytes" #, c-format msgid "could not extract bytes from encoded string" msgstr "no se pudo extraer bytes desde la cadena codificada" + +#~ msgid "plpy.prepare does not support composite types" +#~ msgstr "plpy.prepare no soporta tipos compuestos" + +#~ msgid "PL/Python does not support conversion to arrays of row types." +#~ msgstr "PL/Python no soporta la conversión de arrays a tipos de registro." diff --git a/src/pl/plpython/po/it.po b/src/pl/plpython/po/it.po index 97616e31c26aa..26043fedcb8d8 100644 --- a/src/pl/plpython/po/it.po +++ b/src/pl/plpython/po/it.po @@ -17,10 +17,10 @@ # msgid "" msgstr "" -"Project-Id-Version: plpython (PostgreSQL) 9.4\n" +"Project-Id-Version: plpython (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-07-30 04:07+0000\n" -"PO-Revision-Date: 2014-07-30 22:35+0100\n" +"POT-Creation-Date: 2015-07-06 14:37+0000\n" +"PO-Revision-Date: 2015-07-06 19:38+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -40,12 +40,12 @@ msgstr "plpy.cursor richiede una query o un piano" msgid "plpy.cursor takes a sequence as its second argument" msgstr "plpy.cursor richiede una sequenza come secondo argomento" -#: plpy_cursorobject.c:187 plpy_spi.c:223 +#: plpy_cursorobject.c:187 plpy_spi.c:217 #, c-format msgid "could not execute plan" msgstr "esecuzione del piano fallita" -#: plpy_cursorobject.c:190 plpy_spi.c:226 +#: plpy_cursorobject.c:190 plpy_spi.c:220 #, c-format msgid "Expected sequence of %d argument, got %d: %s" msgid_plural "Expected sequence of %d arguments, got %d: %s" @@ -72,7 +72,7 @@ msgstr "lettura da un cursore chiuso" msgid "closing a cursor in an aborted subtransaction" msgstr "chiusura di un cursore in una sotto-transazione interrotta" -#: plpy_elog.c:103 plpy_elog.c:104 plpy_plpymodule.c:420 +#: plpy_elog.c:103 plpy_elog.c:104 plpy_plpymodule.c:419 #, c-format msgid "%s" msgstr "%s" @@ -84,8 +84,8 @@ msgstr "modalità di ritorno della funzione set non supportata" #: plpy_exec.c:92 #, c-format -msgid "PL/Python set-returning functions only support returning only value per call." -msgstr "le funzioni PL/Python che restituiscono insiemi supportano solo la restituzione di un solo valore per chiamata." +msgid "PL/Python set-returning functions only support returning one value per call." +msgstr "Le funzioni PL/Python che restituiscono insiemi supportano la restituzione di un solo valore per chiamata." #: plpy_exec.c:104 #, c-format @@ -95,7 +95,7 @@ msgstr "l'oggetto restituito non può essere iterato" #: plpy_exec.c:105 #, c-format msgid "PL/Python set-returning functions must return an iterable object." -msgstr "le funzioni PL/Python che restituiscono insiemi devono restituire un oggetto iterabile" +msgstr "Le funzioni PL/Python che restituiscono insiemi devono restituire un oggetto iterabile." #: plpy_exec.c:130 #, c-format @@ -107,77 +107,77 @@ msgstr "errore nell'ottenere l'elemento successivo dall'iteratore" msgid "PL/Python function with return type \"void\" did not return None" msgstr "la funzione PL/Python che restituisce \"void\" non ha restituito None" -#: plpy_exec.c:289 plpy_exec.c:315 +#: plpy_exec.c:291 plpy_exec.c:317 #, c-format msgid "unexpected return value from trigger procedure" msgstr "la prodedura trigger ha restituito un valore inatteso" -#: plpy_exec.c:290 +#: plpy_exec.c:292 #, c-format msgid "Expected None or a string." msgstr "Atteso None o una stringa." -#: plpy_exec.c:305 +#: plpy_exec.c:307 #, c-format msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored" msgstr "la funzione trigger PL/Python ha restituito \"MODIFY\" in un trigger DELETE -- ignorato" -#: plpy_exec.c:316 +#: plpy_exec.c:318 #, c-format msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"." msgstr "Atteso None, \"OK\", \"SKIP\", o \"MODIFY\"." -#: plpy_exec.c:397 +#: plpy_exec.c:399 #, c-format msgid "PyList_SetItem() failed, while setting up arguments" msgstr "PyList_SetItem() è fallita durante l'impostazione degli argomenti" -#: plpy_exec.c:401 +#: plpy_exec.c:403 #, c-format msgid "PyDict_SetItemString() failed, while setting up arguments" msgstr "PyDict_SetItemString() è fallita durante l'impostazione degli argomenti" -#: plpy_exec.c:413 +#: plpy_exec.c:415 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "la funzione che restituisce un record è chiamata in un contesto che non può accettare il tipo record" -#: plpy_exec.c:451 +#: plpy_exec.c:453 #, c-format msgid "while creating return value" msgstr "durante la creazione del valore da restituire" -#: plpy_exec.c:475 +#: plpy_exec.c:477 #, c-format msgid "could not create new dictionary while building trigger arguments" msgstr "creazione del nuovo dizionario nella costruzione degli argomenti del trigger fallita" -#: plpy_exec.c:663 +#: plpy_exec.c:665 #, c-format msgid "TD[\"new\"] deleted, cannot modify row" msgstr "TD[\"new\"] cancellato, non è possibile modificare la riga" -#: plpy_exec.c:667 +#: plpy_exec.c:669 #, c-format msgid "TD[\"new\"] is not a dictionary" msgstr "TD[\"new\"] non è un dizionario" -#: plpy_exec.c:691 +#: plpy_exec.c:693 #, c-format msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string" msgstr "la chiave di dizionario TD[\"new\"] alla posizione %d non è una stringa" -#: plpy_exec.c:697 +#: plpy_exec.c:699 #, c-format msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row" msgstr "la chiave \"%s\" trovata in TD[\"new\"] non esiste come colonna nella riga del trigger" -#: plpy_exec.c:777 +#: plpy_exec.c:779 #, c-format msgid "while modifying trigger row" msgstr "durante la modifica della riga trigger" -#: plpy_exec.c:838 +#: plpy_exec.c:840 #, c-format msgid "forcibly aborting a subtransaction that has not been exited" msgstr "interruzione forzata di una sotto-transazione che non è terminata" @@ -217,12 +217,12 @@ msgstr "creazione delle variabili globali fallita" msgid "could not initialize globals" msgstr "inizializzazione delle variabili globali fallita" -#: plpy_main.c:347 +#: plpy_main.c:348 #, c-format msgid "PL/Python function \"%s\"" msgstr "funzione PL/Python \"%s\"" -#: plpy_main.c:354 +#: plpy_main.c:355 #, c-format msgid "PL/Python anonymous code block" msgstr "blocco di codice anonimo in PL/Python" @@ -247,41 +247,41 @@ msgstr "aggiunta del modulo spiexceptions fallita" msgid "could not create the base SPI exceptions" msgstr "creazione delle eccezioni SPI di base fallita" -#: plpy_plpymodule.c:253 plpy_plpymodule.c:257 +#: plpy_plpymodule.c:252 plpy_plpymodule.c:256 #, c-format msgid "could not generate SPI exceptions" msgstr "generazione delle eccezioni SPI fallita" -#: plpy_plpymodule.c:388 +#: plpy_plpymodule.c:387 #, c-format msgid "could not unpack arguments in plpy.elog" msgstr "non è stato possibile espandere gli argomenti in plpy.elog" -#: plpy_plpymodule.c:396 +#: plpy_plpymodule.c:395 msgid "could not parse error message in plpy.elog" msgstr "non è stato possibile interpretare il messaggio di errore in plpy.elog" -#: plpy_procedure.c:200 +#: plpy_procedure.c:213 #, c-format msgid "trigger functions can only be called as triggers" msgstr "le funzioni trigger possono essere chiamate esclusivamente da trigger" -#: plpy_procedure.c:205 plpy_typeio.c:409 +#: plpy_procedure.c:218 #, c-format msgid "PL/Python functions cannot return type %s" msgstr "le funzioni PL/Python non possono restituire il tipo %s" -#: plpy_procedure.c:287 +#: plpy_procedure.c:300 #, c-format msgid "PL/Python functions cannot accept type %s" msgstr "le funzioni PL/Python non possono accettare il tipo %s" -#: plpy_procedure.c:383 +#: plpy_procedure.c:398 #, c-format msgid "could not compile PL/Python function \"%s\"" msgstr "compilazione della funzione PL/Python \"%s\" fallita" -#: plpy_procedure.c:386 +#: plpy_procedure.c:401 #, c-format msgid "could not compile anonymous PL/Python code block" msgstr "compilazione del blocco di codice anonimo PL/Python fallita" @@ -301,27 +301,22 @@ msgstr "il secondo argomento di plpy.prepare deve essere una sequenza" msgid "plpy.prepare: type name at ordinal position %d is not a string" msgstr "plpy.prepare: il nome del tipo nella posizione %d non è una stringa" -#: plpy_spi.c:138 -#, c-format -msgid "plpy.prepare does not support composite types" -msgstr "plpy.prepare non supporta tipi compositi" - -#: plpy_spi.c:188 +#: plpy_spi.c:182 #, c-format msgid "plpy.execute expected a query or a plan" msgstr "plpy.execute si aspetta una query o un plan" -#: plpy_spi.c:207 +#: plpy_spi.c:201 #, c-format msgid "plpy.execute takes a sequence as its second argument" msgstr "plpy.execute richiede una sequenza come secondo argomento" -#: plpy_spi.c:331 +#: plpy_spi.c:325 #, c-format msgid "SPI_execute_plan failed: %s" msgstr "SPI_execute_plan ha fallito: %s" -#: plpy_spi.c:373 +#: plpy_spi.c:367 #, c-format msgid "SPI_execute failed: %s" msgstr "SPI_execute ha fallito: %s" @@ -346,87 +341,82 @@ msgstr "non si è entrati in questa sotto-transazione" msgid "there is no subtransaction to exit from" msgstr "non c'è nessuna transazione da cui uscire" -#: plpy_typeio.c:294 +#: plpy_typeio.c:302 #, c-format msgid "could not create new dictionary" msgstr "creazione del nuovo dizionario fallita" -#: plpy_typeio.c:411 -#, c-format -msgid "PL/Python does not support conversion to arrays of row types." -msgstr "PL/Python non supporta la conversione in array di tipi riga." - -#: plpy_typeio.c:540 +#: plpy_typeio.c:564 #, c-format msgid "could not import a module for Decimal constructor" msgstr "importazione di un modulo per il costrutto Decimal fallita" -#: plpy_typeio.c:544 +#: plpy_typeio.c:568 #, c-format msgid "no Decimal attribute in module" msgstr "attributo Decimal non trovato nel modulo" -#: plpy_typeio.c:550 +#: plpy_typeio.c:574 #, c-format msgid "conversion from numeric to Decimal failed" msgstr "conversione da numeric a Decimal fallita" -#: plpy_typeio.c:619 +#: plpy_typeio.c:649 #, c-format msgid "cannot convert multidimensional array to Python list" msgstr "non è possibile convertire array multidimensionali a liste Python" -#: plpy_typeio.c:620 +#: plpy_typeio.c:650 #, c-format msgid "PL/Python only supports one-dimensional arrays." msgstr "PL/Python supporta solo array monodimensionali." -#: plpy_typeio.c:626 +#: plpy_typeio.c:656 #, c-format msgid "could not create new Python list" msgstr "creazione della nuova lista Python fallita" -#: plpy_typeio.c:685 +#: plpy_typeio.c:715 #, c-format msgid "could not create bytes representation of Python object" msgstr "creazione della rappresentazione in byte dell'oggetto Python fallita" -#: plpy_typeio.c:777 +#: plpy_typeio.c:820 #, c-format msgid "could not create string representation of Python object" msgstr "creazione della rappresentazione stringa dell'oggetto Python fallita" -#: plpy_typeio.c:788 +#: plpy_typeio.c:831 #, c-format msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes" msgstr "conversione dell'oggetto Python in cstring fallita: la rappresentazione stringa Python sembra contenere byte null" -#: plpy_typeio.c:823 +#: plpy_typeio.c:877 #, c-format msgid "return value of function with array return type is not a Python sequence" msgstr "il valore restituito dalla funzione con tipo restituito array non è una sequenza Python" -#: plpy_typeio.c:930 +#: plpy_typeio.c:982 #, c-format msgid "key \"%s\" not found in mapping" msgstr "la chiave \"%s\" non è stata trovata nel dizionario" -#: plpy_typeio.c:931 +#: plpy_typeio.c:983 #, c-format msgid "To return null in a column, add the value None to the mapping with the key named after the column." msgstr "Per restituire null in una colonna, inserire nella mappa il valore None con una chiave chiamata come la colonna." -#: plpy_typeio.c:979 +#: plpy_typeio.c:1034 #, c-format msgid "length of returned sequence did not match number of columns in row" msgstr "la lunghezza della sequenza ritornata non rispetta il numero di colonne presenti nella riga" -#: plpy_typeio.c:1087 +#: plpy_typeio.c:1145 #, c-format msgid "attribute \"%s\" does not exist in Python object" msgstr "l'attributo \"%s\" non esiste nell'oggetto Python" -#: plpy_typeio.c:1088 +#: plpy_typeio.c:1146 #, c-format msgid "To return null in a column, let the returned object have an attribute named after column with value None." msgstr "Per restituire null in una colonna, l'oggetto restituito deve avere un attributo chiamato come la colonna con valore None." diff --git a/src/pl/plpython/po/pl.po b/src/pl/plpython/po/pl.po index 4a396e73f1c8a..db8d7dab93ded 100644 --- a/src/pl/plpython/po/pl.po +++ b/src/pl/plpython/po/pl.po @@ -2,13 +2,13 @@ # 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. +# grzegorz , 2014, 2015. msgid "" msgstr "" "Project-Id-Version: plpython (PostgreSQL 9.1)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-11-10 20:37+0000\n" -"PO-Revision-Date: 2014-11-10 22:58+0200\n" +"POT-Creation-Date: 2015-08-15 18:37+0000\n" +"PO-Revision-Date: 2015-08-16 16:59+0200\n" "Last-Translator: grzegorz \n" "Language-Team: begina.felicysym@wp.eu\n" "Language: pl\n" @@ -29,12 +29,12 @@ msgstr "plpy.cursor oczekuje kwerendy lub planu" msgid "plpy.cursor takes a sequence as its second argument" msgstr "plpy.cursor przyjmuje sekwencję jako drugi argument" -#: plpy_cursorobject.c:187 plpy_spi.c:223 +#: plpy_cursorobject.c:187 plpy_spi.c:217 #, c-format msgid "could not execute plan" msgstr "nie można wykonać planu" -#: plpy_cursorobject.c:190 plpy_spi.c:226 +#: plpy_cursorobject.c:190 plpy_spi.c:220 #, c-format msgid "Expected sequence of %d argument, got %d: %s" msgid_plural "Expected sequence of %d arguments, got %d: %s" @@ -62,7 +62,7 @@ msgstr "pobranie z zamkniętego kursora" msgid "closing a cursor in an aborted subtransaction" msgstr "zamknięcie kursora w przerwanej podtransakcji" -#: plpy_elog.c:103 plpy_elog.c:104 plpy_plpymodule.c:420 +#: plpy_elog.c:103 plpy_elog.c:104 plpy_plpymodule.c:419 #, c-format msgid "%s" msgstr "%s" @@ -74,8 +74,11 @@ msgstr "nieobsługiwany tryb zwracania przez funkcję grupy" #: plpy_exec.c:92 #, c-format -msgid "PL/Python set-returning functions only support returning only value per call." -msgstr "funkcja zwracająca grupę PL/obsługuje tylko zwracanie jednej wartości w wywołaniu." +#| msgid "PL/Python set-returning functions only support returning only value per call." +msgid "PL/Python set-returning functions only support returning one value per call." +msgstr "" +"funkcje zwracające grupę PL/Python obsługuje tylko zwracanie jednej wartości " +"w wywołaniu." #: plpy_exec.c:104 #, c-format @@ -97,77 +100,77 @@ msgstr "błąd pobierania następnego elementu z iteratora" msgid "PL/Python function with return type \"void\" did not return None" msgstr "funkcja PL/Python zwracająca typ \"void\" nie zwróciła wartości None" -#: plpy_exec.c:289 plpy_exec.c:315 +#: plpy_exec.c:291 plpy_exec.c:317 #, c-format msgid "unexpected return value from trigger procedure" msgstr "nieoczekiwana wartość zwracana przez procedury wyzwalacza" -#: plpy_exec.c:290 +#: plpy_exec.c:292 #, c-format msgid "Expected None or a string." msgstr "Oczekiwano None lub ciąg znaków." -#: plpy_exec.c:305 +#: plpy_exec.c:307 #, c-format msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored" msgstr "funkcja wyzwalacza PL/Python zwróciła \"MODIFY\" w wyzwalaczu DELETE -- zignorowano" -#: plpy_exec.c:316 +#: plpy_exec.c:318 #, c-format msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"." msgstr "Oczekiwano None, \"OK\", \"SKIP\", lub \"MODIFY\"." -#: plpy_exec.c:397 +#: plpy_exec.c:399 #, c-format msgid "PyList_SetItem() failed, while setting up arguments" msgstr "nie powiodło się PyList_SetItem() podczas ustawiania argumentów" -#: plpy_exec.c:401 +#: plpy_exec.c:403 #, c-format msgid "PyDict_SetItemString() failed, while setting up arguments" msgstr "nie powiodło się PyDict_SetItemString() podczas ustawiania argumentów" -#: plpy_exec.c:413 +#: plpy_exec.c:415 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "funkcja zwracająca rekord w wywołaniu, które nie akceptuje typów złożonych" -#: plpy_exec.c:451 +#: plpy_exec.c:453 #, c-format msgid "while creating return value" msgstr "podczas tworzenia wartości zwracanej" -#: plpy_exec.c:475 +#: plpy_exec.c:477 #, c-format msgid "could not create new dictionary while building trigger arguments" msgstr "nie można utworzyć nowego słownika w czasie tworzenia argumentów wyzwalacza" -#: plpy_exec.c:663 +#: plpy_exec.c:666 #, c-format msgid "TD[\"new\"] deleted, cannot modify row" msgstr "usunięto TD[\"new\"], nie można zmienić wiersza" -#: plpy_exec.c:667 +#: plpy_exec.c:671 #, c-format msgid "TD[\"new\"] is not a dictionary" msgstr "TD[\"new\"] nie jest słownikiem" -#: plpy_exec.c:691 +#: plpy_exec.c:696 #, c-format msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string" msgstr "klucz słownika TD[\"new\"] na pozycji porządkowej %d nie jest ciągiem znaków" -#: plpy_exec.c:697 +#: plpy_exec.c:703 #, c-format msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row" msgstr "klucz \"%s\" znaleziony w TD[\"new\"] nie istnieje jako kolumna w wierszu obsługiwanym przez wyzwalacz" -#: plpy_exec.c:777 +#: plpy_exec.c:783 #, c-format msgid "while modifying trigger row" msgstr "podczas modyfikowania wiersza wyzwalacza" -#: plpy_exec.c:838 +#: plpy_exec.c:844 #, c-format msgid "forcibly aborting a subtransaction that has not been exited" msgstr "wymuszone przerywanie podtransakcji, która nie została zakończona" @@ -207,12 +210,12 @@ msgstr "nie można utworzyć zmiennych globalnych" msgid "could not initialize globals" msgstr "nie można zainicjować zmiennych globalnych" -#: plpy_main.c:347 +#: plpy_main.c:348 #, c-format msgid "PL/Python function \"%s\"" msgstr "funkcja PL/Python \"%s\"" -#: plpy_main.c:354 +#: plpy_main.c:355 #, c-format msgid "PL/Python anonymous code block" msgstr "anonimowy blok kodu PL/Python" @@ -237,41 +240,41 @@ msgstr "nie udało się dodać modułu spiexceptions" msgid "could not create the base SPI exceptions" msgstr "nie można stworzyć bazowych wyjątków SPI" -#: plpy_plpymodule.c:253 plpy_plpymodule.c:257 +#: plpy_plpymodule.c:252 plpy_plpymodule.c:256 #, c-format msgid "could not generate SPI exceptions" msgstr "nie można wygenerować wyjątków SPI" -#: plpy_plpymodule.c:388 +#: plpy_plpymodule.c:387 #, c-format msgid "could not unpack arguments in plpy.elog" msgstr "nie można rozpakować argumentów w plpy.elog" -#: plpy_plpymodule.c:396 +#: plpy_plpymodule.c:395 msgid "could not parse error message in plpy.elog" msgstr "nie można przetworzyć komunikatu błędu w plpy.elog" -#: plpy_procedure.c:200 +#: plpy_procedure.c:213 #, c-format msgid "trigger functions can only be called as triggers" msgstr "procedury wyzwalaczy mogą być wywoływane jedynie przez wyzwalacze" -#: plpy_procedure.c:205 plpy_typeio.c:409 +#: plpy_procedure.c:218 #, c-format msgid "PL/Python functions cannot return type %s" msgstr "funkcje PL/Python nie mogą zwracać wartości typu %s" -#: plpy_procedure.c:287 +#: plpy_procedure.c:300 #, c-format msgid "PL/Python functions cannot accept type %s" msgstr "funkcje PL/Python nie obsługują typu %s" -#: plpy_procedure.c:383 +#: plpy_procedure.c:398 #, c-format msgid "could not compile PL/Python function \"%s\"" msgstr "nie powiodła się kompilacja funkcji PL/Python \"%s\"" -#: plpy_procedure.c:386 +#: plpy_procedure.c:401 #, c-format msgid "could not compile anonymous PL/Python code block" msgstr "nie udało się skompilować anonimowego bloku kodu PL/Python" @@ -291,27 +294,22 @@ msgstr "drugi argument plpy.prepare musi być sekwencją" msgid "plpy.prepare: type name at ordinal position %d is not a string" msgstr "plpy.prepare: nazwa typu na pozycji porządkowej %d nie jest ciągiem znaków" -#: plpy_spi.c:138 -#, c-format -msgid "plpy.prepare does not support composite types" -msgstr "plpy.prepare nie obsługuje typów złożonych" - -#: plpy_spi.c:188 +#: plpy_spi.c:182 #, c-format msgid "plpy.execute expected a query or a plan" msgstr "plpy.execute oczekuje kwerendy lub planu" -#: plpy_spi.c:207 +#: plpy_spi.c:201 #, c-format msgid "plpy.execute takes a sequence as its second argument" msgstr "plpy.execute przyjmuje sekwencję jako drugi argument" -#: plpy_spi.c:331 +#: plpy_spi.c:325 #, c-format msgid "SPI_execute_plan failed: %s" msgstr "nie powiódł się SPI_execute_plan: %s" -#: plpy_spi.c:373 +#: plpy_spi.c:367 #, c-format msgid "SPI_execute failed: %s" msgstr "nie powiódł się SPI_execute: %s" @@ -336,89 +334,82 @@ msgstr "ta podtransakcja nie została wprowadzona" msgid "there is no subtransaction to exit from" msgstr "brak podtransakcji by z niej wyjść" -#: plpy_typeio.c:294 +#: plpy_typeio.c:302 #, c-format msgid "could not create new dictionary" msgstr "nie można utworzyć nowego słownika" -#: plpy_typeio.c:411 +#: plpy_typeio.c:564 #, c-format -msgid "PL/Python does not support conversion to arrays of row types." -msgstr "PL/Python nie obsługuje konwersji typów wierszowych na tablice." - -#: plpy_typeio.c:540 -#, c-format -#| msgid "could not import \"plpy\" module" msgid "could not import a module for Decimal constructor" msgstr "nie można zaimportować modułu dla konstruktora Decimal" -#: plpy_typeio.c:544 +#: plpy_typeio.c:568 #, c-format msgid "no Decimal attribute in module" msgstr "brak atrybutu Decimal w module" -#: plpy_typeio.c:550 +#: plpy_typeio.c:574 #, c-format -#| msgid "conversion from wchar_t to server encoding failed: %m" msgid "conversion from numeric to Decimal failed" msgstr "konwersja z numeric na Decimal nie powiodła się" -#: plpy_typeio.c:619 +#: plpy_typeio.c:649 #, c-format msgid "cannot convert multidimensional array to Python list" msgstr "nie można skonwertować tablicy wielowymiarowej na listę Python" -#: plpy_typeio.c:620 +#: plpy_typeio.c:650 #, c-format msgid "PL/Python only supports one-dimensional arrays." msgstr "PL/Python obsługuje tylko jednowymiarowe tablice." -#: plpy_typeio.c:626 +#: plpy_typeio.c:656 #, c-format msgid "could not create new Python list" msgstr "nie można utworzyć nowej listy Python" -#: plpy_typeio.c:685 +#: plpy_typeio.c:715 #, c-format msgid "could not create bytes representation of Python object" msgstr "nie można utworzyć reprezentacji bajtowej obiektu Python" -#: plpy_typeio.c:777 +#: plpy_typeio.c:820 #, c-format msgid "could not create string representation of Python object" msgstr "nie można utworzyć reprezentacji znakowej obiektu Python" -#: plpy_typeio.c:788 +#: plpy_typeio.c:831 #, c-format msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes" msgstr "nie można zmienić obiektu Python na cstring: reprezentacja ciągu znaków Python wydaje się zawierać puste bajty" -#: plpy_typeio.c:823 +#: plpy_typeio.c:877 #, c-format msgid "return value of function with array return type is not a Python sequence" msgstr "wartość zwrócona przez funkcję zwracającą tablicę nie jest sekwencją Python" -#: plpy_typeio.c:930 +#: plpy_typeio.c:982 #, c-format msgid "key \"%s\" not found in mapping" msgstr "nie odnaleziono klucza \"%s\" w mapowaniu" -#: plpy_typeio.c:931 +#: plpy_typeio.c:983 #, c-format msgid "To return null in a column, add the value None to the mapping with the key named after the column." msgstr "Aby zwrócić null w kolumnie, dodaj wartość None do mapowania z kluczem nazwanym wedle kolumny." -#: plpy_typeio.c:979 +#: plpy_typeio.c:1034 #, c-format msgid "length of returned sequence did not match number of columns in row" msgstr "długość zwróconej sekwencji nie jest równa liczbie kolumn w wierszu" -#: plpy_typeio.c:1087 +#: plpy_typeio.c:1145 #, c-format msgid "attribute \"%s\" does not exist in Python object" msgstr "atrybut \"%s\" nie istnieje w obiekcie Python" -#: plpy_typeio.c:1088 +#: plpy_typeio.c:1146 #, c-format msgid "To return null in a column, let the returned object have an attribute named after column with value None." msgstr "Aby zwrócić null w kolumnie, niech zwrócony obiekt posiada atrybut nazwany wedle kolumny z wartością None." @@ -435,3 +426,9 @@ msgstr "nie można wyciągnąć bajtów z kodowanego ciągu znaków" #~ msgid "unrecognized error in PLy_spi_execute_fetch_result" #~ msgstr "nierozpoznany błąd w PLy_spi_execute_fetch_result" + +#~ msgid "PL/Python does not support conversion to arrays of row types." +#~ msgstr "PL/Python nie obsługuje konwersji typów wierszowych na tablice." + +#~ msgid "plpy.prepare does not support composite types" +#~ msgstr "plpy.prepare nie obsługuje typów złożonych" diff --git a/src/pl/plpython/po/pt_BR.po b/src/pl/plpython/po/pt_BR.po index 0043bf7a33b12..f65182fb53190 100644 --- a/src/pl/plpython/po/pt_BR.po +++ b/src/pl/plpython/po/pt_BR.po @@ -1,13 +1,13 @@ # Brazilian Portuguese message translation file for plpython # Copyright (C) 2009 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Euler Taveira de Oliveira , 2009-2014. +# Euler Taveira de Oliveira , 2009-2015. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-05-17 16:05-0300\n" +"POT-Creation-Date: 2015-09-17 22:32-0300\n" "PO-Revision-Date: 2009-05-10 01:15-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -27,12 +27,12 @@ msgstr "plpy.cursor esperava uma consulta ou um plano" msgid "plpy.cursor takes a sequence as its second argument" msgstr "plpy.cursor tem uma sequência como seu segundo argumento" -#: plpy_cursorobject.c:187 plpy_spi.c:223 +#: plpy_cursorobject.c:187 plpy_spi.c:217 #, c-format msgid "could not execute plan" msgstr "não pôde executar plano" -#: plpy_cursorobject.c:190 plpy_spi.c:226 +#: plpy_cursorobject.c:190 plpy_spi.c:220 #, c-format msgid "Expected sequence of %d argument, got %d: %s" msgid_plural "Expected sequence of %d arguments, got %d: %s" @@ -59,7 +59,7 @@ msgstr "busca em um cursor fechado" msgid "closing a cursor in an aborted subtransaction" msgstr "fechando um cursor em uma subtransação abortada" -#: plpy_elog.c:103 plpy_elog.c:104 plpy_plpymodule.c:420 +#: plpy_elog.c:103 plpy_elog.c:104 plpy_plpymodule.c:419 #, c-format msgid "%s" msgstr "%s" @@ -71,7 +71,7 @@ msgstr "modo de retorno da função que retorna conjunto não é suportado" #: plpy_exec.c:92 #, c-format -msgid "PL/Python set-returning functions only support returning only value per call." +msgid "PL/Python set-returning functions only support returning one value per call." msgstr "funções PL/Python que retornam conjunto só suportam retornar um valor por chamada." #: plpy_exec.c:104 @@ -94,77 +94,77 @@ msgstr "erro ao buscar próximo item do iterador" msgid "PL/Python function with return type \"void\" did not return None" msgstr "função PL/Python com tipo de retorno \"void\" não retornou None" -#: plpy_exec.c:289 plpy_exec.c:315 +#: plpy_exec.c:291 plpy_exec.c:317 #, c-format msgid "unexpected return value from trigger procedure" msgstr "função de gatilho retornou valor inesperado" -#: plpy_exec.c:290 +#: plpy_exec.c:292 #, c-format msgid "Expected None or a string." msgstr "None ou uma cadeia de caracteres era esperado." -#: plpy_exec.c:305 +#: plpy_exec.c:307 #, c-format msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored" msgstr "função de gatilho PL/Python retornou \"MODIFY\" em um gatilho DELETE -- ignorado" -#: plpy_exec.c:316 +#: plpy_exec.c:318 #, c-format msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"." msgstr "Era esperado None, \"OK\", \"SKIP\" ou \"MODIFY\"." -#: plpy_exec.c:397 +#: plpy_exec.c:399 #, c-format msgid "PyList_SetItem() failed, while setting up arguments" msgstr "PyList_SetItem() falhou ao definir argumentos" -#: plpy_exec.c:401 +#: plpy_exec.c:403 #, c-format msgid "PyDict_SetItemString() failed, while setting up arguments" msgstr "PyDict_SetItemString() falhou ao definir argumentos" -#: plpy_exec.c:413 +#: plpy_exec.c:415 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "função que retorna record foi chamada em um contexto que não pode aceitar tipo record" -#: plpy_exec.c:451 +#: plpy_exec.c:453 #, c-format msgid "while creating return value" msgstr "ao criar valor de retorno" -#: plpy_exec.c:475 +#: plpy_exec.c:477 #, c-format msgid "could not create new dictionary while building trigger arguments" msgstr "não pode criar novo dicionário ao construir argumentos do gatilho" -#: plpy_exec.c:663 +#: plpy_exec.c:666 #, c-format msgid "TD[\"new\"] deleted, cannot modify row" msgstr "TD[\"new\"] removido, não pode modificar registro" -#: plpy_exec.c:667 +#: plpy_exec.c:671 #, c-format msgid "TD[\"new\"] is not a dictionary" msgstr "TD[\"new\"] não é um dicionário" -#: plpy_exec.c:691 +#: plpy_exec.c:696 #, c-format msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string" msgstr "chave do dicionário TD[\"new\"] na posição %d não é uma cadeia de caracteres" -#: plpy_exec.c:697 +#: plpy_exec.c:703 #, c-format msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row" msgstr "chave \"%s\" encontrada em TD[\"new\"] não existe como uma coluna no registro do gatilho" -#: plpy_exec.c:777 +#: plpy_exec.c:783 #, c-format msgid "while modifying trigger row" msgstr "ao modificar registro de gatilho" -#: plpy_exec.c:838 +#: plpy_exec.c:844 #, c-format msgid "forcibly aborting a subtransaction that has not been exited" msgstr "forçado a abortar subtransação que não foi concluída" @@ -204,12 +204,12 @@ msgstr "não pôde criar globais" msgid "could not initialize globals" msgstr "não pôde inicializar globais" -#: plpy_main.c:347 +#: plpy_main.c:348 #, c-format msgid "PL/Python function \"%s\"" msgstr "função PL/Python \"%s\"" -#: plpy_main.c:354 +#: plpy_main.c:355 #, c-format msgid "PL/Python anonymous code block" msgstr "bloco de código PL/Python anônimo" @@ -234,41 +234,41 @@ msgstr "não pôde adicionar o módulo spiexceptions" msgid "could not create the base SPI exceptions" msgstr "não pôde criar as exceções base da SPI" -#: plpy_plpymodule.c:253 plpy_plpymodule.c:257 +#: plpy_plpymodule.c:252 plpy_plpymodule.c:256 #, c-format msgid "could not generate SPI exceptions" msgstr "não pôde gerar exceções da SPI" -#: plpy_plpymodule.c:388 +#: plpy_plpymodule.c:387 #, c-format msgid "could not unpack arguments in plpy.elog" msgstr "não pode desempacotar argumentos em plpy.elog" -#: plpy_plpymodule.c:396 +#: plpy_plpymodule.c:395 msgid "could not parse error message in plpy.elog" msgstr "não pode analisar mensagem de erro em plpy.elog" -#: plpy_procedure.c:200 +#: plpy_procedure.c:213 #, c-format msgid "trigger functions can only be called as triggers" msgstr "funções de gatilho só podem ser chamadas como gatilhos" -#: plpy_procedure.c:205 plpy_typeio.c:409 +#: plpy_procedure.c:218 #, c-format msgid "PL/Python functions cannot return type %s" msgstr "funções PL/Python não podem retornar tipo %s" -#: plpy_procedure.c:287 +#: plpy_procedure.c:300 #, c-format msgid "PL/Python functions cannot accept type %s" msgstr "funções PL/Python não podem aceitar tipo %s" -#: plpy_procedure.c:383 +#: plpy_procedure.c:398 #, c-format msgid "could not compile PL/Python function \"%s\"" msgstr "não pôde compilar função PL/Python \"%s\"" -#: plpy_procedure.c:386 +#: plpy_procedure.c:401 #, c-format msgid "could not compile anonymous PL/Python code block" msgstr "não pôde compilar bloco de código PL/Python anônimo" @@ -288,27 +288,22 @@ msgstr "segundo argumento de plpy.prepare deve ser uma sequência" msgid "plpy.prepare: type name at ordinal position %d is not a string" msgstr "plpy.prepare: nome do tipo na posição %d não é uma cadeia de caracteres" -#: plpy_spi.c:138 -#, c-format -msgid "plpy.prepare does not support composite types" -msgstr "plpy.prepare não suporta tipos compostos" - -#: plpy_spi.c:188 +#: plpy_spi.c:182 #, c-format msgid "plpy.execute expected a query or a plan" msgstr "plpy.execute espera uma consulta ou um plano" -#: plpy_spi.c:207 +#: plpy_spi.c:201 #, c-format msgid "plpy.execute takes a sequence as its second argument" msgstr "plpy.execute recebe uma sequência como segundo argumento" -#: plpy_spi.c:331 +#: plpy_spi.c:325 #, c-format msgid "SPI_execute_plan failed: %s" msgstr "SPI_execute_plan falhou: %s" -#: plpy_spi.c:373 +#: plpy_spi.c:367 #, c-format msgid "SPI_execute failed: %s" msgstr "SPI_execute falhou: %s" @@ -333,87 +328,82 @@ msgstr "essa subtransação não foi iniciada" msgid "there is no subtransaction to exit from" msgstr "não há uma subtransação a ser concluída" -#: plpy_typeio.c:294 +#: plpy_typeio.c:302 #, c-format msgid "could not create new dictionary" msgstr "não pôde criar novo dicionário" -#: plpy_typeio.c:411 -#, c-format -msgid "PL/Python does not support conversion to arrays of row types." -msgstr "PL/Python não suporta conversão para matrizes de tipos row." - -#: plpy_typeio.c:540 +#: plpy_typeio.c:564 #, c-format msgid "could not import a module for Decimal constructor" msgstr "não pôde importar módulo para construtor Decimal" -#: plpy_typeio.c:544 +#: plpy_typeio.c:568 #, c-format msgid "no Decimal attribute in module" msgstr "nenhum atributo Decimal no módulo" -#: plpy_typeio.c:550 +#: plpy_typeio.c:574 #, c-format msgid "conversion from numeric to Decimal failed" msgstr "conversão de numeric para Decimal falhou" -#: plpy_typeio.c:619 +#: plpy_typeio.c:649 #, c-format msgid "cannot convert multidimensional array to Python list" msgstr "não pode converter matriz multidimensional para lista Python" -#: plpy_typeio.c:620 +#: plpy_typeio.c:650 #, c-format msgid "PL/Python only supports one-dimensional arrays." msgstr "PL/Python só suporta matrizes unidimensionais." -#: plpy_typeio.c:626 +#: plpy_typeio.c:656 #, c-format msgid "could not create new Python list" msgstr "não pôde criar nova lista Python" -#: plpy_typeio.c:685 +#: plpy_typeio.c:715 #, c-format msgid "could not create bytes representation of Python object" msgstr "não pôde criar representação de bytes de um objeto Python" -#: plpy_typeio.c:777 +#: plpy_typeio.c:820 #, c-format msgid "could not create string representation of Python object" msgstr "não pôde criar representação de cadeia de caracteres de um objeto Python" -#: plpy_typeio.c:788 +#: plpy_typeio.c:831 #, c-format msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes" msgstr "não pôde converter objeto Python em cstring: representação de cadeia de caracteres Python parece conter bytes nulos" -#: plpy_typeio.c:823 +#: plpy_typeio.c:877 #, c-format msgid "return value of function with array return type is not a Python sequence" msgstr "valor de retorno da função do tipo matriz retorna tipo que não é uma sequência Python" -#: plpy_typeio.c:930 +#: plpy_typeio.c:992 #, c-format msgid "key \"%s\" not found in mapping" msgstr "chave \"%s\" não foi encontrada no mapeamento" -#: plpy_typeio.c:931 +#: plpy_typeio.c:993 #, c-format msgid "To return null in a column, add the value None to the mapping with the key named after the column." msgstr "Para retornar nulo em uma coluna, adicionar o valor None no mapeamento cuja chave é o nome da coluna." -#: plpy_typeio.c:979 +#: plpy_typeio.c:1044 #, c-format msgid "length of returned sequence did not match number of columns in row" msgstr "tamanho da sequência retornada não combina com número de colunas no registro" -#: plpy_typeio.c:1087 +#: plpy_typeio.c:1155 #, c-format msgid "attribute \"%s\" does not exist in Python object" msgstr "atributo \"%s\" não existe no objeto Python" -#: plpy_typeio.c:1088 +#: plpy_typeio.c:1156 #, c-format msgid "To return null in a column, let the returned object have an attribute named after column with value None." msgstr "Para retornar nulo na coluna, deixe o objeto retornado ter um atributo cuja chave é o nome do coluna e o valor é None." diff --git a/src/pl/plpython/sql/plpython_composite.sql b/src/pl/plpython/sql/plpython_composite.sql index cb5fffeba9d8a..473342c2f40b8 100644 --- a/src/pl/plpython/sql/plpython_composite.sql +++ b/src/pl/plpython/sql/plpython_composite.sql @@ -32,10 +32,40 @@ elif typ == 'obj': type_record.first = first type_record.second = second return type_record +elif typ == 'str': + return "('%s',%r)" % (first, second) $$ LANGUAGE plpythonu; SELECT * FROM multiout_record_as('dict', 'foo', 1, 'f'); SELECT multiout_record_as('dict', 'foo', 1, 'f'); + +SELECT * FROM multiout_record_as('dict', null, null, false); +SELECT * FROM multiout_record_as('dict', 'one', null, false); +SELECT * FROM multiout_record_as('dict', null, 2, false); +SELECT * FROM multiout_record_as('dict', 'three', 3, false); +SELECT * FROM multiout_record_as('dict', null, null, true); + +SELECT * FROM multiout_record_as('tuple', null, null, false); +SELECT * FROM multiout_record_as('tuple', 'one', null, false); +SELECT * FROM multiout_record_as('tuple', null, 2, false); +SELECT * FROM multiout_record_as('tuple', 'three', 3, false); +SELECT * FROM multiout_record_as('tuple', null, null, true); + +SELECT * FROM multiout_record_as('list', null, null, false); +SELECT * FROM multiout_record_as('list', 'one', null, false); +SELECT * FROM multiout_record_as('list', null, 2, false); +SELECT * FROM multiout_record_as('list', 'three', 3, false); +SELECT * FROM multiout_record_as('list', null, null, true); + +SELECT * FROM multiout_record_as('obj', null, null, false); +SELECT * FROM multiout_record_as('obj', 'one', null, false); +SELECT * FROM multiout_record_as('obj', null, 2, false); +SELECT * FROM multiout_record_as('obj', 'three', 3, false); +SELECT * FROM multiout_record_as('obj', null, null, true); + +SELECT * FROM multiout_record_as('str', 'one', 1, false); +SELECT * FROM multiout_record_as('str', 'one', 2, false); + SELECT *, s IS NULL AS snull FROM multiout_record_as('tuple', 'xxx', NULL, 'f') AS f(f, s); SELECT *, f IS NULL AS fnull, s IS NULL AS snull FROM multiout_record_as('tuple', 'xxx', 1, 't') AS f(f, s); SELECT * FROM multiout_record_as('obj', NULL, 10, 'f'); @@ -92,18 +122,29 @@ elif typ == 'dict': d = {'first': n * 2, 'second': n * 3, 'extra': 'not important'} elif typ == 'tuple': d = (n * 2, n * 3) +elif typ == 'list': + d = [ n * 2, n * 3 ] elif typ == 'obj': class d: pass d.first = n * 2 d.second = n * 3 +elif typ == 'str': + d = "(%r,%r)" % (n * 2, n * 3) for i in range(n): yield (i, d) $$ LANGUAGE plpythonu; SELECT * FROM multiout_composite(2); SELECT * FROM multiout_table_type_setof('dict', 'f', 3); +SELECT * FROM multiout_table_type_setof('dict', 'f', 7); SELECT * FROM multiout_table_type_setof('tuple', 'f', 2); +SELECT * FROM multiout_table_type_setof('tuple', 'f', 3); +SELECT * FROM multiout_table_type_setof('list', 'f', 2); +SELECT * FROM multiout_table_type_setof('list', 'f', 3); SELECT * FROM multiout_table_type_setof('obj', 'f', 4); +SELECT * FROM multiout_table_type_setof('obj', 'f', 5); +SELECT * FROM multiout_table_type_setof('str', 'f', 6); +SELECT * FROM multiout_table_type_setof('str', 'f', 7); SELECT * FROM multiout_table_type_setof('dict', 't', 3); -- check what happens if a type changes under us diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c index d6b72f7d68623..dce5d04adf8a9 100644 --- a/src/pl/tcl/pltcl.c +++ b/src/pl/tcl/pltcl.c @@ -551,7 +551,8 @@ pltcl_init_load_unknown(Tcl_Interp *interp) if (SPI_processed == 0) { SPI_freetuptable(SPI_tuptable); - elog(WARNING, "module \"unknown\" not found in pltcl_modules"); + ereport(WARNING, + (errmsg("module \"unknown\" not found in pltcl_modules"))); relation_close(pmrel, AccessShareLock); return; } @@ -585,8 +586,10 @@ pltcl_init_load_unknown(Tcl_Interp *interp) if (tcl_rc != TCL_OK) { UTF_BEGIN; - elog(ERROR, "could not load module \"unknown\": %s", - UTF_U2E(Tcl_GetStringResult(interp))); + ereport(ERROR, + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("could not load module \"unknown\": %s", + UTF_U2E(Tcl_GetStringResult(interp))))); UTF_END; } @@ -1039,8 +1042,10 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS, bool pltrusted) &ret_numvals, &ret_values) != TCL_OK) { UTF_BEGIN; - elog(ERROR, "could not split return value from trigger: %s", - UTF_U2E(Tcl_GetStringResult(interp))); + ereport(ERROR, + (errcode(ERRCODE_E_R_I_E_TRIGGER_PROTOCOL_VIOLATED), + errmsg("could not split return value from trigger: %s", + UTF_U2E(Tcl_GetStringResult(interp))))); UTF_END; } @@ -1048,7 +1053,9 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS, bool pltrusted) PG_TRY(); { if (ret_numvals % 2 != 0) - elog(ERROR, "invalid return list from trigger - must have even # of elements"); + ereport(ERROR, + (errcode(ERRCODE_E_R_I_E_TRIGGER_PROTOCOL_VIOLATED), + errmsg("trigger's return list must have even number of elements"))); modattrs = (int *) palloc(tupdesc->natts * sizeof(int)); modvalues = (Datum *) palloc(tupdesc->natts * sizeof(Datum)); @@ -1082,9 +1089,15 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS, bool pltrusted) ************************************************************/ attnum = SPI_fnumber(tupdesc, ret_name); if (attnum == SPI_ERROR_NOATTRIBUTE) - elog(ERROR, "invalid attribute \"%s\"", ret_name); + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_COLUMN), + errmsg("unrecognized attribute \"%s\"", + ret_name))); if (attnum <= 0) - elog(ERROR, "cannot set system attribute \"%s\"", ret_name); + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot set system attribute \"%s\"", + ret_name))); /************************************************************ * Ignore dropped columns @@ -1205,7 +1218,8 @@ throw_tcl_error(Tcl_Interp *interp, const char *proname) econtext = UTF_U2E((char *) Tcl_GetVar(interp, "errorInfo", TCL_GLOBAL_ONLY)); ereport(ERROR, - (errmsg("%s", emsg), + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("%s", emsg), errcontext("%s\nin PL/Tcl function \"%s\"", econtext, proname))); UTF_END; @@ -1545,8 +1559,11 @@ compile_pltcl_function(Oid fn_oid, Oid tgreloid, free(prodesc->internal_proname); free(prodesc); UTF_BEGIN; - elog(ERROR, "could not create internal procedure \"%s\": %s", - internal_proname, UTF_U2E(Tcl_GetStringResult(interp))); + ereport(ERROR, + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("could not create internal procedure \"%s\": %s", + internal_proname, + UTF_U2E(Tcl_GetStringResult(interp))))); UTF_END; } @@ -1614,10 +1631,10 @@ pltcl_elog(ClientData cdata, Tcl_Interp *interp, } /* - * For non-error messages, just pass 'em to elog(). We do not expect that - * this will fail, but just on the off chance it does, report the error - * back to Tcl. Note we are assuming that elog() can't have any internal - * failures that are so bad as to require a transaction abort. + * For non-error messages, just pass 'em to ereport(). We do not expect + * that this will fail, but just on the off chance it does, report the + * error back to Tcl. Note we are assuming that ereport() can't have any + * internal failures that are so bad as to require a transaction abort. * * This path is also used for FATAL errors, which aren't going to come * back to us at all. @@ -1626,7 +1643,9 @@ pltcl_elog(ClientData cdata, Tcl_Interp *interp, PG_TRY(); { UTF_BEGIN; - elog(level, "%s", UTF_U2E(argv[2])); + ereport(level, + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("%s", UTF_U2E(argv[2])))); UTF_END; } PG_CATCH(); @@ -2104,6 +2123,7 @@ static int pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { + volatile MemoryContext plan_cxt = NULL; int nargs; CONST84 char **args; pltcl_query_desc *qdesc; @@ -2132,13 +2152,24 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp, /************************************************************ * Allocate the new querydesc structure + * + * struct qdesc and subsidiary data all live in plan_cxt. Note that if the + * function is recompiled for whatever reason, permanent memory leaks + * occur. FIXME someday. ************************************************************/ - qdesc = (pltcl_query_desc *) malloc(sizeof(pltcl_query_desc)); + plan_cxt = AllocSetContextCreate(TopMemoryContext, + "PL/TCL spi_prepare query", + ALLOCSET_SMALL_MINSIZE, + ALLOCSET_SMALL_INITSIZE, + ALLOCSET_SMALL_MAXSIZE); + MemoryContextSwitchTo(plan_cxt); + qdesc = (pltcl_query_desc *) palloc0(sizeof(pltcl_query_desc)); snprintf(qdesc->qname, sizeof(qdesc->qname), "%p", qdesc); qdesc->nargs = nargs; - qdesc->argtypes = (Oid *) malloc(nargs * sizeof(Oid)); - qdesc->arginfuncs = (FmgrInfo *) malloc(nargs * sizeof(FmgrInfo)); - qdesc->argtypioparams = (Oid *) malloc(nargs * sizeof(Oid)); + qdesc->argtypes = (Oid *) palloc(nargs * sizeof(Oid)); + qdesc->arginfuncs = (FmgrInfo *) palloc(nargs * sizeof(FmgrInfo)); + qdesc->argtypioparams = (Oid *) palloc(nargs * sizeof(Oid)); + MemoryContextSwitchTo(oldcontext); /************************************************************ * Execute the prepare inside a sub-transaction, so we can cope with @@ -2166,7 +2197,7 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp, getTypeInputInfo(typId, &typInput, &typIOParam); qdesc->argtypes[i] = typId; - perm_fmgr_info(typInput, &(qdesc->arginfuncs[i])); + fmgr_info_cxt(typInput, &(qdesc->arginfuncs[i]), plan_cxt); qdesc->argtypioparams[i] = typIOParam; } @@ -2193,10 +2224,7 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp, { pltcl_subtrans_abort(interp, oldcontext, oldowner); - free(qdesc->argtypes); - free(qdesc->arginfuncs); - free(qdesc->argtypioparams); - free(qdesc); + MemoryContextDelete(plan_cxt); ckfree((char *) args); return TCL_ERROR; @@ -2317,7 +2345,7 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp, if (strlen(nulls) != qdesc->nargs) { Tcl_SetResult(interp, - "length of nulls string doesn't match # of arguments", + "length of nulls string doesn't match number of arguments", TCL_STATIC); return TCL_ERROR; } @@ -2342,12 +2370,12 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp, return TCL_ERROR; /************************************************************ - * Check that the # of arguments matches + * Check that the number of arguments matches ************************************************************/ if (callnargs != qdesc->nargs) { Tcl_SetResult(interp, - "argument list length doesn't match # of arguments for query", + "argument list length doesn't match number of arguments for query", TCL_STATIC); ckfree((char *) callargs); return TCL_ERROR; diff --git a/src/pl/tcl/po/de.po b/src/pl/tcl/po/de.po index 167934db7b329..d222e04569c40 100644 --- a/src/pl/tcl/po/de.po +++ b/src/pl/tcl/po/de.po @@ -1,14 +1,14 @@ # German message translation file for PL/Tcl -# Peter Eisentraut , 2009 - 2013. +# Peter Eisentraut , 2009 - 2015. # # Use these quotes: „%s“ # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.3\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2009-01-14 21:58+0200\n" -"PO-Revision-Date: 2013-09-04 20:30-0400\n" +"POT-Creation-Date: 2015-09-22 15:07+0000\n" +"PO-Revision-Date: 2015-09-22 20:29-0400\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -16,12 +16,42 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: pltcl.c:1027 +#: pltcl.c:555 +#, c-format +msgid "module \"unknown\" not found in pltcl_modules" +msgstr "Modul „unknown“ nicht in pltcl_modules gefunden" + +#: pltcl.c:591 +#, c-format +msgid "could not load module \"unknown\": %s" +msgstr "konnte Modul „unknown“ nicht laden: %s" + +#: pltcl.c:1047 +#, c-format +msgid "could not split return value from trigger: %s" +msgstr "konnte Rückgabewert des Triggers nicht splitten: %s" + +#: pltcl.c:1058 +#, c-format +msgid "trigger's return list must have even number of elements" +msgstr "Rückgabeliste des Triggers muss gerade Anzahl Elemente haben" + +#: pltcl.c:1094 +#, c-format +msgid "unrecognized attribute \"%s\"" +msgstr "unbekanntes Attribute „%s“" + +#: pltcl.c:1099 +#, c-format +msgid "cannot set system attribute \"%s\"" +msgstr "Systemattribut „%s“ kann nicht gesetzt werden" + +#: pltcl.c:1222 pltcl.c:1648 #, c-format msgid "%s" msgstr "%s" -#: pltcl.c:1028 +#: pltcl.c:1223 #, c-format msgid "" "%s\n" @@ -30,24 +60,32 @@ msgstr "" "%s\n" "in PL/Tcl-Funktion „%s“" -#: pltcl.c:1127 +#: pltcl.c:1331 pltcl.c:1338 +#, c-format msgid "out of memory" msgstr "Speicher aufgebraucht" -#: pltcl.c:1192 +#: pltcl.c:1386 +#, c-format msgid "trigger functions can only be called as triggers" msgstr "Triggerfunktionen können nur als Trigger aufgerufen werden" -#: pltcl.c:1201 +#: pltcl.c:1395 #, c-format msgid "PL/Tcl functions cannot return type %s" msgstr "PL/Tcl-Funktionen können keinen Rückgabetyp %s haben" -#: pltcl.c:1213 +#: pltcl.c:1407 +#, c-format msgid "PL/Tcl functions cannot return composite types" msgstr "PL/Tcl-Funktion können keine zusammengesetzten Typen zurückgeben" -#: pltcl.c:1253 +#: pltcl.c:1446 #, c-format msgid "PL/Tcl functions cannot accept type %s" msgstr "PL/Tcl-Funktionen können Typ %s nicht annehmen" + +#: pltcl.c:1564 +#, c-format +msgid "could not create internal procedure \"%s\": %s" +msgstr "konnte interne Prozedur „%s“ nicht erzeugen: %s" diff --git a/src/pl/tcl/po/es.po b/src/pl/tcl/po/es.po index 86b73fd398b10..5ba682377fffc 100644 --- a/src/pl/tcl/po/es.po +++ b/src/pl/tcl/po/es.po @@ -4,27 +4,57 @@ # This file is distributed under the same license as the PostgreSQL package. # # Emanuel Calvo Franco , 2009. -# Alvaro Herrera , 2009-2012 +# Alvaro Herrera , 2009-2012, 2015 # msgid "" msgstr "" -"Project-Id-Version: pltcl (PostgreSQL 9.4)\n" +"Project-Id-Version: pltcl (PostgreSQL 9.5)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-12-15 05:37+0000\n" -"PO-Revision-Date: 2014-12-16 12:13-0300\n" -"Last-Translator: Emanuel Calvo Franco \n" +"POT-Creation-Date: 2015-10-04 00:37+0000\n" +"PO-Revision-Date: 2015-09-29 23:23-0300\n" +"Last-Translator: Álvaro Herrera \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: pltcl.c:1210 +#: pltcl.c:555 +#, c-format +msgid "module \"unknown\" not found in pltcl_modules" +msgstr "módulo «unknown» no encontrado en pltcl_modules" + +#: pltcl.c:591 +#, c-format +msgid "could not load module \"unknown\": %s" +msgstr "no se pudo carga módulo «unknown»: %s" + +#: pltcl.c:1047 +#, c-format +msgid "could not split return value from trigger: %s" +msgstr "no se pudo separar el valor de retorno del disparador: %s" + +#: pltcl.c:1058 +#, c-format +msgid "trigger's return list must have even number of elements" +msgstr "la lista de retorno del disparador debe tener un número par de elementos" + +#: pltcl.c:1094 +#, c-format +msgid "unrecognized attribute \"%s\"" +msgstr "atributo «%s» no reconocido" + +#: pltcl.c:1099 +#, c-format +msgid "cannot set system attribute \"%s\"" +msgstr "no se puede definir el atributo de sistema «%s»" + +#: pltcl.c:1222 pltcl.c:1648 #, c-format msgid "%s" msgstr "%s" -#: pltcl.c:1211 +#: pltcl.c:1223 #, c-format msgid "" "%s\n" @@ -33,27 +63,32 @@ msgstr "" "%s\n" "en función PL/Tcl \"%s\"" -#: pltcl.c:1319 pltcl.c:1326 +#: pltcl.c:1331 pltcl.c:1338 #, c-format msgid "out of memory" msgstr "memoria agotada" -#: pltcl.c:1374 +#: pltcl.c:1386 #, c-format msgid "trigger functions can only be called as triggers" msgstr "las funciones disparadoras sólo pueden ser invocadas como disparadores" -#: pltcl.c:1383 +#: pltcl.c:1395 #, c-format msgid "PL/Tcl functions cannot return type %s" msgstr "las funciones PL/Tcl no pueden retornar tipo %s" -#: pltcl.c:1395 +#: pltcl.c:1407 #, c-format msgid "PL/Tcl functions cannot return composite types" msgstr "las funciones PL/Tcl no pueden retornar tipos compuestos" -#: pltcl.c:1434 +#: pltcl.c:1446 #, c-format msgid "PL/Tcl functions cannot accept type %s" msgstr "las funciones PL/Tcl no pueden aceptar el tipog%s" + +#: pltcl.c:1564 +#, c-format +msgid "could not create internal procedure \"%s\": %s" +msgstr "no se pudo crear procedimiento interno «%s»: %s" diff --git a/src/pl/tcl/po/it.po b/src/pl/tcl/po/it.po index 20fc929d9e226..a4765e494b81b 100644 --- a/src/pl/tcl/po/it.po +++ b/src/pl/tcl/po/it.po @@ -16,10 +16,10 @@ # msgid "" msgstr "" -"Project-Id-Version: pltcl (PostgreSQL) 9.3\n" +"Project-Id-Version: pltcl (PostgreSQL) 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2013-03-15 22:09+0000\n" -"PO-Revision-Date: 2012-11-04 18:06+0100\n" +"POT-Creation-Date: 2015-08-15 18:37+0000\n" +"PO-Revision-Date: 2015-08-16 10:05+0100\n" "Last-Translator: Daniele Varrazzo \n" "Language-Team: Gruppo traduzioni ITPUG \n" "Language: it\n" @@ -28,12 +28,42 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.4\n" -#: pltcl.c:1157 +#: pltcl.c:555 +#, c-format +msgid "module \"unknown\" not found in pltcl_modules" +msgstr "modulo \"unknown\" not trovato nei moduli pltcl" + +#: pltcl.c:591 +#, c-format +msgid "could not load module \"unknown\": %s" +msgstr "caricamento del modulo \"unknown\" fallito: %s" + +#: pltcl.c:1047 +#, c-format +msgid "could not split return value from trigger: %s" +msgstr "divisione del valore di ritorno del trigger fallita: %s" + +#: pltcl.c:1058 +#, c-format +msgid "invalid return list from trigger - must have even # of elements" +msgstr "lista restituita dal trigger non valida: deve avere un numero pari di elementi" + +#: pltcl.c:1094 +#, c-format +msgid "unrecognized attribute \"%s\"" +msgstr "attributo \"%s\" non riconosciuto" + +#: pltcl.c:1099 +#, c-format +msgid "cannot set system attribute \"%s\"" +msgstr "non è possibile impostare l'attributo di sistema \"%s\"" + +#: pltcl.c:1222 pltcl.c:1648 #, c-format msgid "%s" msgstr "%s" -#: pltcl.c:1158 +#: pltcl.c:1223 #, c-format msgid "" "%s\n" @@ -42,27 +72,32 @@ msgstr "" "%s\n" "nella funzione PL/Tcl \"%s\"" -#: pltcl.c:1262 pltcl.c:1269 +#: pltcl.c:1331 pltcl.c:1338 #, c-format msgid "out of memory" msgstr "memoria esaurita" -#: pltcl.c:1316 +#: pltcl.c:1386 #, c-format msgid "trigger functions can only be called as triggers" msgstr "le funzioni trigger possono essere chiamate esclusivamente da trigger" -#: pltcl.c:1325 +#: pltcl.c:1395 #, c-format msgid "PL/Tcl functions cannot return type %s" msgstr "le funzioni PL/Tcl non possono restituire il tipo %s" -#: pltcl.c:1337 +#: pltcl.c:1407 #, c-format msgid "PL/Tcl functions cannot return composite types" msgstr "le funzioni PL/Tcl non possono restituire tipi compositi" -#: pltcl.c:1376 +#: pltcl.c:1446 #, c-format msgid "PL/Tcl functions cannot accept type %s" msgstr "le funzioni PL/Tcl non possono accettare il tipo %s" + +#: pltcl.c:1564 +#, c-format +msgid "could not create internal procedure \"%s\": %s" +msgstr "creazione della procedura interna \"%s\" fallita: %s" diff --git a/src/pl/tcl/po/pl.po b/src/pl/tcl/po/pl.po index 590f0ab3dd621..e2d119007025d 100644 --- a/src/pl/tcl/po/pl.po +++ b/src/pl/tcl/po/pl.po @@ -1,29 +1,67 @@ # pltcl message translation file for pltcl # Copyright (C) 2011 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# # Begina Felicysym , 2011. +# grzegorz , 2015. msgid "" msgstr "" "Project-Id-Version: pltcl (PostgreSQL 9.1)\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2013-01-29 13:39+0000\n" -"PO-Revision-Date: 2011-09-30 09:50-0300\n" -"Last-Translator: Begina Felicysym \n" -"Language-Team: Polish TotroiseSvn translation team\n" +"POT-Creation-Date: 2015-08-15 18:37+0000\n" +"PO-Revision-Date: 2015-08-16 17:06+0200\n" +"Last-Translator: grzegorz \n" +"Language-Team: begina.felicysym@wp.eu\n" "Language: 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-beta1\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" -#: pltcl.c:1150 +#: pltcl.c:555 +#, c-format +msgid "module \"unknown\" not found in pltcl_modules" +msgstr "nie znaleziono modułu \"unknown\" w pltcl_modules" + +#: pltcl.c:591 +#, c-format +#| msgid "could not load library \"%s\": %s" +msgid "could not load module \"unknown\": %s" +msgstr "nie można wczytać modułu \"unknown\": %s" + +#: pltcl.c:1047 +#, c-format +#| msgid "could not interpret result from server: %s" +msgid "could not split return value from trigger: %s" +msgstr "nie można podzielić wartości zwracanej przez wyzwalacz: %s" + +#: pltcl.c:1058 +#, c-format +#| msgid "argument list must have even number of elements" +msgid "invalid return list from trigger - must have even # of elements" +msgstr "" +"niepoprawna lista zwracana przez wyzwalacz - musi mieć parzystą liczbę " +"elementów" + +#: pltcl.c:1094 +#, c-format +#| msgid "unrecognized parameter \"%s\"" +msgid "unrecognized attribute \"%s\"" +msgstr "nierozpoznany atrybut \"%s\"" + +#: pltcl.c:1099 +#, c-format +#| msgid "cannot move system relation \"%s\"" +msgid "cannot set system attribute \"%s\"" +msgstr "nie można ustawić atrybutu systemowego \"%s\"" + +#: pltcl.c:1222 pltcl.c:1648 #, c-format msgid "%s" msgstr "%s" -#: pltcl.c:1151 +#: pltcl.c:1223 #, c-format msgid "" "%s\n" @@ -32,27 +70,33 @@ msgstr "" "%s\n" "w funkcji PL/Tcl \"%s\"" -#: pltcl.c:1255 pltcl.c:1262 +#: pltcl.c:1331 pltcl.c:1338 #, c-format msgid "out of memory" msgstr "brak pamięci" -#: pltcl.c:1309 +#: pltcl.c:1386 #, c-format msgid "trigger functions can only be called as triggers" msgstr "procedury wyzwalaczy mogą być wywoływane jedynie przez wyzwalacze" -#: pltcl.c:1318 +#: pltcl.c:1395 #, c-format msgid "PL/Tcl functions cannot return type %s" -msgstr "funkcje PL/Perl nie mogą zwracać wartości typu %s" +msgstr "funkcje PL/Tcl nie mogą zwracać wartości typu %s" -#: pltcl.c:1330 +#: pltcl.c:1407 #, c-format msgid "PL/Tcl functions cannot return composite types" msgstr "funkcje PL/Tcl nie mogą zwracać wartości złożonych" -#: pltcl.c:1369 +#: pltcl.c:1446 #, c-format msgid "PL/Tcl functions cannot accept type %s" msgstr "funkcje PL/Tcl nie akceptują typu %s" + +#: pltcl.c:1564 +#, c-format +#| msgid "could not create locale \"%s\": %m" +msgid "could not create internal procedure \"%s\": %s" +msgstr "nie można utworzyć procedury wewnętrznej \"%s\": %s" diff --git a/src/pl/tcl/po/pt_BR.po b/src/pl/tcl/po/pt_BR.po index e2df82accdb50..6cdbbafdf1a23 100644 --- a/src/pl/tcl/po/pt_BR.po +++ b/src/pl/tcl/po/pt_BR.po @@ -1,13 +1,13 @@ # Brazilian Portuguese message translation file for pltcl # Copyright (C) 2009 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Euler Taveira de Oliveira , 2009-2014. +# Euler Taveira de Oliveira , 2009-2015. # msgid "" msgstr "" -"Project-Id-Version: PostgreSQL 9.4\n" +"Project-Id-Version: PostgreSQL 9.5\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2014-05-17 16:06-0300\n" +"POT-Creation-Date: 2015-09-17 22:32-0300\n" "PO-Revision-Date: 2009-05-06 18:00-0300\n" "Last-Translator: Euler Taveira de Oliveira \n" "Language-Team: Brazilian Portuguese \n" @@ -16,12 +16,42 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: pltcl.c:1210 +#: pltcl.c:555 +#, c-format +msgid "module \"unknown\" not found in pltcl_modules" +msgstr "módulo \"unknown\" não foi encontrado em pltcl_modules" + +#: pltcl.c:591 +#, c-format +msgid "could not load module \"unknown\": %s" +msgstr "não pôde carregar módulo \"unknown\": %s" + +#: pltcl.c:1047 +#, c-format +msgid "could not split return value from trigger: %s" +msgstr "não pôde dividir valor retornado do gatilho: %s" + +#: pltcl.c:1058 +#, c-format +msgid "trigger's return list must have even number of elements" +msgstr "lista de retorno do gatilho deve ter número par de elementos" + +#: pltcl.c:1094 +#, c-format +msgid "unrecognized attribute \"%s\"" +msgstr "atributo \"%s\" desconhecido" + +#: pltcl.c:1099 +#, c-format +msgid "cannot set system attribute \"%s\"" +msgstr "não pode definir atributo do sistema \"%s\"" + +#: pltcl.c:1222 pltcl.c:1648 #, c-format msgid "%s" msgstr "%s" -#: pltcl.c:1211 +#: pltcl.c:1223 #, c-format msgid "" "%s\n" @@ -30,27 +60,32 @@ msgstr "" "%s\n" "na função PL/Tcl \"%s\"" -#: pltcl.c:1319 pltcl.c:1326 +#: pltcl.c:1331 pltcl.c:1338 #, c-format msgid "out of memory" msgstr "sem memória" -#: pltcl.c:1374 +#: pltcl.c:1386 #, c-format msgid "trigger functions can only be called as triggers" msgstr "funções de gatilho só podem ser chamadas como gatilhos" -#: pltcl.c:1383 +#: pltcl.c:1395 #, c-format msgid "PL/Tcl functions cannot return type %s" msgstr "funções PL/Tcl não podem retornar tipo %s" -#: pltcl.c:1395 +#: pltcl.c:1407 #, c-format msgid "PL/Tcl functions cannot return composite types" msgstr "funções PL/Tcl não podem retornar tipos compostos" -#: pltcl.c:1434 +#: pltcl.c:1446 #, c-format msgid "PL/Tcl functions cannot accept type %s" msgstr "funções PL/Tcl não podem aceitar tipo %s" + +#: pltcl.c:1564 +#, c-format +msgid "could not create internal procedure \"%s\": %s" +msgstr "não pôde criar função interna \"%s\": %s" diff --git a/src/port/erand48.c b/src/port/erand48.c index 12efd8193c4ed..9d471197c3540 100644 --- a/src/port/erand48.c +++ b/src/port/erand48.c @@ -33,6 +33,9 @@ #include +#define RAND48_SEED_0 (0x330e) +#define RAND48_SEED_1 (0xabcd) +#define RAND48_SEED_2 (0x1234) #define RAND48_MULT_0 (0xe66d) #define RAND48_MULT_1 (0xdeec) #define RAND48_MULT_2 (0x0005) diff --git a/src/port/qsort.c b/src/port/qsort.c index fa35b1b15387d..1a8ee08c8beea 100644 --- a/src/port/qsort.c +++ b/src/port/qsort.c @@ -6,6 +6,7 @@ * Remove __inline, _DIAGASSERTs, __P * Remove ill-considered "swap_cnt" switch to insertion sort, * in favor of a simple check for presorted input. + * Take care to recurse on the smaller partition, to bound stack usage. * * CAUTION: if you change this file, see also qsort_arg.c, gen_qsort_tuple.pl * @@ -54,9 +55,18 @@ static void swapfunc(char *, char *, size_t, int); * Qsort routine based on J. L. Bentley and M. D. McIlroy, * "Engineering a sort function", * Software--Practice and Experience 23 (1993) 1249-1265. + * * We have modified their original by adding a check for already-sorted input, * which seems to be a win per discussions on pgsql-hackers around 2006-03-21. + * + * Also, we recurse on the smaller partition and iterate on the larger one, + * which ensures we cannot recurse more than log(N) levels (since the + * partition recursed to is surely no more than half of the input). Bentley + * and McIlroy explicitly rejected doing this on the grounds that it's "not + * worth the effort", but we have seen crashes in the field due to stack + * overrun, so that judgment seems wrong. */ + #define swapcode(TYPE, parmi, parmj, n) \ do { \ size_t i = (n) / sizeof (TYPE); \ @@ -89,7 +99,7 @@ swapfunc(char *a, char *b, size_t n, int swaptype) } else \ swapfunc(a, b, es, swaptype) -#define vecswap(a, b, n) if ((n) > 0) swapfunc((a), (b), (size_t)(n), swaptype) +#define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n, swaptype) static char * med3(char *a, char *b, char *c, int (*cmp) (const void *, const void *)) @@ -109,8 +119,9 @@ pg_qsort(void *a, size_t n, size_t es, int (*cmp) (const void *, const void *)) *pl, *pm, *pn; - int d, - r, + size_t d1, + d2; + int r, swaptype, presorted; @@ -141,7 +152,8 @@ loop:SWAPINIT(a, es); pn = (char *) a + (n - 1) * es; if (n > 40) { - d = (n / 8) * es; + size_t d = (n / 8) * es; + pl = med3(pl, pl + d, pl + 2 * d, cmp); pm = med3(pm - d, pm, pm + d, cmp); pn = med3(pn - 2 * d, pn - d, pn, cmp); @@ -178,27 +190,46 @@ loop:SWAPINIT(a, es); pc -= es; } pn = (char *) a + n * es; - r = Min(pa - (char *) a, pb - pa); - vecswap(a, pb - r, r); - r = Min(pd - pc, pn - pd - es); - vecswap(pb, pn - r, r); - if ((r = pb - pa) > es) - qsort(a, r / es, es, cmp); - if ((r = pd - pc) > es) + d1 = Min(pa - (char *) a, pb - pa); + vecswap(a, pb - d1, d1); + d1 = Min(pd - pc, pn - pd - es); + vecswap(pb, pn - d1, d1); + d1 = pb - pa; + d2 = pd - pc; + if (d1 <= d2) { - /* Iterate rather than recurse to save stack space */ - a = pn - r; - n = r / es; - goto loop; + /* Recurse on left partition, then iterate on right partition */ + if (d1 > es) + pg_qsort(a, d1 / es, es, cmp); + if (d2 > es) + { + /* Iterate rather than recurse to save stack space */ + /* pg_qsort(pn - d2, d2 / es, es, cmp); */ + a = pn - d2; + n = d2 / es; + goto loop; + } + } + else + { + /* Recurse on right partition, then iterate on left partition */ + if (d2 > es) + pg_qsort(pn - d2, d2 / es, es, cmp); + if (d1 > es) + { + /* Iterate rather than recurse to save stack space */ + /* pg_qsort(a, d1 / es, es, cmp); */ + n = d1 / es; + goto loop; + } } -/* qsort(pn - r, r / es, es, cmp);*/ } /* - * qsort wrapper for strcmp. + * qsort comparator wrapper for strcmp. */ int pg_qsort_strcmp(const void *a, const void *b) { - return strcmp(*(char *const *) a, *(char *const *) b); + return strcmp(*(const char *const *) a, *(const char *const *) b); } diff --git a/src/port/qsort_arg.c b/src/port/qsort_arg.c index c0aee733be5f6..24acd2cd4e4a4 100644 --- a/src/port/qsort_arg.c +++ b/src/port/qsort_arg.c @@ -6,6 +6,7 @@ * Remove __inline, _DIAGASSERTs, __P * Remove ill-considered "swap_cnt" switch to insertion sort, * in favor of a simple check for presorted input. + * Take care to recurse on the smaller partition, to bound stack usage. * * CAUTION: if you change this file, see also qsort.c, gen_qsort_tuple.pl * @@ -54,9 +55,18 @@ static void swapfunc(char *, char *, size_t, int); * Qsort routine based on J. L. Bentley and M. D. McIlroy, * "Engineering a sort function", * Software--Practice and Experience 23 (1993) 1249-1265. + * * We have modified their original by adding a check for already-sorted input, * which seems to be a win per discussions on pgsql-hackers around 2006-03-21. + * + * Also, we recurse on the smaller partition and iterate on the larger one, + * which ensures we cannot recurse more than log(N) levels (since the + * partition recursed to is surely no more than half of the input). Bentley + * and McIlroy explicitly rejected doing this on the grounds that it's "not + * worth the effort", but we have seen crashes in the field due to stack + * overrun, so that judgment seems wrong. */ + #define swapcode(TYPE, parmi, parmj, n) \ do { \ size_t i = (n) / sizeof (TYPE); \ @@ -89,7 +99,7 @@ swapfunc(char *a, char *b, size_t n, int swaptype) } else \ swapfunc(a, b, es, swaptype) -#define vecswap(a, b, n) if ((n) > 0) swapfunc((a), (b), (size_t)(n), swaptype) +#define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n, swaptype) static char * med3(char *a, char *b, char *c, qsort_arg_comparator cmp, void *arg) @@ -109,8 +119,9 @@ qsort_arg(void *a, size_t n, size_t es, qsort_arg_comparator cmp, void *arg) *pl, *pm, *pn; - int d, - r, + size_t d1, + d2; + int r, swaptype, presorted; @@ -141,7 +152,8 @@ loop:SWAPINIT(a, es); pn = (char *) a + (n - 1) * es; if (n > 40) { - d = (n / 8) * es; + size_t d = (n / 8) * es; + pl = med3(pl, pl + d, pl + 2 * d, cmp, arg); pm = med3(pm - d, pm, pm + d, cmp, arg); pn = med3(pn - 2 * d, pn - d, pn, cmp, arg); @@ -178,18 +190,37 @@ loop:SWAPINIT(a, es); pc -= es; } pn = (char *) a + n * es; - r = Min(pa - (char *) a, pb - pa); - vecswap(a, pb - r, r); - r = Min(pd - pc, pn - pd - es); - vecswap(pb, pn - r, r); - if ((r = pb - pa) > es) - qsort_arg(a, r / es, es, cmp, arg); - if ((r = pd - pc) > es) + d1 = Min(pa - (char *) a, pb - pa); + vecswap(a, pb - d1, d1); + d1 = Min(pd - pc, pn - pd - es); + vecswap(pb, pn - d1, d1); + d1 = pb - pa; + d2 = pd - pc; + if (d1 <= d2) { - /* Iterate rather than recurse to save stack space */ - a = pn - r; - n = r / es; - goto loop; + /* Recurse on left partition, then iterate on right partition */ + if (d1 > es) + qsort_arg(a, d1 / es, es, cmp, arg); + if (d2 > es) + { + /* Iterate rather than recurse to save stack space */ + /* qsort_arg(pn - d2, d2 / es, es, cmp, arg); */ + a = pn - d2; + n = d2 / es; + goto loop; + } + } + else + { + /* Recurse on right partition, then iterate on left partition */ + if (d2 > es) + qsort_arg(pn - d2, d2 / es, es, cmp, arg); + if (d1 > es) + { + /* Iterate rather than recurse to save stack space */ + /* qsort_arg(a, d1 / es, es, cmp, arg); */ + n = d1 / es; + goto loop; + } } -/* qsort_arg(pn - r, r / es, es, cmp, arg);*/ } diff --git a/src/template/aix b/src/template/aix index 04c97e7bd14e4..b566ff129df60 100644 --- a/src/template/aix +++ b/src/template/aix @@ -7,7 +7,7 @@ if test "$GCC" != yes ; then CFLAGS="-O -qmaxmem=16384 -qsrcmsg" ;; *) - CFLAGS="-O2 -qmaxmem=16384 -qsrcmsg -qlonglong" + CFLAGS="-O2 -qmaxmem=16384 -qsrcmsg" ;; esac fi diff --git a/src/test/isolation/expected/eval-plan-qual.out b/src/test/isolation/expected/eval-plan-qual.out index 433533e6117f9..457461e355caa 100644 --- a/src/test/isolation/expected/eval-plan-qual.out +++ b/src/test/isolation/expected/eval-plan-qual.out @@ -104,3 +104,43 @@ a b c 2 2 2 2 3 0 step c2: COMMIT; + +starting permutation: wx2 partiallock c2 c1 read +step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking'; +step partiallock: + SELECT * FROM accounts a1, accounts a2 + WHERE a1.accountid = a2.accountid + FOR UPDATE OF a1; + +step c2: COMMIT; +step partiallock: <... completed> +accountid balance accountid balance + +checking 1050 checking 600 +savings 600 savings 600 +step c1: COMMIT; +step read: SELECT * FROM accounts ORDER BY accountid; +accountid balance + +checking 1050 +savings 600 + +starting permutation: wx2 lockwithvalues c2 c1 read +step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking'; +step lockwithvalues: + SELECT * FROM accounts a1, (values('checking'),('savings')) v(id) + WHERE a1.accountid = v.id + FOR UPDATE OF a1; + +step c2: COMMIT; +step lockwithvalues: <... completed> +accountid balance id + +checking 1050 checking +savings 600 savings +step c1: COMMIT; +step read: SELECT * FROM accounts ORDER BY accountid; +accountid balance + +checking 1050 +savings 600 diff --git a/src/test/isolation/specs/eval-plan-qual.spec b/src/test/isolation/specs/eval-plan-qual.spec index 6fb24322863dc..a391466722f47 100644 --- a/src/test/isolation/specs/eval-plan-qual.spec +++ b/src/test/isolation/specs/eval-plan-qual.spec @@ -50,6 +50,20 @@ step "writep1" { UPDATE p SET b = -1 WHERE a = 1 AND b = 1 AND c = 0; } step "writep2" { UPDATE p SET b = -b WHERE a = 1 AND c = 0; } step "c1" { COMMIT; } +# these tests are meant to exercise EvalPlanQualFetchRowMarks, +# ie, handling non-locked tables in an EvalPlanQual recheck + +step "partiallock" { + SELECT * FROM accounts a1, accounts a2 + WHERE a1.accountid = a2.accountid + FOR UPDATE OF a1; +} +step "lockwithvalues" { + SELECT * FROM accounts a1, (values('checking'),('savings')) v(id) + WHERE a1.accountid = v.id + FOR UPDATE OF a1; +} + session "s2" setup { BEGIN ISOLATION LEVEL READ COMMITTED; } step "wx2" { UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking'; } @@ -79,3 +93,5 @@ permutation "wy1" "wy2" "c1" "c2" "read" permutation "upsert1" "upsert2" "c1" "c2" "read" permutation "readp1" "writep1" "readp2" "c1" "c2" permutation "writep2" "returningp1" "c1" "c2" +permutation "wx2" "partiallock" "c2" "c1" "read" +permutation "wx2" "lockwithvalues" "c2" "c1" "read" diff --git a/src/test/mb/expected/big5.out b/src/test/mb/expected/big5.out index d7a6097e612e8..97100cd0a2d04 100644 --- a/src/test/mb/expected/big5.out +++ b/src/test/mb/expected/big5.out @@ -2,7 +2,6 @@ drop table create table tӸ (~O text, qY varchar, a} varchar(16)); create index tӸindex1 on tӸ using btree (~O); create index tӸindex2 on tӸ using hash (qY); -WARNING: hash indexes are not WAL-logged and their use is discouraged insert into tӸ values ('q~', 'FF', '_A01'); insert into tӸ values ('sy~', ']q', 'B10'); insert into tӸ values ('\~', 'ѥq', 'Z01E'); diff --git a/src/test/mb/expected/euc_jp.out b/src/test/mb/expected/euc_jp.out index be248d91359a5..15f83e0231cc2 100644 --- a/src/test/mb/expected/euc_jp.out +++ b/src/test/mb/expected/euc_jp.out @@ -3,7 +3,6 @@ ERROR: table " create table ׻Ѹ (Ѹ text, ʬॳ varchar, 1A char(16)); create index ׻Ѹindex1 on ׻Ѹ using btree (Ѹ); create index ׻Ѹindex2 on ׻Ѹ using hash (ʬॳ); -WARNING: hash indexes are not WAL-logged and their use is discouraged insert into ׻Ѹ values('ԥ塼ǥץ쥤','A01'); insert into ׻Ѹ values('ԥ塼եå','ʬB10'); insert into ׻Ѹ values('ԥ塼ץޡ','Z01'); diff --git a/src/test/mb/expected/euc_kr.out b/src/test/mb/expected/euc_kr.out index 837f2e60d0781..229ffd8f97154 100644 --- a/src/test/mb/expected/euc_kr.out +++ b/src/test/mb/expected/euc_kr.out @@ -3,7 +3,6 @@ ERROR: table "ͪߩѦ create table ͪߩѦ ( text, ׾ڵ varchar, 1A char(16)); create index ͪߩѦindex1 on ͪߩѦ using btree (); create index ͪߩѦindex2 on ͪߩѦ using hash (׾ڵ); -WARNING: hash indexes are not WAL-logged and their use is discouraged insert into ͪߩѦ values('ǻ͵÷', 'ѦA01߾'); insert into ͪߩѦ values('ǻͱ׷Ƚ', 'B10'); insert into ͪߩѦ values('ǻα׷', 'Z01'); diff --git a/src/test/mb/expected/euc_tw.out b/src/test/mb/expected/euc_tw.out index f224e7820d5dd..99eb4884e1266 100644 --- a/src/test/mb/expected/euc_tw.out +++ b/src/test/mb/expected/euc_tw.out @@ -3,7 +3,6 @@ ERROR: table " create table ٸ (ɱ text, Ƴ varchar, varchar(16)); create index ٸindex1 on ٸ using btree (ɱ); create index ٸindex2 on ٸ using hash (Ƴ); -WARNING: hash indexes are not WAL-logged and their use is discouraged insert into ٸ values ('', '', 'ơA01'); insert into ٸ values ('', 'ȴƳ', 'B10'); insert into ٸ values ('', 'ӡϴǹȴƳ', 'Z01Ħ'); diff --git a/src/test/mb/expected/gb18030.out b/src/test/mb/expected/gb18030.out index 562852b6741b9..b14234dce400c 100644 --- a/src/test/mb/expected/gb18030.out +++ b/src/test/mb/expected/gb18030.out @@ -2,7 +2,6 @@ drop table Ӌ create table ӋCZ (Z text, ` varchar, 俼1A char(16)); create index ӋCZindex1 on ӋCZ using btree (Z); create index ӋCZindex2 on ӋCZ using hash (`); -WARNING: hash indexes are not WAL-logged and their use is discouraged insert into ӋCZ values('ԥ`ǥץ쥤','CA01'); insert into ӋCZ values('ԥ`եå','B10'); insert into ӋCZ values('ԥ`ץީ`','Z01'); diff --git a/src/test/mb/expected/mule_internal.out b/src/test/mb/expected/mule_internal.out index 67f7775706efd..ac8b57dc4216f 100644 --- a/src/test/mb/expected/mule_internal.out +++ b/src/test/mb/expected/mule_internal.out @@ -3,7 +3,6 @@ ERROR: table " create table גђ (ђ text, ʬ varchar, 1A char(16)); create index גђindex1 on גђ using btree (ђ); create index גђindex2 on גђ using hash (ʬ); -WARNING: hash indexes are not WAL-logged and their use is discouraged insert into גђ values('Ԓ咡ǒג쒥','A01'); insert into גђ values('Ԓ咡钥ՒÒ','ʬB10'); insert into גђ values('Ԓ咡ג풥钥ޒ','Z01'); @@ -178,7 +177,6 @@ ERROR: table " create table ͪߩѦ듾 (듾 text, “׾ړ varchar, 1A󓱸 char(16)); create index ͪߩѦ듾index1 on ͪߩѦ듾 using btree (듾); create index ͪߩѦ듾index2 on ͪߩѦ듾 using hash (“׾ړ); -WARNING: hash indexes are not WAL-logged and their use is discouraged insert into ͪߩѦ듾 values('ēǻ͓𓽺Ó', 'ѦA01߾'); insert into ͪߩѦ듾 values('ēǻ͓דȓ', 'B10'); insert into ͪߩѦ듾 values('ēǻ͓Γד', 'Z01'); diff --git a/src/test/mb/expected/sjis.out b/src/test/mb/expected/sjis.out index 73dd29b984394..db2bfd0d755ef 100644 --- a/src/test/mb/expected/sjis.out +++ b/src/test/mb/expected/sjis.out @@ -2,7 +2,6 @@ drop table create table vZ@p (p text, ރR[h varchar, l1A char(16)); create index vZ@pindex1 on vZ@p using btree (p); create index vZ@pindex2 on vZ@p using hash (ރR[h); -WARNING: hash indexes are not WAL-logged and their use is discouraged insert into vZ@p values('Rs[^fBXvC','@A01'); insert into vZ@p values('Rs[^OtBbNX','B10'); insert into vZ@p values('Rs[^vO}[','lZ01'); diff --git a/src/test/mb/expected/utf8.out b/src/test/mb/expected/utf8.out index 715f3468374ac..8f9f63c7e0e57 100644 --- a/src/test/mb/expected/utf8.out +++ b/src/test/mb/expected/utf8.out @@ -3,7 +3,6 @@ ERROR: table "計算機用語" does not exist create table 計算機用語 (用語 text, 分類コード varchar, 備考1Aだよ char(16)); create index 計算機用語index1 on 計算機用語 using btree (用語); create index 計算機用語index2 on 計算機用語 using hash (分類コード); -WARNING: hash indexes are not WAL-logged and their use is discouraged insert into 計算機用語 values('コンピュータディスプレイ','機A01上'); insert into 計算機用語 values('コンピュータグラフィックス','分B10中'); insert into 計算機用語 values('コンピュータプログラマー','人Z01下'); diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile index 8213e235f7823..9b966542793c7 100644 --- a/src/test/modules/Makefile +++ b/src/test/modules/Makefile @@ -5,6 +5,7 @@ top_builddir = ../../.. include $(top_builddir)/src/Makefile.global SUBDIRS = \ + brin \ commit_ts \ dummy_seclabel \ test_ddl_deparse \ diff --git a/src/test/modules/brin/.gitignore b/src/test/modules/brin/.gitignore new file mode 100644 index 0000000000000..62bbe8f6b1a51 --- /dev/null +++ b/src/test/modules/brin/.gitignore @@ -0,0 +1,3 @@ +# Generated subdirectories +/isolation_output/ +/tmp_check/ diff --git a/src/test/modules/brin/Makefile b/src/test/modules/brin/Makefile new file mode 100644 index 0000000000000..e785471e19bc2 --- /dev/null +++ b/src/test/modules/brin/Makefile @@ -0,0 +1,30 @@ +# src/test/modules/brin/Makefile + +EXTRA_CLEAN = ./isolation_output +EXTRA_INSTALL=contrib/pageinspect + +ISOLATIONCHECKS=summarization-and-inprogress-insertion + +ifdef USE_PGXS +PG_CONFIG = pg_config +PGXS := $(shell $(PG_CONFIG) --pgxs) +include $(PGXS) +else +subdir = src/test/modules/brin +top_builddir = ../../../.. +include $(top_builddir)/src/Makefile.global +include $(top_srcdir)/contrib/contrib-global.mk +endif + +check: isolation-check + +isolation-check: | submake-isolation + $(MKDIR_P) isolation_output + $(pg_isolation_regress_check) \ + --outputdir=./isolation_output \ + $(ISOLATIONCHECKS) + +PHONY: check isolation-check + +submake-isolation: + $(MAKE) -C $(top_builddir)/src/test/isolation all diff --git a/src/test/modules/brin/expected/summarization-and-inprogress-insertion.out b/src/test/modules/brin/expected/summarization-and-inprogress-insertion.out new file mode 100644 index 0000000000000..ddb90f4dba138 --- /dev/null +++ b/src/test/modules/brin/expected/summarization-and-inprogress-insertion.out @@ -0,0 +1,39 @@ +Parsed test spec with 2 sessions + +starting permutation: s2check s1b s2b s1i s2summ s1c s2c s2check +step s2check: SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); +itemoffset blknum attnum allnulls hasnulls placeholder value + +1 0 1 f f f {1 .. 1} +step s1b: BEGIN ISOLATION LEVEL REPEATABLE READ; +step s2b: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; +?column? + +1 +step s1i: INSERT INTO brin_iso VALUES (1000); +step s2summ: SELECT brin_summarize_new_values('brinidx'::regclass); +brin_summarize_new_values + +1 +step s1c: COMMIT; +step s2c: COMMIT; +step s2check: SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); +itemoffset blknum attnum allnulls hasnulls placeholder value + +1 0 1 f f f {1 .. 1} +2 1 1 f f f {1 .. 1000} + +starting permutation: s2check s1b s1i s2vacuum s1c s2check +step s2check: SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); +itemoffset blknum attnum allnulls hasnulls placeholder value + +1 0 1 f f f {1 .. 1} +step s1b: BEGIN ISOLATION LEVEL REPEATABLE READ; +step s1i: INSERT INTO brin_iso VALUES (1000); +step s2vacuum: VACUUM brin_iso; +step s1c: COMMIT; +step s2check: SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); +itemoffset blknum attnum allnulls hasnulls placeholder value + +1 0 1 f f f {1 .. 1} +2 1 1 f f f {1 .. 1000} diff --git a/src/test/modules/brin/specs/summarization-and-inprogress-insertion.spec b/src/test/modules/brin/specs/summarization-and-inprogress-insertion.spec new file mode 100644 index 0000000000000..19ac18a2e88dc --- /dev/null +++ b/src/test/modules/brin/specs/summarization-and-inprogress-insertion.spec @@ -0,0 +1,44 @@ +# This test verifies that values inserted in transactions still in progress +# are considered during concurrent range summarization (either using the +# brin_summarize_new_values function or regular VACUUM). + +setup +{ + CREATE TABLE brin_iso ( + value int + ) WITH (fillfactor=10); + CREATE INDEX brinidx ON brin_iso USING brin (value) WITH (pages_per_range=1); + -- this fills the first page + DO $$ + DECLARE curtid tid; + BEGIN + LOOP + INSERT INTO brin_iso VALUES (1) RETURNING ctid INTO curtid; + EXIT WHEN curtid > tid '(1, 0)'; + END LOOP; + END; + $$; + CREATE EXTENSION IF NOT EXISTS pageinspect; +} + +teardown +{ + DROP TABLE brin_iso; +} + +session "s1" +step "s1b" { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step "s1i" { INSERT INTO brin_iso VALUES (1000); } +step "s1c" { COMMIT; } + +session "s2" +step "s2b" { BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; } +step "s2summ" { SELECT brin_summarize_new_values('brinidx'::regclass); } +step "s2c" { COMMIT; } + +step "s2vacuum" { VACUUM brin_iso; } + +step "s2check" { SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); } + +permutation "s2check" "s1b" "s2b" "s1i" "s2summ" "s1c" "s2c" "s2check" +permutation "s2check" "s1b" "s1i" "s2vacuum" "s1c" "s2check" diff --git a/src/test/modules/commit_ts/expected/commit_timestamp_1.out b/src/test/modules/commit_ts/expected/commit_timestamp_1.out index a4253faa7b715..2f1f41d209946 100644 --- a/src/test/modules/commit_ts/expected/commit_timestamp_1.out +++ b/src/test/modules/commit_ts/expected/commit_timestamp_1.out @@ -21,14 +21,11 @@ ERROR: could not get commit timestamp data HINT: Make sure the configuration parameter "track_commit_timestamp" is set. DROP TABLE committs_test; SELECT pg_xact_commit_timestamp('0'::xid); -ERROR: could not get commit timestamp data -HINT: Make sure the configuration parameter "track_commit_timestamp" is set. +ERROR: cannot retrieve commit timestamp for transaction 0 SELECT pg_xact_commit_timestamp('1'::xid); -ERROR: could not get commit timestamp data -HINT: Make sure the configuration parameter "track_commit_timestamp" is set. +ERROR: cannot retrieve commit timestamp for transaction 1 SELECT pg_xact_commit_timestamp('2'::xid); -ERROR: could not get commit timestamp data -HINT: Make sure the configuration parameter "track_commit_timestamp" is set. +ERROR: cannot retrieve commit timestamp for transaction 2 SELECT x.xid::text::bigint > 0, x.timestamp > '-infinity'::timestamptz, x.timestamp <= now() FROM pg_last_committed_xact() x; ERROR: could not get commit timestamp data HINT: Make sure the configuration parameter "track_commit_timestamp" is set. diff --git a/src/test/modules/test_ddl_deparse/.gitignore b/src/test/modules/test_ddl_deparse/.gitignore index 6628455c0ad8b..5dcb3ff972350 100644 --- a/src/test/modules/test_ddl_deparse/.gitignore +++ b/src/test/modules/test_ddl_deparse/.gitignore @@ -1 +1,4 @@ +# Generated subdirectories +/log/ /results/ +/tmp_check/ diff --git a/src/test/modules/test_ddl_deparse/README b/src/test/modules/test_ddl_deparse/README new file mode 100644 index 0000000000000..f02640731e8c2 --- /dev/null +++ b/src/test/modules/test_ddl_deparse/README @@ -0,0 +1,8 @@ +test_ddl_deparse is an example of how to use the pg_ddl_command datatype. +It is not intended to do anything useful on its own; rather, it is a +demonstration of how to use the datatype, and to provide some unit tests for +it. + +The functions in this extension are intended to be able to process some +part of the struct and produce some readable output, preferrably handling +all possible cases so that SQL test code can be written. diff --git a/src/test/modules/test_ddl_deparse/test_ddl_deparse.c b/src/test/modules/test_ddl_deparse/test_ddl_deparse.c index 44a5cb0277e13..4fca7373b0a9e 100644 --- a/src/test/modules/test_ddl_deparse/test_ddl_deparse.c +++ b/src/test/modules/test_ddl_deparse/test_ddl_deparse.c @@ -1,3 +1,13 @@ +/*---------------------------------------------------------------------- + * test_ddl_deparse.c + * Support functions for the test_ddl_deparse module + * + * Copyright (C) 2014-2015, PostgreSQL Global Development Group + * + * IDENTIFICATION + * src/test/modules/test_ddl_deparse/test_ddl_deparse.c + *---------------------------------------------------------------------- + */ #include "postgres.h" #include "catalog/pg_type.h" @@ -11,6 +21,10 @@ PG_FUNCTION_INFO_V1(get_command_type); PG_FUNCTION_INFO_V1(get_command_tag); PG_FUNCTION_INFO_V1(get_altertable_subcmdtypes); +/* + * Return the textual representation of the struct type used to represent a + * command in struct CollectedCommand format. + */ Datum get_command_type(PG_FUNCTION_ARGS) { @@ -48,6 +62,10 @@ get_command_type(PG_FUNCTION_ARGS) PG_RETURN_TEXT_P(cstring_to_text(type)); } +/* + * Return the command tag corresponding to a parse node contained in a + * CollectedCommand struct. + */ Datum get_command_tag(PG_FUNCTION_ARGS) { @@ -59,6 +77,10 @@ get_command_tag(PG_FUNCTION_ARGS) PG_RETURN_TEXT_P(cstring_to_text(CreateCommandTag(cmd->parsetree))); } +/* + * Return a text array representation of the subcommands of an ALTER TABLE + * command. + */ Datum get_altertable_subcmdtypes(PG_FUNCTION_ARGS) { @@ -151,6 +173,9 @@ get_altertable_subcmdtypes(PG_FUNCTION_ARGS) case AT_DropConstraintRecurse: strtype = "DROP CONSTRAINT (and recurse)"; break; + case AT_ReAddComment: + strtype = "(re) ADD COMMENT"; + break; case AT_AlterColumnType: strtype = "ALTER COLUMN SET TYPE"; break; @@ -250,9 +275,18 @@ get_altertable_subcmdtypes(PG_FUNCTION_ARGS) case AT_DisableRowSecurity: strtype = "DISABLE ROW SECURITY"; break; + case AT_ForceRowSecurity: + strtype = "FORCE ROW SECURITY"; + break; + case AT_NoForceRowSecurity: + strtype = "NO FORCE ROW SECURITY"; + break; case AT_GenericOptions: strtype = "SET OPTIONS"; break; + default: + strtype = "unrecognized"; + break; } astate = diff --git a/src/test/modules/test_rls_hooks/expected/test_rls_hooks.out b/src/test/modules/test_rls_hooks/expected/test_rls_hooks.out index 3a7a4c329f3ad..159b6043f0ac0 100644 --- a/src/test/modules/test_rls_hooks/expected/test_rls_hooks.out +++ b/src/test/modules/test_rls_hooks/expected/test_rls_hooks.out @@ -13,6 +13,11 @@ CREATE TABLE rls_test_restrictive ( supervisor name, data integer ); +-- At least one permissive policy must exist, otherwise +-- the default deny policy will be applied. For +-- testing the only-restrictive-policies from the hook, +-- create a simple 'allow all' policy. +CREATE POLICY p1 ON rls_test_restrictive USING (true); -- initial test data INSERT INTO rls_test_restrictive VALUES ('r1','s1',1); INSERT INTO rls_test_restrictive VALUES ('r2','s2',2); @@ -57,7 +62,7 @@ SELECT * FROM rls_test_permissive; INSERT INTO rls_test_permissive VALUES ('r1','s1',10); -- failure INSERT INTO rls_test_permissive VALUES ('r4','s4',10); -ERROR: new row violates row level security policy for "rls_test_permissive" +ERROR: new row violates row-level security policy for table "rls_test_permissive" SET ROLE s1; -- With only the hook's policies, restrictive -- hook's policy is current_user = supervisor @@ -78,7 +83,7 @@ SELECT * FROM rls_test_restrictive; INSERT INTO rls_test_restrictive VALUES ('r1','s1',10); -- failure INSERT INTO rls_test_restrictive VALUES ('r4','s4',10); -ERROR: new row violates row level security policy for "rls_test_restrictive" +ERROR: new row violates row-level security policy "extension policy" for table "rls_test_restrictive" SET ROLE s1; -- With only the hook's policies, both -- permissive hook's policy is current_user = username @@ -98,17 +103,19 @@ SELECT * FROM rls_test_both; -- failure INSERT INTO rls_test_both VALUES ('r1','s1',10); -ERROR: new row violates row level security policy for "rls_test_both" +ERROR: new row violates row-level security policy for table "rls_test_both" -- failure INSERT INTO rls_test_both VALUES ('r4','s1',10); -ERROR: new row violates row level security policy for "rls_test_both" +ERROR: new row violates row-level security policy for table "rls_test_both" -- failure INSERT INTO rls_test_both VALUES ('r4','s4',10); -ERROR: new row violates row level security policy for "rls_test_both" +ERROR: new row violates row-level security policy for table "rls_test_both" RESET ROLE; -- Create "internal" policies, to check that the policies from -- the hooks are combined correctly. CREATE POLICY p1 ON rls_test_permissive USING (data % 2 = 0); +-- Remove the original allow-all policy +DROP POLICY p1 ON rls_test_restrictive; CREATE POLICY p1 ON rls_test_restrictive USING (data % 2 = 0); CREATE POLICY p1 ON rls_test_both USING (data % 2 = 0); SET ROLE r1; @@ -117,7 +124,7 @@ EXPLAIN (costs off) SELECT * FROM rls_test_permissive; QUERY PLAN --------------------------------------------------------------- Seq Scan on rls_test_permissive - Filter: (("current_user"() = username) OR ((data % 2) = 0)) + Filter: (((data % 2) = 0) OR ("current_user"() = username)) (2 rows) SELECT * FROM rls_test_permissive; @@ -134,7 +141,7 @@ INSERT INTO rls_test_permissive VALUES ('r1','s1',7); INSERT INTO rls_test_permissive VALUES ('r3','s3',10); -- failure INSERT INTO rls_test_permissive VALUES ('r4','s4',7); -ERROR: new row violates row level security policy for "rls_test_permissive" +ERROR: new row violates row-level security policy for table "rls_test_permissive" SET ROLE s1; -- With both internal and hook policies, restrictive EXPLAIN (costs off) SELECT * FROM rls_test_restrictive; @@ -156,20 +163,20 @@ SELECT * FROM rls_test_restrictive; INSERT INTO rls_test_restrictive VALUES ('r1','s1',8); -- failure INSERT INTO rls_test_restrictive VALUES ('r3','s3',10); -ERROR: new row violates row level security policy for "rls_test_restrictive" +ERROR: new row violates row-level security policy "extension policy" for table "rls_test_restrictive" -- failure INSERT INTO rls_test_restrictive VALUES ('r1','s1',7); -ERROR: new row violates row level security policy for "rls_test_restrictive" +ERROR: new row violates row-level security policy for table "rls_test_restrictive" -- failure INSERT INTO rls_test_restrictive VALUES ('r4','s4',7); -ERROR: new row violates row level security policy for "rls_test_restrictive" +ERROR: new row violates row-level security policy for table "rls_test_restrictive" -- With both internal and hook policies, both permissive -- and restrictive hook policies EXPLAIN (costs off) SELECT * FROM rls_test_both; QUERY PLAN ------------------------------------------------------------------------------------------- Subquery Scan on rls_test_both - Filter: (("current_user"() = rls_test_both.username) OR ((rls_test_both.data % 2) = 0)) + Filter: (((rls_test_both.data % 2) = 0) OR ("current_user"() = rls_test_both.username)) -> Seq Scan on rls_test_both rls_test_both_1 Filter: ("current_user"() = supervisor) (4 rows) @@ -183,13 +190,13 @@ SELECT * FROM rls_test_both; INSERT INTO rls_test_both VALUES ('r1','s1',8); -- failure INSERT INTO rls_test_both VALUES ('r3','s3',10); -ERROR: new row violates row level security policy for "rls_test_both" +ERROR: new row violates row-level security policy "extension policy" for table "rls_test_both" -- failure INSERT INTO rls_test_both VALUES ('r1','s1',7); -ERROR: new row violates row level security policy for "rls_test_both" +ERROR: new row violates row-level security policy for table "rls_test_both" -- failure INSERT INTO rls_test_both VALUES ('r4','s4',7); -ERROR: new row violates row level security policy for "rls_test_both" +ERROR: new row violates row-level security policy for table "rls_test_both" RESET ROLE; DROP TABLE rls_test_restrictive; DROP TABLE rls_test_permissive; diff --git a/src/test/modules/test_rls_hooks/sql/test_rls_hooks.sql b/src/test/modules/test_rls_hooks/sql/test_rls_hooks.sql index ece4ab9dc9482..3071213732f79 100644 --- a/src/test/modules/test_rls_hooks/sql/test_rls_hooks.sql +++ b/src/test/modules/test_rls_hooks/sql/test_rls_hooks.sql @@ -17,6 +17,12 @@ CREATE TABLE rls_test_restrictive ( data integer ); +-- At least one permissive policy must exist, otherwise +-- the default deny policy will be applied. For +-- testing the only-restrictive-policies from the hook, +-- create a simple 'allow all' policy. +CREATE POLICY p1 ON rls_test_restrictive USING (true); + -- initial test data INSERT INTO rls_test_restrictive VALUES ('r1','s1',1); INSERT INTO rls_test_restrictive VALUES ('r2','s2',2); @@ -101,6 +107,8 @@ RESET ROLE; -- the hooks are combined correctly. CREATE POLICY p1 ON rls_test_permissive USING (data % 2 = 0); +-- Remove the original allow-all policy +DROP POLICY p1 ON rls_test_restrictive; CREATE POLICY p1 ON rls_test_restrictive USING (data % 2 = 0); CREATE POLICY p1 ON rls_test_both USING (data % 2 = 0); diff --git a/src/test/modules/test_rls_hooks/test_rls_hooks.c b/src/test/modules/test_rls_hooks/test_rls_hooks.c index 61b62d55b4cf9..cc865cdb98b35 100644 --- a/src/test/modules/test_rls_hooks/test_rls_hooks.c +++ b/src/test/modules/test_rls_hooks/test_rls_hooks.c @@ -87,7 +87,6 @@ test_rls_hooks_permissive(CmdType cmdtype, Relation relation) role = ObjectIdGetDatum(ACL_ID_PUBLIC); policy->policy_name = pstrdup("extension policy"); - policy->policy_id = InvalidOid; policy->polcmd = '*'; policy->roles = construct_array(&role, 1, OIDOID, sizeof(Oid), true, 'i'); @@ -106,7 +105,7 @@ test_rls_hooks_permissive(CmdType cmdtype, Relation relation) e = (Node *) makeSimpleA_Expr(AEXPR_OP, "=", (Node *) n, (Node *) c, 0); policy->qual = (Expr *) transformWhereClause(qual_pstate, copyObject(e), - EXPR_KIND_WHERE, + EXPR_KIND_POLICY, "POLICY"); policy->with_check_qual = copyObject(policy->qual); @@ -119,6 +118,11 @@ test_rls_hooks_permissive(CmdType cmdtype, Relation relation) /* * Return restrictive policies to be added + * + * Note that a permissive policy must exist or the default-deny policy + * will be included and nothing will be visible. If no filtering should + * be done except for the restrictive policy, then a single "USING (true)" + * permissive policy can be used; see the regression tests. */ List * test_rls_hooks_restrictive(CmdType cmdtype, Relation relation) @@ -146,7 +150,6 @@ test_rls_hooks_restrictive(CmdType cmdtype, Relation relation) role = ObjectIdGetDatum(ACL_ID_PUBLIC); policy->policy_name = pstrdup("extension policy"); - policy->policy_id = InvalidOid; policy->polcmd = '*'; policy->roles = construct_array(&role, 1, OIDOID, sizeof(Oid), true, 'i'); @@ -160,7 +163,7 @@ test_rls_hooks_restrictive(CmdType cmdtype, Relation relation) e = (Node *) makeSimpleA_Expr(AEXPR_OP, "=", (Node *) n, (Node *) c, 0); policy->qual = (Expr *) transformWhereClause(qual_pstate, copyObject(e), - EXPR_KIND_WHERE, + EXPR_KIND_POLICY, "POLICY"); policy->with_check_qual = copyObject(policy->qual); diff --git a/src/test/perl/SimpleTee.pm b/src/test/perl/SimpleTee.pm new file mode 100644 index 0000000000000..8d31a4013c878 --- /dev/null +++ b/src/test/perl/SimpleTee.pm @@ -0,0 +1,27 @@ +# A simple 'tee' implementation, using perl tie. +# +# Whenever you print to the handle, it gets forwarded to a list of +# handles. The list of output filehandles is passed to the constructor. +# +# This is similar to IO::Tee, but only used for output. Only the PRINT +# method is currently implemented; that's all we need. We don't want to +# depend on IO::Tee just for this. + +package SimpleTee; +use strict; + +sub TIEHANDLE { + my $self = shift; + bless \@_, $self; +} + +sub PRINT { + my $self = shift; + my $ok = 1; + for my $fh (@$self) { + print $fh @_ or $ok = 0; + } + return $ok; +} + +1; diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index ef42366888e5c..d249ebe24d52b 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -3,6 +3,7 @@ package TestLib; use strict; use warnings; +use Config; use Exporter 'import'; our @EXPORT = qw( tempdir @@ -12,6 +13,8 @@ our @EXPORT = qw( restart_test_server psql system_or_bail + system_log + run_log command_ok command_fails @@ -21,14 +24,58 @@ our @EXPORT = qw( program_options_handling_ok command_like issues_sql_like + + $tmp_check + $log_path + $windows_os ); use Cwd; +use File::Basename; use File::Spec; use File::Temp (); use IPC::Run qw(run start); + +use SimpleTee; + use Test::More; +our $windows_os = $Config{osname} eq 'MSWin32' || $Config{osname} eq 'msys'; + +# Open log file. For each test, the log file name uses the name of the +# file launching this module, without the .pl suffix. +our ($tmp_check, $log_path); +$tmp_check = $ENV{TESTDIR} ? "$ENV{TESTDIR}/tmp_check" : "tmp_check"; +$log_path = "$tmp_check/log"; +mkdir $tmp_check; +mkdir $log_path; +my $test_logfile = basename($0); +$test_logfile =~ s/\.[^.]+$//; +$test_logfile = "$log_path/regress_log_$test_logfile"; +open TESTLOG, '>', $test_logfile or die "Cannot open STDOUT to logfile: $!"; + +# Hijack STDOUT and STDERR to the log file +open(ORIG_STDOUT, ">&STDOUT"); +open(ORIG_STDERR, ">&STDERR"); +open(STDOUT, ">&TESTLOG"); +open(STDERR, ">&TESTLOG"); + +# The test output (ok ...) needs to be printed to the original STDOUT so +# that the 'prove' program can parse it, and display it to the user in +# real time. But also copy it to the log file, to provide more context +# in the log. +my $builder = Test::More->builder; +my $fh = $builder->output; +tie *$fh, "SimpleTee", *ORIG_STDOUT, *TESTLOG; +$fh = $builder->failure_output; +tie *$fh, "SimpleTee", *ORIG_STDERR, *TESTLOG; + +# Enable auto-flushing for all the file handles. Stderr and stdout are +# redirected to the same file, and buffering causes the lines to appear +# in the log in confusing order. +autoflush STDOUT 1; +autoflush STDERR 1; +autoflush TESTLOG 1; # Set to untranslated messages, to be able to compare program output # with expected strings. @@ -77,9 +124,14 @@ sub tempdir_short sub standard_initdb { my $pgdata = shift; - system_or_bail("initdb -D '$pgdata' -A trust -N >/dev/null"); + system_or_bail('initdb', '-D', "$pgdata", '-A' , 'trust', '-N'); system_or_bail("$ENV{top_builddir}/src/test/regress/pg_regress", '--config-auth', $pgdata); + + open CONF, ">>$pgdata/postgresql.conf"; + print CONF "\n# Added by TestLib.pm)\n"; + print CONF "fsync = off\n"; + close CONF; } my ($test_server_datadir, $test_server_logfile); @@ -91,47 +143,65 @@ sub start_test_server my $tempdir_short = tempdir_short; + print("### Starting test server in $tempdir\n"); standard_initdb "$tempdir/pgdata"; - $ret = system 'pg_ctl', '-D', "$tempdir/pgdata", '-s', '-w', '-l', - "$tempdir/logfile", '-o', -"--fsync=off -k $tempdir_short --listen-addresses='' --log-statement=all", - 'start'; - + $ret = system_log('pg_ctl', '-D', "$tempdir/pgdata", '-w', '-l', + "$log_path/postmaster.log", '-o', +"-k \"$tempdir_short\" --listen-addresses='' --log-statement=all", + 'start'); if ($ret != 0) { - system('cat', "$tempdir/logfile"); + print "# pg_ctl failed; logfile:\n"; + system('cat', "$log_path/postmaster.log"); BAIL_OUT("pg_ctl failed"); } $ENV{PGHOST} = $tempdir_short; $test_server_datadir = "$tempdir/pgdata"; - $test_server_logfile = "$tempdir/logfile"; + $test_server_logfile = "$log_path/postmaster.log"; } sub restart_test_server { - system 'pg_ctl', '-s', '-D', $test_server_datadir, '-w', '-l', - $test_server_logfile, 'restart'; + print("### Restarting test server\n"); + system_log('pg_ctl', '-D', $test_server_datadir, '-w', '-l', + $test_server_logfile, 'restart'); } END { if ($test_server_datadir) { - system 'pg_ctl', '-D', $test_server_datadir, '-s', '-w', '-m', - 'immediate', 'stop'; + system_log('pg_ctl', '-D', $test_server_datadir, '-m', + 'immediate', 'stop'); } } sub psql { my ($dbname, $sql) = @_; + print("# Running SQL command: $sql\n"); run [ 'psql', '-X', '-q', '-d', $dbname, '-f', '-' ], '<', \$sql or die; } sub system_or_bail { - system(@_) == 0 or BAIL_OUT("system @_ failed: $?"); + if (system_log(@_) != 0) + { + BAIL_OUT("system $_[0] failed: $?"); + } +} + +sub system_log +{ + print("# Running: " . join(" ", @_) ."\n"); + return system(@_); +} + +sub run_log +{ + print("# Running: " . join(" ", @{$_[0]}) ."\n"); + return run (@_); } @@ -143,24 +213,22 @@ sub system_or_bail sub command_ok { my ($cmd, $test_name) = @_; - my $result = run $cmd, '>', File::Spec->devnull(), '2>', - File::Spec->devnull(); + my $result = run_log($cmd); ok($result, $test_name); } sub command_fails { my ($cmd, $test_name) = @_; - my $result = run $cmd, '>', File::Spec->devnull(), '2>', - File::Spec->devnull(); + my $result = run_log($cmd); ok(!$result, $test_name); } sub command_exit_is { my ($cmd, $expected, $test_name) = @_; - my $h = start $cmd, '>', File::Spec->devnull(), '2>', - File::Spec->devnull(); + print("# Running: " . join(" ", @{$cmd}) ."\n"); + my $h = start $cmd; $h->finish(); is($h->result(0), $expected, $test_name); } @@ -169,6 +237,7 @@ sub program_help_ok { my ($cmd) = @_; my ($stdout, $stderr); + print("# Running: $cmd --help\n"); my $result = run [ $cmd, '--help' ], '>', \$stdout, '2>', \$stderr; ok($result, "$cmd --help exit code 0"); isnt($stdout, '', "$cmd --help goes to stdout"); @@ -179,6 +248,7 @@ sub program_version_ok { my ($cmd) = @_; my ($stdout, $stderr); + print("# Running: $cmd --version\n"); my $result = run [ $cmd, '--version' ], '>', \$stdout, '2>', \$stderr; ok($result, "$cmd --version exit code 0"); isnt($stdout, '', "$cmd --version goes to stdout"); @@ -189,6 +259,7 @@ sub program_options_handling_ok { my ($cmd) = @_; my ($stdout, $stderr); + print("# Running: $cmd --not-a-valid-option\n"); my $result = run [ $cmd, '--not-a-valid-option' ], '>', \$stdout, '2>', \$stderr; ok(!$result, "$cmd with invalid option nonzero exit code"); @@ -199,6 +270,7 @@ sub command_like { my ($cmd, $expected_stdout, $test_name) = @_; my ($stdout, $stderr); + print("# Running: " . join(" ", @{$cmd}) . "\n"); my $result = run $cmd, '>', \$stdout, '2>', \$stderr; ok($result, "@$cmd exit code 0"); is($stderr, '', "@$cmd no stderr"); @@ -208,9 +280,8 @@ sub command_like sub issues_sql_like { my ($cmd, $expected_sql, $test_name) = @_; - my ($stdout, $stderr); truncate $test_server_logfile, 0; - my $result = run $cmd, '>', \$stdout, '2>', \$stderr; + my $result = run_log($cmd); ok($result, "@$cmd exit code 0"); my $log = `cat '$test_server_logfile'`; like($log, $expected_sql, "$test_name: SQL found in server log"); diff --git a/src/test/regress/expected/alter_generic.out b/src/test/regress/expected/alter_generic.out index 7845b8af591f4..4c3c8826b755c 100644 --- a/src/test/regress/expected/alter_generic.out +++ b/src/test/regress/expected/alter_generic.out @@ -450,7 +450,7 @@ ERROR: associated data types must be specified for index support procedure DROP OPERATOR FAMILY alt_opf16 USING gist; -- Should fail. duplicate operator number / function number in ALTER OPERATOR FAMILY ... ADD FUNCTION CREATE OPERATOR FAMILY alt_opf17 USING btree; -ALTER OPERATOR FAMILY alt_opf17 USING btree ADD OPERATOR 1 < (int4, int4), OPERATOR 1 < (int4, int4); -- operator # appears twice in same statment +ALTER OPERATOR FAMILY alt_opf17 USING btree ADD OPERATOR 1 < (int4, int4), OPERATOR 1 < (int4, int4); -- operator # appears twice in same statement ERROR: operator number 1 for (integer,integer) appears more than once ALTER OPERATOR FAMILY alt_opf17 USING btree ADD OPERATOR 1 < (int4, int4); -- operator 1 requested first-time ALTER OPERATOR FAMILY alt_opf17 USING btree ADD OPERATOR 1 < (int4, int4); -- operator 1 requested again in separate statement diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out index 3ad2c55775c64..f78a4314e7072 100644 --- a/src/test/regress/expected/alter_table.out +++ b/src/test/regress/expected/alter_table.out @@ -438,6 +438,19 @@ explain (costs off) select * from nv_parent where d between '2009-08-01'::date a Filter: ((d >= '08-01-2009'::date) AND (d <= '08-31-2009'::date)) (7 rows) +-- add an inherited NOT VALID constraint +alter table nv_parent add check (d between '2001-01-01'::date and '2099-12-31'::date) not valid; +\d nv_child_2009 +Table "public.nv_child_2009" + Column | Type | Modifiers +--------+------+----------- + d | date | +Check constraints: + "nv_child_2009_d_check" CHECK (d >= '01-01-2009'::date AND d <= '12-31-2009'::date) + "nv_parent_d_check" CHECK (d >= '01-01-2001'::date AND d <= '12-31-2099'::date) NOT VALID +Inherits: nv_parent + +-- we leave nv_parent and children around to help test pg_dump logic -- Foreign key adding test with mixed types -- Note: these tables are TEMP to avoid name conflicts when this test -- is run in parallel with foreign_key.sql. @@ -1842,7 +1855,8 @@ DROP TABLE check_fk_presence_1, check_fk_presence_2; drop type lockmodes; ERROR: type "lockmodes" does not exist create type lockmodes as enum ( - 'AccessShareLock' + 'SIReadLock' +,'AccessShareLock' ,'RowShareLock' ,'RowExclusiveLock' ,'ShareUpdateExclusiveLock' @@ -2400,6 +2414,69 @@ Check constraints: DROP TABLE alter2.tt8; DROP SCHEMA alter2; +-- Check that comments on constraints and indexes are not lost at ALTER TABLE. +CREATE TABLE comment_test ( + id int, + positive_col int CHECK (positive_col > 0), + indexed_col int, + CONSTRAINT comment_test_pk PRIMARY KEY (id)); +CREATE INDEX comment_test_index ON comment_test(indexed_col); +COMMENT ON COLUMN comment_test.id IS 'Column ''id'' on comment_test'; +COMMENT ON INDEX comment_test_index IS 'Simple index on comment_test'; +COMMENT ON CONSTRAINT comment_test_positive_col_check ON comment_test IS 'CHECK constraint on comment_test.positive_col'; +COMMENT ON CONSTRAINT comment_test_pk ON comment_test IS 'PRIMARY KEY constraint of comment_test'; +COMMENT ON INDEX comment_test_pk IS 'Index backing the PRIMARY KEY of comment_test'; +SELECT col_description('comment_test'::regclass, 1) as comment; + comment +----------------------------- + Column 'id' on comment_test +(1 row) + +SELECT indexrelid::regclass::text as index, obj_description(indexrelid, 'pg_class') as comment FROM pg_index where indrelid = 'comment_test'::regclass ORDER BY 1, 2; + index | comment +--------------------+----------------------------------------------- + comment_test_index | Simple index on comment_test + comment_test_pk | Index backing the PRIMARY KEY of comment_test +(2 rows) + +SELECT conname as constraint, obj_description(oid, 'pg_constraint') as comment FROM pg_constraint where conrelid = 'comment_test'::regclass ORDER BY 1, 2; + constraint | comment +---------------------------------+----------------------------------------------- + comment_test_pk | PRIMARY KEY constraint of comment_test + comment_test_positive_col_check | CHECK constraint on comment_test.positive_col +(2 rows) + +-- Change the datatype of all the columns. ALTER TABLE is optimized to not +-- rebuild an index if the new data type is binary compatible with the old +-- one. Check do a dummy ALTER TABLE that doesn't change the datatype +-- first, to test that no-op codepath, and another one that does. +ALTER TABLE comment_test ALTER COLUMN indexed_col SET DATA TYPE int; +ALTER TABLE comment_test ALTER COLUMN indexed_col SET DATA TYPE text; +ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE int; +ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE text; +ALTER TABLE comment_test ALTER COLUMN positive_col SET DATA TYPE int; +ALTER TABLE comment_test ALTER COLUMN positive_col SET DATA TYPE bigint; +-- Check that the comments are intact. +SELECT col_description('comment_test'::regclass, 1) as comment; + comment +----------------------------- + Column 'id' on comment_test +(1 row) + +SELECT indexrelid::regclass::text as index, obj_description(indexrelid, 'pg_class') as comment FROM pg_index where indrelid = 'comment_test'::regclass ORDER BY 1, 2; + index | comment +--------------------+----------------------------------------------- + comment_test_index | Simple index on comment_test + comment_test_pk | Index backing the PRIMARY KEY of comment_test +(2 rows) + +SELECT conname as constraint, obj_description(oid, 'pg_constraint') as comment FROM pg_constraint where conrelid = 'comment_test'::regclass ORDER BY 1, 2; + constraint | comment +---------------------------------+----------------------------------------------- + comment_test_pk | PRIMARY KEY constraint of comment_test + comment_test_positive_col_check | CHECK constraint on comment_test.positive_col +(2 rows) + -- Check that we map relation oids to filenodes and back correctly. Only -- display bad mappings so the test output doesn't change all the time. A -- filenode function call can return NULL for a relation dropped concurrently diff --git a/src/test/regress/expected/arrays.out b/src/test/regress/expected/arrays.out index 5f1532f2371e9..73fb5a248b47c 100644 --- a/src/test/regress/expected/arrays.out +++ b/src/test/regress/expected/arrays.out @@ -1116,6 +1116,27 @@ select * from arr_tbl where f1 >= '{1,2,3}' and f1 < '{1,5,3}'; {1,2,10} (2 rows) +-- test ON CONFLICT DO UPDATE with arrays +create temp table arr_pk_tbl (pk int4 primary key, f1 int[]); +insert into arr_pk_tbl values (1, '{1,2,3}'); +insert into arr_pk_tbl values (1, '{3,4,5}') on conflict (pk) + do update set f1[1] = excluded.f1[1], f1[3] = excluded.f1[3] + returning pk, f1; + pk | f1 +----+--------- + 1 | {3,2,5} +(1 row) + +insert into arr_pk_tbl(pk, f1[1:2]) values (1, '{6,7,8}') on conflict (pk) + do update set f1[1] = excluded.f1[1], + f1[2] = excluded.f1[2], + f1[3] = excluded.f1[3] + returning pk, f1; + pk | f1 +----+------------ + 1 | {6,7,NULL} +(1 row) + -- note: if above selects don't produce the expected tuple order, -- then you didn't get an indexscan plan, and something is busted. reset enable_seqscan; diff --git a/src/test/regress/expected/create_type.out b/src/test/regress/expected/create_type.out index b5af862ce5c14..7bdad4e9bb5e3 100644 --- a/src/test/regress/expected/create_type.out +++ b/src/test/regress/expected/create_type.out @@ -29,6 +29,8 @@ ERROR: type "shell" already exists DROP TYPE shell; DROP TYPE shell; -- fail, type not exist ERROR: type "shell" does not exist +-- also, let's leave one around for purposes of pg_dump testing +CREATE TYPE myshell; -- -- Test type-related default values (broken in releases before PG 7.2) -- diff --git a/src/test/regress/expected/event_trigger.out b/src/test/regress/expected/event_trigger.out index e70c315383a7a..95387a888b468 100644 --- a/src/test/regress/expected/event_trigger.out +++ b/src/test/regress/expected/event_trigger.out @@ -235,15 +235,15 @@ drop cascades to table schema_one."table two" drop cascades to table schema_one.table_three NOTICE: table "schema_two_table_two" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls.schema_two_table_two" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE NOTICE: table "audit_tbls_schema_two_table_three" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls.audit_tbls_schema_two_table_three" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE SQL statement "DROP TABLE IF EXISTS audit_tbls.schema_two_table_three" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE ERROR: object audit_tbls.schema_two_table_three of type table cannot be dropped CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls.schema_two_table_three" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE DELETE FROM undroppable_objs WHERE object_identity = 'audit_tbls.schema_two_table_three'; DROP SCHEMA schema_one, schema_two CASCADE; NOTICE: drop cascades to 7 other objects @@ -256,21 +256,21 @@ drop cascades to table schema_one."table two" drop cascades to table schema_one.table_three NOTICE: table "schema_two_table_two" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls.schema_two_table_two" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE NOTICE: table "audit_tbls_schema_two_table_three" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls.audit_tbls_schema_two_table_three" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE SQL statement "DROP TABLE IF EXISTS audit_tbls.schema_two_table_three" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE NOTICE: table "schema_one_table_one" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls.schema_one_table_one" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE NOTICE: table "schema_one_table two" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls."schema_one_table two"" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE NOTICE: table "schema_one_table_three" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls.schema_one_table_three" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE ERROR: object schema_one.table_three of type table cannot be dropped DELETE FROM undroppable_objs WHERE object_identity = 'schema_one.table_three'; DROP SCHEMA schema_one, schema_two CASCADE; @@ -284,21 +284,21 @@ drop cascades to table schema_one."table two" drop cascades to table schema_one.table_three NOTICE: table "schema_two_table_two" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls.schema_two_table_two" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE NOTICE: table "audit_tbls_schema_two_table_three" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls.audit_tbls_schema_two_table_three" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE SQL statement "DROP TABLE IF EXISTS audit_tbls.schema_two_table_three" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE NOTICE: table "schema_one_table_one" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls.schema_one_table_one" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE NOTICE: table "schema_one_table two" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls."schema_one_table two"" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE NOTICE: table "schema_one_table_three" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls.schema_one_table_three" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE SELECT * FROM dropped_objects WHERE schema IS NULL OR schema <> 'pg_toast'; type | schema | object --------------+------------+------------------------------------- @@ -330,7 +330,7 @@ SELECT * FROM dropped_objects WHERE schema IS NULL OR schema <> 'pg_toast'; DROP OWNED BY regression_bob; NOTICE: schema "audit_tbls" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS audit_tbls.audit_tbls_schema_one_table_two" -PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE statement +PL/pgSQL function test_evtrig_dropped_objects() line 8 at EXECUTE SELECT * FROM dropped_objects WHERE type = 'schema'; type | schema | object --------+--------+------------ diff --git a/src/test/regress/expected/gist.out b/src/test/regress/expected/gist.out index 1c32612d5bc43..c7181b0397ec4 100644 --- a/src/test/regress/expected/gist.out +++ b/src/test/regress/expected/gist.out @@ -61,16 +61,16 @@ select p from gist_tbl where p <@ box(point(0,0), point(0.5, 0.5)); -- Also test an index-only knn-search explain (costs off) select p from gist_tbl where p <@ box(point(0,0), point(0.5, 0.5)) -order by p <-> point(0.2, 0.2); +order by p <-> point(0.201, 0.201); QUERY PLAN -------------------------------------------------------- Index Only Scan using gist_tbl_point_index on gist_tbl Index Cond: (p <@ '(0.5,0.5),(0,0)'::box) - Order By: (p <-> '(0.2,0.2)'::point) + Order By: (p <-> '(0.201,0.201)'::point) (3 rows) select p from gist_tbl where p <@ box(point(0,0), point(0.5, 0.5)) -order by p <-> point(0.2, 0.2); +order by p <-> point(0.201, 0.201); p ------------- (0.2,0.2) @@ -80,8 +80,8 @@ order by p <-> point(0.2, 0.2); (0.1,0.1) (0.35,0.35) (0.05,0.05) - (0,0) (0.4,0.4) + (0,0) (0.45,0.45) (0.5,0.5) (11 rows) @@ -89,23 +89,23 @@ order by p <-> point(0.2, 0.2); -- Check commuted case as well explain (costs off) select p from gist_tbl where p <@ box(point(0,0), point(0.5, 0.5)) -order by point(0.1, 0.1) <-> p; +order by point(0.101, 0.101) <-> p; QUERY PLAN -------------------------------------------------------- Index Only Scan using gist_tbl_point_index on gist_tbl Index Cond: (p <@ '(0.5,0.5),(0,0)'::box) - Order By: (p <-> '(0.1,0.1)'::point) + Order By: (p <-> '(0.101,0.101)'::point) (3 rows) select p from gist_tbl where p <@ box(point(0,0), point(0.5, 0.5)) -order by point(0.1, 0.1) <-> p; +order by point(0.101, 0.101) <-> p; p ------------- (0.1,0.1) (0.15,0.15) (0.05,0.05) - (0,0) (0.2,0.2) + (0,0) (0.25,0.25) (0.3,0.3) (0.35,0.35) diff --git a/src/test/regress/expected/groupingsets.out b/src/test/regress/expected/groupingsets.out index 842c2aec7e210..b0b8c4b7f26d6 100644 --- a/src/test/regress/expected/groupingsets.out +++ b/src/test/regress/expected/groupingsets.out @@ -145,6 +145,127 @@ select a, b, sum(c), sum(sum(c)) over (order by a,b) as rsum | | 12 | 36 (6 rows) +-- nesting with grouping sets +select sum(c) from gstest2 + group by grouping sets((), grouping sets((), grouping sets(()))) + order by 1 desc; + sum +----- + 12 + 12 + 12 +(3 rows) + +select sum(c) from gstest2 + group by grouping sets((), grouping sets((), grouping sets(((a, b))))) + order by 1 desc; + sum +----- + 12 + 12 + 8 + 2 + 2 +(5 rows) + +select sum(c) from gstest2 + group by grouping sets(grouping sets(rollup(c), grouping sets(cube(c)))) + order by 1 desc; + sum +----- + 12 + 12 + 6 + 6 + 6 + 6 +(6 rows) + +select sum(c) from gstest2 + group by grouping sets(a, grouping sets(a, cube(b))) + order by 1 desc; + sum +----- + 12 + 10 + 10 + 8 + 4 + 2 + 2 +(7 rows) + +select sum(c) from gstest2 + group by grouping sets(grouping sets((a, (b)))) + order by 1 desc; + sum +----- + 8 + 2 + 2 +(3 rows) + +select sum(c) from gstest2 + group by grouping sets(grouping sets((a, b))) + order by 1 desc; + sum +----- + 8 + 2 + 2 +(3 rows) + +select sum(c) from gstest2 + group by grouping sets(grouping sets(a, grouping sets(a), a)) + order by 1 desc; + sum +----- + 10 + 10 + 10 + 2 + 2 + 2 +(6 rows) + +select sum(c) from gstest2 + group by grouping sets(grouping sets(a, grouping sets(a, grouping sets(a), ((a)), a, grouping sets(a), (a)), a)) + order by 1 desc; + sum +----- + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 +(16 rows) + +select sum(c) from gstest2 + group by grouping sets((a,(a,b)), grouping sets((a,(a,b)),a)) + order by 1 desc; + sum +----- + 10 + 8 + 8 + 2 + 2 + 2 + 2 + 2 +(8 rows) + -- empty input: first is 0 rows, second 1, third 3 etc. select a, b, sum(v), count(*) from gstest_empty group by grouping sets ((a,b),a); a | b | sum | count @@ -486,6 +607,68 @@ having exists (select 1 from onek b where sum(distinct a.four) = b.four); 9 | 3 (25 rows) +-- HAVING with GROUPING queries +select ten, grouping(ten) from onek +group by grouping sets(ten) having grouping(ten) >= 0 +order by 2,1; + ten | grouping +-----+---------- + 0 | 0 + 1 | 0 + 2 | 0 + 3 | 0 + 4 | 0 + 5 | 0 + 6 | 0 + 7 | 0 + 8 | 0 + 9 | 0 +(10 rows) + +select ten, grouping(ten) from onek +group by grouping sets(ten, four) having grouping(ten) > 0 +order by 2,1; + ten | grouping +-----+---------- + | 1 + | 1 + | 1 + | 1 +(4 rows) + +select ten, grouping(ten) from onek +group by rollup(ten) having grouping(ten) > 0 +order by 2,1; + ten | grouping +-----+---------- + | 1 +(1 row) + +select ten, grouping(ten) from onek +group by cube(ten) having grouping(ten) > 0 +order by 2,1; + ten | grouping +-----+---------- + | 1 +(1 row) + +select ten, grouping(ten) from onek +group by (ten) having grouping(ten) >= 0 +order by 2,1; + ten | grouping +-----+---------- + 0 | 0 + 1 | 0 + 2 | 0 + 3 | 0 + 4 | 0 + 5 | 0 + 6 | 0 + 7 | 0 + 8 | 0 + 9 | 0 +(10 rows) + -- FILTER queries select ten, sum(distinct four) filter (where four::text ~ '123') from onek a group by rollup(ten); @@ -587,4 +770,27 @@ select array(select row(v.a,s1.*) from (select two,four, count(*) from onek grou {"(2,0,0,250)","(2,0,2,250)","(2,0,,500)","(2,1,1,250)","(2,1,3,250)","(2,1,,500)","(2,,0,250)","(2,,1,250)","(2,,2,250)","(2,,3,250)","(2,,,1000)"} (2 rows) +-- Grouping on text columns +select sum(ten) from onek group by two, rollup(four::text) order by 1; + sum +------ + 1000 + 1000 + 1250 + 1250 + 2000 + 2500 +(6 rows) + +select sum(ten) from onek group by rollup(four::text), two order by 1; + sum +------ + 1000 + 1000 + 1250 + 1250 + 2000 + 2500 +(6 rows) + -- end diff --git a/src/test/regress/expected/inherit.out b/src/test/regress/expected/inherit.out index 56e2c9951509c..89b6c1caf47e1 100644 --- a/src/test/regress/expected/inherit.out +++ b/src/test/regress/expected/inherit.out @@ -1307,6 +1307,40 @@ DETAIL: drop cascades to table matest1 drop cascades to table matest2 drop cascades to table matest3 -- +-- Check that use of an index with an extraneous column doesn't produce +-- a plan with extraneous sorting +-- +create table matest0 (a int, b int, c int, d int); +create table matest1 () inherits(matest0); +create index matest0i on matest0 (b, c); +create index matest1i on matest1 (b, c); +set enable_nestloop = off; -- we want a plan with two MergeAppends +explain (costs off) +select t1.* from matest0 t1, matest0 t2 +where t1.b = t2.b and t2.c = t2.d +order by t1.b limit 10; + QUERY PLAN +------------------------------------------------------------------- + Limit + -> Merge Join + Merge Cond: (t1.b = t2.b) + -> Merge Append + Sort Key: t1.b + -> Index Scan using matest0i on matest0 t1 + -> Index Scan using matest1i on matest1 t1_1 + -> Materialize + -> Merge Append + Sort Key: t2.b + -> Index Scan using matest0i on matest0 t2 + Filter: (c = d) + -> Index Scan using matest1i on matest1 t2_1 + Filter: (c = d) +(14 rows) + +reset enable_nestloop; +drop table matest0 cascade; +NOTICE: drop cascades to table matest1 +-- -- Test merge-append for UNION ALL append relations -- set enable_seqscan = off; diff --git a/src/test/regress/expected/insert_conflict.out b/src/test/regress/expected/insert_conflict.out index eca9690592db1..44bc01bf5ab0e 100644 --- a/src/test/regress/expected/insert_conflict.out +++ b/src/test/regress/expected/insert_conflict.out @@ -141,6 +141,24 @@ drop index collation_index_key; drop index both_index_key; drop index both_index_expr_key; -- +-- Make sure that cross matching of attribute opclass/collation does not occur +-- +create unique index cross_match on insertconflicttest(lower(fruit) collate "C", upper(fruit) text_pattern_ops); +-- fails: +explain (costs off) insert into insertconflicttest values(0, 'Crowberry') on conflict (lower(fruit) text_pattern_ops, upper(fruit) collate "C") do nothing; +ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification +-- works: +explain (costs off) insert into insertconflicttest values(0, 'Crowberry') on conflict (lower(fruit) collate "C", upper(fruit) text_pattern_ops) do nothing; + QUERY PLAN +----------------------------------------- + Insert on insertconflicttest + Conflict Resolution: NOTHING + Conflict Arbiter Indexes: cross_match + -> Result +(4 rows) + +drop index cross_match; +-- -- Single key tests -- create unique index key_index on insertconflicttest(key); @@ -245,7 +263,6 @@ ERROR: there is no unique or exclusion constraint matching the ON CONFLICT spec insert into insertconflicttest values (6, 'Passionfruit') on conflict (lower(fruit)) do update set fruit = excluded.fruit; ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification -- Check the target relation can be aliased -insert into insertconflicttest values (6, 'Passionfruits') on conflict (key) do update set fruit = excluded.fruit; insert into insertconflicttest AS ict values (6, 'Passionfruit') on conflict (key) do update set fruit = excluded.fruit; -- ok, no reference to target table insert into insertconflicttest AS ict values (6, 'Passionfruit') on conflict (key) do update set fruit = ict.fruit; -- ok, alias insert into insertconflicttest AS ict values (6, 'Passionfruit') on conflict (key) do update set fruit = insertconflicttest.fruit; -- error, references aliased away name @@ -363,8 +380,80 @@ ERROR: there is no unique or exclusion constraint matching the ON CONFLICT spec insert into insertconflicttest values (23, 'Blackberry') on conflict (fruit) where fruit like '%berry' do update set fruit = excluded.fruit; ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification drop index partial_key_index; +-- +-- Test that wholerow references to ON CONFLICT's EXCLUDED work +-- +create unique index plain on insertconflicttest(key); +-- Succeeds, updates existing row: +insert into insertconflicttest as i values (23, 'Jackfruit') on conflict (key) do update set fruit = excluded.fruit + where i.* != excluded.* returning *; + key | fruit +-----+----------- + 23 | Jackfruit +(1 row) + +-- No update this time, though: +insert into insertconflicttest as i values (23, 'Jackfruit') on conflict (key) do update set fruit = excluded.fruit + where i.* != excluded.* returning *; + key | fruit +-----+------- +(0 rows) + +-- Predicate changed to require match rather than non-match, so updates once more: +insert into insertconflicttest as i values (23, 'Jackfruit') on conflict (key) do update set fruit = excluded.fruit + where i.* = excluded.* returning *; + key | fruit +-----+----------- + 23 | Jackfruit +(1 row) + +-- Assign: +insert into insertconflicttest as i values (23, 'Avocado') on conflict (key) do update set fruit = excluded.*::text + returning *; + key | fruit +-----+-------------- + 23 | (23,Avocado) +(1 row) + +-- deparse whole row var in WHERE and SET clauses: +explain (costs off) insert into insertconflicttest as i values (23, 'Avocado') on conflict (key) do update set fruit = excluded.fruit where excluded.* is null; + QUERY PLAN +----------------------------------------- + Insert on insertconflicttest i + Conflict Resolution: UPDATE + Conflict Arbiter Indexes: plain + Conflict Filter: (excluded.* IS NULL) + -> Result +(5 rows) + +explain (costs off) insert into insertconflicttest as i values (23, 'Avocado') on conflict (key) do update set fruit = excluded.*::text; + QUERY PLAN +----------------------------------- + Insert on insertconflicttest i + Conflict Resolution: UPDATE + Conflict Arbiter Indexes: plain + -> Result +(4 rows) + +drop index plain; -- Cleanup drop table insertconflicttest; +-- +-- Verify that EXCLUDED does not allow system column references. These +-- do not make sense because EXCLUDED isn't an already stored tuple +-- (and thus doesn't have a ctid, oids are not assigned yet, etc). +-- +create table syscolconflicttest(key int4, data text) WITH OIDS; +insert into syscolconflicttest values (1); +insert into syscolconflicttest values (1) on conflict (key) do update set data = excluded.ctid::text; +ERROR: column excluded.ctid does not exist +LINE 1: ...values (1) on conflict (key) do update set data = excluded.c... + ^ +insert into syscolconflicttest values (1) on conflict (key) do update set data = excluded.oid::text; +ERROR: column excluded.oid does not exist +LINE 1: ...values (1) on conflict (key) do update set data = excluded.o... + ^ +drop table syscolconflicttest; -- ****************************************************************** -- * * -- * Test inheritance (example taken from tutorial) * @@ -490,3 +579,111 @@ insert into excluded values(1, '2') on conflict (key) do update set data = 3 RET -- clean up drop table excluded; +-- Check tables w/o oids are handled correctly +create table testoids(key int primary key, data text) without oids; +-- first without oids +insert into testoids values(1, '1') on conflict (key) do update set data = excluded.data RETURNING *; + key | data +-----+------ + 1 | 1 +(1 row) + +insert into testoids values(1, '2') on conflict (key) do update set data = excluded.data RETURNING *; + key | data +-----+------ + 1 | 2 +(1 row) + +-- add oids +alter table testoids set with oids; +-- update existing row, that didn't have an oid +insert into testoids values(1, '3') on conflict (key) do update set data = excluded.data RETURNING *; + key | data +-----+------ + 1 | 3 +(1 row) + +-- insert a new row +insert into testoids values(2, '1') on conflict (key) do update set data = excluded.data RETURNING *; + key | data +-----+------ + 2 | 1 +(1 row) + +-- and update it +insert into testoids values(2, '2') on conflict (key) do update set data = excluded.data RETURNING *; + key | data +-----+------ + 2 | 2 +(1 row) + +-- remove oids again, test +alter table testoids set without oids; +insert into testoids values(1, '4') on conflict (key) do update set data = excluded.data RETURNING *; + key | data +-----+------ + 1 | 4 +(1 row) + +insert into testoids values(3, '1') on conflict (key) do update set data = excluded.data RETURNING *; + key | data +-----+------ + 3 | 1 +(1 row) + +insert into testoids values(3, '2') on conflict (key) do update set data = excluded.data RETURNING *; + key | data +-----+------ + 3 | 2 +(1 row) + +DROP TABLE testoids; +-- check that references to columns after dropped columns are handled correctly +create table dropcol(key int primary key, drop1 int, keep1 text, drop2 numeric, keep2 float); +insert into dropcol(key, drop1, keep1, drop2, keep2) values(1, 1, '1', '1', 1); +-- set using excluded +insert into dropcol(key, drop1, keep1, drop2, keep2) values(1, 2, '2', '2', 2) on conflict(key) + do update set drop1 = excluded.drop1, keep1 = excluded.keep1, drop2 = excluded.drop2, keep2 = excluded.keep2 + where excluded.drop1 is not null and excluded.keep1 is not null and excluded.drop2 is not null and excluded.keep2 is not null + and dropcol.drop1 is not null and dropcol.keep1 is not null and dropcol.drop2 is not null and dropcol.keep2 is not null + returning *; + key | drop1 | keep1 | drop2 | keep2 +-----+-------+-------+-------+------- + 1 | 2 | 2 | 2 | 2 +(1 row) + +; +-- set using existing table +insert into dropcol(key, drop1, keep1, drop2, keep2) values(1, 3, '3', '3', 3) on conflict(key) + do update set drop1 = dropcol.drop1, keep1 = dropcol.keep1, drop2 = dropcol.drop2, keep2 = dropcol.keep2 + returning *; + key | drop1 | keep1 | drop2 | keep2 +-----+-------+-------+-------+------- + 1 | 2 | 2 | 2 | 2 +(1 row) + +; +alter table dropcol drop column drop1, drop column drop2; +-- set using excluded +insert into dropcol(key, keep1, keep2) values(1, '4', 4) on conflict(key) + do update set keep1 = excluded.keep1, keep2 = excluded.keep2 + where excluded.keep1 is not null and excluded.keep2 is not null + and dropcol.keep1 is not null and dropcol.keep2 is not null + returning *; + key | keep1 | keep2 +-----+-------+------- + 1 | 4 | 4 +(1 row) + +; +-- set using existing table +insert into dropcol(key, keep1, keep2) values(1, '5', 5) on conflict(key) + do update set keep1 = dropcol.keep1, keep2 = dropcol.keep2 + returning *; + key | keep1 | keep2 +-----+-------+------- + 1 | 4 | 4 +(1 row) + +; +DROP TABLE dropcol; diff --git a/src/test/regress/expected/join.out b/src/test/regress/expected/join.out index 139f7e049874b..087cddf03a206 100644 --- a/src/test/regress/expected/join.out +++ b/src/test/regress/expected/join.out @@ -2164,6 +2164,78 @@ select count(*) from tenk1 x where (1 row) rollback; +-- +-- regression test: be sure we cope with proven-dummy append rels +-- +explain (costs off) +select aa, bb, unique1, unique1 + from tenk1 right join b on aa = unique1 + where bb < bb and bb is null; + QUERY PLAN +-------------------------- + Result + One-Time Filter: false +(2 rows) + +select aa, bb, unique1, unique1 + from tenk1 right join b on aa = unique1 + where bb < bb and bb is null; + aa | bb | unique1 | unique1 +----+----+---------+--------- +(0 rows) + +-- +-- regression test: check handling of empty-FROM subquery underneath outer join +-- +explain (costs off) +select * from int8_tbl i1 left join (int8_tbl i2 join + (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2 +order by 1, 2; + QUERY PLAN +------------------------------------------------- + Sort + Sort Key: i1.q1, i1.q2 + -> Hash Left Join + Hash Cond: (i1.q2 = i2.q2) + -> Seq Scan on int8_tbl i1 + -> Hash + -> Hash Join + Hash Cond: (i2.q1 = (123)) + -> Seq Scan on int8_tbl i2 + -> Hash + -> Result +(11 rows) + +select * from int8_tbl i1 left join (int8_tbl i2 join + (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2 +order by 1, 2; + q1 | q2 | q1 | q2 | x +------------------+-------------------+-----+------------------+----- + 123 | 456 | 123 | 456 | 123 + 123 | 4567890123456789 | 123 | 4567890123456789 | 123 + 4567890123456789 | -4567890123456789 | | | + 4567890123456789 | 123 | | | + 4567890123456789 | 4567890123456789 | 123 | 4567890123456789 | 123 +(5 rows) + +-- +-- regression test: check a case where join_clause_is_movable_into() gives +-- an imprecise result, causing an assertion failure +-- +select count(*) +from + (select t3.tenthous as x1, coalesce(t1.stringu1, t2.stringu1) as x2 + from tenk1 t1 + left join tenk1 t2 on t1.unique1 = t2.unique1 + join tenk1 t3 on t1.unique2 = t3.unique2) ss, + tenk1 t4, + tenk1 t5 +where t4.thousand = t5.unique1 and ss.x1 = t4.tenthous and ss.x2 = t5.stringu1; + count +------- + 1000 +(1 row) + -- -- Clean up -- @@ -2847,6 +2919,77 @@ where thousand = a.q1 and tenthous = b.q1 and a.q2 = 1 and b.q2 = 2; Index Cond: ((thousand = a.q1) AND (tenthous = b.q1)) (8 rows) +-- +-- test a corner case in which we shouldn't apply the star-schema optimization +-- +explain (costs off) +select t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from + tenk1 t1 + inner join int4_tbl i1 + left join (select v1.x2, v2.y1, 11 AS d1 + from (values(1,0)) v1(x1,x2) + left join (values(3,1)) v2(y1,y2) + on v1.x1 = v2.y2) subq1 + on (i1.f1 = subq1.x2) + on (t1.unique2 = subq1.d1) + left join tenk1 t2 + on (subq1.y1 = t2.unique1) +where t1.unique2 < 42 and t1.stringu1 > t2.stringu2; + QUERY PLAN +----------------------------------------------------------------------- + Nested Loop + Join Filter: (t1.stringu1 > t2.stringu2) + -> Nested Loop + Join Filter: ((0) = i1.f1) + -> Nested Loop + -> Nested Loop + Join Filter: ((1) = (1)) + -> Result + -> Result + -> Index Scan using tenk1_unique2 on tenk1 t1 + Index Cond: ((unique2 = (11)) AND (unique2 < 42)) + -> Seq Scan on int4_tbl i1 + -> Index Scan using tenk1_unique1 on tenk1 t2 + Index Cond: (unique1 = (3)) +(14 rows) + +select t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from + tenk1 t1 + inner join int4_tbl i1 + left join (select v1.x2, v2.y1, 11 AS d1 + from (values(1,0)) v1(x1,x2) + left join (values(3,1)) v2(y1,y2) + on v1.x1 = v2.y2) subq1 + on (i1.f1 = subq1.x2) + on (t1.unique2 = subq1.d1) + left join tenk1 t2 + on (subq1.y1 = t2.unique1) +where t1.unique2 < 42 and t1.stringu1 > t2.stringu2; + unique2 | stringu1 | unique1 | stringu2 +---------+----------+---------+---------- + 11 | WFAAAA | 3 | LKIAAA +(1 row) + +-- variant that isn't quite a star-schema case +select ss1.d1 from + tenk1 as t1 + inner join tenk1 as t2 + on t1.tenthous = t2.ten + inner join + int8_tbl as i8 + left join int4_tbl as i4 + inner join (select 64::information_schema.cardinal_number as d1 + from tenk1 t3, + lateral (select abs(t3.unique1) + random()) ss0(x) + where t3.fivethous < 0) as ss1 + on i4.f1 = ss1.d1 + on i8.q1 = i4.f1 + on t1.tenthous = ss1.d1 +where t1.unique1 < i4.f1; + d1 +---- +(0 rows) + -- -- test extraction of restriction OR clauses from join OR clause -- (we used to only do this for indexable clauses) @@ -3191,6 +3334,251 @@ using (join_key); 1 | | (2 rows) +-- +-- test successful handling of nested outer joins with degenerate join quals +-- +explain (verbose, costs off) +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); + QUERY PLAN +---------------------------------------------------------------------- + Hash Left Join + Output: t1.f1 + Hash Cond: (i8.q2 = i4.f1) + -> Nested Loop Left Join + Output: t1.f1, i8.q2 + Join Filter: (t1.f1 = '***'::text) + -> Seq Scan on public.text_tbl t1 + Output: t1.f1 + -> Materialize + Output: i8.q2 + -> Hash Right Join + Output: i8.q2 + Hash Cond: ((NULL::integer) = i8b1.q2) + -> Hash Left Join + Output: i8.q2, (NULL::integer) + Hash Cond: (i8.q1 = i8b2.q1) + -> Seq Scan on public.int8_tbl i8 + Output: i8.q1, i8.q2 + -> Hash + Output: i8b2.q1, (NULL::integer) + -> Seq Scan on public.int8_tbl i8b2 + Output: i8b2.q1, NULL::integer + -> Hash + Output: i8b1.q2 + -> Seq Scan on public.int8_tbl i8b1 + Output: i8b1.q2 + -> Hash + Output: i4.f1 + -> Seq Scan on public.int4_tbl i4 + Output: i4.f1 +(30 rows) + +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); + f1 +------------------- + doh! + hi de ho neighbor +(2 rows) + +explain (verbose, costs off) +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); + QUERY PLAN +---------------------------------------------------------------------------- + Hash Left Join + Output: t1.f1 + Hash Cond: (i8.q2 = i4.f1) + -> Nested Loop Left Join + Output: t1.f1, i8.q2 + Join Filter: (t1.f1 = '***'::text) + -> Seq Scan on public.text_tbl t1 + Output: t1.f1 + -> Materialize + Output: i8.q2 + -> Hash Right Join + Output: i8.q2 + Hash Cond: ((NULL::integer) = i8b1.q2) + -> Hash Right Join + Output: i8.q2, (NULL::integer) + Hash Cond: (i8b2.q1 = i8.q1) + -> Nested Loop + Output: i8b2.q1, NULL::integer + -> Seq Scan on public.int8_tbl i8b2 + Output: i8b2.q1, i8b2.q2 + -> Materialize + -> Seq Scan on public.int4_tbl i4b2 + -> Hash + Output: i8.q1, i8.q2 + -> Seq Scan on public.int8_tbl i8 + Output: i8.q1, i8.q2 + -> Hash + Output: i8b1.q2 + -> Seq Scan on public.int8_tbl i8b1 + Output: i8b1.q2 + -> Hash + Output: i4.f1 + -> Seq Scan on public.int4_tbl i4 + Output: i4.f1 +(34 rows) + +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); + f1 +------------------- + doh! + hi de ho neighbor +(2 rows) + +explain (verbose, costs off) +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2 + where q1 = f1) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); + QUERY PLAN +---------------------------------------------------------------------------- + Hash Left Join + Output: t1.f1 + Hash Cond: (i8.q2 = i4.f1) + -> Nested Loop Left Join + Output: t1.f1, i8.q2 + Join Filter: (t1.f1 = '***'::text) + -> Seq Scan on public.text_tbl t1 + Output: t1.f1 + -> Materialize + Output: i8.q2 + -> Hash Right Join + Output: i8.q2 + Hash Cond: ((NULL::integer) = i8b1.q2) + -> Hash Right Join + Output: i8.q2, (NULL::integer) + Hash Cond: (i8b2.q1 = i8.q1) + -> Hash Join + Output: i8b2.q1, NULL::integer + Hash Cond: (i8b2.q1 = i4b2.f1) + -> Seq Scan on public.int8_tbl i8b2 + Output: i8b2.q1, i8b2.q2 + -> Hash + Output: i4b2.f1 + -> Seq Scan on public.int4_tbl i4b2 + Output: i4b2.f1 + -> Hash + Output: i8.q1, i8.q2 + -> Seq Scan on public.int8_tbl i8 + Output: i8.q1, i8.q2 + -> Hash + Output: i8b1.q2 + -> Seq Scan on public.int8_tbl i8b1 + Output: i8b1.q2 + -> Hash + Output: i4.f1 + -> Seq Scan on public.int4_tbl i4 + Output: i4.f1 +(37 rows) + +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2 + where q1 = f1) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); + f1 +------------------- + doh! + hi de ho neighbor +(2 rows) + +explain (verbose, costs off) +select * from + text_tbl t1 + inner join int8_tbl i8 + on i8.q2 = 456 + right join text_tbl t2 + on t1.f1 = 'doh!' + left join int4_tbl i4 + on i8.q1 = i4.f1; + QUERY PLAN +-------------------------------------------------------- + Nested Loop Left Join + Output: t1.f1, i8.q1, i8.q2, t2.f1, i4.f1 + -> Seq Scan on public.text_tbl t2 + Output: t2.f1 + -> Materialize + Output: i8.q1, i8.q2, i4.f1, t1.f1 + -> Nested Loop + Output: i8.q1, i8.q2, i4.f1, t1.f1 + -> Nested Loop Left Join + Output: i8.q1, i8.q2, i4.f1 + Join Filter: (i8.q1 = i4.f1) + -> Seq Scan on public.int8_tbl i8 + Output: i8.q1, i8.q2 + Filter: (i8.q2 = 456) + -> Seq Scan on public.int4_tbl i4 + Output: i4.f1 + -> Seq Scan on public.text_tbl t1 + Output: t1.f1 + Filter: (t1.f1 = 'doh!'::text) +(19 rows) + +select * from + text_tbl t1 + inner join int8_tbl i8 + on i8.q2 = 456 + right join text_tbl t2 + on t1.f1 = 'doh!' + left join int4_tbl i4 + on i8.q1 = i4.f1; + f1 | q1 | q2 | f1 | f1 +------+-----+-----+-------------------+---- + doh! | 123 | 456 | doh! | + doh! | 123 | 456 | hi de ho neighbor | +(2 rows) + -- -- test ability to push constants through outer join clauses -- @@ -3510,6 +3898,63 @@ SELECT * FROM 1 | 4567890123456789 | -4567890123456789 | 4567890123456789 (5 rows) +rollback; +-- another join removal bug: we must clean up correctly when removing a PHV +begin; +create temp table uniquetbl (f1 text unique); +explain (costs off) +select t1.* from + uniquetbl as t1 + left join (select *, '***'::text as d1 from uniquetbl) t2 + on t1.f1 = t2.f1 + left join uniquetbl t3 + on t2.d1 = t3.f1; + QUERY PLAN +-------------------------- + Seq Scan on uniquetbl t1 +(1 row) + +explain (costs off) +select t0.* +from + text_tbl t0 + left join + (select case t1.ten when 0 then 'doh!'::text else null::text end as case1, + t1.stringu2 + from tenk1 t1 + join int4_tbl i4 ON i4.f1 = t1.unique2 + left join uniquetbl u1 ON u1.f1 = t1.string4) ss + on t0.f1 = ss.case1 +where ss.stringu2 !~* ss.case1; + QUERY PLAN +-------------------------------------------------------------------------------------------- + Nested Loop + Join Filter: (CASE t1.ten WHEN 0 THEN 'doh!'::text ELSE NULL::text END = t0.f1) + -> Nested Loop + -> Seq Scan on int4_tbl i4 + -> Index Scan using tenk1_unique2 on tenk1 t1 + Index Cond: (unique2 = i4.f1) + Filter: (stringu2 !~* CASE ten WHEN 0 THEN 'doh!'::text ELSE NULL::text END) + -> Materialize + -> Seq Scan on text_tbl t0 +(9 rows) + +select t0.* +from + text_tbl t0 + left join + (select case t1.ten when 0 then 'doh!'::text else null::text end as case1, + t1.stringu2 + from tenk1 t1 + join int4_tbl i4 ON i4.f1 = t1.unique2 + left join uniquetbl u1 ON u1.f1 = t1.string4) ss + on t0.f1 = ss.case1 +where ss.stringu2 !~* ss.case1; + f1 +------ + doh! +(1 row) + rollback; -- bug #8444: we've historically allowed duplicate aliases within aliased JOINs select * from @@ -4425,6 +4870,41 @@ select * from Output: 3 (11 rows) +-- check we don't try to do a unique-ified semijoin with LATERAL +explain (verbose, costs off) +select * from + (values (0,9998), (1,1000)) v(id,x), + lateral (select f1 from int4_tbl + where f1 = any (select unique1 from tenk1 + where unique2 = v.x offset 0)) ss; + QUERY PLAN +---------------------------------------------------------------------- + Nested Loop + Output: "*VALUES*".column1, "*VALUES*".column2, int4_tbl.f1 + -> Values Scan on "*VALUES*" + Output: "*VALUES*".column1, "*VALUES*".column2 + -> Nested Loop Semi Join + Output: int4_tbl.f1 + Join Filter: (int4_tbl.f1 = tenk1.unique1) + -> Seq Scan on public.int4_tbl + Output: int4_tbl.f1 + -> Materialize + Output: tenk1.unique1 + -> Index Scan using tenk1_unique2 on public.tenk1 + Output: tenk1.unique1 + Index Cond: (tenk1.unique2 = "*VALUES*".column2) +(14 rows) + +select * from + (values (0,9998), (1,1000)) v(id,x), + lateral (select f1 from int4_tbl + where f1 = any (select unique1 from tenk1 + where unique2 = v.x offset 0)) ss; + id | x | f1 +----+------+---- + 0 | 9998 | 0 +(1 row) + -- test some error cases where LATERAL should have been used but wasn't select f1,g from int4_tbl a, (select f1 as g) ss; ERROR: column "f1" does not exist diff --git a/src/test/regress/expected/json.out b/src/test/regress/expected/json.out index 3942c3bee9106..0ced17e130642 100644 --- a/src/test/regress/expected/json.out +++ b/src/test/regress/expected/json.out @@ -42,36 +42,7 @@ LINE 1: SELECT '"\v"'::json; ^ DETAIL: Escape sequence "\v" is invalid. CONTEXT: JSON data, line 1: "\v... -SELECT '"\u"'::json; -- ERROR, incomplete escape -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\u"'::json; - ^ -DETAIL: "\u" must be followed by four hexadecimal digits. -CONTEXT: JSON data, line 1: "\u" -SELECT '"\u00"'::json; -- ERROR, incomplete escape -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\u00"'::json; - ^ -DETAIL: "\u" must be followed by four hexadecimal digits. -CONTEXT: JSON data, line 1: "\u00" -SELECT '"\u000g"'::json; -- ERROR, g is not a hex digit -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\u000g"'::json; - ^ -DETAIL: "\u" must be followed by four hexadecimal digits. -CONTEXT: JSON data, line 1: "\u000g... -SELECT '"\u0000"'::json; -- OK, legal escape - json ----------- - "\u0000" -(1 row) - -SELECT '"\uaBcD"'::json; -- OK, uppercase and lower case both OK - json ----------- - "\uaBcD" -(1 row) - +-- see json_encoding test for input with unicode escapes -- Numbers. SELECT '1'::json; -- OK json @@ -231,6 +202,15 @@ LINE 1: SELECT '{"abc":1,3}'::json; ^ DETAIL: Expected string, but found "3". CONTEXT: JSON data, line 1: {"abc":1,3... +-- Recursion. +SET max_stack_depth = '100kB'; +SELECT repeat('[', 10000)::json; +ERROR: stack depth limit exceeded +HINT: Increase the configuration parameter "max_stack_depth" (currently 100kB), after ensuring the platform's stack depth limit is adequate. +SELECT repeat('{"a":', 10000)::json; +ERROR: stack depth limit exceeded +HINT: Increase the configuration parameter "max_stack_depth" (currently 100kB), after ensuring the platform's stack depth limit is adequate. +RESET max_stack_depth; -- Miscellaneous stuff. SELECT 'true'::json; -- OK json @@ -438,18 +418,36 @@ select to_json(date 'Infinity'); "infinity" (1 row) +select to_json(date '-Infinity'); + to_json +------------- + "-infinity" +(1 row) + select to_json(timestamp 'Infinity'); to_json ------------ "infinity" (1 row) +select to_json(timestamp '-Infinity'); + to_json +------------- + "-infinity" +(1 row) + select to_json(timestamptz 'Infinity'); to_json ------------ "infinity" (1 row) +select to_json(timestamptz '-Infinity'); + to_json +------------- + "-infinity" +(1 row) + --json_agg SELECT json_agg(q) FROM ( SELECT $$a$$ || x AS b, y AS c, @@ -465,7 +463,7 @@ SELECT json_agg(q) {"b":"a2","c":5,"z":[{"f1":2,"f2":[1,2,3]},{"f1":5,"f2":[4,5,6]}]}] (1 row) -SELECT json_agg(q) +SELECT json_agg(q ORDER BY x, y) FROM rows q; json_agg ----------------------- @@ -474,6 +472,16 @@ SELECT json_agg(q) {"x":3,"y":"txt3"}] (1 row) +UPDATE rows SET x = NULL WHERE x = 1; +SELECT json_agg(q ORDER BY x NULLS FIRST, y) + FROM rows q; + json_agg +-------------------------- + [{"x":null,"y":"txt1"}, + + {"x":2,"y":"txt2"}, + + {"x":3,"y":"txt3"}] +(1 row) + -- non-numeric output SELECT row_to_json(q) FROM (SELECT 'NaN'::float8 AS "float8field") q; @@ -569,6 +577,14 @@ WHERE json_type = 'array'; "two" (1 row) +SELECT test_json -> -1 +FROM test_json +WHERE json_type = 'array'; + ?column? +---------- + {"f1":9} +(1 row) + SELECT test_json -> 2 FROM test_json WHERE json_type = 'object'; @@ -698,6 +714,12 @@ select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> 1; (1 row) +select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> -1; + ?column? +---------- + +(1 row) + select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> 'z'; ?column? ---------- @@ -1386,88 +1408,6 @@ select * from json_populate_recordset(row('def',99,null)::jpop,'[{"a":[100,200,3 {"z":true} | 3 | Fri Jan 20 10:42:53 2012 (2 rows) --- handling of unicode surrogate pairs -select json '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a' as correct_in_utf8; - correct_in_utf8 ----------------------------- - "\ud83d\ude04\ud83d\udc36" -(1 row) - -select json '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row -ERROR: invalid input syntax for type json -DETAIL: Unicode high surrogate must not follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... -select json '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order -ERROR: invalid input syntax for type json -DETAIL: Unicode low surrogate must follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... -select json '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate -ERROR: invalid input syntax for type json -DETAIL: Unicode low surrogate must follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... -select json '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate -ERROR: invalid input syntax for type json -DETAIL: Unicode low surrogate must follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... ---handling of simple unicode escapes -select json '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; - correct_in_utf8 ---------------------------------------- - { "a": "the Copyright \u00a9 sign" } -(1 row) - -select json '{ "a": "dollar \u0024 character" }' as correct_everywhere; - correct_everywhere -------------------------------------- - { "a": "dollar \u0024 character" } -(1 row) - -select json '{ "a": "dollar \\u0024 character" }' as not_an_escape; - not_an_escape --------------------------------------- - { "a": "dollar \\u0024 character" } -(1 row) - -select json '{ "a": "null \u0000 escape" }' as not_unescaped; - not_unescaped --------------------------------- - { "a": "null \u0000 escape" } -(1 row) - -select json '{ "a": "null \\u0000 escape" }' as not_an_escape; - not_an_escape ---------------------------------- - { "a": "null \\u0000 escape" } -(1 row) - -select json '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; - correct_in_utf8 ----------------------- - the Copyright © sign -(1 row) - -select json '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; - correct_everywhere --------------------- - dollar $ character -(1 row) - -select json '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; - not_an_escape -------------------------- - dollar \u0024 character -(1 row) - -select json '{ "a": "null \u0000 escape" }' ->> 'a' as fails; -ERROR: unsupported Unicode escape sequence -DETAIL: \u0000 cannot be converted to text. -CONTEXT: JSON data, line 1: { "a":... -select json '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; - not_an_escape --------------------- - null \u0000 escape -(1 row) - --json_typeof() function select value, json_typeof(value) from (values (json '123.4'), @@ -1560,6 +1500,15 @@ FROM foo; {"turbines" : { "847001" : {"name" : "t15", "type" : "GE1043"}, "847002" : {"name" : "t16", "type" : "GE1043"}, "847003" : {"name" : "sub-alpha", "type" : "GESS90"} }} (1 row) +SELECT json_object_agg(name, type) FROM foo; + json_object_agg +---------------------------------------------------------------- + { "t15" : "GE1043", "t16" : "GE1043", "sub-alpha" : "GESS90" } +(1 row) + +INSERT INTO foo VALUES (999999, NULL, 'bar'); +SELECT json_object_agg(name, type) FROM foo; +ERROR: field name must not be null -- json_object -- one dimension SELECT json_object('{a,1,b,2,3,NULL,"d e f","a b c"}'); diff --git a/src/test/regress/expected/json_1.out b/src/test/regress/expected/json_1.out deleted file mode 100644 index 38f15262883b0..0000000000000 --- a/src/test/regress/expected/json_1.out +++ /dev/null @@ -1,1684 +0,0 @@ --- Strings. -SELECT '""'::json; -- OK. - json ------- - "" -(1 row) - -SELECT $$''$$::json; -- ERROR, single quotes are not allowed -ERROR: invalid input syntax for type json -LINE 1: SELECT $$''$$::json; - ^ -DETAIL: Token "'" is invalid. -CONTEXT: JSON data, line 1: '... -SELECT '"abc"'::json; -- OK - json -------- - "abc" -(1 row) - -SELECT '"abc'::json; -- ERROR, quotes not closed -ERROR: invalid input syntax for type json -LINE 1: SELECT '"abc'::json; - ^ -DETAIL: Token ""abc" is invalid. -CONTEXT: JSON data, line 1: "abc -SELECT '"abc -def"'::json; -- ERROR, unescaped newline in string constant -ERROR: invalid input syntax for type json -LINE 1: SELECT '"abc - ^ -DETAIL: Character with value 0x0a must be escaped. -CONTEXT: JSON data, line 1: "abc -SELECT '"\n\"\\"'::json; -- OK, legal escapes - json ----------- - "\n\"\\" -(1 row) - -SELECT '"\v"'::json; -- ERROR, not a valid JSON escape -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\v"'::json; - ^ -DETAIL: Escape sequence "\v" is invalid. -CONTEXT: JSON data, line 1: "\v... -SELECT '"\u"'::json; -- ERROR, incomplete escape -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\u"'::json; - ^ -DETAIL: "\u" must be followed by four hexadecimal digits. -CONTEXT: JSON data, line 1: "\u" -SELECT '"\u00"'::json; -- ERROR, incomplete escape -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\u00"'::json; - ^ -DETAIL: "\u" must be followed by four hexadecimal digits. -CONTEXT: JSON data, line 1: "\u00" -SELECT '"\u000g"'::json; -- ERROR, g is not a hex digit -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\u000g"'::json; - ^ -DETAIL: "\u" must be followed by four hexadecimal digits. -CONTEXT: JSON data, line 1: "\u000g... -SELECT '"\u0000"'::json; -- OK, legal escape - json ----------- - "\u0000" -(1 row) - -SELECT '"\uaBcD"'::json; -- OK, uppercase and lower case both OK - json ----------- - "\uaBcD" -(1 row) - --- Numbers. -SELECT '1'::json; -- OK - json ------- - 1 -(1 row) - -SELECT '0'::json; -- OK - json ------- - 0 -(1 row) - -SELECT '01'::json; -- ERROR, not valid according to JSON spec -ERROR: invalid input syntax for type json -LINE 1: SELECT '01'::json; - ^ -DETAIL: Token "01" is invalid. -CONTEXT: JSON data, line 1: 01 -SELECT '0.1'::json; -- OK - json ------- - 0.1 -(1 row) - -SELECT '9223372036854775808'::json; -- OK, even though it's too large for int8 - json ---------------------- - 9223372036854775808 -(1 row) - -SELECT '1e100'::json; -- OK - json -------- - 1e100 -(1 row) - -SELECT '1.3e100'::json; -- OK - json ---------- - 1.3e100 -(1 row) - -SELECT '1f2'::json; -- ERROR -ERROR: invalid input syntax for type json -LINE 1: SELECT '1f2'::json; - ^ -DETAIL: Token "1f2" is invalid. -CONTEXT: JSON data, line 1: 1f2 -SELECT '0.x1'::json; -- ERROR -ERROR: invalid input syntax for type json -LINE 1: SELECT '0.x1'::json; - ^ -DETAIL: Token "0.x1" is invalid. -CONTEXT: JSON data, line 1: 0.x1 -SELECT '1.3ex100'::json; -- ERROR -ERROR: invalid input syntax for type json -LINE 1: SELECT '1.3ex100'::json; - ^ -DETAIL: Token "1.3ex100" is invalid. -CONTEXT: JSON data, line 1: 1.3ex100 --- Arrays. -SELECT '[]'::json; -- OK - json ------- - [] -(1 row) - -SELECT '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'::json; -- OK - json ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] -(1 row) - -SELECT '[1,2]'::json; -- OK - json -------- - [1,2] -(1 row) - -SELECT '[1,2,]'::json; -- ERROR, trailing comma -ERROR: invalid input syntax for type json -LINE 1: SELECT '[1,2,]'::json; - ^ -DETAIL: Expected JSON value, but found "]". -CONTEXT: JSON data, line 1: [1,2,] -SELECT '[1,2'::json; -- ERROR, no closing bracket -ERROR: invalid input syntax for type json -LINE 1: SELECT '[1,2'::json; - ^ -DETAIL: The input string ended unexpectedly. -CONTEXT: JSON data, line 1: [1,2 -SELECT '[1,[2]'::json; -- ERROR, no closing bracket -ERROR: invalid input syntax for type json -LINE 1: SELECT '[1,[2]'::json; - ^ -DETAIL: The input string ended unexpectedly. -CONTEXT: JSON data, line 1: [1,[2] --- Objects. -SELECT '{}'::json; -- OK - json ------- - {} -(1 row) - -SELECT '{"abc"}'::json; -- ERROR, no value -ERROR: invalid input syntax for type json -LINE 1: SELECT '{"abc"}'::json; - ^ -DETAIL: Expected ":", but found "}". -CONTEXT: JSON data, line 1: {"abc"} -SELECT '{"abc":1}'::json; -- OK - json ------------ - {"abc":1} -(1 row) - -SELECT '{1:"abc"}'::json; -- ERROR, keys must be strings -ERROR: invalid input syntax for type json -LINE 1: SELECT '{1:"abc"}'::json; - ^ -DETAIL: Expected string or "}", but found "1". -CONTEXT: JSON data, line 1: {1... -SELECT '{"abc",1}'::json; -- ERROR, wrong separator -ERROR: invalid input syntax for type json -LINE 1: SELECT '{"abc",1}'::json; - ^ -DETAIL: Expected ":", but found ",". -CONTEXT: JSON data, line 1: {"abc",... -SELECT '{"abc"=1}'::json; -- ERROR, totally wrong separator -ERROR: invalid input syntax for type json -LINE 1: SELECT '{"abc"=1}'::json; - ^ -DETAIL: Token "=" is invalid. -CONTEXT: JSON data, line 1: {"abc"=... -SELECT '{"abc"::1}'::json; -- ERROR, another wrong separator -ERROR: invalid input syntax for type json -LINE 1: SELECT '{"abc"::1}'::json; - ^ -DETAIL: Expected JSON value, but found ":". -CONTEXT: JSON data, line 1: {"abc"::... -SELECT '{"abc":1,"def":2,"ghi":[3,4],"hij":{"klm":5,"nop":[6]}}'::json; -- OK - json ---------------------------------------------------------- - {"abc":1,"def":2,"ghi":[3,4],"hij":{"klm":5,"nop":[6]}} -(1 row) - -SELECT '{"abc":1:2}'::json; -- ERROR, colon in wrong spot -ERROR: invalid input syntax for type json -LINE 1: SELECT '{"abc":1:2}'::json; - ^ -DETAIL: Expected "," or "}", but found ":". -CONTEXT: JSON data, line 1: {"abc":1:... -SELECT '{"abc":1,3}'::json; -- ERROR, no value -ERROR: invalid input syntax for type json -LINE 1: SELECT '{"abc":1,3}'::json; - ^ -DETAIL: Expected string, but found "3". -CONTEXT: JSON data, line 1: {"abc":1,3... --- Miscellaneous stuff. -SELECT 'true'::json; -- OK - json ------- - true -(1 row) - -SELECT 'false'::json; -- OK - json -------- - false -(1 row) - -SELECT 'null'::json; -- OK - json ------- - null -(1 row) - -SELECT ' true '::json; -- OK, even with extra whitespace - json --------- - true -(1 row) - -SELECT 'true false'::json; -- ERROR, too many values -ERROR: invalid input syntax for type json -LINE 1: SELECT 'true false'::json; - ^ -DETAIL: Expected end of input, but found "false". -CONTEXT: JSON data, line 1: true false -SELECT 'true, false'::json; -- ERROR, too many values -ERROR: invalid input syntax for type json -LINE 1: SELECT 'true, false'::json; - ^ -DETAIL: Expected end of input, but found ",". -CONTEXT: JSON data, line 1: true,... -SELECT 'truf'::json; -- ERROR, not a keyword -ERROR: invalid input syntax for type json -LINE 1: SELECT 'truf'::json; - ^ -DETAIL: Token "truf" is invalid. -CONTEXT: JSON data, line 1: truf -SELECT 'trues'::json; -- ERROR, not a keyword -ERROR: invalid input syntax for type json -LINE 1: SELECT 'trues'::json; - ^ -DETAIL: Token "trues" is invalid. -CONTEXT: JSON data, line 1: trues -SELECT ''::json; -- ERROR, no value -ERROR: invalid input syntax for type json -LINE 1: SELECT ''::json; - ^ -DETAIL: The input string ended unexpectedly. -CONTEXT: JSON data, line 1: -SELECT ' '::json; -- ERROR, no value -ERROR: invalid input syntax for type json -LINE 1: SELECT ' '::json; - ^ -DETAIL: The input string ended unexpectedly. -CONTEXT: JSON data, line 1: ---constructors --- array_to_json -SELECT array_to_json(array(select 1 as a)); - array_to_json ---------------- - [1] -(1 row) - -SELECT array_to_json(array_agg(q),false) from (select x as b, x * 2 as c from generate_series(1,3) x) q; - array_to_json ---------------------------------------------- - [{"b":1,"c":2},{"b":2,"c":4},{"b":3,"c":6}] -(1 row) - -SELECT array_to_json(array_agg(q),true) from (select x as b, x * 2 as c from generate_series(1,3) x) q; - array_to_json ------------------ - [{"b":1,"c":2},+ - {"b":2,"c":4},+ - {"b":3,"c":6}] -(1 row) - -SELECT array_to_json(array_agg(q),false) - FROM ( SELECT $$a$$ || x AS b, y AS c, - ARRAY[ROW(x.*,ARRAY[1,2,3]), - ROW(y.*,ARRAY[4,5,6])] AS z - FROM generate_series(1,2) x, - generate_series(4,5) y) q; - array_to_json -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"b":"a1","c":4,"z":[{"f1":1,"f2":[1,2,3]},{"f1":4,"f2":[4,5,6]}]},{"b":"a1","c":5,"z":[{"f1":1,"f2":[1,2,3]},{"f1":5,"f2":[4,5,6]}]},{"b":"a2","c":4,"z":[{"f1":2,"f2":[1,2,3]},{"f1":4,"f2":[4,5,6]}]},{"b":"a2","c":5,"z":[{"f1":2,"f2":[1,2,3]},{"f1":5,"f2":[4,5,6]}]}] -(1 row) - -SELECT array_to_json(array_agg(x),false) from generate_series(5,10) x; - array_to_json ----------------- - [5,6,7,8,9,10] -(1 row) - -SELECT array_to_json('{{1,5},{99,100}}'::int[]); - array_to_json ------------------- - [[1,5],[99,100]] -(1 row) - --- row_to_json -SELECT row_to_json(row(1,'foo')); - row_to_json ---------------------- - {"f1":1,"f2":"foo"} -(1 row) - -SELECT row_to_json(q) -FROM (SELECT $$a$$ || x AS b, - y AS c, - ARRAY[ROW(x.*,ARRAY[1,2,3]), - ROW(y.*,ARRAY[4,5,6])] AS z - FROM generate_series(1,2) x, - generate_series(4,5) y) q; - row_to_json --------------------------------------------------------------------- - {"b":"a1","c":4,"z":[{"f1":1,"f2":[1,2,3]},{"f1":4,"f2":[4,5,6]}]} - {"b":"a1","c":5,"z":[{"f1":1,"f2":[1,2,3]},{"f1":5,"f2":[4,5,6]}]} - {"b":"a2","c":4,"z":[{"f1":2,"f2":[1,2,3]},{"f1":4,"f2":[4,5,6]}]} - {"b":"a2","c":5,"z":[{"f1":2,"f2":[1,2,3]},{"f1":5,"f2":[4,5,6]}]} -(4 rows) - -SELECT row_to_json(q,true) -FROM (SELECT $$a$$ || x AS b, - y AS c, - ARRAY[ROW(x.*,ARRAY[1,2,3]), - ROW(y.*,ARRAY[4,5,6])] AS z - FROM generate_series(1,2) x, - generate_series(4,5) y) q; - row_to_json ------------------------------------------------------ - {"b":"a1", + - "c":4, + - "z":[{"f1":1,"f2":[1,2,3]},{"f1":4,"f2":[4,5,6]}]} - {"b":"a1", + - "c":5, + - "z":[{"f1":1,"f2":[1,2,3]},{"f1":5,"f2":[4,5,6]}]} - {"b":"a2", + - "c":4, + - "z":[{"f1":2,"f2":[1,2,3]},{"f1":4,"f2":[4,5,6]}]} - {"b":"a2", + - "c":5, + - "z":[{"f1":2,"f2":[1,2,3]},{"f1":5,"f2":[4,5,6]}]} -(4 rows) - -CREATE TEMP TABLE rows AS -SELECT x, 'txt' || x as y -FROM generate_series(1,3) AS x; -SELECT row_to_json(q,true) -FROM rows q; - row_to_json --------------- - {"x":1, + - "y":"txt1"} - {"x":2, + - "y":"txt2"} - {"x":3, + - "y":"txt3"} -(3 rows) - -SELECT row_to_json(row((select array_agg(x) as d from generate_series(5,10) x)),false); - row_to_json ------------------------ - {"f1":[5,6,7,8,9,10]} -(1 row) - --- to_json, timestamps -select to_json(timestamp '2014-05-28 12:22:35.614298'); - to_json ------------------------------- - "2014-05-28T12:22:35.614298" -(1 row) - -BEGIN; -SET LOCAL TIME ZONE 10.5; -select to_json(timestamptz '2014-05-28 12:22:35.614298-04'); - to_json ------------------------------------- - "2014-05-29T02:52:35.614298+10:30" -(1 row) - -SET LOCAL TIME ZONE -8; -select to_json(timestamptz '2014-05-28 12:22:35.614298-04'); - to_json ------------------------------------- - "2014-05-28T08:22:35.614298-08:00" -(1 row) - -COMMIT; -select to_json(date '2014-05-28'); - to_json --------------- - "2014-05-28" -(1 row) - -select to_json(date 'Infinity'); - to_json ------------- - "infinity" -(1 row) - -select to_json(timestamp 'Infinity'); - to_json ------------- - "infinity" -(1 row) - -select to_json(timestamptz 'Infinity'); - to_json ------------- - "infinity" -(1 row) - ---json_agg -SELECT json_agg(q) - FROM ( SELECT $$a$$ || x AS b, y AS c, - ARRAY[ROW(x.*,ARRAY[1,2,3]), - ROW(y.*,ARRAY[4,5,6])] AS z - FROM generate_series(1,2) x, - generate_series(4,5) y) q; - json_agg ------------------------------------------------------------------------ - [{"b":"a1","c":4,"z":[{"f1":1,"f2":[1,2,3]},{"f1":4,"f2":[4,5,6]}]}, + - {"b":"a1","c":5,"z":[{"f1":1,"f2":[1,2,3]},{"f1":5,"f2":[4,5,6]}]}, + - {"b":"a2","c":4,"z":[{"f1":2,"f2":[1,2,3]},{"f1":4,"f2":[4,5,6]}]}, + - {"b":"a2","c":5,"z":[{"f1":2,"f2":[1,2,3]},{"f1":5,"f2":[4,5,6]}]}] -(1 row) - -SELECT json_agg(q) - FROM rows q; - json_agg ------------------------ - [{"x":1,"y":"txt1"}, + - {"x":2,"y":"txt2"}, + - {"x":3,"y":"txt3"}] -(1 row) - --- non-numeric output -SELECT row_to_json(q) -FROM (SELECT 'NaN'::float8 AS "float8field") q; - row_to_json ------------------------ - {"float8field":"NaN"} -(1 row) - -SELECT row_to_json(q) -FROM (SELECT 'Infinity'::float8 AS "float8field") q; - row_to_json ----------------------------- - {"float8field":"Infinity"} -(1 row) - -SELECT row_to_json(q) -FROM (SELECT '-Infinity'::float8 AS "float8field") q; - row_to_json ------------------------------ - {"float8field":"-Infinity"} -(1 row) - --- json input -SELECT row_to_json(q) -FROM (SELECT '{"a":1,"b": [2,3,4,"d","e","f"],"c":{"p":1,"q":2}}'::json AS "jsonfield") q; - row_to_json ------------------------------------------------------------------- - {"jsonfield":{"a":1,"b": [2,3,4,"d","e","f"],"c":{"p":1,"q":2}}} -(1 row) - --- json extraction functions -CREATE TEMP TABLE test_json ( - json_type text, - test_json json -); -INSERT INTO test_json VALUES -('scalar','"a scalar"'), -('array','["zero", "one","two",null,"four","five", [1,2,3],{"f1":9}]'), -('object','{"field1":"val1","field2":"val2","field3":null, "field4": 4, "field5": [1,2,3], "field6": {"f1":9}}'); -SELECT test_json -> 'x' -FROM test_json -WHERE json_type = 'scalar'; - ?column? ----------- - -(1 row) - -SELECT test_json -> 'x' -FROM test_json -WHERE json_type = 'array'; - ?column? ----------- - -(1 row) - -SELECT test_json -> 'x' -FROM test_json -WHERE json_type = 'object'; - ?column? ----------- - -(1 row) - -SELECT test_json->'field2' -FROM test_json -WHERE json_type = 'object'; - ?column? ----------- - "val2" -(1 row) - -SELECT test_json->>'field2' -FROM test_json -WHERE json_type = 'object'; - ?column? ----------- - val2 -(1 row) - -SELECT test_json -> 2 -FROM test_json -WHERE json_type = 'scalar'; - ?column? ----------- - -(1 row) - -SELECT test_json -> 2 -FROM test_json -WHERE json_type = 'array'; - ?column? ----------- - "two" -(1 row) - -SELECT test_json -> 2 -FROM test_json -WHERE json_type = 'object'; - ?column? ----------- - -(1 row) - -SELECT test_json->>2 -FROM test_json -WHERE json_type = 'array'; - ?column? ----------- - two -(1 row) - -SELECT test_json ->> 6 FROM test_json WHERE json_type = 'array'; - ?column? ----------- - [1,2,3] -(1 row) - -SELECT test_json ->> 7 FROM test_json WHERE json_type = 'array'; - ?column? ----------- - {"f1":9} -(1 row) - -SELECT test_json ->> 'field4' FROM test_json WHERE json_type = 'object'; - ?column? ----------- - 4 -(1 row) - -SELECT test_json ->> 'field5' FROM test_json WHERE json_type = 'object'; - ?column? ----------- - [1,2,3] -(1 row) - -SELECT test_json ->> 'field6' FROM test_json WHERE json_type = 'object'; - ?column? ----------- - {"f1":9} -(1 row) - -SELECT json_object_keys(test_json) -FROM test_json -WHERE json_type = 'scalar'; -ERROR: cannot call json_object_keys on a scalar -SELECT json_object_keys(test_json) -FROM test_json -WHERE json_type = 'array'; -ERROR: cannot call json_object_keys on an array -SELECT json_object_keys(test_json) -FROM test_json -WHERE json_type = 'object'; - json_object_keys ------------------- - field1 - field2 - field3 - field4 - field5 - field6 -(6 rows) - --- test extending object_keys resultset - initial resultset size is 256 -select count(*) from - (select json_object_keys(json_object(array_agg(g))) - from (select unnest(array['f'||n,n::text])as g - from generate_series(1,300) as n) x ) y; - count -------- - 300 -(1 row) - --- nulls -select (test_json->'field3') is null as expect_false -from test_json -where json_type = 'object'; - expect_false --------------- - f -(1 row) - -select (test_json->>'field3') is null as expect_true -from test_json -where json_type = 'object'; - expect_true -------------- - t -(1 row) - -select (test_json->3) is null as expect_false -from test_json -where json_type = 'array'; - expect_false --------------- - f -(1 row) - -select (test_json->>3) is null as expect_true -from test_json -where json_type = 'array'; - expect_true -------------- - t -(1 row) - --- corner cases -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> null::text; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> null::int; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> 1; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> 'z'; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> ''; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::json -> 1; - ?column? -------------- - {"b": "cc"} -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::json -> 3; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::json -> 'z'; - ?column? ----------- - -(1 row) - -select '{"a": "c", "b": null}'::json -> 'b'; - ?column? ----------- - null -(1 row) - -select '"foo"'::json -> 1; - ?column? ----------- - -(1 row) - -select '"foo"'::json -> 'z'; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json ->> null::text; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json ->> null::int; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json ->> 1; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json ->> 'z'; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json ->> ''; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::json ->> 1; - ?column? -------------- - {"b": "cc"} -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::json ->> 3; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::json ->> 'z'; - ?column? ----------- - -(1 row) - -select '{"a": "c", "b": null}'::json ->> 'b'; - ?column? ----------- - -(1 row) - -select '"foo"'::json ->> 1; - ?column? ----------- - -(1 row) - -select '"foo"'::json ->> 'z'; - ?column? ----------- - -(1 row) - --- array length -SELECT json_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]'); - json_array_length -------------------- - 5 -(1 row) - -SELECT json_array_length('[]'); - json_array_length -------------------- - 0 -(1 row) - -SELECT json_array_length('{"f1":1,"f2":[5,6]}'); -ERROR: cannot get array length of a non-array -SELECT json_array_length('4'); -ERROR: cannot get array length of a scalar --- each -select json_each('{"f1":[1,2,3],"f2":{"f3":1},"f4":null}'); - json_each -------------------- - (f1,"[1,2,3]") - (f2,"{""f3"":1}") - (f4,null) -(3 rows) - -select * from json_each('{"f1":[1,2,3],"f2":{"f3":1},"f4":null,"f5":99,"f6":"stringy"}') q; - key | value ------+----------- - f1 | [1,2,3] - f2 | {"f3":1} - f4 | null - f5 | 99 - f6 | "stringy" -(5 rows) - -select json_each_text('{"f1":[1,2,3],"f2":{"f3":1},"f4":null,"f5":"null"}'); - json_each_text -------------------- - (f1,"[1,2,3]") - (f2,"{""f3"":1}") - (f4,) - (f5,null) -(4 rows) - -select * from json_each_text('{"f1":[1,2,3],"f2":{"f3":1},"f4":null,"f5":99,"f6":"stringy"}') q; - key | value ------+---------- - f1 | [1,2,3] - f2 | {"f3":1} - f4 | - f5 | 99 - f6 | stringy -(5 rows) - --- extract_path, extract_path_as_text -select json_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}','f4','f6'); - json_extract_path -------------------- - "stringy" -(1 row) - -select json_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}','f2'); - json_extract_path -------------------- - {"f3":1} -(1 row) - -select json_extract_path('{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}','f2',0::text); - json_extract_path -------------------- - "f3" -(1 row) - -select json_extract_path('{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}','f2',1::text); - json_extract_path -------------------- - 1 -(1 row) - -select json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}','f4','f6'); - json_extract_path_text ------------------------- - stringy -(1 row) - -select json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}','f2'); - json_extract_path_text ------------------------- - {"f3":1} -(1 row) - -select json_extract_path_text('{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}','f2',0::text); - json_extract_path_text ------------------------- - f3 -(1 row) - -select json_extract_path_text('{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}','f2',1::text); - json_extract_path_text ------------------------- - 1 -(1 row) - --- extract_path nulls -select json_extract_path('{"f2":{"f3":1},"f4":{"f5":null,"f6":"stringy"}}','f4','f5') is null as expect_false; - expect_false --------------- - f -(1 row) - -select json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":null,"f6":"stringy"}}','f4','f5') is null as expect_true; - expect_true -------------- - t -(1 row) - -select json_extract_path('{"f2":{"f3":1},"f4":[0,1,2,null]}','f4','3') is null as expect_false; - expect_false --------------- - f -(1 row) - -select json_extract_path_text('{"f2":{"f3":1},"f4":[0,1,2,null]}','f4','3') is null as expect_true; - expect_true -------------- - t -(1 row) - --- extract_path operators -select '{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}'::json#>array['f4','f6']; - ?column? ------------ - "stringy" -(1 row) - -select '{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}'::json#>array['f2']; - ?column? ----------- - {"f3":1} -(1 row) - -select '{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}'::json#>array['f2','0']; - ?column? ----------- - "f3" -(1 row) - -select '{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}'::json#>array['f2','1']; - ?column? ----------- - 1 -(1 row) - -select '{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}'::json#>>array['f4','f6']; - ?column? ----------- - stringy -(1 row) - -select '{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}'::json#>>array['f2']; - ?column? ----------- - {"f3":1} -(1 row) - -select '{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}'::json#>>array['f2','0']; - ?column? ----------- - f3 -(1 row) - -select '{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}'::json#>>array['f2','1']; - ?column? ----------- - 1 -(1 row) - --- corner cases for same -select '{"a": {"b":{"c": "foo"}}}'::json #> '{}'; - ?column? ---------------------------- - {"a": {"b":{"c": "foo"}}} -(1 row) - -select '[1,2,3]'::json #> '{}'; - ?column? ----------- - [1,2,3] -(1 row) - -select '"foo"'::json #> '{}'; - ?column? ----------- - "foo" -(1 row) - -select '42'::json #> '{}'; - ?column? ----------- - 42 -(1 row) - -select 'null'::json #> '{}'; - ?column? ----------- - null -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #> array['a']; - ?column? --------------------- - {"b":{"c": "foo"}} -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #> array['a', null]; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #> array['a', '']; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #> array['a','b']; - ?column? --------------- - {"c": "foo"} -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #> array['a','b','c']; - ?column? ----------- - "foo" -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #> array['a','b','c','d']; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #> array['a','z','c']; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json #> array['a','1','b']; - ?column? ----------- - "cc" -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json #> array['a','z','b']; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::json #> array['1','b']; - ?column? ----------- - "cc" -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::json #> array['z','b']; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": null}]'::json #> array['1','b']; - ?column? ----------- - null -(1 row) - -select '"foo"'::json #> array['z']; - ?column? ----------- - -(1 row) - -select '42'::json #> array['f2']; - ?column? ----------- - -(1 row) - -select '42'::json #> array['0']; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #>> '{}'; - ?column? ---------------------------- - {"a": {"b":{"c": "foo"}}} -(1 row) - -select '[1,2,3]'::json #>> '{}'; - ?column? ----------- - [1,2,3] -(1 row) - -select '"foo"'::json #>> '{}'; - ?column? ----------- - foo -(1 row) - -select '42'::json #>> '{}'; - ?column? ----------- - 42 -(1 row) - -select 'null'::json #>> '{}'; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #>> array['a']; - ?column? --------------------- - {"b":{"c": "foo"}} -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #>> array['a', null]; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #>> array['a', '']; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #>> array['a','b']; - ?column? --------------- - {"c": "foo"} -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #>> array['a','b','c']; - ?column? ----------- - foo -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #>> array['a','b','c','d']; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::json #>> array['a','z','c']; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json #>> array['a','1','b']; - ?column? ----------- - cc -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json #>> array['a','z','b']; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::json #>> array['1','b']; - ?column? ----------- - cc -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::json #>> array['z','b']; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": null}]'::json #>> array['1','b']; - ?column? ----------- - -(1 row) - -select '"foo"'::json #>> array['z']; - ?column? ----------- - -(1 row) - -select '42'::json #>> array['f2']; - ?column? ----------- - -(1 row) - -select '42'::json #>> array['0']; - ?column? ----------- - -(1 row) - --- array_elements -select json_array_elements('[1,true,[1,[2,3]],null,{"f1":1,"f2":[7,8,9]},false,"stringy"]'); - json_array_elements ------------------------ - 1 - true - [1,[2,3]] - null - {"f1":1,"f2":[7,8,9]} - false - "stringy" -(7 rows) - -select * from json_array_elements('[1,true,[1,[2,3]],null,{"f1":1,"f2":[7,8,9]},false,"stringy"]') q; - value ------------------------ - 1 - true - [1,[2,3]] - null - {"f1":1,"f2":[7,8,9]} - false - "stringy" -(7 rows) - -select json_array_elements_text('[1,true,[1,[2,3]],null,{"f1":1,"f2":[7,8,9]},false,"stringy"]'); - json_array_elements_text --------------------------- - 1 - true - [1,[2,3]] - - {"f1":1,"f2":[7,8,9]} - false - stringy -(7 rows) - -select * from json_array_elements_text('[1,true,[1,[2,3]],null,{"f1":1,"f2":[7,8,9]},false,"stringy"]') q; - value ------------------------ - 1 - true - [1,[2,3]] - - {"f1":1,"f2":[7,8,9]} - false - stringy -(7 rows) - --- populate_record -create type jpop as (a text, b int, c timestamp); -select * from json_populate_record(null::jpop,'{"a":"blurfl","x":43.2}') q; - a | b | c ---------+---+--- - blurfl | | -(1 row) - -select * from json_populate_record(row('x',3,'2012-12-31 15:30:56')::jpop,'{"a":"blurfl","x":43.2}') q; - a | b | c ---------+---+-------------------------- - blurfl | 3 | Mon Dec 31 15:30:56 2012 -(1 row) - -select * from json_populate_record(null::jpop,'{"a":"blurfl","x":43.2}') q; - a | b | c ---------+---+--- - blurfl | | -(1 row) - -select * from json_populate_record(row('x',3,'2012-12-31 15:30:56')::jpop,'{"a":"blurfl","x":43.2}') q; - a | b | c ---------+---+-------------------------- - blurfl | 3 | Mon Dec 31 15:30:56 2012 -(1 row) - -select * from json_populate_record(null::jpop,'{"a":[100,200,false],"x":43.2}') q; - a | b | c ------------------+---+--- - [100,200,false] | | -(1 row) - -select * from json_populate_record(row('x',3,'2012-12-31 15:30:56')::jpop,'{"a":[100,200,false],"x":43.2}') q; - a | b | c ------------------+---+-------------------------- - [100,200,false] | 3 | Mon Dec 31 15:30:56 2012 -(1 row) - -select * from json_populate_record(row('x',3,'2012-12-31 15:30:56')::jpop,'{"c":[100,200,false],"x":43.2}') q; -ERROR: invalid input syntax for type timestamp: "[100,200,false]" --- populate_recordset -select * from json_populate_recordset(null::jpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ---------+---+-------------------------- - blurfl | | - | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -select * from json_populate_recordset(row('def',99,null)::jpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ---------+----+-------------------------- - blurfl | 99 | - def | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -select * from json_populate_recordset(null::jpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ---------+---+-------------------------- - blurfl | | - | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -select * from json_populate_recordset(row('def',99,null)::jpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ---------+----+-------------------------- - blurfl | 99 | - def | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -select * from json_populate_recordset(row('def',99,null)::jpop,'[{"a":[100,200,300],"x":43.2},{"a":{"z":true},"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ----------------+----+-------------------------- - [100,200,300] | 99 | - {"z":true} | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -select * from json_populate_recordset(row('def',99,null)::jpop,'[{"c":[100,200,300],"x":43.2},{"a":{"z":true},"b":3,"c":"2012-01-20 10:42:53"}]') q; -ERROR: invalid input syntax for type timestamp: "[100,200,300]" -create type jpop2 as (a int, b json, c int, d int); -select * from json_populate_recordset(null::jpop2, '[{"a":2,"c":3,"b":{"z":4},"d":6}]') q; - a | b | c | d ----+---------+---+--- - 2 | {"z":4} | 3 | 6 -(1 row) - -select * from json_populate_recordset(null::jpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ---------+---+-------------------------- - blurfl | | - | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -select * from json_populate_recordset(row('def',99,null)::jpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ---------+----+-------------------------- - blurfl | 99 | - def | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -select * from json_populate_recordset(row('def',99,null)::jpop,'[{"a":[100,200,300],"x":43.2},{"a":{"z":true},"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ----------------+----+-------------------------- - [100,200,300] | 99 | - {"z":true} | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - --- handling of unicode surrogate pairs -select json '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a' as correct_in_utf8; -ERROR: unsupported Unicode escape sequence -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -CONTEXT: JSON data, line 1: { "a":... -select json '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row -ERROR: invalid input syntax for type json -DETAIL: Unicode high surrogate must not follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... -select json '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order -ERROR: invalid input syntax for type json -DETAIL: Unicode low surrogate must follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... -select json '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate -ERROR: invalid input syntax for type json -DETAIL: Unicode low surrogate must follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... -select json '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate -ERROR: invalid input syntax for type json -DETAIL: Unicode low surrogate must follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... ---handling of simple unicode escapes -select json '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; - correct_in_utf8 ---------------------------------------- - { "a": "the Copyright \u00a9 sign" } -(1 row) - -select json '{ "a": "dollar \u0024 character" }' as correct_everywhere; - correct_everywhere -------------------------------------- - { "a": "dollar \u0024 character" } -(1 row) - -select json '{ "a": "dollar \\u0024 character" }' as not_an_escape; - not_an_escape --------------------------------------- - { "a": "dollar \\u0024 character" } -(1 row) - -select json '{ "a": "null \u0000 escape" }' as not_unescaped; - not_unescaped --------------------------------- - { "a": "null \u0000 escape" } -(1 row) - -select json '{ "a": "null \\u0000 escape" }' as not_an_escape; - not_an_escape ---------------------------------- - { "a": "null \\u0000 escape" } -(1 row) - -select json '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; -ERROR: unsupported Unicode escape sequence -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -CONTEXT: JSON data, line 1: { "a":... -select json '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; - correct_everywhere --------------------- - dollar $ character -(1 row) - -select json '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; - not_an_escape -------------------------- - dollar \u0024 character -(1 row) - -select json '{ "a": "null \u0000 escape" }' ->> 'a' as fails; -ERROR: unsupported Unicode escape sequence -DETAIL: \u0000 cannot be converted to text. -CONTEXT: JSON data, line 1: { "a":... -select json '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; - not_an_escape --------------------- - null \u0000 escape -(1 row) - ---json_typeof() function -select value, json_typeof(value) - from (values (json '123.4'), - (json '-1'), - (json '"foo"'), - (json 'true'), - (json 'false'), - (json 'null'), - (json '[1, 2, 3]'), - (json '[]'), - (json '{"x":"foo", "y":123}'), - (json '{}'), - (NULL::json)) - as data(value); - value | json_typeof -----------------------+------------- - 123.4 | number - -1 | number - "foo" | string - true | boolean - false | boolean - null | null - [1, 2, 3] | array - [] | array - {"x":"foo", "y":123} | object - {} | object - | -(11 rows) - --- json_build_array, json_build_object, json_object_agg -SELECT json_build_array('a',1,'b',1.2,'c',true,'d',null,'e',json '{"x": 3, "y": [1,2,3]}'); - json_build_array ------------------------------------------------------------------------ - ["a", 1, "b", 1.2, "c", true, "d", null, "e", {"x": 3, "y": [1,2,3]}] -(1 row) - -SELECT json_build_object('a',1,'b',1.2,'c',true,'d',null,'e',json '{"x": 3, "y": [1,2,3]}'); - json_build_object ----------------------------------------------------------------------------- - {"a" : 1, "b" : 1.2, "c" : true, "d" : null, "e" : {"x": 3, "y": [1,2,3]}} -(1 row) - -SELECT json_build_object( - 'a', json_build_object('b',false,'c',99), - 'd', json_build_object('e',array[9,8,7]::int[], - 'f', (select row_to_json(r) from ( select relkind, oid::regclass as name from pg_class where relname = 'pg_class') r))); - json_build_object -------------------------------------------------------------------------------------------------- - {"a" : {"b" : false, "c" : 99}, "d" : {"e" : [9,8,7], "f" : {"relkind":"r","name":"pg_class"}}} -(1 row) - --- empty objects/arrays -SELECT json_build_array(); - json_build_array ------------------- - [] -(1 row) - -SELECT json_build_object(); - json_build_object -------------------- - {} -(1 row) - --- make sure keys are quoted -SELECT json_build_object(1,2); - json_build_object -------------------- - {"1" : 2} -(1 row) - --- keys must be scalar and not null -SELECT json_build_object(null,2); -ERROR: argument 1 cannot be null -HINT: Object keys should be text. -SELECT json_build_object(r,2) FROM (SELECT 1 AS a, 2 AS b) r; -ERROR: key value must be scalar, not array, composite, or json -SELECT json_build_object(json '{"a":1,"b":2}', 3); -ERROR: key value must be scalar, not array, composite, or json -SELECT json_build_object('{1,2,3}'::int[], 3); -ERROR: key value must be scalar, not array, composite, or json -CREATE TEMP TABLE foo (serial_num int, name text, type text); -INSERT INTO foo VALUES (847001,'t15','GE1043'); -INSERT INTO foo VALUES (847002,'t16','GE1043'); -INSERT INTO foo VALUES (847003,'sub-alpha','GESS90'); -SELECT json_build_object('turbines',json_object_agg(serial_num,json_build_object('name',name,'type',type))) -FROM foo; - json_build_object -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - {"turbines" : { "847001" : {"name" : "t15", "type" : "GE1043"}, "847002" : {"name" : "t16", "type" : "GE1043"}, "847003" : {"name" : "sub-alpha", "type" : "GESS90"} }} -(1 row) - --- json_object --- one dimension -SELECT json_object('{a,1,b,2,3,NULL,"d e f","a b c"}'); - json_object -------------------------------------------------------- - {"a" : "1", "b" : "2", "3" : null, "d e f" : "a b c"} -(1 row) - --- same but with two dimensions -SELECT json_object('{{a,1},{b,2},{3,NULL},{"d e f","a b c"}}'); - json_object -------------------------------------------------------- - {"a" : "1", "b" : "2", "3" : null, "d e f" : "a b c"} -(1 row) - --- odd number error -SELECT json_object('{a,b,c}'); -ERROR: array must have even number of elements --- one column error -SELECT json_object('{{a},{b}}'); -ERROR: array must have two columns --- too many columns error -SELECT json_object('{{a,b,c},{b,c,d}}'); -ERROR: array must have two columns --- too many dimensions error -SELECT json_object('{{{a,b},{c,d}},{{b,c},{d,e}}}'); -ERROR: wrong number of array subscripts ---two argument form of json_object -select json_object('{a,b,c,"d e f"}','{1,2,3,"a b c"}'); - json_object ------------------------------------------------------- - {"a" : "1", "b" : "2", "c" : "3", "d e f" : "a b c"} -(1 row) - --- too many dimensions -SELECT json_object('{{a,1},{b,2},{3,NULL},{"d e f","a b c"}}', '{{a,1},{b,2},{3,NULL},{"d e f","a b c"}}'); -ERROR: wrong number of array subscripts --- mismatched dimensions -select json_object('{a,b,c,"d e f",g}','{1,2,3,"a b c"}'); -ERROR: mismatched array dimensions -select json_object('{a,b,c,"d e f"}','{1,2,3,"a b c",g}'); -ERROR: mismatched array dimensions --- null key error -select json_object('{a,b,NULL,"d e f"}','{1,2,3,"a b c"}'); -ERROR: null value not allowed for object key --- empty key is allowed -select json_object('{a,b,"","d e f"}','{1,2,3,"a b c"}'); - json_object ------------------------------------------------------ - {"a" : "1", "b" : "2", "" : "3", "d e f" : "a b c"} -(1 row) - --- json_to_record and json_to_recordset -select * from json_to_record('{"a":1,"b":"foo","c":"bar"}') - as x(a int, b text, d text); - a | b | d ----+-----+--- - 1 | foo | -(1 row) - -select * from json_to_recordset('[{"a":1,"b":"foo","d":false},{"a":2,"b":"bar","c":true}]') - as x(a int, b text, c boolean); - a | b | c ----+-----+--- - 1 | foo | - 2 | bar | t -(2 rows) - -select * from json_to_recordset('[{"a":1,"b":{"d":"foo"},"c":true},{"a":2,"c":false,"b":{"d":"bar"}}]') - as x(a int, b json, c boolean); - a | b | c ----+-------------+--- - 1 | {"d":"foo"} | t - 2 | {"d":"bar"} | f -(2 rows) - --- json_strip_nulls -select json_strip_nulls(null); - json_strip_nulls ------------------- - -(1 row) - -select json_strip_nulls('1'); - json_strip_nulls ------------------- - 1 -(1 row) - -select json_strip_nulls('"a string"'); - json_strip_nulls ------------------- - "a string" -(1 row) - -select json_strip_nulls('null'); - json_strip_nulls ------------------- - null -(1 row) - -select json_strip_nulls('[1,2,null,3,4]'); - json_strip_nulls ------------------- - [1,2,null,3,4] -(1 row) - -select json_strip_nulls('{"a":1,"b":null,"c":[2,null,3],"d":{"e":4,"f":null}}'); - json_strip_nulls ------------------------------------- - {"a":1,"c":[2,null,3],"d":{"e":4}} -(1 row) - -select json_strip_nulls('[1,{"a":1,"b":null,"c":2},3]'); - json_strip_nulls ---------------------- - [1,{"a":1,"c":2},3] -(1 row) - --- an empty object is not null and should not be stripped -select json_strip_nulls('{"a": {"b": null, "c": null}, "d": {} }'); - json_strip_nulls ------------------- - {"a":{},"d":{}} -(1 row) - diff --git a/src/test/regress/expected/json_encoding.out b/src/test/regress/expected/json_encoding.out new file mode 100644 index 0000000000000..d8d34f4ff6a83 --- /dev/null +++ b/src/test/regress/expected/json_encoding.out @@ -0,0 +1,247 @@ +-- encoding-sensitive tests for json and jsonb +-- first json +-- basic unicode input +SELECT '"\u"'::json; -- ERROR, incomplete escape +ERROR: invalid input syntax for type json +LINE 1: SELECT '"\u"'::json; + ^ +DETAIL: "\u" must be followed by four hexadecimal digits. +CONTEXT: JSON data, line 1: "\u" +SELECT '"\u00"'::json; -- ERROR, incomplete escape +ERROR: invalid input syntax for type json +LINE 1: SELECT '"\u00"'::json; + ^ +DETAIL: "\u" must be followed by four hexadecimal digits. +CONTEXT: JSON data, line 1: "\u00" +SELECT '"\u000g"'::json; -- ERROR, g is not a hex digit +ERROR: invalid input syntax for type json +LINE 1: SELECT '"\u000g"'::json; + ^ +DETAIL: "\u" must be followed by four hexadecimal digits. +CONTEXT: JSON data, line 1: "\u000g... +SELECT '"\u0000"'::json; -- OK, legal escape + json +---------- + "\u0000" +(1 row) + +SELECT '"\uaBcD"'::json; -- OK, uppercase and lower case both OK + json +---------- + "\uaBcD" +(1 row) + +-- handling of unicode surrogate pairs +select json '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a' as correct_in_utf8; + correct_in_utf8 +---------------------------- + "\ud83d\ude04\ud83d\udc36" +(1 row) + +select json '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row +ERROR: invalid input syntax for type json +DETAIL: Unicode high surrogate must not follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +select json '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order +ERROR: invalid input syntax for type json +DETAIL: Unicode low surrogate must follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +select json '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate +ERROR: invalid input syntax for type json +DETAIL: Unicode low surrogate must follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +select json '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate +ERROR: invalid input syntax for type json +DETAIL: Unicode low surrogate must follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +--handling of simple unicode escapes +select json '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; + correct_in_utf8 +--------------------------------------- + { "a": "the Copyright \u00a9 sign" } +(1 row) + +select json '{ "a": "dollar \u0024 character" }' as correct_everywhere; + correct_everywhere +------------------------------------- + { "a": "dollar \u0024 character" } +(1 row) + +select json '{ "a": "dollar \\u0024 character" }' as not_an_escape; + not_an_escape +-------------------------------------- + { "a": "dollar \\u0024 character" } +(1 row) + +select json '{ "a": "null \u0000 escape" }' as not_unescaped; + not_unescaped +-------------------------------- + { "a": "null \u0000 escape" } +(1 row) + +select json '{ "a": "null \\u0000 escape" }' as not_an_escape; + not_an_escape +--------------------------------- + { "a": "null \\u0000 escape" } +(1 row) + +select json '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; + correct_in_utf8 +---------------------- + the Copyright © sign +(1 row) + +select json '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; + correct_everywhere +-------------------- + dollar $ character +(1 row) + +select json '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; + not_an_escape +------------------------- + dollar \u0024 character +(1 row) + +select json '{ "a": "null \u0000 escape" }' ->> 'a' as fails; +ERROR: unsupported Unicode escape sequence +DETAIL: \u0000 cannot be converted to text. +CONTEXT: JSON data, line 1: { "a":... +select json '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; + not_an_escape +-------------------- + null \u0000 escape +(1 row) + +-- then jsonb +-- basic unicode input +SELECT '"\u"'::jsonb; -- ERROR, incomplete escape +ERROR: invalid input syntax for type json +LINE 1: SELECT '"\u"'::jsonb; + ^ +DETAIL: "\u" must be followed by four hexadecimal digits. +CONTEXT: JSON data, line 1: "\u" +SELECT '"\u00"'::jsonb; -- ERROR, incomplete escape +ERROR: invalid input syntax for type json +LINE 1: SELECT '"\u00"'::jsonb; + ^ +DETAIL: "\u" must be followed by four hexadecimal digits. +CONTEXT: JSON data, line 1: "\u00" +SELECT '"\u000g"'::jsonb; -- ERROR, g is not a hex digit +ERROR: invalid input syntax for type json +LINE 1: SELECT '"\u000g"'::jsonb; + ^ +DETAIL: "\u" must be followed by four hexadecimal digits. +CONTEXT: JSON data, line 1: "\u000g... +SELECT '"\u0045"'::jsonb; -- OK, legal escape + jsonb +------- + "E" +(1 row) + +SELECT '"\u0000"'::jsonb; -- ERROR, we don't support U+0000 +ERROR: unsupported Unicode escape sequence +LINE 1: SELECT '"\u0000"'::jsonb; + ^ +DETAIL: \u0000 cannot be converted to text. +CONTEXT: JSON data, line 1: ... +-- use octet_length here so we don't get an odd unicode char in the +-- output +SELECT octet_length('"\uaBcD"'::jsonb::text); -- OK, uppercase and lower case both OK + octet_length +-------------- + 5 +(1 row) + +-- handling of unicode surrogate pairs +SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a')::text) AS correct_in_utf8; + correct_in_utf8 +----------------- + 10 +(1 row) + +SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row +ERROR: invalid input syntax for type json +LINE 1: SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; + ^ +DETAIL: Unicode high surrogate must not follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order +ERROR: invalid input syntax for type json +LINE 1: SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; + ^ +DETAIL: Unicode low surrogate must follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate +ERROR: invalid input syntax for type json +LINE 1: SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; + ^ +DETAIL: Unicode low surrogate must follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate +ERROR: invalid input syntax for type json +LINE 1: SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; + ^ +DETAIL: Unicode low surrogate must follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +-- handling of simple unicode escapes +SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; + correct_in_utf8 +------------------------------- + {"a": "the Copyright © sign"} +(1 row) + +SELECT jsonb '{ "a": "dollar \u0024 character" }' as correct_everywhere; + correct_everywhere +----------------------------- + {"a": "dollar $ character"} +(1 row) + +SELECT jsonb '{ "a": "dollar \\u0024 character" }' as not_an_escape; + not_an_escape +----------------------------------- + {"a": "dollar \\u0024 character"} +(1 row) + +SELECT jsonb '{ "a": "null \u0000 escape" }' as fails; +ERROR: unsupported Unicode escape sequence +LINE 1: SELECT jsonb '{ "a": "null \u0000 escape" }' as fails; + ^ +DETAIL: \u0000 cannot be converted to text. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "null \\u0000 escape" }' as not_an_escape; + not_an_escape +------------------------------ + {"a": "null \\u0000 escape"} +(1 row) + +SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; + correct_in_utf8 +---------------------- + the Copyright © sign +(1 row) + +SELECT jsonb '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; + correct_everywhere +-------------------- + dollar $ character +(1 row) + +SELECT jsonb '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; + not_an_escape +------------------------- + dollar \u0024 character +(1 row) + +SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fails; +ERROR: unsupported Unicode escape sequence +LINE 1: SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fai... + ^ +DETAIL: \u0000 cannot be converted to text. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; + not_an_escape +-------------------- + null \u0000 escape +(1 row) + diff --git a/src/test/regress/expected/json_encoding_1.out b/src/test/regress/expected/json_encoding_1.out new file mode 100644 index 0000000000000..79ed78e1c5f49 --- /dev/null +++ b/src/test/regress/expected/json_encoding_1.out @@ -0,0 +1,243 @@ +-- encoding-sensitive tests for json and jsonb +-- first json +-- basic unicode input +SELECT '"\u"'::json; -- ERROR, incomplete escape +ERROR: invalid input syntax for type json +LINE 1: SELECT '"\u"'::json; + ^ +DETAIL: "\u" must be followed by four hexadecimal digits. +CONTEXT: JSON data, line 1: "\u" +SELECT '"\u00"'::json; -- ERROR, incomplete escape +ERROR: invalid input syntax for type json +LINE 1: SELECT '"\u00"'::json; + ^ +DETAIL: "\u" must be followed by four hexadecimal digits. +CONTEXT: JSON data, line 1: "\u00" +SELECT '"\u000g"'::json; -- ERROR, g is not a hex digit +ERROR: invalid input syntax for type json +LINE 1: SELECT '"\u000g"'::json; + ^ +DETAIL: "\u" must be followed by four hexadecimal digits. +CONTEXT: JSON data, line 1: "\u000g... +SELECT '"\u0000"'::json; -- OK, legal escape + json +---------- + "\u0000" +(1 row) + +SELECT '"\uaBcD"'::json; -- OK, uppercase and lower case both OK + json +---------- + "\uaBcD" +(1 row) + +-- handling of unicode surrogate pairs +select json '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a' as correct_in_utf8; +ERROR: unsupported Unicode escape sequence +DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. +CONTEXT: JSON data, line 1: { "a":... +select json '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row +ERROR: invalid input syntax for type json +DETAIL: Unicode high surrogate must not follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +select json '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order +ERROR: invalid input syntax for type json +DETAIL: Unicode low surrogate must follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +select json '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate +ERROR: invalid input syntax for type json +DETAIL: Unicode low surrogate must follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +select json '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate +ERROR: invalid input syntax for type json +DETAIL: Unicode low surrogate must follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +--handling of simple unicode escapes +select json '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; + correct_in_utf8 +--------------------------------------- + { "a": "the Copyright \u00a9 sign" } +(1 row) + +select json '{ "a": "dollar \u0024 character" }' as correct_everywhere; + correct_everywhere +------------------------------------- + { "a": "dollar \u0024 character" } +(1 row) + +select json '{ "a": "dollar \\u0024 character" }' as not_an_escape; + not_an_escape +-------------------------------------- + { "a": "dollar \\u0024 character" } +(1 row) + +select json '{ "a": "null \u0000 escape" }' as not_unescaped; + not_unescaped +-------------------------------- + { "a": "null \u0000 escape" } +(1 row) + +select json '{ "a": "null \\u0000 escape" }' as not_an_escape; + not_an_escape +--------------------------------- + { "a": "null \\u0000 escape" } +(1 row) + +select json '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; +ERROR: unsupported Unicode escape sequence +DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. +CONTEXT: JSON data, line 1: { "a":... +select json '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; + correct_everywhere +-------------------- + dollar $ character +(1 row) + +select json '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; + not_an_escape +------------------------- + dollar \u0024 character +(1 row) + +select json '{ "a": "null \u0000 escape" }' ->> 'a' as fails; +ERROR: unsupported Unicode escape sequence +DETAIL: \u0000 cannot be converted to text. +CONTEXT: JSON data, line 1: { "a":... +select json '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; + not_an_escape +-------------------- + null \u0000 escape +(1 row) + +-- then jsonb +-- basic unicode input +SELECT '"\u"'::jsonb; -- ERROR, incomplete escape +ERROR: invalid input syntax for type json +LINE 1: SELECT '"\u"'::jsonb; + ^ +DETAIL: "\u" must be followed by four hexadecimal digits. +CONTEXT: JSON data, line 1: "\u" +SELECT '"\u00"'::jsonb; -- ERROR, incomplete escape +ERROR: invalid input syntax for type json +LINE 1: SELECT '"\u00"'::jsonb; + ^ +DETAIL: "\u" must be followed by four hexadecimal digits. +CONTEXT: JSON data, line 1: "\u00" +SELECT '"\u000g"'::jsonb; -- ERROR, g is not a hex digit +ERROR: invalid input syntax for type json +LINE 1: SELECT '"\u000g"'::jsonb; + ^ +DETAIL: "\u" must be followed by four hexadecimal digits. +CONTEXT: JSON data, line 1: "\u000g... +SELECT '"\u0045"'::jsonb; -- OK, legal escape + jsonb +------- + "E" +(1 row) + +SELECT '"\u0000"'::jsonb; -- ERROR, we don't support U+0000 +ERROR: unsupported Unicode escape sequence +LINE 1: SELECT '"\u0000"'::jsonb; + ^ +DETAIL: \u0000 cannot be converted to text. +CONTEXT: JSON data, line 1: ... +-- use octet_length here so we don't get an odd unicode char in the +-- output +SELECT octet_length('"\uaBcD"'::jsonb::text); -- OK, uppercase and lower case both OK +ERROR: unsupported Unicode escape sequence +LINE 1: SELECT octet_length('"\uaBcD"'::jsonb::text); + ^ +DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. +CONTEXT: JSON data, line 1: ... +-- handling of unicode surrogate pairs +SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a')::text) AS correct_in_utf8; +ERROR: unsupported Unicode escape sequence +LINE 1: SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc3... + ^ +DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row +ERROR: invalid input syntax for type json +LINE 1: SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; + ^ +DETAIL: Unicode high surrogate must not follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order +ERROR: invalid input syntax for type json +LINE 1: SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; + ^ +DETAIL: Unicode low surrogate must follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate +ERROR: invalid input syntax for type json +LINE 1: SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; + ^ +DETAIL: Unicode low surrogate must follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate +ERROR: invalid input syntax for type json +LINE 1: SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; + ^ +DETAIL: Unicode low surrogate must follow a high surrogate. +CONTEXT: JSON data, line 1: { "a":... +-- handling of simple unicode escapes +SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; +ERROR: unsupported Unicode escape sequence +LINE 1: SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as corr... + ^ +DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "dollar \u0024 character" }' as correct_everywhere; + correct_everywhere +----------------------------- + {"a": "dollar $ character"} +(1 row) + +SELECT jsonb '{ "a": "dollar \\u0024 character" }' as not_an_escape; + not_an_escape +----------------------------------- + {"a": "dollar \\u0024 character"} +(1 row) + +SELECT jsonb '{ "a": "null \u0000 escape" }' as fails; +ERROR: unsupported Unicode escape sequence +LINE 1: SELECT jsonb '{ "a": "null \u0000 escape" }' as fails; + ^ +DETAIL: \u0000 cannot be converted to text. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "null \\u0000 escape" }' as not_an_escape; + not_an_escape +------------------------------ + {"a": "null \\u0000 escape"} +(1 row) + +SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; +ERROR: unsupported Unicode escape sequence +LINE 1: SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a'... + ^ +DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; + correct_everywhere +-------------------- + dollar $ character +(1 row) + +SELECT jsonb '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; + not_an_escape +------------------------- + dollar \u0024 character +(1 row) + +SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fails; +ERROR: unsupported Unicode escape sequence +LINE 1: SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fai... + ^ +DETAIL: \u0000 cannot be converted to text. +CONTEXT: JSON data, line 1: { "a":... +SELECT jsonb '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; + not_an_escape +-------------------- + null \u0000 escape +(1 row) + diff --git a/src/test/regress/expected/jsonb.out b/src/test/regress/expected/jsonb.out index 171520275d7aa..58c2ab02736b3 100644 --- a/src/test/regress/expected/jsonb.out +++ b/src/test/regress/expected/jsonb.out @@ -42,44 +42,7 @@ LINE 1: SELECT '"\v"'::jsonb; ^ DETAIL: Escape sequence "\v" is invalid. CONTEXT: JSON data, line 1: "\v... -SELECT '"\u"'::jsonb; -- ERROR, incomplete escape -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\u"'::jsonb; - ^ -DETAIL: "\u" must be followed by four hexadecimal digits. -CONTEXT: JSON data, line 1: "\u" -SELECT '"\u00"'::jsonb; -- ERROR, incomplete escape -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\u00"'::jsonb; - ^ -DETAIL: "\u" must be followed by four hexadecimal digits. -CONTEXT: JSON data, line 1: "\u00" -SELECT '"\u000g"'::jsonb; -- ERROR, g is not a hex digit -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\u000g"'::jsonb; - ^ -DETAIL: "\u" must be followed by four hexadecimal digits. -CONTEXT: JSON data, line 1: "\u000g... -SELECT '"\u0045"'::jsonb; -- OK, legal escape - jsonb -------- - "E" -(1 row) - -SELECT '"\u0000"'::jsonb; -- ERROR, we don't support U+0000 -ERROR: unsupported Unicode escape sequence -LINE 1: SELECT '"\u0000"'::jsonb; - ^ -DETAIL: \u0000 cannot be converted to text. -CONTEXT: JSON data, line 1: ... --- use octet_length here so we don't get an odd unicode char in the --- output -SELECT octet_length('"\uaBcD"'::jsonb::text); -- OK, uppercase and lower case both OK - octet_length --------------- - 5 -(1 row) - +-- see json_encoding test for input with unicode escapes -- Numbers. SELECT '1'::jsonb; -- OK jsonb @@ -239,6 +202,15 @@ LINE 1: SELECT '{"abc":1,3}'::jsonb; ^ DETAIL: Expected string, but found "3". CONTEXT: JSON data, line 1: {"abc":1,3... +-- Recursion. +SET max_stack_depth = '100kB'; +SELECT repeat('[', 10000)::jsonb; +ERROR: stack depth limit exceeded +HINT: Increase the configuration parameter "max_stack_depth" (currently 100kB), after ensuring the platform's stack depth limit is adequate. +SELECT repeat('{"a":', 10000)::jsonb; +ERROR: stack depth limit exceeded +HINT: Increase the configuration parameter "max_stack_depth" (currently 100kB), after ensuring the platform's stack depth limit is adequate. +RESET max_stack_depth; -- Miscellaneous stuff. SELECT 'true'::jsonb; -- OK jsonb @@ -342,18 +314,36 @@ select to_jsonb(date 'Infinity'); "infinity" (1 row) +select to_jsonb(date '-Infinity'); + to_jsonb +------------- + "-infinity" +(1 row) + select to_jsonb(timestamp 'Infinity'); to_jsonb ------------ "infinity" (1 row) +select to_jsonb(timestamp '-Infinity'); + to_jsonb +------------- + "-infinity" +(1 row) + select to_jsonb(timestamptz 'Infinity'); to_jsonb ------------ "infinity" (1 row) +select to_jsonb(timestamptz '-Infinity'); + to_jsonb +------------- + "-infinity" +(1 row) + --jsonb_agg CREATE TEMP TABLE rows AS SELECT x, 'txt' || x as y @@ -369,13 +359,21 @@ SELECT jsonb_agg(q) [{"b": "a1", "c": 4, "z": [{"f1": 1, "f2": [1, 2, 3]}, {"f1": 4, "f2": [4, 5, 6]}]}, {"b": "a1", "c": 5, "z": [{"f1": 1, "f2": [1, 2, 3]}, {"f1": 5, "f2": [4, 5, 6]}]}, {"b": "a2", "c": 4, "z": [{"f1": 2, "f2": [1, 2, 3]}, {"f1": 4, "f2": [4, 5, 6]}]}, {"b": "a2", "c": 5, "z": [{"f1": 2, "f2": [1, 2, 3]}, {"f1": 5, "f2": [4, 5, 6]}]}] (1 row) -SELECT jsonb_agg(q) +SELECT jsonb_agg(q ORDER BY x, y) FROM rows q; jsonb_agg ----------------------------------------------------------------------- [{"x": 1, "y": "txt1"}, {"x": 2, "y": "txt2"}, {"x": 3, "y": "txt3"}] (1 row) +UPDATE rows SET x = NULL WHERE x = 1; +SELECT jsonb_agg(q ORDER BY x NULLS FIRST, y) + FROM rows q; + jsonb_agg +-------------------------------------------------------------------------- + [{"x": null, "y": "txt1"}, {"x": 2, "y": "txt2"}, {"x": 3, "y": "txt3"}] +(1 row) + -- jsonb extraction functions CREATE TEMP TABLE test_jsonb ( json_type text, @@ -1377,11 +1375,20 @@ SELECT jsonb_build_object(1,2); SELECT jsonb_build_object(null,2); ERROR: arg 1: key cannot be null SELECT jsonb_build_object(r,2) FROM (SELECT 1 AS a, 2 AS b) r; -ERROR: key value must be scalar, not array, composite or json +ERROR: key value must be scalar, not array, composite, or json SELECT jsonb_build_object(json '{"a":1,"b":2}', 3); -ERROR: key value must be scalar, not array, composite or json +ERROR: key value must be scalar, not array, composite, or json SELECT jsonb_build_object('{1,2,3}'::int[], 3); -ERROR: key value must be scalar, not array, composite or json +ERROR: key value must be scalar, not array, composite, or json +-- handling of NULL values +SELECT jsonb_object_agg(1, NULL::jsonb); + jsonb_object_agg +------------------ + {"1": null} +(1 row) + +SELECT jsonb_object_agg(NULL, '{"a":1}'); +ERROR: field name must not be null CREATE TEMP TABLE foo (serial_num int, name text, type text); INSERT INTO foo VALUES (847001,'t15','GE1043'); INSERT INTO foo VALUES (847002,'t16','GE1043'); @@ -1393,6 +1400,15 @@ FROM foo; {"turbines": {"847001": {"name": "t15", "type": "GE1043"}, "847002": {"name": "t16", "type": "GE1043"}, "847003": {"name": "sub-alpha", "type": "GESS90"}}} (1 row) +SELECT jsonb_object_agg(name, type) FROM foo; + jsonb_object_agg +----------------------------------------------------------- + {"t15": "GE1043", "t16": "GE1043", "sub-alpha": "GESS90"} +(1 row) + +INSERT INTO foo VALUES (999999, NULL, 'bar'); +SELECT jsonb_object_agg(name, type) FROM foo; +ERROR: field name must not be null -- jsonb_object -- one dimension SELECT jsonb_object('{a,1,b,2,3,NULL,"d e f","a b c"}'); @@ -1955,98 +1971,6 @@ SELECT * FROM jsonb_populate_recordset(row('def',99,NULL)::jbpop,'[{"a":[100,200 {"z": true} | 3 | Fri Jan 20 10:42:53 2012 (2 rows) --- handling of unicode surrogate pairs -SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a')::text) AS correct_in_utf8; - correct_in_utf8 ------------------ - 10 -(1 row) - -SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row -ERROR: invalid input syntax for type json -LINE 1: SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; - ^ -DETAIL: Unicode high surrogate must not follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order -ERROR: invalid input syntax for type json -LINE 1: SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; - ^ -DETAIL: Unicode low surrogate must follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate -ERROR: invalid input syntax for type json -LINE 1: SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; - ^ -DETAIL: Unicode low surrogate must follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate -ERROR: invalid input syntax for type json -LINE 1: SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; - ^ -DETAIL: Unicode low surrogate must follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... --- handling of simple unicode escapes -SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; - correct_in_utf8 -------------------------------- - {"a": "the Copyright © sign"} -(1 row) - -SELECT jsonb '{ "a": "dollar \u0024 character" }' as correct_everywhere; - correct_everywhere ------------------------------ - {"a": "dollar $ character"} -(1 row) - -SELECT jsonb '{ "a": "dollar \\u0024 character" }' as not_an_escape; - not_an_escape ------------------------------------ - {"a": "dollar \\u0024 character"} -(1 row) - -SELECT jsonb '{ "a": "null \u0000 escape" }' as fails; -ERROR: unsupported Unicode escape sequence -LINE 1: SELECT jsonb '{ "a": "null \u0000 escape" }' as fails; - ^ -DETAIL: \u0000 cannot be converted to text. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "null \\u0000 escape" }' as not_an_escape; - not_an_escape ------------------------------- - {"a": "null \\u0000 escape"} -(1 row) - -SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; - correct_in_utf8 ----------------------- - the Copyright © sign -(1 row) - -SELECT jsonb '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; - correct_everywhere --------------------- - dollar $ character -(1 row) - -SELECT jsonb '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; - not_an_escape -------------------------- - dollar \u0024 character -(1 row) - -SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fails; -ERROR: unsupported Unicode escape sequence -LINE 1: SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fai... - ^ -DETAIL: \u0000 cannot be converted to text. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; - not_an_escape --------------------- - null \u0000 escape -(1 row) - -- jsonb_to_record and jsonb_to_recordset select * from jsonb_to_record('{"a":1,"b":"foo","c":"bar"}') as x(a int, b text, d text); @@ -2162,7 +2086,7 @@ SELECT count(*) FROM testjsonb WHERE j @> '{"array":["bar"]}'; 3 (1 row) --- excercise GIN_SEARCH_MODE_ALL +-- exercise GIN_SEARCH_MODE_ALL SELECT count(*) FROM testjsonb WHERE j @> '{}'; count ------- @@ -2336,7 +2260,7 @@ SELECT count(*) FROM testjsonb WHERE j @> '{"age":25.0}'; 2 (1 row) --- excercise GIN_SEARCH_MODE_ALL +-- exercise GIN_SEARCH_MODE_ALL SELECT count(*) FROM testjsonb WHERE j @> '{}'; count ------- @@ -2590,6 +2514,18 @@ SELECT '["a","b","c",[1,2],null]'::jsonb -> 5; SELECT '["a","b","c",[1,2],null]'::jsonb -> -1; ?column? ---------- + null +(1 row) + +SELECT '["a","b","c",[1,2],null]'::jsonb -> -5; + ?column? +---------- + "a" +(1 row) + +SELECT '["a","b","c",[1,2],null]'::jsonb -> -6; + ?column? +---------- (1 row) @@ -2639,6 +2575,18 @@ SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,3}'; SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,-1}'; ?column? ---------- + 3 +(1 row) + +SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,-3}'; + ?column? +---------- + 1 +(1 row) + +SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,-4}'; + ?column? +---------- (1 row) @@ -2871,6 +2819,42 @@ select '"c"' || '["a", "b"]'::jsonb; ["c", "a", "b"] (1 row) +select '[]'::jsonb || '["a"]'::jsonb; + ?column? +---------- + ["a"] +(1 row) + +select '[]'::jsonb || '"a"'::jsonb; + ?column? +---------- + ["a"] +(1 row) + +select '"b"'::jsonb || '"a"'::jsonb; + ?column? +------------ + ["b", "a"] +(1 row) + +select '{}'::jsonb || '{"a":"b"}'::jsonb; + ?column? +------------ + {"a": "b"} +(1 row) + +select '[]'::jsonb || '{"a":"b"}'::jsonb; + ?column? +-------------- + [{"a": "b"}] +(1 row) + +select '{"a":"b"}'::jsonb || '[]'::jsonb; + ?column? +-------------- + [{"a": "b"}] +(1 row) + select '"a"'::jsonb || '{"a":1}'; ERROR: invalid concatenation of jsonb objects select '{"a":1}' || '"a"'::jsonb; @@ -3050,11 +3034,7 @@ select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::j (1 row) select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{d,NULL,0}', '[1,2,3]'); - jsonb_set ---------------------------------------------------------------------- - {"a": 1, "b": [1, 2], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": null} -(1 row) - +ERROR: path element at the position 2 is NULL select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{n}', '{"1": 2}'); jsonb_set ------------------------------------------------------------------------- @@ -3074,11 +3054,7 @@ select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::j (1 row) select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{d,NULL,0}', '{"1": 2}'); - jsonb_set ---------------------------------------------------------------------- - {"a": 1, "b": [1, 2], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": null} -(1 row) - +ERROR: path element at the position 2 is NULL select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{b,-1}', '"test"'); jsonb_set -------------------------------------------------------------------------- @@ -3121,6 +3097,8 @@ select '{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb #- '{ {"a": 1, "b": [1], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": null} (1 row) +select '{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb #- '{b,-1e}'; -- invalid array subscript +ERROR: path element at the position 2 is not an integer select '{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb #- '{d,1,0}'; ?column? ------------------------------------------------------------------ @@ -3248,3 +3226,9 @@ select jsonb_set('[]','{-99}','{"foo":123}'); [{"foo": 123}] (1 row) +select jsonb_set('{"a": [1, 2, 3]}', '{a, non_integer}', '"new_value"'); +ERROR: path element at the position 2 is not an integer +select jsonb_set('{"a": {"b": [1, 2, 3]}}', '{a, b, non_integer}', '"new_value"'); +ERROR: path element at the position 3 is not an integer +select jsonb_set('{"a": {"b": [1, 2, 3]}}', '{a, b, NULL}', '"new_value"'); +ERROR: path element at the position 3 is NULL diff --git a/src/test/regress/expected/jsonb_1.out b/src/test/regress/expected/jsonb_1.out deleted file mode 100644 index 864d85c6050e2..0000000000000 --- a/src/test/regress/expected/jsonb_1.out +++ /dev/null @@ -1,3250 +0,0 @@ --- Strings. -SELECT '""'::jsonb; -- OK. - jsonb -------- - "" -(1 row) - -SELECT $$''$$::jsonb; -- ERROR, single quotes are not allowed -ERROR: invalid input syntax for type json -LINE 1: SELECT $$''$$::jsonb; - ^ -DETAIL: Token "'" is invalid. -CONTEXT: JSON data, line 1: '... -SELECT '"abc"'::jsonb; -- OK - jsonb -------- - "abc" -(1 row) - -SELECT '"abc'::jsonb; -- ERROR, quotes not closed -ERROR: invalid input syntax for type json -LINE 1: SELECT '"abc'::jsonb; - ^ -DETAIL: Token ""abc" is invalid. -CONTEXT: JSON data, line 1: "abc -SELECT '"abc -def"'::jsonb; -- ERROR, unescaped newline in string constant -ERROR: invalid input syntax for type json -LINE 1: SELECT '"abc - ^ -DETAIL: Character with value 0x0a must be escaped. -CONTEXT: JSON data, line 1: "abc -SELECT '"\n\"\\"'::jsonb; -- OK, legal escapes - jsonb ----------- - "\n\"\\" -(1 row) - -SELECT '"\v"'::jsonb; -- ERROR, not a valid JSON escape -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\v"'::jsonb; - ^ -DETAIL: Escape sequence "\v" is invalid. -CONTEXT: JSON data, line 1: "\v... -SELECT '"\u"'::jsonb; -- ERROR, incomplete escape -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\u"'::jsonb; - ^ -DETAIL: "\u" must be followed by four hexadecimal digits. -CONTEXT: JSON data, line 1: "\u" -SELECT '"\u00"'::jsonb; -- ERROR, incomplete escape -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\u00"'::jsonb; - ^ -DETAIL: "\u" must be followed by four hexadecimal digits. -CONTEXT: JSON data, line 1: "\u00" -SELECT '"\u000g"'::jsonb; -- ERROR, g is not a hex digit -ERROR: invalid input syntax for type json -LINE 1: SELECT '"\u000g"'::jsonb; - ^ -DETAIL: "\u" must be followed by four hexadecimal digits. -CONTEXT: JSON data, line 1: "\u000g... -SELECT '"\u0045"'::jsonb; -- OK, legal escape - jsonb -------- - "E" -(1 row) - -SELECT '"\u0000"'::jsonb; -- ERROR, we don't support U+0000 -ERROR: unsupported Unicode escape sequence -LINE 1: SELECT '"\u0000"'::jsonb; - ^ -DETAIL: \u0000 cannot be converted to text. -CONTEXT: JSON data, line 1: ... --- use octet_length here so we don't get an odd unicode char in the --- output -SELECT octet_length('"\uaBcD"'::jsonb::text); -- OK, uppercase and lower case both OK -ERROR: unsupported Unicode escape sequence -LINE 1: SELECT octet_length('"\uaBcD"'::jsonb::text); - ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -CONTEXT: JSON data, line 1: ... --- Numbers. -SELECT '1'::jsonb; -- OK - jsonb -------- - 1 -(1 row) - -SELECT '0'::jsonb; -- OK - jsonb -------- - 0 -(1 row) - -SELECT '01'::jsonb; -- ERROR, not valid according to JSON spec -ERROR: invalid input syntax for type json -LINE 1: SELECT '01'::jsonb; - ^ -DETAIL: Token "01" is invalid. -CONTEXT: JSON data, line 1: 01 -SELECT '0.1'::jsonb; -- OK - jsonb -------- - 0.1 -(1 row) - -SELECT '9223372036854775808'::jsonb; -- OK, even though it's too large for int8 - jsonb ---------------------- - 9223372036854775808 -(1 row) - -SELECT '1e100'::jsonb; -- OK - jsonb -------------------------------------------------------------------------------------------------------- - 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -(1 row) - -SELECT '1.3e100'::jsonb; -- OK - jsonb -------------------------------------------------------------------------------------------------------- - 13000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -(1 row) - -SELECT '1f2'::jsonb; -- ERROR -ERROR: invalid input syntax for type json -LINE 1: SELECT '1f2'::jsonb; - ^ -DETAIL: Token "1f2" is invalid. -CONTEXT: JSON data, line 1: 1f2 -SELECT '0.x1'::jsonb; -- ERROR -ERROR: invalid input syntax for type json -LINE 1: SELECT '0.x1'::jsonb; - ^ -DETAIL: Token "0.x1" is invalid. -CONTEXT: JSON data, line 1: 0.x1 -SELECT '1.3ex100'::jsonb; -- ERROR -ERROR: invalid input syntax for type json -LINE 1: SELECT '1.3ex100'::jsonb; - ^ -DETAIL: Token "1.3ex100" is invalid. -CONTEXT: JSON data, line 1: 1.3ex100 --- Arrays. -SELECT '[]'::jsonb; -- OK - jsonb -------- - [] -(1 row) - -SELECT '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'::jsonb; -- OK - jsonb ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] -(1 row) - -SELECT '[1,2]'::jsonb; -- OK - jsonb --------- - [1, 2] -(1 row) - -SELECT '[1,2,]'::jsonb; -- ERROR, trailing comma -ERROR: invalid input syntax for type json -LINE 1: SELECT '[1,2,]'::jsonb; - ^ -DETAIL: Expected JSON value, but found "]". -CONTEXT: JSON data, line 1: [1,2,] -SELECT '[1,2'::jsonb; -- ERROR, no closing bracket -ERROR: invalid input syntax for type json -LINE 1: SELECT '[1,2'::jsonb; - ^ -DETAIL: The input string ended unexpectedly. -CONTEXT: JSON data, line 1: [1,2 -SELECT '[1,[2]'::jsonb; -- ERROR, no closing bracket -ERROR: invalid input syntax for type json -LINE 1: SELECT '[1,[2]'::jsonb; - ^ -DETAIL: The input string ended unexpectedly. -CONTEXT: JSON data, line 1: [1,[2] --- Objects. -SELECT '{}'::jsonb; -- OK - jsonb -------- - {} -(1 row) - -SELECT '{"abc"}'::jsonb; -- ERROR, no value -ERROR: invalid input syntax for type json -LINE 1: SELECT '{"abc"}'::jsonb; - ^ -DETAIL: Expected ":", but found "}". -CONTEXT: JSON data, line 1: {"abc"} -SELECT '{"abc":1}'::jsonb; -- OK - jsonb ------------- - {"abc": 1} -(1 row) - -SELECT '{1:"abc"}'::jsonb; -- ERROR, keys must be strings -ERROR: invalid input syntax for type json -LINE 1: SELECT '{1:"abc"}'::jsonb; - ^ -DETAIL: Expected string or "}", but found "1". -CONTEXT: JSON data, line 1: {1... -SELECT '{"abc",1}'::jsonb; -- ERROR, wrong separator -ERROR: invalid input syntax for type json -LINE 1: SELECT '{"abc",1}'::jsonb; - ^ -DETAIL: Expected ":", but found ",". -CONTEXT: JSON data, line 1: {"abc",... -SELECT '{"abc"=1}'::jsonb; -- ERROR, totally wrong separator -ERROR: invalid input syntax for type json -LINE 1: SELECT '{"abc"=1}'::jsonb; - ^ -DETAIL: Token "=" is invalid. -CONTEXT: JSON data, line 1: {"abc"=... -SELECT '{"abc"::1}'::jsonb; -- ERROR, another wrong separator -ERROR: invalid input syntax for type json -LINE 1: SELECT '{"abc"::1}'::jsonb; - ^ -DETAIL: Expected JSON value, but found ":". -CONTEXT: JSON data, line 1: {"abc"::... -SELECT '{"abc":1,"def":2,"ghi":[3,4],"hij":{"klm":5,"nop":[6]}}'::jsonb; -- OK - jsonb --------------------------------------------------------------------- - {"abc": 1, "def": 2, "ghi": [3, 4], "hij": {"klm": 5, "nop": [6]}} -(1 row) - -SELECT '{"abc":1:2}'::jsonb; -- ERROR, colon in wrong spot -ERROR: invalid input syntax for type json -LINE 1: SELECT '{"abc":1:2}'::jsonb; - ^ -DETAIL: Expected "," or "}", but found ":". -CONTEXT: JSON data, line 1: {"abc":1:... -SELECT '{"abc":1,3}'::jsonb; -- ERROR, no value -ERROR: invalid input syntax for type json -LINE 1: SELECT '{"abc":1,3}'::jsonb; - ^ -DETAIL: Expected string, but found "3". -CONTEXT: JSON data, line 1: {"abc":1,3... --- Miscellaneous stuff. -SELECT 'true'::jsonb; -- OK - jsonb -------- - true -(1 row) - -SELECT 'false'::jsonb; -- OK - jsonb -------- - false -(1 row) - -SELECT 'null'::jsonb; -- OK - jsonb -------- - null -(1 row) - -SELECT ' true '::jsonb; -- OK, even with extra whitespace - jsonb -------- - true -(1 row) - -SELECT 'true false'::jsonb; -- ERROR, too many values -ERROR: invalid input syntax for type json -LINE 1: SELECT 'true false'::jsonb; - ^ -DETAIL: Expected end of input, but found "false". -CONTEXT: JSON data, line 1: true false -SELECT 'true, false'::jsonb; -- ERROR, too many values -ERROR: invalid input syntax for type json -LINE 1: SELECT 'true, false'::jsonb; - ^ -DETAIL: Expected end of input, but found ",". -CONTEXT: JSON data, line 1: true,... -SELECT 'truf'::jsonb; -- ERROR, not a keyword -ERROR: invalid input syntax for type json -LINE 1: SELECT 'truf'::jsonb; - ^ -DETAIL: Token "truf" is invalid. -CONTEXT: JSON data, line 1: truf -SELECT 'trues'::jsonb; -- ERROR, not a keyword -ERROR: invalid input syntax for type json -LINE 1: SELECT 'trues'::jsonb; - ^ -DETAIL: Token "trues" is invalid. -CONTEXT: JSON data, line 1: trues -SELECT ''::jsonb; -- ERROR, no value -ERROR: invalid input syntax for type json -LINE 1: SELECT ''::jsonb; - ^ -DETAIL: The input string ended unexpectedly. -CONTEXT: JSON data, line 1: -SELECT ' '::jsonb; -- ERROR, no value -ERROR: invalid input syntax for type json -LINE 1: SELECT ' '::jsonb; - ^ -DETAIL: The input string ended unexpectedly. -CONTEXT: JSON data, line 1: --- make sure jsonb is passed through json generators without being escaped -SELECT array_to_json(ARRAY [jsonb '{"a":1}', jsonb '{"b":[2,3]}']); - array_to_json --------------------------- - [{"a": 1},{"b": [2, 3]}] -(1 row) - --- to_jsonb, timestamps -select to_jsonb(timestamp '2014-05-28 12:22:35.614298'); - to_jsonb ------------------------------- - "2014-05-28T12:22:35.614298" -(1 row) - -BEGIN; -SET LOCAL TIME ZONE 10.5; -select to_jsonb(timestamptz '2014-05-28 12:22:35.614298-04'); - to_jsonb ------------------------------------- - "2014-05-29T02:52:35.614298+10:30" -(1 row) - -SET LOCAL TIME ZONE -8; -select to_jsonb(timestamptz '2014-05-28 12:22:35.614298-04'); - to_jsonb ------------------------------------- - "2014-05-28T08:22:35.614298-08:00" -(1 row) - -COMMIT; -select to_jsonb(date '2014-05-28'); - to_jsonb --------------- - "2014-05-28" -(1 row) - -select to_jsonb(date 'Infinity'); - to_jsonb ------------- - "infinity" -(1 row) - -select to_jsonb(timestamp 'Infinity'); - to_jsonb ------------- - "infinity" -(1 row) - -select to_jsonb(timestamptz 'Infinity'); - to_jsonb ------------- - "infinity" -(1 row) - ---jsonb_agg -CREATE TEMP TABLE rows AS -SELECT x, 'txt' || x as y -FROM generate_series(1,3) AS x; -SELECT jsonb_agg(q) - FROM ( SELECT $$a$$ || x AS b, y AS c, - ARRAY[ROW(x.*,ARRAY[1,2,3]), - ROW(y.*,ARRAY[4,5,6])] AS z - FROM generate_series(1,2) x, - generate_series(4,5) y) q; - jsonb_agg --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"b": "a1", "c": 4, "z": [{"f1": 1, "f2": [1, 2, 3]}, {"f1": 4, "f2": [4, 5, 6]}]}, {"b": "a1", "c": 5, "z": [{"f1": 1, "f2": [1, 2, 3]}, {"f1": 5, "f2": [4, 5, 6]}]}, {"b": "a2", "c": 4, "z": [{"f1": 2, "f2": [1, 2, 3]}, {"f1": 4, "f2": [4, 5, 6]}]}, {"b": "a2", "c": 5, "z": [{"f1": 2, "f2": [1, 2, 3]}, {"f1": 5, "f2": [4, 5, 6]}]}] -(1 row) - -SELECT jsonb_agg(q) - FROM rows q; - jsonb_agg ------------------------------------------------------------------------ - [{"x": 1, "y": "txt1"}, {"x": 2, "y": "txt2"}, {"x": 3, "y": "txt3"}] -(1 row) - --- jsonb extraction functions -CREATE TEMP TABLE test_jsonb ( - json_type text, - test_json jsonb -); -INSERT INTO test_jsonb VALUES -('scalar','"a scalar"'), -('array','["zero", "one","two",null,"four","five", [1,2,3],{"f1":9}]'), -('object','{"field1":"val1","field2":"val2","field3":null, "field4": 4, "field5": [1,2,3], "field6": {"f1":9}}'); -SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'scalar'; - ?column? ----------- - -(1 row) - -SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'array'; - ?column? ----------- - -(1 row) - -SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'object'; - ?column? ----------- - -(1 row) - -SELECT test_json -> 'field2' FROM test_jsonb WHERE json_type = 'object'; - ?column? ----------- - "val2" -(1 row) - -SELECT test_json ->> 'field2' FROM test_jsonb WHERE json_type = 'scalar'; - ?column? ----------- - -(1 row) - -SELECT test_json ->> 'field2' FROM test_jsonb WHERE json_type = 'array'; - ?column? ----------- - -(1 row) - -SELECT test_json ->> 'field2' FROM test_jsonb WHERE json_type = 'object'; - ?column? ----------- - val2 -(1 row) - -SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'scalar'; - ?column? ----------- - -(1 row) - -SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'array'; - ?column? ----------- - "two" -(1 row) - -SELECT test_json -> 9 FROM test_jsonb WHERE json_type = 'array'; - ?column? ----------- - -(1 row) - -SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'object'; - ?column? ----------- - -(1 row) - -SELECT test_json ->> 6 FROM test_jsonb WHERE json_type = 'array'; - ?column? ------------ - [1, 2, 3] -(1 row) - -SELECT test_json ->> 7 FROM test_jsonb WHERE json_type = 'array'; - ?column? ------------ - {"f1": 9} -(1 row) - -SELECT test_json ->> 'field4' FROM test_jsonb WHERE json_type = 'object'; - ?column? ----------- - 4 -(1 row) - -SELECT test_json ->> 'field5' FROM test_jsonb WHERE json_type = 'object'; - ?column? ------------ - [1, 2, 3] -(1 row) - -SELECT test_json ->> 'field6' FROM test_jsonb WHERE json_type = 'object'; - ?column? ------------ - {"f1": 9} -(1 row) - -SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'scalar'; - ?column? ----------- - -(1 row) - -SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'array'; - ?column? ----------- - two -(1 row) - -SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'object'; - ?column? ----------- - -(1 row) - -SELECT jsonb_object_keys(test_json) FROM test_jsonb WHERE json_type = 'scalar'; -ERROR: cannot call jsonb_object_keys on a scalar -SELECT jsonb_object_keys(test_json) FROM test_jsonb WHERE json_type = 'array'; -ERROR: cannot call jsonb_object_keys on an array -SELECT jsonb_object_keys(test_json) FROM test_jsonb WHERE json_type = 'object'; - jsonb_object_keys -------------------- - field1 - field2 - field3 - field4 - field5 - field6 -(6 rows) - --- nulls -SELECT (test_json->'field3') IS NULL AS expect_false FROM test_jsonb WHERE json_type = 'object'; - expect_false --------------- - f -(1 row) - -SELECT (test_json->>'field3') IS NULL AS expect_true FROM test_jsonb WHERE json_type = 'object'; - expect_true -------------- - t -(1 row) - -SELECT (test_json->3) IS NULL AS expect_false FROM test_jsonb WHERE json_type = 'array'; - expect_false --------------- - f -(1 row) - -SELECT (test_json->>3) IS NULL AS expect_true FROM test_jsonb WHERE json_type = 'array'; - expect_true -------------- - t -(1 row) - --- corner cases -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb -> null::text; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb -> null::int; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb -> 1; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb -> 'z'; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb -> ''; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::jsonb -> 1; - ?column? -------------- - {"b": "cc"} -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::jsonb -> 3; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::jsonb -> 'z'; - ?column? ----------- - -(1 row) - -select '{"a": "c", "b": null}'::jsonb -> 'b'; - ?column? ----------- - null -(1 row) - -select '"foo"'::jsonb -> 1; - ?column? ----------- - -(1 row) - -select '"foo"'::jsonb -> 'z'; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb ->> null::text; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb ->> null::int; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb ->> 1; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb ->> 'z'; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb ->> ''; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::jsonb ->> 1; - ?column? -------------- - {"b": "cc"} -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::jsonb ->> 3; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::jsonb ->> 'z'; - ?column? ----------- - -(1 row) - -select '{"a": "c", "b": null}'::jsonb ->> 'b'; - ?column? ----------- - -(1 row) - -select '"foo"'::jsonb ->> 1; - ?column? ----------- - -(1 row) - -select '"foo"'::jsonb ->> 'z'; - ?column? ----------- - -(1 row) - --- equality and inequality -SELECT '{"x":"y"}'::jsonb = '{"x":"y"}'::jsonb; - ?column? ----------- - t -(1 row) - -SELECT '{"x":"y"}'::jsonb = '{"x":"z"}'::jsonb; - ?column? ----------- - f -(1 row) - -SELECT '{"x":"y"}'::jsonb <> '{"x":"y"}'::jsonb; - ?column? ----------- - f -(1 row) - -SELECT '{"x":"y"}'::jsonb <> '{"x":"z"}'::jsonb; - ?column? ----------- - t -(1 row) - --- containment -SELECT jsonb_contains('{"a":"b", "b":1, "c":null}', '{"a":"b"}'); - jsonb_contains ----------------- - t -(1 row) - -SELECT jsonb_contains('{"a":"b", "b":1, "c":null}', '{"a":"b", "c":null}'); - jsonb_contains ----------------- - t -(1 row) - -SELECT jsonb_contains('{"a":"b", "b":1, "c":null}', '{"a":"b", "g":null}'); - jsonb_contains ----------------- - f -(1 row) - -SELECT jsonb_contains('{"a":"b", "b":1, "c":null}', '{"g":null}'); - jsonb_contains ----------------- - f -(1 row) - -SELECT jsonb_contains('{"a":"b", "b":1, "c":null}', '{"a":"c"}'); - jsonb_contains ----------------- - f -(1 row) - -SELECT jsonb_contains('{"a":"b", "b":1, "c":null}', '{"a":"b"}'); - jsonb_contains ----------------- - t -(1 row) - -SELECT jsonb_contains('{"a":"b", "b":1, "c":null}', '{"a":"b", "c":"q"}'); - jsonb_contains ----------------- - f -(1 row) - -SELECT '{"a":"b", "b":1, "c":null}'::jsonb @> '{"a":"b"}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":"b", "b":1, "c":null}'::jsonb @> '{"a":"b", "c":null}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":"b", "b":1, "c":null}'::jsonb @> '{"a":"b", "g":null}'; - ?column? ----------- - f -(1 row) - -SELECT '{"a":"b", "b":1, "c":null}'::jsonb @> '{"g":null}'; - ?column? ----------- - f -(1 row) - -SELECT '{"a":"b", "b":1, "c":null}'::jsonb @> '{"a":"c"}'; - ?column? ----------- - f -(1 row) - -SELECT '{"a":"b", "b":1, "c":null}'::jsonb @> '{"a":"b"}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":"b", "b":1, "c":null}'::jsonb @> '{"a":"b", "c":"q"}'; - ?column? ----------- - f -(1 row) - -SELECT '[1,2]'::jsonb @> '[1,2,2]'::jsonb; - ?column? ----------- - t -(1 row) - -SELECT '[1,1,2]'::jsonb @> '[1,2,2]'::jsonb; - ?column? ----------- - t -(1 row) - -SELECT '[[1,2]]'::jsonb @> '[[1,2,2]]'::jsonb; - ?column? ----------- - t -(1 row) - -SELECT '[1,2,2]'::jsonb <@ '[1,2]'::jsonb; - ?column? ----------- - t -(1 row) - -SELECT '[1,2,2]'::jsonb <@ '[1,1,2]'::jsonb; - ?column? ----------- - t -(1 row) - -SELECT '[[1,2,2]]'::jsonb <@ '[[1,2]]'::jsonb; - ?column? ----------- - t -(1 row) - -SELECT jsonb_contained('{"a":"b"}', '{"a":"b", "b":1, "c":null}'); - jsonb_contained ------------------ - t -(1 row) - -SELECT jsonb_contained('{"a":"b", "c":null}', '{"a":"b", "b":1, "c":null}'); - jsonb_contained ------------------ - t -(1 row) - -SELECT jsonb_contained('{"a":"b", "g":null}', '{"a":"b", "b":1, "c":null}'); - jsonb_contained ------------------ - f -(1 row) - -SELECT jsonb_contained('{"g":null}', '{"a":"b", "b":1, "c":null}'); - jsonb_contained ------------------ - f -(1 row) - -SELECT jsonb_contained('{"a":"c"}', '{"a":"b", "b":1, "c":null}'); - jsonb_contained ------------------ - f -(1 row) - -SELECT jsonb_contained('{"a":"b"}', '{"a":"b", "b":1, "c":null}'); - jsonb_contained ------------------ - t -(1 row) - -SELECT jsonb_contained('{"a":"b", "c":"q"}', '{"a":"b", "b":1, "c":null}'); - jsonb_contained ------------------ - f -(1 row) - -SELECT '{"a":"b"}'::jsonb <@ '{"a":"b", "b":1, "c":null}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":"b", "c":null}'::jsonb <@ '{"a":"b", "b":1, "c":null}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":"b", "g":null}'::jsonb <@ '{"a":"b", "b":1, "c":null}'; - ?column? ----------- - f -(1 row) - -SELECT '{"g":null}'::jsonb <@ '{"a":"b", "b":1, "c":null}'; - ?column? ----------- - f -(1 row) - -SELECT '{"a":"c"}'::jsonb <@ '{"a":"b", "b":1, "c":null}'; - ?column? ----------- - f -(1 row) - -SELECT '{"a":"b"}'::jsonb <@ '{"a":"b", "b":1, "c":null}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":"b", "c":"q"}'::jsonb <@ '{"a":"b", "b":1, "c":null}'; - ?column? ----------- - f -(1 row) - --- Raw scalar may contain another raw scalar, array may contain a raw scalar -SELECT '[5]'::jsonb @> '[5]'; - ?column? ----------- - t -(1 row) - -SELECT '5'::jsonb @> '5'; - ?column? ----------- - t -(1 row) - -SELECT '[5]'::jsonb @> '5'; - ?column? ----------- - t -(1 row) - --- But a raw scalar cannot contain an array -SELECT '5'::jsonb @> '[5]'; - ?column? ----------- - f -(1 row) - --- In general, one thing should always contain itself. Test array containment: -SELECT '["9", ["7", "3"], 1]'::jsonb @> '["9", ["7", "3"], 1]'::jsonb; - ?column? ----------- - t -(1 row) - -SELECT '["9", ["7", "3"], ["1"]]'::jsonb @> '["9", ["7", "3"], ["1"]]'::jsonb; - ?column? ----------- - t -(1 row) - --- array containment string matching confusion bug -SELECT '{ "name": "Bob", "tags": [ "enim", "qui"]}'::jsonb @> '{"tags":["qu"]}'; - ?column? ----------- - f -(1 row) - --- array length -SELECT jsonb_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]'); - jsonb_array_length --------------------- - 5 -(1 row) - -SELECT jsonb_array_length('[]'); - jsonb_array_length --------------------- - 0 -(1 row) - -SELECT jsonb_array_length('{"f1":1,"f2":[5,6]}'); -ERROR: cannot get array length of a non-array -SELECT jsonb_array_length('4'); -ERROR: cannot get array length of a scalar --- each -SELECT jsonb_each('{"f1":[1,2,3],"f2":{"f3":1},"f4":null}'); - jsonb_each --------------------- - (f1,"[1, 2, 3]") - (f2,"{""f3"": 1}") - (f4,null) -(3 rows) - -SELECT jsonb_each('{"a":{"b":"c","c":"b","1":"first"},"b":[1,2],"c":"cc","1":"first","n":null}'::jsonb) AS q; - q ------------------------------------------------------- - (1,"""first""") - (a,"{""1"": ""first"", ""b"": ""c"", ""c"": ""b""}") - (b,"[1, 2]") - (c,"""cc""") - (n,null) -(5 rows) - -SELECT * FROM jsonb_each('{"f1":[1,2,3],"f2":{"f3":1},"f4":null,"f5":99,"f6":"stringy"}') q; - key | value ------+----------- - f1 | [1, 2, 3] - f2 | {"f3": 1} - f4 | null - f5 | 99 - f6 | "stringy" -(5 rows) - -SELECT * FROM jsonb_each('{"a":{"b":"c","c":"b","1":"first"},"b":[1,2],"c":"cc","1":"first","n":null}'::jsonb) AS q; - key | value ------+------------------------------------ - 1 | "first" - a | {"1": "first", "b": "c", "c": "b"} - b | [1, 2] - c | "cc" - n | null -(5 rows) - -SELECT jsonb_each_text('{"f1":[1,2,3],"f2":{"f3":1},"f4":null,"f5":"null"}'); - jsonb_each_text --------------------- - (f1,"[1, 2, 3]") - (f2,"{""f3"": 1}") - (f4,) - (f5,null) -(4 rows) - -SELECT jsonb_each_text('{"a":{"b":"c","c":"b","1":"first"},"b":[1,2],"c":"cc","1":"first","n":null}'::jsonb) AS q; - q ------------------------------------------------------- - (1,first) - (a,"{""1"": ""first"", ""b"": ""c"", ""c"": ""b""}") - (b,"[1, 2]") - (c,cc) - (n,) -(5 rows) - -SELECT * FROM jsonb_each_text('{"f1":[1,2,3],"f2":{"f3":1},"f4":null,"f5":99,"f6":"stringy"}') q; - key | value ------+----------- - f1 | [1, 2, 3] - f2 | {"f3": 1} - f4 | - f5 | 99 - f6 | stringy -(5 rows) - -SELECT * FROM jsonb_each_text('{"a":{"b":"c","c":"b","1":"first"},"b":[1,2],"c":"cc","1":"first","n":null}'::jsonb) AS q; - key | value ------+------------------------------------ - 1 | first - a | {"1": "first", "b": "c", "c": "b"} - b | [1, 2] - c | cc - n | -(5 rows) - --- exists -SELECT jsonb_exists('{"a":null, "b":"qq"}', 'a'); - jsonb_exists --------------- - t -(1 row) - -SELECT jsonb_exists('{"a":null, "b":"qq"}', 'b'); - jsonb_exists --------------- - t -(1 row) - -SELECT jsonb_exists('{"a":null, "b":"qq"}', 'c'); - jsonb_exists --------------- - f -(1 row) - -SELECT jsonb_exists('{"a":"null", "b":"qq"}', 'a'); - jsonb_exists --------------- - t -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ? 'a'; - ?column? ----------- - t -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ? 'b'; - ?column? ----------- - t -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ? 'c'; - ?column? ----------- - f -(1 row) - -SELECT jsonb '{"a":"null", "b":"qq"}' ? 'a'; - ?column? ----------- - t -(1 row) - --- array exists - array elements should behave as keys -SELECT count(*) from testjsonb WHERE j->'array' ? 'bar'; - count -------- - 3 -(1 row) - --- type sensitive array exists - should return no rows (since "exists" only --- matches strings that are either object keys or array elements) -SELECT count(*) from testjsonb WHERE j->'array' ? '5'::text; - count -------- - 0 -(1 row) - --- However, a raw scalar is *contained* within the array -SELECT count(*) from testjsonb WHERE j->'array' @> '5'::jsonb; - count -------- - 1 -(1 row) - -SELECT jsonb_exists_any('{"a":null, "b":"qq"}', ARRAY['a','b']); - jsonb_exists_any ------------------- - t -(1 row) - -SELECT jsonb_exists_any('{"a":null, "b":"qq"}', ARRAY['b','a']); - jsonb_exists_any ------------------- - t -(1 row) - -SELECT jsonb_exists_any('{"a":null, "b":"qq"}', ARRAY['c','a']); - jsonb_exists_any ------------------- - t -(1 row) - -SELECT jsonb_exists_any('{"a":null, "b":"qq"}', ARRAY['c','d']); - jsonb_exists_any ------------------- - f -(1 row) - -SELECT jsonb_exists_any('{"a":null, "b":"qq"}', '{}'::text[]); - jsonb_exists_any ------------------- - f -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ?| ARRAY['a','b']; - ?column? ----------- - t -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ?| ARRAY['b','a']; - ?column? ----------- - t -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ?| ARRAY['c','a']; - ?column? ----------- - t -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ?| ARRAY['c','d']; - ?column? ----------- - f -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ?| '{}'::text[]; - ?column? ----------- - f -(1 row) - -SELECT jsonb_exists_all('{"a":null, "b":"qq"}', ARRAY['a','b']); - jsonb_exists_all ------------------- - t -(1 row) - -SELECT jsonb_exists_all('{"a":null, "b":"qq"}', ARRAY['b','a']); - jsonb_exists_all ------------------- - t -(1 row) - -SELECT jsonb_exists_all('{"a":null, "b":"qq"}', ARRAY['c','a']); - jsonb_exists_all ------------------- - f -(1 row) - -SELECT jsonb_exists_all('{"a":null, "b":"qq"}', ARRAY['c','d']); - jsonb_exists_all ------------------- - f -(1 row) - -SELECT jsonb_exists_all('{"a":null, "b":"qq"}', '{}'::text[]); - jsonb_exists_all ------------------- - t -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ?& ARRAY['a','b']; - ?column? ----------- - t -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ?& ARRAY['b','a']; - ?column? ----------- - t -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ?& ARRAY['c','a']; - ?column? ----------- - f -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ?& ARRAY['c','d']; - ?column? ----------- - f -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ?& ARRAY['a','a', 'b', 'b', 'b']; - ?column? ----------- - t -(1 row) - -SELECT jsonb '{"a":null, "b":"qq"}' ?& '{}'::text[]; - ?column? ----------- - t -(1 row) - --- typeof -SELECT jsonb_typeof('{}') AS object; - object --------- - object -(1 row) - -SELECT jsonb_typeof('{"c":3,"p":"o"}') AS object; - object --------- - object -(1 row) - -SELECT jsonb_typeof('[]') AS array; - array -------- - array -(1 row) - -SELECT jsonb_typeof('["a", 1]') AS array; - array -------- - array -(1 row) - -SELECT jsonb_typeof('null') AS "null"; - null ------- - null -(1 row) - -SELECT jsonb_typeof('1') AS number; - number --------- - number -(1 row) - -SELECT jsonb_typeof('-1') AS number; - number --------- - number -(1 row) - -SELECT jsonb_typeof('1.0') AS number; - number --------- - number -(1 row) - -SELECT jsonb_typeof('1e2') AS number; - number --------- - number -(1 row) - -SELECT jsonb_typeof('-1.0') AS number; - number --------- - number -(1 row) - -SELECT jsonb_typeof('true') AS boolean; - boolean ---------- - boolean -(1 row) - -SELECT jsonb_typeof('false') AS boolean; - boolean ---------- - boolean -(1 row) - -SELECT jsonb_typeof('"hello"') AS string; - string --------- - string -(1 row) - -SELECT jsonb_typeof('"true"') AS string; - string --------- - string -(1 row) - -SELECT jsonb_typeof('"1.0"') AS string; - string --------- - string -(1 row) - --- jsonb_build_array, jsonb_build_object, jsonb_object_agg -SELECT jsonb_build_array('a',1,'b',1.2,'c',true,'d',null,'e',json '{"x": 3, "y": [1,2,3]}'); - jsonb_build_array -------------------------------------------------------------------------- - ["a", 1, "b", 1.2, "c", true, "d", null, "e", {"x": 3, "y": [1, 2, 3]}] -(1 row) - -SELECT jsonb_build_object('a',1,'b',1.2,'c',true,'d',null,'e',json '{"x": 3, "y": [1,2,3]}'); - jsonb_build_object -------------------------------------------------------------------------- - {"a": 1, "b": 1.2, "c": true, "d": null, "e": {"x": 3, "y": [1, 2, 3]}} -(1 row) - -SELECT jsonb_build_object( - 'a', jsonb_build_object('b',false,'c',99), - 'd', jsonb_build_object('e',array[9,8,7]::int[], - 'f', (select row_to_json(r) from ( select relkind, oid::regclass as name from pg_class where relname = 'pg_class') r))); - jsonb_build_object ------------------------------------------------------------------------------------------------- - {"a": {"b": false, "c": 99}, "d": {"e": [9, 8, 7], "f": {"name": "pg_class", "relkind": "r"}}} -(1 row) - --- empty objects/arrays -SELECT jsonb_build_array(); - jsonb_build_array -------------------- - [] -(1 row) - -SELECT jsonb_build_object(); - jsonb_build_object --------------------- - {} -(1 row) - --- make sure keys are quoted -SELECT jsonb_build_object(1,2); - jsonb_build_object --------------------- - {"1": 2} -(1 row) - --- keys must be scalar and not null -SELECT jsonb_build_object(null,2); -ERROR: arg 1: key cannot be null -SELECT jsonb_build_object(r,2) FROM (SELECT 1 AS a, 2 AS b) r; -ERROR: key value must be scalar, not array, composite or json -SELECT jsonb_build_object(json '{"a":1,"b":2}', 3); -ERROR: key value must be scalar, not array, composite or json -SELECT jsonb_build_object('{1,2,3}'::int[], 3); -ERROR: key value must be scalar, not array, composite or json -CREATE TEMP TABLE foo (serial_num int, name text, type text); -INSERT INTO foo VALUES (847001,'t15','GE1043'); -INSERT INTO foo VALUES (847002,'t16','GE1043'); -INSERT INTO foo VALUES (847003,'sub-alpha','GESS90'); -SELECT jsonb_build_object('turbines',jsonb_object_agg(serial_num,jsonb_build_object('name',name,'type',type))) -FROM foo; - jsonb_build_object -------------------------------------------------------------------------------------------------------------------------------------------------------------- - {"turbines": {"847001": {"name": "t15", "type": "GE1043"}, "847002": {"name": "t16", "type": "GE1043"}, "847003": {"name": "sub-alpha", "type": "GESS90"}}} -(1 row) - --- jsonb_object --- one dimension -SELECT jsonb_object('{a,1,b,2,3,NULL,"d e f","a b c"}'); - jsonb_object ---------------------------------------------------- - {"3": null, "a": "1", "b": "2", "d e f": "a b c"} -(1 row) - --- same but with two dimensions -SELECT jsonb_object('{{a,1},{b,2},{3,NULL},{"d e f","a b c"}}'); - jsonb_object ---------------------------------------------------- - {"3": null, "a": "1", "b": "2", "d e f": "a b c"} -(1 row) - --- odd number error -SELECT jsonb_object('{a,b,c}'); -ERROR: array must have even number of elements --- one column error -SELECT jsonb_object('{{a},{b}}'); -ERROR: array must have two columns --- too many columns error -SELECT jsonb_object('{{a,b,c},{b,c,d}}'); -ERROR: array must have two columns --- too many dimensions error -SELECT jsonb_object('{{{a,b},{c,d}},{{b,c},{d,e}}}'); -ERROR: wrong number of array subscripts ---two argument form of jsonb_object -select jsonb_object('{a,b,c,"d e f"}','{1,2,3,"a b c"}'); - jsonb_object --------------------------------------------------- - {"a": "1", "b": "2", "c": "3", "d e f": "a b c"} -(1 row) - --- too many dimensions -SELECT jsonb_object('{{a,1},{b,2},{3,NULL},{"d e f","a b c"}}', '{{a,1},{b,2},{3,NULL},{"d e f","a b c"}}'); -ERROR: wrong number of array subscripts --- mismatched dimensions -select jsonb_object('{a,b,c,"d e f",g}','{1,2,3,"a b c"}'); -ERROR: mismatched array dimensions -select jsonb_object('{a,b,c,"d e f"}','{1,2,3,"a b c",g}'); -ERROR: mismatched array dimensions --- null key error -select jsonb_object('{a,b,NULL,"d e f"}','{1,2,3,"a b c"}'); -ERROR: null value not allowed for object key --- empty key is allowed -select jsonb_object('{a,b,"","d e f"}','{1,2,3,"a b c"}'); - jsonb_object -------------------------------------------------- - {"": "3", "a": "1", "b": "2", "d e f": "a b c"} -(1 row) - --- extract_path, extract_path_as_text -SELECT jsonb_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}','f4','f6'); - jsonb_extract_path --------------------- - "stringy" -(1 row) - -SELECT jsonb_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}','f2'); - jsonb_extract_path --------------------- - {"f3": 1} -(1 row) - -SELECT jsonb_extract_path('{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}','f2',0::text); - jsonb_extract_path --------------------- - "f3" -(1 row) - -SELECT jsonb_extract_path('{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}','f2',1::text); - jsonb_extract_path --------------------- - 1 -(1 row) - -SELECT jsonb_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}','f4','f6'); - jsonb_extract_path_text -------------------------- - stringy -(1 row) - -SELECT jsonb_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}','f2'); - jsonb_extract_path_text -------------------------- - {"f3": 1} -(1 row) - -SELECT jsonb_extract_path_text('{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}','f2',0::text); - jsonb_extract_path_text -------------------------- - f3 -(1 row) - -SELECT jsonb_extract_path_text('{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}','f2',1::text); - jsonb_extract_path_text -------------------------- - 1 -(1 row) - --- extract_path nulls -SELECT jsonb_extract_path('{"f2":{"f3":1},"f4":{"f5":null,"f6":"stringy"}}','f4','f5') IS NULL AS expect_false; - expect_false --------------- - f -(1 row) - -SELECT jsonb_extract_path_text('{"f2":{"f3":1},"f4":{"f5":null,"f6":"stringy"}}','f4','f5') IS NULL AS expect_true; - expect_true -------------- - t -(1 row) - -SELECT jsonb_extract_path('{"f2":{"f3":1},"f4":[0,1,2,null]}','f4','3') IS NULL AS expect_false; - expect_false --------------- - f -(1 row) - -SELECT jsonb_extract_path_text('{"f2":{"f3":1},"f4":[0,1,2,null]}','f4','3') IS NULL AS expect_true; - expect_true -------------- - t -(1 row) - --- extract_path operators -SELECT '{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}'::jsonb#>array['f4','f6']; - ?column? ------------ - "stringy" -(1 row) - -SELECT '{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}'::jsonb#>array['f2']; - ?column? ------------ - {"f3": 1} -(1 row) - -SELECT '{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}'::jsonb#>array['f2','0']; - ?column? ----------- - "f3" -(1 row) - -SELECT '{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}'::jsonb#>array['f2','1']; - ?column? ----------- - 1 -(1 row) - -SELECT '{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}'::jsonb#>>array['f4','f6']; - ?column? ----------- - stringy -(1 row) - -SELECT '{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}'::jsonb#>>array['f2']; - ?column? ------------ - {"f3": 1} -(1 row) - -SELECT '{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}'::jsonb#>>array['f2','0']; - ?column? ----------- - f3 -(1 row) - -SELECT '{"f2":["f3",1],"f4":{"f5":99,"f6":"stringy"}}'::jsonb#>>array['f2','1']; - ?column? ----------- - 1 -(1 row) - --- corner cases for same -select '{"a": {"b":{"c": "foo"}}}'::jsonb #> '{}'; - ?column? ----------------------------- - {"a": {"b": {"c": "foo"}}} -(1 row) - -select '[1,2,3]'::jsonb #> '{}'; - ?column? ------------ - [1, 2, 3] -(1 row) - -select '"foo"'::jsonb #> '{}'; - ?column? ----------- - "foo" -(1 row) - -select '42'::jsonb #> '{}'; - ?column? ----------- - 42 -(1 row) - -select 'null'::jsonb #> '{}'; - ?column? ----------- - null -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #> array['a']; - ?column? ---------------------- - {"b": {"c": "foo"}} -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #> array['a', null]; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #> array['a', '']; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #> array['a','b']; - ?column? --------------- - {"c": "foo"} -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #> array['a','b','c']; - ?column? ----------- - "foo" -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #> array['a','b','c','d']; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #> array['a','z','c']; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb #> array['a','1','b']; - ?column? ----------- - "cc" -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb #> array['a','z','b']; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::jsonb #> array['1','b']; - ?column? ----------- - "cc" -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::jsonb #> array['z','b']; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": null}]'::jsonb #> array['1','b']; - ?column? ----------- - null -(1 row) - -select '"foo"'::jsonb #> array['z']; - ?column? ----------- - -(1 row) - -select '42'::jsonb #> array['f2']; - ?column? ----------- - -(1 row) - -select '42'::jsonb #> array['0']; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #>> '{}'; - ?column? ----------------------------- - {"a": {"b": {"c": "foo"}}} -(1 row) - -select '[1,2,3]'::jsonb #>> '{}'; - ?column? ------------ - [1, 2, 3] -(1 row) - -select '"foo"'::jsonb #>> '{}'; - ?column? ----------- - foo -(1 row) - -select '42'::jsonb #>> '{}'; - ?column? ----------- - 42 -(1 row) - -select 'null'::jsonb #>> '{}'; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #>> array['a']; - ?column? ---------------------- - {"b": {"c": "foo"}} -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #>> array['a', null]; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #>> array['a', '']; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #>> array['a','b']; - ?column? --------------- - {"c": "foo"} -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #>> array['a','b','c']; - ?column? ----------- - foo -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #>> array['a','b','c','d']; - ?column? ----------- - -(1 row) - -select '{"a": {"b":{"c": "foo"}}}'::jsonb #>> array['a','z','c']; - ?column? ----------- - -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb #>> array['a','1','b']; - ?column? ----------- - cc -(1 row) - -select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb #>> array['a','z','b']; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::jsonb #>> array['1','b']; - ?column? ----------- - cc -(1 row) - -select '[{"b": "c"}, {"b": "cc"}]'::jsonb #>> array['z','b']; - ?column? ----------- - -(1 row) - -select '[{"b": "c"}, {"b": null}]'::jsonb #>> array['1','b']; - ?column? ----------- - -(1 row) - -select '"foo"'::jsonb #>> array['z']; - ?column? ----------- - -(1 row) - -select '42'::jsonb #>> array['f2']; - ?column? ----------- - -(1 row) - -select '42'::jsonb #>> array['0']; - ?column? ----------- - -(1 row) - --- array_elements -SELECT jsonb_array_elements('[1,true,[1,[2,3]],null,{"f1":1,"f2":[7,8,9]},false]'); - jsonb_array_elements ----------------------------- - 1 - true - [1, [2, 3]] - null - {"f1": 1, "f2": [7, 8, 9]} - false -(6 rows) - -SELECT * FROM jsonb_array_elements('[1,true,[1,[2,3]],null,{"f1":1,"f2":[7,8,9]},false]') q; - value ----------------------------- - 1 - true - [1, [2, 3]] - null - {"f1": 1, "f2": [7, 8, 9]} - false -(6 rows) - -SELECT jsonb_array_elements_text('[1,true,[1,[2,3]],null,{"f1":1,"f2":[7,8,9]},false,"stringy"]'); - jsonb_array_elements_text ----------------------------- - 1 - true - [1, [2, 3]] - - {"f1": 1, "f2": [7, 8, 9]} - false - stringy -(7 rows) - -SELECT * FROM jsonb_array_elements_text('[1,true,[1,[2,3]],null,{"f1":1,"f2":[7,8,9]},false,"stringy"]') q; - value ----------------------------- - 1 - true - [1, [2, 3]] - - {"f1": 1, "f2": [7, 8, 9]} - false - stringy -(7 rows) - --- populate_record -CREATE TYPE jbpop AS (a text, b int, c timestamp); -SELECT * FROM jsonb_populate_record(NULL::jbpop,'{"a":"blurfl","x":43.2}') q; - a | b | c ---------+---+--- - blurfl | | -(1 row) - -SELECT * FROM jsonb_populate_record(row('x',3,'2012-12-31 15:30:56')::jbpop,'{"a":"blurfl","x":43.2}') q; - a | b | c ---------+---+-------------------------- - blurfl | 3 | Mon Dec 31 15:30:56 2012 -(1 row) - -SELECT * FROM jsonb_populate_record(NULL::jbpop,'{"a":"blurfl","x":43.2}') q; - a | b | c ---------+---+--- - blurfl | | -(1 row) - -SELECT * FROM jsonb_populate_record(row('x',3,'2012-12-31 15:30:56')::jbpop,'{"a":"blurfl","x":43.2}') q; - a | b | c ---------+---+-------------------------- - blurfl | 3 | Mon Dec 31 15:30:56 2012 -(1 row) - -SELECT * FROM jsonb_populate_record(NULL::jbpop,'{"a":[100,200,false],"x":43.2}') q; - a | b | c --------------------+---+--- - [100, 200, false] | | -(1 row) - -SELECT * FROM jsonb_populate_record(row('x',3,'2012-12-31 15:30:56')::jbpop,'{"a":[100,200,false],"x":43.2}') q; - a | b | c --------------------+---+-------------------------- - [100, 200, false] | 3 | Mon Dec 31 15:30:56 2012 -(1 row) - -SELECT * FROM jsonb_populate_record(row('x',3,'2012-12-31 15:30:56')::jbpop,'{"c":[100,200,false],"x":43.2}') q; -ERROR: invalid input syntax for type timestamp: "[100, 200, false]" --- populate_recordset -SELECT * FROM jsonb_populate_recordset(NULL::jbpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ---------+---+-------------------------- - blurfl | | - | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -SELECT * FROM jsonb_populate_recordset(row('def',99,NULL)::jbpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ---------+----+-------------------------- - blurfl | 99 | - def | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -SELECT * FROM jsonb_populate_recordset(NULL::jbpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ---------+---+-------------------------- - blurfl | | - | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -SELECT * FROM jsonb_populate_recordset(row('def',99,NULL)::jbpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ---------+----+-------------------------- - blurfl | 99 | - def | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -SELECT * FROM jsonb_populate_recordset(row('def',99,NULL)::jbpop,'[{"a":[100,200,300],"x":43.2},{"a":{"z":true},"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ------------------+----+-------------------------- - [100, 200, 300] | 99 | - {"z": true} | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -SELECT * FROM jsonb_populate_recordset(row('def',99,NULL)::jbpop,'[{"c":[100,200,300],"x":43.2},{"a":{"z":true},"b":3,"c":"2012-01-20 10:42:53"}]') q; -ERROR: invalid input syntax for type timestamp: "[100, 200, 300]" -SELECT * FROM jsonb_populate_recordset(NULL::jbpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ---------+---+-------------------------- - blurfl | | - | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -SELECT * FROM jsonb_populate_recordset(row('def',99,NULL)::jbpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ---------+----+-------------------------- - blurfl | 99 | - def | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - -SELECT * FROM jsonb_populate_recordset(row('def',99,NULL)::jbpop,'[{"a":[100,200,300],"x":43.2},{"a":{"z":true},"b":3,"c":"2012-01-20 10:42:53"}]') q; - a | b | c ------------------+----+-------------------------- - [100, 200, 300] | 99 | - {"z": true} | 3 | Fri Jan 20 10:42:53 2012 -(2 rows) - --- handling of unicode surrogate pairs -SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a')::text) AS correct_in_utf8; -ERROR: unsupported Unicode escape sequence -LINE 1: SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc3... - ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row -ERROR: invalid input syntax for type json -LINE 1: SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; - ^ -DETAIL: Unicode high surrogate must not follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order -ERROR: invalid input syntax for type json -LINE 1: SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; - ^ -DETAIL: Unicode low surrogate must follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate -ERROR: invalid input syntax for type json -LINE 1: SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; - ^ -DETAIL: Unicode low surrogate must follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate -ERROR: invalid input syntax for type json -LINE 1: SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; - ^ -DETAIL: Unicode low surrogate must follow a high surrogate. -CONTEXT: JSON data, line 1: { "a":... --- handling of simple unicode escapes -SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; -ERROR: unsupported Unicode escape sequence -LINE 1: SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as corr... - ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "dollar \u0024 character" }' as correct_everywhere; - correct_everywhere ------------------------------ - {"a": "dollar $ character"} -(1 row) - -SELECT jsonb '{ "a": "dollar \\u0024 character" }' as not_an_escape; - not_an_escape ------------------------------------ - {"a": "dollar \\u0024 character"} -(1 row) - -SELECT jsonb '{ "a": "null \u0000 escape" }' as fails; -ERROR: unsupported Unicode escape sequence -LINE 1: SELECT jsonb '{ "a": "null \u0000 escape" }' as fails; - ^ -DETAIL: \u0000 cannot be converted to text. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "null \\u0000 escape" }' as not_an_escape; - not_an_escape ------------------------------- - {"a": "null \\u0000 escape"} -(1 row) - -SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; -ERROR: unsupported Unicode escape sequence -LINE 1: SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a'... - ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; - correct_everywhere --------------------- - dollar $ character -(1 row) - -SELECT jsonb '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; - not_an_escape -------------------------- - dollar \u0024 character -(1 row) - -SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fails; -ERROR: unsupported Unicode escape sequence -LINE 1: SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fai... - ^ -DETAIL: \u0000 cannot be converted to text. -CONTEXT: JSON data, line 1: { "a":... -SELECT jsonb '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; - not_an_escape --------------------- - null \u0000 escape -(1 row) - --- jsonb_to_record and jsonb_to_recordset -select * from jsonb_to_record('{"a":1,"b":"foo","c":"bar"}') - as x(a int, b text, d text); - a | b | d ----+-----+--- - 1 | foo | -(1 row) - -select * from jsonb_to_recordset('[{"a":1,"b":"foo","d":false},{"a":2,"b":"bar","c":true}]') - as x(a int, b text, c boolean); - a | b | c ----+-----+--- - 1 | foo | - 2 | bar | t -(2 rows) - --- indexing -SELECT count(*) FROM testjsonb WHERE j @> '{"wait":null}'; - count -------- - 1 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"wait":"CC"}'; - count -------- - 15 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"wait":"CC", "public":true}'; - count -------- - 2 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"age":25}'; - count -------- - 2 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"age":25.0}'; - count -------- - 2 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j ? 'public'; - count -------- - 194 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j ? 'bar'; - count -------- - 0 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j ?| ARRAY['public','disabled']; - count -------- - 337 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j ?& ARRAY['public','disabled']; - count -------- - 42 -(1 row) - -CREATE INDEX jidx ON testjsonb USING gin (j); -SET enable_seqscan = off; -SELECT count(*) FROM testjsonb WHERE j @> '{"wait":null}'; - count -------- - 1 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"wait":"CC"}'; - count -------- - 15 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"wait":"CC", "public":true}'; - count -------- - 2 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"age":25}'; - count -------- - 2 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"age":25.0}'; - count -------- - 2 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"array":["foo"]}'; - count -------- - 3 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"array":["bar"]}'; - count -------- - 3 -(1 row) - --- excercise GIN_SEARCH_MODE_ALL -SELECT count(*) FROM testjsonb WHERE j @> '{}'; - count -------- - 1012 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j ? 'public'; - count -------- - 194 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j ? 'bar'; - count -------- - 0 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j ?| ARRAY['public','disabled']; - count -------- - 337 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j ?& ARRAY['public','disabled']; - count -------- - 42 -(1 row) - --- array exists - array elements should behave as keys (for GIN index scans too) -CREATE INDEX jidx_array ON testjsonb USING gin((j->'array')); -SELECT count(*) from testjsonb WHERE j->'array' ? 'bar'; - count -------- - 3 -(1 row) - --- type sensitive array exists - should return no rows (since "exists" only --- matches strings that are either object keys or array elements) -SELECT count(*) from testjsonb WHERE j->'array' ? '5'::text; - count -------- - 0 -(1 row) - --- However, a raw scalar is *contained* within the array -SELECT count(*) from testjsonb WHERE j->'array' @> '5'::jsonb; - count -------- - 1 -(1 row) - -RESET enable_seqscan; -SELECT count(*) FROM (SELECT (jsonb_each(j)).key FROM testjsonb) AS wow; - count -------- - 4791 -(1 row) - -SELECT key, count(*) FROM (SELECT (jsonb_each(j)).key FROM testjsonb) AS wow GROUP BY key ORDER BY count DESC, key; - key | count ------------+------- - line | 884 - query | 207 - pos | 203 - node | 202 - space | 197 - status | 195 - public | 194 - title | 190 - wait | 190 - org | 189 - user | 189 - coauthors | 188 - disabled | 185 - indexed | 184 - cleaned | 180 - bad | 179 - date | 179 - world | 176 - state | 172 - subtitle | 169 - auth | 168 - abstract | 161 - array | 5 - age | 2 - foo | 2 - fool | 1 -(26 rows) - --- sort/hash -SELECT count(distinct j) FROM testjsonb; - count -------- - 894 -(1 row) - -SET enable_hashagg = off; -SELECT count(*) FROM (SELECT j FROM (SELECT * FROM testjsonb UNION ALL SELECT * FROM testjsonb) js GROUP BY j) js2; - count -------- - 894 -(1 row) - -SET enable_hashagg = on; -SET enable_sort = off; -SELECT count(*) FROM (SELECT j FROM (SELECT * FROM testjsonb UNION ALL SELECT * FROM testjsonb) js GROUP BY j) js2; - count -------- - 894 -(1 row) - -SELECT distinct * FROM (values (jsonb '{}' || ''::text),('{}')) v(j); - j ----- - {} -(1 row) - -SET enable_sort = on; -RESET enable_hashagg; -RESET enable_sort; -DROP INDEX jidx; -DROP INDEX jidx_array; --- btree -CREATE INDEX jidx ON testjsonb USING btree (j); -SET enable_seqscan = off; -SELECT count(*) FROM testjsonb WHERE j > '{"p":1}'; - count -------- - 884 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j = '{"pos":98, "line":371, "node":"CBA", "indexed":true}'; - count -------- - 1 -(1 row) - ---gin path opclass -DROP INDEX jidx; -CREATE INDEX jidx ON testjsonb USING gin (j jsonb_path_ops); -SET enable_seqscan = off; -SELECT count(*) FROM testjsonb WHERE j @> '{"wait":null}'; - count -------- - 1 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"wait":"CC"}'; - count -------- - 15 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"wait":"CC", "public":true}'; - count -------- - 2 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"age":25}'; - count -------- - 2 -(1 row) - -SELECT count(*) FROM testjsonb WHERE j @> '{"age":25.0}'; - count -------- - 2 -(1 row) - --- excercise GIN_SEARCH_MODE_ALL -SELECT count(*) FROM testjsonb WHERE j @> '{}'; - count -------- - 1012 -(1 row) - -RESET enable_seqscan; -DROP INDEX jidx; --- nested tests -SELECT '{"ff":{"a":12,"b":16}}'::jsonb; - jsonb ----------------------------- - {"ff": {"a": 12, "b": 16}} -(1 row) - -SELECT '{"ff":{"a":12,"b":16},"qq":123}'::jsonb; - jsonb ---------------------------------------- - {"ff": {"a": 12, "b": 16}, "qq": 123} -(1 row) - -SELECT '{"aa":["a","aaa"],"qq":{"a":12,"b":16,"c":["c1","c2"],"d":{"d1":"d1","d2":"d2","d1":"d3"}}}'::jsonb; - jsonb --------------------------------------------------------------------------------------------------- - {"aa": ["a", "aaa"], "qq": {"a": 12, "b": 16, "c": ["c1", "c2"], "d": {"d1": "d3", "d2": "d2"}}} -(1 row) - -SELECT '{"aa":["a","aaa"],"qq":{"a":"12","b":"16","c":["c1","c2"],"d":{"d1":"d1","d2":"d2"}}}'::jsonb; - jsonb ------------------------------------------------------------------------------------------------------- - {"aa": ["a", "aaa"], "qq": {"a": "12", "b": "16", "c": ["c1", "c2"], "d": {"d1": "d1", "d2": "d2"}}} -(1 row) - -SELECT '{"aa":["a","aaa"],"qq":{"a":"12","b":"16","c":["c1","c2",["c3"],{"c4":4}],"d":{"d1":"d1","d2":"d2"}}}'::jsonb; - jsonb -------------------------------------------------------------------------------------------------------------------------- - {"aa": ["a", "aaa"], "qq": {"a": "12", "b": "16", "c": ["c1", "c2", ["c3"], {"c4": 4}], "d": {"d1": "d1", "d2": "d2"}}} -(1 row) - -SELECT '{"ff":["a","aaa"]}'::jsonb; - jsonb ----------------------- - {"ff": ["a", "aaa"]} -(1 row) - -SELECT - '{"ff":{"a":12,"b":16},"qq":123,"x":[1,2],"Y":null}'::jsonb -> 'ff', - '{"ff":{"a":12,"b":16},"qq":123,"x":[1,2],"Y":null}'::jsonb -> 'qq', - ('{"ff":{"a":12,"b":16},"qq":123,"x":[1,2],"Y":null}'::jsonb -> 'Y') IS NULL AS f, - ('{"ff":{"a":12,"b":16},"qq":123,"x":[1,2],"Y":null}'::jsonb ->> 'Y') IS NULL AS t, - '{"ff":{"a":12,"b":16},"qq":123,"x":[1,2],"Y":null}'::jsonb -> 'x'; - ?column? | ?column? | f | t | ?column? ---------------------+----------+---+---+---------- - {"a": 12, "b": 16} | 123 | f | t | [1, 2] -(1 row) - --- nested containment -SELECT '{"a":[1,2],"c":"b"}'::jsonb @> '{"a":[1,2]}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":[2,1],"c":"b"}'::jsonb @> '{"a":[1,2]}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":{"1":2},"c":"b"}'::jsonb @> '{"a":[1,2]}'; - ?column? ----------- - f -(1 row) - -SELECT '{"a":{"2":1},"c":"b"}'::jsonb @> '{"a":[1,2]}'; - ?column? ----------- - f -(1 row) - -SELECT '{"a":{"1":2},"c":"b"}'::jsonb @> '{"a":{"1":2}}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":{"2":1},"c":"b"}'::jsonb @> '{"a":{"1":2}}'; - ?column? ----------- - f -(1 row) - -SELECT '["a","b"]'::jsonb @> '["a","b","c","b"]'; - ?column? ----------- - f -(1 row) - -SELECT '["a","b","c","b"]'::jsonb @> '["a","b"]'; - ?column? ----------- - t -(1 row) - -SELECT '["a","b","c",[1,2]]'::jsonb @> '["a",[1,2]]'; - ?column? ----------- - t -(1 row) - -SELECT '["a","b","c",[1,2]]'::jsonb @> '["b",[1,2]]'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":[1,2],"c":"b"}'::jsonb @> '{"a":[1]}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":[1,2],"c":"b"}'::jsonb @> '{"a":[2]}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":[1,2],"c":"b"}'::jsonb @> '{"a":[3]}'; - ?column? ----------- - f -(1 row) - -SELECT '{"a":[1,2,{"c":3,"x":4}],"c":"b"}'::jsonb @> '{"a":[{"c":3}]}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":[1,2,{"c":3,"x":4}],"c":"b"}'::jsonb @> '{"a":[{"x":4}]}'; - ?column? ----------- - t -(1 row) - -SELECT '{"a":[1,2,{"c":3,"x":4}],"c":"b"}'::jsonb @> '{"a":[{"x":4},3]}'; - ?column? ----------- - f -(1 row) - -SELECT '{"a":[1,2,{"c":3,"x":4}],"c":"b"}'::jsonb @> '{"a":[{"x":4},1]}'; - ?column? ----------- - t -(1 row) - --- nested object field / array index lookup -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb -> 'n'; - ?column? ----------- - null -(1 row) - -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb -> 'a'; - ?column? ----------- - 1 -(1 row) - -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb -> 'b'; - ?column? ----------- - [1, 2] -(1 row) - -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb -> 'c'; - ?column? ----------- - {"1": 2} -(1 row) - -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb -> 'd'; - ?column? ---------------- - {"1": [2, 3]} -(1 row) - -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb -> 'd' -> '1'; - ?column? ----------- - [2, 3] -(1 row) - -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb -> 'e'; - ?column? ----------- - -(1 row) - -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb -> 0; --expecting error - ?column? ----------- - -(1 row) - -SELECT '["a","b","c",[1,2],null]'::jsonb -> 0; - ?column? ----------- - "a" -(1 row) - -SELECT '["a","b","c",[1,2],null]'::jsonb -> 1; - ?column? ----------- - "b" -(1 row) - -SELECT '["a","b","c",[1,2],null]'::jsonb -> 2; - ?column? ----------- - "c" -(1 row) - -SELECT '["a","b","c",[1,2],null]'::jsonb -> 3; - ?column? ----------- - [1, 2] -(1 row) - -SELECT '["a","b","c",[1,2],null]'::jsonb -> 3 -> 1; - ?column? ----------- - 2 -(1 row) - -SELECT '["a","b","c",[1,2],null]'::jsonb -> 4; - ?column? ----------- - null -(1 row) - -SELECT '["a","b","c",[1,2],null]'::jsonb -> 5; - ?column? ----------- - -(1 row) - -SELECT '["a","b","c",[1,2],null]'::jsonb -> -1; - ?column? ----------- - -(1 row) - ---nested path extraction -SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{0}'; - ?column? ----------- - -(1 row) - -SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{a}'; - ?column? ----------- - "b" -(1 row) - -SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c}'; - ?column? ------------ - [1, 2, 3] -(1 row) - -SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,0}'; - ?column? ----------- - 1 -(1 row) - -SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,1}'; - ?column? ----------- - 2 -(1 row) - -SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,2}'; - ?column? ----------- - 3 -(1 row) - -SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,3}'; - ?column? ----------- - -(1 row) - -SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,-1}'; - ?column? ----------- - -(1 row) - -SELECT '[0,1,2,[3,4],{"5":"five"}]'::jsonb #> '{0}'; - ?column? ----------- - 0 -(1 row) - -SELECT '[0,1,2,[3,4],{"5":"five"}]'::jsonb #> '{3}'; - ?column? ----------- - [3, 4] -(1 row) - -SELECT '[0,1,2,[3,4],{"5":"five"}]'::jsonb #> '{4}'; - ?column? ---------------- - {"5": "five"} -(1 row) - -SELECT '[0,1,2,[3,4],{"5":"five"}]'::jsonb #> '{4,5}'; - ?column? ----------- - "five" -(1 row) - ---nested exists -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb ? 'n'; - ?column? ----------- - t -(1 row) - -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb ? 'a'; - ?column? ----------- - t -(1 row) - -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb ? 'b'; - ?column? ----------- - t -(1 row) - -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb ? 'c'; - ?column? ----------- - t -(1 row) - -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb ? 'd'; - ?column? ----------- - t -(1 row) - -SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb ? 'e'; - ?column? ----------- - f -(1 row) - --- jsonb_strip_nulls -select jsonb_strip_nulls(null); - jsonb_strip_nulls -------------------- - -(1 row) - -select jsonb_strip_nulls('1'); - jsonb_strip_nulls -------------------- - 1 -(1 row) - -select jsonb_strip_nulls('"a string"'); - jsonb_strip_nulls -------------------- - "a string" -(1 row) - -select jsonb_strip_nulls('null'); - jsonb_strip_nulls -------------------- - null -(1 row) - -select jsonb_strip_nulls('[1,2,null,3,4]'); - jsonb_strip_nulls --------------------- - [1, 2, null, 3, 4] -(1 row) - -select jsonb_strip_nulls('{"a":1,"b":null,"c":[2,null,3],"d":{"e":4,"f":null}}'); - jsonb_strip_nulls --------------------------------------------- - {"a": 1, "c": [2, null, 3], "d": {"e": 4}} -(1 row) - -select jsonb_strip_nulls('[1,{"a":1,"b":null,"c":2},3]'); - jsonb_strip_nulls --------------------------- - [1, {"a": 1, "c": 2}, 3] -(1 row) - --- an empty object is not null and should not be stripped -select jsonb_strip_nulls('{"a": {"b": null, "c": null}, "d": {} }'); - jsonb_strip_nulls --------------------- - {"a": {}, "d": {}} -(1 row) - -select jsonb_pretty('{"a": "test", "b": [1, 2, 3], "c": "test3", "d":{"dd": "test4", "dd2":{"ddd": "test5"}}}'); - jsonb_pretty ----------------------------- - { + - "a": "test", + - "b": [ + - 1, + - 2, + - 3 + - ], + - "c": "test3", + - "d": { + - "dd": "test4", + - "dd2": { + - "ddd": "test5"+ - } + - } + - } -(1 row) - -select jsonb_pretty('[{"f1":1,"f2":null},2,null,[[{"x":true},6,7],8],3]'); - jsonb_pretty ---------------------------- - [ + - { + - "f1": 1, + - "f2": null + - }, + - 2, + - null, + - [ + - [ + - { + - "x": true+ - }, + - 6, + - 7 + - ], + - 8 + - ], + - 3 + - ] -(1 row) - -select jsonb_pretty('{"a":["b", "c"], "d": {"e":"f"}}'); - jsonb_pretty ------------------- - { + - "a": [ + - "b", + - "c" + - ], + - "d": { + - "e": "f"+ - } + - } -(1 row) - -select jsonb_concat('{"d": "test", "a": [1, 2]}', '{"g": "test2", "c": {"c1":1, "c2":2}}'); - jsonb_concat -------------------------------------------------------------------- - {"a": [1, 2], "c": {"c1": 1, "c2": 2}, "d": "test", "g": "test2"} -(1 row) - -select '{"aa":1 , "b":2, "cq":3}'::jsonb || '{"cq":"l", "b":"g", "fg":false}'; - ?column? ---------------------------------------------- - {"b": "g", "aa": 1, "cq": "l", "fg": false} -(1 row) - -select '{"aa":1 , "b":2, "cq":3}'::jsonb || '{"aq":"l"}'; - ?column? ---------------------------------------- - {"b": 2, "aa": 1, "aq": "l", "cq": 3} -(1 row) - -select '{"aa":1 , "b":2, "cq":3}'::jsonb || '{"aa":"l"}'; - ?column? ------------------------------- - {"b": 2, "aa": "l", "cq": 3} -(1 row) - -select '{"aa":1 , "b":2, "cq":3}'::jsonb || '{}'; - ?column? ----------------------------- - {"b": 2, "aa": 1, "cq": 3} -(1 row) - -select '["a", "b"]'::jsonb || '["c"]'; - ?column? ------------------ - ["a", "b", "c"] -(1 row) - -select '["a", "b"]'::jsonb || '["c", "d"]'; - ?column? ----------------------- - ["a", "b", "c", "d"] -(1 row) - -select '["c"]' || '["a", "b"]'::jsonb; - ?column? ------------------ - ["c", "a", "b"] -(1 row) - -select '["a", "b"]'::jsonb || '"c"'; - ?column? ------------------ - ["a", "b", "c"] -(1 row) - -select '"c"' || '["a", "b"]'::jsonb; - ?column? ------------------ - ["c", "a", "b"] -(1 row) - -select '"a"'::jsonb || '{"a":1}'; -ERROR: invalid concatenation of jsonb objects -select '{"a":1}' || '"a"'::jsonb; -ERROR: invalid concatenation of jsonb objects -select '["a", "b"]'::jsonb || '{"c":1}'; - ?column? ----------------------- - ["a", "b", {"c": 1}] -(1 row) - -select '{"c": 1}'::jsonb || '["a", "b"]'; - ?column? ----------------------- - [{"c": 1}, "a", "b"] -(1 row) - -select '{}'::jsonb || '{"cq":"l", "b":"g", "fg":false}'; - ?column? ------------------------------------- - {"b": "g", "cq": "l", "fg": false} -(1 row) - -select pg_column_size('{}'::jsonb || '{}'::jsonb) = pg_column_size('{}'::jsonb); - ?column? ----------- - t -(1 row) - -select pg_column_size('{"aa":1}'::jsonb || '{"b":2}'::jsonb) = pg_column_size('{"aa":1, "b":2}'::jsonb); - ?column? ----------- - t -(1 row) - -select pg_column_size('{"aa":1, "b":2}'::jsonb || '{}'::jsonb) = pg_column_size('{"aa":1, "b":2}'::jsonb); - ?column? ----------- - t -(1 row) - -select pg_column_size('{}'::jsonb || '{"aa":1, "b":2}'::jsonb) = pg_column_size('{"aa":1, "b":2}'::jsonb); - ?column? ----------- - t -(1 row) - -select jsonb_delete('{"a":1 , "b":2, "c":3}'::jsonb, 'a'); - jsonb_delete ------------------- - {"b": 2, "c": 3} -(1 row) - -select jsonb_delete('{"a":null , "b":2, "c":3}'::jsonb, 'a'); - jsonb_delete ------------------- - {"b": 2, "c": 3} -(1 row) - -select jsonb_delete('{"a":1 , "b":2, "c":3}'::jsonb, 'b'); - jsonb_delete ------------------- - {"a": 1, "c": 3} -(1 row) - -select jsonb_delete('{"a":1 , "b":2, "c":3}'::jsonb, 'c'); - jsonb_delete ------------------- - {"a": 1, "b": 2} -(1 row) - -select jsonb_delete('{"a":1 , "b":2, "c":3}'::jsonb, 'd'); - jsonb_delete --------------------------- - {"a": 1, "b": 2, "c": 3} -(1 row) - -select '{"a":1 , "b":2, "c":3}'::jsonb - 'a'; - ?column? ------------------- - {"b": 2, "c": 3} -(1 row) - -select '{"a":null , "b":2, "c":3}'::jsonb - 'a'; - ?column? ------------------- - {"b": 2, "c": 3} -(1 row) - -select '{"a":1 , "b":2, "c":3}'::jsonb - 'b'; - ?column? ------------------- - {"a": 1, "c": 3} -(1 row) - -select '{"a":1 , "b":2, "c":3}'::jsonb - 'c'; - ?column? ------------------- - {"a": 1, "b": 2} -(1 row) - -select '{"a":1 , "b":2, "c":3}'::jsonb - 'd'; - ?column? --------------------------- - {"a": 1, "b": 2, "c": 3} -(1 row) - -select pg_column_size('{"a":1 , "b":2, "c":3}'::jsonb - 'b') = pg_column_size('{"a":1, "b":2}'::jsonb); - ?column? ----------- - t -(1 row) - -select '["a","b","c"]'::jsonb - 3; - ?column? ------------------ - ["a", "b", "c"] -(1 row) - -select '["a","b","c"]'::jsonb - 2; - ?column? ------------- - ["a", "b"] -(1 row) - -select '["a","b","c"]'::jsonb - 1; - ?column? ------------- - ["a", "c"] -(1 row) - -select '["a","b","c"]'::jsonb - 0; - ?column? ------------- - ["b", "c"] -(1 row) - -select '["a","b","c"]'::jsonb - -1; - ?column? ------------- - ["a", "b"] -(1 row) - -select '["a","b","c"]'::jsonb - -2; - ?column? ------------- - ["a", "c"] -(1 row) - -select '["a","b","c"]'::jsonb - -3; - ?column? ------------- - ["b", "c"] -(1 row) - -select '["a","b","c"]'::jsonb - -4; - ?column? ------------------ - ["a", "b", "c"] -(1 row) - -select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{n}', '[1,2,3]'); - jsonb_set --------------------------------------------------------------------------- - {"a": 1, "b": [1, 2], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": [1, 2, 3]} -(1 row) - -select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{b,-1}', '[1,2,3]'); - jsonb_set ------------------------------------------------------------------------------ - {"a": 1, "b": [1, [1, 2, 3]], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": null} -(1 row) - -select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{d,1,0}', '[1,2,3]'); - jsonb_set ------------------------------------------------------------------------------ - {"a": 1, "b": [1, 2], "c": {"1": 2}, "d": {"1": [[1, 2, 3], 3]}, "n": null} -(1 row) - -select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{d,NULL,0}', '[1,2,3]'); - jsonb_set ---------------------------------------------------------------------- - {"a": 1, "b": [1, 2], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": null} -(1 row) - -select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{n}', '{"1": 2}'); - jsonb_set -------------------------------------------------------------------------- - {"a": 1, "b": [1, 2], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": {"1": 2}} -(1 row) - -select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{b,-1}', '{"1": 2}'); - jsonb_set ----------------------------------------------------------------------------- - {"a": 1, "b": [1, {"1": 2}], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": null} -(1 row) - -select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{d,1,0}', '{"1": 2}'); - jsonb_set ----------------------------------------------------------------------------- - {"a": 1, "b": [1, 2], "c": {"1": 2}, "d": {"1": [{"1": 2}, 3]}, "n": null} -(1 row) - -select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{d,NULL,0}', '{"1": 2}'); - jsonb_set ---------------------------------------------------------------------- - {"a": 1, "b": [1, 2], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": null} -(1 row) - -select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{b,-1}', '"test"'); - jsonb_set --------------------------------------------------------------------------- - {"a": 1, "b": [1, "test"], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": null} -(1 row) - -select jsonb_set('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb, '{b,-1}', '{"f": "test"}'); - jsonb_set ---------------------------------------------------------------------------------- - {"a": 1, "b": [1, {"f": "test"}], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": null} -(1 row) - -select jsonb_delete_path('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}', '{n}'); - jsonb_delete_path ----------------------------------------------------------- - {"a": 1, "b": [1, 2], "c": {"1": 2}, "d": {"1": [2, 3]}} -(1 row) - -select jsonb_delete_path('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}', '{b,-1}'); - jsonb_delete_path ------------------------------------------------------------------- - {"a": 1, "b": [1], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": null} -(1 row) - -select jsonb_delete_path('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}', '{d,1,0}'); - jsonb_delete_path ------------------------------------------------------------------- - {"a": 1, "b": [1, 2], "c": {"1": 2}, "d": {"1": [3]}, "n": null} -(1 row) - -select '{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb #- '{n}'; - ?column? ----------------------------------------------------------- - {"a": 1, "b": [1, 2], "c": {"1": 2}, "d": {"1": [2, 3]}} -(1 row) - -select '{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb #- '{b,-1}'; - ?column? ------------------------------------------------------------------- - {"a": 1, "b": [1], "c": {"1": 2}, "d": {"1": [2, 3]}, "n": null} -(1 row) - -select '{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb #- '{d,1,0}'; - ?column? ------------------------------------------------------------------- - {"a": 1, "b": [1, 2], "c": {"1": 2}, "d": {"1": [3]}, "n": null} -(1 row) - --- empty structure and error conditions for delete and replace -select '"a"'::jsonb - 'a'; -- error -ERROR: cannot delete from scalar -select '{}'::jsonb - 'a'; - ?column? ----------- - {} -(1 row) - -select '[]'::jsonb - 'a'; - ?column? ----------- - [] -(1 row) - -select '"a"'::jsonb - 1; -- error -ERROR: cannot delete from scalar -select '{}'::jsonb - 1; -- error -ERROR: cannot delete from object using integer subscript -select '[]'::jsonb - 1; - ?column? ----------- - [] -(1 row) - -select '"a"'::jsonb #- '{a}'; -- error -ERROR: cannot delete path in scalar -select '{}'::jsonb #- '{a}'; - ?column? ----------- - {} -(1 row) - -select '[]'::jsonb #- '{a}'; - ?column? ----------- - [] -(1 row) - -select jsonb_set('"a"','{a}','"b"'); --error -ERROR: cannot set path in scalar -select jsonb_set('{}','{a}','"b"', false); - jsonb_set ------------ - {} -(1 row) - -select jsonb_set('[]','{1}','"b"', false); - jsonb_set ------------ - [] -(1 row) - --- jsonb_set adding instead of replacing --- prepend to array -select jsonb_set('{"a":1,"b":[0,1,2],"c":{"d":4}}','{b,-33}','{"foo":123}'); - jsonb_set -------------------------------------------------------- - {"a": 1, "b": [{"foo": 123}, 0, 1, 2], "c": {"d": 4}} -(1 row) - --- append to array -select jsonb_set('{"a":1,"b":[0,1,2],"c":{"d":4}}','{b,33}','{"foo":123}'); - jsonb_set -------------------------------------------------------- - {"a": 1, "b": [0, 1, 2, {"foo": 123}], "c": {"d": 4}} -(1 row) - --- check nesting levels addition -select jsonb_set('{"a":1,"b":[4,5,[0,1,2],6,7],"c":{"d":4}}','{b,2,33}','{"foo":123}'); - jsonb_set ---------------------------------------------------------------------- - {"a": 1, "b": [4, 5, [0, 1, 2, {"foo": 123}], 6, 7], "c": {"d": 4}} -(1 row) - --- add new key -select jsonb_set('{"a":1,"b":[0,1,2],"c":{"d":4}}','{c,e}','{"foo":123}'); - jsonb_set ------------------------------------------------------------- - {"a": 1, "b": [0, 1, 2], "c": {"d": 4, "e": {"foo": 123}}} -(1 row) - --- adding doesn't do anything if elements before last aren't present -select jsonb_set('{"a":1,"b":[0,1,2],"c":{"d":4}}','{x,-33}','{"foo":123}'); - jsonb_set ------------------------------------------ - {"a": 1, "b": [0, 1, 2], "c": {"d": 4}} -(1 row) - -select jsonb_set('{"a":1,"b":[0,1,2],"c":{"d":4}}','{x,y}','{"foo":123}'); - jsonb_set ------------------------------------------ - {"a": 1, "b": [0, 1, 2], "c": {"d": 4}} -(1 row) - --- add to empty object -select jsonb_set('{}','{x}','{"foo":123}'); - jsonb_set ---------------------- - {"x": {"foo": 123}} -(1 row) - ---add to empty array -select jsonb_set('[]','{0}','{"foo":123}'); - jsonb_set ----------------- - [{"foo": 123}] -(1 row) - -select jsonb_set('[]','{99}','{"foo":123}'); - jsonb_set ----------------- - [{"foo": 123}] -(1 row) - -select jsonb_set('[]','{-99}','{"foo":123}'); - jsonb_set ----------------- - [{"foo": 123}] -(1 row) - diff --git a/src/test/regress/expected/matview.out b/src/test/regress/expected/matview.out index eb13ea75fb023..91c0957f0c379 100644 --- a/src/test/regress/expected/matview.out +++ b/src/test/regress/expected/matview.out @@ -411,7 +411,7 @@ REFRESH MATERIALIZED VIEW mv; ERROR: could not create unique index "mv_a_idx" DETAIL: Key (a)=(1) is duplicated. REFRESH MATERIALIZED VIEW CONCURRENTLY mv; -ERROR: new data for "mv" contains duplicate rows without any null columns +ERROR: new data for materialized view "mv" contains duplicate rows without any null columns DETAIL: Row: (1,10) DROP TABLE foo CASCADE; NOTICE: drop cascades to materialized view mv diff --git a/src/test/regress/expected/numeric.out b/src/test/regress/expected/numeric.out index 9d6814564df96..394cc72b64522 100644 --- a/src/test/regress/expected/numeric.out +++ b/src/test/regress/expected/numeric.out @@ -1309,6 +1309,33 @@ SELECT * FROM num_input_test; NaN (7 rows) +-- +-- Test some corner cases for multiplication +-- +select 4790999999999999999999999999999999999999999999999999999999999999999999999999999999999999 * 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; + ?column? +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 47909999999999999999999999999999999999999999999999999999999999999999999999999999999999985209000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +(1 row) + +select 4789999999999999999999999999999999999999999999999999999999999999999999999999999999999999 * 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; + ?column? +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 47899999999999999999999999999999999999999999999999999999999999999999999999999999999999985210000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +(1 row) + +select 4770999999999999999999999999999999999999999999999999999999999999999999999999999999999999 * 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; + ?column? +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 47709999999999999999999999999999999999999999999999999999999999999999999999999999999999985229000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +(1 row) + +select 4769999999999999999999999999999999999999999999999999999999999999999999999999999999999999 * 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; + ?column? +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 47699999999999999999999999999999999999999999999999999999999999999999999999999999999999985230000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +(1 row) + -- -- Test some corner cases for division -- diff --git a/src/test/regress/expected/oidjoins.out b/src/test/regress/expected/oidjoins.out index bee76ce8f275c..d85bc83e11e4e 100644 --- a/src/test/regress/expected/oidjoins.out +++ b/src/test/regress/expected/oidjoins.out @@ -545,6 +545,30 @@ WHERE extnamespace != 0 AND ------+-------------- (0 rows) +SELECT ctid, fdwowner +FROM pg_catalog.pg_foreign_data_wrapper fk +WHERE fdwowner != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_authid pk WHERE pk.oid = fk.fdwowner); + ctid | fdwowner +------+---------- +(0 rows) + +SELECT ctid, srvowner +FROM pg_catalog.pg_foreign_server fk +WHERE srvowner != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_authid pk WHERE pk.oid = fk.srvowner); + ctid | srvowner +------+---------- +(0 rows) + +SELECT ctid, srvfdw +FROM pg_catalog.pg_foreign_server fk +WHERE srvfdw != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_foreign_data_wrapper pk WHERE pk.oid = fk.srvfdw); + ctid | srvfdw +------+-------- +(0 rows) + SELECT ctid, indexrelid FROM pg_catalog.pg_index fk WHERE indexrelid != 0 AND @@ -609,6 +633,22 @@ WHERE lanvalidator != 0 AND ------+-------------- (0 rows) +SELECT ctid, loid +FROM pg_catalog.pg_largeobject fk +WHERE loid != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_largeobject_metadata pk WHERE pk.oid = fk.loid); + ctid | loid +------+------ +(0 rows) + +SELECT ctid, lomowner +FROM pg_catalog.pg_largeobject_metadata fk +WHERE lomowner != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_authid pk WHERE pk.oid = fk.lomowner); + ctid | lomowner +------+---------- +(0 rows) + SELECT ctid, nspowner FROM pg_catalog.pg_namespace fk WHERE nspowner != 0 AND @@ -945,6 +985,38 @@ WHERE spcowner != 0 AND ------+---------- (0 rows) +SELECT ctid, trftype +FROM pg_catalog.pg_transform fk +WHERE trftype != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type pk WHERE pk.oid = fk.trftype); + ctid | trftype +------+--------- +(0 rows) + +SELECT ctid, trflang +FROM pg_catalog.pg_transform fk +WHERE trflang != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_language pk WHERE pk.oid = fk.trflang); + ctid | trflang +------+--------- +(0 rows) + +SELECT ctid, trffromsql +FROM pg_catalog.pg_transform fk +WHERE trffromsql != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_proc pk WHERE pk.oid = fk.trffromsql); + ctid | trffromsql +------+------------ +(0 rows) + +SELECT ctid, trftosql +FROM pg_catalog.pg_transform fk +WHERE trftosql != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_proc pk WHERE pk.oid = fk.trftosql); + ctid | trftosql +------+---------- +(0 rows) + SELECT ctid, tgrelid FROM pg_catalog.pg_trigger fk WHERE tgrelid != 0 AND diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out index 7ce5415f053a0..7fd85ba4ceabb 100644 --- a/src/test/regress/expected/plpgsql.out +++ b/src/test/regress/expected/plpgsql.out @@ -2011,7 +2011,7 @@ NOTICE: caught numeric_value_out_of_range or cardinality_violation (1 row) create temp table foo (f1 int); -create function blockme() returns int as $$ +create function subxact_rollback_semantics() returns int as $$ declare x int; begin x := 1; @@ -2019,28 +2019,20 @@ begin begin x := x + 1; insert into foo values(x); - -- we assume this will take longer than 2 seconds: - select count(*) into x from tenk1 a, tenk1 b, tenk1 c; + raise exception 'inner'; exception when others then - raise notice 'caught others?'; - return -1; - when query_canceled then - raise notice 'nyeah nyeah, can''t stop me'; x := x * 10; end; insert into foo values(x); return x; end$$ language plpgsql; -set statement_timeout to 2000; -select blockme(); -NOTICE: nyeah nyeah, can't stop me - blockme ---------- - 20 +select subxact_rollback_semantics(); + subxact_rollback_semantics +---------------------------- + 20 (1 row) -reset statement_timeout; select * from foo; f1 ---- @@ -2049,6 +2041,28 @@ select * from foo; (2 rows) drop table foo; +create function trap_timeout() returns void as $$ +begin + declare x int; + begin + -- we assume this will take longer than 2 seconds: + select count(*) into x from tenk1 a, tenk1 b, tenk1 c; + exception + when others then + raise notice 'caught others?'; + when query_canceled then + raise notice 'nyeah nyeah, can''t stop me'; + end; + -- Abort transaction to abandon the statement_timeout setting. Otherwise, + -- the next top-level statement would be vulnerable to the timeout. + raise exception 'end of function'; +end$$ language plpgsql; +begin; +set statement_timeout to 2000; +select trap_timeout(); +NOTICE: nyeah nyeah, can't stop me +ERROR: end of function +rollback; -- Test for pass-by-ref values being stored in proper context create function test_variable_storage() returns text as $$ declare x text; @@ -3115,7 +3129,7 @@ begin end$$ language plpgsql; select footest(); ERROR: query returned no rows -CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE statement +CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE create or replace function footest() returns void as $$ declare x record; begin @@ -3125,7 +3139,7 @@ begin end$$ language plpgsql; select footest(); ERROR: query returned more than one row -CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE statement +CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE drop function footest(); -- test printing parameters after failure due to STRICT set plpgsql.print_strict_params to true; @@ -3177,7 +3191,7 @@ end$$ language plpgsql; select footest(); ERROR: query returned no rows DETAIL: parameters: $1 = '0', $2 = 'foo' -CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE statement +CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE create or replace function footest() returns void as $$ declare x record; begin @@ -3188,7 +3202,7 @@ end$$ language plpgsql; select footest(); ERROR: query returned more than one row DETAIL: parameters: $1 = '1' -CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE statement +CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE create or replace function footest() returns void as $$ declare x record; begin @@ -3198,7 +3212,7 @@ begin end$$ language plpgsql; select footest(); ERROR: query returned more than one row -CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE statement +CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE create or replace function footest() returns void as $$ -- override the global #print_strict_params off @@ -4237,7 +4251,7 @@ end; $$ language plpgsql; select stacked_diagnostics_test(); ERROR: GET STACKED DIAGNOSTICS cannot be used outside an exception handler -CONTEXT: PL/pgSQL function stacked_diagnostics_test() line 6 at GET DIAGNOSTICS +CONTEXT: PL/pgSQL function stacked_diagnostics_test() line 6 at GET STACKED DIAGNOSTICS drop function zero_divide(); drop function stacked_diagnostics_test(); -- check cases where implicit SQLSTATE variable could be confused with @@ -4702,6 +4716,75 @@ select error2('public.stuffs'); rollback; drop function error2(p_name_table text); drop function error1(text); +-- Test for proper handling of cast-expression caching +create function sql_to_date(integer) returns date as $$ +select $1::text::date +$$ language sql immutable strict; +create cast (integer as date) with function sql_to_date(integer) as assignment; +create function cast_invoker(integer) returns date as $$ +begin + return $1; +end$$ language plpgsql; +select cast_invoker(20150717); + cast_invoker +-------------- + 07-17-2015 +(1 row) + +select cast_invoker(20150718); -- second call crashed in pre-release 9.5 + cast_invoker +-------------- + 07-18-2015 +(1 row) + +begin; +select cast_invoker(20150717); + cast_invoker +-------------- + 07-17-2015 +(1 row) + +select cast_invoker(20150718); + cast_invoker +-------------- + 07-18-2015 +(1 row) + +savepoint s1; +select cast_invoker(20150718); + cast_invoker +-------------- + 07-18-2015 +(1 row) + +select cast_invoker(-1); -- fails +ERROR: invalid input syntax for type date: "-1" +CONTEXT: SQL function "sql_to_date" statement 1 +PL/pgSQL function cast_invoker(integer) while casting return value to function's return type +rollback to savepoint s1; +select cast_invoker(20150719); + cast_invoker +-------------- + 07-19-2015 +(1 row) + +select cast_invoker(20150720); + cast_invoker +-------------- + 07-20-2015 +(1 row) + +commit; +drop function cast_invoker(integer); +drop function sql_to_date(integer) cascade; +NOTICE: drop cascades to cast from integer to date +-- Test handling of cast cache inside DO blocks +-- (to check the original crash case, this must be a cast not previously +-- used in this session) +begin; +do $$ declare x text[]; begin x := '{1.23, 4.56}'::numeric[]; end $$; +do $$ declare x text[]; begin x := '{1.23, 4.56}'::numeric[]; end $$; +end; -- Test for consistent reporting of error context create function fail() returns int language plpgsql as $$ begin diff --git a/src/test/regress/expected/prepared_xacts.out b/src/test/regress/expected/prepared_xacts.out index c0b08649e8d8b..ef7034b588487 100644 --- a/src/test/regress/expected/prepared_xacts.out +++ b/src/test/regress/expected/prepared_xacts.out @@ -194,10 +194,11 @@ SELECT gid FROM pg_prepared_xacts; (2 rows) -- pxtest3 should be locked because of the pending DROP +begin; set statement_timeout to 2000; SELECT * FROM pxtest3; ERROR: canceling statement due to statement timeout -reset statement_timeout; +rollback; -- Disconnect, we will continue testing in a different backend \c - -- There should still be two prepared transactions @@ -209,10 +210,11 @@ SELECT gid FROM pg_prepared_xacts; (2 rows) -- pxtest3 should still be locked because of the pending DROP +begin; set statement_timeout to 2000; SELECT * FROM pxtest3; ERROR: canceling statement due to statement timeout -reset statement_timeout; +rollback; -- Commit table creation COMMIT PREPARED 'regress-one'; \d pxtest2 diff --git a/src/test/regress/expected/prepared_xacts_1.out b/src/test/regress/expected/prepared_xacts_1.out index 898f278c11ed8..5078bf6ba9877 100644 --- a/src/test/regress/expected/prepared_xacts_1.out +++ b/src/test/regress/expected/prepared_xacts_1.out @@ -198,13 +198,14 @@ SELECT gid FROM pg_prepared_xacts; (0 rows) -- pxtest3 should be locked because of the pending DROP +begin; set statement_timeout to 2000; SELECT * FROM pxtest3; fff ----- (0 rows) -reset statement_timeout; +rollback; -- Disconnect, we will continue testing in a different backend \c - -- There should still be two prepared transactions @@ -214,13 +215,14 @@ SELECT gid FROM pg_prepared_xacts; (0 rows) -- pxtest3 should still be locked because of the pending DROP +begin; set statement_timeout to 2000; SELECT * FROM pxtest3; fff ----- (0 rows) -reset statement_timeout; +rollback; -- Commit table creation COMMIT PREPARED 'regress-one'; ERROR: prepared transaction with identifier "regress-one" does not exist diff --git a/src/test/regress/expected/privileges.out b/src/test/regress/expected/privileges.out index 64a93309ebcea..c0cd9fac46896 100644 --- a/src/test/regress/expected/privileges.out +++ b/src/test/regress/expected/privileges.out @@ -1569,3 +1569,86 @@ DROP USER regressuser4; DROP USER regressuser5; DROP USER regressuser6; ERROR: role "regressuser6" does not exist +-- permissions with LOCK TABLE +CREATE USER locktable_user; +CREATE TABLE lock_table (a int); +-- LOCK TABLE and SELECT permission +GRANT SELECT ON lock_table TO locktable_user; +SET SESSION AUTHORIZATION locktable_user; +BEGIN; +LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should fail +ERROR: permission denied for relation lock_table +ROLLBACK; +BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should pass +COMMIT; +BEGIN; +LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should fail +ERROR: permission denied for relation lock_table +ROLLBACK; +\c +REVOKE SELECT ON lock_table FROM locktable_user; +-- LOCK TABLE and INSERT permission +GRANT INSERT ON lock_table TO locktable_user; +SET SESSION AUTHORIZATION locktable_user; +BEGIN; +LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass +COMMIT; +BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail +ERROR: permission denied for relation lock_table +ROLLBACK; +BEGIN; +LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should fail +ERROR: permission denied for relation lock_table +ROLLBACK; +\c +REVOKE INSERT ON lock_table FROM locktable_user; +-- LOCK TABLE and UPDATE permission +GRANT UPDATE ON lock_table TO locktable_user; +SET SESSION AUTHORIZATION locktable_user; +BEGIN; +LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass +COMMIT; +BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail +ERROR: permission denied for relation lock_table +ROLLBACK; +BEGIN; +LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass +COMMIT; +\c +REVOKE UPDATE ON lock_table FROM locktable_user; +-- LOCK TABLE and DELETE permission +GRANT DELETE ON lock_table TO locktable_user; +SET SESSION AUTHORIZATION locktable_user; +BEGIN; +LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass +COMMIT; +BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail +ERROR: permission denied for relation lock_table +ROLLBACK; +BEGIN; +LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass +COMMIT; +\c +REVOKE DELETE ON lock_table FROM locktable_user; +-- LOCK TABLE and TRUNCATE permission +GRANT TRUNCATE ON lock_table TO locktable_user; +SET SESSION AUTHORIZATION locktable_user; +BEGIN; +LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass +COMMIT; +BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail +ERROR: permission denied for relation lock_table +ROLLBACK; +BEGIN; +LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass +COMMIT; +\c +REVOKE TRUNCATE ON lock_table FROM locktable_user; +-- clean up +DROP TABLE lock_table; +DROP USER locktable_user; diff --git a/src/test/regress/expected/regex.out b/src/test/regress/expected/regex.out index 497ddcd4677be..be151858a3884 100644 --- a/src/test/regress/expected/regex.out +++ b/src/test/regress/expected/regex.out @@ -153,6 +153,14 @@ explain (costs off) select * from pg_proc where proname ~ '^(abc)?d'; Filter: (proname ~ '^(abc)?d'::text) (2 rows) +explain (costs off) select * from pg_proc where proname ~ '^abcd(x|(?=\w\w)q)'; + QUERY PLAN +------------------------------------------------------------------------ + Index Scan using pg_proc_proname_args_nsp_index on pg_proc + Index Cond: ((proname >= 'abcd'::name) AND (proname < 'abce'::name)) + Filter: (proname ~ '^abcd(x|(?=\w\w)q)'::text) +(3 rows) + -- Test for infinite loop in pullback() (CVE-2007-4772) select 'a' ~ '($|^)*'; ?column? @@ -160,6 +168,62 @@ select 'a' ~ '($|^)*'; t (1 row) +-- These cases expose a bug in the original fix for CVE-2007-4772 +select 'a' ~ '(^)+^'; + ?column? +---------- + t +(1 row) + +select 'a' ~ '$($$)+'; + ?column? +---------- + t +(1 row) + +-- More cases of infinite loop in pullback(), not fixed by CVE-2007-4772 fix +select 'a' ~ '($^)+'; + ?column? +---------- + f +(1 row) + +select 'a' ~ '(^$)*'; + ?column? +---------- + t +(1 row) + +select 'aa bb cc' ~ '(^(?!aa))+'; + ?column? +---------- + f +(1 row) + +select 'aa x' ~ '(^(?!aa)(?!bb)(?!cc))+'; + ?column? +---------- + f +(1 row) + +select 'bb x' ~ '(^(?!aa)(?!bb)(?!cc))+'; + ?column? +---------- + f +(1 row) + +select 'cc x' ~ '(^(?!aa)(?!bb)(?!cc))+'; + ?column? +---------- + f +(1 row) + +select 'dd x' ~ '(^(?!aa)(?!bb)(?!cc))+'; + ?column? +---------- + t +(1 row) + -- Test for infinite loop in fixempties() (Tcl bugs 3604074, 3606683) select 'a' ~ '((((((a)*)*)*)*)*)*'; ?column? @@ -173,6 +237,41 @@ select 'a' ~ '((((((a+|)+|)+|)+|)+|)+|)'; t (1 row) +-- These cases used to give too-many-states failures +select 'x' ~ 'abcd(\m)+xyz'; + ?column? +---------- + f +(1 row) + +select 'a' ~ '^abcd*(((((^(a c(e?d)a+|)+|)+|)+|)+|a)+|)'; + ?column? +---------- + f +(1 row) + +select 'x' ~ 'a^(^)bcd*xy(((((($a+|)+|)+|)+$|)+|)+|)^$'; + ?column? +---------- + f +(1 row) + +select 'x' ~ 'xyz(\Y\Y)+'; + ?column? +---------- + f +(1 row) + +select 'x' ~ 'x|(?:\M)+'; + ?column? +---------- + t +(1 row) + +-- This generates O(N) states but O(N^2) arcs, so it causes problems +-- if arc count is not constrained +select 'x' ~ repeat('x*y*z*', 1000); +ERROR: invalid regular expression: regular expression is too complex -- Test backref in combination with non-greedy quantifier -- https://core.tcl.tk/tcl/tktview/6585b21ca8fa6f3678d442b97241fdd43dba2ec0 select 'Programmer' ~ '(\w).*?\1' as t; @@ -196,3 +295,29 @@ select regexp_matches('foo/bar/baz', {foo,bar,baz} (1 row) +-- Test for infinite loop in cfindloop with zero-length possible match +-- but no actual match (can only happen in the presence of backrefs) +select 'a' ~ '$()|^\1'; + ?column? +---------- + f +(1 row) + +select 'a' ~ '.. ()|\1'; + ?column? +---------- + f +(1 row) + +select 'a' ~ '()*\1'; + ?column? +---------- + t +(1 row) + +select 'a' ~ '()+\1'; + ?column? +---------- + t +(1 row) + diff --git a/src/test/regress/expected/roleattributes.out b/src/test/regress/expected/roleattributes.out new file mode 100644 index 0000000000000..aa5f42abf43e3 --- /dev/null +++ b/src/test/regress/expected/roleattributes.out @@ -0,0 +1,249 @@ +-- default for superuser is false +CREATE ROLE test_def_superuser; +SELECT * FROM pg_authid WHERE rolname = 'test_def_superuser'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +--------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_def_superuser | f | t | f | f | f | f | f | -1 | | +(1 row) + +CREATE ROLE test_superuser WITH SUPERUSER; +SELECT * FROM pg_authid WHERE rolname = 'test_superuser'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +----------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_superuser | t | t | f | f | f | f | f | -1 | | +(1 row) + +ALTER ROLE test_superuser WITH NOSUPERUSER; +SELECT * FROM pg_authid WHERE rolname = 'test_superuser'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +----------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_superuser | f | t | f | f | f | f | f | -1 | | +(1 row) + +ALTER ROLE test_superuser WITH SUPERUSER; +SELECT * FROM pg_authid WHERE rolname = 'test_superuser'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +----------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_superuser | t | t | f | f | f | f | f | -1 | | +(1 row) + +-- default for inherit is true +CREATE ROLE test_def_inherit; +SELECT * FROM pg_authid WHERE rolname = 'test_def_inherit'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_def_inherit | f | t | f | f | f | f | f | -1 | | +(1 row) + +CREATE ROLE test_inherit WITH NOINHERIT; +SELECT * FROM pg_authid WHERE rolname = 'test_inherit'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +--------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_inherit | f | f | f | f | f | f | f | -1 | | +(1 row) + +ALTER ROLE test_inherit WITH INHERIT; +SELECT * FROM pg_authid WHERE rolname = 'test_inherit'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +--------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_inherit | f | t | f | f | f | f | f | -1 | | +(1 row) + +ALTER ROLE test_inherit WITH NOINHERIT; +SELECT * FROM pg_authid WHERE rolname = 'test_inherit'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +--------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_inherit | f | f | f | f | f | f | f | -1 | | +(1 row) + +-- default for create role is false +CREATE ROLE test_def_createrole; +SELECT * FROM pg_authid WHERE rolname = 'test_def_createrole'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +---------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_def_createrole | f | t | f | f | f | f | f | -1 | | +(1 row) + +CREATE ROLE test_createrole WITH CREATEROLE; +SELECT * FROM pg_authid WHERE rolname = 'test_createrole'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +-----------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_createrole | f | t | t | f | f | f | f | -1 | | +(1 row) + +ALTER ROLE test_createrole WITH NOCREATEROLE; +SELECT * FROM pg_authid WHERE rolname = 'test_createrole'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +-----------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_createrole | f | t | f | f | f | f | f | -1 | | +(1 row) + +ALTER ROLE test_createrole WITH CREATEROLE; +SELECT * FROM pg_authid WHERE rolname = 'test_createrole'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +-----------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_createrole | f | t | t | f | f | f | f | -1 | | +(1 row) + +-- default for create database is false +CREATE ROLE test_def_createdb; +SELECT * FROM pg_authid WHERE rolname = 'test_def_createdb'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +-------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_def_createdb | f | t | f | f | f | f | f | -1 | | +(1 row) + +CREATE ROLE test_createdb WITH CREATEDB; +SELECT * FROM pg_authid WHERE rolname = 'test_createdb'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +---------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_createdb | f | t | f | t | f | f | f | -1 | | +(1 row) + +ALTER ROLE test_createdb WITH NOCREATEDB; +SELECT * FROM pg_authid WHERE rolname = 'test_createdb'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +---------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_createdb | f | t | f | f | f | f | f | -1 | | +(1 row) + +ALTER ROLE test_createdb WITH CREATEDB; +SELECT * FROM pg_authid WHERE rolname = 'test_createdb'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +---------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_createdb | f | t | f | t | f | f | f | -1 | | +(1 row) + +-- default for can login is false for role +CREATE ROLE test_def_role_canlogin; +SELECT * FROM pg_authid WHERE rolname = 'test_def_role_canlogin'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +------------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_def_role_canlogin | f | t | f | f | f | f | f | -1 | | +(1 row) + +CREATE ROLE test_role_canlogin WITH LOGIN; +SELECT * FROM pg_authid WHERE rolname = 'test_role_canlogin'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +--------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_role_canlogin | f | t | f | f | t | f | f | -1 | | +(1 row) + +ALTER ROLE test_role_canlogin WITH NOLOGIN; +SELECT * FROM pg_authid WHERE rolname = 'test_role_canlogin'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +--------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_role_canlogin | f | t | f | f | f | f | f | -1 | | +(1 row) + +ALTER ROLE test_role_canlogin WITH LOGIN; +SELECT * FROM pg_authid WHERE rolname = 'test_role_canlogin'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +--------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_role_canlogin | f | t | f | f | t | f | f | -1 | | +(1 row) + +-- default for can login is true for user +CREATE USER test_def_user_canlogin; +SELECT * FROM pg_authid WHERE rolname = 'test_def_user_canlogin'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +------------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_def_user_canlogin | f | t | f | f | t | f | f | -1 | | +(1 row) + +CREATE USER test_user_canlogin WITH NOLOGIN; +SELECT * FROM pg_authid WHERE rolname = 'test_user_canlogin'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +--------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_user_canlogin | f | t | f | f | f | f | f | -1 | | +(1 row) + +ALTER USER test_user_canlogin WITH LOGIN; +SELECT * FROM pg_authid WHERE rolname = 'test_user_canlogin'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +--------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_user_canlogin | f | t | f | f | t | f | f | -1 | | +(1 row) + +ALTER USER test_user_canlogin WITH NOLOGIN; +SELECT * FROM pg_authid WHERE rolname = 'test_user_canlogin'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +--------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_user_canlogin | f | t | f | f | f | f | f | -1 | | +(1 row) + +-- default for replication is false +CREATE ROLE test_def_replication; +SELECT * FROM pg_authid WHERE rolname = 'test_def_replication'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +----------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_def_replication | f | t | f | f | f | f | f | -1 | | +(1 row) + +CREATE ROLE test_replication WITH REPLICATION; +SELECT * FROM pg_authid WHERE rolname = 'test_replication'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_replication | f | t | f | f | f | t | f | -1 | | +(1 row) + +ALTER ROLE test_replication WITH NOREPLICATION; +SELECT * FROM pg_authid WHERE rolname = 'test_replication'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_replication | f | t | f | f | f | f | f | -1 | | +(1 row) + +ALTER ROLE test_replication WITH REPLICATION; +SELECT * FROM pg_authid WHERE rolname = 'test_replication'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_replication | f | t | f | f | f | t | f | -1 | | +(1 row) + +-- default for bypassrls is false +CREATE ROLE test_def_bypassrls; +SELECT * FROM pg_authid WHERE rolname = 'test_def_bypassrls'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +--------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_def_bypassrls | f | t | f | f | f | f | f | -1 | | +(1 row) + +CREATE ROLE test_bypassrls WITH BYPASSRLS; +SELECT * FROM pg_authid WHERE rolname = 'test_bypassrls'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +----------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_bypassrls | f | t | f | f | f | f | t | -1 | | +(1 row) + +ALTER ROLE test_bypassrls WITH NOBYPASSRLS; +SELECT * FROM pg_authid WHERE rolname = 'test_bypassrls'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +----------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_bypassrls | f | t | f | f | f | f | f | -1 | | +(1 row) + +ALTER ROLE test_bypassrls WITH BYPASSRLS; +SELECT * FROM pg_authid WHERE rolname = 'test_bypassrls'; + rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil +----------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------+--------------- + test_bypassrls | f | t | f | f | f | f | t | -1 | | +(1 row) + +-- clean up roles +DROP ROLE test_def_superuser; +DROP ROLE test_superuser; +DROP ROLE test_def_inherit; +DROP ROLE test_inherit; +DROP ROLE test_def_createrole; +DROP ROLE test_createrole; +DROP ROLE test_def_createdb; +DROP ROLE test_createdb; +DROP ROLE test_def_role_canlogin; +DROP ROLE test_role_canlogin; +DROP USER test_def_user_canlogin; +DROP USER test_user_canlogin; +DROP ROLE test_def_replication; +DROP ROLE test_replication; +DROP ROLE test_def_bypassrls; +DROP ROLE test_bypassrls; diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out index 0ae555783bdb2..1d8609f35275b 100644 --- a/src/test/regress/expected/rowsecurity.out +++ b/src/test/regress/expected/rowsecurity.out @@ -101,15 +101,17 @@ NOTICE: f_leak => great manga 44 | 8 | 1 | rls_regress_user2 | great manga | manga (4 rows) -SELECT * FROM document TABLESAMPLE BERNOULLI (50) REPEATABLE(1) WHERE f_leak(dtitle) ORDER BY did; -NOTICE: f_leak => my first novel +-- try a sampled version +SELECT * FROM document TABLESAMPLE BERNOULLI(50) REPEATABLE(0) + WHERE f_leak(dtitle) ORDER BY did; NOTICE: f_leak => my first manga NOTICE: f_leak => great science fiction +NOTICE: f_leak => great manga did | cid | dlevel | dauthor | dtitle -----+-----+--------+-------------------+----------------------- - 1 | 11 | 1 | rls_regress_user1 | my first novel 4 | 44 | 1 | rls_regress_user1 | my first manga 6 | 22 | 1 | rls_regress_user2 | great science fiction + 8 | 44 | 1 | rls_regress_user2 | great manga (3 rows) -- viewpoint from rls_regress_user2 @@ -156,20 +158,20 @@ NOTICE: f_leak => great manga 44 | 8 | 1 | rls_regress_user2 | great manga | manga (8 rows) -SELECT * FROM document TABLESAMPLE BERNOULLI (50) REPEATABLE(1) WHERE f_leak(dtitle) ORDER BY did; -NOTICE: f_leak => my first novel -NOTICE: f_leak => my second novel +-- try a sampled version +SELECT * FROM document TABLESAMPLE BERNOULLI(50) REPEATABLE(0) + WHERE f_leak(dtitle) ORDER BY did; NOTICE: f_leak => my first manga +NOTICE: f_leak => my second manga NOTICE: f_leak => great science fiction -NOTICE: f_leak => great technology book +NOTICE: f_leak => great manga did | cid | dlevel | dauthor | dtitle -----+-----+--------+-------------------+----------------------- - 1 | 11 | 1 | rls_regress_user1 | my first novel - 2 | 11 | 2 | rls_regress_user1 | my second novel 4 | 44 | 1 | rls_regress_user1 | my first manga + 5 | 44 | 2 | rls_regress_user1 | my second manga 6 | 22 | 1 | rls_regress_user2 | great science fiction - 7 | 33 | 2 | rls_regress_user2 | great technology book -(5 rows) + 8 | 44 | 1 | rls_regress_user2 | great manga +(4 rows) EXPLAIN (COSTS OFF) SELECT * FROM document WHERE f_leak(dtitle); QUERY PLAN @@ -305,7 +307,7 @@ SELECT * FROM document d FULL OUTER JOIN category c on d.cid = c.cid; DELETE FROM category WHERE cid = 33; -- fails with FK violation ERROR: update or delete on table "category" violates foreign key constraint "document_cid_fkey" on table "document" -DETAIL: Key (cid)=(33) is still referenced from table "document". +DETAIL: Key is still referenced from table "document". -- can insert FK referencing invisible PK SET SESSION AUTHORIZATION rls_regress_user2; SELECT * FROM document d FULL OUTER JOIN category c on d.cid = c.cid; @@ -328,9 +330,9 @@ SELECT * FROM document WHERE did = 8; -- and confirm we can't see it -- RLS policies are checked before constraints INSERT INTO document VALUES (8, 44, 1, 'rls_regress_user2', 'my third manga'); -- Should fail with RLS check violation, not duplicate key violation -ERROR: new row violates row level security policy for "document" +ERROR: new row violates row-level security policy for table "document" UPDATE document SET did = 8, dauthor = 'rls_regress_user2' WHERE did = 5; -- Should fail with RLS check violation, not duplicate key violation -ERROR: new row violates row level security policy for "document" +ERROR: new row violates row-level security policy for table "document" -- database superuser does bypass RLS policy when enabled RESET SESSION AUTHORIZATION; SET row_security TO ON; @@ -357,19 +359,6 @@ SELECT * FROM category; 44 | manga (4 rows) --- database superuser does not bypass RLS policy when FORCE enabled. -RESET SESSION AUTHORIZATION; -SET row_security TO FORCE; -SELECT * FROM document; - did | cid | dlevel | dauthor | dtitle ------+-----+--------+---------+-------- -(0 rows) - -SELECT * FROM category; - cid | cname ------+------- -(0 rows) - -- database superuser does bypass RLS policy when disabled RESET SESSION AUTHORIZATION; SET row_security TO OFF; @@ -422,19 +411,6 @@ SELECT * FROM category; 44 | manga (4 rows) --- RLS policy applies to table owner when FORCE enabled. -SET SESSION AUTHORIZATION rls_regress_user0; -SET row_security TO FORCE; -SELECT * FROM document; - did | cid | dlevel | dauthor | dtitle ------+-----+--------+---------+-------- -(0 rows) - -SELECT * FROM category; - cid | cname ------+------- -(0 rows) - -- RLS policy does not apply to table owner when RLS enabled. SET SESSION AUTHORIZATION rls_regress_user0; SET row_security TO ON; @@ -664,6 +640,26 @@ EXPLAIN (COSTS OFF) SELECT * FROM t1 WHERE f_leak(b) FOR SHARE; Filter: ((a % 2) = 0) (12 rows) +-- union all query +SELECT a, b, oid FROM t2 UNION ALL SELECT a, b, oid FROM t3; + a | b | oid +---+-----+----- + 1 | abc | 201 + 3 | cde | 203 + 1 | xxx | 301 + 2 | yyy | 302 + 3 | zzz | 303 +(5 rows) + +EXPLAIN (COSTS OFF) SELECT a, b, oid FROM t2 UNION ALL SELECT a, b, oid FROM t3; + QUERY PLAN +------------------------------- + Append + -> Seq Scan on t2 + Filter: ((a % 2) = 1) + -> Seq Scan on t3 +(4 rows) + -- superuser is allowed to bypass RLS checks RESET SESSION AUTHORIZATION; SET row_security TO OFF; @@ -1457,9 +1453,9 @@ NOTICE: f_leak => d3d9446802a44259755d38e6d163e820 (5 rows) INSERT INTO bv1 VALUES (-1, 'xxx'); -- should fail view WCO -ERROR: new row violates row level security policy for "b1" +ERROR: new row violates row-level security policy for table "b1" INSERT INTO bv1 VALUES (11, 'xxx'); -- should fail RLS check -ERROR: new row violates row level security policy for "b1" +ERROR: new row violates row-level security policy for table "b1" INSERT INTO bv1 VALUES (12, 'xxx'); -- ok EXPLAIN (COSTS OFF) UPDATE bv1 SET b = 'yyy' WHERE a = 4 AND f_leak(b); QUERY PLAN @@ -1538,7 +1534,7 @@ SELECT * FROM document WHERE did = 2; -- alternative UPDATE path happens to be taken): INSERT INTO document VALUES (2, (SELECT cid from category WHERE cname = 'novel'), 1, 'rls_regress_user2', 'my first novel') ON CONFLICT (did) DO UPDATE SET dtitle = EXCLUDED.dtitle, dauthor = EXCLUDED.dauthor; -ERROR: new row violates row level security policy for "document" +ERROR: new row violates row-level security policy for table "document" -- Violates USING qual for UPDATE policy p3. -- -- UPDATE path is taken, but UPDATE fails purely because *existing* row to be @@ -1547,7 +1543,7 @@ ERROR: new row violates row level security policy for "document" INSERT INTO document VALUES (33, 22, 1, 'rls_regress_user1', 'okay science fiction'); -- preparation for next statement INSERT INTO document VALUES (33, (SELECT cid from category WHERE cname = 'novel'), 1, 'rls_regress_user1', 'Some novel, replaces sci-fi') -- takes UPDATE path ON CONFLICT (did) DO UPDATE SET dtitle = EXCLUDED.dtitle; -ERROR: new row violates row level security policy (USING expression) for "document" +ERROR: new row violates row-level security policy (USING expression) for table "document" -- Fine (we UPDATE, since INSERT WCOs and UPDATE security barrier quals + WCOs -- not violated): INSERT INTO document VALUES (2, (SELECT cid from category WHERE cname = 'novel'), 1, 'rls_regress_user1', 'my first novel') @@ -1578,7 +1574,7 @@ INSERT INTO document VALUES (78, (SELECT cid from category WHERE cname = 'novel' -- passing quals: INSERT INTO document VALUES (78, (SELECT cid from category WHERE cname = 'novel'), 1, 'rls_regress_user1', 'some technology novel') ON CONFLICT (did) DO UPDATE SET dtitle = EXCLUDED.dtitle, cid = 33 RETURNING *; -ERROR: new row violates row level security policy (USING expression) for "document" +ERROR: new row violates row-level security policy (USING expression) for table "document" -- Don't fail just because INSERT doesn't satisfy WITH CHECK option that -- originated as a barrier/USING() qual from the UPDATE. Note that the UPDATE -- path *isn't* taken, and so UPDATE-related policy does not apply: @@ -1595,7 +1591,7 @@ INSERT INTO document VALUES (79, (SELECT cid from category WHERE cname = 'techno -- irrelevant, in fact. INSERT INTO document VALUES (79, (SELECT cid from category WHERE cname = 'technology'), 1, 'rls_regress_user1', 'technology book, can only insert') ON CONFLICT (did) DO UPDATE SET dtitle = EXCLUDED.dtitle RETURNING *; -ERROR: new row violates row level security policy (USING expression) for "document" +ERROR: new row violates row-level security policy (USING expression) for table "document" -- Test default USING qual enforced as WCO SET SESSION AUTHORIZATION rls_regress_user0; DROP POLICY p1 ON document; @@ -1617,14 +1613,14 @@ SET SESSION AUTHORIZATION rls_regress_user1; -- UPDATE to make this fail: INSERT INTO document VALUES (79, (SELECT cid from category WHERE cname = 'technology'), 1, 'rls_regress_user1', 'technology book, can only insert') ON CONFLICT (did) DO UPDATE SET dtitle = EXCLUDED.dtitle RETURNING *; -ERROR: new row violates row level security policy for "document" +ERROR: new row violates row-level security policy for table "document" -- UPDATE path is taken here. Existing tuple passes, since it's cid -- corresponds to "novel", but default USING qual is enforced against -- post-UPDATE tuple too (as always when updating with a policy that lacks an -- explicit WCO), and so this fails: INSERT INTO document VALUES (2, (SELECT cid from category WHERE cname = 'technology'), 1, 'rls_regress_user1', 'my first novel') ON CONFLICT (did) DO UPDATE SET cid = EXCLUDED.cid, dtitle = EXCLUDED.dtitle RETURNING *; -ERROR: new row violates row level security policy for "document" +ERROR: new row violates row-level security policy for table "document" SET SESSION AUTHORIZATION rls_regress_user0; DROP POLICY p3_with_default ON document; -- @@ -1638,16 +1634,16 @@ SET SESSION AUTHORIZATION rls_regress_user1; -- Fails, since ALL WCO is enforced in insert path: INSERT INTO document VALUES (80, (SELECT cid from category WHERE cname = 'novel'), 1, 'rls_regress_user2', 'my first novel') ON CONFLICT (did) DO UPDATE SET dtitle = EXCLUDED.dtitle, cid = 33; -ERROR: new row violates row level security policy for "document" +ERROR: new row violates row-level security policy for table "document" -- Fails, since ALL policy USING qual is enforced (existing, target tuple is in -- violation, since it has the "manga" cid): INSERT INTO document VALUES (4, (SELECT cid from category WHERE cname = 'novel'), 1, 'rls_regress_user1', 'my first novel') ON CONFLICT (did) DO UPDATE SET dtitle = EXCLUDED.dtitle; -ERROR: new row violates row level security policy (USING expression) for "document" +ERROR: new row violates row-level security policy (USING expression) for table "document" -- Fails, since ALL WCO are enforced: INSERT INTO document VALUES (1, (SELECT cid from category WHERE cname = 'novel'), 1, 'rls_regress_user1', 'my first novel') ON CONFLICT (did) DO UPDATE SET dauthor = 'rls_regress_user2'; -ERROR: new row violates row level security policy for "document" +ERROR: new row violates row-level security policy for table "document" -- -- ROLE/GROUP -- @@ -1958,8 +1954,6 @@ NOTICE: f_leak => fgh_updt (6 rows) DELETE FROM x1 WHERE f_leak(b) RETURNING *; -NOTICE: f_leak => abc_updt -NOTICE: f_leak => efg_updt NOTICE: f_leak => cde_updt NOTICE: f_leak => fgh_updt NOTICE: f_leak => bcd_updt_updt @@ -1968,15 +1962,13 @@ NOTICE: f_leak => fgh_updt_updt NOTICE: f_leak => fgh_updt_updt a | b | c ---+---------------+------------------- - 1 | abc_updt | rls_regress_user1 - 5 | efg_updt | rls_regress_user1 3 | cde_updt | rls_regress_user2 7 | fgh_updt | rls_regress_user2 2 | bcd_updt_updt | rls_regress_user1 4 | def_updt_updt | rls_regress_user2 6 | fgh_updt_updt | rls_regress_user1 8 | fgh_updt_updt | rls_regress_user2 -(8 rows) +(6 rows) -- -- Duplicate Policy Names @@ -1988,7 +1980,7 @@ GRANT ALL ON y1, y2 TO rls_regress_user1; CREATE POLICY p1 ON y1 FOR ALL USING (a % 2 = 0); CREATE POLICY p2 ON y1 FOR SELECT USING (a > 2); CREATE POLICY p1 ON y1 FOR SELECT USING (a % 2 = 1); --fail -ERROR: policy "p1" for relation "y1" already exists +ERROR: policy "p1" for table "y1" already exists CREATE POLICY p1 ON y2 FOR ALL USING (a % 2 = 0); --OK ALTER TABLE y1 ENABLE ROW LEVEL SECURITY; ALTER TABLE y2 ENABLE ROW LEVEL SECURITY; @@ -2122,7 +2114,7 @@ EXPLAIN (COSTS OFF) SELECT * FROM y2 WHERE f_leak('abc'); (2 rows) CREATE TABLE test_qual_pushdown ( - abc text + abc text ); INSERT INTO test_qual_pushdown VALUES ('abc'),('def'); SELECT * FROM y2 JOIN test_qual_pushdown ON (b = abc) WHERE f_leak(abc); @@ -2257,7 +2249,7 @@ EXPLAIN (COSTS OFF) WITH cte1 AS (SELECT * FROM t1 WHERE f_leak(b)) SELECT * FRO (6 rows) WITH cte1 AS (UPDATE t1 SET a = a + 1 RETURNING *) SELECT * FROM cte1; --fail -ERROR: new row violates row level security policy for "t1" +ERROR: new row violates row-level security policy for table "t1" WITH cte1 AS (UPDATE t1 SET a = a RETURNING *) SELECT * FROM cte1; --ok a | b ----+---------------------------------- @@ -2275,7 +2267,7 @@ WITH cte1 AS (UPDATE t1 SET a = a RETURNING *) SELECT * FROM cte1; --ok (11 rows) WITH cte1 AS (INSERT INTO t1 VALUES (21, 'Fail') RETURNING *) SELECT * FROM cte1; --fail -ERROR: new row violates row level security policy for "t1" +ERROR: new row violates row-level security policy for table "t1" WITH cte1 AS (INSERT INTO t1 VALUES (20, 'Success') RETURNING *) SELECT * FROM cte1; --ok a | b ----+--------- @@ -2514,35 +2506,6 @@ EXPLAIN (COSTS OFF) SELECT * FROM t1; Seq Scan on t1 (1 row) --- Check that default deny does apply to superuser when RLS force. -SET row_security TO FORCE; -RESET SESSION AUTHORIZATION; -SELECT * FROM t1; - a | b ----+--- -(0 rows) - -EXPLAIN (COSTS OFF) SELECT * FROM t1; - QUERY PLAN --------------------------- - Result - One-Time Filter: false -(2 rows) - --- Check that default deny does apply to table owner when RLS force. -SET SESSION AUTHORIZATION rls_regress_user0; -SELECT * FROM t1; - a | b ----+--- -(0 rows) - -EXPLAIN (COSTS OFF) SELECT * FROM t1; - QUERY PLAN --------------------------- - Result - One-Time Filter: false -(2 rows) - -- Check that default deny applies to non-owner/non-superuser when RLS on. SET SESSION AUTHORIZATION rls_regress_user1; SET row_security TO ON; @@ -2610,14 +2573,6 @@ COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; 8,c9f0f895fb98ab9159f51fd0297e236d 9,45c48cce2e2d7fbdea1afc51c7c6ad26 10,d3d9446802a44259755d38e6d163e820 -SET row_security TO FORCE; -COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; -0,cfcd208495d565ef66e7dff9f98764da -2,c81e728d9d4c2f636f067f89cc14862c -4,a87ff679a2f3e71d9181a67b7542122c -6,1679091c5a880faf6fb5e6087eb1b2dc -8,c9f0f895fb98ab9159f51fd0297e236d -10,d3d9446802a44259755d38e6d163e820 -- Check COPY TO as user with permissions. SET SESSION AUTHORIZATION rls_regress_user1; SET row_security TO OFF; @@ -2631,14 +2586,6 @@ COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --ok 6,1679091c5a880faf6fb5e6087eb1b2dc 8,c9f0f895fb98ab9159f51fd0297e236d 10,d3d9446802a44259755d38e6d163e820 -SET row_security TO FORCE; -COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --ok -0,cfcd208495d565ef66e7dff9f98764da -2,c81e728d9d4c2f636f067f89cc14862c -4,a87ff679a2f3e71d9181a67b7542122c -6,1679091c5a880faf6fb5e6087eb1b2dc -8,c9f0f895fb98ab9159f51fd0297e236d -10,d3d9446802a44259755d38e6d163e820 -- Check COPY TO as user with permissions and BYPASSRLS SET SESSION AUTHORIZATION rls_regress_exempt_user; SET row_security TO OFF; @@ -2657,20 +2604,17 @@ COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --ok SET row_security TO ON; COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --ok 0,cfcd208495d565ef66e7dff9f98764da +1,c4ca4238a0b923820dcc509a6f75849b 2,c81e728d9d4c2f636f067f89cc14862c +3,eccbc87e4b5ce2fe28308fd9f2a7baf3 4,a87ff679a2f3e71d9181a67b7542122c +5,e4da3b7fbbce2345d7772b0674a318d5 6,1679091c5a880faf6fb5e6087eb1b2dc +7,8f14e45fceea167a5a36dedd4bea2543 8,c9f0f895fb98ab9159f51fd0297e236d +9,45c48cce2e2d7fbdea1afc51c7c6ad26 10,d3d9446802a44259755d38e6d163e820 -SET row_security TO FORCE; -COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --ok -0,cfcd208495d565ef66e7dff9f98764da -2,c81e728d9d4c2f636f067f89cc14862c -4,a87ff679a2f3e71d9181a67b7542122c -6,1679091c5a880faf6fb5e6087eb1b2dc -8,c9f0f895fb98ab9159f51fd0297e236d -10,d3d9446802a44259755d38e6d163e820 --- Check COPY TO as user without permissions.SET row_security TO OFF; +-- Check COPY TO as user without permissions. SET row_security TO OFF; SET SESSION AUTHORIZATION rls_regress_user2; SET row_security TO OFF; COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --fail - insufficient to bypass rls @@ -2678,19 +2622,51 @@ ERROR: insufficient privilege to bypass row security. SET row_security TO ON; COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --fail - permission denied ERROR: permission denied for relation copy_t -SET row_security TO FORCE; -COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --fail - permission denied -ERROR: permission denied for relation copy_t +-- Check COPY relation TO; keep it just one row to avoid reordering issues +RESET SESSION AUTHORIZATION; +SET row_security TO ON; +CREATE TABLE copy_rel_to (a integer, b text); +CREATE POLICY p1 ON copy_rel_to USING (a % 2 = 0); +ALTER TABLE copy_rel_to ENABLE ROW LEVEL SECURITY; +GRANT ALL ON copy_rel_to TO rls_regress_user1, rls_regress_exempt_user; +INSERT INTO copy_rel_to VALUES (1, md5('1')); +-- Check COPY TO as Superuser/owner. +RESET SESSION AUTHORIZATION; +SET row_security TO OFF; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; +1,c4ca4238a0b923820dcc509a6f75849b +SET row_security TO ON; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; +1,c4ca4238a0b923820dcc509a6f75849b +-- Check COPY TO as user with permissions. +SET SESSION AUTHORIZATION rls_regress_user1; +SET row_security TO OFF; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --fail - insufficient to bypass rls +ERROR: insufficient privilege to bypass row security. +SET row_security TO ON; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --ok +-- Check COPY TO as user with permissions and BYPASSRLS +SET SESSION AUTHORIZATION rls_regress_exempt_user; +SET row_security TO OFF; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --ok +1,c4ca4238a0b923820dcc509a6f75849b +SET row_security TO ON; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --ok +1,c4ca4238a0b923820dcc509a6f75849b +-- Check COPY TO as user without permissions. SET row_security TO OFF; +SET SESSION AUTHORIZATION rls_regress_user2; +SET row_security TO OFF; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --fail - permission denied +ERROR: permission denied for relation copy_rel_to +SET row_security TO ON; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --fail - permission denied +ERROR: permission denied for relation copy_rel_to -- Check COPY FROM as Superuser/owner. RESET SESSION AUTHORIZATION; SET row_security TO OFF; COPY copy_t FROM STDIN; --ok SET row_security TO ON; COPY copy_t FROM STDIN; --ok -SET row_security TO FORCE; -COPY copy_t FROM STDIN; --fail - COPY FROM not supported by RLS. -ERROR: COPY FROM not supported with row level security. -HINT: Use direct INSERT statements instead. -- Check COPY FROM as user with permissions. SET SESSION AUTHORIZATION rls_regress_user1; SET row_security TO OFF; @@ -2699,23 +2675,11 @@ ERROR: insufficient privilege to bypass row security. SET row_security TO ON; COPY copy_t FROM STDIN; --fail - COPY FROM not supported by RLS. ERROR: COPY FROM not supported with row level security. -HINT: Use direct INSERT statements instead. -SET row_security TO FORCE; -COPY copy_t FROM STDIN; --fail - COPY FROM not supported by RLS. -ERROR: COPY FROM not supported with row level security. -HINT: Use direct INSERT statements instead. --- Check COPY TO as user with permissions and BYPASSRLS +HINT: Use INSERT statements instead. +-- Check COPY FROM as user with permissions and BYPASSRLS SET SESSION AUTHORIZATION rls_regress_exempt_user; -SET row_security TO OFF; -COPY copy_t FROM STDIN; --ok SET row_security TO ON; -COPY copy_t FROM STDIN; --fail - COPY FROM not supported by RLS. -ERROR: COPY FROM not supported with row level security. -HINT: Use direct INSERT statements instead. -SET row_security TO FORCE; -COPY copy_t FROM STDIN; --fail - COPY FROM not supported by RLS. -ERROR: COPY FROM not supported with row level security. -HINT: Use direct INSERT statements instead. +COPY copy_t FROM STDIN; --ok -- Check COPY FROM as user without permissions. SET SESSION AUTHORIZATION rls_regress_user2; SET row_security TO OFF; @@ -2724,11 +2688,564 @@ ERROR: permission denied for relation copy_t SET row_security TO ON; COPY copy_t FROM STDIN; --fail - permission denied. ERROR: permission denied for relation copy_t -SET row_security TO FORCE; -COPY copy_t FROM STDIN; --fail - permission denied. -ERROR: permission denied for relation copy_t RESET SESSION AUTHORIZATION; DROP TABLE copy_t; +DROP TABLE copy_rel_to CASCADE; +-- Check WHERE CURRENT OF +SET SESSION AUTHORIZATION rls_regress_user0; +CREATE TABLE current_check (currentid int, payload text, rlsuser text); +GRANT ALL ON current_check TO PUBLIC; +INSERT INTO current_check VALUES + (1, 'abc', 'rls_regress_user1'), + (2, 'bcd', 'rls_regress_user1'), + (3, 'cde', 'rls_regress_user1'), + (4, 'def', 'rls_regress_user1'); +CREATE POLICY p1 ON current_check FOR SELECT USING (currentid % 2 = 0); +CREATE POLICY p2 ON current_check FOR DELETE USING (currentid = 4 AND rlsuser = current_user); +CREATE POLICY p3 ON current_check FOR UPDATE USING (currentid = 4) WITH CHECK (rlsuser = current_user); +ALTER TABLE current_check ENABLE ROW LEVEL SECURITY; +SET SESSION AUTHORIZATION rls_regress_user1; +-- Can SELECT even rows +SELECT * FROM current_check; + currentid | payload | rlsuser +-----------+---------+------------------- + 2 | bcd | rls_regress_user1 + 4 | def | rls_regress_user1 +(2 rows) + +-- Cannot UPDATE row 2 +UPDATE current_check SET payload = payload || '_new' WHERE currentid = 2 RETURNING *; + currentid | payload | rlsuser +-----------+---------+--------- +(0 rows) + +BEGIN; +DECLARE current_check_cursor SCROLL CURSOR FOR SELECT * FROM current_check; +-- Returns rows that can be seen according to SELECT policy, like plain SELECT +-- above (even rows) +FETCH ABSOLUTE 1 FROM current_check_cursor; + currentid | payload | rlsuser +-----------+---------+------------------- + 2 | bcd | rls_regress_user1 +(1 row) + +-- Still cannot UPDATE row 2 through cursor +UPDATE current_check SET payload = payload || '_new' WHERE CURRENT OF current_check_cursor RETURNING *; + currentid | payload | rlsuser +-----------+---------+--------- +(0 rows) + +-- Can update row 4 through cursor, which is the next visible row +FETCH RELATIVE 1 FROM current_check_cursor; + currentid | payload | rlsuser +-----------+---------+------------------- + 4 | def | rls_regress_user1 +(1 row) + +UPDATE current_check SET payload = payload || '_new' WHERE CURRENT OF current_check_cursor RETURNING *; + currentid | payload | rlsuser +-----------+---------+------------------- + 4 | def_new | rls_regress_user1 +(1 row) + +SELECT * FROM current_check; + currentid | payload | rlsuser +-----------+---------+------------------- + 2 | bcd | rls_regress_user1 + 4 | def_new | rls_regress_user1 +(2 rows) + +-- Plan should be a subquery TID scan +EXPLAIN (COSTS OFF) UPDATE current_check SET payload = payload WHERE CURRENT OF current_check_cursor; + QUERY PLAN +--------------------------------------------------------------------- + Update on current_check current_check_1 + -> Subquery Scan on current_check + -> Subquery Scan on current_check_2 + Filter: ((current_check_2.currentid % 2) = 0) + -> LockRows + -> Tid Scan on current_check current_check_3 + TID Cond: CURRENT OF current_check_cursor + Filter: (currentid = 4) +(8 rows) + +-- Similarly can only delete row 4 +FETCH ABSOLUTE 1 FROM current_check_cursor; + currentid | payload | rlsuser +-----------+---------+------------------- + 2 | bcd | rls_regress_user1 +(1 row) + +DELETE FROM current_check WHERE CURRENT OF current_check_cursor RETURNING *; + currentid | payload | rlsuser +-----------+---------+--------- +(0 rows) + +FETCH RELATIVE 1 FROM current_check_cursor; + currentid | payload | rlsuser +-----------+---------+------------------- + 4 | def | rls_regress_user1 +(1 row) + +DELETE FROM current_check WHERE CURRENT OF current_check_cursor RETURNING *; + currentid | payload | rlsuser +-----------+---------+------------------- + 4 | def_new | rls_regress_user1 +(1 row) + +SELECT * FROM current_check; + currentid | payload | rlsuser +-----------+---------+------------------- + 2 | bcd | rls_regress_user1 +(1 row) + +COMMIT; +-- +-- check pg_stats view filtering +-- +SET row_security TO ON; +SET SESSION AUTHORIZATION rls_regress_user0; +ANALYZE current_check; +-- Stats visible +SELECT row_security_active('current_check'); + row_security_active +--------------------- + f +(1 row) + +SELECT attname, most_common_vals FROM pg_stats + WHERE tablename = 'current_check' + ORDER BY 1; + attname | most_common_vals +-----------+--------------------- + currentid | + payload | + rlsuser | {rls_regress_user1} +(3 rows) + +SET SESSION AUTHORIZATION rls_regress_user1; +-- Stats not visible +SELECT row_security_active('current_check'); + row_security_active +--------------------- + t +(1 row) + +SELECT attname, most_common_vals FROM pg_stats + WHERE tablename = 'current_check' + ORDER BY 1; + attname | most_common_vals +---------+------------------ +(0 rows) + +-- +-- Collation support +-- +BEGIN; +CREATE TABLE coll_t (c) AS VALUES ('bar'::text); +CREATE POLICY coll_p ON coll_t USING (c < ('foo'::text COLLATE "C")); +ALTER TABLE coll_t ENABLE ROW LEVEL SECURITY; +GRANT SELECT ON coll_t TO rls_regress_user0; +SELECT (string_to_array(polqual, ':'))[7] AS inputcollid FROM pg_policy WHERE polrelid = 'coll_t'::regclass; + inputcollid +------------------ + inputcollid 950 +(1 row) + +SET SESSION AUTHORIZATION rls_regress_user0; +SELECT * FROM coll_t; + c +----- + bar +(1 row) + +ROLLBACK; +-- +-- Shared Object Dependencies +-- +RESET SESSION AUTHORIZATION; +BEGIN; +CREATE ROLE alice; +CREATE ROLE bob; +CREATE TABLE tbl1 (c) AS VALUES ('bar'::text); +GRANT SELECT ON TABLE tbl1 TO alice; +CREATE POLICY P ON tbl1 TO alice, bob USING (true); +SELECT refclassid::regclass, deptype + FROM pg_depend + WHERE classid = 'pg_policy'::regclass + AND refobjid = 'tbl1'::regclass; + refclassid | deptype +------------+--------- + pg_class | a +(1 row) + +SELECT refclassid::regclass, deptype + FROM pg_shdepend + WHERE classid = 'pg_policy'::regclass + AND refobjid IN ('alice'::regrole, 'bob'::regrole); + refclassid | deptype +------------+--------- + pg_authid | r + pg_authid | r +(2 rows) + +SAVEPOINT q; +DROP ROLE alice; --fails due to dependency on POLICY p +ERROR: role "alice" cannot be dropped because some objects depend on it +DETAIL: target of policy p on table tbl1 +privileges for table tbl1 +ROLLBACK TO q; +ALTER POLICY p ON tbl1 TO bob USING (true); +SAVEPOINT q; +DROP ROLE alice; --fails due to dependency on GRANT SELECT +ERROR: role "alice" cannot be dropped because some objects depend on it +DETAIL: privileges for table tbl1 +ROLLBACK TO q; +REVOKE ALL ON TABLE tbl1 FROM alice; +SAVEPOINT q; +DROP ROLE alice; --succeeds +ROLLBACK TO q; +SAVEPOINT q; +DROP ROLE bob; --fails due to dependency on POLICY p +ERROR: role "bob" cannot be dropped because some objects depend on it +DETAIL: target of policy p on table tbl1 +ROLLBACK TO q; +DROP POLICY p ON tbl1; +SAVEPOINT q; +DROP ROLE bob; -- succeeds +ROLLBACK TO q; +ROLLBACK; -- cleanup +-- +-- Converting table to view +-- +BEGIN; +CREATE TABLE t (c int); +CREATE POLICY p ON t USING (c % 2 = 1); +ALTER TABLE t ENABLE ROW LEVEL SECURITY; +SAVEPOINT q; +CREATE RULE "_RETURN" AS ON SELECT TO t DO INSTEAD + SELECT * FROM generate_series(1,5) t0(c); -- fails due to row level security enabled +ERROR: could not convert table "t" to a view because it has row security enabled +ROLLBACK TO q; +ALTER TABLE t DISABLE ROW LEVEL SECURITY; +SAVEPOINT q; +CREATE RULE "_RETURN" AS ON SELECT TO t DO INSTEAD + SELECT * FROM generate_series(1,5) t0(c); -- fails due to policy p on t +ERROR: could not convert table "t" to a view because it has row security policies +ROLLBACK TO q; +DROP POLICY p ON t; +CREATE RULE "_RETURN" AS ON SELECT TO t DO INSTEAD + SELECT * FROM generate_series(1,5) t0(c); -- succeeds +ROLLBACK; +-- +-- Policy expression handling +-- +BEGIN; +CREATE TABLE t (c) AS VALUES ('bar'::text); +CREATE POLICY p ON t USING (max(c)); -- fails: aggregate functions are not allowed in policy expressions +ERROR: aggregate functions are not allowed in policy expressions +ROLLBACK; +-- +-- Non-target relations are only subject to SELECT policies +-- +SET SESSION AUTHORIZATION rls_regress_user0; +CREATE TABLE r1 (a int); +CREATE TABLE r2 (a int); +INSERT INTO r1 VALUES (10), (20); +INSERT INTO r2 VALUES (10), (20); +GRANT ALL ON r1, r2 TO rls_regress_user1; +CREATE POLICY p1 ON r1 USING (true); +ALTER TABLE r1 ENABLE ROW LEVEL SECURITY; +CREATE POLICY p1 ON r2 FOR SELECT USING (true); +CREATE POLICY p2 ON r2 FOR INSERT WITH CHECK (false); +CREATE POLICY p3 ON r2 FOR UPDATE USING (false); +CREATE POLICY p4 ON r2 FOR DELETE USING (false); +ALTER TABLE r2 ENABLE ROW LEVEL SECURITY; +SET SESSION AUTHORIZATION rls_regress_user1; +SELECT * FROM r1; + a +---- + 10 + 20 +(2 rows) + +SELECT * FROM r2; + a +---- + 10 + 20 +(2 rows) + +-- r2 is read-only +INSERT INTO r2 VALUES (2); -- Not allowed +ERROR: new row violates row-level security policy for table "r2" +UPDATE r2 SET a = 2 RETURNING *; -- Updates nothing + a +--- +(0 rows) + +DELETE FROM r2 RETURNING *; -- Deletes nothing + a +--- +(0 rows) + +-- r2 can be used as a non-target relation in DML +INSERT INTO r1 SELECT a + 1 FROM r2 RETURNING *; -- OK + a +---- + 11 + 21 +(2 rows) + +UPDATE r1 SET a = r2.a + 2 FROM r2 WHERE r1.a = r2.a RETURNING *; -- OK + a | a +----+---- + 12 | 10 + 22 | 20 +(2 rows) + +DELETE FROM r1 USING r2 WHERE r1.a = r2.a + 2 RETURNING *; -- OK + a | a +----+---- + 12 | 10 + 22 | 20 +(2 rows) + +SELECT * FROM r1; + a +---- + 11 + 21 +(2 rows) + +SELECT * FROM r2; + a +---- + 10 + 20 +(2 rows) + +SET SESSION AUTHORIZATION rls_regress_user0; +DROP TABLE r1; +DROP TABLE r2; +-- +-- FORCE ROW LEVEL SECURITY applies RLS to owners but +-- only when row_security = on +-- +SET SESSION AUTHORIZATION rls_regress_user0; +SET row_security = on; +CREATE TABLE r1 (a int); +INSERT INTO r1 VALUES (10), (20); +CREATE POLICY p1 ON r1 USING (false); +ALTER TABLE r1 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r1 FORCE ROW LEVEL SECURITY; +-- No error, but no rows +TABLE r1; + a +--- +(0 rows) + +-- RLS error +INSERT INTO r1 VALUES (1); +ERROR: new row violates row-level security policy for table "r1" +-- No error (unable to see any rows to update) +UPDATE r1 SET a = 1; +TABLE r1; + a +--- +(0 rows) + +-- No error (unable to see any rows to delete) +DELETE FROM r1; +TABLE r1; + a +--- +(0 rows) + +SET row_security = off; +-- Shows all rows +TABLE r1; + a +---- + 10 + 20 +(2 rows) + +-- Update all rows +UPDATE r1 SET a = 1; +TABLE r1; + a +--- + 1 + 1 +(2 rows) + +-- Delete all rows +DELETE FROM r1; +TABLE r1; + a +--- +(0 rows) + +DROP TABLE r1; +-- +-- FORCE ROW LEVEL SECURITY does not break RI +-- +SET SESSION AUTHORIZATION rls_regress_user0; +SET row_security = on; +CREATE TABLE r1 (a int PRIMARY KEY); +CREATE TABLE r2 (a int REFERENCES r1); +INSERT INTO r1 VALUES (10), (20); +INSERT INTO r2 VALUES (10), (20); +-- Create policies on r2 which prevent the +-- owner from seeing any rows, but RI should +-- still see them. +CREATE POLICY p1 ON r2 USING (false); +ALTER TABLE r2 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r2 FORCE ROW LEVEL SECURITY; +-- Errors due to rows in r2 +DELETE FROM r1; +ERROR: update or delete on table "r1" violates foreign key constraint "r2_a_fkey" on table "r2" +DETAIL: Key (a)=(10) is still referenced from table "r2". +-- Reset r2 to no-RLS +DROP POLICY p1 ON r2; +ALTER TABLE r2 NO FORCE ROW LEVEL SECURITY; +ALTER TABLE r2 DISABLE ROW LEVEL SECURITY; +-- clean out r2 for INSERT test below +DELETE FROM r2; +-- Change r1 to not allow rows to be seen +CREATE POLICY p1 ON r1 USING (false); +ALTER TABLE r1 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r1 FORCE ROW LEVEL SECURITY; +-- No rows seen +TABLE r1; + a +--- +(0 rows) + +-- No error, RI still sees that row exists in r1 +INSERT INTO r2 VALUES (10); +DROP TABLE r2; +DROP TABLE r1; +-- Ensure cascaded DELETE works +CREATE TABLE r1 (a int PRIMARY KEY); +CREATE TABLE r2 (a int REFERENCES r1 ON DELETE CASCADE); +INSERT INTO r1 VALUES (10), (20); +INSERT INTO r2 VALUES (10), (20); +-- Create policies on r2 which prevent the +-- owner from seeing any rows, but RI should +-- still see them. +CREATE POLICY p1 ON r2 USING (false); +ALTER TABLE r2 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r2 FORCE ROW LEVEL SECURITY; +-- Deletes all records from both +DELETE FROM r1; +-- Remove FORCE from r2 +ALTER TABLE r2 NO FORCE ROW LEVEL SECURITY; +-- As owner, we now bypass RLS +-- verify no rows in r2 now +TABLE r2; + a +--- +(0 rows) + +DROP TABLE r2; +DROP TABLE r1; +-- Ensure cascaded UPDATE works +CREATE TABLE r1 (a int PRIMARY KEY); +CREATE TABLE r2 (a int REFERENCES r1 ON UPDATE CASCADE); +INSERT INTO r1 VALUES (10), (20); +INSERT INTO r2 VALUES (10), (20); +-- Create policies on r2 which prevent the +-- owner from seeing any rows, but RI should +-- still see them. +CREATE POLICY p1 ON r2 USING (false); +ALTER TABLE r2 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r2 FORCE ROW LEVEL SECURITY; +-- Updates records in both +UPDATE r1 SET a = a+5; +-- Remove FORCE from r2 +ALTER TABLE r2 NO FORCE ROW LEVEL SECURITY; +-- As owner, we now bypass RLS +-- verify records in r2 updated +TABLE r2; + a +---- + 15 + 25 +(2 rows) + +DROP TABLE r2; +DROP TABLE r1; +-- +-- Test INSERT+RETURNING applies SELECT policies as +-- WithCheckOptions (meaning an error is thrown) +-- +SET SESSION AUTHORIZATION rls_regress_user0; +SET row_security = on; +CREATE TABLE r1 (a int); +CREATE POLICY p1 ON r1 FOR SELECT USING (false); +CREATE POLICY p2 ON r1 FOR INSERT WITH CHECK (true); +ALTER TABLE r1 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r1 FORCE ROW LEVEL SECURITY; +-- Works fine +INSERT INTO r1 VALUES (10), (20); +-- No error, but no rows +TABLE r1; + a +--- +(0 rows) + +SET row_security = off; +-- Rows shown now +TABLE r1; + a +---- + 10 + 20 +(2 rows) + +SET row_security = on; +-- Error +INSERT INTO r1 VALUES (10), (20) RETURNING *; +ERROR: new row violates row-level security policy for table "r1" +DROP TABLE r1; +-- +-- Test UPDATE+RETURNING applies SELECT policies as +-- WithCheckOptions (meaning an error is thrown) +-- +SET SESSION AUTHORIZATION rls_regress_user0; +SET row_security = on; +CREATE TABLE r1 (a int); +CREATE POLICY p1 ON r1 FOR SELECT USING (a < 20); +CREATE POLICY p2 ON r1 FOR UPDATE USING (a < 20) WITH CHECK (true); +INSERT INTO r1 VALUES (10); +ALTER TABLE r1 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r1 FORCE ROW LEVEL SECURITY; +-- Works fine +UPDATE r1 SET a = 30; +-- Show updated rows +SET row_security = off; +TABLE r1; + a +---- + 30 +(1 row) + +-- reset value in r1 for test with RETURNING +UPDATE r1 SET a = 10; +-- Verify row reset +TABLE r1; + a +---- + 10 +(1 row) + +SET row_security = on; +-- Error +UPDATE r1 SET a = 30 RETURNING *; +ERROR: new row violates row-level security policy for table "r1" +DROP TABLE r1; -- -- Clean up objects -- @@ -2743,3 +3260,19 @@ DROP USER rls_regress_user2; DROP USER rls_regress_exempt_user; DROP ROLE rls_regress_group1; DROP ROLE rls_regress_group2; +-- Arrange to have a few policies left over, for testing +-- pg_dump/pg_restore +CREATE SCHEMA rls_regress_schema; +CREATE TABLE rls_tbl (c1 int); +ALTER TABLE rls_tbl ENABLE ROW LEVEL SECURITY; +CREATE POLICY p1 ON rls_tbl USING (c1 > 5); +CREATE POLICY p2 ON rls_tbl FOR SELECT USING (c1 <= 3); +CREATE POLICY p3 ON rls_tbl FOR UPDATE USING (c1 <= 3) WITH CHECK (c1 > 5); +CREATE POLICY p4 ON rls_tbl FOR DELETE USING (c1 <= 3); +CREATE TABLE rls_tbl_force (c1 int); +ALTER TABLE rls_tbl_force ENABLE ROW LEVEL SECURITY; +ALTER TABLE rls_tbl_force FORCE ROW LEVEL SECURITY; +CREATE POLICY p1 ON rls_tbl_force USING (c1 = 5) WITH CHECK (c1 < 5); +CREATE POLICY p2 ON rls_tbl_force FOR SELECT USING (c1 = 8); +CREATE POLICY p3 ON rls_tbl_force FOR UPDATE USING (c1 = 8) WITH CHECK (c1 >= 5); +CREATE POLICY p4 ON rls_tbl_force FOR DELETE USING (c1 = 8); diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index cd5337531d4b4..5ecfcd577efd1 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -2061,7 +2061,7 @@ pg_stats| SELECT n.nspname AS schemaname, JOIN pg_class c ON ((c.oid = s.starelid))) JOIN pg_attribute a ON (((c.oid = a.attrelid) AND (a.attnum = s.staattnum)))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) - WHERE ((NOT a.attisdropped) AND has_column_privilege(c.oid, a.attnum, 'select'::text)); + WHERE ((NOT a.attisdropped) AND has_column_privilege(c.oid, a.attnum, 'select'::text) AND ((c.relrowsecurity = false) OR (NOT row_security_active(c.oid)))); pg_tables| SELECT n.nspname AS schemaname, c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, @@ -2202,6 +2202,10 @@ street| SELECT r.name, FROM ONLY road r, real_city c WHERE (c.outline ## r.thepath); +test_tablesample_v1| SELECT test_tablesample.id + FROM test_tablesample TABLESAMPLE system ((10 * 2)) REPEATABLE (2); +test_tablesample_v2| SELECT test_tablesample.id + FROM test_tablesample TABLESAMPLE system (99); toyemp| SELECT emp.name, emp.age, emp.location, @@ -2895,7 +2899,7 @@ CREATE RULE hat_upsert AS ON INSERT TO hats ON CONFLICT (hat_name) DO UPDATE SET hat_name = hat_data.hat_name, hat_color = excluded.hat_color - WHERE excluded.hat_color <> 'forbidden' + WHERE excluded.hat_color <> 'forbidden' AND hat_data.* != excluded.* RETURNING *; SELECT definition FROM pg_rules WHERE tablename = 'hats' ORDER BY rulename; definition @@ -2903,7 +2907,7 @@ SELECT definition FROM pg_rules WHERE tablename = 'hats' ORDER BY rulename; CREATE RULE hat_upsert AS + ON INSERT TO hats DO INSTEAD INSERT INTO hat_data (hat_name, hat_color) + VALUES (new.hat_name, new.hat_color) ON CONFLICT(hat_name) DO UPDATE SET hat_name = hat_data.hat_name, hat_color = excluded.hat_color+ - WHERE (excluded.hat_color <> 'forbidden'::bpchar) + + WHERE ((excluded.hat_color <> 'forbidden'::bpchar) AND (hat_data.* <> excluded.*)) + RETURNING hat_data.hat_name, + hat_data.hat_color; (1 row) @@ -2951,19 +2955,19 @@ SELECT tablename, rulename, definition FROM pg_rules hats | hat_upsert | CREATE RULE hat_upsert AS + | | ON INSERT TO hats DO INSTEAD INSERT INTO hat_data (hat_name, hat_color) + | | VALUES (new.hat_name, new.hat_color) ON CONFLICT(hat_name) DO UPDATE SET hat_name = hat_data.hat_name, hat_color = excluded.hat_color+ - | | WHERE (excluded.hat_color <> 'forbidden'::bpchar) + + | | WHERE ((excluded.hat_color <> 'forbidden'::bpchar) AND (hat_data.* <> excluded.*)) + | | RETURNING hat_data.hat_name, + | | hat_data.hat_color; (1 row) -- ensure explain works for on insert conflict rules explain (costs off) INSERT INTO hats VALUES ('h8', 'forbidden') RETURNING *; - QUERY PLAN ----------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------- Insert on hat_data Conflict Resolution: UPDATE Conflict Arbiter Indexes: hat_data_unique_idx - Conflict Filter: (excluded.hat_color <> 'forbidden'::bpchar) + Conflict Filter: ((excluded.hat_color <> 'forbidden'::bpchar) AND (hat_data.* <> excluded.*)) -> Result (5 rows) @@ -2990,12 +2994,12 @@ EXPLAIN (costs off) WITH data(hat_name, hat_color) AS ( INSERT INTO hats SELECT * FROM data RETURNING *; - QUERY PLAN ----------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------- Insert on hat_data Conflict Resolution: UPDATE Conflict Arbiter Indexes: hat_data_unique_idx - Conflict Filter: (excluded.hat_color <> 'forbidden'::bpchar) + Conflict Filter: ((excluded.hat_color <> 'forbidden'::bpchar) AND (hat_data.* <> excluded.*)) CTE data -> Values Scan on "*VALUES*" -> CTE Scan on data diff --git a/src/test/regress/expected/sanity_check.out b/src/test/regress/expected/sanity_check.out index 14acd16da3b3d..eb0bc88ef1fb2 100644 --- a/src/test/regress/expected/sanity_check.out +++ b/src/test/regress/expected/sanity_check.out @@ -128,7 +128,6 @@ pg_shdepend|t pg_shdescription|t pg_shseclabel|t pg_statistic|t -pg_tablesample_method|t pg_tablespace|t pg_transform|t pg_trigger|t diff --git a/src/test/regress/expected/tablesample.out b/src/test/regress/expected/tablesample.out index 04e5eb8b807e2..727a835439734 100644 --- a/src/test/regress/expected/tablesample.out +++ b/src/test/regress/expected/tablesample.out @@ -1,107 +1,123 @@ -CREATE TABLE test_tablesample (id int, name text) WITH (fillfactor=10); -- force smaller pages so we don't have to load too much data to get multiple pages -INSERT INTO test_tablesample SELECT i, repeat(i::text, 200) FROM generate_series(0, 9) s(i) ORDER BY i; -SELECT t.id FROM test_tablesample AS t TABLESAMPLE SYSTEM (50) REPEATABLE (10); +CREATE TABLE test_tablesample (id int, name text) WITH (fillfactor=10); +-- use fillfactor so we don't have to load too much data to get multiple pages +INSERT INTO test_tablesample + SELECT i, repeat(i::text, 200) FROM generate_series(0, 9) s(i); +SELECT t.id FROM test_tablesample AS t TABLESAMPLE SYSTEM (50) REPEATABLE (0); id ---- - 0 - 1 - 2 3 4 5 - 9 -(7 rows) - -SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (100.0/11) REPEATABLE (9999); - id ----- 6 7 8 -(3 rows) +(6 rows) -SELECT count(*) FROM test_tablesample TABLESAMPLE SYSTEM (100); - count -------- - 10 -(1 row) +SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (100.0/11) REPEATABLE (0); + id +---- +(0 rows) -SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (100); +SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (0); id ---- - 0 - 1 - 2 + 3 + 4 + 5 6 7 8 - 9 -(7 rows) +(6 rows) -SELECT id FROM test_tablesample TABLESAMPLE BERNOULLI (50) REPEATABLE (100); +SELECT id FROM test_tablesample TABLESAMPLE BERNOULLI (50) REPEATABLE (0); id ---- - 0 - 1 - 3 4 5 + 6 + 7 + 8 (5 rows) -SELECT id FROM test_tablesample TABLESAMPLE BERNOULLI (5.5) REPEATABLE (1); +SELECT id FROM test_tablesample TABLESAMPLE BERNOULLI (5.5) REPEATABLE (0); id ---- - 0 - 5 -(2 rows) + 7 +(1 row) -CREATE VIEW test_tablesample_v1 AS SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (10*2) REPEATABLE (2); -CREATE VIEW test_tablesample_v2 AS SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (99); -SELECT pg_get_viewdef('test_tablesample_v1'::regclass); - pg_get_viewdef --------------------------------------------------------------------------------- - SELECT test_tablesample.id + - FROM test_tablesample TABLESAMPLE system (((10 * 2))::real) REPEATABLE (2); +-- 100% should give repeatable count results (ie, all rows) in any case +SELECT count(*) FROM test_tablesample TABLESAMPLE SYSTEM (100); + count +------- + 10 (1 row) -SELECT pg_get_viewdef('test_tablesample_v2'::regclass); - pg_get_viewdef ------------------------------------------------------------ - SELECT test_tablesample.id + - FROM test_tablesample TABLESAMPLE system ((99)::real); +SELECT count(*) FROM test_tablesample TABLESAMPLE SYSTEM (100) REPEATABLE (1+2); + count +------- + 10 +(1 row) + +SELECT count(*) FROM test_tablesample TABLESAMPLE SYSTEM (100) REPEATABLE (0.4); + count +------- + 10 (1 row) +CREATE VIEW test_tablesample_v1 AS + SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (10*2) REPEATABLE (2); +CREATE VIEW test_tablesample_v2 AS + SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (99); +\d+ test_tablesample_v1 + View "public.test_tablesample_v1" + Column | Type | Modifiers | Storage | Description +--------+---------+-----------+---------+------------- + id | integer | | plain | +View definition: + SELECT test_tablesample.id + FROM test_tablesample TABLESAMPLE system ((10 * 2)) REPEATABLE (2); + +\d+ test_tablesample_v2 + View "public.test_tablesample_v2" + Column | Type | Modifiers | Storage | Description +--------+---------+-----------+---------+------------- + id | integer | | plain | +View definition: + SELECT test_tablesample.id + FROM test_tablesample TABLESAMPLE system (99); + +-- check a sampled query doesn't affect cursor in progress BEGIN; -DECLARE tablesample_cur CURSOR FOR SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (100); +DECLARE tablesample_cur CURSOR FOR + SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (0); FETCH FIRST FROM tablesample_cur; id ---- - 0 + 3 (1 row) FETCH NEXT FROM tablesample_cur; id ---- - 1 + 4 (1 row) FETCH NEXT FROM tablesample_cur; id ---- - 2 + 5 (1 row) -SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (10); +SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (0); id ---- - 0 - 1 - 2 3 4 5 - 9 -(7 rows) + 6 + 7 + 8 +(6 rows) FETCH NEXT FROM tablesample_cur; id @@ -124,19 +140,19 @@ FETCH NEXT FROM tablesample_cur; FETCH FIRST FROM tablesample_cur; id ---- - 0 + 3 (1 row) FETCH NEXT FROM tablesample_cur; id ---- - 1 + 4 (1 row) FETCH NEXT FROM tablesample_cur; id ---- - 2 + 5 (1 row) FETCH NEXT FROM tablesample_cur; @@ -159,41 +175,129 @@ FETCH NEXT FROM tablesample_cur; CLOSE tablesample_cur; END; -EXPLAIN SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (10); - QUERY PLAN -------------------------------------------------------------------------------- - Sample Scan (system) on test_tablesample (cost=0.00..26.35 rows=635 width=4) +EXPLAIN (COSTS OFF) + SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (2); + QUERY PLAN +-------------------------------------------------------------------- + Sample Scan on test_tablesample + Sampling: system ('50'::real) REPEATABLE ('2'::double precision) +(2 rows) + +EXPLAIN (COSTS OFF) + SELECT * FROM test_tablesample_v1; + QUERY PLAN +-------------------------------------------------------------------- + Sample Scan on test_tablesample + Sampling: system ('20'::real) REPEATABLE ('2'::double precision) +(2 rows) + +-- check inheritance behavior +explain (costs off) + select count(*) from person tablesample bernoulli (100); + QUERY PLAN +------------------------------------------------- + Aggregate + -> Append + -> Sample Scan on person + Sampling: bernoulli ('100'::real) + -> Sample Scan on emp + Sampling: bernoulli ('100'::real) + -> Sample Scan on student + Sampling: bernoulli ('100'::real) + -> Sample Scan on stud_emp + Sampling: bernoulli ('100'::real) +(10 rows) + +select count(*) from person tablesample bernoulli (100); + count +------- + 58 (1 row) -EXPLAIN SELECT * FROM test_tablesample_v1; - QUERY PLAN -------------------------------------------------------------------------------- - Sample Scan (system) on test_tablesample (cost=0.00..10.54 rows=254 width=4) +select count(*) from person; + count +------- + 58 +(1 row) + +-- check that collations get assigned within the tablesample arguments +SELECT count(*) FROM test_tablesample TABLESAMPLE bernoulli (('1'::text < '0'::text)::int); + count +------- + 0 +(1 row) + +-- check behavior during rescans, as well as correct handling of min/max pct +select * from + (values (0),(100)) v(pct), + lateral (select count(*) from tenk1 tablesample bernoulli (pct)) ss; + pct | count +-----+------- + 0 | 0 + 100 | 10000 +(2 rows) + +select * from + (values (0),(100)) v(pct), + lateral (select count(*) from tenk1 tablesample system (pct)) ss; + pct | count +-----+------- + 0 | 0 + 100 | 10000 +(2 rows) + +explain (costs off) +select pct, count(unique1) from + (values (0),(100)) v(pct), + lateral (select * from tenk1 tablesample bernoulli (pct)) ss + group by pct; + QUERY PLAN +-------------------------------------------------------- + HashAggregate + Group Key: "*VALUES*".column1 + -> Nested Loop + -> Values Scan on "*VALUES*" + -> Sample Scan on tenk1 + Sampling: bernoulli ("*VALUES*".column1) +(6 rows) + +select pct, count(unique1) from + (values (0),(100)) v(pct), + lateral (select * from tenk1 tablesample bernoulli (pct)) ss + group by pct; + pct | count +-----+------- + 100 | 10000 +(1 row) + +select pct, count(unique1) from + (values (0),(100)) v(pct), + lateral (select * from tenk1 tablesample system (pct)) ss + group by pct; + pct | count +-----+------- + 100 | 10000 (1 row) -- errors SELECT id FROM test_tablesample TABLESAMPLE FOOBAR (1); -ERROR: tablesample method "foobar" does not exist +ERROR: tablesample method foobar does not exist LINE 1: SELECT id FROM test_tablesample TABLESAMPLE FOOBAR (1); - ^ + ^ +SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (NULL); +ERROR: TABLESAMPLE parameter cannot be null SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (NULL); -ERROR: REPEATABLE clause must be NOT NULL numeric value -LINE 1: ... test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (NULL); - ^ +ERROR: TABLESAMPLE REPEATABLE parameter cannot be null SELECT id FROM test_tablesample TABLESAMPLE BERNOULLI (-1); -ERROR: invalid sample size -HINT: Sample size must be numeric value between 0 and 100 (inclusive). +ERROR: sample percentage must be between 0 and 100 SELECT id FROM test_tablesample TABLESAMPLE BERNOULLI (200); -ERROR: invalid sample size -HINT: Sample size must be numeric value between 0 and 100 (inclusive). +ERROR: sample percentage must be between 0 and 100 SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (-1); -ERROR: invalid sample size -HINT: Sample size must be numeric value between 0 and 100 (inclusive). +ERROR: sample percentage must be between 0 and 100 SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (200); -ERROR: invalid sample size -HINT: Sample size must be numeric value between 0 and 100 (inclusive). +ERROR: sample percentage must be between 0 and 100 SELECT id FROM test_tablesample_v1 TABLESAMPLE BERNOULLI (1); -ERROR: TABLESAMPLE clause can only be used on tables and materialized views +ERROR: TABLESAMPLE clause can only be applied to tables and materialized views LINE 1: SELECT id FROM test_tablesample_v1 TABLESAMPLE BERNOULLI (1)... ^ INSERT INTO test_tablesample_v1 VALUES(1); @@ -202,30 +306,10 @@ DETAIL: Views containing TABLESAMPLE are not automatically updatable. HINT: To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule. WITH query_select AS (SELECT * FROM test_tablesample) SELECT * FROM query_select TABLESAMPLE BERNOULLI (5.5) REPEATABLE (1); -ERROR: TABLESAMPLE clause can only be used on tables and materialized views +ERROR: TABLESAMPLE clause can only be applied to tables and materialized views LINE 2: SELECT * FROM query_select TABLESAMPLE BERNOULLI (5.5) REPEA... ^ SELECT q.* FROM (SELECT * FROM test_tablesample) as q TABLESAMPLE BERNOULLI (5); ERROR: syntax error at or near "TABLESAMPLE" LINE 1: ...CT q.* FROM (SELECT * FROM test_tablesample) as q TABLESAMPL... ^ --- catalog sanity -SELECT * -FROM pg_tablesample_method -WHERE tsminit IS NULL - OR tsmseqscan IS NULL - OR tsmpagemode IS NULL - OR tsmnextblock IS NULL - OR tsmnexttuple IS NULL - OR tsmend IS NULL - OR tsmreset IS NULL - OR tsmcost IS NULL; - tsmname | tsmseqscan | tsmpagemode | tsminit | tsmnextblock | tsmnexttuple | tsmexaminetuple | tsmend | tsmreset | tsmcost ----------+------------+-------------+---------+--------------+--------------+-----------------+--------+----------+--------- -(0 rows) - --- done -DROP TABLE test_tablesample CASCADE; -NOTICE: drop cascades to 2 other objects -DETAIL: drop cascades to view test_tablesample_v1 -drop cascades to view test_tablesample_v2 diff --git a/src/test/regress/expected/transactions.out b/src/test/regress/expected/transactions.out index 5d70863866fad..d9b702d016cfd 100644 --- a/src/test/regress/expected/transactions.out +++ b/src/test/regress/expected/transactions.out @@ -613,6 +613,52 @@ fetch from foo; (1 row) abort; +-- Test for proper cleanup after a failure in a cursor portal +-- that was created in an outer subtransaction +CREATE FUNCTION invert(x float8) RETURNS float8 LANGUAGE plpgsql AS +$$ begin return 1/x; end $$; +CREATE FUNCTION create_temp_tab() RETURNS text +LANGUAGE plpgsql AS $$ +BEGIN + CREATE TEMP TABLE new_table (f1 float8); + -- case of interest is that we fail while holding an open + -- relcache reference to new_table + INSERT INTO new_table SELECT invert(0.0); + RETURN 'foo'; +END $$; +BEGIN; +DECLARE ok CURSOR FOR SELECT * FROM int8_tbl; +DECLARE ctt CURSOR FOR SELECT create_temp_tab(); +FETCH ok; + q1 | q2 +-----+----- + 123 | 456 +(1 row) + +SAVEPOINT s1; +FETCH ok; -- should work + q1 | q2 +-----+------------------ + 123 | 4567890123456789 +(1 row) + +FETCH ctt; -- error occurs here +ERROR: division by zero +CONTEXT: PL/pgSQL function invert(double precision) line 1 at RETURN +SQL statement "INSERT INTO new_table SELECT invert(0.0)" +PL/pgSQL function create_temp_tab() line 6 at SQL statement +ROLLBACK TO s1; +FETCH ok; -- should work + q1 | q2 +------------------+----- + 4567890123456789 | 123 +(1 row) + +FETCH ctt; -- must be rejected +ERROR: portal "ctt" cannot be run +COMMIT; +DROP FUNCTION create_temp_tab(); +DROP FUNCTION invert(x float8); -- Test for successful cleanup of an aborted transaction at session exit. -- THIS MUST BE THE LAST TEST IN THIS FILE. begin; diff --git a/src/test/regress/expected/triggers.out b/src/test/regress/expected/triggers.out index 3b32e8fdfe302..f5980c624c624 100644 --- a/src/test/regress/expected/triggers.out +++ b/src/test/regress/expected/triggers.out @@ -1493,7 +1493,7 @@ CONTEXT: SQL statement "insert into depth_b values (new.id)" PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: depth_c_tr: depth = 3 CONTEXT: SQL statement "insert into depth_c values (1)" -PL/pgSQL function depth_b_tf() line 5 at EXECUTE statement +PL/pgSQL function depth_b_tf() line 5 at EXECUTE SQL statement "insert into depth_b values (new.id)" PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: SQLSTATE = U9999: depth = 2 @@ -1504,12 +1504,12 @@ CONTEXT: SQL statement "insert into depth_b values (new.id)" PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: depth_c_tr: depth = 3 CONTEXT: SQL statement "insert into depth_c values (1)" -PL/pgSQL function depth_b_tf() line 12 at EXECUTE statement +PL/pgSQL function depth_b_tf() line 12 at EXECUTE SQL statement "insert into depth_b values (new.id)" PL/pgSQL function depth_a_tf() line 4 at SQL statement ERROR: U9999 CONTEXT: SQL statement "insert into depth_c values (1)" -PL/pgSQL function depth_b_tf() line 12 at EXECUTE statement +PL/pgSQL function depth_b_tf() line 12 at EXECUTE SQL statement "insert into depth_b values (new.id)" PL/pgSQL function depth_a_tf() line 4 at SQL statement select pg_trigger_depth(); @@ -1525,12 +1525,12 @@ CONTEXT: SQL statement "insert into depth_b values (new.id)" PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: depth_c_tr: depth = 3 CONTEXT: SQL statement "insert into depth_c values (2)" -PL/pgSQL function depth_b_tf() line 5 at EXECUTE statement +PL/pgSQL function depth_b_tf() line 5 at EXECUTE SQL statement "insert into depth_b values (new.id)" PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: depth_c_tr: depth = 3 CONTEXT: SQL statement "insert into depth_c values (2)" -PL/pgSQL function depth_b_tf() line 5 at EXECUTE statement +PL/pgSQL function depth_b_tf() line 5 at EXECUTE SQL statement "insert into depth_b values (new.id)" PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: depth_b_tr: depth = 2 diff --git a/src/test/regress/expected/txid.out b/src/test/regress/expected/txid.out index 7750b7b98f937..ddd217eb1024f 100644 --- a/src/test/regress/expected/txid.out +++ b/src/test/regress/expected/txid.out @@ -20,19 +20,19 @@ select '12:16:14,14'::txid_snapshot; -- errors select '31:12:'::txid_snapshot; -ERROR: invalid input for txid_snapshot: "31:12:" +ERROR: invalid input syntax for type txid_snapshot: "31:12:" LINE 1: select '31:12:'::txid_snapshot; ^ select '0:1:'::txid_snapshot; -ERROR: invalid input for txid_snapshot: "0:1:" +ERROR: invalid input syntax for type txid_snapshot: "0:1:" LINE 1: select '0:1:'::txid_snapshot; ^ select '12:13:0'::txid_snapshot; -ERROR: invalid input for txid_snapshot: "12:13:0" +ERROR: invalid input syntax for type txid_snapshot: "12:13:0" LINE 1: select '12:13:0'::txid_snapshot; ^ select '12:16:14,13'::txid_snapshot; -ERROR: invalid input for txid_snapshot: "12:16:14,13" +ERROR: invalid input syntax for type txid_snapshot: "12:16:14,13" LINE 1: select '12:16:14,13'::txid_snapshot; ^ create temp table snapshot_test ( @@ -235,6 +235,6 @@ SELECT txid_snapshot '1:9223372036854775807:3'; (1 row) SELECT txid_snapshot '1:9223372036854775808:3'; -ERROR: invalid input for txid_snapshot: "1:9223372036854775808:3" +ERROR: invalid input syntax for type txid_snapshot: "1:9223372036854775808:3" LINE 1: SELECT txid_snapshot '1:9223372036854775808:3'; ^ diff --git a/src/test/regress/expected/updatable_views.out b/src/test/regress/expected/updatable_views.out index 7eb92612d739a..8e5463a28dac4 100644 --- a/src/test/regress/expected/updatable_views.out +++ b/src/test/regress/expected/updatable_views.out @@ -1456,18 +1456,18 @@ SELECT * FROM information_schema.views WHERE table_name = 'rw_view1'; INSERT INTO rw_view1 VALUES(3,4); -- ok INSERT INTO rw_view1 VALUES(4,3); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (4, 3). INSERT INTO rw_view1 VALUES(5,null); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (5, null). UPDATE rw_view1 SET b = 5 WHERE a = 3; -- ok UPDATE rw_view1 SET b = -5 WHERE a = 3; -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (3, -5). INSERT INTO rw_view1(a) VALUES (9); -- ok INSERT INTO rw_view1(a) VALUES (10); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (10, 10). SELECT * FROM base_tbl; a | b @@ -1506,11 +1506,11 @@ SELECT * FROM information_schema.views WHERE table_name = 'rw_view2'; (1 row) INSERT INTO rw_view2 VALUES (-5); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (-5). INSERT INTO rw_view2 VALUES (5); -- ok INSERT INTO rw_view2 VALUES (15); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view2" +ERROR: new row violates check option for view "rw_view2" DETAIL: Failing row contains (15). SELECT * FROM base_tbl; a @@ -1519,10 +1519,10 @@ SELECT * FROM base_tbl; (1 row) UPDATE rw_view2 SET a = a - 10; -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (-5). UPDATE rw_view2 SET a = a + 10; -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view2" +ERROR: new row violates check option for view "rw_view2" DETAIL: Failing row contains (15). CREATE OR REPLACE VIEW rw_view2 AS SELECT * FROM rw_view1 WHERE a < 10 WITH LOCAL CHECK OPTION; @@ -1547,7 +1547,7 @@ SELECT * FROM information_schema.views WHERE table_name = 'rw_view2'; INSERT INTO rw_view2 VALUES (-10); -- ok, but not in view INSERT INTO rw_view2 VALUES (20); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view2" +ERROR: new row violates check option for view "rw_view2" DETAIL: Failing row contains (20). SELECT * FROM base_tbl; a @@ -1561,10 +1561,10 @@ ERROR: invalid value for "check_option" option DETAIL: Valid values are "local" and "cascaded". ALTER VIEW rw_view1 SET (check_option=local); INSERT INTO rw_view2 VALUES (-20); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (-20). INSERT INTO rw_view2 VALUES (30); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view2" +ERROR: new row violates check option for view "rw_view2" DETAIL: Failing row contains (30). ALTER VIEW rw_view2 RESET (check_option); \d+ rw_view2 @@ -1620,7 +1620,7 @@ INSERT INTO rw_view1 VALUES (1); -- ok INSERT INTO rw_view2 VALUES (-2); -- ok, but not in view INSERT INTO rw_view2 VALUES (2); -- ok INSERT INTO rw_view3 VALUES (-3); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view2" +ERROR: new row violates check option for view "rw_view2" DETAIL: Failing row contains (-3). INSERT INTO rw_view3 VALUES (3); -- ok DROP TABLE base_tbl CASCADE; @@ -1634,16 +1634,16 @@ CREATE VIEW rw_view1 AS SELECT * FROM base_tbl WHERE a = ANY (b) WITH CHECK OPTION; INSERT INTO rw_view1 VALUES (1, ARRAY[1,2,3]); -- ok INSERT INTO rw_view1 VALUES (10, ARRAY[4,5]); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (10, {4,5}). UPDATE rw_view1 SET b[2] = -b[2] WHERE a = 1; -- ok UPDATE rw_view1 SET b[1] = -b[1] WHERE a = 1; -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (1, {-1,-2,3}). PREPARE ins(int, int[]) AS INSERT INTO rw_view1 VALUES($1, $2); EXECUTE ins(2, ARRAY[1,2,3]); -- ok EXECUTE ins(10, ARRAY[4,5]); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (10, {4,5}). DEALLOCATE PREPARE ins; DROP TABLE base_tbl CASCADE; @@ -1658,11 +1658,11 @@ CREATE VIEW rw_view1 AS WITH CHECK OPTION; INSERT INTO rw_view1 VALUES (5); -- ok INSERT INTO rw_view1 VALUES (15); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (15). UPDATE rw_view1 SET a = a + 5; -- ok UPDATE rw_view1 SET a = a + 5; -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (15). EXPLAIN (costs off) INSERT INTO rw_view1 VALUES (5); QUERY PLAN @@ -1710,10 +1710,10 @@ CREATE TRIGGER base_tbl_trig BEFORE INSERT OR UPDATE ON base_tbl CREATE VIEW rw_view1 AS SELECT * FROM base_tbl WHERE a < b WITH CHECK OPTION; INSERT INTO rw_view1 VALUES (5,0); -- ok INSERT INTO rw_view1 VALUES (15, 20); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (15, 10). UPDATE rw_view1 SET a = 20, b = 30; -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view1" +ERROR: new row violates check option for view "rw_view1" DETAIL: Failing row contains (20, 10). DROP TABLE base_tbl CASCADE; NOTICE: drop cascades to view rw_view1 @@ -1744,12 +1744,12 @@ CREATE TRIGGER rw_view1_trig CREATE VIEW rw_view2 AS SELECT * FROM rw_view1 WHERE a > 0 WITH LOCAL CHECK OPTION; INSERT INTO rw_view2 VALUES (-5); -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view2" +ERROR: new row violates check option for view "rw_view2" DETAIL: Failing row contains (-5). INSERT INTO rw_view2 VALUES (5); -- ok INSERT INTO rw_view2 VALUES (50); -- ok, but not in view UPDATE rw_view2 SET a = a - 10; -- should fail -ERROR: new row violates WITH CHECK OPTION for "rw_view2" +ERROR: new row violates check option for view "rw_view2" DETAIL: Failing row contains (-5). SELECT * FROM base_tbl; a | b diff --git a/src/test/regress/output/constraints.source b/src/test/regress/output/constraints.source index 1c4a044052793..e6d317438044d 100644 --- a/src/test/regress/output/constraints.source +++ b/src/test/regress/output/constraints.source @@ -643,7 +643,7 @@ INSERT INTO deferred_excl VALUES(1); -- fail ERROR: conflicting key value violates exclusion constraint "deferred_excl_con" DETAIL: Key (f1)=(1) conflicts with existing key (f1)=(1). INSERT INTO deferred_excl VALUES(1) ON CONFLICT ON CONSTRAINT deferred_excl_con DO NOTHING; -- fail -ERROR: ON CONFLICT does not support deferred unique constraints/exclusion constraints as arbiters +ERROR: ON CONFLICT does not support deferrable unique constraints/exclusion constraints as arbiters BEGIN; INSERT INTO deferred_excl VALUES(2); -- no fail here COMMIT; -- should fail here diff --git a/src/test/regress/output/misc.source b/src/test/regress/output/misc.source index 70c9cc356a642..5f263f9a3a1b7 100644 --- a/src/test/regress/output/misc.source +++ b/src/test/regress/output/misc.source @@ -671,6 +671,8 @@ SELECT user_relns() AS user_relns random_tbl real_city reltime_tbl + rls_tbl + rls_tbl_force road shighway slow_emp4000 @@ -686,6 +688,9 @@ SELECT user_relns() AS user_relns test_range_excl test_range_gist test_range_spgist + test_tablesample + test_tablesample_v1 + test_tablesample_v2 test_tsvector testjsonb text_tbl @@ -705,7 +710,7 @@ SELECT user_relns() AS user_relns tvvmv varchar_tbl xacttest -(127 rows) +(132 rows) SELECT name(equipment(hobby_construct(text 'skywalking', text 'mer'))); name diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule index 91780cdcc7398..60854066114fd 100644 --- a/src/test/regress/parallel_schedule +++ b/src/test/regress/parallel_schedule @@ -60,7 +60,7 @@ test: create_index create_view # ---------- # Another group of parallel tests # ---------- -test: create_aggregate create_function_3 create_cast constraints triggers inherit create_table_like typed_table vacuum drop_if_exists updatable_views rolenames +test: create_aggregate create_function_3 create_cast constraints triggers inherit create_table_like typed_table vacuum drop_if_exists updatable_views rolenames roleattributes # ---------- # sanity_check does a vacuum, affecting the sort order of SELECT * @@ -97,7 +97,7 @@ test: rules # ---------- # Another group of parallel tests # ---------- -test: select_views portals_p2 foreign_key cluster dependency guc bitmapops combocid tsearch tsdicts foreign_data window xmlmap functional_deps advisory_lock json jsonb indirect_toast equivclass +test: select_views portals_p2 foreign_key cluster dependency guc bitmapops combocid tsearch tsdicts foreign_data window xmlmap functional_deps advisory_lock json jsonb json_encoding indirect_toast equivclass # ---------- # Another group of parallel tests # NB: temp.sql does a reconnect which transiently uses 2 connections, diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c index a267894751e45..dd65ab5a949a7 100644 --- a/src/test/regress/pg_regress.c +++ b/src/test/regress/pg_regress.c @@ -2207,7 +2207,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc make_directory(temp_instance); /* and a directory for log files */ - snprintf(buf, sizeof(buf), "%s/log", temp_instance); + snprintf(buf, sizeof(buf), "%s/log", outputdir); if (!directory_exists(buf)) make_directory(buf); @@ -2220,7 +2220,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc temp_instance, debug ? " --debug" : "", nolocale ? " --no-locale" : "", - temp_instance); + outputdir); if (system(buf)) { fprintf(stderr, _("\n%s: initdb failed\nExamine %s/log/initdb.log for the reason.\nCommand was: %s\n"), progname, outputdir, buf); @@ -2324,7 +2324,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc bindir ? "/" : "", temp_instance, debug ? " -d 5" : "", hostname ? hostname : "", sockdir ? sockdir : "", - temp_instance); + outputdir); postmaster_pid = spawn_process(buf); if (postmaster_pid == INVALID_PID) { diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c index bd31a3d382526..476975f391afc 100644 --- a/src/test/regress/regress.c +++ b/src/test/regress/regress.c @@ -549,8 +549,10 @@ ttdummy(PG_FUNCTION_ARGS) elog(ERROR, "ttdummy (%s): %s must be NOT NULL", relname, args[1]); if (oldon != newon || oldoff != newoff) - elog(ERROR, "ttdummy (%s): you cannot change %s and/or %s columns (use set_ttdummy)", - relname, args[0], args[1]); + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("ttdummy (%s): you cannot change %s and/or %s columns (use set_ttdummy)", + relname, args[0], args[1]))); if (newoff != TTDUMMY_INFINITY) { diff --git a/src/test/regress/serial_schedule b/src/test/regress/serial_schedule index a2e0cebbdb500..985f6c9f02f5b 100644 --- a/src/test/regress/serial_schedule +++ b/src/test/regress/serial_schedule @@ -73,6 +73,7 @@ test: vacuum test: drop_if_exists test: updatable_views test: rolenames +test: roleattributes test: sanity_check test: errors test: select @@ -110,6 +111,7 @@ test: lock test: replica_identity test: rowsecurity test: object_address +test: tablesample test: alter_generic test: misc test: psql @@ -132,6 +134,7 @@ test: functional_deps test: advisory_lock test: json test: jsonb +test: json_encoding test: indirect_toast test: equivclass test: plancache @@ -155,4 +158,3 @@ test: with test: xml test: event_trigger test: stats -test: tablesample diff --git a/src/test/regress/sql/alter_generic.sql b/src/test/regress/sql/alter_generic.sql index f46cbc828a679..ed4398b30a0ae 100644 --- a/src/test/regress/sql/alter_generic.sql +++ b/src/test/regress/sql/alter_generic.sql @@ -390,7 +390,7 @@ DROP OPERATOR FAMILY alt_opf16 USING gist; -- Should fail. duplicate operator number / function number in ALTER OPERATOR FAMILY ... ADD FUNCTION CREATE OPERATOR FAMILY alt_opf17 USING btree; -ALTER OPERATOR FAMILY alt_opf17 USING btree ADD OPERATOR 1 < (int4, int4), OPERATOR 1 < (int4, int4); -- operator # appears twice in same statment +ALTER OPERATOR FAMILY alt_opf17 USING btree ADD OPERATOR 1 < (int4, int4), OPERATOR 1 < (int4, int4); -- operator # appears twice in same statement ALTER OPERATOR FAMILY alt_opf17 USING btree ADD OPERATOR 1 < (int4, int4); -- operator 1 requested first-time ALTER OPERATOR FAMILY alt_opf17 USING btree ADD OPERATOR 1 < (int4, int4); -- operator 1 requested again in separate statement ALTER OPERATOR FAMILY alt_opf17 USING btree ADD diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql index 29c1875d2eaec..ace5b6a25cb72 100644 --- a/src/test/regress/sql/alter_table.sql +++ b/src/test/regress/sql/alter_table.sql @@ -340,6 +340,10 @@ explain (costs off) select * from nv_parent where d between '2009-08-01'::date a alter table nv_child_2011 VALIDATE CONSTRAINT nv_child_2011_d_check; explain (costs off) select * from nv_parent where d between '2009-08-01'::date and '2009-08-31'::date; +-- add an inherited NOT VALID constraint +alter table nv_parent add check (d between '2001-01-01'::date and '2099-12-31'::date) not valid; +\d nv_child_2009 +-- we leave nv_parent and children around to help test pg_dump logic -- Foreign key adding test with mixed types @@ -1271,7 +1275,8 @@ DROP TABLE check_fk_presence_1, check_fk_presence_2; -- drop type lockmodes; create type lockmodes as enum ( - 'AccessShareLock' + 'SIReadLock' +,'AccessShareLock' ,'RowShareLock' ,'RowExclusiveLock' ,'ShareUpdateExclusiveLock' @@ -1594,6 +1599,42 @@ ALTER TABLE IF EXISTS tt8 SET SCHEMA alter2; DROP TABLE alter2.tt8; DROP SCHEMA alter2; + +-- Check that comments on constraints and indexes are not lost at ALTER TABLE. +CREATE TABLE comment_test ( + id int, + positive_col int CHECK (positive_col > 0), + indexed_col int, + CONSTRAINT comment_test_pk PRIMARY KEY (id)); +CREATE INDEX comment_test_index ON comment_test(indexed_col); + +COMMENT ON COLUMN comment_test.id IS 'Column ''id'' on comment_test'; +COMMENT ON INDEX comment_test_index IS 'Simple index on comment_test'; +COMMENT ON CONSTRAINT comment_test_positive_col_check ON comment_test IS 'CHECK constraint on comment_test.positive_col'; +COMMENT ON CONSTRAINT comment_test_pk ON comment_test IS 'PRIMARY KEY constraint of comment_test'; +COMMENT ON INDEX comment_test_pk IS 'Index backing the PRIMARY KEY of comment_test'; + +SELECT col_description('comment_test'::regclass, 1) as comment; +SELECT indexrelid::regclass::text as index, obj_description(indexrelid, 'pg_class') as comment FROM pg_index where indrelid = 'comment_test'::regclass ORDER BY 1, 2; +SELECT conname as constraint, obj_description(oid, 'pg_constraint') as comment FROM pg_constraint where conrelid = 'comment_test'::regclass ORDER BY 1, 2; + +-- Change the datatype of all the columns. ALTER TABLE is optimized to not +-- rebuild an index if the new data type is binary compatible with the old +-- one. Check do a dummy ALTER TABLE that doesn't change the datatype +-- first, to test that no-op codepath, and another one that does. +ALTER TABLE comment_test ALTER COLUMN indexed_col SET DATA TYPE int; +ALTER TABLE comment_test ALTER COLUMN indexed_col SET DATA TYPE text; +ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE int; +ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE text; +ALTER TABLE comment_test ALTER COLUMN positive_col SET DATA TYPE int; +ALTER TABLE comment_test ALTER COLUMN positive_col SET DATA TYPE bigint; + +-- Check that the comments are intact. +SELECT col_description('comment_test'::regclass, 1) as comment; +SELECT indexrelid::regclass::text as index, obj_description(indexrelid, 'pg_class') as comment FROM pg_index where indrelid = 'comment_test'::regclass ORDER BY 1, 2; +SELECT conname as constraint, obj_description(oid, 'pg_constraint') as comment FROM pg_constraint where conrelid = 'comment_test'::regclass ORDER BY 1, 2; + + -- Check that we map relation oids to filenodes and back correctly. Only -- display bad mappings so the test output doesn't change all the time. A -- filenode function call can return NULL for a relation dropped concurrently diff --git a/src/test/regress/sql/arrays.sql b/src/test/regress/sql/arrays.sql index 562134b2863ae..b1dd65144050b 100644 --- a/src/test/regress/sql/arrays.sql +++ b/src/test/regress/sql/arrays.sql @@ -306,6 +306,19 @@ set enable_seqscan to off; set enable_bitmapscan to off; select * from arr_tbl where f1 > '{1,2,3}' and f1 <= '{1,5,3}'; select * from arr_tbl where f1 >= '{1,2,3}' and f1 < '{1,5,3}'; + +-- test ON CONFLICT DO UPDATE with arrays +create temp table arr_pk_tbl (pk int4 primary key, f1 int[]); +insert into arr_pk_tbl values (1, '{1,2,3}'); +insert into arr_pk_tbl values (1, '{3,4,5}') on conflict (pk) + do update set f1[1] = excluded.f1[1], f1[3] = excluded.f1[3] + returning pk, f1; +insert into arr_pk_tbl(pk, f1[1:2]) values (1, '{6,7,8}') on conflict (pk) + do update set f1[1] = excluded.f1[1], + f1[2] = excluded.f1[2], + f1[3] = excluded.f1[3] + returning pk, f1; + -- note: if above selects don't produce the expected tuple order, -- then you didn't get an indexscan plan, and something is busted. reset enable_seqscan; diff --git a/src/test/regress/sql/create_type.sql b/src/test/regress/sql/create_type.sql index 29ba625b46ad1..a1839ef9e7ff8 100644 --- a/src/test/regress/sql/create_type.sql +++ b/src/test/regress/sql/create_type.sql @@ -31,6 +31,9 @@ CREATE TYPE shell; -- fail, type already present DROP TYPE shell; DROP TYPE shell; -- fail, type not exist +-- also, let's leave one around for purposes of pg_dump testing +CREATE TYPE myshell; + -- -- Test type-related default values (broken in releases before PG 7.2) -- diff --git a/src/test/regress/sql/gist.sql b/src/test/regress/sql/gist.sql index 7aa688ef42120..9d4ff1e97e970 100644 --- a/src/test/regress/sql/gist.sql +++ b/src/test/regress/sql/gist.sql @@ -56,18 +56,18 @@ select p from gist_tbl where p <@ box(point(0,0), point(0.5, 0.5)); -- Also test an index-only knn-search explain (costs off) select p from gist_tbl where p <@ box(point(0,0), point(0.5, 0.5)) -order by p <-> point(0.2, 0.2); +order by p <-> point(0.201, 0.201); select p from gist_tbl where p <@ box(point(0,0), point(0.5, 0.5)) -order by p <-> point(0.2, 0.2); +order by p <-> point(0.201, 0.201); -- Check commuted case as well explain (costs off) select p from gist_tbl where p <@ box(point(0,0), point(0.5, 0.5)) -order by point(0.1, 0.1) <-> p; +order by point(0.101, 0.101) <-> p; select p from gist_tbl where p <@ box(point(0,0), point(0.5, 0.5)) -order by point(0.1, 0.1) <-> p; +order by point(0.101, 0.101) <-> p; drop index gist_tbl_point_index; diff --git a/src/test/regress/sql/groupingsets.sql b/src/test/regress/sql/groupingsets.sql index 0bffb8531c2c6..bff85d0db558c 100644 --- a/src/test/regress/sql/groupingsets.sql +++ b/src/test/regress/sql/groupingsets.sql @@ -73,6 +73,35 @@ select grouping(a), a, array_agg(b), select a, b, sum(c), sum(sum(c)) over (order by a,b) as rsum from gstest2 group by rollup (a,b) order by rsum, a, b; +-- nesting with grouping sets +select sum(c) from gstest2 + group by grouping sets((), grouping sets((), grouping sets(()))) + order by 1 desc; +select sum(c) from gstest2 + group by grouping sets((), grouping sets((), grouping sets(((a, b))))) + order by 1 desc; +select sum(c) from gstest2 + group by grouping sets(grouping sets(rollup(c), grouping sets(cube(c)))) + order by 1 desc; +select sum(c) from gstest2 + group by grouping sets(a, grouping sets(a, cube(b))) + order by 1 desc; +select sum(c) from gstest2 + group by grouping sets(grouping sets((a, (b)))) + order by 1 desc; +select sum(c) from gstest2 + group by grouping sets(grouping sets((a, b))) + order by 1 desc; +select sum(c) from gstest2 + group by grouping sets(grouping sets(a, grouping sets(a), a)) + order by 1 desc; +select sum(c) from gstest2 + group by grouping sets(grouping sets(a, grouping sets(a, grouping sets(a), ((a)), a, grouping sets(a), (a)), a)) + order by 1 desc; +select sum(c) from gstest2 + group by grouping sets((a,(a,b)), grouping sets((a,(a,b)),a)) + order by 1 desc; + -- empty input: first is 0 rows, second 1, third 3 etc. select a, b, sum(v), count(*) from gstest_empty group by grouping sets ((a,b),a); select a, b, sum(v), count(*) from gstest_empty group by grouping sets ((a,b),()); @@ -154,6 +183,23 @@ select ten, sum(distinct four) from onek a group by grouping sets((ten,four),(ten)) having exists (select 1 from onek b where sum(distinct a.four) = b.four); +-- HAVING with GROUPING queries +select ten, grouping(ten) from onek +group by grouping sets(ten) having grouping(ten) >= 0 +order by 2,1; +select ten, grouping(ten) from onek +group by grouping sets(ten, four) having grouping(ten) > 0 +order by 2,1; +select ten, grouping(ten) from onek +group by rollup(ten) having grouping(ten) > 0 +order by 2,1; +select ten, grouping(ten) from onek +group by cube(ten) having grouping(ten) > 0 +order by 2,1; +select ten, grouping(ten) from onek +group by (ten) having grouping(ten) >= 0 +order by 2,1; + -- FILTER queries select ten, sum(distinct four) filter (where four::text ~ '123') from onek a group by rollup(ten); @@ -162,4 +208,8 @@ group by rollup(ten); select * from (values (1),(2)) v(a) left join lateral (select v.a, four, ten, count(*) from onek group by cube(four,ten)) s on true order by v.a,four,ten; select array(select row(v.a,s1.*) from (select two,four, count(*) from onek group by cube(two,four) order by two,four) s1) from (values (1),(2)) v(a); +-- Grouping on text columns +select sum(ten) from onek group by two, rollup(four::text) order by 1; +select sum(ten) from onek group by rollup(four::text), two order by 1; + -- end diff --git a/src/test/regress/sql/inherit.sql b/src/test/regress/sql/inherit.sql index 09bb7507ad9ea..793c216376858 100644 --- a/src/test/regress/sql/inherit.sql +++ b/src/test/regress/sql/inherit.sql @@ -402,6 +402,27 @@ reset enable_seqscan; drop table matest0 cascade; +-- +-- Check that use of an index with an extraneous column doesn't produce +-- a plan with extraneous sorting +-- + +create table matest0 (a int, b int, c int, d int); +create table matest1 () inherits(matest0); +create index matest0i on matest0 (b, c); +create index matest1i on matest1 (b, c); + +set enable_nestloop = off; -- we want a plan with two MergeAppends + +explain (costs off) +select t1.* from matest0 t1, matest0 t2 +where t1.b = t2.b and t2.c = t2.d +order by t1.b limit 10; + +reset enable_nestloop; + +drop table matest0 cascade; + -- -- Test merge-append for UNION ALL append relations -- diff --git a/src/test/regress/sql/insert_conflict.sql b/src/test/regress/sql/insert_conflict.sql index a0bdd7f536ee9..8d846f51df4ae 100644 --- a/src/test/regress/sql/insert_conflict.sql +++ b/src/test/regress/sql/insert_conflict.sql @@ -57,6 +57,18 @@ drop index collation_index_key; drop index both_index_key; drop index both_index_expr_key; +-- +-- Make sure that cross matching of attribute opclass/collation does not occur +-- +create unique index cross_match on insertconflicttest(lower(fruit) collate "C", upper(fruit) text_pattern_ops); + +-- fails: +explain (costs off) insert into insertconflicttest values(0, 'Crowberry') on conflict (lower(fruit) text_pattern_ops, upper(fruit) collate "C") do nothing; +-- works: +explain (costs off) insert into insertconflicttest values(0, 'Crowberry') on conflict (lower(fruit) collate "C", upper(fruit) text_pattern_ops) do nothing; + +drop index cross_match; + -- -- Single key tests -- @@ -102,7 +114,6 @@ insert into insertconflicttest values (5, 'Lemon') on conflict (fruit) do update insert into insertconflicttest values (6, 'Passionfruit') on conflict (lower(fruit)) do update set fruit = excluded.fruit; -- Check the target relation can be aliased -insert into insertconflicttest values (6, 'Passionfruits') on conflict (key) do update set fruit = excluded.fruit; insert into insertconflicttest AS ict values (6, 'Passionfruit') on conflict (key) do update set fruit = excluded.fruit; -- ok, no reference to target table insert into insertconflicttest AS ict values (6, 'Passionfruit') on conflict (key) do update set fruit = ict.fruit; -- ok, alias insert into insertconflicttest AS ict values (6, 'Passionfruit') on conflict (key) do update set fruit = insertconflicttest.fruit; -- error, references aliased away name @@ -212,9 +223,45 @@ insert into insertconflicttest values (23, 'Blackberry') on conflict (fruit) whe drop index partial_key_index; +-- +-- Test that wholerow references to ON CONFLICT's EXCLUDED work +-- +create unique index plain on insertconflicttest(key); + +-- Succeeds, updates existing row: +insert into insertconflicttest as i values (23, 'Jackfruit') on conflict (key) do update set fruit = excluded.fruit + where i.* != excluded.* returning *; +-- No update this time, though: +insert into insertconflicttest as i values (23, 'Jackfruit') on conflict (key) do update set fruit = excluded.fruit + where i.* != excluded.* returning *; +-- Predicate changed to require match rather than non-match, so updates once more: +insert into insertconflicttest as i values (23, 'Jackfruit') on conflict (key) do update set fruit = excluded.fruit + where i.* = excluded.* returning *; +-- Assign: +insert into insertconflicttest as i values (23, 'Avocado') on conflict (key) do update set fruit = excluded.*::text + returning *; +-- deparse whole row var in WHERE and SET clauses: +explain (costs off) insert into insertconflicttest as i values (23, 'Avocado') on conflict (key) do update set fruit = excluded.fruit where excluded.* is null; +explain (costs off) insert into insertconflicttest as i values (23, 'Avocado') on conflict (key) do update set fruit = excluded.*::text; + +drop index plain; + -- Cleanup drop table insertconflicttest; + +-- +-- Verify that EXCLUDED does not allow system column references. These +-- do not make sense because EXCLUDED isn't an already stored tuple +-- (and thus doesn't have a ctid, oids are not assigned yet, etc). +-- +create table syscolconflicttest(key int4, data text) WITH OIDS; +insert into syscolconflicttest values (1); +insert into syscolconflicttest values (1) on conflict (key) do update set data = excluded.ctid::text; +insert into syscolconflicttest values (1) on conflict (key) do update set data = excluded.oid::text; +drop table syscolconflicttest; + + -- ****************************************************************** -- * * -- * Test inheritance (example taken from tutorial) * @@ -284,3 +331,57 @@ insert into excluded values(1, '2') on conflict (key) do update set data = 3 RET -- clean up drop table excluded; + + +-- Check tables w/o oids are handled correctly +create table testoids(key int primary key, data text) without oids; +-- first without oids +insert into testoids values(1, '1') on conflict (key) do update set data = excluded.data RETURNING *; +insert into testoids values(1, '2') on conflict (key) do update set data = excluded.data RETURNING *; +-- add oids +alter table testoids set with oids; +-- update existing row, that didn't have an oid +insert into testoids values(1, '3') on conflict (key) do update set data = excluded.data RETURNING *; +-- insert a new row +insert into testoids values(2, '1') on conflict (key) do update set data = excluded.data RETURNING *; +-- and update it +insert into testoids values(2, '2') on conflict (key) do update set data = excluded.data RETURNING *; +-- remove oids again, test +alter table testoids set without oids; +insert into testoids values(1, '4') on conflict (key) do update set data = excluded.data RETURNING *; +insert into testoids values(3, '1') on conflict (key) do update set data = excluded.data RETURNING *; +insert into testoids values(3, '2') on conflict (key) do update set data = excluded.data RETURNING *; + +DROP TABLE testoids; + + +-- check that references to columns after dropped columns are handled correctly +create table dropcol(key int primary key, drop1 int, keep1 text, drop2 numeric, keep2 float); +insert into dropcol(key, drop1, keep1, drop2, keep2) values(1, 1, '1', '1', 1); +-- set using excluded +insert into dropcol(key, drop1, keep1, drop2, keep2) values(1, 2, '2', '2', 2) on conflict(key) + do update set drop1 = excluded.drop1, keep1 = excluded.keep1, drop2 = excluded.drop2, keep2 = excluded.keep2 + where excluded.drop1 is not null and excluded.keep1 is not null and excluded.drop2 is not null and excluded.keep2 is not null + and dropcol.drop1 is not null and dropcol.keep1 is not null and dropcol.drop2 is not null and dropcol.keep2 is not null + returning *; +; +-- set using existing table +insert into dropcol(key, drop1, keep1, drop2, keep2) values(1, 3, '3', '3', 3) on conflict(key) + do update set drop1 = dropcol.drop1, keep1 = dropcol.keep1, drop2 = dropcol.drop2, keep2 = dropcol.keep2 + returning *; +; +alter table dropcol drop column drop1, drop column drop2; +-- set using excluded +insert into dropcol(key, keep1, keep2) values(1, '4', 4) on conflict(key) + do update set keep1 = excluded.keep1, keep2 = excluded.keep2 + where excluded.keep1 is not null and excluded.keep2 is not null + and dropcol.keep1 is not null and dropcol.keep2 is not null + returning *; +; +-- set using existing table +insert into dropcol(key, keep1, keep2) values(1, '5', 5) on conflict(key) + do update set keep1 = dropcol.keep1, keep2 = dropcol.keep2 + returning *; +; + +DROP TABLE dropcol; diff --git a/src/test/regress/sql/join.sql b/src/test/regress/sql/join.sql index 5b65ea8c9224a..df59703bb5670 100644 --- a/src/test/regress/sql/join.sql +++ b/src/test/regress/sql/join.sql @@ -353,6 +353,44 @@ select count(*) from tenk1 x where x.unique1 in (select aa.f1 from int4_tbl aa,float8_tbl bb where aa.f1=bb.f1); rollback; +-- +-- regression test: be sure we cope with proven-dummy append rels +-- +explain (costs off) +select aa, bb, unique1, unique1 + from tenk1 right join b on aa = unique1 + where bb < bb and bb is null; + +select aa, bb, unique1, unique1 + from tenk1 right join b on aa = unique1 + where bb < bb and bb is null; + +-- +-- regression test: check handling of empty-FROM subquery underneath outer join +-- +explain (costs off) +select * from int8_tbl i1 left join (int8_tbl i2 join + (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2 +order by 1, 2; + +select * from int8_tbl i1 left join (int8_tbl i2 join + (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2 +order by 1, 2; + +-- +-- regression test: check a case where join_clause_is_movable_into() gives +-- an imprecise result, causing an assertion failure +-- +select count(*) +from + (select t3.tenthous as x1, coalesce(t1.stringu1, t2.stringu1) as x2 + from tenk1 t1 + left join tenk1 t2 on t1.unique1 = t2.unique1 + join tenk1 t3 on t1.unique2 = t3.unique2) ss, + tenk1 t4, + tenk1 t5 +where t4.thousand = t5.unique1 and ss.x1 = t4.tenthous and ss.x2 = t5.stringu1; + -- -- Clean up @@ -793,6 +831,55 @@ select * from tenk1, int8_tbl a, int8_tbl b where thousand = a.q1 and tenthous = b.q1 and a.q2 = 1 and b.q2 = 2; +-- +-- test a corner case in which we shouldn't apply the star-schema optimization +-- + +explain (costs off) +select t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from + tenk1 t1 + inner join int4_tbl i1 + left join (select v1.x2, v2.y1, 11 AS d1 + from (values(1,0)) v1(x1,x2) + left join (values(3,1)) v2(y1,y2) + on v1.x1 = v2.y2) subq1 + on (i1.f1 = subq1.x2) + on (t1.unique2 = subq1.d1) + left join tenk1 t2 + on (subq1.y1 = t2.unique1) +where t1.unique2 < 42 and t1.stringu1 > t2.stringu2; + +select t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from + tenk1 t1 + inner join int4_tbl i1 + left join (select v1.x2, v2.y1, 11 AS d1 + from (values(1,0)) v1(x1,x2) + left join (values(3,1)) v2(y1,y2) + on v1.x1 = v2.y2) subq1 + on (i1.f1 = subq1.x2) + on (t1.unique2 = subq1.d1) + left join tenk1 t2 + on (subq1.y1 = t2.unique1) +where t1.unique2 < 42 and t1.stringu1 > t2.stringu2; + +-- variant that isn't quite a star-schema case + +select ss1.d1 from + tenk1 as t1 + inner join tenk1 as t2 + on t1.tenthous = t2.ten + inner join + int8_tbl as i8 + left join int4_tbl as i4 + inner join (select 64::information_schema.cardinal_number as d1 + from tenk1 t3, + lateral (select abs(t3.unique1) + random()) ss0(x) + where t3.fivethous < 0) as ss1 + on i4.f1 = ss1.d1 + on i8.q1 = i4.f1 + on t1.tenthous = ss1.d1 +where t1.unique1 < i4.f1; + -- -- test extraction of restriction OR clauses from join OR clause -- (we used to only do this for indexable clauses) @@ -934,6 +1021,100 @@ left join ) foo3 using (join_key); +-- +-- test successful handling of nested outer joins with degenerate join quals +-- + +explain (verbose, costs off) +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); + +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); + +explain (verbose, costs off) +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); + +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); + +explain (verbose, costs off) +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2 + where q1 = f1) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); + +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2 + where q1 = f1) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); + +explain (verbose, costs off) +select * from + text_tbl t1 + inner join int8_tbl i8 + on i8.q2 = 456 + right join text_tbl t2 + on t1.f1 = 'doh!' + left join int4_tbl i4 + on i8.q1 = i4.f1; + +select * from + text_tbl t1 + inner join int8_tbl i8 + on i8.q2 = 456 + right join text_tbl t2 + on t1.f1 = 'doh!' + left join int4_tbl i4 + on i8.q1 = i4.f1; + -- -- test ability to push constants through outer join clauses -- @@ -1091,6 +1272,46 @@ SELECT * FROM rollback; +-- another join removal bug: we must clean up correctly when removing a PHV +begin; + +create temp table uniquetbl (f1 text unique); + +explain (costs off) +select t1.* from + uniquetbl as t1 + left join (select *, '***'::text as d1 from uniquetbl) t2 + on t1.f1 = t2.f1 + left join uniquetbl t3 + on t2.d1 = t3.f1; + +explain (costs off) +select t0.* +from + text_tbl t0 + left join + (select case t1.ten when 0 then 'doh!'::text else null::text end as case1, + t1.stringu2 + from tenk1 t1 + join int4_tbl i4 ON i4.f1 = t1.unique2 + left join uniquetbl u1 ON u1.f1 = t1.string4) ss + on t0.f1 = ss.case1 +where ss.stringu2 !~* ss.case1; + +select t0.* +from + text_tbl t0 + left join + (select case t1.ten when 0 then 'doh!'::text else null::text end as case1, + t1.stringu2 + from tenk1 t1 + join int4_tbl i4 ON i4.f1 = t1.unique2 + left join uniquetbl u1 ON u1.f1 = t1.string4) ss + on t0.f1 = ss.case1 +where ss.stringu2 !~* ss.case1; + +rollback; + -- bug #8444: we've historically allowed duplicate aliases within aliased JOINs select * from @@ -1120,6 +1341,7 @@ select atts.relid::regclass, s.* from pg_stats s join a.attrelid::regclass::text join (select unnest(indkey) attnum, indexrelid from pg_index i) atts on atts.attnum = a.attnum where schemaname != 'pg_catalog'; + -- -- Test LATERAL -- @@ -1314,6 +1536,19 @@ select * from select * from (select 3 as z offset 0) z where z.z = x.x ) zz on zz.z = y.y; +-- check we don't try to do a unique-ified semijoin with LATERAL +explain (verbose, costs off) +select * from + (values (0,9998), (1,1000)) v(id,x), + lateral (select f1 from int4_tbl + where f1 = any (select unique1 from tenk1 + where unique2 = v.x offset 0)) ss; +select * from + (values (0,9998), (1,1000)) v(id,x), + lateral (select f1 from int4_tbl + where f1 = any (select unique1 from tenk1 + where unique2 = v.x offset 0)) ss; + -- test some error cases where LATERAL should have been used but wasn't select f1,g from int4_tbl a, (select f1 as g) ss; select f1,g from int4_tbl a, (select a.f1 as g) ss; diff --git a/src/test/regress/sql/json.sql b/src/test/regress/sql/json.sql index 53832a01fa18f..0d2c139b4d104 100644 --- a/src/test/regress/sql/json.sql +++ b/src/test/regress/sql/json.sql @@ -7,11 +7,7 @@ SELECT '"abc def"'::json; -- ERROR, unescaped newline in string constant SELECT '"\n\"\\"'::json; -- OK, legal escapes SELECT '"\v"'::json; -- ERROR, not a valid JSON escape -SELECT '"\u"'::json; -- ERROR, incomplete escape -SELECT '"\u00"'::json; -- ERROR, incomplete escape -SELECT '"\u000g"'::json; -- ERROR, g is not a hex digit -SELECT '"\u0000"'::json; -- OK, legal escape -SELECT '"\uaBcD"'::json; -- OK, uppercase and lower case both OK +-- see json_encoding test for input with unicode escapes -- Numbers. SELECT '1'::json; -- OK @@ -45,6 +41,12 @@ SELECT '{"abc":1,"def":2,"ghi":[3,4],"hij":{"klm":5,"nop":[6]}}'::json; -- OK SELECT '{"abc":1:2}'::json; -- ERROR, colon in wrong spot SELECT '{"abc":1,3}'::json; -- ERROR, no value +-- Recursion. +SET max_stack_depth = '100kB'; +SELECT repeat('[', 10000)::json; +SELECT repeat('{"a":', 10000)::json; +RESET max_stack_depth; + -- Miscellaneous stuff. SELECT 'true'::json; -- OK SELECT 'false'::json; -- OK @@ -114,8 +116,11 @@ COMMIT; select to_json(date '2014-05-28'); select to_json(date 'Infinity'); +select to_json(date '-Infinity'); select to_json(timestamp 'Infinity'); +select to_json(timestamp '-Infinity'); select to_json(timestamptz 'Infinity'); +select to_json(timestamptz '-Infinity'); --json_agg @@ -126,7 +131,12 @@ SELECT json_agg(q) FROM generate_series(1,2) x, generate_series(4,5) y) q; -SELECT json_agg(q) +SELECT json_agg(q ORDER BY x, y) + FROM rows q; + +UPDATE rows SET x = NULL WHERE x = 1; + +SELECT json_agg(q ORDER BY x NULLS FIRST, y) FROM rows q; -- non-numeric output @@ -184,6 +194,10 @@ SELECT test_json -> 2 FROM test_json WHERE json_type = 'array'; +SELECT test_json -> -1 +FROM test_json +WHERE json_type = 'array'; + SELECT test_json -> 2 FROM test_json WHERE json_type = 'object'; @@ -241,6 +255,7 @@ where json_type = 'array'; select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> null::text; select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> null::int; select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> 1; +select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> -1; select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> 'z'; select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> ''; select '[{"b": "c"}, {"b": "cc"}]'::json -> 1; @@ -389,28 +404,6 @@ select * from json_populate_recordset(null::jpop,'[{"a":"blurfl","x":43.2},{"b": select * from json_populate_recordset(row('def',99,null)::jpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; select * from json_populate_recordset(row('def',99,null)::jpop,'[{"a":[100,200,300],"x":43.2},{"a":{"z":true},"b":3,"c":"2012-01-20 10:42:53"}]') q; --- handling of unicode surrogate pairs - -select json '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a' as correct_in_utf8; -select json '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row -select json '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order -select json '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate -select json '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate - ---handling of simple unicode escapes - -select json '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; -select json '{ "a": "dollar \u0024 character" }' as correct_everywhere; -select json '{ "a": "dollar \\u0024 character" }' as not_an_escape; -select json '{ "a": "null \u0000 escape" }' as not_unescaped; -select json '{ "a": "null \\u0000 escape" }' as not_an_escape; - -select json '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; -select json '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; -select json '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; -select json '{ "a": "null \u0000 escape" }' ->> 'a' as fails; -select json '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; - --json_typeof() function select value, json_typeof(value) from (values (json '123.4'), @@ -437,7 +430,6 @@ SELECT json_build_object( 'd', json_build_object('e',array[9,8,7]::int[], 'f', (select row_to_json(r) from ( select relkind, oid::regclass as name from pg_class where relname = 'pg_class') r))); - -- empty objects/arrays SELECT json_build_array(); @@ -463,6 +455,11 @@ INSERT INTO foo VALUES (847003,'sub-alpha','GESS90'); SELECT json_build_object('turbines',json_object_agg(serial_num,json_build_object('name',name,'type',type))) FROM foo; +SELECT json_object_agg(name, type) FROM foo; + +INSERT INTO foo VALUES (999999, NULL, 'bar'); +SELECT json_object_agg(name, type) FROM foo; + -- json_object -- one dimension diff --git a/src/test/regress/sql/json_encoding.sql b/src/test/regress/sql/json_encoding.sql new file mode 100644 index 0000000000000..87a2d564ff3cb --- /dev/null +++ b/src/test/regress/sql/json_encoding.sql @@ -0,0 +1,67 @@ + +-- encoding-sensitive tests for json and jsonb + +-- first json + +-- basic unicode input +SELECT '"\u"'::json; -- ERROR, incomplete escape +SELECT '"\u00"'::json; -- ERROR, incomplete escape +SELECT '"\u000g"'::json; -- ERROR, g is not a hex digit +SELECT '"\u0000"'::json; -- OK, legal escape +SELECT '"\uaBcD"'::json; -- OK, uppercase and lower case both OK + +-- handling of unicode surrogate pairs + +select json '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a' as correct_in_utf8; +select json '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row +select json '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order +select json '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate +select json '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate + +--handling of simple unicode escapes + +select json '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; +select json '{ "a": "dollar \u0024 character" }' as correct_everywhere; +select json '{ "a": "dollar \\u0024 character" }' as not_an_escape; +select json '{ "a": "null \u0000 escape" }' as not_unescaped; +select json '{ "a": "null \\u0000 escape" }' as not_an_escape; + +select json '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; +select json '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; +select json '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; +select json '{ "a": "null \u0000 escape" }' ->> 'a' as fails; +select json '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; + +-- then jsonb + +-- basic unicode input +SELECT '"\u"'::jsonb; -- ERROR, incomplete escape +SELECT '"\u00"'::jsonb; -- ERROR, incomplete escape +SELECT '"\u000g"'::jsonb; -- ERROR, g is not a hex digit +SELECT '"\u0045"'::jsonb; -- OK, legal escape +SELECT '"\u0000"'::jsonb; -- ERROR, we don't support U+0000 +-- use octet_length here so we don't get an odd unicode char in the +-- output +SELECT octet_length('"\uaBcD"'::jsonb::text); -- OK, uppercase and lower case both OK + +-- handling of unicode surrogate pairs + +SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a')::text) AS correct_in_utf8; +SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row +SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order +SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate +SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate + +-- handling of simple unicode escapes + +SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; +SELECT jsonb '{ "a": "dollar \u0024 character" }' as correct_everywhere; +SELECT jsonb '{ "a": "dollar \\u0024 character" }' as not_an_escape; +SELECT jsonb '{ "a": "null \u0000 escape" }' as fails; +SELECT jsonb '{ "a": "null \\u0000 escape" }' as not_an_escape; + +SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; +SELECT jsonb '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; +SELECT jsonb '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; +SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fails; +SELECT jsonb '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; diff --git a/src/test/regress/sql/jsonb.sql b/src/test/regress/sql/jsonb.sql index a25a19d7f0163..a6b6d482053c0 100644 --- a/src/test/regress/sql/jsonb.sql +++ b/src/test/regress/sql/jsonb.sql @@ -7,14 +7,7 @@ SELECT '"abc def"'::jsonb; -- ERROR, unescaped newline in string constant SELECT '"\n\"\\"'::jsonb; -- OK, legal escapes SELECT '"\v"'::jsonb; -- ERROR, not a valid JSON escape -SELECT '"\u"'::jsonb; -- ERROR, incomplete escape -SELECT '"\u00"'::jsonb; -- ERROR, incomplete escape -SELECT '"\u000g"'::jsonb; -- ERROR, g is not a hex digit -SELECT '"\u0045"'::jsonb; -- OK, legal escape -SELECT '"\u0000"'::jsonb; -- ERROR, we don't support U+0000 --- use octet_length here so we don't get an odd unicode char in the --- output -SELECT octet_length('"\uaBcD"'::jsonb::text); -- OK, uppercase and lower case both OK +-- see json_encoding test for input with unicode escapes -- Numbers. SELECT '1'::jsonb; -- OK @@ -48,6 +41,12 @@ SELECT '{"abc":1,"def":2,"ghi":[3,4],"hij":{"klm":5,"nop":[6]}}'::jsonb; -- OK SELECT '{"abc":1:2}'::jsonb; -- ERROR, colon in wrong spot SELECT '{"abc":1,3}'::jsonb; -- ERROR, no value +-- Recursion. +SET max_stack_depth = '100kB'; +SELECT repeat('[', 10000)::jsonb; +SELECT repeat('{"a":', 10000)::jsonb; +RESET max_stack_depth; + -- Miscellaneous stuff. SELECT 'true'::jsonb; -- OK SELECT 'false'::jsonb; -- OK @@ -77,8 +76,11 @@ COMMIT; select to_jsonb(date '2014-05-28'); select to_jsonb(date 'Infinity'); +select to_jsonb(date '-Infinity'); select to_jsonb(timestamp 'Infinity'); +select to_jsonb(timestamp '-Infinity'); select to_jsonb(timestamptz 'Infinity'); +select to_jsonb(timestamptz '-Infinity'); --jsonb_agg @@ -93,7 +95,12 @@ SELECT jsonb_agg(q) FROM generate_series(1,2) x, generate_series(4,5) y) q; -SELECT jsonb_agg(q) +SELECT jsonb_agg(q ORDER BY x, y) + FROM rows q; + +UPDATE rows SET x = NULL WHERE x = 1; + +SELECT jsonb_agg(q ORDER BY x NULLS FIRST, y) FROM rows q; -- jsonb extraction functions @@ -326,6 +333,10 @@ SELECT jsonb_build_object(json '{"a":1,"b":2}', 3); SELECT jsonb_build_object('{1,2,3}'::int[], 3); +-- handling of NULL values +SELECT jsonb_object_agg(1, NULL::jsonb); +SELECT jsonb_object_agg(NULL, '{"a":1}'); + CREATE TEMP TABLE foo (serial_num int, name text, type text); INSERT INTO foo VALUES (847001,'t15','GE1043'); INSERT INTO foo VALUES (847002,'t16','GE1043'); @@ -334,6 +345,11 @@ INSERT INTO foo VALUES (847003,'sub-alpha','GESS90'); SELECT jsonb_build_object('turbines',jsonb_object_agg(serial_num,jsonb_build_object('name',name,'type',type))) FROM foo; +SELECT jsonb_object_agg(name, type) FROM foo; + +INSERT INTO foo VALUES (999999, NULL, 'bar'); +SELECT jsonb_object_agg(name, type) FROM foo; + -- jsonb_object -- one dimension @@ -478,28 +494,6 @@ SELECT * FROM jsonb_populate_recordset(NULL::jbpop,'[{"a":"blurfl","x":43.2},{"b SELECT * FROM jsonb_populate_recordset(row('def',99,NULL)::jbpop,'[{"a":"blurfl","x":43.2},{"b":3,"c":"2012-01-20 10:42:53"}]') q; SELECT * FROM jsonb_populate_recordset(row('def',99,NULL)::jbpop,'[{"a":[100,200,300],"x":43.2},{"a":{"z":true},"b":3,"c":"2012-01-20 10:42:53"}]') q; --- handling of unicode surrogate pairs - -SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a')::text) AS correct_in_utf8; -SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row -SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order -SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate -SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate - --- handling of simple unicode escapes - -SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; -SELECT jsonb '{ "a": "dollar \u0024 character" }' as correct_everywhere; -SELECT jsonb '{ "a": "dollar \\u0024 character" }' as not_an_escape; -SELECT jsonb '{ "a": "null \u0000 escape" }' as fails; -SELECT jsonb '{ "a": "null \\u0000 escape" }' as not_an_escape; - -SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; -SELECT jsonb '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; -SELECT jsonb '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape; -SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fails; -SELECT jsonb '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape; - -- jsonb_to_record and jsonb_to_recordset select * from jsonb_to_record('{"a":1,"b":"foo","c":"bar"}') @@ -529,7 +523,7 @@ SELECT count(*) FROM testjsonb WHERE j @> '{"age":25}'; SELECT count(*) FROM testjsonb WHERE j @> '{"age":25.0}'; SELECT count(*) FROM testjsonb WHERE j @> '{"array":["foo"]}'; SELECT count(*) FROM testjsonb WHERE j @> '{"array":["bar"]}'; --- excercise GIN_SEARCH_MODE_ALL +-- exercise GIN_SEARCH_MODE_ALL SELECT count(*) FROM testjsonb WHERE j @> '{}'; SELECT count(*) FROM testjsonb WHERE j ? 'public'; SELECT count(*) FROM testjsonb WHERE j ? 'bar'; @@ -582,7 +576,7 @@ SELECT count(*) FROM testjsonb WHERE j @> '{"wait":"CC"}'; SELECT count(*) FROM testjsonb WHERE j @> '{"wait":"CC", "public":true}'; SELECT count(*) FROM testjsonb WHERE j @> '{"age":25}'; SELECT count(*) FROM testjsonb WHERE j @> '{"age":25.0}'; --- excercise GIN_SEARCH_MODE_ALL +-- exercise GIN_SEARCH_MODE_ALL SELECT count(*) FROM testjsonb WHERE j @> '{}'; RESET enable_seqscan; @@ -642,6 +636,8 @@ SELECT '["a","b","c",[1,2],null]'::jsonb -> 3 -> 1; SELECT '["a","b","c",[1,2],null]'::jsonb -> 4; SELECT '["a","b","c",[1,2],null]'::jsonb -> 5; SELECT '["a","b","c",[1,2],null]'::jsonb -> -1; +SELECT '["a","b","c",[1,2],null]'::jsonb -> -5; +SELECT '["a","b","c",[1,2],null]'::jsonb -> -6; --nested path extraction SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{0}'; @@ -652,6 +648,8 @@ SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,1}'; SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,2}'; SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,3}'; SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,-1}'; +SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,-3}'; +SELECT '{"a":"b","c":[1,2,3]}'::jsonb #> '{c,-4}'; SELECT '[0,1,2,[3,4],{"5":"five"}]'::jsonb #> '{0}'; SELECT '[0,1,2,[3,4],{"5":"five"}]'::jsonb #> '{3}'; @@ -704,6 +702,13 @@ select '["c"]' || '["a", "b"]'::jsonb; select '["a", "b"]'::jsonb || '"c"'; select '"c"' || '["a", "b"]'::jsonb; +select '[]'::jsonb || '["a"]'::jsonb; +select '[]'::jsonb || '"a"'::jsonb; +select '"b"'::jsonb || '"a"'::jsonb; +select '{}'::jsonb || '{"a":"b"}'::jsonb; +select '[]'::jsonb || '{"a":"b"}'::jsonb; +select '{"a":"b"}'::jsonb || '[]'::jsonb; + select '"a"'::jsonb || '{"a":1}'; select '{"a":1}' || '"a"'::jsonb; @@ -757,6 +762,7 @@ select jsonb_delete_path('{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2, select '{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb #- '{n}'; select '{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb #- '{b,-1}'; +select '{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb #- '{b,-1e}'; -- invalid array subscript select '{"n":null, "a":1, "b":[1,2], "c":{"1":2}, "d":{"1":[2,3]}}'::jsonb #- '{d,1,0}'; @@ -794,3 +800,6 @@ select jsonb_set('{}','{x}','{"foo":123}'); select jsonb_set('[]','{0}','{"foo":123}'); select jsonb_set('[]','{99}','{"foo":123}'); select jsonb_set('[]','{-99}','{"foo":123}'); +select jsonb_set('{"a": [1, 2, 3]}', '{a, non_integer}', '"new_value"'); +select jsonb_set('{"a": {"b": [1, 2, 3]}}', '{a, b, non_integer}', '"new_value"'); +select jsonb_set('{"a": {"b": [1, 2, 3]}}', '{a, b, NULL}', '"new_value"'); diff --git a/src/test/regress/sql/numeric.sql b/src/test/regress/sql/numeric.sql index 1633e4c375244..5405ffadc796c 100644 --- a/src/test/regress/sql/numeric.sql +++ b/src/test/regress/sql/numeric.sql @@ -811,6 +811,18 @@ INSERT INTO num_input_test(n1) VALUES (' N aN '); SELECT * FROM num_input_test; +-- +-- Test some corner cases for multiplication +-- + +select 4790999999999999999999999999999999999999999999999999999999999999999999999999999999999999 * 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; + +select 4789999999999999999999999999999999999999999999999999999999999999999999999999999999999999 * 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; + +select 4770999999999999999999999999999999999999999999999999999999999999999999999999999999999999 * 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; + +select 4769999999999999999999999999999999999999999999999999999999999999999999999999999999999999 * 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; + -- -- Test some corner cases for division -- diff --git a/src/test/regress/sql/oidjoins.sql b/src/test/regress/sql/oidjoins.sql index 651068b964cdc..2fa628d0f7384 100644 --- a/src/test/regress/sql/oidjoins.sql +++ b/src/test/regress/sql/oidjoins.sql @@ -273,6 +273,18 @@ SELECT ctid, extnamespace FROM pg_catalog.pg_extension fk WHERE extnamespace != 0 AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_namespace pk WHERE pk.oid = fk.extnamespace); +SELECT ctid, fdwowner +FROM pg_catalog.pg_foreign_data_wrapper fk +WHERE fdwowner != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_authid pk WHERE pk.oid = fk.fdwowner); +SELECT ctid, srvowner +FROM pg_catalog.pg_foreign_server fk +WHERE srvowner != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_authid pk WHERE pk.oid = fk.srvowner); +SELECT ctid, srvfdw +FROM pg_catalog.pg_foreign_server fk +WHERE srvfdw != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_foreign_data_wrapper pk WHERE pk.oid = fk.srvfdw); SELECT ctid, indexrelid FROM pg_catalog.pg_index fk WHERE indexrelid != 0 AND @@ -305,6 +317,14 @@ SELECT ctid, lanvalidator FROM pg_catalog.pg_language fk WHERE lanvalidator != 0 AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_proc pk WHERE pk.oid = fk.lanvalidator); +SELECT ctid, loid +FROM pg_catalog.pg_largeobject fk +WHERE loid != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_largeobject_metadata pk WHERE pk.oid = fk.loid); +SELECT ctid, lomowner +FROM pg_catalog.pg_largeobject_metadata fk +WHERE lomowner != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_authid pk WHERE pk.oid = fk.lomowner); SELECT ctid, nspowner FROM pg_catalog.pg_namespace fk WHERE nspowner != 0 AND @@ -473,6 +493,22 @@ SELECT ctid, spcowner FROM pg_catalog.pg_tablespace fk WHERE spcowner != 0 AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_authid pk WHERE pk.oid = fk.spcowner); +SELECT ctid, trftype +FROM pg_catalog.pg_transform fk +WHERE trftype != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type pk WHERE pk.oid = fk.trftype); +SELECT ctid, trflang +FROM pg_catalog.pg_transform fk +WHERE trflang != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_language pk WHERE pk.oid = fk.trflang); +SELECT ctid, trffromsql +FROM pg_catalog.pg_transform fk +WHERE trffromsql != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_proc pk WHERE pk.oid = fk.trffromsql); +SELECT ctid, trftosql +FROM pg_catalog.pg_transform fk +WHERE trftosql != 0 AND + NOT EXISTS(SELECT 1 FROM pg_catalog.pg_proc pk WHERE pk.oid = fk.trftosql); SELECT ctid, tgrelid FROM pg_catalog.pg_trigger fk WHERE tgrelid != 0 AND diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql index aaf3e8479fef5..879c6f2f3cadd 100644 --- a/src/test/regress/sql/plpgsql.sql +++ b/src/test/regress/sql/plpgsql.sql @@ -1745,7 +1745,7 @@ select trap_matching_test(1); create temp table foo (f1 int); -create function blockme() returns int as $$ +create function subxact_rollback_semantics() returns int as $$ declare x int; begin x := 1; @@ -1753,29 +1753,40 @@ begin begin x := x + 1; insert into foo values(x); + raise exception 'inner'; + exception + when others then + x := x * 10; + end; + insert into foo values(x); + return x; +end$$ language plpgsql; + +select subxact_rollback_semantics(); +select * from foo; +drop table foo; + +create function trap_timeout() returns void as $$ +begin + declare x int; + begin -- we assume this will take longer than 2 seconds: select count(*) into x from tenk1 a, tenk1 b, tenk1 c; exception when others then raise notice 'caught others?'; - return -1; when query_canceled then raise notice 'nyeah nyeah, can''t stop me'; - x := x * 10; end; - insert into foo values(x); - return x; + -- Abort transaction to abandon the statement_timeout setting. Otherwise, + -- the next top-level statement would be vulnerable to the timeout. + raise exception 'end of function'; end$$ language plpgsql; +begin; set statement_timeout to 2000; - -select blockme(); - -reset statement_timeout; - -select * from foo; - -drop table foo; +select trap_timeout(); +rollback; -- Test for pass-by-ref values being stored in proper context create function test_variable_storage() returns text as $$ @@ -3806,6 +3817,45 @@ rollback; drop function error2(p_name_table text); drop function error1(text); +-- Test for proper handling of cast-expression caching + +create function sql_to_date(integer) returns date as $$ +select $1::text::date +$$ language sql immutable strict; + +create cast (integer as date) with function sql_to_date(integer) as assignment; + +create function cast_invoker(integer) returns date as $$ +begin + return $1; +end$$ language plpgsql; + +select cast_invoker(20150717); +select cast_invoker(20150718); -- second call crashed in pre-release 9.5 + +begin; +select cast_invoker(20150717); +select cast_invoker(20150718); +savepoint s1; +select cast_invoker(20150718); +select cast_invoker(-1); -- fails +rollback to savepoint s1; +select cast_invoker(20150719); +select cast_invoker(20150720); +commit; + +drop function cast_invoker(integer); +drop function sql_to_date(integer) cascade; + +-- Test handling of cast cache inside DO blocks +-- (to check the original crash case, this must be a cast not previously +-- used in this session) + +begin; +do $$ declare x text[]; begin x := '{1.23, 4.56}'::numeric[]; end $$; +do $$ declare x text[]; begin x := '{1.23, 4.56}'::numeric[]; end $$; +end; + -- Test for consistent reporting of error context create function fail() returns int language plpgsql as $$ diff --git a/src/test/regress/sql/prepared_xacts.sql b/src/test/regress/sql/prepared_xacts.sql index 7902152775c70..dfb20a18e7c97 100644 --- a/src/test/regress/sql/prepared_xacts.sql +++ b/src/test/regress/sql/prepared_xacts.sql @@ -122,9 +122,10 @@ SELECT * FROM pxtest2; SELECT gid FROM pg_prepared_xacts; -- pxtest3 should be locked because of the pending DROP +begin; set statement_timeout to 2000; SELECT * FROM pxtest3; -reset statement_timeout; +rollback; -- Disconnect, we will continue testing in a different backend \c - @@ -133,9 +134,10 @@ reset statement_timeout; SELECT gid FROM pg_prepared_xacts; -- pxtest3 should still be locked because of the pending DROP +begin; set statement_timeout to 2000; SELECT * FROM pxtest3; -reset statement_timeout; +rollback; -- Commit table creation COMMIT PREPARED 'regress-one'; diff --git a/src/test/regress/sql/privileges.sql b/src/test/regress/sql/privileges.sql index 22b54a28c46cf..c1837c497af59 100644 --- a/src/test/regress/sql/privileges.sql +++ b/src/test/regress/sql/privileges.sql @@ -975,3 +975,87 @@ DROP USER regressuser3; DROP USER regressuser4; DROP USER regressuser5; DROP USER regressuser6; + + +-- permissions with LOCK TABLE +CREATE USER locktable_user; +CREATE TABLE lock_table (a int); + +-- LOCK TABLE and SELECT permission +GRANT SELECT ON lock_table TO locktable_user; +SET SESSION AUTHORIZATION locktable_user; +BEGIN; +LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should fail +ROLLBACK; +BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should pass +COMMIT; +BEGIN; +LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should fail +ROLLBACK; +\c +REVOKE SELECT ON lock_table FROM locktable_user; + +-- LOCK TABLE and INSERT permission +GRANT INSERT ON lock_table TO locktable_user; +SET SESSION AUTHORIZATION locktable_user; +BEGIN; +LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass +COMMIT; +BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail +ROLLBACK; +BEGIN; +LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should fail +ROLLBACK; +\c +REVOKE INSERT ON lock_table FROM locktable_user; + +-- LOCK TABLE and UPDATE permission +GRANT UPDATE ON lock_table TO locktable_user; +SET SESSION AUTHORIZATION locktable_user; +BEGIN; +LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass +COMMIT; +BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail +ROLLBACK; +BEGIN; +LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass +COMMIT; +\c +REVOKE UPDATE ON lock_table FROM locktable_user; + +-- LOCK TABLE and DELETE permission +GRANT DELETE ON lock_table TO locktable_user; +SET SESSION AUTHORIZATION locktable_user; +BEGIN; +LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass +COMMIT; +BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail +ROLLBACK; +BEGIN; +LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass +COMMIT; +\c +REVOKE DELETE ON lock_table FROM locktable_user; + +-- LOCK TABLE and TRUNCATE permission +GRANT TRUNCATE ON lock_table TO locktable_user; +SET SESSION AUTHORIZATION locktable_user; +BEGIN; +LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass +COMMIT; +BEGIN; +LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail +ROLLBACK; +BEGIN; +LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass +COMMIT; +\c +REVOKE TRUNCATE ON lock_table FROM locktable_user; + +-- clean up +DROP TABLE lock_table; +DROP USER locktable_user; diff --git a/src/test/regress/sql/regex.sql b/src/test/regress/sql/regex.sql index ceb9d699ce96e..c59fa35f24d81 100644 --- a/src/test/regress/sql/regex.sql +++ b/src/test/regress/sql/regex.sql @@ -34,14 +34,39 @@ explain (costs off) select * from pg_proc where proname ~ '^abc+d'; explain (costs off) select * from pg_proc where proname ~ '^(abc)(def)'; explain (costs off) select * from pg_proc where proname ~ '^(abc)$'; explain (costs off) select * from pg_proc where proname ~ '^(abc)?d'; +explain (costs off) select * from pg_proc where proname ~ '^abcd(x|(?=\w\w)q)'; -- Test for infinite loop in pullback() (CVE-2007-4772) select 'a' ~ '($|^)*'; +-- These cases expose a bug in the original fix for CVE-2007-4772 +select 'a' ~ '(^)+^'; +select 'a' ~ '$($$)+'; + +-- More cases of infinite loop in pullback(), not fixed by CVE-2007-4772 fix +select 'a' ~ '($^)+'; +select 'a' ~ '(^$)*'; +select 'aa bb cc' ~ '(^(?!aa))+'; +select 'aa x' ~ '(^(?!aa)(?!bb)(?!cc))+'; +select 'bb x' ~ '(^(?!aa)(?!bb)(?!cc))+'; +select 'cc x' ~ '(^(?!aa)(?!bb)(?!cc))+'; +select 'dd x' ~ '(^(?!aa)(?!bb)(?!cc))+'; + -- Test for infinite loop in fixempties() (Tcl bugs 3604074, 3606683) select 'a' ~ '((((((a)*)*)*)*)*)*'; select 'a' ~ '((((((a+|)+|)+|)+|)+|)+|)'; +-- These cases used to give too-many-states failures +select 'x' ~ 'abcd(\m)+xyz'; +select 'a' ~ '^abcd*(((((^(a c(e?d)a+|)+|)+|)+|)+|a)+|)'; +select 'x' ~ 'a^(^)bcd*xy(((((($a+|)+|)+|)+$|)+|)+|)^$'; +select 'x' ~ 'xyz(\Y\Y)+'; +select 'x' ~ 'x|(?:\M)+'; + +-- This generates O(N) states but O(N^2) arcs, so it causes problems +-- if arc count is not constrained +select 'x' ~ repeat('x*y*z*', 1000); + -- Test backref in combination with non-greedy quantifier -- https://core.tcl.tk/tcl/tktview/6585b21ca8fa6f3678d442b97241fdd43dba2ec0 select 'Programmer' ~ '(\w).*?\1' as t; @@ -50,3 +75,10 @@ select regexp_matches('Programmer', '(\w)(.*?\1)', 'g'); -- Test for proper matching of non-greedy iteration (bug #11478) select regexp_matches('foo/bar/baz', '^([^/]+?)(?:/([^/]+?))(?:/([^/]+?))?$', ''); + +-- Test for infinite loop in cfindloop with zero-length possible match +-- but no actual match (can only happen in the presence of backrefs) +select 'a' ~ '$()|^\1'; +select 'a' ~ '.. ()|\1'; +select 'a' ~ '()*\1'; +select 'a' ~ '()+\1'; diff --git a/src/test/regress/sql/roleattributes.sql b/src/test/regress/sql/roleattributes.sql new file mode 100644 index 0000000000000..67c6b0f835190 --- /dev/null +++ b/src/test/regress/sql/roleattributes.sql @@ -0,0 +1,97 @@ +-- default for superuser is false +CREATE ROLE test_def_superuser; +SELECT * FROM pg_authid WHERE rolname = 'test_def_superuser'; +CREATE ROLE test_superuser WITH SUPERUSER; +SELECT * FROM pg_authid WHERE rolname = 'test_superuser'; +ALTER ROLE test_superuser WITH NOSUPERUSER; +SELECT * FROM pg_authid WHERE rolname = 'test_superuser'; +ALTER ROLE test_superuser WITH SUPERUSER; +SELECT * FROM pg_authid WHERE rolname = 'test_superuser'; + +-- default for inherit is true +CREATE ROLE test_def_inherit; +SELECT * FROM pg_authid WHERE rolname = 'test_def_inherit'; +CREATE ROLE test_inherit WITH NOINHERIT; +SELECT * FROM pg_authid WHERE rolname = 'test_inherit'; +ALTER ROLE test_inherit WITH INHERIT; +SELECT * FROM pg_authid WHERE rolname = 'test_inherit'; +ALTER ROLE test_inherit WITH NOINHERIT; +SELECT * FROM pg_authid WHERE rolname = 'test_inherit'; + +-- default for create role is false +CREATE ROLE test_def_createrole; +SELECT * FROM pg_authid WHERE rolname = 'test_def_createrole'; +CREATE ROLE test_createrole WITH CREATEROLE; +SELECT * FROM pg_authid WHERE rolname = 'test_createrole'; +ALTER ROLE test_createrole WITH NOCREATEROLE; +SELECT * FROM pg_authid WHERE rolname = 'test_createrole'; +ALTER ROLE test_createrole WITH CREATEROLE; +SELECT * FROM pg_authid WHERE rolname = 'test_createrole'; + +-- default for create database is false +CREATE ROLE test_def_createdb; +SELECT * FROM pg_authid WHERE rolname = 'test_def_createdb'; +CREATE ROLE test_createdb WITH CREATEDB; +SELECT * FROM pg_authid WHERE rolname = 'test_createdb'; +ALTER ROLE test_createdb WITH NOCREATEDB; +SELECT * FROM pg_authid WHERE rolname = 'test_createdb'; +ALTER ROLE test_createdb WITH CREATEDB; +SELECT * FROM pg_authid WHERE rolname = 'test_createdb'; + +-- default for can login is false for role +CREATE ROLE test_def_role_canlogin; +SELECT * FROM pg_authid WHERE rolname = 'test_def_role_canlogin'; +CREATE ROLE test_role_canlogin WITH LOGIN; +SELECT * FROM pg_authid WHERE rolname = 'test_role_canlogin'; +ALTER ROLE test_role_canlogin WITH NOLOGIN; +SELECT * FROM pg_authid WHERE rolname = 'test_role_canlogin'; +ALTER ROLE test_role_canlogin WITH LOGIN; +SELECT * FROM pg_authid WHERE rolname = 'test_role_canlogin'; + +-- default for can login is true for user +CREATE USER test_def_user_canlogin; +SELECT * FROM pg_authid WHERE rolname = 'test_def_user_canlogin'; +CREATE USER test_user_canlogin WITH NOLOGIN; +SELECT * FROM pg_authid WHERE rolname = 'test_user_canlogin'; +ALTER USER test_user_canlogin WITH LOGIN; +SELECT * FROM pg_authid WHERE rolname = 'test_user_canlogin'; +ALTER USER test_user_canlogin WITH NOLOGIN; +SELECT * FROM pg_authid WHERE rolname = 'test_user_canlogin'; + +-- default for replication is false +CREATE ROLE test_def_replication; +SELECT * FROM pg_authid WHERE rolname = 'test_def_replication'; +CREATE ROLE test_replication WITH REPLICATION; +SELECT * FROM pg_authid WHERE rolname = 'test_replication'; +ALTER ROLE test_replication WITH NOREPLICATION; +SELECT * FROM pg_authid WHERE rolname = 'test_replication'; +ALTER ROLE test_replication WITH REPLICATION; +SELECT * FROM pg_authid WHERE rolname = 'test_replication'; + +-- default for bypassrls is false +CREATE ROLE test_def_bypassrls; +SELECT * FROM pg_authid WHERE rolname = 'test_def_bypassrls'; +CREATE ROLE test_bypassrls WITH BYPASSRLS; +SELECT * FROM pg_authid WHERE rolname = 'test_bypassrls'; +ALTER ROLE test_bypassrls WITH NOBYPASSRLS; +SELECT * FROM pg_authid WHERE rolname = 'test_bypassrls'; +ALTER ROLE test_bypassrls WITH BYPASSRLS; +SELECT * FROM pg_authid WHERE rolname = 'test_bypassrls'; + +-- clean up roles +DROP ROLE test_def_superuser; +DROP ROLE test_superuser; +DROP ROLE test_def_inherit; +DROP ROLE test_inherit; +DROP ROLE test_def_createrole; +DROP ROLE test_createrole; +DROP ROLE test_def_createdb; +DROP ROLE test_createdb; +DROP ROLE test_def_role_canlogin; +DROP ROLE test_role_canlogin; +DROP USER test_def_user_canlogin; +DROP USER test_user_canlogin; +DROP ROLE test_def_replication; +DROP ROLE test_replication; +DROP ROLE test_def_bypassrls; +DROP ROLE test_bypassrls; diff --git a/src/test/regress/sql/rowsecurity.sql b/src/test/regress/sql/rowsecurity.sql index fdadf99fd6216..b230a0f6d983a 100644 --- a/src/test/regress/sql/rowsecurity.sql +++ b/src/test/regress/sql/rowsecurity.sql @@ -94,14 +94,18 @@ SET row_security TO ON; SELECT * FROM document WHERE f_leak(dtitle) ORDER BY did; SELECT * FROM document NATURAL JOIN category WHERE f_leak(dtitle) ORDER BY did; -SELECT * FROM document TABLESAMPLE BERNOULLI (50) REPEATABLE(1) WHERE f_leak(dtitle) ORDER BY did; +-- try a sampled version +SELECT * FROM document TABLESAMPLE BERNOULLI(50) REPEATABLE(0) + WHERE f_leak(dtitle) ORDER BY did; -- viewpoint from rls_regress_user2 SET SESSION AUTHORIZATION rls_regress_user2; SELECT * FROM document WHERE f_leak(dtitle) ORDER BY did; SELECT * FROM document NATURAL JOIN category WHERE f_leak(dtitle) ORDER BY did; -SELECT * FROM document TABLESAMPLE BERNOULLI (50) REPEATABLE(1) WHERE f_leak(dtitle) ORDER BY did; +-- try a sampled version +SELECT * FROM document TABLESAMPLE BERNOULLI(50) REPEATABLE(0) + WHERE f_leak(dtitle) ORDER BY did; EXPLAIN (COSTS OFF) SELECT * FROM document WHERE f_leak(dtitle); EXPLAIN (COSTS OFF) SELECT * FROM document NATURAL JOIN category WHERE f_leak(dtitle); @@ -160,12 +164,6 @@ SET row_security TO ON; SELECT * FROM document; SELECT * FROM category; --- database superuser does not bypass RLS policy when FORCE enabled. -RESET SESSION AUTHORIZATION; -SET row_security TO FORCE; -SELECT * FROM document; -SELECT * FROM category; - -- database superuser does bypass RLS policy when disabled RESET SESSION AUTHORIZATION; SET row_security TO OFF; @@ -178,12 +176,6 @@ SET row_security TO OFF; SELECT * FROM document; SELECT * FROM category; --- RLS policy applies to table owner when FORCE enabled. -SET SESSION AUTHORIZATION rls_regress_user0; -SET row_security TO FORCE; -SELECT * FROM document; -SELECT * FROM category; - -- RLS policy does not apply to table owner when RLS enabled. SET SESSION AUTHORIZATION rls_regress_user0; SET row_security TO ON; @@ -263,6 +255,10 @@ EXPLAIN (COSTS OFF) SELECT * FROM t1 FOR SHARE; SELECT * FROM t1 WHERE f_leak(b) FOR SHARE; EXPLAIN (COSTS OFF) SELECT * FROM t1 WHERE f_leak(b) FOR SHARE; +-- union all query +SELECT a, b, oid FROM t2 UNION ALL SELECT a, b, oid FROM t3; +EXPLAIN (COSTS OFF) SELECT a, b, oid FROM t2 UNION ALL SELECT a, b, oid FROM t3; + -- superuser is allowed to bypass RLS checks RESET SESSION AUTHORIZATION; SET row_security TO OFF; @@ -802,7 +798,7 @@ SELECT * FROM y2 WHERE f_leak('abc'); EXPLAIN (COSTS OFF) SELECT * FROM y2 WHERE f_leak('abc'); CREATE TABLE test_qual_pushdown ( - abc text + abc text ); INSERT INTO test_qual_pushdown VALUES ('abc'),('def'); @@ -962,17 +958,6 @@ SET SESSION AUTHORIZATION rls_regress_user0; SELECT * FROM t1; EXPLAIN (COSTS OFF) SELECT * FROM t1; --- Check that default deny does apply to superuser when RLS force. -SET row_security TO FORCE; -RESET SESSION AUTHORIZATION; -SELECT * FROM t1; -EXPLAIN (COSTS OFF) SELECT * FROM t1; - --- Check that default deny does apply to table owner when RLS force. -SET SESSION AUTHORIZATION rls_regress_user0; -SELECT * FROM t1; -EXPLAIN (COSTS OFF) SELECT * FROM t1; - -- Check that default deny applies to non-owner/non-superuser when RLS on. SET SESSION AUTHORIZATION rls_regress_user1; SET row_security TO ON; @@ -1003,8 +988,6 @@ SET row_security TO OFF; COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; SET row_security TO ON; COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; -SET row_security TO FORCE; -COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; -- Check COPY TO as user with permissions. SET SESSION AUTHORIZATION rls_regress_user1; @@ -1012,8 +995,6 @@ SET row_security TO OFF; COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --fail - insufficient to bypass rls SET row_security TO ON; COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --ok -SET row_security TO FORCE; -COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --ok -- Check COPY TO as user with permissions and BYPASSRLS SET SESSION AUTHORIZATION rls_regress_exempt_user; @@ -1021,17 +1002,53 @@ SET row_security TO OFF; COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --ok SET row_security TO ON; COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --ok -SET row_security TO FORCE; -COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --ok --- Check COPY TO as user without permissions.SET row_security TO OFF; +-- Check COPY TO as user without permissions. SET row_security TO OFF; SET SESSION AUTHORIZATION rls_regress_user2; SET row_security TO OFF; COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --fail - insufficient to bypass rls SET row_security TO ON; COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --fail - permission denied -SET row_security TO FORCE; -COPY (SELECT * FROM copy_t ORDER BY a ASC) TO STDOUT WITH DELIMITER ','; --fail - permission denied + +-- Check COPY relation TO; keep it just one row to avoid reordering issues +RESET SESSION AUTHORIZATION; +SET row_security TO ON; +CREATE TABLE copy_rel_to (a integer, b text); +CREATE POLICY p1 ON copy_rel_to USING (a % 2 = 0); + +ALTER TABLE copy_rel_to ENABLE ROW LEVEL SECURITY; + +GRANT ALL ON copy_rel_to TO rls_regress_user1, rls_regress_exempt_user; + +INSERT INTO copy_rel_to VALUES (1, md5('1')); + +-- Check COPY TO as Superuser/owner. +RESET SESSION AUTHORIZATION; +SET row_security TO OFF; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; +SET row_security TO ON; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; + +-- Check COPY TO as user with permissions. +SET SESSION AUTHORIZATION rls_regress_user1; +SET row_security TO OFF; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --fail - insufficient to bypass rls +SET row_security TO ON; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --ok + +-- Check COPY TO as user with permissions and BYPASSRLS +SET SESSION AUTHORIZATION rls_regress_exempt_user; +SET row_security TO OFF; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --ok +SET row_security TO ON; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --ok + +-- Check COPY TO as user without permissions. SET row_security TO OFF; +SET SESSION AUTHORIZATION rls_regress_user2; +SET row_security TO OFF; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --fail - permission denied +SET row_security TO ON; +COPY copy_rel_to TO STDOUT WITH DELIMITER ','; --fail - permission denied -- Check COPY FROM as Superuser/owner. RESET SESSION AUTHORIZATION; @@ -1049,8 +1066,6 @@ COPY copy_t FROM STDIN; --ok 3 cde 4 def \. -SET row_security TO FORCE; -COPY copy_t FROM STDIN; --fail - COPY FROM not supported by RLS. -- Check COPY FROM as user with permissions. SET SESSION AUTHORIZATION rls_regress_user1; @@ -1058,22 +1073,16 @@ SET row_security TO OFF; COPY copy_t FROM STDIN; --fail - insufficient privilege to bypass rls. SET row_security TO ON; COPY copy_t FROM STDIN; --fail - COPY FROM not supported by RLS. -SET row_security TO FORCE; -COPY copy_t FROM STDIN; --fail - COPY FROM not supported by RLS. --- Check COPY TO as user with permissions and BYPASSRLS +-- Check COPY FROM as user with permissions and BYPASSRLS SET SESSION AUTHORIZATION rls_regress_exempt_user; -SET row_security TO OFF; +SET row_security TO ON; COPY copy_t FROM STDIN; --ok 1 abc 2 bcd 3 cde 4 def \. -SET row_security TO ON; -COPY copy_t FROM STDIN; --fail - COPY FROM not supported by RLS. -SET row_security TO FORCE; -COPY copy_t FROM STDIN; --fail - COPY FROM not supported by RLS. -- Check COPY FROM as user without permissions. SET SESSION AUTHORIZATION rls_regress_user2; @@ -1081,11 +1090,405 @@ SET row_security TO OFF; COPY copy_t FROM STDIN; --fail - permission denied. SET row_security TO ON; COPY copy_t FROM STDIN; --fail - permission denied. -SET row_security TO FORCE; -COPY copy_t FROM STDIN; --fail - permission denied. RESET SESSION AUTHORIZATION; DROP TABLE copy_t; +DROP TABLE copy_rel_to CASCADE; + +-- Check WHERE CURRENT OF +SET SESSION AUTHORIZATION rls_regress_user0; + +CREATE TABLE current_check (currentid int, payload text, rlsuser text); +GRANT ALL ON current_check TO PUBLIC; + +INSERT INTO current_check VALUES + (1, 'abc', 'rls_regress_user1'), + (2, 'bcd', 'rls_regress_user1'), + (3, 'cde', 'rls_regress_user1'), + (4, 'def', 'rls_regress_user1'); + +CREATE POLICY p1 ON current_check FOR SELECT USING (currentid % 2 = 0); +CREATE POLICY p2 ON current_check FOR DELETE USING (currentid = 4 AND rlsuser = current_user); +CREATE POLICY p3 ON current_check FOR UPDATE USING (currentid = 4) WITH CHECK (rlsuser = current_user); + +ALTER TABLE current_check ENABLE ROW LEVEL SECURITY; + +SET SESSION AUTHORIZATION rls_regress_user1; + +-- Can SELECT even rows +SELECT * FROM current_check; + +-- Cannot UPDATE row 2 +UPDATE current_check SET payload = payload || '_new' WHERE currentid = 2 RETURNING *; + +BEGIN; + +DECLARE current_check_cursor SCROLL CURSOR FOR SELECT * FROM current_check; +-- Returns rows that can be seen according to SELECT policy, like plain SELECT +-- above (even rows) +FETCH ABSOLUTE 1 FROM current_check_cursor; +-- Still cannot UPDATE row 2 through cursor +UPDATE current_check SET payload = payload || '_new' WHERE CURRENT OF current_check_cursor RETURNING *; +-- Can update row 4 through cursor, which is the next visible row +FETCH RELATIVE 1 FROM current_check_cursor; +UPDATE current_check SET payload = payload || '_new' WHERE CURRENT OF current_check_cursor RETURNING *; +SELECT * FROM current_check; +-- Plan should be a subquery TID scan +EXPLAIN (COSTS OFF) UPDATE current_check SET payload = payload WHERE CURRENT OF current_check_cursor; +-- Similarly can only delete row 4 +FETCH ABSOLUTE 1 FROM current_check_cursor; +DELETE FROM current_check WHERE CURRENT OF current_check_cursor RETURNING *; +FETCH RELATIVE 1 FROM current_check_cursor; +DELETE FROM current_check WHERE CURRENT OF current_check_cursor RETURNING *; +SELECT * FROM current_check; + +COMMIT; + +-- +-- check pg_stats view filtering +-- +SET row_security TO ON; +SET SESSION AUTHORIZATION rls_regress_user0; +ANALYZE current_check; +-- Stats visible +SELECT row_security_active('current_check'); +SELECT attname, most_common_vals FROM pg_stats + WHERE tablename = 'current_check' + ORDER BY 1; + +SET SESSION AUTHORIZATION rls_regress_user1; +-- Stats not visible +SELECT row_security_active('current_check'); +SELECT attname, most_common_vals FROM pg_stats + WHERE tablename = 'current_check' + ORDER BY 1; + +-- +-- Collation support +-- +BEGIN; +CREATE TABLE coll_t (c) AS VALUES ('bar'::text); +CREATE POLICY coll_p ON coll_t USING (c < ('foo'::text COLLATE "C")); +ALTER TABLE coll_t ENABLE ROW LEVEL SECURITY; +GRANT SELECT ON coll_t TO rls_regress_user0; +SELECT (string_to_array(polqual, ':'))[7] AS inputcollid FROM pg_policy WHERE polrelid = 'coll_t'::regclass; +SET SESSION AUTHORIZATION rls_regress_user0; +SELECT * FROM coll_t; +ROLLBACK; + +-- +-- Shared Object Dependencies +-- +RESET SESSION AUTHORIZATION; +BEGIN; +CREATE ROLE alice; +CREATE ROLE bob; +CREATE TABLE tbl1 (c) AS VALUES ('bar'::text); +GRANT SELECT ON TABLE tbl1 TO alice; +CREATE POLICY P ON tbl1 TO alice, bob USING (true); +SELECT refclassid::regclass, deptype + FROM pg_depend + WHERE classid = 'pg_policy'::regclass + AND refobjid = 'tbl1'::regclass; +SELECT refclassid::regclass, deptype + FROM pg_shdepend + WHERE classid = 'pg_policy'::regclass + AND refobjid IN ('alice'::regrole, 'bob'::regrole); + +SAVEPOINT q; +DROP ROLE alice; --fails due to dependency on POLICY p +ROLLBACK TO q; + +ALTER POLICY p ON tbl1 TO bob USING (true); +SAVEPOINT q; +DROP ROLE alice; --fails due to dependency on GRANT SELECT +ROLLBACK TO q; + +REVOKE ALL ON TABLE tbl1 FROM alice; +SAVEPOINT q; +DROP ROLE alice; --succeeds +ROLLBACK TO q; + +SAVEPOINT q; +DROP ROLE bob; --fails due to dependency on POLICY p +ROLLBACK TO q; + +DROP POLICY p ON tbl1; +SAVEPOINT q; +DROP ROLE bob; -- succeeds +ROLLBACK TO q; + +ROLLBACK; -- cleanup + +-- +-- Converting table to view +-- +BEGIN; +CREATE TABLE t (c int); +CREATE POLICY p ON t USING (c % 2 = 1); +ALTER TABLE t ENABLE ROW LEVEL SECURITY; + +SAVEPOINT q; +CREATE RULE "_RETURN" AS ON SELECT TO t DO INSTEAD + SELECT * FROM generate_series(1,5) t0(c); -- fails due to row level security enabled +ROLLBACK TO q; + +ALTER TABLE t DISABLE ROW LEVEL SECURITY; +SAVEPOINT q; +CREATE RULE "_RETURN" AS ON SELECT TO t DO INSTEAD + SELECT * FROM generate_series(1,5) t0(c); -- fails due to policy p on t +ROLLBACK TO q; + +DROP POLICY p ON t; +CREATE RULE "_RETURN" AS ON SELECT TO t DO INSTEAD + SELECT * FROM generate_series(1,5) t0(c); -- succeeds +ROLLBACK; + +-- +-- Policy expression handling +-- +BEGIN; +CREATE TABLE t (c) AS VALUES ('bar'::text); +CREATE POLICY p ON t USING (max(c)); -- fails: aggregate functions are not allowed in policy expressions +ROLLBACK; + +-- +-- Non-target relations are only subject to SELECT policies +-- +SET SESSION AUTHORIZATION rls_regress_user0; +CREATE TABLE r1 (a int); +CREATE TABLE r2 (a int); +INSERT INTO r1 VALUES (10), (20); +INSERT INTO r2 VALUES (10), (20); + +GRANT ALL ON r1, r2 TO rls_regress_user1; + +CREATE POLICY p1 ON r1 USING (true); +ALTER TABLE r1 ENABLE ROW LEVEL SECURITY; + +CREATE POLICY p1 ON r2 FOR SELECT USING (true); +CREATE POLICY p2 ON r2 FOR INSERT WITH CHECK (false); +CREATE POLICY p3 ON r2 FOR UPDATE USING (false); +CREATE POLICY p4 ON r2 FOR DELETE USING (false); +ALTER TABLE r2 ENABLE ROW LEVEL SECURITY; + +SET SESSION AUTHORIZATION rls_regress_user1; +SELECT * FROM r1; +SELECT * FROM r2; + +-- r2 is read-only +INSERT INTO r2 VALUES (2); -- Not allowed +UPDATE r2 SET a = 2 RETURNING *; -- Updates nothing +DELETE FROM r2 RETURNING *; -- Deletes nothing + +-- r2 can be used as a non-target relation in DML +INSERT INTO r1 SELECT a + 1 FROM r2 RETURNING *; -- OK +UPDATE r1 SET a = r2.a + 2 FROM r2 WHERE r1.a = r2.a RETURNING *; -- OK +DELETE FROM r1 USING r2 WHERE r1.a = r2.a + 2 RETURNING *; -- OK +SELECT * FROM r1; +SELECT * FROM r2; + +SET SESSION AUTHORIZATION rls_regress_user0; +DROP TABLE r1; +DROP TABLE r2; + +-- +-- FORCE ROW LEVEL SECURITY applies RLS to owners but +-- only when row_security = on +-- +SET SESSION AUTHORIZATION rls_regress_user0; +SET row_security = on; +CREATE TABLE r1 (a int); +INSERT INTO r1 VALUES (10), (20); + +CREATE POLICY p1 ON r1 USING (false); +ALTER TABLE r1 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r1 FORCE ROW LEVEL SECURITY; + +-- No error, but no rows +TABLE r1; + +-- RLS error +INSERT INTO r1 VALUES (1); + +-- No error (unable to see any rows to update) +UPDATE r1 SET a = 1; +TABLE r1; + +-- No error (unable to see any rows to delete) +DELETE FROM r1; +TABLE r1; + +SET row_security = off; +-- Shows all rows +TABLE r1; + +-- Update all rows +UPDATE r1 SET a = 1; +TABLE r1; + +-- Delete all rows +DELETE FROM r1; +TABLE r1; + +DROP TABLE r1; + +-- +-- FORCE ROW LEVEL SECURITY does not break RI +-- +SET SESSION AUTHORIZATION rls_regress_user0; +SET row_security = on; +CREATE TABLE r1 (a int PRIMARY KEY); +CREATE TABLE r2 (a int REFERENCES r1); +INSERT INTO r1 VALUES (10), (20); +INSERT INTO r2 VALUES (10), (20); + +-- Create policies on r2 which prevent the +-- owner from seeing any rows, but RI should +-- still see them. +CREATE POLICY p1 ON r2 USING (false); +ALTER TABLE r2 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r2 FORCE ROW LEVEL SECURITY; + +-- Errors due to rows in r2 +DELETE FROM r1; + +-- Reset r2 to no-RLS +DROP POLICY p1 ON r2; +ALTER TABLE r2 NO FORCE ROW LEVEL SECURITY; +ALTER TABLE r2 DISABLE ROW LEVEL SECURITY; + +-- clean out r2 for INSERT test below +DELETE FROM r2; + +-- Change r1 to not allow rows to be seen +CREATE POLICY p1 ON r1 USING (false); +ALTER TABLE r1 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r1 FORCE ROW LEVEL SECURITY; + +-- No rows seen +TABLE r1; + +-- No error, RI still sees that row exists in r1 +INSERT INTO r2 VALUES (10); + +DROP TABLE r2; +DROP TABLE r1; + +-- Ensure cascaded DELETE works +CREATE TABLE r1 (a int PRIMARY KEY); +CREATE TABLE r2 (a int REFERENCES r1 ON DELETE CASCADE); +INSERT INTO r1 VALUES (10), (20); +INSERT INTO r2 VALUES (10), (20); + +-- Create policies on r2 which prevent the +-- owner from seeing any rows, but RI should +-- still see them. +CREATE POLICY p1 ON r2 USING (false); +ALTER TABLE r2 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r2 FORCE ROW LEVEL SECURITY; + +-- Deletes all records from both +DELETE FROM r1; + +-- Remove FORCE from r2 +ALTER TABLE r2 NO FORCE ROW LEVEL SECURITY; + +-- As owner, we now bypass RLS +-- verify no rows in r2 now +TABLE r2; + +DROP TABLE r2; +DROP TABLE r1; + +-- Ensure cascaded UPDATE works +CREATE TABLE r1 (a int PRIMARY KEY); +CREATE TABLE r2 (a int REFERENCES r1 ON UPDATE CASCADE); +INSERT INTO r1 VALUES (10), (20); +INSERT INTO r2 VALUES (10), (20); + +-- Create policies on r2 which prevent the +-- owner from seeing any rows, but RI should +-- still see them. +CREATE POLICY p1 ON r2 USING (false); +ALTER TABLE r2 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r2 FORCE ROW LEVEL SECURITY; + +-- Updates records in both +UPDATE r1 SET a = a+5; + +-- Remove FORCE from r2 +ALTER TABLE r2 NO FORCE ROW LEVEL SECURITY; + +-- As owner, we now bypass RLS +-- verify records in r2 updated +TABLE r2; + +DROP TABLE r2; +DROP TABLE r1; + +-- +-- Test INSERT+RETURNING applies SELECT policies as +-- WithCheckOptions (meaning an error is thrown) +-- +SET SESSION AUTHORIZATION rls_regress_user0; +SET row_security = on; +CREATE TABLE r1 (a int); + +CREATE POLICY p1 ON r1 FOR SELECT USING (false); +CREATE POLICY p2 ON r1 FOR INSERT WITH CHECK (true); +ALTER TABLE r1 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r1 FORCE ROW LEVEL SECURITY; + +-- Works fine +INSERT INTO r1 VALUES (10), (20); + +-- No error, but no rows +TABLE r1; + +SET row_security = off; +-- Rows shown now +TABLE r1; + +SET row_security = on; + +-- Error +INSERT INTO r1 VALUES (10), (20) RETURNING *; + +DROP TABLE r1; + +-- +-- Test UPDATE+RETURNING applies SELECT policies as +-- WithCheckOptions (meaning an error is thrown) +-- +SET SESSION AUTHORIZATION rls_regress_user0; +SET row_security = on; +CREATE TABLE r1 (a int); + +CREATE POLICY p1 ON r1 FOR SELECT USING (a < 20); +CREATE POLICY p2 ON r1 FOR UPDATE USING (a < 20) WITH CHECK (true); +INSERT INTO r1 VALUES (10); +ALTER TABLE r1 ENABLE ROW LEVEL SECURITY; +ALTER TABLE r1 FORCE ROW LEVEL SECURITY; + +-- Works fine +UPDATE r1 SET a = 30; + +-- Show updated rows +SET row_security = off; +TABLE r1; +-- reset value in r1 for test with RETURNING +UPDATE r1 SET a = 10; + +-- Verify row reset +TABLE r1; + +SET row_security = on; + +-- Error +UPDATE r1 SET a = 30 RETURNING *; + +DROP TABLE r1; -- -- Clean up objects @@ -1104,3 +1507,21 @@ DROP USER rls_regress_user2; DROP USER rls_regress_exempt_user; DROP ROLE rls_regress_group1; DROP ROLE rls_regress_group2; + +-- Arrange to have a few policies left over, for testing +-- pg_dump/pg_restore +CREATE SCHEMA rls_regress_schema; +CREATE TABLE rls_tbl (c1 int); +ALTER TABLE rls_tbl ENABLE ROW LEVEL SECURITY; +CREATE POLICY p1 ON rls_tbl USING (c1 > 5); +CREATE POLICY p2 ON rls_tbl FOR SELECT USING (c1 <= 3); +CREATE POLICY p3 ON rls_tbl FOR UPDATE USING (c1 <= 3) WITH CHECK (c1 > 5); +CREATE POLICY p4 ON rls_tbl FOR DELETE USING (c1 <= 3); + +CREATE TABLE rls_tbl_force (c1 int); +ALTER TABLE rls_tbl_force ENABLE ROW LEVEL SECURITY; +ALTER TABLE rls_tbl_force FORCE ROW LEVEL SECURITY; +CREATE POLICY p1 ON rls_tbl_force USING (c1 = 5) WITH CHECK (c1 < 5); +CREATE POLICY p2 ON rls_tbl_force FOR SELECT USING (c1 = 8); +CREATE POLICY p3 ON rls_tbl_force FOR UPDATE USING (c1 = 8) WITH CHECK (c1 >= 5); +CREATE POLICY p4 ON rls_tbl_force FOR DELETE USING (c1 = 8); diff --git a/src/test/regress/sql/rules.sql b/src/test/regress/sql/rules.sql index 561e2fd29a5de..4299a5b172298 100644 --- a/src/test/regress/sql/rules.sql +++ b/src/test/regress/sql/rules.sql @@ -1105,7 +1105,7 @@ CREATE RULE hat_upsert AS ON INSERT TO hats ON CONFLICT (hat_name) DO UPDATE SET hat_name = hat_data.hat_name, hat_color = excluded.hat_color - WHERE excluded.hat_color <> 'forbidden' + WHERE excluded.hat_color <> 'forbidden' AND hat_data.* != excluded.* RETURNING *; SELECT definition FROM pg_rules WHERE tablename = 'hats' ORDER BY rulename; diff --git a/src/test/regress/sql/tablesample.sql b/src/test/regress/sql/tablesample.sql index 7b3eb9bedf7bb..eec9793496696 100644 --- a/src/test/regress/sql/tablesample.sql +++ b/src/test/regress/sql/tablesample.sql @@ -1,26 +1,37 @@ -CREATE TABLE test_tablesample (id int, name text) WITH (fillfactor=10); -- force smaller pages so we don't have to load too much data to get multiple pages +CREATE TABLE test_tablesample (id int, name text) WITH (fillfactor=10); +-- use fillfactor so we don't have to load too much data to get multiple pages -INSERT INTO test_tablesample SELECT i, repeat(i::text, 200) FROM generate_series(0, 9) s(i) ORDER BY i; +INSERT INTO test_tablesample + SELECT i, repeat(i::text, 200) FROM generate_series(0, 9) s(i); -SELECT t.id FROM test_tablesample AS t TABLESAMPLE SYSTEM (50) REPEATABLE (10); -SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (100.0/11) REPEATABLE (9999); +SELECT t.id FROM test_tablesample AS t TABLESAMPLE SYSTEM (50) REPEATABLE (0); +SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (100.0/11) REPEATABLE (0); +SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (0); +SELECT id FROM test_tablesample TABLESAMPLE BERNOULLI (50) REPEATABLE (0); +SELECT id FROM test_tablesample TABLESAMPLE BERNOULLI (5.5) REPEATABLE (0); + +-- 100% should give repeatable count results (ie, all rows) in any case SELECT count(*) FROM test_tablesample TABLESAMPLE SYSTEM (100); -SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (100); -SELECT id FROM test_tablesample TABLESAMPLE BERNOULLI (50) REPEATABLE (100); -SELECT id FROM test_tablesample TABLESAMPLE BERNOULLI (5.5) REPEATABLE (1); +SELECT count(*) FROM test_tablesample TABLESAMPLE SYSTEM (100) REPEATABLE (1+2); +SELECT count(*) FROM test_tablesample TABLESAMPLE SYSTEM (100) REPEATABLE (0.4); -CREATE VIEW test_tablesample_v1 AS SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (10*2) REPEATABLE (2); -CREATE VIEW test_tablesample_v2 AS SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (99); -SELECT pg_get_viewdef('test_tablesample_v1'::regclass); -SELECT pg_get_viewdef('test_tablesample_v2'::regclass); +CREATE VIEW test_tablesample_v1 AS + SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (10*2) REPEATABLE (2); +CREATE VIEW test_tablesample_v2 AS + SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (99); +\d+ test_tablesample_v1 +\d+ test_tablesample_v2 +-- check a sampled query doesn't affect cursor in progress BEGIN; -DECLARE tablesample_cur CURSOR FOR SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (100); +DECLARE tablesample_cur CURSOR FOR + SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (0); + FETCH FIRST FROM tablesample_cur; FETCH NEXT FROM tablesample_cur; FETCH NEXT FROM tablesample_cur; -SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (10); +SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (0); FETCH NEXT FROM tablesample_cur; FETCH NEXT FROM tablesample_cur; @@ -36,12 +47,45 @@ FETCH NEXT FROM tablesample_cur; CLOSE tablesample_cur; END; -EXPLAIN SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (10); -EXPLAIN SELECT * FROM test_tablesample_v1; +EXPLAIN (COSTS OFF) + SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (2); +EXPLAIN (COSTS OFF) + SELECT * FROM test_tablesample_v1; + +-- check inheritance behavior +explain (costs off) + select count(*) from person tablesample bernoulli (100); +select count(*) from person tablesample bernoulli (100); +select count(*) from person; + +-- check that collations get assigned within the tablesample arguments +SELECT count(*) FROM test_tablesample TABLESAMPLE bernoulli (('1'::text < '0'::text)::int); + +-- check behavior during rescans, as well as correct handling of min/max pct +select * from + (values (0),(100)) v(pct), + lateral (select count(*) from tenk1 tablesample bernoulli (pct)) ss; +select * from + (values (0),(100)) v(pct), + lateral (select count(*) from tenk1 tablesample system (pct)) ss; +explain (costs off) +select pct, count(unique1) from + (values (0),(100)) v(pct), + lateral (select * from tenk1 tablesample bernoulli (pct)) ss + group by pct; +select pct, count(unique1) from + (values (0),(100)) v(pct), + lateral (select * from tenk1 tablesample bernoulli (pct)) ss + group by pct; +select pct, count(unique1) from + (values (0),(100)) v(pct), + lateral (select * from tenk1 tablesample system (pct)) ss + group by pct; -- errors SELECT id FROM test_tablesample TABLESAMPLE FOOBAR (1); +SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (NULL); SELECT id FROM test_tablesample TABLESAMPLE SYSTEM (50) REPEATABLE (NULL); SELECT id FROM test_tablesample TABLESAMPLE BERNOULLI (-1); @@ -56,19 +100,3 @@ WITH query_select AS (SELECT * FROM test_tablesample) SELECT * FROM query_select TABLESAMPLE BERNOULLI (5.5) REPEATABLE (1); SELECT q.* FROM (SELECT * FROM test_tablesample) as q TABLESAMPLE BERNOULLI (5); - --- catalog sanity - -SELECT * -FROM pg_tablesample_method -WHERE tsminit IS NULL - OR tsmseqscan IS NULL - OR tsmpagemode IS NULL - OR tsmnextblock IS NULL - OR tsmnexttuple IS NULL - OR tsmend IS NULL - OR tsmreset IS NULL - OR tsmcost IS NULL; - --- done -DROP TABLE test_tablesample CASCADE; diff --git a/src/test/regress/sql/transactions.sql b/src/test/regress/sql/transactions.sql index 9fac4a3f71f72..bf9cb05971343 100644 --- a/src/test/regress/sql/transactions.sql +++ b/src/test/regress/sql/transactions.sql @@ -387,6 +387,38 @@ fetch from foo; abort; + +-- Test for proper cleanup after a failure in a cursor portal +-- that was created in an outer subtransaction +CREATE FUNCTION invert(x float8) RETURNS float8 LANGUAGE plpgsql AS +$$ begin return 1/x; end $$; + +CREATE FUNCTION create_temp_tab() RETURNS text +LANGUAGE plpgsql AS $$ +BEGIN + CREATE TEMP TABLE new_table (f1 float8); + -- case of interest is that we fail while holding an open + -- relcache reference to new_table + INSERT INTO new_table SELECT invert(0.0); + RETURN 'foo'; +END $$; + +BEGIN; +DECLARE ok CURSOR FOR SELECT * FROM int8_tbl; +DECLARE ctt CURSOR FOR SELECT create_temp_tab(); +FETCH ok; +SAVEPOINT s1; +FETCH ok; -- should work +FETCH ctt; -- error occurs here +ROLLBACK TO s1; +FETCH ok; -- should work +FETCH ctt; -- must be rejected +COMMIT; + +DROP FUNCTION create_temp_tab(); +DROP FUNCTION invert(x float8); + + -- Test for successful cleanup of an aborted transaction at session exit. -- THIS MUST BE THE LAST TEST IN THIS FILE. diff --git a/src/test/ssl/ServerSetup.pm b/src/test/ssl/ServerSetup.pm index bbff99a3bdb8c..a8228b04c0ffe 100644 --- a/src/test/ssl/ServerSetup.pm +++ b/src/test/ssl/ServerSetup.pm @@ -43,20 +43,6 @@ sub copy_files } } -# Perform chmod on a set of files, taking into account wildcards -sub chmod_files -{ - my $mode = shift; - my $file_expr = shift; - - my @all_files = glob $file_expr; - foreach my $file_entry (@all_files) - { - chmod $mode, $file_entry - or die "Could not run chmod with mode $mode on $file_entry"; - } -} - sub configure_test_server_for_ssl { my $tempdir = $_[0]; @@ -82,7 +68,7 @@ sub configure_test_server_for_ssl # Copy all server certificates and keys, and client root cert, to the data dir copy_files("ssl/server-*.crt", "$tempdir/pgdata"); copy_files("ssl/server-*.key", "$tempdir/pgdata"); - chmod_files(0600, "$tempdir/pgdata/server-*.key"); + chmod(0600, glob "$tempdir/pgdata/server-*.key") or die $!; copy_files("ssl/root+client_ca.crt", "$tempdir/pgdata"); copy_files("ssl/root+client.crl", "$tempdir/pgdata"); @@ -125,8 +111,6 @@ sub switch_server_cert # restart_test_server() because that overrides listen_addresses to only all # Unix domain socket connections. - system_or_bail 'pg_ctl', 'stop', '-s', '-D', "$tempdir/pgdata", '-w'; - system_or_bail 'pg_ctl', 'start', '-s', '-D', "$tempdir/pgdata", '-w', - '-l', - "$tempdir/logfile"; + system_or_bail 'pg_ctl', 'stop', '-D', "$tempdir/pgdata"; + system_or_bail 'pg_ctl', 'start', '-D', "$tempdir/pgdata", '-w'; } diff --git a/src/timezone/data/africa b/src/timezone/data/africa index ea0171a0985ec..f20d216021b83 100644 --- a/src/timezone/data/africa +++ b/src/timezone/data/africa @@ -338,9 +338,10 @@ Rule Egypt 2007 only - Sep Thu>=1 24:00 0 - # time this summer, and carry out studies on the possibility of canceling the # practice altogether in future years." # -# From Paul Eggert (2015-04-20): -# For now, assume DST will be canceled. Any resumption would likely -# use different rules anyway. +# From Paul Eggert (2015-04-24): +# Yesterday the office of Egyptian President El-Sisi announced his +# decision to abandon DST permanently. See Ahram Online 2015-04-24. +# http://english.ahram.org.eg/NewsContent/1/64/128509/Egypt/Politics-/Sisi-cancels-daylight-saving-time-in-Egypt.aspx Rule Egypt 2008 only - Aug lastThu 24:00 0 - Rule Egypt 2009 only - Aug 20 24:00 0 - @@ -537,7 +538,7 @@ Zone Africa/Tripoli 0:52:44 - LMT 1920 # From Alex Krivenyshev (2008-07-11): # Seems that English language article "The revival of daylight saving -# time: Energy conservation?"-# No. 16578 (07/11/2008) was originally +# time: Energy conservation?"- No. 16578 (07/11/2008) was originally # published on Monday, June 30, 2008... # # I guess that article in French "Le gouvernement avance l'introduction @@ -669,7 +670,7 @@ Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis # Here is a link to official document from Royaume du Maroc Premier Ministre, # Ministère de la Modernisation des Secteurs Publics # -# Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 june 1967) +# Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 June 1967) # concerning the amendment of the legal time, the Ministry of Modernization of # Public Sectors announced that the official time in the Kingdom will be # advanced 60 minutes from Sunday 31 May 2009 at midnight. @@ -787,20 +788,41 @@ Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis # will resume again at 02:00 on Saturday, August 2, 2014.... # http://www.mmsp.gov.ma/fr/actualites.aspx?id=586 -# From Paul Eggert (2014-06-05): -# For now, guess that later spring and fall transitions will use 2014's rules, +# From Milamber (2015-06-08): +# (Google Translation) The hour will thus be delayed 60 minutes +# Sunday, June 14 at 3:00, the ministry said in a statement, adding +# that the time will be advanced again 60 minutes Sunday, July 19, +# 2015 at 2:00. The move comes under 2.12.126 Decree of 26 Jumada I +# 1433 (18 April 2012) and the decision of the Head of Government of +# 16 N. 3-29-15 Chaaban 1435 (4 June 2015). +# Source (french): +# http://lnt.ma/le-maroc-reculera-dune-heure-le-dimanche-14-juin/ +# +# From Milamber (2015-06-09): +# http://www.mmsp.gov.ma/fr/actualites.aspx?id=863 +# +# From Michael Deckers (2015-06-09): +# [The gov.ma announcement] would (probably) make the switch on 2015-07-19 go +# from 03:00 to 04:00 rather than from 02:00 to 03:00, as in the patch.... +# I think the patch is correct and the quoted text is wrong; the text in +# agrees +# with the patch. + +# From Paul Eggert (2015-06-08): +# For now, guess that later spring and fall transitions will use 2015's rules, # and guess that Morocco will switch to standard time at 03:00 the last -# Saturday before Ramadan, and back to DST at 02:00 the first Saturday after -# Ramadan. To implement this, transition dates for 2015 through 2037 were +# Sunday before Ramadan, and back to DST at 02:00 the first Sunday after +# Ramadan. To implement this, transition dates for 2016 through 2037 were # determined by running the following program under GNU Emacs 24.3, with the # results integrated by hand into the table below. -# (let ((islamic-year 1436)) +# (let ((islamic-year 1437)) +# (require 'cal-islam) # (while (< islamic-year 1460) # (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year))) # (b (calendar-islamic-to-absolute (list 10 1 islamic-year))) -# (saturday 6)) -# (while (/= saturday (mod (setq a (1- a)) 7))) -# (while (/= saturday (mod b 7)) +# (sunday 0)) +# (while (/= sunday (mod (setq a (1- a)) 7))) +# (while (/= sunday (mod b 7)) # (setq b (1+ b))) # (setq a (calendar-gregorian-from-absolute a)) # (setq b (calendar-gregorian-from-absolute b)) @@ -844,32 +866,30 @@ Rule Morocco 2012 only - Aug 20 2:00 1:00 S Rule Morocco 2013 only - Jul 7 3:00 0 - Rule Morocco 2013 only - Aug 10 2:00 1:00 S Rule Morocco 2013 max - Oct lastSun 3:00 0 - -Rule Morocco 2014 2022 - Mar lastSun 2:00 1:00 S +Rule Morocco 2014 2021 - Mar lastSun 2:00 1:00 S Rule Morocco 2014 only - Jun 28 3:00 0 - Rule Morocco 2014 only - Aug 2 2:00 1:00 S -Rule Morocco 2015 only - Jun 13 3:00 0 - -Rule Morocco 2015 only - Jul 18 2:00 1:00 S -Rule Morocco 2016 only - Jun 4 3:00 0 - -Rule Morocco 2016 only - Jul 9 2:00 1:00 S -Rule Morocco 2017 only - May 20 3:00 0 - -Rule Morocco 2017 only - Jul 1 2:00 1:00 S -Rule Morocco 2018 only - May 12 3:00 0 - -Rule Morocco 2018 only - Jun 16 2:00 1:00 S -Rule Morocco 2019 only - May 4 3:00 0 - -Rule Morocco 2019 only - Jun 8 2:00 1:00 S -Rule Morocco 2020 only - Apr 18 3:00 0 - -Rule Morocco 2020 only - May 30 2:00 1:00 S -Rule Morocco 2021 only - Apr 10 3:00 0 - -Rule Morocco 2021 only - May 15 2:00 1:00 S -Rule Morocco 2022 only - Apr 2 3:00 0 - -Rule Morocco 2022 only - May 7 2:00 1:00 S -Rule Morocco 2023 only - Apr 22 2:00 1:00 S -Rule Morocco 2024 only - Apr 13 2:00 1:00 S -Rule Morocco 2025 only - Apr 5 2:00 1:00 S +Rule Morocco 2015 only - Jun 14 3:00 0 - +Rule Morocco 2015 only - Jul 19 2:00 1:00 S +Rule Morocco 2016 only - Jun 5 3:00 0 - +Rule Morocco 2016 only - Jul 10 2:00 1:00 S +Rule Morocco 2017 only - May 21 3:00 0 - +Rule Morocco 2017 only - Jul 2 2:00 1:00 S +Rule Morocco 2018 only - May 13 3:00 0 - +Rule Morocco 2018 only - Jun 17 2:00 1:00 S +Rule Morocco 2019 only - May 5 3:00 0 - +Rule Morocco 2019 only - Jun 9 2:00 1:00 S +Rule Morocco 2020 only - Apr 19 3:00 0 - +Rule Morocco 2020 only - May 24 2:00 1:00 S +Rule Morocco 2021 only - Apr 11 3:00 0 - +Rule Morocco 2021 only - May 16 2:00 1:00 S +Rule Morocco 2022 only - May 8 2:00 1:00 S +Rule Morocco 2023 only - Apr 23 2:00 1:00 S +Rule Morocco 2024 only - Apr 14 2:00 1:00 S +Rule Morocco 2025 only - Apr 6 2:00 1:00 S Rule Morocco 2026 max - Mar lastSun 2:00 1:00 S -Rule Morocco 2035 only - Oct 27 3:00 0 - -Rule Morocco 2036 only - Oct 18 3:00 0 - -Rule Morocco 2037 only - Oct 10 3:00 0 - +Rule Morocco 2036 only - Oct 19 3:00 0 - +Rule Morocco 2037 only - Oct 4 3:00 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26 diff --git a/src/timezone/data/asia b/src/timezone/data/asia index 756e3d0e5f465..5467024db235f 100644 --- a/src/timezone/data/asia +++ b/src/timezone/data/asia @@ -6,7 +6,7 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2014-10-31): +# From Paul Eggert (2015-08-08): # # Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), @@ -43,7 +43,7 @@ # 2:00 EET EEST Eastern European Time # 2:00 IST IDT Israel # 3:00 AST ADT Arabia* -# 3:30 IRST IRDT Iran +# 3:30 IRST IRDT Iran* # 4:00 GST Gulf* # 5:30 IST India # 7:00 ICT Indochina, most times and locations* @@ -52,10 +52,11 @@ # 8:00 CST China # 8:00 IDT Indochina, 1943-45, 1947-55, 1960-75 (some locations)* # 8:00 JWST Western Standard Time (Japan, 1896/1937)* +# 8:30 KST KDT Korea when at +0830* # 9:00 JCST Central Standard Time (Japan, 1896/1937) # 9:00 WIT east Indonesia (Waktu Indonesia Timur) # 9:00 JST JDT Japan -# 9:00 KST KDT Korea +# 9:00 KST KDT Korea when at +09 # 9:30 ACST Australian Central Standard Time # # See the 'europe' file for Russia and Turkey in Asia. @@ -130,7 +131,8 @@ Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2 # Azerbaijan # From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23): # According to the resolution of Cabinet of Ministers, 1997 -# Resolution available at: http://aif.az/docs/daylight_res.pdf +# From Paul Eggert (2015-09-17): It was Resolution No. 21 (1997-03-17). +# http://code.az/files/daylight_res.pdf # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Azer 1997 max - Mar lastSun 4:00 1:00 S Rule Azer 1997 max - Oct lastSun 5:00 0 - @@ -1027,7 +1029,7 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov # # From Roozbeh Pournader (2007-11-05): # This is quoted from Official Gazette of the Islamic Republic of -# Iran, Volume 63, Number 18242, dated Tuesday 1386/6/24 +# Iran, Volume 63, No. 18242, dated Tuesday 1386/6/24 # [2007-10-16]. I am doing the best translation I can:... # The official time of the country will be moved forward for one hour # on the 24 hours of the first day of the month of Farvardin and will @@ -1557,7 +1559,7 @@ Zone Asia/Amman 2:23:44 - LMT 1931 # - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00. # - Oral switched from +5:00 to +4:00 in spring 1989. -# From Kazakhstan Embassy's News Bulletin #11 +# From Kazakhstan Embassy's News Bulletin No. 11 # (2005-03-21): # The Government of Kazakhstan passed a resolution March 15 abolishing # daylight saving time citing lack of economic benefits and health @@ -1711,6 +1713,18 @@ Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S # # For Pyongyang we have no information; guess no changes since World War II. +# From Steffen Thorsen (2015-08-07): +# According to many news sources, North Korea is going to change to +# the 8:30 time zone on August 15, one example: +# http://www.bbc.com/news/world-asia-33815049 +# +# From Paul Eggert (2015-08-15): +# Bells rang out midnight (00:00) Friday as part of the celebrations. See: +# Talmadge E. North Korea celebrates new time zone, 'Pyongyang Time' +# http://news.yahoo.com/north-korea-celebrates-time-zone-pyongyang-time-164038128.html +# There is no common English-language abbreviation for this time zone. +# Use KST, as that's what we already use for 1954-1961 in ROK. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1 8:30 - KST 1912 Jan 1 @@ -1723,7 +1737,8 @@ Zone Asia/Pyongyang 8:23:00 - LMT 1908 Apr 1 8:30 - KST 1912 Jan 1 9:00 - JCST 1937 Oct 1 9:00 - JST 1945 Aug 24 - 9:00 - KST + 9:00 - KST 2015 Aug 15 00:00 + 8:30 - KST ############################################################################### diff --git a/src/timezone/data/australasia b/src/timezone/data/australasia index 3e2c0b34531f2..5c272db3b2c11 100644 --- a/src/timezone/data/australasia +++ b/src/timezone/data/australasia @@ -335,10 +335,17 @@ Zone Indian/Cocos 6:27:40 - LMT 1900 # DST will start Nov. 2 this year. # http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-NOVEMBER-2ND.aspx -# From Paul Eggert (2014-10-20): +# From a government order dated 2015-08-26 and published as Legal Notice No. 77 +# in the Government of Fiji Gazette Supplement No. 24 (2015-08-28), +# via Ken Rylander (2015-09-02): +# the daylight saving period is 1 hour in advance of the standard time +# commencing at 2.00 am on Sunday 1st November, 2015 and ending at +# 3.00 am on Sunday 17th January, 2016. + +# From Paul Eggert (2015-09-01): # For now, guess DST from 02:00 the first Sunday in November to -# 03:00 the first Sunday on or after January 18. Although ad hoc, it -# matches this year's plan and seems more likely to match future +# 03:00 the third Sunday in January. Although ad hoc, it matches +# transitions since late 2014 and seems more likely to match future # practice than guessing no DST. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S @@ -351,7 +358,7 @@ Rule Fiji 2011 only - Mar Sun>=1 3:00 0 - Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 - Rule Fiji 2014 only - Jan Sun>=18 2:00 0 - Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 S -Rule Fiji 2015 max - Jan Sun>=18 3:00 0 - +Rule Fiji 2015 max - Jan Sun>=15 3:00 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva 12:00 Fiji FJ%sT # Fiji Time @@ -510,7 +517,10 @@ Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston 11:12 - NMT 1951 # Norfolk Mean Time - 11:30 - NFT # Norfolk Time + 11:30 - NFT 1974 Oct 27 02:00 # Norfolk T. + 11:30 1:00 NFST 1975 Mar 2 02:00 + 11:30 - NFT 2015 Oct 4 02:00 + 11:00 - NFT # Palau (Belau) # Zone NAME GMTOFF RULES FORMAT [UNTIL] @@ -1550,6 +1560,20 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # started DST on June 3. Possibly DST was observed other years # in Midway, but we have no record of it. +# Norfolk + +# From Alexander Krivenyshev (2015-09-23): +# Norfolk Island will change ... from +1130 to +1100: +# https://www.comlaw.gov.au/Details/F2015L01483/Explanatory%20Statement/Text +# ... at 12.30 am (by legal time in New South Wales) on 4 October 2015. +# http://www.norfolkisland.gov.nf/nia/MediaRelease/Media%20Release%20Norfolk%20Island%20Standard%20Time%20Change.pdf + +# From Paul Eggert (2015-09-23): +# Transitions before 2015 are from timeanddate.com, which consulted +# the Norfolk Island Museum and the Australian Bureau of Meteorology's +# Norfolk Island station, and found no record of Norfolk observing DST +# other than in 1974/5. See: +# http://www.timeanddate.com/time/australia/norfolk-island.html # Pitcairn diff --git a/src/timezone/data/backzone b/src/timezone/data/backzone index 6b392bde1b9bd..0316708fbe705 100644 --- a/src/timezone/data/backzone +++ b/src/timezone/data/backzone @@ -279,11 +279,6 @@ Zone America/Aruba -4:40:24 - LMT 1912 Feb 12 # Oranjestad -4:30 - ANT 1965 # Netherlands Antilles Time -4:00 - AST -# Cayman Is -Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown - -5:07:11 - KMT 1912 Feb # Kingston Mean Time - -5:00 - EST - # Canada Zone America/Coral_Harbour -5:32:40 - LMT 1884 -5:00 NT_YK E%sT 1946 diff --git a/src/timezone/data/europe b/src/timezone/data/europe index c64c41bec9525..358a0485f6992 100644 --- a/src/timezone/data/europe +++ b/src/timezone/data/europe @@ -193,11 +193,14 @@ # republished in Finest Hour (Spring 2002) 1(114):26 # http://www.winstonchurchill.org/images/finesthour/Vol.01%20No.114.pdf -# From Paul Eggert (1996-09-03): +# From Paul Eggert (2015-08-08): # The OED Supplement says that the English originally said "Daylight Saving" # when they were debating the adoption of DST in 1908; but by 1916 this # term appears only in quotes taken from DST's opponents, whereas the # proponents (who eventually won the argument) are quoted as using "Summer". +# The term "Summer Time" was introduced by Herbert Samuel, Home Secretary; see: +# Viscount Samuel. Leisure in a Democracy. Cambridge University Press +# ISBN 978-1-107-49471-8 (1949, reissued 2015), p 8. # From Arthur David Olson (1989-01-19): # A source at the British Information Office in New York avers that it's @@ -343,7 +346,7 @@ # From an anonymous contributor (1996-06-02): # The law governing time in Ireland is under Statutory Instrument SI 395/94, -# which gives force to European Union 7th Council Directive # 94/21/EC. +# which gives force to European Union 7th Council Directive No. 94/21/EC. # Under this directive, the Minister for Justice in Ireland makes appropriate # regulations. I spoke this morning with the Secretary of the Department of # Justice (tel +353 1 678 9711) who confirmed to me that the correct name is @@ -592,11 +595,11 @@ Rule Russia 1921 only - Feb 14 23:00 1:00 MSD Rule Russia 1921 only - Mar 20 23:00 2:00 MSM # Midsummer Rule Russia 1921 only - Sep 1 0:00 1:00 MSD Rule Russia 1921 only - Oct 1 0:00 0 - -# Act No.925 of the Council of Ministers of the USSR (1980-10-24): +# Act No. 925 of the Council of Ministers of the USSR (1980-10-24): Rule Russia 1981 1984 - Apr 1 0:00 1:00 S Rule Russia 1981 1983 - Oct 1 0:00 0 - -# Act No.967 of the Council of Ministers of the USSR (1984-09-13), repeated in -# Act No.227 of the Council of Ministers of the USSR (1989-03-14): +# Act No. 967 of the Council of Ministers of the USSR (1984-09-13), repeated in +# Act No. 227 of the Council of Ministers of the USSR (1989-03-14): Rule Russia 1984 1991 - Sep lastSun 2:00s 0 - Rule Russia 1985 1991 - Mar lastSun 2:00s 1:00 S # @@ -828,7 +831,7 @@ Zone Europe/Brussels 0:17:30 - LMT 1880 # Bulgaria # # From Plamen Simenov via Steffen Thorsen (1999-09-09): -# A document of Government of Bulgaria (No.94/1997) says: +# A document of Government of Bulgaria (No. 94/1997) says: # EET -> EETDST is in 03:00 Local time in last Sunday of March ... # EETDST -> EET is in 04:00 Local time in last Sunday of October # @@ -845,7 +848,7 @@ Zone Europe/Sofia 1:33:16 - LMT 1880 1:00 C-Eur CE%sT 1945 1:00 - CET 1945 Apr 2 3:00 2:00 - EET 1979 Mar 31 23:00 - 2:00 Bulg EE%sT 1982 Sep 26 2:00 + 2:00 Bulg EE%sT 1982 Sep 26 3:00 2:00 C-Eur EE%sT 1991 2:00 E-Eur EE%sT 1997 2:00 EU EE%sT @@ -1062,8 +1065,8 @@ Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base # after that. # From Mart Oruaas (2000-01-29): -# Regulation no. 301 (1999-10-12) obsoletes previous regulation -# no. 206 (1998-09-22) and thus sticks Estonia to +02:00 GMT for all +# Regulation No. 301 (1999-10-12) obsoletes previous regulation +# No. 206 (1998-09-22) and thus sticks Estonia to +02:00 GMT for all # the year round. The regulation is effective 1999-11-01. # From Toomas Soome (2002-02-21): @@ -1084,7 +1087,7 @@ Zone Europe/Tallinn 1:39:00 - LMT 1880 3:00 Russia MSK/MSD 1989 Mar 26 2:00s 2:00 1:00 EEST 1989 Sep 24 2:00s 2:00 C-Eur EE%sT 1998 Sep 22 - 2:00 EU EE%sT 1999 Nov 1 + 2:00 EU EE%sT 1999 Oct 31 4:00 2:00 - EET 2002 Feb 21 2:00 EU EE%sT @@ -1527,21 +1530,21 @@ Link Europe/Rome Europe/San_Marino # correct data in juridical acts and I found some juridical documents about # changes in the counting of time in Latvia from 1981.... # -# Act No.35 of the Council of Ministers of Latvian SSR of 1981-01-22 ... -# according to the Act No.925 of the Council of Ministers of USSR of 1980-10-24 +# Act No. 35 of the Council of Ministers of Latvian SSR of 1981-01-22 ... +# according to the Act No. 925 of the Council of Ministers of USSR of 1980-10-24 # ...: all year round the time of 2nd time zone + 1 hour, in addition turning # the hands of the clock 1 hour forward on 1 April at 00:00 (GMT 31 March 21:00) # and 1 hour backward on the 1 October at 00:00 (GMT 30 September 20:00). # -# Act No.592 of the Council of Ministers of Latvian SSR of 1984-09-24 ... -# according to the Act No.967 of the Council of Ministers of USSR of 1984-09-13 +# Act No. 592 of the Council of Ministers of Latvian SSR of 1984-09-24 ... +# according to the Act No. 967 of the Council of Ministers of USSR of 1984-09-13 # ...: all year round the time of 2nd time zone + 1 hour, in addition turning # the hands of the clock 1 hour forward on the last Sunday of March at 02:00 # (GMT 23:00 on the previous day) and 1 hour backward on the last Sunday of # September at 03:00 (GMT 23:00 on the previous day). # -# Act No.81 of the Council of Ministers of Latvian SSR of 1989-03-22 ... -# according to the Act No.227 of the Council of Ministers of USSR of 1989-03-14 +# Act No. 81 of the Council of Ministers of Latvian SSR of 1989-03-22 ... +# according to the Act No. 227 of the Council of Ministers of USSR of 1989-03-14 # ...: since the last Sunday of March 1989 in Lithuanian SSR, Latvian SSR, # Estonian SSR and Kaliningrad region of Russian Federation all year round the # time of 2nd time zone (Moscow time minus one hour). On the territory of Latvia @@ -1558,7 +1561,7 @@ Link Europe/Rome Europe/San_Marino # From Andrei Ivanov (2000-03-06): # This year Latvia will not switch to Daylight Savings Time (as specified in # The Regulations of the Cabinet of Ministers of the Rep. of Latvia of -# 29-Feb-2000 (#79) , +# 29-Feb-2000 (No. 79) , # in Latvian for subscribers only). # From RFE/RL Newsline @@ -1763,6 +1766,18 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta # News from Moldova (in russian): # http://ru.publika.md/link_317061.html +# From Roman Tudos (2015-07-02): +# http://lex.justice.md/index.php?action=view&view=doc&lang=1&id=355077 +# From Paul Eggert (2015-07-01): +# The abovementioned official link to IGO1445-868/2014 states that +# 2014-10-26's fallback transition occurred at 03:00 local time. Also, +# http://www.trm.md/en/social/la-30-martie-vom-trece-la-ora-de-vara +# says the 2014-03-30 spring-forward transition was at 02:00 local time. +# Guess that since 1997 Moldova has switched one hour before the EU. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Moldova 1997 max - Mar lastSun 2:00 1:00 S +Rule Moldova 1997 max - Oct lastSun 3:00 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Europe/Chisinau 1:55:20 - LMT 1880 @@ -1777,7 +1792,7 @@ Zone Europe/Chisinau 1:55:20 - LMT 1880 2:00 Russia EE%sT 1992 2:00 E-Eur EE%sT 1997 # See Romania commentary for the guessed 1997 transition to EU rules. - 2:00 EU EE%sT + 2:00 Moldova EE%sT # Monaco # Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's @@ -2123,7 +2138,7 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct # Russia # From Alexander Krivenyshev (2011-09-15): -# Based on last Russian Government Decree # 725 on August 31, 2011 +# Based on last Russian Government Decree No. 725 on August 31, 2011 # (Government document # http://www.government.ru/gov/results/16355/print/ # in Russian) @@ -2133,7 +2148,7 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct # http://www.worldtimezone.com/dst_news/dst_news_russia36.htm # From Sanjeev Gupta (2011-09-27): -# Scans of [Decree #23 of January 8, 1992] are available at: +# Scans of [Decree No. 23 of January 8, 1992] are available at: # http://government.consultant.ru/page.aspx?1223966 # They are in Cyrillic letters (presumably Russian). @@ -2144,19 +2159,19 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct # One source is # http://government.ru/gov/results/16355/ # which, according to translate.google.com, begins "Decree of August 31, -# 2011 No 725" and contains no other dates or "effective date" information. +# 2011 No. 725" and contains no other dates or "effective date" information. # # Another source is # http://www.rg.ru/2011/09/06/chas-zona-dok.html # which, according to translate.google.com, begins "Resolution of the # Government of the Russian Federation on August 31, 2011 N 725" and also # contains "Date first official publication: September 6, 2011 Posted on: -# in the 'RG' - Federal Issue number 5573 September 6, 2011" but which +# in the 'RG' - Federal Issue No. 5573 September 6, 2011" but which # does not contain any "effective date" information. # # Another source is # http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7 -# which, in note 8, contains "Resolution #725 of August 31, 2011... +# which, in note 8, contains "Resolution No. 725 of August 31, 2011... # Effective as of after 7 days following the day of the official publication" # but which does not contain any reference to September 6, 2011. # @@ -2364,7 +2379,7 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880 # changed in May. 2:00 E-Eur EE%sT 1994 May # From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev. - 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s + 3:00 E-Eur MSK/MSD 1996 Mar 31 0:00s 3:00 1:00 MSD 1996 Oct 27 3:00s # IATA SSIM (1997-09) says Crimea switched to EET/EEST. # Assume it happened in March by not changing the clocks. @@ -2499,7 +2514,7 @@ Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00 # from current Russia Zone 6 - Krasnoyarsk Time Zone (KRA) UTC +0700 # to Russia Zone 5 - Novosibirsk Time Zone (NOV) UTC +0600 # -# This is according to Government of Russia decree # 740, on September +# This is according to Government of Russia decree No. 740, on September # 14, 2009 "Application in the territory of the Kemerovo region the Fifth # time zone." ("Russia Zone 5" or old "USSR Zone 5" is GMT +0600) # @@ -2922,7 +2937,7 @@ Zone Africa/Ceuta -0:21:16 - LMT 1901 Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C. -1:00 - CANT 1946 Sep 30 1:00 # Canaries T 0:00 - WET 1980 Apr 6 0:00s - 0:00 1:00 WEST 1980 Sep 28 0:00s + 0:00 1:00 WEST 1980 Sep 28 1:00u 0:00 EU WE%sT # IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u. # Ignore this for now, as the Canaries are part of the EU. @@ -3135,6 +3150,11 @@ Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment. # http://www.balkaneu.com/eventful-elections-turkey/ 2014-03-30. # I guess the best we can do is document the official time. +# From Fatih (2015-09-29): +# It's officially announced now by the Ministry of Energy. +# Turkey delays winter time to 8th of November 04:00 +# http://www.aa.com.tr/tr/turkiye/yaz-saati-uygulamasi-8-kasimda-sona-erecek/362217 + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Turkey 1916 only - May 1 0:00 1:00 S Rule Turkey 1916 only - Oct 1 0:00 0 - @@ -3204,6 +3224,8 @@ Zone Europe/Istanbul 1:55:52 - LMT 1880 2:00 - EET 2011 Mar 28 1:00u 2:00 EU EE%sT 2014 Mar 30 1:00u 2:00 - EET 2014 Mar 31 1:00u + 2:00 EU EE%sT 2015 Oct 25 1:00u + 2:00 1:00 EEST 2015 Nov 8 1:00u 2:00 EU EE%sT Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents. @@ -3212,7 +3234,7 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents. # From Igor Karpov, who works for the Ukrainian Ministry of Justice, # via Garrett Wollman (2003-01-27): # BTW, I've found the official document on this matter. It's government -# regulations number 509, May 13, 1996. In my poor translation it says: +# regulations No. 509, May 13, 1996. In my poor translation it says: # "Time in Ukraine is set to second timezone (Kiev time). Each last Sunday # of March at 3am the time is changing to 4am and each last Sunday of # October the time at 4am is changing to 3am" @@ -3221,7 +3243,7 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents. # On September 20, 2011 the deputies of the Verkhovna Rada agreed to # abolish the transfer clock to winter time. # -# Bill number 8330 of MP from the Party of Regions Oleg Nadoshi got +# Bill No. 8330 of MP from the Party of Regions Oleg Nadoshi got # approval from 266 deputies. # # Ukraine abolishes transfer back to the winter time (in Russian) diff --git a/src/timezone/data/iso3166.tab b/src/timezone/data/iso3166.tab index 0b0b8426d4745..0548800e2dc96 100644 --- a/src/timezone/data/iso3166.tab +++ b/src/timezone/data/iso3166.tab @@ -3,11 +3,10 @@ # This file is in the public domain, so clarified as of # 2009-05-17 by Arthur David Olson. # -# From Paul Eggert (2014-07-18): +# From Paul Eggert (2015-05-02): # This file contains a table of two-letter country codes. Columns are # separated by a single tab. Lines beginning with '#' are comments. -# Although all text currently uses ASCII encoding, this is planned to -# change to UTF-8 soon. The columns of the table are as follows: +# All text uses UTF-8 encoding. The columns of the table are as follows: # # 1. ISO 3166-1 alpha-2 country code, current as of # ISO 3166-1 Newsletter VI-16 (2013-07-11). See: Updates on ISO 3166 @@ -38,7 +37,7 @@ AS Samoa (American) AT Austria AU Australia AW Aruba -AX Aaland Islands +AX Åland Islands AZ Azerbaijan BA Bosnia & Herzegovina BB Barbados @@ -67,7 +66,7 @@ CD Congo (Dem. Rep.) CF Central African Rep. CG Congo (Rep.) CH Switzerland -CI Cote d'Ivoire +CI Côte d'Ivoire CK Cook Islands CL Chile CM Cameroon @@ -211,7 +210,7 @@ PT Portugal PW Palau PY Paraguay QA Qatar -RE Reunion +RE Réunion RO Romania RS Serbia RU Russia diff --git a/src/timezone/data/leapseconds b/src/timezone/data/leapseconds index 5c39e626dfe9e..70ec6d1b535c8 100644 --- a/src/timezone/data/leapseconds +++ b/src/timezone/data/leapseconds @@ -56,5 +56,5 @@ Leap 2008 Dec 31 23:59:60 + S Leap 2012 Jun 30 23:59:60 + S Leap 2015 Jun 30 23:59:60 + S -# Updated through IERS Bulletin C49 -# File expires on: 28 December 2015 +# Updated through IERS Bulletin C50 +# File expires on: 28 June 2016 diff --git a/src/timezone/data/northamerica b/src/timezone/data/northamerica index c3af9eb395ed6..7658a45e5c8fa 100644 --- a/src/timezone/data/northamerica +++ b/src/timezone/data/northamerica @@ -1235,10 +1235,19 @@ Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay # west Labrador, Nova Scotia, Prince Edward I -# From Paul Eggert (2006-03-22): +# From Brian Inglis (2015-07-20): +# From the historical weather station records available at: +# https://weatherspark.com/history/28351/1971/Sydney-Nova-Scotia-Canada +# Sydney shares the same time history as Glace Bay, so was +# likely to be the same across the island.... +# Sydney, as the capital and most populous location, or Cape Breton, would +# have been better names for the zone had we known this in 1996. + +# From Paul Eggert (2015-07-20): # Shanks & Pottenger write that since 1970 most of this region has been like # Halifax. Many locales did not observe peacetime DST until 1972; -# Glace Bay, NS is the largest that we know of. +# the Cape Breton area, represented by Glace Bay, is the largest we know of +# (Glace Bay was perhaps not the best name choice but no point changing now). # Shanks & Pottenger also write that Liverpool, NS was the only town # in Canada to observe DST in 1971 but not 1970; for now we'll assume # this is a typo. @@ -1796,13 +1805,13 @@ Zone America/Edmonton -7:33:52 - LMT 1906 Sep # Exact date in October unknown; Sunday October 1 is a reasonable guess. # 3. June 1918: switch to Pacific Daylight Time (GMT-7) # Exact date in June unknown; Sunday June 2 is a reasonable guess. -# note#1: +# note 1: # On Oct 27/1918 when daylight saving ended in the rest of Canada, # Creston did not change its clocks. -# note#2: +# note 2: # During WWII when the Federal Government legislated a mandatory clock change, # Creston did not oblige. -# note#3: +# note 3: # There is no guarantee that Creston will remain on Mountain Standard Time # (UTC-7) forever. # The subject was debated at least once this year by the town Council. @@ -1817,6 +1826,22 @@ Zone America/Edmonton -7:33:52 - LMT 1906 Sep # The transition dates (and times) are guesses. +# From Matt Johnson (2015-09-21): +# Fort Nelson, BC, Canada will cancel DST this year. So while previously they +# were aligned with America/Vancouver, they're now aligned with +# America/Dawson_Creek. +# http://www.northernrockies.ca/EN/meta/news/archives/2015/northern-rockies-time-change.html +# +# From Tim Parenti (2015-09-23): +# This requires a new zone for the Northern Rockies Regional Municipality, +# America/Fort_Nelson. The resolution of 2014-12-08 was reached following a +# 2014-11-15 poll with nearly 75% support. Effectively, the municipality has +# been on MST (-0700) like Dawson Creek since it advanced its clocks on +# 2015-03-08. +# +# From Paul Eggert (2015-09-23): +# Shanks says Fort Nelson did not observe DST in 1946, unlike Vancouver. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Vanc 1918 only - Apr 14 2:00 1:00 D Rule Vanc 1918 only - Oct 27 2:00 0 S @@ -1835,6 +1860,12 @@ Zone America/Dawson_Creek -8:00:56 - LMT 1884 -8:00 Canada P%sT 1947 -8:00 Vanc P%sT 1972 Aug 30 2:00 -7:00 - MST +Zone America/Fort_Nelson -8:10:47 - LMT 1884 + -8:00 Vanc P%sT 1946 + -8:00 - PST 1947 + -8:00 Vanc P%sT 1987 + -8:00 Canada P%sT 2015 Mar 8 2:00 + -7:00 - MST Zone America/Creston -7:46:04 - LMT 1884 -7:00 - MST 1916 Oct 1 -8:00 - PST 1918 Jun 2 @@ -2661,7 +2692,17 @@ Zone Atlantic/Bermuda -4:19:18 - LMT 1930 Jan 1 2:00 # Hamilton -4:00 US A%sT # Cayman Is -# See America/Panama. + +# From Paul Eggert (2015-05-15): +# The Cayman government has decided to introduce DST in 2016, the idea being +# to keep in sync with New York. The legislation hasn't passed but the change +# seems quite likely. See: Meade B. Cayman 27. +# http://www.cayman27.com.ky/2015/05/15/clock-ticks-toward-daylight-saving-time-in-cayman + +Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown + -5:07:11 - KMT 1912 Feb # Kingston Mean Time + -5:00 - EST 2016 + -5:00 US E%sT # Costa Rica @@ -3184,7 +3225,6 @@ Zone America/Managua -5:45:08 - LMT 1890 Zone America/Panama -5:18:08 - LMT 1890 -5:19:36 - CMT 1908 Apr 22 # Colón Mean Time -5:00 - EST -Link America/Panama America/Cayman # Puerto Rico # There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'. diff --git a/src/timezone/data/southamerica b/src/timezone/data/southamerica index be63a88d5f3d2..50d118ebfa6a6 100644 --- a/src/timezone/data/southamerica +++ b/src/timezone/data/southamerica @@ -30,7 +30,7 @@ # I suggest the use of _Summer time_ instead of the more cumbersome # _daylight-saving time_. _Summer time_ seems to be in general use # in Europe and South America. -# -- E O Cutler, _New York Times_ (1937-02-14), quoted in +# -- E O Cutler, _New York Times_ (1937-02-14), quoted in # H L Mencken, _The American Language: Supplement I_ (1960), p 466 # # Earlier editions of these tables also used the North American style @@ -131,7 +131,7 @@ Rule Arg 2000 only - Mar 3 0:00 0 - # Timezone Law (which never was effectively applied) will (would?) be # in effect.... The article is at # http://ar.clarin.com/diario/2001-06-06/e-01701.htm -# ... The Law itself is "Ley No 25155", sanctioned on 1999-08-25, enacted +# ... The Law itself is "Ley No. 25155", sanctioned on 1999-08-25, enacted # 1999-09-17, and published 1999-09-21. The official publication is at: # http://www.boletin.jus.gov.ar/BON/Primera/1999/09-Septiembre/21/PDF/BO21-09-99LEG.PDF # Regretfully, you have to subscribe (and pay) for the on-line version.... @@ -175,15 +175,11 @@ Rule Arg 2000 only - Mar 3 0:00 0 - # http://www.worldtimezone.com/dst_news/dst_news_argentina03.html # http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish) -# From Rodrigo Severo (2008-10-06): -# Here is some info available at a Gentoo bug related to TZ on Argentina's DST: -# ... -# ------- Comment #1 from [jmdocile] 2008-10-06 16:28 0000 ------- -# Hi, there is a problem with timezone-data-2008e and maybe with -# timezone-data-2008f -# Argentinian law [Number] 25.155 is no longer valid. +# From Juan Manuel Docile in https://bugs.gentoo.org/240339 (2008-10-07) +# via Rodrigo Severo: +# Argentinian law No. 25.155 is no longer valid. # http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm -# The new one is law [Number] 26.350 +# The new one is law No. 26.350 # http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm # So there is no summer time in Argentina for now. @@ -771,7 +767,7 @@ Zone America/La_Paz -4:32:36 - LMT 1890 # [ and in a second message (same day): ] # I found the decree. # -# DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011 +# DECRETO No. 7.584, DE 13 DE OUTUBRO DE 2011 # Link : # http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6 @@ -1125,7 +1121,7 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914 # Conflicts between [1] and [2] were resolved as follows: # # - [1] says the 1910 transition was Jan 1, [2] says Jan 10 and cites -# Boletín Nº 1, Aviso Nº 1 (1910). Go with [2]. +# Boletín No. 1, Aviso No. 1 (1910). Go with [2]. # # - [1] says SMT was -4:42:45, [2] says Chile's official time from # 1916 to 1919 was -4:42:46.3, the meridian of Chile's National @@ -1133,7 +1129,7 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914 # Quinta Normal in Santiago. Go with [2], rounding it to -4:42:46. # # - [1] says the 1918 transition was Sep 1, [2] says Sep 10 and cites -# Boletín Nº 22, Aviso Nº 129/1918 (1918-08-23). Go with [2]. +# Boletín No. 22, Aviso No. 129/1918 (1918-08-23). Go with [2]. # # - [1] does not give times for transitions; assume they occur # at midnight mainland time, the current common practice. However, @@ -1533,7 +1529,7 @@ Rule Para 1997 only - Feb lastSun 0:00 0 - # (1999-09) reports no date; go with above sources and Gerd Knops (2001-02-27). Rule Para 1998 2001 - Mar Sun>=1 0:00 0 - # From Rives McDow (2002-02-28): -# A decree was issued in Paraguay (no. 16350) on 2002-02-26 that changed the +# A decree was issued in Paraguay (No. 16350) on 2002-02-26 that changed the # dst method to be from the first Sunday in September to the first Sunday in # April. Rule Para 2002 2004 - Apr Sun>=1 0:00 0 - @@ -1713,8 +1709,19 @@ Rule Uruguay 2005 only - Oct 9 2:00 1:00 S Rule Uruguay 2006 only - Mar 12 2:00 0 - # From Jesper Nørgaard Welen (2006-09-06): # http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF -Rule Uruguay 2006 max - Oct Sun>=1 2:00 1:00 S -Rule Uruguay 2007 max - Mar Sun>=8 2:00 0 - +# +# From Steffen Thorsen (2015-06-30): +# ... it looks like they will not be using DST the coming summer: +# http://www.elobservador.com.uy/gobierno-resolvio-que-no-habra-cambio-horario-verano-n656787 +# http://www.republica.com.uy/este-ano-no-se-modificara-el-huso-horario-en-uruguay/523760/ +# From Paul Eggert (2015-06-30): +# Apparently restaurateurs complained that DST caused people to go to the beach +# instead of out to dinner. +# From Pablo Camargo (2015-07-13): +# http://archivo.presidencia.gub.uy/sci/decretos/2015/06/cons_min_201.pdf +# [dated 2015-06-29; repeals Decree 311/006 dated 2006-09-04] +Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 S +Rule Uruguay 2007 2015 - Mar Sun>=8 2:00 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28 -3:44:44 - MMT 1920 May 1 # Montevideo MT @@ -1723,6 +1730,10 @@ Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28 # Venezuela # +# From Paul Eggert (2015-07-28): +# For the 1965 transition see Gaceta Oficial No. 27.619 (1964-12-15), p 205.533 +# http://www.pgr.gob.ve/dmdocuments/1964/27619.pdf +# # From John Stainforth (2007-11-28): # ... the change for Venezuela originally expected for 2007-12-31 has # been brought forward to 2007-12-09. The official announcement was @@ -1734,6 +1745,6 @@ Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28 # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Caracas -4:27:44 - LMT 1890 -4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time? - -4:30 - VET 1965 # Venezuela Time + -4:30 - VET 1965 Jan 1 0:00 # Venezuela T. -4:00 - VET 2007 Dec 9 3:00 -4:30 - VET diff --git a/src/timezone/data/zone.tab b/src/timezone/data/zone.tab index f418e7ffca1a9..935143f523c42 100644 --- a/src/timezone/data/zone.tab +++ b/src/timezone/data/zone.tab @@ -106,8 +106,8 @@ BW -2439+02555 Africa/Gaborone BY +5354+02734 Europe/Minsk BZ +1730-08812 America/Belize CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador -CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI -CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971 +CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (peninsula), PEI +CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia (Cape Breton) CA +4606-06447 America/Moncton Atlantic Time - New Brunswick CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore @@ -129,6 +129,7 @@ CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories CA +4906-11631 America/Creston Mountain Standard Time - Creston, British Columbia CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia +CA +5848-12242 America/Fort_Nelson Mountain Standard Time - Fort Nelson, British Columbia CA +4916-12307 America/Vancouver Pacific Time - west British Columbia CA +6043-13503 America/Whitehorse Pacific Time - south Yukon CA +6404-13925 America/Dawson Pacific Time - north Yukon diff --git a/src/timezone/data/zone1970.tab b/src/timezone/data/zone1970.tab index 5da0200b434d9..1e1b7e79ea940 100644 --- a/src/timezone/data/zone1970.tab +++ b/src/timezone/data/zone1970.tab @@ -103,8 +103,8 @@ BT +2728+08939 Asia/Thimphu BY +5354+02734 Europe/Minsk BZ +1730-08812 America/Belize CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador -CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI -CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971 +CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (peninsula), PEI +CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia (Cape Breton) CA +4606-06447 America/Moncton Atlantic Time - New Brunswick CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore @@ -126,6 +126,7 @@ CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories CA +4906-11631 America/Creston Mountain Standard Time - Creston, British Columbia CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia +CA +5848-12242 America/Fort_Nelson Mountain Standard Time - Fort Nelson, British Columbia CA +4916-12307 America/Vancouver Pacific Time - west British Columbia CA +6043-13503 America/Whitehorse Pacific Time - south Yukon CA +6404-13925 America/Dawson Pacific Time - north Yukon @@ -206,6 +207,7 @@ KI -0308-17105 Pacific/Enderbury Phoenix Islands KI +0152-15720 Pacific/Kiritimati Line Islands KP +3901+12545 Asia/Pyongyang KR +3733+12658 Asia/Seoul +KY +1918-08123 America/Cayman KZ +4315+07657 Asia/Almaty most locations KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda) KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe) @@ -259,7 +261,7 @@ NR -0031+16655 Pacific/Nauru NU -1901-16955 Pacific/Niue NZ,AQ -3652+17446 Pacific/Auckland New Zealand time NZ -4357-17633 Pacific/Chatham Chatham Islands -PA,KY +0858-07932 America/Panama +PA +0858-07932 America/Panama PE -1203-07703 America/Lima PF -1732-14934 Pacific/Tahiti Society Islands PF -0900-13930 Pacific/Marquesas Marquesas Islands diff --git a/src/timezone/known_abbrevs.txt b/src/timezone/known_abbrevs.txt index bcf3bcb3c41e5..7d8c0a924340d 100644 --- a/src/timezone/known_abbrevs.txt +++ b/src/timezone/known_abbrevs.txt @@ -92,6 +92,7 @@ JST 32400 KGT 21600 KOST 39600 KRAT 25200 +KST 30600 KST 32400 LHDT 39600 D LHST 37800 @@ -112,6 +113,7 @@ MVT 18000 MYT 28800 NCT 39600 NDT -9000 D +NFT 39600 NFT 41400 NOVT 21600 NPT 20700 @@ -160,7 +162,6 @@ TVT 43200 ULAST 32400 D ULAT 28800 UTC 0 -UYST -7200 D UYT -10800 UZT 18000 VET -16200 diff --git a/src/timezone/tznames/America.txt b/src/timezone/tznames/America.txt index 38a41a2b6d39c..34ee245a15946 100644 --- a/src/timezone/tznames/America.txt +++ b/src/timezone/tznames/America.txt @@ -292,7 +292,7 @@ PYT America/Asuncion # Paraguay Time # (America/Asuncion) SRT America/Paramaribo # Suriname Time # (America/Paramaribo) -UYST -7200 D # Uruguay Summer Time +UYST -7200 D # Uruguay Summer Time (obsolete) # (America/Montevideo) UYT -10800 # Uruguay Time # (America/Montevideo) diff --git a/src/timezone/tznames/Asia.txt b/src/timezone/tznames/Asia.txt index 305e2ecd3cc2f..d239b70b9bce3 100644 --- a/src/timezone/tznames/Asia.txt +++ b/src/timezone/tznames/Asia.txt @@ -168,8 +168,10 @@ KGT Asia/Bishkek # Kyrgyzstan Time KRAST Asia/Krasnoyarsk # Krasnoyarsk Summer Time (obsolete) KRAT Asia/Krasnoyarsk # Krasnoyarsk Time # (Asia/Krasnoyarsk) -KST 32400 # Korean Standard Time +KST Asia/Pyongyang # Korean Standard Time # (Asia/Pyongyang) +KST 32400 # Korean Standard Time + # (Asia/Seoul) LKT Asia/Colombo # Lanka Time (obsolete) MAGST Asia/Magadan # Magadan Summer Time (obsolete) MAGT Asia/Magadan # Magadan Time diff --git a/src/timezone/tznames/Default b/src/timezone/tznames/Default index 40078e0ae2417..9aabef52db315 100644 --- a/src/timezone/tznames/Default +++ b/src/timezone/tznames/Default @@ -221,7 +221,7 @@ PYST -10800 D # Paraguay Summer Time # (America/Asuncion) PYT America/Asuncion # Paraguay Time # (America/Asuncion) -UYST -7200 D # Uruguay Summer Time +UYST -7200 D # Uruguay Summer Time (obsolete) # (America/Montevideo) UYT -10800 # Uruguay Time # (America/Montevideo) @@ -307,7 +307,7 @@ KRAST Asia/Krasnoyarsk # Krasnoyarsk Summer Time (obsolete) KRAT Asia/Krasnoyarsk # Krasnoyarsk Time # (Asia/Krasnoyarsk) KST 32400 # Korean Standard Time - # (Asia/Pyongyang) + # (Asia/Seoul) LKT Asia/Colombo # Lanka Time (obsolete) MAGST Asia/Magadan # Magadan Summer Time (obsolete) MAGT Asia/Magadan # Magadan Time diff --git a/src/timezone/tznames/Pacific.txt b/src/timezone/tznames/Pacific.txt index 0d2b0fcd73f8f..9b893fc46da4b 100644 --- a/src/timezone/tznames/Pacific.txt +++ b/src/timezone/tznames/Pacific.txt @@ -58,7 +58,7 @@ NCT 39600 # New Caledonia Time # CONFLICT! NFT is not unique # Other timezones: # - NFT: Newfoundland Time (America) -NFT 41400 # Norfolk Time +NFT Pacific/Norfolk # Norfolk Time # (Pacific/Norfolk) NRT Pacific/Nauru # Nauru Time # (Pacific/Nauru) diff --git a/src/tools/msvc/Install.pm b/src/tools/msvc/Install.pm index b592f997f6cf9..f9557254a4b2b 100644 --- a/src/tools/msvc/Install.pm +++ b/src/tools/msvc/Install.pm @@ -98,6 +98,9 @@ sub Install { wanted => sub { /^.*\.sample\z/s && push(@$sample_files, $File::Find::name); + + # Don't find files of in-tree temporary installations. + $_ eq 'share' and $File::Find::prune = 1; } }, @top_dir); @@ -152,6 +155,9 @@ sub Install { wanted => sub { /^(.*--.*\.sql|.*\.control)\z/s && push(@$pl_extension_files, $File::Find::name); + + # Don't find files of in-tree temporary installations. + $_ eq 'share' and $File::Find::prune = 1; } }, @pldirs); @@ -199,8 +205,6 @@ sub CopySetOfFiles print "Copying $what" if $what; foreach (@$flist) { - next if /regress/; # Skip temporary install in regression subdir - next if /ecpg.test/; # Skip temporary install in regression subdir my $tgt = $target . basename($_); print "."; lcopy($_, $tgt) || croak "Could not copy $_: $!\n"; diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm index 0603130c58003..21faa58b3c460 100644 --- a/src/tools/msvc/Mkvcbuild.pm +++ b/src/tools/msvc/Mkvcbuild.pm @@ -41,7 +41,7 @@ my $contrib_extrasource = { 'seg' => [ 'contrib/seg/segscan.l', 'contrib/seg/segparse.y' ], }; my @contrib_excludes = ( 'commit_ts', 'hstore_plperl', 'hstore_plpython', 'intagg', - 'ltree_plpython', 'pgcrypto', 'sepgsql'); + 'ltree_plpython', 'pgcrypto', 'sepgsql', 'brin'); # Set of variables for frontend modules my $frontend_defines = { 'initdb' => 'FRONTEND' }; diff --git a/src/tools/msvc/install.bat b/src/tools/msvc/install.bat index bed08f1e125dd..d03277eff2b74 100644 --- a/src/tools/msvc/install.bat +++ b/src/tools/msvc/install.bat @@ -1,27 +1,6 @@ @echo off REM src/tools/msvc/install.bat - -if NOT "%1"=="" GOTO RUN_INSTALL - -echo Invalid command line options. -echo Usage: "install.bat " -echo. -REM exit fix for pre-2003 shell especially if used on buildfarm -if "%XP_EXIT_FIX%" == "yes" exit 1 -exit /b 1 - -:RUN_INSTALL - -SETLOCAL - -IF NOT EXIST buildenv.pl goto nobuildenv -perl -e "require 'buildenv.pl'; while(($k,$v) = each %%ENV) { print qq[\@SET $k=$v\n]; }" > bldenv.bat -CALL bldenv.bat -del bldenv.bat -:nobuildenv - -perl install.pl "%1" %2 - -REM exit fix for pre-2003 shell especially if used on buildfarm -if "%XP_EXIT_FIX%" == "yes" exit %ERRORLEVEL% -exit /b %ERRORLEVEL% +REM all the logic for this now belongs in install.pl. This file really +REM only exists so you don't have to type "perl install.pl" +REM Resist any temptation to add any logic here. +@perl install.pl %* diff --git a/src/tools/msvc/install.pl b/src/tools/msvc/install.pl index 97e297e1765a4..bde5b7c793a28 100755 --- a/src/tools/msvc/install.pl +++ b/src/tools/msvc/install.pl @@ -8,6 +8,19 @@ use Install qw(Install); +# buildenv.pl is for specifying the build environment settings +# it should contain lines like: +# $ENV{PATH} = "c:/path/to/bison/bin;$ENV{PATH}"; + +if (-e "src/tools/msvc/buildenv.pl") +{ + require "src/tools/msvc/buildenv.pl"; +} +elsif (-e "./buildenv.pl") +{ + require "./buildenv.pl"; +} + my $target = shift || Usage(); my $insttype = shift; Install($target, $insttype); diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index ddb628d154509..0d2f5ec856782 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -50,7 +50,7 @@ copy("$Config/regress/regress.dll", "src/test/regress"); copy("$Config/dummy_seclabel/dummy_seclabel.dll", "src/test/regress"); -$ENV{PATH} = "$topdir/$Config/libpq;$topdir/$Config/libpq;$ENV{PATH}"; +$ENV{PATH} = "$topdir/$Config/libpq;$ENV{PATH}"; my $schedule = shift; unless ($schedule) @@ -108,15 +108,12 @@ sub installcheck sub check { - chdir $startdir; - InstallTemp(); chdir "${topdir}/src/test/regress"; - my @args = ( - "${tmp_installdir}/bin/pg_regress", + "../../../$Config/pg_regress/pg_regress", "--dlpath=.", - "--bindir=${tmp_installdir}/bin", + "--bindir=", "--schedule=${schedule}_schedule", "--encoding=SQL_ASCII", "--no-locale", @@ -136,11 +133,9 @@ sub ecpgcheck exit $status if $status; InstallTemp(); chdir "$topdir/src/interfaces/ecpg/test"; - - $ENV{PATH} = "${tmp_installdir}/bin;${tmp_installdir}/lib;$ENV{PATH}"; $schedule = "ecpg"; my @args = ( - "${tmp_installdir}/bin/pg_regress_ecpg", + "../../../../$Config/pg_regress_ecpg/pg_regress_ecpg", "--bindir=", "--dbname=regress1,connectdb", "--create-role=connectuser,connectdb", @@ -156,14 +151,12 @@ sub ecpgcheck sub isolationcheck { - chdir $startdir; - - InstallTemp(); - chdir "${topdir}/src/test/isolation"; - + chdir "../isolation"; + copy("../../../$Config/isolationtester/isolationtester.exe", + "../../../$Config/pg_isolation_regress"); my @args = ( - "${tmp_installdir}/bin/pg_isolation_regress", - "--bindir=${tmp_installdir}/bin", + "../../../$Config/pg_isolation_regress/pg_isolation_regress", + "--bindir=../../../$Config/psql", "--inputdir=.", "--schedule=./isolation_schedule"); push(@args, $maxconn) if $maxconn; @@ -174,10 +167,7 @@ sub isolationcheck sub plcheck { - chdir $startdir; - - InstallTemp(); - chdir "${topdir}/src/pl"; + chdir "../../pl"; foreach my $pl (glob("*")) { @@ -214,8 +204,8 @@ sub plcheck "============================================================\n"; print "Checking $lang\n"; my @args = ( - "${tmp_installdir}/bin/pg_regress", - "--bindir=${tmp_installdir}/bin", + "../../../$Config/pg_regress/pg_regress", + "--bindir=../../../$Config/psql", "--dbname=pl_regression", @lang_args, @tests); system(@args); my $status = $? >> 8; @@ -230,7 +220,6 @@ sub subdircheck { my $subdir = shift; my $module = shift; - my $mstat = 0; if ( !-d "$module/sql" || !-d "$module/expected" @@ -277,23 +266,19 @@ sub subdircheck print "============================================================\n"; print "Checking $module\n"; my @args = ( - "${tmp_installdir}/bin/pg_regress", - "--bindir=${tmp_installdir}/bin", + "$topdir/$Config/pg_regress/pg_regress", + "--bindir=${topdir}/${Config}/psql", "--dbname=contrib_regression", @opts, @tests); system(@args); - my $status = $? >> 8; - $mstat ||= $status; chdir ".."; - - exit $mstat if $mstat; } sub contribcheck { - chdir "$topdir/contrib"; + chdir "../../../contrib"; + my $mstat = 0; foreach my $module (glob("*")) { - # these configuration-based exclusions must match Install.pm next if ($module eq "uuid-ossp" && !defined($config->{uuid})); next if ($module eq "sslinfo" && !defined($config->{openssl})); @@ -304,25 +289,31 @@ sub contribcheck next if ($module eq "sepgsql"); subdircheck("$topdir/contrib", $module); + my $status = $? >> 8; + $mstat ||= $status; } + exit $mstat if $mstat; } sub modulescheck { - chdir "$topdir/src/test/modules"; + chdir "../../../src/test/modules"; + my $mstat = 0; foreach my $module (glob("*")) { subdircheck("$topdir/src/test/modules", $module); + my $status = $? >> 8; + $mstat ||= $status; } + exit $mstat if $mstat; } - # Run "initdb", then reconfigure authentication. sub standard_initdb { return ( - system("${tmp_installdir}/bin/initdb", '-N') == 0 and system( - "${tmp_installdir}/bin/pg_regress", '--config-auth', + system('initdb', '-N') == 0 and system( + "$topdir/$Config/pg_regress/pg_regress", '--config-auth', $ENV{PGDATA}) == 0); } @@ -341,13 +332,14 @@ sub upgradecheck $ENV{PGPORT} ||= 50432; my $tmp_root = "$topdir/src/bin/pg_upgrade/tmp_check"; (mkdir $tmp_root || die $!) unless -d $tmp_root; - - InstallTemp(); + my $upg_tmp_install = "$tmp_root/install"; # unshared temp install + print "Setting up temp install\n\n"; + Install($upg_tmp_install, "all", $config); # Install does a chdir, so change back after that chdir $cwd; my ($bindir, $libdir, $oldsrc, $newsrc) = - ("$tmp_installdir/bin", "$tmp_installdir/lib", $topdir, $topdir); + ("$upg_tmp_install/bin", "$upg_tmp_install/lib", $topdir, $topdir); $ENV{PATH} = "$bindir;$ENV{PATH}"; my $data = "$tmp_root/data"; $ENV{PGDATA} = "$data.old"; @@ -486,6 +478,7 @@ sub InstallTemp { print "Setting up temp install\n\n"; Install("$tmp_installdir", "all", $config); + $ENV{PATH} = "$tmp_installdir/bin;$ENV{PATH}"; } sub usage diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 4b650d1bde731..23ba334076ed2 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -2749,6 +2749,7 @@ xl_invalid_page xl_invalid_page_key xl_multi_insert_tuple xl_multixact_create +xl_multixact_truncate xl_parameter_change xl_relmap_update xl_replorigin_drop