diff -Nru postgresql-10-10.16/configure postgresql-10-10.17/configure --- postgresql-10-10.16/configure 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/configure 2021-05-10 20:47:56.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for PostgreSQL 10.16. +# Generated by GNU Autoconf 2.69 for PostgreSQL 10.17. # # Report bugs to . # @@ -582,8 +582,8 @@ # Identity of this package. PACKAGE_NAME='PostgreSQL' PACKAGE_TARNAME='postgresql' -PACKAGE_VERSION='10.16' -PACKAGE_STRING='PostgreSQL 10.16' +PACKAGE_VERSION='10.17' +PACKAGE_STRING='PostgreSQL 10.17' PACKAGE_BUGREPORT='pgsql-bugs@postgresql.org' PACKAGE_URL='' @@ -1417,7 +1417,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures PostgreSQL 10.16 to adapt to many kinds of systems. +\`configure' configures PostgreSQL 10.17 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1482,7 +1482,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of PostgreSQL 10.16:";; + short | recursive ) echo "Configuration of PostgreSQL 10.17:";; esac cat <<\_ACEOF @@ -1644,7 +1644,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -PostgreSQL configure 10.16 +PostgreSQL configure 10.17 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2359,7 +2359,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by PostgreSQL $as_me 10.16, which was +It was created by PostgreSQL $as_me 10.17, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -17772,7 +17772,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by PostgreSQL $as_me 10.16, which was +This file was extended by PostgreSQL $as_me 10.17, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -17842,7 +17842,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -PostgreSQL config.status 10.16 +PostgreSQL config.status 10.17 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru postgresql-10-10.16/configure.in postgresql-10-10.17/configure.in --- postgresql-10-10.16/configure.in 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/configure.in 2021-05-10 20:47:56.000000000 +0000 @@ -17,7 +17,7 @@ dnl m4_pattern_forbid(^PGAC_)dnl to catch undefined macros -AC_INIT([PostgreSQL], [10.16], [pgsql-bugs@postgresql.org]) +AC_INIT([PostgreSQL], [10.17], [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 diff -Nru postgresql-10-10.16/contrib/postgres_fdw/postgres_fdw.c postgresql-10-10.17/contrib/postgres_fdw/postgres_fdw.c --- postgresql-10-10.16/contrib/postgres_fdw/postgres_fdw.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/contrib/postgres_fdw/postgres_fdw.c 2021-05-10 20:47:56.000000000 +0000 @@ -509,8 +509,9 @@ fpinfo->server = GetForeignServer(fpinfo->table->serverid); /* - * Extract user-settable option values. Note that per-table setting of - * use_remote_estimate overrides per-server setting. + * Extract user-settable option values. Note that per-table settings of + * use_remote_estimate and fetch_size override per-server settings of + * them, respectively. */ fpinfo->use_remote_estimate = false; fpinfo->fdw_startup_cost = DEFAULT_FDW_STARTUP_COST; diff -Nru postgresql-10-10.16/debian/changelog postgresql-10-10.17/debian/changelog --- postgresql-10-10.16/debian/changelog 2021-02-10 10:47:35.000000000 +0000 +++ postgresql-10-10.17/debian/changelog 2021-05-18 10:17:37.000000000 +0000 @@ -1,3 +1,38 @@ +postgresql-10 (10.17-0ubuntu0.18.04.1) bionic-security; urgency=medium + + * New upstream version (LP: #1928773). + + + Prevent integer overflows in array subscripting calculations (Tom Lane) + + The array code previously did not complain about cases where an array's + lower bound plus length overflows an integer. This resulted in later + entries in the array becoming inaccessible (since their subscripts could + not be written as integers), but more importantly it confused subsequent + assignment operations. This could lead to memory overwrites, with + ensuing crashes or unwanted data modifications. (CVE-2021-32027) + + + Fix mishandling of junk columns in INSERT ... ON CONFLICT ... UPDATE + target lists (Tom Lane) + + If the UPDATE list contains any multi-column sub-selects (which give + rise to junk columns in addition to the results proper), the UPDATE path + would end up storing tuples that include the values of the extra junk + columns. That's fairly harmless in the short run, but if new columns are + added to the table then the values would become accessible, possibly + leading to malfunctions if they don't match the datatypes of the added + columns. + + In addition, in versions supporting cross-partition updates, a + cross-partition update triggered by such a case had the reverse problem: + the junk columns were removed from the target list, typically causing an + immediate crash due to malfunction of the multi-column sub-select + mechanism. (CVE-2021-32028) + + + Details about these and many further changes can be found at: + https://www.postgresql.org/docs/10/release-10-17.html + + -- Christian Ehrhardt Tue, 18 May 2021 12:17:37 +0200 + postgresql-10 (10.16-0ubuntu0.18.04.1) bionic; urgency=medium * New upstream version (LP: #1915254) diff -Nru postgresql-10-10.16/doc/bug.template postgresql-10-10.17/doc/bug.template --- postgresql-10-10.16/doc/bug.template 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/doc/bug.template 2021-05-10 20:47:56.000000000 +0000 @@ -27,7 +27,7 @@ Operating System (example: Linux 2.4.18) : - PostgreSQL version (example: PostgreSQL 10.16): PostgreSQL 10.16 + PostgreSQL version (example: PostgreSQL 10.17): PostgreSQL 10.17 Compiler used (example: gcc 3.3.5) : diff -Nru postgresql-10-10.16/doc/src/sgml/acronyms.sgml postgresql-10-10.17/doc/src/sgml/acronyms.sgml --- postgresql-10-10.16/doc/src/sgml/acronyms.sgml 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/acronyms.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -665,6 +665,16 @@ + TLS + + + + Transport Layer Security + + + + + TOAST diff -Nru postgresql-10-10.16/doc/src/sgml/appendix-obsolete-pgreceivexlog.sgml postgresql-10-10.17/doc/src/sgml/appendix-obsolete-pgreceivexlog.sgml --- postgresql-10-10.16/doc/src/sgml/appendix-obsolete-pgreceivexlog.sgml 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/appendix-obsolete-pgreceivexlog.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -0,0 +1,24 @@ + + + + + <command>pg_receivexlog</command> renamed to <command>pg_receivewal</command> + + + pg_receivexlog + pg_receivewal + + + + PostgreSQL 9.6 and below provided a command named + pg_receivexlog + pg_receivexlog + to fetch write-ahead-log (WAL) files. This command was renamed to pg_receivewal, see + for documentation of pg_receivewal and see + the release notes for PostgreSQL 10 for details + on this change. + + + diff -Nru postgresql-10-10.16/doc/src/sgml/appendix-obsolete-pgresetxlog.sgml postgresql-10-10.17/doc/src/sgml/appendix-obsolete-pgresetxlog.sgml --- postgresql-10-10.16/doc/src/sgml/appendix-obsolete-pgresetxlog.sgml 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/appendix-obsolete-pgresetxlog.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -0,0 +1,24 @@ + + + + + <command>pg_resetxlog</command> renamed to <command>pg_resetwal</command> + + + pg_resetxlog + pg_resetwal + + + + PostgreSQL 9.6 and below provided a command named + pg_resetxlog + pg_resetxlog + to reset the write-ahead-log (WAL) files. This command was renamed to pg_resetwal, see + for documentation of pg_resetwal and see + the release notes for PostgreSQL 10 for details + on this change. + + + diff -Nru postgresql-10-10.16/doc/src/sgml/appendix-obsolete-pgxlogdump.sgml postgresql-10-10.17/doc/src/sgml/appendix-obsolete-pgxlogdump.sgml --- postgresql-10-10.16/doc/src/sgml/appendix-obsolete-pgxlogdump.sgml 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/appendix-obsolete-pgxlogdump.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -0,0 +1,24 @@ + + + + + <command>pg_xlogdump</command> renamed to <command>pg_waldump</command> + + + pg_xlogdump + pg_waldump + + + + PostgreSQL 9.6 and below provided a command named + pg_xlogdump + pg_xlogdump + to read write-ahead-log (WAL) files. This command was renamed to pg_waldump, see + for documentation of pg_waldump and see + the release notes for PostgreSQL 10 for details + on this change. + + + diff -Nru postgresql-10-10.16/doc/src/sgml/appendix-obsolete.sgml postgresql-10-10.17/doc/src/sgml/appendix-obsolete.sgml --- postgresql-10-10.16/doc/src/sgml/appendix-obsolete.sgml 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/appendix-obsolete.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -0,0 +1,40 @@ + + + + Obsolete or Renamed Features + + + Functionality is sometimes removed from PostgreSQL, feature, setting + and file names sometimes change, or documentation moves to different + places. This section directs users coming from old versions of the + documentation or from external links to the appropriate new location + for the information they need. + + + + + &obsolete-pgxlogdump; + &obsolete-pgresetxlog; + &obsolete-pgreceivexlog; + + diff -Nru postgresql-10-10.16/doc/src/sgml/backup.sgml postgresql-10-10.17/doc/src/sgml/backup.sgml --- postgresql-10-10.16/doc/src/sgml/backup.sgml 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/backup.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -903,7 +903,8 @@ backup_label in the root directory of the backup. The third field should be written to a file named tablespace_map unless the field is empty. These files are - vital to the backup working, and must be written without modification. + vital to the backup working and must be written byte for byte without + modification, which may require opening the file in binary mode. diff -Nru postgresql-10-10.16/doc/src/sgml/catalogs.sgml postgresql-10-10.17/doc/src/sgml/catalogs.sgml --- postgresql-10-10.16/doc/src/sgml/catalogs.sgml 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/catalogs.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -6445,7 +6445,7 @@ char[] - An array containing codes for the enabled statistic kinds; + An array containing codes for the enabled statistics kinds; valid values are: d for n-distinct statistics, f for functional dependency statistics diff -Nru postgresql-10-10.16/doc/src/sgml/charset.sgml postgresql-10-10.17/doc/src/sgml/charset.sgml --- postgresql-10-10.16/doc/src/sgml/charset.sgml 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/charset.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -617,7 +617,7 @@ name such as de_DE can be considered unique within a given database even though it would not be unique globally. Use of the stripped collation names is recommended, since it will - make one less thing you need to change if you decide to change to + make one fewer thing you need to change if you decide to change to another database encoding. Note however that the default, C, and POSIX collations can be used regardless of the database encoding. diff -Nru postgresql-10-10.16/doc/src/sgml/config.sgml postgresql-10-10.17/doc/src/sgml/config.sgml --- postgresql-10-10.16/doc/src/sgml/config.sgml 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/config.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -2537,8 +2537,8 @@ The open_* options also use O_DIRECT if available. Not all of these choices are available on all platforms. The default is the first method in the above list that is supported - by the platform, except that fdatasync is the default on - Linux. The default is not necessarily ideal; it might be + by the platform, except that fdatasync is the default on + Linux and FreeBSD. The default is not necessarily ideal; it might be necessary to change this setting or other aspects of your system configuration in order to create a crash-safe configuration or achieve optimal performance. @@ -3091,6 +3091,17 @@ be used. Setting it to a lower value than the number of currently existing replication slots will prevent the server from starting. + + + On the subscriber side, specifies how many replication origins (see + ) can be tracked simultaneously, + effectively limiting how many logical replication subscriptions can + be created on the server. Setting it a lower value than the current + number of tracked replication origins (reflected in + pg_replication_origin_status, + not pg_replication_origin) + will prevent the server from starting. + diff -Nru postgresql-10-10.16/doc/src/sgml/datetime.sgml postgresql-10-10.17/doc/src/sgml/datetime.sgml --- postgresql-10-10.16/doc/src/sgml/datetime.sgml 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/datetime.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -785,9 +785,6 @@ Gregorian calendar - - Julian date - The SQL standard states that Within the definition of a @@ -890,14 +887,27 @@ festivals. + + + + Julian Dates + + + Julian date + + - The Julian Date system is another type of - calendar, unrelated to the Julian calendar though it is confusingly + The Julian Date system is a method for + numbering days. It is + unrelated to the Julian calendar, though it is confusingly named similarly to that calendar. The Julian Date system was invented by the French scholar Joseph Justus Scaliger (1540-1609) and probably takes its name from Scaliger's father, the Italian scholar Julius Caesar Scaliger (1484-1558). + + + In the Julian Date system, each day has a sequential number, starting from JD 0 (which is sometimes called the Julian Date). JD 0 corresponds to 1 January 4713 BC in the Julian calendar, or @@ -913,7 +923,31 @@ input and output of dates (and also uses Julian dates for some internal datetime calculations), it does not observe the nicety of having dates run from noon to noon. PostgreSQL treats a Julian Date - as running from midnight to midnight. + as running from local midnight to local midnight, the same as a normal + date. + + + + This definition does, however, provide a way to obtain the astronomical + definition when you need it: do the arithmetic in time + zone UTC+12. For example, + +=> SELECT extract(julian from '2021-06-23 7:00:00-04'::timestamptz at time zone 'UTC+12'); + date_part +-------------------- + 2459388.9583333335 +(1 row) +=> SELECT extract(julian from '2021-06-23 8:00:00-04'::timestamptz at time zone 'UTC+12'); + date_part +----------- + 2459389 +(1 row) +=> SELECT extract(julian from date '2021-06-23'); + date_part +----------- + 2459389 +(1 row) + diff -Nru postgresql-10-10.16/doc/src/sgml/ddl.sgml postgresql-10-10.17/doc/src/sgml/ddl.sgml --- postgresql-10-10.16/doc/src/sgml/ddl.sgml 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/ddl.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -772,6 +772,11 @@ + You can assign your own name for a foreign key constraint, + in the usual way. + + + A foreign key can also constrain and reference a group of columns. As usual, it then needs to be written in table constraint form. Here is a contrived syntax example: @@ -787,9 +792,28 @@ match the number and type of the referenced columns. + + foreign key + self-referential + + - You can assign your own name for a foreign key constraint, - in the usual way. + Sometimes it is useful for the other table of a + foreign key constraint to be the same table; this is called + a self-referential foreign key. For + example, if you want rows of a table to represent nodes of a tree + structure, you could write + +CREATE TABLE tree ( + node_id integer PRIMARY KEY, + parent_id integer REFERENCES tree, + name text, + ... +); + + A top-level node would have NULL parent_id, + but non-NULL parent_id entries would be + constrained to reference valid rows of the table. @@ -2019,7 +2043,8 @@ definer function.) Also, heavy concurrent use of row share locks on the referenced table could pose a performance problem, especially if updates of it are frequent. Another solution, practical if updates of the - referenced table are infrequent, is to take an exclusive lock on the + referenced table are infrequent, is to take an + ACCESS EXCLUSIVE lock on the referenced table when updating it, so that no concurrent transactions could be examining old row values. Or one could just wait for all concurrent transactions to end after committing an update of the diff -Nru postgresql-10-10.16/doc/src/sgml/filelist.sgml postgresql-10-10.17/doc/src/sgml/filelist.sgml --- postgresql-10-10.16/doc/src/sgml/filelist.sgml 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/filelist.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -178,6 +178,12 @@ + + + + + + + + Release 10.17 + + + Release date: + 2021-05-13 + + + + This release contains a variety of fixes from 10.16. + For information about new features in major release 10, see + . + + + + Migration to Version 10.17 + + + A dump/restore is not required for those running 10.X. + + + + However, if you are upgrading from a version earlier than 10.16, + see . + + + + + Changes + + + + + + + Prevent integer overflows in array subscripting calculations + (Tom Lane) + + + + The array code previously did not complain about cases where an + array's lower bound plus length overflows an integer. This resulted + in later entries in the array becoming inaccessible (since their + subscripts could not be written as integers), but more importantly + it confused subsequent assignment operations. This could lead to + memory overwrites, with ensuing crashes or unwanted data + modifications. + (CVE-2021-32027) + + + + + + + Fix mishandling of junk columns in INSERT + ... ON CONFLICT ... UPDATE target lists (Tom Lane) + + + + If the UPDATE list contains any multi-column + sub-selects (which give rise to junk columns in addition to the + results proper), the UPDATE path would end up + storing tuples that include the values of the extra junk columns. + That's fairly harmless in the short run, but if new columns are + added to the table then the values would become accessible, possibly + leading to malfunctions if they don't match the datatypes of the + added columns. + + + + In addition, in versions supporting cross-partition updates, + a cross-partition update triggered by such a case had the reverse + problem: the junk columns were removed from the target list, + typically causing an immediate crash due to malfunction of the + multi-column sub-select mechanism. + (CVE-2021-32028) + + + + + + + Forbid marking an identity column as nullable (Vik Fearing) + + + + GENERATED ALWAYS AS IDENTITY implies NOT + NULL, so don't allow it to be combined with an + explicit NULL specification. + + + + + + + Allow ALTER ROLE/DATABASE ... SET to set + the role, session_authorization, + and temp_buffers parameters (Tom Lane) + + + + Previously, over-eager validity checks might reject these commands, + even if the values would have worked when used later. This created + a command ordering hazard for dump/reload and upgrade scenarios. + + + + + + + Fix bug with coercing the result of a COLLATE + expression to a non-collatable type (Tom Lane) + + + + This led to a parse tree in which the COLLATE + appears to be applied to a non-collatable value. While that + normally has no real impact (since COLLATE has no + effect at runtime), it was possible to construct views that would be + rejected during dump/reload. + + + + + + + Disallow calling window functions and procedures via + the fast path wire protocol message (Tom Lane) + + + + Only plain functions are supported here. While trying to call + an aggregate function failed already, calling a window function + would crash, and calling a procedure would work only if the + procedure did no transaction control. + + + + + + + Extend pg_identify_object_as_address() + to support event triggers (Joel Jacobson) + + + + + + + Fix to_char()'s handling of Roman-numeral month + format codes with negative intervals (Julien Rouhaud) + + + + Previously, such cases would usually cause a crash. + + + + + + + Check that the argument + of pg_import_system_collations() is a valid + schema OID (Tom Lane) + + + + + + + Fix use of uninitialized value while parsing an + \{m,n\} + quantifier in a BRE-mode regular expression (Tom Lane) + + + + This error could cause the quantifier to act non-greedy, that is + behave like an + {m,n}? + quantifier would do in full regular expressions. + + + + + + + Don't ignore system columns when estimating the number of groups + using extended statistics (Tomas Vondra) + + + + This led to strange estimates for queries such as SELECT + ... GROUP BY a, b, ctid. + + + + + + + Avoid divide-by-zero when estimating selectivity of a regular + expression with a very long fixed prefix (Tom Lane) + + + + This typically led to a NaN selectivity value, + causing assertion failures or strange planner behavior. + + + + + + + Fix access-off-the-end-of-the-table error in BRIN index bitmap scans + (Tomas Vondra) + + + + If the page range size used by a BRIN index isn't a power of two, + there were corner cases in which a bitmap scan could try to fetch + pages past the actual end of the table, leading to could not + open file errors. + + + + + + + Avoid incorrect timeline change while recovering uncommitted + two-phase transactions from WAL (Soumyadeep Chakraborty, Jimmy Yih, + Kevin Yeap) + + + + This error could lead to subsequent WAL records being written under + the wrong timeline ID, leading to consistency problems, or even + complete failure to be able to restart the server, later on. + + + + + + + Ensure that locks are released while shutting down a standby + server's startup process (Fujii Masao) + + + + When a standby server is shut down while still in recovery, some + locks might be left held. This causes assertion failures in debug + builds; it's unclear whether any serious consequence could occur + in production builds. + + + + + + + Fix crash when a logical replication worker does ALTER + SUBSCRIPTION REFRESH (Peter Smith) + + + + The core code won't do this, but a replica trigger could. + + + + + + + Ensure we default to wal_sync_method + = fdatasync on recent FreeBSD (Thomas Munro) + + + + FreeBSD 13 supports open_datasync, which would + normally become the default choice. However, it's unclear whether + that is actually an improvement for Postgres, so preserve the + existing default for now. + + + + + + + Ensure we finish cleaning up when interrupted while detaching a DSM + segment (Thomas Munro) + + + + This error could result in temporary files not being cleaned up + promptly after a parallel query. + + + + + + + Fix memory leak while initializing server's SSL parameters (Michael + Paquier) + + + + This is ordinarily insignificant, but if the postmaster is + repeatedly sent SIGHUP signals, the leak + can build up over time. + + + + + + + Fix assorted minor memory leaks in the server (Tom Lane, Andres Freund) + + + + + + + Prevent infinite loop in libpq + if a ParameterDescription message with a corrupt length is received + (Tom Lane) + + + + + + + When initdb prints instructions about how + to start the server, make the path shown + for pg_ctl use backslash separators on + Windows (Nitin Jadhav) + + + + + + + Fix psql to restore the previous behavior + of \connect + service=something (Tom Lane) + + + + A previous bug fix caused environment variables (such + as PGPORT) to override entries in the service + file in this context. Restore the previous behavior, in which the + priority is the other way around. + + + + + + + Fix race condition in detection of file modification by + psql's \e and related + commands (Laurenz Albe) + + + + A very fast typist could fool the code's file-timestamp-based + detection of whether the temporary edit file was changed. + + + + + + + Fix missed file version check + in pg_restore (Tom Lane) + + + + When reading a custom-format archive from a non-seekable source, + pg_restore neglected to check the + archive version. If it was fed a newer archive version than it + can support, it would fail messily later on. + + + + + + + Add some more checks to pg_upgrade for + user tables containing non-upgradable data types (Tom Lane) + + + + Fix detection of some cases where a non-upgradable data type is + embedded within a container type (such as an array or range). + Also disallow upgrading when user tables contain columns of + system-defined composite types, since those types' OIDs are not + stable across versions. + + + + + + + Fix pg_waldump to + count XACT records correctly when generating + per-record statistics (Kyotaro Horiguchi) + + + + + + + Fix contrib/amcheck to not complain about the + tuple flags HEAP_XMAX_LOCK_ONLY + and HEAP_KEYS_UPDATED both being set + (Julien Rouhaud) + + + + This is a valid state after SELECT FOR UPDATE. + + + + + + + Adjust VPATH build rules to support recent Oracle Developer Studio + compiler versions (Noah Misch) + + + + + + + Fix testing of PL/Python for Python 3 on Solaris (Noah Misch) + + + + + + + + Release 10.16 diff -Nru postgresql-10-10.16/doc/src/sgml/rules.sgml postgresql-10-10.17/doc/src/sgml/rules.sgml --- postgresql-10-10.16/doc/src/sgml/rules.sgml 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/rules.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -1265,7 +1265,7 @@ The query trees generated from rule actions are thrown into the rewrite system again, and maybe more rules get applied resulting - in more or less query trees. + in additional or fewer query trees. So a rule's actions must have either a different command type or a different result relation than the rule itself is on, otherwise this recursive process will end up in an infinite loop. diff -Nru postgresql-10-10.16/doc/src/sgml/runtime.sgml postgresql-10-10.17/doc/src/sgml/runtime.sgml --- postgresql-10-10.16/doc/src/sgml/runtime.sgml 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/doc/src/sgml/runtime.sgml 2021-05-10 20:47:56.000000000 +0000 @@ -1707,9 +1707,9 @@ incompatibilities, so application programming changes might be required. All user-visible changes are listed in the release notes (); pay particular attention to the section - labeled "Migration". If you are upgrading across several major - versions, be sure to read the release notes for each intervening - version. + labeled "Migration". Though you can upgrade from one major version + to another without upgrading to intervening versions, you should read + the major release notes of all intervening versions. diff -Nru postgresql-10-10.16/src/backend/access/brin/brin.c postgresql-10-10.17/src/backend/access/brin/brin.c --- postgresql-10-10.16/src/backend/access/brin/brin.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/access/brin/brin.c 2021-05-10 20:47:56.000000000 +0000 @@ -524,7 +524,7 @@ BlockNumber pageno; for (pageno = heapBlk; - pageno <= heapBlk + opaque->bo_pagesPerRange - 1; + pageno <= Min(nblocks, heapBlk + opaque->bo_pagesPerRange) - 1; pageno++) { MemoryContextSwitchTo(oldcxt); diff -Nru postgresql-10-10.16/src/backend/access/heap/heapam.c postgresql-10-10.17/src/backend/access/heap/heapam.c --- postgresql-10-10.16/src/backend/access/heap/heapam.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/access/heap/heapam.c 2021-05-10 20:47:56.000000000 +0000 @@ -2414,6 +2414,10 @@ Buffer vmbuffer = InvalidBuffer; bool all_visible_cleared = false; + /* Cheap, simplistic check that the tuple matches the rel's rowtype. */ + Assert(HeapTupleHeaderGetNatts(tup->t_data) <= + RelationGetNumberOfAttributes(relation)); + /* * Fill in tuple header fields, assign an OID, and toast the tuple if * necessary. @@ -3515,6 +3519,10 @@ Assert(ItemPointerIsValid(otid)); + /* Cheap, simplistic check that the tuple matches the rel's rowtype. */ + Assert(HeapTupleHeaderGetNatts(newtup->t_data) <= + RelationGetNumberOfAttributes(relation)); + /* * Forbid this during a parallel operation, lest it allocate a combocid. * Other workers might need that combocid for visibility checks, and we diff -Nru postgresql-10-10.16/src/backend/access/heap/README.tuplock postgresql-10-10.17/src/backend/access/heap/README.tuplock --- postgresql-10-10.16/src/backend/access/heap/README.tuplock 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/access/heap/README.tuplock 2021-05-10 20:47:56.000000000 +0000 @@ -146,9 +146,10 @@ FOR UPDATE; this is implemented by the HEAP_KEYS_UPDATED bit. - HEAP_KEYS_UPDATED - This bit lives in t_infomask2. If set, indicates that the XMAX updated - this tuple and changed the key values, or it deleted the tuple. - It's set regardless of whether the XMAX is a TransactionId or a MultiXactId. + This bit lives in t_infomask2. If set, indicates that the operation(s) done + by the XMAX compromise the tuple key, such as a SELECT FOR UPDATE, an UPDATE + that modifies the columns of the key, or a DELETE. It's set regardless of + whether the XMAX is a TransactionId or a MultiXactId. We currently never set the HEAP_XMAX_COMMITTED when the HEAP_XMAX_IS_MULTI bit is set. diff -Nru postgresql-10-10.16/src/backend/access/transam/commit_ts.c postgresql-10-10.17/src/backend/access/transam/commit_ts.c --- postgresql-10-10.16/src/backend/access/transam/commit_ts.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/access/transam/commit_ts.c 2021-05-10 20:47:56.000000000 +0000 @@ -1024,7 +1024,7 @@ subxids = NULL; TransactionTreeSetCommitTsData(setts->mainxid, nsubxids, subxids, - setts->timestamp, setts->nodeid, true); + setts->timestamp, setts->nodeid, false); if (subxids) pfree(subxids); } diff -Nru postgresql-10-10.16/src/backend/access/transam/twophase.c postgresql-10-10.17/src/backend/access/transam/twophase.c --- postgresql-10-10.16/src/backend/access/transam/twophase.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/access/transam/twophase.c 2021-05-10 20:47:56.000000000 +0000 @@ -1299,8 +1299,11 @@ * twophase files and ReadTwoPhaseFile should be used instead. * * Note clearly that this function can access WAL during normal operation, - * similarly to the way WALSender or Logical Decoding would do. - * + * similarly to the way WALSender or Logical Decoding would do. While + * accessing WAL, read_local_xlog_page() may change ThisTimeLineID, + * particularly if this routine is called for the end-of-recovery checkpoint + * in the checkpointer itself, so save the current timeline number value + * and restore it once done. */ static void XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len) @@ -1308,6 +1311,7 @@ XLogRecord *record; XLogReaderState *xlogreader; char *errormsg; + TimeLineID save_currtli = ThisTimeLineID; xlogreader = XLogReaderAllocate(&read_local_xlog_page, NULL); if (!xlogreader) @@ -1317,6 +1321,14 @@ errdetail("Failed while allocating a WAL reading processor."))); record = XLogReadRecord(xlogreader, lsn, &errormsg); + + /* + * Restore immediately the timeline where it was previously, as + * read_local_xlog_page() could have changed it if the record was read + * while recovery was finishing or if the timeline has jumped in-between. + */ + ThisTimeLineID = save_currtli; + if (record == NULL) ereport(ERROR, (errcode_for_file_access(), diff -Nru postgresql-10-10.16/src/backend/access/transam/xlog.c postgresql-10-10.17/src/backend/access/transam/xlog.c --- postgresql-10-10.16/src/backend/access/transam/xlog.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/access/transam/xlog.c 2021-05-10 20:47:56.000000000 +0000 @@ -11517,7 +11517,7 @@ } else if ((ch == '\n' || ch == '\r') && prev_ch == '\\') str[i - 1] = ch; - else + else if (i < sizeof(str) - 1) str[i++] = ch; prev_ch = ch; } diff -Nru postgresql-10-10.16/src/backend/catalog/objectaddress.c postgresql-10-10.17/src/backend/catalog/objectaddress.c --- postgresql-10-10.16/src/backend/catalog/objectaddress.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/catalog/objectaddress.c 2021-05-10 20:47:56.000000000 +0000 @@ -4945,10 +4945,7 @@ { HeapTuple tup; Form_pg_event_trigger trigForm; - - /* no objname support here */ - if (objname) - *objname = NIL; + char *evtname; tup = SearchSysCache1(EVENTTRIGGEROID, ObjectIdGetDatum(object->objectId)); @@ -4956,8 +4953,10 @@ elog(ERROR, "cache lookup failed for event trigger %u", object->objectId); trigForm = (Form_pg_event_trigger) GETSTRUCT(tup); - appendStringInfoString(&buffer, - quote_identifier(NameStr(trigForm->evtname))); + evtname = pstrdup(NameStr(trigForm->evtname)); + appendStringInfoString(&buffer, quote_identifier(evtname)); + if (objname) + *objname = list_make1(evtname); ReleaseSysCache(tup); break; } diff -Nru postgresql-10-10.16/src/backend/commands/collationcmds.c postgresql-10-10.17/src/backend/commands/collationcmds.c --- postgresql-10-10.16/src/backend/commands/collationcmds.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/commands/collationcmds.c 2021-05-10 20:47:56.000000000 +0000 @@ -503,14 +503,16 @@ Oid nspid = PG_GETARG_OID(0); int ncreated = 0; - /* silence compiler warning if we have no locale implementation at all */ - (void) nspid; - if (!superuser()) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), (errmsg("must be superuser to import system collations")))); + if (!SearchSysCacheExists1(NAMESPACEOID, ObjectIdGetDatum(nspid))) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_SCHEMA), + errmsg("schema with OID %u does not exist", nspid))); + /* Load collations known to libc, using "locale -a" to enumerate them */ #ifdef READ_LOCALE_A_OUTPUT { diff -Nru postgresql-10-10.16/src/backend/commands/subscriptioncmds.c postgresql-10-10.17/src/backend/commands/subscriptioncmds.c --- postgresql-10-10.16/src/backend/commands/subscriptioncmds.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/commands/subscriptioncmds.c 2021-05-10 20:47:56.000000000 +0000 @@ -507,6 +507,7 @@ List *subrel_states; Oid *subrel_local_oids; Oid *pubrel_local_oids; + WalReceiverConn *wrconn; ListCell *lc; int off; @@ -821,7 +822,7 @@ char originname[NAMEDATALEN]; char *err = NULL; RepOriginId originid; - WalReceiverConn *wrconn = NULL; + WalReceiverConn *wrconn; StringInfoData cmd; /* diff -Nru postgresql-10-10.16/src/backend/commands/variable.c postgresql-10-10.17/src/backend/commands/variable.c --- postgresql-10-10.16/src/backend/commands/variable.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/commands/variable.c 2021-05-10 20:47:56.000000000 +0000 @@ -819,6 +819,17 @@ roleTup = SearchSysCache1(AUTHNAME, PointerGetDatum(*newval)); if (!HeapTupleIsValid(roleTup)) { + /* + * When source == PGC_S_TEST, we don't throw a hard error for a + * nonexistent user name, only a NOTICE. See comments in guc.h. + */ + if (source == PGC_S_TEST) + { + ereport(NOTICE, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("role \"%s\" does not exist", *newval))); + return true; + } GUC_check_errmsg("role \"%s\" does not exist", *newval); return false; } @@ -887,10 +898,23 @@ return false; } + /* + * When source == PGC_S_TEST, we don't throw a hard error for a + * nonexistent user name or insufficient privileges, only a NOTICE. + * See comments in guc.h. + */ + /* Look up the username */ roleTup = SearchSysCache1(AUTHNAME, PointerGetDatum(*newval)); if (!HeapTupleIsValid(roleTup)) { + if (source == PGC_S_TEST) + { + ereport(NOTICE, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("role \"%s\" does not exist", *newval))); + return true; + } GUC_check_errmsg("role \"%s\" does not exist", *newval); return false; } @@ -908,6 +932,14 @@ if (!InitializingParallelWorker && !is_member_of_role(GetSessionUserId(), roleid)) { + if (source == PGC_S_TEST) + { + ereport(NOTICE, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("permission will be denied to set role \"%s\"", + *newval))); + return true; + } GUC_check_errcode(ERRCODE_INSUFFICIENT_PRIVILEGE); GUC_check_errmsg("permission denied to set role \"%s\"", *newval); diff -Nru postgresql-10-10.16/src/backend/executor/execExpr.c postgresql-10-10.17/src/backend/executor/execExpr.c --- postgresql-10-10.16/src/backend/executor/execExpr.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/executor/execExpr.c 2021-05-10 20:47:56.000000000 +0000 @@ -304,6 +304,32 @@ PlanState *parent, TupleDesc inputDesc) { + return ExecBuildProjectionInfoExt(targetList, + econtext, + slot, + true, + parent, + inputDesc); +} + +/* + * ExecBuildProjectionInfoExt + * + * As above, with one additional option. + * + * If assignJunkEntries is true (the usual case), resjunk entries in the tlist + * are not handled specially: they are evaluated and assigned to the proper + * column of the result slot. If assignJunkEntries is false, resjunk entries + * are evaluated, but their result is discarded without assignment. + */ +ProjectionInfo * +ExecBuildProjectionInfoExt(List *targetList, + ExprContext *econtext, + TupleTableSlot *slot, + bool assignJunkEntries, + PlanState *parent, + TupleDesc inputDesc) +{ ProjectionInfo *projInfo = makeNode(ProjectionInfo); ExprState *state; ExprEvalStep scratch; @@ -337,7 +363,8 @@ */ if (tle->expr != NULL && IsA(tle->expr, Var) && - ((Var *) tle->expr)->varattno > 0) + ((Var *) tle->expr)->varattno > 0 && + (assignJunkEntries || !tle->resjunk)) { /* Non-system Var, but how safe is it? */ variable = (Var *) tle->expr; @@ -401,6 +428,10 @@ ExecInitExprRec(tle->expr, parent, state, &state->resvalue, &state->resnull); + /* This makes it easy to discard resjunk results when told to. */ + if (!assignJunkEntries && tle->resjunk) + continue; + /* * Column might be referenced multiple times in upper nodes, so * force value to R/O - but only if it could be an expanded datum. diff -Nru postgresql-10-10.16/src/backend/executor/execExprInterp.c postgresql-10-10.17/src/backend/executor/execExprInterp.c --- postgresql-10-10.16/src/backend/executor/execExprInterp.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/executor/execExprInterp.c 2021-05-10 20:47:56.000000000 +0000 @@ -564,6 +564,7 @@ * care of at compilation time. But see EEOP_INNER_VAR comments. */ Assert(attnum >= 0 && attnum < innerslot->tts_nvalid); + Assert(resultnum >= 0 && resultnum < resultslot->tts_tupleDescriptor->natts); resultslot->tts_values[resultnum] = innerslot->tts_values[attnum]; resultslot->tts_isnull[resultnum] = innerslot->tts_isnull[attnum]; @@ -580,6 +581,7 @@ * care of at compilation time. But see EEOP_INNER_VAR comments. */ Assert(attnum >= 0 && attnum < outerslot->tts_nvalid); + Assert(resultnum >= 0 && resultnum < resultslot->tts_tupleDescriptor->natts); resultslot->tts_values[resultnum] = outerslot->tts_values[attnum]; resultslot->tts_isnull[resultnum] = outerslot->tts_isnull[attnum]; @@ -596,6 +598,7 @@ * care of at compilation time. But see EEOP_INNER_VAR comments. */ Assert(attnum >= 0 && attnum < scanslot->tts_nvalid); + Assert(resultnum >= 0 && resultnum < resultslot->tts_tupleDescriptor->natts); resultslot->tts_values[resultnum] = scanslot->tts_values[attnum]; resultslot->tts_isnull[resultnum] = scanslot->tts_isnull[attnum]; @@ -606,6 +609,7 @@ { int resultnum = op->d.assign_tmp.resultnum; + Assert(resultnum >= 0 && resultnum < resultslot->tts_tupleDescriptor->natts); resultslot->tts_values[resultnum] = state->resvalue; resultslot->tts_isnull[resultnum] = state->resnull; @@ -616,6 +620,7 @@ { int resultnum = op->d.assign_tmp.resultnum; + Assert(resultnum >= 0 && resultnum < resultslot->tts_tupleDescriptor->natts); resultslot->tts_isnull[resultnum] = state->resnull; if (!resultslot->tts_isnull[resultnum]) resultslot->tts_values[resultnum] = @@ -1747,8 +1752,10 @@ * * Since we use slot_getattr(), we don't need to implement the FETCHSOME * step explicitly, and we also needn't Assert that the attnum is in range - * --- slot_getattr() will take care of any problems. + * --- slot_getattr() will take care of any problems. Nonetheless, check + * that resultnum is in range. */ + Assert(resultnum >= 0 && resultnum < outslot->tts_tupleDescriptor->natts); outslot->tts_values[resultnum] = slot_getattr(inslot, attnum, &outslot->tts_isnull[resultnum]); return 0; @@ -1765,6 +1772,7 @@ TupleTableSlot *outslot = state->resultslot; /* See comments in ExecJustAssignInnerVar */ + Assert(resultnum >= 0 && resultnum < outslot->tts_tupleDescriptor->natts); outslot->tts_values[resultnum] = slot_getattr(inslot, attnum, &outslot->tts_isnull[resultnum]); return 0; @@ -1781,6 +1789,7 @@ TupleTableSlot *outslot = state->resultslot; /* See comments in ExecJustAssignInnerVar */ + Assert(resultnum >= 0 && resultnum < outslot->tts_tupleDescriptor->natts); outslot->tts_values[resultnum] = slot_getattr(inslot, attnum, &outslot->tts_isnull[resultnum]); return 0; @@ -2286,6 +2295,10 @@ lbs[i] = elem_lbs[i - 1]; } + /* check for subscript overflow */ + (void) ArrayGetNItems(ndims, dims); + ArrayCheckBounds(ndims, dims, lbs); + if (havenulls) { dataoffset = ARR_OVERHEAD_WITHNULLS(ndims, nitems); diff -Nru postgresql-10-10.16/src/backend/executor/nodeModifyTable.c postgresql-10-10.17/src/backend/executor/nodeModifyTable.c --- postgresql-10-10.16/src/backend/executor/nodeModifyTable.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/executor/nodeModifyTable.c 2021-05-10 20:47:56.000000000 +0000 @@ -2135,7 +2135,6 @@ if (node->onConflictAction == ONCONFLICT_UPDATE) { ExprContext *econtext; - TupleDesc tupDesc; /* insert may only have one plan, inheritance is not expanded */ Assert(nplans == 1); @@ -2155,16 +2154,25 @@ mtstate->mt_excludedtlist = node->exclRelTlist; /* create target slot for UPDATE SET projection */ - tupDesc = ExecTypeFromTL((List *) node->onConflictSet, - resultRelInfo->ri_RelationDesc->rd_rel->relhasoids); mtstate->mt_conflproj = ExecInitExtraTupleSlot(mtstate->ps.state); - ExecSetSlotDescriptor(mtstate->mt_conflproj, tupDesc); + ExecSetSlotDescriptor(mtstate->mt_conflproj, + resultRelInfo->ri_RelationDesc->rd_att); + + /* + * The onConflictSet tlist should already have been adjusted to emit + * the table's exact column list. It could also contain resjunk + * columns, which should be evaluated but not included in the + * projection result. + */ + ExecCheckPlanOutput(resultRelInfo->ri_RelationDesc, + node->onConflictSet); /* build UPDATE SET projection state */ resultRelInfo->ri_onConflictSetProj = - ExecBuildProjectionInfo(node->onConflictSet, econtext, - mtstate->mt_conflproj, &mtstate->ps, - resultRelInfo->ri_RelationDesc->rd_att); + ExecBuildProjectionInfoExt(node->onConflictSet, econtext, + mtstate->mt_conflproj, false, + &mtstate->ps, + resultRelInfo->ri_RelationDesc->rd_att); /* build DO UPDATE WHERE clause expression */ if (node->onConflictWhere) diff -Nru postgresql-10-10.16/src/backend/libpq/be-secure-openssl.c postgresql-10-10.17/src/backend/libpq/be-secure-openssl.c --- postgresql-10-10.16/src/backend/libpq/be-secure-openssl.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/libpq/be-secure-openssl.c 2021-05-10 20:47:56.000000000 +0000 @@ -136,7 +136,6 @@ int be_tls_init(bool isServerStart) { - STACK_OF(X509_NAME) *root_cert_list = NULL; SSL_CTX *context; struct stat buf; @@ -154,6 +153,10 @@ } /* + * Create a new SSL context into which we'll load all the configuration + * settings. If we fail partway through, we can avoid memory leakage by + * freeing this context; we don't install it as active until the end. + * * We use SSLv23_method() because it can negotiate use of the highest * mutually supported protocol version, while alternatives like * TLSv1_2_method() permit only one specific version. Note that we don't @@ -320,6 +323,8 @@ */ if (ssl_ca_file[0]) { + STACK_OF(X509_NAME) * root_cert_list; + if (SSL_CTX_load_verify_locations(context, ssl_ca_file, NULL) != 1 || (root_cert_list = SSL_load_client_CA_file(ssl_ca_file)) == NULL) { @@ -329,6 +334,25 @@ ssl_ca_file, SSLerrmessage(ERR_get_error())))); goto error; } + + /* + * Tell OpenSSL to send the list of root certs we trust to clients in + * CertificateRequests. This lets a client with a keystore select the + * appropriate client certificate to send to us. Also, this ensures + * that the SSL context will "own" the root_cert_list and remember to + * free it when no longer needed. + */ + SSL_CTX_set_client_CA_list(context, root_cert_list); + + /* + * Always ask for SSL client cert, but don't fail if it's not + * presented. We might fail such connections later, depending on what + * we find in pg_hba.conf. + */ + SSL_CTX_set_verify(context, + (SSL_VERIFY_PEER | + SSL_VERIFY_CLIENT_ONCE), + verify_cb); } /*---------- @@ -368,26 +392,6 @@ } } - if (ssl_ca_file[0]) - { - /* - * Always ask for SSL client cert, but don't fail if it's not - * presented. We might fail such connections later, depending on what - * we find in pg_hba.conf. - */ - SSL_CTX_set_verify(context, - (SSL_VERIFY_PEER | - SSL_VERIFY_CLIENT_ONCE), - verify_cb); - - /* - * Tell OpenSSL to send the list of root certs we trust to clients in - * CertificateRequests. This lets a client with a keystore select the - * appropriate client certificate to send to us. - */ - SSL_CTX_set_client_CA_list(context, root_cert_list); - } - /* * Success! Replace any existing SSL_context. */ @@ -406,6 +410,7 @@ return 0; + /* Clean up by releasing working context. */ error: if (context) SSL_CTX_free(context); @@ -930,6 +935,7 @@ (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("invalid DH parameters: %s", SSLerrmessage(ERR_get_error())))); + DH_free(dh); return NULL; } if (codes & DH_CHECK_P_NOT_PRIME) @@ -937,6 +943,7 @@ ereport(isServerStart ? FATAL : LOG, (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("invalid DH parameters: p is not prime"))); + DH_free(dh); return NULL; } if ((codes & DH_NOT_SUITABLE_GENERATOR) && @@ -945,6 +952,7 @@ ereport(isServerStart ? FATAL : LOG, (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("invalid DH parameters: neither suitable generator or safe prime"))); + DH_free(dh); return NULL; } @@ -1095,8 +1103,11 @@ (errcode(ERRCODE_CONFIG_FILE_ERROR), (errmsg("DH: could not set DH parameters: %s", SSLerrmessage(ERR_get_error()))))); + DH_free(dh); return false; } + + DH_free(dh); return true; } diff -Nru postgresql-10-10.16/src/backend/parser/parse_coerce.c postgresql-10-10.17/src/backend/parser/parse_coerce.c --- postgresql-10-10.16/src/backend/parser/parse_coerce.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/parser/parse_coerce.c 2021-05-10 20:47:56.000000000 +0000 @@ -94,6 +94,7 @@ * *must* know that to avoid possibly calling hide_coercion_node on * something that wasn't generated by coerce_type. Note that if there are * multiple stacked CollateExprs, we just discard all but the topmost. + * Also, if the target type isn't collatable, we discard the CollateExpr. */ origexpr = expr; while (expr && IsA(expr, CollateExpr)) @@ -114,7 +115,7 @@ (cformat != COERCE_IMPLICIT_CAST), (result != expr && !IsA(result, Const))); - if (expr != origexpr) + if (expr != origexpr && type_is_collatable(targettype)) { /* Reinstall top CollateExpr */ CollateExpr *coll = (CollateExpr *) origexpr; @@ -381,20 +382,26 @@ { /* * If we have a COLLATE clause, we have to push the coercion - * underneath the COLLATE. This is really ugly, but there is little - * choice because the above hacks on Consts and Params wouldn't happen + * underneath the COLLATE; or discard the COLLATE if the target type + * isn't collatable. This is really ugly, but there is little choice + * because the above hacks on Consts and Params wouldn't happen * otherwise. This kluge has consequences in coerce_to_target_type. */ CollateExpr *coll = (CollateExpr *) node; - CollateExpr *newcoll = makeNode(CollateExpr); - newcoll->arg = (Expr *) - coerce_type(pstate, (Node *) coll->arg, - inputTypeId, targetTypeId, targetTypeMod, - ccontext, cformat, location); - newcoll->collOid = coll->collOid; - newcoll->location = coll->location; - return (Node *) newcoll; + result = coerce_type(pstate, (Node *) coll->arg, + inputTypeId, targetTypeId, targetTypeMod, + ccontext, cformat, location); + if (type_is_collatable(targetTypeId)) + { + CollateExpr *newcoll = makeNode(CollateExpr); + + newcoll->arg = (Expr *) result; + newcoll->collOid = coll->collOid; + newcoll->location = coll->location; + result = (Node *) newcoll; + } + return result; } pathtype = find_coercion_pathway(targetTypeId, inputTypeId, ccontext, &funcId); diff -Nru postgresql-10-10.16/src/backend/parser/parse_utilcmd.c postgresql-10-10.17/src/backend/parser/parse_utilcmd.c --- postgresql-10-10.16/src/backend/parser/parse_utilcmd.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/parser/parse_utilcmd.c 2021-05-10 20:47:56.000000000 +0000 @@ -728,7 +728,17 @@ column->identity = constraint->generated_when; saw_identity = true; - column->is_not_null = TRUE; + + /* An identity column is implicitly NOT NULL */ + if (saw_nullable && !column->is_not_null) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"", + column->colname, cxt->relation->relname), + parser_errposition(cxt->pstate, + constraint->location))); + column->is_not_null = true; + saw_nullable = true; break; } diff -Nru postgresql-10-10.16/src/backend/po/de.po postgresql-10-10.17/src/backend/po/de.po --- postgresql-10-10.16/src/backend/po/de.po 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/po/de.po 2021-05-10 20:47:56.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PostgreSQL 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2021-02-08 07:09+0000\n" +"POT-Creation-Date: 2021-05-06 21:56+0000\n" "PO-Revision-Date: 2021-02-08 14:56+0100\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -179,14 +179,14 @@ msgstr "konnte Verzeichnis »%s« nicht schließen: %s\n" #: ../common/psprintf.c:180 ../port/path.c:630 ../port/path.c:668 -#: ../port/path.c:685 access/transam/twophase.c:1316 access/transam/xlog.c:6431 +#: ../port/path.c:685 access/transam/twophase.c:1320 access/transam/xlog.c:6431 #: lib/stringinfo.c:258 libpq/auth.c:1131 libpq/auth.c:1502 libpq/auth.c:1570 #: libpq/auth.c:2088 postmaster/bgworker.c:348 postmaster/bgworker.c:967 #: postmaster/postmaster.c:2472 postmaster/postmaster.c:2494 #: postmaster/postmaster.c:4063 postmaster/postmaster.c:4779 #: postmaster/postmaster.c:4854 postmaster/postmaster.c:5586 #: postmaster/postmaster.c:5946 -#: replication/libpqwalreceiver/libpqwalreceiver.c:274 +#: replication/libpqwalreceiver/libpqwalreceiver.c:280 #: replication/logical/logical.c:175 storage/buffer/localbuf.c:436 #: storage/file/fd.c:793 storage/file/fd.c:1222 storage/file/fd.c:1340 #: storage/file/fd.c:2078 storage/ipc/procarray.c:1069 @@ -517,7 +517,7 @@ msgid "index row requires %zu bytes, maximum size is %zu" msgstr "Indexzeile benötigt %zu Bytes, Maximalgröße ist %zu" -#: access/common/printtup.c:290 tcop/fastpath.c:182 tcop/fastpath.c:532 +#: access/common/printtup.c:290 tcop/fastpath.c:182 tcop/fastpath.c:538 #: tcop/postgres.c:1749 #, c-format msgid "unsupported format code: %d" @@ -945,7 +945,7 @@ "Erstellen Sie eventuell einen Funktionsindex auf einen MD5-Hash oder verwenden Sie Volltextindizierung." #: access/nbtree/nbtpage.c:169 access/nbtree/nbtpage.c:372 -#: access/nbtree/nbtpage.c:459 parser/parse_utilcmd.c:2136 +#: access/nbtree/nbtpage.c:459 parser/parse_utilcmd.c:2146 #, c-format msgid "index \"%s\" is not a btree" msgstr "Index »%s« ist kein B-Tree" @@ -1284,12 +1284,12 @@ msgid "transaction identifier \"%s\" is already in use" msgstr "Transaktionsbezeichner »%s« wird bereits verwendet" -#: access/transam/twophase.c:419 access/transam/twophase.c:2364 +#: access/transam/twophase.c:419 access/transam/twophase.c:2376 #, c-format msgid "maximum number of prepared transactions reached" msgstr "maximale Anzahl vorbereiteter Transaktionen erreicht" -#: access/transam/twophase.c:420 access/transam/twophase.c:2365 +#: access/transam/twophase.c:420 access/transam/twophase.c:2377 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "Erhöhen Sie max_prepared_transactions (aktuell %d)." @@ -1344,84 +1344,84 @@ msgid "could not read two-phase state file \"%s\": %m" msgstr "konnte Zweiphasen-Statusdatei »%s« nicht lesen: %m" -#: access/transam/twophase.c:1317 access/transam/xlog.c:6432 +#: access/transam/twophase.c:1321 access/transam/xlog.c:6432 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Fehlgeschlagen beim Anlegen eines WAL-Leseprozessors." -#: access/transam/twophase.c:1323 +#: access/transam/twophase.c:1335 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "konnte Zweiphasen-Status nicht aus dem WAL bei %X/%X lesen" -#: access/transam/twophase.c:1331 +#: access/transam/twophase.c:1343 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "erwartete Zweiphasen-Status-Daten sind nicht im WAL bei %X/%X vorhanden" -#: access/transam/twophase.c:1568 +#: access/transam/twophase.c:1580 #, 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:1598 +#: access/transam/twophase.c:1610 #, 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:1615 access/transam/twophase.c:1628 +#: access/transam/twophase.c:1627 access/transam/twophase.c:1640 #, c-format msgid "could not write two-phase state file: %m" msgstr "konnte Zweiphasen-Statusdatei nicht schreiben: %m" -#: access/transam/twophase.c:1645 +#: access/transam/twophase.c:1657 #, c-format msgid "could not fsync two-phase state file: %m" msgstr "konnte Zweiphasen-Statusdatei nicht fsyncen: %m" -#: access/transam/twophase.c:1652 +#: access/transam/twophase.c:1664 #, c-format msgid "could not close two-phase state file: %m" msgstr "konnte Zweiphasen-Statusdatei nicht schließen: %m" -#: access/transam/twophase.c:1740 +#: access/transam/twophase.c:1752 #, c-format msgid "%u two-phase state file was written for a long-running prepared transaction" msgid_plural "%u two-phase state files were written for long-running prepared transactions" msgstr[0] "%u Zweiphasen-Statusdatei wurde für eine lange laufende vorbereitete Transaktion geschrieben" msgstr[1] "%u Zweiphasen-Statusdateien wurden für lange laufende vorbereitete Transaktionen geschrieben" -#: access/transam/twophase.c:1968 +#: access/transam/twophase.c:1980 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "Wiederherstellung der vorbereiteten Transaktion %u aus dem Shared Memory" -#: access/transam/twophase.c:2058 +#: access/transam/twophase.c:2070 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "entferne abgelaufene Zweiphasen-Statusdatei für Transaktion %u" -#: access/transam/twophase.c:2065 +#: access/transam/twophase.c:2077 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "entferne abgelaufenen Zweiphasen-Status aus dem Speicher für Transaktion %u" -#: access/transam/twophase.c:2078 +#: access/transam/twophase.c:2090 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "entferne zukünftige Zweiphasen-Statusdatei für Transaktion %u" -#: access/transam/twophase.c:2085 +#: access/transam/twophase.c:2097 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "entferne zukünftigen Zweiphasen-Status aus dem Speicher für Transaktion %u" -#: access/transam/twophase.c:2099 access/transam/twophase.c:2118 +#: access/transam/twophase.c:2111 access/transam/twophase.c:2130 #, c-format msgid "removing corrupt two-phase state file for transaction %u" msgstr "entferne verfälschte Zweiphasen-Statusdatei für Transaktion %u" -#: access/transam/twophase.c:2125 +#: access/transam/twophase.c:2137 #, c-format msgid "removing corrupt two-phase state from memory for transaction %u" msgstr "entferne verfälschten Zweiphasen-Status aus dem Speicher für Transaktion %u" @@ -1894,8 +1894,8 @@ #: commands/tablecmds.c:10536 commands/user.c:1078 commands/view.c:504 #: libpq/auth.c:329 replication/syncrep.c:1309 storage/lmgr/deadlock.c:1145 #: storage/lmgr/proc.c:1318 utils/adt/acl.c:5331 utils/misc/guc.c:5783 -#: utils/misc/guc.c:5876 utils/misc/guc.c:9906 utils/misc/guc.c:9940 -#: utils/misc/guc.c:9974 utils/misc/guc.c:10008 utils/misc/guc.c:10043 +#: utils/misc/guc.c:5876 utils/misc/guc.c:9915 utils/misc/guc.c:9949 +#: utils/misc/guc.c:9983 utils/misc/guc.c:10026 utils/misc/guc.c:10068 #, c-format msgid "%s" msgstr "%s" @@ -3415,7 +3415,7 @@ msgid "database with OID %u does not exist" msgstr "Datenbank mit OID %u existiert nicht" -#: catalog/aclchk.c:3796 catalog/aclchk.c:4640 tcop/fastpath.c:223 +#: catalog/aclchk.c:3796 catalog/aclchk.c:4640 tcop/fastpath.c:220 #: utils/fmgr/fmgr.c:2117 #, c-format msgid "function with OID %u does not exist" @@ -3426,7 +3426,7 @@ msgid "language with OID %u does not exist" msgstr "Sprache mit OID %u existiert nicht" -#: catalog/aclchk.c:4014 catalog/aclchk.c:4738 +#: catalog/aclchk.c:4014 catalog/aclchk.c:4738 commands/collationcmds.c:514 #, c-format msgid "schema with OID %u does not exist" msgstr "Schema mit OID %u existiert nicht" @@ -3738,7 +3738,7 @@ msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Leeren Sie die Tabelle »%s« gleichzeitig oder verwenden Sie TRUNCATE ... CASCADE." -#: catalog/index.c:214 parser/parse_utilcmd.c:1993 +#: catalog/index.c:214 parser/parse_utilcmd.c:2003 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "mehrere Primärschlüssel für Tabelle »%s« nicht erlaubt" @@ -3931,7 +3931,7 @@ msgstr "während einer parallelen Operation können keine temporären Tabellen erzeugt werden" #: catalog/namespace.c:4133 commands/tablespace.c:1171 commands/variable.c:64 -#: utils/misc/guc.c:10075 utils/misc/guc.c:10153 +#: utils/misc/guc.c:10100 utils/misc/guc.c:10178 #, c-format msgid "List syntax is invalid." msgstr "Die Listensyntax ist ungültig." @@ -4389,7 +4389,7 @@ #: executor/execExprInterp.c:2853 executor/execMain.c:1916 #: executor/execMain.c:1996 executor/execMain.c:2046 executor/execMain.c:2158 #: executor/execMain.c:3386 executor/nodeModifyTable.c:1437 -#: parser/parse_utilcmd.c:1236 +#: parser/parse_utilcmd.c:1246 msgid "could not convert row type" msgstr "konnte Zeilentyp nicht umwandeln" @@ -5372,17 +5372,17 @@ msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "konnte Locale-Namen »%s« nicht in Sprach-Tag umwandeln: %s" -#: commands/collationcmds.c:512 +#: commands/collationcmds.c:509 #, c-format msgid "must be superuser to import system collations" msgstr "nur Superuser können Systemsortierfolgen importieren" -#: commands/collationcmds.c:535 commands/copy.c:1825 commands/copy.c:3183 +#: commands/collationcmds.c:537 commands/copy.c:1825 commands/copy.c:3183 #, c-format msgid "could not execute command \"%s\": %m" msgstr "konnte Befehl »%s« nicht ausführen: %m" -#: commands/collationcmds.c:666 +#: commands/collationcmds.c:668 #, c-format msgid "no usable system locales were found" msgstr "keine brauchbaren System-Locales gefunden" @@ -5396,7 +5396,7 @@ msgid "database \"%s\" does not exist" msgstr "Datenbank »%s« existiert nicht" -#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:983 +#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:993 #, c-format 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" @@ -7215,7 +7215,7 @@ msgid "functions in index predicate must be marked IMMUTABLE" msgstr "Funktionen im Indexprädikat müssen als IMMUTABLE markiert sein" -#: commands/indexcmds.c:1093 parser/parse_utilcmd.c:2312 +#: commands/indexcmds.c:1093 parser/parse_utilcmd.c:2322 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "Spalte »%s«, die im Schlüssel verwendet wird, existiert nicht" @@ -7231,7 +7231,7 @@ msgstr "konnte die für den Indexausdruck zu verwendende Sortierfolge nicht bestimmen" #: commands/indexcmds.c:1184 commands/tablecmds.c:13591 commands/typecmds.c:831 -#: parser/parse_expr.c:2763 parser/parse_type.c:567 parser/parse_utilcmd.c:3366 +#: parser/parse_expr.c:2763 parser/parse_type.c:567 parser/parse_utilcmd.c:3376 #: utils/adt/misc.c:675 #, c-format msgid "collations are not supported by type %s" @@ -8147,7 +8147,7 @@ msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Verwenden Sie DROP MATERIALIZED VIEW, um eine materialisierte Sicht zu löschen." -#: commands/tablecmds.c:247 parser/parse_utilcmd.c:2064 +#: commands/tablecmds.c:247 parser/parse_utilcmd.c:2074 #, c-format msgid "index \"%s\" does not exist" msgstr "Index »%s« existiert nicht" @@ -8200,7 +8200,7 @@ msgid "cannot create table with OIDs as partition of table without OIDs" msgstr "kann Tabelle mit OIDs nicht als Partition einer Tabelle ohne OIDs erzeugen" -#: commands/tablecmds.c:788 parser/parse_utilcmd.c:3533 +#: commands/tablecmds.c:788 parser/parse_utilcmd.c:3543 #, c-format msgid "\"%s\" is not partitioned" msgstr "»%s« ist nicht partitioniert" @@ -8250,7 +8250,7 @@ msgid "cannot inherit from partition \"%s\"" msgstr "von Partition »%s« kann nicht geerbt werden" -#: commands/tablecmds.c:1825 parser/parse_utilcmd.c:2275 +#: commands/tablecmds.c:1825 parser/parse_utilcmd.c:2285 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "geerbte Relation »%s« ist keine Tabelle oder Fremdtabelle" @@ -8287,9 +8287,9 @@ #: commands/tablecmds.c:1931 commands/tablecmds.c:1954 #: commands/tablecmds.c:2159 commands/tablecmds.c:2189 -#: parser/parse_coerce.c:1650 parser/parse_coerce.c:1670 -#: parser/parse_coerce.c:1690 parser/parse_coerce.c:1736 -#: parser/parse_coerce.c:1775 parser/parse_param.c:218 +#: parser/parse_coerce.c:1657 parser/parse_coerce.c:1677 +#: parser/parse_coerce.c:1697 parser/parse_coerce.c:1743 +#: parser/parse_coerce.c:1782 parser/parse_param.c:218 #, c-format msgid "%s versus %s" msgstr "%s gegen %s" @@ -8311,13 +8311,13 @@ msgstr "geerbte Spalte »%s« hat einen Konflikt bei einem Storage-Parameter" #: commands/tablecmds.c:2065 commands/tablecmds.c:8933 -#: parser/parse_utilcmd.c:1270 parser/parse_utilcmd.c:1649 -#: parser/parse_utilcmd.c:1725 +#: parser/parse_utilcmd.c:1280 parser/parse_utilcmd.c:1659 +#: parser/parse_utilcmd.c:1735 #, c-format msgid "cannot convert whole-row table reference" msgstr "kann Verweis auf ganze Zeile der Tabelle nicht umwandeln" -#: commands/tablecmds.c:2066 parser/parse_utilcmd.c:1271 +#: commands/tablecmds.c:2066 parser/parse_utilcmd.c:1281 #, 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«." @@ -10155,9 +10155,10 @@ msgid "cannot use special role specifier in DROP ROLE" msgstr "in DROP ROLE kann kein Rollenplatzhalter verwendet werden" -#: commands/user.c:1023 commands/user.c:1180 commands/variable.c:822 -#: commands/variable.c:894 utils/adt/acl.c:5187 utils/adt/acl.c:5234 -#: utils/adt/acl.c:5262 utils/adt/acl.c:5280 utils/init/miscinit.c:512 +#: commands/user.c:1023 commands/user.c:1180 commands/variable.c:830 +#: commands/variable.c:833 commands/variable.c:915 commands/variable.c:918 +#: utils/adt/acl.c:5187 utils/adt/acl.c:5234 utils/adt/acl.c:5262 +#: utils/adt/acl.c:5280 utils/init/miscinit.c:512 #, c-format msgid "role \"%s\" does not exist" msgstr "Rolle »%s« existiert nicht" @@ -10439,7 +10440,7 @@ msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "»%s«: Truncate wird ausgesetzt wegen Sperrkonflikt" -#: commands/variable.c:165 utils/misc/guc.c:10115 utils/misc/guc.c:10177 +#: commands/variable.c:165 utils/misc/guc.c:10140 utils/misc/guc.c:10202 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Unbekanntes Schlüsselwort: »%s«." @@ -10534,7 +10535,12 @@ msgid "cannot change client_encoding during a parallel operation" msgstr "client_encoding kann nicht während einer parallelen Operation geändert werden" -#: commands/variable.c:912 +#: commands/variable.c:939 +#, c-format +msgid "permission will be denied to set role \"%s\"" +msgstr "Berechtigung fehlt, um Rolle »%s« zu setzen" + +#: commands/variable.c:944 #, c-format msgid "permission denied to set role \"%s\"" msgstr "keine Berechtigung, um Rolle »%s« zu setzen" @@ -11391,7 +11397,7 @@ msgid "duplicate trigger events specified" msgstr "mehrere Trigger-Ereignisse angegeben" -#: gram.y:5365 parser/parse_utilcmd.c:3287 parser/parse_utilcmd.c:3313 +#: gram.y:5365 parser/parse_utilcmd.c:3297 parser/parse_utilcmd.c:3323 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "Constraint, der als INITIALLY DEFERRED deklariert wurde, muss DEFERRABLE sein" @@ -11590,8 +11596,8 @@ msgid "improper use of \"*\"" msgstr "unzulässige Verwendung von »*«" -#: gram.y:15328 gram.y:15345 tsearch/spell.c:956 tsearch/spell.c:973 -#: tsearch/spell.c:990 tsearch/spell.c:1007 tsearch/spell.c:1072 +#: gram.y:15328 gram.y:15345 tsearch/spell.c:982 tsearch/spell.c:999 +#: tsearch/spell.c:1016 tsearch/spell.c:1033 tsearch/spell.c:1098 #, c-format msgid "syntax error" msgstr "Syntaxfehler" @@ -12457,182 +12463,182 @@ msgid "requested length cannot be negative" msgstr "verlangte Länge darf nicht negativ sein" -#: libpq/be-secure-openssl.c:166 +#: libpq/be-secure-openssl.c:169 #, c-format msgid "could not create SSL context: %s" msgstr "konnte SSL-Kontext nicht erzeugen: %s" -#: libpq/be-secure-openssl.c:194 +#: libpq/be-secure-openssl.c:197 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "konnte Serverzertifikatsdatei »%s« nicht laden: %s" -#: libpq/be-secure-openssl.c:203 +#: 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:212 +#: libpq/be-secure-openssl.c:215 #, c-format msgid "private key file \"%s\" is not a regular file" msgstr "private Schlüsseldatei »%s« ist keine normale Datei" -#: libpq/be-secure-openssl.c:227 +#: libpq/be-secure-openssl.c:230 #, c-format msgid "private key file \"%s\" must be owned by the database user or root" msgstr "private Schlüsseldatei »%s« muss als Eigentümer den Datenbankbenutzer oder »root« haben" -#: libpq/be-secure-openssl.c:250 +#: libpq/be-secure-openssl.c:253 #, 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:252 +#: libpq/be-secure-openssl.c:255 #, c-format msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." msgstr "Dateirechte müssen u=rw (0600) oder weniger sein, wenn der Eigentümer der Datenbankbenutzer ist, oder u=rw,g=r (0640) oder weniger, wenn der Eigentümer »root« ist." -#: libpq/be-secure-openssl.c:269 +#: libpq/be-secure-openssl.c:272 #, c-format msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "private Schlüsseldatei »%s« kann nicht neu geladen werden, weil sie eine Passphrase benötigt" -#: libpq/be-secure-openssl.c:274 +#: libpq/be-secure-openssl.c:277 #, 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:283 +#: libpq/be-secure-openssl.c:286 #, c-format msgid "check of private key failed: %s" msgstr "Überprüfung des privaten Schlüssels fehlgeschlagen: %s" -#: libpq/be-secure-openssl.c:310 +#: libpq/be-secure-openssl.c:313 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "konnte Cipher-Liste nicht setzen (keine gültigen Ciphers verfügbar)" -#: libpq/be-secure-openssl.c:328 +#: libpq/be-secure-openssl.c:333 #, 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:355 +#: libpq/be-secure-openssl.c:379 #, c-format msgid "SSL certificate revocation list file \"%s\" ignored" msgstr "SSL-Certificate-Revocation-List-Datei »%s« ignoriert" -#: libpq/be-secure-openssl.c:357 +#: libpq/be-secure-openssl.c:381 #, 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:364 +#: libpq/be-secure-openssl.c:388 #, 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:445 +#: libpq/be-secure-openssl.c:450 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "konnte SSL-Verbindung nicht initialisieren: SSL-Kontext nicht eingerichtet" -#: libpq/be-secure-openssl.c:453 +#: libpq/be-secure-openssl.c:458 #, c-format msgid "could not initialize SSL connection: %s" msgstr "konnte SSL-Verbindung nicht initialisieren: %s" -#: libpq/be-secure-openssl.c:461 +#: libpq/be-secure-openssl.c:466 #, c-format msgid "could not set SSL socket: %s" msgstr "konnte SSL-Socket nicht setzen: %s" -#: libpq/be-secure-openssl.c:516 +#: libpq/be-secure-openssl.c:521 #, c-format msgid "could not accept SSL connection: %m" msgstr "konnte SSL-Verbindung nicht annehmen: %m" -#: libpq/be-secure-openssl.c:520 libpq/be-secure-openssl.c:531 +#: libpq/be-secure-openssl.c:525 libpq/be-secure-openssl.c:536 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "konnte SSL-Verbindung nicht annehmen: EOF entdeckt" -#: libpq/be-secure-openssl.c:525 +#: libpq/be-secure-openssl.c:530 #, c-format msgid "could not accept SSL connection: %s" msgstr "konnte SSL-Verbindung nicht annehmen: %s" -#: libpq/be-secure-openssl.c:536 libpq/be-secure-openssl.c:677 -#: libpq/be-secure-openssl.c:744 +#: libpq/be-secure-openssl.c:541 libpq/be-secure-openssl.c:682 +#: libpq/be-secure-openssl.c:749 #, c-format msgid "unrecognized SSL error code: %d" msgstr "unbekannter SSL-Fehlercode: %d" -#: libpq/be-secure-openssl.c:578 +#: libpq/be-secure-openssl.c:583 #, 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:589 +#: libpq/be-secure-openssl.c:594 #, c-format msgid "SSL connection from \"%s\"" msgstr "SSL-Verbindung von »%s«" -#: libpq/be-secure-openssl.c:666 libpq/be-secure-openssl.c:728 +#: libpq/be-secure-openssl.c:671 libpq/be-secure-openssl.c:733 #, c-format msgid "SSL error: %s" msgstr "SSL-Fehler: %s" -#: libpq/be-secure-openssl.c:909 +#: libpq/be-secure-openssl.c:914 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "konnte DH-Parameterdatei »%s« nicht öffnen: %m" -#: libpq/be-secure-openssl.c:921 +#: libpq/be-secure-openssl.c:926 #, c-format msgid "could not load DH parameters file: %s" msgstr "konnte DH-Parameterdatei nicht laden: %s" -#: libpq/be-secure-openssl.c:931 +#: libpq/be-secure-openssl.c:936 #, c-format msgid "invalid DH parameters: %s" msgstr "ungültige DH-Parameter: %s" -#: libpq/be-secure-openssl.c:939 +#: libpq/be-secure-openssl.c:945 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "ungültige DH-Parameter: p ist keine Primzahl" -#: libpq/be-secure-openssl.c:947 +#: libpq/be-secure-openssl.c:954 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "ungültige DH-Parameter: weder geeigneter Generator noch sichere Primzahl" -#: libpq/be-secure-openssl.c:1088 +#: libpq/be-secure-openssl.c:1096 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: konnte DH-Parameter nicht laden" -#: libpq/be-secure-openssl.c:1096 +#: libpq/be-secure-openssl.c:1104 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: konnte DH-Parameter nicht setzen: %s" -#: libpq/be-secure-openssl.c:1120 +#: libpq/be-secure-openssl.c:1131 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: unbekannter Kurvenname: %s" -#: libpq/be-secure-openssl.c:1129 +#: libpq/be-secure-openssl.c:1140 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: konnte Schlüssel nicht erzeugen" -#: libpq/be-secure-openssl.c:1157 +#: libpq/be-secure-openssl.c:1168 msgid "no SSL error reported" msgstr "kein SSL-Fehler berichtet" -#: libpq/be-secure-openssl.c:1161 +#: libpq/be-secure-openssl.c:1172 #, c-format msgid "SSL error code %lu" msgstr "SSL-Fehlercode %lu" @@ -13480,8 +13486,8 @@ msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods »%s« wurde nicht registriert" -#: nodes/nodeFuncs.c:123 nodes/nodeFuncs.c:154 parser/parse_coerce.c:1844 -#: parser/parse_coerce.c:1872 parser/parse_coerce.c:1948 +#: nodes/nodeFuncs.c:123 nodes/nodeFuncs.c:154 parser/parse_coerce.c:1851 +#: parser/parse_coerce.c:1879 parser/parse_coerce.c:1955 #: parser/parse_expr.c:2110 parser/parse_func.c:602 parser/parse_oper.c:964 #: utils/fmgr/funcapi.c:466 #, c-format @@ -14285,102 +14291,102 @@ 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:971 parser/parse_coerce.c:1001 -#: parser/parse_coerce.c:1019 parser/parse_coerce.c:1034 +#: parser/parse_coerce.c:978 parser/parse_coerce.c:1008 +#: parser/parse_coerce.c:1026 parser/parse_coerce.c:1041 #: parser/parse_expr.c:2144 parser/parse_expr.c:2732 parser/parse_target.c:936 #, c-format msgid "cannot cast type %s to %s" msgstr "kann Typ %s nicht in Typ %s umwandeln" -#: parser/parse_coerce.c:1004 +#: parser/parse_coerce.c:1011 #, c-format msgid "Input has too few columns." msgstr "Eingabe hat zu wenige Spalten." -#: parser/parse_coerce.c:1022 +#: parser/parse_coerce.c:1029 #, c-format msgid "Cannot cast type %s to %s in column %d." msgstr "Kann in Spalte %3$d Typ %1$s nicht in Typ %2$s umwandeln." -#: parser/parse_coerce.c:1037 +#: parser/parse_coerce.c:1044 #, c-format msgid "Input has too many columns." msgstr "Eingabe hat zu viele Spalten." #. translator: first %s is name of a SQL construct, eg WHERE #. translator: first %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1080 parser/parse_coerce.c:1128 +#: parser/parse_coerce.c:1087 parser/parse_coerce.c:1135 #, c-format msgid "argument of %s must be type %s, not type %s" msgstr "Argument von %s muss Typ %s haben, nicht Typ %s" #. translator: %s is name of a SQL construct, eg WHERE #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1091 parser/parse_coerce.c:1140 +#: parser/parse_coerce.c:1098 parser/parse_coerce.c:1147 #, c-format msgid "argument of %s must not return a set" msgstr "Argument von %s darf keine Ergebnismenge zurückgeben" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1280 +#: parser/parse_coerce.c:1287 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "%s-Typen %s und %s passen nicht zusammen" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1347 +#: parser/parse_coerce.c:1354 #, c-format msgid "%s could not convert type %s to %s" msgstr "%s konnte Typ %s nicht in %s umwandeln" -#: parser/parse_coerce.c:1649 +#: parser/parse_coerce.c:1656 #, c-format msgid "arguments declared \"anyelement\" are not all alike" msgstr "als »anyelement« deklariert Argumente sind nicht alle gleich" -#: parser/parse_coerce.c:1669 +#: parser/parse_coerce.c:1676 #, c-format msgid "arguments declared \"anyarray\" are not all alike" msgstr "als »anyarray« deklarierte Argumente sind nicht alle gleich" -#: parser/parse_coerce.c:1689 +#: parser/parse_coerce.c:1696 #, c-format msgid "arguments declared \"anyrange\" are not all alike" msgstr "als »anyrange« deklarierte Argumente sind nicht alle gleich" -#: parser/parse_coerce.c:1718 parser/parse_coerce.c:1933 -#: parser/parse_coerce.c:1967 utils/fmgr/funcapi.c:425 +#: parser/parse_coerce.c:1725 parser/parse_coerce.c:1940 +#: parser/parse_coerce.c:1974 utils/fmgr/funcapi.c:425 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "als %s deklariertes Argument ist kein Array sondern Typ %s" -#: parser/parse_coerce.c:1734 parser/parse_coerce.c:1773 +#: parser/parse_coerce.c:1741 parser/parse_coerce.c:1780 #, c-format msgid "argument declared %s is not consistent with argument declared %s" msgstr "als %s deklariertes Argument ist nicht mit als %s deklariertem Argument konsistent" -#: parser/parse_coerce.c:1756 parser/parse_coerce.c:1980 +#: parser/parse_coerce.c:1763 parser/parse_coerce.c:1987 #: utils/fmgr/funcapi.c:439 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "als %s deklariertes Argument ist kein Bereichstyp sondern Typ %s" -#: parser/parse_coerce.c:1794 +#: parser/parse_coerce.c:1801 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "konnte polymorphischen Typ nicht bestimmen, weil Eingabe Typ %s hat" -#: parser/parse_coerce.c:1805 +#: parser/parse_coerce.c:1812 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "mit »anynonarray« gepaarter Typ ist ein Array-Typ: %s" -#: parser/parse_coerce.c:1815 +#: parser/parse_coerce.c:1822 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "mit »anyenum« gepaarter Typ ist kein Enum-Typ: %s" -#: parser/parse_coerce.c:1855 parser/parse_coerce.c:1885 +#: parser/parse_coerce.c:1862 parser/parse_coerce.c:1892 #, c-format msgid "could not find range type for data type %s" msgstr "konnte Bereichstyp für Datentyp %s nicht finden" @@ -15202,6 +15208,7 @@ msgstr "Array aus Typ serial ist nicht implementiert" #: parser/parse_utilcmd.c:666 parser/parse_utilcmd.c:678 +#: parser/parse_utilcmd.c:736 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "widersprüchliche NULL/NOT NULL-Deklarationen für Spalte »%s« von Tabelle »%s«" @@ -15226,264 +15233,264 @@ msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "mehrere Identitätsangaben für Spalte »%s« von Tabelle »%s«" -#: parser/parse_utilcmd.c:743 parser/parse_utilcmd.c:860 +#: parser/parse_utilcmd.c:753 parser/parse_utilcmd.c:870 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "Primärschlüssel für Fremdtabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:749 parser/parse_utilcmd.c:866 +#: parser/parse_utilcmd.c:759 parser/parse_utilcmd.c:876 #, c-format msgid "primary key constraints are not supported on partitioned tables" msgstr "Primärschlüssel für partitionierte Tabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:758 parser/parse_utilcmd.c:876 +#: parser/parse_utilcmd.c:768 parser/parse_utilcmd.c:886 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "Unique-Constraints auf Fremdtabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:764 parser/parse_utilcmd.c:882 +#: parser/parse_utilcmd.c:774 parser/parse_utilcmd.c:892 #, c-format msgid "unique constraints are not supported on partitioned tables" msgstr "Unique-Constraints auf partitionierten Tabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:781 parser/parse_utilcmd.c:912 +#: parser/parse_utilcmd.c:791 parser/parse_utilcmd.c:922 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "Fremdschlüssel-Constraints auf Fremdtabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:787 parser/parse_utilcmd.c:918 +#: parser/parse_utilcmd.c:797 parser/parse_utilcmd.c:928 #, c-format msgid "foreign key constraints are not supported on partitioned tables" msgstr "Fremdschlüssel-Constraints auf partitionierten Tabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:815 +#: parser/parse_utilcmd.c:825 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "sowohl Vorgabewert als auch Identität angegeben für Spalte »%s« von Tabelle »%s«" -#: parser/parse_utilcmd.c:892 +#: parser/parse_utilcmd.c:902 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "Exclusion-Constraints auf Fremdtabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:898 +#: parser/parse_utilcmd.c:908 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "Exclusion-Constraints auf partitionierten Tabellen werden nicht unterstützt" -#: parser/parse_utilcmd.c:970 +#: parser/parse_utilcmd.c:980 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE wird für das Erzeugen von Fremdtabellen nicht unterstützt" -#: parser/parse_utilcmd.c:1650 parser/parse_utilcmd.c:1726 +#: parser/parse_utilcmd.c:1660 parser/parse_utilcmd.c:1736 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "Index »%s« enthält einen Verweis auf die ganze Zeile der Tabelle." -#: parser/parse_utilcmd.c:2055 +#: parser/parse_utilcmd.c:2065 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "bestehender Index kann nicht in CREATE TABLE verwendet werden" -#: parser/parse_utilcmd.c:2075 +#: parser/parse_utilcmd.c:2085 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "Index »%s« gehört bereits zu einem Constraint" -#: parser/parse_utilcmd.c:2083 +#: parser/parse_utilcmd.c:2093 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "Index »%s« gehört nicht zu Tabelle »%s«" -#: parser/parse_utilcmd.c:2090 +#: parser/parse_utilcmd.c:2100 #, c-format msgid "index \"%s\" is not valid" msgstr "Index »%s« ist nicht gültig" -#: parser/parse_utilcmd.c:2096 +#: parser/parse_utilcmd.c:2106 #, c-format msgid "\"%s\" is not a unique index" msgstr "»%s« ist kein Unique Index" -#: parser/parse_utilcmd.c:2097 parser/parse_utilcmd.c:2104 -#: parser/parse_utilcmd.c:2111 parser/parse_utilcmd.c:2181 +#: parser/parse_utilcmd.c:2107 parser/parse_utilcmd.c:2114 +#: parser/parse_utilcmd.c:2121 parser/parse_utilcmd.c:2191 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "Ein Primärschlüssel oder Unique-Constraint kann nicht mit einem solchen Index erzeugt werden." -#: parser/parse_utilcmd.c:2103 +#: parser/parse_utilcmd.c:2113 #, c-format msgid "index \"%s\" contains expressions" msgstr "Index »%s« enthält Ausdrücke" -#: parser/parse_utilcmd.c:2110 +#: parser/parse_utilcmd.c:2120 #, c-format msgid "\"%s\" is a partial index" msgstr "»%s« ist ein partieller Index" -#: parser/parse_utilcmd.c:2122 +#: parser/parse_utilcmd.c:2132 #, c-format msgid "\"%s\" is a deferrable index" msgstr "»%s« ist ein aufschiebbarer Index" -#: parser/parse_utilcmd.c:2123 +#: parser/parse_utilcmd.c:2133 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "Ein nicht aufschiebbarer Constraint kann nicht mit einem aufschiebbaren Index erzeugt werden." -#: parser/parse_utilcmd.c:2180 +#: parser/parse_utilcmd.c:2190 #, c-format msgid "index \"%s\" does not have default sorting behavior" msgstr "Index »%s« hat nicht das Standardsortierverhalten" -#: parser/parse_utilcmd.c:2324 +#: parser/parse_utilcmd.c:2334 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "Spalte »%s« erscheint zweimal im Primärschlüssel-Constraint" -#: parser/parse_utilcmd.c:2330 +#: parser/parse_utilcmd.c:2340 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "Spalte »%s« erscheint zweimal im Unique-Constraint" -#: parser/parse_utilcmd.c:2552 +#: parser/parse_utilcmd.c:2562 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "Indexausdrücke und -prädikate können nur auf die zu indizierende Tabelle verweisen" -#: parser/parse_utilcmd.c:2598 +#: parser/parse_utilcmd.c:2608 #, c-format msgid "rules on materialized views are not supported" msgstr "Regeln für materialisierte Sichten werden nicht unterstützt" -#: parser/parse_utilcmd.c:2659 +#: parser/parse_utilcmd.c:2669 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "WHERE-Bedingung einer Regel kann keine Verweise auf andere Relationen enthalten" -#: parser/parse_utilcmd.c:2731 +#: parser/parse_utilcmd.c:2741 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "Regeln mit WHERE-Bedingungen können als Aktion nur SELECT, INSERT, UPDATE oder DELETE haben" -#: parser/parse_utilcmd.c:2749 parser/parse_utilcmd.c:2848 +#: parser/parse_utilcmd.c:2759 parser/parse_utilcmd.c:2858 #: rewrite/rewriteHandler.c:499 rewrite/rewriteManip.c:1015 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "UNION/INTERSECTION/EXCEPT mit Bedingung sind nicht implementiert" -#: parser/parse_utilcmd.c:2767 +#: parser/parse_utilcmd.c:2777 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "ON-SELECT-Regel kann nicht OLD verwenden" -#: parser/parse_utilcmd.c:2771 +#: parser/parse_utilcmd.c:2781 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "ON-SELECT-Regel kann nicht NEW verwenden" -#: parser/parse_utilcmd.c:2780 +#: parser/parse_utilcmd.c:2790 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "ON-INSERT-Regel kann nicht OLD verwenden" -#: parser/parse_utilcmd.c:2786 +#: parser/parse_utilcmd.c:2796 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "ON-DELETE-Regel kann nicht NEW verwenden" -#: parser/parse_utilcmd.c:2814 +#: parser/parse_utilcmd.c:2824 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "in WITH-Anfrage kann nicht auf OLD verweisen werden" -#: parser/parse_utilcmd.c:2821 +#: parser/parse_utilcmd.c:2831 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "in WITH-Anfrage kann nicht auf NEW verwiesen werden" -#: parser/parse_utilcmd.c:3259 +#: parser/parse_utilcmd.c:3269 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "falsch platzierte DEFERRABLE-Klausel" -#: parser/parse_utilcmd.c:3264 parser/parse_utilcmd.c:3279 +#: parser/parse_utilcmd.c:3274 parser/parse_utilcmd.c:3289 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "mehrere DEFERRABLE/NOT DEFERRABLE-Klauseln sind nicht erlaubt" -#: parser/parse_utilcmd.c:3274 +#: parser/parse_utilcmd.c:3284 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "falsch platzierte NOT DEFERRABLE-Klausel" -#: parser/parse_utilcmd.c:3295 +#: parser/parse_utilcmd.c:3305 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "falsch platzierte INITIALLY DEFERRED-Klausel" -#: parser/parse_utilcmd.c:3300 parser/parse_utilcmd.c:3326 +#: parser/parse_utilcmd.c:3310 parser/parse_utilcmd.c:3336 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "mehrere INITIALLY IMMEDIATE/DEFERRED-Klauseln sind nicht erlaubt" -#: parser/parse_utilcmd.c:3321 +#: parser/parse_utilcmd.c:3331 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "falsch platzierte INITIALLY IMMEDIATE-Klausel" -#: parser/parse_utilcmd.c:3512 +#: parser/parse_utilcmd.c:3522 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE gibt ein Schema an (%s) welches nicht gleich dem zu erzeugenden Schema ist (%s)" -#: parser/parse_utilcmd.c:3571 +#: parser/parse_utilcmd.c:3581 #, c-format msgid "invalid bound specification for a list partition" msgstr "ungültige Begrenzungsangabe für eine Listenpartition" -#: parser/parse_utilcmd.c:3627 +#: parser/parse_utilcmd.c:3637 #, c-format msgid "invalid bound specification for a range partition" msgstr "ungültige Begrenzungsangabe für eine Bereichspartition" -#: parser/parse_utilcmd.c:3633 +#: parser/parse_utilcmd.c:3643 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM muss genau einen Wert pro Partitionierungsspalte angeben" -#: parser/parse_utilcmd.c:3637 +#: parser/parse_utilcmd.c:3647 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO muss genau einen Wert pro Partitionierungsspalte angeben" -#: parser/parse_utilcmd.c:3684 parser/parse_utilcmd.c:3698 +#: parser/parse_utilcmd.c:3694 parser/parse_utilcmd.c:3708 #, c-format msgid "cannot specify NULL in range bound" msgstr "NULL kann nicht in der Bereichsgrenze angegeben werden" -#: parser/parse_utilcmd.c:3745 +#: parser/parse_utilcmd.c:3755 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "jede Begrenzung, die auf MAXVALUE folgt, muss auch MAXVALUE sein" -#: parser/parse_utilcmd.c:3751 +#: parser/parse_utilcmd.c:3761 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "jede Begrenzung, die auf MINVALUE folgt, muss auch MINVALUE sein" -#: parser/parse_utilcmd.c:3781 parser/parse_utilcmd.c:3793 +#: parser/parse_utilcmd.c:3791 parser/parse_utilcmd.c:3803 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "angegebener Wert kann nicht in Typ %s für Spalte »%s« umgewandelt werden" -#: parser/parse_utilcmd.c:3795 +#: parser/parse_utilcmd.c:3805 #, c-format msgid "The cast requires a non-immutable conversion." msgstr "Die Typumwandlung ist nicht »immutable«." -#: parser/parse_utilcmd.c:3796 +#: parser/parse_utilcmd.c:3806 #, c-format msgid "Try putting the literal value in single quotes." msgstr "Versuchen Sie, den Wert in einfachen Ausführungszeichen zu schreiben." @@ -16199,7 +16206,7 @@ msgstr "nicht unterstütztes Frontend-Protokoll %u.%u: Server unterstützt %u.0 bis %u.%u" #: postmaster/postmaster.c:2146 utils/misc/guc.c:5781 utils/misc/guc.c:5874 -#: utils/misc/guc.c:7224 utils/misc/guc.c:10003 utils/misc/guc.c:10037 +#: utils/misc/guc.c:7224 utils/misc/guc.c:10021 utils/misc/guc.c:10062 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "ungültiger Wert für Parameter »%s«: »%s«" @@ -16701,108 +16708,108 @@ msgid "could not clear search path: %s" msgstr "konnte Suchpfad nicht auf leer setzen: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:249 +#: replication/libpqwalreceiver/libpqwalreceiver.c:254 #, c-format msgid "invalid connection string syntax: %s" msgstr "ungültige Syntax für Verbindungszeichenkette: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:273 +#: replication/libpqwalreceiver/libpqwalreceiver.c:279 #, c-format msgid "could not parse connection string: %s" msgstr "konnte Verbindungsparameter nicht interpretieren: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:323 +#: replication/libpqwalreceiver/libpqwalreceiver.c:329 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "konnte Datenbanksystemidentifikator und Zeitleisten-ID nicht vom Primärserver empfangen: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:334 -#: replication/libpqwalreceiver/libpqwalreceiver.c:545 +#: replication/libpqwalreceiver/libpqwalreceiver.c:340 +#: replication/libpqwalreceiver/libpqwalreceiver.c:551 #, c-format msgid "invalid response from primary server" msgstr "ungültige Antwort vom Primärserver" -#: replication/libpqwalreceiver/libpqwalreceiver.c:335 +#: replication/libpqwalreceiver/libpqwalreceiver.c:341 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "Konnte System nicht identifizieren: %d Zeilen und %d Felder erhalten, %d Zeilen und %d oder mehr Felder erwartet." -#: replication/libpqwalreceiver/libpqwalreceiver.c:401 #: replication/libpqwalreceiver/libpqwalreceiver.c:407 -#: replication/libpqwalreceiver/libpqwalreceiver.c:432 +#: replication/libpqwalreceiver/libpqwalreceiver.c:413 +#: replication/libpqwalreceiver/libpqwalreceiver.c:438 #, c-format msgid "could not start WAL streaming: %s" msgstr "konnte WAL-Streaming nicht starten: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:455 +#: replication/libpqwalreceiver/libpqwalreceiver.c:461 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "konnte End-of-Streaming-Nachricht nicht an Primärserver senden: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:477 +#: replication/libpqwalreceiver/libpqwalreceiver.c:483 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "unerwartete Ergebnismenge nach End-of-Streaming" -#: replication/libpqwalreceiver/libpqwalreceiver.c:491 +#: replication/libpqwalreceiver/libpqwalreceiver.c:497 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "Fehler beim Beenden des COPY-Datenstroms: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:500 +#: replication/libpqwalreceiver/libpqwalreceiver.c:506 #, c-format msgid "error reading result of streaming command: %s" msgstr "Fehler beim Lesen des Ergebnisses von Streaming-Befehl: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:508 -#: replication/libpqwalreceiver/libpqwalreceiver.c:746 +#: replication/libpqwalreceiver/libpqwalreceiver.c:514 +#: replication/libpqwalreceiver/libpqwalreceiver.c:752 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "unerwartetes Ergebnis nach CommandComplete: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:534 +#: replication/libpqwalreceiver/libpqwalreceiver.c:540 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "konnte Zeitleisten-History-Datei nicht vom Primärserver empfangen: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:546 +#: replication/libpqwalreceiver/libpqwalreceiver.c:552 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "1 Tupel mit 2 Feldern erwartet, %d Tupel mit %d Feldern erhalten." -#: replication/libpqwalreceiver/libpqwalreceiver.c:710 -#: replication/libpqwalreceiver/libpqwalreceiver.c:761 +#: replication/libpqwalreceiver/libpqwalreceiver.c:716 #: replication/libpqwalreceiver/libpqwalreceiver.c:767 +#: replication/libpqwalreceiver/libpqwalreceiver.c:773 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "konnte keine Daten vom WAL-Stream empfangen: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:786 +#: replication/libpqwalreceiver/libpqwalreceiver.c:792 #, c-format msgid "could not send data to WAL stream: %s" msgstr "konnte keine Daten an den WAL-Stream senden: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:835 +#: replication/libpqwalreceiver/libpqwalreceiver.c:841 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "konnte Replikations-Slot »%s« nicht erzeugen: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:869 +#: replication/libpqwalreceiver/libpqwalreceiver.c:875 #, c-format msgid "invalid query response" msgstr "ungültige Antwort auf Anfrage" -#: replication/libpqwalreceiver/libpqwalreceiver.c:870 +#: replication/libpqwalreceiver/libpqwalreceiver.c:876 #, c-format msgid "Expected %d fields, got %d fields." msgstr "%d Felder erwartet, %d Feldern erhalten." -#: replication/libpqwalreceiver/libpqwalreceiver.c:939 +#: replication/libpqwalreceiver/libpqwalreceiver.c:945 #, c-format msgid "the query interface requires a database connection" msgstr "Ausführen von Anfragen benötigt eine Datenbankverbindung" -#: replication/libpqwalreceiver/libpqwalreceiver.c:970 +#: replication/libpqwalreceiver/libpqwalreceiver.c:976 msgid "empty query" msgstr "leere Anfrage" @@ -17585,7 +17592,7 @@ msgid "received replication command: %s" msgstr "Replikationsbefehl empfangen: %s" -#: replication/walsender.c:1495 tcop/fastpath.c:281 tcop/postgres.c:1020 +#: replication/walsender.c:1495 tcop/fastpath.c:287 tcop/postgres.c:1020 #: tcop/postgres.c:1330 tcop/postgres.c:1589 tcop/postgres.c:1994 #: tcop/postgres.c:2362 tcop/postgres.c:2437 #, c-format @@ -18462,12 +18469,12 @@ msgid "requested shared memory size overflows size_t" msgstr "angeforderte Shared-Memory-Größe übersteigt Kapazität von size_t" -#: storage/ipc/standby.c:658 tcop/postgres.c:3024 +#: storage/ipc/standby.c:673 tcop/postgres.c:3024 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "storniere Anfrage wegen Konflikt mit der Wiederherstellung" -#: storage/ipc/standby.c:659 tcop/postgres.c:2294 +#: storage/ipc/standby.c:674 tcop/postgres.c:2294 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "Benutzertransaktion hat Verklemmung (Deadlock) mit Wiederherstellung verursacht." @@ -18867,38 +18874,43 @@ msgid "could not open file \"%s\" (target block %u): %m" msgstr "konnte Datei »%s« nicht öffnen (Zielblock %u): %m" -#: tcop/fastpath.c:111 tcop/fastpath.c:463 tcop/fastpath.c:593 +#: tcop/fastpath.c:111 tcop/fastpath.c:469 tcop/fastpath.c:599 #, c-format msgid "invalid argument size %d in function call message" msgstr "ungültige Argumentgröße %d in Funktionsaufruf-Message" -#: tcop/fastpath.c:309 +#: tcop/fastpath.c:227 +#, c-format +msgid "cannot call function %s via fastpath interface" +msgstr "Funktion %s kann nicht via Fastpath-Interface aufgerufen werden" + +#: tcop/fastpath.c:315 #, c-format msgid "fastpath function call: \"%s\" (OID %u)" msgstr "Fastpath-Funktionsaufruf: »%s« (OID %u)" -#: tcop/fastpath.c:391 tcop/postgres.c:1192 tcop/postgres.c:1455 +#: tcop/fastpath.c:397 tcop/postgres.c:1192 tcop/postgres.c:1455 #: tcop/postgres.c:1835 tcop/postgres.c:2053 #, c-format msgid "duration: %s ms" msgstr "Dauer: %s ms" -#: tcop/fastpath.c:395 +#: tcop/fastpath.c:401 #, c-format msgid "duration: %s ms fastpath function call: \"%s\" (OID %u)" msgstr "Dauer: %s ms Fastpath-Funktionsaufruf: »%s« (OID %u)" -#: tcop/fastpath.c:431 tcop/fastpath.c:558 +#: tcop/fastpath.c:437 tcop/fastpath.c:564 #, c-format msgid "function call message contains %d arguments but function requires %d" msgstr "Funktionsaufruf-Message enthält %d Argumente, aber Funktion benötigt %d" -#: tcop/fastpath.c:439 +#: tcop/fastpath.c:445 #, c-format msgid "function call message contains %d argument formats but %d arguments" msgstr "Funktionsaufruf-Message enthält %d Argumentformate aber %d Argumente" -#: tcop/fastpath.c:526 tcop/fastpath.c:609 +#: tcop/fastpath.c:532 tcop/fastpath.c:615 #, c-format msgid "incorrect binary data format in function argument %d" msgstr "falsches Binärdatenformat in Funktionsargument %d" @@ -19347,12 +19359,12 @@ msgstr "Parameter »Dictionary« fehlt" #: tsearch/spell.c:380 tsearch/spell.c:397 tsearch/spell.c:406 -#: tsearch/spell.c:1036 +#: tsearch/spell.c:1062 #, c-format msgid "invalid affix flag \"%s\"" msgstr "ungültiges Affix-Flag »%s«" -#: tsearch/spell.c:384 tsearch/spell.c:1040 +#: tsearch/spell.c:384 tsearch/spell.c:1066 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "Affix-Flag »%s« ist außerhalb des gültigen Bereichs" @@ -19372,33 +19384,33 @@ msgid "could not open dictionary file \"%s\": %m" msgstr "konnte Wörterbuchdatei »%s« nicht öffnen: %m" -#: tsearch/spell.c:742 utils/adt/regexp.c:208 +#: tsearch/spell.c:763 utils/adt/regexp.c:208 #, c-format msgid "invalid regular expression: %s" msgstr "ungültiger regulärer Ausdruck: %s" -#: tsearch/spell.c:1163 tsearch/spell.c:1175 tsearch/spell.c:1729 -#: tsearch/spell.c:1734 tsearch/spell.c:1739 +#: tsearch/spell.c:1189 tsearch/spell.c:1201 tsearch/spell.c:1755 +#: tsearch/spell.c:1760 tsearch/spell.c:1765 #, c-format msgid "invalid affix alias \"%s\"" msgstr "ungültiges Affixalias »%s«" -#: tsearch/spell.c:1216 tsearch/spell.c:1287 tsearch/spell.c:1431 +#: tsearch/spell.c:1242 tsearch/spell.c:1313 tsearch/spell.c:1457 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "konnte Affixdatei »%s« nicht öffnen: %m" -#: tsearch/spell.c:1270 +#: tsearch/spell.c:1296 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "Ispell-Wörterbuch unterstützt nur die Flag-Werte »default«, »long« und »num«" -#: tsearch/spell.c:1314 +#: tsearch/spell.c:1340 #, c-format msgid "invalid number of flag vector aliases" msgstr "ungültige Anzahl Flag-Vektor-Aliasse" -#: tsearch/spell.c:1547 +#: tsearch/spell.c:1573 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "Affixdatei enthält Befehle im alten und im neuen Stil" @@ -19982,8 +19994,8 @@ msgid "date/time value \"current\" is no longer supported" msgstr "Datum/Zeitwert »current« wird nicht mehr unterstützt" -#: utils/adt/date.c:173 utils/adt/date.c:181 utils/adt/formatting.c:3578 -#: utils/adt/formatting.c:3587 +#: utils/adt/date.c:173 utils/adt/date.c:181 utils/adt/formatting.c:3621 +#: utils/adt/formatting.c:3630 #, c-format msgid "date out of range: \"%s\"" msgstr "date ist außerhalb des gültigen Bereichs: »%s«" @@ -20007,8 +20019,8 @@ #: utils/adt/date.c:328 utils/adt/date.c:351 utils/adt/date.c:377 #: utils/adt/date.c:1093 utils/adt/date.c:1139 utils/adt/date.c:1728 #: utils/adt/date.c:1759 utils/adt/date.c:1788 utils/adt/date.c:2525 -#: utils/adt/datetime.c:1688 utils/adt/formatting.c:3453 -#: utils/adt/formatting.c:3485 utils/adt/formatting.c:3553 +#: utils/adt/datetime.c:1688 utils/adt/formatting.c:3496 +#: utils/adt/formatting.c:3528 utils/adt/formatting.c:3596 #: utils/adt/json.c:1540 utils/adt/json.c:1562 utils/adt/jsonb.c:825 #: utils/adt/jsonb.c:849 utils/adt/nabstime.c:459 utils/adt/nabstime.c:502 #: utils/adt/nabstime.c:532 utils/adt/nabstime.c:575 utils/adt/timestamp.c:231 @@ -20481,37 +20493,37 @@ msgid "localized string format value too long" msgstr "lokalisierter Formatwert ist zu lang" -#: utils/adt/formatting.c:3083 +#: utils/adt/formatting.c:3126 #, c-format msgid "formatting field \"%s\" is only supported in to_char" msgstr "Formatfeld »%s« wird nur in to_char unterstützt" -#: utils/adt/formatting.c:3194 +#: utils/adt/formatting.c:3237 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "ungültige Eingabe für »Y,YYY«" -#: utils/adt/formatting.c:3696 +#: utils/adt/formatting.c:3739 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "Stunde »%d« ist bei einer 12-Stunden-Uhr ungültig" -#: utils/adt/formatting.c:3698 +#: utils/adt/formatting.c:3741 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Verwenden Sie die 24-Stunden-Uhr oder geben Sie eine Stunde zwischen 1 und 12 an." -#: utils/adt/formatting.c:3807 +#: utils/adt/formatting.c:3850 #, c-format msgid "cannot calculate day of year without year information" msgstr "kann Tag des Jahres nicht berechnen ohne Jahrinformationen" -#: utils/adt/formatting.c:4674 +#: utils/adt/formatting.c:4717 #, c-format msgid "\"EEEE\" not supported for input" msgstr "»E« wird nicht bei der Eingabe unterstützt" -#: utils/adt/formatting.c:4686 +#: utils/adt/formatting.c:4729 #, c-format msgid "\"RN\" not supported for input" msgstr "»RN« wird nicht bei der Eingabe unterstützt" @@ -22464,17 +22476,17 @@ msgid "cached plan must not change result type" msgstr "gecachter Plan darf den Ergebnistyp nicht ändern" -#: utils/cache/relcache.c:5938 +#: utils/cache/relcache.c:5939 #, 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:5940 +#: utils/cache/relcache.c:5941 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Setze trotzdem fort, aber irgendwas stimmt nicht." -#: utils/cache/relcache.c:6260 +#: utils/cache/relcache.c:6261 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "konnte Cache-Datei »%s« nicht löschen: %m" @@ -23437,8 +23449,8 @@ 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:1029 -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." +msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." +msgstr "Schreibt volle Seiten in den WAL, sobald sie nach einem Checkpoint geändert werden, auch für eine nicht kritische Änderung." #: utils/misc/guc.c:1039 msgid "Compresses full-page writes written in WAL file." @@ -24749,7 +24761,7 @@ #: utils/misc/guc.c:5979 utils/misc/guc.c:6758 utils/misc/guc.c:6811 #: utils/misc/guc.c:6862 utils/misc/guc.c:7195 utils/misc/guc.c:7954 -#: utils/misc/guc.c:8122 utils/misc/guc.c:9823 +#: utils/misc/guc.c:8122 utils/misc/guc.c:9832 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "unbekannter Konfigurationsparameter »%s«" @@ -24764,7 +24776,7 @@ msgid "parameter \"%s\" cannot be changed now" msgstr "Parameter »%s« kann jetzt nicht geändert werden" -#: utils/misc/guc.c:6045 utils/misc/guc.c:6091 utils/misc/guc.c:9839 +#: utils/misc/guc.c:6045 utils/misc/guc.c:6091 utils/misc/guc.c:9848 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "keine Berechtigung, um Parameter »%s« zu setzen" @@ -24824,47 +24836,47 @@ msgid "while setting parameter \"%s\" to \"%s\"" msgstr "beim Setzen von Parameter »%s« auf »%s«" -#: utils/misc/guc.c:9453 +#: utils/misc/guc.c:9455 #, c-format msgid "parameter \"%s\" could not be set" msgstr "Parameter »%s« kann nicht gesetzt werden" -#: utils/misc/guc.c:9543 +#: utils/misc/guc.c:9547 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "konnte Wert von Parameter »%s« nicht lesen" -#: utils/misc/guc.c:9901 utils/misc/guc.c:9935 +#: utils/misc/guc.c:9910 utils/misc/guc.c:9944 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "ungültiger Wert für Parameter »%s«: %d" -#: utils/misc/guc.c:9969 +#: utils/misc/guc.c:9978 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "ungültiger Wert für Parameter »%s«: %g" -#: utils/misc/guc.c:10253 +#: utils/misc/guc.c:10279 #, 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:10265 +#: utils/misc/guc.c:10291 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour wird von dieser Installation nicht unterstützt" -#: utils/misc/guc.c:10278 +#: utils/misc/guc.c:10304 #, c-format msgid "SSL is not supported by this build" msgstr "SSL wird von dieser Installation nicht unterstützt" -#: utils/misc/guc.c:10290 +#: utils/misc/guc.c:10316 #, 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:10302 +#: utils/misc/guc.c:10328 #, 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." diff -Nru postgresql-10-10.16/src/backend/po/fr.po postgresql-10-10.17/src/backend/po/fr.po --- postgresql-10-10.16/src/backend/po/fr.po 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/po/fr.po 2021-05-10 20:47:56.000000000 +0000 @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PostgreSQL 9.6\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2021-02-07 01:10+0000\n" -"PO-Revision-Date: 2021-02-07 17:35+0100\n" +"POT-Creation-Date: 2021-04-30 20:56+0000\n" +"PO-Revision-Date: 2021-05-02 17:27+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -162,8 +162,8 @@ msgid "could not close directory \"%s\": %s\n" msgstr "n'a pas pu fermer le répertoire « %s » : %s\n" -#: ../common/psprintf.c:180 ../port/path.c:630 ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1316 access/transam/xlog.c:6431 lib/stringinfo.c:258 libpq/auth.c:1131 libpq/auth.c:1502 libpq/auth.c:1570 libpq/auth.c:2088 postmaster/bgworker.c:348 postmaster/bgworker.c:967 postmaster/postmaster.c:2472 postmaster/postmaster.c:2494 postmaster/postmaster.c:4063 postmaster/postmaster.c:4779 postmaster/postmaster.c:4854 -#: postmaster/postmaster.c:5586 postmaster/postmaster.c:5946 replication/libpqwalreceiver/libpqwalreceiver.c:274 replication/logical/logical.c:175 storage/buffer/localbuf.c:436 storage/file/fd.c:793 storage/file/fd.c:1222 storage/file/fd.c:1340 storage/file/fd.c:2078 storage/ipc/procarray.c:1069 storage/ipc/procarray.c:1557 storage/ipc/procarray.c:1564 storage/ipc/procarray.c:1987 storage/ipc/procarray.c:2598 utils/adt/formatting.c:1571 +#: ../common/psprintf.c:180 ../port/path.c:630 ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1320 access/transam/xlog.c:6431 lib/stringinfo.c:258 libpq/auth.c:1131 libpq/auth.c:1502 libpq/auth.c:1570 libpq/auth.c:2088 postmaster/bgworker.c:348 postmaster/bgworker.c:967 postmaster/postmaster.c:2472 postmaster/postmaster.c:2494 postmaster/postmaster.c:4063 postmaster/postmaster.c:4779 postmaster/postmaster.c:4854 +#: postmaster/postmaster.c:5586 postmaster/postmaster.c:5946 replication/libpqwalreceiver/libpqwalreceiver.c:280 replication/logical/logical.c:175 storage/buffer/localbuf.c:436 storage/file/fd.c:793 storage/file/fd.c:1222 storage/file/fd.c:1340 storage/file/fd.c:2078 storage/ipc/procarray.c:1069 storage/ipc/procarray.c:1557 storage/ipc/procarray.c:1564 storage/ipc/procarray.c:1987 storage/ipc/procarray.c:2598 utils/adt/formatting.c:1571 #: utils/adt/formatting.c:1696 utils/adt/formatting.c:1822 utils/adt/pg_locale.c:470 utils/adt/pg_locale.c:634 utils/adt/regexp.c:223 utils/adt/varlena.c:4703 utils/adt/varlena.c:4724 utils/fmgr/dfmgr.c:221 utils/hash/dynahash.c:444 utils/hash/dynahash.c:553 utils/hash/dynahash.c:1065 utils/mb/mbutils.c:382 utils/mb/mbutils.c:409 utils/mb/mbutils.c:738 utils/mb/mbutils.c:764 utils/misc/guc.c:4005 utils/misc/guc.c:4021 utils/misc/guc.c:4034 #: utils/misc/guc.c:7039 utils/misc/tzparser.c:468 utils/mmgr/aset.c:404 utils/mmgr/dsa.c:701 utils/mmgr/dsa.c:723 utils/mmgr/dsa.c:804 utils/mmgr/mcxt.c:725 utils/mmgr/mcxt.c:760 utils/mmgr/mcxt.c:797 utils/mmgr/mcxt.c:834 utils/mmgr/mcxt.c:868 utils/mmgr/mcxt.c:897 utils/mmgr/mcxt.c:931 utils/mmgr/mcxt.c:982 utils/mmgr/mcxt.c:1016 utils/mmgr/mcxt.c:1050 #, c-format @@ -475,7 +475,7 @@ msgid "index row requires %zu bytes, maximum size is %zu" msgstr "la ligne index requiert %zu octets, la taille maximum est %zu" -#: access/common/printtup.c:290 tcop/fastpath.c:182 tcop/fastpath.c:532 tcop/postgres.c:1749 +#: access/common/printtup.c:290 tcop/fastpath.c:182 tcop/fastpath.c:538 tcop/postgres.c:1749 #, c-format msgid "unsupported format code: %d" msgstr "code de format non supporté : %d" @@ -861,7 +861,7 @@ "Utilisez un index sur le hachage MD5 de la valeur ou passez à l'indexation\n" "de la recherche plein texte." -#: access/nbtree/nbtpage.c:169 access/nbtree/nbtpage.c:372 access/nbtree/nbtpage.c:459 parser/parse_utilcmd.c:2136 +#: access/nbtree/nbtpage.c:169 access/nbtree/nbtpage.c:372 access/nbtree/nbtpage.c:459 parser/parse_utilcmd.c:2146 #, c-format msgid "index \"%s\" is not a btree" msgstr "l'index « %s » n'est pas un btree" @@ -1200,12 +1200,12 @@ msgid "transaction identifier \"%s\" is already in use" msgstr "l'identifiant de la transaction « %s » est déjà utilisé" -#: access/transam/twophase.c:419 access/transam/twophase.c:2364 +#: access/transam/twophase.c:419 access/transam/twophase.c:2376 #, c-format msgid "maximum number of prepared transactions reached" msgstr "nombre maximum de transactions préparées obtenu" -#: access/transam/twophase.c:420 access/transam/twophase.c:2365 +#: access/transam/twophase.c:420 access/transam/twophase.c:2377 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "Augmentez max_prepared_transactions (actuellement %d)." @@ -1270,92 +1270,92 @@ "n'a pas pu lire le fichier d'état de la validation en deux phases nommé\n" "« %s » : %m" -#: access/transam/twophase.c:1317 access/transam/xlog.c:6432 +#: access/transam/twophase.c:1321 access/transam/xlog.c:6432 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Échec lors de l'allocation d'un processeur de lecture de journaux de transactions." -#: access/transam/twophase.c:1323 +#: access/transam/twophase.c:1335 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "n'a pas pu lire le fichier d'état de la validation en deux phases depuis les journaux de transactions à %X/%X" -#: access/transam/twophase.c:1331 +#: access/transam/twophase.c:1343 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "" "le fichier d'état de la validation en deux phases attendu n'est pas présent\n" "dans les journaux de transaction à %X/%X" -#: access/transam/twophase.c:1568 +#: access/transam/twophase.c:1580 #, c-format msgid "could not remove two-phase state file \"%s\": %m" msgstr "" "n'a pas pu supprimer le fichier d'état de la validation en deux phases\n" "« %s » : %m" -#: access/transam/twophase.c:1598 +#: access/transam/twophase.c:1610 #, c-format msgid "could not recreate two-phase state file \"%s\": %m" msgstr "" "n'a pas pu re-créer le fichier d'état de la validation en deux phases nommé\n" "« %s » : %m" -#: access/transam/twophase.c:1615 access/transam/twophase.c:1628 +#: access/transam/twophase.c:1627 access/transam/twophase.c:1640 #, c-format msgid "could not write two-phase state file: %m" msgstr "n'a pas pu écrire dans le fichier d'état de la validation en deux phases : %m" -#: access/transam/twophase.c:1645 +#: access/transam/twophase.c:1657 #, c-format msgid "could not fsync two-phase state file: %m" msgstr "" "n'a pas pu synchroniser sur disque (fsync) le fichier d'état de la\n" "validation en deux phases : %m" -#: access/transam/twophase.c:1652 +#: access/transam/twophase.c:1664 #, c-format msgid "could not close two-phase state file: %m" msgstr "n'a pas pu fermer le fichier d'état de la validation en deux phases : %m" -#: access/transam/twophase.c:1740 +#: access/transam/twophase.c:1752 #, c-format msgid "%u two-phase state file was written for a long-running prepared transaction" msgid_plural "%u two-phase state files were written for long-running prepared transactions" msgstr[0] "le fichier d'état de la validation en deux phases %u a été écrit pour une transaction préparée de longue durée" msgstr[1] "les fichiers d'état de la validation en deux phases %u a été écrit pour des transactions préparées de longue durée" -#: access/transam/twophase.c:1968 +#: access/transam/twophase.c:1980 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "récupération de la transaction préparée %u à partir de la mémoire partagée" -#: access/transam/twophase.c:2058 +#: access/transam/twophase.c:2070 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "suppression du vieux fichier d'état de la validation en deux phases pour la transaction %u" -#: access/transam/twophase.c:2065 +#: access/transam/twophase.c:2077 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "suppression du vieux fichier d'état de la validation en deux phases de la mémoire pour la transaction %u" -#: access/transam/twophase.c:2078 +#: access/transam/twophase.c:2090 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "suppression du futur fichier d'état de la validation en deux phases pour la transaction %u" -#: access/transam/twophase.c:2085 +#: access/transam/twophase.c:2097 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "suppression du futur fichier d'état de la validation en deux phases en mémoire pour la transaction %u" -#: access/transam/twophase.c:2099 access/transam/twophase.c:2118 +#: access/transam/twophase.c:2111 access/transam/twophase.c:2130 #, c-format msgid "removing corrupt two-phase state file for transaction %u" msgstr "suppression du fichier d'état corrompu de la validation en deux phases pour la transaction %u" -#: access/transam/twophase.c:2125 +#: access/transam/twophase.c:2137 #, c-format msgid "removing corrupt two-phase state from memory for transaction %u" msgstr "" @@ -1869,7 +1869,7 @@ msgstr "le paramètre « %s » requiert une valeur temporelle" #: access/transam/xlog.c:5474 catalog/dependency.c:985 catalog/dependency.c:986 catalog/dependency.c:992 catalog/dependency.c:993 catalog/dependency.c:1004 catalog/dependency.c:1005 commands/tablecmds.c:951 commands/tablecmds.c:10536 commands/user.c:1078 commands/view.c:504 libpq/auth.c:329 replication/syncrep.c:1309 storage/lmgr/deadlock.c:1145 storage/lmgr/proc.c:1318 utils/adt/acl.c:5331 utils/misc/guc.c:5783 utils/misc/guc.c:5876 -#: utils/misc/guc.c:9906 utils/misc/guc.c:9940 utils/misc/guc.c:9974 utils/misc/guc.c:10008 utils/misc/guc.c:10043 +#: utils/misc/guc.c:9915 utils/misc/guc.c:9949 utils/misc/guc.c:9983 utils/misc/guc.c:10026 utils/misc/guc.c:10068 #, c-format msgid "%s" msgstr "%s" @@ -3358,7 +3358,7 @@ msgid "database with OID %u does not exist" msgstr "la base de données d'OID %u n'existe pas" -#: catalog/aclchk.c:3796 catalog/aclchk.c:4640 tcop/fastpath.c:223 utils/fmgr/fmgr.c:2117 +#: catalog/aclchk.c:3796 catalog/aclchk.c:4640 tcop/fastpath.c:220 utils/fmgr/fmgr.c:2117 #, c-format msgid "function with OID %u does not exist" msgstr "la fonction d'OID %u n'existe pas" @@ -3368,7 +3368,7 @@ msgid "language with OID %u does not exist" msgstr "le langage d'OID %u n'existe pas" -#: catalog/aclchk.c:4014 catalog/aclchk.c:4738 +#: catalog/aclchk.c:4014 catalog/aclchk.c:4738 commands/collationcmds.c:514 #, c-format msgid "schema with OID %u does not exist" msgstr "le schéma d'OID %u n'existe pas" @@ -3633,12 +3633,12 @@ msgid "cannot use column references in default expression" msgstr "ne peut pas utiliser les références de colonnes dans l'expression par défaut" -#: catalog/heap.c:2681 rewrite/rewriteHandler.c:1170 +#: catalog/heap.c:2681 rewrite/rewriteHandler.c:1164 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "la colonne « %s » est de type %s alors que l'expression par défaut est de type %s" -#: catalog/heap.c:2686 commands/prepare.c:384 parser/parse_node.c:430 parser/parse_target.c:590 parser/parse_target.c:840 parser/parse_target.c:850 rewrite/rewriteHandler.c:1175 +#: catalog/heap.c:2686 commands/prepare.c:384 parser/parse_node.c:430 parser/parse_target.c:590 parser/parse_target.c:840 parser/parse_target.c:850 rewrite/rewriteHandler.c:1169 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Vous devez réécrire l'expression ou lui appliquer une transformation de type." @@ -3675,7 +3675,7 @@ msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Tronquez la table « %s » en même temps, ou utilisez TRUNCATE ... CASCADE." -#: catalog/index.c:214 parser/parse_utilcmd.c:1993 +#: catalog/index.c:214 parser/parse_utilcmd.c:2003 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "les clés primaires multiples ne sont pas autorisées pour la table « %s »" @@ -3862,7 +3862,7 @@ msgid "cannot create temporary tables during a parallel operation" msgstr "ne peut pas créer de tables temporaires pendant une opération parallèle" -#: catalog/namespace.c:4133 commands/tablespace.c:1171 commands/variable.c:64 utils/misc/guc.c:10075 utils/misc/guc.c:10153 +#: catalog/namespace.c:4133 commands/tablespace.c:1171 commands/variable.c:64 utils/misc/guc.c:10100 utils/misc/guc.c:10178 #, c-format msgid "List syntax is invalid." msgstr "La syntaxe de la liste est invalide." @@ -4303,7 +4303,7 @@ msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "la partition « %s » surchargerait la partition « %s »" -#: catalog/partition.c:942 catalog/partition.c:1135 commands/analyze.c:1486 commands/copy.c:2562 commands/tablecmds.c:8924 executor/execExprInterp.c:2853 executor/execMain.c:1916 executor/execMain.c:1996 executor/execMain.c:2046 executor/execMain.c:2158 executor/execMain.c:3386 executor/nodeModifyTable.c:1437 parser/parse_utilcmd.c:1236 +#: catalog/partition.c:942 catalog/partition.c:1135 commands/analyze.c:1486 commands/copy.c:2562 commands/tablecmds.c:8924 executor/execExprInterp.c:2853 executor/execMain.c:1916 executor/execMain.c:1996 executor/execMain.c:2046 executor/execMain.c:2158 executor/execMain.c:3386 executor/nodeModifyTable.c:1437 parser/parse_utilcmd.c:1246 msgid "could not convert row type" msgstr "n'a pas pu convertir le type de ligne" @@ -5312,17 +5312,17 @@ msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "n'a pas pu convertir le nom de locale « %s » en balise de langage : %s" -#: commands/collationcmds.c:512 +#: commands/collationcmds.c:509 #, c-format msgid "must be superuser to import system collations" msgstr "doit être super-utilisateur pour importer les collationnements systèmes" -#: commands/collationcmds.c:535 commands/copy.c:1825 commands/copy.c:3183 +#: commands/collationcmds.c:537 commands/copy.c:1825 commands/copy.c:3183 #, c-format msgid "could not execute command \"%s\": %m" msgstr "n'a pas pu exécuter la commande « %s » : %m" -#: commands/collationcmds.c:666 +#: commands/collationcmds.c:668 #, c-format msgid "no usable system locales were found" msgstr "aucune locale système utilisable n'a été trouvée" @@ -5332,7 +5332,7 @@ msgid "database \"%s\" does not exist" msgstr "la base de données « %s » n'existe pas" -#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:983 +#: commands/comment.c:101 commands/seclabel.c:117 parser/parse_utilcmd.c:993 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni un type composite, ni une table distante" @@ -7189,7 +7189,7 @@ msgid "functions in index predicate must be marked IMMUTABLE" msgstr "les fonctions dans un prédicat d'index doivent être marquées comme IMMUTABLE" -#: commands/indexcmds.c:1093 parser/parse_utilcmd.c:2312 +#: commands/indexcmds.c:1093 parser/parse_utilcmd.c:2322 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "la colonne « %s » nommée dans la clé n'existe pas" @@ -7206,7 +7206,7 @@ msgid "could not determine which collation to use for index expression" msgstr "n'a pas pu déterminer le collationnement à utiliser pour l'expression d'index" -#: commands/indexcmds.c:1184 commands/tablecmds.c:13591 commands/typecmds.c:831 parser/parse_expr.c:2763 parser/parse_type.c:567 parser/parse_utilcmd.c:3366 utils/adt/misc.c:675 +#: commands/indexcmds.c:1184 commands/tablecmds.c:13591 commands/typecmds.c:831 parser/parse_expr.c:2763 parser/parse_type.c:567 parser/parse_utilcmd.c:3376 utils/adt/misc.c:675 #, c-format msgid "collations are not supported by type %s" msgstr "les collationnements ne sont pas supportés par le type %s" @@ -8135,7 +8135,7 @@ msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Utilisez DROP MATERIALIZED VIEW pour supprimer une vue matérialisée." -#: commands/tablecmds.c:247 parser/parse_utilcmd.c:2064 +#: commands/tablecmds.c:247 parser/parse_utilcmd.c:2074 #, c-format msgid "index \"%s\" does not exist" msgstr "l'index « %s » n'existe pas" @@ -8189,7 +8189,7 @@ msgid "cannot create table with OIDs as partition of table without OIDs" msgstr "ne peut pas créer une table avec OID comme partition d'une table sans OID" -#: commands/tablecmds.c:788 parser/parse_utilcmd.c:3533 +#: commands/tablecmds.c:788 parser/parse_utilcmd.c:3543 #, c-format msgid "\"%s\" is not partitioned" msgstr "« %s » n'est pas partitionné" @@ -8239,7 +8239,7 @@ msgid "cannot inherit from partition \"%s\"" msgstr "ne peut pas hériter de la partition « %s »" -#: commands/tablecmds.c:1825 parser/parse_utilcmd.c:2275 +#: commands/tablecmds.c:1825 parser/parse_utilcmd.c:2285 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "la relation héritée « %s » n'est ni une table ni une table distante" @@ -8274,7 +8274,7 @@ msgid "inherited column \"%s\" has a type conflict" msgstr "la colonne héritée « %s » a un conflit de type" -#: commands/tablecmds.c:1931 commands/tablecmds.c:1954 commands/tablecmds.c:2159 commands/tablecmds.c:2189 parser/parse_coerce.c:1650 parser/parse_coerce.c:1670 parser/parse_coerce.c:1690 parser/parse_coerce.c:1736 parser/parse_coerce.c:1775 parser/parse_param.c:218 +#: commands/tablecmds.c:1931 commands/tablecmds.c:1954 commands/tablecmds.c:2159 commands/tablecmds.c:2189 parser/parse_coerce.c:1657 parser/parse_coerce.c:1677 parser/parse_coerce.c:1697 parser/parse_coerce.c:1743 parser/parse_coerce.c:1782 parser/parse_param.c:218 #, c-format msgid "%s versus %s" msgstr "%s versus %s" @@ -8294,12 +8294,12 @@ msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "la colonne héritée « %s » a un conflit de paramètre de stockage" -#: commands/tablecmds.c:2065 commands/tablecmds.c:8933 parser/parse_utilcmd.c:1270 parser/parse_utilcmd.c:1649 parser/parse_utilcmd.c:1725 +#: commands/tablecmds.c:2065 commands/tablecmds.c:8933 parser/parse_utilcmd.c:1280 parser/parse_utilcmd.c:1659 parser/parse_utilcmd.c:1735 #, c-format msgid "cannot convert whole-row table reference" msgstr "ne peut pas convertir une référence de ligne complète de table" -#: commands/tablecmds.c:2066 parser/parse_utilcmd.c:1271 +#: commands/tablecmds.c:2066 parser/parse_utilcmd.c:1281 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "La constrainte « %s » contient une référence de ligne complète vers la table « %s »." @@ -10154,7 +10154,7 @@ msgid "cannot use special role specifier in DROP ROLE" msgstr "ne peut pas être le spécificateur de rôle spécial dans DROP ROLE" -#: commands/user.c:1023 commands/user.c:1180 commands/variable.c:822 commands/variable.c:894 utils/adt/acl.c:5187 utils/adt/acl.c:5234 utils/adt/acl.c:5262 utils/adt/acl.c:5280 utils/init/miscinit.c:512 +#: commands/user.c:1023 commands/user.c:1180 commands/variable.c:830 commands/variable.c:833 commands/variable.c:915 commands/variable.c:918 utils/adt/acl.c:5187 utils/adt/acl.c:5234 utils/adt/acl.c:5262 utils/adt/acl.c:5280 utils/init/miscinit.c:512 #, c-format msgid "role \"%s\" does not exist" msgstr "le rôle « %s » n'existe pas" @@ -10454,7 +10454,7 @@ msgid "\"%s\": suspending truncate due to conflicting lock request" msgstr "« %s » : mis en suspens du tronquage à cause d'un conflit dans la demande de verrou" -#: commands/variable.c:165 utils/misc/guc.c:10115 utils/misc/guc.c:10177 +#: commands/variable.c:165 utils/misc/guc.c:10140 utils/misc/guc.c:10202 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Mot clé non reconnu : « %s »" @@ -10559,7 +10559,12 @@ msgid "cannot change client_encoding during a parallel operation" msgstr "ne peut pas modifier le client_encoding lors d'une opération parallélisée" -#: commands/variable.c:912 +#: commands/variable.c:939 +#, c-format +msgid "permission will be denied to set role \"%s\"" +msgstr "le droit sera refusé pour configurer le rôle « %s »" + +#: commands/variable.c:944 #, c-format msgid "permission denied to set role \"%s\"" msgstr "droit refusé pour configurer le rôle « %s »" @@ -10814,32 +10819,32 @@ msgid "cannot change TOAST relation \"%s\"" msgstr "ne peut pas modifier la relation TOAST « %s »" -#: executor/execMain.c:1140 rewrite/rewriteHandler.c:2901 rewrite/rewriteHandler.c:3667 +#: executor/execMain.c:1140 rewrite/rewriteHandler.c:2895 rewrite/rewriteHandler.c:3661 #, c-format msgid "cannot insert into view \"%s\"" msgstr "ne peut pas insérer dans la vue « %s »" -#: executor/execMain.c:1142 rewrite/rewriteHandler.c:2904 rewrite/rewriteHandler.c:3670 +#: executor/execMain.c:1142 rewrite/rewriteHandler.c:2898 rewrite/rewriteHandler.c:3664 #, c-format msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." msgstr "Pour activer l'insertion dans la vue, fournissez un trigger INSTEAD OF INSERT ou une règle ON INSERT DO INSTEAD sans condition." -#: executor/execMain.c:1148 rewrite/rewriteHandler.c:2909 rewrite/rewriteHandler.c:3675 +#: executor/execMain.c:1148 rewrite/rewriteHandler.c:2903 rewrite/rewriteHandler.c:3669 #, c-format msgid "cannot update view \"%s\"" msgstr "ne peut pas mettre à jour la vue « %s »" -#: executor/execMain.c:1150 rewrite/rewriteHandler.c:2912 rewrite/rewriteHandler.c:3678 +#: executor/execMain.c:1150 rewrite/rewriteHandler.c:2906 rewrite/rewriteHandler.c:3672 #, c-format msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." msgstr "Pour activer la mise à jour dans la vue, fournissez un trigger INSTEAD OF UPDATE ou une règle ON UPDATE DO INSTEAD sans condition." -#: executor/execMain.c:1156 rewrite/rewriteHandler.c:2917 rewrite/rewriteHandler.c:3683 +#: executor/execMain.c:1156 rewrite/rewriteHandler.c:2911 rewrite/rewriteHandler.c:3677 #, c-format msgid "cannot delete from view \"%s\"" msgstr "ne peut pas supprimer à partir de la vue « %s »" -#: executor/execMain.c:1158 rewrite/rewriteHandler.c:2920 rewrite/rewriteHandler.c:3686 +#: executor/execMain.c:1158 rewrite/rewriteHandler.c:2914 rewrite/rewriteHandler.c:3680 #, c-format msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." msgstr "Pour activer la suppression dans la vue, fournissez un trigger INSTEAD OF DELETE ou une règle ON DELETE DO INSTEAD sans condition." @@ -11405,7 +11410,7 @@ msgid "duplicate trigger events specified" msgstr "événements de trigger dupliqués spécifiés" -#: gram.y:5365 parser/parse_utilcmd.c:3287 parser/parse_utilcmd.c:3313 +#: gram.y:5365 parser/parse_utilcmd.c:3297 parser/parse_utilcmd.c:3323 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "la contrainte déclarée INITIALLY DEFERRED doit être DEFERRABLE" @@ -11604,7 +11609,7 @@ msgid "improper use of \"*\"" msgstr "mauvaise utilisation de « * »" -#: gram.y:15328 gram.y:15345 tsearch/spell.c:956 tsearch/spell.c:973 tsearch/spell.c:990 tsearch/spell.c:1007 tsearch/spell.c:1072 +#: gram.y:15328 gram.y:15345 tsearch/spell.c:982 tsearch/spell.c:999 tsearch/spell.c:1016 tsearch/spell.c:1033 tsearch/spell.c:1098 #, c-format msgid "syntax error" msgstr "erreur de syntaxe" @@ -12496,185 +12501,185 @@ msgid "requested length cannot be negative" msgstr "la longueur demandée ne peut pas être négative" -#: libpq/be-secure-openssl.c:166 +#: libpq/be-secure-openssl.c:169 #, c-format msgid "could not create SSL context: %s" msgstr "n'a pas pu créer le contexte SSL : %s" -#: libpq/be-secure-openssl.c:194 +#: libpq/be-secure-openssl.c:197 #, c-format msgid "could not load server certificate file \"%s\": %s" msgstr "n'a pas pu charger le fichier du certificat serveur « %s » : %s" -#: libpq/be-secure-openssl.c:203 +#: libpq/be-secure-openssl.c:206 #, c-format msgid "could not access private key file \"%s\": %m" msgstr "n'a pas pu accéder au fichier de la clé privée « %s » : %m" -#: libpq/be-secure-openssl.c:212 +#: libpq/be-secure-openssl.c:215 #, c-format msgid "private key file \"%s\" is not a regular file" msgstr "le fichier de clé privée « %s » n'est pas un fichier" -#: libpq/be-secure-openssl.c:227 +#: libpq/be-secure-openssl.c:230 #, c-format msgid "private key file \"%s\" must be owned by the database user or root" msgstr "le fichier de clé privée « %s » doit avoir le même propriétaire que la base de donnée ou root" -#: libpq/be-secure-openssl.c:250 +#: libpq/be-secure-openssl.c:253 #, c-format msgid "private key file \"%s\" has group or world access" msgstr "" "le fichier de clé privé « %s » est accessible par le groupe et/ou par les\n" "autres" -#: libpq/be-secure-openssl.c:252 +#: libpq/be-secure-openssl.c:255 #, c-format msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." msgstr "" "Le fichier doit avoir les permissions u=rw (0600) ou moins si le propriétaire est le même que la base de données,\n" "ou les permissions u=rw,g=r (0640) ou moins si le propriétaire est root." -#: libpq/be-secure-openssl.c:269 +#: libpq/be-secure-openssl.c:272 #, c-format msgid "private key file \"%s\" cannot be reloaded because it requires a passphrase" msgstr "le fichier de clé privée « %s » ne peut pas être rechargé car il nécessaire une phrase de passe" -#: libpq/be-secure-openssl.c:274 +#: libpq/be-secure-openssl.c:277 #, c-format msgid "could not load private key file \"%s\": %s" msgstr "n'a pas pu charger le fichier de clé privée « %s » : %s" -#: libpq/be-secure-openssl.c:283 +#: libpq/be-secure-openssl.c:286 #, c-format msgid "check of private key failed: %s" msgstr "échec de la vérification de la clé privée : %s" -#: libpq/be-secure-openssl.c:310 +#: libpq/be-secure-openssl.c:313 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "n'a pas pu configurer la liste des algorithmes de chiffrement (pas d'algorithmes valides disponibles)" -#: libpq/be-secure-openssl.c:328 +#: libpq/be-secure-openssl.c:333 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "n'a pas pu charger le fichier du certificat racine « %s » : %s" -#: libpq/be-secure-openssl.c:355 +#: libpq/be-secure-openssl.c:379 #, c-format msgid "SSL certificate revocation list file \"%s\" ignored" msgstr "liste de révocation des certificats SSL « %s » ignorée" -#: libpq/be-secure-openssl.c:357 +#: libpq/be-secure-openssl.c:381 #, c-format msgid "SSL library does not support certificate revocation lists." msgstr "La bibliothèque SSL ne supporte pas les listes de révocation des certificats." -#: libpq/be-secure-openssl.c:364 +#: libpq/be-secure-openssl.c:388 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "n'a pas pu charger le fichier de liste de révocation des certificats SSL (« %s ») : %s" -#: libpq/be-secure-openssl.c:445 +#: libpq/be-secure-openssl.c:450 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "n'a pas pu initialiser la connexion SSL : contexte SSL non configuré" -#: libpq/be-secure-openssl.c:453 +#: libpq/be-secure-openssl.c:458 #, c-format msgid "could not initialize SSL connection: %s" msgstr "n'a pas pu initialiser la connexion SSL : %s" -#: libpq/be-secure-openssl.c:461 +#: libpq/be-secure-openssl.c:466 #, c-format msgid "could not set SSL socket: %s" msgstr "n'a pas pu créer le socket SSL : %s" -#: libpq/be-secure-openssl.c:516 +#: libpq/be-secure-openssl.c:521 #, c-format msgid "could not accept SSL connection: %m" msgstr "n'a pas pu accepter la connexion SSL : %m" -#: libpq/be-secure-openssl.c:520 libpq/be-secure-openssl.c:531 +#: libpq/be-secure-openssl.c:525 libpq/be-secure-openssl.c:536 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "n'a pas pu accepter la connexion SSL : fin de fichier détecté" -#: libpq/be-secure-openssl.c:525 +#: libpq/be-secure-openssl.c:530 #, c-format msgid "could not accept SSL connection: %s" msgstr "n'a pas pu accepter la connexion SSL : %s" -#: libpq/be-secure-openssl.c:536 libpq/be-secure-openssl.c:677 libpq/be-secure-openssl.c:744 +#: libpq/be-secure-openssl.c:541 libpq/be-secure-openssl.c:682 libpq/be-secure-openssl.c:749 #, c-format msgid "unrecognized SSL error code: %d" msgstr "code d'erreur SSL inconnu : %d" -#: libpq/be-secure-openssl.c:578 +#: libpq/be-secure-openssl.c:583 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "le nom commun du certificat SSL contient des NULL" -#: libpq/be-secure-openssl.c:589 +#: libpq/be-secure-openssl.c:594 #, c-format msgid "SSL connection from \"%s\"" msgstr "connexion SSL de « %s »" -#: libpq/be-secure-openssl.c:666 libpq/be-secure-openssl.c:728 +#: libpq/be-secure-openssl.c:671 libpq/be-secure-openssl.c:733 #, c-format msgid "SSL error: %s" msgstr "erreur SSL : %s" -#: libpq/be-secure-openssl.c:909 +#: libpq/be-secure-openssl.c:914 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de paramètres DH « %s » : %m" -#: libpq/be-secure-openssl.c:921 +#: libpq/be-secure-openssl.c:926 #, c-format msgid "could not load DH parameters file: %s" msgstr "n'a pas pu charger le fichier de paramètres DH : %s" -#: libpq/be-secure-openssl.c:931 +#: libpq/be-secure-openssl.c:936 #, c-format msgid "invalid DH parameters: %s" msgstr "paramètres DH invalides : %s" -#: libpq/be-secure-openssl.c:939 +#: libpq/be-secure-openssl.c:945 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "paramètres DH invalides : p n'est pas premier" -#: libpq/be-secure-openssl.c:947 +#: libpq/be-secure-openssl.c:954 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "paramètres DH invalides : pas de générateur convenable ou de premier sûr" -#: libpq/be-secure-openssl.c:1088 +#: libpq/be-secure-openssl.c:1096 #, c-format msgid "DH: could not load DH parameters" msgstr "DH : n'a pas pu charger les paramètres DH" -#: libpq/be-secure-openssl.c:1096 +#: libpq/be-secure-openssl.c:1104 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH : n'a pas pu configurer les paramètres DH : %s" -#: libpq/be-secure-openssl.c:1120 +#: libpq/be-secure-openssl.c:1131 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH : nome de courbe non reconnu : %s" -#: libpq/be-secure-openssl.c:1129 +#: libpq/be-secure-openssl.c:1140 #, c-format msgid "ECDH: could not create key" msgstr "ECDH : n'a pas pu créer la clé" -#: libpq/be-secure-openssl.c:1157 +#: libpq/be-secure-openssl.c:1168 msgid "no SSL error reported" msgstr "aucune erreur SSL reportée" -#: libpq/be-secure-openssl.c:1161 +#: libpq/be-secure-openssl.c:1172 #, c-format msgid "SSL error code %lu" msgstr "erreur SSL %lu" @@ -13546,7 +13551,7 @@ msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods \"%s\" n'a pas été enregistré" -#: nodes/nodeFuncs.c:123 nodes/nodeFuncs.c:154 parser/parse_coerce.c:1844 parser/parse_coerce.c:1872 parser/parse_coerce.c:1948 parser/parse_expr.c:2110 parser/parse_func.c:602 parser/parse_oper.c:964 utils/fmgr/funcapi.c:466 +#: nodes/nodeFuncs.c:123 nodes/nodeFuncs.c:154 parser/parse_coerce.c:1851 parser/parse_coerce.c:1879 parser/parse_coerce.c:1955 parser/parse_expr.c:2110 parser/parse_func.c:602 parser/parse_oper.c:964 utils/fmgr/funcapi.c:466 #, c-format msgid "could not find array type for data type %s" msgstr "n'a pas pu trouver de type tableau pour le type de données %s" @@ -14380,100 +14385,100 @@ "Les opérateurs de tri doivent être les membres « < » ou « > » des familles\n" "d'opérateurs btree." -#: parser/parse_coerce.c:971 parser/parse_coerce.c:1001 parser/parse_coerce.c:1019 parser/parse_coerce.c:1034 parser/parse_expr.c:2144 parser/parse_expr.c:2732 parser/parse_target.c:936 +#: parser/parse_coerce.c:978 parser/parse_coerce.c:1008 parser/parse_coerce.c:1026 parser/parse_coerce.c:1041 parser/parse_expr.c:2144 parser/parse_expr.c:2732 parser/parse_target.c:936 #, c-format msgid "cannot cast type %s to %s" msgstr "ne peut pas convertir le type %s en %s" -#: parser/parse_coerce.c:1004 +#: parser/parse_coerce.c:1011 #, c-format msgid "Input has too few columns." msgstr "L'entrée n'a pas assez de colonnes." -#: parser/parse_coerce.c:1022 +#: parser/parse_coerce.c:1029 #, c-format msgid "Cannot cast type %s to %s in column %d." msgstr "ne peut pas convertir le type %s en %s dans la colonne %d" -#: parser/parse_coerce.c:1037 +#: parser/parse_coerce.c:1044 #, c-format msgid "Input has too many columns." msgstr "L'entrée a trop de colonnes." #. translator: first %s is name of a SQL construct, eg WHERE #. translator: first %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1080 parser/parse_coerce.c:1128 +#: parser/parse_coerce.c:1087 parser/parse_coerce.c:1135 #, c-format msgid "argument of %s must be type %s, not type %s" msgstr "l'argument de %s doit être de type %s, et non du type %s" #. translator: %s is name of a SQL construct, eg WHERE #. translator: %s is name of a SQL construct, eg LIMIT -#: parser/parse_coerce.c:1091 parser/parse_coerce.c:1140 +#: parser/parse_coerce.c:1098 parser/parse_coerce.c:1147 #, c-format msgid "argument of %s must not return a set" msgstr "l'argument de %s ne doit pas renvoyer un ensemble" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1280 +#: parser/parse_coerce.c:1287 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "les %s types %s et %s ne peuvent pas correspondre" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1347 +#: parser/parse_coerce.c:1354 #, c-format msgid "%s could not convert type %s to %s" msgstr "%s n'a pas pu convertir le type %s en %s" -#: parser/parse_coerce.c:1649 +#: parser/parse_coerce.c:1656 #, c-format msgid "arguments declared \"anyelement\" are not all alike" msgstr "les arguments déclarés « anyelement » ne sont pas tous identiques" -#: parser/parse_coerce.c:1669 +#: parser/parse_coerce.c:1676 #, c-format msgid "arguments declared \"anyarray\" are not all alike" msgstr "les arguments déclarés « anyarray » ne sont pas tous identiques" -#: parser/parse_coerce.c:1689 +#: parser/parse_coerce.c:1696 #, c-format msgid "arguments declared \"anyrange\" are not all alike" msgstr "les arguments déclarés « anyrange » ne sont pas tous identiques" -#: parser/parse_coerce.c:1718 parser/parse_coerce.c:1933 parser/parse_coerce.c:1967 utils/fmgr/funcapi.c:425 +#: parser/parse_coerce.c:1725 parser/parse_coerce.c:1940 parser/parse_coerce.c:1974 utils/fmgr/funcapi.c:425 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "l'argument déclaré %s n'est pas un tableau mais est du type %s" -#: parser/parse_coerce.c:1734 parser/parse_coerce.c:1773 +#: parser/parse_coerce.c:1741 parser/parse_coerce.c:1780 #, c-format msgid "argument declared %s is not consistent with argument declared %s" msgstr "l'argument déclaré %s n'est pas cohérent avec l'argument déclaré %s" -#: parser/parse_coerce.c:1756 parser/parse_coerce.c:1980 utils/fmgr/funcapi.c:439 +#: parser/parse_coerce.c:1763 parser/parse_coerce.c:1987 utils/fmgr/funcapi.c:439 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "l'argument déclaré %s n'est pas un type d'intervalle mais est du type %s" -#: parser/parse_coerce.c:1794 +#: parser/parse_coerce.c:1801 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "" "n'a pas pu déterminer le type polymorphique car l'entrée dispose\n" "du type %s" -#: parser/parse_coerce.c:1805 +#: parser/parse_coerce.c:1812 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "le type déclaré anynonarray est un type tableau : %s" -#: parser/parse_coerce.c:1815 +#: parser/parse_coerce.c:1822 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "le type déclaré anyenum n'est pas un type enum : %s" -#: parser/parse_coerce.c:1855 parser/parse_coerce.c:1885 +#: parser/parse_coerce.c:1862 parser/parse_coerce.c:1892 #, c-format msgid "could not find range type for data type %s" msgstr "n'a pas pu trouver le type range pour le type de données %s" @@ -15337,7 +15342,7 @@ msgid "array of serial is not implemented" msgstr "le tableau de type serial n'est pas implanté" -#: parser/parse_utilcmd.c:666 parser/parse_utilcmd.c:678 +#: parser/parse_utilcmd.c:666 parser/parse_utilcmd.c:678 parser/parse_utilcmd.c:736 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "déclarations NULL/NOT NULL en conflit pour la colonne « %s » de la table « %s »" @@ -15364,268 +15369,268 @@ msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "plusieurs spécifications d'identité pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:743 parser/parse_utilcmd.c:860 +#: parser/parse_utilcmd.c:753 parser/parse_utilcmd.c:870 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "les clés primaires ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:749 parser/parse_utilcmd.c:866 +#: parser/parse_utilcmd.c:759 parser/parse_utilcmd.c:876 #, c-format msgid "primary key constraints are not supported on partitioned tables" msgstr "les clés primaires ne sont pas supportées sur les tables partitionnées" -#: parser/parse_utilcmd.c:758 parser/parse_utilcmd.c:876 +#: parser/parse_utilcmd.c:768 parser/parse_utilcmd.c:886 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "les contraintes uniques ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:764 parser/parse_utilcmd.c:882 +#: parser/parse_utilcmd.c:774 parser/parse_utilcmd.c:892 #, c-format msgid "unique constraints are not supported on partitioned tables" msgstr "les contraintes uniques ne sont pas supportées sur les tables partitionnées" -#: parser/parse_utilcmd.c:781 parser/parse_utilcmd.c:912 +#: parser/parse_utilcmd.c:791 parser/parse_utilcmd.c:922 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "les clés étrangères ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:787 parser/parse_utilcmd.c:918 +#: parser/parse_utilcmd.c:797 parser/parse_utilcmd.c:928 #, c-format msgid "foreign key constraints are not supported on partitioned tables" msgstr "les clés étrangères ne sont pas supportées sur les tables partitionnées" -#: parser/parse_utilcmd.c:815 +#: parser/parse_utilcmd.c:825 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "une valeur par défaut et une identité ont été spécifiées pour la colonne « %s » de la table « %s »" -#: parser/parse_utilcmd.c:892 +#: parser/parse_utilcmd.c:902 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "les contraintes d'exclusion ne sont pas supportées par les tables distantes" -#: parser/parse_utilcmd.c:898 +#: parser/parse_utilcmd.c:908 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "les contraintes d'exclusion ne sont pas supportées sur les tables partitionnées" -#: parser/parse_utilcmd.c:970 +#: parser/parse_utilcmd.c:980 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE n'est pas supporté pour la création de tables distantes" -#: parser/parse_utilcmd.c:1650 parser/parse_utilcmd.c:1726 +#: parser/parse_utilcmd.c:1660 parser/parse_utilcmd.c:1736 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "l'index « %s » contient une référence de table de ligne complète" -#: parser/parse_utilcmd.c:2055 +#: parser/parse_utilcmd.c:2065 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "ne peut pas utiliser un index existant dans CREATE TABLE" -#: parser/parse_utilcmd.c:2075 +#: parser/parse_utilcmd.c:2085 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "l'index « %s » est déjà associé à une contrainte" -#: parser/parse_utilcmd.c:2083 +#: parser/parse_utilcmd.c:2093 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "l'index « %s » n'appartient pas à la table « %s »" -#: parser/parse_utilcmd.c:2090 +#: parser/parse_utilcmd.c:2100 #, c-format msgid "index \"%s\" is not valid" msgstr "l'index « %s » n'est pas valide" -#: parser/parse_utilcmd.c:2096 +#: parser/parse_utilcmd.c:2106 #, c-format msgid "\"%s\" is not a unique index" msgstr "« %s » n'est pas un index unique" -#: parser/parse_utilcmd.c:2097 parser/parse_utilcmd.c:2104 parser/parse_utilcmd.c:2111 parser/parse_utilcmd.c:2181 +#: parser/parse_utilcmd.c:2107 parser/parse_utilcmd.c:2114 parser/parse_utilcmd.c:2121 parser/parse_utilcmd.c:2191 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "Ne peut pas créer une clé primaire ou une contrainte unique avec cet index." -#: parser/parse_utilcmd.c:2103 +#: parser/parse_utilcmd.c:2113 #, c-format msgid "index \"%s\" contains expressions" msgstr "l'index « %s » contient des expressions" -#: parser/parse_utilcmd.c:2110 +#: parser/parse_utilcmd.c:2120 #, c-format msgid "\"%s\" is a partial index" msgstr "« %s » est un index partiel" -#: parser/parse_utilcmd.c:2122 +#: parser/parse_utilcmd.c:2132 #, c-format msgid "\"%s\" is a deferrable index" msgstr "« %s » est un index déferrable" -#: parser/parse_utilcmd.c:2123 +#: parser/parse_utilcmd.c:2133 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "Ne peut pas créer une contrainte non-déferrable utilisant un index déferrable." -#: parser/parse_utilcmd.c:2180 +#: parser/parse_utilcmd.c:2190 #, c-format msgid "index \"%s\" does not have default sorting behavior" msgstr "l'index « %s » n'a pas de comportement de tri par défaut" -#: parser/parse_utilcmd.c:2324 +#: parser/parse_utilcmd.c:2334 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "la colonne « %s » apparaît deux fois dans la contrainte de la clé primaire" -#: parser/parse_utilcmd.c:2330 +#: parser/parse_utilcmd.c:2340 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "la colonne « %s » apparaît deux fois sur une contrainte unique" -#: parser/parse_utilcmd.c:2552 +#: parser/parse_utilcmd.c:2562 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "les expressions et prédicats d'index peuvent seulement faire référence à la table en cours d'indexage" -#: parser/parse_utilcmd.c:2598 +#: parser/parse_utilcmd.c:2608 #, c-format msgid "rules on materialized views are not supported" msgstr "les règles ne sont pas supportés sur les vues matérialisées" -#: parser/parse_utilcmd.c:2659 +#: parser/parse_utilcmd.c:2669 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "" "la condition WHERE d'une règle ne devrait pas contenir de références à d'autres\n" "relations" -#: parser/parse_utilcmd.c:2731 +#: parser/parse_utilcmd.c:2741 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "" "les règles avec des conditions WHERE ne peuvent contenir que des actions\n" "SELECT, INSERT, UPDATE ou DELETE " -#: parser/parse_utilcmd.c:2749 parser/parse_utilcmd.c:2848 rewrite/rewriteHandler.c:499 rewrite/rewriteManip.c:1015 +#: parser/parse_utilcmd.c:2759 parser/parse_utilcmd.c:2858 rewrite/rewriteHandler.c:499 rewrite/rewriteManip.c:1015 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "" "les instructions conditionnelles UNION/INTERSECT/EXCEPT ne sont pas\n" "implémentées" -#: parser/parse_utilcmd.c:2767 +#: parser/parse_utilcmd.c:2777 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "la règle ON SELECT ne peut pas utiliser OLD" -#: parser/parse_utilcmd.c:2771 +#: parser/parse_utilcmd.c:2781 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "la règle ON SELECT ne peut pas utiliser NEW" -#: parser/parse_utilcmd.c:2780 +#: parser/parse_utilcmd.c:2790 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "la règle ON INSERT ne peut pas utiliser OLD" -#: parser/parse_utilcmd.c:2786 +#: parser/parse_utilcmd.c:2796 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "la règle ON INSERT ne peut pas utiliser NEW" -#: parser/parse_utilcmd.c:2814 +#: parser/parse_utilcmd.c:2824 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "ne peut référencer OLD dans une requête WITH" -#: parser/parse_utilcmd.c:2821 +#: parser/parse_utilcmd.c:2831 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "ne peut référencer NEW dans une requête WITH" -#: parser/parse_utilcmd.c:3259 +#: parser/parse_utilcmd.c:3269 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "clause DEFERRABLE mal placée" -#: parser/parse_utilcmd.c:3264 parser/parse_utilcmd.c:3279 +#: parser/parse_utilcmd.c:3274 parser/parse_utilcmd.c:3289 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "clauses DEFERRABLE/NOT DEFERRABLE multiples non autorisées" -#: parser/parse_utilcmd.c:3274 +#: parser/parse_utilcmd.c:3284 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "clause NOT DEFERRABLE mal placée" -#: parser/parse_utilcmd.c:3295 +#: parser/parse_utilcmd.c:3305 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "clause INITIALLY DEFERRED mal placée" -#: parser/parse_utilcmd.c:3300 parser/parse_utilcmd.c:3326 +#: parser/parse_utilcmd.c:3310 parser/parse_utilcmd.c:3336 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "clauses INITIALLY IMMEDIATE/DEFERRED multiples non autorisées" -#: parser/parse_utilcmd.c:3321 +#: parser/parse_utilcmd.c:3331 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "clause INITIALLY IMMEDIATE mal placée" -#: parser/parse_utilcmd.c:3512 +#: parser/parse_utilcmd.c:3522 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE spécifie un schéma (%s) différent de celui tout juste créé (%s)" -#: parser/parse_utilcmd.c:3571 +#: parser/parse_utilcmd.c:3581 #, c-format msgid "invalid bound specification for a list partition" msgstr "spécification de limite invalide pour une partition par liste" -#: parser/parse_utilcmd.c:3627 +#: parser/parse_utilcmd.c:3637 #, c-format msgid "invalid bound specification for a range partition" msgstr "spécification de limite invalide pour une partition par intervalle" -#: parser/parse_utilcmd.c:3633 +#: parser/parse_utilcmd.c:3643 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM doit spécifier exactement une valeur par colonne de partitionnement" -#: parser/parse_utilcmd.c:3637 +#: parser/parse_utilcmd.c:3647 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO doit spécifier exactement une valeur par colonne de partitionnement" -#: parser/parse_utilcmd.c:3684 parser/parse_utilcmd.c:3698 +#: parser/parse_utilcmd.c:3694 parser/parse_utilcmd.c:3708 #, c-format msgid "cannot specify NULL in range bound" msgstr "ne peut pas spécifier NULL dans la limite de l'intervalle" -#: parser/parse_utilcmd.c:3745 +#: parser/parse_utilcmd.c:3755 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "chaque limite suivant MAXVALUE doit aussi être MAXVALUE" -#: parser/parse_utilcmd.c:3751 +#: parser/parse_utilcmd.c:3761 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "chaque limite suivant MINVALUE doit aussi être MINVALUE" -#: parser/parse_utilcmd.c:3781 parser/parse_utilcmd.c:3793 +#: parser/parse_utilcmd.c:3791 parser/parse_utilcmd.c:3803 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "la valeur spécifiée ne peut pas être convertie vers le type %s pour la colonne « %s »" -#: parser/parse_utilcmd.c:3795 +#: parser/parse_utilcmd.c:3805 #, c-format msgid "The cast requires a non-immutable conversion." msgstr "Cette conversion requiert une conversion non immutable." -#: parser/parse_utilcmd.c:3796 +#: parser/parse_utilcmd.c:3806 #, c-format msgid "Try putting the literal value in single quotes." msgstr "Placer la valeur littérale en guillemets simples." @@ -16387,7 +16392,7 @@ "Protocole non supportée de l'interface %u.%u : le serveur supporte de %u.0 à\n" "%u.%u" -#: postmaster/postmaster.c:2146 utils/misc/guc.c:5781 utils/misc/guc.c:5874 utils/misc/guc.c:7224 utils/misc/guc.c:10003 utils/misc/guc.c:10037 +#: postmaster/postmaster.c:2146 utils/misc/guc.c:5781 utils/misc/guc.c:5874 utils/misc/guc.c:7224 utils/misc/guc.c:10021 utils/misc/guc.c:10062 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "valeur invalide pour le paramètre « %s » : « %s »" @@ -16897,106 +16902,106 @@ msgid "could not clear search path: %s" msgstr "n'a pas pu effacer search_path : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:249 +#: replication/libpqwalreceiver/libpqwalreceiver.c:254 #, c-format msgid "invalid connection string syntax: %s" msgstr "syntaxe de la chaîne de connexion invalide : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:273 +#: replication/libpqwalreceiver/libpqwalreceiver.c:279 #, c-format msgid "could not parse connection string: %s" msgstr "n'a pas pu analyser la chaîne de connexion « %s »" -#: replication/libpqwalreceiver/libpqwalreceiver.c:323 +#: replication/libpqwalreceiver/libpqwalreceiver.c:329 #, c-format msgid "could not receive database system identifier and timeline ID from the primary server: %s" msgstr "" "n'a pas pu recevoir l'identifiant du système de bases de données et\n" "l'identifiant de la timeline à partir du serveur principal : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:334 replication/libpqwalreceiver/libpqwalreceiver.c:545 +#: replication/libpqwalreceiver/libpqwalreceiver.c:340 replication/libpqwalreceiver/libpqwalreceiver.c:551 #, c-format msgid "invalid response from primary server" msgstr "réponse invalide du serveur principal" -#: replication/libpqwalreceiver/libpqwalreceiver.c:335 +#: replication/libpqwalreceiver/libpqwalreceiver.c:341 #, c-format msgid "Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields." msgstr "" "N'a pas pu identifier le système : a récupéré %d lignes et %d champs,\n" "attendait %d lignes et %d champs (ou plus)." -#: replication/libpqwalreceiver/libpqwalreceiver.c:401 replication/libpqwalreceiver/libpqwalreceiver.c:407 replication/libpqwalreceiver/libpqwalreceiver.c:432 +#: replication/libpqwalreceiver/libpqwalreceiver.c:407 replication/libpqwalreceiver/libpqwalreceiver.c:413 replication/libpqwalreceiver/libpqwalreceiver.c:438 #, c-format msgid "could not start WAL streaming: %s" msgstr "n'a pas pu démarrer l'envoi des WAL : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:455 +#: replication/libpqwalreceiver/libpqwalreceiver.c:461 #, c-format msgid "could not send end-of-streaming message to primary: %s" msgstr "n'a pas pu transmettre le message de fin d'envoi de flux au primaire : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:477 +#: replication/libpqwalreceiver/libpqwalreceiver.c:483 #, c-format msgid "unexpected result set after end-of-streaming" msgstr "ensemble de résultats inattendu après la fin du flux de réplication" -#: replication/libpqwalreceiver/libpqwalreceiver.c:491 +#: replication/libpqwalreceiver/libpqwalreceiver.c:497 #, c-format msgid "error while shutting down streaming COPY: %s" msgstr "erreur lors de l'arrêt de la copie en flux : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:500 +#: replication/libpqwalreceiver/libpqwalreceiver.c:506 #, c-format msgid "error reading result of streaming command: %s" msgstr "erreur lors de la lecture de la commande de flux : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:508 replication/libpqwalreceiver/libpqwalreceiver.c:746 +#: replication/libpqwalreceiver/libpqwalreceiver.c:514 replication/libpqwalreceiver/libpqwalreceiver.c:752 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "résultat inattendu après CommandComplete : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:534 +#: replication/libpqwalreceiver/libpqwalreceiver.c:540 #, c-format msgid "could not receive timeline history file from the primary server: %s" msgstr "n'a pas pu recevoir le fichier historique à partir du serveur principal : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:546 +#: replication/libpqwalreceiver/libpqwalreceiver.c:552 #, c-format msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Attendait 1 ligne avec 2 champs, a obtenu %d lignes avec %d champs." -#: replication/libpqwalreceiver/libpqwalreceiver.c:710 replication/libpqwalreceiver/libpqwalreceiver.c:761 replication/libpqwalreceiver/libpqwalreceiver.c:767 +#: replication/libpqwalreceiver/libpqwalreceiver.c:716 replication/libpqwalreceiver/libpqwalreceiver.c:767 replication/libpqwalreceiver/libpqwalreceiver.c:773 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "n'a pas pu recevoir des données du flux de WAL : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:786 +#: replication/libpqwalreceiver/libpqwalreceiver.c:792 #, c-format msgid "could not send data to WAL stream: %s" msgstr "n'a pas pu transmettre les données au flux WAL : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:835 +#: replication/libpqwalreceiver/libpqwalreceiver.c:841 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "n'a pas pu créer le slot de réplication « %s » : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:869 +#: replication/libpqwalreceiver/libpqwalreceiver.c:875 #, c-format msgid "invalid query response" msgstr "réponse à la requête invalide" -#: replication/libpqwalreceiver/libpqwalreceiver.c:870 +#: replication/libpqwalreceiver/libpqwalreceiver.c:876 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Attendait %d champs, a obtenu %d champs." -#: replication/libpqwalreceiver/libpqwalreceiver.c:939 +#: replication/libpqwalreceiver/libpqwalreceiver.c:945 #, c-format msgid "the query interface requires a database connection" msgstr "l'interface de la requête requiert une connexion à une base" -#: replication/libpqwalreceiver/libpqwalreceiver.c:970 +#: replication/libpqwalreceiver/libpqwalreceiver.c:976 msgid "empty query" msgstr "requête vide" @@ -17788,7 +17793,7 @@ msgid "received replication command: %s" msgstr "commande de réplication reçu : %s" -#: replication/walsender.c:1495 tcop/fastpath.c:281 tcop/postgres.c:1020 tcop/postgres.c:1330 tcop/postgres.c:1589 tcop/postgres.c:1994 tcop/postgres.c:2362 tcop/postgres.c:2437 +#: replication/walsender.c:1495 tcop/fastpath.c:287 tcop/postgres.c:1020 tcop/postgres.c:1330 tcop/postgres.c:1589 tcop/postgres.c:1994 tcop/postgres.c:2362 tcop/postgres.c:2437 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "" @@ -18048,202 +18053,202 @@ msgid "renaming an ON SELECT rule is not allowed" msgstr "le renommage d'une règle ON SELECT n'est pas autorisé" -#: rewrite/rewriteHandler.c:545 +#: rewrite/rewriteHandler.c:542 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "" "Le nom de la requête WITH «%s » apparaît à la fois dans l'action d'une règle\n" "et la requête en cours de ré-écriture." -#: rewrite/rewriteHandler.c:608 +#: rewrite/rewriteHandler.c:602 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "ne peut pas avoir des listes RETURNING dans plusieurs règles" -#: rewrite/rewriteHandler.c:817 +#: rewrite/rewriteHandler.c:811 #, c-format msgid "cannot insert into column \"%s\"" msgstr "ne peut pas insérer dans la colonne « %s »" -#: rewrite/rewriteHandler.c:818 rewrite/rewriteHandler.c:833 +#: rewrite/rewriteHandler.c:812 rewrite/rewriteHandler.c:827 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "La colonne « %s » est une colonne d'identité définie comme GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:820 +#: rewrite/rewriteHandler.c:814 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Utilisez OVERRIDING SYSTEM VALUE pour surcharger." -#: rewrite/rewriteHandler.c:832 +#: rewrite/rewriteHandler.c:826 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "la colonne « %s » peut seulement être mise à jour en DEFAULT" -#: rewrite/rewriteHandler.c:994 rewrite/rewriteHandler.c:1012 +#: rewrite/rewriteHandler.c:988 rewrite/rewriteHandler.c:1006 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "affectations multiples pour la même colonne « %s »" -#: rewrite/rewriteHandler.c:1943 rewrite/rewriteHandler.c:3741 +#: rewrite/rewriteHandler.c:1937 rewrite/rewriteHandler.c:3735 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "récursion infinie détectée dans les règles de la relation « %s »" -#: rewrite/rewriteHandler.c:2029 +#: rewrite/rewriteHandler.c:2023 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "récursion infinie détectée dans la politique pour la relation « %s »" -#: rewrite/rewriteHandler.c:2349 +#: rewrite/rewriteHandler.c:2343 msgid "Junk view columns are not updatable." msgstr "Les colonnes « junk » des vues ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2354 +#: rewrite/rewriteHandler.c:2348 msgid "View columns that are not columns of their base relation are not updatable." msgstr "Les colonnes des vues qui ne font pas référence à des colonnes de la relation de base ne sont pas automatiquement modifiables." -#: rewrite/rewriteHandler.c:2357 +#: rewrite/rewriteHandler.c:2351 msgid "View columns that refer to system columns are not updatable." msgstr "Les colonnes des vues qui font référence à des colonnes systèmes ne sont pas automatiquement modifiables." -#: rewrite/rewriteHandler.c:2360 +#: rewrite/rewriteHandler.c:2354 msgid "View columns that return whole-row references are not updatable." msgstr "Les colonnes de vue qui font références à des lignes complètes ne sont pas automatiquement modifiables." -#: rewrite/rewriteHandler.c:2421 +#: rewrite/rewriteHandler.c:2415 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Les vues contenant DISTINCT ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2424 +#: rewrite/rewriteHandler.c:2418 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Les vues contenant GROUP BY ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2427 +#: rewrite/rewriteHandler.c:2421 msgid "Views containing HAVING are not automatically updatable." msgstr "Les vues contenant HAVING ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2430 +#: rewrite/rewriteHandler.c:2424 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "Les vues contenant UNION, INTERSECT ou EXCEPT ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2433 +#: rewrite/rewriteHandler.c:2427 msgid "Views containing WITH are not automatically updatable." msgstr "Les vues contenant WITH ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2436 +#: rewrite/rewriteHandler.c:2430 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Les vues contenant LIMIT ou OFFSET ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2448 +#: rewrite/rewriteHandler.c:2442 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Les vues qui renvoient des fonctions d'agrégat ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2451 +#: rewrite/rewriteHandler.c:2445 msgid "Views that return window functions are not automatically updatable." msgstr "Les vues qui renvoient des fonctions de fenêtrage ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2454 +#: rewrite/rewriteHandler.c:2448 msgid "Views that return set-returning functions are not automatically updatable." msgstr "Les vues qui renvoient des fonctions à plusieurs lignes ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2461 rewrite/rewriteHandler.c:2465 rewrite/rewriteHandler.c:2473 +#: rewrite/rewriteHandler.c:2455 rewrite/rewriteHandler.c:2459 rewrite/rewriteHandler.c:2467 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "Les vues qui lisent plusieurs tables ou vues ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2476 +#: rewrite/rewriteHandler.c:2470 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Les vues contenant TABLESAMPLE ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2500 +#: rewrite/rewriteHandler.c:2494 msgid "Views that have no updatable columns are not automatically updatable." msgstr "Les vues qui possèdent des colonnes non modifiables ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2977 +#: rewrite/rewriteHandler.c:2971 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "ne peut pas insérer dans la colonne « %s » de la vue « %s »" -#: rewrite/rewriteHandler.c:2985 +#: rewrite/rewriteHandler.c:2979 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "ne peut pas mettre à jour la colonne « %s » de la vue « %s »" -#: rewrite/rewriteHandler.c:3455 +#: rewrite/rewriteHandler.c:3449 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "" "les règles DO INSTEAD NOTHING ne sont pas supportées par les instructions\n" "de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3469 +#: rewrite/rewriteHandler.c:3463 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "" "les règles DO INSTEAD conditionnelles ne sont pas supportées par les\n" "instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3473 +#: rewrite/rewriteHandler.c:3467 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "" "les règles DO ALSO ne sont pas supportées par les instructions de modification\n" "de données dans WITH" -#: rewrite/rewriteHandler.c:3478 +#: rewrite/rewriteHandler.c:3472 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "" "les règles DO INSTEAD multi-instructions ne sont pas supportées pour les\n" "instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3669 rewrite/rewriteHandler.c:3677 rewrite/rewriteHandler.c:3685 +#: rewrite/rewriteHandler.c:3663 rewrite/rewriteHandler.c:3671 rewrite/rewriteHandler.c:3679 #, c-format msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "Les vues contenant des règles conditionnelles DO INSTEAD ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:3778 +#: rewrite/rewriteHandler.c:3772 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "ne peut pas exécuter INSERT RETURNING sur la relation « %s »" -#: rewrite/rewriteHandler.c:3780 +#: rewrite/rewriteHandler.c:3774 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "" "Vous avez besoin d'une règle ON INSERT DO INSTEAD sans condition avec une\n" "clause RETURNING." -#: rewrite/rewriteHandler.c:3785 +#: rewrite/rewriteHandler.c:3779 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "ne peut pas exécuter UPDATE RETURNING sur la relation « %s »" -#: rewrite/rewriteHandler.c:3787 +#: rewrite/rewriteHandler.c:3781 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "" "Vous avez besoin d'une règle ON UPDATE DO INSTEAD sans condition avec une\n" "clause RETURNING." -#: rewrite/rewriteHandler.c:3792 +#: rewrite/rewriteHandler.c:3786 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "ne peut pas exécuter DELETE RETURNING sur la relation « %s »" -#: rewrite/rewriteHandler.c:3794 +#: rewrite/rewriteHandler.c:3788 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "" "Vous avez besoin d'une règle ON DELETE DO INSTEAD sans condition avec une\n" "clause RETURNING." -#: rewrite/rewriteHandler.c:3812 +#: rewrite/rewriteHandler.c:3806 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "INSERT avec une clause ON CONFLICT ne peut pas être utilisée avec une table qui a des règles pour INSERT ou UPDATE" -#: rewrite/rewriteHandler.c:3869 +#: rewrite/rewriteHandler.c:3863 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH ne peut pas être utilisé dans une requête réécrite par des règles en plusieurs requêtes" @@ -18679,12 +18684,12 @@ msgid "requested shared memory size overflows size_t" msgstr "la taille de la mémoire partagée demandée dépasse size_t" -#: storage/ipc/standby.c:658 tcop/postgres.c:3024 +#: storage/ipc/standby.c:673 tcop/postgres.c:3024 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "annulation de la requête à cause d'un conflit avec la restauration" -#: storage/ipc/standby.c:659 tcop/postgres.c:2294 +#: storage/ipc/standby.c:674 tcop/postgres.c:2294 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "La transaction de l'utilisateur causait un verrou mortel lors de la restauration." @@ -19093,41 +19098,46 @@ msgid "could not open file \"%s\" (target block %u): %m" msgstr "n'a pas pu ouvrir le fichier « %s » (bloc cible %u) : %m" -#: tcop/fastpath.c:111 tcop/fastpath.c:463 tcop/fastpath.c:593 +#: tcop/fastpath.c:111 tcop/fastpath.c:469 tcop/fastpath.c:599 #, c-format msgid "invalid argument size %d in function call message" msgstr "taille de l'argument %d invalide dans le message d'appel de la fonction" -#: tcop/fastpath.c:309 +#: tcop/fastpath.c:227 +#, c-format +msgid "cannot call function %s via fastpath interface" +msgstr "ne peut pas appeler la fonction %s via l'interface fastpath" + +#: tcop/fastpath.c:315 #, c-format msgid "fastpath function call: \"%s\" (OID %u)" msgstr "appel de fonction fastpath : « %s » (OID %u)" -#: tcop/fastpath.c:391 tcop/postgres.c:1192 tcop/postgres.c:1455 tcop/postgres.c:1835 tcop/postgres.c:2053 +#: tcop/fastpath.c:397 tcop/postgres.c:1192 tcop/postgres.c:1455 tcop/postgres.c:1835 tcop/postgres.c:2053 #, c-format msgid "duration: %s ms" msgstr "durée : %s ms" -#: tcop/fastpath.c:395 +#: tcop/fastpath.c:401 #, c-format msgid "duration: %s ms fastpath function call: \"%s\" (OID %u)" msgstr "durée : %s ms, appel de fonction fastpath : « %s » (OID %u)" -#: tcop/fastpath.c:431 tcop/fastpath.c:558 +#: tcop/fastpath.c:437 tcop/fastpath.c:564 #, c-format msgid "function call message contains %d arguments but function requires %d" msgstr "" "le message d'appel de la fonction contient %d arguments mais la fonction en\n" "requiert %d" -#: tcop/fastpath.c:439 +#: tcop/fastpath.c:445 #, c-format msgid "function call message contains %d argument formats but %d arguments" msgstr "" "le message d'appel de la fonction contient %d formats d'argument mais %d\n" " arguments" -#: tcop/fastpath.c:526 tcop/fastpath.c:609 +#: tcop/fastpath.c:532 tcop/fastpath.c:615 #, c-format msgid "incorrect binary data format in function argument %d" msgstr "format des données binaires incorrect dans l'argument de la fonction %d" @@ -19599,12 +19609,12 @@ msgid "missing Dictionary parameter" msgstr "paramètre Dictionary manquant" -#: tsearch/spell.c:380 tsearch/spell.c:397 tsearch/spell.c:406 tsearch/spell.c:1036 +#: tsearch/spell.c:380 tsearch/spell.c:397 tsearch/spell.c:406 tsearch/spell.c:1062 #, c-format msgid "invalid affix flag \"%s\"" msgstr "drapeau d'affixe invalide « %s »" -#: tsearch/spell.c:384 tsearch/spell.c:1040 +#: tsearch/spell.c:384 tsearch/spell.c:1066 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "le drapeau d'affixe « %s » est en dehors des limites" @@ -19624,32 +19634,32 @@ msgid "could not open dictionary file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier dictionnaire « %s » : %m" -#: tsearch/spell.c:742 utils/adt/regexp.c:208 +#: tsearch/spell.c:763 utils/adt/regexp.c:208 #, c-format msgid "invalid regular expression: %s" msgstr "expression rationnelle invalide : %s" -#: tsearch/spell.c:1163 tsearch/spell.c:1175 tsearch/spell.c:1729 tsearch/spell.c:1734 tsearch/spell.c:1739 +#: tsearch/spell.c:1189 tsearch/spell.c:1201 tsearch/spell.c:1755 tsearch/spell.c:1760 tsearch/spell.c:1765 #, c-format msgid "invalid affix alias \"%s\"" msgstr "alias d'affixe invalide « %s »" -#: tsearch/spell.c:1216 tsearch/spell.c:1287 tsearch/spell.c:1431 +#: tsearch/spell.c:1242 tsearch/spell.c:1313 tsearch/spell.c:1457 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier affixe « %s » : %m" -#: tsearch/spell.c:1270 +#: tsearch/spell.c:1296 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "le dictionnaire Ispell supporte seulement les valeurs de drapeau « default », « long »et « num »" -#: tsearch/spell.c:1314 +#: tsearch/spell.c:1340 #, c-format msgid "invalid number of flag vector aliases" msgstr "nombre d'alias de vecteur de drapeau invalide" -#: tsearch/spell.c:1547 +#: tsearch/spell.c:1573 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "le fichier d'affixes contient des commandes ancien et nouveau style" @@ -20179,7 +20189,7 @@ msgid "date/time value \"current\" is no longer supported" msgstr "la valeur « current » pour la date et heure n'est plus supportée" -#: utils/adt/date.c:173 utils/adt/date.c:181 utils/adt/formatting.c:3578 utils/adt/formatting.c:3587 +#: utils/adt/date.c:173 utils/adt/date.c:181 utils/adt/formatting.c:3621 utils/adt/formatting.c:3630 #, c-format msgid "date out of range: \"%s\"" msgstr "date en dehors des limites : « %s »" @@ -20199,7 +20209,7 @@ msgid "date out of range: %d-%02d-%02d" msgstr "date en dehors des limites : %d-%02d-%02d" -#: utils/adt/date.c:328 utils/adt/date.c:351 utils/adt/date.c:377 utils/adt/date.c:1093 utils/adt/date.c:1139 utils/adt/date.c:1728 utils/adt/date.c:1759 utils/adt/date.c:1788 utils/adt/date.c:2525 utils/adt/datetime.c:1688 utils/adt/formatting.c:3453 utils/adt/formatting.c:3485 utils/adt/formatting.c:3553 utils/adt/json.c:1540 utils/adt/json.c:1562 utils/adt/jsonb.c:825 utils/adt/jsonb.c:849 utils/adt/nabstime.c:459 utils/adt/nabstime.c:502 +#: utils/adt/date.c:328 utils/adt/date.c:351 utils/adt/date.c:377 utils/adt/date.c:1093 utils/adt/date.c:1139 utils/adt/date.c:1728 utils/adt/date.c:1759 utils/adt/date.c:1788 utils/adt/date.c:2525 utils/adt/datetime.c:1688 utils/adt/formatting.c:3496 utils/adt/formatting.c:3528 utils/adt/formatting.c:3596 utils/adt/json.c:1540 utils/adt/json.c:1562 utils/adt/jsonb.c:825 utils/adt/jsonb.c:849 utils/adt/nabstime.c:459 utils/adt/nabstime.c:502 #: utils/adt/nabstime.c:532 utils/adt/nabstime.c:575 utils/adt/timestamp.c:231 utils/adt/timestamp.c:263 utils/adt/timestamp.c:683 utils/adt/timestamp.c:692 utils/adt/timestamp.c:770 utils/adt/timestamp.c:803 utils/adt/timestamp.c:2821 utils/adt/timestamp.c:2842 utils/adt/timestamp.c:2855 utils/adt/timestamp.c:2864 utils/adt/timestamp.c:2872 utils/adt/timestamp.c:2927 utils/adt/timestamp.c:2950 utils/adt/timestamp.c:2963 #: utils/adt/timestamp.c:2974 utils/adt/timestamp.c:2982 utils/adt/timestamp.c:3538 utils/adt/timestamp.c:3663 utils/adt/timestamp.c:3704 utils/adt/timestamp.c:3785 utils/adt/timestamp.c:3831 utils/adt/timestamp.c:3934 utils/adt/timestamp.c:4334 utils/adt/timestamp.c:4530 utils/adt/timestamp.c:4869 utils/adt/timestamp.c:4883 utils/adt/timestamp.c:4888 utils/adt/timestamp.c:4902 utils/adt/timestamp.c:4947 utils/adt/timestamp.c:4979 #: utils/adt/timestamp.c:4986 utils/adt/timestamp.c:5019 utils/adt/timestamp.c:5023 utils/adt/timestamp.c:5092 utils/adt/timestamp.c:5096 utils/adt/timestamp.c:5110 utils/adt/timestamp.c:5144 utils/adt/xml.c:2212 utils/adt/xml.c:2219 utils/adt/xml.c:2239 utils/adt/xml.c:2246 @@ -20632,37 +20642,37 @@ msgid "localized string format value too long" msgstr "chaîne localisée trop longue" -#: utils/adt/formatting.c:3083 +#: utils/adt/formatting.c:3126 #, c-format msgid "formatting field \"%s\" is only supported in to_char" msgstr "le formatage du champ « %s » est seulement supporté dans to_char" -#: utils/adt/formatting.c:3194 +#: utils/adt/formatting.c:3237 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "chaîne invalide en entrée pour « Y,YYY »" -#: utils/adt/formatting.c:3696 +#: utils/adt/formatting.c:3739 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "l'heure « %d » est invalide pour une horloge sur 12 heures" -#: utils/adt/formatting.c:3698 +#: utils/adt/formatting.c:3741 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Utilisez une horloge sur 24 heures ou donnez une heure entre 1 et 12." -#: utils/adt/formatting.c:3807 +#: utils/adt/formatting.c:3850 #, c-format msgid "cannot calculate day of year without year information" msgstr "ne peut pas calculer le jour de l'année sans information sur l'année" -#: utils/adt/formatting.c:4674 +#: utils/adt/formatting.c:4717 #, c-format msgid "\"EEEE\" not supported for input" msgstr "« EEEE » non supporté en entrée" -#: utils/adt/formatting.c:4686 +#: utils/adt/formatting.c:4729 #, c-format msgid "\"RN\" not supported for input" msgstr "« RN » non supporté en entrée" @@ -22600,17 +22610,17 @@ msgid "cached plan must not change result type" msgstr "le plan en cache ne doit pas modifier le type en résultat" -#: utils/cache/relcache.c:5938 +#: utils/cache/relcache.c:5939 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "n'a pas pu créer le fichier d'initialisation relation-cache « %s » : %m" -#: utils/cache/relcache.c:5940 +#: utils/cache/relcache.c:5941 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Continue malgré tout, mais quelque chose s'est mal passé." -#: utils/cache/relcache.c:6260 +#: utils/cache/relcache.c:6261 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier cache « %s » : %m" @@ -23628,10 +23638,8 @@ "soit possible." #: utils/misc/guc.c:1029 -msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications." -msgstr "" -"Écrit des pages complètes dans les WAL lors d'une première modification après\n" -"un point de vérification, y compris pour des modifications non critiques." +msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." +msgstr "Écrit des pages complètes dans les WAL lors d'une première modification après un point de vérification, y compris pour des modifications non critiques." #: utils/misc/guc.c:1039 msgid "Compresses full-page writes written in WAL file." @@ -25112,7 +25120,7 @@ msgid "cannot set parameters during a parallel operation" msgstr "ne peut pas configurer les paramètres lors d'une opération parallèle" -#: utils/misc/guc.c:5979 utils/misc/guc.c:6758 utils/misc/guc.c:6811 utils/misc/guc.c:6862 utils/misc/guc.c:7195 utils/misc/guc.c:7954 utils/misc/guc.c:8122 utils/misc/guc.c:9823 +#: utils/misc/guc.c:5979 utils/misc/guc.c:6758 utils/misc/guc.c:6811 utils/misc/guc.c:6862 utils/misc/guc.c:7195 utils/misc/guc.c:7954 utils/misc/guc.c:8122 utils/misc/guc.c:9832 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "paramètre de configuration « %s » non reconnu" @@ -25127,7 +25135,7 @@ msgid "parameter \"%s\" cannot be changed now" msgstr "le paramètre « %s » ne peut pas être modifié maintenant" -#: utils/misc/guc.c:6045 utils/misc/guc.c:6091 utils/misc/guc.c:9839 +#: utils/misc/guc.c:6045 utils/misc/guc.c:6091 utils/misc/guc.c:9848 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "droit refusé pour initialiser le paramètre « %s »" @@ -25189,47 +25197,47 @@ msgid "while setting parameter \"%s\" to \"%s\"" msgstr "lors de la configuration du paramètre « %s » avec « %s »" -#: utils/misc/guc.c:9453 +#: utils/misc/guc.c:9455 #, c-format msgid "parameter \"%s\" could not be set" msgstr "le paramètre « %s » n'a pas pu être configuré" -#: utils/misc/guc.c:9543 +#: utils/misc/guc.c:9547 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "n'a pas pu analyser la configuration du paramètre « %s »" -#: utils/misc/guc.c:9901 utils/misc/guc.c:9935 +#: utils/misc/guc.c:9910 utils/misc/guc.c:9944 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "valeur invalide pour le paramètre « %s » : %d" -#: utils/misc/guc.c:9969 +#: utils/misc/guc.c:9978 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "valeur invalide pour le paramètre « %s » : %g" -#: utils/misc/guc.c:10253 +#: utils/misc/guc.c:10279 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "« temp_buffers » ne peut pas être modifié après que des tables temporaires aient été utilisées dans la session." -#: utils/misc/guc.c:10265 +#: utils/misc/guc.c:10291 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour n'est pas supporté dans cette installation" -#: utils/misc/guc.c:10278 +#: utils/misc/guc.c:10304 #, c-format msgid "SSL is not supported by this build" msgstr "SSL n'est pas supporté dans cette installation" -#: utils/misc/guc.c:10290 +#: utils/misc/guc.c:10316 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Ne peut pas activer le paramètre avec « log_statement_stats » à true." -#: utils/misc/guc.c:10302 +#: utils/misc/guc.c:10328 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "" @@ -25486,2334 +25494,2331 @@ msgid "cannot import a snapshot from a different database" msgstr "ne peut pas importer un snapshot à partir d'une base de données différente" -#~ msgid "child process was terminated by signal %s" -#~ msgstr "le processus fils a été terminé par le signal %s" +#~ msgid "unexpected standby message type \"%c\", after receiving CopyDone" +#~ msgstr "type de message standby « %c » inattendu, après avoir reçu CopyDone" -#~ msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" -#~ msgstr "reste d'un emplacement de ligne détecté dans l'index BRIN « %s », suppression" +#~ msgid "invalid concatenation of jsonb objects" +#~ msgstr "concaténation invalide d'objets jsonb" -#~ msgid "could not write block %ld of temporary file: %m" -#~ msgstr "n'a pas pu écrire le bloc %ld du fichier temporaire : %m" +#~ msgid "cannot drop temporary schema \"%s\"" +#~ msgstr "ne peut pas supprimer le schéma temporaire « %s »" -#~ msgid "could not write to hash-join temporary file: %m" -#~ msgstr "n'a pas pu écrire le fichier temporaire de la jointure hâchée : %m" +#~ msgid "cannot drop column named in partition key" +#~ msgstr "ne peut pas supprimer une colonne nommée dans une clé de partitionnement" -#~ msgid "archive command was terminated by signal %d" -#~ msgstr "la commande d'archivage a été terminée par le signal %d" +#~ msgid "cannot drop column referenced in partition key expression" +#~ msgstr "ne peut pas supprimer une colonne référencée dans l'expression d'une clé de partitionnement" -#~ msgid "%s (PID %d) was terminated by signal %d" -#~ msgstr "%s (PID %d) a été arrêté par le signal %d" +#~ msgid "cannot alter type of column named in partition key" +#~ msgstr "ne peut pas modifier le type d'une colonne nommée dans une clé de partitionnement" -#~ msgid "Encrypt passwords." -#~ msgstr "Chiffre les mots de passe." +#~ msgid "cannot alter type of column referenced in partition key expression" +#~ msgstr "ne peut pas utiliser le type d'une colonne référencée dans l'expression d'une clé de partitionnement" -#~ 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 "" -#~ "Lorsqu'un mot de passe est spécifié dans CREATE USER ou ALTER USER sans\n" -#~ "indiquer ENCRYPTED ou UNENCRYPTED, ce paramètre détermine si le mot de passe\n" -#~ "doit être chiffré." +#~ msgid "replication identifier %d is already active for PID %d" +#~ msgstr "l'identificateur de réplication %d est déjà actif pour le PID %d" -#~ msgid "could not write to tuplestore temporary file: %m" -#~ msgstr "n'a pas pu écrire le fichier temporaire tuplestore : %m" +#~ msgid "invalid zero-length item array in MVDependencies" +#~ msgstr "tableau d'éléments de longueur zéro invalide dans MVDependencies" -#~ msgid "replication origin %d is already active for PID %d" -#~ msgstr "l'origine de réplication %d est déjà active pour le PID %d" +#~ msgid "invalid ndistinct magic %08x (expected %08x)" +#~ msgstr "nombre magique ndistinct invalide %08x (attendu %08x)" -#~ msgid "cannot PREPARE a transaction that has operated on temporary namespace" -#~ msgstr "" -#~ "ne peut pas préparer (PREPARE) une transaction qui a travaillé sur un\n" -#~ "schéma temporaire" +#~ msgid "invalid ndistinct type %d (expected %d)" +#~ msgstr "type ndistinct invalide %d (%d attendu)" -#~ msgid "view must have at least one column" -#~ msgstr "la vue doit avoir au moins une colonne" +#~ msgid "invalid zero-length item array in MVNDistinct" +#~ msgstr "tableau d'élément de longueur zéro invalide dans MVNDistinct" -#~ 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 vous êtes sûr qu'aucun processus serveur n'est toujours en cours\n" -#~ "d'exécution, supprimez le bloc de mémoire partagée\n" -#~ "ou supprimez simplement le fichier « %s »." +#~ msgid "invalid MVNDistinct size %zd (expected at least %zd)" +#~ msgstr "taille MVNDistinct %zd invalide (attendue au moins %zd)" -#~ msgid "%s in publication %s" -#~ msgstr "%s dans la publication %s" +#~ msgid "New enum values must be committed before they can be used." +#~ msgstr "Les nouvelles valeurs enum doivent être validées (COMMIT) avant de pouvoir être utilisées." -#~ msgid "column \"%s\" appears more than once in partition key" -#~ msgstr "la colonne « %s » apparaît plus d'une fois dans la clé de partitionnement" +#~ msgid "invalid number of arguments: object must be matched key value pairs" +#~ msgstr "nombre d'arguments invalide : l'objet doit correspond aux paires clé/valeur" -#~ msgid "combine function for aggregate %u must be declared as STRICT" -#~ msgstr "la fonction d'unification pour l'aggrégat %u doit être déclarée comme STRICT" +#~ msgid "" +#~ "WARNING: Calculated CRC checksum does not match value stored in file.\n" +#~ "Either the file is corrupt, or it has a different layout than this program\n" +#~ "is expecting. The results below are untrustworthy.\n" +#~ "\n" +#~ msgstr "" +#~ "ATTENTION : Les sommes de contrôle (CRC) calculées ne correspondent pas aux\n" +#~ "valeurs stockées dans le fichier.\n" +#~ "Soit le fichier est corrompu, soit son organisation diffère de celle\n" +#~ "attendue par le programme.\n" +#~ "Les résultats ci-dessous ne sont pas dignes de confiance.\n" +#~ "\n" -#~ msgid "built-in type %u not found" -#~ msgstr "type interne %u non trouvé" +#~ msgid "index row size %lu exceeds maximum %lu for index \"%s\"" +#~ msgstr "la taille de la ligne index, %lu, dépasse le maximum, %lu, pour l'index « %s »" -#~ msgid "This can be caused by having a publisher with a higher PostgreSQL major version than the subscriber." -#~ msgstr "Ceci peut avoir pour cause un publieur ayant une version majeure de PostgreSQL supérieure à l'abonné" +#~ msgid "brin operator family \"%s\" contains function %s with invalid support number %d" +#~ msgstr "" +#~ "la famille d'opérateur brin « %s » contient la fonction %s\n" +#~ "avec le numéro de support %d invalide" -#~ msgid "data type \"%s.%s\" required for logical replication does not exist" -#~ msgstr "le type de données « %s/%s » requis par la réplication logique n'existe pas" +#~ msgid "brin operator family \"%s\" contains function %s with wrong signature for support number %d" +#~ msgstr "" +#~ "la famille d'opérateur brin « %s » contient la fonction %s\n" +#~ "avec une mauvaise signature pour le numéro de support %d" -#~ msgid "cannot create range partition with empty range" -#~ msgstr "ne peut pas créer une partition par intervalle avec un intervalle vide" +#~ msgid "brin operator family \"%s\" contains operator %s with invalid strategy number %d" +#~ msgstr "" +#~ "la famille d'opérateur brin « %s » contient l'opérateur %s\n" +#~ "avec le numéro de stratégie %d invalide" -#~ msgid "could not get keyword values for locale \"%s\": %s" -#~ msgstr "n'a pas pu obtenir les valeurs des mots clés pour la locale « %s » : %s" +#~ msgid "brin operator family \"%s\" contains invalid ORDER BY specification for operator %s" +#~ msgstr "" +#~ "la famille d'opérateur brin « %s » contient une spécification\n" +#~ "ORDER BY invalide pour l'opérateur %s" -#~ msgid "invalid publish list" -#~ msgstr "liste de publication invalide" +#~ msgid "brin operator family \"%s\" contains operator %s with wrong signature" +#~ msgstr "la famille d'opérateur brin « %s » contient l'opérateur %s avec une mauvaise signature" -#~ msgid "column \"%s\" referenced in statistics does not exist" -#~ msgstr "la colonne « %s » référencée dans les statistiques n'existe pas" +#~ msgid "brin operator class \"%s\" is missing support function %d" +#~ msgstr "la classe d'opérateur brin « %s » nécessite la fonction de support %d" -#~ msgid "added subscription for table %s.%s" -#~ msgstr "souscription ajoutée pour la table %s.%s" +#~ msgid "gist operator family \"%s\" contains support procedure %s with cross-type registration" +#~ msgstr "" +#~ "la famille d'opérateur gist « %s » contient la procédure de support\n" +#~ "%s avec un enregistrement inter-type" -#~ msgid "removed subscription for table %s.%s" -#~ msgstr "a supprimé une souscription pour la table %s.%s" +#~ msgid "gist operator family \"%s\" contains function %s with invalid support number %d" +#~ msgstr "" +#~ "la famille d'opérateur gist « %s » contient la fonction %s avec\n" +#~ "le numéro de support invalide %d" -#~ msgid "User \"%s\" has an empty password." -#~ msgstr "L'utilisateur « %s » a un mot de passe vide." +#~ msgid "gist operator family \"%s\" contains function %s with wrong signature for support number %d" +#~ msgstr "" +#~ "la famille d'opérateur gist « %s » contient la fonction %s avec une mauvaise\n" +#~ "signature pour le numéro de support %d" -#~ msgid "not connected to database" -#~ msgstr "non connecté à une base de données" +#~ msgid "gist operator family \"%s\" contains operator %s with invalid strategy number %d" +#~ msgstr "" +#~ "la famille d'opérateur gist « %s » contient l'opérateur %s avec le numéro\n" +#~ "de stratégie invalide %d" -#~ msgid "invalid input syntax for %s: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type %s : « %s »" +#~ msgid "gist operator family \"%s\" contains operator %s with wrong signature" +#~ msgstr "la famille d'opérateur gist « %s » contient l'opérateur %s avec une mauvaise signature" -#~ msgid "transaction ID " -#~ msgstr "ID de transaction " +#~ msgid "gist operator class \"%s\" is missing support function %d" +#~ msgstr "la famille d'opérateur gist « %s » nécessite la fonction de support %d" -#~ msgid "in progress" -#~ msgstr "en cours" +#~ msgid "hash operator family \"%s\" contains support procedure %s with cross-type registration" +#~ msgstr "" +#~ "la famille d'opérateur hash « %s » contient la procédure de support\n" +#~ "%s avec un enregistrement inter-type" -#~ msgid "committed" -#~ msgstr "validé" +#~ msgid "hash operator family \"%s\" contains function %s with wrong signature for support number %d" +#~ msgstr "" +#~ "la famille d'opérateur hash « %s » contient la fonction %s avec une mauvaise\n" +#~ "signature pour le numéro de support %d" -#~ msgid "aborted" -#~ msgstr "annulé" +#~ msgid "hash operator family \"%s\" contains function %s with invalid support number %d" +#~ msgstr "" +#~ "la famille d'opérateur hash « %s » contient la fonction %s avec\n" +#~ "le numéro de support invalide %d" -#~ msgid "wrong range of array subscripts" -#~ msgstr "mauvais échelle des indices du tableau" +#~ msgid "hash operator family \"%s\" contains operator %s with invalid strategy number %d" +#~ msgstr "" +#~ "la famille d'opérateur hash « %s » contient l'opérateur %s avec le numéro\n" +#~ "de stratégie invalide %d" -#~ msgid "Lower bound of dimension array must be one." -#~ msgstr "La limite inférieure du tableau doit valoir un." +#~ msgid "hash operator family \"%s\" contains invalid ORDER BY specification for operator %s" +#~ msgstr "" +#~ "la famille d'opérateur hash « %s » contient la spécification ORDER BY\n" +#~ "non supportée pour l'opérateur %s" -#~ msgid "huge TLB pages not supported on this platform" -#~ msgstr "Huge Pages TLB non supporté sur cette plateforme." +#~ msgid "hash operator family \"%s\" contains operator %s with wrong signature" +#~ msgstr "la famille d'opérateur hash « %s » contient l'opérateur %s avec une mauvaise signature" -#~ msgid "Only superusers can use untrusted languages." +#~ msgid "hash operator family \"%s\" is missing operator(s) for types %s and %s" #~ msgstr "" -#~ "Seuls les super-utilisateurs peuvent utiliser des langages qui ne sont pas\n" -#~ "de confiance." +#~ "la famille d'opérateur hash « %s » nécessite des opérateurs supplémentaires\n" +#~ "pour les types %s et %s" -#~ msgid "function returning set of rows cannot return null value" -#~ msgstr "" -#~ "la fonction renvoyant un ensemble de lignes ne peut pas renvoyer une valeur\n" -#~ "NULL" +#~ msgid "hash operator class \"%s\" is missing operator(s)" +#~ msgstr "il manque des opérateurs pour la classe d'opérateur hash « %s »" -#~ msgid "system columns cannot be used in an ON CONFLICT clause" -#~ msgstr "les colonnes systèmes ne peuvent pas être utilisées dans une clause ON CONFLICT" +#~ msgid "btree operator family \"%s\" contains function %s with invalid support number %d" +#~ msgstr "" +#~ "la famille d'opérateur btree « %s » contient la fonction %s\n" +#~ "avec le numéro de support invalide %d" -#~ msgid "role \"%s\" is reserved" -#~ msgstr "le rôle « %s » est réservé" +#~ msgid "btree operator family \"%s\" contains function %s with wrong signature for support number %d" +#~ msgstr "" +#~ "la famille d'opérateur btree « %s » contient la fonction %s\n" +#~ "avec une mauvaise signature pour le numéro de support %d" -#~ msgid "time zone abbreviation \"%s\" is not used in time zone \"%s\"" -#~ msgstr "l'abréviation « %s » du fuseau horaire n'est pas utilisée dans le fuseau horaire « %s »" +#~ msgid "btree operator family \"%s\" contains operator %s with invalid strategy number %d" +#~ msgstr "" +#~ "la famille d'opérateur btree « %s » contient l'opérateur %s\n" +#~ "avec le numéro de stratégie invalide %d" -#~ msgid "invalid length in external \"numeric\" value" -#~ msgstr "longueur invalide dans la valeur externe « numeric »" +#~ msgid "btree operator family \"%s\" contains invalid ORDER BY specification for operator %s" +#~ msgstr "" +#~ "la famille d'opérateur btree « %s » contient une spécification\n" +#~ "ORDER BY invalide pour l'opérateur %s" -#~ msgid "too few arguments for format" -#~ msgstr "trop peu d'arguments pour le format" +#~ msgid "btree operator family \"%s\" contains operator %s with wrong signature" +#~ msgstr "la famille d'opérateur btree « %s » contient l'opérateur %s avec une mauvaise signature" -#~ msgid "mapped win32 error code %lu to %d" -#~ msgstr "correspondance du code d'erreur win32 %lu en %d" +#~ msgid "btree operator family \"%s\" is missing operator(s) for types %s and %s" +#~ msgstr "" +#~ "la famille d'opérateur btree « %s » nécessite des opérateurs supplémentaires\n" +#~ "pour les types %s et %s" -#~ msgid "unrecognized win32 error code: %lu" -#~ msgstr "code d'erreur win32 non reconnu : %lu" +#~ msgid "btree operator class \"%s\" is missing operator(s)" +#~ msgstr "il manque des opérateurs pour la classe d'opérateur btree « %s »" -#~ msgid "invalid value for recovery parameter \"recovery_target\"" -#~ msgstr "valeur invalide pour le paramètre de restauration « recovery_target »" +#~ msgid "btree operator family \"%s\" is missing cross-type operator(s)" +#~ msgstr "il manque des opérateurs inter-type pour la famille d'opérateur btree « %s »" -#~ msgid "redo record is at %X/%X; shutdown %s" -#~ msgstr "l'enregistrement à ré-exécuter se trouve à %X/%X ; arrêt %s" +#~ msgid "spgist operator family \"%s\" contains support procedure %s with cross-type registration" +#~ msgstr "" +#~ "la famille d'opérateur spgist « %s » contient la procédure de support\n" +#~ "%s avec un enregistrement inter-type" -#~ msgid "next transaction ID: %u/%u; next OID: %u" -#~ msgstr "prochain identifiant de transaction : %u/%u ; prochain OID : %u" +#~ msgid "spgist operator family \"%s\" contains function %s with invalid support number %d" +#~ msgstr "" +#~ "la famille d'opérateur spgist « %s » contient la fonction %s\n" +#~ "avec le numéro de support %d invalide" -#~ msgid "next MultiXactId: %u; next MultiXactOffset: %u" -#~ msgstr "prochain MultiXactId : %u ; prochain MultiXactOffset : %u" +#~ msgid "spgist operator family \"%s\" contains function %s with wrong signature for support number %d" +#~ msgstr "" +#~ "la famille d'opérateur spgist « %s » contient la fonction %s\n" +#~ "avec une mauvaise signature pour le numéro de support %d" -#~ msgid "oldest unfrozen transaction ID: %u, in database %u" +#~ msgid "spgist operator family \"%s\" contains operator %s with invalid strategy number %d" #~ msgstr "" -#~ "identifiant de transaction non gelé le plus ancien : %u, dans la base de\n" -#~ "données %u" +#~ "la famille d'opérateur spgist « %s » contient l'opérateur %s\n" +#~ "avec le numéro de stratégie invalide %d" -#~ msgid "invalid xlog switch record at %X/%X" -#~ msgstr "enregistrement de basculement du journal de transaction invalide à %X/%X" +#~ msgid "spgist operator family \"%s\" contains invalid ORDER BY specification for operator %s" +#~ msgstr "" +#~ "la famille d'opérateur spgist « %s » contient une spécification\n" +#~ "ORDER BY invalide pour l'opérateur %s" -#~ msgid "record with zero length at %X/%X" -#~ msgstr "enregistrement de longueur nulle à %X/%X" +#~ msgid "spgist operator family \"%s\" contains operator %s with wrong signature" +#~ msgstr "la famille d'opérateur spgist « %s » contient l'opérateur %s avec une mauvaise signature" -#~ msgid "invalid backup block size in record at %X/%X" -#~ msgstr "taille du bloc de sauvegarde invalide dans l'enregistrement à %X/%X" +#~ msgid "spgist operator family \"%s\" is missing operator(s) for types %s and %s" +#~ msgstr "" +#~ "la famille d'opérateur spgist « %s » nécessite des opérateurs supplémentaires\n" +#~ "pour les types %s et %s" -#~ msgid "incorrect hole size in record at %X/%X" -#~ msgstr "taille du trou incorrect à l'enregistrement %X/%X" +#~ msgid "spgist operator class \"%s\" is missing operator(s)" +#~ msgstr "il manque des opérateurs pour la classe d'opérateur spgist « %s »" -#~ msgid "incorrect total length in record at %X/%X" -#~ msgstr "longueur totale incorrecte à l'enregistrement %X/%X" +#~ msgid "Expected a transaction log switchpoint location." +#~ msgstr "Attendait un emplacement de bascule dans le journal de transactions." -#~ msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s." -#~ msgstr "" -#~ "L'identifiant du journal de transactions du système de base de données est %s,\n" -#~ "l'identifiant pg_control du système de base de données dans pg_control est %s." +#~ msgid "could not open transaction log file \"%s\": %m" +#~ msgstr "n'a pas pu ouvrir le journal des transactions « %s » : %m" -#~ msgid "WAL file is from different database system: Incorrect XLOG_SEG_SIZE in page header." -#~ msgstr "" -#~ "le journal de transactions provient d'un système de bases de données différent :\n" -#~ "XLOG_SEG_SIZE incorrect dans l'en-tête de page." +#~ msgid "could not remove old transaction log file \"%s\": %m" +#~ msgstr "n'a pas pu supprimer l'ancien journal de transaction « %s » : %m" -#~ msgid "WAL file is from different database system: Incorrect XLOG_BLCKSZ in page header." -#~ msgstr "" -#~ "le journal de transactions provient d'un système de bases de données différent :\n" -#~ "XLOG_BLCKSZ incorrect dans l'en-tête de page." +#~ msgid "removing transaction log backup history file \"%s\"" +#~ msgstr "suppression du fichier historique des journaux de transaction « %s »" -#~ msgid "=> is deprecated as an operator name" -#~ msgstr "=> est un nom d'opérateur obsolète" +#~ msgid "The database cluster was initialized without HAVE_INT64_TIMESTAMP but the server was compiled with HAVE_INT64_TIMESTAMP." +#~ msgstr "Le cluster de bases de données a été initialisé sans HAVE_INT64_TIMESTAMPalors que le serveur a été compilé avec." -#~ msgid "This name may be disallowed altogether in future versions of PostgreSQL." -#~ msgstr "Ce nom pourrait être interdit dans les prochaines versions de PostgreSQL." +#~ msgid "The database cluster was initialized with HAVE_INT64_TIMESTAMP but the server was compiled without HAVE_INT64_TIMESTAMP." +#~ msgstr "" +#~ "Le cluster de bases de données a été initialisé avec HAVE_INT64_TIMESTAMP\n" +#~ "alors que le serveur a été compilé sans." -#~ msgid "\"%s\" is not a table, materialized view, composite type, or foreign table" -#~ msgstr "« %s » n'est ni une table, ni une vue matérialisée, ni un type composite, ni une table distante" +#~ msgid "invalid privilege type USAGE for table" +#~ msgstr "droit USAGE invalide pour la table" -#~ msgid "Specify a USING expression to perform the conversion." -#~ msgstr "Donnez une expression USING pour réaliser la conversion." +#~ msgid "column \"%s\" has type \"unknown\"" +#~ msgstr "la colonne « %s » est de type « unknown »" -#~ 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 automatique de la table « %s.%s.%s » : parcours d'index : %d\n" -#~ "pages : %d supprimées, %d restantes\n" -#~ "lignes : %.0f supprimées, %.0f restantes, %.0f sont mortes mais non supprimables\n" -#~ "utilisation des tampons : %d lus dans le cache, %d lus hors du cache, %d modifiés\n" -#~ "taux moyen de lecture : %.3f Mo/s, taux moyen d'écriture : %.3f Mo/s\n" -#~ "utilisation système : %s" +#~ msgid "Proceeding with relation creation anyway." +#~ msgstr "Poursuit malgré tout la création de la relation." -#~ 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 versions de lignes mortes ne peuvent pas encore être supprimées.\n" -#~ "Il y avait %.0f pointeurs d'éléments inutilisés.\n" -#~ "%u pages sont entièrement vides.\n" -#~ "%s." +#~ msgid "default expression must not return a set" +#~ msgstr "l'expression par défaut ne doit pas renvoyer un ensemble" -#~ msgid "interval precision specified twice" -#~ msgstr "précision d'intervalle spécifiée deux fois" +#~ msgid "access method name cannot be qualified" +#~ msgstr "le nom de la méthode d'accès ne peut pas être qualifiée" -#~ msgid "received password packet" -#~ msgstr "paquet du mot de passe reçu" +#~ msgid "database name cannot be qualified" +#~ msgstr "le nom de la base de donnée ne peut être qualifié" -#~ msgid "SSL failure during renegotiation start" -#~ msgstr "échec SSL au début de la re-négotiation" +#~ msgid "extension name cannot be qualified" +#~ msgstr "le nom de l'extension ne peut pas être qualifié" -#~ msgid "SSL handshake failure on renegotiation, retrying" -#~ msgstr "échec du handshake SSL lors de la renégotiation, nouvelle tentative" +#~ msgid "tablespace name cannot be qualified" +#~ msgstr "le nom du tablespace ne peut pas être qualifié" -#~ msgid "could not complete SSL handshake on renegotiation, too many failures" -#~ msgstr "n'a pas pu terminer la poignée de main de renégotiation, trop d'échecs" +#~ msgid "role name cannot be qualified" +#~ msgstr "le nom du rôle ne peut pas être qualifié" -#~ msgid "SSL failed to renegotiate connection before limit expired" -#~ msgstr "SSL a échoué à renégotier la connexion avant l'expiration du délai" +#~ msgid "schema name cannot be qualified" +#~ msgstr "le nom du schéma ne peut pas être qualifié" -#~ msgid "could not set socket to blocking mode: %m" -#~ msgstr "n'a pas pu activer le mode bloquant pour la socket : %m" +#~ msgid "language name cannot be qualified" +#~ msgstr "le nom du langage ne peut pas être qualifié" -#~ msgid "%s: setsysinfo failed: %s\n" -#~ msgstr "%s : setsysinfo a échoué : %s\n" +#~ msgid "foreign-data wrapper name cannot be qualified" +#~ msgstr "le nom du wrapper de données distantes ne peut pas être qualifié" -#~ msgid " -A 1|0 enable/disable run-time assert checking\n" -#~ msgstr "" -#~ " -A 1|0 active/désactive la vérification des limites (assert) à\n" -#~ " l'exécution\n" +#~ msgid "server name cannot be qualified" +#~ msgstr "le nom du serveur ne peut pas être qualifié" -#~ msgid "subquery must return a column" -#~ msgstr "la sous-requête doit renvoyer une colonne" +#~ msgid "event trigger name cannot be qualified" +#~ msgstr "le nom du trigger sur événement ne peut pas être qualifié" -#~ msgid "Consider increasing the configuration parameter \"checkpoint_segments\"." -#~ msgstr "Considèrez l'augmentation du paramètre « checkpoint_segments »." +#~ msgid "hash indexes are not WAL-logged and their use is discouraged" +#~ msgstr "les index hash ne sont pas journalisés, leur utilisation est donc déconseillée" -#~ msgid "WAL archival (archive_mode=on) requires wal_level \"archive\", \"hot_standby\", or \"logical\"" +#~ msgid "changing return type of function %s from \"opaque\" to \"language_handler\"" #~ msgstr "" -#~ "l'archivage des journaux de transactions (archive_mode=on) nécessite que\n" -#~ "le paramètre wal_level soit initialisé avec « archive », « hot_standby » ou « logical »" +#~ "changement du type du code retour de la fonction %s d'« opaque » à\n" +#~ "« language_handler »" -#~ msgid "invalid value for parameter \"replication\"" -#~ msgstr "valeur invalide pour le paramètre « replication »" +#~ msgid "changing return type of function %s from \"opaque\" to \"trigger\"" +#~ msgstr "changement du type de retour de la fonction %s de « opaque » vers « trigger »" -#~ msgid "postmaster became multithreaded" -#~ msgstr "le postmaster est devenu multithreadé" +#~ msgid "functions and operators can take at most one set argument" +#~ msgstr "les fonctions et opérateurs peuvent prendre au plus un argument d'ensemble" -#~ msgid "archive member \"%s\" too large for tar format" -#~ msgstr "membre « %s » de l'archive trop volumineux pour le format tar" +#~ msgid "IS DISTINCT FROM does not support set arguments" +#~ msgstr "IS DISTINCT FROM ne supporte pas les arguments d'ensemble" -#~ msgid "could not determine input data types" -#~ msgstr "n'a pas pu déterminer les types de données en entrée" +#~ msgid "op ANY/ALL (array) does not support set arguments" +#~ msgstr "" +#~ "l'opérateur ANY/ALL (pour les types array) ne supporte pas les arguments\n" +#~ "d'ensemble" -#~ msgid "neither input type is an array" -#~ msgstr "aucun type de données n'est un tableau" +#~ msgid "NULLIF does not support set arguments" +#~ msgstr "NULLIF ne supporte pas les arguments d'ensemble" -#~ msgid "unexpected \"=\"" -#~ msgstr "« = » inattendu" +#~ msgid "hostssl requires SSL to be turned on" +#~ msgstr "hostssl requiert que SSL soit activé" -#~ msgid "invalid symbol" -#~ msgstr "symbole invalide" +#~ msgid "could not create %s socket: %m" +#~ msgstr "n'a pas pu créer le socket %s : %m" -#~ msgid "must be superuser or have the same role to cancel queries running in other server processes" -#~ msgstr "" -#~ "doit être super-utilisateur ou avoir le même rôle pour annuler des requêtes\n" -#~ "exécutées dans les autres processus serveur" +#~ msgid "could not bind %s socket: %m" +#~ msgstr "n'a pas pu se lier à la socket %s : %m" -#~ msgid "must be superuser or have the same role to terminate other server processes" -#~ msgstr "" -#~ "doit être super-utilisateur ou avoir le même rôle pour fermer les connexions\n" -#~ "exécutées dans les autres processus serveur" +#~ msgid "WHERE CURRENT OF is not supported on a view with no underlying relation" +#~ msgstr "WHERE CURRENT OF n'est pas supporté pour une vue sans table sous-jacente" -#~ msgid "cannot accept a value of type pg_node_tree" -#~ msgstr "ne peut pas accepter une valeur de type pg_node_tree" +#~ msgid "WHERE CURRENT OF is not supported on a view with more than one underlying relation" +#~ msgstr "WHERE CURRENT OF n'est pas supporté pour une vue avec plus d'une table sous-jacente" -#~ msgid "Turns on various assertion checks." -#~ msgstr "Active les différentes vérifications des assertions." +#~ msgid "WHERE CURRENT OF is not supported on a view with grouping or aggregation" +#~ msgstr "WHERE CURRENT OF n'est pas supporté pour une vue avec regroupement ou agrégat" -#~ msgid "This is a debugging aid." -#~ msgstr "C'est une aide de débogage." +#~ msgid "DEFAULT can only appear in a VALUES list within INSERT" +#~ msgstr "DEFAULT peut seulement apparaître dans la liste VALUES comprise dans un INSERT" -#~ msgid "This parameter doesn't do anything." -#~ msgstr "Ce paramètre ne fait rien." +#~ msgid "argument of %s must be type boolean, not type %s" +#~ msgstr "l'argument de %s doit être de type booléen, et non du type %s" -#~ msgid "It's just here so that we won't choke on SET AUTOCOMMIT TO ON from 7.3-vintage clients." +#~ msgid "argument declared \"anyrange\" is not consistent with argument declared \"anyelement\"" #~ msgstr "" -#~ "C'est ici uniquement pour ne pas avoir de problèmes avec le SET AUTOCOMMIT\n" -#~ "TO ON des clients 7.3." +#~ "l'argument déclaré « anyrange » n'est pas cohérent avec l'argument déclaré\n" +#~ "« anyelement »" -#~ msgid "Sets the maximum distance in log segments between automatic WAL checkpoints." -#~ msgstr "" -#~ "Initialise la distance maximale dans les journaux de transaction entre chaque\n" -#~ "point de vérification (checkpoints) des journaux." +#~ msgid "index expression cannot return a set" +#~ msgstr "l'expression de l'index ne peut pas renvoyer un ensemble" -#~ msgid "Set the amount of traffic to send and receive before renegotiating the encryption keys." +#~ msgid "transform expression must not return a set" +#~ msgstr "l'expression de transformation ne doit pas renvoyer un ensemble" + +#~ msgid "autovacuum: found orphan temp table \"%s\".\"%s\" in database \"%s\"" #~ msgstr "" -#~ "Configure la quantité de trafic à envoyer et recevoir avant la renégotiation\n" -#~ "des clés d'enchiffrement." +#~ "autovacuum : a trouvé la table temporaire orpheline « %s.%s » dans la base de\n" +#~ "données « %s »" -#~ msgid "assertion checking is not supported by this build" -#~ msgstr "la vérification de l'assertion n'a pas été intégrée lors de la compilation" +#~ msgid "transaction log switch forced (archive_timeout=%d)" +#~ msgstr "changement forcé du journal de transaction (archive_timeout=%d)" -#~ msgid "%s \"%s\": return code %d" -#~ msgstr "%s « %s » : code de retour %d" +#~ msgid "archived transaction log file \"%s\"" +#~ msgstr "journal des transactions archivé « %s »" -#~ msgid "could not parse transaction log location \"%s\"" -#~ msgstr "n'a pas pu analyser l'emplacement du journal des transactions « %s »" +#~ msgid "syntax error: unexpected character \"%s\"" +#~ msgstr "erreur de syntaxe : caractère « %s » inattendu" -#~ msgid "invalid input syntax for transaction log location: \"%s\"" -#~ msgstr "syntaxe invalide en entrée pour l'emplacement du journal de transactions : « %s »" +#~ msgid "invalid socket: %s" +#~ msgstr "socket invalide : %s" -#~ msgid "trigger \"%s\" for table \"%s\" does not exist, skipping" -#~ msgstr "le trigger « %s » pour la table « %s » n'existe pas, poursuite du traitement" +#~ msgid "select() failed: %m" +#~ msgstr "échec de select() : %m" -#~ msgid "Kerberos 5 authentication failed for user \"%s\"" -#~ msgstr "authentification Kerberos 5 échouée pour l'utilisateur « %s »" +#~ msgid "Transaction ID %u finished; no more running transactions." +#~ msgstr "Identifiant de transaction %u terminé ; plus de transactions en cours." -#~ msgid "Kerberos initialization returned error %d" -#~ msgstr "l'initialisation de Kerberos a retourné l'erreur %d" +#~ msgid "%u transaction needs to finish." +#~ msgid_plural "%u transactions need to finish." +#~ msgstr[0] "La transaction %u doit se terminer." +#~ msgstr[1] "Les transactions %u doivent se terminer." -#~ msgid "Kerberos keytab resolving returned error %d" -#~ msgstr "la résolution keytab de Kerberos a renvoyé l'erreur %d" +#~ msgid "rule \"%s\" does not exist" +#~ msgstr "la règle « %s » n'existe pas" -#~ msgid "Kerberos sname_to_principal(\"%s\", \"%s\") returned error %d" -#~ msgstr "sname_to_principal(« %s », « %s ») de Kerberos a renvoyé l'erreur %d" +#~ msgid "there are multiple rules named \"%s\"" +#~ msgstr "il existe de nombreuses règles nommées « %s »" -#~ msgid "Kerberos recvauth returned error %d" -#~ msgstr "recvauth de Kerberos a renvoyé l'erreur %d" +#~ msgid "Specify a relation name as well as a rule name." +#~ msgstr "Spécifier un nom de relation ainsi qu'un nom de règle." -#~ msgid "Kerberos unparse_name returned error %d" -#~ msgstr "unparse_name de Kerberos a renvoyé l'erreur %d" +#~ msgid "not enough shared memory for elements of data structure \"%s\" (%zu bytes requested)" +#~ msgstr "" +#~ "pas assez de mémoire partagée pour les éléments de la structure de données\n" +#~ "« %s » (%zu octets demandés)" -#~ msgid "local user with ID %d does not exist" -#~ msgstr "l'utilisateur local dont l'identifiant est %d n'existe pas" +#~ msgid "invalid input syntax for type boolean: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type booléen : « %s »" -#~ msgid "SSL renegotiation failure" -#~ msgstr "échec lors de la re-négotiation SSL" +#~ msgid "invalid input syntax for type money: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type money : « %s »" -#~ msgid "krb5 authentication is not supported on local sockets" -#~ msgstr "" -#~ "l'authentification krb5 n'est pas supportée sur les connexions locales par\n" -#~ "socket" +#~ msgid "invalid input syntax for type bytea" +#~ msgstr "syntaxe en entrée invalide pour le type bytea" -#~ msgid "%s: invalid effective UID: %d\n" -#~ msgstr "%s : UID effectif invalide : %d\n" +#~ msgid "invalid input syntax for type real: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type real : « %s »" -#~ msgid "%s: could not determine user name (GetUserName failed)\n" -#~ msgstr "%s : n'a pas pu déterminer le nom de l'utilisateur (GetUserName a échoué)\n" +#~ msgid "\"TZ\"/\"tz\"/\"OF\" format patterns are not supported in to_date" +#~ msgstr "les motifs de format « TZ »/« tz »/« OF » ne sont pas supportés dans to_date" -#~ msgid "Expected 1 tuple with 3 fields, got %d tuples with %d fields." -#~ msgstr "Attendait 1 ligne avec 3 champs, a obtenu %d lignes avec %d champs." +#~ msgid "value \"%s\" is out of range for type bigint" +#~ msgstr "la valeur « %s » est en dehors des limites du type bigint" -#~ msgid "Security-barrier views are not automatically updatable." -#~ msgstr "Les vues avec barrière de sécurité ne sont pas automatiquement disponibles en écriture." +#~ msgid "could not determine data type for argument 1" +#~ msgstr "n'a pas pu déterminer le type de données pour l'argument 1" -#~ msgid "Views that return the same column more than once are not automatically updatable." -#~ msgstr "Les vues qui renvoient la même colonne plus d'une fois ne sont pas automatiquement disponibles en écriture." +#~ msgid "could not determine data type for argument 2" +#~ msgstr "n'a pas pu déterminer le type de données pour l'argument 2" -#~ msgid "wrong affix file format for flag" -#~ msgstr "mauvais format de fichier affixe pour le drapeau" +#~ msgid "argument %d: could not determine data type" +#~ msgstr "argument %d : n'a pas pu déterminer le type de données" -#~ msgid "missing assignment operator" -#~ msgstr "opérateur d'affectation manquant" +#~ msgid "invalid input syntax for type macaddr: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type macaddr : « %s »" -#~ msgid "cannot call json_object_keys on an array" -#~ msgstr "ne peut pas appeler json_object_keys sur un tableau" +#~ msgid "invalid input syntax for type tinterval: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type tinterval : « %s »" -#~ msgid "cannot call json_object_keys on a scalar" -#~ msgstr "ne peut pas appeler json_object_keys sur un scalaire" +#~ msgid "invalid input syntax for type numeric: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type numeric : « %s »" -#~ msgid "cannot call function with null path elements" -#~ msgstr "ne peut pas appeler une fonction avec des éléments chemins NULL" +#~ msgid "invalid input syntax for type double precision: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type double precision : « %s »" -#~ msgid "cannot extract array element from a non-array" -#~ msgstr "ne peut pas extraire un élément du tableau à partir d'un objet qui n'est pas un tableau" +#~ msgid "value \"%s\" is out of range for type integer" +#~ msgstr "la valeur « %s » est en dehors des limites du type integer" -#~ msgid "cannot extract field from a non-object" -#~ msgstr "ne peut pas extraire le chemin à partir d'un non-objet" +#~ msgid "value \"%s\" is out of range for type smallint" +#~ msgstr "la valeur « %s » est en dehors des limites du type smallint" -#~ msgid "cannot call json_array_elements on a non-array" -#~ msgstr "ne peut pas appeler json_array_elements sur un objet qui n'est pas un tableau" +#~ msgid "invalid input syntax for type oid: \"%s\"" +#~ msgstr "syntaxe invalide en entrée pour le type oid : « %s »" -#~ msgid "cannot call json_array_elements on a scalar" -#~ msgstr "ne peut pas appeler json_array_elements sur un scalaire" +#~ msgid "nondefault collations are not supported on this platform" +#~ msgstr "les collationnements autres que par défaut ne sont pas supportés sur cette plateforme" -#~ msgid "first argument of json_populate_record must be a row type" -#~ msgstr "le premier argument de json_populate_record doit être un type ROW" +#~ msgid "invalid input syntax for type pg_lsn: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type pg_lsn : « %s »" -#~ msgid "first argument of json_populate_recordset must be a row type" -#~ msgstr "le premier argument de json_populate_recordset doit être un type ROW" +#~ msgid "cannot accept a value of type any" +#~ msgstr "ne peut pas accepter une valeur de type any" -#~ msgid "cannot call json_populate_recordset on an object" -#~ msgstr "ne peut pas appeler json_populate_recordset sur un objet" +#~ msgid "cannot accept a value of type anyarray" +#~ msgstr "ne peut pas accepter une valeur de type anyarray" -#~ msgid "cannot call json_populate_recordset with nested objects" -#~ msgstr "ne peut pas appeler json_populate_recordset sur des objets imbriqués" +#~ msgid "cannot accept a value of type anyenum" +#~ msgstr "ne peut pas accepter une valeur de type anyenum" -#~ msgid "must call json_populate_recordset on an array of objects" -#~ msgstr "doit appeler json_populate_recordset sur un tableau d'objets" +#~ msgid "cannot accept a value of type anyrange" +#~ msgstr "ne peut pas accepter une valeur de type anyrange" -#~ msgid "cannot call json_populate_recordset with nested arrays" -#~ msgstr "ne peut pas appeler json_populate_recordset avec des tableaux imbriqués" +#~ msgid "cannot accept a value of type trigger" +#~ msgstr "ne peut pas accepter une valeur de type trigger" -#~ msgid "cannot call json_populate_recordset on a scalar" -#~ msgstr "ne peut pas appeler json_populate_recordset sur un scalaire" +#~ msgid "cannot display a value of type trigger" +#~ msgstr "ne peut pas afficher une valeur de type trigger" -#~ msgid "cannot call json_populate_recordset on a nested object" -#~ msgstr "ne peut pas appeler json_populate_recordset sur un objet imbriqué" +#~ msgid "cannot accept a value of type event_trigger" +#~ msgstr "ne peut pas accepter une valeur de type event_trigger" -#~ msgid "No description available." -#~ msgstr "Aucune description disponible." +#~ msgid "cannot display a value of type event_trigger" +#~ msgstr "ne peut pas afficher une valeur de type event_trigger" -#~ msgid "Sets the name of the Kerberos service." -#~ msgstr "Initialise le nom du service Kerberos." +#~ msgid "cannot accept a value of type language_handler" +#~ msgstr "ne peut pas accepter une valeur de type language_handler" -#~ msgid "time zone offset %d is not a multiple of 900 sec (15 min) in time zone file \"%s\", line %d" -#~ msgstr "" -#~ "le décalage %d du fuseau horaire n'est pas un multiples de 900 secondes\n" -#~ "(15 minutes) dans le fichier des fuseaux horaires « %s », ligne %d" +#~ msgid "cannot display a value of type language_handler" +#~ msgstr "ne peut pas afficher une valeur de type language_handler" -#~ msgid "Perhaps out of disk space?" -#~ msgstr "Peut-être manquez-vous de place disque ?" +#~ msgid "cannot accept a value of type fdw_handler" +#~ msgstr "ne peut pas accepter une valeur de type fdw_handler" -#~ msgid "could not change directory to \"%s\"" -#~ msgstr "n'a pas pu accéder au répertoire « %s »" +#~ msgid "cannot display a value of type fdw_handler" +#~ msgstr "ne peut pas afficher une valeur de type fdw_handler" -#~ msgid "unlogged GiST indexes are not supported" -#~ msgstr "les index GiST non tracés ne sont pas supportés" +#~ msgid "cannot accept a value of type index_am_handler" +#~ msgstr "ne peut pas accepter une valeur de type index_am_handler" -#~ msgid "could not open file \"%s\" (log file %u, segment %u): %m" -#~ msgstr "n'a pas pu ouvrir le fichier « %s » (journal de transactions %u, segment %u) : %m" +#~ msgid "cannot display a value of type index_am_handler" +#~ msgstr "ne peut pas afficher une valeur de type index_am_handler" -#~ msgid "there is no contrecord flag in log file %u, segment %u, offset %u" -#~ msgstr "" -#~ "il n'y a pas de drapeaux « contrecord » dans le journal de transactions %u,\n" -#~ "segment %u, décalage %u" +#~ msgid "cannot accept a value of type tsm_handler" +#~ msgstr "ne peut pas accepter une valeur de type tsm_handler" -#~ msgid "invalid contrecord length %u in log file %u, segment %u, offset %u" -#~ msgstr "" -#~ "longueur invalide du « contrecord » %u dans le journal de tranasctions %u,\n" -#~ "segment %u, décalage %u" +#~ msgid "cannot display a value of type tsm_handler" +#~ msgstr "ne peut pas afficher une valeur de type tsm_handler" -#~ msgid "Incorrect XLOG_SEG_SIZE in page header." -#~ msgstr "XLOG_SEG_SIZE incorrecte dans l'en-tête de page." +#~ msgid "cannot accept a value of type internal" +#~ msgstr "ne peut pas accepter une valeur de type internal" -#~ msgid "Incorrect XLOG_BLCKSZ in page header." -#~ msgstr "XLOG_BLCKSZ incorrect dans l'en-tête de page." +#~ msgid "cannot display a value of type internal" +#~ msgstr "ne peut pas afficher une valeur de type internal" -#~ msgid "xrecoff \"%X\" is out of valid range, 0..%X" -#~ msgstr "xrecoff « %X » en dehors des limites valides, 0..%X" +#~ msgid "cannot accept a value of type opaque" +#~ msgstr "ne peut pas accepter une valeur de type opaque" -#~ msgid "uncataloged table %s" -#~ msgstr "table %s sans catalogue" +#~ msgid "cannot display a value of type opaque" +#~ msgstr "ne peut pas afficher une valeur de type opaque" -#~ msgid "cannot use subquery in default expression" -#~ msgstr "ne peut pas utiliser une sous-requête dans l'expression par défaut" +#~ msgid "cannot accept a value of type anyelement" +#~ msgstr "ne peut pas accepter une valeur de type anyelement" -#~ msgid "cannot use aggregate function in default expression" -#~ msgstr "ne peut pas utiliser une fonction d'agrégat dans une expression par défaut" +#~ msgid "cannot display a value of type anyelement" +#~ msgstr "ne peut pas afficher une valeur de type anyelement" -#~ msgid "cannot use window function in default expression" -#~ msgstr "ne peut pas utiliser une fonction window dans une expression par défaut" +#~ msgid "cannot accept a value of type anynonarray" +#~ msgstr "ne peut pas accepter une valeur de type anynonarray" -#~ msgid "cannot use window function in check constraint" -#~ msgstr "ne peut pas utiliser une fonction window dans une contrainte de vérification" +#~ msgid "cannot display a value of type anynonarray" +#~ msgstr "ne peut pas afficher une valeur de type anynonarray" -#~ msgid "A function returning ANYRANGE must have at least one ANYRANGE argument." -#~ msgstr "" -#~ "Une fonction renvoyant ANYRANGE doit avoir au moins un argument du type\n" -#~ "ANYRANGE." +#~ msgid "invalid input syntax for type tid: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type tid : « %s »" -#~ msgid "%s already exists in schema \"%s\"" -#~ msgstr "%s existe déjà dans le schéma « %s »" +#~ msgid "invalid input syntax for type txid_snapshot: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type txid_snapshot : « %s »" -#~ msgid "CREATE TABLE AS specifies too many column names" -#~ msgstr "CREATE TABLE AS spécifie trop de noms de colonnes" +#~ msgid "invalid input syntax for uuid: \"%s\"" +#~ msgstr "syntaxe invalide en entrée pour l'uuid : « %s »" -#~ msgid "cannot use subquery in parameter default value" -#~ msgstr "ne peut pas utiliser une sous-requête dans une valeur par défaut d'un paramètre" +#~ msgid "function %u has too many arguments (%d, maximum is %d)" +#~ msgstr "la fonction %u a trop d'arguments (%d, le maximum étant %d)" -#~ msgid "cannot use aggregate function in parameter default value" +#~ msgid "Causes subtables to be included by default in various commands." #~ msgstr "" -#~ "ne peut pas utiliser une fonction d'agrégat dans la valeur par défaut d'un\n" -#~ "paramètre" +#~ "Fait que les sous-tables soient incluses par défaut dans les différentes\n" +#~ "commandes." -#~ msgid "cannot use window function in parameter default value" -#~ msgstr "ne peut pas utiliser la fonction window dans la valeur par défaut d'un paramètre" +#~ msgid "could not create two-phase state file \"%s\": %m" +#~ msgstr "" +#~ "n'a pas pu créer le fichier de statut de la validation en deux phases nommé\n" +#~ "« %s » : %m" -#~ msgid "Use ALTER AGGREGATE to rename aggregate functions." -#~ msgstr "Utiliser ALTER AGGREGATE pour renommer les fonctions d'agrégat." +#~ msgid "could not seek in two-phase state file: %m" +#~ msgstr "" +#~ "n'a pas pu se déplacer dans le fichier de statut de la validation en deux\n" +#~ "phases : %m" -#~ msgid "Use ALTER AGGREGATE to change owner of aggregate functions." -#~ msgstr "Utiliser ALTER AGGREGATE pour changer le propriétaire des fonctions d'agrégat." +#~ msgid "two-phase state file for transaction %u is corrupt" +#~ msgstr "" +#~ "le fichier d'état de la validation en deux phases est corrompu pour la\n" +#~ "transaction %u" -#~ msgid "function \"%s\" already exists in schema \"%s\"" -#~ msgstr "la fonction « %s » existe déjà dans le schéma « %s »" +#~ msgid "could not fsync two-phase state file \"%s\": %m" +#~ msgstr "" +#~ "n'a pas pu synchroniser sur disque (fsync) le fichier d'état de la\n" +#~ "validation en deux phases nommé « %s » : %m" -#~ msgid "cannot use aggregate in index predicate" -#~ msgstr "ne peut pas utiliser un agrégat dans un prédicat d'index" +#~ msgid "could not close two-phase state file \"%s\": %m" +#~ msgstr "" +#~ "n'a pas pu fermer le fichier d'état de la validation en deux phases nommé\n" +#~ "« %s » : %m" -#~ msgid "cannot use window function in EXECUTE parameter" -#~ msgstr "ne peut pas utiliser une fonction window dans le paramètre EXECUTE" +#~ msgid "could not link file \"%s\" to \"%s\" (initialization of log file): %m" +#~ msgstr "n'a pas pu lier le fichier « %s » à « %s » (initialisation du journal de transactions) : %m" -#~ msgid "constraints on foreign tables are not supported" -#~ msgstr "les contraintes sur les tables distantes ne sont pas supportées" +#~ msgid "could not rename file \"%s\" to \"%s\" (initialization of log file): %m" +#~ msgstr "n'a pas pu renommer le fichier « %s » en « %s » (initialisation du journal de transactions) : %m" -#~ msgid "default values on foreign tables are not supported" -#~ msgstr "les valeurs par défaut ne sont pas supportées sur les tables distantes" +#~ msgid "ignoring \"%s\" file because no \"%s\" file exists" +#~ msgstr "ignore le fichier « %s » parce que le fichier « %s » n'existe pas" -#~ msgid "cannot use window function in transform expression" -#~ msgstr "ne peut pas utiliser la fonction window dans l'expression de la transformation" +#~ msgid "must be superuser or replication role to run a backup" +#~ msgstr "doit être super-utilisateur ou avoir l'attribut de réplication pour exécuter une sauvegarde" -#~ msgid "Use ALTER FOREIGN TABLE instead." -#~ msgstr "Utilisez ALTER FOREIGN TABLE à la place." +#~ msgid "must be superuser to switch transaction log files" +#~ msgstr "doit être super-utilisateur pour changer de journal de transactions" -#~ msgid "cannot use window function in trigger WHEN condition" -#~ msgstr "ne peut pas utiliser la fonction window dans la condition WHEN d'un trigger" +#~ msgid "must be superuser to create a restore point" +#~ msgstr "doit être super-utilisateur pour créer un point de restauration" -#~ msgid "must be superuser to rename text search parsers" -#~ msgstr "" -#~ "doit être super-utilisateur pour renommer les analyseurs de recherche plein\n" -#~ "texte" +#~ msgid "must be superuser to control recovery" +#~ msgstr "doit être super-utilisateur pour contrôler la restauration" -#~ msgid "must be superuser to rename text search templates" -#~ msgstr "doit être super-utilisateur pour renommer les modèles de recherche plein texte" +#~ msgid "invalid record length at %X/%X" +#~ msgstr "longueur invalide de l'enregistrement à %X/%X" -#~ msgid "automatic vacuum of table \"%s.%s.%s\": cannot (re)acquire exclusive lock for truncate scan" -#~ msgstr "vacuum automatique de la table « %s.%s.%s » : ne peut pas acquérir le verrou exclusif pour la tronquer" +#~ msgid "%s is already in schema \"%s\"" +#~ msgstr "%s existe déjà dans le schéma « %s »" -#~ msgid "You need an unconditional ON INSERT DO INSTEAD rule or an INSTEAD OF INSERT trigger." -#~ msgstr "Vous avez besoin d'une règle ON INSERT DO INSTEAD sans condition ou d'un trigger INSTEAD OF INSERT." +#~ msgid "function \"%s\" must return type \"event_trigger\"" +#~ msgstr "la fonction « %s » doit renvoyer le type « event_trigger »" -#~ msgid "You need an unconditional ON UPDATE DO INSTEAD rule or an INSTEAD OF UPDATE trigger." -#~ msgstr "Vous avez besoin d'une règle non conditionnelle ON UPDATE DO INSTEAD ou d'un trigger INSTEAD OF UPDATE." +#~ msgid "function %s must return type \"fdw_handler\"" +#~ msgstr "la fonction %s doit renvoyer le type « fdw_handler »" -#~ msgid "You need an unconditional ON DELETE DO INSTEAD rule or an INSTEAD OF DELETE trigger." -#~ msgstr "Vous avez besoin d'une règle inconditionnelle ON DELETE DO INSTEAD ou d'un trigger INSTEAD OF DELETE." +#~ msgid "could not reposition held cursor" +#~ msgstr "n'a pas pu repositionner le curseur détenu" -#~ msgid "LDAP search failed for filter \"%s\" on server \"%s\": user is not unique (%ld matches)" -#~ msgstr "" -#~ "échec de la recherche LDAP pour le filtre « %s » sur le serveur « %s » :\n" -#~ "utilisateur non unique (%ld correspondances)" +#~ msgid "function %s must return type \"language_handler\"" +#~ msgstr "la fonction %s doit renvoyer le type « language_handler »" -#~ msgid "VALUES must not contain table references" -#~ msgstr "VALUES ne doit pas contenir de références de table" +#~ msgid "function %s must return type \"trigger\"" +#~ msgstr "la fonction %s doit renvoyer le type « trigger »" -#~ msgid "VALUES must not contain OLD or NEW references" -#~ msgstr "VALUES ne doit pas contenir des références à OLD et NEW" +#~ msgid "changing return type of function %s from \"opaque\" to \"cstring\"" +#~ msgstr "changement du type de retour de la fonction %s d'« opaque » vers « cstring »" -#~ msgid "Use SELECT ... UNION ALL ... instead." -#~ msgstr "Utilisez à la place SELECT ... UNION ALL ..." +#~ msgid "type output function %s must return type \"cstring\"" +#~ msgstr "le type de sortie de la fonction %s doit être « cstring »" -#~ msgid "cannot use aggregate function in VALUES" -#~ msgstr "ne peut pas utiliser la fonction d'agrégat dans un VALUES" +#~ msgid "type send function %s must return type \"bytea\"" +#~ msgstr "la fonction send du type %s doit renvoyer le type « bytea »" -#~ msgid "cannot use window function in VALUES" -#~ msgstr "ne peut pas utiliser la fonction window dans un VALUES" +#~ msgid "typmod_in function %s must return type \"integer\"" +#~ msgstr "la fonction typmod_in %s doit renvoyer le type « entier »" -#~ msgid "cannot use aggregate function in UPDATE" -#~ msgstr "ne peut pas utiliser une fonction d'agrégat dans un UPDATE" +#~ msgid "Permissions should be u=rw (0600) or less." +#~ msgstr "Les droits devraient être u=rwx (0600) ou inférieures." -#~ msgid "cannot use window function in UPDATE" -#~ msgstr "ne peut pas utiliser une fonction window dans un UPDATE" +#~ msgid "function %s must return type \"tsm_handler\"" +#~ msgstr "la fonction %s doit renvoyer le type « tsm_handler »" -#~ msgid "cannot use aggregate function in RETURNING" -#~ msgstr "ne peut pas utiliser une fonction d'agrégat dans RETURNING" +#~ msgid "must be superuser to reset statistics counters" +#~ msgstr "doit être super-utilisateur pour réinitialiser les compteurs statistiques" -#~ msgid "cannot use window function in RETURNING" -#~ msgstr "ne peut pas utiliser une fonction window dans RETURNING" +#~ msgid "socket not open" +#~ msgstr "socket non ouvert" -#~ msgid "RETURNING cannot contain references to other relations" -#~ msgstr "RETURNING ne doit pas contenir de références à d'autres relations" +#~ msgid "multibyte flag character is not allowed" +#~ msgstr "un caractère drapeau multi-octet n'est pas autorisé" -#~ msgid "SELECT FOR UPDATE/SHARE is not allowed with GROUP BY clause" -#~ msgstr "SELECT FOR UPDATE/SHARE n'est pas autorisé avec la clause GROUP BY" +#~ msgid "could not format \"path\" value" +#~ msgstr "n'a pas pu formater la valeur « path »" -#~ msgid "SELECT FOR UPDATE/SHARE is not allowed with HAVING clause" -#~ msgstr "SELECT FOR UPDATE/SHARE n'est pas autorisé avec la clause HAVING" +#~ msgid "invalid input syntax for type box: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type box : « %s »" -#~ msgid "SELECT FOR UPDATE/SHARE is not allowed with aggregate functions" -#~ msgstr "SELECT FOR UPDATE/SHARE n'est pas autorisé avec les fonctions d'agrégats" +#~ msgid "invalid input syntax for type line: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type line: « %s »" -#~ msgid "SELECT FOR UPDATE/SHARE is not allowed with window functions" -#~ msgstr "SELECT FOR UPDATE/SHARE n'est pas autorisé avec les fonctions window" +#~ msgid "invalid input syntax for type path: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type path : « %s »" -#~ msgid "SELECT FOR UPDATE/SHARE cannot be used with foreign table \"%s\"" -#~ msgstr "SELECT FOR UPDATE/SHARE ne peut pas être utilisé avec une table distante « %s »" +#~ msgid "invalid input syntax for type point: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type point : « %s »" -#~ msgid "aggregates not allowed in WHERE clause" -#~ msgstr "agrégats non autorisés dans une clause WHERE" +#~ msgid "invalid input syntax for type lseg: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type lseg : « %s »" -#~ msgid "window functions not allowed in GROUP BY clause" -#~ msgstr "fonctions window non autorisées dans une clause GROUP BY" +#~ msgid "invalid input syntax for type polygon: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type polygon : « %s »" -#~ msgid "JOIN/ON clause refers to \"%s\", which is not part of JOIN" -#~ msgstr "la clause JOIN/ON se réfère à « %s », qui ne fait pas partie du JOIN" +#~ msgid "invalid input syntax for type circle: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type circle : « %s »" -#~ msgid "subquery in FROM cannot refer to other relations of same query level" -#~ msgstr "" -#~ "la sous-requête du FROM ne peut pas faire référence à d'autres relations\n" -#~ "dans le même niveau de la requête" +#~ msgid "could not format \"circle\" value" +#~ msgstr "n'a pas pu formater la valeur « circle »" -#~ msgid "function expression in FROM cannot refer to other relations of same query level" -#~ msgstr "" -#~ "l'expression de la fonction du FROM ne peut pas faire référence à d'autres\n" -#~ "relations sur le même niveau de la requête" +#~ msgid "must be superuser to signal the postmaster" +#~ msgstr "doit être super-utilisateur pour envoyer un signal au postmaster" -#~ msgid "cannot use window function in function expression in FROM" -#~ msgstr "" -#~ "ne peut pas utiliser la fonction window dans l'expression de la fonction\n" -#~ "du FROM" +#~ msgid "must be superuser to rotate log files" +#~ msgstr "doit être super-utilisateur pour exécuter la rotation des journaux applicatifs" -#~ msgid "argument of %s must not contain aggregate functions" -#~ msgstr "l'argument de %s ne doit pas contenir de fonctions d'agrégats" +#~ msgid "argument for function \"exp\" too big" +#~ msgstr "l'argument de la fonction « exp » est trop gros" -#~ msgid "argument of %s must not contain window functions" -#~ msgstr "l'argument de %s ne doit pas contenir des fonctions window" +#~ msgid "WAL writer sleep time between WAL flushes." +#~ msgstr "" +#~ "Temps d'endormissement du processus d'écriture pendant le vidage des\n" +#~ "journaux de transactions en millisecondes." -#~ msgid "arguments of row IN must all be row expressions" -#~ msgstr "les arguments de la ligne IN doivent tous être des expressions de ligne" +#~ msgid "JSON does not support infinite date values." +#~ msgstr "JSON ne supporte pas les valeurs infinies de date." -#~ msgid "cannot use aggregate function in rule WHERE condition" -#~ msgstr "ne peut pas utiliser la fonction d'agrégat dans la condition d'une règle WHERE" +#~ msgid "JSON does not support infinite timestamp values." +#~ msgstr "JSON ne supporte pas les valeurs infinies de timestamp." -#~ msgid "cannot use window function in rule WHERE condition" -#~ msgstr "ne peut pas utiliser la fonction window dans la condition d'une règle WHERE" +#~ msgid "cannot override frame clause of window \"%s\"" +#~ msgstr "ne peut pas surcharger la frame clause du window « %s »" -#~ msgid "" -#~ "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently %lu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.\n" -#~ "If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.\n" -#~ "The PostgreSQL documentation contains more information about shared memory configuration." -#~ msgstr "" -#~ "Cette erreur signifie habituellement que la demande de PostgreSQL pour un\n" -#~ "segment de mémoire partagée a dépassé le paramètre SHMMAX de votre noyau.\n" -#~ "Vous pouvez soit réduire la taille de la requête soit reconfigurer le noyau\n" -#~ "avec un SHMMAX plus important. Pour réduire la taille de la requête\n" -#~ "(actuellement %lu octets), réduisez l'utilisation de la mémoire partagée par PostgreSQL,par exemple en réduisant shared_buffers ou max_connections\n" -#~ "Si la taille de la requête est déjà petite, il est possible qu'elle soit\n" -#~ "moindre que le paramètre SHMMIN de votre noyau, auquel cas, augmentez la\n" -#~ "taille de la requête ou reconfigurez SHMMIN.\n" -#~ "La documentation de PostgreSQL contient plus d'informations sur la\n" -#~ "configuration de la mémoire partagée." +#~ msgid "window functions cannot use named arguments" +#~ msgstr "les fonctions window ne peuvent pas renvoyer des arguments nommés" -#~ msgid "terminating all walsender processes to force cascaded standby(s) to update timeline and reconnect" -#~ msgstr "" -#~ "arrêt de tous les processus walsender pour forcer les serveurs standby en\n" -#~ "cascade à mettre à jour la timeline et à se reconnecter" +#~ msgid "invalid list syntax for \"unix_socket_directories\"" +#~ msgstr "syntaxe de liste invalide pour le paramètre « unix_socket_directories »" -#~ msgid "shutdown requested, aborting active base backup" -#~ msgstr "arrêt demandé, annulation de la sauvegarde active de base" +#~ msgid "Valid values are '[]', '[)', '(]', and '()'." +#~ msgstr "Les valeurs valides sont « [] », « [) », « (] » et « () »." -#~ msgid "streaming replication successfully connected to primary" -#~ msgstr "réplication de flux connecté avec succès au serveur principal" +#~ msgid "poll() failed in statistics collector: %m" +#~ msgstr "échec du poll() dans le récupérateur de statistiques : %m" -#~ msgid "invalid standby handshake message type %d" -#~ msgstr "type %d du message de handshake du serveur en attente invalide" +#~ msgid "select() failed in logger process: %m" +#~ msgstr "échec de select() dans le processus des journaux applicatifs : %m" -#~ msgid "terminating walsender process to force cascaded standby to update timeline and reconnect" -#~ msgstr "" -#~ "arrêt du processus walreceiver pour forcer le serveur standby en cascade à\n" -#~ "mettre à jour la timeline et à se reconnecter" +#~ msgid "%s: could not open log file \"%s/%s\": %s\n" +#~ msgstr "%s : n'a pas pu ouvrir le journal applicatif « %s/%s » : %s\n" -#~ msgid "invalid standby query string: %s" -#~ msgstr "chaîne de requête invalide sur le serveur en attente : %s" +#~ msgid "%s: could not fork background process: %s\n" +#~ msgstr "%s : n'a pas pu créer un processus fils : %s\n" -#~ msgid "large object %u was not opened for writing" -#~ msgstr "le « Large Object » %u n'a pas été ouvert en écriture" +#~ msgid "%s: could not dissociate from controlling TTY: %s\n" +#~ msgstr "%s : n'a pas pu se dissocier du TTY contrôlant : %s\n" -#~ msgid "large object %u was already dropped" -#~ msgstr "le « Large Object » %u a déjà été supprimé" +#~ msgid "Runs the server silently." +#~ msgstr "Lance le serveur de manière silencieuse." -#~ msgid "Not enough memory for reassigning the prepared transaction's locks." -#~ msgstr "Pas assez de mémoire pour réaffecter les verrous des transactions préparées." +#~ msgid "If this parameter is set, the server will automatically run in the background and any controlling terminals are dissociated." +#~ msgstr "" +#~ "Si ce paramètre est initialisé, le serveur sera exécuté automatiquement en\n" +#~ "tâche de fond et les terminaux de contrôles seront dés-associés." -#~ msgid "\"interval\" time zone \"%s\" not valid" -#~ msgstr "le fuseau horaire « %s » n'est pas valide pour le type « interval »" +#~ msgid "WAL sender sleep time between WAL replications." +#~ msgstr "" +#~ "Temps d'endormissement du processus d'envoi des journaux de transactions entre\n" +#~ "les réplications des journaux de transactions." -#~ msgid "inconsistent use of year %04d and \"BC\"" -#~ msgstr "utilisation non cohérente de l'année %04d et de « BC »" +#~ msgid "Sets the list of known custom variable classes." +#~ msgstr "Initialise la liste des classes variables personnalisées connues." -#~ msgid "No rows were found in \"%s\"." -#~ msgstr "Aucune ligne trouvée dans « %s »." +#~ msgid "foreign key constraint \"%s\" of relation \"%s\" does not exist" +#~ msgstr "la clé étrangère « %s » de la relation « %s » n'existe pas" -#~ msgid "argument number is out of range" -#~ msgstr "le nombre en argument est en dehors des limites" +#~ msgid "removing built-in function \"%s\"" +#~ msgstr "suppression de la fonction interne « %s »" -#~ msgid "index \"%s\" is not ready" -#~ msgstr "l'index « %s » n'est pas prêt" - -#~ msgid "could not remove database directory \"%s\"" -#~ msgstr "n'a pas pu supprimer le répertoire de bases de données « %s »" - -#~ msgid "unexpected end of line at line %d of thesaurus file \"%s\"" -#~ msgstr "fin de ligne inattendue à la ligne %d du thésaurus « %s »" - -#~ msgid "unexpected end of line or lexeme at line %d of thesaurus file \"%s\"" -#~ msgstr "fin de ligne ou de lexeme inattendu sur la ligne %d du thesaurus « %s »" +#~ msgid "permission denied to drop foreign-data wrapper \"%s\"" +#~ msgstr "droit refusé pour supprimer le wrapper de données distantes « %s »" -#~ msgid "unexpected delimiter at line %d of thesaurus file \"%s\"" -#~ msgstr "délimiteur inattendu sur la ligne %d du thesaurus « %s »" +#~ msgid "Must be superuser to drop a foreign-data wrapper." +#~ msgstr "Doit être super-utilisateur pour supprimer un wrapper de données distantes." -#~ msgid "@@ operator does not support lexeme weight restrictions in GIN index searches" +#~ msgid "must be superuser to drop text search parsers" #~ msgstr "" -#~ "l'opérateur @@ ne supporte pas les restrictions de poids de lexeme dans les\n" -#~ "recherches par index GIN" +#~ "doit être super-utilisateur pour supprimer des analyseurs de recherche plein\n" +#~ "texte" -#~ msgid "query requires full scan, which is not supported by GIN indexes" -#~ msgstr "" -#~ "la requête nécessite un parcours complet, ce qui n'est pas supporté par les\n" -#~ "index GIN" +#~ msgid "must be superuser to drop text search templates" +#~ msgstr "doit être super-utilisateur pour supprimer des modèles de recherche plein texte" -#~ msgid "cannot calculate week number without year information" -#~ msgstr "ne peut pas calculer le numéro de la semaine sans informations sur l'année" +#~ msgid "recovery is still in progress, can't accept WAL streaming connections" +#~ msgstr "la restauration est en cours, ne peut pas accepter les connexions de flux WAL" -#~ msgid "UTF-16 to UTF-8 translation failed: %lu" -#~ msgstr "échec de la conversion d'UTF16 vers UTF8 : %lu" +#~ msgid "standby connections not allowed because wal_level=minimal" +#~ msgstr "connexions standby non autorisées car wal_level=minimal" -#~ msgid "AM/PM hour must be between 1 and 12" -#~ msgstr "l'heure AM/PM doit être compris entre 1 et 12" +#~ msgid "could not open directory \"pg_tblspc\": %m" +#~ msgstr "n'a pas pu ouvrir le répertoire « pg_tblspc » : %m" -#~ msgid "Sat" -#~ msgstr "Sam" +#~ msgid "could not access root certificate file \"%s\": %m" +#~ msgstr "n'a pas pu accéder au fichier du certificat racine « %s » : %m" -#~ msgid "Fri" -#~ msgstr "Ven" +#~ msgid "SSL certificate revocation list file \"%s\" not found, skipping: %s" +#~ msgstr "liste de révocation des certificats SSL « %s » introuvable, continue : %s" -#~ msgid "Thu" -#~ msgstr "Jeu" +#~ msgid "Certificates will not be checked against revocation list." +#~ msgstr "Les certificats ne seront pas vérifiés avec la liste de révocation." -#~ msgid "Wed" -#~ msgstr "Mer" +#~ msgid "missing or erroneous pg_hba.conf file" +#~ msgstr "fichier pg_hba.conf manquant ou erroné" -#~ msgid "Tue" -#~ msgstr "Mar" +#~ msgid "See server log for details." +#~ msgstr "Voir les journaux applicatifs du serveur pour plus de détails." -#~ msgid "Mon" -#~ msgstr "Lun" +#~ msgid "Make sure the root.crt file is present and readable." +#~ msgstr "Assurez-vous que le certificat racine (root.crt) est présent et lisible" -#~ msgid "Sun" -#~ msgstr "Dim" +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help affiche cette aide, puis quitte\n" -#~ msgid "Saturday" -#~ msgstr "Samedi" +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version, puis quitte\n" -#~ msgid "Friday" -#~ msgstr "Vendredi" +#~ msgid "CREATE TABLE AS cannot specify INTO" +#~ msgstr "CREATE TABLE AS ne peut pas spécifier INTO" -#~ msgid "Thursday" -#~ msgstr "Jeudi" +#~ msgid "column name list not allowed in CREATE TABLE / AS EXECUTE" +#~ msgstr "la liste de noms de colonnes n'est pas autorisée dans CREATE TABLE / AS EXECUTE" -#~ msgid "Wednesday" -#~ msgstr "Mercredi" +#~ msgid "INSERT ... SELECT cannot specify INTO" +#~ msgstr "INSERT ... SELECT ne peut pas avoir INTO" -#~ msgid "Tuesday" -#~ msgstr "Mardi" +#~ msgid "DECLARE CURSOR cannot specify INTO" +#~ msgstr "DECLARE CURSOR ne peut pas spécifier INTO" -#~ msgid "Monday" -#~ msgstr "Lundi" +#~ msgid "subquery in FROM cannot have SELECT INTO" +#~ msgstr "la sous-requête du FROM ne peut pas avoir de SELECT INTO" -#~ msgid "Sunday" -#~ msgstr "Dimanche" +#~ msgid "subquery cannot have SELECT INTO" +#~ msgstr "la sous-requête ne peut pas avoir de SELECT INTO" -#~ msgid "Dec" -#~ msgstr "Déc" +#~ msgid "subquery in WITH cannot have SELECT INTO" +#~ msgstr "la sous-requête du WITH ne peut pas avoir de SELECT INTO" -#~ msgid "Nov" -#~ msgstr "Nov" +#~ msgid "tablespace %u is not empty" +#~ msgstr "le tablespace %u n'est pas vide" -#~ msgid "Oct" -#~ msgstr "Oct" +#~ msgid "consistent state delayed because recovery snapshot incomplete" +#~ msgstr "état de cohérence pas encore atteint à cause d'un snapshot de restauration incomplet" -#~ msgid "Sep" -#~ msgstr "Sep" +#~ msgid "SSPI error %x" +#~ msgstr "erreur SSPI : %x" -#~ msgid "Aug" -#~ msgstr "Aoû" +#~ msgid "%s (%x)" +#~ msgstr "%s (%x)" -#~ msgid "Jul" -#~ msgstr "Juil" +#~ msgid "resetting unlogged relations: cleanup %d init %d" +#~ msgstr "réinitialisation des relations non tracées : nettoyage %d initialisation %d" -#~ msgid "Jun" -#~ msgstr "Juin" +#~ msgid "ALTER TYPE USING is only supported on plain tables" +#~ msgstr "ALTER TYPE USING est seulement supportés sur les tables standards" -#~ msgid "S:May" -#~ msgstr "S:Mai" +#~ msgid "index \"%s\" is not a b-tree" +#~ msgstr "l'index « %s » n'est pas un btree" -#~ msgid "Apr" -#~ msgstr "Avr" +#~ msgid "unable to read symbolic link %s: %m" +#~ msgstr "incapable de lire le lien symbolique %s : %m" -#~ msgid "Mar" -#~ msgstr "Mar" +#~ msgid "unable to open directory pg_tblspc: %m" +#~ msgstr "impossible d'ouvrir le répertoire p_tblspc : %m" -#~ msgid "Feb" -#~ msgstr "Fév" +#~ msgid "Write-Ahead Log / Streaming Replication" +#~ msgstr "Write-Ahead Log / Réplication en flux" -#~ msgid "Jan" -#~ msgstr "Jan" +#~ msgid "syntax error in recovery command file: %s" +#~ msgstr "erreur de syntaxe dans le fichier de restauration : %s" -#~ msgid "December" -#~ msgstr "Décembre" +#~ msgid "Lines should have the format parameter = 'value'." +#~ msgstr "Les lignes devraient avoir le format paramètre = 'valeur'" -#~ msgid "November" -#~ msgstr "Novembre" +#~ msgid "index %u/%u/%u needs VACUUM FULL or REINDEX to finish crash recovery" +#~ msgstr "" +#~ "l'index %u/%u/%u a besoin d'un VACUUM FULL ou d'un REINDEX pour terminer la\n" +#~ "récupération suite à un arrêt brutal" -#~ msgid "October" -#~ msgstr "Octobre" +#~ msgid "Incomplete insertion detected during crash replay." +#~ msgstr "" +#~ "Insertion incomplète détectée lors de la ré-exécution des requêtes suite à\n" +#~ "l'arrêt brutal." -#~ msgid "September" -#~ msgstr "Septembre" +#~ msgid "index \"%s\" needs VACUUM or REINDEX to finish crash recovery" +#~ msgstr "" +#~ "l'index « %s » a besoin d'un VACUUM ou d'un REINDEX pour terminer la\n" +#~ "récupération suite à un arrêt brutal" -#~ msgid "August" -#~ msgstr "Août" +#~ msgid "index \"%s\" needs VACUUM FULL or REINDEX to finish crash recovery" +#~ msgstr "" +#~ "l'index « %s » a besoin d'un VACUUM FULL ou d'un REINDEX pour terminer la\n" +#~ "récupération suite à un arrêt brutal" -#~ msgid "July" -#~ msgstr "Juillet" +#~ msgid "EnumValuesCreate() can only set a single OID" +#~ msgstr "EnumValuesCreate() peut seulement initialiser un seul OID" -#~ msgid "June" -#~ msgstr "Juin" +#~ msgid "clustering \"%s.%s\"" +#~ msgstr "exécution de CLUSTER sur « %s.%s »" -#~ msgid "May" -#~ msgstr "Mai" +#~ msgid "cannot cluster on index \"%s\" because access method does not handle null values" +#~ msgstr "" +#~ "ne peut pas créer un cluster sur l'index « %s » car la méthode d'accès de\n" +#~ "l'index ne gère pas les valeurs NULL" -#~ msgid "April" -#~ msgstr "Avril" +#~ msgid "You might be able to work around this by marking column \"%s\" NOT NULL, or use ALTER TABLE ... SET WITHOUT CLUSTER to remove the cluster specification from the table." +#~ msgstr "" +#~ "Vous pourriez contourner ceci en marquant la colonne « %s » avec la\n" +#~ "contrainte NOT NULL ou en utilisant ALTER TABLE ... SET WITHOUT CLUSTER pour\n" +#~ "supprimer la spécification CLUSTER de la table." -#~ msgid "March" -#~ msgstr "Mars" +#~ msgid "You might be able to work around this by marking column \"%s\" NOT NULL." +#~ msgstr "Vous pouvez contourner ceci en marquant la colonne « %s » comme NOT NULL." -#~ msgid "February" -#~ msgstr "Février" +#~ msgid "cannot cluster on expressional index \"%s\" because its index access method does not handle null values" +#~ msgstr "" +#~ "ne peut pas exécuter CLUSTER sur l'index à expression « %s » car sa méthode\n" +#~ "d'accès ne gère pas les valeurs NULL" -#~ msgid "January" -#~ msgstr "Janvier" +#~ msgid "\"%s\" is not a table, view, or composite type" +#~ msgstr "« %s » n'est pas une table, une vue ou un type composite" -#~ msgid "\"TZ\"/\"tz\" not supported" -#~ msgstr "« TZ »/« tz » non supporté" +#~ msgid "must be superuser to comment on procedural language" +#~ msgstr "" +#~ "doit être super-utilisateur pour ajouter un commentaire sur un langage de\n" +#~ "procédures" -#~ msgid "not unique \"S\"" -#~ msgstr "« S » non unique" +#~ msgid "must be superuser to comment on text search parser" +#~ msgstr "" +#~ "doit être super-utilisateur pour ajouter un commentaire sur l'analyseur de\n" +#~ "recherche plein texte" -#~ msgid "invalid argument for power function" -#~ msgstr "argument invalide pour la fonction puissance (power)" +#~ msgid "must be superuser to comment on text search template" +#~ msgstr "" +#~ "doit être super-utilisateur pour ajouter un commentaire sur un modèle de\n" +#~ "recherche plein texte" -#~ msgid "Valid values are DOCUMENT and CONTENT." -#~ msgstr "Les valeurs valides sont DOCUMENT et CONTENT." +#~ msgid "function \"%s\" is already in schema \"%s\"" +#~ msgstr "la fonction « %s » existe déjà dans le schéma « %s »" -#~ msgid "Valid values are LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7." +#~ msgid "cannot reference temporary table from permanent table constraint" #~ msgstr "" -#~ "Les valeurs valides sont LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5,\n" -#~ "LOCAL6, LOCAL7." +#~ "ne peut pas référencer une table temporaire à partir d'une contrainte de\n" +#~ "table permanente" -#~ msgid "This can be set to advanced, extended, or basic." +#~ msgid "cannot reference permanent table from temporary table constraint" #~ msgstr "" -#~ "Ceci peut être initialisé avec advanced (avancé), extended (étendu) ou\n" -#~ "basic (basique)." +#~ "ne peut pas référencer une table permanente à partir de la contrainte de\n" +#~ "table temporaire" -#~ msgid "Sets the hostname of the Kerberos server." -#~ msgstr "Initalise le nom d'hôte du serveur Kerberos." +#~ msgid "composite type must have at least one attribute" +#~ msgstr "le type composite doit avoir au moins un attribut" -#~ msgid "Sets realm to match Kerberos and GSSAPI users against." -#~ msgstr "" -#~ "Indique le royaume pour l'authentification des utilisateurs via Kerberos et\n" -#~ "GSSAPI." +#~ msgid "database \"%s\" not found" +#~ msgstr "base de données « %s » non trouvée" -#~ msgid "Each session can be either \"origin\", \"replica\", or \"local\"." -#~ msgstr "Chaque session peut valoir soit « origin » soit « replica » soit « local »." +#~ msgid "invalid list syntax for parameter \"datestyle\"" +#~ msgstr "syntaxe de liste invalide pour le paramètre « datestyle »" -#~ msgid "Each SQL transaction has an isolation level, which can be either \"read uncommitted\", \"read committed\", \"repeatable read\", or \"serializable\"." -#~ msgstr "" -#~ "Chaque transaction SQL a un niveau d'isolation qui peut être soit « read\n" -#~ "uncommitted », soit « read committed », soit « repeatable read », soit\n" -#~ "« serializable »." +#~ msgid "unrecognized \"datestyle\" key word: \"%s\"" +#~ msgstr "mot clé « datestyle » non reconnu : « %s »" -#~ msgid "All SQL statements that cause an error of the specified level or a higher level are logged." -#~ msgstr "" -#~ "Toutes les instructions SQL causant une erreur du niveau spécifié ou d'un\n" -#~ "niveau supérieur sont tracées." +#~ msgid "invalid interval value for time zone: month not allowed" +#~ msgstr "valeur d'intervalle invalide pour le fuseau horaire : les mois ne sont pas autorisés" -#~ msgid "Valid values are DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC. Each level includes all the levels that follow it." -#~ msgstr "" -#~ "Les valeurs valides sont DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO,\n" -#~ "NOTICE, WARNING, ERROR, LOG, FATAL et PANIC. Chaque niveau incut tous les\n" -#~ "niveaux qui le suit." +#~ msgid "invalid interval value for time zone: day not allowed" +#~ msgstr "valeur d'intervalle invalide pour le fuseau horaire : jour non autorisé" -#~ msgid "Valid values are ON, OFF, and SAFE_ENCODING." -#~ msgstr "Les valeurs valides sont ON, OFF et SAFE_ENCODING." +#~ msgid "argument to pg_get_expr() must come from system catalogs" +#~ msgstr "l'argument de pg_get_expr() doit provenir des catalogues systèmes" -#~ msgid "Sets the maximum number of disk pages for which free space is tracked." -#~ msgstr "" -#~ "Initialise le nombre maximum de pages disque pour lesquelles l'espace libre\n" -#~ "est tracé." +#~ msgid "could not enable credential reception: %m" +#~ msgstr "n'a pas pu activer la réception de lettres de créance : %m" -#~ msgid "Sets the maximum number of tables and indexes for which free space is tracked." -#~ msgstr "" -#~ "Initialise le nombre maximum de tables et index pour lesquels l'espace libre\n" -#~ "est tracé." +#~ msgid "could not get effective UID from peer credentials: %m" +#~ msgstr "n'a pas pu obtenir l'UID réel à partir des pièces d'identité de l'autre : %m" -#~ msgid "Uses the indented output format for EXPLAIN VERBOSE." -#~ msgstr "Utilise le format de sortie indenté pour EXPLAIN VERBOSE." +#~ msgid "Ident authentication is not supported on local connections on this platform" +#~ msgstr "l'authentification Ident n'est pas supportée sur les connexions locales sur cette plateforme" -#~ msgid "Prints the execution plan to server log." -#~ msgstr "Affiche le plan d'exécution dans les journaux applicatifs du serveur." +#~ msgid "could not create log file \"%s\": %m" +#~ msgstr "n'a pas pu créer le journal applicatif « %s » : %m" -#~ msgid "Prints the parse tree after rewriting to server log." -#~ msgstr "Affiche l'arbre d'analyse après ré-écriture dans les journaux applicatifs du serveur." +#~ msgid "could not open new log file \"%s\": %m" +#~ msgstr "n'a pas pu ouvrir le nouveau journal applicatif « %s » : %m" -#~ msgid "Prints the parse tree to the server log." -#~ msgstr "Affiche l'arbre d'analyse dans les journaux applicatifs du serveur." +#~ msgid "Sets immediate fsync at commit." +#~ msgstr "Configure un fsync immédiat lors du commit." -#~ msgid "string is too long for tsvector" -#~ msgstr "la chaîne est trop longue pour un tsvector" +#~ msgid "invalid list syntax for parameter \"log_destination\"" +#~ msgstr "syntaxe de liste invalide pour le paramètre « log_destination »" -#~ msgid "Consider increasing the configuration parameter \"max_fsm_pages\" to a value over %.0f." +#~ msgid "unrecognized \"log_destination\" key word: \"%s\"" +#~ msgstr "mot clé « log_destination » non reconnu : « %s »" + +#~ msgid "cannot drop \"%s\" because it is being used by active queries in this session" #~ msgstr "" -#~ "Considérez l'augmentation du paramètre de configuration « max_fsm_pages »\n" -#~ "à une valeur supérieure à %.0f." +#~ "ne peut pas supprimer « %s » car cet objet est en cours d'utilisation par\n" +#~ "des requêtes actives dans cette session" -#~ msgid "number of page slots needed (%.0f) exceeds max_fsm_pages (%d)" -#~ msgstr "le nombre d'emplacements de pages nécessaires (%.0f) dépasse max_fsm_pages (%d)" +#~ msgid "parameter \"recovery_target_inclusive\" requires a Boolean value" +#~ msgstr "le paramètre « recovery_target_inclusive » requiert une valeur booléenne" -#~ msgid "You have at least %d relations. Consider increasing the configuration parameter \"max_fsm_relations\"." -#~ msgstr "" -#~ "Vous avez au moins %d relations.Considèrez l'augmentation du paramètre de\n" -#~ "configuration « max_fsm_relations »." +#~ msgid "parameter \"standby_mode\" requires a Boolean value" +#~ msgstr "le paramètre « standby_mode » requiert une valeur booléenne" -#~ msgid "max_fsm_relations(%d) equals the number of relations checked" -#~ msgstr "max_fsm_relations(%d) équivaut au nombre de relations tracées" +#~ msgid "Sets the message levels that are logged during recovery." +#~ msgstr "Initialise les niveaux de messages qui sont tracés lors de la restauration." -#~ msgid "" -#~ "A total of %.0f page slots are in use (including overhead).\n" -#~ "%.0f page slots are required to track all free space.\n" -#~ "Current limits are: %d page slots, %d relations, using %.0f kB." +#~ msgid "Not safe to send CSV data\n" +#~ msgstr "Envoi non sûr des données CSV\n" + +#~ msgid "recovery restart point at %X/%X with latest known log time %s" #~ msgstr "" -#~ "Un total de %.0f emplacements de pages est utilisé (ceci incluant la\n" -#~ "surcharge).\n" -#~ "%.0f emplacements de pages sont requis pour tracer tout l'espace libre.\n" -#~ "Les limites actuelles sont : %d emplacements de pages, %d relations,\n" -#~ "utilisant %.0f Ko." +#~ "point de relancement de la restauration sur %X/%X avec %s comme dernière\n" +#~ "date connue du journal" -#~ msgid "free space map contains %d pages in %d relations" -#~ msgstr "la structure FSM contient %d pages dans %d relations" +#~ msgid "restartpoint_command = '%s'" +#~ msgstr "restartpoint_command = '%s'" -#~ msgid "max_fsm_pages must exceed max_fsm_relations * %d" -#~ msgstr "max_fsm_pages doit excéder max_fsm_relations * %d" +#~ msgid "usermap \"%s\"" +#~ msgstr "correspondance utilisateur « %s »" -#~ msgid "insufficient shared memory for free space map" -#~ msgstr "mémoire partagée insuffisante pour la structure FSM" +#~ msgid "WAL archiving is not active" +#~ msgstr "l'archivage des journaux de transactions n'est pas actif" -#~ msgid "could not set statistics collector timer: %m" -#~ msgstr "n'a pas pu configurer le timer du récupérateur de statistiques : %m" +#~ msgid "archive_mode must be enabled at server start." +#~ msgstr "archive_mode doit être activé au lancement du serveur." -#~ msgid "%s: the number of buffers (-B) must be at least twice the number of allowed connections (-N) and at least 16\n" +#~ msgid "archive_command must be defined before online backups can be made safely." #~ msgstr "" -#~ "%s : le nombre de tampons (-B) doit être au moins deux fois le nombre de\n" -#~ "connexions disponibles (-N) et au moins 16\n" - -#~ msgid "adding missing FROM-clause entry in subquery for table \"%s\"" -#~ msgstr "entrée manquante de la clause FROM dans la sous-requête pour la table « %s »" +#~ "archive_command doit être défini avant que les sauvegardes à chaud puissent\n" +#~ "s'effectuer correctement." -#~ msgid "missing FROM-clause entry in subquery for table \"%s\"" -#~ msgstr "entrée manquante de la clause FROM dans la sous-requête de la table « %s »" +#~ msgid "During recovery, allows connections and queries. During normal running, causes additional info to be written to WAL to enable hot standby mode on WAL standby nodes." +#~ msgstr "" +#~ "Lors de la restauration, autorise les connexions et les requêtes. Lors d'une\n" +#~ "exécution normale, fait que des informations supplémentaires sont écrites dans\n" +#~ "les journaux de transactions pour activer le mode Hot Standby sur les nœuds\n" +#~ "en attente." -#~ msgid "SELECT FOR UPDATE/SHARE is not supported for inheritance queries" -#~ msgstr "SELECT FOR UPDATE/SHARE n'est pas supporté pour les requêtes d'héritage" +#~ msgid "unlogged operation performed, data may be missing" +#~ msgstr "opération réalisée non tracée, les données pourraient manquer" -#~ msgid "Ident protocol identifies remote user as \"%s\"" -#~ msgstr "le protocole Ident identifie l'utilisateur distant comme « %s »" +#~ msgid "not enough shared memory for walsender" +#~ msgstr "pas assez de mémoire partagée pour le processus d'envoi des journaux de transactions" -#~ msgid "cannot use Ident authentication without usermap field" -#~ msgstr "n'a pas pu utiliser l'authentication Ident sans le champ usermap" +#~ msgid "not enough shared memory for walreceiver" +#~ msgstr "" +#~ "pas assez de mémoire partagée pour le processus de réception des journaux de\n" +#~ "transactions" -#~ msgid "missing field in file \"%s\" at end of line %d" -#~ msgstr "champ manquant dans le fichier « %s » à la fin de la ligne %d" +#~ msgid "connection limit exceeded for non-superusers" +#~ msgstr "limite de connexions dépassée pour les utilisateurs standards" -#~ msgid "invalid entry in file \"%s\" at line %d, token \"%s\"" -#~ msgstr "entrée invalide dans le fichier « %s » à la ligne %d, jeton « %s »" +#~ msgid "not enough shared memory for background writer" +#~ msgstr "pas assez de mémoire partagée pour le processus d'écriture en tâche de fond" -#~ msgid "cannot use authentication method \"crypt\" because password is MD5-encrypted" -#~ msgstr "" -#~ "n'a pas pu utiliser la méthode d'authentification « crypt » car le mot de\n" -#~ "passe est chiffré avec MD5" +#, fuzzy +#~ msgid "couldn't put socket to non-blocking mode: %m" +#~ msgstr "n'a pas pu activer le mode non-bloquant pour la socket : %s\n" -#~ msgid "File must be owned by the database user and must have no permissions for \"group\" or \"other\"." -#~ msgstr "" -#~ "Le fichier doit appartenir au propriétaire de la base de données et ne doit\n" -#~ "pas avoir de droits pour un groupe ou pour les autres." +#, fuzzy +#~ msgid "couldn't put socket to blocking mode: %m" +#~ msgstr "n'a pas pu activer le mode bloquant pour la socket : %s\n" -#~ msgid "unsafe permissions on private key file \"%s\"" -#~ msgstr "droits non sûrs sur le fichier de la clé privée « %s »" +#~ msgid "WAL file SYSID is %s, pg_control SYSID is %s" +#~ msgstr "le SYSID du journal de transactions WAL est %s, celui de pg_control est %s" -#~ msgid "could not get security token from context" -#~ msgstr "n'a pas pu récupérer le jeton de sécurité à partir du contexte" +#, fuzzy +#~ msgid "sorry, too many standbys already" +#~ msgstr "désolé, trop de clients sont déjà connectés" -#~ msgid "GSSAPI not implemented on this server" -#~ msgstr "GSSAPI non implémenté sur ce serveur" +#, fuzzy +#~ msgid "invalid WAL message received from primary" +#~ msgstr "format du message invalide" -#~ msgid "Kerberos 5 not implemented on this server" -#~ msgstr "Kerberos 5 non implémenté sur ce serveur" +#~ msgid "PID %d is among the slowest backends." +#~ msgstr "Le PID %d est parmi les processus serveur les plus lents." -#~ msgid "unexpected Kerberos user name received from client (received \"%s\", expected \"%s\")" -#~ msgstr "" -#~ "nom d'utilisateur Kerberos inattendu reçu à partir du client (reçu « %s »,\n" -#~ "attendu « %s »)" +#~ msgid "transaction is read-only" +#~ msgstr "la transaction est en lecture seule" -#~ msgid "cannot change number of columns in view" -#~ msgstr "ne peut pas modifier le nombre de colonnes dans la vue" +#~ msgid "binary value is out of range for type bigint" +#~ msgstr "la valeur binaire est en dehors des limites du type bigint" -#~ msgid "Consider using VACUUM FULL on this relation or increasing the configuration parameter \"max_fsm_pages\"." -#~ msgstr "" -#~ "Pensez à compacter cette relation en utilisant VACUUM FULL ou à augmenter le\n" -#~ "paramètre de configuration « max_fsm_pages »." +#~ msgid "redo starts at %X/%X, consistency will be reached at %X/%X" +#~ msgstr "la restauration comme à %X/%X, la cohérence sera atteinte à %X/%X" -#~ msgid "relation \"%s.%s\" contains more than \"max_fsm_pages\" pages with useful free space" +#~ msgid "This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by \"client_encoding\"." #~ msgstr "" -#~ "la relation « %s.%s » contient plus de « max_fsm_pages » pages d'espace\n" -#~ "libre utile" +#~ "Cette erreur peut aussi survenir si la séquence d'octets ne correspond pas\n" +#~ "au jeu de caractères attendu par le serveur, le jeu étant contrôlé par\n" +#~ "« client_encoding »." -#~ msgid "constraint definition for check constraint \"%s\" does not match" +#~ msgid "Sets the language used in DO statement if LANGUAGE is not specified." #~ msgstr "" -#~ "la définition de la contrainte « %s » pour la contrainte de vérification ne\n" -#~ "correspond pas" +#~ "Configure le langage utilisé dans une instruction DO si la clause LANGUAGE n'est\n" +#~ "pas spécifiée." -#~ msgid "multiple constraints named \"%s\" were dropped" -#~ msgstr "les contraintes multiples nommées « %s » ont été supprimées" +#~ msgid "shared index \"%s\" can only be reindexed in stand-alone mode" +#~ msgstr "un index partagé « %s » peut seulement être réindexé en mode autonome" -#~ msgid "there are objects dependent on %s" -#~ msgstr "des objets dépendent de %s" +#~ msgid "shared table \"%s\" can only be reindexed in stand-alone mode" +#~ msgstr "la table partagée « %s » peut seulement être réindexé en mode autonome" -#~ msgid "failed to drop all objects depending on %s" -#~ msgstr "échec lors de la suppression de tous les objets dépendant de %s" +#~ msgid "cannot truncate system relation \"%s\"" +#~ msgstr "ne peut pas tronquer la relation système « %s »" -#~ msgid "parser stack overflow" -#~ msgstr "saturation de la pile de l'analyseur" +#~ msgid "number of distinct values %g is too low" +#~ msgstr "le nombre de valeurs distinctes %g est trop basse" -#~ msgid "syntax error; also virtual memory exhausted" -#~ msgstr "erreur de syntaxe ; de plus, mémoire virtuelle saturée" +#~ msgid "directory \"%s\" is not empty" +#~ msgstr "le répertoire « %s » n'est pas vide" -#~ msgid "syntax error: cannot back up" -#~ msgstr "erreur de syntaxe : n'a pas pu revenir" +#~ msgid "relation \"%s\" TID %u/%u: XMIN_COMMITTED not set for transaction %u --- cannot shrink relation" +#~ msgstr "" +#~ "relation « %s », TID %u/%u : XMIN_COMMITTED non configuré pour la\n" +#~ "transaction %u --- n'a pas pu diminuer la taille de la relation" -#~ msgid "log_restartpoints = %s" -#~ msgstr "log_restartpoints = %s" +#~ msgid "relation \"%s\" TID %u/%u: dead HOT-updated tuple --- cannot shrink relation" +#~ msgstr "" +#~ "relation « %s », TID %u/%u : ligne morte mise à jour par HOT --- n'a pas pu\n" +#~ "diminuer la taille de la relation" -#~ msgid "It looks like you need to initdb or install locale support." +#~ msgid "relation \"%s\" TID %u/%u: InsertTransactionInProgress %u --- cannot shrink relation" #~ msgstr "" -#~ "Il semble que vous avez besoin d'exécuter initdb ou d'installer le support\n" -#~ "des locales." +#~ "relation « %s », TID %u/%u : InsertTransactionInProgress %u --- n'a pas pu\n" +#~ "diminuer la taille de la relation" -#~ msgid "The database cluster was initialized with LOCALE_NAME_BUFLEN %d, but the server was compiled with LOCALE_NAME_BUFLEN %d." +#~ msgid "relation \"%s\" TID %u/%u: DeleteTransactionInProgress %u --- cannot shrink relation" #~ msgstr "" -#~ "Le cluster de bases de données a été initialisé avec un LOCALE_NAME_BUFLEN\n" -#~ "à %d alors que le serveur a été compilé avec un LOCALE_NAME_BUFLEN à %d." +#~ "relation « %s », TID %u/%u : DeleteTransactionInProgress %u --- n'a pas pu\n" +#~ "diminuer la taille de la relation" -#~ msgid "invalid LC_CTYPE setting" -#~ msgstr "paramètre LC_CTYPE invalide" +#~ msgid "" +#~ "%.0f dead row versions cannot be removed yet.\n" +#~ "Nonremovable row versions range from %lu to %lu bytes long.\n" +#~ "There were %.0f unused item pointers.\n" +#~ "Total free space (including removable row versions) is %.0f bytes.\n" +#~ "%u pages are or will become empty, including %u at the end of the table.\n" +#~ "%u pages containing %.0f free bytes are potential move destinations.\n" +#~ "%s." +#~ msgstr "" +#~ "%.0f versions de lignes mortes ne peuvent pas encore être supprimées.\n" +#~ "Les versions non supprimables de ligne vont de %lu to %lu octets.\n" +#~ "Il existait %.0f pointeurs d'éléments inutilisés.\n" +#~ "L'espace libre total (incluant les versions supprimables de ligne) est de\n" +#~ "%.0f octets.\n" +#~ "%u pages sont ou deviendront vides, ceci incluant %u pages en fin de la\n" +#~ "table.\n" +#~ "%u pages contenant %.0f octets libres sont des destinations de déplacement\n" +#~ "disponibles.\n" +#~ "%s." -#~ msgid "invalid LC_COLLATE setting" -#~ msgstr "paramètre LC_COLLATE invalide" +#~ msgid "\"%s\": moved %u row versions, truncated %u to %u pages" +#~ msgstr "« %s » : %u versions de ligne déplacées, %u pages tronquées sur %u" -#~ msgid "GIN index does not support search with void query" -#~ msgstr "les index GIN ne supportent pas la recherche avec des requêtes vides" +#~ msgid "" +#~ "%u index pages have been deleted, %u are currently reusable.\n" +#~ "%s." +#~ msgstr "" +#~ "%u pages d'index ont été supprimées, %u sont actuellement réutilisables.\n" +#~ "%s." -#~ msgid "fillfactor=%d is out of range (should be between %d and 100)" -#~ msgstr "le facteur de remplissage (%d) est en dehors des limites (il devrait être entre %d et 100)" +#~ msgid "index \"%s\" contains %.0f row versions, but table contains %.0f row versions" +#~ msgstr "" +#~ "l'index « %s » contient %.0f versions de ligne, mais la table contient %.0f\n" +#~ "versions de ligne" -#, fuzzy -#~ msgid "wrong number of array_subscripts" -#~ msgstr "mauvais nombre d'indices du tableau" +#~ msgid "Rebuild the index with REINDEX." +#~ msgstr "Reconstruisez l'index avec REINDEX." -#~ msgid "could not create XPath object" -#~ msgstr "n'a pas pu créer l'objet XPath" +#~ msgid "frame start at CURRENT ROW is not implemented" +#~ msgstr "début du frame à CURRENT ROW n'est pas implémenté" -#~ msgid "multiple TRUNCATE events specified" -#~ msgstr "multiples événements TRUNCATE spécifiés" +#~ msgid "database system is in consistent recovery mode" +#~ msgstr "le système de bases de données est dans un mode de restauration cohérent" -#~ msgid "multiple UPDATE events specified" -#~ msgstr "multiples événements UPDATE spécifiés" +#~ msgid "DISTINCT is supported only for single-argument aggregates" +#~ msgstr "DISTINCT est seulement supporté pour les agrégats à un seul argument" -#~ msgid "multiple DELETE events specified" -#~ msgstr "multiples événements DELETE spécifiés" +#~ msgid "index row size %lu exceeds btree maximum, %lu" +#~ msgstr "la taille de la ligne index %lu dépasse le maximum de btree, %lu" -#~ msgid "hurrying in-progress restartpoint" -#~ msgstr "accélération du restartpoint en cours" +#~ msgid "Table contains duplicated values." +#~ msgstr "La table contient des valeurs dupliquées." -#~ msgid "NEW used in query that is not in a rule" -#~ msgstr "NEW utilisé dans une requête qui ne fait pas partie d'une règle" +#~ msgid "Automatically adds missing table references to FROM clauses." +#~ msgstr "" +#~ "Ajoute automatiquement les références à la table manquant dans les clauses\n" +#~ "FROM." -#~ msgid "OLD used in query that is not in a rule" -#~ msgstr "OLD utilisé dans une requête qui n'est pas une règle" +#~ msgid "Sets the regular expression \"flavor\"." +#~ msgstr "Initialise l'expression rationnelle « flavor »." -#~ msgid "adding missing FROM-clause entry for table \"%s\"" -#~ msgstr "ajout d'une entrée manquante dans FROM (table « %s »)" +#~ msgid "attempted change of parameter \"%s\" ignored" +#~ msgstr "tentative de modification du paramètre « %s » ignoré" -#~ msgid "SELECT FOR UPDATE/SHARE is not allowed in subqueries" -#~ msgstr "SELECT FOR UPDATE/SHARE n'est pas autorisé dans les sous-requêtes" +#~ msgid "This parameter cannot be changed after server start." +#~ msgstr "Ce paramètre ne peut pas être modifié après le lancement du serveur" -#~ msgid "unsupported PAM conversation %d/%s" -#~ msgstr "conversation PAM %d/%s non supportée" +#~ msgid "invalid database name \"%s\"" +#~ msgstr "nom de base de données « %s » invalide" -#~ msgid "could not seek to end of segment %u of relation %s: %m" -#~ msgstr "n'a pas pu se déplacer à la fin du segment %u de la relation %s : %m" +#~ msgid "invalid role name \"%s\"" +#~ msgstr "nom de rôle « %s » invalide" -#~ msgid "could not fsync segment %u of relation %s but retrying: %m" -#~ msgstr "" -#~ "n'a pas pu synchroniser sur disque (fsync) le segment %u de la relation\n" -#~ "%s, nouvelle tentative : %m" +#~ msgid "invalid role password \"%s\"" +#~ msgstr "mot de passe « %s » de l'utilisateur invalide" -#~ msgid "could not fsync segment %u of relation %s: %m" +#~ msgid "cannot specify CSV in BINARY mode" +#~ msgstr "ne peut pas spécifier CSV en mode binaire (BINARY)" + +#~ msgid "cannot set session authorization within security-definer function" +#~ msgstr "ne peut pas exécuter SESSION AUTHORIZATION sur la fonction SECURITY DEFINER" + +#~ msgid "SELECT FOR UPDATE/SHARE is not supported within a query with multiple result relations" #~ msgstr "" -#~ "n'a pas pu synchroniser sur disque (fsync) le segment %u de la relation\n" -#~ "%s : %m" +#~ "SELECT FOR UPDATE/SHARE n'est pas supporté dans une requête avec plusieurs\n" +#~ "relations" -#~ msgid "could not open segment %u of relation %s: %m" -#~ msgstr "n'a pas pu ouvrir le segment %u de la relation %s : %m" +#~ msgid "could not remove relation %s: %m" +#~ msgstr "n'a pas pu supprimer la relation %s : %m" -#~ msgid "could not write block %u of relation %s: %m" -#~ msgstr "n'a pas pu écrire le bloc %u de la relation %s : %m" +#~ msgid "could not remove segment %u of relation %s: %m" +#~ msgstr "n'a pas pu supprimer le segment %u de la relation %s : %m" -#~ msgid "could not read block %u of relation %s: %m" -#~ msgstr "n'a pas pu lire le bloc %u de la relation %s : %m" +#~ msgid "could not seek to block %u of relation %s: %m" +#~ msgstr "n'a pas pu se positionner sur le bloc %u de la relation %s : %m" + +#~ msgid "could not extend relation %s: %m" +#~ msgstr "n'a pas pu étendre la relation %s : %m" #~ msgid "could not open relation %s: %m" #~ msgstr "n'a pas pu ouvrir la relation %s : %m" -#~ msgid "could not extend relation %s: %m" -#~ msgstr "n'a pas pu étendre la relation %s : %m" +#~ msgid "could not read block %u of relation %s: %m" +#~ msgstr "n'a pas pu lire le bloc %u de la relation %s : %m" -#~ msgid "could not seek to block %u of relation %s: %m" -#~ msgstr "n'a pas pu se positionner sur le bloc %u de la relation %s : %m" +#~ msgid "could not write block %u of relation %s: %m" +#~ msgstr "n'a pas pu écrire le bloc %u de la relation %s : %m" -#~ msgid "could not remove segment %u of relation %s: %m" -#~ msgstr "n'a pas pu supprimer le segment %u de la relation %s : %m" +#~ msgid "could not open segment %u of relation %s: %m" +#~ msgstr "n'a pas pu ouvrir le segment %u de la relation %s : %m" -#~ msgid "could not remove relation %s: %m" -#~ msgstr "n'a pas pu supprimer la relation %s : %m" +#~ msgid "could not fsync segment %u of relation %s: %m" +#~ msgstr "" +#~ "n'a pas pu synchroniser sur disque (fsync) le segment %u de la relation\n" +#~ "%s : %m" -#~ msgid "SELECT FOR UPDATE/SHARE is not supported within a query with multiple result relations" +#~ msgid "could not fsync segment %u of relation %s but retrying: %m" #~ msgstr "" -#~ "SELECT FOR UPDATE/SHARE n'est pas supporté dans une requête avec plusieurs\n" -#~ "relations" +#~ "n'a pas pu synchroniser sur disque (fsync) le segment %u de la relation\n" +#~ "%s, nouvelle tentative : %m" -#~ msgid "cannot set session authorization within security-definer function" -#~ msgstr "ne peut pas exécuter SESSION AUTHORIZATION sur la fonction SECURITY DEFINER" +#~ msgid "could not seek to end of segment %u of relation %s: %m" +#~ msgstr "n'a pas pu se déplacer à la fin du segment %u de la relation %s : %m" -#~ msgid "cannot specify CSV in BINARY mode" -#~ msgstr "ne peut pas spécifier CSV en mode binaire (BINARY)" +#~ msgid "unsupported PAM conversation %d/%s" +#~ msgstr "conversation PAM %d/%s non supportée" -#~ msgid "invalid role password \"%s\"" -#~ msgstr "mot de passe « %s » de l'utilisateur invalide" +#~ msgid "SELECT FOR UPDATE/SHARE is not allowed in subqueries" +#~ msgstr "SELECT FOR UPDATE/SHARE n'est pas autorisé dans les sous-requêtes" -#~ msgid "invalid role name \"%s\"" -#~ msgstr "nom de rôle « %s » invalide" +#~ msgid "adding missing FROM-clause entry for table \"%s\"" +#~ msgstr "ajout d'une entrée manquante dans FROM (table « %s »)" -#~ msgid "invalid database name \"%s\"" -#~ msgstr "nom de base de données « %s » invalide" +#~ msgid "OLD used in query that is not in a rule" +#~ msgstr "OLD utilisé dans une requête qui n'est pas une règle" -#~ msgid "This parameter cannot be changed after server start." -#~ msgstr "Ce paramètre ne peut pas être modifié après le lancement du serveur" +#~ msgid "NEW used in query that is not in a rule" +#~ msgstr "NEW utilisé dans une requête qui ne fait pas partie d'une règle" -#~ msgid "attempted change of parameter \"%s\" ignored" -#~ msgstr "tentative de modification du paramètre « %s » ignoré" +#~ msgid "hurrying in-progress restartpoint" +#~ msgstr "accélération du restartpoint en cours" -#~ msgid "Sets the regular expression \"flavor\"." -#~ msgstr "Initialise l'expression rationnelle « flavor »." +#~ msgid "multiple DELETE events specified" +#~ msgstr "multiples événements DELETE spécifiés" -#~ msgid "Automatically adds missing table references to FROM clauses." -#~ msgstr "" -#~ "Ajoute automatiquement les références à la table manquant dans les clauses\n" -#~ "FROM." +#~ msgid "multiple UPDATE events specified" +#~ msgstr "multiples événements UPDATE spécifiés" -#~ msgid "Table contains duplicated values." -#~ msgstr "La table contient des valeurs dupliquées." +#~ msgid "multiple TRUNCATE events specified" +#~ msgstr "multiples événements TRUNCATE spécifiés" -#~ msgid "index row size %lu exceeds btree maximum, %lu" -#~ msgstr "la taille de la ligne index %lu dépasse le maximum de btree, %lu" +#~ msgid "could not create XPath object" +#~ msgstr "n'a pas pu créer l'objet XPath" -#~ msgid "DISTINCT is supported only for single-argument aggregates" -#~ msgstr "DISTINCT est seulement supporté pour les agrégats à un seul argument" +#, fuzzy +#~ msgid "wrong number of array_subscripts" +#~ msgstr "mauvais nombre d'indices du tableau" -#~ msgid "database system is in consistent recovery mode" -#~ msgstr "le système de bases de données est dans un mode de restauration cohérent" +#~ msgid "fillfactor=%d is out of range (should be between %d and 100)" +#~ msgstr "le facteur de remplissage (%d) est en dehors des limites (il devrait être entre %d et 100)" -#~ msgid "frame start at CURRENT ROW is not implemented" -#~ msgstr "début du frame à CURRENT ROW n'est pas implémenté" +#~ msgid "GIN index does not support search with void query" +#~ msgstr "les index GIN ne supportent pas la recherche avec des requêtes vides" -#~ msgid "Rebuild the index with REINDEX." -#~ msgstr "Reconstruisez l'index avec REINDEX." +#~ msgid "invalid LC_COLLATE setting" +#~ msgstr "paramètre LC_COLLATE invalide" -#~ msgid "index \"%s\" contains %.0f row versions, but table contains %.0f row versions" +#~ msgid "invalid LC_CTYPE setting" +#~ msgstr "paramètre LC_CTYPE invalide" + +#~ msgid "The database cluster was initialized with LOCALE_NAME_BUFLEN %d, but the server was compiled with LOCALE_NAME_BUFLEN %d." #~ msgstr "" -#~ "l'index « %s » contient %.0f versions de ligne, mais la table contient %.0f\n" -#~ "versions de ligne" +#~ "Le cluster de bases de données a été initialisé avec un LOCALE_NAME_BUFLEN\n" +#~ "à %d alors que le serveur a été compilé avec un LOCALE_NAME_BUFLEN à %d." -#~ msgid "" -#~ "%u index pages have been deleted, %u are currently reusable.\n" -#~ "%s." +#~ msgid "It looks like you need to initdb or install locale support." #~ msgstr "" -#~ "%u pages d'index ont été supprimées, %u sont actuellement réutilisables.\n" -#~ "%s." +#~ "Il semble que vous avez besoin d'exécuter initdb ou d'installer le support\n" +#~ "des locales." -#~ msgid "\"%s\": moved %u row versions, truncated %u to %u pages" -#~ msgstr "« %s » : %u versions de ligne déplacées, %u pages tronquées sur %u" +#~ msgid "log_restartpoints = %s" +#~ msgstr "log_restartpoints = %s" -#~ msgid "" -#~ "%.0f dead row versions cannot be removed yet.\n" -#~ "Nonremovable row versions range from %lu to %lu bytes long.\n" -#~ "There were %.0f unused item pointers.\n" -#~ "Total free space (including removable row versions) is %.0f bytes.\n" -#~ "%u pages are or will become empty, including %u at the end of the table.\n" -#~ "%u pages containing %.0f free bytes are potential move destinations.\n" -#~ "%s." -#~ msgstr "" -#~ "%.0f versions de lignes mortes ne peuvent pas encore être supprimées.\n" -#~ "Les versions non supprimables de ligne vont de %lu to %lu octets.\n" -#~ "Il existait %.0f pointeurs d'éléments inutilisés.\n" -#~ "L'espace libre total (incluant les versions supprimables de ligne) est de\n" -#~ "%.0f octets.\n" -#~ "%u pages sont ou deviendront vides, ceci incluant %u pages en fin de la\n" -#~ "table.\n" -#~ "%u pages contenant %.0f octets libres sont des destinations de déplacement\n" -#~ "disponibles.\n" -#~ "%s." +#~ msgid "syntax error: cannot back up" +#~ msgstr "erreur de syntaxe : n'a pas pu revenir" -#~ msgid "relation \"%s\" TID %u/%u: DeleteTransactionInProgress %u --- cannot shrink relation" -#~ msgstr "" -#~ "relation « %s », TID %u/%u : DeleteTransactionInProgress %u --- n'a pas pu\n" -#~ "diminuer la taille de la relation" +#~ msgid "syntax error; also virtual memory exhausted" +#~ msgstr "erreur de syntaxe ; de plus, mémoire virtuelle saturée" -#~ msgid "relation \"%s\" TID %u/%u: InsertTransactionInProgress %u --- cannot shrink relation" +#~ msgid "parser stack overflow" +#~ msgstr "saturation de la pile de l'analyseur" + +#~ msgid "failed to drop all objects depending on %s" +#~ msgstr "échec lors de la suppression de tous les objets dépendant de %s" + +#~ msgid "there are objects dependent on %s" +#~ msgstr "des objets dépendent de %s" + +#~ msgid "multiple constraints named \"%s\" were dropped" +#~ msgstr "les contraintes multiples nommées « %s » ont été supprimées" + +#~ msgid "constraint definition for check constraint \"%s\" does not match" #~ msgstr "" -#~ "relation « %s », TID %u/%u : InsertTransactionInProgress %u --- n'a pas pu\n" -#~ "diminuer la taille de la relation" +#~ "la définition de la contrainte « %s » pour la contrainte de vérification ne\n" +#~ "correspond pas" -#~ msgid "relation \"%s\" TID %u/%u: dead HOT-updated tuple --- cannot shrink relation" +#~ msgid "relation \"%s.%s\" contains more than \"max_fsm_pages\" pages with useful free space" #~ msgstr "" -#~ "relation « %s », TID %u/%u : ligne morte mise à jour par HOT --- n'a pas pu\n" -#~ "diminuer la taille de la relation" +#~ "la relation « %s.%s » contient plus de « max_fsm_pages » pages d'espace\n" +#~ "libre utile" -#~ msgid "relation \"%s\" TID %u/%u: XMIN_COMMITTED not set for transaction %u --- cannot shrink relation" +#~ msgid "Consider using VACUUM FULL on this relation or increasing the configuration parameter \"max_fsm_pages\"." #~ msgstr "" -#~ "relation « %s », TID %u/%u : XMIN_COMMITTED non configuré pour la\n" -#~ "transaction %u --- n'a pas pu diminuer la taille de la relation" +#~ "Pensez à compacter cette relation en utilisant VACUUM FULL ou à augmenter le\n" +#~ "paramètre de configuration « max_fsm_pages »." -#~ msgid "directory \"%s\" is not empty" -#~ msgstr "le répertoire « %s » n'est pas vide" +#~ msgid "cannot change number of columns in view" +#~ msgstr "ne peut pas modifier le nombre de colonnes dans la vue" -#~ msgid "number of distinct values %g is too low" -#~ msgstr "le nombre de valeurs distinctes %g est trop basse" +#~ msgid "unexpected Kerberos user name received from client (received \"%s\", expected \"%s\")" +#~ msgstr "" +#~ "nom d'utilisateur Kerberos inattendu reçu à partir du client (reçu « %s »,\n" +#~ "attendu « %s »)" -#~ msgid "cannot truncate system relation \"%s\"" -#~ msgstr "ne peut pas tronquer la relation système « %s »" +#~ msgid "Kerberos 5 not implemented on this server" +#~ msgstr "Kerberos 5 non implémenté sur ce serveur" -#~ msgid "shared table \"%s\" can only be reindexed in stand-alone mode" -#~ msgstr "la table partagée « %s » peut seulement être réindexé en mode autonome" +#~ msgid "GSSAPI not implemented on this server" +#~ msgstr "GSSAPI non implémenté sur ce serveur" -#~ msgid "shared index \"%s\" can only be reindexed in stand-alone mode" -#~ msgstr "un index partagé « %s » peut seulement être réindexé en mode autonome" +#~ msgid "could not get security token from context" +#~ msgstr "n'a pas pu récupérer le jeton de sécurité à partir du contexte" -#~ msgid "Sets the language used in DO statement if LANGUAGE is not specified." +#~ msgid "unsafe permissions on private key file \"%s\"" +#~ msgstr "droits non sûrs sur le fichier de la clé privée « %s »" + +#~ msgid "File must be owned by the database user and must have no permissions for \"group\" or \"other\"." #~ msgstr "" -#~ "Configure le langage utilisé dans une instruction DO si la clause LANGUAGE n'est\n" -#~ "pas spécifiée." +#~ "Le fichier doit appartenir au propriétaire de la base de données et ne doit\n" +#~ "pas avoir de droits pour un groupe ou pour les autres." -#~ msgid "This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by \"client_encoding\"." +#~ msgid "cannot use authentication method \"crypt\" because password is MD5-encrypted" #~ msgstr "" -#~ "Cette erreur peut aussi survenir si la séquence d'octets ne correspond pas\n" -#~ "au jeu de caractères attendu par le serveur, le jeu étant contrôlé par\n" -#~ "« client_encoding »." +#~ "n'a pas pu utiliser la méthode d'authentification « crypt » car le mot de\n" +#~ "passe est chiffré avec MD5" -#~ msgid "redo starts at %X/%X, consistency will be reached at %X/%X" -#~ msgstr "la restauration comme à %X/%X, la cohérence sera atteinte à %X/%X" +#~ msgid "invalid entry in file \"%s\" at line %d, token \"%s\"" +#~ msgstr "entrée invalide dans le fichier « %s » à la ligne %d, jeton « %s »" -#~ msgid "binary value is out of range for type bigint" -#~ msgstr "la valeur binaire est en dehors des limites du type bigint" +#~ msgid "missing field in file \"%s\" at end of line %d" +#~ msgstr "champ manquant dans le fichier « %s » à la fin de la ligne %d" -#~ msgid "transaction is read-only" -#~ msgstr "la transaction est en lecture seule" +#~ msgid "cannot use Ident authentication without usermap field" +#~ msgstr "n'a pas pu utiliser l'authentication Ident sans le champ usermap" -#~ msgid "PID %d is among the slowest backends." -#~ msgstr "Le PID %d est parmi les processus serveur les plus lents." +#~ msgid "Ident protocol identifies remote user as \"%s\"" +#~ msgstr "le protocole Ident identifie l'utilisateur distant comme « %s »" -#, fuzzy -#~ msgid "invalid WAL message received from primary" -#~ msgstr "format du message invalide" +#~ msgid "SELECT FOR UPDATE/SHARE is not supported for inheritance queries" +#~ msgstr "SELECT FOR UPDATE/SHARE n'est pas supporté pour les requêtes d'héritage" -#, fuzzy -#~ msgid "sorry, too many standbys already" -#~ msgstr "désolé, trop de clients sont déjà connectés" +#~ msgid "missing FROM-clause entry in subquery for table \"%s\"" +#~ msgstr "entrée manquante de la clause FROM dans la sous-requête de la table « %s »" -#~ msgid "WAL file SYSID is %s, pg_control SYSID is %s" -#~ msgstr "le SYSID du journal de transactions WAL est %s, celui de pg_control est %s" +#~ msgid "adding missing FROM-clause entry in subquery for table \"%s\"" +#~ msgstr "entrée manquante de la clause FROM dans la sous-requête pour la table « %s »" -#, fuzzy -#~ msgid "couldn't put socket to blocking mode: %m" -#~ msgstr "n'a pas pu activer le mode bloquant pour la socket : %s\n" +#~ msgid "%s: the number of buffers (-B) must be at least twice the number of allowed connections (-N) and at least 16\n" +#~ msgstr "" +#~ "%s : le nombre de tampons (-B) doit être au moins deux fois le nombre de\n" +#~ "connexions disponibles (-N) et au moins 16\n" -#, fuzzy -#~ msgid "couldn't put socket to non-blocking mode: %m" -#~ msgstr "n'a pas pu activer le mode non-bloquant pour la socket : %s\n" +#~ msgid "could not set statistics collector timer: %m" +#~ msgstr "n'a pas pu configurer le timer du récupérateur de statistiques : %m" -#~ msgid "not enough shared memory for background writer" -#~ msgstr "pas assez de mémoire partagée pour le processus d'écriture en tâche de fond" +#~ msgid "insufficient shared memory for free space map" +#~ msgstr "mémoire partagée insuffisante pour la structure FSM" -#~ msgid "connection limit exceeded for non-superusers" -#~ msgstr "limite de connexions dépassée pour les utilisateurs standards" +#~ msgid "max_fsm_pages must exceed max_fsm_relations * %d" +#~ msgstr "max_fsm_pages doit excéder max_fsm_relations * %d" -#~ msgid "not enough shared memory for walreceiver" -#~ msgstr "" -#~ "pas assez de mémoire partagée pour le processus de réception des journaux de\n" -#~ "transactions" +#~ msgid "free space map contains %d pages in %d relations" +#~ msgstr "la structure FSM contient %d pages dans %d relations" -#~ msgid "not enough shared memory for walsender" -#~ msgstr "pas assez de mémoire partagée pour le processus d'envoi des journaux de transactions" +#~ msgid "" +#~ "A total of %.0f page slots are in use (including overhead).\n" +#~ "%.0f page slots are required to track all free space.\n" +#~ "Current limits are: %d page slots, %d relations, using %.0f kB." +#~ msgstr "" +#~ "Un total de %.0f emplacements de pages est utilisé (ceci incluant la\n" +#~ "surcharge).\n" +#~ "%.0f emplacements de pages sont requis pour tracer tout l'espace libre.\n" +#~ "Les limites actuelles sont : %d emplacements de pages, %d relations,\n" +#~ "utilisant %.0f Ko." -#~ msgid "unlogged operation performed, data may be missing" -#~ msgstr "opération réalisée non tracée, les données pourraient manquer" +#~ msgid "max_fsm_relations(%d) equals the number of relations checked" +#~ msgstr "max_fsm_relations(%d) équivaut au nombre de relations tracées" -#~ msgid "During recovery, allows connections and queries. During normal running, causes additional info to be written to WAL to enable hot standby mode on WAL standby nodes." +#~ msgid "You have at least %d relations. Consider increasing the configuration parameter \"max_fsm_relations\"." #~ msgstr "" -#~ "Lors de la restauration, autorise les connexions et les requêtes. Lors d'une\n" -#~ "exécution normale, fait que des informations supplémentaires sont écrites dans\n" -#~ "les journaux de transactions pour activer le mode Hot Standby sur les nœuds\n" -#~ "en attente." +#~ "Vous avez au moins %d relations.Considèrez l'augmentation du paramètre de\n" +#~ "configuration « max_fsm_relations »." -#~ msgid "archive_command must be defined before online backups can be made safely." +#~ msgid "number of page slots needed (%.0f) exceeds max_fsm_pages (%d)" +#~ msgstr "le nombre d'emplacements de pages nécessaires (%.0f) dépasse max_fsm_pages (%d)" + +#~ msgid "Consider increasing the configuration parameter \"max_fsm_pages\" to a value over %.0f." #~ msgstr "" -#~ "archive_command doit être défini avant que les sauvegardes à chaud puissent\n" -#~ "s'effectuer correctement." +#~ "Considérez l'augmentation du paramètre de configuration « max_fsm_pages »\n" +#~ "à une valeur supérieure à %.0f." -#~ msgid "archive_mode must be enabled at server start." -#~ msgstr "archive_mode doit être activé au lancement du serveur." +#~ msgid "string is too long for tsvector" +#~ msgstr "la chaîne est trop longue pour un tsvector" -#~ msgid "WAL archiving is not active" -#~ msgstr "l'archivage des journaux de transactions n'est pas actif" +#~ msgid "Prints the parse tree to the server log." +#~ msgstr "Affiche l'arbre d'analyse dans les journaux applicatifs du serveur." -#~ msgid "usermap \"%s\"" -#~ msgstr "correspondance utilisateur « %s »" +#~ msgid "Prints the parse tree after rewriting to server log." +#~ msgstr "Affiche l'arbre d'analyse après ré-écriture dans les journaux applicatifs du serveur." -#~ msgid "restartpoint_command = '%s'" -#~ msgstr "restartpoint_command = '%s'" +#~ msgid "Prints the execution plan to server log." +#~ msgstr "Affiche le plan d'exécution dans les journaux applicatifs du serveur." -#~ msgid "recovery restart point at %X/%X with latest known log time %s" +#~ msgid "Uses the indented output format for EXPLAIN VERBOSE." +#~ msgstr "Utilise le format de sortie indenté pour EXPLAIN VERBOSE." + +#~ msgid "Sets the maximum number of tables and indexes for which free space is tracked." #~ msgstr "" -#~ "point de relancement de la restauration sur %X/%X avec %s comme dernière\n" -#~ "date connue du journal" +#~ "Initialise le nombre maximum de tables et index pour lesquels l'espace libre\n" +#~ "est tracé." -#~ msgid "Not safe to send CSV data\n" -#~ msgstr "Envoi non sûr des données CSV\n" +#~ msgid "Sets the maximum number of disk pages for which free space is tracked." +#~ msgstr "" +#~ "Initialise le nombre maximum de pages disque pour lesquelles l'espace libre\n" +#~ "est tracé." -#~ msgid "Sets the message levels that are logged during recovery." -#~ msgstr "Initialise les niveaux de messages qui sont tracés lors de la restauration." +#~ msgid "Valid values are ON, OFF, and SAFE_ENCODING." +#~ msgstr "Les valeurs valides sont ON, OFF et SAFE_ENCODING." -#~ msgid "parameter \"standby_mode\" requires a Boolean value" -#~ msgstr "le paramètre « standby_mode » requiert une valeur booléenne" +#~ msgid "Valid values are DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC. Each level includes all the levels that follow it." +#~ msgstr "" +#~ "Les valeurs valides sont DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO,\n" +#~ "NOTICE, WARNING, ERROR, LOG, FATAL et PANIC. Chaque niveau incut tous les\n" +#~ "niveaux qui le suit." -#~ msgid "parameter \"recovery_target_inclusive\" requires a Boolean value" -#~ msgstr "le paramètre « recovery_target_inclusive » requiert une valeur booléenne" +#~ msgid "All SQL statements that cause an error of the specified level or a higher level are logged." +#~ msgstr "" +#~ "Toutes les instructions SQL causant une erreur du niveau spécifié ou d'un\n" +#~ "niveau supérieur sont tracées." -#~ msgid "cannot drop \"%s\" because it is being used by active queries in this session" +#~ msgid "Each SQL transaction has an isolation level, which can be either \"read uncommitted\", \"read committed\", \"repeatable read\", or \"serializable\"." #~ msgstr "" -#~ "ne peut pas supprimer « %s » car cet objet est en cours d'utilisation par\n" -#~ "des requêtes actives dans cette session" +#~ "Chaque transaction SQL a un niveau d'isolation qui peut être soit « read\n" +#~ "uncommitted », soit « read committed », soit « repeatable read », soit\n" +#~ "« serializable »." -#~ msgid "unrecognized \"log_destination\" key word: \"%s\"" -#~ msgstr "mot clé « log_destination » non reconnu : « %s »" +#~ msgid "Each session can be either \"origin\", \"replica\", or \"local\"." +#~ msgstr "Chaque session peut valoir soit « origin » soit « replica » soit « local »." -#~ msgid "invalid list syntax for parameter \"log_destination\"" -#~ msgstr "syntaxe de liste invalide pour le paramètre « log_destination »" +#~ msgid "Sets realm to match Kerberos and GSSAPI users against." +#~ msgstr "" +#~ "Indique le royaume pour l'authentification des utilisateurs via Kerberos et\n" +#~ "GSSAPI." -#~ msgid "Sets immediate fsync at commit." -#~ msgstr "Configure un fsync immédiat lors du commit." +#~ msgid "Sets the hostname of the Kerberos server." +#~ msgstr "Initalise le nom d'hôte du serveur Kerberos." -#~ msgid "could not open new log file \"%s\": %m" -#~ msgstr "n'a pas pu ouvrir le nouveau journal applicatif « %s » : %m" +#~ msgid "This can be set to advanced, extended, or basic." +#~ msgstr "" +#~ "Ceci peut être initialisé avec advanced (avancé), extended (étendu) ou\n" +#~ "basic (basique)." -#~ msgid "could not create log file \"%s\": %m" -#~ msgstr "n'a pas pu créer le journal applicatif « %s » : %m" +#~ msgid "Valid values are LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7." +#~ msgstr "" +#~ "Les valeurs valides sont LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5,\n" +#~ "LOCAL6, LOCAL7." -#~ msgid "Ident authentication is not supported on local connections on this platform" -#~ msgstr "l'authentification Ident n'est pas supportée sur les connexions locales sur cette plateforme" +#~ msgid "Valid values are DOCUMENT and CONTENT." +#~ msgstr "Les valeurs valides sont DOCUMENT et CONTENT." -#~ msgid "could not get effective UID from peer credentials: %m" -#~ msgstr "n'a pas pu obtenir l'UID réel à partir des pièces d'identité de l'autre : %m" +#~ msgid "invalid argument for power function" +#~ msgstr "argument invalide pour la fonction puissance (power)" -#~ msgid "could not enable credential reception: %m" -#~ msgstr "n'a pas pu activer la réception de lettres de créance : %m" +#~ msgid "not unique \"S\"" +#~ msgstr "« S » non unique" -#~ msgid "argument to pg_get_expr() must come from system catalogs" -#~ msgstr "l'argument de pg_get_expr() doit provenir des catalogues systèmes" +#~ msgid "\"TZ\"/\"tz\" not supported" +#~ msgstr "« TZ »/« tz » non supporté" -#~ msgid "invalid interval value for time zone: day not allowed" -#~ msgstr "valeur d'intervalle invalide pour le fuseau horaire : jour non autorisé" - -#~ msgid "invalid interval value for time zone: month not allowed" -#~ msgstr "valeur d'intervalle invalide pour le fuseau horaire : les mois ne sont pas autorisés" +#~ msgid "January" +#~ msgstr "Janvier" -#~ msgid "unrecognized \"datestyle\" key word: \"%s\"" -#~ msgstr "mot clé « datestyle » non reconnu : « %s »" +#~ msgid "February" +#~ msgstr "Février" -#~ msgid "invalid list syntax for parameter \"datestyle\"" -#~ msgstr "syntaxe de liste invalide pour le paramètre « datestyle »" +#~ msgid "March" +#~ msgstr "Mars" -#~ msgid "database \"%s\" not found" -#~ msgstr "base de données « %s » non trouvée" +#~ msgid "April" +#~ msgstr "Avril" -#~ msgid "composite type must have at least one attribute" -#~ msgstr "le type composite doit avoir au moins un attribut" +#~ msgid "May" +#~ msgstr "Mai" -#~ msgid "cannot reference permanent table from temporary table constraint" -#~ msgstr "" -#~ "ne peut pas référencer une table permanente à partir de la contrainte de\n" -#~ "table temporaire" +#~ msgid "June" +#~ msgstr "Juin" -#~ msgid "cannot reference temporary table from permanent table constraint" -#~ msgstr "" -#~ "ne peut pas référencer une table temporaire à partir d'une contrainte de\n" -#~ "table permanente" +#~ msgid "July" +#~ msgstr "Juillet" -#~ msgid "function \"%s\" is already in schema \"%s\"" -#~ msgstr "la fonction « %s » existe déjà dans le schéma « %s »" +#~ msgid "August" +#~ msgstr "Août" -#~ msgid "must be superuser to comment on text search template" -#~ msgstr "" -#~ "doit être super-utilisateur pour ajouter un commentaire sur un modèle de\n" -#~ "recherche plein texte" +#~ msgid "September" +#~ msgstr "Septembre" -#~ msgid "must be superuser to comment on text search parser" -#~ msgstr "" -#~ "doit être super-utilisateur pour ajouter un commentaire sur l'analyseur de\n" -#~ "recherche plein texte" +#~ msgid "October" +#~ msgstr "Octobre" -#~ msgid "must be superuser to comment on procedural language" -#~ msgstr "" -#~ "doit être super-utilisateur pour ajouter un commentaire sur un langage de\n" -#~ "procédures" +#~ msgid "November" +#~ msgstr "Novembre" -#~ msgid "\"%s\" is not a table, view, or composite type" -#~ msgstr "« %s » n'est pas une table, une vue ou un type composite" +#~ msgid "December" +#~ msgstr "Décembre" -#~ msgid "cannot cluster on expressional index \"%s\" because its index access method does not handle null values" -#~ msgstr "" -#~ "ne peut pas exécuter CLUSTER sur l'index à expression « %s » car sa méthode\n" -#~ "d'accès ne gère pas les valeurs NULL" +#~ msgid "Jan" +#~ msgstr "Jan" -#~ msgid "You might be able to work around this by marking column \"%s\" NOT NULL." -#~ msgstr "Vous pouvez contourner ceci en marquant la colonne « %s » comme NOT NULL." +#~ msgid "Feb" +#~ msgstr "Fév" -#~ msgid "You might be able to work around this by marking column \"%s\" NOT NULL, or use ALTER TABLE ... SET WITHOUT CLUSTER to remove the cluster specification from the table." -#~ msgstr "" -#~ "Vous pourriez contourner ceci en marquant la colonne « %s » avec la\n" -#~ "contrainte NOT NULL ou en utilisant ALTER TABLE ... SET WITHOUT CLUSTER pour\n" -#~ "supprimer la spécification CLUSTER de la table." +#~ msgid "Mar" +#~ msgstr "Mar" -#~ msgid "cannot cluster on index \"%s\" because access method does not handle null values" -#~ msgstr "" -#~ "ne peut pas créer un cluster sur l'index « %s » car la méthode d'accès de\n" -#~ "l'index ne gère pas les valeurs NULL" +#~ msgid "Apr" +#~ msgstr "Avr" -#~ msgid "clustering \"%s.%s\"" -#~ msgstr "exécution de CLUSTER sur « %s.%s »" +#~ msgid "S:May" +#~ msgstr "S:Mai" -#~ msgid "EnumValuesCreate() can only set a single OID" -#~ msgstr "EnumValuesCreate() peut seulement initialiser un seul OID" +#~ msgid "Jun" +#~ msgstr "Juin" -#~ msgid "index \"%s\" needs VACUUM FULL or REINDEX to finish crash recovery" -#~ msgstr "" -#~ "l'index « %s » a besoin d'un VACUUM FULL ou d'un REINDEX pour terminer la\n" -#~ "récupération suite à un arrêt brutal" +#~ msgid "Jul" +#~ msgstr "Juil" -#~ msgid "index \"%s\" needs VACUUM or REINDEX to finish crash recovery" -#~ msgstr "" -#~ "l'index « %s » a besoin d'un VACUUM ou d'un REINDEX pour terminer la\n" -#~ "récupération suite à un arrêt brutal" +#~ msgid "Aug" +#~ msgstr "Aoû" -#~ msgid "Incomplete insertion detected during crash replay." -#~ msgstr "" -#~ "Insertion incomplète détectée lors de la ré-exécution des requêtes suite à\n" -#~ "l'arrêt brutal." +#~ msgid "Sep" +#~ msgstr "Sep" -#~ msgid "index %u/%u/%u needs VACUUM FULL or REINDEX to finish crash recovery" -#~ msgstr "" -#~ "l'index %u/%u/%u a besoin d'un VACUUM FULL ou d'un REINDEX pour terminer la\n" -#~ "récupération suite à un arrêt brutal" +#~ msgid "Oct" +#~ msgstr "Oct" -#~ msgid "Lines should have the format parameter = 'value'." -#~ msgstr "Les lignes devraient avoir le format paramètre = 'valeur'" +#~ msgid "Nov" +#~ msgstr "Nov" -#~ msgid "syntax error in recovery command file: %s" -#~ msgstr "erreur de syntaxe dans le fichier de restauration : %s" +#~ msgid "Dec" +#~ msgstr "Déc" -#~ msgid "Write-Ahead Log / Streaming Replication" -#~ msgstr "Write-Ahead Log / Réplication en flux" +#~ msgid "Sunday" +#~ msgstr "Dimanche" -#~ msgid "unable to open directory pg_tblspc: %m" -#~ msgstr "impossible d'ouvrir le répertoire p_tblspc : %m" +#~ msgid "Monday" +#~ msgstr "Lundi" -#~ msgid "unable to read symbolic link %s: %m" -#~ msgstr "incapable de lire le lien symbolique %s : %m" +#~ msgid "Tuesday" +#~ msgstr "Mardi" -#~ msgid "index \"%s\" is not a b-tree" -#~ msgstr "l'index « %s » n'est pas un btree" +#~ msgid "Wednesday" +#~ msgstr "Mercredi" -#~ msgid "ALTER TYPE USING is only supported on plain tables" -#~ msgstr "ALTER TYPE USING est seulement supportés sur les tables standards" +#~ msgid "Thursday" +#~ msgstr "Jeudi" -#~ msgid "resetting unlogged relations: cleanup %d init %d" -#~ msgstr "réinitialisation des relations non tracées : nettoyage %d initialisation %d" +#~ msgid "Friday" +#~ msgstr "Vendredi" -#~ msgid "%s (%x)" -#~ msgstr "%s (%x)" +#~ msgid "Saturday" +#~ msgstr "Samedi" -#~ msgid "SSPI error %x" -#~ msgstr "erreur SSPI : %x" +#~ msgid "Sun" +#~ msgstr "Dim" -#~ msgid "consistent state delayed because recovery snapshot incomplete" -#~ msgstr "état de cohérence pas encore atteint à cause d'un snapshot de restauration incomplet" +#~ msgid "Mon" +#~ msgstr "Lun" -#~ msgid "tablespace %u is not empty" -#~ msgstr "le tablespace %u n'est pas vide" +#~ msgid "Tue" +#~ msgstr "Mar" -#~ msgid "subquery in WITH cannot have SELECT INTO" -#~ msgstr "la sous-requête du WITH ne peut pas avoir de SELECT INTO" +#~ msgid "Wed" +#~ msgstr "Mer" -#~ msgid "subquery cannot have SELECT INTO" -#~ msgstr "la sous-requête ne peut pas avoir de SELECT INTO" +#~ msgid "Thu" +#~ msgstr "Jeu" -#~ msgid "subquery in FROM cannot have SELECT INTO" -#~ msgstr "la sous-requête du FROM ne peut pas avoir de SELECT INTO" +#~ msgid "Fri" +#~ msgstr "Ven" -#~ msgid "DECLARE CURSOR cannot specify INTO" -#~ msgstr "DECLARE CURSOR ne peut pas spécifier INTO" +#~ msgid "Sat" +#~ msgstr "Sam" -#~ msgid "INSERT ... SELECT cannot specify INTO" -#~ msgstr "INSERT ... SELECT ne peut pas avoir INTO" +#~ msgid "AM/PM hour must be between 1 and 12" +#~ msgstr "l'heure AM/PM doit être compris entre 1 et 12" -#~ msgid "column name list not allowed in CREATE TABLE / AS EXECUTE" -#~ msgstr "la liste de noms de colonnes n'est pas autorisée dans CREATE TABLE / AS EXECUTE" +#~ msgid "UTF-16 to UTF-8 translation failed: %lu" +#~ msgstr "échec de la conversion d'UTF16 vers UTF8 : %lu" -#~ msgid "CREATE TABLE AS cannot specify INTO" -#~ msgstr "CREATE TABLE AS ne peut pas spécifier INTO" +#~ msgid "cannot calculate week number without year information" +#~ msgstr "ne peut pas calculer le numéro de la semaine sans informations sur l'année" -#~ msgid " --version output version information, then exit\n" -#~ msgstr " --version affiche la version, puis quitte\n" +#~ msgid "query requires full scan, which is not supported by GIN indexes" +#~ msgstr "" +#~ "la requête nécessite un parcours complet, ce qui n'est pas supporté par les\n" +#~ "index GIN" -#~ msgid " --help show this help, then exit\n" -#~ msgstr " --help affiche cette aide, puis quitte\n" +#~ msgid "@@ operator does not support lexeme weight restrictions in GIN index searches" +#~ msgstr "" +#~ "l'opérateur @@ ne supporte pas les restrictions de poids de lexeme dans les\n" +#~ "recherches par index GIN" -#~ msgid "Make sure the root.crt file is present and readable." -#~ msgstr "Assurez-vous que le certificat racine (root.crt) est présent et lisible" +#~ msgid "unexpected delimiter at line %d of thesaurus file \"%s\"" +#~ msgstr "délimiteur inattendu sur la ligne %d du thesaurus « %s »" -#~ msgid "See server log for details." -#~ msgstr "Voir les journaux applicatifs du serveur pour plus de détails." +#~ msgid "unexpected end of line or lexeme at line %d of thesaurus file \"%s\"" +#~ msgstr "fin de ligne ou de lexeme inattendu sur la ligne %d du thesaurus « %s »" -#~ msgid "missing or erroneous pg_hba.conf file" -#~ msgstr "fichier pg_hba.conf manquant ou erroné" +#~ msgid "unexpected end of line at line %d of thesaurus file \"%s\"" +#~ msgstr "fin de ligne inattendue à la ligne %d du thésaurus « %s »" -#~ msgid "Certificates will not be checked against revocation list." -#~ msgstr "Les certificats ne seront pas vérifiés avec la liste de révocation." +#~ msgid "could not remove database directory \"%s\"" +#~ msgstr "n'a pas pu supprimer le répertoire de bases de données « %s »" -#~ msgid "SSL certificate revocation list file \"%s\" not found, skipping: %s" -#~ msgstr "liste de révocation des certificats SSL « %s » introuvable, continue : %s" +#~ msgid "index \"%s\" is not ready" +#~ msgstr "l'index « %s » n'est pas prêt" -#~ msgid "could not access root certificate file \"%s\": %m" -#~ msgstr "n'a pas pu accéder au fichier du certificat racine « %s » : %m" +#~ msgid "argument number is out of range" +#~ msgstr "le nombre en argument est en dehors des limites" -#~ msgid "could not open directory \"pg_tblspc\": %m" -#~ msgstr "n'a pas pu ouvrir le répertoire « pg_tblspc » : %m" +#~ msgid "No rows were found in \"%s\"." +#~ msgstr "Aucune ligne trouvée dans « %s »." -#~ msgid "standby connections not allowed because wal_level=minimal" -#~ msgstr "connexions standby non autorisées car wal_level=minimal" +#~ msgid "inconsistent use of year %04d and \"BC\"" +#~ msgstr "utilisation non cohérente de l'année %04d et de « BC »" -#~ msgid "recovery is still in progress, can't accept WAL streaming connections" -#~ msgstr "la restauration est en cours, ne peut pas accepter les connexions de flux WAL" +#~ msgid "\"interval\" time zone \"%s\" not valid" +#~ msgstr "le fuseau horaire « %s » n'est pas valide pour le type « interval »" -#~ msgid "must be superuser to drop text search templates" -#~ msgstr "doit être super-utilisateur pour supprimer des modèles de recherche plein texte" +#~ msgid "Not enough memory for reassigning the prepared transaction's locks." +#~ msgstr "Pas assez de mémoire pour réaffecter les verrous des transactions préparées." -#~ msgid "must be superuser to drop text search parsers" -#~ msgstr "" -#~ "doit être super-utilisateur pour supprimer des analyseurs de recherche plein\n" -#~ "texte" +#~ msgid "large object %u was already dropped" +#~ msgstr "le « Large Object » %u a déjà été supprimé" -#~ msgid "Must be superuser to drop a foreign-data wrapper." -#~ msgstr "Doit être super-utilisateur pour supprimer un wrapper de données distantes." +#~ msgid "large object %u was not opened for writing" +#~ msgstr "le « Large Object » %u n'a pas été ouvert en écriture" -#~ msgid "permission denied to drop foreign-data wrapper \"%s\"" -#~ msgstr "droit refusé pour supprimer le wrapper de données distantes « %s »" +#~ msgid "invalid standby query string: %s" +#~ msgstr "chaîne de requête invalide sur le serveur en attente : %s" -#~ msgid "removing built-in function \"%s\"" -#~ msgstr "suppression de la fonction interne « %s »" +#~ msgid "terminating walsender process to force cascaded standby to update timeline and reconnect" +#~ msgstr "" +#~ "arrêt du processus walreceiver pour forcer le serveur standby en cascade à\n" +#~ "mettre à jour la timeline et à se reconnecter" -#~ msgid "foreign key constraint \"%s\" of relation \"%s\" does not exist" -#~ msgstr "la clé étrangère « %s » de la relation « %s » n'existe pas" +#~ msgid "invalid standby handshake message type %d" +#~ msgstr "type %d du message de handshake du serveur en attente invalide" -#~ msgid "Sets the list of known custom variable classes." -#~ msgstr "Initialise la liste des classes variables personnalisées connues." +#~ msgid "streaming replication successfully connected to primary" +#~ msgstr "réplication de flux connecté avec succès au serveur principal" -#~ msgid "WAL sender sleep time between WAL replications." +#~ msgid "shutdown requested, aborting active base backup" +#~ msgstr "arrêt demandé, annulation de la sauvegarde active de base" + +#~ msgid "terminating all walsender processes to force cascaded standby(s) to update timeline and reconnect" #~ msgstr "" -#~ "Temps d'endormissement du processus d'envoi des journaux de transactions entre\n" -#~ "les réplications des journaux de transactions." +#~ "arrêt de tous les processus walsender pour forcer les serveurs standby en\n" +#~ "cascade à mettre à jour la timeline et à se reconnecter" -#~ msgid "If this parameter is set, the server will automatically run in the background and any controlling terminals are dissociated." +#~ msgid "" +#~ "This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently %lu bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.\n" +#~ "If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.\n" +#~ "The PostgreSQL documentation contains more information about shared memory configuration." #~ msgstr "" -#~ "Si ce paramètre est initialisé, le serveur sera exécuté automatiquement en\n" -#~ "tâche de fond et les terminaux de contrôles seront dés-associés." +#~ "Cette erreur signifie habituellement que la demande de PostgreSQL pour un\n" +#~ "segment de mémoire partagée a dépassé le paramètre SHMMAX de votre noyau.\n" +#~ "Vous pouvez soit réduire la taille de la requête soit reconfigurer le noyau\n" +#~ "avec un SHMMAX plus important. Pour réduire la taille de la requête\n" +#~ "(actuellement %lu octets), réduisez l'utilisation de la mémoire partagée par PostgreSQL,par exemple en réduisant shared_buffers ou max_connections\n" +#~ "Si la taille de la requête est déjà petite, il est possible qu'elle soit\n" +#~ "moindre que le paramètre SHMMIN de votre noyau, auquel cas, augmentez la\n" +#~ "taille de la requête ou reconfigurez SHMMIN.\n" +#~ "La documentation de PostgreSQL contient plus d'informations sur la\n" +#~ "configuration de la mémoire partagée." -#~ msgid "Runs the server silently." -#~ msgstr "Lance le serveur de manière silencieuse." +#~ msgid "cannot use window function in rule WHERE condition" +#~ msgstr "ne peut pas utiliser la fonction window dans la condition d'une règle WHERE" -#~ msgid "%s: could not dissociate from controlling TTY: %s\n" -#~ msgstr "%s : n'a pas pu se dissocier du TTY contrôlant : %s\n" +#~ msgid "cannot use aggregate function in rule WHERE condition" +#~ msgstr "ne peut pas utiliser la fonction d'agrégat dans la condition d'une règle WHERE" -#~ msgid "%s: could not fork background process: %s\n" -#~ msgstr "%s : n'a pas pu créer un processus fils : %s\n" +#~ msgid "arguments of row IN must all be row expressions" +#~ msgstr "les arguments de la ligne IN doivent tous être des expressions de ligne" -#~ msgid "%s: could not open log file \"%s/%s\": %s\n" -#~ msgstr "%s : n'a pas pu ouvrir le journal applicatif « %s/%s » : %s\n" +#~ msgid "argument of %s must not contain window functions" +#~ msgstr "l'argument de %s ne doit pas contenir des fonctions window" -#~ msgid "select() failed in logger process: %m" -#~ msgstr "échec de select() dans le processus des journaux applicatifs : %m" +#~ msgid "argument of %s must not contain aggregate functions" +#~ msgstr "l'argument de %s ne doit pas contenir de fonctions d'agrégats" -#~ msgid "poll() failed in statistics collector: %m" -#~ msgstr "échec du poll() dans le récupérateur de statistiques : %m" +#~ msgid "cannot use window function in function expression in FROM" +#~ msgstr "" +#~ "ne peut pas utiliser la fonction window dans l'expression de la fonction\n" +#~ "du FROM" -#~ msgid "Valid values are '[]', '[)', '(]', and '()'." -#~ msgstr "Les valeurs valides sont « [] », « [) », « (] » et « () »." +#~ msgid "function expression in FROM cannot refer to other relations of same query level" +#~ msgstr "" +#~ "l'expression de la fonction du FROM ne peut pas faire référence à d'autres\n" +#~ "relations sur le même niveau de la requête" -#~ msgid "invalid list syntax for \"unix_socket_directories\"" -#~ msgstr "syntaxe de liste invalide pour le paramètre « unix_socket_directories »" +#~ msgid "subquery in FROM cannot refer to other relations of same query level" +#~ msgstr "" +#~ "la sous-requête du FROM ne peut pas faire référence à d'autres relations\n" +#~ "dans le même niveau de la requête" -#~ msgid "window functions cannot use named arguments" -#~ msgstr "les fonctions window ne peuvent pas renvoyer des arguments nommés" +#~ msgid "JOIN/ON clause refers to \"%s\", which is not part of JOIN" +#~ msgstr "la clause JOIN/ON se réfère à « %s », qui ne fait pas partie du JOIN" -#~ msgid "cannot override frame clause of window \"%s\"" -#~ msgstr "ne peut pas surcharger la frame clause du window « %s »" +#~ msgid "window functions not allowed in GROUP BY clause" +#~ msgstr "fonctions window non autorisées dans une clause GROUP BY" -#~ msgid "JSON does not support infinite timestamp values." -#~ msgstr "JSON ne supporte pas les valeurs infinies de timestamp." +#~ msgid "aggregates not allowed in WHERE clause" +#~ msgstr "agrégats non autorisés dans une clause WHERE" -#~ msgid "JSON does not support infinite date values." -#~ msgstr "JSON ne supporte pas les valeurs infinies de date." +#~ msgid "SELECT FOR UPDATE/SHARE cannot be used with foreign table \"%s\"" +#~ msgstr "SELECT FOR UPDATE/SHARE ne peut pas être utilisé avec une table distante « %s »" -#~ msgid "WAL writer sleep time between WAL flushes." -#~ msgstr "" -#~ "Temps d'endormissement du processus d'écriture pendant le vidage des\n" -#~ "journaux de transactions en millisecondes." +#~ msgid "SELECT FOR UPDATE/SHARE is not allowed with window functions" +#~ msgstr "SELECT FOR UPDATE/SHARE n'est pas autorisé avec les fonctions window" -#~ msgid "argument for function \"exp\" too big" -#~ msgstr "l'argument de la fonction « exp » est trop gros" +#~ msgid "SELECT FOR UPDATE/SHARE is not allowed with aggregate functions" +#~ msgstr "SELECT FOR UPDATE/SHARE n'est pas autorisé avec les fonctions d'agrégats" -#~ msgid "must be superuser to rotate log files" -#~ msgstr "doit être super-utilisateur pour exécuter la rotation des journaux applicatifs" +#~ msgid "SELECT FOR UPDATE/SHARE is not allowed with HAVING clause" +#~ msgstr "SELECT FOR UPDATE/SHARE n'est pas autorisé avec la clause HAVING" -#~ msgid "must be superuser to signal the postmaster" -#~ msgstr "doit être super-utilisateur pour envoyer un signal au postmaster" +#~ msgid "SELECT FOR UPDATE/SHARE is not allowed with GROUP BY clause" +#~ msgstr "SELECT FOR UPDATE/SHARE n'est pas autorisé avec la clause GROUP BY" -#~ msgid "could not format \"circle\" value" -#~ msgstr "n'a pas pu formater la valeur « circle »" +#~ msgid "RETURNING cannot contain references to other relations" +#~ msgstr "RETURNING ne doit pas contenir de références à d'autres relations" -#~ msgid "invalid input syntax for type circle: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type circle : « %s »" +#~ msgid "cannot use window function in RETURNING" +#~ msgstr "ne peut pas utiliser une fonction window dans RETURNING" -#~ msgid "invalid input syntax for type polygon: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type polygon : « %s »" +#~ msgid "cannot use aggregate function in RETURNING" +#~ msgstr "ne peut pas utiliser une fonction d'agrégat dans RETURNING" -#~ msgid "invalid input syntax for type lseg: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type lseg : « %s »" +#~ msgid "cannot use window function in UPDATE" +#~ msgstr "ne peut pas utiliser une fonction window dans un UPDATE" -#~ msgid "invalid input syntax for type point: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type point : « %s »" +#~ msgid "cannot use aggregate function in UPDATE" +#~ msgstr "ne peut pas utiliser une fonction d'agrégat dans un UPDATE" -#~ msgid "invalid input syntax for type path: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type path : « %s »" +#~ msgid "cannot use window function in VALUES" +#~ msgstr "ne peut pas utiliser la fonction window dans un VALUES" -#~ msgid "invalid input syntax for type line: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type line: « %s »" +#~ msgid "cannot use aggregate function in VALUES" +#~ msgstr "ne peut pas utiliser la fonction d'agrégat dans un VALUES" -#~ msgid "invalid input syntax for type box: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type box : « %s »" +#~ msgid "Use SELECT ... UNION ALL ... instead." +#~ msgstr "Utilisez à la place SELECT ... UNION ALL ..." -#~ msgid "could not format \"path\" value" -#~ msgstr "n'a pas pu formater la valeur « path »" +#~ msgid "VALUES must not contain OLD or NEW references" +#~ msgstr "VALUES ne doit pas contenir des références à OLD et NEW" -#~ msgid "multibyte flag character is not allowed" -#~ msgstr "un caractère drapeau multi-octet n'est pas autorisé" +#~ msgid "VALUES must not contain table references" +#~ msgstr "VALUES ne doit pas contenir de références de table" -#~ msgid "socket not open" -#~ msgstr "socket non ouvert" +#~ msgid "LDAP search failed for filter \"%s\" on server \"%s\": user is not unique (%ld matches)" +#~ msgstr "" +#~ "échec de la recherche LDAP pour le filtre « %s » sur le serveur « %s » :\n" +#~ "utilisateur non unique (%ld correspondances)" -#~ msgid "must be superuser to reset statistics counters" -#~ msgstr "doit être super-utilisateur pour réinitialiser les compteurs statistiques" +#~ msgid "You need an unconditional ON DELETE DO INSTEAD rule or an INSTEAD OF DELETE trigger." +#~ msgstr "Vous avez besoin d'une règle inconditionnelle ON DELETE DO INSTEAD ou d'un trigger INSTEAD OF DELETE." -#~ msgid "function %s must return type \"tsm_handler\"" -#~ msgstr "la fonction %s doit renvoyer le type « tsm_handler »" +#~ msgid "You need an unconditional ON UPDATE DO INSTEAD rule or an INSTEAD OF UPDATE trigger." +#~ msgstr "Vous avez besoin d'une règle non conditionnelle ON UPDATE DO INSTEAD ou d'un trigger INSTEAD OF UPDATE." -#~ msgid "Permissions should be u=rw (0600) or less." -#~ msgstr "Les droits devraient être u=rwx (0600) ou inférieures." +#~ msgid "You need an unconditional ON INSERT DO INSTEAD rule or an INSTEAD OF INSERT trigger." +#~ msgstr "Vous avez besoin d'une règle ON INSERT DO INSTEAD sans condition ou d'un trigger INSTEAD OF INSERT." -#~ msgid "typmod_in function %s must return type \"integer\"" -#~ msgstr "la fonction typmod_in %s doit renvoyer le type « entier »" +#~ msgid "automatic vacuum of table \"%s.%s.%s\": cannot (re)acquire exclusive lock for truncate scan" +#~ msgstr "vacuum automatique de la table « %s.%s.%s » : ne peut pas acquérir le verrou exclusif pour la tronquer" -#~ msgid "type send function %s must return type \"bytea\"" -#~ msgstr "la fonction send du type %s doit renvoyer le type « bytea »" +#~ msgid "must be superuser to rename text search templates" +#~ msgstr "doit être super-utilisateur pour renommer les modèles de recherche plein texte" -#~ msgid "type output function %s must return type \"cstring\"" -#~ msgstr "le type de sortie de la fonction %s doit être « cstring »" +#~ msgid "must be superuser to rename text search parsers" +#~ msgstr "" +#~ "doit être super-utilisateur pour renommer les analyseurs de recherche plein\n" +#~ "texte" -#~ msgid "changing return type of function %s from \"opaque\" to \"cstring\"" -#~ msgstr "changement du type de retour de la fonction %s d'« opaque » vers « cstring »" +#~ msgid "cannot use window function in trigger WHEN condition" +#~ msgstr "ne peut pas utiliser la fonction window dans la condition WHEN d'un trigger" -#~ msgid "function %s must return type \"trigger\"" -#~ msgstr "la fonction %s doit renvoyer le type « trigger »" +#~ msgid "Use ALTER FOREIGN TABLE instead." +#~ msgstr "Utilisez ALTER FOREIGN TABLE à la place." -#~ msgid "function %s must return type \"language_handler\"" -#~ msgstr "la fonction %s doit renvoyer le type « language_handler »" +#~ msgid "cannot use window function in transform expression" +#~ msgstr "ne peut pas utiliser la fonction window dans l'expression de la transformation" -#~ msgid "could not reposition held cursor" -#~ msgstr "n'a pas pu repositionner le curseur détenu" +#~ msgid "default values on foreign tables are not supported" +#~ msgstr "les valeurs par défaut ne sont pas supportées sur les tables distantes" -#~ msgid "function %s must return type \"fdw_handler\"" -#~ msgstr "la fonction %s doit renvoyer le type « fdw_handler »" +#~ msgid "constraints on foreign tables are not supported" +#~ msgstr "les contraintes sur les tables distantes ne sont pas supportées" -#~ msgid "function \"%s\" must return type \"event_trigger\"" -#~ msgstr "la fonction « %s » doit renvoyer le type « event_trigger »" +#~ msgid "cannot use window function in EXECUTE parameter" +#~ msgstr "ne peut pas utiliser une fonction window dans le paramètre EXECUTE" -#~ msgid "%s is already in schema \"%s\"" -#~ msgstr "%s existe déjà dans le schéma « %s »" +#~ msgid "cannot use aggregate in index predicate" +#~ msgstr "ne peut pas utiliser un agrégat dans un prédicat d'index" -#~ msgid "invalid record length at %X/%X" -#~ msgstr "longueur invalide de l'enregistrement à %X/%X" +#~ msgid "function \"%s\" already exists in schema \"%s\"" +#~ msgstr "la fonction « %s » existe déjà dans le schéma « %s »" -#~ msgid "must be superuser to control recovery" -#~ msgstr "doit être super-utilisateur pour contrôler la restauration" +#~ msgid "Use ALTER AGGREGATE to change owner of aggregate functions." +#~ msgstr "Utiliser ALTER AGGREGATE pour changer le propriétaire des fonctions d'agrégat." -#~ msgid "must be superuser to create a restore point" -#~ msgstr "doit être super-utilisateur pour créer un point de restauration" +#~ msgid "Use ALTER AGGREGATE to rename aggregate functions." +#~ msgstr "Utiliser ALTER AGGREGATE pour renommer les fonctions d'agrégat." -#~ msgid "must be superuser to switch transaction log files" -#~ msgstr "doit être super-utilisateur pour changer de journal de transactions" +#~ msgid "cannot use window function in parameter default value" +#~ msgstr "ne peut pas utiliser la fonction window dans la valeur par défaut d'un paramètre" -#~ msgid "must be superuser or replication role to run a backup" -#~ msgstr "doit être super-utilisateur ou avoir l'attribut de réplication pour exécuter une sauvegarde" +#~ msgid "cannot use aggregate function in parameter default value" +#~ msgstr "" +#~ "ne peut pas utiliser une fonction d'agrégat dans la valeur par défaut d'un\n" +#~ "paramètre" -#~ msgid "ignoring \"%s\" file because no \"%s\" file exists" -#~ msgstr "ignore le fichier « %s » parce que le fichier « %s » n'existe pas" +#~ msgid "cannot use subquery in parameter default value" +#~ msgstr "ne peut pas utiliser une sous-requête dans une valeur par défaut d'un paramètre" -#~ msgid "could not rename file \"%s\" to \"%s\" (initialization of log file): %m" -#~ msgstr "n'a pas pu renommer le fichier « %s » en « %s » (initialisation du journal de transactions) : %m" +#~ msgid "CREATE TABLE AS specifies too many column names" +#~ msgstr "CREATE TABLE AS spécifie trop de noms de colonnes" -#~ msgid "could not link file \"%s\" to \"%s\" (initialization of log file): %m" -#~ msgstr "n'a pas pu lier le fichier « %s » à « %s » (initialisation du journal de transactions) : %m" +#~ msgid "%s already exists in schema \"%s\"" +#~ msgstr "%s existe déjà dans le schéma « %s »" -#~ msgid "could not close two-phase state file \"%s\": %m" +#~ msgid "A function returning ANYRANGE must have at least one ANYRANGE argument." #~ msgstr "" -#~ "n'a pas pu fermer le fichier d'état de la validation en deux phases nommé\n" -#~ "« %s » : %m" +#~ "Une fonction renvoyant ANYRANGE doit avoir au moins un argument du type\n" +#~ "ANYRANGE." -#~ msgid "could not fsync two-phase state file \"%s\": %m" -#~ msgstr "" -#~ "n'a pas pu synchroniser sur disque (fsync) le fichier d'état de la\n" -#~ "validation en deux phases nommé « %s » : %m" +#~ msgid "cannot use window function in check constraint" +#~ msgstr "ne peut pas utiliser une fonction window dans une contrainte de vérification" -#~ msgid "two-phase state file for transaction %u is corrupt" -#~ msgstr "" -#~ "le fichier d'état de la validation en deux phases est corrompu pour la\n" -#~ "transaction %u" +#~ msgid "cannot use window function in default expression" +#~ msgstr "ne peut pas utiliser une fonction window dans une expression par défaut" -#~ msgid "could not seek in two-phase state file: %m" -#~ msgstr "" -#~ "n'a pas pu se déplacer dans le fichier de statut de la validation en deux\n" -#~ "phases : %m" +#~ msgid "cannot use aggregate function in default expression" +#~ msgstr "ne peut pas utiliser une fonction d'agrégat dans une expression par défaut" -#~ msgid "could not create two-phase state file \"%s\": %m" -#~ msgstr "" -#~ "n'a pas pu créer le fichier de statut de la validation en deux phases nommé\n" -#~ "« %s » : %m" +#~ msgid "cannot use subquery in default expression" +#~ msgstr "ne peut pas utiliser une sous-requête dans l'expression par défaut" -#~ msgid "Causes subtables to be included by default in various commands." -#~ msgstr "" -#~ "Fait que les sous-tables soient incluses par défaut dans les différentes\n" -#~ "commandes." +#~ msgid "uncataloged table %s" +#~ msgstr "table %s sans catalogue" -#~ msgid "function %u has too many arguments (%d, maximum is %d)" -#~ msgstr "la fonction %u a trop d'arguments (%d, le maximum étant %d)" +#~ msgid "xrecoff \"%X\" is out of valid range, 0..%X" +#~ msgstr "xrecoff « %X » en dehors des limites valides, 0..%X" -#~ msgid "invalid input syntax for uuid: \"%s\"" -#~ msgstr "syntaxe invalide en entrée pour l'uuid : « %s »" +#~ msgid "Incorrect XLOG_BLCKSZ in page header." +#~ msgstr "XLOG_BLCKSZ incorrect dans l'en-tête de page." -#~ msgid "invalid input syntax for type txid_snapshot: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type txid_snapshot : « %s »" +#~ msgid "Incorrect XLOG_SEG_SIZE in page header." +#~ msgstr "XLOG_SEG_SIZE incorrecte dans l'en-tête de page." -#~ msgid "invalid input syntax for type tid: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type tid : « %s »" +#~ msgid "invalid contrecord length %u in log file %u, segment %u, offset %u" +#~ msgstr "" +#~ "longueur invalide du « contrecord » %u dans le journal de tranasctions %u,\n" +#~ "segment %u, décalage %u" -#~ msgid "cannot display a value of type anynonarray" -#~ msgstr "ne peut pas afficher une valeur de type anynonarray" +#~ msgid "there is no contrecord flag in log file %u, segment %u, offset %u" +#~ msgstr "" +#~ "il n'y a pas de drapeaux « contrecord » dans le journal de transactions %u,\n" +#~ "segment %u, décalage %u" -#~ msgid "cannot accept a value of type anynonarray" -#~ msgstr "ne peut pas accepter une valeur de type anynonarray" +#~ msgid "could not open file \"%s\" (log file %u, segment %u): %m" +#~ msgstr "n'a pas pu ouvrir le fichier « %s » (journal de transactions %u, segment %u) : %m" -#~ msgid "cannot display a value of type anyelement" -#~ msgstr "ne peut pas afficher une valeur de type anyelement" +#~ msgid "unlogged GiST indexes are not supported" +#~ msgstr "les index GiST non tracés ne sont pas supportés" -#~ msgid "cannot accept a value of type anyelement" -#~ msgstr "ne peut pas accepter une valeur de type anyelement" +#~ msgid "could not change directory to \"%s\"" +#~ msgstr "n'a pas pu accéder au répertoire « %s »" -#~ msgid "cannot display a value of type opaque" -#~ msgstr "ne peut pas afficher une valeur de type opaque" +#~ msgid "Perhaps out of disk space?" +#~ msgstr "Peut-être manquez-vous de place disque ?" -#~ msgid "cannot accept a value of type opaque" -#~ msgstr "ne peut pas accepter une valeur de type opaque" +#~ msgid "time zone offset %d is not a multiple of 900 sec (15 min) in time zone file \"%s\", line %d" +#~ msgstr "" +#~ "le décalage %d du fuseau horaire n'est pas un multiples de 900 secondes\n" +#~ "(15 minutes) dans le fichier des fuseaux horaires « %s », ligne %d" -#~ msgid "cannot display a value of type internal" -#~ msgstr "ne peut pas afficher une valeur de type internal" +#~ msgid "Sets the name of the Kerberos service." +#~ msgstr "Initialise le nom du service Kerberos." -#~ msgid "cannot accept a value of type internal" -#~ msgstr "ne peut pas accepter une valeur de type internal" +#~ msgid "No description available." +#~ msgstr "Aucune description disponible." -#~ msgid "cannot display a value of type tsm_handler" -#~ msgstr "ne peut pas afficher une valeur de type tsm_handler" +#~ msgid "cannot call json_populate_recordset on a nested object" +#~ msgstr "ne peut pas appeler json_populate_recordset sur un objet imbriqué" -#~ msgid "cannot accept a value of type tsm_handler" -#~ msgstr "ne peut pas accepter une valeur de type tsm_handler" +#~ msgid "cannot call json_populate_recordset on a scalar" +#~ msgstr "ne peut pas appeler json_populate_recordset sur un scalaire" -#~ msgid "cannot display a value of type index_am_handler" -#~ msgstr "ne peut pas afficher une valeur de type index_am_handler" +#~ msgid "cannot call json_populate_recordset with nested arrays" +#~ msgstr "ne peut pas appeler json_populate_recordset avec des tableaux imbriqués" -#~ msgid "cannot accept a value of type index_am_handler" -#~ msgstr "ne peut pas accepter une valeur de type index_am_handler" +#~ msgid "must call json_populate_recordset on an array of objects" +#~ msgstr "doit appeler json_populate_recordset sur un tableau d'objets" -#~ msgid "cannot display a value of type fdw_handler" -#~ msgstr "ne peut pas afficher une valeur de type fdw_handler" +#~ msgid "cannot call json_populate_recordset with nested objects" +#~ msgstr "ne peut pas appeler json_populate_recordset sur des objets imbriqués" -#~ msgid "cannot accept a value of type fdw_handler" -#~ msgstr "ne peut pas accepter une valeur de type fdw_handler" +#~ msgid "cannot call json_populate_recordset on an object" +#~ msgstr "ne peut pas appeler json_populate_recordset sur un objet" -#~ msgid "cannot display a value of type language_handler" -#~ msgstr "ne peut pas afficher une valeur de type language_handler" +#~ msgid "first argument of json_populate_recordset must be a row type" +#~ msgstr "le premier argument de json_populate_recordset doit être un type ROW" -#~ msgid "cannot accept a value of type language_handler" -#~ msgstr "ne peut pas accepter une valeur de type language_handler" +#~ msgid "first argument of json_populate_record must be a row type" +#~ msgstr "le premier argument de json_populate_record doit être un type ROW" -#~ msgid "cannot display a value of type event_trigger" -#~ msgstr "ne peut pas afficher une valeur de type event_trigger" +#~ msgid "cannot call json_array_elements on a scalar" +#~ msgstr "ne peut pas appeler json_array_elements sur un scalaire" -#~ msgid "cannot accept a value of type event_trigger" -#~ msgstr "ne peut pas accepter une valeur de type event_trigger" +#~ msgid "cannot call json_array_elements on a non-array" +#~ msgstr "ne peut pas appeler json_array_elements sur un objet qui n'est pas un tableau" -#~ msgid "cannot display a value of type trigger" -#~ msgstr "ne peut pas afficher une valeur de type trigger" +#~ msgid "cannot extract field from a non-object" +#~ msgstr "ne peut pas extraire le chemin à partir d'un non-objet" -#~ msgid "cannot accept a value of type trigger" -#~ msgstr "ne peut pas accepter une valeur de type trigger" +#~ msgid "cannot extract array element from a non-array" +#~ msgstr "ne peut pas extraire un élément du tableau à partir d'un objet qui n'est pas un tableau" -#~ msgid "cannot accept a value of type anyrange" -#~ msgstr "ne peut pas accepter une valeur de type anyrange" +#~ msgid "cannot call json_object_keys on a scalar" +#~ msgstr "ne peut pas appeler json_object_keys sur un scalaire" -#~ msgid "cannot accept a value of type anyenum" -#~ msgstr "ne peut pas accepter une valeur de type anyenum" +#~ msgid "cannot call json_object_keys on an array" +#~ msgstr "ne peut pas appeler json_object_keys sur un tableau" -#~ msgid "cannot accept a value of type anyarray" -#~ msgstr "ne peut pas accepter une valeur de type anyarray" +#~ msgid "missing assignment operator" +#~ msgstr "opérateur d'affectation manquant" -#~ msgid "cannot accept a value of type any" -#~ msgstr "ne peut pas accepter une valeur de type any" +#~ msgid "wrong affix file format for flag" +#~ msgstr "mauvais format de fichier affixe pour le drapeau" -#~ msgid "invalid input syntax for type pg_lsn: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type pg_lsn : « %s »" +#~ msgid "Views that return the same column more than once are not automatically updatable." +#~ msgstr "Les vues qui renvoient la même colonne plus d'une fois ne sont pas automatiquement disponibles en écriture." -#~ msgid "nondefault collations are not supported on this platform" -#~ msgstr "les collationnements autres que par défaut ne sont pas supportés sur cette plateforme" +#~ msgid "Security-barrier views are not automatically updatable." +#~ msgstr "Les vues avec barrière de sécurité ne sont pas automatiquement disponibles en écriture." -#~ msgid "invalid input syntax for type oid: \"%s\"" -#~ msgstr "syntaxe invalide en entrée pour le type oid : « %s »" +#~ msgid "Expected 1 tuple with 3 fields, got %d tuples with %d fields." +#~ msgstr "Attendait 1 ligne avec 3 champs, a obtenu %d lignes avec %d champs." -#~ msgid "value \"%s\" is out of range for type smallint" -#~ msgstr "la valeur « %s » est en dehors des limites du type smallint" +#~ msgid "%s: could not determine user name (GetUserName failed)\n" +#~ msgstr "%s : n'a pas pu déterminer le nom de l'utilisateur (GetUserName a échoué)\n" -#~ msgid "value \"%s\" is out of range for type integer" -#~ msgstr "la valeur « %s » est en dehors des limites du type integer" +#~ msgid "%s: invalid effective UID: %d\n" +#~ msgstr "%s : UID effectif invalide : %d\n" -#~ msgid "invalid input syntax for type double precision: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type double precision : « %s »" +#~ msgid "krb5 authentication is not supported on local sockets" +#~ msgstr "" +#~ "l'authentification krb5 n'est pas supportée sur les connexions locales par\n" +#~ "socket" -#~ msgid "invalid input syntax for type numeric: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type numeric : « %s »" +#~ msgid "SSL renegotiation failure" +#~ msgstr "échec lors de la re-négotiation SSL" -#~ msgid "invalid input syntax for type tinterval: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type tinterval : « %s »" +#~ msgid "local user with ID %d does not exist" +#~ msgstr "l'utilisateur local dont l'identifiant est %d n'existe pas" -#~ msgid "invalid input syntax for type macaddr: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type macaddr : « %s »" +#~ msgid "Kerberos unparse_name returned error %d" +#~ msgstr "unparse_name de Kerberos a renvoyé l'erreur %d" -#~ msgid "argument %d: could not determine data type" -#~ msgstr "argument %d : n'a pas pu déterminer le type de données" +#~ msgid "Kerberos recvauth returned error %d" +#~ msgstr "recvauth de Kerberos a renvoyé l'erreur %d" -#~ msgid "could not determine data type for argument 2" -#~ msgstr "n'a pas pu déterminer le type de données pour l'argument 2" +#~ msgid "Kerberos sname_to_principal(\"%s\", \"%s\") returned error %d" +#~ msgstr "sname_to_principal(« %s », « %s ») de Kerberos a renvoyé l'erreur %d" -#~ msgid "could not determine data type for argument 1" -#~ msgstr "n'a pas pu déterminer le type de données pour l'argument 1" +#~ msgid "Kerberos keytab resolving returned error %d" +#~ msgstr "la résolution keytab de Kerberos a renvoyé l'erreur %d" -#~ msgid "value \"%s\" is out of range for type bigint" -#~ msgstr "la valeur « %s » est en dehors des limites du type bigint" +#~ msgid "Kerberos initialization returned error %d" +#~ msgstr "l'initialisation de Kerberos a retourné l'erreur %d" -#~ msgid "\"TZ\"/\"tz\"/\"OF\" format patterns are not supported in to_date" -#~ msgstr "les motifs de format « TZ »/« tz »/« OF » ne sont pas supportés dans to_date" +#~ msgid "Kerberos 5 authentication failed for user \"%s\"" +#~ msgstr "authentification Kerberos 5 échouée pour l'utilisateur « %s »" -#~ msgid "invalid input syntax for type real: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type real : « %s »" +#~ msgid "trigger \"%s\" for table \"%s\" does not exist, skipping" +#~ msgstr "le trigger « %s » pour la table « %s » n'existe pas, poursuite du traitement" -#~ msgid "invalid input syntax for type bytea" -#~ msgstr "syntaxe en entrée invalide pour le type bytea" +#~ msgid "invalid input syntax for transaction log location: \"%s\"" +#~ msgstr "syntaxe invalide en entrée pour l'emplacement du journal de transactions : « %s »" -#~ msgid "invalid input syntax for type money: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type money : « %s »" +#~ msgid "could not parse transaction log location \"%s\"" +#~ msgstr "n'a pas pu analyser l'emplacement du journal des transactions « %s »" -#~ msgid "invalid input syntax for type boolean: \"%s\"" -#~ msgstr "syntaxe en entrée invalide pour le type booléen : « %s »" +#~ msgid "%s \"%s\": return code %d" +#~ msgstr "%s « %s » : code de retour %d" -#~ msgid "not enough shared memory for elements of data structure \"%s\" (%zu bytes requested)" -#~ msgstr "" -#~ "pas assez de mémoire partagée pour les éléments de la structure de données\n" -#~ "« %s » (%zu octets demandés)" +#~ msgid "assertion checking is not supported by this build" +#~ msgstr "la vérification de l'assertion n'a pas été intégrée lors de la compilation" -#~ msgid "Specify a relation name as well as a rule name." -#~ msgstr "Spécifier un nom de relation ainsi qu'un nom de règle." +#~ msgid "Set the amount of traffic to send and receive before renegotiating the encryption keys." +#~ msgstr "" +#~ "Configure la quantité de trafic à envoyer et recevoir avant la renégotiation\n" +#~ "des clés d'enchiffrement." -#~ msgid "there are multiple rules named \"%s\"" -#~ msgstr "il existe de nombreuses règles nommées « %s »" +#~ msgid "Sets the maximum distance in log segments between automatic WAL checkpoints." +#~ msgstr "" +#~ "Initialise la distance maximale dans les journaux de transaction entre chaque\n" +#~ "point de vérification (checkpoints) des journaux." -#~ msgid "rule \"%s\" does not exist" -#~ msgstr "la règle « %s » n'existe pas" +#~ msgid "It's just here so that we won't choke on SET AUTOCOMMIT TO ON from 7.3-vintage clients." +#~ msgstr "" +#~ "C'est ici uniquement pour ne pas avoir de problèmes avec le SET AUTOCOMMIT\n" +#~ "TO ON des clients 7.3." -#~ msgid "%u transaction needs to finish." -#~ msgid_plural "%u transactions need to finish." -#~ msgstr[0] "La transaction %u doit se terminer." -#~ msgstr[1] "Les transactions %u doivent se terminer." +#~ msgid "This parameter doesn't do anything." +#~ msgstr "Ce paramètre ne fait rien." -#~ msgid "Transaction ID %u finished; no more running transactions." -#~ msgstr "Identifiant de transaction %u terminé ; plus de transactions en cours." +#~ msgid "This is a debugging aid." +#~ msgstr "C'est une aide de débogage." -#~ msgid "select() failed: %m" -#~ msgstr "échec de select() : %m" +#~ msgid "Turns on various assertion checks." +#~ msgstr "Active les différentes vérifications des assertions." -#~ msgid "invalid socket: %s" -#~ msgstr "socket invalide : %s" - -#~ msgid "syntax error: unexpected character \"%s\"" -#~ msgstr "erreur de syntaxe : caractère « %s » inattendu" - -#~ msgid "archived transaction log file \"%s\"" -#~ msgstr "journal des transactions archivé « %s »" - -#~ msgid "transaction log switch forced (archive_timeout=%d)" -#~ msgstr "changement forcé du journal de transaction (archive_timeout=%d)" +#~ msgid "cannot accept a value of type pg_node_tree" +#~ msgstr "ne peut pas accepter une valeur de type pg_node_tree" -#~ msgid "autovacuum: found orphan temp table \"%s\".\"%s\" in database \"%s\"" +#~ msgid "must be superuser or have the same role to terminate other server processes" #~ msgstr "" -#~ "autovacuum : a trouvé la table temporaire orpheline « %s.%s » dans la base de\n" -#~ "données « %s »" - -#~ msgid "transform expression must not return a set" -#~ msgstr "l'expression de transformation ne doit pas renvoyer un ensemble" - -#~ msgid "index expression cannot return a set" -#~ msgstr "l'expression de l'index ne peut pas renvoyer un ensemble" +#~ "doit être super-utilisateur ou avoir le même rôle pour fermer les connexions\n" +#~ "exécutées dans les autres processus serveur" -#~ msgid "argument declared \"anyrange\" is not consistent with argument declared \"anyelement\"" +#~ msgid "must be superuser or have the same role to cancel queries running in other server processes" #~ msgstr "" -#~ "l'argument déclaré « anyrange » n'est pas cohérent avec l'argument déclaré\n" -#~ "« anyelement »" - -#~ msgid "argument of %s must be type boolean, not type %s" -#~ msgstr "l'argument de %s doit être de type booléen, et non du type %s" - -#~ msgid "DEFAULT can only appear in a VALUES list within INSERT" -#~ msgstr "DEFAULT peut seulement apparaître dans la liste VALUES comprise dans un INSERT" +#~ "doit être super-utilisateur ou avoir le même rôle pour annuler des requêtes\n" +#~ "exécutées dans les autres processus serveur" -#~ msgid "WHERE CURRENT OF is not supported on a view with grouping or aggregation" -#~ msgstr "WHERE CURRENT OF n'est pas supporté pour une vue avec regroupement ou agrégat" +#~ msgid "invalid symbol" +#~ msgstr "symbole invalide" -#~ msgid "WHERE CURRENT OF is not supported on a view with more than one underlying relation" -#~ msgstr "WHERE CURRENT OF n'est pas supporté pour une vue avec plus d'une table sous-jacente" +#~ msgid "unexpected \"=\"" +#~ msgstr "« = » inattendu" -#~ msgid "WHERE CURRENT OF is not supported on a view with no underlying relation" -#~ msgstr "WHERE CURRENT OF n'est pas supporté pour une vue sans table sous-jacente" +#~ msgid "neither input type is an array" +#~ msgstr "aucun type de données n'est un tableau" -#~ msgid "could not bind %s socket: %m" -#~ msgstr "n'a pas pu se lier à la socket %s : %m" +#~ msgid "could not determine input data types" +#~ msgstr "n'a pas pu déterminer les types de données en entrée" -#~ msgid "could not create %s socket: %m" -#~ msgstr "n'a pas pu créer le socket %s : %m" +#~ msgid "archive member \"%s\" too large for tar format" +#~ msgstr "membre « %s » de l'archive trop volumineux pour le format tar" -#~ msgid "hostssl requires SSL to be turned on" -#~ msgstr "hostssl requiert que SSL soit activé" +#~ msgid "postmaster became multithreaded" +#~ msgstr "le postmaster est devenu multithreadé" -#~ msgid "NULLIF does not support set arguments" -#~ msgstr "NULLIF ne supporte pas les arguments d'ensemble" +#~ msgid "invalid value for parameter \"replication\"" +#~ msgstr "valeur invalide pour le paramètre « replication »" -#~ msgid "op ANY/ALL (array) does not support set arguments" +#~ msgid "WAL archival (archive_mode=on) requires wal_level \"archive\", \"hot_standby\", or \"logical\"" #~ msgstr "" -#~ "l'opérateur ANY/ALL (pour les types array) ne supporte pas les arguments\n" -#~ "d'ensemble" - -#~ msgid "IS DISTINCT FROM does not support set arguments" -#~ msgstr "IS DISTINCT FROM ne supporte pas les arguments d'ensemble" +#~ "l'archivage des journaux de transactions (archive_mode=on) nécessite que\n" +#~ "le paramètre wal_level soit initialisé avec « archive », « hot_standby » ou « logical »" -#~ msgid "functions and operators can take at most one set argument" -#~ msgstr "les fonctions et opérateurs peuvent prendre au plus un argument d'ensemble" +#~ msgid "Consider increasing the configuration parameter \"checkpoint_segments\"." +#~ msgstr "Considèrez l'augmentation du paramètre « checkpoint_segments »." -#~ msgid "changing return type of function %s from \"opaque\" to \"trigger\"" -#~ msgstr "changement du type de retour de la fonction %s de « opaque » vers « trigger »" +#~ msgid "subquery must return a column" +#~ msgstr "la sous-requête doit renvoyer une colonne" -#~ msgid "changing return type of function %s from \"opaque\" to \"language_handler\"" +#~ msgid " -A 1|0 enable/disable run-time assert checking\n" #~ msgstr "" -#~ "changement du type du code retour de la fonction %s d'« opaque » à\n" -#~ "« language_handler »" +#~ " -A 1|0 active/désactive la vérification des limites (assert) à\n" +#~ " l'exécution\n" -#~ msgid "hash indexes are not WAL-logged and their use is discouraged" -#~ msgstr "les index hash ne sont pas journalisés, leur utilisation est donc déconseillée" +#~ msgid "%s: setsysinfo failed: %s\n" +#~ msgstr "%s : setsysinfo a échoué : %s\n" -#~ msgid "event trigger name cannot be qualified" -#~ msgstr "le nom du trigger sur événement ne peut pas être qualifié" +#~ msgid "could not set socket to blocking mode: %m" +#~ msgstr "n'a pas pu activer le mode bloquant pour la socket : %m" -#~ msgid "server name cannot be qualified" -#~ msgstr "le nom du serveur ne peut pas être qualifié" +#~ msgid "SSL failed to renegotiate connection before limit expired" +#~ msgstr "SSL a échoué à renégotier la connexion avant l'expiration du délai" -#~ msgid "foreign-data wrapper name cannot be qualified" -#~ msgstr "le nom du wrapper de données distantes ne peut pas être qualifié" +#~ msgid "could not complete SSL handshake on renegotiation, too many failures" +#~ msgstr "n'a pas pu terminer la poignée de main de renégotiation, trop d'échecs" -#~ msgid "language name cannot be qualified" -#~ msgstr "le nom du langage ne peut pas être qualifié" +#~ msgid "SSL handshake failure on renegotiation, retrying" +#~ msgstr "échec du handshake SSL lors de la renégotiation, nouvelle tentative" -#~ msgid "schema name cannot be qualified" -#~ msgstr "le nom du schéma ne peut pas être qualifié" +#~ msgid "SSL failure during renegotiation start" +#~ msgstr "échec SSL au début de la re-négotiation" -#~ msgid "role name cannot be qualified" -#~ msgstr "le nom du rôle ne peut pas être qualifié" +#~ msgid "received password packet" +#~ msgstr "paquet du mot de passe reçu" -#~ msgid "tablespace name cannot be qualified" -#~ msgstr "le nom du tablespace ne peut pas être qualifié" +#~ msgid "interval precision specified twice" +#~ msgstr "précision d'intervalle spécifiée deux fois" -#~ msgid "extension name cannot be qualified" -#~ msgstr "le nom de l'extension ne peut pas être qualifié" +#~ 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 versions de lignes mortes ne peuvent pas encore être supprimées.\n" +#~ "Il y avait %.0f pointeurs d'éléments inutilisés.\n" +#~ "%u pages sont entièrement vides.\n" +#~ "%s." -#~ msgid "database name cannot be qualified" -#~ msgstr "le nom de la base de donnée ne peut être qualifié" +#~ 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 automatique de la table « %s.%s.%s » : parcours d'index : %d\n" +#~ "pages : %d supprimées, %d restantes\n" +#~ "lignes : %.0f supprimées, %.0f restantes, %.0f sont mortes mais non supprimables\n" +#~ "utilisation des tampons : %d lus dans le cache, %d lus hors du cache, %d modifiés\n" +#~ "taux moyen de lecture : %.3f Mo/s, taux moyen d'écriture : %.3f Mo/s\n" +#~ "utilisation système : %s" -#~ msgid "access method name cannot be qualified" -#~ msgstr "le nom de la méthode d'accès ne peut pas être qualifiée" +#~ msgid "Specify a USING expression to perform the conversion." +#~ msgstr "Donnez une expression USING pour réaliser la conversion." -#~ msgid "default expression must not return a set" -#~ msgstr "l'expression par défaut ne doit pas renvoyer un ensemble" +#~ msgid "\"%s\" is not a table, materialized view, composite type, or foreign table" +#~ msgstr "« %s » n'est ni une table, ni une vue matérialisée, ni un type composite, ni une table distante" -#~ msgid "Proceeding with relation creation anyway." -#~ msgstr "Poursuit malgré tout la création de la relation." +#~ msgid "This name may be disallowed altogether in future versions of PostgreSQL." +#~ msgstr "Ce nom pourrait être interdit dans les prochaines versions de PostgreSQL." -#~ msgid "column \"%s\" has type \"unknown\"" -#~ msgstr "la colonne « %s » est de type « unknown »" +#~ msgid "=> is deprecated as an operator name" +#~ msgstr "=> est un nom d'opérateur obsolète" -#~ msgid "invalid privilege type USAGE for table" -#~ msgstr "droit USAGE invalide pour la table" +#~ msgid "WAL file is from different database system: Incorrect XLOG_BLCKSZ in page header." +#~ msgstr "" +#~ "le journal de transactions provient d'un système de bases de données différent :\n" +#~ "XLOG_BLCKSZ incorrect dans l'en-tête de page." -#~ msgid "The database cluster was initialized with HAVE_INT64_TIMESTAMP but the server was compiled without HAVE_INT64_TIMESTAMP." +#~ msgid "WAL file is from different database system: Incorrect XLOG_SEG_SIZE in page header." #~ msgstr "" -#~ "Le cluster de bases de données a été initialisé avec HAVE_INT64_TIMESTAMP\n" -#~ "alors que le serveur a été compilé sans." +#~ "le journal de transactions provient d'un système de bases de données différent :\n" +#~ "XLOG_SEG_SIZE incorrect dans l'en-tête de page." -#~ msgid "The database cluster was initialized without HAVE_INT64_TIMESTAMP but the server was compiled with HAVE_INT64_TIMESTAMP." -#~ msgstr "Le cluster de bases de données a été initialisé sans HAVE_INT64_TIMESTAMPalors que le serveur a été compilé avec." +#~ msgid "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s." +#~ msgstr "" +#~ "L'identifiant du journal de transactions du système de base de données est %s,\n" +#~ "l'identifiant pg_control du système de base de données dans pg_control est %s." -#~ msgid "removing transaction log backup history file \"%s\"" -#~ msgstr "suppression du fichier historique des journaux de transaction « %s »" +#~ msgid "incorrect total length in record at %X/%X" +#~ msgstr "longueur totale incorrecte à l'enregistrement %X/%X" -#~ msgid "could not remove old transaction log file \"%s\": %m" -#~ msgstr "n'a pas pu supprimer l'ancien journal de transaction « %s » : %m" +#~ msgid "incorrect hole size in record at %X/%X" +#~ msgstr "taille du trou incorrect à l'enregistrement %X/%X" -#~ msgid "could not open transaction log file \"%s\": %m" -#~ msgstr "n'a pas pu ouvrir le journal des transactions « %s » : %m" +#~ msgid "invalid backup block size in record at %X/%X" +#~ msgstr "taille du bloc de sauvegarde invalide dans l'enregistrement à %X/%X" -#~ msgid "Expected a transaction log switchpoint location." -#~ msgstr "Attendait un emplacement de bascule dans le journal de transactions." +#~ msgid "record with zero length at %X/%X" +#~ msgstr "enregistrement de longueur nulle à %X/%X" -#~ msgid "spgist operator class \"%s\" is missing operator(s)" -#~ msgstr "il manque des opérateurs pour la classe d'opérateur spgist « %s »" +#~ msgid "invalid xlog switch record at %X/%X" +#~ msgstr "enregistrement de basculement du journal de transaction invalide à %X/%X" -#~ msgid "spgist operator family \"%s\" is missing operator(s) for types %s and %s" +#~ msgid "oldest unfrozen transaction ID: %u, in database %u" #~ msgstr "" -#~ "la famille d'opérateur spgist « %s » nécessite des opérateurs supplémentaires\n" -#~ "pour les types %s et %s" +#~ "identifiant de transaction non gelé le plus ancien : %u, dans la base de\n" +#~ "données %u" -#~ msgid "spgist operator family \"%s\" contains operator %s with wrong signature" -#~ msgstr "la famille d'opérateur spgist « %s » contient l'opérateur %s avec une mauvaise signature" +#~ msgid "next MultiXactId: %u; next MultiXactOffset: %u" +#~ msgstr "prochain MultiXactId : %u ; prochain MultiXactOffset : %u" -#~ msgid "spgist operator family \"%s\" contains invalid ORDER BY specification for operator %s" -#~ msgstr "" -#~ "la famille d'opérateur spgist « %s » contient une spécification\n" -#~ "ORDER BY invalide pour l'opérateur %s" +#~ msgid "next transaction ID: %u/%u; next OID: %u" +#~ msgstr "prochain identifiant de transaction : %u/%u ; prochain OID : %u" -#~ msgid "spgist operator family \"%s\" contains operator %s with invalid strategy number %d" -#~ msgstr "" -#~ "la famille d'opérateur spgist « %s » contient l'opérateur %s\n" -#~ "avec le numéro de stratégie invalide %d" +#~ msgid "redo record is at %X/%X; shutdown %s" +#~ msgstr "l'enregistrement à ré-exécuter se trouve à %X/%X ; arrêt %s" -#~ msgid "spgist operator family \"%s\" contains function %s with wrong signature for support number %d" -#~ msgstr "" -#~ "la famille d'opérateur spgist « %s » contient la fonction %s\n" -#~ "avec une mauvaise signature pour le numéro de support %d" +#~ msgid "invalid value for recovery parameter \"recovery_target\"" +#~ msgstr "valeur invalide pour le paramètre de restauration « recovery_target »" -#~ msgid "spgist operator family \"%s\" contains function %s with invalid support number %d" -#~ msgstr "" -#~ "la famille d'opérateur spgist « %s » contient la fonction %s\n" -#~ "avec le numéro de support %d invalide" +#~ msgid "unrecognized win32 error code: %lu" +#~ msgstr "code d'erreur win32 non reconnu : %lu" -#~ msgid "spgist operator family \"%s\" contains support procedure %s with cross-type registration" -#~ msgstr "" -#~ "la famille d'opérateur spgist « %s » contient la procédure de support\n" -#~ "%s avec un enregistrement inter-type" +#~ msgid "mapped win32 error code %lu to %d" +#~ msgstr "correspondance du code d'erreur win32 %lu en %d" -#~ msgid "btree operator family \"%s\" is missing cross-type operator(s)" -#~ msgstr "il manque des opérateurs inter-type pour la famille d'opérateur btree « %s »" +#~ msgid "too few arguments for format" +#~ msgstr "trop peu d'arguments pour le format" -#~ msgid "btree operator class \"%s\" is missing operator(s)" -#~ msgstr "il manque des opérateurs pour la classe d'opérateur btree « %s »" +#~ msgid "invalid length in external \"numeric\" value" +#~ msgstr "longueur invalide dans la valeur externe « numeric »" -#~ msgid "btree operator family \"%s\" is missing operator(s) for types %s and %s" -#~ msgstr "" -#~ "la famille d'opérateur btree « %s » nécessite des opérateurs supplémentaires\n" -#~ "pour les types %s et %s" +#~ msgid "time zone abbreviation \"%s\" is not used in time zone \"%s\"" +#~ msgstr "l'abréviation « %s » du fuseau horaire n'est pas utilisée dans le fuseau horaire « %s »" -#~ msgid "btree operator family \"%s\" contains operator %s with wrong signature" -#~ msgstr "la famille d'opérateur btree « %s » contient l'opérateur %s avec une mauvaise signature" +#~ msgid "role \"%s\" is reserved" +#~ msgstr "le rôle « %s » est réservé" -#~ msgid "btree operator family \"%s\" contains invalid ORDER BY specification for operator %s" -#~ msgstr "" -#~ "la famille d'opérateur btree « %s » contient une spécification\n" -#~ "ORDER BY invalide pour l'opérateur %s" +#~ msgid "system columns cannot be used in an ON CONFLICT clause" +#~ msgstr "les colonnes systèmes ne peuvent pas être utilisées dans une clause ON CONFLICT" -#~ msgid "btree operator family \"%s\" contains operator %s with invalid strategy number %d" +#~ msgid "function returning set of rows cannot return null value" #~ msgstr "" -#~ "la famille d'opérateur btree « %s » contient l'opérateur %s\n" -#~ "avec le numéro de stratégie invalide %d" +#~ "la fonction renvoyant un ensemble de lignes ne peut pas renvoyer une valeur\n" +#~ "NULL" -#~ msgid "btree operator family \"%s\" contains function %s with wrong signature for support number %d" +#~ msgid "Only superusers can use untrusted languages." #~ msgstr "" -#~ "la famille d'opérateur btree « %s » contient la fonction %s\n" -#~ "avec une mauvaise signature pour le numéro de support %d" +#~ "Seuls les super-utilisateurs peuvent utiliser des langages qui ne sont pas\n" +#~ "de confiance." -#~ msgid "btree operator family \"%s\" contains function %s with invalid support number %d" -#~ msgstr "" -#~ "la famille d'opérateur btree « %s » contient la fonction %s\n" -#~ "avec le numéro de support invalide %d" +#~ msgid "huge TLB pages not supported on this platform" +#~ msgstr "Huge Pages TLB non supporté sur cette plateforme." -#~ msgid "hash operator class \"%s\" is missing operator(s)" -#~ msgstr "il manque des opérateurs pour la classe d'opérateur hash « %s »" +#~ msgid "Lower bound of dimension array must be one." +#~ msgstr "La limite inférieure du tableau doit valoir un." -#~ msgid "hash operator family \"%s\" is missing operator(s) for types %s and %s" -#~ msgstr "" -#~ "la famille d'opérateur hash « %s » nécessite des opérateurs supplémentaires\n" -#~ "pour les types %s et %s" +#~ msgid "wrong range of array subscripts" +#~ msgstr "mauvais échelle des indices du tableau" -#~ msgid "hash operator family \"%s\" contains operator %s with wrong signature" -#~ msgstr "la famille d'opérateur hash « %s » contient l'opérateur %s avec une mauvaise signature" +#~ msgid "aborted" +#~ msgstr "annulé" -#~ msgid "hash operator family \"%s\" contains invalid ORDER BY specification for operator %s" -#~ msgstr "" -#~ "la famille d'opérateur hash « %s » contient la spécification ORDER BY\n" -#~ "non supportée pour l'opérateur %s" +#~ msgid "committed" +#~ msgstr "validé" -#~ msgid "hash operator family \"%s\" contains operator %s with invalid strategy number %d" -#~ msgstr "" -#~ "la famille d'opérateur hash « %s » contient l'opérateur %s avec le numéro\n" -#~ "de stratégie invalide %d" +#~ msgid "in progress" +#~ msgstr "en cours" -#~ msgid "hash operator family \"%s\" contains function %s with invalid support number %d" -#~ msgstr "" -#~ "la famille d'opérateur hash « %s » contient la fonction %s avec\n" -#~ "le numéro de support invalide %d" +#~ msgid "transaction ID " +#~ msgstr "ID de transaction " -#~ msgid "hash operator family \"%s\" contains function %s with wrong signature for support number %d" -#~ msgstr "" -#~ "la famille d'opérateur hash « %s » contient la fonction %s avec une mauvaise\n" -#~ "signature pour le numéro de support %d" +#~ msgid "invalid input syntax for %s: \"%s\"" +#~ msgstr "syntaxe en entrée invalide pour le type %s : « %s »" -#~ msgid "hash operator family \"%s\" contains support procedure %s with cross-type registration" -#~ msgstr "" -#~ "la famille d'opérateur hash « %s » contient la procédure de support\n" -#~ "%s avec un enregistrement inter-type" +#~ msgid "not connected to database" +#~ msgstr "non connecté à une base de données" -#~ msgid "gist operator class \"%s\" is missing support function %d" -#~ msgstr "la famille d'opérateur gist « %s » nécessite la fonction de support %d" +#~ msgid "User \"%s\" has an empty password." +#~ msgstr "L'utilisateur « %s » a un mot de passe vide." -#~ msgid "gist operator family \"%s\" contains operator %s with wrong signature" -#~ msgstr "la famille d'opérateur gist « %s » contient l'opérateur %s avec une mauvaise signature" +#~ msgid "removed subscription for table %s.%s" +#~ msgstr "a supprimé une souscription pour la table %s.%s" -#~ msgid "gist operator family \"%s\" contains operator %s with invalid strategy number %d" -#~ msgstr "" -#~ "la famille d'opérateur gist « %s » contient l'opérateur %s avec le numéro\n" -#~ "de stratégie invalide %d" +#~ msgid "added subscription for table %s.%s" +#~ msgstr "souscription ajoutée pour la table %s.%s" -#~ msgid "gist operator family \"%s\" contains function %s with wrong signature for support number %d" -#~ msgstr "" -#~ "la famille d'opérateur gist « %s » contient la fonction %s avec une mauvaise\n" -#~ "signature pour le numéro de support %d" +#~ msgid "column \"%s\" referenced in statistics does not exist" +#~ msgstr "la colonne « %s » référencée dans les statistiques n'existe pas" -#~ msgid "gist operator family \"%s\" contains function %s with invalid support number %d" -#~ msgstr "" -#~ "la famille d'opérateur gist « %s » contient la fonction %s avec\n" -#~ "le numéro de support invalide %d" +#~ msgid "invalid publish list" +#~ msgstr "liste de publication invalide" -#~ msgid "gist operator family \"%s\" contains support procedure %s with cross-type registration" -#~ msgstr "" -#~ "la famille d'opérateur gist « %s » contient la procédure de support\n" -#~ "%s avec un enregistrement inter-type" +#~ msgid "could not get keyword values for locale \"%s\": %s" +#~ msgstr "n'a pas pu obtenir les valeurs des mots clés pour la locale « %s » : %s" -#~ msgid "brin operator class \"%s\" is missing support function %d" -#~ msgstr "la classe d'opérateur brin « %s » nécessite la fonction de support %d" +#~ msgid "cannot create range partition with empty range" +#~ msgstr "ne peut pas créer une partition par intervalle avec un intervalle vide" -#~ msgid "brin operator family \"%s\" contains operator %s with wrong signature" -#~ msgstr "la famille d'opérateur brin « %s » contient l'opérateur %s avec une mauvaise signature" +#~ msgid "data type \"%s.%s\" required for logical replication does not exist" +#~ msgstr "le type de données « %s/%s » requis par la réplication logique n'existe pas" -#~ msgid "brin operator family \"%s\" contains invalid ORDER BY specification for operator %s" -#~ msgstr "" -#~ "la famille d'opérateur brin « %s » contient une spécification\n" -#~ "ORDER BY invalide pour l'opérateur %s" +#~ msgid "This can be caused by having a publisher with a higher PostgreSQL major version than the subscriber." +#~ msgstr "Ceci peut avoir pour cause un publieur ayant une version majeure de PostgreSQL supérieure à l'abonné" -#~ msgid "brin operator family \"%s\" contains operator %s with invalid strategy number %d" -#~ msgstr "" -#~ "la famille d'opérateur brin « %s » contient l'opérateur %s\n" -#~ "avec le numéro de stratégie %d invalide" +#~ msgid "built-in type %u not found" +#~ msgstr "type interne %u non trouvé" -#~ msgid "brin operator family \"%s\" contains function %s with wrong signature for support number %d" -#~ msgstr "" -#~ "la famille d'opérateur brin « %s » contient la fonction %s\n" -#~ "avec une mauvaise signature pour le numéro de support %d" +#~ msgid "combine function for aggregate %u must be declared as STRICT" +#~ msgstr "la fonction d'unification pour l'aggrégat %u doit être déclarée comme STRICT" -#~ msgid "brin operator family \"%s\" contains function %s with invalid support number %d" -#~ msgstr "" -#~ "la famille d'opérateur brin « %s » contient la fonction %s\n" -#~ "avec le numéro de support %d invalide" +#~ msgid "column \"%s\" appears more than once in partition key" +#~ msgstr "la colonne « %s » apparaît plus d'une fois dans la clé de partitionnement" -#~ msgid "index row size %lu exceeds maximum %lu for index \"%s\"" -#~ msgstr "la taille de la ligne index, %lu, dépasse le maximum, %lu, pour l'index « %s »" +#~ msgid "%s in publication %s" +#~ msgstr "%s dans la publication %s" -#~ msgid "" -#~ "WARNING: Calculated CRC checksum does not match value stored in file.\n" -#~ "Either the file is corrupt, or it has a different layout than this program\n" -#~ "is expecting. The results below are untrustworthy.\n" -#~ "\n" +#~ 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 "" -#~ "ATTENTION : Les sommes de contrôle (CRC) calculées ne correspondent pas aux\n" -#~ "valeurs stockées dans le fichier.\n" -#~ "Soit le fichier est corrompu, soit son organisation diffère de celle\n" -#~ "attendue par le programme.\n" -#~ "Les résultats ci-dessous ne sont pas dignes de confiance.\n" -#~ "\n" - -#~ msgid "invalid number of arguments: object must be matched key value pairs" -#~ msgstr "nombre d'arguments invalide : l'objet doit correspond aux paires clé/valeur" - -#~ msgid "New enum values must be committed before they can be used." -#~ msgstr "Les nouvelles valeurs enum doivent être validées (COMMIT) avant de pouvoir être utilisées." - -#~ msgid "invalid MVNDistinct size %zd (expected at least %zd)" -#~ msgstr "taille MVNDistinct %zd invalide (attendue au moins %zd)" +#~ "Si vous êtes sûr qu'aucun processus serveur n'est toujours en cours\n" +#~ "d'exécution, supprimez le bloc de mémoire partagée\n" +#~ "ou supprimez simplement le fichier « %s »." -#~ msgid "invalid zero-length item array in MVNDistinct" -#~ msgstr "tableau d'élément de longueur zéro invalide dans MVNDistinct" +#~ msgid "view must have at least one column" +#~ msgstr "la vue doit avoir au moins une colonne" -#~ msgid "invalid ndistinct type %d (expected %d)" -#~ msgstr "type ndistinct invalide %d (%d attendu)" +#~ msgid "cannot PREPARE a transaction that has operated on temporary namespace" +#~ msgstr "" +#~ "ne peut pas préparer (PREPARE) une transaction qui a travaillé sur un\n" +#~ "schéma temporaire" -#~ msgid "invalid ndistinct magic %08x (expected %08x)" -#~ msgstr "nombre magique ndistinct invalide %08x (attendu %08x)" +#~ msgid "replication origin %d is already active for PID %d" +#~ msgstr "l'origine de réplication %d est déjà active pour le PID %d" -#~ msgid "invalid zero-length item array in MVDependencies" -#~ msgstr "tableau d'éléments de longueur zéro invalide dans MVDependencies" +#~ msgid "could not write to tuplestore temporary file: %m" +#~ msgstr "n'a pas pu écrire le fichier temporaire tuplestore : %m" -#~ msgid "replication identifier %d is already active for PID %d" -#~ msgstr "l'identificateur de réplication %d est déjà actif pour le PID %d" +#~ 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 "" +#~ "Lorsqu'un mot de passe est spécifié dans CREATE USER ou ALTER USER sans\n" +#~ "indiquer ENCRYPTED ou UNENCRYPTED, ce paramètre détermine si le mot de passe\n" +#~ "doit être chiffré." -#~ msgid "cannot alter type of column referenced in partition key expression" -#~ msgstr "ne peut pas utiliser le type d'une colonne référencée dans l'expression d'une clé de partitionnement" +#~ msgid "Encrypt passwords." +#~ msgstr "Chiffre les mots de passe." -#~ msgid "cannot alter type of column named in partition key" -#~ msgstr "ne peut pas modifier le type d'une colonne nommée dans une clé de partitionnement" +#~ msgid "%s (PID %d) was terminated by signal %d" +#~ msgstr "%s (PID %d) a été arrêté par le signal %d" -#~ msgid "cannot drop column referenced in partition key expression" -#~ msgstr "ne peut pas supprimer une colonne référencée dans l'expression d'une clé de partitionnement" +#~ msgid "archive command was terminated by signal %d" +#~ msgstr "la commande d'archivage a été terminée par le signal %d" -#~ msgid "cannot drop column named in partition key" -#~ msgstr "ne peut pas supprimer une colonne nommée dans une clé de partitionnement" +#~ msgid "could not write to hash-join temporary file: %m" +#~ msgstr "n'a pas pu écrire le fichier temporaire de la jointure hâchée : %m" -#~ msgid "cannot drop temporary schema \"%s\"" -#~ msgstr "ne peut pas supprimer le schéma temporaire « %s »" +#~ msgid "could not write block %ld of temporary file: %m" +#~ msgstr "n'a pas pu écrire le bloc %ld du fichier temporaire : %m" -#~ msgid "invalid concatenation of jsonb objects" -#~ msgstr "concaténation invalide d'objets jsonb" +#~ msgid "leftover placeholder tuple detected in BRIN index \"%s\", deleting" +#~ msgstr "reste d'un emplacement de ligne détecté dans l'index BRIN « %s », suppression" -#~ msgid "unexpected standby message type \"%c\", after receiving CopyDone" -#~ msgstr "type de message standby « %c » inattendu, après avoir reçu CopyDone" +#~ msgid "child process was terminated by signal %s" +#~ msgstr "le processus fils a été terminé par le signal %s" diff -Nru postgresql-10-10.16/src/backend/postmaster/startup.c postgresql-10-10.17/src/backend/postmaster/startup.c --- postgresql-10-10.16/src/backend/postmaster/startup.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/postmaster/startup.c 2021-05-10 20:47:56.000000000 +0000 @@ -54,6 +54,9 @@ static void StartupProcTriggerHandler(SIGNAL_ARGS); static void StartupProcSigHupHandler(SIGNAL_ARGS); +/* Callbacks */ +static void StartupProcExit(int code, Datum arg); + /* -------------------------------- * signal handler routines @@ -165,6 +168,19 @@ } +/* -------------------------------- + * signal handler routines + * -------------------------------- + */ +static void +StartupProcExit(int code, Datum arg) +{ + /* Shutdown the recovery environment */ + if (standbyState != STANDBY_DISABLED) + ShutdownRecoveryTransactionEnvironment(); +} + + /* ---------------------------------- * Startup Process main entry point * ---------------------------------- @@ -172,6 +188,9 @@ void StartupProcessMain(void) { + /* Arrange to clean up at startup process exit */ + on_shmem_exit(StartupProcExit, 0); + /* * Properly accept or ignore signals the postmaster might send us. */ diff -Nru postgresql-10-10.16/src/backend/regex/regc_lex.c postgresql-10-10.17/src/backend/regex/regc_lex.c --- postgresql-10-10.16/src/backend/regex/regc_lex.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/regex/regc_lex.c 2021-05-10 20:47:56.000000000 +0000 @@ -389,7 +389,7 @@ { v->now++; INTOCON(L_BRE); - RET('}'); + RETV('}', 1); } else FAILW(REG_BADBR); diff -Nru postgresql-10-10.16/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c postgresql-10-10.17/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c --- postgresql-10-10.16/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c 2021-05-10 20:47:56.000000000 +0000 @@ -244,9 +244,15 @@ opts = PQconninfoParse(conninfo, &err); if (opts == NULL) + { + /* The error string is malloc'd, so we must free it explicitly */ + char *errcopy = err ? pstrdup(err) : "out of memory"; + + PQfreemem(err); ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("invalid connection string syntax: %s", err))); + errmsg("invalid connection string syntax: %s", errcopy))); + } PQconninfoFree(opts); } diff -Nru postgresql-10-10.16/src/backend/statistics/dependencies.c postgresql-10-10.17/src/backend/statistics/dependencies.c --- postgresql-10-10.16/src/backend/statistics/dependencies.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/statistics/dependencies.c 2021-05-10 20:47:56.000000000 +0000 @@ -642,7 +642,7 @@ Anum_pg_statistic_ext_stxdependencies, &isnull); if (isnull) elog(ERROR, - "requested statistic kind \"%c\" is not yet built for statistics object %u", + "requested statistics kind \"%c\" is not yet built for statistics object %u", STATS_EXT_DEPENDENCIES, mvoid); result = statext_dependencies_deserialize(DatumGetByteaPP(deps)); diff -Nru postgresql-10-10.16/src/backend/statistics/extended_stats.c postgresql-10-10.17/src/backend/statistics/extended_stats.c --- postgresql-10-10.16/src/backend/statistics/extended_stats.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/statistics/extended_stats.c 2021-05-10 20:47:56.000000000 +0000 @@ -44,7 +44,7 @@ char *schema; /* statistics object's schema */ char *name; /* statistics object's name */ Bitmapset *columns; /* attribute numbers covered by the object */ - List *types; /* 'char' list of enabled statistic kinds */ + List *types; /* 'char' list of enabled statistics kinds */ } StatExtEntry; diff -Nru postgresql-10-10.16/src/backend/statistics/mvdistinct.c postgresql-10-10.17/src/backend/statistics/mvdistinct.c --- postgresql-10-10.16/src/backend/statistics/mvdistinct.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/statistics/mvdistinct.c 2021-05-10 20:47:56.000000000 +0000 @@ -139,7 +139,7 @@ Anum_pg_statistic_ext_stxndistinct, &isnull); if (isnull) elog(ERROR, - "requested statistic kind \"%c\" is not yet built for statistics object %u", + "requested statistics kind \"%c\" is not yet built for statistics object %u", STATS_EXT_NDISTINCT, mvoid); result = statext_ndistinct_deserialize(DatumGetByteaPP(ndist)); diff -Nru postgresql-10-10.16/src/backend/storage/ipc/dsm.c postgresql-10-10.17/src/backend/storage/ipc/dsm.c --- postgresql-10-10.16/src/backend/storage/ipc/dsm.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/storage/ipc/dsm.c 2021-05-10 20:47:56.000000000 +0000 @@ -720,8 +720,12 @@ /* * Invoke registered callbacks. Just in case one of those callbacks * throws a further error that brings us back here, pop the callback - * before invoking it, to avoid infinite error recursion. + * before invoking it, to avoid infinite error recursion. Don't allow + * interrupts while running the individual callbacks in non-error code + * paths, to avoid leaving cleanup work unfinished if we're interrupted by + * a statement timeout or similar. */ + HOLD_INTERRUPTS(); while (!slist_is_empty(&seg->on_detach)) { slist_node *node; @@ -737,6 +741,7 @@ function(seg, arg); } + RESUME_INTERRUPTS(); /* * Try to remove the mapping, if one exists. Normally, there will be, but diff -Nru postgresql-10-10.16/src/backend/storage/ipc/standby.c postgresql-10-10.17/src/backend/storage/ipc/standby.c --- postgresql-10-10.16/src/backend/storage/ipc/standby.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/storage/ipc/standby.c 2021-05-10 20:47:56.000000000 +0000 @@ -124,10 +124,25 @@ * * Prepare to switch from hot standby mode to normal operation. Shut down * recovery-time transaction tracking. + * + * This must be called even in shutdown of startup process if transaction + * tracking has been initialized. Otherwise some locks the tracked + * transactions were holding will not be released and and may interfere with + * the processes still running (but will exit soon later) at the exit of + * startup process. */ void ShutdownRecoveryTransactionEnvironment(void) { + /* + * Do nothing if RecoveryLockLists is NULL because which means that + * transaction tracking has not been yet initialized or has been already + * shutdowned. This prevents transaction tracking from being shutdowned + * unexpectedly more than once. + */ + if (RecoveryLockLists == NULL) + return; + /* Mark all tracked in-progress transactions as finished. */ ExpireAllKnownAssignedTransactionIds(); diff -Nru postgresql-10-10.16/src/backend/tcop/fastpath.c postgresql-10-10.17/src/backend/tcop/fastpath.c --- postgresql-10-10.16/src/backend/tcop/fastpath.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/tcop/fastpath.c 2021-05-10 20:47:56.000000000 +0000 @@ -200,7 +200,6 @@ HeapTuple func_htp; Form_pg_proc pp; - Assert(OidIsValid(func_id)); Assert(fip != NULL); /* @@ -214,8 +213,6 @@ MemSet(fip, 0, sizeof(struct fp_info)); fip->funcid = InvalidOid; - fmgr_info(func_id, &fip->flinfo); - func_htp = SearchSysCache1(PROCOID, ObjectIdGetDatum(func_id)); if (!HeapTupleIsValid(func_htp)) ereport(ERROR, @@ -223,6 +220,13 @@ errmsg("function with OID %u does not exist", func_id))); pp = (Form_pg_proc) GETSTRUCT(func_htp); + /* reject pg_proc entries that are unsafe to call via fastpath */ + if (pp->proisagg || pp->proiswindow || pp->proretset) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot call function %s via fastpath interface", + NameStr(pp->proname)))); + /* watch out for catalog entries with more than FUNC_MAX_ARGS args */ if (pp->pronargs > FUNC_MAX_ARGS) elog(ERROR, "function %s has more than %d arguments", @@ -235,6 +239,8 @@ ReleaseSysCache(func_htp); + fmgr_info(func_id, &fip->flinfo); + /* * This must be last! */ diff -Nru postgresql-10-10.16/src/backend/tsearch/spell.c postgresql-10-10.17/src/backend/tsearch/spell.c --- postgresql-10-10.16/src/backend/tsearch/spell.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/tsearch/spell.c 2021-05-10 20:47:56.000000000 +0000 @@ -655,6 +655,17 @@ } /* + * Context reset/delete callback for a regular expression used in an affix + */ +static void +regex_affix_deletion_callback(void *arg) +{ + aff_regex_struct *pregex = (aff_regex_struct *) arg; + + pg_regfree(&(pregex->regex)); +} + +/* * Adds a new affix rule to the Affix field. * * Conf: current dictionary. @@ -716,6 +727,7 @@ int err; pg_wchar *wmask; char *tmask; + aff_regex_struct *pregex; Affix->issimple = 0; Affix->isregis = 0; @@ -729,18 +741,32 @@ wmask = (pg_wchar *) tmpalloc((masklen + 1) * sizeof(pg_wchar)); wmasklen = pg_mb2wchar_with_len(tmask, wmask, masklen); - err = pg_regcomp(&(Affix->reg.regex), wmask, wmasklen, + /* + * The regex engine stores its stuff using malloc not palloc, so we + * must arrange to explicitly clean up the regex when the dictionary's + * context is cleared. That means the regex_t has to stay in a fixed + * location within the context; we can't keep it directly in the AFFIX + * struct, since we may sort and resize the array of AFFIXes. + */ + Affix->reg.pregex = pregex = palloc(sizeof(aff_regex_struct)); + + err = pg_regcomp(&(pregex->regex), wmask, wmasklen, REG_ADVANCED | REG_NOSUB, DEFAULT_COLLATION_OID); if (err) { char errstr[100]; - pg_regerror(err, &(Affix->reg.regex), errstr, sizeof(errstr)); + pg_regerror(err, &(pregex->regex), errstr, sizeof(errstr)); ereport(ERROR, (errcode(ERRCODE_INVALID_REGULAR_EXPRESSION), errmsg("invalid regular expression: %s", errstr))); } + + pregex->mcallback.func = regex_affix_deletion_callback; + pregex->mcallback.arg = (void *) pregex; + MemoryContextRegisterResetCallback(CurrentMemoryContext, + &pregex->mcallback); } Affix->flagflags = flagflags; @@ -2119,7 +2145,6 @@ } else { - int err; pg_wchar *data; size_t data_len; int newword_len; @@ -2129,7 +2154,8 @@ data = (pg_wchar *) palloc((newword_len + 1) * sizeof(pg_wchar)); data_len = pg_mb2wchar_with_len(newword, data, newword_len); - if (!(err = pg_regexec(&(Affix->reg.regex), data, data_len, 0, NULL, 0, NULL, 0))) + if (pg_regexec(&(Affix->reg.pregex->regex), data, data_len, + 0, NULL, 0, NULL, 0) == REG_OKAY) { pfree(data); return newword; diff -Nru postgresql-10-10.16/src/backend/utils/adt/arrayfuncs.c postgresql-10-10.17/src/backend/utils/adt/arrayfuncs.c --- postgresql-10-10.16/src/backend/utils/adt/arrayfuncs.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/utils/adt/arrayfuncs.c 2021-05-10 20:47:56.000000000 +0000 @@ -370,6 +370,8 @@ /* This checks for overflow of the array dimensions */ nitems = ArrayGetNItems(ndim, dim); + ArrayCheckBounds(ndim, dim, lBound); + /* Empty array? */ if (nitems == 0) PG_RETURN_ARRAYTYPE_P(construct_empty_array(element_type)); @@ -1319,24 +1321,11 @@ { dim[i] = pq_getmsgint(buf, 4); lBound[i] = pq_getmsgint(buf, 4); - - /* - * Check overflow of upper bound. (ArrayNItems() below checks that - * dim[i] >= 0) - */ - if (dim[i] != 0) - { - int ub = lBound[i] + dim[i] - 1; - - if (lBound[i] > ub) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("integer out of range"))); - } } /* This checks for overflow of array dimensions */ nitems = ArrayGetNItems(ndim, dim); + ArrayCheckBounds(ndim, dim, lBound); /* * We arrange to look up info about element type, including its receive @@ -2241,7 +2230,7 @@ (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), errmsg("wrong number of array subscripts"))); - if (indx[0] < 0 || indx[0] * elmlen >= arraytyplen) + if (indx[0] < 0 || indx[0] >= arraytyplen / elmlen) ereport(ERROR, (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), errmsg("array subscript out of range"))); @@ -2356,10 +2345,13 @@ } } + /* This checks for overflow of the array dimensions */ + newnitems = ArrayGetNItems(ndim, dim); + ArrayCheckBounds(ndim, dim, lb); + /* * Compute sizes of items and areas to copy */ - newnitems = ArrayGetNItems(ndim, dim); if (newhasnulls) overheadlen = ARR_OVERHEAD_WITHNULLS(ndim, newnitems); else @@ -2614,6 +2606,13 @@ } } + /* Check for overflow of the array dimensions */ + if (dimschanged) + { + (void) ArrayGetNItems(ndim, dim); + ArrayCheckBounds(ndim, dim, lb); + } + /* Now we can calculate linear offset of target item in array */ offset = ArrayGetOffset(nSubscripts, dim, lb, indx); @@ -2932,6 +2931,7 @@ /* Do this mainly to check for overflow */ nitems = ArrayGetNItems(ndim, dim); + ArrayCheckBounds(ndim, dim, lb); /* * Make sure source array has enough entries. Note we ignore the shape of @@ -3377,7 +3377,9 @@ if (ndims == 0) return construct_empty_array(elmtype); + /* This checks for overflow of the array dimensions */ nelems = ArrayGetNItems(ndims, dims); + ArrayCheckBounds(ndims, dims, lbs); /* compute required space */ nbytes = 0; @@ -5370,6 +5372,10 @@ int dataoffset, nbytes; + /* Check for overflow of the array dimensions */ + (void) ArrayGetNItems(astate->ndims, astate->dims); + ArrayCheckBounds(astate->ndims, astate->dims, astate->lbs); + /* Compute required space */ nbytes = astate->nbytes; if (astate->nullbitmap != NULL) @@ -5799,7 +5805,9 @@ lbsv = deflbs; } + /* This checks for overflow of the array dimensions */ nitems = ArrayGetNItems(ndims, dimv); + ArrayCheckBounds(ndims, dimv, lbsv); /* fast track for empty array */ if (nitems <= 0) diff -Nru postgresql-10-10.16/src/backend/utils/adt/array_userfuncs.c postgresql-10-10.17/src/backend/utils/adt/array_userfuncs.c --- postgresql-10-10.16/src/backend/utils/adt/array_userfuncs.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/utils/adt/array_userfuncs.c 2021-05-10 20:47:56.000000000 +0000 @@ -416,6 +416,7 @@ /* Do this mainly for overflow checking */ nitems = ArrayGetNItems(ndims, dims); + ArrayCheckBounds(ndims, dims, lbs); /* build the result array */ ndatabytes = ndatabytes1 + ndatabytes2; diff -Nru postgresql-10-10.16/src/backend/utils/adt/arrayutils.c postgresql-10-10.17/src/backend/utils/adt/arrayutils.c --- postgresql-10-10.16/src/backend/utils/adt/arrayutils.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/utils/adt/arrayutils.c 2021-05-10 20:47:56.000000000 +0000 @@ -112,6 +112,33 @@ } /* + * Verify sanity of proposed lower-bound values for an array + * + * The lower-bound values must not be so large as to cause overflow when + * calculating subscripts, e.g. lower bound 2147483640 with length 10 + * must be disallowed. We actually insist that dims[i] + lb[i] be + * computable without overflow, meaning that an array with last subscript + * equal to INT_MAX will be disallowed. + * + * It is assumed that the caller already called ArrayGetNItems, so that + * overflowed (negative) dims[] values have been eliminated. + */ +void +ArrayCheckBounds(int ndim, const int *dims, const int *lb) +{ + int i; + + for (i = 0; i < ndim; i++) + { + if (dims[i] + lb[i] < lb[i]) + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("array lower bound is too large: %d", + lb[i]))); + } +} + +/* * Compute ranges (sub-array dimensions) for an array slice * * We assume caller has validated slice endpoints, so overflow is impossible diff -Nru postgresql-10-10.16/src/backend/utils/adt/formatting.c postgresql-10-10.17/src/backend/utils/adt/formatting.c --- postgresql-10-10.16/src/backend/utils/adt/formatting.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/utils/adt/formatting.c 2021-05-10 20:47:56.000000000 +0000 @@ -2938,18 +2938,61 @@ s += strlen(s); break; case DCH_RM: - if (!tm->tm_mon) - break; - sprintf(s, "%*s", S_FM(n->suffix) ? 0 : -4, - rm_months_upper[MONTHS_PER_YEAR - tm->tm_mon]); - s += strlen(s); - break; + /* FALLTHROUGH */ case DCH_rm: - if (!tm->tm_mon) + + /* + * For intervals, values like '12 month' will be reduced to 0 + * month and some years. These should be processed. + */ + if (!tm->tm_mon && !tm->tm_year) break; - sprintf(s, "%*s", S_FM(n->suffix) ? 0 : -4, - rm_months_lower[MONTHS_PER_YEAR - tm->tm_mon]); - s += strlen(s); + else + { + int mon = 0; + const char *const *months; + + if (n->key->id == DCH_RM) + months = rm_months_upper; + else + months = rm_months_lower; + + /* + * Compute the position in the roman-numeral array. Note + * that the contents of the array are reversed, December + * being first and January last. + */ + if (tm->tm_mon == 0) + { + /* + * This case is special, and tracks the case of full + * interval years. + */ + mon = tm->tm_year >= 0 ? 0 : MONTHS_PER_YEAR - 1; + } + else if (tm->tm_mon < 0) + { + /* + * Negative case. In this case, the calculation is + * reversed, where -1 means December, -2 November, + * etc. + */ + mon = -1 * (tm->tm_mon + 1); + } + else + { + /* + * Common case, with a strictly positive value. The + * position in the array matches with the value of + * tm_mon. + */ + mon = MONTHS_PER_YEAR - tm->tm_mon; + } + + sprintf(s, "%*s", S_FM(n->suffix) ? 0 : -4, + months[mon]); + s += strlen(s); + } break; case DCH_W: sprintf(s, "%d", (tm->tm_mday - 1) / 7 + 1); diff -Nru postgresql-10-10.16/src/backend/utils/adt/selfuncs.c postgresql-10-10.17/src/backend/utils/adt/selfuncs.c --- postgresql-10-10.16/src/backend/utils/adt/selfuncs.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/utils/adt/selfuncs.c 2021-05-10 20:47:56.000000000 +0000 @@ -3851,11 +3851,11 @@ attnum = ((Var *) varinfo->var)->varattno; - if (!AttrNumberIsForUserDefinedAttr(attnum)) + if (AttrNumberIsForUserDefinedAttr(attnum) && + bms_is_member(attnum, matched)) continue; - if (!bms_is_member(attnum, matched)) - newlist = lappend(newlist, varinfo); + newlist = lappend(newlist, varinfo); } *varinfos = newlist; @@ -6087,9 +6087,18 @@ sel *= FULL_WILDCARD_SEL; } - /* If there's a fixed prefix, discount its selectivity */ + /* + * If there's a fixed prefix, discount its selectivity. We have to be + * careful here since a very long prefix could result in pow's result + * underflowing to zero (in which case "sel" probably has as well). + */ if (fixed_prefix_len > 0) - sel /= pow(FIXED_CHAR_SEL, fixed_prefix_len); + { + double prefixsel = pow(FIXED_CHAR_SEL, fixed_prefix_len); + + if (prefixsel > 0.0) + sel /= prefixsel; + } /* Make sure result stays in range */ CLAMP_PROBABILITY(sel); diff -Nru postgresql-10-10.16/src/backend/utils/cache/relcache.c postgresql-10-10.17/src/backend/utils/cache/relcache.c --- postgresql-10-10.16/src/backend/utils/cache/relcache.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/utils/cache/relcache.c 2021-05-10 20:47:56.000000000 +0000 @@ -2391,6 +2391,7 @@ FreeTriggerDesc(relation->trigdesc); list_free_deep(relation->rd_fkeylist); list_free(relation->rd_indexlist); + list_free(relation->rd_statlist); bms_free(relation->rd_indexattr); bms_free(relation->rd_keyattr); bms_free(relation->rd_pkattr); diff -Nru postgresql-10-10.16/src/backend/utils/misc/guc.c postgresql-10-10.17/src/backend/utils/misc/guc.c --- postgresql-10-10.16/src/backend/utils/misc/guc.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/utils/misc/guc.c 2021-05-10 20:47:56.000000000 +0000 @@ -1026,7 +1026,7 @@ { {"wal_log_hints", PGC_POSTMASTER, WAL_SETTINGS, - gettext_noop("Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications."), + gettext_noop("Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification."), NULL }, &wal_log_hints, @@ -9437,6 +9437,8 @@ if (varsourcefile[0]) read_gucstate_binary(&srcptr, srcend, &varsourceline, sizeof(varsourceline)); + else + varsourceline = 0; read_gucstate_binary(&srcptr, srcend, &varsource, sizeof(varsource)); read_gucstate_binary(&srcptr, srcend, @@ -9522,6 +9524,8 @@ char *s; char *name; char *value; + char *namecopy; + char *valuecopy; d = array_ref(array, 1, &i, -1 /* varlenarray */ , @@ -9546,13 +9550,18 @@ continue; } - (void) set_config_option(name, value, + /* free malloc'd strings immediately to avoid leak upon error */ + namecopy = pstrdup(name); + free(name); + valuecopy = pstrdup(value); + free(value); + + (void) set_config_option(namecopy, valuecopy, context, source, action, true, 0, false); - free(name); - if (value) - free(value); + pfree(namecopy); + pfree(valuecopy); pfree(s); } } @@ -9984,34 +9993,50 @@ call_string_check_hook(struct config_string *conf, char **newval, void **extra, GucSource source, int elevel) { + volatile bool result = true; + /* Quick success if no hook */ if (!conf->check_hook) return true; - /* Reset variables that might be set by hook */ - GUC_check_errcode_value = ERRCODE_INVALID_PARAMETER_VALUE; - GUC_check_errmsg_string = NULL; - GUC_check_errdetail_string = NULL; - GUC_check_errhint_string = NULL; + /* + * If elevel is ERROR, or if the check_hook itself throws an elog + * (undesirable, but not always avoidable), make sure we don't leak the + * already-malloc'd newval string. + */ + PG_TRY(); + { + /* Reset variables that might be set by hook */ + GUC_check_errcode_value = ERRCODE_INVALID_PARAMETER_VALUE; + GUC_check_errmsg_string = NULL; + GUC_check_errdetail_string = NULL; + GUC_check_errhint_string = NULL; - if (!(*conf->check_hook) (newval, extra, source)) + if (!(*conf->check_hook) (newval, extra, source)) + { + ereport(elevel, + (errcode(GUC_check_errcode_value), + GUC_check_errmsg_string ? + errmsg_internal("%s", GUC_check_errmsg_string) : + errmsg("invalid value for parameter \"%s\": \"%s\"", + conf->gen.name, *newval ? *newval : ""), + GUC_check_errdetail_string ? + errdetail_internal("%s", GUC_check_errdetail_string) : 0, + GUC_check_errhint_string ? + errhint("%s", GUC_check_errhint_string) : 0)); + /* Flush any strings created in ErrorContext */ + FlushErrorState(); + result = false; + } + } + PG_CATCH(); { - ereport(elevel, - (errcode(GUC_check_errcode_value), - GUC_check_errmsg_string ? - errmsg_internal("%s", GUC_check_errmsg_string) : - errmsg("invalid value for parameter \"%s\": \"%s\"", - conf->gen.name, *newval ? *newval : ""), - GUC_check_errdetail_string ? - errdetail_internal("%s", GUC_check_errdetail_string) : 0, - GUC_check_errhint_string ? - errhint("%s", GUC_check_errhint_string) : 0)); - /* Flush any strings created in ErrorContext */ - FlushErrorState(); - return false; + free(*newval); + PG_RE_THROW(); } + PG_END_TRY(); - return true; + return result; } static bool @@ -10247,8 +10272,9 @@ { /* * Once local buffers have been initialized, it's too late to change this. + * However, if this is only a test call, allow it. */ - if (NLocBuffer && NLocBuffer != *newval) + if (source != PGC_S_TEST && NLocBuffer && NLocBuffer != *newval) { GUC_check_errdetail("\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session."); return false; diff -Nru postgresql-10-10.16/src/backend/utils/misc/postgresql.conf.sample postgresql-10-10.17/src/backend/utils/misc/postgresql.conf.sample --- postgresql-10-10.16/src/backend/utils/misc/postgresql.conf.sample 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/backend/utils/misc/postgresql.conf.sample 2021-05-10 20:47:56.000000000 +0000 @@ -187,7 +187,7 @@ #wal_sync_method = fsync # the default is the first option # supported by the operating system: # open_datasync - # fdatasync (default on Linux) + # fdatasync (default on Linux and FreeBSD) # fsync # fsync_writethrough # open_sync diff -Nru postgresql-10-10.16/src/bin/initdb/initdb.c postgresql-10-10.17/src/bin/initdb/initdb.c --- postgresql-10-10.16/src/bin/initdb/initdb.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/bin/initdb/initdb.c 2021-05-10 20:47:56.000000000 +0000 @@ -3255,6 +3255,9 @@ /* ... and tag on pg_ctl instead */ join_path_components(pg_ctl_path, pg_ctl_path, "pg_ctl"); + /* Convert the path to use native separators */ + make_native_path(pg_ctl_path); + /* path to pg_ctl, properly quoted */ appendShellString(start_db_cmd, pg_ctl_path); diff -Nru postgresql-10-10.16/src/bin/pg_dump/pg_backup_archiver.c postgresql-10-10.17/src/bin/pg_dump/pg_backup_archiver.c --- postgresql-10-10.16/src/bin/pg_dump/pg_backup_archiver.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/bin/pg_dump/pg_backup_archiver.c 2021-05-10 20:47:56.000000000 +0000 @@ -2116,6 +2116,7 @@ if (AH->lookahead) free(AH->lookahead); + AH->readHeader = 0; AH->lookaheadSize = 512; AH->lookahead = pg_malloc0(512); AH->lookaheadLen = 0; @@ -2189,62 +2190,9 @@ if (strncmp(sig, "PGDMP", 5) == 0) { - int byteread; - char vmaj, - vmin, - vrev; - - /* - * Finish reading (most of) a custom-format header. - * - * NB: this code must agree with ReadHead(). - */ - if ((byteread = fgetc(fh)) == EOF) - READ_ERROR_EXIT(fh); - - vmaj = byteread; - - if ((byteread = fgetc(fh)) == EOF) - READ_ERROR_EXIT(fh); - - vmin = byteread; - - /* Save these too... */ - AH->lookahead[AH->lookaheadLen++] = vmaj; - AH->lookahead[AH->lookaheadLen++] = vmin; - - /* Check header version; varies from V1.0 */ - if (vmaj > 1 || (vmaj == 1 && vmin > 0)) /* Version > 1.0 */ - { - if ((byteread = fgetc(fh)) == EOF) - READ_ERROR_EXIT(fh); - - vrev = byteread; - AH->lookahead[AH->lookaheadLen++] = vrev; - } - else - vrev = 0; - - AH->version = MAKE_ARCHIVE_VERSION(vmaj, vmin, vrev); - - if ((AH->intSize = fgetc(fh)) == EOF) - READ_ERROR_EXIT(fh); - AH->lookahead[AH->lookaheadLen++] = AH->intSize; - - if (AH->version >= K_VERS_1_7) - { - if ((AH->offSize = fgetc(fh)) == EOF) - READ_ERROR_EXIT(fh); - AH->lookahead[AH->lookaheadLen++] = AH->offSize; - } - else - AH->offSize = AH->intSize; - - if ((byteread = fgetc(fh)) == EOF) - READ_ERROR_EXIT(fh); - - AH->format = byteread; - AH->lookahead[AH->lookaheadLen++] = AH->format; + /* It's custom format, stop here */ + AH->format = archCustom; + AH->readHeader = 1; } else { @@ -2281,23 +2229,16 @@ AH->format = archTar; } - /* If we can't seek, then mark the header as read */ - if (fseeko(fh, 0, SEEK_SET) != 0) - { - /* - * NOTE: Formats that use the lookahead buffer can unset this in their - * Init routine. - */ - AH->readHeader = 1; - } - else - AH->lookaheadLen = 0; /* Don't bother since we've reset the file */ - - /* Close the file */ + /* Close the file if we opened it */ if (wantClose) + { if (fclose(fh) != 0) exit_horribly(modulename, "could not close input file: %s\n", strerror(errno)); + /* Forget lookahead, since we'll re-read header after re-opening */ + AH->readHeader = 0; + AH->lookaheadLen = 0; + } return AH->format; } @@ -3730,7 +3671,9 @@ void ReadHead(ArchiveHandle *AH) { - char tmpMag[7]; + char vmaj, + vmin, + vrev; int fmt; struct tm crtm; @@ -3742,48 +3685,46 @@ */ if (!AH->readHeader) { - char vmaj, - vmin, - vrev; + char tmpMag[7]; (*AH->ReadBufPtr) (AH, tmpMag, 5); if (strncmp(tmpMag, "PGDMP", 5) != 0) exit_horribly(modulename, "did not find magic string in file header\n"); + } - vmaj = (*AH->ReadBytePtr) (AH); - vmin = (*AH->ReadBytePtr) (AH); + vmaj = (*AH->ReadBytePtr) (AH); + vmin = (*AH->ReadBytePtr) (AH); - if (vmaj > 1 || (vmaj == 1 && vmin > 0)) /* Version > 1.0 */ - vrev = (*AH->ReadBytePtr) (AH); - else - vrev = 0; + if (vmaj > 1 || (vmaj == 1 && vmin > 0)) /* Version > 1.0 */ + vrev = (*AH->ReadBytePtr) (AH); + else + vrev = 0; - AH->version = MAKE_ARCHIVE_VERSION(vmaj, vmin, vrev); + AH->version = MAKE_ARCHIVE_VERSION(vmaj, vmin, vrev); - if (AH->version < K_VERS_1_0 || AH->version > K_VERS_MAX) - exit_horribly(modulename, "unsupported version (%d.%d) in file header\n", - vmaj, vmin); + if (AH->version < K_VERS_1_0 || AH->version > K_VERS_MAX) + exit_horribly(modulename, "unsupported version (%d.%d) in file header\n", + vmaj, vmin); - AH->intSize = (*AH->ReadBytePtr) (AH); - if (AH->intSize > 32) - exit_horribly(modulename, "sanity check on integer size (%lu) failed\n", - (unsigned long) AH->intSize); + AH->intSize = (*AH->ReadBytePtr) (AH); + if (AH->intSize > 32) + exit_horribly(modulename, "sanity check on integer size (%lu) failed\n", + (unsigned long) AH->intSize); - if (AH->intSize > sizeof(int)) - write_msg(modulename, "WARNING: archive was made on a machine with larger integers, some operations might fail\n"); + if (AH->intSize > sizeof(int)) + write_msg(modulename, "WARNING: archive was made on a machine with larger integers, some operations might fail\n"); - if (AH->version >= K_VERS_1_7) - AH->offSize = (*AH->ReadBytePtr) (AH); - else - AH->offSize = AH->intSize; + if (AH->version >= K_VERS_1_7) + AH->offSize = (*AH->ReadBytePtr) (AH); + else + AH->offSize = AH->intSize; - fmt = (*AH->ReadBytePtr) (AH); + fmt = (*AH->ReadBytePtr) (AH); - if (AH->format != fmt) - exit_horribly(modulename, "expected format (%d) differs from format found in file (%d)\n", - AH->format, fmt); - } + if (AH->format != fmt) + exit_horribly(modulename, "expected format (%d) differs from format found in file (%d)\n", + AH->format, fmt); if (AH->version >= K_VERS_1_2) { diff -Nru postgresql-10-10.16/src/bin/pg_dump/pg_backup_archiver.h postgresql-10-10.17/src/bin/pg_dump/pg_backup_archiver.h --- postgresql-10-10.16/src/bin/pg_dump/pg_backup_archiver.h 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/bin/pg_dump/pg_backup_archiver.h 2021-05-10 20:47:56.000000000 +0000 @@ -262,15 +262,21 @@ time_t createDate; /* Date archive created */ /* - * Fields used when discovering header. A format can always get the - * previous read bytes from here... + * Fields used when discovering archive format. For tar format, we load + * the first block into the lookahead buffer, and verify that it looks + * like a tar header. The tar module must then consume bytes from the + * lookahead buffer before reading any more from the file. For custom + * format, we load only the "PGDMP" marker into the buffer, and then set + * readHeader after confirming it matches. The buffer is vestigial in + * this case, as the subsequent code just checks readHeader and doesn't + * examine the buffer. */ - int readHeader; /* Used if file header has been read already */ + int readHeader; /* Set if we already read "PGDMP" marker */ char *lookahead; /* Buffer used when reading header to discover * format */ - size_t lookaheadSize; /* Size of allocated buffer */ - size_t lookaheadLen; /* Length of data in lookahead */ - pgoff_t lookaheadPos; /* Current read position in lookahead buffer */ + size_t lookaheadSize; /* Allocated size of buffer */ + size_t lookaheadLen; /* Length of valid data in lookahead */ + size_t lookaheadPos; /* Current read position in lookahead buffer */ ArchiveEntryPtrType ArchiveEntryPtr; /* Called for each metadata object */ StartDataPtrType StartDataPtr; /* Called when table data is about to be diff -Nru postgresql-10-10.16/src/bin/pg_dump/pg_backup_tar.c postgresql-10-10.17/src/bin/pg_dump/pg_backup_tar.c --- postgresql-10-10.16/src/bin/pg_dump/pg_backup_tar.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/bin/pg_dump/pg_backup_tar.c 2021-05-10 20:47:56.000000000 +0000 @@ -236,12 +236,6 @@ ctx->hasSeek = checkSeek(ctx->tarFH); - /* - * Forcibly unmark the header as read since we use the lookahead - * buffer - */ - AH->readHeader = 0; - ctx->FH = (void *) tarOpen(AH, "toc.dat", 'r'); ReadHead(AH); ReadToc(AH); diff -Nru postgresql-10-10.16/src/bin/pg_dump/po/de.po postgresql-10-10.17/src/bin/pg_dump/po/de.po --- postgresql-10-10.16/src/bin/pg_dump/po/de.po 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/bin/pg_dump/po/de.po 2021-05-10 20:47:56.000000000 +0000 @@ -624,7 +624,7 @@ #: pg_backup_archiver.c:1690 #, c-format msgid "could not write to large object (result: %lu, expected: %lu)\n" -msgstr "konnte Large Object nicht schreiben (Ergebis: %lu, erwartet: %lu)\n" +msgstr "konnte Large Object nicht schreiben (Ergebnis: %lu, erwartet: %lu)\n" #: pg_backup_archiver.c:1783 #, c-format diff -Nru postgresql-10-10.16/src/bin/pg_upgrade/check.c postgresql-10-10.17/src/bin/pg_upgrade/check.c --- postgresql-10-10.16/src/bin/pg_upgrade/check.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/bin/pg_upgrade/check.c 2021-05-10 20:47:56.000000000 +0000 @@ -23,6 +23,7 @@ static void check_proper_datallowconn(ClusterInfo *cluster); static void check_for_prepared_transactions(ClusterInfo *cluster); static void check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster); +static void check_for_composite_data_type_usage(ClusterInfo *cluster); static void check_for_reg_data_type_usage(ClusterInfo *cluster); static void check_for_jsonb_9_4_usage(ClusterInfo *cluster); static void check_for_pg_role_prefix(ClusterInfo *cluster); @@ -98,6 +99,7 @@ check_is_install_user(&old_cluster); check_proper_datallowconn(&old_cluster); check_for_prepared_transactions(&old_cluster); + check_for_composite_data_type_usage(&old_cluster); check_for_reg_data_type_usage(&old_cluster); check_for_isn_and_int8_passing_mismatch(&old_cluster); @@ -898,6 +900,63 @@ /* + * check_for_composite_data_type_usage() + * Check for system-defined composite types used in user tables. + * + * The OIDs of rowtypes of system catalogs and information_schema views + * can change across major versions; unlike user-defined types, we have + * no mechanism for forcing them to be the same in the new cluster. + * Hence, if any user table uses one, that's problematic for pg_upgrade. + */ +static void +check_for_composite_data_type_usage(ClusterInfo *cluster) +{ + bool found; + Oid firstUserOid; + char output_path[MAXPGPATH]; + char *base_query; + + prep_status("Checking for system-defined composite types in user tables"); + + snprintf(output_path, sizeof(output_path), "tables_using_composite.txt"); + + /* + * Look for composite types that were made during initdb *or* belong to + * information_schema; that's important in case information_schema was + * dropped and reloaded. + * + * The cutoff OID here should match the source cluster's value of + * FirstNormalObjectId. We hardcode it rather than using that C #define + * because, if that #define is ever changed, our own version's value is + * NOT what to use. Eventually we may need a test on the source cluster's + * version to select the correct value. + */ + firstUserOid = 16384; + + base_query = psprintf("SELECT t.oid FROM pg_catalog.pg_type t " + "LEFT JOIN pg_catalog.pg_namespace n ON t.typnamespace = n.oid " + " WHERE typtype = 'c' AND (t.oid < %u OR nspname = 'information_schema')", + firstUserOid); + + found = check_for_data_types_usage(cluster, base_query, output_path); + + free(base_query); + + if (found) + { + pg_log(PG_REPORT, "fatal\n"); + pg_fatal("Your installation contains system-defined composite type(s) in user tables.\n" + "These type OIDs are not stable across PostgreSQL versions,\n" + "so this cluster cannot currently be upgraded. You can\n" + "drop the problem columns and restart the upgrade.\n" + "A list of the problem columns is in the file:\n" + " %s\n\n", output_path); + } + else + check_ok(); +} + +/* * check_for_reg_data_type_usage() * pg_upgrade only preserves these system values: * pg_class.oid @@ -911,87 +970,36 @@ static void check_for_reg_data_type_usage(ClusterInfo *cluster) { - int dbnum; - FILE *script = NULL; - bool found = false; + bool found; char output_path[MAXPGPATH]; prep_status("Checking for reg* data types in user tables"); snprintf(output_path, sizeof(output_path), "tables_using_reg.txt"); - for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) - { - PGresult *res; - bool db_used = false; - int ntups; - int rowno; - int i_nspname, - i_relname, - i_attname; - DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; - PGconn *conn = connectToServer(cluster, active_db->db_name); - - /* - * While several relkinds don't store any data, e.g. views, they can - * be used to define data types of other columns, so we check all - * relkinds. - */ - res = executeQueryOrDie(conn, - "SELECT n.nspname, c.relname, a.attname " - "FROM pg_catalog.pg_class c, " - " pg_catalog.pg_namespace n, " - " pg_catalog.pg_attribute a, " - " pg_catalog.pg_type t " - "WHERE c.oid = a.attrelid AND " - " NOT a.attisdropped AND " - " a.atttypid = t.oid AND " - " t.typnamespace = " - " (SELECT oid FROM pg_namespace " - " WHERE nspname = 'pg_catalog') AND" - " t.typname IN ( " - /* regclass.oid is preserved, so 'regclass' is OK */ - " 'regconfig', " - " 'regdictionary', " - " 'regnamespace', " - " 'regoper', " - " 'regoperator', " - " 'regproc', " - " 'regprocedure' " - /* regrole.oid is preserved, so 'regrole' is OK */ - /* regtype.oid is preserved, so 'regtype' is OK */ - " ) AND " - " c.relnamespace = n.oid AND " - " n.nspname NOT IN ('pg_catalog', 'information_schema')"); - - ntups = PQntuples(res); - i_nspname = PQfnumber(res, "nspname"); - i_relname = PQfnumber(res, "relname"); - i_attname = PQfnumber(res, "attname"); - for (rowno = 0; rowno < ntups; rowno++) - { - found = true; - if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL) - pg_fatal("could not open file \"%s\": %s\n", - output_path, strerror(errno)); - if (!db_used) - { - fprintf(script, "Database: %s\n", active_db->db_name); - db_used = true; - } - fprintf(script, " %s.%s.%s\n", - PQgetvalue(res, rowno, i_nspname), - PQgetvalue(res, rowno, i_relname), - PQgetvalue(res, rowno, i_attname)); - } - - PQclear(res); - - PQfinish(conn); - } - - if (script) - fclose(script); + /* + * Note: older servers will not have all of these reg* types, so we have + * to write the query like this rather than depending on casts to regtype. + */ + found = check_for_data_types_usage(cluster, + "SELECT oid FROM pg_catalog.pg_type t " + "WHERE t.typnamespace = " + " (SELECT oid FROM pg_catalog.pg_namespace " + " WHERE nspname = 'pg_catalog') " + " AND t.typname IN ( " + /* pg_class.oid is preserved, so 'regclass' is OK */ + " 'regcollation', " + " 'regconfig', " + " 'regdictionary', " + " 'regnamespace', " + " 'regoper', " + " 'regoperator', " + " 'regproc', " + " 'regprocedure' " + /* pg_authid.oid is preserved, so 'regrole' is OK */ + /* pg_type.oid is (mostly) preserved, so 'regtype' is OK */ + " )", + output_path); if (found) { @@ -1016,75 +1024,13 @@ static void check_for_jsonb_9_4_usage(ClusterInfo *cluster) { - int dbnum; - FILE *script = NULL; - bool found = false; char output_path[MAXPGPATH]; prep_status("Checking for incompatible \"jsonb\" data type"); snprintf(output_path, sizeof(output_path), "tables_using_jsonb.txt"); - for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) - { - PGresult *res; - bool db_used = false; - int ntups; - int rowno; - int i_nspname, - i_relname, - i_attname; - DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; - PGconn *conn = connectToServer(cluster, active_db->db_name); - - /* - * While several relkinds don't store any data, e.g. views, they can - * be used to define data types of other columns, so we check all - * relkinds. - */ - res = executeQueryOrDie(conn, - "SELECT n.nspname, c.relname, a.attname " - "FROM pg_catalog.pg_class c, " - " pg_catalog.pg_namespace n, " - " pg_catalog.pg_attribute a " - "WHERE c.oid = a.attrelid AND " - " NOT a.attisdropped AND " - " a.atttypid = 'pg_catalog.jsonb'::pg_catalog.regtype AND " - " c.relnamespace = n.oid AND " - /* exclude possible orphaned temp tables */ - " n.nspname !~ '^pg_temp_' AND " - " n.nspname NOT IN ('pg_catalog', 'information_schema')"); - - ntups = PQntuples(res); - i_nspname = PQfnumber(res, "nspname"); - i_relname = PQfnumber(res, "relname"); - i_attname = PQfnumber(res, "attname"); - for (rowno = 0; rowno < ntups; rowno++) - { - found = true; - if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL) - pg_fatal("could not open file \"%s\": %s\n", - output_path, strerror(errno)); - if (!db_used) - { - fprintf(script, "Database: %s\n", active_db->db_name); - db_used = true; - } - fprintf(script, " %s.%s.%s\n", - PQgetvalue(res, rowno, i_nspname), - PQgetvalue(res, rowno, i_relname), - PQgetvalue(res, rowno, i_attname)); - } - - PQclear(res); - - PQfinish(conn); - } - - if (script) - fclose(script); - - if (found) + if (check_for_data_type_usage(cluster, "pg_catalog.jsonb", output_path)) { pg_log(PG_REPORT, "fatal\n"); pg_fatal("Your installation contains the \"jsonb\" data type in user tables.\n" diff -Nru postgresql-10-10.16/src/bin/pg_upgrade/pg_upgrade.h postgresql-10-10.17/src/bin/pg_upgrade/pg_upgrade.h --- postgresql-10-10.16/src/bin/pg_upgrade/pg_upgrade.h 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/bin/pg_upgrade/pg_upgrade.h 2021-05-10 20:47:56.000000000 +0000 @@ -441,6 +441,12 @@ /* version.c */ +bool check_for_data_types_usage(ClusterInfo *cluster, + const char *base_query, + const char *output_path); +bool check_for_data_type_usage(ClusterInfo *cluster, + const char *typename, + const char *output_path); void new_9_0_populate_pg_largeobject_metadata(ClusterInfo *cluster, bool check_mode); void old_9_3_check_for_line_data_type_usage(ClusterInfo *cluster); diff -Nru postgresql-10-10.16/src/bin/pg_upgrade/po/de.po postgresql-10-10.17/src/bin/pg_upgrade/po/de.po --- postgresql-10-10.16/src/bin/pg_upgrade/po/de.po 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/bin/pg_upgrade/po/de.po 2021-05-10 20:47:56.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2020-11-08 11:43+0000\n" +"POT-Creation-Date: 2021-05-06 22:00+0000\n" "PO-Revision-Date: 2019-07-07 16:49+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -16,7 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: check.c:67 +#: check.c:68 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -25,7 +25,7 @@ "Führe Konsistenzprüfungen am alten laufenden Server durch\n" "---------------------------------------------------------\n" -#: check.c:73 +#: check.c:74 #, c-format msgid "" "Performing Consistency Checks\n" @@ -34,7 +34,7 @@ "Führe Konsistenzprüfungen durch\n" "-------------------------------\n" -#: check.c:169 +#: check.c:171 #, c-format msgid "" "\n" @@ -43,7 +43,7 @@ "\n" "*Cluster sind kompatibel*\n" -#: check.c:175 +#: check.c:177 #, c-format msgid "" "\n" @@ -55,7 +55,7 @@ "neuen Cluster neu mit initdb initialisieren, bevor fortgesetzt\n" "werden kann.\n" -#: check.c:209 +#: check.c:211 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade so,\n" @@ -68,7 +68,7 @@ " %s\n" "\n" -#: check.c:215 +#: check.c:217 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -77,7 +77,7 @@ "Mit diesem Skript können die Dateien des alten Clusters gelöscht werden:\n" " %s\n" -#: check.c:220 +#: check.c:222 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -90,93 +90,93 @@ "Datenverzeichnis des neuen Clusters im alten Cluster-Verzeichnis\n" "liegen. Der Inhalt des alten Clusters muss von Hand gelöscht werden.\n" -#: check.c:230 +#: check.c:232 #, c-format msgid "Checking cluster versions" msgstr "Prüfe Cluster-Versionen" -#: check.c:242 +#: check.c:244 #, c-format msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" msgstr "Dieses Programm kann nur Upgrades von PostgreSQL Version 8.4 oder später durchführen.\n" -#: check.c:246 +#: check.c:248 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Dieses Programm kann nur Upgrades auf PostgreSQL Version %s durchführen.\n" -#: check.c:255 +#: check.c:257 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Dieses Programm kann keine Downgrades auf ältere Hauptversionen von PostgreSQL durchführen.\n" -#: check.c:260 +#: check.c:262 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "Die Daten- und Programmverzeichnisse des alten Clusters stammen von verschiedenen Hauptversionen.\n" -#: check.c:263 +#: check.c:265 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "Die Daten- und Programmverzeichnisse des neuen Clusters stammen von verschiedenen Hauptversionen.\n" -#: check.c:280 +#: check.c:282 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Wenn ein laufender alter Server vor Version 9.1 geprüft wird, muss die Portnummer des alten Servers angegeben werden.\n" -#: check.c:284 +#: check.c:286 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Wenn ein laufender Server geprüft wird, müssen die alte und die neue Portnummer verschieden sein.\n" -#: check.c:299 +#: check.c:301 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "Kodierungen für Datenbank »%s« stimmen nicht überein: alt »%s«, neu »%s«\n" -#: check.c:304 +#: check.c:306 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_collate-Werte für Datenbank »%s« stimmen nicht überein: alt »%s«, neu »%s«\n" -#: check.c:307 +#: check.c:309 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_ctype-Werte für Datenbank »%s« stimmen nicht überein: alt »%s«, neu »%s«\n" -#: check.c:380 +#: check.c:382 #, c-format msgid "New cluster database \"%s\" is not empty\n" msgstr "Datenbank »%s« im neuen Cluster ist nicht leer\n" -#: check.c:427 +#: check.c:429 #, c-format msgid "Creating script to analyze new cluster" msgstr "Erzeuge Skript zum Analysieren des neuen Clusters" -#: check.c:441 check.c:600 check.c:864 check.c:975 check.c:1066 function.c:253 -#: option.c:480 version.c:57 version.c:202 version.c:344 +#: check.c:443 check.c:602 check.c:866 function.c:253 option.c:480 version.c:57 +#: version.c:207 version.c:377 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "konnte Datei »%s« nicht öffnen: %s\n" -#: check.c:489 check.c:656 +#: check.c:491 check.c:658 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "konnte Datei »%s« nicht ausführbar machen: %s\n" -#: check.c:519 +#: check.c:521 #, c-format msgid "Checking for new cluster tablespace directories" msgstr "Prüfe Tablespace-Verzeichnisse des neuen Clusters" -#: check.c:530 +#: check.c:532 #, c-format msgid "new cluster tablespace directory already exists: \"%s\"\n" msgstr "Tablespace-Verzeichnis für neuen Cluster existiert bereits: »%s«\n" -#: check.c:563 +#: check.c:565 #, c-format msgid "" "\n" @@ -185,7 +185,7 @@ "\n" "WARNUNG: das neue Datenverzeichnis sollte nicht im alten Datenverzeichnis liegen, z.B. %s\n" -#: check.c:587 +#: check.c:589 #, c-format msgid "" "\n" @@ -194,73 +194,73 @@ "\n" "WARNUNG: benutzerdefinierte Tablespace-Pfade sollten nicht im Datenverzeichnis liegen, z.B. %s\n" -#: check.c:597 +#: check.c:599 #, c-format msgid "Creating script to delete old cluster" msgstr "Erzeuge Skript zum Löschen des alten Clusters" -#: check.c:676 +#: check.c:678 #, c-format msgid "Checking database user is the install user" msgstr "Prüfe ob der Datenbankbenutzer der Installationsbenutzer ist" -#: check.c:692 +#: check.c:694 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "Datenbankbenutzer »%s« ist nicht der Installationsbenutzer\n" -#: check.c:703 +#: check.c:705 #, c-format msgid "could not determine the number of users\n" msgstr "konnte die Anzahl der Benutzer nicht ermitteln\n" -#: check.c:711 +#: check.c:713 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Nur der Installationsbenutzer darf im neuen Cluster definiert sein.\n" -#: check.c:731 +#: check.c:733 #, c-format msgid "Checking database connection settings" msgstr "Prüfe Verbindungseinstellungen der Datenbank" -#: check.c:753 +#: check.c:755 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 darf keine Verbindungen erlauben, d.h. ihr pg_database.datallowconn muss falsch sein\n" -#: check.c:763 +#: check.c:765 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Alle Datenbanken außer template0 müssen Verbindungen erlauben, d.h. ihr pg_database.datallowconn muss wahr sein\n" -#: check.c:788 +#: check.c:790 #, c-format msgid "Checking for prepared transactions" msgstr "Prüfe auf vorbereitete Transaktionen" -#: check.c:797 +#: check.c:799 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "Der alte Cluster enthält vorbereitete Transaktionen\n" -#: check.c:799 +#: check.c:801 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "Der neue Cluster enthält vorbereitete Transaktionen\n" -#: check.c:825 +#: check.c:827 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Prüfe auf contrib/isn mit unpassender bigint-Übergabe" -#: check.c:886 check.c:998 check.c:1089 function.c:268 version.c:248 -#: version.c:285 +#: check.c:888 check.c:947 check.c:1006 check.c:1035 function.c:268 +#: version.c:281 version.c:318 #, c-format msgid "fatal\n" msgstr "fatal\n" -#: check.c:887 +#: check.c:889 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -284,10 +284,35 @@ #: check.c:919 #, c-format +msgid "Checking for system-defined composite types in user tables" +msgstr "Prüfe auf systemdefinierte zusammengesetzte Typen in Benutzertabellen" + +#: check.c:948 +#, c-format +msgid "" +"Your installation contains system-defined composite type(s) in user tables.\n" +"These type OIDs are not stable across PostgreSQL versions,\n" +"so this cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" +" %s\n" +"\n" +msgstr "" +"Ihre Installation enthält systemdefinierte zusammengesetzte Typen in\n" +"Benutzertabellen. Die OIDs dieser Typen sind nicht über\n" +"PostgreSQL-Versionen stabil und daher kann dieser Cluster gegenwärtig\n" +"nicht aktualisiert werden. Sie können die Problemspalten entfernen\n" +"und das Upgrade neu starten. Eine Liste der Problemspalten ist in der\n" +"Datei:\n" +" %s\n" +"\n" + +#: check.c:976 +#, c-format msgid "Checking for reg* data types in user tables" msgstr "Prüfe auf reg*-Datentypen in Benutzertabellen" -#: check.c:999 +#: check.c:1007 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" @@ -307,12 +332,12 @@ " %s\n" "\n" -#: check.c:1024 +#: check.c:1029 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Prüfe auf inkompatiblen Datentyp »jsonb«" -#: check.c:1090 +#: check.c:1036 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" @@ -330,32 +355,32 @@ " %s\n" "\n" -#: check.c:1111 +#: check.c:1057 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Prüfe auf Rollen, die mit »pg_« anfangen" -#: check.c:1121 +#: check.c:1067 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "Der alte Cluster enthält Rollen, die mit »pg_« anfangen\n" -#: check.c:1123 +#: check.c:1069 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "Der neue Cluster enthält Rollen, die mit »pg_« anfangen\n" -#: check.c:1149 +#: check.c:1095 #, c-format msgid "failed to get the current locale\n" msgstr "konnte aktuelle Locale nicht ermitteln\n" -#: check.c:1158 +#: check.c:1104 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "konnte System-Locale-Namen für »%s« nicht ermitteln\n" -#: check.c:1164 +#: check.c:1110 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "konnte alte Locale »%s« nicht wiederherstellen\n" @@ -1523,7 +1548,7 @@ msgid "Checking for large objects" msgstr "Prüfe auf Large Objects" -#: version.c:80 version.c:387 +#: version.c:80 version.c:420 #, c-format msgid "warning" msgstr "Warnung" @@ -1566,12 +1591,12 @@ "Standardrechte zu setzen.\n" "\n" -#: version.c:242 +#: version.c:275 #, c-format msgid "Checking for incompatible \"line\" data type" msgstr "Prüfe auf inkompatiblen Datentyp »line«" -#: version.c:249 +#: version.c:282 #, c-format msgid "" "Your installation contains the \"line\" data type in user tables. This\n" @@ -1591,12 +1616,12 @@ " %s\n" "\n" -#: version.c:279 +#: version.c:312 #, c-format msgid "Checking for invalid \"unknown\" user columns" msgstr "Prüfe auf ungültige Benutzerspalten mit Typ »unknown«" -#: version.c:286 +#: version.c:319 #, c-format msgid "" "Your installation contains the \"unknown\" data type in user tables. This\n" @@ -1614,12 +1639,12 @@ " %s\n" "\n" -#: version.c:309 +#: version.c:342 #, c-format msgid "Checking for hash indexes" msgstr "Prüfe auf Hash-Indexe" -#: version.c:389 +#: version.c:422 #, c-format msgid "" "\n" @@ -1636,7 +1661,7 @@ "werden Sie Anweisungen zum REINDEX erhalten.\n" "\n" -#: version.c:395 +#: version.c:428 #, c-format msgid "" "\n" diff -Nru postgresql-10-10.16/src/bin/pg_upgrade/po/fr.po postgresql-10-10.17/src/bin/pg_upgrade/po/fr.po --- postgresql-10-10.16/src/bin/pg_upgrade/po/fr.po 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/bin/pg_upgrade/po/fr.po 2021-05-10 20:47:56.000000000 +0000 @@ -7,17 +7,17 @@ msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2020-10-21 21:13+0000\n" -"PO-Revision-Date: 2020-10-22 16:47+0200\n" +"POT-Creation-Date: 2021-04-30 21:00+0000\n" +"PO-Revision-Date: 2021-05-02 17:26+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.1\n" +"X-Generator: Poedit 2.4.2\n" -#: check.c:67 +#: check.c:68 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -26,7 +26,7 @@ "Exécution de tests de cohérence sur l'ancien serveur\n" "----------------------------------------------------\n" -#: check.c:73 +#: check.c:74 #, c-format msgid "" "Performing Consistency Checks\n" @@ -35,7 +35,7 @@ "Exécution de tests de cohérence\n" "-------------------------------\n" -#: check.c:169 +#: check.c:171 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ "\n" "*Les instances sont compatibles*\n" -#: check.c:175 +#: check.c:177 #, c-format msgid "" "\n" @@ -55,7 +55,7 @@ "Si pg_upgrade échoue après cela, vous devez ré-exécuter initdb\n" "sur la nouvelle instance avant de continuer.\n" -#: check.c:209 +#: check.c:211 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade so,\n" @@ -68,7 +68,7 @@ " %s\n" "\n" -#: check.c:215 +#: check.c:217 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -78,7 +78,7 @@ "instance :\n" " %s\n" -#: check.c:220 +#: check.c:222 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -92,93 +92,93 @@ "de l'ancienne instance. Le contenu de l'ancienne instance doit être supprimé\n" "manuellement.\n" -#: check.c:230 +#: check.c:232 #, c-format msgid "Checking cluster versions" msgstr "Vérification des versions des instances" -#: check.c:242 +#: check.c:244 #, c-format msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" msgstr "Cet outil peut seulement mettre à jour les versions 8.4 et ultérieures de PostgreSQL.\n" -#: check.c:246 +#: check.c:248 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Cet outil peut seulement mettre à jour vers la version %s de PostgreSQL.\n" -#: check.c:255 +#: check.c:257 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Cet outil ne peut pas être utilisé pour mettre à jour vers des versions majeures plus anciennes de PostgreSQL.\n" -#: check.c:260 +#: check.c:262 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "Les répertoires des données de l'ancienne instance et des binaires sont de versions majeures différentes.\n" -#: check.c:263 +#: check.c:265 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "Les répertoires des données de la nouvelle instance et des binaires sont de versions majeures différentes.\n" -#: check.c:280 +#: check.c:282 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Lors de la vérification d'un serveur antérieur à la 9.1, vous devez spécifier le numéro de port de l'ancien serveur.\n" -#: check.c:284 +#: check.c:286 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Lors de la vérification d'un serveur en production, l'ancien numéro de port doit être différent du nouveau.\n" -#: check.c:299 +#: check.c:301 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "les encodages de la base de données « %s » ne correspondent pas : ancien « %s », nouveau « %s »\n" -#: check.c:304 +#: check.c:306 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "les valeurs de lc_collate de la base de données « %s » ne correspondent pas : ancien « %s », nouveau « %s »\n" -#: check.c:307 +#: check.c:309 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "les valeurs de lc_ctype de la base de données « %s » ne correspondent pas : ancien « %s », nouveau « %s »\n" -#: check.c:380 +#: check.c:382 #, c-format msgid "New cluster database \"%s\" is not empty\n" msgstr "La nouvelle instance « %s » n'est pas vide\n" -#: check.c:427 +#: check.c:429 #, c-format msgid "Creating script to analyze new cluster" msgstr "Création d'un script pour analyser la nouvelle instance" -#: check.c:441 check.c:600 check.c:864 check.c:975 check.c:1066 function.c:253 -#: option.c:480 version.c:57 version.c:202 version.c:344 +#: check.c:443 check.c:602 check.c:866 function.c:253 option.c:480 version.c:57 +#: version.c:207 version.c:377 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "n'a pas pu ouvrir le fichier « %s » : %s\n" -#: check.c:489 check.c:656 +#: check.c:491 check.c:658 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "n'a pas pu ajouter les droits d'exécution pour le fichier « %s » : %s\n" -#: check.c:519 +#: check.c:521 #, c-format msgid "Checking for new cluster tablespace directories" msgstr "Vérification des répertoires de tablespace de la nouvelle instance" -#: check.c:530 +#: check.c:532 #, c-format msgid "new cluster tablespace directory already exists: \"%s\"\n" msgstr "le répertoire du tablespace de la nouvelle instance existe déjà : « %s »\n" -#: check.c:563 +#: check.c:565 #, c-format msgid "" "\n" @@ -187,7 +187,7 @@ "\n" "AVERTISSEMENT : le nouveau répertoire de données ne doit pas être à l'intérieur de l'ancien répertoire de données, %s\n" -#: check.c:587 +#: check.c:589 #, c-format msgid "" "\n" @@ -196,73 +196,73 @@ "\n" "AVERTISSEMENT : les emplacements de tablespaces utilisateurs ne doivent pas être à l'intérieur du répertoire de données, %s\n" -#: check.c:597 +#: check.c:599 #, c-format msgid "Creating script to delete old cluster" msgstr "Création du script pour supprimer l'ancienne instance" -#: check.c:676 +#: check.c:678 #, c-format msgid "Checking database user is the install user" msgstr "Vérification que l'utilisateur de la base de données est l'utilisateur d'installation" -#: check.c:692 +#: check.c:694 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "l'utilisateur de la base de données « %s » n'est pas l'utilisateur d'installation\n" -#: check.c:703 +#: check.c:705 #, c-format msgid "could not determine the number of users\n" msgstr "n'a pas pu déterminer le nombre d'utilisateurs\n" -#: check.c:711 +#: check.c:713 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Seul l'utilisateur d'installation peut être défini dans la nouvelle instance.\n" -#: check.c:731 +#: check.c:733 #, c-format msgid "Checking database connection settings" msgstr "Vérification des paramètres de connexion de la base de données" -#: check.c:753 +#: check.c:755 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 ne doit pas autoriser les connexions, ie pg_database.datallowconn doit valoir false\n" -#: check.c:763 +#: check.c:765 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Toutes les bases de données, autre que template0, doivent autoriser les connexions, ie pg_database.datallowconn doit valoir true\n" -#: check.c:788 +#: check.c:790 #, c-format msgid "Checking for prepared transactions" msgstr "Vérification des transactions préparées" -#: check.c:797 +#: check.c:799 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "L'instance source contient des transactions préparées\n" -#: check.c:799 +#: check.c:801 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "L'instance cible contient des transactions préparées\n" -#: check.c:825 +#: check.c:827 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Vérification de contrib/isn avec une différence sur le passage des bigint" -#: check.c:886 check.c:998 check.c:1089 function.c:268 version.c:248 -#: version.c:285 +#: check.c:888 check.c:947 check.c:1006 check.c:1035 function.c:268 +#: version.c:281 version.c:318 #, c-format msgid "fatal\n" msgstr "fatal\n" -#: check.c:887 +#: check.c:889 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -286,10 +286,34 @@ #: check.c:919 #, c-format +msgid "Checking for system-defined composite types in user tables" +msgstr "Vérification des types composites systèmes dans les tables utilisateurs" + +#: check.c:948 +#, c-format +msgid "" +"Your installation contains system-defined composite type(s) in user tables.\n" +"These type OIDs are not stable across PostgreSQL versions,\n" +"so this cluster cannot currently be upgraded. You can\n" +"drop the problem columns and restart the upgrade.\n" +"A list of the problem columns is in the file:\n" +" %s\n" +"\n" +msgstr "" +"Votre installation contient des types composites systèmes dans les tables utilisateurs.\n" +"Les OID de ces types ne sont pas stables entre les versions de PosgreSQL,\n" +"donc cette instance ne peut pas être mise à jour pour l'instant. Vous pouvez\n" +"supprimer les colonnes problématiques et relancer la mise à jour.\n" +"Vous trouverez une liste des colonnes problématiques dans le fichier :\n" +" %s\n" +"\n" + +#: check.c:976 +#, c-format msgid "Checking for reg* data types in user tables" msgstr "Vérification des types de données reg* dans les tables utilisateurs" -#: check.c:999 +#: check.c:1007 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" @@ -309,12 +333,12 @@ " %s\n" "\n" -#: check.c:1024 +#: check.c:1029 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Vérification des types de données « jsonb » incompatibles" -#: check.c:1090 +#: check.c:1036 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" @@ -332,32 +356,32 @@ " %s\n" "\n" -#: check.c:1111 +#: check.c:1057 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Vérification des rôles commençant avec « pg_ »" -#: check.c:1121 +#: check.c:1067 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "L'instance source contient des rôles commençant avec « pg_ »\n" -#: check.c:1123 +#: check.c:1069 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "L'instance cible contient des rôles commençant avec « pg_ »\n" -#: check.c:1149 +#: check.c:1095 #, c-format msgid "failed to get the current locale\n" msgstr "a échoué pour obtenir la locale courante\n" -#: check.c:1158 +#: check.c:1104 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "a échoué pour obtenir le nom de la locale système « %s »\n" -#: check.c:1164 +#: check.c:1110 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "a échoué pour restaurer l'ancienne locale « %s »\n" @@ -1519,7 +1543,7 @@ msgid "Checking for large objects" msgstr "Vérification des Large Objects" -#: version.c:80 version.c:387 +#: version.c:80 version.c:420 #, c-format msgid "warning" msgstr "attention" @@ -1560,12 +1584,12 @@ "défaut.\n" "\n" -#: version.c:242 +#: version.c:275 #, c-format msgid "Checking for incompatible \"line\" data type" msgstr "Vérification des types de données line incompatibles" -#: version.c:249 +#: version.c:282 #, c-format msgid "" "Your installation contains the \"line\" data type in user tables. This\n" @@ -1584,12 +1608,12 @@ " %s\n" "\n" -#: version.c:279 +#: version.c:312 #, c-format msgid "Checking for invalid \"unknown\" user columns" msgstr "Vérification des colonnes utilisateurs « unknown » invalides" -#: version.c:286 +#: version.c:319 #, c-format msgid "" "Your installation contains the \"unknown\" data type in user tables. This\n" @@ -1607,12 +1631,12 @@ " %s\n" "\n" -#: version.c:309 +#: version.c:342 #, c-format msgid "Checking for hash indexes" msgstr "Vérification des index hash" -#: version.c:389 +#: version.c:422 #, c-format msgid "" "\n" @@ -1629,7 +1653,7 @@ "REINDEX vous seront données.\n" "\n" -#: version.c:395 +#: version.c:428 #, c-format msgid "" "\n" @@ -1650,29 +1674,33 @@ "index invalides. Avant cela, aucun de ces index ne sera utilisé.\n" "\n" -#~ msgid "could not parse PG_VERSION file from %s\n" -#~ msgstr "n'a pas pu analyser le fichier PG_VERSION à partir de %s\n" - -#~ msgid "cannot write to log file %s\n" -#~ msgstr "ne peut pas écrire dans le fichier de traces %s\n" - -#~ msgid "cannot find current directory\n" -#~ msgstr "ne peut pas trouver le répertoire courant\n" - -#~ msgid "Cannot open file %s: %m\n" -#~ msgstr "Ne peut pas ouvrir le fichier %s : %m\n" +#~ msgid "" +#~ "Optimizer statistics and free space information are not transferred\n" +#~ "by pg_upgrade so, once you start the new server, consider running:\n" +#~ " %s\n" +#~ "\n" +#~ msgstr "" +#~ "Les statistiques de l'optimiseur et les informations sur l'espace libre\n" +#~ "ne sont pas transférées par pg_upgrade, donc une fois le nouveau\n" +#~ "serveur démarré, pensez à exécuter :\n" +#~ " %s\n" +#~ "\n" -#~ msgid "Cannot read line %d from %s: %m\n" -#~ msgstr "Ne peut pas lire la ligne %d à partir de %s : %m\n" +#~ msgid "------------------------------------------------\n" +#~ msgstr "------------------------------------------------\n" -#~ msgid "Checking for invalid \"line\" user columns" -#~ msgstr "Vérification des colonnes utilisateurs « line » invalides" +#~ msgid "-----------------------------\n" +#~ msgstr "-----------------------------\n" -#~ msgid "----------------\n" -#~ msgstr "----------------\n" +#~ msgid "" +#~ "This utility can only upgrade to PostgreSQL version 9.0 after 2010-01-11\n" +#~ "because of backend API changes made during development.\n" +#~ msgstr "" +#~ "Cet outil peut seulement mettre à jour à partir de la version 9.0 de PostgreSQL (après le 11 janvier 2010)\n" +#~ "à cause de changements dans l'API du moteur fait lors du développement.\n" -#~ msgid "------------------\n" -#~ msgstr "------------------\n" +#~ msgid "%s is not a directory\n" +#~ msgstr "%s n'est pas un répertoire\n" #~ msgid "" #~ "could not load library \"%s\":\n" @@ -1681,30 +1709,26 @@ #~ "n'a pas pu charger la biblothèque « %s »:\n" #~ "%s\n" -#~ msgid "%s is not a directory\n" -#~ msgstr "%s n'est pas un répertoire\n" +#~ msgid "------------------\n" +#~ msgstr "------------------\n" -#~ msgid "" -#~ "This utility can only upgrade to PostgreSQL version 9.0 after 2010-01-11\n" -#~ "because of backend API changes made during development.\n" -#~ msgstr "" -#~ "Cet outil peut seulement mettre à jour à partir de la version 9.0 de PostgreSQL (après le 11 janvier 2010)\n" -#~ "à cause de changements dans l'API du moteur fait lors du développement.\n" +#~ msgid "----------------\n" +#~ msgstr "----------------\n" -#~ msgid "-----------------------------\n" -#~ msgstr "-----------------------------\n" +#~ msgid "Checking for invalid \"line\" user columns" +#~ msgstr "Vérification des colonnes utilisateurs « line » invalides" -#~ msgid "------------------------------------------------\n" -#~ msgstr "------------------------------------------------\n" +#~ msgid "Cannot read line %d from %s: %m\n" +#~ msgstr "Ne peut pas lire la ligne %d à partir de %s : %m\n" -#~ msgid "" -#~ "Optimizer statistics and free space information are not transferred\n" -#~ "by pg_upgrade so, once you start the new server, consider running:\n" -#~ " %s\n" -#~ "\n" -#~ msgstr "" -#~ "Les statistiques de l'optimiseur et les informations sur l'espace libre\n" -#~ "ne sont pas transférées par pg_upgrade, donc une fois le nouveau\n" -#~ "serveur démarré, pensez à exécuter :\n" -#~ " %s\n" -#~ "\n" +#~ msgid "Cannot open file %s: %m\n" +#~ msgstr "Ne peut pas ouvrir le fichier %s : %m\n" + +#~ msgid "cannot find current directory\n" +#~ msgstr "ne peut pas trouver le répertoire courant\n" + +#~ msgid "cannot write to log file %s\n" +#~ msgstr "ne peut pas écrire dans le fichier de traces %s\n" + +#~ msgid "could not parse PG_VERSION file from %s\n" +#~ msgstr "n'a pas pu analyser le fichier PG_VERSION à partir de %s\n" diff -Nru postgresql-10-10.16/src/bin/pg_upgrade/version.c postgresql-10-10.17/src/bin/pg_upgrade/version.c --- postgresql-10-10.16/src/bin/pg_upgrade/version.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/bin/pg_upgrade/version.c 2021-05-10 20:47:56.000000000 +0000 @@ -100,17 +100,22 @@ /* - * check_for_data_type_usage - * Detect whether there are any stored columns depending on the given type + * check_for_data_types_usage() + * Detect whether there are any stored columns depending on given type(s) * * If so, write a report to the given file name, and return true. * - * We check for the type in tables, matviews, and indexes, but not views; + * base_query should be a SELECT yielding a single column named "oid", + * containing the pg_type OIDs of one or more types that are known to have + * inconsistent on-disk representations across server versions. + * + * We check for the type(s) in tables, matviews, and indexes, but not views; * there's no storage involved in a view. */ -static bool -check_for_data_type_usage(ClusterInfo *cluster, const char *typename, - char *output_path) +bool +check_for_data_types_usage(ClusterInfo *cluster, + const char *base_query, + const char *output_path) { bool found = false; FILE *script = NULL; @@ -130,7 +135,7 @@ i_attname; /* - * The type of interest might be wrapped in a domain, array, + * The type(s) of interest might be wrapped in a domain, array, * composite, or range, and these container types can be nested (to * varying extents depending on server version, but that's not of * concern here). To handle all these cases we need a recursive CTE. @@ -138,8 +143,8 @@ initPQExpBuffer(&querybuf); appendPQExpBuffer(&querybuf, "WITH RECURSIVE oids AS ( " - /* the target type itself */ - " SELECT '%s'::pg_catalog.regtype AS oid " + /* start with the type(s) returned by base_query */ + " %s " " UNION ALL " " SELECT * FROM ( " /* inner WITH because we can only reference the CTE once */ @@ -157,7 +162,7 @@ " c.oid = a.attrelid AND " " NOT a.attisdropped AND " " a.atttypid = x.oid ", - typename); + base_query); /* Ranges came in in 9.2 */ if (GET_MAJOR_VERSION(cluster->major_version) >= 902) @@ -224,6 +229,34 @@ return found; } + +/* + * check_for_data_type_usage() + * Detect whether there are any stored columns depending on the given type + * + * If so, write a report to the given file name, and return true. + * + * typename should be a fully qualified type name. This is just a + * trivial wrapper around check_for_data_types_usage() to convert a + * type name into a base query. + */ +bool +check_for_data_type_usage(ClusterInfo *cluster, + const char *typename, + const char *output_path) +{ + bool found; + char *base_query; + + base_query = psprintf("SELECT '%s'::pg_catalog.regtype AS oid", + typename); + + found = check_for_data_types_usage(cluster, base_query, output_path); + + free(base_query); + + return found; +} /* diff -Nru postgresql-10-10.16/src/bin/pg_waldump/pg_waldump.c postgresql-10-10.17/src/bin/pg_waldump/pg_waldump.c --- postgresql-10-10.16/src/bin/pg_waldump/pg_waldump.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/bin/pg_waldump/pg_waldump.c 2021-05-10 20:47:56.000000000 +0000 @@ -424,6 +424,15 @@ recid = XLogRecGetInfo(record) >> 4; + /* + * XACT records need to be handled differently. Those records use the + * first bit of those four bits for an optional flag variable and the + * following three bits for the opcode. We filter opcode out of xl_info + * and use it as the identifier of the record. + */ + if (rmid == RM_XACT_ID) + recid &= 0x07; + stats->record_stats[rmid][recid].count++; stats->record_stats[rmid][recid].rec_len += rec_len; stats->record_stats[rmid][recid].fpi_len += fpi_len; diff -Nru postgresql-10-10.16/src/bin/psql/command.c postgresql-10-10.17/src/bin/psql/command.c --- postgresql-10-10.16/src/bin/psql/command.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/bin/psql/command.c 2021-05-10 20:47:56.000000000 +0000 @@ -11,6 +11,7 @@ #include #include #include +#include #ifndef WIN32 #include /* for stat() */ #include /* open() flags */ @@ -3095,6 +3096,25 @@ if (strcmp(replci->keyword, "password") == 0) have_password = true; } + else if (!reuse_previous) + { + /* + * When we have a connstring and are not re-using + * parameters, swap *all* entries, even those not set + * by the connstring. This avoids absorbing + * environment-dependent defaults from the result of + * PQconndefaults(). We don't want to do that because + * they'd override service-file entries if the + * connstring specifies a service parameter, whereas + * the priority should be the other way around. libpq + * can certainly recompute any defaults we don't pass + * here. (In this situation, it's a bit wasteful to + * have called PQconndefaults() at all, but not doing + * so would require yet another major code path here.) + */ + replci->val = ci->val; + ci->val = NULL; + } } Assert(ci->keyword == NULL && replci->keyword == NULL); @@ -3619,7 +3639,6 @@ const char *fname; bool error = false; int fd; - struct stat before, after; @@ -3644,13 +3663,13 @@ !ret ? strerror(errno) : ""); return false; } +#endif /* * No canonicalize_path() here. EDIT.EXE run from CMD.EXE prepends the * current directory to the supplied path unless we use only * backslashes, so we do that. */ -#endif #ifndef WIN32 snprintf(fnametmp, sizeof(fnametmp), "%s%spsql.edit.%d.sql", tmpdir, "/", (int) getpid()); @@ -3699,6 +3718,24 @@ psql_error("%s: %s\n", fname, strerror(errno)); error = true; } + else + { + struct utimbuf ut; + + /* + * Try to set the file modification time of the temporary file + * a few seconds in the past. Otherwise, the low granularity + * (one second, or even worse on some filesystems) that we can + * portably measure with stat(2) could lead us to not + * recognize a modification, if the user typed very quickly. + * + * This is a rather unlikely race condition, so don't error + * out if the utime(2) call fails --- that would make the cure + * worse than the disease. + */ + ut.modtime = ut.actime = time(NULL) - 2; + (void) utime(fname, &ut); + } } } @@ -3718,7 +3755,10 @@ error = true; } - if (!error && before.st_mtime != after.st_mtime) + /* file was edited if the size or modification time has changed */ + if (!error && + (before.st_size != after.st_size || + before.st_mtime != after.st_mtime)) { stream = fopen(fname, PG_BINARY_R); if (!stream) diff -Nru postgresql-10-10.16/src/include/c.h postgresql-10-10.17/src/include/c.h --- postgresql-10-10.16/src/include/c.h 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/include/c.h 2021-05-10 20:47:56.000000000 +0000 @@ -140,6 +140,18 @@ #endif /* + * Place this macro before functions that should be allowed to make misaligned + * accesses. Think twice before using it on non-x86-specific code! + * Testing can be done with "-fsanitize=alignment -fsanitize-trap=alignment" + * on clang, or "-fsanitize=alignment -fno-sanitize-recover=alignment" on gcc. + */ +#if __clang_major__ >= 7 || __GNUC__ >= 8 +#define pg_attribute_no_sanitize_alignment() __attribute__((no_sanitize("alignment"))) +#else +#define pg_attribute_no_sanitize_alignment() +#endif + +/* * Append PG_USED_FOR_ASSERTS_ONLY to definitions of variables that are only * used in assert-enabled builds, to avoid compiler warnings about unused * variables in assert-disabled builds. diff -Nru postgresql-10-10.16/src/include/executor/executor.h postgresql-10-10.17/src/include/executor/executor.h --- postgresql-10-10.16/src/include/executor/executor.h 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/include/executor/executor.h 2021-05-10 20:47:56.000000000 +0000 @@ -263,6 +263,12 @@ TupleTableSlot *slot, PlanState *parent, TupleDesc inputDesc); +extern ProjectionInfo *ExecBuildProjectionInfoExt(List *targetList, + ExprContext *econtext, + TupleTableSlot *slot, + bool assignJunkEntries, + PlanState *parent, + TupleDesc inputDesc); extern ExprState *ExecPrepareExpr(Expr *node, EState *estate); extern ExprState *ExecPrepareQual(List *qual, EState *estate); extern ExprState *ExecPrepareCheck(List *qual, EState *estate); diff -Nru postgresql-10-10.16/src/include/nodes/relation.h postgresql-10-10.17/src/include/nodes/relation.h --- postgresql-10-10.16/src/include/nodes/relation.h 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/include/nodes/relation.h 2021-05-10 20:47:56.000000000 +0000 @@ -722,7 +722,7 @@ Oid statOid; /* OID of the statistics row */ RelOptInfo *rel; /* back-link to statistic's table */ - char kind; /* statistic kind of this entry */ + char kind; /* statistics kind of this entry */ Bitmapset *keys; /* attnums of the columns covered */ } StatisticExtInfo; diff -Nru postgresql-10-10.16/src/include/pg_config.h.win32 postgresql-10-10.17/src/include/pg_config.h.win32 --- postgresql-10-10.16/src/include/pg_config.h.win32 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/include/pg_config.h.win32 2021-05-10 20:47:56.000000000 +0000 @@ -579,10 +579,10 @@ #define PACKAGE_NAME "PostgreSQL" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "PostgreSQL 10.16" +#define PACKAGE_STRING "PostgreSQL 10.17" /* Define to the version of this package. */ -#define PACKAGE_VERSION "10.16" +#define PACKAGE_VERSION "10.17" /* Define to the name of a signed 128-bit integer type. */ #undef PG_INT128_TYPE @@ -591,10 +591,10 @@ #define PG_INT64_TYPE long long int /* PostgreSQL version as a string */ -#define PG_VERSION "10.16" +#define PG_VERSION "10.17" /* PostgreSQL version as a number */ -#define PG_VERSION_NUM 100016 +#define PG_VERSION_NUM 100017 /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "postgresql" diff -Nru postgresql-10-10.16/src/include/port/freebsd.h postgresql-10-10.17/src/include/port/freebsd.h --- postgresql-10-10.16/src/include/port/freebsd.h 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/include/port/freebsd.h 2021-05-10 20:47:56.000000000 +0000 @@ -1 +1,10 @@ /* src/include/port/freebsd.h */ + +/* + * Set the default wal_sync_method to fdatasync. xlogdefs.h's normal rules + * would prefer open_datasync on FreeBSD 13+, but that is not a good choice on + * many systems. + */ +#ifdef HAVE_FDATASYNC +#define PLATFORM_DEFAULT_SYNC_METHOD SYNC_METHOD_FDATASYNC +#endif diff -Nru postgresql-10-10.16/src/include/tsearch/dicts/spell.h postgresql-10-10.17/src/include/tsearch/dicts/spell.h --- postgresql-10-10.16/src/include/tsearch/dicts/spell.h 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/include/tsearch/dicts/spell.h 2021-05-10 20:47:56.000000000 +0000 @@ -82,6 +82,17 @@ #define SPELLHDRSZ (offsetof(SPELL, word)) /* + * If an affix uses a regex, we have to store that separately in a struct + * that won't move around when arrays of affixes are enlarged or sorted. + * This is so that it can be found to be cleaned up at context destruction. + */ +typedef struct aff_regex_struct +{ + regex_t regex; + MemoryContextCallback mcallback; +} aff_regex_struct; + +/* * Represents an entry in an affix list. */ typedef struct aff_struct @@ -97,7 +108,7 @@ char *repl; union { - regex_t regex; + aff_regex_struct *pregex; Regis regis; } reg; } AFFIX; diff -Nru postgresql-10-10.16/src/include/utils/array.h postgresql-10-10.17/src/include/utils/array.h --- postgresql-10-10.16/src/include/utils/array.h 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/include/utils/array.h 2021-05-10 20:47:56.000000000 +0000 @@ -433,6 +433,7 @@ extern int ArrayGetOffset(int n, const int *dim, const int *lb, const int *indx); extern int ArrayGetOffset0(int n, const int *tup, const int *scale); extern int ArrayGetNItems(int ndim, const int *dims); +extern void ArrayCheckBounds(int ndim, const int *dims, const int *lb); extern void mda_get_range(int n, int *span, const int *st, const int *endp); extern void mda_get_prod(int n, const int *range, int *prod); extern void mda_get_offset_values(int n, int *dist, const int *prod, const int *span); diff -Nru postgresql-10-10.16/src/interfaces/ecpg/pgtypeslib/interval.c postgresql-10-10.17/src/interfaces/ecpg/pgtypeslib/interval.c --- postgresql-10-10.16/src/interfaces/ecpg/pgtypeslib/interval.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/interfaces/ecpg/pgtypeslib/interval.c 2021-05-10 20:47:56.000000000 +0000 @@ -167,7 +167,7 @@ { case 'Y': tm->tm_year += val; - tm->tm_mon += (fval * 12); + tm->tm_mon += (fval * MONTHS_PER_YEAR); break; case 'M': tm->tm_mon += val; @@ -202,7 +202,7 @@ return DTERR_BAD_FORMAT; tm->tm_year += val; - tm->tm_mon += (fval * 12); + tm->tm_mon += (fval * MONTHS_PER_YEAR); if (unit == '\0') return 0; if (unit == 'T') diff -Nru postgresql-10-10.16/src/interfaces/libpq/fe-protocol3.c postgresql-10-10.17/src/interfaces/libpq/fe-protocol3.c --- postgresql-10-10.16/src/interfaces/libpq/fe-protocol3.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/interfaces/libpq/fe-protocol3.c 2021-05-10 20:47:56.000000000 +0000 @@ -293,8 +293,6 @@ /* First 'T' in a query sequence */ if (getRowDescriptions(conn, msgLength)) return; - /* getRowDescriptions() moves inStart itself */ - continue; } else { @@ -340,8 +338,7 @@ case 't': /* Parameter Description */ if (getParamDescriptions(conn, msgLength)) return; - /* getParamDescriptions() moves inStart itself */ - continue; + break; case 'D': /* Data Row */ if (conn->result != NULL && conn->result->resultStatus == PGRES_TUPLES_OK) @@ -349,8 +346,6 @@ /* Read another tuple of a normal query response */ if (getAnotherTuple(conn, msgLength)) return; - /* getAnotherTuple() moves inStart itself */ - continue; } else if (conn->result != NULL && conn->result->resultStatus == PGRES_FATAL_ERROR) @@ -467,7 +462,6 @@ * command for a prepared statement) containing the attribute data. * Returns: 0 if processed message successfully, EOF to suspend parsing * (the latter case is not actually used currently). - * In the former case, conn->inStart has been advanced past the message. */ static int getRowDescriptions(PGconn *conn, int msgLength) @@ -572,19 +566,9 @@ result->binary = 0; } - /* Sanity check that we absorbed all the data */ - if (conn->inCursor != conn->inStart + 5 + msgLength) - { - errmsg = libpq_gettext("extraneous data in \"T\" message"); - goto advance_and_error; - } - /* Success! */ conn->result = result; - /* Advance inStart to show that the "T" message has been processed. */ - conn->inStart = conn->inCursor; - /* * If we're doing a Describe, we're done, and ready to pass the result * back to the client. @@ -608,9 +592,6 @@ if (result && result != conn->result) PQclear(result); - /* Discard the failed message by pretending we read it */ - conn->inStart += 5 + msgLength; - /* * Replace partially constructed result with an error result. First * discard the old result to try to win back some memory. @@ -630,6 +611,12 @@ pqSaveErrorResult(conn); /* + * Show the message as fully consumed, else pqParseInput3 will overwrite + * our error with a complaint about that. + */ + conn->inCursor = conn->inStart + 5 + msgLength; + + /* * Return zero to allow input parsing to continue. Subsequent "D" * messages will be ignored until we get to end of data, since an error * result is already set up. @@ -640,12 +627,8 @@ /* * parseInput subroutine to read a 't' (ParameterDescription) message. * We'll build a new PGresult structure containing the parameter data. - * Returns: 0 if completed message, EOF if not enough data yet. - * In the former case, conn->inStart has been advanced past the message. - * - * Note that if we run out of data, we have to release the partially - * constructed PGresult, and rebuild it again next time. Fortunately, - * that shouldn't happen often, since 't' messages usually fit in a packet. + * Returns: 0 if processed message successfully, EOF to suspend parsing + * (the latter case is not actually used currently). */ static int getParamDescriptions(PGconn *conn, int msgLength) @@ -685,33 +668,19 @@ result->paramDescs[i].typid = typid; } - /* Sanity check that we absorbed all the data */ - if (conn->inCursor != conn->inStart + 5 + msgLength) - { - errmsg = libpq_gettext("extraneous data in \"t\" message"); - goto advance_and_error; - } - /* Success! */ conn->result = result; - /* Advance inStart to show that the "t" message has been processed. */ - conn->inStart = conn->inCursor; - return 0; not_enough_data: - PQclear(result); - return EOF; + errmsg = libpq_gettext("insufficient data in \"t\" message"); advance_and_error: /* Discard unsaved result, if any */ if (result && result != conn->result) PQclear(result); - /* Discard the failed message by pretending we read it */ - conn->inStart += 5 + msgLength; - /* * Replace partially constructed result with an error result. First * discard the old result to try to win back some memory. @@ -730,6 +699,12 @@ pqSaveErrorResult(conn); /* + * Show the message as fully consumed, else pqParseInput3 will overwrite + * our error with a complaint about that. + */ + conn->inCursor = conn->inStart + 5 + msgLength; + + /* * Return zero to allow input parsing to continue. Essentially, we've * replaced the COMMAND_OK result with an error result, but since this * doesn't affect the protocol state, it's fine. @@ -742,7 +717,6 @@ * We fill rowbuf with column pointers and then call the row processor. * Returns: 0 if processed message successfully, EOF to suspend parsing * (the latter case is not actually used currently). - * In the former case, conn->inStart has been advanced past the message. */ static int getAnotherTuple(PGconn *conn, int msgLength) @@ -815,28 +789,14 @@ } } - /* Sanity check that we absorbed all the data */ - if (conn->inCursor != conn->inStart + 5 + msgLength) - { - errmsg = libpq_gettext("extraneous data in \"D\" message"); - goto advance_and_error; - } - - /* Advance inStart to show that the "D" message has been processed. */ - conn->inStart = conn->inCursor; - /* Process the collected row */ errmsg = NULL; if (pqRowProcessor(conn, &errmsg)) return 0; /* normal, successful exit */ - goto set_error_result; /* pqRowProcessor failed, report it */ + /* pqRowProcessor failed, fall through to report it */ advance_and_error: - /* Discard the failed message by pretending we read it */ - conn->inStart += 5 + msgLength; - -set_error_result: /* * Replace partially constructed result with an error result. First @@ -857,6 +817,12 @@ pqSaveErrorResult(conn); /* + * Show the message as fully consumed, else pqParseInput3 will overwrite + * our error with a complaint about that. + */ + conn->inCursor = conn->inStart + 5 + msgLength; + + /* * Return zero to allow input parsing to continue. Subsequent "D" * messages will be ignored until we get to end of data, since an error * result is already set up. diff -Nru postgresql-10-10.16/src/interfaces/libpq/libpq-dist.rc postgresql-10-10.17/src/interfaces/libpq/libpq-dist.rc --- postgresql-10-10.16/src/interfaces/libpq/libpq-dist.rc 2021-02-08 22:12:29.000000000 +0000 +++ postgresql-10-10.17/src/interfaces/libpq/libpq-dist.rc 2021-05-10 20:58:58.000000000 +0000 @@ -1,8 +1,8 @@ #include VS_VERSION_INFO VERSIONINFO - FILEVERSION 10,0,16,21039 - PRODUCTVERSION 10,0,16,21039 + FILEVERSION 10,0,17,21130 + PRODUCTVERSION 10,0,17,21130 FILEFLAGSMASK 0x3fL FILEFLAGS 0 FILEOS VOS__WINDOWS32 @@ -15,13 +15,13 @@ BEGIN VALUE "CompanyName", "\0" VALUE "FileDescription", "PostgreSQL Access Library\0" - VALUE "FileVersion", "10.16\0" + VALUE "FileVersion", "10.17\0" VALUE "InternalName", "libpq\0" VALUE "LegalCopyright", "Copyright (C) 2017\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "libpq.dll\0" VALUE "ProductName", "PostgreSQL\0" - VALUE "ProductVersion", "10.16\0" + VALUE "ProductVersion", "10.17\0" END END BLOCK "VarFileInfo" diff -Nru postgresql-10-10.16/src/interfaces/libpq/libpq.rc.in postgresql-10-10.17/src/interfaces/libpq/libpq.rc.in --- postgresql-10-10.16/src/interfaces/libpq/libpq.rc.in 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/interfaces/libpq/libpq.rc.in 2021-05-10 20:47:56.000000000 +0000 @@ -1,8 +1,8 @@ #include VS_VERSION_INFO VERSIONINFO - FILEVERSION 10,0,16,0 - PRODUCTVERSION 10,0,16,0 + FILEVERSION 10,0,17,0 + PRODUCTVERSION 10,0,17,0 FILEFLAGSMASK 0x3fL FILEFLAGS 0 FILEOS VOS__WINDOWS32 @@ -15,13 +15,13 @@ BEGIN VALUE "CompanyName", "\0" VALUE "FileDescription", "PostgreSQL Access Library\0" - VALUE "FileVersion", "10.16\0" + VALUE "FileVersion", "10.17\0" VALUE "InternalName", "libpq\0" VALUE "LegalCopyright", "Copyright (C) 2017\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "libpq.dll\0" VALUE "ProductName", "PostgreSQL\0" - VALUE "ProductVersion", "10.16\0" + VALUE "ProductVersion", "10.17\0" END END BLOCK "VarFileInfo" diff -Nru postgresql-10-10.16/src/interfaces/libpq/po/de.po postgresql-10-10.17/src/interfaces/libpq/po/de.po --- postgresql-10-10.16/src/interfaces/libpq/po/de.po 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/interfaces/libpq/po/de.po 2021-05-10 20:47:56.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PostgreSQL 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2019-08-05 07:48+0000\n" +"POT-Creation-Date: 2021-05-06 21:55+0000\n" "PO-Revision-Date: 2018-02-03 11:37-0500\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -50,14 +50,14 @@ #: fe-auth-scram.c:400 fe-auth-scram.c:420 fe-auth-scram.c:445 #: fe-auth-scram.c:459 fe-auth-scram.c:508 fe-auth-scram.c:540 fe-auth.c:227 #: fe-auth.c:362 fe-auth.c:432 fe-auth.c:467 fe-auth.c:609 fe-auth.c:768 -#: fe-auth.c:1080 fe-auth.c:1228 fe-connect.c:834 fe-connect.c:1263 -#: fe-connect.c:1439 fe-connect.c:1921 fe-connect.c:1944 fe-connect.c:2605 -#: fe-connect.c:4151 fe-connect.c:4403 fe-connect.c:4522 fe-connect.c:4776 -#: fe-connect.c:4856 fe-connect.c:4955 fe-connect.c:5211 fe-connect.c:5240 -#: fe-connect.c:5312 fe-connect.c:5336 fe-connect.c:5354 fe-connect.c:5455 -#: fe-connect.c:5464 fe-connect.c:5820 fe-connect.c:5970 fe-exec.c:2705 +#: fe-auth.c:1080 fe-auth.c:1228 fe-connect.c:830 fe-connect.c:1259 +#: fe-connect.c:1435 fe-connect.c:1917 fe-connect.c:1940 fe-connect.c:2601 +#: fe-connect.c:4146 fe-connect.c:4398 fe-connect.c:4517 fe-connect.c:4771 +#: fe-connect.c:4851 fe-connect.c:4950 fe-connect.c:5206 fe-connect.c:5235 +#: fe-connect.c:5307 fe-connect.c:5331 fe-connect.c:5349 fe-connect.c:5450 +#: fe-connect.c:5459 fe-connect.c:5815 fe-connect.c:5965 fe-exec.c:2705 #: fe-exec.c:3452 fe-exec.c:3617 fe-lobj.c:896 fe-protocol2.c:1214 -#: fe-protocol3.c:1000 fe-protocol3.c:1686 fe-secure-openssl.c:521 +#: fe-protocol3.c:966 fe-protocol3.c:1652 fe-secure-openssl.c:521 #: fe-secure-openssl.c:1145 msgid "out of memory\n" msgstr "Speicher aufgebraucht\n" @@ -180,12 +180,12 @@ msgid "user name lookup failure: error code %lu\n" msgstr "Fehler beim Nachschlagen des Benutzernamens: Fehlercode %lu\n" -#: fe-auth.c:1065 fe-connect.c:2532 +#: fe-auth.c:1065 fe-connect.c:2528 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "konnte lokale Benutzer-ID %d nicht nachschlagen: %s\n" -#: fe-auth.c:1070 fe-connect.c:2537 +#: fe-auth.c:1070 fe-connect.c:2533 #, c-format msgid "local user with ID %d does not exist\n" msgstr "lokaler Benutzer mit ID %d existiert nicht\n" @@ -203,37 +203,37 @@ msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "unbekannter Passwortverschlüsselungsalgorithmus »%s«\n" -#: fe-connect.c:1017 +#: fe-connect.c:1013 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "fehlerhafte Angabe: %d Hostnamen und %d hostaddr-Angaben\n" -#: fe-connect.c:1093 +#: fe-connect.c:1089 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "fehlerhafte Angabe: %d Portnummern und %d Hosts\n" -#: fe-connect.c:1189 +#: fe-connect.c:1185 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "ungültiger sslmode-Wert: »%s«\n" -#: fe-connect.c:1210 +#: fe-connect.c:1206 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "sslmode-Wert »%s« ist ungültig, wenn SSL-Unterstützung nicht einkompiliert worden ist\n" -#: fe-connect.c:1245 +#: fe-connect.c:1241 #, c-format msgid "invalid target_session_attrs value: \"%s\"\n" msgstr "ungültiger target_session_attrs-Wert: »%s«\n" -#: fe-connect.c:1463 +#: fe-connect.c:1459 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "konnte Socket nicht auf TCP »No Delay«-Modus umstellen: %s\n" -#: fe-connect.c:1493 +#: fe-connect.c:1489 #, c-format msgid "" "could not connect to server: %s\n" @@ -244,7 +244,7 @@ "\tLäuft der Server lokal und akzeptiert er Verbindungen\n" "\tauf dem Unix-Domain-Socket »%s«?\n" -#: fe-connect.c:1551 +#: fe-connect.c:1547 #, c-format msgid "" "could not connect to server: %s\n" @@ -255,7 +255,7 @@ "\tLäuft der Server auf dem Host »%s« (%s) und akzeptiert er\n" "\tTCP/IP-Verbindungen auf Port %s?\n" -#: fe-connect.c:1560 +#: fe-connect.c:1556 #, c-format msgid "" "could not connect to server: %s\n" @@ -266,286 +266,286 @@ "\tLäuft der Server auf dem Host »%s« und akzeptiert er\n" "\tTCP/IP-Verbindungen auf Port %s?\n" -#: fe-connect.c:1611 fe-connect.c:1643 fe-connect.c:1676 fe-connect.c:2324 +#: fe-connect.c:1607 fe-connect.c:1639 fe-connect.c:1672 fe-connect.c:2320 #, c-format msgid "setsockopt(%s) failed: %s\n" msgstr "setsockopt(%s) fehlgeschlagen: %s\n" -#: fe-connect.c:1725 +#: fe-connect.c:1721 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) fehlgeschlagen: %ui\n" -#: fe-connect.c:2034 +#: fe-connect.c:2030 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "ungültiger Verbindungszustand, möglicherweise ein Speicherproblem\n" -#: fe-connect.c:2100 +#: fe-connect.c:2096 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "ungültige Portnummer: »%s«\n" -#: fe-connect.c:2116 +#: fe-connect.c:2112 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "konnte Hostnamen »%s« nicht in Adresse übersetzen: %s\n" -#: fe-connect.c:2129 +#: fe-connect.c:2125 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "konnte Netzwerkadresse »%s« nicht interpretieren: %s\n" -#: fe-connect.c:2142 +#: fe-connect.c:2138 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Unix-Domain-Socket-Pfad »%s« ist zu lang (maximal %d Bytes)\n" -#: fe-connect.c:2157 +#: fe-connect.c:2153 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "konnte Unix-Domain-Socket-Pfad »%s« nicht in Adresse übersetzen: %s\n" -#: fe-connect.c:2261 +#: fe-connect.c:2257 #, c-format msgid "could not create socket: %s\n" msgstr "konnte Socket nicht erzeugen: %s\n" -#: fe-connect.c:2283 +#: fe-connect.c:2279 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "konnte Socket nicht auf nicht-blockierenden Modus umstellen: %s\n" -#: fe-connect.c:2293 +#: fe-connect.c:2289 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "konnte Socket nicht auf »Close on exec«-Modus umstellen: %s\n" -#: fe-connect.c:2311 +#: fe-connect.c:2307 msgid "keepalives parameter must be an integer\n" msgstr "Parameter »keepalives« muss eine ganze Zahl sein\n" -#: fe-connect.c:2449 +#: fe-connect.c:2445 #, c-format msgid "could not get socket error status: %s\n" msgstr "konnte Socket-Fehlerstatus nicht ermitteln: %s\n" -#: fe-connect.c:2477 +#: fe-connect.c:2473 #, c-format msgid "could not get client address from socket: %s\n" msgstr "konnte Client-Adresse vom Socket nicht ermitteln: %s\n" -#: fe-connect.c:2519 +#: fe-connect.c:2515 msgid "requirepeer parameter is not supported on this platform\n" msgstr "Parameter »requirepeer« wird auf dieser Plattform nicht unterstützt\n" -#: fe-connect.c:2522 +#: fe-connect.c:2518 #, c-format msgid "could not get peer credentials: %s\n" msgstr "konnte Credentials von Gegenstelle nicht ermitteln: %s\n" -#: fe-connect.c:2545 +#: fe-connect.c:2541 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer gibt »%s« an, aber tatsächlicher Benutzername der Gegenstelle ist »%s«\n" -#: fe-connect.c:2579 +#: fe-connect.c:2575 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "konnte Paket zur SSL-Verhandlung nicht senden: %s\n" -#: fe-connect.c:2618 +#: fe-connect.c:2614 #, c-format msgid "could not send startup packet: %s\n" msgstr "konnte Startpaket nicht senden: %s\n" -#: fe-connect.c:2688 +#: fe-connect.c:2684 msgid "server does not support SSL, but SSL was required\n" msgstr "Server unterstützt kein SSL, aber SSL wurde verlangt\n" -#: fe-connect.c:2714 +#: fe-connect.c:2710 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "ungültige Antwort auf SSL-Verhandlungspaket empfangen: %c\n" -#: fe-connect.c:2791 fe-connect.c:2824 +#: fe-connect.c:2787 fe-connect.c:2820 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "Authentifizierungsanfrage wurde vom Server erwartet, aber %c wurde empfangen\n" -#: fe-connect.c:3051 +#: fe-connect.c:3047 msgid "unexpected message from server during startup\n" msgstr "unerwartete Nachricht vom Server beim Start\n" -#: fe-connect.c:3281 +#: fe-connect.c:3277 #, c-format msgid "could not make a writable connection to server \"%s:%s\"\n" msgstr "konnte keine schreibbare Verbindung zum Server »%s:%s« aufbauen\n" -#: fe-connect.c:3327 +#: fe-connect.c:3323 #, c-format msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" msgstr "Test »SHOW transaction_read_only« fehlgeschlagen auf Server »%s:%s«\n" -#: fe-connect.c:3342 +#: fe-connect.c:3338 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "ungültiger Verbindungszustand %d, möglicherweise ein Speicherproblem\n" -#: fe-connect.c:3757 fe-connect.c:3817 +#: fe-connect.c:3752 fe-connect.c:3812 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc »%s« während PGEVT_CONNRESET-Ereignis fehlgeschlagen\n" -#: fe-connect.c:4164 +#: fe-connect.c:4159 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "ungültige LDAP-URL »%s«: Schema muss ldap:// sein\n" -#: fe-connect.c:4179 +#: fe-connect.c:4174 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "ungültige LDAP-URL »%s«: Distinguished Name fehlt\n" -#: fe-connect.c:4190 fe-connect.c:4243 +#: fe-connect.c:4185 fe-connect.c:4238 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "ungültige LDAP-URL »%s«: muss genau ein Attribut haben\n" -#: fe-connect.c:4200 fe-connect.c:4257 +#: fe-connect.c:4195 fe-connect.c:4252 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "ungültige LDAP-URL »%s«: Suchbereich fehlt (base/one/sub)\n" -#: fe-connect.c:4211 +#: fe-connect.c:4206 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "ungültige LDAP-URL »%s«: kein Filter\n" -#: fe-connect.c:4232 +#: fe-connect.c:4227 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "ungültige LDAP-URL »%s«: ungültige Portnummer\n" -#: fe-connect.c:4266 +#: fe-connect.c:4261 msgid "could not create LDAP structure\n" msgstr "konnte LDAP-Struktur nicht erzeugen\n" -#: fe-connect.c:4342 +#: fe-connect.c:4337 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "Suche auf LDAP-Server fehlgeschlagen: %s\n" -#: fe-connect.c:4353 +#: fe-connect.c:4348 msgid "more than one entry found on LDAP lookup\n" msgstr "LDAP-Suche ergab mehr als einen Eintrag\n" -#: fe-connect.c:4354 fe-connect.c:4366 +#: fe-connect.c:4349 fe-connect.c:4361 msgid "no entry found on LDAP lookup\n" msgstr "kein Eintrag gefunden bei LDAP-Suche\n" -#: fe-connect.c:4377 fe-connect.c:4390 +#: fe-connect.c:4372 fe-connect.c:4385 msgid "attribute has no values on LDAP lookup\n" msgstr "Attribut hat keine Werte bei LDAP-Suche\n" -#: fe-connect.c:4442 fe-connect.c:4461 fe-connect.c:4994 +#: fe-connect.c:4437 fe-connect.c:4456 fe-connect.c:4989 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "fehlendes »=« nach »%s« in der Zeichenkette der Verbindungsdaten\n" -#: fe-connect.c:4534 fe-connect.c:5179 fe-connect.c:5953 +#: fe-connect.c:4529 fe-connect.c:5174 fe-connect.c:5948 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "ungültige Verbindungsoption »%s«\n" -#: fe-connect.c:4550 fe-connect.c:5043 +#: fe-connect.c:4545 fe-connect.c:5038 msgid "unterminated quoted string in connection info string\n" msgstr "fehlendes schließendes Anführungszeichen (\") in der Zeichenkette der Verbindungsdaten\n" -#: fe-connect.c:4633 +#: fe-connect.c:4628 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "Definition von Service »%s« nicht gefunden\n" -#: fe-connect.c:4656 +#: fe-connect.c:4651 #, c-format msgid "service file \"%s\" not found\n" msgstr "Servicedatei »%s« nicht gefunden\n" -#: fe-connect.c:4671 +#: fe-connect.c:4666 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "Zeile %d zu lang in Servicedatei »%s«\n" -#: fe-connect.c:4744 fe-connect.c:4788 +#: fe-connect.c:4739 fe-connect.c:4783 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "Syntaxfehler in Servicedatei »%s«, Zeile %d\n" -#: fe-connect.c:4755 +#: fe-connect.c:4750 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "geschachtelte »service«-Definitionen werden nicht unterstützt in Servicedatei »%s«, Zeile %d\n" -#: fe-connect.c:5475 +#: fe-connect.c:5470 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "ungültige URI an interne Parserroutine weitergeleitet: »%s«\n" -#: fe-connect.c:5552 +#: fe-connect.c:5547 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "Ende der Eingabezeichenkette gefunden beim Suchen nach passendem »]« in IPv6-Hostadresse in URI: »%s«\n" -#: fe-connect.c:5559 +#: fe-connect.c:5554 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6-Hostadresse darf nicht leer sein in URI: »%s«\n" -#: fe-connect.c:5574 +#: fe-connect.c:5569 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "unerwartetes Zeichen »%c« an Position %d in URI (»:« oder »/« erwartet): »%s«\n" -#: fe-connect.c:5703 +#: fe-connect.c:5698 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "zusätzliches Schlüssel/Wert-Trennzeichen »=« in URI-Query-Parameter: »%s«\n" -#: fe-connect.c:5723 +#: fe-connect.c:5718 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "fehlendes Schlüssel/Wert-Trennzeichen »=« in URI-Query-Parameter: »%s«\n" -#: fe-connect.c:5774 +#: fe-connect.c:5769 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "ungültiger URI-Query-Parameter: »%s«\n" -#: fe-connect.c:5848 +#: fe-connect.c:5843 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "ungültiges Prozent-kodiertes Token: »%s«\n" -#: fe-connect.c:5858 +#: fe-connect.c:5853 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "verbotener Wert %%00 in Prozent-kodiertem Wert: »%s«\n" -#: fe-connect.c:6204 +#: fe-connect.c:6199 msgid "connection pointer is NULL\n" msgstr "Verbindung ist ein NULL-Zeiger\n" -#: fe-connect.c:6502 +#: fe-connect.c:6495 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "WARNUNG: Passwortdatei »%s« ist keine normale Datei\n" -#: fe-connect.c:6511 +#: fe-connect.c:6504 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "WARNUNG: Passwortdatei »%s« erlaubt Lesezugriff für Gruppe oder Andere; Rechte sollten u=rw (0600) oder weniger sein\n" -#: fe-connect.c:6605 +#: fe-connect.c:6616 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "Passwort wurde aus Datei »%s« gelesen\n" @@ -556,12 +556,12 @@ msgstr "Zeilennummer %d ist außerhalb des zulässigen Bereichs 0..%d" #: fe-exec.c:498 fe-protocol2.c:503 fe-protocol2.c:538 fe-protocol2.c:1057 -#: fe-protocol3.c:209 fe-protocol3.c:236 fe-protocol3.c:253 fe-protocol3.c:333 -#: fe-protocol3.c:728 fe-protocol3.c:959 +#: fe-protocol3.c:209 fe-protocol3.c:236 fe-protocol3.c:253 fe-protocol3.c:331 +#: fe-protocol3.c:697 fe-protocol3.c:925 msgid "out of memory" msgstr "Speicher aufgebraucht" -#: fe-exec.c:499 fe-protocol2.c:1403 fe-protocol3.c:1894 +#: fe-exec.c:499 fe-protocol2.c:1403 fe-protocol3.c:1860 #, c-format msgid "%s" msgstr "%s" @@ -633,7 +633,7 @@ msgstr "PQexec ist während COPY BOTH nicht erlaubt\n" #: fe-exec.c:2283 fe-exec.c:2350 fe-exec.c:2440 fe-protocol2.c:1360 -#: fe-protocol3.c:1825 +#: fe-protocol3.c:1791 msgid "no COPY in progress\n" msgstr "keine COPY in Ausführung\n" @@ -819,12 +819,12 @@ msgid "server sent binary data (\"B\" message) without prior row description (\"T\" message)" msgstr "Server sendete binäre Daten (»B«-Nachricht) ohne vorherige Zeilenbeschreibung (»T«-Nachricht)" -#: fe-protocol2.c:633 fe-protocol3.c:412 +#: fe-protocol2.c:633 fe-protocol3.c:407 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "unerwartete Antwort vom Server; erstes empfangenes Zeichen war »%c«\n" -#: fe-protocol2.c:762 fe-protocol2.c:937 fe-protocol3.c:627 fe-protocol3.c:854 +#: fe-protocol2.c:762 fe-protocol2.c:937 fe-protocol3.c:608 fe-protocol3.c:814 msgid "out of memory for query result" msgstr "Speicher für Anfrageergebnis aufgebraucht" @@ -833,124 +833,116 @@ msgid "lost synchronization with server, resetting connection" msgstr "Synchronisation mit Server verloren, Verbindung wird zurückgesetzt" -#: fe-protocol2.c:1549 fe-protocol2.c:1581 fe-protocol3.c:2097 +#: fe-protocol2.c:1549 fe-protocol2.c:1581 fe-protocol3.c:2063 #, c-format msgid "protocol error: id=0x%x\n" msgstr "Protokollfehler: id=0x%x\n" -#: fe-protocol3.c:368 +#: fe-protocol3.c:363 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "Server sendete Daten (»D«-Nachricht) ohne vorherige Zeilenbeschreibung (»T«-Nachricht)\n" -#: fe-protocol3.c:433 +#: fe-protocol3.c:428 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "Nachrichteninhalt stimmt nicht mit Länge in Nachrichtentyp »%c« überein\n" -#: fe-protocol3.c:454 +#: fe-protocol3.c:449 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "Synchronisation mit Server verloren: Nachrichtentyp »%c« empfangen, Länge %d\n" -#: fe-protocol3.c:505 fe-protocol3.c:545 +#: fe-protocol3.c:499 fe-protocol3.c:539 msgid "insufficient data in \"T\" message" msgstr "nicht genug Daten in »T«-Nachricht" -#: fe-protocol3.c:578 -msgid "extraneous data in \"T\" message" -msgstr "zu viele Daten in »T«-Nachricht" - -#: fe-protocol3.c:691 -msgid "extraneous data in \"t\" message" -msgstr "zu viele Daten in »t«-Nachricht" +#: fe-protocol3.c:677 +msgid "insufficient data in \"t\" message" +msgstr "nicht genug Daten in »t«-Nachricht" -#: fe-protocol3.c:762 fe-protocol3.c:794 fe-protocol3.c:812 +#: fe-protocol3.c:736 fe-protocol3.c:768 fe-protocol3.c:786 msgid "insufficient data in \"D\" message" msgstr "nicht genug Daten in »D«-Nachricht" -#: fe-protocol3.c:768 +#: fe-protocol3.c:742 msgid "unexpected field count in \"D\" message" msgstr "unerwartete Feldzahl in »D«-Nachricht" -#: fe-protocol3.c:821 -msgid "extraneous data in \"D\" message" -msgstr "zu viele Daten in »D«-Nachricht" - -#: fe-protocol3.c:1013 +#: fe-protocol3.c:979 msgid "no error message available\n" msgstr "keine Fehlermeldung verfügbar\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1043 fe-protocol3.c:1062 +#: fe-protocol3.c:1009 fe-protocol3.c:1028 #, c-format msgid " at character %s" msgstr " bei Zeichen %s" -#: fe-protocol3.c:1075 +#: fe-protocol3.c:1041 #, c-format msgid "DETAIL: %s\n" msgstr "DETAIL: %s\n" -#: fe-protocol3.c:1078 +#: fe-protocol3.c:1044 #, c-format msgid "HINT: %s\n" msgstr "TIP: %s\n" -#: fe-protocol3.c:1081 +#: fe-protocol3.c:1047 #, c-format msgid "QUERY: %s\n" msgstr "ANFRAGE: %s\n" -#: fe-protocol3.c:1088 +#: fe-protocol3.c:1054 #, c-format msgid "CONTEXT: %s\n" msgstr "KONTEXT: %s\n" -#: fe-protocol3.c:1097 +#: fe-protocol3.c:1063 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "SCHEMANAME: %s\n" -#: fe-protocol3.c:1101 +#: fe-protocol3.c:1067 #, c-format msgid "TABLE NAME: %s\n" msgstr "TABELLENNAME: %s\n" -#: fe-protocol3.c:1105 +#: fe-protocol3.c:1071 #, c-format msgid "COLUMN NAME: %s\n" msgstr "SPALTENNAME: %s\n" -#: fe-protocol3.c:1109 +#: fe-protocol3.c:1075 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "DATENTYPNAME: %s\n" -#: fe-protocol3.c:1113 +#: fe-protocol3.c:1079 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "CONSTRAINT-NAME: %s\n" -#: fe-protocol3.c:1125 +#: fe-protocol3.c:1091 msgid "LOCATION: " msgstr "ORT: " -#: fe-protocol3.c:1127 +#: fe-protocol3.c:1093 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1129 +#: fe-protocol3.c:1095 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1324 +#: fe-protocol3.c:1290 #, c-format msgid "LINE %d: " msgstr "ZEILE %d: " -#: fe-protocol3.c:1719 +#: fe-protocol3.c:1685 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: Text COPY OUT nicht ausgeführt\n" diff -Nru postgresql-10-10.16/src/interfaces/libpq/po/fr.po postgresql-10-10.17/src/interfaces/libpq/po/fr.po --- postgresql-10-10.16/src/interfaces/libpq/po/fr.po 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/interfaces/libpq/po/fr.po 2021-05-10 20:47:56.000000000 +0000 @@ -9,15 +9,15 @@ msgstr "" "Project-Id-Version: PostgreSQL 9.6\n" "Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2019-09-20 03:56+0000\n" -"PO-Revision-Date: 2019-09-20 14:29+0200\n" +"POT-Creation-Date: 2021-04-09 11:40+0000\n" +"PO-Revision-Date: 2021-04-11 09:47+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: PostgreSQLfr \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.4.2\n" #: fe-auth-scram.c:176 msgid "malformed SCRAM message (empty message)\n" @@ -53,14 +53,14 @@ #: fe-auth-scram.c:400 fe-auth-scram.c:420 fe-auth-scram.c:445 #: fe-auth-scram.c:459 fe-auth-scram.c:508 fe-auth-scram.c:540 fe-auth.c:227 #: fe-auth.c:362 fe-auth.c:432 fe-auth.c:467 fe-auth.c:609 fe-auth.c:768 -#: fe-auth.c:1080 fe-auth.c:1228 fe-connect.c:834 fe-connect.c:1263 -#: fe-connect.c:1439 fe-connect.c:1921 fe-connect.c:1944 fe-connect.c:2605 -#: fe-connect.c:4151 fe-connect.c:4403 fe-connect.c:4522 fe-connect.c:4776 -#: fe-connect.c:4856 fe-connect.c:4955 fe-connect.c:5211 fe-connect.c:5240 -#: fe-connect.c:5312 fe-connect.c:5336 fe-connect.c:5354 fe-connect.c:5455 -#: fe-connect.c:5464 fe-connect.c:5820 fe-connect.c:5970 fe-exec.c:2705 +#: fe-auth.c:1080 fe-auth.c:1228 fe-connect.c:830 fe-connect.c:1259 +#: fe-connect.c:1435 fe-connect.c:1917 fe-connect.c:1940 fe-connect.c:2601 +#: fe-connect.c:4146 fe-connect.c:4398 fe-connect.c:4517 fe-connect.c:4771 +#: fe-connect.c:4851 fe-connect.c:4950 fe-connect.c:5206 fe-connect.c:5235 +#: fe-connect.c:5307 fe-connect.c:5331 fe-connect.c:5349 fe-connect.c:5450 +#: fe-connect.c:5459 fe-connect.c:5815 fe-connect.c:5965 fe-exec.c:2705 #: fe-exec.c:3452 fe-exec.c:3617 fe-lobj.c:896 fe-protocol2.c:1214 -#: fe-protocol3.c:1000 fe-protocol3.c:1686 fe-secure-openssl.c:521 +#: fe-protocol3.c:966 fe-protocol3.c:1652 fe-secure-openssl.c:521 #: fe-secure-openssl.c:1145 msgid "out of memory\n" msgstr "mémoire épuisée\n" @@ -185,12 +185,12 @@ msgid "user name lookup failure: error code %lu\n" msgstr "échec de la recherche du nom d'utilisateur : code erreur %lu\n" -#: fe-auth.c:1065 fe-connect.c:2532 +#: fe-auth.c:1065 fe-connect.c:2528 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "n'a pas pu rechercher l'identifiant de l'utilisateur local %d : %s\n" -#: fe-auth.c:1070 fe-connect.c:2537 +#: fe-auth.c:1070 fe-connect.c:2533 #, c-format msgid "local user with ID %d does not exist\n" msgstr "l'utilisateur local dont l'identifiant est %d n'existe pas\n" @@ -208,37 +208,37 @@ msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "algorithme de chiffrement du mot de passe « %s » non reconnu\n" -#: fe-connect.c:1017 +#: fe-connect.c:1013 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "n'a pas pu faire correspondre les %d noms d'hôte aux %d valeurs hostaddr\n" -#: fe-connect.c:1093 +#: fe-connect.c:1089 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "n'a pas pu faire correspondre les %d numéros de port aux %d hôtes\n" -#: fe-connect.c:1189 +#: fe-connect.c:1185 #, c-format msgid "invalid sslmode value: \"%s\"\n" msgstr "valeur sslmode invalide : « %s »\n" -#: fe-connect.c:1210 +#: fe-connect.c:1206 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "valeur sslmode « %s » invalide si le support SSL n'est pas compilé initialement\n" -#: fe-connect.c:1245 +#: fe-connect.c:1241 #, c-format msgid "invalid target_session_attrs value: \"%s\"\n" msgstr "valeur target_session_attrs invalide : « %s »\n" -#: fe-connect.c:1463 +#: fe-connect.c:1459 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "n'a pas pu activer le mode TCP sans délai pour la socket : %s\n" -#: fe-connect.c:1493 +#: fe-connect.c:1489 #, c-format msgid "" "could not connect to server: %s\n" @@ -249,7 +249,7 @@ "\tLe serveur est-il actif localement et accepte-t-il les connexions sur la\n" " \tsocket Unix « %s » ?\n" -#: fe-connect.c:1551 +#: fe-connect.c:1547 #, c-format msgid "" "could not connect to server: %s\n" @@ -260,7 +260,7 @@ "\tLe serveur est-il actif sur l'hôte « %s » (%s)\n" "\tet accepte-t-il les connexionsTCP/IP sur le port %s ?\n" -#: fe-connect.c:1560 +#: fe-connect.c:1556 #, c-format msgid "" "could not connect to server: %s\n" @@ -271,291 +271,291 @@ "\tLe serveur est-il actif sur l'hôte « %s » et accepte-t-il les connexions\n" "\tTCP/IP sur le port %s ?\n" -#: fe-connect.c:1611 fe-connect.c:1643 fe-connect.c:1676 fe-connect.c:2324 +#: fe-connect.c:1607 fe-connect.c:1639 fe-connect.c:1672 fe-connect.c:2320 #, c-format msgid "setsockopt(%s) failed: %s\n" msgstr "setsockopt(%s) a échoué : %s\n" -#: fe-connect.c:1725 +#: fe-connect.c:1721 #, c-format msgid "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %ui\n" msgstr "WSAIoctl(SIO_KEEPALIVE_VALS) a échoué : %ui\n" -#: fe-connect.c:2034 +#: fe-connect.c:2030 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "état de connexion invalide, indique probablement une corruption de mémoire\n" -#: fe-connect.c:2100 +#: fe-connect.c:2096 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "numéro de port invalide : « %s »\n" -#: fe-connect.c:2116 +#: fe-connect.c:2112 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "n'a pas pu traduire le nom d'hôte « %s » en adresse : %s\n" -#: fe-connect.c:2129 +#: fe-connect.c:2125 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "n'a pas pu analyser l'adresse réseau « %s » : %s\n" -#: fe-connect.c:2142 +#: fe-connect.c:2138 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Le chemin du socket de domaine Unix, « %s », est trop (maximum %d octets)\n" -#: fe-connect.c:2157 +#: fe-connect.c:2153 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "" "n'a pas pu traduire le chemin de la socket du domaine Unix « %s » en adresse :\n" "%s\n" -#: fe-connect.c:2261 +#: fe-connect.c:2257 #, c-format msgid "could not create socket: %s\n" msgstr "n'a pas pu créer la socket : %s\n" -#: fe-connect.c:2283 +#: fe-connect.c:2279 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "n'a pas pu activer le mode non-bloquant pour la socket : %s\n" -#: fe-connect.c:2293 +#: fe-connect.c:2289 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "n'a pas pu paramétrer la socket en mode close-on-exec : %s\n" -#: fe-connect.c:2311 +#: fe-connect.c:2307 msgid "keepalives parameter must be an integer\n" msgstr "le paramètre keepalives doit être un entier\n" -#: fe-connect.c:2449 +#: fe-connect.c:2445 #, c-format msgid "could not get socket error status: %s\n" msgstr "n'a pas pu déterminer le statut d'erreur de la socket : %s\n" -#: fe-connect.c:2477 +#: fe-connect.c:2473 #, c-format msgid "could not get client address from socket: %s\n" msgstr "n'a pas pu obtenir l'adresse du client depuis la socket : %s\n" -#: fe-connect.c:2519 +#: fe-connect.c:2515 msgid "requirepeer parameter is not supported on this platform\n" msgstr "le paramètre requirepeer n'est pas supporté sur cette plateforme\n" -#: fe-connect.c:2522 +#: fe-connect.c:2518 #, c-format msgid "could not get peer credentials: %s\n" msgstr "n'a pas pu obtenir l'authentification de l'autre : %s\n" -#: fe-connect.c:2545 +#: fe-connect.c:2541 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer indique « %s » mais le nom de l'utilisateur réel est « %s »\n" -#: fe-connect.c:2579 +#: fe-connect.c:2575 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "n'a pas pu transmettre le paquet de négociation SSL : %s\n" -#: fe-connect.c:2618 +#: fe-connect.c:2614 #, c-format msgid "could not send startup packet: %s\n" msgstr "n'a pas pu transmettre le paquet de démarrage : %s\n" -#: fe-connect.c:2688 +#: fe-connect.c:2684 msgid "server does not support SSL, but SSL was required\n" msgstr "le serveur ne supporte pas SSL alors que SSL était réclamé\n" -#: fe-connect.c:2714 +#: fe-connect.c:2710 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "a reçu une réponse invalide à la négociation SSL : %c\n" -#: fe-connect.c:2791 fe-connect.c:2824 +#: fe-connect.c:2787 fe-connect.c:2820 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "" "attendait une requête d'authentification en provenance du serveur, mais a\n" " reçu %c\n" -#: fe-connect.c:3051 +#: fe-connect.c:3047 msgid "unexpected message from server during startup\n" msgstr "message inattendu du serveur lors du démarrage\n" -#: fe-connect.c:3281 +#: fe-connect.c:3277 #, c-format msgid "could not make a writable connection to server \"%s:%s\"\n" msgstr "n'a pas pu réaliser une connexion en écriture au serveur « %s » : %s\n" -#: fe-connect.c:3327 +#: fe-connect.c:3323 #, c-format msgid "test \"SHOW transaction_read_only\" failed on server \"%s:%s\"\n" msgstr "le test \"SHOW transaction_read_only\" a échoué sur le serveur \"%s:%s\"\n" -#: fe-connect.c:3342 +#: fe-connect.c:3338 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "" "état de connexion invalide (%d), indiquant probablement une corruption de\n" " mémoire\n" -#: fe-connect.c:3757 fe-connect.c:3817 +#: fe-connect.c:3752 fe-connect.c:3812 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "échec de PGEventProc « %s » lors de l'événement PGEVT_CONNRESET\n" -#: fe-connect.c:4164 +#: fe-connect.c:4159 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "URL LDAP « %s » invalide : le schéma doit être ldap://\n" -#: fe-connect.c:4179 +#: fe-connect.c:4174 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "URL LDAP « %s » invalide : le « distinguished name » manque\n" -#: fe-connect.c:4190 fe-connect.c:4243 +#: fe-connect.c:4185 fe-connect.c:4238 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "URL LDAP « %s » invalide : doit avoir exactement un attribut\n" -#: fe-connect.c:4200 fe-connect.c:4257 +#: fe-connect.c:4195 fe-connect.c:4252 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "URL LDAP « %s » invalide : doit avoir une échelle de recherche (base/un/sous)\n" -#: fe-connect.c:4211 +#: fe-connect.c:4206 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "URL LDAP « %s » invalide : aucun filtre\n" -#: fe-connect.c:4232 +#: fe-connect.c:4227 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "URL LDAP « %s » invalide : numéro de port invalide\n" -#: fe-connect.c:4266 +#: fe-connect.c:4261 msgid "could not create LDAP structure\n" msgstr "n'a pas pu créer la structure LDAP\n" -#: fe-connect.c:4342 +#: fe-connect.c:4337 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "échec de la recherche sur le serveur LDAP : %s\n" -#: fe-connect.c:4353 +#: fe-connect.c:4348 msgid "more than one entry found on LDAP lookup\n" msgstr "plusieurs entrées trouvées pendant la recherche LDAP\n" -#: fe-connect.c:4354 fe-connect.c:4366 +#: fe-connect.c:4349 fe-connect.c:4361 msgid "no entry found on LDAP lookup\n" msgstr "aucune entrée trouvée pendant la recherche LDAP\n" -#: fe-connect.c:4377 fe-connect.c:4390 +#: fe-connect.c:4372 fe-connect.c:4385 msgid "attribute has no values on LDAP lookup\n" msgstr "l'attribut n'a pas de valeur après la recherche LDAP\n" -#: fe-connect.c:4442 fe-connect.c:4461 fe-connect.c:4994 +#: fe-connect.c:4437 fe-connect.c:4456 fe-connect.c:4989 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "« = » manquant après « %s » dans la chaîne des paramètres de connexion\n" -#: fe-connect.c:4534 fe-connect.c:5179 fe-connect.c:5953 +#: fe-connect.c:4529 fe-connect.c:5174 fe-connect.c:5948 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "option de connexion « %s » invalide\n" -#: fe-connect.c:4550 fe-connect.c:5043 +#: fe-connect.c:4545 fe-connect.c:5038 msgid "unterminated quoted string in connection info string\n" msgstr "guillemets non refermés dans la chaîne des paramètres de connexion\n" -#: fe-connect.c:4633 +#: fe-connect.c:4628 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "définition du service « %s » introuvable\n" -#: fe-connect.c:4656 +#: fe-connect.c:4651 #, c-format msgid "service file \"%s\" not found\n" msgstr "fichier de service « %s » introuvable\n" -#: fe-connect.c:4671 +#: fe-connect.c:4666 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "ligne %d trop longue dans le fichier service « %s »\n" -#: fe-connect.c:4744 fe-connect.c:4788 +#: fe-connect.c:4739 fe-connect.c:4783 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "erreur de syntaxe dans le fichier service « %s », ligne %d\n" -#: fe-connect.c:4755 +#: fe-connect.c:4750 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "spécifications imbriquées de service non supportées dans le fichier service « %s », ligne %d\n" -#: fe-connect.c:5475 +#: fe-connect.c:5470 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "URI invalide propagée à la routine d'analyse interne : « %s »\n" -#: fe-connect.c:5552 +#: fe-connect.c:5547 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "" "fin de chaîne atteinte lors de la recherche du « ] » correspondant dans\n" "l'adresse IPv6 de l'hôte indiquée dans l'URI : « %s »\n" -#: fe-connect.c:5559 +#: fe-connect.c:5554 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "l'adresse IPv6 de l'hôte ne peut pas être vide dans l'URI : « %s »\n" -#: fe-connect.c:5574 +#: fe-connect.c:5569 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "" "caractère « %c » inattendu à la position %d de l'URI (caractère « : » ou\n" "« / » attendu) : « %s »\n" -#: fe-connect.c:5703 +#: fe-connect.c:5698 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "séparateur « = » de clé/valeur en trop dans le paramètre de requête URI : « %s »\n" -#: fe-connect.c:5723 +#: fe-connect.c:5718 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "séparateur « = » de clé/valeur manquant dans le paramètre de requête URI : « %s »\n" -#: fe-connect.c:5774 +#: fe-connect.c:5769 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "paramètre de la requête URI invalide : « %s »\n" -#: fe-connect.c:5848 +#: fe-connect.c:5843 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "jeton encodé en pourcentage invalide : « %s »\n" -#: fe-connect.c:5858 +#: fe-connect.c:5853 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "valeur %%00 interdite dans la valeur codée en pourcentage : « %s »\n" -#: fe-connect.c:6204 +#: fe-connect.c:6199 msgid "connection pointer is NULL\n" msgstr "le pointeur de connexion est NULL\n" -#: fe-connect.c:6502 +#: fe-connect.c:6495 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "ATTENTION : le fichier de mots de passe « %s » n'est pas un fichier texte\n" -#: fe-connect.c:6511 +#: fe-connect.c:6504 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "" @@ -563,7 +563,7 @@ "lecture pour le groupe ou universel ; les droits devraient être u=rw (0600)\n" "ou inférieur\n" -#: fe-connect.c:6605 +#: fe-connect.c:6616 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "mot de passe récupéré dans le fichier fichier « %s »\n" @@ -574,12 +574,12 @@ msgstr "le numéro de ligne %d est en dehors des limites 0..%d" #: fe-exec.c:498 fe-protocol2.c:503 fe-protocol2.c:538 fe-protocol2.c:1057 -#: fe-protocol3.c:209 fe-protocol3.c:236 fe-protocol3.c:253 fe-protocol3.c:333 -#: fe-protocol3.c:728 fe-protocol3.c:959 +#: fe-protocol3.c:209 fe-protocol3.c:236 fe-protocol3.c:253 fe-protocol3.c:331 +#: fe-protocol3.c:697 fe-protocol3.c:925 msgid "out of memory" msgstr "mémoire épuisée" -#: fe-exec.c:499 fe-protocol2.c:1403 fe-protocol3.c:1894 +#: fe-exec.c:499 fe-protocol2.c:1403 fe-protocol3.c:1860 #, c-format msgid "%s" msgstr "%s" @@ -651,7 +651,7 @@ msgstr "PQexec non autorisé pendant COPY BOTH\n" #: fe-exec.c:2283 fe-exec.c:2350 fe-exec.c:2440 fe-protocol2.c:1360 -#: fe-protocol3.c:1825 +#: fe-protocol3.c:1791 msgid "no COPY in progress\n" msgstr "aucun COPY en cours\n" @@ -845,12 +845,12 @@ "le serveur a envoyé des données binaires (message « B ») sans description\n" "préalable de la ligne (message « T »)" -#: fe-protocol2.c:633 fe-protocol3.c:412 +#: fe-protocol2.c:633 fe-protocol3.c:407 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "réponse inattendue du serveur, le premier caractère reçu étant « %c »\n" -#: fe-protocol2.c:762 fe-protocol2.c:937 fe-protocol3.c:627 fe-protocol3.c:854 +#: fe-protocol2.c:762 fe-protocol2.c:937 fe-protocol3.c:608 fe-protocol3.c:814 msgid "out of memory for query result" msgstr "mémoire épuisée pour le résultat de la requête" @@ -859,130 +859,122 @@ msgid "lost synchronization with server, resetting connection" msgstr "synchronisation perdue avec le serveur, réinitialisation de la connexion" -#: fe-protocol2.c:1549 fe-protocol2.c:1581 fe-protocol3.c:2097 +#: fe-protocol2.c:1549 fe-protocol2.c:1581 fe-protocol3.c:2063 #, c-format msgid "protocol error: id=0x%x\n" msgstr "erreur de protocole : id=0x%x\n" -#: fe-protocol3.c:368 +#: fe-protocol3.c:363 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "" "le serveur a envoyé des données (message « D ») sans description préalable\n" "de la ligne (message « T »)\n" -#: fe-protocol3.c:433 +#: fe-protocol3.c:428 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "" "le contenu du message ne correspond pas avec la longueur du type de message\n" "« %c »\n" -#: fe-protocol3.c:454 +#: fe-protocol3.c:449 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "" "synchronisation perdue avec le serveur : a reçu le type de message « %c »,\n" "longueur %d\n" -#: fe-protocol3.c:505 fe-protocol3.c:545 +#: fe-protocol3.c:499 fe-protocol3.c:539 msgid "insufficient data in \"T\" message" msgstr "données insuffisantes dans le message « T »" -#: fe-protocol3.c:578 -msgid "extraneous data in \"T\" message" -msgstr "données supplémentaires dans le message « T »" - -#: fe-protocol3.c:691 -msgid "extraneous data in \"t\" message" -msgstr "données supplémentaires dans le message « t »" +#: fe-protocol3.c:677 +msgid "insufficient data in \"t\" message" +msgstr "données insuffisantes dans le message « t »" -#: fe-protocol3.c:762 fe-protocol3.c:794 fe-protocol3.c:812 +#: fe-protocol3.c:736 fe-protocol3.c:768 fe-protocol3.c:786 msgid "insufficient data in \"D\" message" msgstr "données insuffisantes dans le message « D »" -#: fe-protocol3.c:768 +#: fe-protocol3.c:742 msgid "unexpected field count in \"D\" message" msgstr "nombre de champs inattendu dans le message « D »" -#: fe-protocol3.c:821 -msgid "extraneous data in \"D\" message" -msgstr "données supplémentaires dans le message « D »" - -#: fe-protocol3.c:1013 +#: fe-protocol3.c:979 msgid "no error message available\n" msgstr "aucun message d'erreur disponible\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1043 fe-protocol3.c:1062 +#: fe-protocol3.c:1009 fe-protocol3.c:1028 #, c-format msgid " at character %s" msgstr " au caractère %s" -#: fe-protocol3.c:1075 +#: fe-protocol3.c:1041 #, c-format msgid "DETAIL: %s\n" msgstr "DÉTAIL : %s\n" -#: fe-protocol3.c:1078 +#: fe-protocol3.c:1044 #, c-format msgid "HINT: %s\n" msgstr "ASTUCE : %s\n" -#: fe-protocol3.c:1081 +#: fe-protocol3.c:1047 #, c-format msgid "QUERY: %s\n" msgstr "REQUÊTE : %s\n" -#: fe-protocol3.c:1088 +#: fe-protocol3.c:1054 #, c-format msgid "CONTEXT: %s\n" msgstr "CONTEXTE : %s\n" -#: fe-protocol3.c:1097 +#: fe-protocol3.c:1063 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "NOM DE SCHÉMA : %s\n" -#: fe-protocol3.c:1101 +#: fe-protocol3.c:1067 #, c-format msgid "TABLE NAME: %s\n" msgstr "NOM DE TABLE : %s\n" -#: fe-protocol3.c:1105 +#: fe-protocol3.c:1071 #, c-format msgid "COLUMN NAME: %s\n" msgstr "NOM DE COLONNE : %s\n" -#: fe-protocol3.c:1109 +#: fe-protocol3.c:1075 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "NOM DU TYPE DE DONNÉES : %s\n" -#: fe-protocol3.c:1113 +#: fe-protocol3.c:1079 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "NOM DE CONTRAINTE : %s\n" -#: fe-protocol3.c:1125 +#: fe-protocol3.c:1091 msgid "LOCATION: " msgstr "EMPLACEMENT : " -#: fe-protocol3.c:1127 +#: fe-protocol3.c:1093 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1129 +#: fe-protocol3.c:1095 #, c-format msgid "%s:%s" msgstr "%s : %s" -#: fe-protocol3.c:1324 +#: fe-protocol3.c:1290 #, c-format msgid "LINE %d: " msgstr "LIGNE %d : " -#: fe-protocol3.c:1719 +#: fe-protocol3.c:1685 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline : ne va pas réaliser un COPY OUT au format texte\n" @@ -1152,70 +1144,79 @@ msgid "unrecognized socket error: 0x%08X/%d" msgstr "erreur de socket non reconnue : 0x%08X/%d" -#~ msgid "could not get home directory to locate password file\n" +#~ msgid "failed to generate nonce\n" +#~ msgstr "échec pour la génération de nonce\n" + +#~ msgid "socket not open\n" +#~ msgstr "socket non ouvert\n" + +#~ msgid "could not set socket to blocking mode: %s\n" +#~ msgstr "n'a pas pu activer le mode bloquant pour la socket : %s\n" + +#~ msgid "Kerberos 5 authentication rejected: %*s\n" +#~ msgstr "authentification Kerberos 5 rejetée : %*s\n" + +#~ msgid "could not restore nonblocking mode on socket: %s\n" +#~ msgstr "n'a pas pu rétablir le mode non-bloquant pour la socket : %s\n" + +#~ msgid "could not get home directory to locate client certificate files\n" #~ msgstr "" -#~ "n'a pas pu obtenir le répertoire personnel pour trouver le fichier de\n" -#~ "mot de passe\n" +#~ "n'a pas pu récupérer le répertoire personnel pour trouver les certificats\n" +#~ "du client\n" -#~ msgid "could not get home directory to locate service definition file" +#~ msgid "verified SSL connections are only supported when connecting to a host name\n" #~ msgstr "" -#~ "n'a pas pu obtenir le répertoire personnel pour trouver le certificat de\n" -#~ "définition du service" +#~ "les connexions SSL vérifiées ne sont supportées que lors de la connexion\n" +#~ "à un alias hôte\n" -#~ msgid "setsockopt(TCP_KEEPIDLE) failed: %s\n" -#~ msgstr "setsockopt(TCP_KEEPIDLE) a échoué : %s\n" +#~ msgid "could not open private key file \"%s\": %s\n" +#~ msgstr "n'a pas pu ouvrir le fichier de clé privée « %s » : %s\n" -#~ msgid "setsockopt(TCP_KEEPALIVE) failed: %s\n" -#~ msgstr "setsockopt(TCP_KEEPALIVE) a échoué : %s\n" +#~ msgid "private key file \"%s\" changed during execution\n" +#~ msgstr "la clé privée « %s » a été modifiée durant l'exécution\n" -#~ msgid "setsockopt(TCP_KEEPINTVL) failed: %s\n" -#~ msgstr "setsockopt(TCP_KEEPINTVL) a échoué : %s\n" +#~ msgid "could not read private key file \"%s\": %s\n" +#~ msgstr "n'a pas pu lire la clé privée « %s » : %s\n" -#~ msgid "setsockopt(SO_KEEPALIVE) failed: %s\n" -#~ msgstr "setsockopt(SO_KEEPALIVE) a échoué : %s\n" +#~ msgid "invalid appname state %d, probably indicative of memory corruption\n" +#~ msgstr "état appname %d invalide, indiquant probablement une corruption de la mémoire\n" -#~ msgid "could not acquire mutex: %s\n" -#~ msgstr "n'a pas pu acquérir le mutex : %s\n" +#~ msgid "invalid sslverify value: \"%s\"\n" +#~ msgstr "valeur sslverify invalide : « %s »\n" #~ msgid "unrecognized return value from row processor" #~ msgstr "valeur de retour du traitement de la ligne non reconnue" -#~ msgid "invalid sslverify value: \"%s\"\n" -#~ msgstr "valeur sslverify invalide : « %s »\n" +#~ msgid "could not acquire mutex: %s\n" +#~ msgstr "n'a pas pu acquérir le mutex : %s\n" -#~ msgid "invalid appname state %d, probably indicative of memory corruption\n" -#~ msgstr "état appname %d invalide, indiquant probablement une corruption de la mémoire\n" +#~ msgid "setsockopt(SO_KEEPALIVE) failed: %s\n" +#~ msgstr "setsockopt(SO_KEEPALIVE) a échoué : %s\n" -#~ msgid "could not read private key file \"%s\": %s\n" -#~ msgstr "n'a pas pu lire la clé privée « %s » : %s\n" +#~ msgid "setsockopt(TCP_KEEPINTVL) failed: %s\n" +#~ msgstr "setsockopt(TCP_KEEPINTVL) a échoué : %s\n" -#~ msgid "private key file \"%s\" changed during execution\n" -#~ msgstr "la clé privée « %s » a été modifiée durant l'exécution\n" +#~ msgid "setsockopt(TCP_KEEPALIVE) failed: %s\n" +#~ msgstr "setsockopt(TCP_KEEPALIVE) a échoué : %s\n" -#~ msgid "could not open private key file \"%s\": %s\n" -#~ msgstr "n'a pas pu ouvrir le fichier de clé privée « %s » : %s\n" +#~ msgid "setsockopt(TCP_KEEPIDLE) failed: %s\n" +#~ msgstr "setsockopt(TCP_KEEPIDLE) a échoué : %s\n" -#~ msgid "verified SSL connections are only supported when connecting to a host name\n" +#~ msgid "could not get home directory to locate service definition file" #~ msgstr "" -#~ "les connexions SSL vérifiées ne sont supportées que lors de la connexion\n" -#~ "à un alias hôte\n" +#~ "n'a pas pu obtenir le répertoire personnel pour trouver le certificat de\n" +#~ "définition du service" -#~ msgid "could not get home directory to locate client certificate files\n" +#~ msgid "could not get home directory to locate password file\n" #~ msgstr "" -#~ "n'a pas pu récupérer le répertoire personnel pour trouver les certificats\n" -#~ "du client\n" - -#~ msgid "could not restore nonblocking mode on socket: %s\n" -#~ msgstr "n'a pas pu rétablir le mode non-bloquant pour la socket : %s\n" +#~ "n'a pas pu obtenir le répertoire personnel pour trouver le fichier de\n" +#~ "mot de passe\n" -#~ msgid "Kerberos 5 authentication rejected: %*s\n" -#~ msgstr "authentification Kerberos 5 rejetée : %*s\n" +#~ msgid "extraneous data in \"D\" message" +#~ msgstr "données supplémentaires dans le message « D »" -#~ msgid "could not set socket to blocking mode: %s\n" -#~ msgstr "n'a pas pu activer le mode bloquant pour la socket : %s\n" +#~ msgid "extraneous data in \"t\" message" +#~ msgstr "données supplémentaires dans le message « t »" -#~ msgid "socket not open\n" -#~ msgstr "socket non ouvert\n" - -#~ msgid "failed to generate nonce\n" -#~ msgstr "échec pour la génération de nonce\n" +#~ msgid "extraneous data in \"T\" message" +#~ msgstr "données supplémentaires dans le message « T »" diff -Nru postgresql-10-10.16/src/pl/plpython/regress-python3-mangle.mk postgresql-10-10.17/src/pl/plpython/regress-python3-mangle.mk --- postgresql-10-10.16/src/pl/plpython/regress-python3-mangle.mk 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/pl/plpython/regress-python3-mangle.mk 2021-05-10 20:47:56.000000000 +0000 @@ -23,8 +23,10 @@ -e "s/def next/def __next__/g" \ -e "s/LANGUAGE plpythonu/LANGUAGE plpython3u/g" \ -e "s/LANGUAGE plpython2u/LANGUAGE plpython3u/g" \ - -e "s/EXTENSION \([^ ]*_\)*plpythonu/EXTENSION \1plpython3u/g" \ - -e "s/EXTENSION \([^ ]*_\)*plpython2u/EXTENSION \1plpython3u/g" \ + -e "s/EXTENSION plpythonu/EXTENSION plpython3u/g" \ + -e "s/EXTENSION plpython2u/EXTENSION plpython3u/g" \ + -e "s/EXTENSION \([^ ]*\)_plpythonu/EXTENSION \1_plpython3u/g" \ + -e "s/EXTENSION \([^ ]*\)_plpython2u/EXTENSION \1_plpython3u/g" \ -e 's/installing required extension "plpython2u"/installing required extension "plpython3u"/g' \ $$file >`echo $$file | sed 's,^.*/\([^/][^/]*/\)\([^/][^/]*\)$$,\1python3/\2,'` || exit; \ done diff -Nru postgresql-10-10.16/src/port/pg_crc32c_sse42.c postgresql-10-10.17/src/port/pg_crc32c_sse42.c --- postgresql-10-10.16/src/port/pg_crc32c_sse42.c 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/port/pg_crc32c_sse42.c 2021-05-10 20:47:56.000000000 +0000 @@ -18,6 +18,7 @@ #include +pg_attribute_no_sanitize_alignment() pg_crc32c pg_comp_crc32c_sse42(pg_crc32c crc, const void *data, size_t len) { diff -Nru postgresql-10-10.16/src/port/win32ver.rc postgresql-10-10.17/src/port/win32ver.rc --- postgresql-10-10.16/src/port/win32ver.rc 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/port/win32ver.rc 2021-05-10 20:47:56.000000000 +0000 @@ -2,8 +2,8 @@ #include "pg_config.h" VS_VERSION_INFO VERSIONINFO - FILEVERSION 10,0,16,0 - PRODUCTVERSION 10,0,16,0 + FILEVERSION 10,0,17,0 + PRODUCTVERSION 10,0,17,0 FILEFLAGSMASK 0x17L FILEFLAGS 0x0L FILEOS VOS_NT_WINDOWS32 diff -Nru postgresql-10-10.16/src/test/isolation/Makefile postgresql-10-10.17/src/test/isolation/Makefile --- postgresql-10-10.16/src/test/isolation/Makefile 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/isolation/Makefile 2021-05-10 20:47:56.000000000 +0000 @@ -9,7 +9,8 @@ top_builddir = ../../.. include $(top_builddir)/src/Makefile.global -override CPPFLAGS := -I$(srcdir) -I$(libpq_srcdir) -I$(srcdir)/../regress $(CPPFLAGS) +override CPPFLAGS := -I. -I$(srcdir) -I$(libpq_srcdir) \ + -I$(srcdir)/../regress $(CPPFLAGS) OBJS = specparse.o isolationtester.o $(WIN32RES) diff -Nru postgresql-10-10.16/src/test/perl/PostgresNode.pm postgresql-10-10.17/src/test/perl/PostgresNode.pm --- postgresql-10-10.16/src/test/perl/PostgresNode.pm 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/perl/PostgresNode.pm 2021-05-10 20:47:56.000000000 +0000 @@ -992,28 +992,24 @@ $found = 0 if ($node->port == $port); } - # Check to see if anything else is listening on this TCP port. This - # is *necessary* on $use_tcp (Windows) configurations. Seek a port - # available for all possible listen_addresses values, for own_host - # nodes and so the caller can harness this port for the widest range - # of purposes. The 0.0.0.0 test achieves that for post-2006 Cygwin, - # which automatically sets SO_EXCLUSIVEADDRUSE. The same holds for - # MSYS (a Cygwin fork). Testing 0.0.0.0 is insufficient for Windows - # native Perl (https://stackoverflow.com/a/14388707), so we also test - # individual addresses. + # Check to see if anything else is listening on this TCP port. + # Seek a port available for all possible listen_addresses values, + # so callers can harness this port for the widest range of purposes. + # The 0.0.0.0 test achieves that for MSYS, which automatically sets + # SO_EXCLUSIVEADDRUSE. Testing 0.0.0.0 is insufficient for Windows + # native Perl (https://stackoverflow.com/a/14388707), so we also + # have to test individual addresses. Doing that for 127.0.0/24 + # addresses other than 127.0.0.1 might fail with EADDRNOTAVAIL on + # non-Linux, non-Windows kernels. # - # This seems like a good idea on Unixen as well, even though we don't - # ask the postmaster to open a TCP port on Unix. On Non-Linux, - # non-Windows kernels, binding to 127.0.0.1/24 addresses other than - # 127.0.0.1 might fail with EADDRNOTAVAIL. Binding to 0.0.0.0 is - # unnecessary on non-Windows systems. - # - # XXX A port available now may become unavailable by the time we start - # the postmaster. + # Thus, 0.0.0.0 and individual 127.0.0/24 addresses are tested + # only on Windows and only when TCP usage is requested. if ($found == 1) { foreach my $addr (qw(127.0.0.1), - $use_tcp ? qw(127.0.0.2 127.0.0.3 0.0.0.0) : ()) + ($use_tcp && $TestLib::windows_os) + ? qw(127.0.0.2 127.0.0.3 0.0.0.0) + : ()) { can_bind($addr, $port) or $found = 0; } @@ -1479,9 +1475,6 @@ Run a command on the node, then verify that $expected_sql appears in the server log file. -Reads the whole log file so be careful when working with large log outputs. -The log file is truncated prior to running the command, however. - =cut sub issues_sql_like @@ -1491,10 +1484,11 @@ local $ENV{PGHOST} = $self->host; local $ENV{PGPORT} = $self->port; - truncate $self->logfile, 0; + my $log_location = -s $self->logfile; + my $result = TestLib::run_log($cmd); ok($result, "@$cmd exit code 0"); - my $log = TestLib::slurp_file($self->logfile); + my $log = TestLib::slurp_file($self->logfile, $log_location); like($log, $expected_sql, "$test_name: SQL found in server log"); } diff -Nru postgresql-10-10.16/src/test/perl/TestLib.pm postgresql-10-10.17/src/test/perl/TestLib.pm --- postgresql-10-10.16/src/test/perl/TestLib.pm 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/perl/TestLib.pm 2021-05-10 20:47:56.000000000 +0000 @@ -13,6 +13,7 @@ use Config; use Cwd; use Exporter 'import'; +use Fcntl qw(:mode :seek); use File::Basename; use File::Spec; use File::Temp (); @@ -73,7 +74,7 @@ if ($windows_os) { require Win32API::File; - Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle)); + Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle setFilePointer)); } } @@ -239,13 +240,18 @@ sub slurp_file { - my ($filename) = @_; + my ($filename, $offset) = @_; local $/; my $contents; if ($Config{osname} ne 'MSWin32') { open(my $in, '<', $filename) or die "could not read \"$filename\": $!"; + if (defined($offset)) + { + seek($in, $offset, SEEK_SET) + or die "could not seek \"$filename\": $!"; + } $contents = <$in>; close $in; } @@ -255,6 +261,11 @@ or die "could not open \"$filename\": $^E"; OsFHandleOpen(my $fh = IO::Handle->new(), $fHandle, 'r') or die "could not read \"$filename\": $^E\n"; + if (defined($offset)) + { + setFilePointer($fh, $offset, qw(FILE_BEGIN)) + or die "could not seek \"$filename\": $^E\n"; + } $contents = <$fh>; CloseHandle($fHandle) or die "could not close \"$filename\": $^E\n"; diff -Nru postgresql-10-10.16/src/test/recovery/t/023_pitr_prepared_xact.pl postgresql-10-10.17/src/test/recovery/t/023_pitr_prepared_xact.pl --- postgresql-10-10.16/src/test/recovery/t/023_pitr_prepared_xact.pl 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-10-10.17/src/test/recovery/t/023_pitr_prepared_xact.pl 2021-05-10 20:47:56.000000000 +0000 @@ -0,0 +1,86 @@ +# Test for point-in-time-recovery (PITR) with prepared transactions +use strict; +use warnings; +use PostgresNode; +use TestLib; +use Test::More tests => 1; +use File::Compare; + +# Initialize and start primary node with WAL archiving +my $node_primary = get_new_node('primary'); +$node_primary->init(has_archiving => 1, allows_streaming => 1); +$node_primary->append_conf( + 'postgresql.conf', qq{ +max_prepared_transactions = 10}); +$node_primary->start; + +# Take backup +my $backup_name = 'my_backup'; +$node_primary->backup($backup_name); + +# Initialize node for PITR targeting a very specific restore point, just +# after a PREPARE TRANSACTION is issued so as we finish with a promoted +# node where this 2PC transaction needs an explicit COMMIT PREPARED. +my $node_pitr = get_new_node('node_pitr'); +$node_pitr->init_from_backup( + $node_primary, $backup_name, + standby => 0, + has_restoring => 1); +$node_pitr->append_conf( + 'recovery.conf', qq{ +recovery_target_name = 'rp' +recovery_target_action = 'promote'}); + +# Workload with a prepared transaction and the target restore point. +$node_primary->psql( + 'postgres', qq{ +CREATE TABLE foo(i int); +BEGIN; +INSERT INTO foo VALUES(1); +PREPARE TRANSACTION 'fooinsert'; +SELECT pg_create_restore_point('rp'); +INSERT INTO foo VALUES(2); +}); + +# Find next WAL segment to be archived +my $walfile_to_be_archived = $node_primary->safe_psql('postgres', + "SELECT pg_walfile_name(pg_current_wal_lsn());"); + +# Make WAL segment eligible for archival +$node_primary->safe_psql('postgres', 'SELECT pg_switch_wal()'); + +# Wait until the WAL segment has been archived. +my $archive_wait_query = + "SELECT '$walfile_to_be_archived' <= last_archived_wal FROM pg_stat_archiver;"; +$node_primary->poll_query_until('postgres', $archive_wait_query) + or die "Timed out while waiting for WAL segment to be archived"; +my $last_archived_wal_file = $walfile_to_be_archived; + +# Now start the PITR node. +$node_pitr->start; + +# Wait until the PITR node exits recovery. +$node_pitr->poll_query_until('postgres', "SELECT pg_is_in_recovery() = 'f';") + or die "Timed out while waiting for PITR promotion"; + +# Commit the prepared transaction in the latest timeline and check its +# result. There should only be one row in the table, coming from the +# prepared transaction. The row from the INSERT after the restore point +# should not show up, since our recovery target was older than the second +# INSERT done. +$node_pitr->psql('postgres', qq{COMMIT PREPARED 'fooinsert';}); +my $result = $node_pitr->safe_psql('postgres', "SELECT * FROM foo;"); +is($result, qq{1}, "check table contents after COMMIT PREPARED"); + +# Insert more data and do a checkpoint. These should be generated on the +# timeline chosen after the PITR promotion. +$node_pitr->psql( + 'postgres', qq{ +INSERT INTO foo VALUES(3); +CHECKPOINT; +}); + +# Enforce recovery, the checkpoint record generated previously should +# still be found. +$node_pitr->stop('immediate'); +$node_pitr->start; diff -Nru postgresql-10-10.16/src/test/regress/expected/collate.out postgresql-10-10.17/src/test/regress/expected/collate.out --- postgresql-10-10.16/src/test/regress/expected/collate.out 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/regress/expected/collate.out 2021-05-10 20:47:56.000000000 +0000 @@ -656,6 +656,19 @@ "C" (1 row) +-- old bug with not dropping COLLATE when coercing to non-collatable type +CREATE VIEW collate_on_int AS +SELECT c1+1 AS c1p FROM + (SELECT ('4' COLLATE "C")::INT AS c1) ss; +\d+ collate_on_int + View "collate_tests.collate_on_int" + Column | Type | Collation | Nullable | Default | Storage | Description +--------+---------+-----------+----------+---------+---------+------------- + c1p | integer | | | | plain | +View definition: + SELECT ss.c1 + 1 AS c1p + FROM ( SELECT 4 AS c1) ss; + -- -- Clean up. Many of these table names will be re-used if the user is -- trying to run any platform-specific collation tests later, so we @@ -663,4 +676,4 @@ -- \set VERBOSITY terse DROP SCHEMA collate_tests CASCADE; -NOTICE: drop cascades to 17 other objects +NOTICE: drop cascades to 18 other objects diff -Nru postgresql-10-10.16/src/test/regress/expected/event_trigger.out postgresql-10-10.17/src/test/regress/expected/event_trigger.out --- postgresql-10-10.16/src/test/regress/expected/event_trigger.out 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/regress/expected/event_trigger.out 2021-05-10 20:47:56.000000000 +0000 @@ -473,6 +473,23 @@ NOTICE: DROP POLICY - ddl_command_start NOTICE: DROP POLICY - sql_drop NOTICE: DROP POLICY - ddl_command_end +-- Check the object addresses of all the event triggers. +SELECT + e.evtname, + pg_describe_object('pg_event_trigger'::regclass, e.oid, 0) as descr, + b.type, b.object_names, b.object_args, + pg_identify_object(a.classid, a.objid, a.objsubid) as ident + FROM pg_event_trigger as e, + LATERAL pg_identify_object_as_address('pg_event_trigger'::regclass, e.oid, 0) as b, + LATERAL pg_get_object_address(b.type, b.object_names, b.object_args) as a + ORDER BY e.evtname; + evtname | descr | type | object_names | object_args | ident +-------------------+---------------------------------+---------------+---------------------+-------------+-------------------------------------------------------- + end_rls_command | event trigger end_rls_command | event trigger | {end_rls_command} | {} | ("event trigger",,end_rls_command,end_rls_command) + sql_drop_command | event trigger sql_drop_command | event trigger | {sql_drop_command} | {} | ("event trigger",,sql_drop_command,sql_drop_command) + start_rls_command | event trigger start_rls_command | event trigger | {start_rls_command} | {} | ("event trigger",,start_rls_command,start_rls_command) +(3 rows) + DROP EVENT TRIGGER start_rls_command; DROP EVENT TRIGGER end_rls_command; DROP EVENT TRIGGER sql_drop_command; diff -Nru postgresql-10-10.16/src/test/regress/expected/identity.out postgresql-10-10.17/src/test/regress/expected/identity.out --- postgresql-10-10.16/src/test/regress/expected/identity.out 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/regress/expected/identity.out 2021-05-10 20:47:56.000000000 +0000 @@ -386,3 +386,16 @@ ) FOR VALUES FROM ('2016-07-01') TO ('2016-08-01'); -- error ERROR: identity columns are not supported on partitions DROP TABLE itest_parent; +-- Identity columns must be NOT NULL (cf bug #16913) +CREATE TABLE itest15 (id integer GENERATED ALWAYS AS IDENTITY NULL); -- fail +ERROR: conflicting NULL/NOT NULL declarations for column "id" of table "itest15" +LINE 1: ...ABLE itest15 (id integer GENERATED ALWAYS AS IDENTITY NULL); + ^ +CREATE TABLE itest15 (id integer NULL GENERATED ALWAYS AS IDENTITY); -- fail +ERROR: conflicting NULL/NOT NULL declarations for column "id" of table "itest15" +LINE 1: CREATE TABLE itest15 (id integer NULL GENERATED ALWAYS AS ID... + ^ +CREATE TABLE itest15 (id integer GENERATED ALWAYS AS IDENTITY NOT NULL); +DROP TABLE itest15; +CREATE TABLE itest15 (id integer NOT NULL GENERATED ALWAYS AS IDENTITY); +DROP TABLE itest15; diff -Nru postgresql-10-10.16/src/test/regress/expected/timestamp.out postgresql-10-10.17/src/test/regress/expected/timestamp.out --- postgresql-10-10.16/src/test/regress/expected/timestamp.out 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/regress/expected/timestamp.out 2021-05-10 20:47:56.000000000 +0000 @@ -1701,6 +1701,42 @@ | 2001 1 1 1 1 1 1 (65 rows) +-- Roman months, with upper and lower case. +SELECT i, + to_char(i * interval '1mon', 'rm'), + to_char(i * interval '1mon', 'RM') + FROM generate_series(-13, 13) i; + i | to_char | to_char +-----+---------+--------- + -13 | xii | XII + -12 | i | I + -11 | ii | II + -10 | iii | III + -9 | iv | IV + -8 | v | V + -7 | vi | VI + -6 | vii | VII + -5 | viii | VIII + -4 | ix | IX + -3 | x | X + -2 | xi | XI + -1 | xii | XII + 0 | | + 1 | i | I + 2 | ii | II + 3 | iii | III + 4 | iv | IV + 5 | v | V + 6 | vi | VI + 7 | vii | VII + 8 | viii | VIII + 9 | ix | IX + 10 | x | X + 11 | xi | XI + 12 | xii | XII + 13 | i | I +(27 rows) + -- timestamp numeric fields constructor SELECT make_timestamp(2014,12,28,6,30,45.887); make_timestamp diff -Nru postgresql-10-10.16/src/test/regress/expected/update.out postgresql-10-10.17/src/test/regress/expected/update.out --- postgresql-10-10.16/src/test/regress/expected/update.out 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/regress/expected/update.out 2021-05-10 20:47:56.000000000 +0000 @@ -199,7 +199,7 @@ (4 rows) -- Test ON CONFLICT DO UPDATE -INSERT INTO upsert_test VALUES(1, 'Boo'); +INSERT INTO upsert_test VALUES(1, 'Boo'), (3, 'Zoo'); -- uncorrelated sub-select: WITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test VALUES (1, 'Bar') ON CONFLICT(a) @@ -210,22 +210,24 @@ (1 row) -- correlated sub-select: -INSERT INTO upsert_test VALUES (1, 'Baz') ON CONFLICT(a) +INSERT INTO upsert_test VALUES (1, 'Baz'), (3, 'Zaz') ON CONFLICT(a) DO UPDATE SET (b, a) = (SELECT b || ', Correlated', a from upsert_test i WHERE i.a = upsert_test.a) RETURNING *; a | b ---+----------------- 1 | Foo, Correlated -(1 row) + 3 | Zoo, Correlated +(2 rows) -- correlated sub-select (EXCLUDED.* alias): -INSERT INTO upsert_test VALUES (1, 'Bat') ON CONFLICT(a) +INSERT INTO upsert_test VALUES (1, 'Bat'), (3, 'Zot') ON CONFLICT(a) DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a) RETURNING *; a | b ---+--------------------------- 1 | Foo, Correlated, Excluded -(1 row) + 3 | Zoo, Correlated, Excluded +(2 rows) DROP TABLE update_test; DROP TABLE upsert_test; diff -Nru postgresql-10-10.16/src/test/regress/sql/collate.sql postgresql-10-10.17/src/test/regress/sql/collate.sql --- postgresql-10-10.16/src/test/regress/sql/collate.sql 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/regress/sql/collate.sql 2021-05-10 20:47:56.000000000 +0000 @@ -251,6 +251,12 @@ SELECT collation for ((SELECT a FROM collate_test1 LIMIT 1)); -- non-collatable type - error SELECT collation for ((SELECT b FROM collate_test1 LIMIT 1)); +-- old bug with not dropping COLLATE when coercing to non-collatable type +CREATE VIEW collate_on_int AS +SELECT c1+1 AS c1p FROM + (SELECT ('4' COLLATE "C")::INT AS c1) ss; +\d+ collate_on_int + -- -- Clean up. Many of these table names will be re-used if the user is diff -Nru postgresql-10-10.16/src/test/regress/sql/event_trigger.sql postgresql-10-10.17/src/test/regress/sql/event_trigger.sql --- postgresql-10-10.16/src/test/regress/sql/event_trigger.sql 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/regress/sql/event_trigger.sql 2021-05-10 20:47:56.000000000 +0000 @@ -388,6 +388,17 @@ ALTER POLICY p1 ON event_trigger_test RENAME TO p2; DROP POLICY p2 ON event_trigger_test; +-- Check the object addresses of all the event triggers. +SELECT + e.evtname, + pg_describe_object('pg_event_trigger'::regclass, e.oid, 0) as descr, + b.type, b.object_names, b.object_args, + pg_identify_object(a.classid, a.objid, a.objsubid) as ident + FROM pg_event_trigger as e, + LATERAL pg_identify_object_as_address('pg_event_trigger'::regclass, e.oid, 0) as b, + LATERAL pg_get_object_address(b.type, b.object_names, b.object_args) as a + ORDER BY e.evtname; + DROP EVENT TRIGGER start_rls_command; DROP EVENT TRIGGER end_rls_command; DROP EVENT TRIGGER sql_drop_command; diff -Nru postgresql-10-10.16/src/test/regress/sql/identity.sql postgresql-10-10.17/src/test/regress/sql/identity.sql --- postgresql-10-10.16/src/test/regress/sql/identity.sql 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/regress/sql/identity.sql 2021-05-10 20:47:56.000000000 +0000 @@ -246,3 +246,12 @@ f3 WITH OPTIONS GENERATED ALWAYS AS IDENTITY ) FOR VALUES FROM ('2016-07-01') TO ('2016-08-01'); -- error DROP TABLE itest_parent; + +-- Identity columns must be NOT NULL (cf bug #16913) + +CREATE TABLE itest15 (id integer GENERATED ALWAYS AS IDENTITY NULL); -- fail +CREATE TABLE itest15 (id integer NULL GENERATED ALWAYS AS IDENTITY); -- fail +CREATE TABLE itest15 (id integer GENERATED ALWAYS AS IDENTITY NOT NULL); +DROP TABLE itest15; +CREATE TABLE itest15 (id integer NOT NULL GENERATED ALWAYS AS IDENTITY); +DROP TABLE itest15; diff -Nru postgresql-10-10.16/src/test/regress/sql/timestamp.sql postgresql-10-10.17/src/test/regress/sql/timestamp.sql --- postgresql-10-10.16/src/test/regress/sql/timestamp.sql 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/regress/sql/timestamp.sql 2021-05-10 20:47:56.000000000 +0000 @@ -235,5 +235,11 @@ SELECT '' AS to_char_11, to_char(d1, 'FMIYYY FMIYY FMIY FMI FMIW FMIDDD FMID') FROM TIMESTAMP_TBL; +-- Roman months, with upper and lower case. +SELECT i, + to_char(i * interval '1mon', 'rm'), + to_char(i * interval '1mon', 'RM') + FROM generate_series(-13, 13) i; + -- timestamp numeric fields constructor SELECT make_timestamp(2014,12,28,6,30,45.887); diff -Nru postgresql-10-10.16/src/test/regress/sql/update.sql postgresql-10-10.17/src/test/regress/sql/update.sql --- postgresql-10-10.16/src/test/regress/sql/update.sql 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/test/regress/sql/update.sql 2021-05-10 20:47:56.000000000 +0000 @@ -100,17 +100,17 @@ SELECT a, b, char_length(c) FROM update_test; -- Test ON CONFLICT DO UPDATE -INSERT INTO upsert_test VALUES(1, 'Boo'); +INSERT INTO upsert_test VALUES(1, 'Boo'), (3, 'Zoo'); -- uncorrelated sub-select: WITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test VALUES (1, 'Bar') ON CONFLICT(a) DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *; -- correlated sub-select: -INSERT INTO upsert_test VALUES (1, 'Baz') ON CONFLICT(a) +INSERT INTO upsert_test VALUES (1, 'Baz'), (3, 'Zaz') ON CONFLICT(a) DO UPDATE SET (b, a) = (SELECT b || ', Correlated', a from upsert_test i WHERE i.a = upsert_test.a) RETURNING *; -- correlated sub-select (EXCLUDED.* alias): -INSERT INTO upsert_test VALUES (1, 'Bat') ON CONFLICT(a) +INSERT INTO upsert_test VALUES (1, 'Bat'), (3, 'Zot') ON CONFLICT(a) DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a) RETURNING *; diff -Nru postgresql-10-10.16/src/tutorial/advanced.source postgresql-10-10.17/src/tutorial/advanced.source --- postgresql-10-10.16/src/tutorial/advanced.source 2021-02-08 21:59:29.000000000 +0000 +++ postgresql-10-10.17/src/tutorial/advanced.source 2021-05-10 20:47:56.000000000 +0000 @@ -23,7 +23,7 @@ CREATE TABLE cities ( name text, population float8, - altitude int -- (in ft) + elevation int -- (in ft) ); CREATE TABLE capitals ( @@ -42,17 +42,17 @@ SELECT * FROM capitals; -- You can find all cities, including capitals, that --- are located at an altitude of 500 ft or higher by: +-- are located at an elevation of 500 ft or higher by: -SELECT c.name, c.altitude +SELECT c.name, c.elevation FROM cities c -WHERE c.altitude > 500; +WHERE c.elevation > 500; -- To scan rows of the parent table only, use ONLY: -SELECT name, altitude +SELECT name, elevation FROM ONLY cities -WHERE altitude > 500; +WHERE elevation > 500; -- clean up (you must remove the children first)