Sync IvorySQL v5.3 with PostgreSQL 18.3#1199
Conversation
On the CREATE POLICY page, the description of per-command policies stated that SELECT policies are applied when an INSERT has an ON CONFLICT DO NOTHING clause. However, that is only the case if it includes an arbiter clause, so clarify that. While at it, also clarify the comment in the regression tests that cover this. Author: Dean Rasheed <dean.a.rasheed@gmail.com> Reviewed-by: Viktor Holmberg <v@viktorh.net> Discussion: https://postgr.es/m/CAEZATCXGwMQ+x00YY9XYG46T0kCajH=21QaYL9Xatz0dLKii+g@mail.gmail.com Backpatch-through: 14
On the INSERT page, mention that SELECT privileges are also required for any columns mentioned in the arbiter clause, including those referred to by the constraint, and clarify that this applies to all forms of ON CONFLICT, not just ON CONFLICT DO UPDATE. Author: Dean Rasheed <dean.a.rasheed@gmail.com> Reviewed-by: Viktor Holmberg <v@viktorh.net> Discussion: https://postgr.es/m/CAEZATCXGwMQ+x00YY9XYG46T0kCajH=21QaYL9Xatz0dLKii+g@mail.gmail.com Backpatch-through: 14
The buildfarm occasionally shows a variant row order in the output of this UPDATE ... RETURNING, implying that the preceding INSERT dropped one of the rows into some free space within the table rather than appending them all at the end. It's not entirely clear why that happens some times and not other times, but we have established that it's affected by concurrent activity in other databases of the cluster. In any case, the behavior is not wrong; the test is at fault for presuming that a seqscan will give deterministic row ordering. Add an ORDER BY atop the update to stop the buildfarm noise. The buildfarm seems to have shown this only in v18 and master branches, but just in case the cause is older, back-patch to all supported branches. Discussion: https://postgr.es/m/3866274.1770743162@sss.pgh.pa.us Backpatch-through: 14
The pg_stat_activity view shows information for aux processes, but the pg_stat_get_backend_wait_event() and pg_stat_get_backend_wait_event_type() functions did not. To fix, call AuxiliaryPidGetProc(pid) if BackendPidGetProc(pid) returns NULL, like we do in pg_stat_get_activity(). In version 17 and above, it's a little silly to use those functions when we already have the ProcNumber at hand, but it was necessary before v17 because the backend ID was different from ProcNumber. I have other plans for wait_event_info on master, so it doesn't seem worth applying a different fix on different versions now. Reviewed-by: Sami Imseih <samimseih@gmail.com> Reviewed-by: Chao Li <li.evan.chao@gmail.com> Reviewed-by: Kyotaro Horiguchi <horikyota.ntt@gmail.com> Discussion: https://www.postgresql.org/message-id/c0320e04-6e85-4c49-80c5-27cfb3a58108@iki.fi Backpatch-through: 14
If the variable's value is null, exec_stmt_return() missed filling in estate->rettype. This is a pretty old bug, but we'd managed not to notice because that value isn't consulted for a null result ... unless we have to cast it to a domain. That case led to a failure with "cache lookup failed for type 0". The correct way to assign the data type is known by exec_eval_datum. While we could copy-and-paste that logic, it seems like a better idea to just invoke exec_eval_datum, as the ROW case already does. Reported-by: Pavel Stehule <pavel.stehule@gmail.com> Author: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/CAFj8pRBT_ahexDf-zT-cyH8bMR_qcySKM8D5nv5MvTWPiatYGA@mail.gmail.com Backpatch-through: 14
It's currently only used in the server, but it was placed in src/port with the idea that it might be useful in client programs too. However, it will currently fail to link if used in a client program, because CHECK_FOR_INTERRUPTS() is not usable in client programs. Fix that by wrapping it in "#ifndef FRONTEND". Reviewed-by: Álvaro Herrera <alvherre@kurilemu.de> Discussion: https://www.postgresql.org/message-id/21cc7a48-99d9-4f69-9a3f-2c2de61ac8e5%40iki.fi Backpatch-through: 18
This log message was referring to conflicts, but it is about checksum failures. The log message improved in this commit should never show up, due to the fact that pgstat_prepare_report_checksum_failure() should always be called before pgstat_report_checksum_failures_in_db(), with a stats entry already created in the pgstats shared hash table. The three code paths able to report database-level checksum failures follow already this requirement. Oversight in b96d3c389755. Author: Wang Peng <215722532@qq.com> Discussion: https://postgr.es/m/tencent_9B6CD6D9D34AE28CDEADEC6188DB3BA1FE07@qq.com Backpatch-through: 18
The prior order caused spurious Valgrind errors. They're spurious because the ereport(ERROR) non-local exit discards the pointer in question. pg_mblen_cstr() ordered the checks correctly, but these other two did not. Back-patch to v14, like commit 1e7fe06c10c0a8da9dd6261a6be8d405dc17c728. Reviewed-by: Thomas Munro <thomas.munro@gmail.com> Discussion: https://postgr.es/m/20260214053821.fa.noahmisch@microsoft.com Backpatch-through: 14
Commit 1e7fe06c10c0a8da9dd6261a6be8d405dc17c728 changed pg_mbstrlen_with_len() to ereport(ERROR) if the input ends in an incomplete character. Most callers want that. text_substring() does not. It detoasts the most bytes it could possibly need to get the requested number of characters. For example, to extract up to 2 chars from UTF8, it needs to detoast 8 bytes. In a string of 3-byte UTF8 chars, 8 bytes spans 2 complete chars and 1 partial char. Fix this by replacing this pg_mbstrlen_with_len() call with a string traversal that differs by stopping upon finding as many chars as the substring could need. This also makes SUBSTRING() stop raising an encoding error if the incomplete char is past the end of the substring. This is consistent with the general philosophy of the above commit, which was to raise errors on a just-in-time basis. Before the above commit, SUBSTRING() never raised an encoding error. SUBSTRING() has long been detoasting enough for one more char than needed, because it did not distinguish exclusive and inclusive end position. For avoidance of doubt, stop detoasting extra. Back-patch to v14, like the above commit. For applications using SUBSTRING() on non-ASCII column values, consider applying this to your copy of any of the February 12, 2026 releases. Reported-by: SATŌ Kentarō <ranvis@gmail.com> Reviewed-by: Thomas Munro <thomas.munro@gmail.com> Bug: #19406 Discussion: https://postgr.es/m/19406-9867fddddd724fca@postgresql.org Backpatch-through: 14
The error message added in 379695d3cc70 referred to the public key being too long. This is confusing as it is in fact the session key included in a PGP message which is too long. This is harmless, but let's be precise about what is wrong. Per offline report. Reported-by: Zsolt Parragi <zsolt.parragi@percona.com> Backpatch-through: 14
'latest_page_number' is set to the correct value, according to
nextOffset, early at system startup. Contrary to the comment, it hence
should be set up correctly by the time we get to WAL replay.
This fixes a failure to replay WAL generated on older minor versions,
before commit 789d65364c (18.2, 17.8, 16.12, 15.16, 14.21). The
failure occurs after a truncation record has been replayed and looks
like this:
FATAL: could not access status of transaction 858112
DETAIL: Could not read from file "pg_multixact/offsets/000D" at offset 24576: read too few bytes.
CONTEXT: WAL redo at 3/2A3AB408 for MultiXact/CREATE_ID: 858111 offset 6695072 nmembers 5: 1048228 (sh) 1048271 (keysh) 1048316 (sh) 1048344 (keysh) 1048370 (sh)
Reported-by: Sebastian Webber <sebastian@swebber.me>
Reviewed-by: Andrey Borodin <x4mmm@yandex-team.ru>
Reviewed-by: Kirill Reshke <reshkekirill@gmail.com>
Discussion: https://www.postgresql.org/message-id/20260214090150.GC2297@p46.dedyn.io;lightning.p46.dedyn.io
Backpatch-through: 14-18
The receive function of hstore was not able to handle correctly duplicate key values when a new duplicate links to a NULL value, where a pfree() could be attempted on a NULL pointer, crashing due to a pointer dereference. This problem would happen for a COPY BINARY, when stacking values like that: aa => 5 aa => null The second key/value pair is discarded and pfree() calls are attempted on its key and its value, leading to a pointer dereference for the value part as the value is NULL. The first key/value pair takes priority when a duplicate is found. Per offline report. Reported-by: "Anemone" <vergissmeinnichtzh@gmail.com> Reported-by: "A1ex" <alex000young@gmail.com> Backpatch-through: 14
Various buildfarm members, having compilers like gcc 8.5 and 6.3, fail to deduce that text_substring() variable "E" is initialized if slice_size!=-1. This suppression approach quiets gcc 8.5; I did not reproduce the warning elsewhere. Back-patch to v14, like commit 9f4fd119b2cbb9a41ec0c19a8d6ec9b59b92c125. Reported-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/1157953.1771266105@sss.pgh.pa.us Backpatch-through: 14
Commit c67bef3f325 introduced this test helper function for use by src/test/regress/sql/encoding.sql, but its logic was incorrect. It confused an encoding ID for a boolean so it gave the wrong results for some inputs, and also forgot the usual return macro. The mistake didn't affect values actually used in the test, so there is no change in behavior. Also drop it and another missed function at the end of the test, for consistency. Backpatch-through: 14 Author: Zsolt Parragi <zsolt.parragi@percona.com>
Commit 4603903d294 unfortunately reset the volatility of these functions to STABLE whereas they had previously been set to IMMUTABLE. We can't force a catalog update in the stable release, although a pg_update would probably do the trick. A simpler fix, though, for affected users is probably a simple catalog surgery along the lines of: UPDATE pg_proc SET provolatile = 'i' WHERE oid in (3261,3262); Applied to 18 only. In master we are planning to get rid of the separate redeclarations for defaults in system_functions.sql. Bug: #19409 Reported-By: Lucio Chiessi <lucio.chiessi@trustly.com> Discussion: https://postgr.es/m/19409-e16cd2605e59a4af@postgresql.org
table_tuple_update's update_indexes argument hasn't been a boolean since commit 19d8e2308bc5. Backpatch-through: 16
Otherwise the message is not very clear. Backpatch-through: 18
When adjust_appendrel_attrs translates a Var referencing a parent relation into a Var referencing a child relation, it propagates varnullingrels from the parent Var to the translated Var. Previously, the code simply overwrote the translated Var's varnullingrels with those of the parent. This was incorrect because the translated Var might already possess nonempty varnullingrels. This happens, for example, when a LATERAL subquery within a UNION ALL references a Var from the nullable side of an outer join. In such cases, the translated Var correctly carries the outer join's relid in its varnullingrels. Overwriting these bits with the parent Var's set caused the planner to lose track of the fact that the Var could be nulled by that outer join. In the reported case, because the underlying column had a NOT NULL constraint, the planner incorrectly deduced that the Var could never be NULL and discarded essential IS NOT NULL filters. This led to incorrect query results where NULL rows were returned instead of being filtered out. To fix, use bms_add_members to merge the parent Var's varnullingrels into the translated Var's existing set, preserving both sources of nullability. Back-patch to v16. Although the reported case does not seem to cause problems in v16, leaving incorrect varnullingrels in the tree seems like a trap for the unwary. Bug: #19412 Reported-by: Sergey Shinderuk <s.shinderuk@postgrespro.ru> Author: Richard Guo <guofenglinux@gmail.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/19412-1d0318089b86859e@postgresql.org Backpatch-through: 16
If the 'bounds' array needs to be expanded, because the input contains more trigrams than the initial guess, the code didn't return the reallocated array correctly to the caller. That could lead to a crash in the rare case that the input string becomes longer when it's lower-cased. The only known instance of that is when an ICU locale is used with certain single-byte encodings. This was an oversight in commit 00896ddaf41f. Author: Zsolt Parragi <zsolt.parragi@percona.com> Backpatch-through: 18
As usual, the release notes for other branches will be made by cutting these down, but put them up for community review first.
If a CREATE TABLE statement defined a constraint whose name is identical to the name generated for a NOT NULL constraint, we'd throw an (unnecessary) unique key violation error on pg_constraint_conrelid_contypid_conname_index: this can easily be avoided by choosing a different name for the NOT NULL constraint. Fix by passing the constraint names already created by AddRelationNewConstraints() to AddRelationNotNullConstraints(), so that the latter can avoid name collisions with them. Bug: #19393 Author: Laurenz Albe <laurenz.albe@cybertec.at> Reported-by: Hüseyin Demir <huseyin.d3r@gmail.com> Backpatch-through: 18 Discussion: https://postgr.es/m/19393-6a82427485a744cf@postgresql.org
Commit 8d9a97e0bb6d anticipated this change:
1 function with incompatible sub-type changes:
[C] 'function List* AddRelationNotNullConstraints(Relation, List*, List*)' has some sub-type changes:
parameter 4 of type 'List*' was added
Discussion: https://postgr.es/m/19393-6a82427485a744cf@postgresql.org
Report: https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&dt=2026-02-21%2011%3A27%3A03
Backpatch-through: 18 only
Source-Git-URL: https://git.postgresql.org/git/pgtranslation/messages.git Source-Git-Hash: 8edd578f1856e2ac142bb3bb7090ec0a58cd8ac6
Follow upstream commits to update test files and fix bugs.
Modified 12 files across oracle_test, contrib/postgres_fdw, and pl_isql directories:
- 8d9a97e0bb6 "Avoid name collision with NOT NULL constraints"
* src/oracle_test/regress/sql/create_table.sql
* src/oracle_test/regress/expected/create_table.out
- 6e045e1a6e3 "Fix SUBSTRING() for toasted multibyte characters"
* src/oracle_test/regress/sql/encoding.sql
* src/oracle_test/regress/expected/encoding.out
- ccc9be800dd "Fix test_valid_server_encoding helper function"
* src/oracle_test/regress/sql/encoding.sql
* src/oracle_test/regress/expected/encoding.out
* src/oracle_test/regress/regress.c
- ed57c207c39 "Fix computation of varnullingrels when translating appendrel Var"
* src/oracle_test/regress/sql/join.sql
* src/oracle_test/regress/expected/join.out
- 946b653b7ab "Further stabilize a postgres_fdw test case"
* contrib/postgres_fdw/sql/ivy_postgres_fdw.sql
* contrib/postgres_fdw/expected/ivy_postgres_fdw.out
- ce4b7e3a105 "Fix plpgsql's handling of return simple_record_variable"
* src/pl/plisql/src/pl_exec.c
* src/pl/plisql/src/sql/plisql_domain.sql
* src/pl/plisql/src/expected/plisql_domain.out
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review infoConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro 📒 Files selected for processing (3)
👮 Files not reviewed due to content moderation or server errors (1)
📝 WalkthroughWalkthroughUpdated project version to 18.3 and IvorySQL to 5.3; added Release 18.3 notes; fixed constraint-name collision handling for NOT NULL constraints (API change), adjusted multixact replay behavior, refined encoding/substring logic, merged nulling-rel bits in appendrel translation, assorted contrib fixes, many translation updates, and added/updated tests. Changes
Sequence Diagram(s)sequenceDiagram
participant DefineRelation as DefineRelation
participant AddNewCons as AddRelationNewConstraints
participant AddNNCons as AddRelationNotNullConstraints
participant HeapCatalog as CatalogHeap
DefineRelation->>AddNewCons: create/check constraints, collect connames
AddNewCons->>AddNNCons: pass constraints, old_notnulls, connames (existing_constraints)
AddNNCons->>HeapCatalog: generate not-null constraint names avoiding existing_constraints
AddNNCons-->>AddNewCons: return new not-null constraints
AddNewCons-->>DefineRelation: finalize constraint definitions
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Tip Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs). Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 13
🧹 Nitpick comments (3)
src/interfaces/libpq/po/fr.po (2)
13-16: Project-Id-Version may need update.The
Project-Id-Versionheader still references "PostgreSQL 17" while this PR synchronizes with PostgreSQL 18.3. Consider updating this to reflect the current version.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/interfaces/libpq/po/fr.po` around lines 13 - 16, Update the PO file header so the Project-Id-Version reflects the synchronized PostgreSQL release; change the "Project-Id-Version: PostgreSQL 17" header to "Project-Id-Version: PostgreSQL 18.3" (edit the Project-Id-Version header line in src/interfaces/libpq/po/fr.po).
200-427: Multiple new OAuth messages lack French translations.Several new OAuth/OpenID-related message strings have empty
msgstrvalues, meaning they will display in English for French users. Key untranslated messages include:
- "failed to parse OpenID discovery document" (line 201)
- "failed to fetch OpenID discovery document" (line 279)
- "failed to obtain access token" (line 295)
- OAuth discovery URI validation messages (lines 312, 317, 322, 327)
- "server's error message contained an embedded NULL" (line 332)
- OAuth flow error messages (lines 372, 383, 400, 405, 410, 415)
While the application will gracefully fall back to English, completing these translations would maintain a consistent French user experience. Consider tracking this as a follow-up task if translations cannot be completed in this PR.
Would you like me to open an issue to track the completion of these French translations?
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/interfaces/libpq/po/fr.po` around lines 200 - 427, Several new OAuth/OpenID msgid entries in src/interfaces/libpq/po/fr.po are missing French msgstr translations (e.g. "failed to parse OpenID discovery document", "failed to fetch OpenID discovery document", "failed to obtain access token", the various "OAuth discovery URI \"%s\" ..." validation messages, "server's error message contained an embedded NULL, and was discarded", and other OAuth flow messages). Locate those msgid entries in fr.po and supply appropriate French translations in the corresponding msgstr fields (preserve any %s/%m format specifiers and punctuation/quoting), ensure translations are not marked fuzzy unless provisional, and keep gettext syntax intact; if you cannot complete all translations in this PR, add a follow-up issue referencing these specific msgid strings so they can be translated later.doc/src/sgml/release-18.sgml (1)
152-154: Correct function signatures when using regprocedure namesLine 153 hard-codes
pg_procOIDs. The OIDs 3261 and 3262 are verified as correct in the catalog, but using symbolic function names is safer. However, the suggested refactoring omits theboolparameter from the function signatures—both functions actually take(json, bool)and(jsonb, bool)respectively:♻️ Corrected SQL snippet
-UPDATE pg_catalog.pg_proc SET provolatile = 'i' WHERE oid IN ('3261','3262'); +UPDATE pg_catalog.pg_proc +SET provolatile = 'i' +WHERE oid IN ( + 'pg_catalog.json_strip_nulls(json, bool)'::regprocedure, + 'pg_catalog.jsonb_strip_nulls(jsonb, bool)'::regprocedure +);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@doc/src/sgml/release-18.sgml` around lines 152 - 154, Replace the hard-coded pg_proc OIDs in the UPDATE with regprocedure-style function names including their full signatures so the correct rows are matched; specifically, change the WHERE clause that uses oid IN ('3261','3262') to reference the functions by name with explicit parameter types (e.g., function_name(json, boolean) and other_function_name(jsonb, boolean) as regprocedure literals) so the signatures include the required bool parameter and avoid relying on OID values.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/backend/utils/mb/mbutils.c`:
- Around line 1088-1089: The check "if (unlikely(mbstr + length > end))
report_invalid_encoding_db(...)" performs pointer arithmetic with a potentially
out-of-range pointer; change it to compute available bytes and compare the
untrusted length against that: compute ssize_t avail = end - mbstr (or use the
same pattern as pg_mblen_with_len), then replace the condition with "if
(unlikely((size_t)length > (size_t)avail))" and call
report_invalid_encoding_db(mbstr, length, avail) accordingly; update any
variable names to match mbstr, length, end and keep the behavior of
report_invalid_encoding_db the same.
In `@src/bin/pg_basebackup/po/fr.po`:
- Around line 1965-1966: The French translation for msgid "no subscriber data
directory specified" is incorrect; update the msgstr to accurately reflect "data
directory" rather than "connection string" by replacing the current msgstr with
a correct French phrase such as "aucun répertoire de données de l'abonné
spécifié" (or "aucun répertoire de données d'abonné spécifié") for the msgid "no
subscriber data directory specified".
In `@src/bin/pg_dump/po/fr.po`:
- Around line 2045-2046: The French translation mistakenly changes the CLI flag
name: update the msgstr that corresponds to msgid " --statistics
dump the statistics\n" to use the exact flag "--statistics" (e.g., "
--statistics sauvegarde les statistiques\n") instead of
"--with-statistics", and make the same correction for the other identical
translation instance; ensure you only change the option token while keeping the
French description text "sauvegarde les statistiques" intact so the msgid/msgstr
flag names match exactly.
- Around line 2659-2660: The French translation for the msgid "You might not be
able to restore the dump without using --disable-triggers or temporarily
dropping the constraints." is inverted; update the msgstr for that exact msgid
to reflect the warning (e.g., start with "Il se peut que vous ne puissiez pas
restaurer la sauvegarde sans utiliser --disable-triggers ou sans supprimer
temporairement les contraintes." or equivalent) so the French conveys the
possibility of being unable to restore without those steps.
- Around line 1871-1872: The translated string for msgid "
--exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n"
incorrectly drops the “data” scope by translating it as "ne sauvegarde pas les
tables indiquées"; update the msgstr to explicitly indicate excluding table data
(e.g., mention "les données" or "les données des tables") so it matches the
original intent — change the current msgstr to a French phrase that conveys "do
NOT dump data for the specified table(s)" rather than "do not dump the tables."
- Around line 2765-2766: The translated msgstr for the msgid "
--filter=FILENAME exclude databases based on expressions in
FILENAME\n" is incorrect — it references "-f, --file" instead of the original
"--filter=FILENAME"; update the msgstr to mirror the source option token and
meaning (e.g. use "--filter=FICHIER" and a French translation like "exclut les
bases de données selon des expressions dans FICHIER") so the help text matches
the original msgid.
- Around line 2594-2598: Add a French translation for the non-obsolete message
by filling msgstr for the msgid "failed to get data for sequence \"%s\"; user
may lack SELECT privilege on the sequence or the sequence may have been
concurrently dropped" (preserve the c-format %s and escaped quotes), ensuring
the translated string is non-empty and correctly localized in French while
keeping formatting and punctuation consistent with similar entries.
In `@src/bin/pg_dump/po/ja.po`:
- Around line 1361-1364: The Japanese translation for the msgid "unexpected
extra results during COPY of table \"%s\"" incorrectly uses "ファイル" (file);
update the msgstr to use "テーブル" (table) and preserve the %s placeholder and
surrounding quotes/escaping, e.g. replace the current msgstr for that msgid so
it reads something equivalent to "テーブル\"%s\"をCOPY中に想定していない余分な結果がありました", ensuring
encoding and quoting match the PO file conventions.
- Around line 663-666: The Japanese translation in the PO entry for msgid
"directory \"%s\" is not empty" is inverted and incorrectly quoted; update the
msgstr for that entry (the one currently set to "ディレクトリ\"%s\"は空です") to correctly
convey "is not empty", e.g. change it to "ディレクトリ \"%s\" は空ではありません" and ensure
the internal quotes and spacing/escaping around %s match the PO file style.
- Around line 2430-2438: The Japanese translations for the two diagnostic
messages incorrectly reference pg_cast.castmethod; update the msgstr strings
corresponding to the msgid "bogus value in pg_transform.trffromsql field" and
"bogus value in pg_transform.trftosql field" to mention the correct catalog
field names pg_transform.trffromsql and pg_transform.trftosql respectively
(replace the current "pg_cast.castmethod フィールド..." with "pg_transform.trffromsql
フィールド..." and "pg_transform.trftosql フィールド..." in the two msgstr entries).
In `@src/bin/pg_resetwal/po/fr.po`:
- Around line 676-679: The French translation's help string mistakenly changes
the option from "-f, --force" to "-i, --interactive"; update the msgstr to use
the correct flag text "-f, --force" and the matching French description (e.g.,
"force la mise à jour, y compris un arrêt pas propre ou si les valeurs de
pg_control doivent être devinées") so the translated help matches the original
option names; locate the incorrect text referencing "-i, --interactive" and
replace it with "-f, --force" in the msgstr.
- Around line 767-770: The translated msgstr contains an escaped
backslash-newline sequence ("\\n") that will render a literal "\n" instead of a
line break; edit the msgstr for the msgid shown so that the sequence is a proper
newline escape (i.e. replace the double-escaped "\\n" with a single "\n" or
split into separate quoted lines) in the msgstr entry to restore the intended
line break.
In `@src/interfaces/libpq/po/fr.po`:
- Around line 46-70: Update the fuzzy French translations so their meanings
match the English msgids: replace msgstr for msgid "field \"%s\" must be a
string" (currently "le champ « %s » est manquant") with a French string meaning
"must be a string" (e.g., "le champ « %s » doit être une chaîne"), change msgstr
for msgid "field \"%s\" must be an array of strings" (currently "...tableau
d'objets") to indicate "array of strings" (e.g., "le champ « %s » doit être un
tableau de chaînes"), and fix msgstr for msgid "field \"%s\" has unexpected
type" (currently "le champ « %s » est dupliqué") to convey unexpected type
(e.g., "le champ « %s » a un type inattendu"); ensure to remove the fuzzy flag
after correcting the translations.
---
Nitpick comments:
In `@doc/src/sgml/release-18.sgml`:
- Around line 152-154: Replace the hard-coded pg_proc OIDs in the UPDATE with
regprocedure-style function names including their full signatures so the correct
rows are matched; specifically, change the WHERE clause that uses oid IN
('3261','3262') to reference the functions by name with explicit parameter types
(e.g., function_name(json, boolean) and other_function_name(jsonb, boolean) as
regprocedure literals) so the signatures include the required bool parameter and
avoid relying on OID values.
In `@src/interfaces/libpq/po/fr.po`:
- Around line 13-16: Update the PO file header so the Project-Id-Version
reflects the synchronized PostgreSQL release; change the "Project-Id-Version:
PostgreSQL 17" header to "Project-Id-Version: PostgreSQL 18.3" (edit the
Project-Id-Version header line in src/interfaces/libpq/po/fr.po).
- Around line 200-427: Several new OAuth/OpenID msgid entries in
src/interfaces/libpq/po/fr.po are missing French msgstr translations (e.g.
"failed to parse OpenID discovery document", "failed to fetch OpenID discovery
document", "failed to obtain access token", the various "OAuth discovery URI
\"%s\" ..." validation messages, "server's error message contained an embedded
NULL, and was discarded", and other OAuth flow messages). Locate those msgid
entries in fr.po and supply appropriate French translations in the corresponding
msgstr fields (preserve any %s/%m format specifiers and punctuation/quoting),
ensure translations are not marked fuzzy unless provisional, and keep gettext
syntax intact; if you cannot complete all translations in this PR, add a
follow-up issue referencing these specific msgid strings so they can be
translated later.
ℹ️ Review info
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (11)
contrib/pgcrypto/expected/pgp-pubkey-session.outis excluded by!**/*.outcontrib/postgres_fdw/expected/ivy_postgres_fdw.outis excluded by!**/*.outcontrib/postgres_fdw/expected/postgres_fdw.outis excluded by!**/*.outsrc/oracle_test/regress/expected/create_table.outis excluded by!**/*.outsrc/oracle_test/regress/expected/encoding.outis excluded by!**/*.outsrc/oracle_test/regress/expected/join.outis excluded by!**/*.outsrc/pl/plisql/src/expected/plisql_domain.outis excluded by!**/*.outsrc/pl/plpgsql/src/expected/plpgsql_domain.outis excluded by!**/*.outsrc/test/regress/expected/create_table.outis excluded by!**/*.outsrc/test/regress/expected/encoding.outis excluded by!**/*.outsrc/test/regress/expected/join.outis excluded by!**/*.out
📒 Files selected for processing (52)
.abi-compliance-historyconfigureconfigure.accontrib/hstore/hstore_io.ccontrib/pg_trgm/trgm_op.ccontrib/pgcrypto/px.ccontrib/postgres_fdw/sql/ivy_postgres_fdw.sqlcontrib/postgres_fdw/sql/postgres_fdw.sqldoc/src/sgml/ref/create_policy.sgmldoc/src/sgml/ref/insert.sgmldoc/src/sgml/release-18.sgmlmeson.buildsrc/backend/access/transam/multixact.csrc/backend/catalog/heap.csrc/backend/catalog/system_functions.sqlsrc/backend/commands/tablecmds.csrc/backend/optimizer/util/appendinfo.csrc/backend/po/de.posrc/backend/po/ja.posrc/backend/po/ka.posrc/backend/po/ru.posrc/backend/replication/syncrep.csrc/backend/utils/activity/pgstat_database.csrc/backend/utils/adt/pgstatfuncs.csrc/backend/utils/adt/varlena.csrc/backend/utils/mb/mbutils.csrc/bin/pg_basebackup/po/fr.posrc/bin/pg_combinebackup/po/fr.posrc/bin/pg_combinebackup/po/ka.posrc/bin/pg_dump/po/fr.posrc/bin/pg_dump/po/ja.posrc/bin/pg_resetwal/po/fr.posrc/bin/pg_rewind/po/ru.posrc/bin/psql/po/fr.posrc/include/access/slru.hsrc/include/access/tableam.hsrc/include/catalog/heap.hsrc/interfaces/libpq/po/fr.posrc/oracle_test/regress/regress.csrc/oracle_test/regress/sql/create_table.sqlsrc/oracle_test/regress/sql/encoding.sqlsrc/oracle_test/regress/sql/join.sqlsrc/pl/plisql/src/pl_exec.csrc/pl/plisql/src/sql/plisql_domain.sqlsrc/pl/plpgsql/src/pl_exec.csrc/pl/plpgsql/src/po/ru.posrc/pl/plpgsql/src/sql/plpgsql_domain.sqlsrc/port/pg_numa.csrc/test/regress/regress.csrc/test/regress/sql/create_table.sqlsrc/test/regress/sql/encoding.sqlsrc/test/regress/sql/join.sql
💤 Files with no reviewable changes (1)
- src/backend/access/transam/multixact.c
👮 Files not reviewed due to content moderation or server errors (1)
- configure
| if (unlikely(mbstr + length > end)) | ||
| report_invalid_encoding_db(mbstr, length, end - mbstr); |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cat -n src/backend/utils/mb/mbutils.c | sed -n '1080,1100p'Repository: IvorySQL/IvorySQL
Length of output: 646
🏁 Script executed:
rg -n 'mbstr.*\+.*length.*>' src/backend/utils/mb/mbutils.c | head -20Repository: IvorySQL/IvorySQL
Length of output: 102
🏁 Script executed:
rg -n '\+.*length.*>' src/backend/utils/mb/ --type c | grep -v mbutils.cRepository: IvorySQL/IvorySQL
Length of output: 43
🏁 Script executed:
rg -n 'mbstr.*>' src/backend/utils/mb/mbutils.c | head -20Repository: IvorySQL/IvorySQL
Length of output: 175
🏁 Script executed:
# Check the report_invalid_encoding_db function signature to understand type expectations
rg -n 'report_invalid_encoding_db' src/backend/utils/mb/mbutils.c -A5 | head -30Repository: IvorySQL/IvorySQL
Length of output: 1132
🏁 Script executed:
# Check the function definition to understand the implementation and context
sed -n '1857,1880p' src/backend/utils/mb/mbutils.cRepository: IvorySQL/IvorySQL
Length of output: 748
🏁 Script executed:
# Check how end - mbstr is used elsewhere in the file
rg -n 'end - mbstr' src/backend/utils/mb/mbutils.cRepository: IvorySQL/IvorySQL
Length of output: 180
🏁 Script executed:
# Let's check what types are involved and how the suggested fix compares
rg -n 'ptrdiff_t' src/backend/utils/mb/mbutils.c | head -10Repository: IvorySQL/IvorySQL
Length of output: 43
🏁 Script executed:
# Check if there are other patterns in the file that use ptr+offset comparisons
rg -n 'str.*\+.*>|ptr.*\+.*>' src/backend/utils/mb/mbutils.cRepository: IvorySQL/IvorySQL
Length of output: 102
🏁 Script executed:
# Let's look at the complete pg_mblen_range function and related functions to understand the full context
sed -n '1070,1120p' src/backend/utils/mb/mbutils.cRepository: IvorySQL/IvorySQL
Length of output: 1357
🏁 Script executed:
# Let's verify how other similar functions handle this pattern
rg -n 'pg_mblen|length.*limit|length.*>' src/backend/utils/mb/mbutils.c | head -30Repository: IvorySQL/IvorySQL
Length of output: 1078
🏁 Script executed:
# Let's check the C standard implications by looking at how length is obtained
# and verify the safety of the comparison
rg -n 'mblen\(' src/backend/utils/mb/mbutils.c | head -5Repository: IvorySQL/IvorySQL
Length of output: 320
Compare length against available bytes instead of adding to pointer.
Line 1088 compares mbstr + length > end; if length exceeds remaining bytes, that pointer arithmetic violates the C standard by computing a pointer outside the valid range of the object. The related function pg_mblen_with_len (line 1112) already demonstrates the safer pattern: comparing length > limit directly. Rewrite to compute available bytes first (end - mbstr) and compare the untrusted length value against it, avoiding the problematic pointer arithmetic.
Suggested fix
int
pg_mblen_range(const char *mbstr, const char *end)
{
int length = pg_wchar_table[DatabaseEncoding->encoding].mblen((const unsigned char *) mbstr);
+ ptrdiff_t avail = end - mbstr;
Assert(end > mbstr);
- if (unlikely(mbstr + length > end))
- report_invalid_encoding_db(mbstr, length, end - mbstr);
+ if (unlikely((ptrdiff_t) length > avail))
+ report_invalid_encoding_db(mbstr, length, (int) avail);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/backend/utils/mb/mbutils.c` around lines 1088 - 1089, The check "if
(unlikely(mbstr + length > end)) report_invalid_encoding_db(...)" performs
pointer arithmetic with a potentially out-of-range pointer; change it to compute
available bytes and compare the untrusted length against that: compute ssize_t
avail = end - mbstr (or use the same pattern as pg_mblen_with_len), then replace
the condition with "if (unlikely((size_t)length > (size_t)avail))" and call
report_invalid_encoding_db(mbstr, length, avail) accordingly; update any
variable names to match mbstr, length, end and keep the behavior of
report_invalid_encoding_db the same.
| msgid "no subscriber data directory specified" | ||
| msgstr "aucune chaîne de connexion de l'abonné indiquée" |
There was a problem hiding this comment.
Fix incorrect French meaning for subscriber data directory message.
At Line 1966, the translation refers to a connection string, but the source message is about a missing data directory.
Suggested translation fix
msgid "no subscriber data directory specified"
-msgstr "aucune chaîne de connexion de l'abonné indiquée"
+msgstr "aucun répertoire de données de l'abonné indiqué"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| msgid "no subscriber data directory specified" | |
| msgstr "aucune chaîne de connexion de l'abonné indiquée" | |
| msgid "no subscriber data directory specified" | |
| msgstr "aucun répertoire de données de l'abonné indiqué" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/bin/pg_basebackup/po/fr.po` around lines 1965 - 1966, The French
translation for msgid "no subscriber data directory specified" is incorrect;
update the msgstr to accurately reflect "data directory" rather than "connection
string" by replacing the current msgstr with a correct French phrase such as
"aucun répertoire de données de l'abonné spécifié" (or "aucun répertoire de
données d'abonné spécifié") for the msgid "no subscriber data directory
specified".
| msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" | ||
| msgstr " --exclude-table-data=MOTIF ne sauvegarde pas les tables indiquées\n" |
There was a problem hiding this comment.
--exclude-table-data translation drops the “data” scope.
The source says to exclude data for specified tables; current French text says to exclude the tables themselves.
Suggested fix
-msgstr " --exclude-table-data=MOTIF ne sauvegarde pas les tables indiquées\n"
+msgstr " --exclude-table-data=MOTIF ne sauvegarde pas les données des tables indiquées\n"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" | |
| msgstr " --exclude-table-data=MOTIF ne sauvegarde pas les tables indiquées\n" | |
| msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" | |
| msgstr " --exclude-table-data=MOTIF ne sauvegarde pas les données des tables indiquées\n" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/bin/pg_dump/po/fr.po` around lines 1871 - 1872, The translated string for
msgid " --exclude-table-data=PATTERN do NOT dump data for the specified
table(s)\n" incorrectly drops the “data” scope by translating it as "ne
sauvegarde pas les tables indiquées"; update the msgstr to explicitly indicate
excluding table data (e.g., mention "les données" or "les données des tables")
so it matches the original intent — change the current msgstr to a French phrase
that conveys "do NOT dump data for the specified table(s)" rather than "do not
dump the tables."
| msgid " --statistics dump the statistics\n" | ||
| msgstr " --with-statistics sauvegarde les statistiques\n" |
There was a problem hiding this comment.
--statistics was mistranslated as a different option name.
The French help now shows --with-statistics, which does not match the actual CLI flag in msgid and can mislead users.
Suggested fix
-msgstr " --with-statistics sauvegarde les statistiques\n"
+msgstr " --statistics sauvegarde les statistiques\n"
...
-msgstr " --with-statistics restaure les statistiques\n"
+msgstr " --statistics restaure les statistiques\n"Also applies to: 3106-3107
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/bin/pg_dump/po/fr.po` around lines 2045 - 2046, The French translation
mistakenly changes the CLI flag name: update the msgstr that corresponds to
msgid " --statistics dump the statistics\n" to use the exact
flag "--statistics" (e.g., " --statistics sauvegarde les
statistiques\n") instead of "--with-statistics", and make the same correction
for the other identical translation instance; ensure you only change the option
token while keeping the French description text "sauvegarde les statistiques"
intact so the msgid/msgstr flag names match exactly.
| #: pg_dump.c:19109 | ||
| #, c-format | ||
| msgid "failed to get data for sequence \"%s\"; user may lack SELECT privilege on the sequence or the sequence may have been concurrently dropped" | ||
| msgstr "" | ||
|
|
There was a problem hiding this comment.
New active message has an empty translation.
msgstr is empty for a non-obsolete entry, so users will see fallback English in French locale.
Suggested fix
msgid "failed to get data for sequence \"%s\"; user may lack SELECT privilege on the sequence or the sequence may have been concurrently dropped"
-msgstr ""
+msgstr "échec de la récupération des données de la séquence « %s » ; l'utilisateur peut ne pas avoir le privilège SELECT sur la séquence, ou la séquence a pu être supprimée concurremment"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| #: pg_dump.c:19109 | |
| #, c-format | |
| msgid "failed to get data for sequence \"%s\"; user may lack SELECT privilege on the sequence or the sequence may have been concurrently dropped" | |
| msgstr "" | |
| #: pg_dump.c:19109 | |
| #, c-format | |
| msgid "failed to get data for sequence \"%s\"; user may lack SELECT privilege on the sequence or the sequence may have been concurrently dropped" | |
| msgstr "échec de la récupération des données de la séquence « %s » ; l'utilisateur peut ne pas avoir le privilège SELECT sur la séquence, ou la séquence a pu être supprimée concurremment" | |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/bin/pg_dump/po/fr.po` around lines 2594 - 2598, Add a French translation
for the non-obsolete message by filling msgstr for the msgid "failed to get data
for sequence \"%s\"; user may lack SELECT privilege on the sequence or the
sequence may have been concurrently dropped" (preserve the c-format %s and
escaped quotes), ensuring the translated string is non-empty and correctly
localized in French while keeping formatting and punctuation consistent with
similar entries.
| #: pg_backup_db.c:460 pg_dump.c:2473 | ||
| #, c-format | ||
| msgid "unexpected extra results during COPY of table \"%s\"" | ||
| msgstr "ファイル\"%s\"をCOPY中に想定していない余分な結果がありました" |
There was a problem hiding this comment.
Use “table” instead of “file” in COPY error translation.
Line 1364 translates a table COPY error as a file COPY error, which is misleading.
Suggested fix
msgid "unexpected extra results during COPY of table \"%s\""
-msgstr "ファイル\"%s\"をCOPY中に想定していない余分な結果がありました"
+msgstr "テーブル\"%s\"のCOPY中に想定していない余分な結果がありました"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| #: pg_backup_db.c:460 pg_dump.c:2473 | |
| #, c-format | |
| msgid "unexpected extra results during COPY of table \"%s\"" | |
| msgstr "ファイル\"%s\"をCOPY中に想定していない余分な結果がありました" | |
| #: pg_backup_db.c:460 pg_dump.c:2473 | |
| #, c-format | |
| msgid "unexpected extra results during COPY of table \"%s\"" | |
| msgstr "テーブル\"%s\"のCOPY中に想定していない余分な結果がありました" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/bin/pg_dump/po/ja.po` around lines 1361 - 1364, The Japanese translation
for the msgid "unexpected extra results during COPY of table \"%s\"" incorrectly
uses "ファイル" (file); update the msgstr to use "テーブル" (table) and preserve the %s
placeholder and surrounding quotes/escaping, e.g. replace the current msgstr for
that msgid so it reads something equivalent to
"テーブル\"%s\"をCOPY中に想定していない余分な結果がありました", ensuring encoding and quoting match the
PO file conventions.
| #: pg_dump.c:13867 | ||
| #, c-format | ||
| msgid "bogus value in pg_transform.trffromsql field" | ||
| msgstr "pg_cast.castmethod フィールドの値がおかしいです" | ||
|
|
||
| #: pg_dump.c:13887 | ||
| #: pg_dump.c:13888 | ||
| #, c-format | ||
| msgid "bogus value in pg_transform.trftosql field" | ||
| msgstr "pg_cast.castmethod フィールドの値がおかしいです" |
There was a problem hiding this comment.
Correct catalog field names in pg_transform diagnostic translations.
Lines 2433 and 2438 currently mention pg_cast.castmethod, but the source messages are for pg_transform.trffromsql and pg_transform.trftosql.
Suggested fix
msgid "bogus value in pg_transform.trffromsql field"
-msgstr "pg_cast.castmethod フィールドの値がおかしいです"
+msgstr "pg_transform.trffromsql フィールドの値がおかしいです"
msgid "bogus value in pg_transform.trftosql field"
-msgstr "pg_cast.castmethod フィールドの値がおかしいです"
+msgstr "pg_transform.trftosql フィールドの値がおかしいです"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| #: pg_dump.c:13867 | |
| #, c-format | |
| msgid "bogus value in pg_transform.trffromsql field" | |
| msgstr "pg_cast.castmethod フィールドの値がおかしいです" | |
| #: pg_dump.c:13887 | |
| #: pg_dump.c:13888 | |
| #, c-format | |
| msgid "bogus value in pg_transform.trftosql field" | |
| msgstr "pg_cast.castmethod フィールドの値がおかしいです" | |
| #: pg_dump.c:13867 | |
| #, c-format | |
| msgid "bogus value in pg_transform.trffromsql field" | |
| msgstr "pg_transform.trffromsql フィールドの値がおかしいです" | |
| #: pg_dump.c:13888 | |
| #, c-format | |
| msgid "bogus value in pg_transform.trftosql field" | |
| msgstr "pg_transform.trftosql フィールドの値がおかしいです" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/bin/pg_dump/po/ja.po` around lines 2430 - 2438, The Japanese translations
for the two diagnostic messages incorrectly reference pg_cast.castmethod; update
the msgstr strings corresponding to the msgid "bogus value in
pg_transform.trffromsql field" and "bogus value in pg_transform.trftosql field"
to mention the correct catalog field names pg_transform.trffromsql and
pg_transform.trftosql respectively (replace the current "pg_cast.castmethod
フィールド..." with "pg_transform.trffromsql フィールド..." and "pg_transform.trftosql
フィールド..." in the two msgstr entries).
| " -f, --force force update to be done even after unclean shutdown or\n" | ||
| " if pg_control values had to be guessed\n" | ||
| msgstr " -i, --interactive force la mise à jour, y compris un arrêt pas propre ou si les valeurs de pg_control doivent être devinées\n" | ||
|
|
There was a problem hiding this comment.
Incorrect flag in translated help text (--force translated as --interactive).
Line 678 changes the French help to -i, --interactive, which does not match the source option -f, --force and can misdirect users.
💡 Suggested fix
msgid ""
" -f, --force force update to be done even after unclean shutdown or\n"
" if pg_control values had to be guessed\n"
-msgstr " -i, --interactive force la mise à jour, y compris un arrêt pas propre ou si les valeurs de pg_control doivent être devinées\n"
+msgstr ""
+" -f, --force force la mise à jour même après un arrêt non propre\n"
+" ou si les valeurs de pg_control ont dû être devinées\n"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| " -f, --force force update to be done even after unclean shutdown or\n" | |
| " if pg_control values had to be guessed\n" | |
| msgstr " -i, --interactive force la mise à jour, y compris un arrêt pas propre ou si les valeurs de pg_control doivent être devinées\n" | |
| msgid "" | |
| " -f, --force force update to be done even after unclean shutdown or\n" | |
| " if pg_control values had to be guessed\n" | |
| msgstr "" | |
| " -f, --force force la mise à jour même après un arrêt non propre\n" | |
| " ou si les valeurs de pg_control ont dû être devinées\n" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/bin/pg_resetwal/po/fr.po` around lines 676 - 679, The French
translation's help string mistakenly changes the option from "-f, --force" to
"-i, --interactive"; update the msgstr to use the correct flag text "-f,
--force" and the matching French description (e.g., "force la mise à jour, y
compris un arrêt pas propre ou si les valeurs de pg_control doivent être
devinées") so the translated help matches the original option names; locate the
incorrect text referencing "-i, --interactive" and replace it with "-f, --force"
in the msgstr.
| msgid " --char-signedness=OPTION set char signedness to \"signed\" or \"unsigned\"\n" | ||
| msgstr "" | ||
| " --char-signedness=OPTION configure la propriété signedness d'un\\n\n" | ||
| " caractère à \"signed\" ou \"unsigned\"\n" |
There was a problem hiding this comment.
Accidental escaped newline sequence in translated string.
Line 769 includes \\n in the msgstr body, which will print a literal \n instead of a line break.
💡 Suggested fix
msgid " --char-signedness=OPTION set char signedness to \"signed\" or \"unsigned\"\n"
msgstr ""
-" --char-signedness=OPTION configure la propriété signedness d'un\\n\n"
+" --char-signedness=OPTION configure la propriété signedness d'un\n"
" caractère à \"signed\" ou \"unsigned\"\n"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| msgid " --char-signedness=OPTION set char signedness to \"signed\" or \"unsigned\"\n" | |
| msgstr "" | |
| " --char-signedness=OPTION configure la propriété signedness d'un\\n\n" | |
| " caractère à \"signed\" ou \"unsigned\"\n" | |
| msgid " --char-signedness=OPTION set char signedness to \"signed\" or \"unsigned\"\n" | |
| msgstr "" | |
| " --char-signedness=OPTION configure la propriété signedness d'un\n" | |
| " caractère à \"signed\" ou \"unsigned\"\n" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/bin/pg_resetwal/po/fr.po` around lines 767 - 770, The translated msgstr
contains an escaped backslash-newline sequence ("\\n") that will render a
literal "\n" instead of a line break; edit the msgstr for the msgid shown so
that the sequence is a proper newline escape (i.e. replace the double-escaped
"\\n" with a single "\n" or split into separate quoted lines) in the msgstr
entry to restore the intended line break.
| #: ../libpq-oauth/oauth-curl.c:485 fe-auth-oauth.c:209 fe-auth-oauth.c:271 | ||
| #: fe-auth-oauth.c:333 | ||
| #, fuzzy, c-format | ||
| #| msgid "field \"%s\" is missing" | ||
| msgid "field \"%s\" must be a string" | ||
| msgstr "le champ « %s » est manquant" | ||
|
|
||
| #: ../libpq-oauth/oauth-curl.c:489 | ||
| #, fuzzy, c-format | ||
| #| msgid "\"%s\" is not a number" | ||
| msgid "field \"%s\" must be a number" | ||
| msgstr "« %s » n'est pas un nombre" | ||
|
|
||
| #: ../libpq-oauth/oauth-curl.c:493 | ||
| #, fuzzy, c-format | ||
| #| msgid "argument of %s must be an array of objects" | ||
| msgid "field \"%s\" must be an array of strings" | ||
| msgstr "l'argument de %s doit être un tableau d'objets" | ||
|
|
||
| #: ../libpq-oauth/oauth-curl.c:498 | ||
| #, fuzzy, c-format | ||
| #| msgid "field \"%s\" is duplicated" | ||
| msgid "field \"%s\" has unexpected type" | ||
| msgstr "le champ « %s » est dupliqué" | ||
|
|
There was a problem hiding this comment.
Fuzzy translations have incorrect meanings.
These fuzzy-marked translations have semantically incorrect French text that doesn't match the English source:
| Line | English | Current French | Issue |
|---|---|---|---|
| 50-51 | "field "%s" must be a string" | "le champ « %s » est manquant" | Says "is missing" instead of "must be a string" |
| 62-63 | "field "%s" must be an array of strings" | "...tableau d'objets" | Says "array of objects" instead of "array of strings" |
| 68-69 | "field "%s" has unexpected type" | "le champ « %s » est dupliqué" | Says "is duplicated" instead of "has unexpected type" |
These should be corrected before release to avoid confusing French-speaking users when debugging OAuth-related issues.
Suggested corrections
#: ../libpq-oauth/oauth-curl.c:485 fe-auth-oauth.c:209 fe-auth-oauth.c:271
#: fe-auth-oauth.c:333
-#, fuzzy, c-format
-#| msgid "field \"%s\" is missing"
+#, c-format
msgid "field \"%s\" must be a string"
-msgstr "le champ « %s » est manquant"
+msgstr "le champ « %s » doit être une chaîne"
#: ../libpq-oauth/oauth-curl.c:493
-#, fuzzy, c-format
-#| msgid "argument of %s must be an array of objects"
+#, c-format
msgid "field \"%s\" must be an array of strings"
-msgstr "l'argument de %s doit être un tableau d'objets"
+msgstr "le champ « %s » doit être un tableau de chaînes"
#: ../libpq-oauth/oauth-curl.c:498
-#, fuzzy, c-format
-#| msgid "field \"%s\" is duplicated"
+#, c-format
msgid "field \"%s\" has unexpected type"
-msgstr "le champ « %s » est dupliqué"
+msgstr "le champ « %s » a un type inattendu"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| #: ../libpq-oauth/oauth-curl.c:485 fe-auth-oauth.c:209 fe-auth-oauth.c:271 | |
| #: fe-auth-oauth.c:333 | |
| #, fuzzy, c-format | |
| #| msgid "field \"%s\" is missing" | |
| msgid "field \"%s\" must be a string" | |
| msgstr "le champ « %s » est manquant" | |
| #: ../libpq-oauth/oauth-curl.c:489 | |
| #, fuzzy, c-format | |
| #| msgid "\"%s\" is not a number" | |
| msgid "field \"%s\" must be a number" | |
| msgstr "« %s » n'est pas un nombre" | |
| #: ../libpq-oauth/oauth-curl.c:493 | |
| #, fuzzy, c-format | |
| #| msgid "argument of %s must be an array of objects" | |
| msgid "field \"%s\" must be an array of strings" | |
| msgstr "l'argument de %s doit être un tableau d'objets" | |
| #: ../libpq-oauth/oauth-curl.c:498 | |
| #, fuzzy, c-format | |
| #| msgid "field \"%s\" is duplicated" | |
| msgid "field \"%s\" has unexpected type" | |
| msgstr "le champ « %s » est dupliqué" | |
| #: ../libpq-oauth/oauth-curl.c:485 fe-auth-oauth.c:209 fe-auth-oauth.c:271 | |
| #: fe-auth-oauth.c:333 | |
| #, c-format | |
| msgid "field \"%s\" must be a string" | |
| msgstr "le champ « %s » doit être une chaîne" | |
| #: ../libpq-oauth/oauth-curl.c:489 | |
| #, fuzzy, c-format | |
| #| msgid "\"%s\" is not a number" | |
| msgid "field \"%s\" must be a number" | |
| msgstr "« %s » n'est pas un nombre" | |
| #: ../libpq-oauth/oauth-curl.c:493 | |
| #, c-format | |
| msgid "field \"%s\" must be an array of strings" | |
| msgstr "le champ « %s » doit être un tableau de chaînes" | |
| #: ../libpq-oauth/oauth-curl.c:498 | |
| #, c-format | |
| msgid "field \"%s\" has unexpected type" | |
| msgstr "le champ « %s » a un type inattendu" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/interfaces/libpq/po/fr.po` around lines 46 - 70, Update the fuzzy French
translations so their meanings match the English msgids: replace msgstr for
msgid "field \"%s\" must be a string" (currently "le champ « %s » est manquant")
with a French string meaning "must be a string" (e.g., "le champ « %s » doit
être une chaîne"), change msgstr for msgid "field \"%s\" must be an array of
strings" (currently "...tableau d'objets") to indicate "array of strings" (e.g.,
"le champ « %s » doit être un tableau de chaînes"), and fix msgstr for msgid
"field \"%s\" has unexpected type" (currently "le champ « %s » est dupliqué") to
convey unexpected type (e.g., "le champ « %s » a un type inattendu"); ensure to
remove the fuzzy flag after correcting the translations.
This PR synchronizes IvorySQL v5.3 with upstream PostgreSQL 18.3 release
This pull request synchronizes IvorySQL IVORY_REL_5_STABLE with PostgreSQL REL_18_STABLE branch over the period 2026-02-11 to 2026-02-26, incorporating a total of 25 commits:
All integrated code has been thoroughly validated and successfully passes four core regression test suites(check-world; oracle-check-world; oracle-pg-check; oracle-check), ensuring functional correctness and stability after the sync.
Summary by CodeRabbit
Bug Fixes
Documentation
Tests
Localization