diff --git a/advocacy_docs/pg_extensions/extensionrefs.json b/advocacy_docs/pg_extensions/extensionrefs.json
index da3e2633aa8..9ccdd30e4ce 100644
--- a/advocacy_docs/pg_extensions/extensionrefs.json
+++ b/advocacy_docs/pg_extensions/extensionrefs.json
@@ -89,6 +89,7 @@
"autocluster": "https://www.enterprisedb.com/docs/pg_extensions/advanced_storage_pack/",
"bdr_3.x": "https://www.enterprisedb.com/docs/pgd/3.7/bdr/",
"bdr_4.x": "https://www.enterprisedb.com/docs/pgd/4/bdr/",
+ "edb_job_scheduler": "https://www.enterprisedb.com/docs/pg_extensions/edb_job_scheduler/",
"dbms_job": "https://www.enterprisedb.com/docs/epas/latest/reference/oracle_compatibility_reference/epas_compat_bip_guide/03_built-in_packages/05_dbms_job/",
"dbms_scheduler": "https://www.enterprisedb.com/docs/epas/latest/reference/oracle_compatibility_reference/epas_compat_bip_guide/03_built-in_packages/15_dbms_scheduler/",
"edb_cloneschema": "https://www.enterprisedb.com/docs/epas/latest/database_administration/14_edb_clone_schema/",
@@ -99,6 +100,7 @@
"edb_query_advisor": "https://www.enterprisedb.com/docs/pg_extensions/query_advisor/",
"edb_wait_states": "https://www.enterprisedb.com/docs/pg_extensions/wait_states/",
"edbspl": "https://www.enterprisedb.com/docs/epas/latest/application_programming/epas_compat_spl/02_spl_programs/",
+ "spl_check": "https://www.enterprisedb.com/docs/pg_extensions/spl_check/",
"parallel_clone": "undefined",
"pglogical_3.x": "https://www.enterprisedb.com/docs/pgd/3.7/pglogical/",
"refdata": "https://www.enterprisedb.com/docs/pg_extensions/advanced_storage_pack/",
diff --git a/advocacy_docs/pg_extensions/index.mdx b/advocacy_docs/pg_extensions/index.mdx
index 2ffdf5dae95..01e25c5a547 100644
--- a/advocacy_docs/pg_extensions/index.mdx
+++ b/advocacy_docs/pg_extensions/index.mdx
@@ -136,11 +136,13 @@ Categories of extensions:
EDB Postgres Advanced Server extensions |
dbms_job | | – | – | ✓ | – | – | – | – | – |
dbms_scheduler | | – | – | ✓ | – | – | – | – | ✓ |
+edb_job_scheduler | | – | – | ✓ | – | – | – | – | ✓ |
edb_cloneschema | | – | – | ✓ | – | – | – | – | – |
edb_dblink_libpq | | – | – | ✓ | – | ✓ | – | – | ✓ |
edb_dblink_oci | Yes | – | – | ✓ | – | ✓ | – | – | ✓ |
edb_dbo | Yes | – | – | ✓ | – | ✓ | – | – | ✓ |
edbspl | Yes | – | – | ✓ | – | ✓ | – | – | ✓ |
+spl_check | | – | – | ✓ | – | ✓ | – | – | ✓ |
parallel_clone | | – | – | ✓ | – | – | – | – | – |
EDB Postgres Distributed extensions |
bdr 3.x | | ✓ | ✓ | ✓ | – | – | – | – | – |
diff --git a/product_docs/docs/biganimal/release/index.mdx b/product_docs/docs/biganimal/release/index.mdx
index 8cfc4d2c84f..49a6617d086 100644
--- a/product_docs/docs/biganimal/release/index.mdx
+++ b/product_docs/docs/biganimal/release/index.mdx
@@ -9,6 +9,7 @@ directoryDefaults:
navigation:
- release_notes
+ - known_issues
- free_trial
- overview
- planning
diff --git a/product_docs/docs/biganimal/release/known_issues/index.mdx b/product_docs/docs/biganimal/release/known_issues/index.mdx
new file mode 100644
index 00000000000..b2c56283d93
--- /dev/null
+++ b/product_docs/docs/biganimal/release/known_issues/index.mdx
@@ -0,0 +1,8 @@
+---
+title: Known Issues and Limitations
+navTitle: Known Issues
+---
+
+This section lists known issues and/or limitations in the current release of BigAnimal and the Postgres deployments it supports:
+
+* [Known Issues with Distributed High Availability](known_issues_dha)
\ No newline at end of file
diff --git a/product_docs/docs/biganimal/release/known_issues/known_issues_dha.mdx b/product_docs/docs/biganimal/release/known_issues/known_issues_dha.mdx
new file mode 100644
index 00000000000..e9183280f77
--- /dev/null
+++ b/product_docs/docs/biganimal/release/known_issues/known_issues_dha.mdx
@@ -0,0 +1,54 @@
+---
+title: Known Issues with Distributed High Availability/PGD
+navTitle: Distributed High Availability/PGD Known Issues
+deepToC: true
+---
+
+These are currently known issues in EDB Postgres Distributed (PGD) on BigAnimal as deployed in Distributed High Availability clusters. These known issues are tracked in our ticketing system and are expected to be resolved in a future release.
+
+## Management/Administration
+
+### Deleting a PGD Data Group may not fully reconcile
+When deleting a PGD Data Group, the target group resources will be physically deleted, but in some cases we have observed that the PGD nodes may not be completely partitioned from the remaining PGD Groups. It’s recommended to avoid use of this feature until this is fixed and removed from the known issues list.
+
+### Adjusting PGD cluster architecture may not fully reconcile
+In rare cases, we have observed that changing the node architecture of an existing PGD cluster may not complete. If a change has not taken effect in 1 hour, reach out to Support.
+
+### PGD Cluster may fail to create due to Azure SKU issue
+In some cases, although a regional quota check may have passed initially when the PGD cluster is created, it may fail if an SKU critical for the Witness Nodes is unavailable across three availability zones.
+To check for this issue at the time of a region quota check, run:
+
+```
+biganimal-csp-preflight --onboard -i d2s_v3 -x eha
+```
+
+If you have already encountered this issue, reach out to Azure support:
+
+```plaintext
+We're going to be provisioning a number of instances of in and need to be able to provision these instances in all AZs, can you please ensure that subscription is able to provision this VM type in all AZs of . Thank you!
+```
+
+## Replication
+
+### A PGD replication slot may fail to transition cleanly from disconnect to catch up
+As part of fault injection testing with PGD on BigAnimal, you may decide to delete VMs. Your cluster will recover if you do so, as expected. However, if you are testing in a Bring Your Own Account (BYOA) deployment, in some cases, as the cluster is recovering, a replication slot may remain disconnected. This will persist for a few hours until the replication slot recovers automatically.
+
+### Replication speed is slow during a large data migration
+During a large data migration, when migrating to a PGD cluster, you may experience a replication rate of 20 MBps.
+
+### PGD leadership change on healthy cluster
+PGD clusters that are in a healthy state may experience a change in PGD node leadership, potentially resulting in failover. No intervention is needed as a new leader will be appointed.
+
+## Migration
+
+### Connection interruption disrupts migration via Migration Toolkit
+When using Migration Toolkit (MTK), if the session is interrupted, the migration will error out. To resolve, you will need to restart the migration from the beginning. The recommended path to avoid this is to migrate on a per-table basis when using MTK so that if this issue does occur, you retry the migration with a table rather than the whole database.
+
+### Ensure loaderCount is less than 1 in Migration ToolKit
+When using Migration Toolkit to migrate a PGD cluster, if you have adjusted the loaderCount to be greater than 1 in order to speed up migration, you may see an error in the MTK CLI that says “pgsql_tmp/': No such file or directory.” If you see this, reduce your loaderCount to 1 in MTK.
+
+## Tools
+
+### Verify-settings command via PGD CLI provides false negative for PGD on BigAnimal clusters
+The command verify-settings in the PGD CLI will display that a “node is unreachable” when used with PGD on BigAnimal clusters.
+
diff --git a/product_docs/docs/tpa/23/rel_notes/index.mdx b/product_docs/docs/tpa/23/rel_notes/index.mdx
index 79dc35bf98d..3cc85b2a2dc 100644
--- a/product_docs/docs/tpa/23/rel_notes/index.mdx
+++ b/product_docs/docs/tpa/23/rel_notes/index.mdx
@@ -2,6 +2,7 @@
title: Trusted Postgres Architect release notes
navTitle: "Release notes"
navigation:
+ - tpa_23.31_rel_notes
- tpa_23.30_rel_notes
- tpa_23.29_rel_notes
- tpa_23.28_rel_notes
@@ -28,6 +29,7 @@ The Trusted Postgres Architect documentation describes the latest version of Tru
| Version | Release date |
| ---------------------------- | ------------ |
+| [23.31](tpa_23.31_rel_notes) | 19 Mar 2024 |
| [23.30](tpa_23.30_rel_notes) | 19 Mar 2024 |
| [23.29](tpa_23.29_rel_notes) | 15 Feb 2024 |
| [23.28](tpa_23.28_rel_notes) | 23 Jan 2024 |
diff --git a/product_docs/docs/tpa/23/rel_notes/tpa_23.31_rel_notes.mdx b/product_docs/docs/tpa/23/rel_notes/tpa_23.31_rel_notes.mdx
new file mode 100644
index 00000000000..8cbf8e9ff2c
--- /dev/null
+++ b/product_docs/docs/tpa/23/rel_notes/tpa_23.31_rel_notes.mdx
@@ -0,0 +1,12 @@
+---
+title: Trusted Postgres Architect 23.31 release notes
+navTitle: "Version 23.31"
+---
+
+Released: 19 Mar 2024
+
+New features, enhancements, bug fixes, and other changes in Trusted Postgres Architect 23.31 include the following:
+
+| Type | Description |
+| ---- |------------ |
+| Bug Fix | Fixed a critical bug whereby deployments could fail due to a syntax error.|
\ No newline at end of file
diff --git a/scripts/source/extensions-table.js b/scripts/source/extensions-table.js
deleted file mode 100644
index 68a6a54ddbd..00000000000
--- a/scripts/source/extensions-table.js
+++ /dev/null
@@ -1,311 +0,0 @@
-// retrieve current supported extensions spreadsheet, generate a table from it, write to product_docs/docs/pg_extensions/release/index.mdx
-// heavily adapted from https://developers.google.com/sheets/api/quickstart/nodejs
-
-const path = require("path");
-const process = require("process");
-const { google } = require("googleapis");
-const { auth } = require("google-auth-library");
-const h = require("hastscript");
-const toHtml = require("hast-util-to-html");
-const remarkParse = require("remark-parse");
-const unified = require("unified");
-const mdx = require("remark-mdx");
-const remarkFrontmatter = require("remark-frontmatter");
-const remarkStringify = require("remark-stringify");
-const admonitions = require("remark-admonitions");
-const visit = require("unist-util-visit");
-const { read, write } = require("to-vfile");
-const rehypeFormat = require("rehype-format");
-
-const SCOPES = ["https://www.googleapis.com/auth/spreadsheets.readonly"];
-const SCRIPT_ROOT = path.dirname(process.argv[1]);
-const SOURCE_SPREADSHEET = "1GXzzVYT6CULGgGcyp0VtBfOtbxuWxkOU2pRYW42W4pM";
-const TARGET_FILE = path.resolve(
- SCRIPT_ROOT,
- "../../advocacy_docs/pg_extensions/index.mdx",
-);
-const WITNESS_COMMENTS = [
- `This table was generated automatically from ${SOURCE_SPREADSHEET}`,
- `on ${new Date().toISOString()}.`,
- `Do not edit it directly without first removing this attribute!`,
-];
-
-/**
- * Load credentials for calling APIs.
- *
- */
-async function authorize() {
- try {
- let client = auth.fromJSON(
- JSON.parse(process.env["EXTENSION_SOURCE_TOKEN"]),
- );
- client.scopes = SCOPES;
- return client;
- } catch (e) {
- console.error(
- "Ensure valid client token is stored in EXTENSION_SOURCE_TOKEN!",
- );
- }
- return null;
-}
-
-const isCellEmpty = (cell) =>
- cell.formattedValue === undefined ||
- cell.formattedValue === "" ||
- cell.formattedValue === null;
-const isRowEmpty = (row) => row.values.every(isCellEmpty);
-
-const isHeader = (row) =>
- !isRowEmpty(row) &&
- row.values.every((cell) => isCellEmpty(cell) || cell.textFormat.bold);
-
-const isAllWhite = (colorStyle) => {
- return (
- colorStyle?.rgbColor?.red == 1 &&
- colorStyle?.rgbColor?.green == 1 &&
- colorStyle?.rgbColor?.blue == 1
- );
-};
-const formatColor = (colorStyle) => {
- return `rgb(${(colorStyle.rgbColor?.red || 1) * 255}, ${
- (colorStyle.rgbColor?.red || 1) * 255
- }, ${(colorStyle.rgbColor?.blue || 1) * 255})`;
-};
-
-const formatBorderStyle = (sheetStyle) => {
- sheetStyle = sheetStyle || { style: "none" };
- let style = [];
- if (sheetStyle.style) style.push(sheetStyle.style.toLowerCase());
- if (sheetStyle.width) style.push(sheetStyle.width + "px");
-
- if (
- sheetStyle.colorStyle &&
- Object.keys(sheetStyle.colorStyle).length &&
- !isAllWhite(sheetStyle.colorStyle)
- )
- style.color = formatColor(sheetStyle.colorStyle);
-
- return style.join(" ");
-};
-
-const formatCell = (cell, tag) => {
- const alignMappings = { CENTER: "center", RIGHT: "right" };
- const valignMappings = { MIDDLE: "middle", TOP: "top" };
- let style = {};
- let value = cell.formattedValue?.replace(/^ +/, (m) =>
- m.replace(" ", "\u00A0"),
- );
- if (value === "TRUE") value = h("span", { style: { color: "green" } }, ["✔"]);
- else if (value === "FALSE") value = h("span", ["–"]);
-
- if (cell.textFormat?.bold) style["font-weight"] = "bold";
- if (alignMappings[cell.align])
- style["text-align"] = alignMappings[cell.align];
- if (valignMappings[cell.valign])
- style["vertical-align"] = valignMappings[cell.valign];
- style["border-left"] = formatBorderStyle(cell.borders?.left);
- style["border-right"] = formatBorderStyle(cell.borders?.right);
- style["border-top"] = formatBorderStyle(cell.borders?.top);
- style["border-bottom"] = formatBorderStyle(cell.borders?.bottom);
- style["padding-left"] = (cell.padding?.left || 0) + "px";
- style["padding-right"] = (cell.padding?.right || 0) + "px";
- style["padding-top"] = (cell.padding?.top || 0) + "px";
- style["padding-bottom"] = (cell.padding?.bottom || 0) + "px";
- if (cell.backgroundColor && !isAllWhite(cell.backgroundColor))
- style["background-color"] = formatColor(cell.backgroundColor);
- return h(
- tag,
- {
- rowspan: cell.rowspan,
- colspan: cell.colspan,
- style,
- },
- value ? [value] : [],
- );
-};
-
-/**
- * Grabs data from the Doc Preview sheet
- * @see https://docs.google.com/spreadsheets/d/1GXzzVYT6CULGgGcyp0VtBfOtbxuWxkOU2pRYW42W4pM/edit#gid=1884264748
- * @param {GoogleAuth.JSONClient>} auth The authenticated Google client.
- */
-async function buildTable(auth) {
- const sheets = google.sheets({ version: "v4", auth });
- const sheet = await sheets.spreadsheets.get({
- spreadsheetId: SOURCE_SPREADSHEET,
- ranges: ["Doc Preview"],
- includeGridData: true,
- });
- const merges = sheet.data.sheets[0].merges;
- const columnMetadata = sheet.data.sheets[0].data[0].columnMetadata;
- let rows = sheet.data.sheets[0].data[0].rowData;
- for (let i = 0, row = rows[i]; i < rows.length; ++i, row = rows[i]) {
- row.values = row.values || [];
- row.values = row.values
- .map((cell, j) => {
- const merge = merges.find(
- (m) =>
- m.startRowIndex <= i &&
- m.endRowIndex > i &&
- m.startColumnIndex <= j &&
- m.endColumnIndex > j,
- );
- if (merge) {
- if (merge.startRowIndex === i && merge.startColumnIndex === j)
- return {
- ...cell,
- rowspan: merge.endRowIndex - merge.startRowIndex,
- colspan: merge.endColumnIndex - merge.startColumnIndex,
- };
- else return null;
- }
- return cell;
- })
- .filter((cell, j) => cell !== null && !columnMetadata[j].hiddenByUser)
- .map((cell) => {
- return {
- formattedValue: cell.formattedValue,
- rowspan: cell.rowspan,
- colspan: cell.colspan,
- textFormat: cell.effectiveFormat?.textFormat,
- align: cell.effectiveFormat?.horizontalAlignment,
- valign: cell.effectiveFormat?.verticalAlignment,
- borders: cell.effectiveFormat?.borders,
- padding: cell.effectiveFormat?.padding,
- backgroundColor: cell.effectiveFormat?.backgroundColorStyle,
- };
- });
- }
-
- let currentTable = [];
- let tables = [];
- const addTable = () => {
- if (!currentTable.length) return;
-
- let headers = currentTable.splice(
- 0,
- currentTable.findIndex((row) => !isHeader(row)) || currentTable.length,
- );
-
- if (!headers.length) return;
- let sectionHeader = headers.splice(0, 1)[0];
-
- const table = h(
- "table",
- {
- "data-source": WITNESS_COMMENTS.join(" "),
- "data-section": sectionHeader
- ? sectionHeader.values.map((cell) => cell.formattedValue).join(" ")
- : "",
- },
- [
- h(
- "thead",
- headers.map((row) =>
- h(
- "tr",
- row.values.map((cell) => formatCell(cell, "th")),
- ),
- ),
- ),
- h(
- "tbody",
- currentTable.map((row) =>
- h(
- "tr",
- row.values.map((cell) => formatCell(cell, "td")),
- ),
- ),
- ),
- ],
- );
-
- tables.push(table);
- currentTable = [];
- };
- for (let row of rows) {
- // blank row starts new table
- if (isRowEmpty(row)) {
- addTable();
- } else {
- currentTable.push(row);
- }
- }
- addTable();
-
- const formatter = rehypeFormat();
- return tables.flatMap((table) => {
- formatter(table);
- let nodes = [];
- if (table.properties.dataSection)
- nodes.push({
- type: "heading",
- depth: 2,
- children: [{ type: "text", value: table.properties.dataSection }],
- });
- nodes.push({ type: "jsx", value: toHtml(table) });
- return nodes;
- });
-}
-
-async function updateTable() {
- console.log("authorizing access to source spreadsheet");
- const auth = await authorize();
- console.log("converting table");
- const newTables = await buildTable(auth);
-
- const replaceTable = function () {
- return (tree) => {
- let replaced = false;
- visit(tree, "jsx", (node, index, parent) => {
- if (!/ {
- if (parent.children[index - 1]?.type === "heading") {
- parent.children.splice(index - 1, 1);
- return -1;
- }
- return 0;
- };
-
- if (!replaced) {
- replaced = true;
- parent.children.splice(index, 1, ...newTables);
- return [
- visit.SKIP,
- index + newTables.length + removePrecedingHeading(),
- ];
- }
-
- node.value = "";
- return [visit.SKIP, index + 1 + removePrecedingHeading()];
- });
- };
- };
-
- const processor = unified()
- .use(remarkParse)
- .use(remarkStringify, { emphasis: "*", bullet: "-", fences: true })
- .use(admonitions, {
- tag: "!!!",
- icons: "none",
- infima: true,
- customTypes: {
- seealso: "note",
- hint: "tip",
- interactive: "interactive",
- },
- })
- .use(mdx)
- .use(remarkFrontmatter)
- .use(replaceTable);
-
- console.log("rewriting extensions table");
- const input = await read(TARGET_FILE);
- let result = await processor.process(input);
-
- write(result);
-}
-
-updateTable().catch(console.error);
diff --git a/scripts/source/package-lock.json b/scripts/source/package-lock.json
index 0b6eb5a5e6d..b50e8fe9a22 100644
--- a/scripts/source/package-lock.json
+++ b/scripts/source/package-lock.json
@@ -1614,12 +1614,12 @@
}
},
"node_modules/remark-admonitions": {
- "version": "1.3.2",
- "resolved": "git+ssh://git@github.com/josh-heyer/remark-admonitions.git#f787317ee2405185473199c651ee491313afb83b",
+ "version": "1.4.2",
+ "resolved": "git+ssh://git@github.com/josh-heyer/remark-admonitions.git#c57f82f3c5f21eeaf3c045ca111d294f13caab71",
"license": "MIT",
"dependencies": {
"rehype-parse": "^6.0.2 || ^7.0.1",
- "unified": "^8.4.2 || ^9.2.0",
+ "unified": "^9.2.2",
"unist-util-visit": "^2.0.3"
}
},
@@ -3208,11 +3208,11 @@
}
},
"remark-admonitions": {
- "version": "git+ssh://git@github.com/josh-heyer/remark-admonitions.git#f787317ee2405185473199c651ee491313afb83b",
+ "version": "git+ssh://git@github.com/josh-heyer/remark-admonitions.git#c57f82f3c5f21eeaf3c045ca111d294f13caab71",
"from": "remark-admonitions@github:josh-heyer/remark-admonitions",
"requires": {
"rehype-parse": "^6.0.2 || ^7.0.1",
- "unified": "^8.4.2 || ^9.2.0",
+ "unified": "^9.2.2",
"unist-util-visit": "^2.0.3"
}
},
diff --git a/scripts/source/package.json b/scripts/source/package.json
index fcee57c7b6d..134e1efb66d 100644
--- a/scripts/source/package.json
+++ b/scripts/source/package.json
@@ -13,8 +13,6 @@
"dependencies": {
"arg": "^5.0.2",
"globby": "^12.0.1",
- "google-auth-library": "^8.8.0",
- "googleapis": "^105.0.0",
"hast-util-to-html": "^7.1.3",
"hastscript": "^6.0.0",
"is-absolute-url": "^3.0.3",
diff --git a/src/pages/index.js b/src/pages/index.js
index 52dc7d282a6..3a1f3fe62a9 100644
--- a/src/pages/index.js
+++ b/src/pages/index.js
@@ -199,6 +199,10 @@ const Page = () => {
PG Failover Slots
+
+ EDB SPL Check
+
+
EDB SQL Patch