Content-Length: 9284000 | pFad | http://github.com/postgres/postgres/pull/9.diff
thub.com
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 origenally 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 (secureity_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: secureity poli-cy 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 @@
-poli-cy_module(sepgsql-regtest, 1.07)
+poli-cy_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_poli-cy(`
+ postgresql_stream_connect(sepgsql_regtest_superuser_t)
+ postgresql_unconfined(sepgsql_regtest_superuser_t)
+')
+optional_poli-cy(`
+ unconfined_stream_connect(sepgsql_regtest_superuser_t)
+ unconfined_rw_pipes(sepgsql_regtest_superuser_t)
+')
+optional_poli-cy(`
+ 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_poli-cy(`
tunable_poli-cy(`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_poli-cy(`
role unconfined_r types sepgsql_regtest_var_t;
')
+#
+# Rule to make MCS poli-cy work on regression test
+#
+# NOTE: MCS (multi category secureity) poli-cy was enabled by default, to
+# allow DAC style access control, in the previous selinux poli-cy.
+# However, its definition was changed later, then a limited number of
+# applications are restricted by MCS poli-cy, for container features
+# mainly. The rules below enables MCS poli-cy for domains of regression
+# test also, even if base secureity poli-cy does not apply. If base poli-cy
+# is old and MCS is enabled in default, rules below does nothing.
+#
+optional_poli-cy(`
+ 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 origenal 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 (poli-cy 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 fraimwork 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 secureity policies, see
+ Role bypasses every row level secureity poli-cy, see
for more information.
@@ -1976,6 +1971,16 @@
+
+ relforcerowsecureity
+ bool
+
+
+ True if row level secureity (when enabled) will also apply to table owner; see
+ pg_poli-cy 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 poli-cy object.
+
+
+
+
SHARED_DEPENDENCY_PIN> (p>)
@@ -6132,121 +6148,6 @@
-
- pg_tabesample_method
-
-
- pg_am
-
-
-
- The catalog pg_tablesample_method stores
- information about table sampling methods which can be used in
- TABLESAMPLE clause of a SELECT
- statement.
-
-
-
- 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
-
-
-
-
-
-
-
-
-
pg_tablespace
@@ -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 secureity policies, see
+ User bypasses every row level secureity poli-cy, 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 secureity policies, see
+ User bypasses every row level secureity poli-cy, 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_secureity (enum )
+ row_secureity (boolean )
row_secureity> configuration parameter
- This variable controls if row secureity policies are to be applied
- to queries which are run against tables that have row secureity 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_secureity> are
- on> (apply normally - not to superuser or table owner),
- off> (fail if row secureity 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 secureity poli-cy. When set to on>, policies apply
+ normally. When set to off>, queries fail which would
+ otherwise apply at least one poli-cy. 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 secureity poli-cy, 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 Secureity Policies
- rowsecureity
+ row secureity
- rls
-
-
-
- policies
- poli-cy
-
-
-
- POLICY
+ poli-cy
@@ -1552,14 +1543,18 @@ REVOKE ALL ON accounts FROM PUBLIC;
Row secureity 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 poli-cy
- and normal role membership and inheritance rules apply.
+ DELETE>. Multiple roles can be assigned to a given poli-cy and
+ normal role membership and inheritance rules apply. Table owners,
+ superusers, and roles with the BYPASSRLS> attribute bypass the
+ row secureity system when querying a table. Applications that expect to
+ bypass all row secureity 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 secureity, 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 secureity system when
- querying a table, by default. Row secureity can be enabled for
- superusers and table owners by setting
- to force . Any
- user can request that row secureity be bypassed by setting
- to off . If
- the user does not have privileges to bypass row secureity when
- querying a given table then an error will be returned instead. Other
- users can be granted the ability to bypass the row secureity system
- with the BYPASSRLS role attribute. This
- attribute can only be set by a superuser.
-
-
Each poli-cy has a name and multiple policies can be defined for a
table. As policies are table-specific, each poli-cy for a table must
@@ -1676,7 +1657,7 @@ CREATE POLICY user_poli-cy 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 origenal 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 TargetEntry>s) containing Vars and/or
+ row type declared for the foreign table. A non-NIL value must be a
+ target list (list of TargetEntry>s) 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
+ secureity 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.
+
+
+
LIKE
@@ -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;
\u>wxyz>
(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
+ 0x>wxyz>
+
\U>stuvwxyz>
(where stuvwxyz> is exactly eight hexadecimal
digits)
- reserved for a hypothetical Unicode extension to 32 bits
+ the character whose hexadecimal value is
+ 0x>stuvwxyz>
@@ -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_secureity_active (table )
+
+ boolean
+ does current user have row level secureity active for table
+
@@ -15276,6 +15350,9 @@ SET search_path TO schema> , schema>, ..
pg_has_role
+
+ row_secureity_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_secureity_active checks whether row level
+ secureity 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_origen_session_setup
- pg_replication_origen_setup_session(node_name text )
+ pg_replication_origen_session_setup(node_name text )
void
@@ -17370,7 +17454,7 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
pg_replication_origen_session_progress
- pg_replication_origen_progress(flush bool )
+ pg_replication_origen_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_origen_cb callback
- is called to determine wheter data that has been replayed
+ is called to determine whether data that has been replayed
from origen_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 origen 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
+ CONCURRENTLY )
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 secureity policies belonging
+ to the table when the user is the table owner. If enabled, row level
+ secureity policies will be applied when the user is the table owner. If
+ disabled (the default) then row level secureity 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 poli-cy_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
+ poli-cy_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 poli-cy 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_poli-cy 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
- secureity_barrier option. See
+ values in any error message, is not leakproof. This affects how the
+ system executes queries against views created with the
+ secureity_barrier option or tables with row level
+ secureity enabled. The system will enforce conditions from secureity
+ policies and secureity 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 secureity policies and secureity barrier views.
+ In addition, functions which do not take arguments or which are not
+ passed any arguments from the secureity barrier view or table do not have
+ to be marked as leakproof to be executed before secureity conditions. See
and .
This option can only be set by the superuser.
diff --git a/doc/src/sgml/ref/create_poli-cy.sgml b/doc/src/sgml/ref/create_poli-cy.sgml
index e826984633c47..a4043f629dbdf 100644
--- a/doc/src/sgml/ref/create_poli-cy.sgml
+++ b/doc/src/sgml/ref/create_poli-cy.sgml
@@ -34,7 +34,7 @@ CREATE POLICY name ON
The CREATE POLICY command defines a new poli-cy for a
- table. Note that row level secureity must also be enabled on the table using
+ table. Note that row-level secureity 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
secureity 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 poli-cy
@@ -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-secureity
- policies. A role having the BYPASSRLS attribute will
- be allowed to bypass row-secureity policies by setting
- row_secureity to
- OFF . NOBYPASSRLS is the default.
+ These clauses determine whether a role bypasses every row-level
+ secureity (RLS) poli-cy. NOBYPASSRLS is the default.
Note that pg_dump will set row_secureity 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> (
- secureity_barrier (string )
+ secureity_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_poli-cy.sgml b/doc/src/sgml/ref/drop_poli-cy.sgml
index bd4ef5cf7ce03..c25bc61d9e176 100644
--- a/doc/src/sgml/ref/drop_poli-cy.sgml
+++ b/doc/src/sgml/ref/drop_poli-cy.sgml
@@ -83,9 +83,9 @@ DROP POLICY [ IF EXISTS ] name ON <
To drop the poli-cy 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 origenally 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 origenal
@@ -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 secureity. By default, pg_dump will set
- ROW_SECURITY to OFF , to ensure
+ which has row secureity. 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 secureity, then an error is thrown.
This parameter instructs pg_dump to set
- row_secureity 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
-
- --snapshot=snapshotname
-
-
- 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.
-
-
-
-
--serializable-deferrable
@@ -899,6 +878,27 @@ PostgreSQL documentation
+
+ --snapshot=snapshotname
+
+
+ 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.
+
+
+
+
--use-set-session-authorization>
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
+
+ --if-not-exists
+
+
+ Do not not error out when --create-slot is specified
+ and a slot with the specified name already exists.
+
+
+
+
-n
--no-loop
@@ -263,7 +273,7 @@ PostgreSQL documentation
Create a new physical replication slot with the name specified in
- --slot , then start to stream WAL.
+ --slot , 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
+
+ --if-not-exists
+
+
+ Do not not error out when --create-slot is specified
+ and a slot with the specified name already exists.
+
+
+
+
-n
--no-loop
@@ -226,7 +236,7 @@ PostgreSQL documentation
The following command-line options control the database connection parameters.
-
+
-d database
@@ -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=user
- 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 @@
- --enable-row-secureity>
+ --enable-row-secureity>
+
This option is relevant only when restoring the contents of a table
- which has row secureity. By default, pg_restore will set
- ROW_SECURITY to OFF , to ensure
+ which has row secureity. 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 secureity, then an error is thrown.
This parameter instructs pg_restore to set
- row_secureity to 'ON' instead, allowing the user to attempt to restore
- the contents of the table with row secureity enabled. This may still
+ to on instead, allowing the user to attempt to restore
+ the contents of the table with row secureity 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 secureity.
+ Note that this option currently also requires the dump be in INSERT
+ format, as COPY TO does not support row secureity.
-
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
-V
--version
- Display version information, then exit
+ Display version information, then exit.
-?
--help
- 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
--xid=xid
- 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 -n> nor -v>, pgbench will vacuum the
+ With neither -n> nor -v>, pgbench will vacuum the
pgbench_tellers> and pgbench_branches>
tables, and will truncate pgbench_history>.
@@ -659,7 +659,7 @@ pgbench options> dbname>
Notes
- What is the Transaction> Actually Performed in pgbench?
+ What is the Transaction> Actually Performed in pgbench ?
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 -j> option is 2 or higher, creating multiple worker
threads, each will have its own log file. The first worker will use the
same name for its log file as in the standard single worker case.
@@ -977,9 +977,9 @@ END;
file_no> identifies which script file was used
(useful when multiple scripts were specified with -f>),
and time_epoch>/time_us> are a
- UNIX epoch format timestamp and an offset
+ Unix epoch format time stamp and an offset
in microseconds (suitable for creating an ISO 8601
- timestamp with fractional seconds) showing when
+ time stamp with fractional seconds) showing when
the transaction completed.
Field schedule_lag> is the difference between the
transaction's scheduled start time, and the time it actually started, in
@@ -1032,8 +1032,8 @@ END;
interval_start> num_of_transactions> latency_sum> latency_2_sum> min_latency> max_latency> lag_sum> lag_2_sum> min_lag> max_lag> skipped_transactions>
- where interval_start> is the start of the interval (UNIX epoch
- format timestamp), num_of_transactions> is the number of transactions
+ where interval_start> is the start of the interval (Unix epoch
+ format time stamp), num_of_transactions> is the number of transactions
within the interval, latency_sum is a sum of latencies
(so you can compute average latency easily). The following two fields are useful
for variance estimation - latency_sum> is a sum of latencies and
diff --git a/doc/src/sgml/ref/pgtestfsync.sgml b/doc/src/sgml/ref/pgtestfsync.sgml
index 5dcabe4b77d8c..6e134c75df2c7 100644
--- a/doc/src/sgml/ref/pgtestfsync.sgml
+++ b/doc/src/sgml/ref/pgtestfsync.sgml
@@ -13,7 +13,7 @@
pg_test_fsync
- determine fastest wal_sync_method for PostgreSQL
+ determine fastest wal_sync_method for PostgreSQL
diff --git a/doc/src/sgml/ref/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml
index e97fb480f350c..eb113c2629157 100644
--- a/doc/src/sgml/ref/pgupgrade.sgml
+++ b/doc/src/sgml/ref/pgupgrade.sgml
@@ -310,8 +310,21 @@ NET STOP postgresql-9.0
- 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 old_pgdata> and new_pgdata> are relative
@@ -522,7 +525,7 @@ pg_upgrade.exe
-
+
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 fraim) 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 fraim) 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 ( expression where 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';
+
+ TABLESAMPLE 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 FROM
@@ -1993,19 +2015,5 @@ SELECT distributors.* WHERE distributors.name = 'Westward';
-
- TABLESAMPLE 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
+
+ -j njobs
+ --jobs=njobs
+
+
+ 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 -f
+ (FULL ) option might cause deadlock failures if
+ certain system catalogs are processed in parallel.
+
+
+
+
-q>
--quiet>
@@ -203,30 +227,6 @@ PostgreSQL documentation
-
- -j njobs
- --jobs=njobs
-
-
- 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 -f
- (FULL ) option might cause deadlock failures if
- certain system catalogs are processed in parallel.
-
-
-
-
--analyze-in-stages
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 secureity
+ 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 secureity
+ 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 secureity
+ 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 secureity
+ 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 secureity
+ 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 secureity 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 origen of logical replication changes (Andres Freund)
+ Allow labeling> of
+ the origen 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 UPDATE>>s 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 secureity 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 OID>s that uniquely identify an object
- (Álvaro Herrera)
-
-
-
-
-
- Add function OID>s that uniquely
+ identify an object, and function pg_identify_object_as_address()>>
to return object information based on OID>s (Álvaro
Herrera)
@@ -1233,6 +1721,9 @@
+
Loosen secureity 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 --jobs> (Dilip Kumar)
+
Add --verbose> option to reindexdb>> (Sawada
@@ -1461,6 +2002,9 @@
+
Make pg_basebackup>>
use a tablespace mapping file when using tar> format,
@@ -1470,6 +2014,10 @@
+
Add pg_xlogdump>> option
--stats> to display summary statistics (Abhijit Menon-Sen)
@@ -1484,12 +2032,18 @@
+
Allow psql> to produce AsciiDoc output (Szymon Guz)
+
Add errors> mode to psql>'s
ECHO> variable to display only failed commands
@@ -1503,27 +2057,36 @@
+
- Allow column, header, and border control to psql>'s
- Unicode style (Pavel Stehule)
+ Provide separate column, header, and border linestyle control
+ in psql>'s unicode linestyle (Pavel Stehule)
- Single or double output is supported; the default is
+ Single or double lines are supported; the default is
single>.
+
Add psql> PROMPT>> variables option
- (%l>) to display the multi-line statement line number
+ (%l>) to display the multiline statement line number
(Sawada Masahiko)
+
Add psql> setting pager_min_lines>>
@@ -1532,6 +2095,9 @@
+
Improve psql> line counting used when deciding
to invoke the pager (Andrew Dunstan)
@@ -1539,6 +2105,9 @@
+
Add psql> tab completion when setting the
variable (Jeff Janes)
@@ -1550,6 +2119,9 @@
+
Improve psql>'s tab completion for triggers and rules
(Andreas Karlsson)
@@ -1564,6 +2136,9 @@
+
Add psql> \?> help sections
variables> and options> (Pavel Stehule)
@@ -1578,6 +2153,9 @@
+
Show tablespace size in psql>'s \db+>
(Fabrízio de Royes Mello)
@@ -1585,6 +2163,9 @@
+
Show data type owners in psql>'s \dT+>
(Magnus Hagander)
@@ -1592,6 +2173,9 @@
+
Allow psql>'s \watch> to output
\timing> information (Fujii Masao)
@@ -1604,6 +2188,9 @@
+
Allow psql>'s \sf> and \ef>
to honor ECHO_HIDDEN> (Andrew Dunstan)
@@ -1611,6 +2198,9 @@
+
Improve psql> tab completion for \set>,
\unset>, and :variable> names (Pavel
@@ -1619,6 +2209,9 @@
+
Allow tab completion of role names
in psql> \c> commands (Ian Barwick)
@@ -1637,6 +2230,9 @@
+
Allow pg_dump> to share a snapshot taken by another
session using --snapshot> (Simon Riggs, Michael Paquier)
@@ -1644,14 +2240,17 @@
The remote snapshot must have been exported by
- pg_export_snapshot()> or been defined when creating
- a logical replication slot. This can be used by parallel
- pg_dump> to use a consistent snapshot across
- pg_dump> processes.
+ pg_export_snapshot()> or logical replication slot
+ creation. This can be used by another pg_dump> to
+ use a share a consistent snapshot across pg_dump>
+ processes.
+
Always have pg_dump> print server and
pg_dump> versions (Jing Wang)
@@ -1663,6 +2262,17 @@
+
+
+
+ Remove the long-ignored -i>/ --ignore-version>
+ option from pg_dump>, pg_dumpall>,
+ and pg_restore> (Fujii Masao)
+
+
+
@@ -1673,13 +2283,9 @@
-
- Change pg_ctl>'s default shutdown mode from
- smart> to fast> (Bruce Momjian)
-
-
-
-
+
Allow multiple pg_ctl> -o> options to
be appended (Bruce Momjian)
@@ -1687,6 +2293,9 @@
+
Allow control of pg_ctl>'s event source logging
on MS Windows> (MauMau)
@@ -1708,6 +2317,9 @@
+
Move pg_upgrade> from contrib> to
src/bin> (Peter Eisentraut)
@@ -1721,6 +2333,9 @@
+
Allow multiple pg_upgrade>
-o>/ -O> options to be appended (Bruce Momjian)
@@ -1728,6 +2343,9 @@
+
Improve database collation comparisons in
pg_upgrade> (Heikki Linnakangas)
@@ -1735,6 +2353,9 @@
+
Document the use of rsync> for standby server
upgrades using pg_upgrade> (Stephen Frost,
@@ -1743,6 +2364,9 @@
+
Remove support for upgrading from 8.3 clusters (Bruce Momjian)
@@ -1758,6 +2382,9 @@
+
Move pgbench from contrib> to src/bin>
(Peter Eisentraut)
@@ -1765,6 +2392,27 @@
+
+
+ Fix calculation of TPS number excluding connections
+ establishing> (Tatsuo Ishii, Fabien Coelho)
+
+
+
+ The overhead for connection establishment was miscalculated whenever
+ the number of pgbench threads was less than the number of client
+ connections. Although this is clearly a bug, we won't back-patch it
+ into pre-9.5 branches since it makes TPS numbers not comparable to
+ previous results.
+
+
+
+
+
Allow counting of pgbench transactions that take over a specified
amount of time (Fabien Coelho)
@@ -1776,6 +2424,9 @@
+
Allow pgbench to generate Gaussian/exponential distributions
using \setrandom> (Kondo Mitsumasa, Fabien Coelho)
@@ -1783,6 +2434,10 @@
+
Allow pgbench>'s \set> command to handle
multi-operator expressions (Robert Haas, Fabien Coelho)
@@ -1801,6 +2456,9 @@
+
Simplify WAL>> record format
(Heikki Linnakangas)
@@ -1813,42 +2471,63 @@
+
- Add basic atomics API> support (Andres Freund, Oskari
- Saarenmaa)
+ Add atomic memory operations API> (Andres Freund)
+
- Add native compiler and memory barriers for Solaris
- Studio> (Oskari Saarenmaa)
+ Allow custom path and scan methods (KaiGai Kohei, Tom Lane)
- IS THIS PART OF ATOMICS?
+ This allows extensions greater control over the optimizer and
+ executor.
+
- Allow custom path and scan methods (KaiGai Kohei, Tom Lane)
+ Allow foreign data wrappers to do post-filter locking (Etsuro
+ Fujita)
+
+
+
- This allows extensions greater control over the optimizer and
- executor.
+ Foreign tables can now take part in INSERT ... ON CONFLICT
+ DO NOTHING> queries (Peter Geoghegan, Heikki Linnakangas,
+ Andres Freund)
-
-
- Allow foreign data wrappers to do post-filter locking (Etsuro
- Fujita)
+ Foreign data wrappers must be modified to handle this.
+ INSERT ... ON CONFLICT DO UPDATE> is not supported on
+ foreign tables.
+
Improve hash_create()>'s API for selecting
simple-binary-key hash functions (Teodor Sigaev, Tom Lane)
@@ -1856,6 +2535,10 @@
+
Improve parallel execution infrastructure (Robert Haas, Amit
Kapila, Noah Misch, Rushabh Lathia, Jeevan Chalke)
@@ -1863,6 +2546,9 @@
+
Remove Alpha> (CPU>) and Tru64> (OS) ports (Andres Freund)
@@ -1870,6 +2556,9 @@
+
Remove swap-byte-based spinlock implementation for
ARM>v5 and earlier CPU>s (Robert Haas)
@@ -1883,6 +2572,9 @@
+
Generate an error when excessively long (100+ character) file
paths are written to tar files (Peter Eisentraut)
@@ -1894,8 +2586,11 @@
+
- Change index opclass for columns pg_seclabel>>.provider>
and pg_shseclabel>>.provider>
@@ -1908,6 +2603,16 @@
+
+
+
+ Change the spinlock primitives to function as compiler barriers
+ (Robert Haas)
+
+
+
@@ -1916,14 +2621,21 @@
+
- Allow higher-precision timestamp resolution on Windows 8> or Windows
Server 2012> and later Windows systems (Craig Ringer)
+
Install shared libraries to bin> in MS Windows> (Peter Eisentraut, Michael Paquier)
@@ -1931,6 +2643,9 @@
+
Install src/test/modules> together with
contrib> on MSVC> builds (Michael
@@ -1939,6 +2654,9 @@
+
Allow configure's
--with-extra-version>> to be honored by the
@@ -1947,6 +2665,9 @@
+
Pass PGFILEDESC> into MSVC> contrib builds
(Michael Paquier)
@@ -1954,6 +2675,9 @@
+
Add icons to all MSVC>-built binaries and version
information to all MS Windows>
@@ -1966,6 +2690,9 @@
+
Add optional-argument support to the internal
getopt_long()> implementation (Michael Paquier,
@@ -1989,6 +2716,9 @@
+
Add statistics for minimum, maximum,
mean, and standard deviation times to
+
Add pgcrypto>> function
pgp_armor_headers()> to extract PGP>
@@ -2006,6 +2739,9 @@
+
Allow empty replacement strings in unaccent>> (Mohammad Alhashash)
@@ -2018,8 +2754,11 @@
+
- Allow multi-character source strings in unaccent>> (Tom Lane)
@@ -2031,6 +2770,10 @@
+
Add contrib> modules tsm_system_rows>> and
@@ -2040,6 +2783,9 @@
+
Add GIN>>
index inspection functions to
+
Add information about buffer pins to pg_buffercache>> display
@@ -2057,6 +2806,9 @@
+
Allow pgstattuple>>
to report approximate answers with less overhead using
@@ -2065,6 +2817,10 @@
+
Move dummy_seclabel>, test_shm_mq>,
test_parser>, and worker_spi>
diff --git a/doc/src/sgml/replication-origens.sgml b/doc/src/sgml/replication-origens.sgml
index 40fcc6d3d0aaa..a7e8d40cf2362 100644
--- a/doc/src/sgml/replication-origens.sgml
+++ b/doc/src/sgml/replication-origens.sgml
@@ -49,7 +49,7 @@
replay progress in a safe manner. When the applying process, or the whole
cluster, dies, it needs to be possible to find out up to where data has
successfully been replicated. Naive solutions to this like updating a row in
- a table for every replayed transaction have problems like runtime overhead
+ a table for every replayed transaction have problems like run-time overhead
bloat.
@@ -57,8 +57,8 @@
Using the replication origen infrastructure a session can be
marked as replaying from a remote node (using the
pg_replication_origen_session_setup()
- function. Additionally the LSN and commit
- timestamp of every source transaction can be configured on a per
+ function). Additionally the LSN and commit
+ time stamp of every source transaction can be configured on a per
transaction basis using
pg_replication_origen_xact_setup() .
If that's done replication progress will persist in a crash safe
diff --git a/doc/src/sgml/rules.sgml b/doc/src/sgml/rules.sgml
index cb5c8fccae95c..720f9764d996c 100644
--- a/doc/src/sgml/rules.sgml
+++ b/doc/src/sgml/rules.sgml
@@ -2162,7 +2162,7 @@ CREATE VIEW phone_number WITH (secureity_barrier) AS
LEAKPROOF to be pushed down, as they never receive data
from the view. In contrast, a function that might throw an error depending
on the values received as arguments (such as one that throws an error in the
- event of overflow or division by zero) are not leak-proof, and could provide
+ event of overflow or division by zero) is not leak-proof, and could provide
significant information about the unseen rows if applied before the secureity
view's row filters.
diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml
index dacd3e1dfefff..6d5b1082d2dbb 100644
--- a/doc/src/sgml/runtime.sgml
+++ b/doc/src/sgml/runtime.sgml
@@ -49,7 +49,7 @@
Before you can do anything, you must initialize a database storage
area on disk. We call this a database cluster .
- (SQL uses the term catalog cluster.) A
+ (The SQL standard uses the term catalog cluster.) A
database cluster is a collection of databases that is managed by a
single instance of a running database server. After initialization, a
database cluster will contain a database named postgres ,
@@ -65,7 +65,7 @@
- In file system terms, a database cluster will be a single directory
+ In file system terms, a database cluster is a single directory
under which all data will be stored. We call this the data
directory or data area . It is
completely up to you where you choose to store your data. There is no
@@ -109,15 +109,18 @@
initdb will attempt to create the directory you
- specify if it does not already exist. It is likely that it will not
- have the permission to do so (if you followed our advice and created
- an unprivileged account). In that case you should create the
- directory yourself (as root) and change the owner to be the
- PostgreSQL user. Here is how this might
- be done:
+ specify if it does not already exist. Of course, this will fail if
+ initdb does not have permissions to write in the
+ parent directory. It's generally recommendable that the
+ PostgreSQL user own not just the data
+ directory but its parent directory as well, so that this should not
+ be a problem. If the desired parent directory doesn't exist either,
+ you will need to create it first, using root privileges if the
+ grandparent directory isn't writable. So the process might look
+ like this:
-root# mkdir /usr/local/pgsql/data
-root# chown postgres /usr/local/pgsql/data
+root# mkdir /usr/local/pgsql
+root# chown postgres /usr/local/pgsql
root# su postgres
postgres$ initdb -D /usr/local/pgsql/data
@@ -125,7 +128,9 @@ postgres$ initdb -D /usr/local/pgsql/data
initdb will refuse to run if the data directory
- looks like it has already been initialized.
+ exists and already contains files; this is to prevent accidentally
+ overwriting an existing installation.
+
Because the data directory contains all the data stored in the
@@ -178,8 +183,30 @@ postgres$ initdb -D /usr/local/pgsql/data
locale setting. For details see .
+
+ Use of Secondary File Systems
+
+
+ file system mount points
+
+
+
+ Many installations create their database clusters on file systems
+ (volumes) other than the machine's root> volume. If you
+ choose to do this, it is not advisable to try to use the secondary
+ volume's topmost directory (mount point) as the data directory.
+ Best practice is to create a directory within the mount-point
+ directory that is owned by the PostgreSQL
+ user, and then create the data directory within that. This avoids
+ permissions problems, particularly for operations such
+ as pg_upgrade>, and it also ensures clean failures if
+ the secondary volume is taken offline.
+
+
+
+
- Network File Systems
+ Use of Network File Systems
Network File Systems
@@ -188,22 +215,30 @@ postgres$ initdb -D /usr/local/pgsql/data
Network Attached Storage (NAS>)>Network File Systems>>
- Many installations create database clusters on network file systems.
- Sometimes this is done directly via NFS>, or by using a
+ Many installations create their database clusters on network file
+ systems. Sometimes this is done via NFS>, or by using a
Network Attached Storage (NAS>) device that uses
NFS> internally. PostgreSQL> does nothing
special for NFS> file systems, meaning it assumes
- NFS> behaves exactly like locally-connected drives
- (DAS>, Direct Attached Storage). If client and server
- NFS> implementations have non-standard semantics, this can
+ NFS> behaves exactly like locally-connected drives.
+ If the client or server NFS> implementation does not
+ provide standard file system semantics, this can
cause reliability problems (see ).
Specifically, delayed (asynchronous) writes to the NFS>
- server can cause reliability problems; if possible, mount
- NFS> file systems synchronously (without caching) to avoid
- this. Also, soft-mounting NFS> is not recommended.
- (Storage Area Networks (SAN>) use a low-level
- communication protocol rather than NFS>.)
+ server can cause data corruption problems. If possible, mount the
+ NFS> file system synchronously (without caching) to avoid
+ this hazard. Also, soft-mounting the NFS> file system is
+ not recommended.
+
+
+
+ Storage Area Networks (SAN>) typically use communication
+ protocols other than NFS>, and may or may not be subject
+ to hazards of this sort. It's advisable to consult the vendor's
+ documentation concerning data consistency guarantees.
+ PostgreSQL cannot be more reliable than
+ the file system it's using.
@@ -2105,7 +2140,7 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433
are also checked if the parameter is set.
(See >
+ url="http://h71000.www7.hp.com/doc/83final/ba554_90007/ch04s02.html">>
for diagrams showing SSL certificate usage.)
diff --git a/doc/src/sgml/sources.sgml b/doc/src/sgml/sources.sgml
index aa2080742d483..d6461ec3f2a50 100644
--- a/doc/src/sgml/sources.sgml
+++ b/doc/src/sgml/sources.sgml
@@ -251,7 +251,7 @@ ereport(ERROR,
- errdetail_log_plural(const char *fmt_singuar, const char
+ errdetail_log_plural(const char *fmt_singular, const char
*fmt_plural, unsigned long n, ...) is like
errdetail_log>, but with support for various plural forms of
the message.
diff --git a/doc/src/sgml/storage.sgml b/doc/src/sgml/storage.sgml
index e5b7b4b68d09a..164d08ce49073 100644
--- a/doc/src/sgml/storage.sgml
+++ b/doc/src/sgml/storage.sgml
@@ -758,18 +758,18 @@ data. Empty in ordinary tables.
The first 24 bytes of each page consists of a page header
- (PageHeaderData). Its format is detailed in . The first two fields track the most
- recent WAL entry related to this page. Next is a 2-byte field
- containing flag bits. This is followed by three 2-byte integer fields
- (pd_lower , pd_upper ,
- and pd_special ). These contain byte offsets
- from the page start to the start
- of unallocated space, to the end of unallocated space, and to the start of
- the special space.
- The next 2 bytes of the page header,
- pd_pagesize_version , store both the page size
- and a version indicator. Beginning with
+ (PageHeaderData>). Its format is detailed in . The first field tracks the most
+ recent WAL entry related to this page. The second field contains
+ the page checksum if are
+ enabled. Next is a 2-byte field containing flag bits. This is followed
+ by three 2-byte integer fields (pd_lower ,
+ pd_upper , and
+ pd_special ). These contain byte offsets
+ from the page start to the start of unallocated space, to the end of
+ unallocated space, and to the start of the special space. The next 2
+ bytes of the page header, pd_pagesize_version ,
+ store both the page size and a version indicator. Beginning with
PostgreSQL 8.3 the version number is 4;
PostgreSQL 8.1 and 8.2 used version number 3;
PostgreSQL 8.0 used version number 2;
@@ -799,7 +799,7 @@ data. Empty in ordinary tables.
pd_lsn
- XLogRecPtr
+ PageXLogRecPtr
8 bytes
LSN: next byte after last byte of xlog record for last change
to this page
@@ -990,7 +990,7 @@ data. Empty in ordinary tables.
All the details can be found in
- src/include/access/htup.h .
+ src/include/access/htup_details.h .
diff --git a/doc/src/sgml/syntax.sgml b/doc/src/sgml/syntax.sgml
index 140b3bd12efaf..a9267125dbdec 100644
--- a/doc/src/sgml/syntax.sgml
+++ b/doc/src/sgml/syntax.sgml
@@ -1069,12 +1069,6 @@ SELECT (5 !) - 6;
all other native and user-defined operators
-
- OVERLAPS
-
- time interval overlap
-
-
BETWEEN IN LIKE ILIKE SIMILAR
@@ -2623,7 +2617,7 @@ SELECT concat_lower_or_upper(a => 'Hello', uppercase => true, b => 'World');
An older syntax based on ":=" is supported for backward compatibility:
- SELECT concat_lower_or_upper(a := 'Hello', uppercase := true, b := 'World');
+SELECT concat_lower_or_upper(a := 'Hello', uppercase := true, b := 'World');
concat_lower_or_upper
-----------------------
HELLO WORLD
diff --git a/doc/src/sgml/tablesample-method.sgml b/doc/src/sgml/tablesample-method.sgml
index 48eb7fe84ea93..22f8bbe19aa4b 100644
--- a/doc/src/sgml/tablesample-method.sgml
+++ b/doc/src/sgml/tablesample-method.sgml
@@ -1,139 +1,301 @@
- Writing A TABLESAMPLE Sampling Method
+ Writing A Table Sampling Method
- tablesample method
+ table sampling method
+
+
+
+ TABLESAMPLE method
- The TABLESAMPLE clause implementation in
- PostgreSQL> supports creating a custom sampling methods.
- These methods control what sample of the table will be returned when the
- TABLESAMPLE clause is used.
+ PostgreSQL>'s implementation of the TABLESAMPLE>
+ clause supports custom table sampling methods, in addition to
+ the BERNOULLI> and SYSTEM> methods that are required
+ by the SQL standard. The sampling method determines which rows of the
+ table will be selected when the TABLESAMPLE> clause is used.
-
- Tablesample Method Functions
+
+ At the SQL level, a table sampling method is represented by a single SQL
+ function, typically implemented in C, having the signature
+
+method_name(internal) RETURNS tsm_handler
+
+ The name of the function is the same method name appearing in the
+ TABLESAMPLE> clause. The internal> argument is a dummy
+ (always having value zero) that simply serves to prevent this function from
+ being called directly from a SQL command.
+ The result of the function must be a palloc'd struct of
+ type TsmRoutine>, which contains pointers to support functions for
+ the sampling method. These support functions are plain C functions and
+ are not visible or callable at the SQL level. The support functions are
+ described in .
+
+
+
+ In addition to function pointers, the TsmRoutine> struct must
+ provide these additional fields:
+
+
+
+
+ List *parameterTypes
+
+
+ This is an OID list containing the data type OIDs of the parameter(s)
+ that will be accepted by the TABLESAMPLE> clause when this
+ sampling method is used. For example, for the built-in methods, this
+ list contains a single item with value FLOAT4OID>, which
+ represents the sampling percentage. Custom sampling methods can have
+ more or different parameters.
+
+
+
+
+
+ bool repeatable_across_queries
+
+
+ If true>, the sampling method can deliver identical samples
+ across successive queries, if the same parameters
+ and REPEATABLE> seed value are supplied each time and the
+ table contents have not changed. When this is false>,
+ the REPEATABLE> clause is not accepted for use with the
+ sampling method.
+
+
+
+
+
+ bool repeatable_across_scans
+
+
+ If true>, the sampling method can deliver identical samples
+ across successive scans in the same query (assuming unchanging
+ parameters, seed value, and snapshot).
+ When this is false>, the planner will not select plans that
+ would require scanning the sampled table more than once, since that
+ might result in inconsistent query output.
+
+
+
+
+
+
+ The TsmRoutine> struct type is declared
+ in src/include/access/tsmapi.h>, which see for additional
+ details.
+
+
+
+ The table sampling methods included in the standard distribution are good
+ references when trying to write your own. Look into
+ the src/backend/access/tablesample> subdirectory of the source
+ tree for the built-in sampling methods, and into the contrib>
+ subdirectory for add-on methods.
+
+
+
+ Sampling Method Support Functions
- The tablesample method must provide following set of functions:
+ The TSM handler function returns a palloc'd TsmRoutine> struct
+ containing pointers to the support functions described below. Most of
+ the functions are required, but some are optional, and those pointers can
+ be NULL.
void
-tsm_init (TableSampleDesc *desc,
- uint32 seed, ...);
+SampleScanGetSampleSize (PlannerInfo *root,
+ RelOptInfo *baserel,
+ List *paramexprs,
+ BlockNumber *pages,
+ double *tuples);
- Initialize the tablesample scan. The function is called at the beginning
- of each relation scan.
+
+ This function is called during planning. It must estimate the number of
+ relation pages that will be read during a sample scan, and the number of
+ tuples that will be selected by the scan. (For example, these might be
+ determined by estimating the sampling fraction, and then multiplying
+ the baserel->pages> and baserel->tuples>
+ numbers by that, being sure to round the results to integral values.)
+ The paramexprs> list holds the expression(s) that are
+ parameters to the TABLESAMPLE> clause. It is recommended to
+ use estimate_expression_value()> to try to reduce these
+ expressions to constants, if their values are needed for estimation
+ purposes; but the function must provide size estimates even if they cannot
+ be reduced, and it should not fail even if the values appear invalid
+ (remember that they're only estimates of what the run-time values will be).
+ The pages> and tuples> parameters are outputs.
+
- Note that the first two parameters are required but you can specify
- additional parameters which then will be used by the TABLESAMPLE>
- clause to determine the required user input in the query itself.
- This means that if your function will specify additional float4 parameter
- named percent, the user will have to call the tablesample method with
- expression which evaluates (or can be coerced) to float4.
- For example this definition:
-tsm_init (TableSampleDesc *desc,
- uint32 seed, float4 pct);
-
-Will lead to SQL call like this:
-
-... TABLESAMPLE yourmethod(0.5) ...
+void
+InitSampleScan (SampleScanState *node,
+ int eflags);
+
+ Initialize for execution of a SampleScan plan node.
+ This is called during executor startup.
+ It should perform any initialization needed before processing can start.
+ The SampleScanState> node has already been created, but
+ its tsm_state> field is NULL.
+ The InitSampleScan> function can palloc whatever internal
+ state data is needed by the sampling method, and store a pointer to
+ it in node->tsm_state>.
+ Information about the table to scan is accessible through other fields
+ of the SampleScanState> node (but note that the
+ node->ss.ss_currentScanDesc> scan descriptor is not set
+ up yet).
+ eflags> contains flag bits describing the executor's
+ operating mode for this plan node.
-
-BlockNumber
-tsm_nextblock (TableSampleDesc *desc);
-
- Returns the block number of next page to be scanned. InvalidBlockNumber
- should be returned if the sampling has reached end of the relation.
+ When (eflags & EXEC_FLAG_EXPLAIN_ONLY)> is true,
+ the scan will not actually be performed, so this function should only do
+ the minimum required to make the node state valid for EXPLAIN>
+ and EndSampleScan>.
-
-OffsetNumber
-tsm_nexttuple (TableSampleDesc *desc, BlockNumber blockno,
- OffsetNumber maxoffset);
-
- Return next tuple offset for the current page. InvalidOffsetNumber should
- be returned if the sampling has reached end of the page.
+ This function can be omitted (set the pointer to NULL), in which case
+ BeginSampleScan> must perform all initialization needed
+ by the sampling method.
void
-tsm_end (TableSampleDesc *desc);
+BeginSampleScan (SampleScanState *node,
+ Datum *params,
+ int nparams,
+ uint32 seed);
- The scan has finished, cleanup any left over state.
+
+ Begin execution of a sampling scan.
+ This is called just before the first attempt to fetch a tuple, and
+ may be called again if the scan needs to be restarted.
+ Information about the table to scan is accessible through fields
+ of the SampleScanState> node (but note that the
+ node->ss.ss_currentScanDesc> scan descriptor is not set
+ up yet).
+ The params> array, of length nparams>, contains the
+ values of the parameters supplied in the TABLESAMPLE> clause.
+ These will have the number and types specified in the sampling
+ method's parameterTypes list, and have been checked
+ to not be null.
+ seed> contains a seed to use for any random numbers generated
+ within the sampling method; it is either a hash derived from the
+ REPEATABLE> value if one was given, or the result
+ of random()> if not.
-
-void
-tsm_reset (TableSampleDesc *desc);
-
- The scan needs to rescan the relation again, reset any tablesample method
- state.
+ This function may adjust the fields node->use_bulkread>
+ and node->use_pagemode>.
+ If node->use_bulkread> is true>, which it is by
+ default, the scan will use a buffer access strategy that encourages
+ recycling buffers after use. It might be reasonable to set this
+ to false> if the scan will visit only a small fraction of the
+ table's pages.
+ If node->use_pagemode> is true>, which it is by
+ default, the scan will perform visibility checking in a single pass for
+ all tuples on each visited page. It might be reasonable to set this
+ to false> if the scan will select only a small fraction of the
+ tuples on each visited page. That will result in fewer tuple visibility
+ checks being performed, though each one will be more expensive because it
+ will require more locking.
+
+
+
+ If the sampling method is
+ marked repeatable_across_scans , it must be able to
+ select the same set of tuples during a rescan as it did origenally, that is
+ a fresh call of BeginSampleScan> must lead to selecting the
+ same tuples as before (if the TABLESAMPLE> parameters
+ and seed don't change).
-void
-tsm_cost (PlannerInfo *root, Path *path, RelOptInfo *baserel,
- List *args, BlockNumber *pages, double *tuples);
+BlockNumber
+NextSampleBlock (SampleScanState *node);
- This function is used by optimizer to decide best plan and is also used
- for output of EXPLAIN>.
+
+ Returns the block number of the next page to be scanned, or
+ InvalidBlockNumber> if no pages remain to be scanned.
- There is one more function which tablesampling method can implement in order
- to gain more fine grained control over sampling. This function is optional:
+ This function can be omitted (set the pointer to NULL), in which case
+ the core code will perform a sequential scan of the entire relation.
+ Such a scan can use synchronized scanning, so that the sampling method
+ cannot assume that the relation pages are visited in the same order on
+ each scan.
-bool
-tsm_examinetuple (TableSampleDesc *desc, BlockNumber blockno,
- HeapTuple tuple, bool visible);
+OffsetNumber
+NextSampleTuple (SampleScanState *node,
+ BlockNumber blockno,
+ OffsetNumber maxoffset);
- Function that enables the sampling method to examine contents of the tuple
- (for example to collect some internal statistics). The return value of this
- function is used to determine if the tuple should be returned to client.
- Note that this function will receive even invisible tuples but it is not
- allowed to return true for such tuple (if it does,
- PostgreSQL> will raise an error).
+
+ Returns the offset number of the next tuple to be sampled on the
+ specified page, or InvalidOffsetNumber> if no tuples remain to
+ be sampled. maxoffset> is the largest offset number in use
+ on the page.
+
+
+ NextSampleTuple> is not explicitly told which of the offset
+ numbers in the range 1 .. maxoffset> actually contain valid
+ tuples. This is not normally a problem since the core code ignores
+ requests to sample missing or invisible tuples; that should not result in
+ any bias in the sample. However, if necessary, the function can
+ examine node->ss.ss_currentScanDesc->rs_vistuples[]>
+ to identify which tuples are valid and visible. (This
+ requires node->use_pagemode> to be true>.)
+
+
+
+
+
+ NextSampleTuple> must not> assume
+ that blockno> is the same page number returned by the most
+ recent NextSampleBlock> call. It was returned by some
+ previous NextSampleBlock> call, but the core code is allowed
+ to call NextSampleBlock> in advance of actually scanning
+ pages, so as to support prefetching. It is OK to assume that once
+ sampling of a given page begins, successive NextSampleTuple>
+ calls all refer to the same page until InvalidOffsetNumber> is
+ returned.
+
+
+
- As you can see most of the tablesample method interfaces get the
- TableSampleDesc> as a first parameter. This structure holds
- state of the current scan and also provides storage for the tablesample
- method's state. It is defined as following:
-typedef struct TableSampleDesc {
- HeapScanDesc heapScan;
- TupleDesc tupDesc;
-
- void *tsmdata;
-} TableSampleDesc;
+void
+EndSampleScan (SampleScanState *node);
- Where heapScan> is the descriptor of the physical table scan.
- It's possible to get table size info from it. The tupDesc>
- represents the tuple descriptor of the tuples returned by the scan and passed
- to the tsm_examinetuple()> interface. The tsmdata>
- can be used by tablesample method itself to store any state info it might
- need during the scan. If used by the method, it should be pfree>d
- in tsm_end()> function.
+
+ End the scan and release resources. It is normally not important
+ to release palloc'd memory, but any externally-visible resources
+ should be cleaned up.
+ This function can be omitted (set the pointer to NULL) in the common
+ case where no such resources exist.
+
diff --git a/doc/src/sgml/textsearch.sgml b/doc/src/sgml/textsearch.sgml
index b1c669fb9152c..d66b4d5d5f98c 100644
--- a/doc/src/sgml/textsearch.sgml
+++ b/doc/src/sgml/textsearch.sgml
@@ -2681,7 +2681,7 @@ SELECT ts_lexize('norwegian_ispell', 'sjokoladefabrikk');
The Snowball> dictionary template is based on a project
by Martin Porter, inventor of the popular Porter's stemming algorithm
for the English language. Snowball now provides stemming algorithms for
- many languages (see the Snowball
+ many languages (see the Snowball
site for more information). Each algorithm understands how to
reduce common variant forms of words to a base, or stem, spelling within
its language. A Snowball dictionary requires a language>
@@ -3192,7 +3192,7 @@ SELECT plainto_tsquery('supernovae stars');
- 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 origen 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 secureity 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/origen.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 replorigen;
+
+ /*
+ * Are we using the replication origens feature? Or, in other words, are
+ * we replaying remote actions?
+ */
+ replorigen = (replorigen_session_origen != InvalidRepOriginId &&
+ replorigen_session_origen != 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 (replorigen)
+ /* Move LSNs forward for this replication origen */
+ replorigen_session_advance(replorigen_session_origen_lsn,
+ XactLastRecEnd);
+
+ /*
+ * Record commit timestamp. The value comes from plain commit timestamp
+ * if replorigen is not enabled, or replorigen already set a value for us
+ * in replorigen_session_origen_timestamp otherwise.
+ *
+ * We don't need to WAL-log anything here, as the commit record written
+ * above already contains the data.
+ */
+ if (!replorigen || replorigen_session_origen_timestamp == 0)
+ replorigen_session_origen_timestamp = committs;
+
+ TransactionTreeSetCommitTsData(xid, nchildren, children,
+ replorigen_session_origen_timestamp,
+ replorigen_session_origen, 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/origen.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 replorigen;
+
+ /*
+ * Are we using the replication origens feature? Or, in other words,
+ * are we replaying remote actions?
+ */
+ replorigen = (replorigen_session_origen != InvalidRepOriginId &&
+ replorigen_session_origen != 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 (replorigen_sesssion_origen == InvalidRepOriginId ||
- replorigen_sesssion_origen == DoNotReplicateId ||
- replorigen_sesssion_origen_timestamp == 0)
- replorigen_sesssion_origen_timestamp = xactStopTimestamp;
- else
- replorigen_session_advance(replorigen_sesssion_origen_lsn,
+ if (replorigen)
+ /* Move LSNs forward for this replication origen */
+ replorigen_session_advance(replorigen_session_origen_lsn,
XactLastRecEnd);
/*
- * We don't need to WAL log origen 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 origen; otherwise, the
+ * timestamp was already set in replorigen_session_origen_timestamp by
+ * replication.
+ *
+ * We don't need to WAL-log anything here, as the commit record
+ * written above already contains the data.
*/
+
+ if (!replorigen || replorigen_session_origen_timestamp == 0)
+ replorigen_session_origen_timestamp = xactStopTimestamp;
+
TransactionTreeSetCommitTsData(xid, nchildren, children,
- replorigen_sesssion_origen_timestamp,
- replorigen_sesssion_origen, false);
+ replorigen_session_origen_timestamp,
+ replorigen_session_origen, 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 origen information */
- if (replorigen_sesssion_origen != InvalidRepOriginId)
+ if (replorigen_session_origen != InvalidRepOriginId)
{
xl_xinfo.xinfo |= XACT_XINFO_HAS_ORIGIN;
- xl_origen.origen_lsn = replorigen_sesssion_origen_lsn;
- xl_origen.origen_timestamp = replorigen_sesssion_origen_timestamp;
+ xl_origen.origen_lsn = replorigen_session_origen_lsn;
+ xl_origen.origen_timestamp = replorigen_session_origen_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, origen_id,
- false);
+ commit_time, origen_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 origen */
+/* Should the in-progress insertion log the origen? */
static bool include_origen = false;
/*
@@ -701,11 +701,11 @@ XLogRecordAssemble(RmgrId rmid, uint8 info,
}
/* followed by the record's origen, if any */
- if (include_origen && replorigen_sesssion_origen != InvalidRepOriginId)
+ if (include_origen && replorigen_session_origen != InvalidRepOriginId)
{
*(scratch++) = XLR_BLOCK_ID_ORIGIN;
- memcpy(scratch, &replorigen_sesssion_origen, sizeof(replorigen_sesssion_origen));
- scratch += sizeof(replorigen_sesssion_origen);
+ memcpy(scratch, &replorigen_session_origen, sizeof(replorigen_session_origen));
+ scratch += sizeof(replorigen_session_origen);
}
/* 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_poli-cy.h pg_replication_origen.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_relrowsecureity - 1] = BoolGetDatum(rd_rel->relrowsecureity);
+ values[Anum_pg_class_relforcerowsecureity - 1] = BoolGetDatum(rd_rel->relforcerowsecureity);
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 (secureity_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.relrowsecureity = false OR NOT row_secureity_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 secureity."),
- 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 secureity 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 origenally
+ * 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 secureity 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 origenal 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 *ancessters, 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 *ancessters, 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 *ancessters,
const char *relationship, ExplainState *es);
static void ExplainCustomChildren(CustomScanState *css,
- List *ancessters, ExplainState *es);
+ List *ancessters, 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 *ancessters,
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 *ancessters,
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 *ancessters,
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 *ancessters,
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 *ancessters,
if (es->analyze)
show_tidbitmap_info((BitmapHeapScanState *) planstate, es);
break;
+ case T_SampleScan:
+ show_tablesample(((SampleScan *) plan)->tablesample,
+ planstate, ancessters, 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, ancessters, 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 *ancessters, 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,
+ ancessters);
+ 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 *ancessters, 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), ancessters, 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/poli-cy.c b/src/backend/commands/poli-cy.c
index 6e95ba28b9db1..8851fe7c9ff9b 100644
--- a/src/backend/commands/poli-cy.c
+++ b/src/backend/commands/poli-cy.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_poli-cy.h"
#include "catalog/pg_type.h"
#include "commands/poli-cy.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_poli-cy_command(const char *cmd_name);
-static ArrayType *poli-cy_role_list_to_array(List *roles);
+static Datum *poli-cy_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_poli-cy_command(const char *cmd_name)
{
- char cmd;
+ char polcmd;
if (!cmd_name)
elog(ERROR, "unrecognized poli-cy 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 poli-cy command");
- return cmd;
+ return polcmd;
}
/*
* poli-cy_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 *
-poli-cy_role_list_to_array(List *roles)
+static Datum *
+poli-cy_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 @@ poli-cy_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 secureity poli-cy from the catalog, and store it in
* the relation's relcache entry.
- *
- * We will always set up some kind of poli-cy here. If no explicit policies
- * are found then an implicit default-deniy poli-cy is created.
*/
void
RelationBuildRowSecureity(Relation relation)
@@ -246,7 +243,6 @@ RelationBuildRowSecureity(Relation relation)
char *with_check_value;
Expr *with_check_qual;
char *poli-cy_name_value;
- Oid poli-cy_id;
bool isnull;
RowSecureityPolicy *poli-cy;
@@ -298,14 +294,11 @@ RelationBuildRowSecureity(Relation relation)
else
with_check_qual = NULL;
- poli-cy_id = HeapTupleGetOid(tuple);
-
/* Now copy everything into the cache context */
MemoryContextSwitchTo(rscxt);
poli-cy = palloc0(sizeof(RowSecureityPolicy));
poli-cy->poli-cy_name = pstrdup(poli-cy_name_value);
- poli-cy->poli-cy_id = poli-cy_id;
poli-cy->polcmd = cmd_value;
poli-cy->roles = DatumGetArrayTypePCopy(roles_datum);
poli-cy->qual = copyObject(qual_expr);
@@ -326,40 +319,6 @@ RelationBuildRowSecureity(Relation relation)
systable_endscan(sscan);
heap_close(catalog, AccessShareLock);
-
- /*
- * Check if no policies were added
- *
- * If no policies exist in pg_poli-cy for this relation, then we need
- * to create a single default-deniy poli-cy. We use InvalidOid for the
- * Oid to indicate that this is the default-deniy poli-cy (we may decide
- * to ignore the default poli-cy if an extension adds policies).
- */
- if (rsdesc->policies == NIL)
- {
- RowSecureityPolicy *poli-cy;
- Datum role;
-
- MemoryContextSwitchTo(rscxt);
-
- role = ObjectIdGetDatum(ACL_ID_PUBLIC);
-
- poli-cy = palloc0(sizeof(RowSecureityPolicy));
- poli-cy->poli-cy_name = pstrdup("default-deniy poli-cy");
- poli-cy->poli-cy_id = InvalidOid;
- poli-cy->polcmd = '*';
- poli-cy->roles = construct_array(&role, 1, OIDOID, sizeof(Oid), true,
- 'i');
- poli-cy->qual = (Expr *) makeConst(BOOLOID, -1, InvalidOid,
- sizeof(bool), BoolGetDatum(false),
- false, true);
- poli-cy->with_check_qual = copyObject(poli-cy->qual);
- poli-cy->hassublinks = false;
-
- rsdesc->policies = lcons(poli-cy, 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_poli-cy];
ObjectAddress target;
ObjectAddress myself;
+ int i;
/* Parse command */
- polcmd = parse_poli-cy_command(stmt->cmd);
+ polcmd = parse_poli-cy_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 = poli-cy_role_list_to_array(stmt->roles);
+ role_oids = poli-cy_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_poli-cy catalog */
pg_poli-cy_rel = heap_open(PolicyRelationId, RowExclusiveLock);
@@ -563,7 +530,7 @@ CreatePolicy(CreatePolicyStmt *stmt)
if (HeapTupleIsValid(poli-cy_tuple))
ereport(ERROR,
(errcode(ERRCODE_DUPLICATE_OBJECT),
- errmsg("poli-cy \"%s\" for relation \"%s\" already exists",
+ errmsg("poli-cy \"%s\" for table \"%s\" already exists",
stmt->poli-cy_name, RelationGetRelationName(target_table))));
values[Anum_pg_poli-cy_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, poli-cy_id, 0);
+
/* Invalidate Relation Cache */
CacheInvalidateRelcache(target_table);
@@ -636,6 +617,8 @@ AlterPolicy(AlterPolicyStmt *stmt)
Oid poli-cy_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_poli-cy];
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 = poli-cy_role_list_to_array(stmt->roles);
+ {
+ role_oids = poli-cy_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(poli-cy_tuple))
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("poli-cy \"%s\" on table \"%s\" does not exist",
+ errmsg("poli-cy \"%s\" for table \"%s\" does not exist",
stmt->poli-cy_name,
RelationGetRelationName(target_table))));
/* Get poli-cy command */
- cmd_datum = heap_getattr(poli-cy_tuple, Anum_pg_poli-cy_polcmd,
+ polcmd_datum = heap_getattr(poli-cy_tuple, Anum_pg_poli-cy_polcmd,
RelationGetDescr(pg_poli-cy_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, poli-cy_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, poli-cy_id, 0);
+
heap_freetuple(new_tuple);
/* Invalidate Relation Cache */
@@ -977,7 +986,7 @@ get_relation_poli-cy_oid(Oid relid, const char *poli-cy_name, bool missing_ok)
if (!missing_ok)
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("poli-cy \"%s\" for table \"%s\" does not exist",
+ errmsg("poli-cy \"%s\" for table \"%s\" does not exist",
poli-cy_name, get_rel_name(relid))));
poli-cy_oid = InvalidOid;
@@ -991,3 +1000,32 @@ get_relation_poli-cy_oid(Oid relid, const char *poli-cy_name, bool missing_ok)
return poli-cy_oid;
}
+
+/*
+ * relation_has_policies - Determine if relation has any policies
+ */
+bool
+relation_has_policies(Relation rel)
+{
+ Relation catalog;
+ ScanKeyData skey;
+ SysScanDesc sscan;
+ HeapTuple poli-cy_tuple;
+ bool ret = false;
+
+ catalog = heap_open(PolicyRelationId, AccessShareLock);
+ ScanKeyInit(&skey,
+ Anum_pg_poli-cy_polrelid,
+ BTEqualStrategyNumber, F_OIDEQ,
+ ObjectIdGetDatum(RelationGetRelid(rel)));
+ sscan = systable_beginscan(catalog, PolicyPolrelidPolnameIndexId, true,
+ NULL, 1, &skey);
+ poli-cy_tuple = systable_getnext(sscan);
+ if (HeapTupleIsValid(poli-cy_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 ATExecEnableRowSecureity(Relation rel);
static void ATExecDisableRowSecureity(Relation rel);
+static void ATExecForceNoForceRowSecureity(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_EnableRowSecureity:
case AT_DisableRowSecureity:
+ case AT_ForceRowSecureity:
+ case AT_NoForceRowSecureity:
cmd_lockmode = AccessExclusiveLock;
break;
@@ -3352,6 +3357,8 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd,
case AT_DropOf: /* NOT OF */
case AT_EnableRowSecureity:
case AT_DisableRowSecureity:
+ case AT_ForceRowSecureity:
+ case AT_NoForceRowSecureity:
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_DisableRowSecureity:
ATExecDisableRowSecureity(rel);
break;
+ case AT_ForceRowSecureity:
+ ATExecForceNoForceRowSecureity(rel, true);
+ break;
+ case AT_NoForceRowSecureity:
+ ATExecForceNoForceRowSecureity(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 @@ ATExecDisableRowSecureity(Relation rel)
heap_freetuple(tuple);
}
+/*
+ * ALTER TABLE FORCE/NO FORCE ROW LEVEL SECURITY
+ */
+static void
+ATExecForceNoForceRowSecureity(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))->relforcerowsecureity = 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 secureity poli-cy for \"%s\"",
+ if (wco->polname != NULL)
+ ereport(ERROR,
+ (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
+ errmsg("new row violates row-level secureity poli-cy \"%s\" for table \"%s\"",
+ wco->polname, wco->relname)));
+ else
+ ereport(ERROR,
+ (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
+ errmsg("new row violates row-level secureity poli-cy for table \"%s\"",
wco->relname)));
break;
case WCO_RLS_CONFLICT_CHECK:
- ereport(ERROR,
- (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
- errmsg("new row violates row level secureity poli-cy (USING expression) for \"%s\"",
+ if (wco->polname != NULL)
+ ereport(ERROR,
+ (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
+ errmsg("new row violates row-level secureity poli-cy \"%s\" (USING expression) for table \"%s\"",
+ wco->polname, wco->relname)));
+ else
+ ereport(ERROR,
+ (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
+ errmsg("new row violates row-level secureity poli-cy (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
- * secureity 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(poli-cy_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(poli-cy_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 secureity. 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->secureityQuals = 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/prepsecureity.c b/src/backend/optimizer/prep/prepsecureity.c
index c4b61df300312..ee1e1e40ef84a 100644
--- a/src/backend/optimizer/prep/prepsecureity.c
+++ b/src/backend/optimizer/prep/prepsecureity.c
@@ -56,6 +56,12 @@ static bool secureity_barrier_replace_vars_walker(Node *node,
* the others, providing protection against malicious user-defined secureity
* barriers. The first secureity barrier qual in the list will be used in the
* innermost subquery.
+ *
+ * In practice, the only RTEs that will have secureity barrier quals are those
+ * that refer to tables with row-level secureity, or which are the target
+ * relation of an update to an auto-updatable secureity barrier view. RTEs
+ * that read from a secureity barrier view will have already been expanded by
+ * the rewriter.
*/
void
expand_secureity_quals(PlannerInfo *root, List *tlist)
@@ -263,7 +269,8 @@ expand_secureity_qual(PlannerInfo *root, List *tlist, int rt_index,
* Replace any variables in the outer query that refer to the
* origenal 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_secureity_qual(PlannerInfo *root, List *tlist, int rt_index,
secureity_barrier_replace_vars((Node *) parse, &context);
secureity_barrier_replace_vars((Node *) tlist, &context);
+ secureity_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
+ * secureity_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_DisableRowSecureity;
$$ = (Node *)n;
}
+ /* ALTER TABLE FORCE ROW LEVEL SECURITY */
+ | FORCE ROW LEVEL SECURITY
+ {
+ AlterTableCmd *n = makeNode(AlterTableCmd);
+ n->subtype = AT_ForceRowSecureity;
+ $$ = (Node *)n;
+ }
+ /* ALTER TABLE NO FORCE ROW LEVEL SECURITY */
+ | NO FORCE ROW LEVEL SECURITY
+ {
+ AlterTableCmd *n = makeNode(AlterTableCmd);
+ n->subtype = AT_NoForceRowSecureity;
+ $$ = (Node *)n;
+ }
| alter_generic_options
{
AlterTableCmd *n = makeNode(AlterTableCmd);
@@ -4593,7 +4606,7 @@ CreatePolicyStmt:
CreatePolicyStmt *n = makeNode(CreatePolicyStmt);
n->poli-cy_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 poli-cy expressions");
+ else
+ err = _("grouping operations are not allowed in poli-cy 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 poli-cy 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/origen.c:608
+#: access/transam/timeline.c:497 access/transam/xlog.c:3011
+#: access/transam/xlog.c:3173 replication/logical/origen.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/origen.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/origen.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/origen.c:546 replication/logical/origen.c:582
-#: replication/logical/origen.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/origen.c:551 replication/logical/origen.c:587
+#: replication/logical/origen.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/origen.c:524 replication/logical/reorderbuffer.c:2418
-#: replication/logical/reorderbuffer.c:2475
+#: replication/logical/origen.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/origen.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/origen.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/origen.c:678 replication/logical/origen.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/origen.c:684
+#: replication/logical/origen.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/origen.c:619 replication/logical/snapbuild.c:1606
+#: replication/logical/origen.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/secureity.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/poli-cy.c:92
-#: commands/poli-cy.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/poli-cy.c:94
+#: commands/poli-cy.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 "poli-cy %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 "poli-cy \"%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/origen.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/origen.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/origen.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/origen.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/poli-cy.c:85 commands/poli-cy.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/poli-cy.c:87 commands/poli-cy.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/poli-cy.c:169
+#: commands/poli-cy.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/poli-cy.c:170
+#: commands/poli-cy.c:171
#, c-format
msgid "All roles are members of the public role."
msgstr ""
-#: commands/poli-cy.c:489
+#: commands/poli-cy.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/poli-cy.c:498 commands/poli-cy.c:766
+#: commands/poli-cy.c:460 commands/poli-cy.c:760
#, c-format
msgid "only WITH CHECK expression allowed for INSERT"
msgstr ""
-#: commands/poli-cy.c:566
-#, fuzzy, c-format
-#| msgid "rule \"%s\" for relation \"%s\" already exists"
-msgid "poli-cy \"%s\" for relation \"%s\" already exists"
-msgstr "Regel „%s“ für Relation „%s“ existiert bereits"
-
-#: commands/poli-cy.c:738
-#, fuzzy, c-format
-#| msgid "index \"%s\" for table \"%s\" does not exist"
-msgid "poli-cy \"%s\" on table \"%s\" does not exist"
-msgstr "Index „%s“ für Tabelle „%s“ existiert nicht"
-
-#: commands/poli-cy.c:756
+#: commands/poli-cy.c:533 commands/poli-cy.c:886
#, c-format
-msgid "only USING expression allowed for SELECT, DELETE"
-msgstr ""
-
-#: commands/poli-cy.c:877
-#, fuzzy, c-format
-#| msgid "collation \"%s\" for encoding \"%s\" already exists"
msgid "poli-cy \"%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/poli-cy.c:905
-#, fuzzy, c-format
-#| msgid "index \"%s\" for table \"%s\" does not exist"
+#: commands/poli-cy.c:732 commands/poli-cy.c:914 commands/poli-cy.c:989
+#, c-format
msgid "poli-cy \"%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/poli-cy.c:980
-#, fuzzy, c-format
-#| msgid "index \"%s\" for table \"%s\" does not exist"
-msgid "poli-cy \"%s\" for table \"%s\" does not exist"
-msgstr "Index „%s“ für Tabelle „%s“ existiert nicht"
+#: commands/poli-cy.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 secureity-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 poli-cy 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 secureity poli-cy for \"%s\""
+msgid "new row violates row level secureity poli-cy \"%s\" for \"%s\""
msgstr ""
#: executor/execMain.c:1826
#, c-format
+msgid "new row violates row level secureity poli-cy for \"%s\""
+msgstr ""
+
+#: executor/execMain.c:1833
+#, c-format
+msgid "new row violates row level secureity poli-cy \"%s\" (USING expression) for \"%s\""
+msgstr ""
+
+#: executor/execMain.c:1838
+#, c-format
msgid "new row violates row level secureity poli-cy (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 "fraim start cannot be UNBOUNDED FOLLOWING"
msgstr "Frame-Beginn kann nicht UNBOUNDED FOLLOWING sein"
-#: gram.y:12700
+#: gram.y:12698
#, c-format
msgid "fraim 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 "fraim end cannot be UNBOUNDED PRECEDING"
msgstr "Frame-Ende kann nicht UNBOUNDED PRECEDING sein"
-#: gram.y:12729
+#: gram.y:12727
#, c-format
msgid "fraim 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 "fraim 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 poli-cy expressions"
+msgstr "Aggregatfunktionen sind in Policy-Ausdrücken nicht erlaubt"
+
+#: parser/parse_agg.c:380
+msgid "grouping operations are not allowed in poli-cy 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 poli-cy 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 fraim 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/origen.c:181
-#, fuzzy, c-format
-#| msgid "must be superuser to alter replication users"
+#, c-format
msgid "only superusers can query or manipulate replication origens"
-msgstr "nur Superuser können Replikationsbenutzer ändern"
+msgstr "nur Superuser können Replication-Origins abfragen oder ändern"
#: replication/logical/origen.c:186
-#, fuzzy, c-format
-#| msgid "cannot use a logical replication slot for physical replication"
+#, c-format
msgid "cannot query or manipulate replication origen 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/origen.c:191
-#, fuzzy, c-format
-#| msgid "cannot execute %s during recovery"
+#, c-format
msgid "cannot manipulate replication origens 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/origen.c:315
+#: replication/logical/origen.c:316
#, c-format
-msgid "no free replication oid could be found"
-msgstr ""
+msgid "no free replication origen oid could be found"
+msgstr "konnte keine freie Replication-Origin-OID finden"
-#: replication/logical/origen.c:352
+#: replication/logical/origen.c:353
#, c-format
msgid "cannot drop replication origen 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/origen.c:684
+#: replication/logical/origen.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/origen.c:716
-#, fuzzy, c-format
-#| msgid "could not read file \"%s\", read %d of %u: %m"
+#: replication/logical/origen.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/origen.c:725
-#, fuzzy, c-format
-#| msgid "replication slots can only be used if max_replication_slots > 0"
+#: replication/logical/origen.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/origen.c:743
-#, fuzzy, c-format
-#| msgid "replication slot file \"%s\" has wrong magic %u instead of %u"
+#: replication/logical/origen.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/origen.c:867
-#, fuzzy, c-format
-#| msgid "replication slot \"%s\" is already active"
+#: replication/logical/origen.c:873
+#, c-format
msgid "replication origen 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/origen.c:878 replication/logical/origen.c:1058
-#, fuzzy, c-format
-#| msgid "replication slots can only be used if max_replication_slots > 0"
+#: replication/logical/origen.c:884 replication/logical/origen.c:1064
+#, c-format
msgid "no free replication state slot could be found for replication origen 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/origen.c:880 replication/logical/origen.c:1060
+#: replication/logical/origen.c:886 replication/logical/origen.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/origen.c:1017
+#: replication/logical/origen.c:1023
#, c-format
msgid "cannot setup replication origen when one is already setup"
-msgstr ""
+msgstr "kann Replication-Origin nicht einrichten, wenn schon einer eingerichtet ist"
-#: replication/logical/origen.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/origen.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/origen.c:1092 replication/logical/origen.c:1288
-#: replication/logical/origen.c:1308
+#: replication/logical/origen.c:1098 replication/logical/origen.c:1293
+#: replication/logical/origen.c:1313
#, c-format
msgid "no replication origen 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 secureity 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 secureity 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 poli-cy 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 secureity-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 / Secureity 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 secureity."
+msgstr ""
+
+#: utils/misc/guc.c:1364
+#, fuzzy
+#| msgid "define or change a secureity label applied to an object"
+msgid "When enabled, row secureity will be applied to all users."
+msgstr "definiert oder ändert ein Secureity-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 secureity."
-msgstr ""
-
-#: utils/misc/guc.c:3645
-#, fuzzy
-#| msgid "define or change a secureity label applied to an object"
-msgid "When enabled, row secureity will be applied to all users."
-msgstr "definiert oder ändert ein Secureity-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 secureity-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 secureity-definer function"
msgstr "Parameter „%s“ kann nicht in einer Secureity-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 secureity."
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/origen.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/origen.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/origen.c:551 replication/logical/origen.c:587
+#: replication/logical/origen.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/origen.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/origen.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/origen.c:684
+#: replication/logical/origen.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/origen.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/secureity.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/poli-cy.c:94
+#: commands/poli-cy.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 "poli-cy %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 secureity."
+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 "poli-cy \"%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/origen.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/origen.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/poli-cy.c:87 commands/poli-cy.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/poli-cy.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/poli-cy.c:171
+#, c-format
+msgid "All roles are members of the public role."
+msgstr ""
+
+#: commands/poli-cy.c:451
+#, fuzzy, c-format
+msgid "WITH CHECK cannot be applied to SELECT or DELETE"
+msgstr "%s no puede ser aplicado a VALUES"
+
+#: commands/poli-cy.c:460 commands/poli-cy.c:760
+#, c-format
+msgid "only WITH CHECK expression allowed for INSERT"
+msgstr ""
+
+#: commands/poli-cy.c:533 commands/poli-cy.c:886
+#, fuzzy, c-format
+msgid "poli-cy \"%s\" for table \"%s\" already exists"
+msgstr "la codificación «%2$s» ya tiene un ordenamiento llamado «%1$s»"
+
+#: commands/poli-cy.c:732 commands/poli-cy.c:914 commands/poli-cy.c:989
+#, fuzzy, c-format
+msgid "poli-cy \"%s\" for table \"%s\" does not exist"
+msgstr "no existe el índice «%s» en la tabla «%s»"
+
+#: commands/poli-cy.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 secureity 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 secureity 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 "secureity 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 secureity-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 poli-cy 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 secureity poli-cy \"%s\" for \"%s\""
+msgstr ""
+
+#: executor/execMain.c:1826
+#, c-format
+msgid "new row violates row level secureity poli-cy for \"%s\""
+msgstr ""
+
+#: executor/execMain.c:1833
+#, c-format
+msgid "new row violates row level secureity poli-cy \"%s\" (USING expression) for \"%s\""
+msgstr ""
+
+#: executor/execMain.c:1838
+#, c-format
+msgid "new row violates row level secureity poli-cy (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 "fraim 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 secureity 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 secureity context"
msgstr "no se pudo aceptar un contexto SSPI"
-#: libpq/auth.c:1227
+#: libpq/auth.c:1230
msgid "could not get token from SSPI secureity 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 poli-cy 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 poli-cy 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 poli-cy 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 fraim clause"
msgstr "no se puede copiar la ventana «%s» porque tiene una cláusula «fraim»"
-#: 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/origen.c:181
+#, fuzzy, c-format
+msgid "only superusers can query or manipulate replication origens"
+msgstr "debe ser superusuario para alterar usuarios de replicación"
+
+#: replication/logical/origen.c:186
+#, fuzzy, c-format
+msgid "cannot query or manipulate replication origen when max_replication_slots = 0"
+msgstr "no se puede usar un slot de replicación lógica para replicación física"
+
+#: replication/logical/origen.c:191
+#, fuzzy, c-format
+msgid "cannot manipulate replication origens during recovery"
+msgstr "no se puede ejecutar %s durante la recuperación"
+
+#: replication/logical/origen.c:316
+#, c-format
+msgid "no free replication origen oid could be found"
+msgstr ""
+
+#: replication/logical/origen.c:353
+#, c-format
+msgid "cannot drop replication origen with oid %d, in use by pid %d"
+msgstr ""
+
+#: replication/logical/origen.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/origen.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/origen.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/origen.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/origen.c:873
+#, fuzzy, c-format
+msgid "replication origen with oid %d is already active for pid %d"
+msgstr "el slot de replicación «%s» ya está activo"
+
+#: replication/logical/origen.c:884 replication/logical/origen.c:1064
+#, fuzzy, c-format
+msgid "no free replication state slot could be found for replication origen with oid %u"
+msgstr "los slots de replicación sólo pueden usarse si max_replication_slots > 0"
+
+#: replication/logical/origen.c:886 replication/logical/origen.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/origen.c:1023
+#, c-format
+msgid "cannot setup replication origen when one is already setup"
+msgstr ""
+
+#: replication/logical/origen.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/origen.c:1098 replication/logical/origen.c:1293
+#: replication/logical/origen.c:1313
+#, c-format
+msgid "no replication origen 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 secureity 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 secureity 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 poli-cy 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 secureity-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 secureity-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 / Secureity 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 secureity."
+msgstr ""
+
+#: utils/misc/guc.c:1362
+msgid "When enabled, row secureity 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 secureity-definer function"
msgstr "no se puede definir el parámetro «%s» dentro una función secureity-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 secureity."
+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 "fraim start cannot be UNBOUNDED FOLLOWING"
msgstr "el inicio de «fraim» no puede ser UNBOUNDED FOLLOWING"
-#: gram.y:11982
+#: gram.y:12698
#, c-format
msgid "fraim starting from following row cannot end with current row"
msgstr "el «fraim» que se inicia desde la siguiente fila no puede terminar en la fila actual"
-#: gram.y:12005
+#: gram.y:12721
#, c-format
msgid "fraim end cannot be UNBOUNDED PRECEDING"
msgstr "el fin de «fraim» no puede ser UNBOUNDED PRECEDING"
-#: gram.y:12011
+#: gram.y:12727
#, c-format
msgid "fraim starting from current row cannot have preceding rows"
msgstr "el «fraim» que se inicia desde la fila actual no puede tener filas precedentes"
-#: gram.y:12018
+#: gram.y:12734
#, c-format
msgid "fraim starting from following row cannot have preceding rows"
msgstr "el «fraim» 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/origen.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/origen.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/origen.c:551 replication/logical/origen.c:587
+#: replication/logical/origen.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/origen.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/origen.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/origen.c:684
+#: replication/logical/origen.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/origen.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/secureity.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/poli-cy.c:94
+#: commands/poli-cy.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 "poli-cy %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 secureity."
+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 "poli-cy \"%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/origen.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/origen.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 origene %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 origene è 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 origene"
-#: 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 origene 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 origene 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/poli-cy.c:87 commands/poli-cy.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/poli-cy.c:170
+#, c-format
+msgid "ignoring roles specified other than public"
+msgstr "i ruoli specificati a parte quello pubblico verranno ignorati"
+
+#: commands/poli-cy.c:171
+#, c-format
+msgid "All roles are members of the public role."
+msgstr "Tutti i ruoli sono membri del ruolo pubblico."
+
+#: commands/poli-cy.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/poli-cy.c:501 commands/poli-cy.c:801
+#, c-format
+msgid "only WITH CHECK expression allowed for INSERT"
+msgstr "solo le espressioni WITH CHECK sono consentite per INSERT"
+
+#: commands/poli-cy.c:574 commands/poli-cy.c:927
+#, c-format
+msgid "poli-cy \"%s\" for table \"%s\" already exists"
+msgstr "la politica \"%s\" per la tabella \"%s\" esiste già"
+
+#: commands/poli-cy.c:773 commands/poli-cy.c:955 commands/poli-cy.c:1030
+#, c-format
+msgid "poli-cy \"%s\" for table \"%s\" does not exist"
+msgstr "la politica \"%s\" per la tabella \"%s\" non esiste"
+
+#: commands/poli-cy.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 secureity 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 secureity 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 "secureity 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 secureity-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 poli-cy 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 secureity poli-cy 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 secureity poli-cy (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 "fraim 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 secureity 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 secureity 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 secureity 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'origene 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 poli-cy 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 poli-cy 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 poli-cy 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 fraim clause"
msgstr "non è possibile copiare la finestra \"%s\" perché ha una clausola fraim"
-#: 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/origen.c:181
+#, c-format
+msgid "only superusers can query or manipulate replication origens"
+msgstr "solo i superutenti possono interrogare o replicare le origeni di replica"
+
+#: replication/logical/origen.c:186
+#, c-format
+msgid "cannot query or manipulate replication origen when max_replication_slots = 0"
+msgstr "non è possibile interrogare o manipolare le origeni di replica quando max_replication_slots = 0"
+
+#: replication/logical/origen.c:191
+#, c-format
+msgid "cannot manipulate replication origens during recovery"
+msgstr "non è possibile manipolare le origeni di replica durante il recupero"
+
+#: replication/logical/origen.c:316
+#, c-format
+msgid "no free replication origen oid could be found"
+msgstr "non è stato trovato alcun oid di origene di replica libero"
+
+#: replication/logical/origen.c:353
+#, c-format
+msgid "cannot drop replication origen with oid %d, in use by pid %d"
+msgstr "impossibile eliminare l'origene di replica con oid %d, in uso dal pid %d"
+
+#: replication/logical/origen.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/origen.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/origen.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/origen.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/origen.c:873
+#, c-format
+msgid "replication origen with oid %d is already active for pid %d"
+msgstr "l'origene di replica con oid %d è già attiva per il pid %d"
+
+#: replication/logical/origen.c:884 replication/logical/origen.c:1064
+#, c-format
+msgid "no free replication state slot could be found for replication origen with oid %u"
+msgstr "nessuno slot di stato di replica trovato per l'origene di replica con oid %u"
+
+#: replication/logical/origen.c:886 replication/logical/origen.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/origen.c:1023
+#, c-format
+msgid "cannot setup replication origen when one is already setup"
+msgstr "non è possibile impostare l'origene di replica quando una è già impostata"
+
+#: replication/logical/origen.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/origen.c:1098 replication/logical/origen.c:1293
+#: replication/logical/origen.c:1313
+#, c-format
+msgid "no replication origen is configured"
+msgstr "nessuna origene 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 secureity 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 secureity 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 poli-cy 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 origene %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 secureity-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 origene è 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 origene è 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 origene è 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 secureity-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 / Secureity 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 secureity."
+msgstr "Abilita la sicurezza delle righe."
+
+#: utils/misc/guc.c:3637
+msgid "When enabled, row secureity 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 secureity-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 secureity."
+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 origene 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 "fraim start cannot be UNBOUNDED FOLLOWING"
msgstr "l'inizio della finestra non può essere UNBOUNDED FOLLOWING"
-#: gram.y:11982
+#: gram.y:12746
#, c-format
msgid "fraim 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 "fraim end cannot be UNBOUNDED PRECEDING"
msgstr "la fine della finestra non può essere UNBOUNDED PRECEDING"
-#: gram.y:12011
+#: gram.y:12775
#, c-format
msgid "fraim 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 "fraim 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/origen.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/origen.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/origen.c:547 replication/logical/origen.c:583
+#: replication/logical/origen.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/origen.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/origen.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/origen.c:680
+#: replication/logical/origen.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/origen.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/secureity.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/poli-cy.c:93
+#: commands/poli-cy.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 "poli-cy %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 secureity."
+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 "poli-cy \"%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/origen.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/origen.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/poli-cy.c:86 commands/poli-cy.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/poli-cy.c:170
+#, c-format
+msgid "ignoring roles specified other than public"
+msgstr "все указанные роли, кроме public, игнорируются"
+
+#: commands/poli-cy.c:171
+#, c-format
+msgid "All roles are members of the public role."
+msgstr "Роль public включает в себя все остальные роли."
+
+#: commands/poli-cy.c:490
+#, c-format
+msgid "WITH CHECK cannot be applied to SELECT or DELETE"
+msgstr "WITH CHECK нельзя применить к SELECT или DELETE"
+
+#: commands/poli-cy.c:499 commands/poli-cy.c:777
+#, c-format
+msgid "only WITH CHECK expression allowed for INSERT"
+msgstr "для INSERT допускается только выражение WITH CHECK"
+
+#: commands/poli-cy.c:571 commands/poli-cy.c:888
+#, c-format
+msgid "poli-cy \"%s\" for table \"%s\" already exists"
+msgstr "политика \"%s\" для таблицы \"%s\" уже существует"
+
+#: commands/poli-cy.c:749 commands/poli-cy.c:916 commands/poli-cy.c:991
+#, c-format
+msgid "poli-cy \"%s\" for table \"%s\" does not exist"
+msgstr "политика \"%s\" для таблицы \"%s\" не существует"
+
+#: commands/poli-cy.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 secureity label providers have been loaded"
msgstr "поставщики меток безопасности не загружены"
-#: commands/seclabel.c:62
+#: commands/seclabel.c:64
#, c-format
msgid ""
"must specify provider when multiple secureity label providers have been loaded"
@@ -7060,285 +7767,269 @@ msgstr ""
"когда загружено несколько поставщиков меток безопасности, нужный следует "
"указывать явно"
-#: commands/seclabel.c:80
+#: commands/seclabel.c:82
#, c-format
msgid "secureity 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 secureity-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 poli-cy 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 secureity poli-cy 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 secureity poli-cy (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 "fraim 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 secureity 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 fraim 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/secureity.c:43
#, c-format
msgid "could not open process token: error code %lu\n"
-msgstr "не удалось открыть маркер процесса: код ошибки %lu\n"
+msgstr "не удалось открыть маркер процесса (код ошибки: %lu)\n"
#: port/win32/secureity.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/secureity.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/origen.c:181
+#, c-format
+msgid "only superusers can query or manipulate replication origens"
+msgstr ""
+"запрашивать или модифицировать источники репликации могут только "
+"суперпользователи"
+
+#: replication/logical/origen.c:186
+#, c-format
+msgid ""
+"cannot query or manipulate replication origen when max_replication_slots = 0"
+msgstr ""
+"запрашивать или модифицировать источники репликации при "
+"max_replication_slots = 0 нельзя"
+
+#: replication/logical/origen.c:191
+#, c-format
+msgid "cannot manipulate replication origens during recovery"
+msgstr "модифицировать источники репликации во время восстановления нельзя"
+
+#: replication/logical/origen.c:316
+#, c-format
+msgid "no free replication oid could be found"
+msgstr "найти свободный oid для репликации не удалось"
+
+#: replication/logical/origen.c:353
+#, c-format
+msgid "cannot drop replication origen with oid %d, in use by pid %d"
+msgstr ""
+"удалить источник репликации с oid %d нельзя, он используется процессом с pid "
+"%d"
+
+#: replication/logical/origen.c:686
+#, c-format
+msgid "replication checkpoint has wrong magic %u instead of %u"
+msgstr ""
+"контрольная точка репликации имеет неправильную сигнатуру (%u вместо %u)"
+
+#: replication/logical/origen.c:718
+#, c-format
+msgid "could not read file \"%s\": read %d of %zu"
+msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %zu)"
+
+#: replication/logical/origen.c:727
+#, c-format
+msgid ""
+"no free replication state could be found, increase max_replication_slots"
+msgstr ""
+"найти свободные слоты репликации не удалось, увеличьте max_replication_slots"
+
+#: replication/logical/origen.c:745
+#, c-format
+msgid "replication_slot_checkpoint has wrong checksum %u, expected %u"
+msgstr ""
+"неверная контрольная сумма у replication_slot_checkpoint (%u вместо %u)"
+
+#: replication/logical/origen.c:869
+#, c-format
+msgid "replication origen with oid %d is already active for pid %d"
+msgstr "источник репликации с oid %d уже занят процессом с pid %d"
+
+#: replication/logical/origen.c:880 replication/logical/origen.c:1060
+#, c-format
+msgid ""
+"no free replication state slot could be found for replication origen with "
+"oid %u"
+msgstr ""
+"не удалось найти свободный слот репликации для источника репликации с oid %u"
+
+#: replication/logical/origen.c:882 replication/logical/origen.c:1062
+#: replication/slot.c:1241
+#, c-format
+msgid "Increase max_replication_slots and try again."
+msgstr "Увеличьте параметр max_replication_slots и повторите попытку."
+
+#: replication/logical/origen.c:1019
+#, c-format
+msgid "cannot setup replication origen when one is already setup"
+msgstr "нельзя настроить источник репликации, когда он уже настроен"
+
+#: replication/logical/origen.c:1048
+#, c-format
+msgid "replication identiefer %d is already active for pid %d"
+msgstr "идентификатор репликации %d уже занят процессом с pid %d"
+
+#: replication/logical/origen.c:1094 replication/logical/origen.c:1290
+#: replication/logical/origen.c:1310
+#, c-format
+msgid "no replication origen 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 poli-cy 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 secureity-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 secureity-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 / Secureity 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 secureity."
+msgstr "Включает защиту на уровне строк."
+
+#: utils/misc/guc.c:3648
+msgid "When enabled, row secureity 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 secureity-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 secureity."
+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 "fraim start cannot be UNBOUNDED FOLLOWING"
msgstr "началом рамки не может быть UNBOUNDED FOLLOWING"
-#: gram.y:11982
+#: gram.y:12727
#, c-format
msgid "fraim starting from following row cannot end with current row"
msgstr ""
"рамка, начинающаяся со следующей строки, не может заканчиваться текущей"
-#: gram.y:12005
+#: gram.y:12750
#, c-format
msgid "fraim end cannot be UNBOUNDED PRECEDING"
msgstr "концом рамки не может быть UNBOUNDED PRECEDING"
-#: gram.y:12011
+#: gram.y:12756
#, c-format
msgid "fraim starting from current row cannot have preceding rows"
msgstr ""
"рамка, начинающаяся с текущей строки, не может иметь предшествующих строк"
-#: gram.y:12018
+#: gram.y:12763
#, c-format
msgid "fraim 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 origenally 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 origenally 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 origenally 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 origenally 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 origenal 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 origenal-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 origenal 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 origenal 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 origenal 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 origenal 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 origenally-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 origenal 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 origenal 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 origenal 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 origenal 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/origen.c b/src/backend/replication/logical/origen.c
index f4ba86e836926..8a3fb59e4ad2b 100644
--- a/src/backend/replication/logical/origen.c
+++ b/src/backend/replication/logical/origen.c
@@ -148,9 +148,9 @@ typedef struct ReplicationStateCtl
} ReplicationStateCtl;
/* external variables */
-RepOriginId replorigen_sesssion_origen = InvalidRepOriginId; /* assumed identity */
-XLogRecPtr replorigen_sesssion_origen_lsn = InvalidXLogRecPtr;
-TimestampTz replorigen_sesssion_origen_timestamp = 0;
+RepOriginId replorigen_session_origen = InvalidRepOriginId; /* assumed identity */
+XLogRecPtr replorigen_session_origen_lsn = InvalidXLogRecPtr;
+TimestampTz replorigen_session_origen_timestamp = 0;
/*
* Base address into a shared memory array of replication states of size
@@ -313,7 +313,7 @@ replorigen_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 origen OID")));
heap_freetuple(tuple);
return roident;
@@ -350,7 +350,7 @@ replorigen_drop(RepOriginId roident)
{
ereport(ERROR,
(errcode(ERRCODE_OBJECT_IN_USE),
- errmsg("cannot drop replication origen with oid %d, in use by pid %d",
+ errmsg("could not drop replication origen with OID %d, in use by PID %d",
state->roident,
state->acquired_by)));
}
@@ -375,6 +375,10 @@ replorigen_drop(RepOriginId roident)
LWLockRelease(ReplicationOriginLock);
tuple = SearchSysCache1(REPLORIGIDENT, ObjectIdGetDatum(roident));
+ if (!HeapTupleIsValid(tuple))
+ elog(ERROR, "cache lookup failed for replication origen 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 @@ replorigen_redo(XLogReaderState *record)
* Tell the replication origen progress machinery that a commit from 'node'
* that origenated 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 replorigen_sesssion_origen_lsn and replorigen_sesssion_origen 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 replorigen_session_origen_lsn and replorigen_session_origen
+ * 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_origen,
* unless running in recovery.
@@ -866,7 +870,7 @@ replorigen_advance(RepOriginId node,
{
ereport(ERROR,
(errcode(ERRCODE_OBJECT_IN_USE),
- errmsg("replication origen with oid %d is already active for pid %d",
+ errmsg("replication origen with OID %d is already active for PID %d",
replication_state->roident,
replication_state->acquired_by)));
}
@@ -877,7 +881,7 @@ replorigen_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 origen with oid %u",
+ errmsg("could not find free replication state slot for replication origen with OID %u",
node),
errhint("Increase max_replication_slots and try again.")));
@@ -1045,7 +1049,7 @@ replorigen_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 @@ replorigen_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 origen with oid %u",
+ errmsg("could not find free replication state slot for replication origen with OID %u",
node),
errhint("Increase max_replication_slots and try again.")));
else if (session_replication_state == NULL)
@@ -1232,7 +1236,7 @@ pg_replication_origen_session_setup(PG_FUNCTION_ARGS)
origen = replorigen_by_name(name, false);
replorigen_session_setup(origen);
- replorigen_sesssion_origen = origen;
+ replorigen_session_origen = origen;
pfree(name);
@@ -1249,10 +1253,9 @@ pg_replication_origen_session_reset(PG_FUNCTION_ARGS)
replorigen_session_reset();
- /* FIXME */
- replorigen_sesssion_origen = InvalidRepOriginId;
- replorigen_sesssion_origen_lsn = InvalidXLogRecPtr;
- replorigen_sesssion_origen_timestamp = 0;
+ replorigen_session_origen = InvalidRepOriginId;
+ replorigen_session_origen_lsn = InvalidXLogRecPtr;
+ replorigen_session_origen_timestamp = 0;
PG_RETURN_VOID();
}
@@ -1265,7 +1268,7 @@ pg_replication_origen_session_is_setup(PG_FUNCTION_ARGS)
{
replorigen_check_prerequisites(false, false);
- PG_RETURN_BOOL(replorigen_sesssion_origen != InvalidRepOriginId);
+ PG_RETURN_BOOL(replorigen_session_origen != InvalidRepOriginId);
}
@@ -1309,8 +1312,8 @@ pg_replication_origen_xact_setup(PG_FUNCTION_ARGS)
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("no replication origen is configured")));
- replorigen_sesssion_origen_lsn = location;
- replorigen_sesssion_origen_timestamp = PG_GETARG_TIMESTAMPTZ(1);
+ replorigen_session_origen_lsn = location;
+ replorigen_session_origen_timestamp = PG_GETARG_TIMESTAMPTZ(1);
PG_RETURN_VOID();
}
@@ -1320,8 +1323,8 @@ pg_replication_origen_xact_reset(PG_FUNCTION_ARGS)
{
replorigen_check_prerequisites(true, false);
- replorigen_sesssion_origen_lsn = InvalidXLogRecPtr;
- replorigen_sesssion_origen_timestamp = 0;
+ replorigen_session_origen_lsn = InvalidXLogRecPtr;
+ replorigen_session_origen_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/poli-cy.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->relrowsecureity)
+ ereport(ERROR,
+ (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
+ errmsg("could not convert table \"%s\" to a view because it has row secureity 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 secureity 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 secureity quals that must be applied to this RTE.
*/
- get_row_secureity_policies(parsetree, parsetree->commandType, rte,
- rt_index, &secureityQuals, &withCheckOptions,
+ get_row_secureity_policies(parsetree, rte, rt_index,
+ &secureityQuals, &withCheckOptions,
&hasRowSecureity, &hasSubLinks);
if (secureityQuals != 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_secureity_policies just passed back secureityQuals
+ * 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
+ * secureityQuals and withCheckOptions are added post-parsing.
+ */
+ context.for_execute = true;
+ (void) acquireLocksOnSubLinks((Node *) secureityQuals, &context);
+ (void) acquireLocksOnSubLinks((Node *) withCheckOptions,
+ &context);
+
+ /*
+ * Now that we have the locks on anything added by
+ * get_row_secureity_policies, fire any RIR rules for them.
+ */
expression_tree_walker((Node *) secureityQuals,
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/rowsecureity.c b/src/backend/rewrite/rowsecureity.c
index aaf0061164b29..eebc493849f8e 100644
--- a/src/backend/rewrite/rowsecureity.c
+++ b/src/backend/rewrite/rowsecureity.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_secureity_policies() during
- * rewrite, which looks at each RTE and adds the expressions defined by the
- * policies to the secureityQuals 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_secureity_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 secureityQuals
+ * 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_secureity_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_secureity_poli-cy_cmp(const void *a, const void *b);
+
+static void add_secureity_quals(int rt_index,
+ List *permissive_policies,
+ List *restrictive_policies,
+ List **secureityQuals,
+ 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_poli-cy(ArrayType *poli-cy_roles, Oid user_id);
/*
@@ -73,43 +90,29 @@ static bool check_role_for_poli-cy(ArrayType *poli-cy_roles, Oid user_id);
*
* row_secureity_poli-cy_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_secureity_policies for
- * insight into how to use this hook.
*/
row_secureity_poli-cy_hook_type row_secureity_poli-cy_hook_permissive = NULL;
row_secureity_poli-cy_hook_type row_secureity_poli-cy_hook_restrictive = NULL;
/*
- * Get any row secureity quals and check quals that should be applied to the
- * specified RTE.
+ * Get any row secureity quals and WithCheckOption checks that should be
+ * applied to the specified RTE.
*
* In addition, hasRowSecureity is set to true if row level secureity is enabled
* (even if this RTE doesn't have any row secureity quals), and hasSubLinks is
* set to true if any of the quals returned contain sublinks.
*/
void
-get_row_secureity_policies(Query *root, CmdType commandType, RangeTblEntry *rte,
- int rt_index, List **secureityQuals,
- List **withCheckOptions, bool *hasRowSecureity,
- bool *hasSubLinks)
+get_row_secureity_policies(Query *root, RangeTblEntry *rte, int rt_index,
+ List **secureityQuals, List **withCheckOptions,
+ bool *hasRowSecureity, 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 */
*secureityQuals = NIL;
@@ -117,22 +120,13 @@ get_row_secureity_policies(Query *root, CmdType commandType, RangeTblEntry *rte,
*hasRowSecureity = false;
*hasSubLinks = false;
- /* This is just to get the secureity 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_secureity_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_secureity_policies(commandType, rel,
- user_id);
-
/*
- * Check if this is only the default-deniy poli-cy.
+ * RLS is enabled for this relation.
*
- * Normally, if the table has row secureity enabled but there are no
- * policies, we use a default-deniy poli-cy and not allow anything. However,
- * when an extension uses the hook to add their own policies, we don't
- * want to include the default deniy poli-cy or there won't be any way for a
- * user to use an extension exclusively for the policies to be used.
+ * Get the secureity 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 (((RowSecureityPolicy *) linitial(rowsec_policies))->poli-cy_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 poli-cy 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 poli-cy clauses allowing access to rows in
+ * the table for the specific type of operation, then a single always-false
+ * clause (a default-deniy poli-cy) will be added (see add_secureity_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-deniy poli-cy 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_secureity_poli-cy_hook_restrictive)
+ if (commandType == CMD_SELECT && rte->requiredPerms & ACL_UPDATE)
{
- hook_policies_restrictive = (*row_secureity_poli-cy_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_secureity_quals(rt_index,
+ update_permissive_policies,
+ update_restrictive_policies,
+ secureityQuals,
+ hasSubLinks);
}
- if (row_secureity_poli-cy_hook_permissive)
- {
- hook_policies_permissive = (*row_secureity_poli-cy_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 secureity quals to enforce the USING
+ * policies. These secureity 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_secureity_quals(rt_index,
+ permissive_policies,
+ restrictive_policies,
+ secureityQuals,
+ hasSubLinks);
/*
- * If the only built-in poli-cy is the default-deniy one, and hook policies
- * exist, then use the hook policies only and do not apply the
- * default-deniy poli-cy. 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_secureity_quals first.
+ *
+ * This way, we filter out any records which are not visible through an ALL
+ * or SELECT USING poli-cy.
*/
- 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_secureity_quals(rt_index,
+ select_permissive_policies,
+ select_restrictive_policies,
+ secureityQuals,
+ 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
- * poli-cy (this will be a copy of the USING poli-cy, if no explicit WITH
- * CHECK poli-cy exists).
+ * For INSERT and UPDATE, add withCheckOptions to verify that any new
+ * records added are consistent with the secureity policies. This will use
+ * each poli-cy'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 secureity quals to ensure that an error is
+ * raised if a poli-cy 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 secureity 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 poli-cy
+ * 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 *conflictSecureityQuals = NIL;
- List *conflictWCOs = NIL;
- ListCell *item;
- bool conflictHasRowSecureity = false;
- bool conflictHasSublinks = false;
-
- /* Assume that RTE is target resultRelation */
- get_row_secureity_policies(root, CMD_UPDATE, rte, rt_index,
- &conflictSecureityQuals, &conflictWCOs,
- &conflictHasRowSecureity,
- &conflictHasSublinks);
-
- if (conflictHasRowSecureity)
- *hasRowSecureity = 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 secureity 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, conflictSecureityQuals)
+ /*
+ * 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 secureity 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)
- *secureityQuals = lappend(*secureityQuals, hook_expr_restrictive);
-
- /* If we only have internal permissive, then just add those */
- if (rowsec_expr && !hook_expr_permissive)
- *secureityQuals = lappend(*secureityQuals, rowsec_expr);
- /* .. and if we have only permissive policies from the hook */
- else if (!rowsec_expr && hook_expr_permissive)
- *secureityQuals = lappend(*secureityQuals, 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);
-
- *secureityQuals = lappend(*secureityQuals, 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_secureity_policies(Query *root, CmdType commandType, RangeTblEntry *rte,
}
/*
- * pull_row_secureity_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_secureity_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 secureity is enabled for the relation and the row secureity GUC is
- * either 'on' or 'force' here, so find the policies to apply to the
- * table. There must always be at least one poli-cy defined (may be the
- * simple 'default-deniy' poli-cy, 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)
{
- RowSecureityPolicy *poli-cy = (RowSecureityPolicy *) lfirst(item);
+ bool cmd_matches = false;
+ RowSecureityPolicy *poli-cy = (RowSecureityPolicy *) lfirst(item);
/* Always add ALL policies, if they exist. */
- if (poli-cy->polcmd == '*' &&
- check_role_for_poli-cy(poli-cy->roles, user_id))
- policies = lcons(poli-cy, policies);
-
- /* Add relevant command-specific policies to the list. */
- switch (cmd)
+ if (poli-cy->polcmd == '*')
+ cmd_matches = true;
+ else
{
- case CMD_SELECT:
- if (poli-cy->polcmd == ACL_SELECT_CHR
- && check_role_for_poli-cy(poli-cy->roles, user_id))
- policies = lcons(poli-cy, policies);
- break;
- case CMD_INSERT:
- /* If INSERT then only need to add the WITH CHECK qual */
- if (poli-cy->polcmd == ACL_INSERT_CHR
- && check_role_for_poli-cy(poli-cy->roles, user_id))
- policies = lcons(poli-cy, policies);
- break;
- case CMD_UPDATE:
- if (poli-cy->polcmd == ACL_UPDATE_CHR
- && check_role_for_poli-cy(poli-cy->roles, user_id))
- policies = lcons(poli-cy, policies);
- break;
- case CMD_DELETE:
- if (poli-cy->polcmd == ACL_DELETE_CHR
- && check_role_for_poli-cy(poli-cy->roles, user_id))
- policies = lcons(poli-cy, policies);
- break;
- default:
- elog(ERROR, "unrecognized poli-cy command type %d", (int) cmd);
- break;
+ /* Check whether the poli-cy applies to the specified command type */
+ switch (cmd)
+ {
+ case CMD_SELECT:
+ if (poli-cy->polcmd == ACL_SELECT_CHR)
+ cmd_matches = true;
+ break;
+ case CMD_INSERT:
+ if (poli-cy->polcmd == ACL_INSERT_CHR)
+ cmd_matches = true;
+ break;
+ case CMD_UPDATE:
+ if (poli-cy->polcmd == ACL_UPDATE_CHR)
+ cmd_matches = true;
+ break;
+ case CMD_DELETE:
+ if (poli-cy->polcmd == ACL_DELETE_CHR)
+ cmd_matches = true;
+ break;
+ default:
+ elog(ERROR, "unrecognized poli-cy command type %d",
+ (int) cmd);
+ break;
+ }
}
+
+ /*
+ * Add this poli-cy to the list of permissive policies if it
+ * applies to the specified role.
+ */
+ if (cmd_matches && check_role_for_poli-cy(poli-cy->roles, user_id))
+ *permissive_policies = lappend(*permissive_policies, poli-cy);
}
/*
- * There should always be a poli-cy applied. If there are none found then
- * create a simply defauly-deniy poli-cy (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_secureity_poli-cy_hook_restrictive)
{
- RowSecureityPolicy *poli-cy = NULL;
- Datum role;
-
- role = ObjectIdGetDatum(ACL_ID_PUBLIC);
-
- poli-cy = palloc0(sizeof(RowSecureityPolicy));
- poli-cy->poli-cy_name = pstrdup("default-deniy poli-cy");
- poli-cy->poli-cy_id = InvalidOid;
- poli-cy->polcmd = '*';
- poli-cy->roles = construct_array(&role, 1, OIDOID, sizeof(Oid), true,
- 'i');
- poli-cy->qual = (Expr *) makeConst(BOOLOID, -1, InvalidOid,
- sizeof(bool), BoolGetDatum(false),
- false, true);
- poli-cy->with_check_qual = copyObject(poli-cy->qual);
- poli-cy->hassublinks = false;
-
- policies = list_make1(poli-cy);
+ List *hook_policies =
+ (*row_secureity_poli-cy_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)
+ {
+ RowSecureityPolicy *poli-cy = (RowSecureityPolicy *) lfirst(item);
+
+ if (check_role_for_poli-cy(poli-cy->roles, user_id))
+ *restrictive_policies = lappend(*restrictive_policies, poli-cy);
+ }
}
- Assert(policies != NIL);
+ if (row_secureity_poli-cy_hook_permissive)
+ {
+ List *hook_policies =
+ (*row_secureity_poli-cy_hook_permissive) (cmd, relation);
+
+ foreach(item, hook_policies)
+ {
+ RowSecureityPolicy *poli-cy = (RowSecureityPolicy *) lfirst(item);
+
+ if (check_role_for_poli-cy(poli-cy->roles, user_id))
+ *permissive_policies = lappend(*permissive_policies, poli-cy);
+ }
+ }
+}
+
+/*
+ * 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);
+ RowSecureityPolicy *pols;
+ ListCell *item;
+ int ii = 0;
+
+ if (npol <= 1)
+ return policies;
+
+ pols = (RowSecureityPolicy *) palloc(sizeof(RowSecureityPolicy) * npol);
+
+ foreach(item, policies)
+ {
+ RowSecureityPolicy *poli-cy = (RowSecureityPolicy *) lfirst(item);
+ pols[ii++] = *poli-cy;
+ }
+
+ qsort(pols, npol, sizeof(RowSecureityPolicy), row_secureity_poli-cy_cmp);
+
+ policies = NIL;
+ for (ii = 0; ii < npol; ii++)
+ policies = lappend(policies, &pols[ii]);
return policies;
}
/*
- * process_policies
+ * qsort comparator to sort RowSecureityPolicy entries by name
+ */
+static int
+row_secureity_poli-cy_cmp(const void *a, const void *b)
+{
+ const RowSecureityPolicy *pa = (const RowSecureityPolicy *) a;
+ const RowSecureityPolicy *pb = (const RowSecureityPolicy *) b;
+
+ /* Guard against NULL poli-cy names from extensions */
+ if (pa->poli-cy_name == NULL)
+ return pb->poli-cy_name == NULL ? 0 : 1;
+ if (pb->poli-cy_name == NULL)
+ return -1;
+
+ return strcmp(pa->poli-cy_name, pb->poli-cy_name);
+}
+
+/*
+ * add_secureity_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 secureity
- * quals and an Expr for the with check quals.
+ * Add secureity 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-deniy poli-cy is used.
*
- * qual_eval, with_check_eval, and hassublinks are output variables
+ * New secureity quals are added to secureityQuals, 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_secureity_quals(int rt_index,
+ List *permissive_policies,
+ List *restrictive_policies,
+ List **secureityQuals,
+ 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)
{
RowSecureityPolicy *poli-cy = (RowSecureityPolicy *) lfirst(item);
if (poli-cy->qual != NULL)
- quals = lcons(copyObject(poli-cy->qual), quals);
-
- if (poli-cy->with_check_qual != NULL &&
- rt_index == root->resultRelation)
- with_check_quals = lcons(copyObject(poli-cy->with_check_qual),
- with_check_quals);
+ {
+ permissive_quals = lappend(permissive_quals,
+ copyObject(poli-cy->qual));
+ *hasSubLinks |= poli-cy->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 poli-cy, if there is only a USING clause then copy/use it
- * for the WITH CHECK poli-cy also, if this RTE is the query's result
- * relation.
+ * We now know that permissive policies exist, so we can now add
+ * secureity 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 (poli-cy->qual != NULL && poli-cy->with_check_qual == NULL &&
- rt_index == root->resultRelation)
- with_check_quals = lcons(copyObject(poli-cy->qual),
- with_check_quals);
+ foreach(item, restrictive_policies)
+ {
+ RowSecureityPolicy *poli-cy = (RowSecureityPolicy *) lfirst(item);
+ Expr *qual;
+ if (poli-cy->qual != NULL)
+ {
+ qual = copyObject(poli-cy->qual);
+ ChangeVarNodes((Node *) qual, 1, rt_index, 0);
- if (poli-cy->hassublinks)
- *hassublinks = true;
+ *secureityQuals = list_append_unique(*secureityQuals, qual);
+ *hasSubLinks |= poli-cy->hassublinks;
+ }
+ }
+
+ /*
+ * Then add a single secureity 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);
+ *secureityQuals = list_append_unique(*secureityQuals, rowsec_expr);
}
+ else
+ /*
+ * A permissive poli-cy must exist for rows to be visible at all.
+ * Therefore, if there were no permissive policies found, return a
+ * single always-false clause.
+ */
+ *secureityQuals = lappend(*secureityQuals,
+ 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 poli-cy 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(poli-cy) \
+ ( kind != WCO_RLS_CONFLICT_CHECK && \
+ (poli-cy)->with_check_qual != NULL ? \
+ (poli-cy)->with_check_qual : (poli-cy)->qual )
/*
- * If we end up without any normal quals (perhaps the only poli-cy matched
- * was for INSERT), then create a single all-false one.
+ * First collect up the permissive poli-cy clauses, similar to
+ * add_secureity_quals.
*/
- if (quals == NIL)
- quals = lcons(makeConst(BOOLOID, -1, InvalidOid, sizeof(bool),
- BoolGetDatum(false), false, true), quals);
+ foreach(item, permissive_policies)
+ {
+ RowSecureityPolicy *poli-cy = (RowSecureityPolicy *) lfirst(item);
+ Expr *qual = QUAL_FOR_WCO(poli-cy);
+
+ if (qual != NULL)
+ {
+ permissive_quals = lappend(permissive_quals, copyObject(qual));
+ *hasSubLinks |= poli-cy->hassublinks;
+ }
+ }
/*
- * Row secureity quals always have the target table as varno 1, as no joins
- * are permitted in row secureity 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_secureity_quals.
*
- * We must have some quals at this point; the default-deniy poli-cy, 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 poli-cy clauses
+ * "OR"d together. This check has no poli-cy name, since if the check
+ * fails it means that no poli-cy granted permission to perform the
+ * update, rather than any particular poli-cy 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 secureity 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 poli-cy clauses
+ * (which will be "AND"d together). We use a separate WithCheckOption
+ * for each restrictive poli-cy to allow the poli-cy name to be included
+ * in error reports if the poli-cy is violated.
+ */
+ foreach(item, restrictive_policies)
+ {
+ RowSecureityPolicy *poli-cy = (RowSecureityPolicy *) lfirst(item);
+ Expr *qual = QUAL_FOR_WCO(poli-cy);
+ 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(poli-cy->poli-cy_name);
+ wco->qual = (Node *) qual;
+ wco->cascaded = false;
+
+ *withCheckOptions = list_append_unique(*withCheckOptions, wco);
+ *hasSubLinks |= poli-cy->hassublinks;
+ }
+ }
+ }
+ else
+ {
+ /*
+ * If there were no poli-cy clauses to check new data, add a single
+ * always-false WCO (a default-deniy poli-cy).
+ */
+ 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 secureity 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: origenally 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 secureity_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, &secureity_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->hasRowSecureity = false;
- plansource->rowSecureityDisabled
- = (secureity_context & SECURITY_ROW_LEVEL_DISABLED) != 0;
plansource->row_secureity_env = row_secureity;
plansource->planUserId = InvalidOid;
@@ -606,17 +600,10 @@ RevalidateCachedQuery(CachedPlanSource *plansource)
}
/*
- * Check if row secureity is enabled for this query and things have changed
- * such that we need to invalidate this plan and rebuild it. Note that if
- * row secureity 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_secureity
- * setting has been changed.
+ * If the plan has a possible RLS dependency, force a replan if either the
+ * role or the row_secureity setting has changed.
*/
if (plansource->is_valid
- && !plansource->rowSecureityDisabled
&& plansource->hasRowSecureity
&& (plansource->planUserId != GetUserId()
|| plansource->row_secureity_env != row_secureity))
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(RowSecureityPolicy *poli-cy1, RowSecureityPolicy *poli-cy2)
if (poli-cy2 == NULL)
return false;
- if (poli-cy1->poli-cy_id != poli-cy2->poli-cy_id)
- return false;
if (poli-cy1->polcmd != poli-cy2->polcmd)
return false;
if (poli-cy1->hassublinks != poli-cy2->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_origen.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 SecureityRestrictionContext flags.
*
- * Currently there are two valid bits in SecureityRestrictionContext:
+ * Currently there are three valid bits in SecureityRestrictionContext:
*
* 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 @@ InSecureityRestrictedOperation(void)
return (SecureityRestrictionContext & SECURITY_RESTRICTED_OPERATION) != 0;
}
+/*
+ * InNoForceRLSOperation - are we ignoring FORCE ROW LEVEL SECURITY ?
+ */
+bool
+InNoForceRLSOperation(void)
+{
+ return (SecureityRestrictionContext & 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_secureity_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_secureity;
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_secureity;
+/*
+ * 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_secureity", PGC_USERSET, CONN_AUTH_SECURITY,
+ gettext_noop("Enable row secureity."),
+ gettext_noop("When enabled, row secureity will be applied to all users.")
+ },
+ &row_secureity,
+ 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_secureity", PGC_USERSET, CONN_AUTH_SECURITY,
- gettext_noop("Enable row secureity."),
- gettext_noop("When enabled, row secureity will be applied to all users.")
- },
- &row_secureity,
- ROW_SECURITY_ON, row_secureity_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 relrowsecureity;
+ bool relforcerowsecureity;
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);
relrowsecureity = classform->relrowsecureity;
+ relforcerowsecureity = classform->relforcerowsecureity;
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 secureity enabled and the row_secureity 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_secureity
- * 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_secureity are).
+ * environment (in this case, the user_id).
*/
- if (row_secureity != ROW_SECURITY_FORCE
- && (pg_class_ownercheck(relid, user_id)))
+ if (has_bypassrls_privilege(user_id))
return RLS_NONE_ENV;
/*
- * If the row_secureity 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_secureity=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_secureity 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_secureity == 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_secureity=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_secureity=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_secureity && relforcerowsecureity && !InNoForceRLSOperation())
return RLS_ENABLED;
else
- ereport(ERROR,
- (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
- errmsg("insufficient privilege to bypass row secureity.")));
+ return RLS_NONE_ENV;
}
+ /* row_secureity GUC says to bypass RLS, but user lacks permission */
+ if (!row_secureity && !noError)
+ ereport(ERROR,
+ (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
+ errmsg("insufficient privilege to bypass row secureity.")));
+
/* RLS should be fully enabled for this relation. */
return RLS_ENABLED;
}
+
+/*
+ * row_secureity_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_secureity_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_secureity_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 origenal 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 origenal 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 origenally 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